From 5a795a2d260c80c8edc38c69aa8874a8fbea00ea Mon Sep 17 00:00:00 2001 From: jthedering <51533355+jthedering@users.noreply.github.com> Date: Sat, 12 Aug 2017 11:13:30 +0000 Subject: [PATCH] Improved: Tabs can be closed by middle click in the Configuration Editor. Ctrl+A can be used to select all rows. Fixed: When a line was edited manually in the Configuration Editor, the file was not saved automatically when "Instant mode" was enabled. --- Editor/Editor.pro | 8 +- Editor/Editor.qrc | 1 + Editor/FilterTable.cpp | 31 ++++++ Editor/FilterTable.h | 2 + Editor/FilterTableRow.cpp | 1 + Editor/MainWindow.cpp | 24 ++++ Editor/MainWindow.h | 5 +- Editor/MainWindow.ui | 42 +++++-- Editor/icons/edit-select-all.ico | Bin 0 -> 1649 bytes Editor/translations/Editor_de.qm | Bin 34220 -> 33900 bytes Editor/translations/Editor_de.ts | 140 ++++++++++++------------ Editor/widgets/MiddleClickTabBar.cpp | 42 +++++++ Editor/widgets/MiddleClickTabBar.h | 31 ++++++ Editor/widgets/MiddleClickTabWidget.cpp | 27 +++++ Editor/widgets/MiddleClickTabWidget.h | 28 +++++ 15 files changed, 299 insertions(+), 83 deletions(-) create mode 100644 Editor/icons/edit-select-all.ico create mode 100644 Editor/widgets/MiddleClickTabBar.cpp create mode 100644 Editor/widgets/MiddleClickTabBar.h create mode 100644 Editor/widgets/MiddleClickTabWidget.cpp create mode 100644 Editor/widgets/MiddleClickTabWidget.h diff --git a/Editor/Editor.pro b/Editor/Editor.pro index 0f76788..8330019 100644 --- a/Editor/Editor.pro +++ b/Editor/Editor.pro @@ -131,7 +131,9 @@ SOURCES += main.cpp\ ../filters/loudnessCorrection/LoudnessCorrectionFilterFactory.cpp \ ../filters/loudnessCorrection/VolumeController.cpp \ guis/LoudnessCorrectionFilterGUIDialog.cpp \ - helpers/QtSndfileHandle.cpp + helpers/QtSndfileHandle.cpp \ + widgets/MiddleClickTabWidget.cpp \ + widgets/MiddleClickTabBar.cpp HEADERS += \ ../helpers/LogHelper.h \ @@ -252,7 +254,9 @@ HEADERS += \ ../filters/loudnessCorrection/ParameterArchive.h \ ../filters/loudnessCorrection/VolumeController.h \ guis/LoudnessCorrectionFilterGUIDialog.h \ - helpers/QtSndfileHandle.h + helpers/QtSndfileHandle.h \ + widgets/MiddleClickTabWidget.h \ + widgets/MiddleClickTabBar.h FORMS += \ guis/PreampFilterGUI.ui \ diff --git a/Editor/Editor.qrc b/Editor/Editor.qrc index 1229442..eefd618 100644 --- a/Editor/Editor.qrc +++ b/Editor/Editor.qrc @@ -24,5 +24,6 @@ icons/reset_response.ico icons/resize_corner.ico sounds/pinkNoise.flac + icons/edit-select-all.ico diff --git a/Editor/FilterTable.cpp b/Editor/FilterTable.cpp index eace1f3..be6a9a7 100644 --- a/Editor/FilterTable.cpp +++ b/Editor/FilterTable.cpp @@ -487,6 +487,14 @@ void FilterTable::deleteSelectedLines() updateGuis(); } +void FilterTable::selectAll() +{ + selected.clear(); + for (Item* item : items) + selected.insert(item); + update(); +} + void FilterTable::updateModel() { emit linesChanged(); @@ -652,6 +660,29 @@ void FilterTable::mousePressEvent(QMouseEvent* event) } } +void FilterTable::mouseReleaseEvent(QMouseEvent* event) +{ + if (event->button() == Qt::LeftButton) + { + int row = rowForPos(event->pos(), false); + if (row != -1) + { + Item* item = items[row]; + + if (!(event->modifiers() & Qt::ControlModifier) && !(event->modifiers() & Qt::ShiftModifier)) + { + if (selected.contains(item) && selectionStart == item) + { + selected.clear(); + selected.insert(item); + } + } + ensureRowVisible(row); + update(); + } + } +} + void FilterTable::mouseMoveEvent(QMouseEvent* event) { if (event->buttons() & Qt::LeftButton) diff --git a/Editor/FilterTable.h b/Editor/FilterTable.h index e130c99..68cf532 100644 --- a/Editor/FilterTable.h +++ b/Editor/FilterTable.h @@ -70,6 +70,7 @@ public: void copy(); void paste(); void deleteSelectedLines(); + void selectAll(); const QList >& getOutputDevices() const; const QList >& getInputDevices() const; @@ -105,6 +106,7 @@ public slots: protected: void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void dragEnterEvent(QDragEnterEvent* event) override; void dragMoveEvent(QDragMoveEvent* event) override; diff --git a/Editor/FilterTableRow.cpp b/Editor/FilterTableRow.cpp index ee094b1..cd5c1c2 100644 --- a/Editor/FilterTableRow.cpp +++ b/Editor/FilterTableRow.cpp @@ -191,6 +191,7 @@ void FilterTableRow::on_lineEdit_editingFinished() { editingDone = true; item->text = ui->lineEdit->text(); + table->updateModel(); // set focus to table so that enter key does not cause scrolling down table->setFocus(); table->updateGuis(); diff --git a/Editor/MainWindow.cpp b/Editor/MainWindow.cpp index b076b90..8ccc59d 100644 --- a/Editor/MainWindow.cpp +++ b/Editor/MainWindow.cpp @@ -519,7 +519,21 @@ void MainWindow::linesChanged() bool MainWindow::on_tabWidget_tabCloseRequested(int index) { if (askForClose(index)) + { + QScrollArea* scrollArea = qobject_cast(ui->tabWidget->widget(index)); + if (scrollArea != NULL) + { + FilterTable* filterTable = qobject_cast(scrollArea->widget()); + QString path = filterTable->getConfigPath(); + recentFiles.removeAll(path); + recentFiles.prepend(path); + if (recentFiles.size() > 10) + recentFiles.removeLast(); + updateRecentFiles(); + } + ui->tabWidget->removeTab(index); + } return true; } @@ -665,6 +679,16 @@ void MainWindow::on_actionDelete_triggered() filterTable->deleteSelectedLines(); } +void MainWindow::on_actionSelectAll_triggered() +{ + QScrollArea* scrollArea = qobject_cast(ui->tabWidget->currentWidget()); + if (scrollArea == NULL) + return; + + FilterTable* filterTable = qobject_cast(scrollArea->widget()); + filterTable->selectAll(); +} + void MainWindow::instantModeEnabled(bool enabled) { if (enabled) diff --git a/Editor/MainWindow.h b/Editor/MainWindow.h index 75d7ba7..0751ffb 100644 --- a/Editor/MainWindow.h +++ b/Editor/MainWindow.h @@ -70,9 +70,10 @@ private slots: void recentFileSelected(); void on_actionCut_triggered(); - void on_actionDelete_triggered(); - void on_actionPaste_triggered(); void on_actionCopy_triggered(); + void on_actionPaste_triggered(); + void on_actionDelete_triggered(); + void on_actionSelectAll_triggered(); void instantModeEnabled(bool enabled); void on_tabWidget_currentChanged(int index); diff --git a/Editor/MainWindow.ui b/Editor/MainWindow.ui index e485160..6bacec8 100644 --- a/Editor/MainWindow.ui +++ b/Editor/MainWindow.ui @@ -28,7 +28,7 @@ 0 - + true @@ -71,6 +71,8 @@ + + @@ -568,7 +570,7 @@ New - Ctrl+N + Ctrl+N @@ -583,7 +585,7 @@ Open - Ctrl+O + Ctrl+O @@ -598,7 +600,7 @@ Save - Ctrl+S + Ctrl+S @@ -612,13 +614,16 @@ Save as... + + + Exit - Alt+F4 + Alt+F4 @@ -630,7 +635,7 @@ Cut - Ctrl+X + Ctrl+X @@ -642,7 +647,7 @@ Copy - Ctrl+C + Ctrl+C @@ -654,7 +659,7 @@ Paste - Ctrl+V + Ctrl+V @@ -665,6 +670,9 @@ Delete + + + @@ -692,6 +700,18 @@ Reset all file-specific preferences + + + + :/icons/edit-select-all.ico:/icons/edit-select-all.ico + + + Select all + + + Ctrl+A + + @@ -705,6 +725,12 @@ QSpinBox
Editor/widgets/ExponentialSpinBox.h
+ + MiddleClickTabWidget + QTabWidget +
Editor/widgets/MiddleClickTabWidget.h
+ 1 +
diff --git a/Editor/icons/edit-select-all.ico b/Editor/icons/edit-select-all.ico new file mode 100644 index 0000000000000000000000000000000000000000..1100197ebf771563eea1af6ab30a55dde2e917af GIT binary patch literal 1649 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 D&qhPg delta 1449 zcmZXTdr(wm7{;GHdoFu}aSc=!*wsc>6xi{CK|+G9fUa^!ZsW3x35&R}xLiyjDXo!k zP4RP`&}tmONM$CcrKEDAF&rCHsI-ftH8eGuj<+b(Y`|XIKbqkD^P6+d^S#&SyV=6^ z?BezYHP-;MAL8G~xSbFKJZ5~0pVcM695WF17k$$Lku!m`F8WpqSOx&wd?4>E;79_0 z;2j|AKKQq{0M@N4HWhcRZ8A1FF{CDF()Ch#AOTe?)S0JQjQs7|-<)2WX zI}qHj0y$m?ub%-nE`)I04&+8cII$QAzYO8iGGJC8gds{?9niAy3Jq@ed*8$Ici}V+D0Jp-=>Rm|pETuAXksp|s`Q7IRZrlL0rQGKOdWtHs zHJoXx!y#W2@*}XNNWL#?D^Piec{xLKJ+E%)0z!lMRq1qCRmJac?FS0J=XbQ!0doiW z)*>GelIy2l;it>MclNge3-0j8U!zv6pApB2e-a-7B@z7bJ#u0`Q6%mpDu{i2Pvkk8 zyPfZerpa)&!)%N*aqc`8BRA?Qz7Y5ZN*}#h2>T#}ddU>RMrh!r?W{^}@B9N0mEIodFC-{B&JoULj*i?TGS`MB@49 z{IuUvEjgS8tQS>Df#mn8X?`xeqe=^HrygdjR^B}dY}&=bMH9Da1xpu=y2b&OFQNo! zIG{S^A&=N9RRiP6bk~$@w`j=DP%loT%@!1@Q+0EJd8z91$gj!ltJF1H`vJQ`y)Akh z-KAc2r_ut%C1}KhDRf8lnmFACAmF4Xuap?ltts;SLg#ifK{BeGO3lz4ba8DL*ak9Tzgkll*La47; zakU^^gJp1{4pB%&EO` LoudnessCorrectionFilterGUI - + Attenuation: Abschwächung: - + Reference offset: Referenzversatz: @@ -924,19 +924,19 @@ Change the file permissions or copy the file to the config directory. Gesamtlautstärke: - + contributed by Alexander Walch beigetragen durch Alexander Walch - + Loudness correction: Lautheitskorrektur: - + Calibrate Kalibrieren @@ -1038,30 +1038,30 @@ Alexander Walch Bearbeiten - + View Ansicht - - + + Settings Einstellungen - + Language Sprache - - + + Toolbar Werkzeugleiste - - + + Analysis panel Analysepanel @@ -1070,143 +1070,141 @@ Alexander Walch FFT-Auflösung: - + Resolution: Auflösung: - + Channel: Kanal: - + Start from: Beginne bei: - + Current file Aktuelle Datei - + Estimated properties Geschätzte Eigenschaften - + CPU usage: CPU-Last: - + Init. time: Init.-Zeit: - + Latency: Latenz: - + Peak gain: Maximum: - + New Neu - Ctrl+N - Ctrl+N + Ctrl+N - - + + Open Öffnen - Ctrl+O - Ctrl+O + Ctrl+O - - + + Save Speichern - Ctrl+S - Ctrl+S + Ctrl+S - - + + Save as... Speichern unter... - + Exit Beenden - Alt+F4 - Alt+F4 + Alt+F4 - + Cut Ausschneiden - Ctrl+X - Ctrl+X + Ctrl+X - + Copy Kopieren - Ctrl+C - Ctrl+C + Ctrl+C - + Paste Einfügen - Ctrl+V - Ctrl+V + Ctrl+V - + Delete Löschen - + Reset all global preferences Alle globalen Einstellungen zurücksetzen - + Reset all file-specific preferences Alle dateispezifischen Einstellungen zurücksetzen + + + Select all + Alles auswählen + Equalizer APO %0 Configuration Editor @@ -1328,7 +1326,7 @@ Möchten Sie die Configurator-Anwendung starten, um das Problem zu beheben?Von Gerät - + %0 dB %0 dB @@ -1337,7 +1335,7 @@ Möchten Sie die Configurator-Anwendung starten, um das Problem zu beheben?%0 ms (%1 Samp.) - + %0 ms (%1 s.) %0 ms (%1 S.) @@ -1346,46 +1344,46 @@ Möchten Sie die Configurator-Anwendung starten, um das Problem zu beheben?%0 ms (%1 Samples) - + %0 ms %0 ms - + %0 % (one core) %0 % (ein Kern) - - - + + + Restart required Neustart erforderlich - - - + + + Configuration Editor will be restarted to apply the changed settings. Proceed? Konfigurationseditor wird neugestartet, um die geänderten Einstellungen zu übernehmen. Fortsetzen? - + Unsaved changes Ungespeicherte Änderungen - + The configuration file %0 has unsaved changes. Die Konfigurationsdatei %0 hat ungespeicherte Änderungen. - + Do you want to save the changes before closing the file? Möchten Sie die Änderungen speichern, bevor die Datei geschlossen wird? - + Open file Datei öffnen @@ -1395,18 +1393,18 @@ Möchten Sie die Configurator-Anwendung starten, um das Problem zu beheben?Automatisch (%0) - - + + E-APO configurations (*.txt) E-APO-Konfigurationen (*.txt) - + Save file as Datei speichern unter - + Unsaved Ungespeichert @@ -1655,12 +1653,12 @@ Möchten Sie die Configurator-Anwendung starten, um das Problem zu beheben?VST-Plugins (*.dll) - + Plugin crashed when opening panel. Plugin ist beim Öffnen des Panels abgestürzt. - + The library is not readable by the audio service. Change the file permissions or copy the file to the VSTPlugins directory. Die Bibliothek ist für den Audiodienst nicht lesbar. @@ -1673,7 +1671,7 @@ Change the file permissions or copy the file to the plugins directory. Ändern Sie die Dateiberechtigungen oder kopieren Sie die Datei in das plugins-Verzeichnis. - + The plugin seemingly accesses these files not readable by the audio service: %0 Change the file permissions or copy the files to the config directory. diff --git a/Editor/widgets/MiddleClickTabBar.cpp b/Editor/widgets/MiddleClickTabBar.cpp new file mode 100644 index 0000000..ece0ee7 --- /dev/null +++ b/Editor/widgets/MiddleClickTabBar.cpp @@ -0,0 +1,42 @@ +/* + This file is part of Equalizer APO, a system-wide equalizer. + Copyright (C) 2017 Jonas Thedering + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include + +#include "MiddleClickTabBar.h" + +MiddleClickTabBar::MiddleClickTabBar(QWidget* parent) + : QTabBar(parent) +{ +} + +void MiddleClickTabBar::mouseReleaseEvent(QMouseEvent* event) +{ + if (event->button() == Qt::MidButton) + { + int tabIndex = tabAt(event->pos()); + if (tabIndex != -1) + { + emit tabCloseRequested(tabIndex); + return; + } + } + + QTabBar::mouseReleaseEvent(event); +} diff --git a/Editor/widgets/MiddleClickTabBar.h b/Editor/widgets/MiddleClickTabBar.h new file mode 100644 index 0000000..29f4841 --- /dev/null +++ b/Editor/widgets/MiddleClickTabBar.h @@ -0,0 +1,31 @@ +/* + This file is part of Equalizer APO, a system-wide equalizer. + Copyright (C) 2017 Jonas Thedering + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include + +class MiddleClickTabBar : public QTabBar +{ +public: + MiddleClickTabBar(QWidget* parent = NULL); + +protected: + void mouseReleaseEvent(QMouseEvent* event) override; +}; diff --git a/Editor/widgets/MiddleClickTabWidget.cpp b/Editor/widgets/MiddleClickTabWidget.cpp new file mode 100644 index 0000000..ee57ba3 --- /dev/null +++ b/Editor/widgets/MiddleClickTabWidget.cpp @@ -0,0 +1,27 @@ +/* + This file is part of Equalizer APO, a system-wide equalizer. + Copyright (C) 2017 Jonas Thedering + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "MiddleClickTabBar.h" +#include "MiddleClickTabWidget.h" + +MiddleClickTabWidget::MiddleClickTabWidget(QWidget* parent) + : QTabWidget(parent) +{ + setTabBar(new MiddleClickTabBar(this)); +} diff --git a/Editor/widgets/MiddleClickTabWidget.h b/Editor/widgets/MiddleClickTabWidget.h new file mode 100644 index 0000000..babeef0 --- /dev/null +++ b/Editor/widgets/MiddleClickTabWidget.h @@ -0,0 +1,28 @@ +/* + This file is part of Equalizer APO, a system-wide equalizer. + Copyright (C) 2017 Jonas Thedering + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include + +class MiddleClickTabWidget : public QTabWidget +{ +public: + MiddleClickTabWidget(QWidget* parent = NULL); +};