|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef STAGESCHEMATIC_H
|
|
Toshihiro Shimizu |
890ddd |
#define STAGESCHEMATIC_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "schematicviewer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tgeometry.h"
|
|
Toshihiro Shimizu |
890ddd |
#include <qmap></qmap>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// forward declaration
|
|
Toshihiro Shimizu |
890ddd |
class TStageObject;
|
|
Toshihiro Shimizu |
890ddd |
class TXsheetHandle;
|
|
Toshihiro Shimizu |
890ddd |
class TObjectHandle;
|
|
Toshihiro Shimizu |
890ddd |
class TColumnHandle;
|
|
Toshihiro Shimizu |
890ddd |
class TSceneHandle;
|
|
Toshihiro Shimizu |
890ddd |
class TFrameHandle;
|
|
Toshihiro Shimizu |
890ddd |
class TXsheet;
|
|
Toshihiro Shimizu |
890ddd |
class StageSchematicNode;
|
|
Toshihiro Shimizu |
890ddd |
class StageSchematicSplineNode;
|
|
Toshihiro Shimizu |
890ddd |
class TStageObjectSpline;
|
|
Toshihiro Shimizu |
890ddd |
class StageObjectSelection;
|
|
Toshihiro Shimizu |
890ddd |
class SchematicLink;
|
|
Toshihiro Shimizu |
890ddd |
class StageSchematicGroupNode;
|
|
Toshihiro Shimizu |
890ddd |
class StageSchematicGroupEditor;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// TreeStageNode
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
//! Provide a structure representing a node af a tree.
|
|
Shinya Kitaoka |
120a6e |
//! This class mantains information about a node of the stage schematic and its
|
|
Shinya Kitaoka |
120a6e |
//! children.
|
|
Toshihiro Shimizu |
890ddd |
//! The tree is generated using the TStageObjectTree.
|
|
Toshihiro Shimizu |
890ddd |
//! The generated tree is used to oreder stage schematic nodes in the window.
|
|
Shinya Kitaoka |
120a6e |
class TreeStageNode {
|
|
Shinya Kitaoka |
120a6e |
//! The node to replace in the window
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *m_node;
|
|
Shinya Kitaoka |
120a6e |
//! The childre of the node
|
|
Shinya Kitaoka |
120a6e |
std::vector<treestagenode *=""> m_cildren;</treestagenode>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TreeStageNode(StageSchematicNode *node) : m_node(node) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~TreeStageNode() {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_cildren.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
delete m_cildren[i];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
//--------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setSchematicNode(StageSchematicNode *node) { m_node = node; }
|
|
Shinya Kitaoka |
120a6e |
void addChild(TreeStageNode *child) { m_cildren.push_back(child); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *getNode() { return m_node; }
|
|
Shinya Kitaoka |
120a6e |
int getChildrenCount() { return m_cildren.size(); }
|
|
Shinya Kitaoka |
120a6e |
TreeStageNode *getChildTreeNode(int i) { return m_cildren[i]; }
|
|
Shinya Kitaoka |
120a6e |
//! Sort the children container.
|
|
Shinya Kitaoka |
120a6e |
//! The sorting follows this rules:\n
|
|
Shinya Kitaoka |
120a6e |
//! \li TableNode < CameraNode < PegbarNode < ColumnNode
|
|
Shinya Kitaoka |
120a6e |
//! \li if two nodes are of the same type, they are odered using indexes
|
|
Shinya Kitaoka |
120a6e |
void sortChildren(int startIndex, int lastIndex);
|
|
Shinya Kitaoka |
120a6e |
void reverseChildren() { std::reverse(m_cildren.begin(), m_cildren.end()); }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// StageSchematic
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! It is the implementation of the SchematicScene representig the
|
|
Shinya Kitaoka |
120a6e |
//! QGraphicsScene for the Stage Schematic.
|
|
Shinya Kitaoka |
120a6e |
//! All StageSchematicNode, StageSchematicSplineNode and link are pleced and
|
|
Shinya Kitaoka |
120a6e |
//! handled in this scene.
|
|
Toshihiro Shimizu |
890ddd |
//! The scene mantains two mapping:
|
|
Shinya Kitaoka |
120a6e |
//! one for StageSchematicNode and one for StageSchematicSplineNode. These
|
|
Shinya Kitaoka |
120a6e |
//! mapping can be used to retrieve
|
|
Toshihiro Shimizu |
890ddd |
//! nodes and spline.\n
|
|
Toshihiro Shimizu |
890ddd |
//! To regenearte the scene use the updateScene().\n
|
|
Toshihiro Shimizu |
890ddd |
//! To oreder nodes in the scene use the reorderScene().
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class StageSchematicScene final : public SchematicScene {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *m_objHandle;
|
|
Shinya Kitaoka |
120a6e |
TColumnHandle *m_colHandle;
|
|
Shinya Kitaoka |
120a6e |
TSceneHandle *m_sceneHandle;
|
|
Shinya Kitaoka |
120a6e |
TFrameHandle *m_frameHandle;
|
|
Shinya Kitaoka |
120a6e |
TPointD m_nextNodePos;
|
|
Shinya Kitaoka |
120a6e |
TPointD m_firstPos;
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" stageschematicnode=""> m_nodeTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" stageschematicgroupnode=""> m_GroupTable;</int,>
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" stageschematicgroupeditor=""> m_groupEditorTable;</int,>
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectspline *="" *,="" stageschematicsplinenode=""> m_splineTable;</tstageobjectspline>
|
|
Shinya Kitaoka |
120a6e |
StageObjectSelection *m_selection;
|
|
Shinya Kitaoka |
120a6e |
int m_gridDimension;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" qlist<stageschematicnode="">> m_nodesToPlace;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool m_showLetterOnPortFlag;
|
|
shun_iwasawa |
22eaa4 |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
StageSchematicScene(QWidget *parent);
|
|
Shinya Kitaoka |
120a6e |
~StageSchematicScene();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Clear all item an regenerate the Stage Schematic graph.
|
|
Shinya Kitaoka |
473e70 |
void updateScene() override;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Reurns the current node.
|
|
Shinya Kitaoka |
473e70 |
QGraphicsItem *getCurrentNode() override;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Replace all nodes in the scene.
|
|
Shinya Kitaoka |
473e70 |
void reorderScene() override;
|
|
Shinya Kitaoka |
120a6e |
TXsheet *getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *getXsheetHandle() { return m_xshHandle; }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setXsheetHandle(TXsheetHandle *xshHandle);
|
|
Shinya Kitaoka |
120a6e |
void setObjectHandle(TObjectHandle *objHandle);
|
|
Shinya Kitaoka |
120a6e |
void setColumnHandle(TColumnHandle *colHandle);
|
|
Shinya Kitaoka |
120a6e |
void setFxHandle(TFxHandle *fxHandle);
|
|
Shinya Kitaoka |
120a6e |
void setSceneHandle(TSceneHandle *sceneHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_sceneHandle = sceneHandle;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
void setFrameHandle(TFrameHandle *frameHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_frameHandle = frameHandle;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId getCurrentObject();
|
|
Shinya Kitaoka |
120a6e |
TFrameHandle *getFrameHandle() { return m_frameHandle; }
|
|
Shinya Kitaoka |
120a6e |
TColumnHandle *getColumnHandle() { return m_colHandle; }
|
|
Shinya Kitaoka |
120a6e |
void updateNestedGroupEditors(StageSchematicNode *node,
|
|
Shinya Kitaoka |
120a6e |
const QPointF &newPos);
|
|
Shinya Kitaoka |
120a6e |
void resizeNodes(bool maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool isShowLetterOnPortFlagEnabled() { return m_showLetterOnPortFlag; }
|
|
shun_iwasawa |
22eaa4 |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *addStageSchematicNode(TStageObject *pegbar);
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *addStageGroupNode(QList<tstageobject *=""> objs);</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplineNode *addSchematicSplineNode(TStageObjectSpline *spline);
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupEditor *addEditedGroupedStageSchematicNode(
|
|
Shinya Kitaoka |
120a6e |
int groupId, const QList<schematicnode *=""> &groupedObjs);</schematicnode>
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *createStageSchematicNode(StageSchematicScene *scene,
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Places all nodes in the window
|
|
Shinya Kitaoka |
120a6e |
void placeNodes();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Search nodes in the TStageObjectTree that are roots of a tree.
|
|
Shinya Kitaoka |
120a6e |
//! Roots are placed in the container \b roots
|
|
Shinya Kitaoka |
120a6e |
void findRoots(std::vector<treestagenode *=""> &roots);</treestagenode>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Build the tree starting from \b treenode.
|
|
Shinya Kitaoka |
120a6e |
//! The tree is build recursively on each children of \b treeNode.
|
|
Shinya Kitaoka |
120a6e |
void makeTree(TreeStageNode *treeNode);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Give the right position to the \b treeNode children.
|
|
Shinya Kitaoka |
120a6e |
//! All nodes of the stage schematic are replaced recursively on each children
|
|
Shinya Kitaoka |
120a6e |
//! starting from a root.
|
|
Shinya Kitaoka |
120a6e |
//! \b xPos and \b yPos are update from the method.
|
|
Shinya Kitaoka |
120a6e |
//! \sa findRoots(vector<treenode*> &roots)</treenode*>
|
|
Shinya Kitaoka |
120a6e |
void placeChildren(TreeStageNode *treeNode, double &xPos, double &yPos,
|
|
Shinya Kitaoka |
120a6e |
bool isCameraTree = false);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Place a StageSchematicNode in the window.
|
|
Shinya Kitaoka |
120a6e |
//! It is usually used to place new nodes that have not position.
|
|
Shinya Kitaoka |
120a6e |
void placeNode(StageSchematicNode *node);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! Place a StageSchematicSplineNode in the window.
|
|
Shinya Kitaoka |
120a6e |
//! It is usually used to place new splines that have not position.
|
|
Shinya Kitaoka |
120a6e |
void placeSplineNode(StageSchematicSplineNode *splineNode);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
SchematicNode *getNodeFromPosition(const QPointF &pos);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void updatePosition(StageSchematicNode *node, const TPointD &pos);
|
|
Shinya Kitaoka |
120a6e |
void highlightLinks(StageSchematicNode *node, bool value);
|
|
Shinya Kitaoka |
120a6e |
void updateEditedGroups(const QMap<int, *="" qlist<schematicnode="">> &editedGroup);</int,>
|
|
Shinya Kitaoka |
120a6e |
void updatePositionOnResize(TStageObject *obj, bool maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
void updateSplinePositionOnResize(TStageObjectSpline *spl,
|
|
Shinya Kitaoka |
120a6e |
bool maximizedNode);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) override;
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QGraphicsSceneMouseEvent *me) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Shinya Kitaoka |
120a6e |
void editObject();
|
|
Shinya Kitaoka |
120a6e |
void doCollapse(QList<tstageobjectid>);</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
void doExplodeChild(QList<tstageobjectid>);</tstageobjectid>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected slots:
|
|
Shinya Kitaoka |
473e70 |
void onSelectionSwitched(TSelection *oldSel, TSelection *newSel) override;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void onPegbarAdded();
|
|
Shinya Kitaoka |
120a6e |
void onSplineAdded();
|
|
Shinya Kitaoka |
120a6e |
void onCameraAdded();
|
|
Shinya Kitaoka |
120a6e |
void onResetCenter();
|
|
Shinya Kitaoka |
120a6e |
void onCameraActivate();
|
|
Shinya Kitaoka |
120a6e |
void onRemoveSpline();
|
|
Shinya Kitaoka |
120a6e |
void onSaveSpline();
|
|
Shinya Kitaoka |
120a6e |
void onLoadSpline();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void onPathToggled(int state);
|
|
Shinya Kitaoka |
120a6e |
void onCpToggled(bool toggled);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void onXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
void onSceneChanged();
|
|
Shinya Kitaoka |
120a6e |
void onCurrentObjectChanged(const TStageObjectId &, bool);
|
|
Shinya Kitaoka |
120a6e |
void onCurrentColumnChanged(int);
|
|
Shinya Kitaoka |
120a6e |
void onSelectionChanged();
|
|
Shinya Kitaoka |
120a6e |
void onCollapse(QList<tstageobjectid>);</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
void onOpenSubxsheet();
|
|
Shinya Kitaoka |
120a6e |
void onEditGroup();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void onSwitchPortModeToggled(bool withLetter);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // STAGESCHEMATIC_H
|