Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef VECTORSELECTIONTOOL_H
Toshihiro Shimizu 890ddd
#define VECTORSELECTIONTOOL_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "selectiontool.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzTools includes
Toshihiro Shimizu 890ddd
#include "tools/strokeselection.h"
Toshihiro Shimizu 890ddd
#include "tools/levelselection.h"
manongjohn 40a40e
#include "tools/cursors.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tstroke.h"
Toshihiro Shimizu 890ddd
#include "tregion.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qset></qset>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//    Forward declarations
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class VectorSelectionTool;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// Constants / Defines
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
enum SelectionTarget         //! Possible selection targets in a SelectionTool.
Shinya Kitaoka 120a6e
{ NORMAL_TYPE_IDX,           //!< Normal selection (strokes at current frame).
Shinya Kitaoka 120a6e
  SELECTED_FRAMES_TYPE_IDX,  //!< Selection of whole frames.
Shinya Kitaoka 120a6e
  ALL_LEVEL_TYPE_IDX,        //!< Selection of an entire level.
Shinya Kitaoka 120a6e
  SAME_STYLE_TYPE_IDX,       //!< Selected styles at current frame.
Shinya Kitaoka 120a6e
  STYLE_SELECTED_FRAMES_TYPE_IDX,  //!< Selected styles at selected frames.
Shinya Kitaoka 120a6e
  STYLE_LEVEL_TYPE_IDX,  //!< Selected styles at current frame on the whole
Shinya Kitaoka 38fd86
                         //! level.
Shinya Kitaoka 120a6e
  BOUNDARY_TYPE_IDX,     //!< Boundary strokes on current frame.
Shinya Kitaoka 120a6e
  BOUNDARY_SELECTED_FRAMES_TYPE_IDX,  //!< Boundary strokes on selected frames.
Shinya Kitaoka 120a6e
  BOUNDARY_LEVEL_TYPE_IDX,            //!< Boundary strokes on the whole level.
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define NORMAL_TYPE L"Standard"
Toshihiro Shimizu 890ddd
#define SELECTED_FRAMES_TYPE L"Selected Frames"
Toshihiro Shimizu 890ddd
#define ALL_LEVEL_TYPE L"Whole Level"
Toshihiro Shimizu 890ddd
#define SAME_STYLE_TYPE L"Same Style"
Toshihiro Shimizu 890ddd
#define STYLE_SELECTED_FRAMES_TYPE L"Same Style on Selected Frames"
Toshihiro Shimizu 890ddd
#define STYLE_LEVEL_TYPE L"Same Style on Whole Level"
Toshihiro Shimizu 890ddd
#define BOUNDARY_TYPE L"Boundary Strokes"
Toshihiro Shimizu 890ddd
#define BOUNDARY_SELECTED_FRAMES_TYPE L"Boundaries on Selected Frames"
Toshihiro Shimizu 890ddd
#define BOUNDARY_LEVEL_TYPE L"Boundaries on Whole Level"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define ROUNDC_WSTR L"round_cap"
Toshihiro Shimizu 890ddd
#define BUTT_WSTR L"butt_cap"
Toshihiro Shimizu 890ddd
#define PROJECTING_WSTR L"projecting_cap"
Toshihiro Shimizu 890ddd
#define ROUNDJ_WSTR L"round_join"
Toshihiro Shimizu 890ddd
#define BEVEL_WSTR L"bevel_join"
Toshihiro Shimizu 890ddd
#define MITER_WSTR L"miter_join"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorFreeDeformer
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class VectorFreeDeformer final : public FreeDeformer {
Shinya Kitaoka 120a6e
  TVectorImageP m_vi;
Shinya Kitaoka 120a6e
  std::set<int> m_strokeIndexes;</int>
Shinya Kitaoka 120a6e
  std::vector<tstroke *=""> m_originalStrokes;</tstroke>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool m_preserveThickness, m_computeRegion, m_flip;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TThickPoint deform(TThickPoint point);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  VectorFreeDeformer(TVectorImageP vi, std::set<int> strokeIndexes);</int>
Shinya Kitaoka 120a6e
  ~VectorFreeDeformer();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void setPreserveThickness(bool preserveThickness);
Shinya Kitaoka 120a6e
  void setComputeRegion(bool computeRegion);
Shinya Kitaoka 120a6e
  void setFlip(bool flip);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  /*! Return \b index point, with index from 0 to 3. */
Shinya Kitaoka 120a6e
  TPointD getPoint(int index) const { return m_newPoints[index]; }
Shinya Kitaoka 120a6e
  /*! Set \b index point to \b p, with index from 0 to 3. */
Shinya Kitaoka 473e70
  void setPoint(int index, const TPointD &p) override;
Shinya Kitaoka 120a6e
  /*! Helper function. */
Shinya Kitaoka 120a6e
  void setPoints(const TPointD &p0, const TPointD &p1, const TPointD &p2,
Shinya Kitaoka 473e70
                 const TPointD &p3) override;
Shinya Kitaoka 120a6e
  /*! Helper function. */
Shinya Kitaoka 120a6e
  TVectorImage *getDeformedImage() const { return m_vi.getPointer(); }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void deformRegions();
Shinya Kitaoka 473e70
  void deformImage() override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// DragSelectionTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
namespace DragSelectionTool {
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// UndoChangeStrokes
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class UndoChangeStrokes final : public ToolUtils::TToolUndo {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  UndoChangeStrokes(TXshSimpleLevel *level, const TFrameId &frameId,
Shinya Kitaoka 120a6e
                    VectorSelectionTool *tool,
Shinya Kitaoka 120a6e
                    const StrokeSelection &selection);
Shinya Kitaoka 120a6e
  UndoChangeStrokes(TXshSimpleLevel *level, const TFrameId &frameId,
Shinya Kitaoka 120a6e
                    VectorSelectionTool *tool, const LevelSelection &selection);
Shinya Kitaoka 120a6e
  ~UndoChangeStrokes();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void registerStrokes(bool beforeModify = false);
Shinya Kitaoka 120a6e
  void setFlip(bool value) { m_flip = value; }
Shinya Kitaoka 120a6e
  void transform(const std::vector<tstroke *=""> &strokes, FourPoints bbox,</tstroke>
Shinya Kitaoka 120a6e
                 TPointD center, DeformValues deformValue) const;
Shinya Kitaoka 120a6e
  void restoreRegions() const;
Shinya Kitaoka 473e70
  void undo() const override;
Shinya Kitaoka 473e70
  void redo() const override;
Shinya Kitaoka 473e70
  int getSize() const override;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  VectorSelectionTool *m_tool;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::vector<tstroke *=""> m_oldStrokes, m_newStrokes;</tstroke>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::vector<int> m_indexes;  //!< Selected indexes at current frame.</int>
Shinya Kitaoka 120a6e
  std::vector<tfilledregioninf> m_regionsData;</tfilledregioninf>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int m_selectionCount;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  FourPoints m_oldBBox, m_newBBox;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPointD m_oldCenter, m_newCenter;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  DeformValues m_oldDeformValues, m_newDeformValues;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool m_flip;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorDeformTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class VectorDeformTool : public DeformTool {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  VectorDeformTool(VectorSelectionTool *tool);
Shinya Kitaoka 120a6e
  ~VectorDeformTool();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void applyTransform(FourPoints bbox) override;
Shinya Kitaoka 473e70
  void addTransformUndo() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  /*! Trasform whole level and add undo. */
Shinya Kitaoka 120a6e
  void transformWholeLevel();
Shinya Kitaoka 120a6e
  bool isFlip();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
otakuto e28b5e
  std::unique_ptr<undochangestrokes> m_undo;</undochangestrokes>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override {}
Shinya Kitaoka 473e70
Shinya Kitaoka 473e70
  void leftButtonUp(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
Shinya Kitaoka 473e70
  void draw() override {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  struct VFDScopedBlock;
otakuto e28b5e
  std::unique_ptr<vfdscopedblock> m_vfdScopedBlock;</vfdscopedblock>
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorRotationTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class VectorRotationTool final : public VectorDeformTool {
otakuto e28b5e
  std::unique_ptr<rotation> m_rotation;</rotation>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  VectorRotationTool(VectorSelectionTool *tool);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void transform(TAffine aff, double angle) override;
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void draw() override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorFreeDeformTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class VectorFreeDeformTool final : public VectorDeformTool {
otakuto e28b5e
  std::unique_ptr<freedeform> m_freeDeform;</freedeform>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  VectorFreeDeformTool(VectorSelectionTool *tool);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorMoveSelectionTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class VectorMoveSelectionTool final : public VectorDeformTool {
otakuto e28b5e
  std::unique_ptr<moveselection> m_moveSelection;</moveselection>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  VectorMoveSelectionTool(VectorSelectionTool *tool);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void transform(TAffine aff) override;
Shinya Kitaoka 473e70
  void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorScaleTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class VectorScaleTool final : public VectorDeformTool {
otakuto e28b5e
  std::unique_ptr<scale> m_scale;</scale>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
caryoscelus fb92fd
  VectorScaleTool(VectorSelectionTool *tool, ScaleType type);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 38fd86
  TPointD transform(int index,
Shinya Kitaoka 38fd86
                    TPointD newPos) override;  //!< Returns scale value.
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorChangeThicknessTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class VectorChangeThicknessTool final : public DragTool {
Shinya Kitaoka 120a6e
  TPointD m_curPos, m_firstPos;
Shinya Kitaoka 120a6e
  std::map<int, std::vector<double="">> m_strokesThickness;</int,>
Shinya Kitaoka 120a6e
  double m_thicknessChange;
Toshihiro Shimizu 890ddd
otakuto e28b5e
  std::unique_ptr<undochangestrokes> m_undo;</undochangestrokes>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  VectorChangeThicknessTool(VectorSelectionTool *tool);
Shinya Kitaoka 120a6e
  ~VectorChangeThicknessTool();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setStrokesThickness(TVectorImage &vi);
Shinya Kitaoka 120a6e
  void setThicknessChange(double value) { m_thicknessChange = value; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void changeImageThickness(TVectorImage &vi, double newThickness);
Shinya Kitaoka 120a6e
  void addUndo();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void leftButtonUp(const TPointD &pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void draw() override {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
}  // namespace DragSelectionTool
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// VectorSelectionTool
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  \brief    Selection tool for Toonz's vector images.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class VectorSelectionTool final : public SelectionTool {
Shinya Kitaoka 120a6e
  Q_DECLARE_TR_FUNCTIONS(VectorSelectionTool)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  VectorSelectionTool(int targetType);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void setNewFreeDeformer() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setCanEnterGroup(bool value) { m_canEnterGroup = value; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 38fd86
  bool isConstantThickness() const override {
Shinya Kitaoka 38fd86
    return m_constantThickness.getValue();
Shinya Kitaoka 38fd86
  }
Shinya Kitaoka 473e70
  bool isLevelType() const override;
Shinya Kitaoka 473e70
  bool isSelectedFramesType() const override;
Shinya Kitaoka 473e70
  bool isSameStyleType() const override;
Shinya Kitaoka 473e70
  bool isModifiableSelectionType() const override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  const std::set<int> &selectedStyles() const {</int>
Shinya Kitaoka 120a6e
    return m_levelSelection.styles();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  std::set<int> &selectedStyles() { return m_levelSelection.styles(); }</int>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getSelectionCount() const { return m_selectionCount; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void selectionOutlineStyle(int &capStyle, int &joinStyle);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  const StrokeSelection &strokeSelection() const { return m_strokeSelection; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  const LevelSelection &levelSelection() const { return m_levelSelection; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  TSelection *getSelection() override;
Shinya Kitaoka 473e70
  bool isSelectionEmpty() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void computeBBox() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  TPropertyGroup *getProperties(int targetType) override;
Toshihiro Shimizu 890ddd
manongjohn 7c3674
  bool m_resetCenter;
manongjohn 7c3674
manongjohn 7c3674
  void setResetCenter(bool update) { m_resetCenter = update; }
manongjohn 7c3674
  bool canResetCenter() { return m_resetCenter; }
manongjohn 7c3674
manongjohn 6939a3
  bool isSelectionEditable() { return m_strokeSelection.isEditable(); }
manongjohn 6939a3
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void onActivate() override;
Shinya Kitaoka 473e70
  void onDeactivate() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &) override;
manongjohn 40a40e
  void leftButtonDown(const TPointD &pos, const TMouseEvent &) override;
Shinya Kitaoka 473e70
  void leftButtonUp(const TPointD &pos, const TMouseEvent &) override;
Shinya Kitaoka 473e70
  void leftButtonDoubleClick(const TPointD &, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void addContextMenuItems(QMenu *menu) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void draw() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void updateAction(TPointD pos, const TMouseEvent &e) override;
Shinya Kitaoka 473e70
  void onSelectedFramesChanged() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  bool onPropertyChanged(std::string propertyName) override;
Shinya Kitaoka 473e70
  void onImageChanged() override;
Toshihiro Shimizu 890ddd
manongjohn 40a40e
  int getCursorId() const override {
manongjohn 40a40e
    if (m_viewer && m_viewer->getGuidedStrokePickerMode())
manongjohn 40a40e
      return m_viewer->getGuidedStrokePickerCursor();
manongjohn 40a40e
    return m_cursorId;
manongjohn 40a40e
  }
manongjohn 40a40e
Martin van Zijl bf2548
  bool isDragging() const override;
Martin van Zijl bf2548
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka d1f6c4
  class AttachedLevelSelection final : public LevelSelection {
Shinya Kitaoka 120a6e
    StrokeSelection &m_strokeSelection;  //!< Selection of strokes to be seen at
Shinya Kitaoka 38fd86
                                         //! current frame.
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    AttachedLevelSelection(StrokeSelection &strokeSelection)
Shinya Kitaoka 120a6e
        : m_strokeSelection(strokeSelection) {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
    void selectNone() override {
Shinya Kitaoka 120a6e
      LevelSelection::selectNone(), m_strokeSelection.selectNone();
Shinya Kitaoka 120a6e
    }
shun-iwasawa 6e8ca5
    void enableCommands() override { m_strokeSelection.enableCommands(); }
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  TEnumProperty m_selectionTarget;  //!< Selected target content (strokes, whole
Shinya Kitaoka 38fd86
                                    //! image, styles...).
Shinya Kitaoka 120a6e
  TBoolProperty m_constantThickness;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  StrokeSelection m_strokeSelection;        //!< Standard selection of a set of
Shinya Kitaoka 38fd86
                                            //! strokes in current image.
Shinya Kitaoka 120a6e
  AttachedLevelSelection m_levelSelection;  //!< Selection across multiple
Shinya Kitaoka 38fd86
                                            //! frames and specific styles.
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TEnumProperty m_capStyle;       //!< Style of stroke caps.
Shinya Kitaoka 120a6e
  TEnumProperty m_joinStyle;      //!< Style of stroke joins.
Shinya Kitaoka 120a6e
  TIntProperty m_miterJoinLimit;  //!< Stroke joins threshold value.
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPropertyGroup m_outlineProps;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int m_selectionCount;  //!< \deprecated  This is \a not related to stroke
Shinya Kitaoka 38fd86
                         //! selections;
Shinya Kitaoka 120a6e
  //!               but rather to bboxes count - and even that is deprecated.
Shinya Kitaoka 120a6e
  bool m_canEnterGroup;  //!< \deprecated  Used in Manga and Kids
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  void modifySelectionOnClick(TImageP image, const TPointD &pos,
Shinya Kitaoka 473e70
                              const TMouseEvent &e) override;
Shinya Kitaoka 120a6e
  bool selectStroke(int index, bool toggle);
Shinya Kitaoka 120a6e
Shinya Kitaoka 473e70
  void doOnActivate() override;
Shinya Kitaoka 473e70
  void doOnDeactivate() override;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void selectRegionVectorImage();
Shinya Kitaoka 120a6e
Shinya Kitaoka 473e70
  void updateTranslation() override;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  /*! \details  The updateSelectionTarget() function reads the selection
Shinya Kitaoka 120a6e
          target (styles, frames, etc) selected by the user, and ensures
Shinya Kitaoka 120a6e
          that the associated internal selection is configured and
Shinya Kitaoka 120a6e
          \a current.
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
          The selected strokes set is \a may be cleared appropriately
Shinya Kitaoka 120a6e
          as a result of a change in target.                                  */
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void updateSelectionTarget();  //!< Reads widget fields and updates the
Shinya Kitaoka 38fd86
                                 //! selection target accordingly.
Shinya Kitaoka 120a6e
  void
Shinya Kitaoka 120a6e
  clearSelectedStrokes();    //!< Clears strokes visible in current selection.
Shinya Kitaoka 120a6e
  void finalizeSelection();  //!< Makes selection consistent, and invokes all
Shinya Kitaoka 38fd86
                             //! related cached data
Shinya Kitaoka 38fd86
  //!  updates needed for visualization.
Shinya Kitaoka 120a6e
  void drawInLevelType(const TVectorImage &vi);
Shinya Kitaoka 120a6e
  void drawSelectedStrokes(const TVectorImage &vi);
Shinya Kitaoka 120a6e
  void drawGroup(const TVectorImage &vi);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
#endif  // VECTORSELECTIONTOOL_H