QTabWidget(parent), previousTab(0), m_mainWindow(0)
{
setDocumentMode(true);
- setTabsClosable(true);
setMovable(true);
+ setTabsClosable(true);
signalMapper = new QSignalMapper(this);
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
return m_mainWindow;
}
+bool TabWidget::isLockedLayout() const
+{
+ return !isMovable();
+}
+
void TabWidget::loadSettings(QSettings *s)
{
QStringList ids;
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)
s->beginGroup("management-gui");
s->setValue("tabs", ids.join(QChar(',')));
s->setValue("currentTab", currentIndex());
+ s->setValue("lockTabLayout", isLockedLayout());
s->endGroup();
}
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);
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;
void populateMenu(QMenu *menu);
MainWindow *mainWindow() const;
+ bool isLockedLayout() const;
void loadSettings(QSettings *settings);
void saveSettings(QSettings *settings);
AbstractTab *tab(int index) const;
void setMainWindow(MainWindow *mainWindow);
+ void setLockLayout(bool locked);
private slots:
void tabNameChanged(const QString &newName);
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;