#ifndef TOPWIN8DESKTOPGROUP_H #define TOPWIN8DESKTOPGROUP_H #include #include #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 &iModuleRightMap); QList 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 d_ptr; private: QList createItems(const QVariantList &iItemsVarLst); // 转换点在Class中的位置,为在CenterWidget中的位置 QPoint mapClassPos2WidgetPos(QPoint iPoint); // 是否超出放置区域 bool isBeyondPlacedArea(QRect iRect, int iPlacedWidthInt); // 是否与已经布局的Item位置重叠 bool isCollisionWithLayoutedItems(QRect iRect, const QList 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 itemOrder(Qt::Orientation iPriorityOrder, const QList &iItemLst); private: Q_DISABLE_COPY(TopWin8DesktopGroup) Q_DECLARE_PRIVATE(TopWin8DesktopGroup) }; #endif // TOPWIN8DESKTOPGROUP_H