From: APTX Date: Tue, 30 Apr 2013 13:19:32 +0000 (+0200) Subject: Some improvements for Tabs and TabWidget. X-Git-Url: https://gitweb.tyo.aptx.org/?a=commitdiff_plain;h=96a6fa07803819dbd0ad4e3ef86549ac4171cdc6;p=localmylist.git Some improvements for Tabs and TabWidget. Have a way of getting the id statically and via virtual call. Not perfect, but works. Create tabs with a parent set. Avoids creating top-level windows only to be given a parent later. --- diff --git a/localmylist-management/abstracttab.cpp b/localmylist-management/abstracttab.cpp index b361383..3b7adf2 100644 --- a/localmylist-management/abstracttab.cpp +++ b/localmylist-management/abstracttab.cpp @@ -55,12 +55,12 @@ void AbstractTab::saveSettings(QSettings *settings) Q_UNUSED(settings); } -void AbstractTab::setName(QString name) +void AbstractTab::setLabel(QString label) { - if (m_label != name) + if (m_label != label) { - m_label = name; - emit nameChanged(name); + m_label = label; + emit nameChanged(label); } } diff --git a/localmylist-management/abstracttab.h b/localmylist-management/abstracttab.h index fb4951e..051c9fd 100644 --- a/localmylist-management/abstracttab.h +++ b/localmylist-management/abstracttab.h @@ -9,13 +9,14 @@ class MainWindow; class AbstractTab : public QWidget { Q_OBJECT - Q_PROPERTY(QString label READ label WRITE setName NOTIFY nameChanged) + Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY nameChanged) public: explicit AbstractTab(QWidget *parent = 0); ~AbstractTab(); virtual QString id() const; + static QString staticId(); static QString name(); QString label() const; @@ -34,7 +35,7 @@ signals: void nameChanged(QString label); public slots: - void setName(QString label); + void setLabel(QString label); void setMainWindow(MainWindow *mainWindow); protected: @@ -42,4 +43,11 @@ protected: MainWindow *m_mainWindow; }; +template class AbstractTabBase : public AbstractTab +{ +public: + explicit AbstractTabBase(QWidget *parent = 0) : AbstractTab(parent) {} + QString id() const { return T::staticId(); } +}; + #endif // ABSTRACTTAB_H diff --git a/localmylist-management/tabs/mylisttab.cpp b/localmylist-management/tabs/mylisttab.cpp index 7db8fc5..47feace 100644 --- a/localmylist-management/tabs/mylisttab.cpp +++ b/localmylist-management/tabs/mylisttab.cpp @@ -18,7 +18,7 @@ using namespace LocalMyList; MyListTab::MyListTab(QWidget *parent) : - AbstractTab(parent), + AbstractTabBase(parent), ui(new Ui::MyListTab) { ui->setupUi(this); @@ -30,7 +30,7 @@ MyListTab::~MyListTab() delete ui; } -QString MyListTab::id() const +QString MyListTab::staticId() { return "mylist"; } diff --git a/localmylist-management/tabs/mylisttab.h b/localmylist-management/tabs/mylisttab.h index 447a85a..a9b1c96 100644 --- a/localmylist-management/tabs/mylisttab.h +++ b/localmylist-management/tabs/mylisttab.h @@ -15,7 +15,7 @@ namespace Ui { class MyListTab; } -class MyListTab : public AbstractTab +class MyListTab : public AbstractTabBase { Q_OBJECT @@ -23,7 +23,7 @@ public: explicit MyListTab(QWidget *parent = 0); ~MyListTab(); - QString id() const; + static QString staticId(); static QString name(); void init(); diff --git a/localmylist-management/tabs/reportstab.cpp b/localmylist-management/tabs/reportstab.cpp index 8c4cba3..571a9b9 100644 --- a/localmylist-management/tabs/reportstab.cpp +++ b/localmylist-management/tabs/reportstab.cpp @@ -11,7 +11,7 @@ using namespace LocalMyList; ReportsTab::ReportsTab(QWidget *parent) : - AbstractTab(parent), + AbstractTabBase(parent), ui(new Ui::ReportsTab) { ui->setupUi(this); @@ -23,7 +23,7 @@ ReportsTab::~ReportsTab() delete ui; } -QString ReportsTab::id() const +QString ReportsTab::staticId() { return "reports"; } diff --git a/localmylist-management/tabs/reportstab.h b/localmylist-management/tabs/reportstab.h index af04831..57a92be 100644 --- a/localmylist-management/tabs/reportstab.h +++ b/localmylist-management/tabs/reportstab.h @@ -9,7 +9,7 @@ class ReportsTab; class QSqlQueryModel; -class ReportsTab : public AbstractTab +class ReportsTab : public AbstractTabBase { Q_OBJECT @@ -17,7 +17,7 @@ public: explicit ReportsTab(QWidget *parent = 0); ~ReportsTab(); - QString id() const; + static QString staticId(); static QString name(); void init(); diff --git a/localmylist-management/tabwidget.cpp b/localmylist-management/tabwidget.cpp index fb49828..00d440f 100644 --- a/localmylist-management/tabwidget.cpp +++ b/localmylist-management/tabwidget.cpp @@ -75,7 +75,7 @@ void TabWidget::saveSettings(QSettings *s) int TabWidget::addTab(const QString &id) { - AbstractTab *t = createTab(id); + AbstractTab *t = createTab(id, this); if (!t) return -1; @@ -176,12 +176,12 @@ void TabWidget::deinitTab(AbstractTab *tab) delete tab; } -AbstractTab *TabWidget::createTab(const QString &id) +AbstractTab *TabWidget::createTab(const QString &id, QWidget *parent) { if (!registeredTabs.contains(id)) return 0; - return registeredTabs.value(id)(); + return registeredTabs.value(id)(parent); } bool TabWidget::registerTab(const QString &id, TabWidget::TabName tabName, TabWidget::TabFactory factory) diff --git a/localmylist-management/tabwidget.h b/localmylist-management/tabwidget.h index 9e4069f..9fdf2f6 100644 --- a/localmylist-management/tabwidget.h +++ b/localmylist-management/tabwidget.h @@ -17,7 +17,7 @@ class TabWidget : public QTabWidget Q_OBJECT Q_PROPERTY(MainWindow *mainWindow READ mainWindow WRITE setMainWindow) - typedef std::function TabFactory; + typedef std::function TabFactory; typedef std::function TabName; public: @@ -58,15 +58,14 @@ private: MainWindow * m_mainWindow; public: - static AbstractTab *createTab(const QString &id); + static AbstractTab *createTab(const QString &id, QWidget *parent = 0); static bool registerTab(const QString &id, TabName tabName, TabFactory factory); template static bool registerTab() { - // TODO fix this - return registerTab(T().id(), T::name, TabWidget::createTab); + return registerTab(T::staticId(), T::name, TabWidget::createTab); } - template static T *createTab() { return new T; } + template static T *createTab(QWidget *parent) { return new T(parent); } private: static QList tabMenuOrder;