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

📄 formwindowmanager.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    m_activeFormWindow->raiseWidgets();}void FormWindowManager::slotActionHorizontalLayoutActivated(){    if (m_layoutChilds)        layoutContainerHorizontal();    else        m_activeFormWindow->layoutHorizontal();}void FormWindowManager::slotActionVerticalLayoutActivated(){    if (m_layoutChilds)        layoutContainerVertical();    else        m_activeFormWindow->layoutVertical();}void FormWindowManager::slotActionGridLayoutActivated(){    if (m_layoutChilds)        layoutContainerGrid();    else        m_activeFormWindow->layoutGrid();}void FormWindowManager::slotActionSplitHorizontalActivated(){    if (m_layoutChilds)        ; // no way to do that    else        m_activeFormWindow->layoutHorizontalSplit();}void FormWindowManager::slotActionSplitVerticalActivated(){    if (m_layoutChilds)        ; // no way to do that    else        m_activeFormWindow->layoutVerticalSplit();}void FormWindowManager::slotActionBreakLayoutActivated(){    QList<QWidget*> widgets = m_activeFormWindow->selectedWidgets();    if (widgets.isEmpty())        widgets.append(m_activeFormWindow->mainContainer());    m_activeFormWindow->simplifySelection(&widgets);    QList<QWidget*> layoutBaseList;    foreach (QWidget *widget, widgets) {        QWidget *currentWidget = core()->widgetFactory()->containerOfWidget(widget);        while (currentWidget && currentWidget != m_activeFormWindow) {            if (QLayout *layout = LayoutInfo::managedLayout(core(), currentWidget)) {                // ### generalize (put in function)                if ((!layout->isEmpty() || qobject_cast<QSplitter*>(currentWidget))                     && !layoutBaseList.contains(layout->parentWidget())) {                    layoutBaseList.prepend(layout->parentWidget());                }            }            currentWidget = currentWidget->parentWidget();        }    }    if (layoutBaseList.isEmpty()) {        // nothing to do        return;    }    m_activeFormWindow->beginCommand(tr("Break Layout"));    foreach (QWidget *layoutBase, layoutBaseList) {        m_activeFormWindow->breakLayout(layoutBase);    }    m_activeFormWindow->endCommand();}void FormWindowManager::slotActionAdjustSizeActivated(){    Q_ASSERT(m_activeFormWindow != 0);    m_activeFormWindow->beginCommand(tr("Adjust Size"));    QList<QWidget*> selectedWidgets = m_activeFormWindow->selectedWidgets();    m_activeFormWindow->simplifySelection(&selectedWidgets);    if (selectedWidgets.isEmpty()) {        Q_ASSERT(m_activeFormWindow->mainContainer() != 0);        selectedWidgets.append(m_activeFormWindow->mainContainer());    }    foreach (QWidget *widget, selectedWidgets) {        bool unlaidout = LayoutInfo::layoutType(core(), widget->parentWidget()) == LayoutInfo::NoLayout;        bool isMainContainer = m_activeFormWindow->isMainContainer(widget);        if (unlaidout || isMainContainer) {            AdjustWidgetSizeCommand *cmd = new AdjustWidgetSizeCommand(m_activeFormWindow);            cmd->init(widget);            m_activeFormWindow->commandHistory()->push(cmd);        }    }    m_activeFormWindow->endCommand();}void FormWindowManager::slotActionSelectAllActivated(){    m_activeFormWindow->selectAll();}void FormWindowManager::slotUpdateActions(){    m_layoutChilds = false;    int selectedWidgetCount = 0;    int laidoutWidgetCount = 0;    int unlaidoutWidgetCount = 0;    bool pasteAvailable = false;    bool layoutAvailable = false;    bool breakAvailable = false;    bool layoutContainer = false;    if (m_activeFormWindow != 0 && m_activeFormWindow->currentTool() == 0) {        QList<QWidget*> simplifiedSelection = m_activeFormWindow->selectedWidgets();        selectedWidgetCount = simplifiedSelection.count();        pasteAvailable = qApp->clipboard()->mimeData() && qApp->clipboard()->mimeData()->hasText();        m_activeFormWindow->simplifySelection(&simplifiedSelection);        if (simplifiedSelection.isEmpty() && m_activeFormWindow->mainContainer())            simplifiedSelection.append(m_activeFormWindow->mainContainer());        foreach (QWidget *widget, simplifiedSelection) {            if (LayoutInfo::isWidgetLaidout(m_core, widget))                ++laidoutWidgetCount;            else                ++unlaidoutWidgetCount;        }        if (simplifiedSelection.count() == 1) {            m_layoutChilds = false;            QWidget *widget = core()->widgetFactory()->containerOfWidget(simplifiedSelection.first());            QDesignerWidgetDataBaseInterface *db = m_core->widgetDataBase();            if (QDesignerWidgetDataBaseItemInterface *item = db->item(db->indexOfObject(widget))) {                QLayout *layout = LayoutInfo::managedLayout(m_core, widget);                layoutContainer = (item->isContainer() || m_activeFormWindow->isMainContainer(widget));                layoutAvailable = layoutContainer                                    && m_activeFormWindow->hasInsertedChildren(widget)                                    && layout == 0;                m_layoutChilds = layoutAvailable;                breakAvailable = LayoutInfo::isWidgetLaidout(m_core, widget);                if (! breakAvailable && layout != 0)                    breakAvailable = ! layout->isEmpty();                if (! breakAvailable && qobject_cast<QSplitter*>(widget))                    breakAvailable = qobject_cast<QSplitter*>(widget)->count() != 0;            }        } else {            layoutAvailable = unlaidoutWidgetCount > 1;            breakAvailable = false;        }    }    m_actionCut->setEnabled(selectedWidgetCount > 0);    m_actionCopy->setEnabled(selectedWidgetCount > 0);    m_actionDelete->setEnabled(selectedWidgetCount > 0);    m_actionLower->setEnabled(selectedWidgetCount > 0);    m_actionRaise->setEnabled(selectedWidgetCount > 0);    m_actionPaste->setEnabled(pasteAvailable);    m_actionSelectAll->setEnabled(m_activeFormWindow != 0);    m_actionAdjustSize->setEnabled(unlaidoutWidgetCount > 0);    m_actionHorizontalLayout->setEnabled(layoutAvailable);    m_actionVerticalLayout->setEnabled(layoutAvailable);    m_actionSplitHorizontal->setEnabled(layoutAvailable && !layoutContainer);    m_actionSplitVertical->setEnabled(layoutAvailable && !layoutContainer);    m_actionGridLayout->setEnabled(layoutAvailable);    m_actionBreakLayout->setEnabled(breakAvailable);}void FormWindowManager::layoutContainerHorizontal(){    QWidget *w = m_activeFormWindow->mainContainer();    QList<QWidget*> l(m_activeFormWindow->selectedWidgets());    if (l.count() == 1)        w = l.first();    if (w != 0)        m_activeFormWindow->layoutHorizontalContainer(w);}void FormWindowManager::layoutContainerVertical(){    QWidget *w = m_activeFormWindow->mainContainer();    QList<QWidget*> l(m_activeFormWindow->selectedWidgets());    if (l.count() == 1)        w = l.first();    if (w)        m_activeFormWindow->layoutVerticalContainer(w);}void FormWindowManager::layoutContainerGrid(){    QWidget *w = m_activeFormWindow->mainContainer();    QList<QWidget*> l(m_activeFormWindow->selectedWidgets());    if (l.count() == 1)        w = l.first();    if (w)        m_activeFormWindow->layoutGridContainer(w);}QDesignerFormWindowInterface *FormWindowManager::createFormWindow(QWidget *parentWidget, Qt::WindowFlags flags){    FormWindow *formWindow = new FormWindow(qobject_cast<FormEditor*>(core()), parentWidget, flags);    addFormWindow(formWindow);    return formWindow;}QAction *FormWindowManager::actionUndo() const{    return m_actionUndo;}QAction *FormWindowManager::actionRedo() const{    return m_actionRedo;}// DnD stuffvoid FormWindowManager::dragItems(const QList<QDesignerDnDItemInterface*> &item_list){    if (!m_drag_item_list.isEmpty()) {        qWarning("FormWindowManager::dragItem(): called while already dragging");        return;    }    beginDrag(item_list, QCursor::pos());}void FormWindowManager::beginDrag(const QList<QDesignerDnDItemInterface*> &item_list, const QPoint &globalPos){    Q_ASSERT(m_drag_item_list.isEmpty());    m_drag_item_list = item_list;    setItemsPos(globalPos);    foreach(QDesignerDnDItemInterface *item, m_drag_item_list) {        QWidget *deco = item->decoration();        deco->setAttribute(Qt::WA_TransparentForMouseEvents);        QPoint pos = deco->pos();        QRect ag = qApp->desktop()->availableGeometry(deco);        deco->move(qMin(qMax(pos.x(), ag.left()), ag.right()), qMin(qMax(pos.y(), ag.top()), ag.bottom()));        deco->move(pos);        deco->show();        deco->setWindowOpacity(0.8);    }#ifdef Q_WS_X11    m_core->topLevel()->grabMouse();    m_savedContextMenuPolicy = m_core->topLevel()->contextMenuPolicy();    m_core->topLevel()->setContextMenuPolicy(Qt::NoContextMenu);#endif}static QDesignerWidgetBoxInterface *widgetBoxAt(const QPoint &global_pos){    QWidget *w = qApp->widgetAt(global_pos);    while (w != 0) {        QDesignerWidgetBoxInterface *wb = qobject_cast<QDesignerWidgetBoxInterface*>(w);        if (wb != 0)            return wb;        w = w->parentWidget();    }    return 0;}void FormWindowManager::setItemsPos(const QPoint &globalPos){    foreach(QDesignerDnDItemInterface *item, m_drag_item_list)        item->decoration()->move(globalPos - item->hotSpot());    QWidget *widget_under_mouse = qApp->widgetAt(globalPos);    int max_try = 3;    while (max_try && widget_under_mouse && isDecoration(widget_under_mouse)) {        --max_try;        widget_under_mouse = qApp->widgetAt(widget_under_mouse->pos() - QPoint(1,1));        Q_ASSERT(!qobject_cast<ConnectionEdit*>(widget_under_mouse));    }    FormWindow *form_under_mouse            = qobject_cast<FormWindow*>(QDesignerFormWindowInterface::findFormWindow(widget_under_mouse));    if (form_under_mouse != 0 && !form_under_mouse->hasFeature(QDesignerFormWindowInterface::EditFeature))        form_under_mouse = 0;    if (form_under_mouse != 0) {        // widget_under_mouse might be some temporary thing like the dropLine. We need        // the actual widget that's part of the edited GUI.        widget_under_mouse            = form_under_mouse->widgetAt(form_under_mouse->mapFromGlobal(globalPos));        Q_ASSERT(!qobject_cast<ConnectionEdit*>(widget_under_mouse));    }    if (m_last_form_under_mouse != 0 && widget_under_mouse != m_last_widget_under_mouse) {        m_last_form_under_mouse->highlightWidget(m_last_widget_under_mouse,                                    m_last_widget_under_mouse->mapFromGlobal(globalPos),                                    FormWindow::Restore);    }    FormWindow *source_form = qobject_cast<FormWindow*>(m_drag_item_list.first()->source());    if (form_under_mouse != 0        && (source_form == 0 || widget_under_mouse != source_form->mainContainer())) {        form_under_mouse->highlightWidget(widget_under_mouse,                                    widget_under_mouse->mapFromGlobal(globalPos),                                    FormWindow::Highlight);    }    m_last_widget_under_mouse = widget_under_mouse;    m_last_form_under_mouse = form_under_mouse;    if (m_last_form_under_mouse == 0)        m_widget_box_under_mouse = widgetBoxAt(globalPos);    else        m_widget_box_under_mouse = 0;}void FormWindowManager::endDrag(const QPoint &pos){#ifdef Q_WS_X11    m_core->topLevel()->releaseMouse();    m_core->topLevel()->setContextMenuPolicy(m_savedContextMenuPolicy);#endif    Q_ASSERT(!m_drag_item_list.isEmpty());    foreach (QDesignerDnDItemInterface *item, m_drag_item_list)        item->decoration()->hide();    // ugly, but you can't qobject_cast from interfaces    if (m_last_form_under_mouse != 0 &&            m_last_form_under_mouse->hasFeature(QDesignerFormWindowInterface::EditFeature)) {        m_last_form_under_mouse->dropWidgets(m_drag_item_list, m_last_widget_under_mouse, pos);    } else if (m_widget_box_under_mouse != 0) {        m_widget_box_under_mouse->dropWidgets(m_drag_item_list, pos);        foreach (QDesignerDnDItemInterface *item, m_drag_item_list) {            if (item->type() == QDesignerDnDItemInterface::CopyDrop)                continue;            FormWindow *source = qobject_cast<FormWindow*>(item->source());            if (source == 0)                continue;            QWidget *widget = item->widget();            if (widget == 0)                continue;            source->deleteWidgets(QList<QWidget*>() << widget);        }    } else {        foreach (QDesignerDnDItemInterface *item, m_drag_item_list) {            if (item->widget() != 0)                item->widget()->show();        }    }    foreach (QDesignerDnDItemInterface *item, m_drag_item_list)        delete item;    m_drag_item_list.clear();    m_last_widget_under_mouse = 0;    m_last_form_under_mouse = 0;    m_widget_box_under_mouse = 0;}bool FormWindowManager::isDecoration(QWidget *widget) const{    foreach (QDesignerDnDItemInterface *item, m_drag_item_list) {        if (item->decoration() == widget)            return true;    }    return false;}

⌨️ 快捷键说明

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