tahoma2d/toonz/sources/toonz/tooloptionsshortcutinvoker.h
2021-11-03 19:47:04 -04:00

253 lines
6.8 KiB
C++

#pragma once
#ifndef TOOLOPTIONSSHORTCUTINVOKER_H
#define TOOLOPTIONSSHORTCUTINVOKER_H
#include "tproperty.h"
#include <QObject>
#include <QMultiMap>
#include <QSet>
class TProperty;
class QAction;
class TTool;
namespace ToolOptionsShortcutWorker {
class BoolWorker;
}
class ToolOptionShortcutConnector final : public TProperty::Visitor {
TTool* m_tool;
public:
ToolOptionShortcutConnector(TTool* tool);
private:
void visit(TDoubleProperty* p) override;
void visit(TDoublePairProperty* p) override;
void visit(TIntPairProperty* p) override;
void visit(TIntProperty* p) override;
void visit(TBoolProperty* p) override;
void visit(TStringProperty* p) override {}
void visit(TEnumProperty* p) override;
void visit(TStyleIndexProperty* p) override {}
void visit(TPointerProperty* p) override {}
void visit(TColorChipProperty* p) override {}
};
//=============================================================================
namespace ToolOptionsShortcutWorker {
//-----------------------------------------------------------------
class DoubleWorker : public QObject {
Q_OBJECT
TTool* m_tool;
TDoubleProperty* m_property;
public:
DoubleWorker(QObject* parent, TTool* tool, TDoubleProperty* property)
: QObject(parent), m_tool(tool), m_property(property) {}
protected slots:
void increase(double step = 1.0);
void increaseFractional();
void decrease(double step = 1.0);
void decreaseFractional();
};
//-----------------------------------------------------------------
class DoublePairWorker : public QObject {
Q_OBJECT
TTool* m_tool;
TDoublePairProperty* m_property;
public:
DoublePairWorker(QObject* parent, TTool* tool, TDoublePairProperty* property)
: QObject(parent), m_tool(tool), m_property(property) {}
protected slots:
void increaseMaxValue();
void decreaseMaxValue();
void increaseMinValue();
void decreaseMinValue();
};
//-----------------------------------------------------------------
class IntPairWorker : public QObject {
Q_OBJECT
TTool* m_tool;
TIntPairProperty* m_property;
public:
IntPairWorker(QObject* parent, TTool* tool, TIntPairProperty* property)
: QObject(parent), m_tool(tool), m_property(property) {}
protected slots:
void increaseMaxValue();
void decreaseMaxValue();
void increaseMinValue();
void decreaseMinValue();
};
//-----------------------------------------------------------------
class IntWorker : public QObject {
Q_OBJECT
TTool* m_tool;
TIntProperty* m_property;
public:
IntWorker(QObject* parent, TTool* tool, TIntProperty* property)
: QObject(parent), m_tool(tool), m_property(property) {}
protected slots:
void increase();
void decrease();
};
//-----------------------------------------------------------------
class BoolWorker : public QObject {
Q_OBJECT
TTool* m_tool;
TBoolProperty* m_property;
QAction* m_action;
public:
BoolWorker(QObject* parent, TTool* tool, TBoolProperty* property,
QAction* action)
: QObject(parent), m_tool(tool), m_property(property), m_action(action) {}
void syncActionState();
protected slots:
void doCheck(bool);
};
//-----------------------------------------------------------------
class EnumWorker : public QObject {
Q_OBJECT
TTool* m_tool;
TEnumProperty* m_property;
public:
EnumWorker(QObject* parent, TTool* tool, TEnumProperty* property)
: QObject(parent), m_tool(tool), m_property(property) {}
protected slots:
void cycleOptions();
void doOnActivated(int);
};
} // namespace ToolOptionsShortcutWorker
//=============================================================================
class ToolOptionsShortcutInvoker : public QObject // singleton
{
Q_OBJECT
QSet<TTool*> m_tools;
//ツールが切り替わったら ActionのCheck状態を同期させる
QMultiMap<TTool*, ToolOptionsShortcutWorker::BoolWorker*> m_checkProps;
public:
static ToolOptionsShortcutInvoker* instance();
void initialize();
void notifyTool(TTool*, TProperty*, bool = false);
void registerCheckProperty(TTool*, ToolOptionsShortcutWorker::BoolWorker*);
private:
ToolOptionsShortcutInvoker(){};
protected slots:
void onToolSwitched();
/*-- Animate tool + mode switching shortcuts --*/
void toggleEditNextMode();
void toggleEditPosition();
void toggleEditRotation();
void toggleEditNextScale();
void toggleEditNextShear();
void toggleEditNextCenter();
void toggleEditNextAll();
/*-- Selection tool + mode switching shortcuts --*/
void toggleSelectionNextType();
void toggleSelectionRectangular();
void toggleSelectionFreehand();
void toggleSelectionPolyline();
/*-- Geometric tool + shape switching shortcuts --*/
void toggleGeometricNextShape();
void toggleGeometricRectangle();
void toggleGeometricCircle();
void toggleGeometricEllipse();
void toggleGeometricLine();
void toggleGeometricPolyline();
void toggleGeometricArc();
void toggleGeometricMultiArc();
void toggleGeometricPolygon();
/*-- Type tool + style switching shortcuts --*/
void toggleTypeNextStyle();
void toggleTypeOblique();
void toggleTypeRegular();
void toggleTypeBoldOblique();
void toggleTypeBold();
/*-- Fill tool + mode switching shortcuts --*/
void toggleFillNextType();
void toggleFillNormal();
void toggleFillRectangular();
void toggleFillFreehand();
void toggleFillPolyline();
void toggleFillNextMode();
void toggleFillAreas();
void toggleFillLines();
void toggleFillLinesAndAreas();
/*-- Eraser tool + type switching shortcuts --*/
void toggleEraserNextType();
void toggleEraserNormal();
void toggleEraserRectangular();
void toggleEraserFreehand();
void toggleEraserPolyline();
void toggleEraserSegment();
/*-- Tape tool + type/mode switching shortcuts --*/
void toggleTapeNextType();
void toggleTapeNormal();
void toggleTapeRectangular();
void toggleTapeNextMode();
void toggleTapeEndpointToEndpoint();
void toggleTapeEndpointToLine();
void toggleTapeLineToLine();
/*-- Style Picker tool + mode switching shortcuts --*/
void togglePickStyleNextMode();
void togglePickStyleAreas();
void togglePickStyleLines();
void togglePickStyleLinesAndAreas();
/*-- RGB Picker tool + type switching shortcuts --*/
void toggleRGBPickerNextType();
void toggleRGBPickerNormal();
void toggleRGBPickerRectangular();
void toggleRGBPickerFreehand();
void toggleRGBPickerPolyline();
/*-- Skeleton tool + mode switching shortcuts --*/
void ToggleSkeletonNextMode();
void ToggleSkeletonBuildSkeleton();
void ToggleSkeletonAnimate();
void ToggleSkeletonInverseKinematics();
/*-- Plastic tool + mode switching shortcuts --*/
void TogglePlasticNextMode();
void TogglePlasticEditMesh();
void TogglePlasticPaintRigid();
void TogglePlasticBuildSkeleton();
void TogglePlasticAnimate();
/*-- Brush Tool + mode switching shortcuts --*/
void ToggleBrushAutoFillOff();
void ToggleBrushAutoFillOn();
};
#endif