mirror of
https://github.com/AxioDL/amuse.git
synced 2025-12-09 13:37:47 +00:00
Integrate undo infrastructure with SoundMacroEditor
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include <QSpinBox>
|
||||
#include <QComboBox>
|
||||
#include <QTreeWidget>
|
||||
#include <QPushButton>
|
||||
|
||||
class SoundMacroListing;
|
||||
class CatalogueItem;
|
||||
@@ -41,28 +42,43 @@ class CommandWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
friend class SoundMacroListing;
|
||||
QPropertyAnimation* m_animation = nullptr;
|
||||
QFont m_numberFont;
|
||||
QFont m_titleFont;
|
||||
QLabel m_titleLabel;
|
||||
QPushButton m_deleteButton;
|
||||
QStaticText m_numberText;
|
||||
QStaticText m_titleText;
|
||||
int m_index = -1;
|
||||
amuse::SoundMacro::ICmd* m_cmd;
|
||||
const amuse::SoundMacro::CmdIntrospection* m_introspection;
|
||||
void animateOpen();
|
||||
void animateClosed();
|
||||
void snapOpen();
|
||||
void snapClosed();
|
||||
void setIndex(int index);
|
||||
SoundMacroListing* getParent() const;
|
||||
private slots:
|
||||
void animationDestroyed();
|
||||
void boolChanged(int);
|
||||
void numChanged(int);
|
||||
void choiceChanged(int);
|
||||
void deleteClicked();
|
||||
private:
|
||||
CommandWidget(amuse::SoundMacro::ICmd* cmd, amuse::SoundMacro::CmdOp op, QWidget* parent = Q_NULLPTR);
|
||||
public:
|
||||
CommandWidget(amuse::SoundMacro::ICmd* cmd, QWidget* parent = Q_NULLPTR);
|
||||
CommandWidget(amuse::SoundMacro::CmdOp op, QWidget* parent = Q_NULLPTR);
|
||||
void paintEvent(QPaintEvent* event);
|
||||
QString getText() const { return m_titleLabel.text(); }
|
||||
};
|
||||
|
||||
class CommandWidgetContainer : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
friend class SoundMacroListing;
|
||||
CommandWidget* m_commandWidget;
|
||||
QPropertyAnimation* m_animation = nullptr;
|
||||
void animateOpen();
|
||||
void animateClosed();
|
||||
void snapOpen();
|
||||
void snapClosed();
|
||||
private slots:
|
||||
void animationDestroyed();
|
||||
public:
|
||||
CommandWidgetContainer(CommandWidget* child, QWidget* parent = Q_NULLPTR);
|
||||
};
|
||||
|
||||
class SoundMacroListing : public QWidget
|
||||
@@ -70,11 +86,12 @@ class SoundMacroListing : public QWidget
|
||||
Q_OBJECT
|
||||
friend class CommandWidget;
|
||||
friend class SoundMacroEditor;
|
||||
std::shared_ptr<ProjectModel::SoundMacroNode> m_node;
|
||||
QVBoxLayout* m_layout;
|
||||
QLayoutItem* m_dragItem = nullptr;
|
||||
int m_origIdx = -1;
|
||||
int m_dragOpenIdx = -1;
|
||||
CommandWidget* m_prevDragOpen = nullptr;
|
||||
CommandWidgetContainer* m_prevDragOpen = nullptr;
|
||||
int m_autoscrollTimer = -1;
|
||||
int m_autoscrollDelta = 0;
|
||||
QWidget* m_autoscrollSource = nullptr;
|
||||
@@ -82,16 +99,20 @@ class SoundMacroListing : public QWidget
|
||||
void startAutoscroll(QWidget* source, QMouseEvent* event, int delta);
|
||||
void stopAutoscroll();
|
||||
bool beginDrag(CommandWidget* widget);
|
||||
void endDrag(CommandWidget* widget);
|
||||
void endDrag();
|
||||
void cancelDrag();
|
||||
void _moveDrag(int hoverIdx, const QPoint& pt, QWidget* source, QMouseEvent* event);
|
||||
void moveDrag(CommandWidget* widget, const QPoint& pt, QWidget* source, QMouseEvent* event);
|
||||
int moveInsertDrag(const QPoint& pt, QWidget* source, QMouseEvent* event);
|
||||
void insertDragout();
|
||||
void insert(amuse::SoundMacro::CmdOp op);
|
||||
void insert(amuse::SoundMacro::CmdOp op, const QString& text);
|
||||
void deleteCommand(int index);
|
||||
void reindex();
|
||||
void clear();
|
||||
public:
|
||||
explicit SoundMacroListing(ProjectModel::SoundMacroNode* node, QWidget* parent = Q_NULLPTR);
|
||||
explicit SoundMacroListing(QWidget* parent = Q_NULLPTR);
|
||||
bool loadData(ProjectModel::SoundMacroNode* node);
|
||||
void unloadData();
|
||||
void timerEvent(QTimerEvent* event);
|
||||
};
|
||||
|
||||
@@ -99,11 +120,14 @@ class CatalogueItem : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
amuse::SoundMacro::CmdOp m_op;
|
||||
QLabel m_iconLab;
|
||||
QLabel m_label;
|
||||
public:
|
||||
explicit CatalogueItem(amuse::SoundMacro::CmdOp op, const QString& name,
|
||||
const QString& doc, QWidget* parent = Q_NULLPTR);
|
||||
explicit CatalogueItem(const CatalogueItem& other, QWidget* parent = Q_NULLPTR);
|
||||
amuse::SoundMacro::CmdOp getCmdOp() const { return m_op; }
|
||||
QString getText() const { return m_label.text(); }
|
||||
};
|
||||
|
||||
class SoundMacroCatalogue : public QTreeWidget
|
||||
@@ -130,7 +154,9 @@ class SoundMacroEditor : public EditorWidget
|
||||
void beginCommandDrag(CommandWidget* widget, const QPoint& eventPt, const QPoint& pt);
|
||||
void beginCatalogueDrag(CatalogueItem* item, const QPoint& eventPt, const QPoint& pt);
|
||||
public:
|
||||
explicit SoundMacroEditor(ProjectModel::SoundMacroNode* node, QWidget* parent = Q_NULLPTR);
|
||||
explicit SoundMacroEditor(QWidget* parent = Q_NULLPTR);
|
||||
bool loadData(ProjectModel::SoundMacroNode* node);
|
||||
void unloadData();
|
||||
|
||||
void mousePressEvent(QMouseEvent* event);
|
||||
void mouseReleaseEvent(QMouseEvent* event);
|
||||
|
||||
Reference in New Issue
Block a user