]> Some of my projects - localmylist.git/commitdiff
Some improvements for Tabs and TabWidget.
authorAPTX <marek321@gmail.com>
Tue, 30 Apr 2013 13:19:32 +0000 (15:19 +0200)
committerAPTX <marek321@gmail.com>
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 b3613836911692161db19f31d13286834f8d4897..3b7adf28ab1ad5c6b139393c2bb33fdb2ce732e8 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 fb4951e6b4fe4649aa301f1fbae28a65b786d113..051c9fd1921a43fe17b3233e8970899138ea653f 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 7db8fc50842082fbc753dd6079ea760f15e8bd7e..47feace8c5d853dacc9d1bb105365fbf6a55c602 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 447a85af55ff280269aba91de39ff515072d849b..a9b1c96c8372a929d9997b6db6c1d651427841f5 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 8c4cba32084bc6bc118387bfdf062a2b7e039af2..571a9b97c45e9e266d24fe2d2db8025b398ee90d 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 af04831e33201952fd2653e19334a7857d2bce0e..57a92beef1c0779e214678d2da2d646c75c05fdc 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 fb4982804d86132fd7e0dcbed0f1eb2dccd6ef6c..00d440f795eae7c6307791192581d827a360ff34 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 9e4069f96b95e45b6f7317741b6b48470b138dab..9fdf2f6296c73abd0ed13ee3aa6685697cd19c1d 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;