14#include <QtDesigner/abstractformeditor.h>
15#include <QtDesigner/abstractformwindow.h>
16#include <QtDesigner/abstractformwindowmanager.h>
17#include <QtDesigner/abstractformeditorplugin.h>
18#include <QtDesigner/abstractwidgetbox.h>
19#include <QtDesigner/abstractmetadatabase.h>
21#include <QtDesigner/QDesignerComponents>
22#include <QtDesigner/abstractintegration.h>
23#include <QtDesigner/private/pluginmanager_p.h>
24#include <QtDesigner/private/formwindowbase_p.h>
25#include <QtDesigner/private/actioneditor_p.h>
27#include <QtWidgets/qdockwidget.h>
28#include <QtWidgets/qmenu.h>
29#include <QtWidgets/qmenubar.h>
30#include <QtWidgets/qmessagebox.h>
31#include <QtWidgets/qpushbutton.h>
32#include <QtWidgets/qtoolbar.h>
33#include <QtWidgets/qmdiarea.h>
34#include <QtWidgets/qmdisubwindow.h>
35#include <QtWidgets/qlayout.h>
37#include <QtGui/qactiongroup.h>
38#include <QtGui/qcursor.h>
39#include <QtGui/qevent.h>
40#include <QtGui/qscreen.h>
41#include <QtGui/qwindow.h>
43#include <QtCore/qdir.h>
44#include <QtCore/qfile.h>
45#include <QtCore/qurl.h>
46#include <QtCore/qtimer.h>
47#include <QtCore/qpluginloader.h>
48#include <QtCore/qdebug.h>
52using namespace Qt::StringLiterals;
56using ActionList = QList<QAction *>;
60 auto *rc = qobject_cast<QMdiSubWindow *>(w->parentWidget());
67 for (
QWidget *parentWidget = w->parentWidget(); parentWidget ; parentWidget = parentWidget->parentWidget()) {
68 if (
auto *dw = qobject_cast<QDockWidget *>(parentWidget)) {
72 Q_ASSERT(
"Dock widget not found");
78 m_minimized(mdiSubWindow->isShaded()),
79 m_position(mdiSubWindow->pos() + mdiSubWindow->mdiArea()->pos())
84 m_minimized(dockWidget->isMinimized()),
85 m_position(dockWidget->pos())
91 const QWidget *window = topLevelWindow->window();
93 m_minimized = window->isMinimized();
94 m_position = window->pos() - window->screen()->availableGeometry().topLeft();
98 const QPoint &mdiAreaOffset)
const
102 const QPoint mdiAreaPos = QPoint(qMax(0, m_position.x() - mdiAreaOffset.x()),
103 qMax(0, m_position.y() - mdiAreaOffset.y()));
104 mdiSubWindow->move(mdiAreaPos);
105 const QSize decorationSize = mdiSubWindow->size() - mdiSubWindow->contentsRect().size();
106 mdiSubWindow->resize(mdiSubWindow->widget()->size() + decorationSize);
107 mdiSubWindow->show();
109 mdiSubWindow->showShaded();
115 QWidget *window = topLevelWindow->window ();
116 const QPoint newPos = m_position + desktopTopLeft;
117 window->move(newPos);
119 topLevelWindow->showMinimized();
121 topLevelWindow->show();
127 dockWidget->widget()->setVisible(
true);
128 dockWidget->setVisible(!m_minimized);
137static inline QMenu *
addMenu(QMenuBar *mb,
const QString &title,
const ActionList &al)
139 QMenu *rc = mb->addMenu(title);
140 addActionsToMenu(rc, al);
147 m_core(QDesignerComponents::createFormEditorWithPluginPaths(options.pluginPaths,
this)),
148 m_windowActions(
new QActionGroup(
this)),
149 m_globalMenuBar(
new QMenuBar)
153 (
void) QDesignerComponents::createTaskMenu(core(),
this);
155 initializeCorePlugins();
156 QDesignerComponents::initializePlugins(core());
157 m_actionManager =
new QDesignerActions(options,
this);
159 m_windowActions->setExclusive(
true);
160 connect(m_windowActions, &QActionGroup::triggered,
164 addMenu(m_globalMenuBar, tr(
"&File"), m_actionManager
->fileActions()->actions());
166 QMenu *editMenu = addMenu(m_globalMenuBar, tr(
"&Edit"), m_actionManager->editActions()->actions());
167 editMenu->addSeparator();
170 QMenu *formMenu = addMenu(m_globalMenuBar, tr(
"F&orm"), m_actionManager->formActions()->actions());
171 auto *previewSubMenu =
new QMenu(tr(
"Preview in"), formMenu);
173 addActionsToMenu(previewSubMenu, m_actionManager
->styleActions()->actions());
175 QMenu *viewMenu = m_globalMenuBar->addMenu(tr(
"&View"));
179 m_windowMenu = addMenu(m_globalMenuBar, tr(
"&Window"), m_actionManager->windowActions()->actions());
181 addMenu(m_globalMenuBar, tr(
"&Help"), m_actionManager
->helpActions()->actions());
184 auto *viewActions =
new QActionGroup(
this);
185 viewActions->setExclusive(
false);
189 m_toolWindows.push_back(toolWindow);
191 viewMenu->addAction(action);
192 viewActions->addAction(action);
196 connect(toolWindow, &QDesignerToolWindow::closeEventReceived,
201 m_integration =
new QDesignerIntegration(m_core,
this);
202 connect(m_integration, &QDesignerIntegration::helpRequested,
206 viewMenu->addSeparator();
207 m_toolbarMenu = viewMenu->addMenu(tr(
"Toolbars"));
211 connect(m_core->formWindowManager(), &QDesignerFormWindowManagerInterface::activeFormWindowChanged,
216 auto *appearanceOptions =
new QDesignerAppearanceOptionsPage(m_core);
217 connect(appearanceOptions, &QDesignerAppearanceOptionsPage::settingsChanged,
this, &
QDesignerWorkbench::notifyUISettingsChanged);
218 auto optionsPages = m_core->optionsPages();
219 optionsPages.push_front(appearanceOptions);
220 m_core->setOptionsPages(optionsPages);
224 AppFontWidget::restore(m_core->settingsManager(), appFontPrefixC);
233 qDeleteAll(m_toolWindows);
236 delete widgetBoxToolWindow();
239 delete m_globalMenuBar;
240 m_windowMenu =
nullptr;
241 delete m_dockedMainWindow;
251 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
252 m_Positions.insert(tw, Position(tw));
253 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
254 m_Positions.insert(fw, Position(fw));
258 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
259 m_Positions.insert(tw, Position(dockWidgetOf(tw)));
260 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
261 m_Positions.insert(fw, Position(mdiSubWindowOf(fw)));
276 m_formWindows.append(formWindow);
282 m_windowActions->addAction(action);
283 m_windowMenu->addAction(action);
284 action->setChecked(
true);
289 connect(formWindow, &QDesignerFormWindow::minimizationStateChanged,
300 if (qobject_cast<
const QDesignerToolWindow *>(widgetForFlags))
303 Q_UNUSED(widgetForFlags);
308 return Qt::Window | Qt::WindowShadeButtonHint | Qt::WindowSystemMenuHint | Qt::WindowTitleHint;
323 QWidget *widgetBoxWrapper = widgetBoxToolWindow();
324 return w == widgetBoxWrapper ?
nullptr : widgetBoxWrapper;
327 return m_dockedMainWindow->mdiArea();
340 saveGeometries(settings);
341 saveGeometriesForModeChange();
343 if (m_mode == TopLevelMode) {
344 delete m_topLevelData.toolbarManager;
345 m_topLevelData.toolbarManager =
nullptr;
346 qDeleteAll(m_topLevelData.toolbars);
347 m_topLevelData.toolbars.clear();
350 m_mode = NeutralMode;
352 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows)) {
353 tw->setCloseEventPolicy(MainWindowBase::AcceptCloseEvents);
354 tw->setParent(
nullptr);
356 if (
auto *handle = tw->windowHandle())
360 if (m_dockedMainWindow !=
nullptr)
361 m_dockedMainWindow->mdiArea()->setActiveSubWindow(
nullptr);
363 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
364 fw->setParent(
nullptr);
365 fw->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
367 if (
auto *handle = fw->windowHandle())
372 m_globalMenuBar->setParent(
nullptr);
375 m_core->setTopLevel(
nullptr);
378 delete m_dockedMainWindow;
383 if (m_mode == DockedMode)
386 switchToNeutralMode();
388#if !defined(Q_OS_MACOS)
389# if defined(Q_OS_UNIX)
390 QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar,
false);
394 widgetBoxWrapper->setWindowTitle(tr(
"Widget Box"));
399 m_dockedMainWindow =
new DockedMainWindow(
this, m_toolbarMenu, m_toolWindows);
400 m_dockedMainWindow->setUnifiedTitleAndToolBarOnMac(
true);
401 m_dockedMainWindow->setCloseEventPolicy(MainWindowBase::EmitCloseEventSignal);
402 connect(m_dockedMainWindow, &DockedMainWindow::closeEventReceived,
404 connect(m_dockedMainWindow, &DockedMainWindow::fileDropped,
405 this, &QDesignerWorkbench::slotFileDropped);
408 m_dockedMainWindow->restoreSettings(settings,
409 m_dockedMainWindow->addToolWindows(m_toolWindows),
410 screen()->availableGeometry());
412 m_core->setTopLevel(m_dockedMainWindow);
415 m_dockedMainWindow->setMenuBar(m_globalMenuBar);
416 m_globalMenuBar->show();
418 qDesigner->setMainWindow(m_dockedMainWindow);
420 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
421 QMdiSubWindow *subwin = m_dockedMainWindow->createMdiSubWindow(fw, magicalWindowFlags(fw),
422 m_actionManager->closeFormAction()->shortcut());
424 if (QWidget *mainContainer = fw->editor()->mainContainer())
425 resizeForm(fw, mainContainer);
429 m_dockedMainWindow->show();
432 if (m_state != StateInitializing)
433 QMetaObject::invokeMethod(
this,
"adjustMDIFormPositions", Qt::QueuedConnection);
438 const QPoint mdiAreaOffset = m_dockedMainWindow->mdiArea()->pos();
440 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
441 const auto pit = m_Positions.constFind(fw);
442 if (pit != m_Positions.constEnd())
443 pit->applyTo(mdiSubWindowOf(fw), mdiAreaOffset);
449 const auto &screens = QGuiApplication::screens();
450 const auto pos = QCursor::pos();
451 auto pred = [pos](
const QScreen *s) {
return s->geometry().contains(pos); };
452 auto it = std::find_if(screens.cbegin(), screens.cend(), pred);
453 return it != screens.cend() ? *it : QGuiApplication::primaryScreen();
458 if (m_mode == TopLevelMode)
463 Q_ASSERT(widgetBoxWrapper);
465 switchToNeutralMode();
466 m_mode = TopLevelMode;
468 const QByteArray mainWindowState = settings.mainWindowState(m_mode);
470 const auto *currentScreen = mainWindowState.isEmpty() ?
screenUnderMouse() : screen();
471 const QRect availableGeometry = currentScreen->availableGeometry();
472 const QPoint desktopOffset = availableGeometry.topLeft();
476 m_core->setTopLevel(widgetBoxWrapper);
477#if !defined(Q_OS_MACOS)
478# if defined(Q_OS_UNIX)
484 QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar,
true);
486 widgetBoxWrapper->setMenuBar(m_globalMenuBar);
487 widgetBoxWrapper
->action()->setVisible(
false);
489 qDesigner->setMainWindow(widgetBoxWrapper);
493 m_topLevelData.toolbars = MainWindowBase::createToolBars(m_actionManager,
false);
494 m_topLevelData.toolbarManager =
new ToolBarManager(widgetBoxWrapper, widgetBoxWrapper,
495 m_toolbarMenu, m_actionManager,
496 m_topLevelData.toolbars, m_toolWindows);
497 const qsizetype toolBarCount = m_topLevelData.toolbars.size();
498 for (qsizetype i = 0; i < toolBarCount; ++i) {
499 widgetBoxWrapper->addToolBar(m_topLevelData.toolbars.at(i));
501 widgetBoxWrapper->insertToolBarBreak(m_topLevelData.toolbars.at(i));
503 m_topLevelData.toolbarManager->restoreState(settings.toolBarsState(m_mode), MainWindowBase::settingsVersion());
506 bool found_visible_window =
false;
507 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows)) {
508 tw->setParent(magicalParent(tw), magicalWindowFlags(tw));
509 settings.restoreGeometry(tw, tw->geometryHint(availableGeometry));
510 tw->action()->setChecked(tw->isVisible());
511 found_visible_window |= tw->isVisible();
514 if (!m_toolWindows.isEmpty() && !found_visible_window)
515 m_toolWindows.constFirst()->show();
519 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
520 fw->setParent(magicalParent(fw), magicalWindowFlags(fw));
521 fw->setAttribute(Qt::WA_DeleteOnClose,
true);
522 const auto pit = m_Positions.constFind(fw);
523 if (pit != m_Positions.constEnd()) pit->applyTo(fw, desktopOffset);
525 if (QLayout *layout = fw->layout())
526 layout->invalidate();
527 if (QWidget *mainContainer = fw->editor()->mainContainer())
528 resizeForm(fw, mainContainer);
534 return m_core->formWindowManager();
544 return m_toolWindows.size();
549 return m_toolWindows.at(index);
554 return m_formWindows.size();
559 return m_formWindows.at(index);
564 auto *widget = m_mode == DockedMode
565 ?
static_cast<QWidget *>(m_dockedMainWindow.data())
566 :
static_cast<QWidget *>(widgetBoxToolWindow());
567 return widget !=
nullptr
568 ? widget->screen() : QGuiApplication::primaryScreen();
574 return m_mode == DockedMode
575 ? m_dockedMainWindow->mdiArea()->geometry() : screen()->availableGeometry();
585 QDesignerFormWindowInterface *editor = formWindow
->editor();
586 const bool loadOk = editor->mainContainer();
588 const int index = m_formWindows.indexOf(formWindow);
590 m_formWindows.removeAt(index);
594 m_windowActions->removeAction(action);
596 m_windowMenu->removeAction(action);
599 if (m_formWindows.isEmpty()) {
602 if (loadOk && m_state == StateUp)
609 if (!m_suppressNewFormShow && QDesignerSettings(m_core).showNewFormOnStartup())
610 QTimer::singleShot(100, m_actionManager, &QDesignerActions::createForm);
615 QObjectList plugins = QPluginLoader::staticInstances();
616 plugins +=
core()->pluginManager()->instances();
618 for (QObject *plugin : std::as_const(plugins)) {
619 if (QDesignerFormEditorPluginInterface *formEditorPlugin = qobject_cast<QDesignerFormEditorPluginInterface*>(plugin)) {
620 if (!formEditorPlugin->isInitialized())
621 formEditorPlugin->initialize(core());
630 saveGeometries(settings);
631 AppFontWidget::save(m_core->settingsManager(), appFontPrefixC);
638 m_dockedMainWindow->saveSettings(settings);
641 settings.setToolBarsState(m_mode, m_topLevelData.toolbarManager->saveState(MainWindowBase::settingsVersion()));
643 for (
const QDesignerToolWindow *tw : m_toolWindows)
644 settings.saveGeometryFor(tw);
658 return m_actionManager->readInForm(fileName);
661bool QDesignerWorkbench::writeOutForm(QDesignerFormWindowInterface *formWindow,
const QString &fileName)
const
663 return m_actionManager->writeOutForm(formWindow, fileName);
673 for (QDesignerFormWindow *formWindow : m_formWindows) {
674 if (formWindow->editor() == widget)
683 m_state = StateClosing;
684 QList<QDesignerFormWindow *> dirtyForms;
685 for (QDesignerFormWindow *w : std::as_const(m_formWindows)) {
686 if (w->editor()->isDirty())
690 const auto count = dirtyForms.size();
692 if (!dirtyForms.at(0)->close()) {
696 }
else if (count > 1) {
697 QMessageBox box(QMessageBox::Warning, tr(
"Save Forms?"),
698 tr(
"There are %n forms with unsaved changes."
699 " Do you want to review these changes before quitting?",
"", count),
700 QMessageBox::Cancel | QMessageBox::Discard | QMessageBox::Save);
701 box.setInformativeText(tr(
"If you do not review your documents, all your changes will be lost."));
702 box.button(QMessageBox::Discard)->setText(tr(
"Discard Changes"));
703 auto *save =
static_cast<QPushButton *>(box.button(QMessageBox::Save));
704 save->setText(tr(
"Review Changes"));
705 box.setDefaultButton(save);
706 switch (box.exec()) {
707 case QMessageBox::Cancel:
710 case QMessageBox::Save:
711 for (QDesignerFormWindow *fw : std::as_const(dirtyForms)) {
720 case QMessageBox::Discard:
721 for (QDesignerFormWindow *fw : std::as_const(dirtyForms)) {
722 fw->editor()->setDirty(
false);
723 fw->setWindowModified(
false);
729 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
738 return m_actionManager;
743 bool minimizeChecked =
false;
744 bool minimizeEnabled =
false;
750 if (!activeFormWindow)
753 minimizeEnabled =
true;
754 minimizeChecked = isFormWindowMinimized(activeFormWindow);
760 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
761 fw->action()->setChecked(fw == activeFormWindow);
769 if (isFormWindowMinimized(fw))
770 setFormWindowMinimized(fw,
false);
772 if (m_mode == DockedMode) {
773 if (
auto *subWindow = qobject_cast<QMdiSubWindow *>(fw->parent())) {
774 m_dockedMainWindow->mdiArea()->setActiveSubWindow(subWindow);
777 fw->activateWindow();
784 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
790 const QMap<QString, QString> backupFileMap = m_actionManager->pendingBackups();
791 if (backupFileMap.isEmpty())
794 const QMessageBox::StandardButton answer =
795 QMessageBox::question(
nullptr, tr(
"Backup Information"),
796 tr(
"The last session of Designer was not terminated correctly. "
797 "Backup files were left behind. Do you want to load them?"),
798 QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
799 if (answer == QMessageBox::No)
802 const auto modifiedPlaceHolder =
"[*]"_L1;
803 for (
auto it = backupFileMap.cbegin(), end = backupFileMap.cend(); it != end; ++it) {
804 QString fileName = it.key();
805 fileName.remove(modifiedPlaceHolder);
807 if(m_actionManager->readInForm(it.value()))
808 formWindowManager()->activeFormWindow()->setFileName(fileName);
816 QString fwn = QDir::toNativeSeparators(fwi->fileName());
818 fwn = fwi->parentWidget()->windowTitle();
821 QMap<QString, QString> map = settings.backup();
823 settings.setBackup(map);
828 if (w->isMinimized())
829 w->setWindowState(w->windowState() & ~Qt::WindowMinimized);
836 if (m_mode != TopLevelMode)
838 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
840 for (QDesignerFormWindow *dfw : std::as_const(m_formWindows))
851 widgetBoxToolWindow()->windowHandle()->requestActivate();
854 raiseWindow(m_dockedMainWindow);
855 m_dockedMainWindow->windowHandle()->requestActivate();
867 const QSize containerSize = mainContainer->size();
868 const QSize containerMaximumSize = mainContainer->maximumSize();
869 if (m_mode != DockedMode) {
870 fw->resize(containerSize);
871 fw->setMaximumSize(containerMaximumSize);
875 auto *mdiSubWindow = qobject_cast<QMdiSubWindow *>(fw->parent());
876 Q_ASSERT(mdiSubWindow);
877 const QSize decorationSize = mdiSubWindow->geometry().size() - mdiSubWindow->contentsRect().size();
878 mdiSubWindow->resize(containerSize + decorationSize);
880 const int mdiAreaWidth = m_dockedMainWindow->mdiArea()->width();
881 if (qApp->layoutDirection() == Qt::RightToLeft && mdiSubWindow->geometry().right() >= mdiAreaWidth)
882 mdiSubWindow->move(mdiAreaWidth - mdiSubWindow->width(), mdiSubWindow->pos().y());
884 if (containerMaximumSize == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)) {
885 mdiSubWindow->setMaximumSize(containerMaximumSize);
887 mdiSubWindow->setMaximumSize(containerMaximumSize + decorationSize);
896 bool detectLineTermiantorMode,
897 QString *errorMessage)
899 QFile file(fileName);
901 qdesigner_internal::FormWindowBase::LineTerminatorMode mode = qdesigner_internal::FormWindowBase::NativeLineTerminator;
903 if (detectLineTermiantorMode) {
904 if (file.open(QFile::ReadOnly)) {
905 const QString text = QString::fromUtf8(file.readLine());
908 const auto lf = text.indexOf(u'\n');
909 if (lf > 0 && text.at(lf - 1) == u'\r') {
910 mode = qdesigner_internal::FormWindowBase::CRLFLineTerminator;
911 }
else if (lf >= 0) {
912 mode = qdesigner_internal::FormWindowBase::LFLineTerminator;
917 if (!file.open(QFile::ReadOnly|QFile::Text)) {
918 *errorMessage = tr(
"The file <b>%1</b> could not be opened: %2").arg(file.fileName(), file.errorString());
923 QDesignerFormWindowManagerInterface *formWindowManager = m_core->formWindowManager();
925 auto *formWindow =
new QDesignerFormWindow(
nullptr,
this);
926 addFormWindow(formWindow);
927 QDesignerFormWindowInterface *editor = formWindow->editor();
932 editor->setFileName(fileName);
934 if (!editor->setContents(&file, errorMessage)) {
936 formWindowManager->removeFormWindow(editor);
937 m_core->metaDataBase()->remove(editor);
941 if (
auto *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>(editor))
942 fwb->setLineTerminatorMode(
mode);
949 QMdiSubWindow *subWin = m_dockedMainWindow->createMdiSubWindow(formWindow, magicalWindowFlags(formWindow), m_actionManager->closeFormAction()->shortcut());
950 m_dockedMainWindow->mdiArea()->setActiveSubWindow(subWin);
954 const QRect formWindowGeometryHint = formWindow->geometryHint();
955 formWindow->setAttribute(Qt::WA_DeleteOnClose,
true);
956 formWindow->setParent(magicalParent(formWindow), magicalWindowFlags(formWindow));
957 formWindow->resize(formWindowGeometryHint.size());
958 formWindow->move(availableFormGeometry().center() - formWindowGeometryHint.center());
966 const bool dirty = editor->property(
"_q_resourcepathchanged").toBool();
967 editor->setDirty(dirty);
968 resizeForm(formWindow, editor->mainContainer());
969 formWindowManager->setActiveFormWindow(editor);
985 const QString &editorFileName,
986 QString *errorMessage)
997void QDesignerWorkbench::minimizationStateChanged(QDesignerFormWindowInterface *formWindow,
bool minimized)
1000 if (
core()->formWindowManager()->activeFormWindow() == formWindow) {
1007 QDesignerFormWindowInterface *fwi =
core()->formWindowManager()->activeFormWindow();
1008 if (!fwi || m_mode == NeutralMode)
1012 setFormWindowMinimized(fw, !isFormWindowMinimized(fw));
1019 return mdiSubWindowOf(fw)->isShaded();
1021 return fw->window()->isMinimized();
1025 return fw->isMinimized();
1032 QMdiSubWindow *mdiSubWindow = mdiSubWindowOf(fw);
1034 mdiSubWindow->showShaded();
1036 mdiSubWindow->setWindowState(mdiSubWindow->windowState() & ~Qt::WindowMinimized);
1040 case TopLevelMode: {
1041 QWidget *window = fw->window();
1042 if (window->isMinimized()) {
1043 window->setWindowState(window->windowState() & ~Qt::WindowMinimized);
1045 window->showMinimized();
1055
1056
1057
1058
1062 if (m_uiSettingsChanged) {
1063 m_uiSettingsChanged =
false;
1064 QTimer::singleShot(0,
this, &QDesignerWorkbench::restoreUISettings);
1070 m_uiSettingsChanged =
true;
1078 switchToTopLevelMode();
1081 switchToDockedMode();
1084 default: Q_ASSERT(0);
1088 const QFont &font = fontSettings.m_useFont ? fontSettings.m_font : qApp->font();
1090 if (font == m_toolWindows.constFirst()->font())
1093 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
1100 if (ev->isAccepted())
1101 QMetaObject::invokeMethod(
qDesigner,
"quit", Qt::QueuedConnection);
1106 return m_toolWindows.at(QDesignerToolWindow::WidgetBox);
void formWindowActivated(QDesignerFormWindow *)
static QString mainWindowTitle()
static int settingsVersion()
void setCloseEventPolicy(CloseEventPolicy pol)
QActionGroup * helpActions() const
QActionGroup * fileActions() const
QActionGroup * settingsActions() const
QAction * minimizeAction() const
QActionGroup * styleActions() const
QActionGroup * toolActions() const
QAction * previewFormAction() const
void setWindowListSeparatorVisible(bool visible)
bool saveForm(QDesignerFormWindowInterface *fw)
QAction * editWidgets() const
void setBringAllToFrontVisible(bool visible)
QDesignerSettings(QDesignerFormEditorInterface *core)
ToolWindowFontSettings toolWindowFont() const
~QDesignerWorkbench() override
QDesignerActions * actionManager() const
int formWindowCount() const
QDesignerToolWindow * toolWindow(int index) const
void toggleFormMinimizationState()
bool saveForm(QDesignerFormWindowInterface *fw)
QDesignerFormEditorInterface * core() const
QDesignerFormWindow * formWindow(int index) const
int toolWindowCount() const
void removeFormWindow(QDesignerFormWindow *formWindow)
void updateBackup(QDesignerFormWindowInterface *fwi)
Combined button and popup list for selecting options.
static QMenu * addMenu(QMenuBar *mb, const QString &title, const ActionList &al)
static QDockWidget * dockWidgetOf(const QWidget *w)
static QScreen * screenUnderMouse()
static constexpr auto appFontPrefixC
static void addActionsToMenu(QMenu *m, const ActionList &al)
static QMdiSubWindow * mdiSubWindowOf(const QWidget *w)