Add custom properties to ToolWindowManager toolwindows, update titles

* Two properties added - DisallowUserDocking which completely prevents
  a toolwindow from being dragged or docked other than programmatically.
* HideCloseButton also hides the close button that normally appears on
  the tabs created
* Also tabs now watch for title change signals and update the titles in
  tabs.
This commit is contained in:
baldurk
2015-07-10 15:24:24 +02:00
parent 227e6feddd
commit 4627ead8f2
4 changed files with 71 additions and 0 deletions
@@ -80,6 +80,17 @@ ToolWindowManager::~ToolWindowManager() {
}
}
void ToolWindowManager::setToolWindowProperties(QWidget* toolWindow, ToolWindowManager::ToolWindowProperty properties) {
m_toolWindowProperties[toolWindow] = properties;
ToolWindowManagerArea *area = areaOf(toolWindow);
if(area)
area->updateToolWindow(toolWindow);
}
ToolWindowManager::ToolWindowProperty ToolWindowManager::toolWindowProperties(QWidget* toolWindow) {
return m_toolWindowProperties[toolWindow];
}
void ToolWindowManager::addToolWindow(QWidget *toolWindow, const AreaReference &area) {
addToolWindows(QList<QWidget*>() << toolWindow, area);
}
@@ -97,6 +108,8 @@ void ToolWindowManager::addToolWindows(QList<QWidget *> toolWindows, const ToolW
toolWindow->hide();
toolWindow->setParent(0);
m_toolWindows << toolWindow;
m_toolWindowProperties[toolWindow] = ToolWindowProperty(0);
QObject::connect(toolWindow, &QWidget::windowTitleChanged, this, &ToolWindowManager::windowTitleChanged);
}
moveToolWindows(toolWindows, area);
}
@@ -211,6 +224,7 @@ void ToolWindowManager::removeToolWindow(QWidget *toolWindow) {
}
moveToolWindow(toolWindow, NoArea);
m_toolWindows.removeOne(toolWindow);
m_toolWindowProperties.remove(toolWindow);
}
void ToolWindowManager::setSuggestionSwitchInterval(int msec) {
@@ -373,6 +387,9 @@ void ToolWindowManager::startDrag(const QList<QWidget *> &toolWindows) {
qWarning("ToolWindowManager::execDrag: drag is already in progress");
return;
}
foreach(QWidget* toolWindow, toolWindows) {
if(toolWindowProperties(toolWindow) & DisallowUserDocking) { return; }
}
if (toolWindows.isEmpty()) { return; }
m_draggedToolWindows = toolWindows;
m_dragIndicator->setPixmap(generateDragPixmap(toolWindows));
@@ -675,6 +692,17 @@ void ToolWindowManager::tabCloseRequested(int index) {
hideToolWindow(toolWindow);
}
void ToolWindowManager::windowTitleChanged(const QString &title) {
QWidget* toolWindow = qobject_cast<QWidget*>(sender());
if(!toolWindow) {
return;
}
ToolWindowManagerArea *area = areaOf(toolWindow);
if(area) {
area->updateToolWindow(toolWindow);
}
}
QSplitter *ToolWindowManager::createSplitter() {
QSplitter* splitter = new QSplitter();
splitter->setChildrenCollapsible(false);