]> Some of my projects - localmylist.git/commitdiff
Add new tab actions.
authorAPTX <marek321@gmail.com>
Sun, 30 Aug 2015 12:33:11 +0000 (14:33 +0200)
committerAPTX <marek321@gmail.com>
Sun, 30 Aug 2015 12:33:11 +0000 (14:33 +0200)
Only actions the current tab supports are enabled.

26 files changed:
localmylist-management/abstracttab.cpp
localmylist-management/abstracttab.h
localmylist-management/mainwindow.cpp
localmylist-management/mainwindow.h
localmylist-management/mainwindow.ui
localmylist-management/tabs/databaselogtab.cpp
localmylist-management/tabs/databaselogtab.h
localmylist-management/tabs/dynamicmodeltab.cpp
localmylist-management/tabs/dynamicmodeltab.h
localmylist-management/tabs/mylisttab.cpp
localmylist-management/tabs/mylisttab.h
localmylist-management/tabs/pathmappingtab.cpp
localmylist-management/tabs/pathmappingtab.h
localmylist-management/tabs/pathmappingtab.ui
localmylist-management/tabs/pendingrequesttab.cpp
localmylist-management/tabs/pendingrequesttab.h
localmylist-management/tabs/pendingrequesttab.ui
localmylist-management/tabs/reportstab.cpp
localmylist-management/tabs/reportstab.h
localmylist-management/tabs/searchtab.cpp
localmylist-management/tabs/searchtab.h
localmylist-management/tabs/unknownfilestab.cpp
localmylist-management/tabs/unknownfilestab.h
localmylist-management/tabs/unknownfilestab.ui
localmylist-management/tabwidget.cpp
localmylist-management/tabwidget.h

index cbda5eb6050801d7c87274c37c4725e6ee30896c..d55fed6091ad91b9658aa07545e2ca54cc8b5560 100644 (file)
@@ -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);
index 94a6eb88b2b72bcf922059b43e7186f2e0ea5709..066f27df1d21e718a3e6ad8e0f348c5393ec6c0e 100644 (file)
@@ -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<typename T> class AbstractTabBase : public AbstractTab
 {
 public:
index f7f023e4e0b229dbe7a4d6cb539d1a3c384fd491..dc233d9500fcd2315c146c5ff3f64fc6f32aaff7 100644 (file)
@@ -31,8 +31,6 @@
 #include "reporteditordialog.h"
 #include "versiondialog.h"
 
-#include "tabs/mylisttab.h"
-#include "tabs/reportstab.h"
 
 #include <QDebug>
 
@@ -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;
index 6e9cf46bf4e7f11742e11c8450848a547f51c785..089e25c55689a5708253f98161c3a22c6bb4e015 100644 (file)
@@ -2,6 +2,7 @@
 #define MAINWINDOW_H
 
 #include <QMainWindow>
+#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:
index b092b2e67e4fce44c9bddc5d966a775b26eab9f0..3351dd101f0e4445409d41eb35ce053b611a0cbe 100644 (file)
     <bool>false</bool>
    </attribute>
    <addaction name="actionReload"/>
+   <addaction name="separator"/>
    <addaction name="actionSelectAll"/>
    <addaction name="actionClearSelection"/>
+   <addaction name="separator"/>
+   <addaction name="actionSaveChanges"/>
+   <addaction name="actionDiscardChanges"/>
+   <addaction name="separator"/>
+   <addaction name="actionAdd"/>
+   <addaction name="actionRemoveSelected"/>
   </widget>
   <widget class="QStatusBar" name="statusBar"/>
   <action name="actionConnect">
     <string>Settings...</string>
    </property>
   </action>
+  <action name="actionSaveChanges">
+   <property name="text">
+    <string>Save Changes</string>
+   </property>
+   <property name="toolTip">
+    <string>Save changes made in the current tab</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+S</string>
+   </property>
+  </action>
+  <action name="actionDiscardChanges">
+   <property name="text">
+    <string>Discard Changes</string>
+   </property>
+   <property name="toolTip">
+    <string>Discard Changes made in the current tab</string>
+   </property>
+  </action>
+  <action name="actionAdd">
+   <property name="text">
+    <string>Add</string>
+   </property>
+   <property name="toolTip">
+    <string>Add a new entry for the current tab</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+N</string>
+   </property>
+  </action>
+  <action name="actionRemoveSelected">
+   <property name="text">
+    <string>Remove Selected</string>
+   </property>
+   <property name="toolTip">
+    <string>Remove selected entries for the current tab</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <customwidgets>
index 34168a609a78693755ba6d3681f64602a9d73363..d0d2516e067cc9e5e39c150f57857087d837b060 100644 (file)
@@ -41,6 +41,11 @@ void DatabaseLogTab::activate()
        reload();
 }
 
