From cb2f7da46590d1f103bad1bc295dadc356e51fa2 Mon Sep 17 00:00:00 2001 From: APTX Date: Fri, 3 May 2013 01:23:49 +0200 Subject: [PATCH] Add option to lock Tab Layout. --- localmylist-management/mainwindow.cpp | 3 +-- localmylist-management/tabwidget.cpp | 26 +++++++++++++++++++++++++- localmylist-management/tabwidget.h | 6 ++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/localmylist-management/mainwindow.cpp b/localmylist-management/mainwindow.cpp index 89ba925..7f42ec7 100644 --- a/localmylist-management/mainwindow.cpp +++ b/localmylist-management/mainwindow.cpp @@ -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() diff --git a/localmylist-management/tabwidget.cpp b/localmylist-management/tabwidget.cpp index 5d015f9..b2eec8f 100644 --- a/localmylist-management/tabwidget.cpp +++ b/localmylist-management/tabwidget.cpp @@ -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); diff --git a/localmylist-management/tabwidget.h b/localmylist-management/tabwidget.h index eb433ed..6816e7e 100644 --- a/localmylist-management/tabwidget.h +++ b/localmylist-management/tabwidget.h @@ -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 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 static T *createTab(QWidget *parent) { return new T(parent); } +signals: + void lockLayoutChanged(bool locked); + private: static QList tabMenuOrder; static QHash registeredTabNames; -- 2.52.0