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

📄 qworkspace.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
bool QWorkspace::eventFilter(QObject *o, QEvent * e){    Q_D(QWorkspace);    static QTime* t = 0;    static QWorkspace* tc = 0;    if (o == d->maxtools) {        switch (e->type()) {        case QEvent::MouseButtonPress:            {                QMenuBar* b = (QMenuBar*)o->parent();                if (!t)                    t = new QTime;                if (tc != this || t->elapsed() > QApplication::doubleClickInterval()) {                    if (isRightToLeft()) {                        QPoint p = b->mapToGlobal(QPoint(b->x() + b->width(), b->y() + b->height()));                        p.rx() -= d->popup->sizeHint().width();                        d->_q_popupOperationMenu(p);                    } else {                        d->_q_popupOperationMenu(b->mapToGlobal(QPoint(b->x(), b->y() + b->height())));                    }                    t->start();                    tc = this;                } else {                    tc = 0;                    closeActiveWindow();                }                return true;            }        default:            break;        }        return QWidget::eventFilter(o, e);    }    switch (e->type()) {    case QEvent::HideToParent:        break;    case QEvent::ShowToParent:        if (QWorkspaceChild *c = qobject_cast<QWorkspaceChild*>(o))            if (!d->focus.contains(c))                d->focus.append(c);        d->updateWorkspace();        break;    case QEvent::WindowTitleChange:        if (!d->inTitleChange) {            if (o == window())                d->topTitle = window()->windowTitle();            if (d->maxWindow && d->maxWindow->windowWidget() && d->topTitle.size()) {                d->inTitleChange = true;                window()->setWindowTitle(tr("%1 - [%2]")                                         .arg(d->topTitle).arg(d->maxWindow->windowWidget()->windowTitle()));                d->inTitleChange = false;            }        }        break;    case QEvent::ModifiedChange:        if (o == d->maxWindow)            window()->setWindowModified(d->maxWindow->isWindowModified());        break;    case QEvent::Close:        if (o == window())        {            QList<QWorkspaceChild *>::Iterator it(d->windows.begin());            while (it != d->windows.end()) {                QWorkspaceChild* c = *it;                ++it;                if (c->shademode)                    c->showShaded();            }        } else if (qobject_cast<QWorkspaceChild*>(o)) {            d->popup->hide();        }        d->updateWorkspace();        break;    default:        break;    }    return QWidget::eventFilter(o, e);}static QMenuBar *findMenuBar(QWidget *w){    // don't search recursively to avoid finding a menubar of a    // mainwindow that happens to be a workspace window (like    // a mainwindow in designer)    QList<QObject *> children = w->children();    for (int i = 0; i < children.count(); ++i) {        QMenuBar *bar = qobject_cast<QMenuBar *>(children.at(i));        if (bar)            return bar;    }    return 0;}void QWorkspacePrivate::showMaximizeControls(){    Q_Q(QWorkspace);    Q_ASSERT(maxWindow);    // merge windowtitle and modified state    if (!topTitle.size())        topTitle = q->window()->windowTitle();    if (maxWindow->windowWidget()) {        QString docTitle = maxWindow->windowWidget()->windowTitle();        if (topTitle.size() && docTitle.size()) {            inTitleChange = true;            q->window()->setWindowTitle(QWorkspace::tr("%1 - [%2]").arg(topTitle).arg(docTitle));            inTitleChange = false;        }        q->window()->setWindowModified(maxWindow->windowWidget()->isWindowModified());    }        if (!q->style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, q)) {        QMenuBar* b = 0;        // Do a breadth-first search first on every parent,        QWidget* w = q->parentWidget();        while (w) {            b = findMenuBar(w);            if (b)                break;            w = w->parentWidget();        }        // last attempt.        if (!b)            b = findMenuBar(q->window());        if (!b)            return;        if (!maxcontrols) {            maxmenubar = b;            maxcontrols = new QFrame(q->window());            maxcontrols->setObjectName(QLatin1String("qt_maxcontrols"));            QHBoxLayout* l = new QHBoxLayout(maxcontrols);            l->setMargin(maxcontrols->frameWidth());            l->setSpacing(0);            if (maxWindow->windowWidget() &&                (maxWindow->windowWidget()->windowFlags() & Qt::WindowMinimizeButtonHint)) {                QToolButton* iconB = new QToolButton(maxcontrols);                iconB->setObjectName(QLatin1String("iconify"));#ifndef QT_NO_TOOLTIP                iconB->setToolTip(QWorkspace::tr("Minimize"));#endif                l->addWidget(iconB);                iconB->setFocusPolicy(Qt::NoFocus);                QPixmap pm = q->style()->standardPixmap(QStyle::SP_TitleBarMinButton);                iconB->setIcon(pm);                iconB->setIconSize(pm.size());                QObject::connect(iconB, SIGNAL(clicked()),                                 q, SLOT(_q_minimizeActiveWindow()));            }            QToolButton* restoreB = new QToolButton(maxcontrols);            restoreB->setObjectName(QLatin1String("restore"));#ifndef QT_NO_TOOLTIP            restoreB->setToolTip(QWorkspace::tr("Restore Down"));#endif            l->addWidget(restoreB);            restoreB->setFocusPolicy(Qt::NoFocus);            QPixmap pm = q->style()->standardPixmap(QStyle::SP_TitleBarNormalButton);            restoreB->setIcon(pm);            restoreB->setIconSize(pm.size());            QObject::connect(restoreB, SIGNAL(clicked()),                             q, SLOT(_q_normalizeActiveWindow()));            l->addSpacing(2);            QToolButton* closeB = new QToolButton(maxcontrols);            closeB->setObjectName(QLatin1String("close"));#ifndef QT_NO_TOOLTIP            closeB->setToolTip(QWorkspace::tr("Close"));#endif            l->addWidget(closeB);            closeB->setFocusPolicy(Qt::NoFocus);            pm = q->style()->standardPixmap(QStyle::SP_TitleBarCloseButton);            closeB->setIcon(pm);            closeB->setIconSize(pm.size());            QObject::connect(closeB, SIGNAL(clicked()),                             q, SLOT(closeActiveWindow()));            maxcontrols->setFixedSize(maxcontrols->minimumSizeHint());        }        b->setCornerWidget(maxcontrols);        maxcontrols->show();        if (!active && becomeActive) {            active = (QWorkspaceChild*)becomeActive->parentWidget();            active->setActive(true);            becomeActive = 0;            emit q->windowActivated(active->windowWidget());        }        if (active) {            if (!maxtools) {                maxtools = new QLabel(q->window());                maxtools->setObjectName(QLatin1String("qt_maxtools"));                maxtools->installEventFilter(q);            }            if (active->windowWidget() && !active->windowWidget()->windowIcon().isNull()) {                QIcon icon = active->windowWidget()->windowIcon();                int iconSize = maxcontrols->size().height();                maxtools->setPixmap(icon.pixmap(QSize(iconSize, iconSize)));            } else {                QPixmap pm = q->style()->standardPixmap(QStyle::SP_TitleBarMenuButton);                if (pm.isNull()) {                    pm = QPixmap(14,14);                    pm.fill(Qt::black);                }                maxtools->setPixmap(pm);            }            b->setCornerWidget(maxtools, Qt::TopLeftCorner);            maxtools->show();        }    }}void QWorkspacePrivate::hideMaximizeControls(){    Q_Q(QWorkspace);    if (!q->style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, q)) {        if (maxmenubar) {            maxmenubar->setCornerWidget(0, Qt::TopLeftCorner);            maxmenubar->setCornerWidget(0, Qt::TopRightCorner);        }        delete maxcontrols;        maxcontrols = 0;        delete maxtools;        maxtools = 0;    }    //unmerge the titlebar/modification state    if (topTitle.size()) {        inTitleChange = true;        q->window()->setWindowTitle(topTitle);        inTitleChange = false;    }    q->window()->setWindowModified(false);}/*!    Closes the child window that is currently active.    \sa closeAllWindows()*/void QWorkspace::closeActiveWindow(){    Q_D(QWorkspace);    if (d->maxWindow && d->maxWindow->windowWidget())        d->maxWindow->windowWidget()->close();    else if (d->active && d->active->windowWidget())        d->active->windowWidget()->close();    d->updateWorkspace();}/*!    Closes all child windows.    If any child window fails to accept the close event, the remaining windows    will remain open.    \sa closeActiveWindow()*/void QWorkspace::closeAllWindows(){    Q_D(QWorkspace);    bool did_close = true;    QList<QWorkspaceChild *>::const_iterator it = d->windows.constBegin();    while (it != d->windows.constEnd() && did_close) {        QWorkspaceChild *c = *it;        ++it;        if (c->windowWidget() && !c->windowWidget()->isHidden())            did_close = c->windowWidget()->close();    }}void QWorkspacePrivate::_q_normalizeActiveWindow(){    if (maxWindow)        maxWindow->showNormal();    else if (active)        active->showNormal();}void QWorkspacePrivate::_q_minimizeActiveWindow(){    if (maxWindow)        maxWindow->showMinimized();    else if (active)        active->showMinimized();}void QWorkspacePrivate::_q_showOperationMenu(){    Q_Q(QWorkspace);    if  (!active || !active->windowWidget())        return;    Q_ASSERT((active->windowWidget()->windowFlags() & Qt::WindowSystemMenuHint));    QPoint p;    QMenu *popup = active->titlebar->isTool() ? toolPopup : this->popup;    if (q->isRightToLeft()) {        p = QPoint(active->windowWidget()->mapToGlobal(QPoint(active->windowWidget()->width(),0)));        p.rx() -= popup->sizeHint().width();    } else {        p = QPoint(active->windowWidget()->mapToGlobal(QPoint(0,0)));    }    if (!active->isVisible()) {        p = active->iconWidget()->mapToGlobal(QPoint(0,0));        p.ry() -= popup->sizeHint().height();    }    _q_popupOperationMenu(p);}void QWorkspacePrivate::_q_popupOperationMenu(const QPoint&  p){    if (!active || !active->windowWidget() || !(active->windowWidget()->windowFlags() & Qt::WindowSystemMenuHint))        return;    if ((active->titlebar->isTool()))        toolPopup->popup(p);    else        popup->popup(p);}void QWorkspacePrivate::_q_updateActions(){    Q_Q(QWorkspace);    for (int i = 1; i < NCountAct-1; i++) {        bool enable = active != 0;        actions[i]->setEnabled(enable);    }    if (!active || !active->windowWidget())        return;    QWidget *windowWidget = active->windowWidget();    bool canResize = windowWidget->maximumSize() != windowWidget->minimumSize();    actions[QWorkspacePrivate::ResizeAct]->setEnabled(canResize);    actions[QWorkspacePrivate::MinimizeAct]->setEnabled((windowWidget->windowFlags() & Qt::WindowMinimizeButtonHint));    actions[QWorkspacePrivate::MaximizeAct]->setEnabled((windowWidget->windowFlags() & Qt::WindowMaximizeButtonHint) && canResize);    if (active == maxWindow) {        actions[QWorkspacePrivate::MoveAct]->setEnabled(false);        actions[QWorkspacePrivate::ResizeAct]->setEnabled(false);        actions[QWorkspacePrivate::MaximizeAct]->setEnabled(false);        actions[QWorkspacePrivate::RestoreAct]->setEnabled(true);    } else if (active->isVisible()){        actions[QWorkspacePrivate::RestoreAct]->setEnabled(false);    } else {        actions[QWorkspacePrivate::MoveAct]->setEnabled(false);        actions[QWorkspacePrivate::ResizeAct]->setEnabled(false);        actions[QWorkspacePrivate::MinimizeAct]->setEnabled(false);        actions[QWorkspacePrivate::RestoreAct]->setEnabled(true);    }    if (active->shademode) {        actions[QWorkspacePrivate::ShadeAct]->setIcon(            QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarUnshadeButton)));        actions[QWorkspacePrivate::ShadeAct]->setText(QWorkspace::tr("&Unshade"));    } else {        actions[QWorkspacePrivate::ShadeAct]->setIcon(            QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarShadeButton)));        actions[QWorkspacePrivate::ShadeAct]->setText(QWorkspace::tr("Sh&ade"));    }    actions[QWorkspacePrivate::StaysOnTopAct]->setEnabled(!active->shademode && canResize);    actions[QWorkspacePrivate::StaysOnTopAct]->setChecked(        (active->windowWidget()->windowFlags() & Qt::WindowStaysOnTopHint));}void QWorkspacePrivate::_q_operationMenuActivated(QAction *action){    if (!active)        return;    if(action == actions[QWorkspacePrivate::RestoreAct]) {        active->showNormal();    } else if(action == actions[QWorkspacePrivate::MoveAct]) {        active->doMove();    } else if(action == actions[QWorkspacePrivate::ResizeAct]) {        if (active->shademode)            active->showShaded();        active->doResize();    } else if(action == actions[QWorkspacePrivate::MinimizeAct]) {        active->showMinimized();    } else if(action == actions[QWorkspacePrivate::MaximizeAct]) {        active->showMaximized();    } else if(action == actions[QWorkspacePrivate::ShadeAct]) {        active->showShaded();    } else if(action == actions[QWorkspacePrivate::StaysOnTopAct]) {        if(QWidget* w = active->windowWidget()) {            if ((w->windowFlags() & Qt::WindowStaysOnTopHint)) {                w->overrideWindowFlags(w->windowFlags() & ~Qt::WindowStaysOnTopHint);            } else {                w->overrideWindowFlags(w->windowFlags() | Qt::WindowStaysOnTopHint);                w->parentWidget()->raise();            }        }    }}void QWorkspacePrivate::hideChild(QWorkspaceChild *c){    Q_Q(QWorkspace);//     bool updatesEnabled = q->updatesEnabled();//     q->setUpdatesEnabled(false);    focus.removeAll(c);    QRect restore;    if (maxWindow == c)        restore = maxRestore;    if (active == c) {        q->setFocus();        q->activatePr

⌨️ 快捷键说明

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