tahoma2d/toonz/sources/tnztools/edittoolgadgets.h

162 lines
4 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef _EDITTOOLGADGETS_H_
#define _EDITTOOLGADGETS_H_
// TnzCore includes
#include "tgeometry.h"
#include "tgl.h"
// TnzBase includes
#include "tparamchange.h"
#include "tdoubleparam.h"
#include "tparamset.h"
// Qt includes
#include <QObject>
//=================================================
// Forward declarations
class TMouseEvent;
class TFxHandle;
class TTool;
class FxParamsGraphicEditor;
class FxGadgetController;
class TUndo;
class TParamUIConcept;
//=================================================
2016-06-15 18:43:10 +12:00
class FxGadget : public TParamObserver {
GLuint m_id;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
std::vector<TDoubleParamP> m_params;
double m_pixelSize;
std::string m_label;
TUndo *m_undo;
double m_scaleFactor;
2016-03-19 06:57:51 +13:00
protected:
2016-06-15 18:43:10 +12:00
FxGadgetController *m_controller;
int m_handleCount = 1;
// -1 : not selected, 0~ : handle id
int m_selected;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
static GLdouble m_selectedColor[3]; // rgb
2016-03-19 06:57:51 +13:00
FxGadget(FxGadgetController *controller, int handleCount = 1);
2016-06-15 18:43:10 +12:00
virtual ~FxGadget();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setLabel(std::string label) { m_label = label; }
std::string getLabel() const { return m_label; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
FxGadgetController *getController() const { return m_controller; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void addParam(const TDoubleParamP &param);
double getValue(const TDoubleParamP &param) const;
void setValue(const TDoubleParamP &param, double value);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
TPointD getValue(const TPointParamP &param) const;
void setValue(const TPointParamP &param, const TPointD &pos);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setId(GLuint id) { m_id = id; }
GLuint getId() const { return m_id; }
2016-03-19 06:57:51 +13:00
int getHandleCount() { return m_handleCount; }
void select(int selected) { m_selected = selected; }
bool isSelected() const { return m_selected >= 0; }
bool isSelected(int id) const { return m_selected == id; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setPixelSize(); // uses tglGetPixelSize2()
void setPixelSize(double pixelSize) { m_pixelSize = pixelSize; }
inline double getPixelSize() const { return m_pixelSize; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void drawDot(const TPointD &pos);
void drawDot(double x, double y) { drawDot(TPointD(x, y)); }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void drawTooltip(const TPointD &tooltipPos, std::string tooltipPosText);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void draw(bool picking) = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void leftButtonDown(const TPointD &pos, const TMouseEvent &) {}
virtual void leftButtonDrag(const TPointD &pos, const TMouseEvent &) {}
virtual void leftButtonUp(const TPointD &pos, const TMouseEvent &) {}
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void onChange(const TParamChange &) override;
2016-06-15 18:43:10 +12:00
void createUndo();
void commitUndo();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setScaleFactor(double s) { m_scaleFactor = s; }
double getScaleFactor() const { return m_scaleFactor; }
2016-03-19 06:57:51 +13:00
};
2016-06-15 18:43:10 +12:00
namespace EditToolGadgets {
2016-03-19 06:57:51 +13:00
//=============================================================================
// DragTool
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
class DragTool {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
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() {}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual void enableGlobalKeyframes(bool enabled) {}
2016-03-19 06:57:51 +13:00
};
//-----------------------------------------------------------------------------
} // namespace EditToolGadgets
2016-03-19 06:57:51 +13:00
class FxGadgetController final : public QObject {
2016-06-15 18:43:10 +12:00
Q_OBJECT
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
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;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
FxGadgetController(TTool *tool);
~FxGadgetController();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void clearGadgets();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
TAffine getMatrix();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void draw(bool picking = false);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void selectById(unsigned int id);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
EditToolGadgets::DragTool *createDragTool(int gadgetId);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void assignId(FxGadget *gadget);
void addGadget(FxGadget *gadget);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
int getCurrentFrame() const;
void invalidateViewer();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
bool isEditingNonZeraryFx() const { return m_editingNonZeraryFx; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
bool hasGadget() { return m_gadgets.size() != 0; }
2016-03-19 06:57:51 +13:00
public slots:
2016-06-15 18:43:10 +12:00
void onFxSwitched();
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
FxGadget *allocateGadget(const TParamUIConcept &uiConcept);
2016-03-19 06:57:51 +13:00
};
#endif