Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef STAGEOBJECTSELECTION_H
Toshihiro Shimizu 890ddd
#define STAGEOBJECTSELECTION_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonzqt/selection.h"
Toshihiro Shimizu 890ddd
#include "toonz/tstageobjectid.h"
Toshihiro Shimizu 890ddd
#include "tgeometry.h"
Toshihiro Shimizu 890ddd
#include <qlist></qlist>
Toshihiro Shimizu 890ddd
#include <qpair></qpair>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
// forward declaration
Toshihiro Shimizu 890ddd
class TXsheetHandle;
Toshihiro Shimizu 890ddd
class TObjectHandle;
Toshihiro Shimizu 890ddd
class TColumnHandle;
Toshihiro Shimizu 890ddd
class TFxHandle;
Toshihiro Shimizu 890ddd
class SchematicLink;
Toshihiro Shimizu 890ddd
class SchematicPort;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=========================================================
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
// FxSelection
Toshihiro Shimizu 890ddd
//
Toshihiro Shimizu 890ddd
//---------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class StageObjectSelection final : public QObject, public TSelection {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QList<qpair<tstageobjectid, tstageobjectid="">> m_selectedLinks;</qpair<tstageobjectid,>
Shinya Kitaoka 120a6e
  QList<tstageobjectid> m_selectedObjects;</tstageobjectid>
Shinya Kitaoka 120a6e
  QList<int> m_selectedSplines;</int>
Shinya Kitaoka 120a6e
  TXsheetHandle *m_xshHandle;
Shinya Kitaoka 120a6e
  TObjectHandle *m_objHandle;
Shinya Kitaoka 120a6e
  TColumnHandle *m_colHandle;
Shinya Kitaoka 120a6e
  TFxHandle *m_fxHandle;
Shinya Kitaoka 120a6e
  TPointD m_pastePosition;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  StageObjectSelection();
Shinya Kitaoka 120a6e
  StageObjectSelection(const StageObjectSelection &src);
Shinya Kitaoka 120a6e
  ~StageObjectSelection();
Shinya Kitaoka 120a6e
Shinya Kitaoka 473e70
  void enableCommands() override;
Shinya Kitaoka 120a6e
Shinya Kitaoka 473e70
  bool isEmpty() const override {
Shinya Kitaoka 120a6e
    return m_selectedObjects.empty() && m_selectedLinks.empty() &&
Shinya Kitaoka 120a6e
           m_selectedSplines.empty();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void setPastePosition(const TPointD &pos) { m_pastePosition = pos; };
Shinya Kitaoka 120a6e
Shinya Kitaoka 473e70
  void selectNone() override {
Shinya Kitaoka 120a6e
    m_selectedObjects.clear();
Shinya Kitaoka 120a6e
    m_selectedLinks.clear();
Shinya Kitaoka 120a6e
    m_selectedSplines.clear();
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  void deleteSelection();
Shinya Kitaoka 120a6e
  void groupSelection();
Shinya Kitaoka 120a6e
  void ungroupSelection();
Shinya Kitaoka 120a6e
  void collapseSelection();
Shinya Kitaoka 120a6e
  void explodeChild();
Shinya Kitaoka 120a6e
  void copySelection();
Shinya Kitaoka 120a6e
  void pasteSelection();
Shinya Kitaoka 120a6e
  void cutSelection();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void select(const TStageObjectId &id);
Shinya Kitaoka 120a6e
  void unselect(const TStageObjectId &id);
Shinya Kitaoka 120a6e
  void select(int id);
Shinya Kitaoka 120a6e
  void unselect(int id);
Shinya Kitaoka 120a6e
  void select(SchematicLink *link);
Shinya Kitaoka 120a6e
  void unselect(SchematicLink *link);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool isSelected(const TStageObjectId &id) const;
Shinya Kitaoka 120a6e
  bool isSelected(SchematicLink *link);
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  const QList<tstageobjectid> &getObjects() const { return m_selectedObjects; }</tstageobjectid>
Shinya Kitaoka 120a6e
  const QList<qpair<tstageobjectid, tstageobjectid="">> &getLinks() const {</qpair<tstageobjectid,>
Shinya Kitaoka 120a6e
    return m_selectedLinks;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void setXsheetHandle(TXsheetHandle *xshHandle) { m_xshHandle = xshHandle; }
Shinya Kitaoka 120a6e
  void setObjectHandle(TObjectHandle *objHandle) { m_objHandle = objHandle; }
Shinya Kitaoka 120a6e
  void setColumnHandle(TColumnHandle *colHandle) { m_colHandle = colHandle; }
Shinya Kitaoka 120a6e
  void setFxHandle(TFxHandle *fxHandle) { m_fxHandle = fxHandle; }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // return true if objects in m_selectedObjects makes a connected graph;
Shinya Kitaoka 120a6e
  bool isConnected() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  // not implemented
Shinya Kitaoka 120a6e
  StageObjectSelection &operator=(const StageObjectSelection &);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QPair<tstageobjectid, tstageobjectid=""> getBoundingObjects(SchematicLink *link);</tstageobjectid,>
Shinya Kitaoka 120a6e
  QPair<tstageobjectid, tstageobjectid=""> getBoundingObjects(</tstageobjectid,>
Shinya Kitaoka 120a6e
      SchematicPort *inputPort, SchematicPort *outputPort);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Shinya Kitaoka 120a6e
  void doCollapse(QList<tstageobjectid>);</tstageobjectid>
Shinya Kitaoka 120a6e
  void doExplodeChild(QList<tstageobjectid>);</tstageobjectid>
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
#endif