Files
qt5-legatus-legacy/Lts/Plugins/PresentationManagement/Gui/Script/Common/topic_designer.h
T
2026-08-13 18:33:10 +02:00

101 lines
3.1 KiB
C++
Executable File

/**
* @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 <Plugins/PresentationManagement/Gui/Script/Common/preguiscriptcommon_export.h>
#include <TopicEditorBase/topic_editor_utils.h>
#include <QWidget>
#include <QVector>
#include <QLinkedList>
#include <QPointer>
#include <QScrollArea>
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<TopicEditorBase::TopicData> &topicsList); // also clears
QVector<TopicEditorBase::TopicData> 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<TopicEditorBase::TopicData> 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<QWidget> m_drawWidgetPreviewContent;
QScrollArea *m_scrollArea{nullptr};
};
} // namespace PresentationManagement