#pragma once #include "config.h" #include // interface class ButtonManagerItem : public QTreeWidgetItem { protected: ButtonManagerItem(QTreeWidgetItem* parent, int type); public: virtual ~ButtonManagerItem(); virtual bool hasEdit() const; virtual bool hasRemove() const; virtual bool hasMoveUp() const; virtual bool hasMoveDown() const; virtual void edit(); virtual void remove(); virtual void moveUp(); virtual void moveDown(); protected: QTreeWidgetItem* mparent; }; class RowItem : public ButtonManagerItem { public: RowItem(QTreeWidgetItem* parent, uint8_t rownr, Config::RootConfig& conf); const static int TYPE = 1000; virtual bool hasRemove() const; virtual bool hasMoveUp() const; virtual bool hasMoveDown() const; virtual void remove(); virtual void moveUp(); virtual void moveDown(); uint8_t getRow() const; // returns the number of this row std::vector& getConfig(); private: Config::RootConfig& conf; uint8_t pos = 0; //called when the row was moved void updatePosition(); }; class ButtonItem : public ButtonManagerItem { public: ButtonItem(RowItem* parent, uint8_t buttonnr, Config::RootConfig& conf); const static int TYPE = 1001; virtual bool hasRemove() const override; virtual void remove() override; // triggered from the view when the name was changed void nameWasChanged(); Config::ButtonConfig& getConfig(); private: Config::RootConfig& conf; uint8_t buttonnr = 0; RowItem* row = nullptr; }; class SampleItem : public ButtonManagerItem { public: SampleItem(ButtonItem* parent, uint8_t samplenr, Config::RootConfig& conf); const static int TYPE = 1002; virtual bool hasRemove() const override; virtual void remove() override; Config::SampleConfig& getConfig(); private: Config::RootConfig& conf; uint8_t samplenr = 0; ButtonItem* button = nullptr; //called when a sample was moved void updatePosition(); };