13#include <QtDesigner/abstractformeditor.h>
14#include <QtDesigner/abstractformwindow.h>
15#include <QtDesigner/abstractformwindowmanager.h>
16#include <QtDesigner/abstractformeditorplugin.h>
17#include <QtDesigner/abstractwidgetbox.h>
18#include <QtDesigner/abstractmetadatabase.h>
20#include <QtDesigner/QDesignerComponents>
21#include <QtDesigner/abstractintegration.h>
22#include <QtDesigner/private/pluginmanager_p.h>
23#include <QtDesigner/private/formwindowbase_p.h>
24#include <QtDesigner/private/actioneditor_p.h>
26#include <QtWidgets/qdockwidget.h>
27#include <QtWidgets/qmenu.h>
28#include <QtWidgets/qmenubar.h>
29#include <QtWidgets/qmessagebox.h>
30#include <QtWidgets/qpushbutton.h>
31#include <QtWidgets/qtoolbar.h>
32#include <QtWidgets/qmdiarea.h>
33#include <QtWidgets/qmdisubwindow.h>
34#include <QtWidgets/qlayout.h>
36#include <QtGui/qactiongroup.h>
37#include <QtGui/qcursor.h>
38#include <QtGui/qevent.h>
39#include <QtGui/qscreen.h>
40#include <QtGui/qwindow.h>
42#include <QtCore/qdir.h>
43#include <QtCore/qfile.h>
44#include <QtCore/qurl.h>
45#include <QtCore/qtimer.h>
46#include <QtCore/qpluginloader.h>
47#include <QtCore/qdebug.h>
51using namespace Qt::StringLiterals;
55using ActionList = QList<QAction *>;
59 auto *rc = qobject_cast<QMdiSubWindow *>(w->parentWidget());
66 for (
QWidget *parentWidget = w->parentWidget(); parentWidget ; parentWidget = parentWidget->parentWidget()) {
67 if (
auto *dw = qobject_cast<QDockWidget *>(parentWidget)) {
71 Q_ASSERT(
"Dock widget not found");
77 m_minimized(mdiSubWindow->isShaded()),
78 m_position(mdiSubWindow->pos() + mdiSubWindow->mdiArea()->pos())
83 m_minimized(dockWidget->isMinimized()),
84 m_position(dockWidget->pos())
90 const QWidget *window = topLevelWindow->window();
92 m_minimized = window->isMinimized();
93 m_position = window->pos() - window->screen()->availableGeometry().topLeft();
97 const QPoint &mdiAreaOffset)
const
101 const QPoint mdiAreaPos = QPoint(qMax(0, m_position.x() - mdiAreaOffset.x()),
102 qMax(0, m_position.y() - mdiAreaOffset.y()));
103 mdiSubWindow->move(mdiAreaPos);
104 const QSize decorationSize = mdiSubWindow->size() - mdiSubWindow->contentsRect().size();
105 mdiSubWindow->resize(mdiSubWindow->widget()->size() + decorationSize);
106 mdiSubWindow->show();
108 mdiSubWindow->showShaded();
114 QWidget *window = topLevelWindow->window ();
115 const QPoint newPos = m_position + desktopTopLeft;
116 window->move(newPos);
118 topLevelWindow->showMinimized();
120 topLevelWindow->show();
126 dockWidget->widget()->setVisible(
true);
127 dockWidget->setVisible(!m_minimized);
136static inline QMenu *
addMenu(QMenuBar *mb,
const QString &title,
const ActionList &al)
138 QMenu *rc = mb->addMenu(title);
139 addActionsToMenu(rc, al);
146 m_core(QDesignerComponents::createFormEditorWithPluginPaths(pluginPaths,
this)),
147 m_windowActions(
new QActionGroup(
this)),
148 m_globalMenuBar(
new QMenuBar)
152 (
void) QDesignerComponents::createTaskMenu(core(),
this);
154 initializeCorePlugins();
155 QDesignerComponents::initializePlugins(core());
156 m_actionManager =
new QDesignerActions(
this);
158 m_windowActions->setExclusive(
true);
159 connect(m_windowActions, &QActionGroup::triggered,
160 this, &QDesignerWorkbench::formWindowActionTriggered);
163 addMenu(m_globalMenuBar, tr(
"&File"), m_actionManager->fileActions()->actions());
165 QMenu *editMenu = addMenu(m_globalMenuBar, tr(
"&Edit"), m_actionManager->editActions()->actions());
166 editMenu->addSeparator();
169 QMenu *formMenu = addMenu(m_globalMenuBar, tr(
"F&orm"), m_actionManager->formActions()->actions());
170 auto *previewSubMenu =
new QMenu(tr(
"Preview in"), formMenu);
172 addActionsToMenu(previewSubMenu, m_actionManager
->styleActions()->actions());
174 QMenu *viewMenu = m_globalMenuBar->addMenu(tr(
"&View"));
176 addMenu(m_globalMenuBar, tr(
"&Settings"), m_actionManager->settingsActions()->actions());
178 m_windowMenu = addMenu(m_globalMenuBar, tr(
"&Window"), m_actionManager->windowActions()->actions());
180 addMenu(m_globalMenuBar, tr(
"&Help"), m_actionManager->helpActions()->actions());
183 auto *viewActions =
new QActionGroup(
this);
184 viewActions->setExclusive(
false);
188 m_toolWindows.push_back(toolWindow);
190 viewMenu->addAction(action);
191 viewActions->addAction(action);
195 connect(toolWindow, &QDesignerToolWindow::closeEventReceived,
196 this, &QDesignerWorkbench::handleCloseEvent);
200 m_integration =
new QDesignerIntegration(m_core,
this);
201 connect(m_integration, &QDesignerIntegration::helpRequested,
202 m_actionManager, &QDesignerActions::helpRequested);
205 viewMenu->addSeparator();
206 m_toolbarMenu = viewMenu->addMenu(tr(
"Toolbars"));
210 connect(m_core->formWindowManager(), &QDesignerFormWindowManagerInterface::activeFormWindowChanged,
211 this, &QDesignerWorkbench::updateWindowMenu);
216 connect(appearanceOptions, &QDesignerAppearanceOptionsPage::settingsChanged,
this, &QDesignerWorkbench::notifyUISettingsChanged);
217 auto optionsPages = m_core->optionsPages();
218 optionsPages.push_front(appearanceOptions);
219 m_core->setOptionsPages(optionsPages);
223 AppFontWidget::restore(m_core->settingsManager(), appFontPrefixC);
232 qDeleteAll(m_toolWindows);
235 delete widgetBoxToolWindow();
238 delete m_globalMenuBar;
239 m_windowMenu =
nullptr;
240 delete m_dockedMainWindow;
250 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
251 m_Positions.insert(tw, Position(tw));
252 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
253 m_Positions.insert(fw, Position(fw));
257 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
258 m_Positions.insert(tw, Position(dockWidgetOf(tw)));
259 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
260 m_Positions.insert(fw, Position(mdiSubWindowOf(fw)));
275 m_formWindows.append(formWindow);
281 m_windowActions->addAction(action);
282 m_windowMenu->addAction(action);
283 action->setChecked(
true);
288 connect(formWindow, &QDesignerFormWindow::minimizationStateChanged,
289 this, &QDesignerWorkbench::minimizationStateChanged);
299 if (qobject_cast<
const QDesignerToolWindow *>(widgetForFlags))
302 Q_UNUSED(widgetForFlags);
307 return Qt::Window | Qt::WindowShadeButtonHint | Qt::WindowSystemMenuHint | Qt::WindowTitleHint;
322 QWidget *widgetBoxWrapper = widgetBoxToolWindow();
323 return w == widgetBoxWrapper ?
nullptr : widgetBoxWrapper;
326 return m_dockedMainWindow->mdiArea();
339 saveGeometries(settings);
340 saveGeometriesForModeChange();
343 delete m_topLevelData.toolbarManager;
344 m_topLevelData.toolbarManager =
nullptr;
345 qDeleteAll(m_topLevelData.toolbars);
346 m_topLevelData.toolbars.clear();
351 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows)) {
352 tw->setCloseEventPolicy(MainWindowBase::AcceptCloseEvents);
353 tw->setParent(
nullptr);
355 if (
auto *handle = tw->windowHandle())
359 if (m_dockedMainWindow !=
nullptr)
360 m_dockedMainWindow->mdiArea()->setActiveSubWindow(
nullptr);
362 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
363 fw->setParent(
nullptr);
364 fw->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
366 if (
auto *handle = fw->windowHandle())
371 m_globalMenuBar->setParent(
nullptr);
374 m_core->setTopLevel(
nullptr);
377 delete m_dockedMainWindow;
385 switchToNeutralMode();
387#if !defined(Q_OS_MACOS)
388# if defined(Q_OS_UNIX)
389 QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar,
false);
393 widgetBoxWrapper->setWindowTitle(tr(
"Widget Box"));
398 m_dockedMainWindow =
new DockedMainWindow(
this, m_toolbarMenu, m_toolWindows);
399 m_dockedMainWindow->setUnifiedTitleAndToolBarOnMac(
true);
400 m_dockedMainWindow->setCloseEventPolicy(MainWindowBase::EmitCloseEventSignal);
401 connect(m_dockedMainWindow, &DockedMainWindow::closeEventReceived,
402 this, &QDesignerWorkbench::handleCloseEvent);
403 connect(m_dockedMainWindow, &DockedMainWindow::fileDropped,
404 this, &QDesignerWorkbench::slotFileDropped);
405 connect(m_dockedMainWindow, &DockedMainWindow::formWindowActivated,
406 this, &QDesignerWorkbench::slotFormWindowActivated);
407 m_dockedMainWindow->restoreSettings(settings,
408 m_dockedMainWindow->addToolWindows(m_toolWindows),
409 screen()->availableGeometry());
411 m_core->setTopLevel(m_dockedMainWindow);
414 m_dockedMainWindow->setMenuBar(m_globalMenuBar);
415 m_globalMenuBar->show();
417 qDesigner->setMainWindow(m_dockedMainWindow);
419 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
420 QMdiSubWindow *subwin = m_dockedMainWindow->createMdiSubWindow(fw, magicalWindowFlags(fw),
421 m_actionManager->closeFormAction()->shortcut());
423 if (QWidget *mainContainer = fw->editor()->mainContainer())
424 resizeForm(fw, mainContainer);
428 m_dockedMainWindow->show();
431 if (m_state != StateInitializing)
432 QMetaObject::invokeMethod(
this,
"adjustMDIFormPositions", Qt::QueuedConnection);
437 const QPoint mdiAreaOffset = m_dockedMainWindow->mdiArea()->pos();
439 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
440 const auto pit = m_Positions.constFind(fw);
441 if (pit != m_Positions.constEnd())
442 pit->applyTo(mdiSubWindowOf(fw), mdiAreaOffset);
448 const auto &screens = QGuiApplication::screens();
449 const auto pos = QCursor::pos();
450 auto pred = [pos](
const QScreen *s) {
return s->geometry().contains(pos); };
451 auto it = std::find_if(screens.cbegin(), screens.cend(), pred);
452 return it != screens.cend() ? *it : QGuiApplication::primaryScreen();
462 Q_ASSERT(widgetBoxWrapper);
464 switchToNeutralMode();
467 const QByteArray mainWindowState = settings.mainWindowState(m_mode);
469 const auto *currentScreen = mainWindowState.isEmpty() ?
screenUnderMouse() : screen();
470 const QRect availableGeometry = currentScreen->availableGeometry();
471 const QPoint desktopOffset = availableGeometry.topLeft();
475 m_core->setTopLevel(widgetBoxWrapper);
476#if !defined(Q_OS_MACOS)
477# if defined(Q_OS_UNIX)
483 QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar,
true);
485 widgetBoxWrapper->setMenuBar(m_globalMenuBar);
486 widgetBoxWrapper
->action()->setVisible(
false);
488 qDesigner->setMainWindow(widgetBoxWrapper);
492 m_topLevelData.toolbars = MainWindowBase::createToolBars(m_actionManager,
false);
493 m_topLevelData.toolbarManager =
new ToolBarManager(widgetBoxWrapper, widgetBoxWrapper,
494 m_toolbarMenu, m_actionManager,
495 m_topLevelData.toolbars, m_toolWindows);
496 const qsizetype toolBarCount = m_topLevelData.toolbars.size();
497 for (qsizetype i = 0; i < toolBarCount; ++i) {
498 widgetBoxWrapper->addToolBar(m_topLevelData.toolbars.at(i));
500 widgetBoxWrapper->insertToolBarBreak(m_topLevelData.toolbars.at(i));
502 m_topLevelData.toolbarManager->restoreState(settings.toolBarsState(m_mode), MainWindowBase::settingsVersion());
505 bool found_visible_window =
false;
506 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows)) {
507 tw->setParent(magicalParent(tw), magicalWindowFlags(tw));
508 settings.restoreGeometry(tw, tw->geometryHint(availableGeometry));
509 tw->action()->setChecked(tw->isVisible());
510 found_visible_window |= tw->isVisible();
513 if (!m_toolWindows.isEmpty() && !found_visible_window)
514 m_toolWindows.constFirst()->show();
518 for (QDesignerFormWindow *fw : std::as_const(m_formWindows)) {
519 fw->setParent(magicalParent(fw), magicalWindowFlags(fw));
520 fw->setAttribute(Qt::WA_DeleteOnClose,
true);
521 const auto pit = m_Positions.constFind(fw);
522 if (pit != m_Positions.constEnd()) pit->applyTo(fw, desktopOffset);
524 if (QLayout *layout = fw->layout())
525 layout->invalidate();
526 if (QWidget *mainContainer = fw->editor()->mainContainer())
527 resizeForm(fw, mainContainer);
533 return m_core->formWindowManager();
543 return m_toolWindows.size();
548 return m_toolWindows.at(index);
553 return m_formWindows.size();
558 return m_formWindows.at(index);
563 auto *widget = m_mode == DockedMode
564 ?
static_cast<QWidget *>(m_dockedMainWindow.data())
565 :
static_cast<QWidget *>(widgetBoxToolWindow());
566 return widget !=
nullptr
567 ? widget->screen() : QGuiApplication::primaryScreen();
573 return m_mode == DockedMode
574 ? m_dockedMainWindow->mdiArea()->geometry() : screen()->availableGeometry();
584 QDesignerFormWindowInterface *editor = formWindow
->editor();
585 const bool loadOk = editor->mainContainer();
587 const int index = m_formWindows.indexOf(formWindow);
589 m_formWindows.removeAt(index);
593 m_windowActions->removeAction(action);
595 m_windowMenu->removeAction(action);
598 if (m_formWindows.isEmpty()) {
601 if (loadOk && m_state == StateUp)
608 if (!m_suppressNewFormShow && QDesignerSettings(m_core).showNewFormOnStartup())
609 QTimer::singleShot(100, m_actionManager, &QDesignerActions::createForm);
614 QObjectList plugins = QPluginLoader::staticInstances();
615 plugins +=
core()->pluginManager()->instances();
617 for (QObject *plugin : std::as_const(plugins)) {
618 if (QDesignerFormEditorPluginInterface *formEditorPlugin = qobject_cast<QDesignerFormEditorPluginInterface*>(plugin)) {
619 if (!formEditorPlugin->isInitialized())
620 formEditorPlugin->initialize(core());
629 saveGeometries(settings);
630 AppFontWidget::save(m_core->settingsManager(), appFontPrefixC);
637 m_dockedMainWindow->saveSettings(settings);
640 settings.setToolBarsState(m_mode, m_topLevelData.toolbarManager->saveState(MainWindowBase::settingsVersion()));
642 for (
const QDesignerToolWindow *tw : m_toolWindows)
643 settings.saveGeometryFor(tw);
660bool QDesignerWorkbench::writeOutForm(QDesignerFormWindowInterface *formWindow,
const QString &fileName)
const
672 for (QDesignerFormWindow *formWindow : m_formWindows) {
673 if (formWindow->editor() == widget)
682 m_state = StateClosing;
683 QList<QDesignerFormWindow *> dirtyForms;
684 for (QDesignerFormWindow *w : std::as_const(m_formWindows)) {
685 if (w->editor()->isDirty())
689 const auto count = dirtyForms.size();
691 if (!dirtyForms.at(0)->close()) {
695 }
else if (count > 1) {
696 QMessageBox box(QMessageBox::Warning, tr(
"Save Forms?"),
697 tr(
"There are %n forms with unsaved changes."
698 " Do you want to review these changes before quitting?",
"", count),
699 QMessageBox::Cancel | QMessageBox::Discard | QMessageBox::Save);
700 box.setInformativeText(tr(
"If you do not review your documents, all your changes will be lost."));
701 box.button(QMessageBox::Discard)->setText(tr(
"Discard Changes"));
702 auto *save =
static_cast<QPushButton *>(box.button(QMessageBox::Save));
703 save->setText(tr(
"Review Changes"));
704 box.setDefaultButton(save);
705 switch (box.exec()) {
706 case QMessageBox::Cancel:
709 case QMessageBox::Save:
710 for (QDesignerFormWindow *fw : std::as_const(dirtyForms)) {
719 case QMessageBox::Discard:
720 for (QDesignerFormWindow *fw : std::as_const(dirtyForms)) {
721 fw->editor()->setDirty(
false);
722 fw->setWindowModified(
false);
728 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
737 return m_actionManager;
742 bool minimizeChecked =
false;
743 bool minimizeEnabled =
false;
749 if (!activeFormWindow)
752 minimizeEnabled =
true;
753 minimizeChecked = isFormWindowMinimized(activeFormWindow);
759 for (QDesignerFormWindow *fw : std::as_const(m_formWindows))
760 fw->action()->setChecked(fw == activeFormWindow);
768 if (isFormWindowMinimized(fw))
769 setFormWindowMinimized(fw,
false);
772 if (
auto *subWindow = qobject_cast<QMdiSubWindow *>(fw->parent())) {
773 m_dockedMainWindow->mdiArea()->setActiveSubWindow(subWindow);
776 fw->activateWindow();
783 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
789 const QMap<QString, QString> backupFileMap = QDesignerSettings(m_core).backup();
790 if (backupFileMap.isEmpty())
793 const QMessageBox::StandardButton answer =
794 QMessageBox::question(
nullptr, tr(
"Backup Information"),
795 tr(
"The last session of Designer was not terminated correctly. "
796 "Backup files were left behind. Do you want to load them?"),
797 QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
798 if (answer == QMessageBox::No)
801 const auto modifiedPlaceHolder =
"[*]"_L1;
802 for (
auto it = backupFileMap.cbegin(), end = backupFileMap.cend(); it != end; ++it) {
803 QString fileName = it.key();
804 fileName.remove(modifiedPlaceHolder);
807 formWindowManager()->activeFormWindow()->setFileName(fileName);
815 QString fwn = QDir::toNativeSeparators(fwi->fileName());
817 fwn = fwi->parentWidget()->windowTitle();
820 QMap<QString, QString> map = settings.backup();
822 settings.setBackup(map);
827 if (w->isMinimized())
828 w->setWindowState(w->windowState() & ~Qt::WindowMinimized);
837 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
839 for (QDesignerFormWindow *dfw : std::as_const(m_formWindows))
850 const QSize containerSize = mainContainer->size();
851 const QSize containerMaximumSize = mainContainer->maximumSize();
853 fw->resize(containerSize);
854 fw->setMaximumSize(containerMaximumSize);
858 auto *mdiSubWindow = qobject_cast<QMdiSubWindow *>(fw->parent());
859 Q_ASSERT(mdiSubWindow);
860 const QSize decorationSize = mdiSubWindow->geometry().size() - mdiSubWindow->contentsRect().size();
861 mdiSubWindow->resize(containerSize + decorationSize);
863 const int mdiAreaWidth = m_dockedMainWindow->mdiArea()->width();
864 if (qApp->layoutDirection() == Qt::RightToLeft && mdiSubWindow->geometry().right() >= mdiAreaWidth)
865 mdiSubWindow->move(mdiAreaWidth - mdiSubWindow->width(), mdiSubWindow->pos().y());
867 if (containerMaximumSize == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)) {
868 mdiSubWindow->setMaximumSize(containerMaximumSize);
870 mdiSubWindow->setMaximumSize(containerMaximumSize + decorationSize);
879 bool detectLineTermiantorMode,
880 QString *errorMessage)
882 QFile file(fileName);
884 qdesigner_internal::FormWindowBase::LineTerminatorMode mode = qdesigner_internal::FormWindowBase::NativeLineTerminator;
886 if (detectLineTermiantorMode) {
887 if (file.open(QFile::ReadOnly)) {
888 const QString text = QString::fromUtf8(file.readLine());
891 const auto lf = text.indexOf(u'\n');
892 if (lf > 0 && text.at(lf - 1) == u'\r') {
893 mode = qdesigner_internal::FormWindowBase::CRLFLineTerminator;
894 }
else if (lf >= 0) {
895 mode = qdesigner_internal::FormWindowBase::LFLineTerminator;
900 if (!file.open(QFile::ReadOnly|QFile::Text)) {
901 *errorMessage = tr(
"The file <b>%1</b> could not be opened: %2").arg(file.fileName(), file.errorString());
906 QDesignerFormWindowManagerInterface *formWindowManager = m_core->formWindowManager();
908 auto *formWindow =
new QDesignerFormWindow(
nullptr,
this);
909 addFormWindow(formWindow);
910 QDesignerFormWindowInterface *editor = formWindow->editor();
915 editor->setFileName(fileName);
917 if (!editor->setContents(&file, errorMessage)) {
919 formWindowManager->removeFormWindow(editor);
920 m_core->metaDataBase()->remove(editor);
924 if (qdesigner_internal::FormWindowBase *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>(editor))
925 fwb->setLineTerminatorMode(mode);
932 QMdiSubWindow *subWin = m_dockedMainWindow->createMdiSubWindow(formWindow, magicalWindowFlags(formWindow), m_actionManager->closeFormAction()->shortcut());
933 m_dockedMainWindow->mdiArea()->setActiveSubWindow(subWin);
937 const QRect formWindowGeometryHint = formWindow->geometryHint();
938 formWindow->setAttribute(Qt::WA_DeleteOnClose,
true);
939 formWindow->setParent(magicalParent(formWindow), magicalWindowFlags(formWindow));
940 formWindow->resize(formWindowGeometryHint.size());
941 formWindow->move(availableFormGeometry().center() - formWindowGeometryHint.center());
949 const bool dirty = editor->property(
"_q_resourcepathchanged").toBool();
950 editor->setDirty(dirty);
951 resizeForm(formWindow, editor->mainContainer());
952 formWindowManager->setActiveFormWindow(editor);
968 const QString &editorFileName,
969 QString *errorMessage)
980void QDesignerWorkbench::minimizationStateChanged(QDesignerFormWindowInterface *formWindow,
bool minimized)
983 if (
core()->formWindowManager()->activeFormWindow() == formWindow) {
990 QDesignerFormWindowInterface *fwi =
core()->formWindowManager()->activeFormWindow();
995 setFormWindowMinimized(fw, !isFormWindowMinimized(fw));
1002 return mdiSubWindowOf(fw)->isShaded();
1004 return fw->window()->isMinimized();
1008 return fw->isMinimized();
1015 QMdiSubWindow *mdiSubWindow = mdiSubWindowOf(fw);
1017 mdiSubWindow->showShaded();
1019 mdiSubWindow->setWindowState(mdiSubWindow->windowState() & ~Qt::WindowMinimized);
1024 QWidget *window = fw->window();
1025 if (window->isMinimized()) {
1026 window->setWindowState(window->windowState() & ~Qt::WindowMinimized);
1028 window->showMinimized();
1038
1039
1040
1041
1045 if (m_uiSettingsChanged) {
1046 m_uiSettingsChanged =
false;
1047 QTimer::singleShot(0,
this, &QDesignerWorkbench::restoreUISettings);
1053 m_uiSettingsChanged =
true;
1061 switchToTopLevelMode();
1064 switchToDockedMode();
1067 default: Q_ASSERT(0);
1071 const QFont &font = fontSettings.m_useFont ? fontSettings.m_font : qApp->font();
1073 if (font == m_toolWindows.constFirst()->font())
1076 for (QDesignerToolWindow *tw : std::as_const(m_toolWindows))
1083 if (ev->isAccepted())
1084 QMetaObject::invokeMethod(
qDesigner,
"quit", Qt::QueuedConnection);
1089 return m_toolWindows.at(QDesignerToolWindow::WidgetBox);
static QString mainWindowTitle()
static int settingsVersion()
void setCloseEventPolicy(CloseEventPolicy pol)
QAction * minimizeAction() const
QActionGroup * styleActions() const
bool writeOutForm(QDesignerFormWindowInterface *formWindow, const QString &fileName, bool check=true)
QActionGroup * toolActions() const
QAction * previewFormAction() const
bool readInForm(const QString &fileName)
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)