+AbstractTab::TabActions DatabaseLogTab::availableActions() const
+{
+       return Reload;
+}
+
 void DatabaseLogTab::reload()
 {
        QSqlQuery &q = LocalMyList::instance()->database()->prepare(
index 44342838ceffb7730a748b0fd3729df2d88cab09..1c123401b70ba80043f868c6489fb278a46a125b 100644 (file)
@@ -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;
index 1c8579103acda525488582e62313f579aae7deed..80ffd2aea1fcb1957fe9ef0c841bcbafd7902d5e 100644 (file)
@@ -109,6 +109,11 @@ void DynamicModelTab::activate()
        ui->filterInput->setFocus();
 }
 
+AbstractTab::TabActions DynamicModelTab::availableActions() const
+{
+       return Reload;
+}
+
 void DynamicModelTab::reload()
 {
        model->reload();
index 5297758c3462185d5eece9717bf08980f80c9de4..f19c715ea5febceaa63223a54feb945b320c7545 100644 (file)
@@ -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);
index 375e1aadb757edba96f8e212e01f9df970e39d35..ec14e31fa33b8b712f0358218d277f9a8d022fe0 100644 (file)
@@ -72,6 +72,11 @@ void MyListTab::activate()
        ui->filterInput->setFocus();
 }
 
+AbstractTab::TabActions MyListTab::availableActions() const
+{
+       return Reload;
+}
+
 void MyListTab::reload()
 {
        myListModel()->reload();
index b50a47162d9903476b72133379ef27071fca2ee0..de58d30a2f5e9efbb31634db13944479114cc1d4 100644 (file)
@@ -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);
index b8f55fbd32673b9d2797f532fb9823821ffc9e85..243bbc1b3842aa57574907072e3d80a9dc86e606 100644 (file)
@@ -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;
 
index 957c4e6a548254b821cce448402ab30c697b869c..844b89aab68a1de8c77ab770f9e1807f5bc08988 100644 (file)
@@ -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;
index 80518b87da358104ae29970a98306cba4444a722..31046c60d8acb891a2a832ef59e166a03593d5c7 100644 (file)
    <item>
     <widget class="QTableView" name="pathMappingView"/>
    </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QPushButton" name="saveButton">
-       <property name="text">
-        <string>Save Changes</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="discardButton">
-       <property name="text">
-        <string>Discard Changes</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QPushButton" name="addNewButton">
-       <property name="text">
-        <string>Add New</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="removeSelectedButton">
-       <property name="text">
-        <string>Remove Selected</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
   </layout>
  </widget>
  <resources/>
index d5c7f4c981af7a54093755fcf213b690d34f3c66..5f60917bd2922a81f1cbb81133b4e31832c66b0b 100644 (file)
@@ -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<LocalMyList::PendingRequest> 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<LocalMyList::PendingRequest> requests = selectionToPendingRequestList();
index 0ac5603cb82419c82c2ef0c9a6398a0b48703b8f..f8f94eb7d4334712f4c118230638b4892f5cdb00 100644 (file)
@@ -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:
index 22d8574a5f6d35d4f5282940608ab0977661fbbe..5e7b8bd029d66fc90c0052edeb58b7003a30726c 100644 (file)
        </property>
       </widget>
      </item>
-     <item>
-      <widget class="QPushButton" name="deleteButton">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="text">
-        <string>Delete</string>
-       </property>
-      </widget>
-     </item>
     </layout>
    </item>
   </layout>
index f981b2671f07852a9316bc6ac40d274c9413264c..de76655a6b1d652ce1ca7d43af728b10c3c4f3ed 100644 (file)
@@ -50,6 +50,11 @@ void ReportsTab::activate()
        reload();
 }
 
+AbstractTab::TabActions ReportsTab::availableActions() const
+{
+       return Reload;
+}
+
 void ReportsTab::reload()
 {
        ui->reports->clear();
index 9fee45d29eef5db8f7cf8d0ce54c86e9ae4d3eeb..a5ea36053a53084d467a981408c8213eeeffe0db 100644 (file)
@@ -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);
index c894983dd4f3a841e78705766fcbada76e88d769..45d86958f4e2e472f14eb331ae83eb408e08403c 100644 (file)
@@ -40,10 +40,6 @@ void SearchTab::init()
        ui->view->setModel(model);
 }
 
-void SearchTab::activate()
-{
-}
-
 void SearchTab::on_input_textChanged(const QString &text)
 {
        QString query;
index 00cdbb8c3e983ad5b4db355a14ab7cfa7a651c19..e890b77ddf269bf7f398fc9498258fd617222106 100644 (file)
@@ -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);
index 63553b5e6b768ad946df876e12874db1dc8c1d74..5e56d4e88b283560fe194c527117c244b2285476 100644 (file)
@@ -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;
 
index 7be63a7964624ddc66973076b197ab1bc8e8a7ae..b7f9901879d93c242162863412bb0314f579356d 100644 (file)
@@ -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;
index b7513a7506ef0d49495b27d2db20413b94b2e33b..a9a291aa5a2985bad3833547677eeafee60dbd1f 100644 (file)
    <item>
     <widget class="QTableView" name="unknownFilesView"/>
    </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QPushButton" name="deleteButton">
-       <property name="text">
-        <string>Delete Selected</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
   </layout>
  </widget>
  <resources/>
index a7443d31512275fe8709aea29c50ee3436500b36..cfc8a39eb4d4a6b7147917720f22842a1f1972bf 100644 (file)
@@ -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)
index 38a2e957a17d45ad845ba434f3ad915d0d2a8b45..84572680ec1eae7b30df4c474d0c136e52c7af03 100644 (file)
@@ -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);