101 lines
3.1 KiB
C++
Executable File
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
|