Shinya Kitaoka 810553
#pragma once
Shinya Kitaoka 810553
Toshihiro Shimizu 890ddd
#ifndef RULERTOOL_H
Toshihiro Shimizu 890ddd
#define RULERTOOL_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tools/tool.h"
Toshihiro Shimizu 890ddd
#include "tproperty.h"
Toshihiro Shimizu 890ddd
#include "tools/tooloptions.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qcoreapplication></qcoreapplication>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//----------------------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class RulerTool final : public TTool {
Shinya Kitaoka 120a6e
  Q_DECLARE_TR_FUNCTIONS(RulerTool)
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  enum DragMode { MakeNewRuler = 0, MoveFirstPos, MoveSecondPos, MoveRuler };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPointD m_firstPos, m_secondPos;
Shinya Kitaoka 120a6e
  TPointD m_mousePos;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  DragMode m_dragMode;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool m_justClicked;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::vector<rulertooloptionsbox *=""> m_toolOptionsBox;</rulertooloptionsbox>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  RulerTool();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setToolOptionsBox(RulerToolOptionsBox *toolOptionsBox);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  ToolType getToolType() const override { return TTool::GenericTool; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void onImageChanged() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void draw() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void leftButtonUp(const TPointD &pos, const TMouseEvent &) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void mouseMove(const TPointD &pos, const TMouseEvent &e) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void onActivate() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  int getCursorId() const override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void updateToolOption();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  /*--- 現在のマウス位置がRulerに十分近ければTrue ---*/
Shinya Kitaoka 120a6e
  bool isNearRuler();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  /*--- 基準点に対し、マウス位置を0,45,90度にフィットさせた位置を返す ---*/
Shinya Kitaoka 120a6e
  TPointD getHVCoordinatedPos(TPointD p, TPointD centerPos);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif