]> Some of my projects - localmylist.git/commitdiff
Some improvements for Tabs and TabWidget.
authorAPTX <redacted>
Tue, 30 Apr 2013 13:19:32 +0000 (15:19 +0200)
committerAPTX <redacted>
Tue, 30 Apr 2013 13:19:32 +0000 (15:19 +0200)
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.

localmylist-management/abstracttab.cpp
localmylist-management/abstracttab.h
localmylist-management/tabs/mylisttab.cpp
localmylist-management/tabs/mylisttab.h
localmylist-management/tabs/reportstab.cpp
localmylist-management/tabs/reportstab.h
localmylist-management/tabwidget.cpp
localmylist-management/tabwidget.h

index b361383..3b7adf2 100644 (file)
@@ -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);
        }
 }
 
index fb4951e..051c9fd 100644 (file)
@@ -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<typename T> class AbstractTabBase : public AbstractTab
+{
+public:
+       explicit AbstractTabBase(QWidget *parent = 0) : AbstractTab(parent) {}
+       QString id() const { return T::staticId(); }
+};
+
 #endif // ABSTRACTTAB_H
index 7db8fc5..47feace 100644 (file)
@@ -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";
 }
index 447a85a..a9b1c96 100644 (file)
@@ -15,7 +15,7 @@ namespace Ui {
 class MyListTab;
 }
 
-class MyListTab : public AbstractTab
+class MyListTab : public AbstractTabBase<MyListTab>
 {
        Q_OBJECT
 
@@ -23,7 +23,7 @@ public:
        explicit MyListTab(QWidget *parent = 0);
        ~MyListTab();
 
-       QString id() const;
+       static QString staticId();
        static QString name();
 
        void init();
index 8c4cba3..571a9b9 100644 (file)
@@ -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";
 }
index af04831..57a92be 100644 (file)
@@ -9,7 +9,7 @@ class ReportsTab;
 
 class QSqlQueryModel;
 
-class ReportsTab : public AbstractTab
+class ReportsTab : public AbstractTabBase<ReportsTab>
 {
        Q_OBJECT
 
@@ -17,7 +17,7 @@ public:
        explicit ReportsTab(QWidget *parent = 0);
        ~ReportsTab();
 
-       QString id() const;
+       static QString staticId();
        static QString name();
 
        void init();
index fb49828..00d440f 100644 (file)
@@ -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)
index 9e4069f..9fdf2f6 100644 (file)
@@ -17,7 +17,7 @@ class TabWidget : public QTabWidget
        Q_OBJECT
        Q_PROPERTY(MainWindow *mainWindow READ mainWindow WRITE setMainWindow)
 
-       typedef std::function<AbstractTab *()> TabFactory;
+       typedef std::function<AbstractTab *(QWidget *)> TabFactory;
        typedef std::function<QString()> 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<typename T> static bool registerTab()
        {
-               // TODO fix this
-               return registerTab(T().id(), T::name, TabWidget::createTab<T>);
+               return registerTab(T::staticId(), T::name, TabWidget::createTab<T>);
        }
 
-       template<typename T> static T *createTab() { return new T; }
+       template<typename T> static T *createTab(QWidget *parent) { return new T(parent); }
 
 private:
        static QList<QString> tabMenuOrder;