From 0a263f8c4687af29672961487b92df1d34b385e1 Mon Sep 17 00:00:00 2001 From: APTX Date: Sun, 30 Aug 2015 14:33:11 +0200 Subject: [PATCH] Add new tab actions. Only actions the current tab supports are enabled. --- localmylist-management/abstracttab.cpp | 21 ++++++++ localmylist-management/abstracttab.h | 22 +++++++++ localmylist-management/mainwindow.cpp | 20 +++++++- localmylist-management/mainwindow.h | 10 ++-- localmylist-management/mainwindow.ui | 45 +++++++++++++++++ .../tabs/databaselogtab.cpp | 5 ++ localmylist-management/tabs/databaselogtab.h | 7 +-- .../tabs/dynamicmodeltab.cpp | 5 ++ localmylist-management/tabs/dynamicmodeltab.h | 13 ++--- localmylist-management/tabs/mylisttab.cpp | 5 ++ localmylist-management/tabs/mylisttab.h | 11 +++-- .../tabs/pathmappingtab.cpp | 12 +++-- localmylist-management/tabs/pathmappingtab.h | 21 ++++---- localmylist-management/tabs/pathmappingtab.ui | 45 ----------------- .../tabs/pendingrequesttab.cpp | 25 ++-------- .../tabs/pendingrequesttab.h | 12 ++--- .../tabs/pendingrequesttab.ui | 10 ---- localmylist-management/tabs/reportstab.cpp | 5 ++ localmylist-management/tabs/reportstab.h | 7 +-- localmylist-management/tabs/searchtab.cpp | 4 -- localmylist-management/tabs/searchtab.h | 3 +- .../tabs/unknownfilestab.cpp | 9 ++-- localmylist-management/tabs/unknownfilestab.h | 17 ++++--- .../tabs/unknownfilestab.ui | 24 ---------- localmylist-management/tabwidget.cpp | 48 ++++++++++++++----- localmylist-management/tabwidget.h | 4 ++ 26 files changed, 232 insertions(+), 178 deletions(-) diff --git a/localmylist-management/abstracttab.cpp b/localmylist-management/abstracttab.cpp index cbda5eb..d55fed6 100644 --- a/localmylist-management/abstracttab.cpp +++ b/localmylist-management/abstracttab.cpp @@ -45,6 +45,11 @@ void AbstractTab::deactivate() { } +AbstractTab::TabActions AbstractTab::availableActions() const +{ + return AbstractTab::TabActions{}; +} + void AbstractTab::reload() { } @@ -57,6 +62,22 @@ void AbstractTab::clearSelection() { } +void AbstractTab::saveChanges() +{ +} + +void AbstractTab::discardChanges() +{ +} + +void AbstractTab::addEntry() +{ +} + +void AbstractTab::removeSelected() +{ +} + void AbstractTab::loadSettings(QSettings *settings) { Q_UNUSED(settings); diff --git a/localmylist-management/abstracttab.h b/localmylist-management/abstracttab.h index 94a6eb8..066f27d 100644 --- a/localmylist-management/abstracttab.h +++ b/localmylist-management/abstracttab.h @@ -12,6 +12,21 @@ class AbstractTab : public QWidget Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY nameChanged) public: + + enum TabAction + { + Reload = 1 << 0, + SelectAll = 1 << 1, + ClearSelection = 1 << 2, + SaveChanges = 1 << 3, + DiscardChanges = 1 << 4, + AddEntry = 1 << 5, + RemoveSelected = 1 << 6, + }; + + Q_FLAGS(TabActions) + Q_DECLARE_FLAGS(TabActions, TabAction) + explicit AbstractTab(QWidget *parent = 0); ~AbstractTab(); @@ -28,9 +43,14 @@ public: virtual void activate(); virtual void deactivate(); + virtual TabActions availableActions() const; virtual void reload(); virtual void selectAll(); virtual void clearSelection(); + virtual void saveChanges(); + virtual void discardChanges(); + virtual void addEntry(); + virtual void removeSelected(); virtual void loadSettings(QSettings *settings); virtual void saveSettings(QSettings *settings); @@ -47,6 +67,8 @@ protected: MainWindow *m_mainWindow; }; +Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractTab::TabActions) + template class AbstractTabBase : public AbstractTab { public: diff --git a/localmylist-management/mainwindow.cpp b/localmylist-management/mainwindow.cpp index f7f023e..dc233d9 100644 --- a/localmylist-management/mainwindow.cpp +++ b/localmylist-management/mainwindow.cpp @@ -31,8 +31,6 @@ #include "reporteditordialog.h" #include "versiondialog.h" -#include "tabs/mylisttab.h" -#include "tabs/reportstab.h" #include @@ -82,6 +80,10 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->actionReload, SIGNAL(triggered()), ui->tabWidget, SLOT(reloadCurrentTab())); connect(ui->actionSelectAll, SIGNAL(triggered()), ui->tabWidget, SLOT(tabSelectAll())); connect(ui->actionClearSelection, SIGNAL(triggered()), ui->tabWidget, SLOT(tabClearSelection())); + connect(ui->actionSaveChanges, SIGNAL(triggered()), ui->tabWidget, SLOT(tabSaveChanges())); + connect(ui->actionDiscardChanges, SIGNAL(triggered()), ui->tabWidget, SLOT(tabDiscardChanges())); + connect(ui->actionAdd, SIGNAL(triggered()), ui->tabWidget, SLOT(tabAddEntry())); + connect(ui->actionRemoveSelected, SIGNAL(triggered()), ui->tabWidget, SLOT(tabRemoveSelected())); registerTabs(); ui->tabWidget->setMainWindow(this); @@ -94,6 +96,7 @@ MainWindow::~MainWindow() saveSettings(); ui->tabWidget->saveSettings(MyList::instance()->defaultLocalQSettings()); delete ui; + ui = nullptr; } MyListModel *MainWindow::myListModel() const @@ -353,6 +356,19 @@ void MainWindow::showMessage(const QString &message) ui->statusBar->showMessage(message); } +void MainWindow::updateTabActions(AbstractTab::TabActions actions) +{ + if (!ui) return; + + ui->actionReload->setEnabled(actions.testFlag(AbstractTab::Reload)); + ui->actionSelectAll->setEnabled(actions.testFlag(AbstractTab::SelectAll)); + ui->actionClearSelection->setEnabled(actions.testFlag(AbstractTab::ClearSelection)); + ui->actionSaveChanges->setEnabled(actions.testFlag(AbstractTab::SaveChanges)); + ui->actionDiscardChanges->setEnabled(actions.testFlag(AbstractTab::DiscardChanges)); + ui->actionAdd->setEnabled(actions.testFlag(AbstractTab::AddEntry)); + ui->actionRemoveSelected->setEnabled(actions.testFlag(AbstractTab::RemoveSelected)); +} + void MainWindow::on_actionConnection_triggered() { DatabaseConnectionDialog d; diff --git a/localmylist-management/mainwindow.h b/localmylist-management/mainwindow.h index 6e9cf46..089e25c 100644 --- a/localmylist-management/mainwindow.h +++ b/localmylist-management/mainwindow.h @@ -2,6 +2,7 @@ #define MAINWINDOW_H #include +#include "abstracttab.h" namespace Ui { class MainWindow; @@ -30,6 +31,8 @@ public: void showMessage(const QString &message); + void updateTabActions(AbstractTab::TabActions actions); + private slots: void dbConnected(); void dbDisconnected(); @@ -68,19 +71,12 @@ private slots: void on_actionClearFailedRequests_triggered(); void on_actionCheckFileLocations_triggered(); - void on_actionRemoveKnownUnknownFiles_triggered(); - void on_actionRenameScript_triggered(); - void on_actionAddRelatedEpisodeInfo_triggered(); - void on_actionAboutLocalMyList_triggered(); - void on_actionConnection_triggered(); - void on_actionSettings_triggered(); - void on_actionQuit_triggered(); protected: diff --git a/localmylist-management/mainwindow.ui b/localmylist-management/mainwindow.ui index b092b2e..3351dd1 100644 --- a/localmylist-management/mainwindow.ui +++ b/localmylist-management/mainwindow.ui @@ -119,8 +119,15 @@ false + + + + + + + @@ -290,6 +297,44 @@ Settings... + + + Save Changes + + + Save changes made in the current tab + + + Ctrl+S + + + + + Discard Changes + + + Discard Changes made in the current tab + + + + + Add + + + Add a new entry for the current tab + + + Ctrl+N + + + + + Remove Selected + + + Remove selected entries for the current tab + + diff --git a/localmylist-management/tabs/databaselogtab.cpp b/localmylist-management/tabs/databaselogtab.cpp index 34168a6..d0d2516 100644 --- a/localmylist-management/tabs/databaselogtab.cpp +++ b/localmylist-management/tabs/databaselogtab.cpp @@ -41,6 +41,11 @@ void DatabaseLogTab::activate() reload(); } +AbstractTab::TabActions DatabaseLogTab::availableActions() const +{ + return Reload; +} + void DatabaseLogTab::reload() { QSqlQuery &q = LocalMyList::instance()->database()->prepare( diff --git a/localmylist-management/tabs/databaselogtab.h b/localmylist-management/tabs/databaselogtab.h index 4434283..1c12340 100644 --- a/localmylist-management/tabs/databaselogtab.h +++ b/localmylist-management/tabs/databaselogtab.h @@ -20,10 +20,11 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); + void init() override; + void activate() override; - void reload(); + TabActions availableActions() const override; + void reload() override; private: Ui::DatabaseLogTab *ui; diff --git a/localmylist-management/tabs/dynamicmodeltab.cpp b/localmylist-management/tabs/dynamicmodeltab.cpp index 1c85791..80ffd2a 100644 --- a/localmylist-management/tabs/dynamicmodeltab.cpp +++ b/localmylist-management/tabs/dynamicmodeltab.cpp @@ -109,6 +109,11 @@ void DynamicModelTab::activate() ui->filterInput->setFocus(); } +AbstractTab::TabActions DynamicModelTab::availableActions() const +{ + return Reload; +} + void DynamicModelTab::reload() { model->reload(); diff --git a/localmylist-management/tabs/dynamicmodeltab.h b/localmylist-management/tabs/dynamicmodeltab.h index 5297758..f19c715 100644 --- a/localmylist-management/tabs/dynamicmodeltab.h +++ b/localmylist-management/tabs/dynamicmodeltab.h @@ -28,16 +28,17 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); + void init() override; + void activate() override; - void reload(); + TabActions availableActions() const override; + void reload() override; - void loadSettings(QSettings *settings); - void saveSettings(QSettings *settings); + void loadSettings(QSettings *settings) override; + void saveSettings(QSettings *settings) override; protected: - void changeEvent(QEvent *e); + void changeEvent(QEvent *e) override; private slots: void on_myListView_openFileRequested(const QModelIndex &index); diff --git a/localmylist-management/tabs/mylisttab.cpp b/localmylist-management/tabs/mylisttab.cpp index 375e1aa..ec14e31 100644 --- a/localmylist-management/tabs/mylisttab.cpp +++ b/localmylist-management/tabs/mylisttab.cpp @@ -72,6 +72,11 @@ void MyListTab::activate() ui->filterInput->setFocus(); } +AbstractTab::TabActions MyListTab::availableActions() const +{ + return Reload; +} + void MyListTab::reload() { myListModel()->reload(); diff --git a/localmylist-management/tabs/mylisttab.h b/localmylist-management/tabs/mylisttab.h index b50a471..de58d30 100644 --- a/localmylist-management/tabs/mylisttab.h +++ b/localmylist-management/tabs/mylisttab.h @@ -26,13 +26,14 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); + void init() override; + void activate() override; - void reload(); + TabActions availableActions() const override; + void reload() override; - void loadSettings(QSettings *settings); - void saveSettings(QSettings *settings); + void loadSettings(QSettings *settings) override; + void saveSettings(QSettings *settings) override; private slots: void on_myListView_openFileRequested(const QModelIndex &index); diff --git a/localmylist-management/tabs/pathmappingtab.cpp b/localmylist-management/tabs/pathmappingtab.cpp index b8f55fb..243bbc1 100644 --- a/localmylist-management/tabs/pathmappingtab.cpp +++ b/localmylist-management/tabs/pathmappingtab.cpp @@ -58,8 +58,10 @@ void PathMappingTab::init() reload(); } -void PathMappingTab::activate() +AbstractTab::TabActions PathMappingTab::availableActions() const { + return Reload | SelectAll | ClearSelection | SaveChanges | DiscardChanges + | AddEntry | RemoveSelected; } void PathMappingTab::reload() @@ -68,13 +70,13 @@ void PathMappingTab::reload() ui->pathMappingView->resizeColumnsToContents(); } -void PathMappingTab::on_addNewButton_clicked() +void PathMappingTab::addEntry() { model->insertRecord(-1, QSqlRecord()); } -void PathMappingTab::on_saveButton_clicked() +void PathMappingTab::saveChanges() { #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) if(!model->isDirty()) @@ -88,12 +90,12 @@ void PathMappingTab::on_saveButton_clicked() model->lastError().text()); } -void PathMappingTab::on_discardButton_clicked() +void PathMappingTab::discardChanges() { model->revertAll(); } -void PathMappingTab::on_removeSelectedButton_clicked() +void PathMappingTab::removeSelected() { using namespace LocalMyList; diff --git a/localmylist-management/tabs/pathmappingtab.h b/localmylist-management/tabs/pathmappingtab.h index 957c4e6..844b89a 100644 --- a/localmylist-management/tabs/pathmappingtab.h +++ b/localmylist-management/tabs/pathmappingtab.h @@ -20,19 +20,14 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); - - void reload(); - -private slots: - void on_addNewButton_clicked(); - - void on_saveButton_clicked(); - - void on_discardButton_clicked(); - - void on_removeSelectedButton_clicked(); + void init() override; + + TabActions availableActions() const override; + void reload() override; + void addEntry() override; + void saveChanges() override; + void discardChanges() override; + void removeSelected() override; private: Ui::PathMappingTab *ui; diff --git a/localmylist-management/tabs/pathmappingtab.ui b/localmylist-management/tabs/pathmappingtab.ui index 80518b8..31046c6 100644 --- a/localmylist-management/tabs/pathmappingtab.ui +++ b/localmylist-management/tabs/pathmappingtab.ui @@ -26,51 +26,6 @@ - - - - - - Save Changes - - - - - - - Discard Changes - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Add New - - - - - - - Remove Selected - - - - - diff --git a/localmylist-management/tabs/pendingrequesttab.cpp b/localmylist-management/tabs/pendingrequesttab.cpp index d5c7f4c..5f60917 100644 --- a/localmylist-management/tabs/pendingrequesttab.cpp +++ b/localmylist-management/tabs/pendingrequesttab.cpp @@ -36,7 +36,6 @@ void PendingRequestTab::init() ui->view->setSelectionMode(QAbstractItemView::MultiSelection); connect(ui->retryButton, SIGNAL(clicked()), this, SLOT(resetFailCount())); - connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteSelected())); } void PendingRequestTab::activate() @@ -44,6 +43,11 @@ void PendingRequestTab::activate() reload(); } +AbstractTab::TabActions PendingRequestTab::availableActions() const +{ + return Reload | SelectAll | ClearSelection; +} + void PendingRequestTab::reload() { QSqlQuery &q = LocalMyList::instance()->database()->prepare( @@ -68,25 +72,6 @@ void PendingRequestTab::clearSelection() ui->view->clearSelection(); } -void PendingRequestTab::deleteSelected() -{ - QList requests = selectionToPendingRequestList(); - - if (!requests.count()) - return; - - { - LocalMyList::RaiiTransaction t(LocalMyList::instance()->database()); - for (const LocalMyList::PendingRequest &request : requests) - { - LocalMyList::instance()->database()->clearRequest(request); - } - t.commit(); - } - - reload(); -} - void PendingRequestTab::resetFailCount() { QList requests = selectionToPendingRequestList(); diff --git a/localmylist-management/tabs/pendingrequesttab.h b/localmylist-management/tabs/pendingrequesttab.h index 0ac5603..f8f94eb 100644 --- a/localmylist-management/tabs/pendingrequesttab.h +++ b/localmylist-management/tabs/pendingrequesttab.h @@ -21,15 +21,15 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); + void init() override; + void activate() override; - void reload(); - void selectAll(); - void clearSelection(); + TabActions availableActions() const override; + void reload() override; + void selectAll() override; + void clearSelection() override; public slots: - void deleteSelected(); void resetFailCount(); private: diff --git a/localmylist-management/tabs/pendingrequesttab.ui b/localmylist-management/tabs/pendingrequesttab.ui index 22d8574..5e7b8bd 100644 --- a/localmylist-management/tabs/pendingrequesttab.ui +++ b/localmylist-management/tabs/pendingrequesttab.ui @@ -55,16 +55,6 @@ - - - - false - - - Delete - - - diff --git a/localmylist-management/tabs/reportstab.cpp b/localmylist-management/tabs/reportstab.cpp index f981b26..de76655 100644 --- a/localmylist-management/tabs/reportstab.cpp +++ b/localmylist-management/tabs/reportstab.cpp @@ -50,6 +50,11 @@ void ReportsTab::activate() reload(); } +AbstractTab::TabActions ReportsTab::availableActions() const +{ + return Reload; +} + void ReportsTab::reload() { ui->reports->clear(); diff --git a/localmylist-management/tabs/reportstab.h b/localmylist-management/tabs/reportstab.h index 9fee45d..a5ea360 100644 --- a/localmylist-management/tabs/reportstab.h +++ b/localmylist-management/tabs/reportstab.h @@ -20,10 +20,11 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); + void init() override; + void activate() override; - void reload(); + TabActions availableActions() const override; + void reload() override; private slots: void on_reports_currentIndexChanged(int index); diff --git a/localmylist-management/tabs/searchtab.cpp b/localmylist-management/tabs/searchtab.cpp index c894983..45d8695 100644 --- a/localmylist-management/tabs/searchtab.cpp +++ b/localmylist-management/tabs/searchtab.cpp @@ -40,10 +40,6 @@ void SearchTab::init() ui->view->setModel(model); } -void SearchTab::activate() -{ -} - void SearchTab::on_input_textChanged(const QString &text) { QString query; diff --git a/localmylist-management/tabs/searchtab.h b/localmylist-management/tabs/searchtab.h index 00cdbb8..e890b77 100644 --- a/localmylist-management/tabs/searchtab.h +++ b/localmylist-management/tabs/searchtab.h @@ -20,8 +20,7 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); + void init() override; private slots: void on_input_textChanged(const QString &text); diff --git a/localmylist-management/tabs/unknownfilestab.cpp b/localmylist-management/tabs/unknownfilestab.cpp index 63553b5..5e56d4e 100644 --- a/localmylist-management/tabs/unknownfilestab.cpp +++ b/localmylist-management/tabs/unknownfilestab.cpp @@ -42,8 +42,6 @@ void UnknownFilesTab::init() model->setHeaderData(1, Qt::Horizontal, tr("Size")); model->setHeaderData(2, Qt::Horizontal, tr("Host")); model->setHeaderData(3, Qt::Horizontal, tr("Path")); - - connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteSelected())); } void UnknownFilesTab::activate() @@ -51,6 +49,11 @@ void UnknownFilesTab::activate() reload(); } +AbstractTab::TabActions UnknownFilesTab::availableActions() const +{ + return Reload | SelectAll | ClearSelection | RemoveSelected; +} + void UnknownFilesTab::reload() { model->select(); @@ -68,7 +71,7 @@ void UnknownFilesTab::clearSelection() ui->unknownFilesView->clearSelection(); } -void UnknownFilesTab::deleteSelected() +void UnknownFilesTab::removeSelected() { using namespace LocalMyList; diff --git a/localmylist-management/tabs/unknownfilestab.h b/localmylist-management/tabs/unknownfilestab.h index 7be63a7..b7f9901 100644 --- a/localmylist-management/tabs/unknownfilestab.h +++ b/localmylist-management/tabs/unknownfilestab.h @@ -19,15 +19,14 @@ public: static QString staticId(); static QString name(); - void init(); - void activate(); - - void reload(); - void selectAll(); - void clearSelection(); - -public slots: - void deleteSelected(); + void init() override; + void activate() override; + + TabActions availableActions() const override; + void reload() override; + void selectAll() override; + void clearSelection() override; + void removeSelected() override; private: Ui::UnknownFilesTab *ui; diff --git a/localmylist-management/tabs/unknownfilestab.ui b/localmylist-management/tabs/unknownfilestab.ui index b7513a7..a9a291a 100644 --- a/localmylist-management/tabs/unknownfilestab.ui +++ b/localmylist-management/tabs/unknownfilestab.ui @@ -26,30 +26,6 @@ - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Delete Selected - - - - - diff --git a/localmylist-management/tabwidget.cpp b/localmylist-management/tabwidget.cpp index a7443d3..cfc8a39 100644 --- a/localmylist-management/tabwidget.cpp +++ b/localmylist-management/tabwidget.cpp @@ -156,31 +156,50 @@ AbstractTab *TabWidget::tab(int index) const void TabWidget::reloadCurrentTab() { AbstractTab *t = tab(currentIndex()); - - if (!t) - return; - + if (!t) return; t->reload(); } void TabWidget::tabSelectAll() { AbstractTab *t = tab(currentIndex()); - - if (!t) - return; - + if (!t) return; t->selectAll(); } void TabWidget::tabClearSelection() { AbstractTab *t = tab(currentIndex()); + if (!t) return; + t->clearSelection(); +} - if (!t) - return; +void TabWidget::tabSaveChanges() +{ + AbstractTab *t = tab(currentIndex()); + if (!t) return; + t->saveChanges(); +} - t->clearSelection(); +void TabWidget::tabDiscardChanges() +{ + AbstractTab *t = tab(currentIndex()); + if (!t) return; + t->discardChanges(); +} + +void TabWidget::tabAddEntry() +{ + AbstractTab *t = tab(currentIndex()); + if (!t) return; + t->addEntry(); +} + +void TabWidget::tabRemoveSelected() +{ + AbstractTab *t = tab(currentIndex()); + if (!t) return; + t->removeSelected(); } void TabWidget::tabNameChanged(const QString &newName) @@ -203,7 +222,14 @@ void TabWidget::currentTabChanged(int newIndex) previousTab = tab(newIndex); if (previousTab) + { + mainWindow()->updateTabActions(previousTab->availableActions()); previousTab->activate(); + } + else + { + mainWindow()->updateTabActions(AbstractTab::TabActions{}); + } } void TabWidget::addTabRequested(const QString &id) diff --git a/localmylist-management/tabwidget.h b/localmylist-management/tabwidget.h index 38a2e95..8457268 100644 --- a/localmylist-management/tabwidget.h +++ b/localmylist-management/tabwidget.h @@ -48,6 +48,10 @@ public slots: void reloadCurrentTab(); void tabSelectAll(); void tabClearSelection(); + void tabSaveChanges(); + void tabDiscardChanges(); + void tabAddEntry(); + void tabRemoveSelected(); void setMainWindow(MainWindow *mainWindow); void setLockLayout(bool locked); -- 2.52.0