Added: Analysis panel which shows the calculated frequency response of the filters for the selected device and channel.

Improved: GUIs of GraphicEQ and Copy command can now be resized
Improved: GraphicEQ GUI can now be zoomed separately in X and Y direction using mouse wheel on rulers. Also now shows values at mouse position.
Fixed: Original APO was not released when E-APO was shutting down, leading to a memory leak.
This commit is contained in:
jthedering committed 2015-11-07 19:00:49 +00:00
1 parent 04d22adb07
commit 0895d84055
49 files changed
+2228 -267

No files matched your search

+14 -1
View File
@@ -17,6 +17,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "Editor/widgets/ResizeCorner.h"
#include "helpers/ChannelHelper.h"
#include "CopyFilterGUIForm.h"
#include "CopyFilterGUI.h"
@@ -24,7 +25,7 @@
using namespace std;
CopyFilterGUI::CopyFilterGUI(CopyFilter* filter) :
CopyFilterGUI::CopyFilterGUI(CopyFilter* filter, FilterTable* filterTable) :
ui(new Ui::CopyFilterGUI)
{
ui->setupUi(this);
@@ -35,6 +36,18 @@ CopyFilterGUI::CopyFilterGUI(CopyFilter* filter) :
ui->form->load(filter->getAssignments());
ResizeCorner* cornerWidget = new ResizeCorner(filterTable,
QSize(0, 50), QSize(0, INT_MAX),
[this]() {
return QSize(0, ui->scrollArea->height());
},
[this](QSize size) {
ui->scrollArea->setMinimumHeight(size.height());
}, ui->scrollArea);
cornerWidget->setCursor(Qt::SizeVerCursor);
cornerWidget->setAutoFillBackground(true);
ui->scrollArea->setCornerWidget(cornerWidget);
connect(scene, SIGNAL(updateModel()), this, SIGNAL(updateModel()));
connect(scene, SIGNAL(updateChannels()), this, SIGNAL(updateChannels()));
+2 -1
View File
@@ -22,6 +22,7 @@
#include "filters/CopyFilter.h"
#include "Editor/IFilterGUI.h"
#include "CopyFilterGUIScene.h"
#include "Editor/FilterTable.h"
namespace Ui {
class CopyFilterGUI;
@@ -32,7 +33,7 @@ class CopyFilterGUI : public IFilterGUI
Q_OBJECT
public:
explicit CopyFilterGUI(CopyFilter* filter);
explicit CopyFilterGUI(CopyFilter* filter, FilterTable* filterTable);
~CopyFilterGUI();
void configureChannels(std::vector<std::wstring>& channelNames) override;
+12 -3
View File
@@ -51,7 +51,7 @@
<bool>false</bool>
</property>
<property name="documentMode">
<bool>true</bool>
<bool>false</bool>
</property>
<widget class="QWidget" name="tab">
<attribute name="icon">
@@ -79,6 +79,9 @@
</property>
<item>
<widget class="QGraphicsView" name="graphicsView">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
@@ -121,6 +124,12 @@
</property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
@@ -129,8 +138,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>366</width>
<height>92</height>
<width>348</width>
<height>88</height>
</rect>
</property>
</widget>
+6 -1
View File
@@ -26,6 +26,11 @@ CopyFilterGUIFactory::CopyFilterGUIFactory()
{
}
void CopyFilterGUIFactory::initialize(FilterTable* filterTable)
{
this->filterTable = filterTable;
}
QList<FilterTemplate> CopyFilterGUIFactory::createFilterTemplates()
{
QList<FilterTemplate> list;
@@ -44,7 +49,7 @@ IFilterGUI* CopyFilterGUIFactory::createFilterGUI(QString& command, QString& par
if(!filters.empty())
{
CopyFilter* filter = (CopyFilter*)filters[0];
result = new CopyFilterGUI(filter);
result = new CopyFilterGUI(filter, filterTable);
}
for(IFilter* f : filters)
+5
View File
@@ -28,6 +28,11 @@ class CopyFilterGUIFactory : public IFilterGUIFactory
public:
CopyFilterGUIFactory();
void initialize(FilterTable* filterTable) override;
QList<FilterTemplate> createFilterTemplates() override;
IFilterGUI* createFilterGUI(QString& command, QString& parameters) override;
private:
FilterTable* filterTable;
};
+19 -9
View File
@@ -23,6 +23,8 @@
#include <QTextStream>
#include "helpers/GainIterator.h"
#include "Editor/widgets/ResizeCorner.h"
#include "Editor/FilterTable.h"
#include "GraphicEQFilterGUIView.h"
#include "GraphicEQFilterGUI.h"
#include "ui_GraphicEQFilterGUI.h"
@@ -31,19 +33,29 @@ using namespace std;
QRegularExpression GraphicEQFilterGUI::numberRegEx("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?");
GraphicEQFilterGUI::GraphicEQFilterGUI(GraphicEQFilter* filter, QString configPath) :
GraphicEQFilterGUI::GraphicEQFilterGUI(GraphicEQFilter* filter, QString configPath, FilterTable* filterTable) :
ui(new Ui::GraphicEQFilterGUI), configPath(configPath)
{
ui->setupUi(this);
setFixedHeight(150);
scene = new GraphicEQFilterGUIScene(ui->graphicsView);
ui->graphicsView->setScene(scene);
ResizeCorner* cornerWidget = new ResizeCorner(filterTable,
QSize(0, ui->graphicsView->minimumHeight()), QSize(10000 - ui->tableWidget->minimumWidth(), INT_MAX),
[this]() {
return QSize(10000 - ui->tableWidget->width(), ui->graphicsView->height());
},
[this](QSize size) {
ui->tableWidget->setFixedWidth(10000 - size.width());
ui->graphicsView->setFixedHeight(size.height());
}, ui->graphicsView);
ui->graphicsView->setCornerWidget(cornerWidget);
ui->graphicsView->setFixedHeight(150);
ui->toolBar->addAction(ui->actionImport);
ui->toolBar->addAction(ui->actionExport);
ui->toolBar->addAction(ui->actionMirrorResponse);
ui->toolBar->addAction(ui->actionInvertResponse);
ui->toolBar->addAction(ui->actionNormalizeResponse);
ui->toolBar->addAction(ui->actionResetResponse);
@@ -69,7 +81,7 @@ GraphicEQFilterGUI::GraphicEQFilterGUI(GraphicEQFilter* filter, QString configPa
ui->radioButtonVar->click();
}
ui->tableWidget->resizeColumnsToContents();
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
}
GraphicEQFilterGUI::~GraphicEQFilterGUI()
@@ -77,7 +89,7 @@ GraphicEQFilterGUI::~GraphicEQFilterGUI()
delete ui;
}
void GraphicEQFilterGUI::store(QString& command, QString& parameters)
void GraphicEQFilterGUI::store(QString & command, QString & parameters)
{
command = "GraphicEQ";
@@ -305,8 +317,6 @@ void GraphicEQFilterGUI::on_actionImport_triggered()
{
emit updateModel();
}
ui->tableWidget->resizeColumnsToContents();
}
}
@@ -339,7 +349,7 @@ void GraphicEQFilterGUI::on_actionExport_triggered()
}
}
void GraphicEQFilterGUI::on_actionMirrorResponse_triggered()
void GraphicEQFilterGUI::on_actionInvertResponse_triggered()
{
vector<FilterNode> newNodes = scene->getNodes();
for(FilterNode& node : newNodes)
+4 -6
View File
@@ -25,6 +25,8 @@
#include "filters/GraphicEQFilter.h"
#include "GraphicEQFilterGUIScene.h"
class FilterTable;
namespace Ui {
class GraphicEQFilterGUI;
}
@@ -34,7 +36,7 @@ class GraphicEQFilterGUI : public IFilterGUI
Q_OBJECT
public:
explicit GraphicEQFilterGUI(GraphicEQFilter* filter, QString configPath);
explicit GraphicEQFilterGUI(GraphicEQFilter* filter, QString configPath, FilterTable* filterTable);
~GraphicEQFilterGUI();
void store(QString& command, QString& parameters) override;
@@ -54,13 +56,9 @@ private slots:
void on_radioButtonVar_toggled(bool checked);
void on_actionImport_triggered();
void on_actionExport_triggered();
void on_actionMirrorResponse_triggered();
void on_actionInvertResponse_triggered();
void on_actionNormalizeResponse_triggered();
void on_actionResetResponse_triggered();
private:
+158 -130
View File
@@ -6,14 +6,17 @@
<rect>
<x>0</x>
<y>0</y>
<width>442</width>
<height>170</height>
<width>623</width>
<height>124</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true"/>
</property>
<layout class="QGridLayout" name="gridLayout" rowstretch="1,0,0" columnstretch="0,1,0">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0">
<property name="spacing">
<number>3</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
@@ -26,134 +29,24 @@
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>3</number>
</property>
<property name="verticalSpacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Graphic EQ:</string>
</property>
</widget>
</item>
<item row="0" column="2" rowspan="2">
<widget class="QTableWidget" name="tableWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="Highlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>51</red>
<green>153</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Highlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>122</red>
<green>189</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Highlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>51</red>
<green>153</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="horizontalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="columnCount">
<number>2</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>40</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>40</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>20</number>
</attribute>
<column>
<property name="text">
<string>Freq.</string>
</property>
</column>
<column>
<property name="text">
<string>Gain</string>
</property>
</column>
</widget>
</item>
<item row="2" column="2">
<widget class="QToolBar" name="toolBar">
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
</widget>
</item>
<item row="0" column="1" rowspan="3">
<widget class="GraphicEQFilterGUIView" name="graphicsView">
<property name="renderHints">
<set>QPainter::Antialiasing|QPainter::TextAntialiasing</set>
</property>
<property name="dragMode">
<enum>QGraphicsView::RubberBandDrag</enum>
</property>
</widget>
</item>
<item row="1" column="0" rowspan="2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Graphic EQ:</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton15">
<property name="text">
@@ -180,6 +73,141 @@
</item>
</layout>
</item>
<item>
<widget class="GraphicEQFilterGUIView" name="graphicsView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>100</height>
</size>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="renderHints">
<set>QPainter::Antialiasing|QPainter::TextAntialiasing</set>
</property>
<property name="dragMode">
<enum>QGraphicsView::RubberBandDrag</enum>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="Highlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>51</red>
<green>153</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Highlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>122</red>
<green>189</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Highlight">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>51</red>
<green>153</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="horizontalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="columnCount">
<number>2</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>10</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>10</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>20</number>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>23</number>
</attribute>
<column>
<property name="text">
<string>Freq.</string>
</property>
</column>
<column>
<property name="text">
<string>Gain</string>
</property>
</column>
</widget>
</item>
<item>
<widget class="QToolBar" name="toolBar">
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
<action name="actionImport">
<property name="icon">
@@ -199,13 +227,13 @@
<string>Export</string>
</property>
</action>
<action name="actionMirrorResponse">
<action name="actionInvertResponse">
<property name="icon">
<iconset resource="../Editor.qrc">
<normaloff>:/icons/mirror_response.png</normaloff>:/icons/mirror_response.png</iconset>
<normaloff>:/icons/invert_response.png</normaloff>:/icons/invert_response.png</iconset>
</property>
<property name="text">
<string>Mirror response</string>
<string>Invert response</string>
</property>
</action>
<action name="actionNormalizeResponse">
+6 -1
View File
@@ -26,6 +26,11 @@ GraphicEQFilterGUIFactory::GraphicEQFilterGUIFactory()
{
}
void GraphicEQFilterGUIFactory::initialize(FilterTable* filterTable)
{
this->filterTable = filterTable;
}
QList<FilterTemplate> GraphicEQFilterGUIFactory::createFilterTemplates()
{
QList<FilterTemplate> list;
@@ -51,7 +56,7 @@ IFilterGUI* GraphicEQFilterGUIFactory::createFilterGUI(QString& command, QString
if(!filters.empty())
{
GraphicEQFilter* filter = (GraphicEQFilter*)filters[0];
result = new GraphicEQFilterGUI(filter, configPath);
result = new GraphicEQFilterGUI(filter, configPath, filterTable);
}
for(IFilter* f : filters)
+3
View File
@@ -28,6 +28,8 @@ class GraphicEQFilterGUIFactory : public IFilterGUIFactory
public:
GraphicEQFilterGUIFactory();
void initialize(FilterTable* filterTable) override;
QList<FilterTemplate> createFilterTemplates() override;
void startOfFile(const QString& configPath) override;
@@ -35,4 +37,5 @@ public:
private:
QString configPath;
FilterTable* filterTable;
};
+1 -1
View File
@@ -191,7 +191,7 @@ void GraphicEQFilterGUIScene::itemMoved(int index)
hz = round(hz * 10) / 10;
item->setHz(hz);
}
if(getZoom() < 4)
if(getZoomY() < 4)
db = round(db * 10) / 10;
else
db = round(db * 100) / 100;