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;
|
2019-10-11 16:10:00 +13:00
|
|
|
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
|
|
|
|
2019-10-11 16:10:00 +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 ¶m);
|
|
|
|
double getValue(const TDoubleParamP ¶m) const;
|
|
|
|
void setValue(const TDoubleParamP ¶m, double value);
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
TPointD getValue(const TPointParamP ¶m) const;
|
|
|
|
void setValue(const TPointParamP ¶m, 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
|
|
|
|
2019-10-11 16:10:00 +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
|
|
|
};
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
2019-10-11 16:10:00 +13:00
|
|
|
} // namespace EditToolGadgets
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-29 18:17:12 +12: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
|