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 + -
显示快捷键?