tool_widgeteditor.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 322 行

CPP
322
字号
/******************************************************************************** Copyright (C) 1992-2007 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://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************//*TRANSLATOR qdesigner_internal::WidgetEditorTool*/#include "tool_widgeteditor.h"#include "formwindow.h"// sdk#include <QtDesigner/QDesignerFormEditorInterface>#include <QtDesigner/QDesignerWidgetFactoryInterface>#include <QtDesigner/QDesignerWidgetBoxInterface>#include <layoutinfo_p.h>#include <qdesigner_dnditem_p.h>#include <QtGui/qevent.h>#include <QtGui/QAction>#include <QtGui/QMainWindow>#include <QtGui/QCursor>#include <QtCore/qdebug.h>using namespace qdesigner_internal;WidgetEditorTool::WidgetEditorTool(FormWindow *formWindow)    : QDesignerFormWindowToolInterface(formWindow),      m_formWindow(formWindow),      m_action(new QAction(tr("Edit Widgets"), this)){}QAction *WidgetEditorTool::action() const{    return m_action;}WidgetEditorTool::~WidgetEditorTool(){}QDesignerFormEditorInterface *WidgetEditorTool::core() const{    return m_formWindow->core();}QDesignerFormWindowInterface *WidgetEditorTool::formWindow() const{    return m_formWindow;}bool WidgetEditorTool::mainWindowSeparatorEvent(QWidget *widget, QEvent *event){    QMainWindow *mw = qobject_cast<QMainWindow*>(widget);    if (mw == 0)        return false;    if (event->type() != QEvent::MouseButtonPress            && event->type() != QEvent::MouseMove            && event->type() != QEvent::MouseButtonRelease)        return false;    QMouseEvent *e = static_cast<QMouseEvent*>(event);    if (event->type() == QEvent::MouseButtonPress) {        if (mw->isSeparator(e->pos())) {            m_separator_drag_mw = mw;            return true;        }        return false;    }    if (event->type() == QEvent::MouseMove)        return m_separator_drag_mw == mw;    if (event->type() == QEvent::MouseButtonRelease) {        if (m_separator_drag_mw != mw)            return false;        m_separator_drag_mw = 0;        return true;    }    return false;}bool WidgetEditorTool::handleEvent(QWidget *widget, QWidget *managedWidget, QEvent *event){    const bool passive = core()->widgetFactory()->isPassiveInteractor(widget) != 0                    || mainWindowSeparatorEvent(widget, event); // separators in QMainWindow                                                                // are no longer widgets    switch (event->type()) {    case QEvent::Resize:    case QEvent::Move:        m_formWindow->updateSelection(widget);        if (event->type() != QEvent::Resize)            m_formWindow->updateChildSelections(widget);        break;    case QEvent::FocusOut:    case QEvent::FocusIn:        return !(passive || widget == m_formWindow);    case QEvent::KeyPress:        return !passive && handleKeyPressEvent(widget, managedWidget, static_cast<QKeyEvent*>(event));    case QEvent::KeyRelease:        return !passive && handleKeyReleaseEvent(widget, managedWidget, static_cast<QKeyEvent*>(event));    case QEvent::MouseMove:        return !passive && handleMouseMoveEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));    case QEvent::MouseButtonPress:        return !passive && handleMousePressEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));    case QEvent::MouseButtonRelease:        return !passive && handleMouseReleaseEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));    case QEvent::MouseButtonDblClick:        return !passive && handleMouseButtonDblClickEvent(widget, managedWidget, static_cast<QMouseEvent*>(event));    case QEvent::ContextMenu:        return !passive && handleContextMenu(widget, managedWidget, static_cast<QContextMenuEvent*>(event));    case QEvent::DragEnter:        return handleDragEnterMoveEvent(widget, managedWidget, static_cast<QDragEnterEvent *>(event), true);    case QEvent::DragMove:        return handleDragEnterMoveEvent(widget, managedWidget, static_cast<QDragEnterEvent *>(event), false);    case QEvent::DragLeave:        return handleDragLeaveEvent(widget, managedWidget, static_cast<QDragLeaveEvent *>(event));    case QEvent::Drop:        return handleDropEvent(widget, managedWidget, static_cast<QDropEvent *>(event));    default:        break;    } // end switch    return false;}// ### remove mebool WidgetEditorTool::handleContextMenu(QWidget *widget, QWidget *managedWidget, QContextMenuEvent *e){    return m_formWindow->handleContextMenu(widget, managedWidget, e);}bool WidgetEditorTool::handleMouseButtonDblClickEvent(QWidget *widget, QWidget *managedWidget, QMouseEvent *e){    return m_formWindow->handleMouseButtonDblClickEvent(widget, managedWidget, e);}bool WidgetEditorTool::handleMousePressEvent(QWidget *widget, QWidget *managedWidget, QMouseEvent *e){    return m_formWindow->handleMousePressEvent(widget, managedWidget, e);}bool WidgetEditorTool::handleMouseMoveEvent(QWidget *widget, QWidget *managedWidget, QMouseEvent *e){    return m_formWindow->handleMouseMoveEvent(widget, managedWidget, e);}bool WidgetEditorTool::handleMouseReleaseEvent(QWidget *widget, QWidget *managedWidget, QMouseEvent *e){    return m_formWindow->handleMouseReleaseEvent(widget, managedWidget, e);}bool WidgetEditorTool::handleKeyPressEvent(QWidget *widget, QWidget *managedWidget, QKeyEvent *e){    return m_formWindow->handleKeyPressEvent(widget, managedWidget, e);}bool WidgetEditorTool::handleKeyReleaseEvent(QWidget *widget, QWidget *managedWidget, QKeyEvent *e){    return m_formWindow->handleKeyReleaseEvent(widget, managedWidget, e);}bool WidgetEditorTool::handlePaintEvent(QWidget *widget, QWidget *managedWidget, QPaintEvent *e){    Q_UNUSED(widget);    Q_UNUSED(managedWidget);    Q_UNUSED(e);    return false;}bool WidgetEditorTool::handleDragEnterMoveEvent(QWidget *, QWidget *, QDragMoveEvent *e, bool isEnter){    const QDesignerMimeData *mimeData = qobject_cast<const QDesignerMimeData *>(e->mimeData());    if (!mimeData)        return false;    if (!m_formWindow->hasFeature(QDesignerFormWindowInterface::EditFeature)) {        e->ignore();        return true;    }    const QPoint formPos = e->pos();    const QPoint globalPos = m_formWindow->mapToGlobal(formPos);    const FormWindowBase::WidgetUnderMouseMode wum = mimeData->items().size() == 1 ? FormWindowBase::FindSingleSelectionDropTarget : FormWindowBase::FindMultiSelectionDropTarget;    QWidget *dropTarget = m_formWindow->widgetUnderMouse(formPos, wum);    if (m_lastDropTarget && dropTarget != m_lastDropTarget)        m_formWindow->highlightWidget(m_lastDropTarget, m_lastDropTarget->mapFromGlobal(globalPos), FormWindow::Restore);    m_lastDropTarget = dropTarget;    if (m_lastDropTarget)        m_formWindow->highlightWidget(m_lastDropTarget, m_lastDropTarget->mapFromGlobal(globalPos), FormWindow::Highlight);    if (isEnter || m_lastDropTarget)        mimeData->acceptEvent(e);    else        e->ignore();    return true;}bool WidgetEditorTool::handleDropEvent(QWidget *widget, QWidget *, QDropEvent *e){    const QDesignerMimeData *mimeData = qobject_cast<const QDesignerMimeData *>(e->mimeData());    if (!mimeData)        return false;    if (!m_lastDropTarget ||        !m_formWindow->hasFeature(QDesignerFormWindowInterface::EditFeature)) {        e->ignore();        return true;    }    // FormWindow determines the position from the decoration.    const QPoint globalPos = widget->mapToGlobal(e->pos());    mimeData->moveDecoration(globalPos);    if (!m_formWindow->dropWidgets(mimeData->items(), m_lastDropTarget, globalPos)) {        e->ignore();        return true;    }    mimeData->acceptEvent(e);    return true;}bool WidgetEditorTool::restoreDropHighlighting(){    if (!m_lastDropTarget)        return false;    m_formWindow->highlightWidget(m_lastDropTarget, m_lastDropTarget->mapFromGlobal(QCursor::pos()), FormWindow::Restore);    m_lastDropTarget = 0;    return true;}bool WidgetEditorTool::handleDragLeaveEvent(QWidget *, QWidget *, QDragLeaveEvent *event){    if (restoreDropHighlighting()) {        event->accept();        return true;    }    return false;}QWidget *WidgetEditorTool::editor() const{    Q_ASSERT(formWindow() != 0);    return formWindow()->mainContainer();}void WidgetEditorTool::activated(){    if (core()->widgetBox())        core()->widgetBox()->setEnabled(true);    if (m_formWindow == 0)        return;    QList<QWidget*> sel = m_formWindow->selectedWidgets();    foreach (QWidget *w, sel)        m_formWindow->raiseSelection(w);}void WidgetEditorTool::deactivated(){    if (core()->widgetBox())        core()->widgetBox()->setEnabled(false);    if (m_formWindow == 0)        return;    m_formWindow->clearSelection();}

⌨️ 快捷键说明

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