⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdesigner_taskmenu.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qdesigner_taskmenu_p.h"#include "qdesigner_command_p.h"#include "qdesigner_promotedwidget_p.h"#include "qtundo_p.h"#include "richtexteditor_p.h"#include "promotetocustomwidgetdialog_p.h"#include "widgetfactory_p.h"#include "widgetdatabase_p.h"#include "qlayout_widget_p.h"#include "spacer_widget_p.h"#include "layout_p.h"#include <QtDesigner/QtDesigner>#include <QtDesigner/QExtensionManager>#include <QtDesigner/QDesignerLayoutDecorationExtension>#include <QtGui/QAction>#include <QtGui/QToolBar>#include <QtGui/QWidget>#include <QtGui/QMenuBar>#include <QtGui/QInputDialog>#include <QtGui/QMainWindow>#include <QtGui/QDockWidget>#include <QtGui/QStatusBar>#include <QtCore/QVariant>#include <QtCore/qdebug.h>namespace qdesigner_internal {static QMenuBar *findMenuBar(const QWidget *widget){    QList<QObject*> children = widget->children();    foreach (QObject *obj, widget->children()) {        if (QMenuBar *mb = qobject_cast<QMenuBar*>(obj)) {            return mb;        }    }    return 0;}static QStatusBar *findStatusBar(const QWidget *widget){    QList<QObject*> children = widget->children();    foreach (QObject *obj, widget->children()) {        if (QStatusBar *sb = qobject_cast<QStatusBar*>(obj)) {            return sb;        }    }    return 0;}QDesignerTaskMenu::QDesignerTaskMenu(QWidget *widget, QObject *parent)    : QObject(parent),      m_widget(widget){    Q_ASSERT(qobject_cast<QDesignerFormWindowInterface*>(widget) == 0);    m_separator = new QAction(this);    m_separator->setSeparator(true);    m_separator2 = new QAction(this);    m_separator2->setSeparator(true);    m_changeObjectNameAction = new QAction(tr("Change objectName..."), this);    connect(m_changeObjectNameAction, SIGNAL(triggered()), this, SLOT(changeObjectName()));    m_changeStatusTip = new QAction(tr("Change statusTip..."), this);    connect(m_changeStatusTip, SIGNAL(triggered()), this, SLOT(changeStatusTip()));    m_changeToolTip = new QAction(tr("Change toolTip..."), this);    connect(m_changeToolTip, SIGNAL(triggered()), this, SLOT(changeToolTip()));    m_changeWhatsThis = new QAction(tr("Change whatsThis..."), this);    connect(m_changeWhatsThis, SIGNAL(triggered()), this, SLOT(changeWhatsThis()));    m_addMenuBar = new QAction(tr("Create Menu Bar"), this);    connect(m_addMenuBar, SIGNAL(triggered()), this, SLOT(createMenuBar()));    m_addToolBar = new QAction(tr("Add Tool Bar"), this);    connect(m_addToolBar, SIGNAL(triggered()), this, SLOT(addToolBar()));    m_addStatusBar = new QAction(tr("Create Status Bar"), this);    connect(m_addStatusBar, SIGNAL(triggered()), this, SLOT(createStatusBar()));    m_createDockWidgetAction = new QAction(tr("Create Dock Window"), this);    connect(m_createDockWidgetAction, SIGNAL(triggered()), this, SLOT(createDockWidget()));    m_promoteToCustomWidgetAction = new QAction(tr("Promote to Custom Widget"), this);    connect(m_promoteToCustomWidgetAction, SIGNAL(triggered()), this, SLOT(promoteToCustomWidget()));    QString demote_string = tr("Demote from Custom Widget");    if (const QDesignerPromotedWidget *promoted = qobject_cast<const QDesignerPromotedWidget*>(widget))        demote_string = tr("Demote to ") + promoted->item()->extends();    m_demoteFromCustomWidgetAction = new QAction(demote_string, this);    connect(m_demoteFromCustomWidgetAction, SIGNAL(triggered()), this, SLOT(demoteFromCustomWidget()));}QDesignerTaskMenu::~QDesignerTaskMenu(){}QWidget *QDesignerTaskMenu::widget() const{    return m_widget;}QDesignerFormWindowInterface *QDesignerTaskMenu::formWindow() const{    QDesignerFormWindowInterface *result = QDesignerFormWindowInterface::findFormWindow(widget());    Q_ASSERT(result != 0);    return result;}void QDesignerTaskMenu::createMenuBar(){    if (QDesignerFormWindowInterface *fw = formWindow()) {        QMainWindow *mw = qobject_cast<QMainWindow*>(fw->mainContainer());        if (!mw) {            // ### warning message            return;        }        CreateMenuBarCommand *cmd = new CreateMenuBarCommand(fw);        cmd->init(mw);        fw->commandHistory()->push(cmd);    }}void QDesignerTaskMenu::addToolBar(){    if (QDesignerFormWindowInterface *fw = formWindow()) {        QMainWindow *mw = qobject_cast<QMainWindow*>(fw->mainContainer());        if (!mw) {            // ### warning message            return;        }        AddToolBarCommand *cmd = new AddToolBarCommand(fw);        cmd->init(mw);        fw->commandHistory()->push(cmd);    }}void QDesignerTaskMenu::createStatusBar(){    if (QDesignerFormWindowInterface *fw = formWindow()) {        QMainWindow *mw = qobject_cast<QMainWindow*>(fw->mainContainer());        if (!mw) {            // ### warning message            return;        }        CreateStatusBarCommand *cmd = new CreateStatusBarCommand(fw);        cmd->init(mw);        fw->commandHistory()->push(cmd);    }}QList<QAction*> QDesignerTaskMenu::taskActions() const{    QDesignerFormWindowInterface *formWindow = QDesignerFormWindowInterface::findFormWindow(widget());    Q_ASSERT(formWindow);    bool isMainContainer = formWindow->mainContainer() == widget();    QList<QAction*> actions;    if (const QMainWindow *mw = qobject_cast<const QMainWindow*>(formWindow->mainContainer()))  {        if (isMainContainer || mw->centralWidget() == widget()) {            if (!findMenuBar(mw)) {                actions.append(m_addMenuBar);            }            actions.append(m_addToolBar);            // ### create the status bar#if 0            if (!findStatusBar(mw))                actions.append(m_addStatusBar);#endif            actions.append(m_separator2);        }    }    actions.append(m_changeObjectNameAction);    actions.append(m_separator);    actions.append(m_changeToolTip);    actions.append(m_changeWhatsThis);    if (!isMainContainer) {        actions.append(m_separator);        if (qobject_cast<const QDesignerPromotedWidget*>(m_widget) == 0)            actions.append(m_promoteToCustomWidgetAction);        else            actions.append(m_demoteFromCustomWidgetAction);    }    return actions;}void QDesignerTaskMenu::changeObjectName(){    QDesignerFormWindowInterface *fw = formWindow();    Q_ASSERT(fw != 0);    QDesignerFormEditorInterface *core = fw->core();    QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), widget());    Q_ASSERT(sheet != 0);    bool ok;    QString newObjectName = QInputDialog::getText(widget(), tr("Change Object Name"),            tr("Object Name"), QLineEdit::Normal, sheet->property(sheet->indexOf(QLatin1String("objectName"))).toString(), &ok);    if (ok && !newObjectName.isEmpty()) {        fw->cursor()->setProperty(QLatin1String("objectName"), newObjectName);    }}void QDesignerTaskMenu::createDockWidget(){    if (QDesignerFormWindowInterface *fw = formWindow()) {        QMainWindow *mw = qobject_cast<QMainWindow*>(fw->mainContainer());        if (!mw) {            // ### warning message            return;        }        AddDockWidgetCommand *cmd = new AddDockWidgetCommand(fw);        cmd->init(mw);        fw->commandHistory()->push(cmd);    }}QDesignerTaskMenuFactory::QDesignerTaskMenuFactory(QExtensionManager *extensionManager)    : QExtensionFactory(extensionManager){}QObject *QDesignerTaskMenuFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const{    if (iid != Q_TYPEID(QDesignerTaskMenuExtension))        return 0;    QWidget *widget = qobject_cast<QWidget*>(object);    if (widget == 0)        return 0;    // check if is an internal widget (### generalize)    if (qobject_cast<QLayoutWidget*>(widget) || qobject_cast<Spacer*>(widget))        return 0;    return new QDesignerTaskMenu(widget, parent);}void QDesignerTaskMenu::promoteToCustomWidget(){    QDesignerFormWindowInterface *fw = formWindow();    QDesignerFormEditorInterface *core = fw->core();    QWidget *wgt = widget();    QDesignerWidgetDataBaseInterface *db = core->widgetDataBase();    WidgetFactory *factory = qobject_cast<WidgetFactory*>(core->widgetFactory());    Q_ASSERT(qobject_cast<QDesignerPromotedWidget*>(wgt) == 0);    QString base_class_name = QLatin1String(factory->classNameOf(wgt));    PromoteToCustomWidgetDialog dialog(db, base_class_name);    if (!dialog.exec())        return;    QString custom_class_name = dialog.customClassName();    QString include_file = dialog.includeFile();    QDesignerWidgetDataBaseItemInterface *item = 0;    int idx = db->indexOfClassName(custom_class_name);    if (idx == -1) {        item = new WidgetDataBaseItem(custom_class_name, tr("Promoted Widgets"));        item->setCustom(true);        item->setPromoted(true);        item->setExtends(base_class_name);        db->append(item);    } else {        item = db->item(idx);    }    item->setIncludeFile(include_file);    // ### use the undo stack    // fw->beginCommand(tr("Promote to custom widget"));    PromoteToCustomWidgetCommand *cmd = new PromoteToCustomWidgetCommand(fw);    cmd->init(item, wgt);    fw->commandHistory()->push(cmd);}void QDesignerTaskMenu::demoteFromCustomWidget(){    QDesignerFormWindowInterface *fw = formWindow();    QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(widget());    Q_ASSERT(promoted != 0);    // ### use the undo stack    //fw->beginCommand(tr("Demote to ") + promoted->item()->extends());    DemoteFromCustomWidgetCommand *cmd = new DemoteFromCustomWidgetCommand(fw);    cmd->init(promoted);    fw->commandHistory()->push(cmd);}void QDesignerTaskMenu::changeRichTextProperty(const QString &propertyName){    if (QDesignerFormWindowInterface *fw = formWindow()) {        RichTextEditorDialog *dlg = new RichTextEditorDialog(fw);        Q_ASSERT(m_widget->parentWidget() != 0);        RichTextEditor *editor = dlg->editor();        QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(fw->core()->extensionManager(), m_widget);        Q_ASSERT(sheet != 0);        editor->setDefaultFont(m_widget->font());        editor->setText(sheet->property(sheet->indexOf(propertyName)).toString());        editor->selectAll();        editor->setFocus();        if (dlg->exec()) {            QString text = editor->text(Qt::RichText);            fw->cursor()->setWidgetProperty(m_widget, propertyName, QVariant(text));        }        delete dlg;    }}void QDesignerTaskMenu::changeToolTip(){    changeRichTextProperty(QLatin1String("toolTip"));}void QDesignerTaskMenu::changeStatusTip(){    changeRichTextProperty(QLatin1String("statusTip"));}void QDesignerTaskMenu::changeWhatsThis(){    changeRichTextProperty(QLatin1String("whatsThis"));}} // namespace qdesigner_internal

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -