topwin8desktopgroup.h 4.56 KB
Newer Older
‘oliver.hui’'s avatar
‘oliver.hui’ committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
#ifndef TOPWIN8DESKTOPGROUP_H
#define TOPWIN8DESKTOPGROUP_H
#include <QVariant>
#include <QGroupBox>
#include "topdesktopitemabs.h"

class TComboBox;
class QSpinBox;
class QFormLayout;
class QLabel;
class TMessageBar;
class TopWin8DesktopGroupPrivate;
class TopWin8DesktopGroup : public QGroupBox
{
    Q_OBJECT
    Q_PROPERTY(int  cellWidth      READ cellWidth     WRITE setCellWidth)
    Q_PROPERTY(int  cellHeight     READ cellHeight    WRITE setCellHeight)
    Q_PROPERTY(int  rowSpan        READ rowSpan       WRITE setRowSpan)
    Q_PROPERTY(int  colSpan        READ colSpan       WRITE setColSpan)

public:
    explicit TopWin8DesktopGroup(QWidget *iParent = NULL);
    ~TopWin8DesktopGroup();

signals:
    void urlRequested(const QString &iUrlStr, const QVariant &iConfigVar);
    void configChanged();
    void groupDeleted(TopWin8DesktopGroup *iGroup);
    void layoutedRequest();

public slots:
    void doLayout();

    void setModuleRight(const QMap<QString, QString> &iModuleRightMap);
    QList<TopDesktopItemAbs *> desktopItems(Qt::Orientation iPriorityOrder = Qt::Horizontal);
    void setColorList(TComboBox *iBackgroundCombox);
    void setTitleColorList(TComboBox *iTitleCombox);
    void showDockSequence(QFormLayout *iLayout, QSpinBox *iObj, bool iShowBol);
    void setLabelAdjustSize(QLabel *label);

    TopDesktopItemAbs::State state() const;
    void setState(TopDesktopItemAbs::State iState);

    void setModuleClickType(TopDesktopItemAbs::ClickType iClickType);
    TopDesktopItemAbs::ClickType moduleClickType() const;

    void setConfigData(const QVariantMap &iConfigDataVarMap);
    QVariantMap configData();
    void setConfig(const QString &iKeyStr, const QVariant &iValueVar);
    QVariant config(const QString &iKeyStr) const;

    QPoint position();
    void setPosition(QPoint iPoint);
    void setRowSpan(int iRowSpanInt);
    int rowSpan() const;
    void setColSpan(int iColSpanInt);
    int colSpan() const;
    void setCellWidth(int iCellWidthInt);
    int cellWidth() const;
    void setCellHeight(int iCellHeight);
    int cellHeight() const;
    QString dockArea();
    void setDockArea(const QString &iDockAreaStr);
    int dockSequence();
    void setDockSequence(int iSequenceInt);

    bool removeOne(TopDesktopItemAbs *iDesktopItem);
    void appendOne(TopDesktopItemAbs *iDesktopItem);
    void clear();

    // string: x,y和Point 互转
    QPoint posStr2Point(const QString &iPosStr);
    QString point2PosStr(QPoint iPoint);

    // Size 、SizeString 和 Row Col的转换
    QSize sizeStr2QSize(const QString &iSizeStr);
    QString rowColStr2SizeStr(const QString &iRowStr, const QString &iColStr);

    bool showConfigDialog(bool iIsNewBol = false);
    void deleteGroup();
    void addModuleItem();

    QString ttr(const QString &iStr);

private slots:
    TopDesktopItemAbs *createDesktopItem(const QVariant &iParsVar = QVariant());
    QMenu *createContextMenu();

    void deleteItem(TopDesktopItemAbs* iItem);
    void tryDeleteItem(TopDesktopItemAbs *iItem);
    void dataChanged();

protected:
    void dragEnterEvent(QDragEnterEvent *iEvent);
    void mousePressEvent(QMouseEvent *iEvent);
    void mouseReleaseEvent(QMouseEvent *iEvent);
    void mouseMoveEvent(QMouseEvent *iEvent);
    void dragMoveEvent(QDragMoveEvent *iEvent);
    void dropEvent(QDropEvent *iEvent);
    void paintEvent(QPaintEvent *iEvent);
    void mouseDoubleClickEvent(QMouseEvent *iEvent);

    const QScopedPointer<TopWin8DesktopGroupPrivate> d_ptr;

private:
    QList<TopDesktopItemAbs *> createItems(const QVariantList &iItemsVarLst);

    // 转换点在Class中的位置,为在CenterWidget中的位置
    QPoint mapClassPos2WidgetPos(QPoint iPoint);

    // 是否超出放置区域
    bool isBeyondPlacedArea(QRect iRect, int iPlacedWidthInt);
    // 是否与已经布局的Item位置重叠
    bool isCollisionWithLayoutedItems(QRect iRect,
                                      const QList<TopDesktopItemAbs *> iLayoutedItemsLst,
                                      bool *oIsPreviousCollisionBol = NULL);

    bool isCollisionLayoutedItems(QDropEvent *iEvent);

    int rowAtWidget(QPoint iAtWidgetPoint);
    int colAtWidget(QPoint iAtWidgetPoint);

    // 用于拖拽的函数
    // 插入item
    void insertItem(QPoint iDropPoint, TopDesktopItemAbs *iInsetedItem);

    void updateStyleSheet();

    bool hasOpenItemRight(const QString &iUrlStr);

    QList<TopDesktopItemAbs *> itemOrder(Qt::Orientation iPriorityOrder, const QList<TopDesktopItemAbs *> &iItemLst);


private:
    Q_DISABLE_COPY(TopWin8DesktopGroup)
    Q_DECLARE_PRIVATE(TopWin8DesktopGroup)
};


#endif // TOPWIN8DESKTOPGROUP_H