/** * @RDE_HEADER@ * Topic Designer for the Script Editor - Set Geometry & Z-Index, delete Topics, etc. * $Id$ * $HeadURL$ * $Author$ * * Created by Mike Wille, SLSE, 2017-06-09 */ #pragma once #include #include #include #include #include #include #include namespace PresentationManagement { class PREGUISCRIPTCOMMON_EXPORT TopicDesigner: public QWidget { Q_OBJECT public: enum class HandleType { None, Whole, TopLeft, TopCenter, TopRight, CenterLeft, CenterRight, BottomLeft, BottomCenter, BottomRight }; explicit TopicDesigner(QWidget *parent = nullptr, QWidget* previewWidget = nullptr); ~TopicDesigner(); void loadTopicList(const QVector &topicsList); // also clears QVector exportTopicList() const; void selectTopic(int topicId); TopicEditorBase::TopicData &selectedTopicData() noexcept(false); void setTopicData(const TopicEditorBase::TopicData &data); private: enum class Affection { x, y, w, h, Whole, }; void paintEvent(QPaintEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; int heightForWidth(int width) const override; void paintSelectedTopicItem(QPainter *p, const TopicEditorBase::TopicData &data); QRect handleRect(const TopicEditorBase::TopicData &data, const HandleType &ht); QRect topicItemRect(const TopicEditorBase::TopicData &data); bool checkConstraints(TopicEditorBase::TopicData &selected); void setCursorFromHandleType(const HandleType &ht); double oneWidthPixelInPercent(); double oneHeightPixelInPercent(); void unselect(); void findSelection(const QPoint &pos); // looks for Topic(s) on the clicked position and selects those Topics void internalSelectTopic(int topicId); void setValues(const TopicEditorBase::TopicData &data, const QPoint &pos); void affect(TopicEditorBase::TopicData &selected, const Affection &affection, const QPoint &pos); void deleteTopicItem(const TopicEditorBase::TopicData &data); public slots: void incIndex(const TopicEditorBase::TopicData &selected); void decIndex(const TopicEditorBase::TopicData &selected); void toFront(const TopicEditorBase::TopicData &selected); void toBack(const TopicEditorBase::TopicData &selected); signals: void deleteTopicItem(int topicId); void topicSelected(int topicId); void unselected(); void changesMade(); private: QLinkedList m_topicDataList; int m_selectedTopicId; // must be inside the list.... int m_lowestImportIndex; HandleType m_currentResizeHandle; HandleType m_resizeHandleActive; // saves us code dups QPointF m_wholeOrgPos; QPointer m_drawWidgetPreviewContent; QScrollArea *m_scrollArea{nullptr}; }; } // namespace PresentationManagement