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

📄 qdecoration_qws.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module 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.******************************************************************************/#include "qdecoration_qws.h"#include "qapplication.h"#include "qdrawutil.h"#include "qpainter.h"#include "qregion.h"#include "qwhatsthis.h"#include "qmenu.h"#include "private/qwidget_p.h"#include "qwsmanager_qws.h"/*!    \class QDecoration    \ingroup qws    \brief The QDecoration class is a base class for window    decorations in Qtopia Core    Note that this class is non-portable, and that it is only    available in \l {Qtopia Core}.    \l {Qtopia Core} provides window management of top level windows    and several ready made decorations (i.e., \c Default, \c Styled    and \c Windows). Custom decorations can be implemented by    subclassing the QDecoration class and creating a decoration plugin    (derived from QDecorationPlugin). \l {Qtopia Core}'s    implementation of the QDecorationFactory class will automatically    detect the plugin, and load the decoration into the application at    runtime using Qt's \l {How to Create Qt Plugins}{plugin    system}. To actually apply a decoration, use the    QApplication::qwsSetDecoration() function.    When creating a custom decoration, implement the paint() function    to paint the border and title decoration, and the region()    function to return the regions the decoration    occupies. Reimplement the regionClicked() and    regionDoubleClicked() functions to respond to mouse clicks (the    default implementations responds to (single) clicks on items in a    widget's system menu and double clicks on a widget's title).    QDecoration provides the DecorationRegion enum that describes the    various regions of the window decoration, and the regionAt()    function to determine the region containing a given point. The    QDecoration class also provides the DecorationState enum    describing the state of a given region, e.g. whether it is active    or not.    In addition, it is possibe to build the system menu for a given    top level widget using the buildSysMenu() function; whenever an    action in this menu is triggered, the menuTriggered() function is    called automatically.    Finally, the QDecoration class provides a couple of static    functions, startMove() and startResize(), which start a move or    resize action by making the appropriate decoration region active    and grabbing the mouse input.    \sa QDecorationFactory, QDecorationPlugin, {Qtopia Core    Architecture}*//*!    \fn QDecoration::QDecoration()    Constructs a decoration object.*//*!    \fn QDecoration::~QDecoration()    Destroys this decoration object.*//*!    \enum QDecoration::DecorationRegion    This enum describes the various regions of the window decoration.    \value All The entire region used by the window decoration.    \value Top    The top border used to vertically resize the window.    \value Bottom The bottom border used to vertically resize the window.    \value Left   The left border used to horizontally resize the window.    \value Right  The right border used to horizontally resize the window.    \value TopLeft    The top-left corner of the window used to resize the                      window both horizontally and vertically.    \value TopRight   The top-right corner of the window used to resize the                      window both horizontally and vertically.    \value BottomLeft The bottom-left corner of the window used to resize the                      window both horizontally and vertically.    \value BottomRight The bottom-right corner of the window used to resize the                      window both horizontally and vertically.    \value Borders    All the regions used to describe the window's borders.    \value Title    The region containing the window title, used                    to move the window by dragging with the mouse cursor.    \value Close    The region occupied by the close button. Clicking in this                    region closes the window.    \value Minimize The region occupied by the minimize button. Clicking in                    this region minimizes the window.    \value Maximize The region occupied by the maximize button. Clicking in                    this region maximizes the window.    \value Normalize The region occupied by a button used to restore a window's                     normal size. Clicking in this region restores a maximized                     window to its previous size. The region used for this                     button is often also the Maximize region.    \value Menu     The region occupied by the window's menu button. Clicking                    in this region opens the window operations (system) menu.    \value Help     The region occupied by the window's help button. Clicking                    in this region causes the context-sensitive help function                    to be enabled.    \value Resize   The region used to resize the window.    \value Move     The region used to move the window.    \value None      No region.    \sa region(), regionAt(), DecorationState*//*!    \enum QDecoration::DecorationState    This enum describes the various states of a decoration region.    \value Normal The region is active    \value Disabled The region is inactive.    \value Hover The cursor is hovering over the region.    \value Pressed The region is pressed.    \sa paint(), DecorationRegion*//*!    \fn QRegion QDecoration::region(const QWidget *widget, const QRect & rectangle, int decorationRegion)    Implement this function to return the region specified by \a    decorationRegion for the given top level \a widget.    The \a rectangle parameter specifies the rectangle the decoration    is wrapped around. The \a decorationRegion is a bitmask of the    values described by the DecorationRegion enum.    \sa regionAt(), paint()*//*!    \fn QRegion QDecoration::region(const QWidget *widget, int decorationRegion)    \overload*//*!    \fn bool QDecoration::paint(QPainter *painter, const QWidget *widget, int decorationRegion,                                DecorationState state)    Implement this function to paint the border and title decoration    for the specified top level \a widget using the given \a painter    and decoration \a state. The specified \a decorationRegion is a    bitmask of the values described by the DecorationRegion enum.    Note that \l {Qtopia Core} expects this function to return true if    any of the widget's decorations are repainted; otherwise it should    return false.    \sa region()*//*!    \fn int QDecoration::regionAt(const QWidget *widget, const QPoint &point)    Returns the type of the first region of the specified top level \a    widget containing the given \a point.    The return value is one of the DecorationRegion enum's values. Use    the region() function to retrieve the actual region. If none of    the widget's regions contain the point, this function returns \l    None.    \sa region()*/int QDecoration::regionAt(const QWidget *w, const QPoint &point){    int regions[] = {        TopLeft, Top, TopRight, Left, Right, BottomLeft, Bottom, BottomRight, // Borders first        Menu, Title, Help, Minimize, Normalize, Maximize, Close,                         // then buttons        None    };//     char *regions_str[] = {//         "TopLeft", "Top", "TopRight", "Left", "Right", "BottomLeft", "Bottom", "BottomRight",//         "Menu", "Title", "Help", "Minimize", "Normalize", "Maximize", "Close",//         "None"//     };    // First check to see if within all regions at all    QRegion reg = region(w, w->geometry(), All);    if (!reg.contains(point)) {        return None;    }    int i = 0;    while (regions[i]) {        reg = region(w, w->geometry(), regions[i]);        if (reg.contains(point)) {//            qDebug("In region %s", regions_str[i]);            return regions[i];        }        ++i;    }    return None;}#ifndef QT_NO_MENU/*!    Builds the system menu for the given top level \a widget, adding    \gui Restore, \gui Move, \gui Size, \gui Minimize, \gui Maximize    and \gui Close actions to the given \a menu.    \sa menuTriggered()*/void QDecoration::buildSysMenu(QWidget *widget, QMenu *menu){    QDecorationAction *act = new QDecorationAction(QLatin1String("Restore"),                                                   menu, Maximize);    act->setEnabled(widget->windowState() & Qt::WindowMaximized);    menu->addAction(act);    menu->addAction(new QDecorationAction(QLatin1String("Move"), menu, Move));    menu->addAction(new QDecorationAction(QLatin1String("Size"), menu, Resize));    act = new QDecorationAction(QLatin1String("Minimize"), menu, Minimize);    menu->addAction(act);    act = new QDecorationAction(QLatin1String("Maximize"), menu, Maximize);    act->setDisabled(widget->windowState() & Qt::WindowMaximized);    menu->addAction(act);    menu->addSeparator();    menu->addAction(new QDecorationAction(QLatin1String("Close"), menu, Close));}/*!    This function is called whenever an action in a top level widget's    menu is triggered, and simply calls the regionClicked() function    passing the \a widget and \a action parameters as arguments.    \sa buildSysMenu()*/void QDecoration::menuTriggered(QWidget *widget, QAction *action){    QDecorationAction *decAction = static_cast<QDecorationAction *>(action);    regionClicked(widget, decAction->reg);}#endif // QT_NO_MENU/*!    \fn void QDecoration::regionClicked(QWidget *widget, int region)    Handles the event that the specified \a region in the given top    level \a widget is activated by a single click (the \a region    parameter is described using the DecorationRegion enum).    This function is called whenever a region in a top level widget is    clicked; the default implementation responds to clicks on items in    the system menu, performing the requested actions.    \sa regionDoubleClicked(), region()*/void QDecoration::regionClicked(QWidget *widget, int reg){    switch(reg) {    case Move:        startMove(widget);        break;    case Resize:        startResize(widget);        break;    case Help:#ifndef QT_NO_WHATSTHIS        if (QWhatsThis::inWhatsThisMode())            QWhatsThis::leaveWhatsThisMode();        else            QWhatsThis::enterWhatsThisMode();#endif        break;    case Close:        widget->close();        break;    case Normalize:        widget->showNormal();        break;    case Maximize:        if (widget->windowState() & Qt::WindowMaximized)            widget->showNormal();        else            widget->showMaximized();        break;    }}/*!    \fn void QDecoration::regionDoubleClicked(QWidget *widget, int region)    Handles the event that the specified \a region in the given top    level \a widget is activated by a double click (the region    parameter is described using the DecorationRegion enum).    This function is called whenever a region in a top level widget is    double clicked; the default implementation responds to a double    click on the widget's title, toggling its size between the maximum    and its normal size.    \sa regionClicked(), region()*/void QDecoration::regionDoubleClicked(QWidget *widget, int reg){    switch(reg)    {        case Title: {            if (widget->windowState() & Qt::WindowMaximized)                widget->showNormal();            else                widget->showMaximized();            break;        }    }}/*!    Starts to move the given top level \a widget by making its \l    Title region active and grabbing the mouse input.    \sa startResize()*/void QDecoration::startMove(QWidget *widget){#ifdef QT_NO_QWS_MANAGER    Q_UNUSED(widget);#else    QWSManager *manager = widget->d_func()->topData()->qwsManager;    if (manager)        manager->startMove();#endif}/*!    Starts to resize the given top level \a widget by making its \l    BottomRight region active and grabbing the mouse input.    \sa startMove()*/void QDecoration::startResize(QWidget *widget){#ifdef QT_NO_QWS_MANAGER    Q_UNUSED(widget);#else    QWSManager *manager = widget->d_func()->topData()->qwsManager;    if (manager)        manager->startResize();#endif}

⌨️ 快捷键说明

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