]> Some of my projects - localmylist.git/commitdiff
Add option to lock Tab Layout.
authorAPTX <marek321@gmail.com>
Thu, 2 May 2013 23:23:49 +0000 (01:23 +0200)
committerAPTX <marek321@gmail.com>
Thu, 2 May 2013 23:23:49 +0000 (01:23 +0200)
localmylist-management/mainwindow.cpp
localmylist-management/tabwidget.cpp
localmylist-management/tabwidget.h

index 89ba925783be90a6c501d30b0866c1ae0abb32a1..7f42ec79b646210a192a7c627570e3c3bbfd8746 100644 (file)
@@ -80,9 +80,8 @@ MainWindow::MainWindow(QWidget *parent) :
        registerTabs();
 
        ui->tabWidget->setMainWindow(this);
-       ui->tabWidget->populateMenu(ui->menuView);
-
        ui->tabWidget->loadSettings(MyList::instance()->defaultLocalQSettings());
+       ui->tabWidget->populateMenu(ui->menuView);
 }
 
 MainWindow::~MainWindow()
index 5d015f94f041165a313e381fac5157fcd32c8d70..b2eec8fb9b299a181deb0387dd9a098928f78023 100644 (file)
@@ -15,8 +15,8 @@ TabWidget::TabWidget(QWidget *parent) :
        QTabWidget(parent), previousTab(0), m_mainWindow(0)
 {
        setDocumentMode(true);
-       setTabsClosable(true);
        setMovable(true);
+       setTabsClosable(true);
 
        signalMapper = new QSignalMapper(this);
 
@@ -44,6 +44,13 @@ void TabWidget::populateMenu(QMenu *menu)
                signalMapper->setMapping(action, id);
                menu->addAction(action);
        }
+       menu->addSeparator();
+
+       QAction *lockAction = new QAction(tr("Lock Tab Layout"), menu);
+       lockAction->setCheckable(true);
+       lockAction->setChecked(isLockedLayout());
+       connect(lockAction, SIGNAL(toggled(bool)), this, SLOT(setLockLayout(bool)));
+       menu->addAction(lockAction);
 }
 
 MainWindow *TabWidget::mainWindow() const
@@ -51,6 +58,11 @@ MainWindow *TabWidget::mainWindow() const
        return m_mainWindow;
 }
 
+bool TabWidget::isLockedLayout() const
+{
+       return !isMovable();
+}
+
 void TabWidget::loadSettings(QSettings *s)
 {
        QStringList ids;
@@ -58,6 +70,7 @@ void TabWidget::loadSettings(QSettings *s)
        s->beginGroup("management-gui");
        ids = s->value("tabs", "mylist").toString().split(QChar(','));
        currentIndex = s->value("currentTab", 0).toInt();
+       setLockLayout(s->value("lockTabLayout", false).toBool());
        s->endGroup();
 
        for (const QString &id : ids)
@@ -75,6 +88,7 @@ void TabWidget::saveSettings(QSettings *s)
        s->beginGroup("management-gui");
        s->setValue("tabs", ids.join(QChar(',')));
        s->setValue("currentTab", currentIndex());
+       s->setValue("lockTabLayout", isLockedLayout());
        s->endGroup();
 }
 
@@ -94,6 +108,16 @@ void TabWidget::setMainWindow(MainWindow *mainWindow)
        m_mainWindow = mainWindow;
 }
 
+void TabWidget::setLockLayout(bool locked)
+{
+       if (isLockedLayout() == locked)
+               return;
+
+       setMovable(!locked);
+       setTabsClosable(!locked);
+       emit lockLayoutChanged(!locked);
+}
+
 int TabWidget::addTab(AbstractTab *tab)
 {
        initTab(tab);
index eb433ed6eeb01ccad9dadcb59a4498309c7adf10..6816e7e0c45246bda2e3505a3f3588f9c24d7e5d 100644 (file)
@@ -17,6 +17,7 @@ void registerTabs();
 class TabWidget : public QTabWidget
 {
        Q_OBJECT
+       Q_PROPERTY(bool lockLayout READ isLockedLayout WRITE setLockLayout NOTIFY lockLayoutChanged)
        Q_PROPERTY(MainWindow *mainWindow READ mainWindow WRITE setMainWindow)
 
        typedef std::function<AbstractTab *(QWidget *)> TabFactory;
@@ -29,6 +30,7 @@ public:
        void populateMenu(QMenu *menu);
 
        MainWindow *mainWindow() const;
+       bool isLockedLayout() const;
 
        void loadSettings(QSettings *settings);
        void saveSettings(QSettings *settings);
@@ -44,6 +46,7 @@ public slots:
        AbstractTab *tab(int index) const;
 
        void setMainWindow(MainWindow *mainWindow);
+       void setLockLayout(bool locked);
 
 private slots:
        void tabNameChanged(const QString &newName);
@@ -69,6 +72,9 @@ public:
 
        template<typename T> static T *createTab(QWidget *parent) { return new T(parent); }
 
+signals:
+       void lockLayoutChanged(bool locked);
+
 private:
        static QList<QString> tabMenuOrder;
        static QHash<QString, TabName> registeredTabNames;