| #pragma once |
| |
| #ifndef _EDITTOOLGADGETS_H_ |
| #define _EDITTOOLGADGETS_H_ |
| |
| |
| #include "tgeometry.h" |
| #include "tgl.h" |
| |
| |
| #include "tparamchange.h" |
| #include "tdoubleparam.h" |
| #include "tparamset.h" |
| |
| |
| #include <QObject> |
| |
| |
| |
| |
| |
| class TMouseEvent; |
| class TFxHandle; |
| class TTool; |
| class FxParamsGraphicEditor; |
| |
| class FxGadgetController; |
| class TUndo; |
| class TParamUIConcept; |
| |
| |
| |
| class FxGadget : public TParamObserver { |
| GLuint m_id; |
| bool m_selected; |
| |
| std::vector<TDoubleParamP> m_params; |
| double m_pixelSize; |
| std::string m_label; |
| TUndo *m_undo; |
| double m_scaleFactor; |
| |
| protected: |
| FxGadgetController *m_controller; |
| |
| public: |
| static GLdouble m_selectedColor[3]; |
| |
| FxGadget(FxGadgetController *controller); |
| virtual ~FxGadget(); |
| |
| void setLabel(std::string label) { m_label = label; } |
| std::string getLabel() const { return m_label; } |
| |
| FxGadgetController *getController() const { return m_controller; } |
| |
| void addParam(const TDoubleParamP ¶m); |
| double getValue(const TDoubleParamP ¶m) const; |
| void setValue(const TDoubleParamP ¶m, double value); |
| |
| TPointD getValue(const TPointParamP ¶m) const; |
| void setValue(const TPointParamP ¶m, const TPointD &pos); |
| |
| void setId(GLuint id) { m_id = id; } |
| GLuint getId() const { return m_id; } |
| |
| void select(bool selected) { m_selected = selected; } |
| bool isSelected() const { return m_selected; } |
| |
| void setPixelSize(); |
| void setPixelSize(double pixelSize) { m_pixelSize = pixelSize; } |
| inline double getPixelSize() const { return m_pixelSize; } |
| |
| void drawDot(const TPointD &pos); |
| void drawDot(double x, double y) { drawDot(TPointD(x, y)); } |
| |
| void drawTooltip(const TPointD &tooltipPos, std::string tooltipPosText); |
| |
| virtual void draw(bool picking) = 0; |
| |
| virtual void leftButtonDown(const TPointD &pos, const TMouseEvent &) {} |
| virtual void leftButtonDrag(const TPointD &pos, const TMouseEvent &) {} |
| virtual void leftButtonUp(const TPointD &pos, const TMouseEvent &) {} |
| |
| void onChange(const TParamChange &) override; |
| void createUndo(); |
| void commitUndo(); |
| |
| void setScaleFactor(double s) { m_scaleFactor = s; } |
| double getScaleFactor() const { return m_scaleFactor; } |
| }; |
| |
| namespace EditToolGadgets { |
| |
| |
| |
| |
| |
| class DragTool { |
| public: |
| virtual void leftButtonDown(const TPointD &pos, const TMouseEvent &) = 0; |
| virtual void leftButtonDrag(const TPointD &pos, const TMouseEvent &) = 0; |
| virtual void leftButtonUp(const TPointD &pos, const TMouseEvent &) = 0; |
| virtual ~DragTool() {} |
| |
| virtual void enableGlobalKeyframes(bool enabled) {} |
| }; |
| |
| |
| |
| } |
| |
| class FxGadgetController final : public QObject { |
| Q_OBJECT |
| |
| TTool *m_tool; |
| TFxHandle *m_fxHandle; |
| std::vector<FxGadget *> m_gadgets; |
| unsigned long m_idBase, m_nextId; |
| std::map<GLuint, FxGadget *> m_idTable; |
| FxGadget *m_selectedGadget; |
| bool m_editingNonZeraryFx; |
| |
| public: |
| FxGadgetController(TTool *tool); |
| ~FxGadgetController(); |
| |
| void clearGadgets(); |
| |
| TAffine getMatrix(); |
| |
| void draw(bool picking = false); |
| |
| void selectById(unsigned int id); |
| |
| EditToolGadgets::DragTool *createDragTool(int gadgetId); |
| |
| void assignId(FxGadget *gadget); |
| void addGadget(FxGadget *gadget); |
| |
| int getCurrentFrame() const; |
| void invalidateViewer(); |
| |
| bool isEditingNonZeraryFx() const { return m_editingNonZeraryFx; } |
| |
| bool hasGadget() { return m_gadgets.size() != 0; } |
| |
| public slots: |
| |
| void onFxSwitched(); |
| |
| private: |
| FxGadget *allocateGadget(const TParamUIConcept &uiConcept); |
| }; |
| |
| #endif |