qdesigner_workbench.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 1,252 行 · 第 1/3 页
CPP
1,252 行
return m_actionManager->readInForm(fileName);}bool QDesignerWorkbench::writeOutForm(QDesignerFormWindowInterface *formWindow, const QString &fileName) const{ return m_actionManager->writeOutForm(formWindow, fileName);}bool QDesignerWorkbench::saveForm(QDesignerFormWindowInterface *frm){ return m_actionManager->saveForm(frm);}QDesignerToolWindow *QDesignerWorkbench::findToolWindow(QWidget *widget) const{ foreach (QDesignerToolWindow *toolWindow, m_toolWindows) { if (toolWindow->centralWidget() == widget) return toolWindow; } return 0;}QDesignerFormWindow *QDesignerWorkbench::findFormWindow(QWidget *widget) const{ foreach (QDesignerFormWindow *formWindow, m_formWindows) { if (formWindow->editor() == widget) return formWindow; } return 0;}bool QDesignerWorkbench::handleClose(){ m_state = StateClosing; QList<QDesignerFormWindow *> dirtyForms; foreach (QDesignerFormWindow *w, m_formWindows) { if (w->editor()->isDirty()) dirtyForms << w; } if (dirtyForms.size()) { if (dirtyForms.size() == 1) { if (!dirtyForms.at(0)->close()) { m_state = StateUp; return false; } } else { int count = dirtyForms.size(); QMessageBox box(QMessageBox::Warning, tr("Save Forms?"), tr("There are %n forms with unsaved changes." " Do you want to review these changes before quitting?", "", count), QMessageBox::Cancel | QMessageBox::Discard | QMessageBox::Save); box.setInformativeText(tr("If you don't review your documents, all your changes will be lost.")); box.button(QMessageBox::Discard)->setText(tr("Discard Changes")); QPushButton *save = static_cast<QPushButton *>(box.button(QMessageBox::Save)); save->setText(tr("Review Changes")); box.setDefaultButton(save); switch (box.exec()) { case QMessageBox::Cancel: m_state = StateUp; return false; case QMessageBox::Save: foreach (QDesignerFormWindow *fw, dirtyForms) { fw->show(); fw->raise(); if (!fw->close()) { m_state = StateUp; return false; } } break; case QMessageBox::Discard: foreach (QDesignerFormWindow *fw, dirtyForms) { fw->editor()->setDirty(false); fw->setWindowModified(false); } break; } } } foreach (QDesignerFormWindow *fw, m_formWindows) fw->close(); saveSettings(); return true;}QDesignerActions *QDesignerWorkbench::actionManager() const{ return m_actionManager;}void QDesignerWorkbench::setUIMode(UIMode mode){ switch (mode) { case TopLevelMode: switchToTopLevelMode(); break; case DockedMode: switchToDockedMode(); break; default: Q_ASSERT(0); }}void QDesignerWorkbench::updateWindowMenu(QDesignerFormWindowInterface *fwi){ bool minimizeChecked = false; bool minimizeEnabled = false; QDesignerFormWindow *activeFormWindow = 0; do { if (!fwi) break; activeFormWindow = qobject_cast<QDesignerFormWindow *>(fwi->parentWidget()); if (!activeFormWindow) break; minimizeEnabled = true; minimizeChecked = isFormWindowMinimized(activeFormWindow); } while (false) ; m_actionManager->minimizeAction()->setEnabled(minimizeEnabled); m_actionManager->minimizeAction()->setChecked(minimizeChecked); if (!m_formWindows.empty()) { const QList<QDesignerFormWindow*>::const_iterator cend = m_formWindows.constEnd(); for (QList<QDesignerFormWindow*>::const_iterator it = m_formWindows.constBegin(); it != cend; ++it) (*it)->action()->setChecked(*it == activeFormWindow); }}void QDesignerWorkbench::formWindowActionTriggered(QAction *a){ QDesignerFormWindow *fw = qobject_cast<QDesignerFormWindow *>(a->parentWidget()); Q_ASSERT(fw); if (isFormWindowMinimized(fw)) setFormWindowMinimized(fw, false); if (m_mode == DockedMode) { if (QMdiSubWindow *subWindow = qobject_cast<QMdiSubWindow *>(fw->parent())) { m_mdiArea->setActiveSubWindow(subWindow); } } else { fw->activateWindow(); fw->raise(); }}void QDesignerWorkbench::showToolBars(){ m_fileToolBar->show(); m_editToolBar->show(); m_toolToolBar->show(); m_formToolBar->show();}void QDesignerWorkbench::closeAllToolWindows(){ foreach (QDesignerToolWindow *tw, m_toolWindows) tw->hide();}QDockWidget *QDesignerWorkbench::magicalDockWidget(QWidget *widget) const{ if (!m_mdiArea) return 0; QDockWidget *dockWidget = qFindChild<QDockWidget*>(m_mdiArea->window(), widget->objectName() + QLatin1String("_dock")); return dockWidget;}bool QDesignerWorkbench::readInBackup(){ const QMap<QString, QString> backupFileMap = QDesignerSettings().backup(); if (backupFileMap.isEmpty()) return false; const QMessageBox::StandardButton answer = QMessageBox::question(0, tr("Backup Information"), tr("Designer was not correctly terminated during your last session." "There are existing Backup files, do you want to load them?"), QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes); if (answer == QMessageBox::No) return false; const QString modifiedPlaceHolder = QLatin1String("[*]"); QMapIterator<QString, QString> it(backupFileMap); while(it.hasNext()) { it.next(); QString fileName = it.key(); fileName.remove(modifiedPlaceHolder); if(m_actionManager->readInForm(it.value())) formWindowManager()->activeFormWindow()->setFileName(fileName); } return true;}void QDesignerWorkbench::updateBackup(QDesignerFormWindowInterface* fwi){ QString fwn = QDir::convertSeparators(fwi->fileName()); if (fwn.isEmpty()) fwn = fwi->parentWidget()->windowTitle(); QMap<QString, QString> map = QDesignerSettings().backup(); map.remove(fwn); QDesignerSettings().setBackup(map);}namespace { void raiseWindow(QWidget *w) { if (w->isMinimized()) w->setWindowState(w->windowState() & ~Qt::WindowMinimized); w->raise(); }}void QDesignerWorkbench::bringAllToFront(){ if (m_mode != TopLevelMode) return; foreach(QDesignerToolWindow *tw, m_toolWindows) raiseWindow(tw); foreach(QDesignerFormWindow *dfw, m_formWindows) raiseWindow(dfw);}// Resize a form window taking MDI decorations into accountvoid QDesignerWorkbench::resizeForm(QDesignerFormWindow *fw, const QWidget *mainContainer) const{ const QSize containerSize = mainContainer->size(); const QSize containerMinimumSize = mainContainer->minimumSize(); const QSize containerMaximumSize = mainContainer->maximumSize(); if (m_mode != DockedMode) { fw->resize(containerSize); fw->setMinimumSize(containerMinimumSize); fw->setMaximumSize(containerMaximumSize); return; } // get decorations and resize MDI QMdiSubWindow *mdiSubWindow = qobject_cast<QMdiSubWindow *>(fw->parent()); Q_ASSERT(mdiSubWindow); const QSize decorationSize = mdiSubWindow->geometry().size() - mdiSubWindow->contentsRect().size(); // TODO new API mdiSubWindow->resize(containerSize + decorationSize); mdiSubWindow->setMinimumSize(containerMinimumSize + decorationSize); if (containerMaximumSize == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)) { mdiSubWindow->setMaximumSize(containerMaximumSize); } else { mdiSubWindow->setMaximumSize(containerMaximumSize + decorationSize); }}// Load a form or return 0 and do cleanup. file name and editor file// name in case of loading a template file.QDesignerFormWindow * QDesignerWorkbench::loadForm(const QString &fileName, bool *uic3Converted, QString *errorMessage){ QFile file(fileName); if (!file.open(QFile::ReadOnly)) { *errorMessage = tr("The file <b>%1</b> could not be opened.").arg(file.fileName()); return 0; } // Create a form QDesignerFormWindowManagerInterface *formWindowManager = m_core->formWindowManager(); QDesignerFormWindow *formWindow = createFormWindow(); QDesignerFormWindowInterface *editor = formWindow->editor(); Q_ASSERT(editor); // Temporarily set the file name. It is needed when converting a UIC 3 file. // In this case, the file name will we be cleared on return to force a save box. editor->setFileName(fileName); editor->setContents(&file); if (!editor->mainContainer()) { removeFormWindow(formWindow); formWindowManager->removeFormWindow(editor); m_core->metaDataBase()->remove(editor); *errorMessage = tr("The file <b>%1</b> is not a valid Designer ui file.").arg(file.fileName()); return 0; } *uic3Converted = editor->fileName().isEmpty(); editor->setDirty(false); resizeForm(formWindow, editor->mainContainer()); formWindowManager->setActiveFormWindow(editor); return formWindow;}QDesignerFormWindow * QDesignerWorkbench::openForm(const QString &fileName, QString *errorMessage){ bool uic3Converted; QDesignerFormWindow *rc =loadForm(fileName, &uic3Converted, errorMessage); if (!rc) return 0; if (!uic3Converted) rc->editor()->setFileName(fileName); rc->firstShow(); return rc;}QDesignerFormWindow * QDesignerWorkbench::openTemplate(const QString &templateFileName, const QString &editorFileName, QString *errorMessage){ bool uic3Converted; QDesignerFormWindow *rc =loadForm(templateFileName, &uic3Converted, errorMessage); if (!rc) return 0; if (!uic3Converted) rc->editor()->setFileName(editorFileName); if (qdesigner_internal::FormWindowBase *fw = qobject_cast<qdesigner_internal::FormWindowBase *>(rc->editor())) fw->setDesignerGrid(qdesigner_internal::FormWindowBase::defaultDesignerGrid()); rc->firstShow(); return rc;}void QDesignerWorkbench::minimizationStateChanged(QDesignerFormWindowInterface *formWindow, bool minimized){ // refresh the minimize action state if (core()->formWindowManager()->activeFormWindow() == formWindow) { m_actionManager->minimizeAction()->setChecked(minimized); }}void QDesignerWorkbench::toggleFormMinimizationState(){ QDesignerFormWindowInterface *fwi = core()->formWindowManager()->activeFormWindow(); if (!fwi || m_mode == NeutralMode) return; QDesignerFormWindow *fw = qobject_cast<QDesignerFormWindow *>(fwi->parentWidget()); Q_ASSERT(fw); setFormWindowMinimized(fw, !isFormWindowMinimized(fw));}bool QDesignerWorkbench::isFormWindowMinimized(const QDesignerFormWindow *fw){ switch (m_mode) { case DockedMode: return mdiSubWindowOf(fw)->isShaded(); case TopLevelMode: return fw->window()->isMinimized(); default: break; } return fw->isMinimized();}void QDesignerWorkbench::setFormWindowMinimized(QDesignerFormWindow *fw, bool minimized){ switch (m_mode) { case DockedMode: { QMdiSubWindow *mdiSubWindow = mdiSubWindowOf(fw); if (minimized) { mdiSubWindow->showShaded(); } else { mdiSubWindow->setWindowState(mdiSubWindow->windowState() & ~Qt::WindowMinimized); } } break; case TopLevelMode: { QWidget *window = fw->window(); if (window->isMinimized()) { window->setWindowState(window->windowState() & ~Qt::WindowMinimized); } else { window->showMinimized(); } } break; default: break; }}void QDesignerWorkbench::applyPreferences(const Preferences &preferences){ if (preferences.m_uiMode != mode()) setUIMode(preferences.m_uiMode); setDesignerUIFont(preferences.m_useFont ? preferences.m_font : qApp->font()); qdesigner_internal::FormWindowBase::setDefaultDesignerGrid(preferences.m_defaultGrid); QDesignerFormWindowManagerInterface *fwm = formWindowManager(); if (const int numWindows = fwm->formWindowCount()) { for (int i = 0; i < numWindows; i++) if (qdesigner_internal::FormWindowBase *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>( fwm->formWindow(i))) if (!fwb->hasFormGrid()) fwb->setDesignerGrid(preferences.m_defaultGrid); }}void QDesignerWorkbench::setDesignerUIFont(const QFont &font){ if (font == m_toolWindows.front()->font()) return; foreach(QDesignerToolWindow *tw, m_toolWindows) tw->setFont(font);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?