void MainWindow::createDockWidget() { CreateDockWidgetDialog dialog(this); int ret = dialog.exec(); if (ret == QDialog::Rejected) return; QDockWidget *dw = new QDockWidget; dw->setObjectName(dialog.objectName()); dw->setWindowTitle(dialog.objectName()); dw->setWidget(new QTextEdit); Qt::DockWidgetArea area = dialog.location(); switch (area) { case Qt::LeftDockWidgetArea: case Qt::RightDockWidgetArea: case Qt::TopDockWidgetArea: case Qt::BottomDockWidgetArea: addDockWidget(area, dw); break; default: if (!restoreDockWidget(dw)) { QMessageBox::warning(this, QString(), tr("Failed to restore dock widget")); delete dw; return; } break; } extraDockWidgets.append(dw); destroyDockWidgetMenu->setEnabled(true); destroyDockWidgetMenu->addAction(new QAction(dialog.objectName(), this)); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void SIMPLView_UI::readDockWidgetSettings(SIMPLViewSettings* prefs, QDockWidget* dw) { restoreDockWidget(dw); QString name = dw->objectName(); bool b = prefs->value(dw->objectName(), QVariant(false)).toBool(); dw->setHidden(b); }
void MainWindow::setMainWidget( QWidget *mainWidget ) { mpMainWidget = mainWidget; setCentralWidget( mpMainWidget ); restoreGeometry( Settings::value( Settings::CommonGeometry ) ); restoreState( Settings::value( Settings::CommonState ) ); QList<QDockWidget*> docks( findChildren<QDockWidget*>() ); foreach( QDockWidget *dock, docks ) { restoreDockWidget( dock ); }
void MainWindow::readSettings() { QSettings settings("fix8","logviewer"); restoreGeometry(settings.value("Geometry").toByteArray()); restoreState(settings.value("MainWindowState").toByteArray()); restoreDockWidget(consoleDock); lastSelectedDir = settings.value("LastSelectedDir").toString(); fileDirState= settings.value("FileDirState").toByteArray(); fileFilter = settings.value("FileFilter").toString(); Qt::ToolButtonStyle tbs = (Qt::ToolButtonStyle) settings.value("ToolButtonStyle",Qt::ToolButtonIconOnly).toInt(); setToolButtonStyle(tbs); switch (tbs) { case Qt::ToolButtonIconOnly: iconsOnlyA->setChecked(true); break; case Qt::ToolButtonTextOnly: iconsTextOnlyA->setChecked(true); break; default: iconsWithTextA->setChecked(true); } QSize toolbarIconSize = settings.value("ToolButtonSize",GUI::Globals::regIconSize).toSize(); mainToolBar->setIconSize(toolbarIconSize); searchToolBar->setIconSize(toolbarIconSize); if (toolbarIconSize == GUI::Globals::smallIconSize) iconSizeSmallA->setChecked(true); else if (toolbarIconSize == GUI::Globals::largeIconSize) iconSizeLargeA->setChecked(true); else iconSizeRegA->setChecked(true); QVariant var; QPalette pal = mainMenuBar->palette(); QColor defaultColor = pal.color(QPalette::Background); var = settings.value("MenuBarColor",defaultColor); QColor color = var.value<QColor>(); pal.setColor(QPalette::Background,color); mainMenuBar->setPalette(pal); menubarColor = color; messageSplitterSettings = settings.value("MessageSplitter").toByteArray(); }
void QtDockRegion::restoreDockWidgets() { auto qtFramework = get<IQtFramework>(); assert(qtFramework != nullptr); auto qMainWindow = qtWindow_.window(); assert(qMainWindow != nullptr); for (auto& it : dockWidgetMap_) { auto view = it.first; assert(view != nullptr); auto qDockWidget = it.second.first.get(); assert(qDockWidget != nullptr); if (qtWindow_.isReady()) { qMainWindow->restoreDockWidget(qDockWidget); } else { needToRestorePreference_.push_back(std::make_pair(qDockWidget, view)); } } }
QtDockRegion::QtDockRegion(IComponentContext& context, QtWindow& qtWindow, QDockWidget& qDockWidget) : Depends(context), qtWindow_(qtWindow), qDockWidget_(qDockWidget), hidden_(false) { auto qMainWindow = qtWindow_.window(); assert(qMainWindow != nullptr); // Walk our parent hierarchy and make sure we are tabified with the topmost dock widget. // Dock widgets as children of anything but the main window are not supported. // We support this in the Qt designer so that we can override the properties of a tab or collection of tabs within a // dock region QWidget* qWidget = &qDockWidget_; while (qWidget != nullptr) { qWidget = qWidget->parentWidget(); if (qWidget == nullptr) { break; } auto qDockWidget = qobject_cast<QDockWidget*>(qWidget); if (qDockWidget != nullptr) { qMainWindow->tabifyDockWidget(qDockWidget, &qDockWidget_); } } qDockWidget_.setVisible(false); auto layoutTagsProperty = qDockWidget_.property("layoutTags"); if (layoutTagsProperty.isValid()) { auto tags = layoutTagsProperty.toStringList(); for (auto it = tags.cbegin(); it != tags.cend(); ++it) { tags_.tags_.push_back(std::string(it->toUtf8())); } } auto hiddenProperty = qDockWidget_.property("hidden"); if (hiddenProperty.isValid()) { hidden_ = hiddenProperty.toBool(); } QObject::connect(&qtWindow_, &QtWindow::windowReady, [&]() { if (needToRestorePreference_.empty()) { return; } auto qtFramework = get<IQtFramework>(); assert(qtFramework != nullptr); auto qMainWindow = qtWindow_.window(); for (auto& it : needToRestorePreference_) { auto qtDockWidget = it.first; assert(qtDockWidget != nullptr); auto pView = it.second; assert(pView != nullptr); bool isOk = qMainWindow->restoreDockWidget(qtDockWidget); if (!isOk) { setDefaultPreferenceForDockWidget(qtDockWidget); } auto pQWidget = qtFramework->toQWidget(*pView); assert(pQWidget != nullptr); qtDockWidget->setWidget(pQWidget); QmlView* qmlView = dynamic_cast<QmlView*>(pView); if (qmlView == nullptr) { return; } auto ngtDockWidget = dynamic_cast<NGTDockWidget*>(qtDockWidget); if (ngtDockWidget == nullptr) { return; } if (ngtDockWidget->isVisible() && ngtDockWidget->getVisibility()) { qmlView->setNeedsToLoad(true); } } needToRestorePreference_.clear(); }); }
void QtDockRegion::addView(IView& view) { auto qMainWindow = qtWindow_.window(); assert(qMainWindow != nullptr); auto findIt = dockWidgetMap_.find(&view); if (findIt != dockWidgetMap_.end()) { // already added into the dockWidget return; } // IView will not control qWidget's life-cycle after this call. auto qtFramework = get<IQtFramework>(); assert(qtFramework != nullptr); auto qWidget = qtFramework->toQWidget(view); if (qWidget == nullptr) { return; } auto centralWidget = qMainWindow->centralWidget(); if (centralWidget != nullptr) { centralWidget->layout()->addWidget(qWidget); } qWidget->setSizePolicy(qDockWidget_.sizePolicy()); qWidget->setMinimumSize(qDockWidget_.minimumSize()); qWidget->setMaximumSize(qDockWidget_.maximumSize()); qWidget->setSizeIncrement(qDockWidget_.sizeIncrement()); qWidget->setBaseSize(qDockWidget_.baseSize()); qWidget->resize(qWidget->baseSize()); auto qDockWidget = new NGTDockWidget(&view); qDockWidget->setObjectName(view.id()); IView* pView = &view; QtWindow* pWindow = &qtWindow_; QObject::connect(qDockWidget, &QDockWidget::visibilityChanged, [qDockWidget, pWindow](bool visible) { qDockWidget->visibilityChanged(visible); if (visible) { if (pWindow->isLoadingPreferences()) { return; } QCoreApplication::postEvent(qDockWidget, new QEvent(QEvent::FocusIn)); } }); if (qtWindow_.isReady()) { bool isOk = qMainWindow->restoreDockWidget(qDockWidget); if (!isOk) { setDefaultPreferenceForDockWidget(qDockWidget); } QmlView* qmlView = dynamic_cast<QmlView*>(pView); if (qmlView != nullptr) { if (qDockWidget->isVisible() && qDockWidget->getVisibility()) { qmlView->setNeedsToLoad(true); } } } else { needToRestorePreference_.push_back(std::make_pair(qDockWidget, pView)); } qDockWidget->setWidget(qWidget); std::string actionId("View."); actionId += view.title(); auto action = qtFramework->createAction(actionId.c_str(), view.title(), "View", [pView, qDockWidget](IAction*) { qDockWidget->show(); qDockWidget->raise(); pView->focusInEvent(); }); auto application = get<IUIApplication>(); assert(application != nullptr); application->addAction(*action); dockWidgetMap_[&view] = std::make_pair(std::unique_ptr<QDockWidget>(qDockWidget), std::move(action)); }