Make floating gdb views possible. Hiding when mode is switched.

This commit is contained in:
con
2009-05-15 16:54:54 +02:00
parent d46a1447f1
commit 564f7b9eb5
4 changed files with 44 additions and 13 deletions

View File

@@ -479,12 +479,13 @@ QDockWidget *DebuggerManager::createDockForWidget(QWidget *widget)
{
QDockWidget *dockWidget = new QDockWidget(widget->windowTitle(), m_mainWindow);
dockWidget->setObjectName(widget->windowTitle());
dockWidget->setFeatures(QDockWidget::DockWidgetClosable);
dockWidget->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);
dockWidget->setTitleBarWidget(new QWidget(dockWidget));
dockWidget->setWidget(widget);
connect(dockWidget->toggleViewAction(), SIGNAL(toggled(bool)),
this, SLOT(dockToggled(bool)), Qt::QueuedConnection);
connect(dockWidget->toggleViewAction(), SIGNAL(triggered()),
this, SLOT(dockActionTriggered()), Qt::QueuedConnection);
m_dockWidgets.append(dockWidget);
m_dockWidgetActiveState.append(false);
return dockWidget;
}
@@ -515,11 +516,30 @@ void DebuggerManager::setSimpleDockWidgetArrangement()
m_outputDock->hide();
}
void DebuggerManager::updateDockWidgetActiveStates()
{
for (int i = 0; i < m_dockWidgets.size(); ++i) {
m_dockWidgetActiveState[i] = m_dockWidgets.at(i)->isVisible();
}
}
void DebuggerManager::setFloatingDockWidgetsVisible(bool visible)
{
for (int i = 0; i < m_dockWidgets.size(); ++i) {
QDockWidget *dockWidget = m_dockWidgets.at(i);
if (dockWidget->isFloating() && m_dockWidgetActiveState.at(i)) {
dockWidget->setVisible(visible);
}
}
if (visible)
updateDockWidgetActiveStates(); // we can't do that earlier, because the dock widgets are not visible at startup
}
void DebuggerManager::setLocked(bool locked)
{
const QDockWidget::DockWidgetFeatures features =
(locked) ? QDockWidget::DockWidgetClosable :
QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable;
(locked) ? QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable :
QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable;
foreach (QDockWidget *dockWidget, m_dockWidgets) {
QWidget *titleBarWidget = dockWidget->titleBarWidget();
@@ -534,11 +554,16 @@ void DebuggerManager::setLocked(bool locked)
}
}
void DebuggerManager::dockToggled(bool on)
void DebuggerManager::dockActionTriggered()
{
QDockWidget *dw = qobject_cast<QDockWidget *>(sender()->parent());
if (on && dw)
dw->raise();
if (dw) {
if (dw->isVisible())
dw->raise();
int index = m_dockWidgets.indexOf(dw);
if (index >= 0)
m_dockWidgetActiveState[index] = dw->isVisible();
}
}
QAbstractItemModel *DebuggerManager::threadsModel()