00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ICNDOCUMENT_H
00012 #define ICNDOCUMENT_H
00013
00014 #include "itemdocument.h"
00015
00016
00017 class Cells;
00018 class CNItem;
00019 class CNItemGroup;
00020 class Connector;
00021 class ECNode;
00022 class FlowContainer;
00023 class Node;
00024 class NodeGroup;
00025
00026 typedef QValueList<QGuardedPtr<Connector> > ConnectorList;
00027 typedef QValueList<QGuardedPtr<Node> > NodeList;
00028 typedef QValueList<NodeGroup*> NodeGroupList;
00029 typedef QValueList<QGuardedPtr<NodeGroup> > GuardedNodeGroupList;
00030
00034 class ICNDocument : public ItemDocument
00035 {
00036 Q_OBJECT
00037 public:
00038 ICNDocument( const QString &caption, KTechlab *ktechlab, const char *name );
00039 virtual ~ICNDocument();
00040
00041 enum hit_score
00042 {
00043 hs_none = 0,
00044 hs_connector = 4,
00045 hs_item = 1000
00046 };
00047
00048 virtual View *createView( ViewContainer *viewContainer, uint viewAreaId, const char *name = 0 );
00049
00055 virtual Item* addItem( const QString &id, const QPoint &p, bool newItem );
00060 Connector* createConnector( const QString &startNodeId, const QString &endNodeId, QPointList *pointList = 0 );
00064 CNItem* cnItemWithID( const QString &id );
00069 Node* nodeWithID( const QString &id );
00074 Connector* connectorWithID( const QString &id );
00079 virtual void appendDeleteList( QCanvasItem *qcanvasItem );
00084 virtual void flushDeleteList();
00090 virtual bool canConnect( QCanvasItem *qcanvasItem1, QCanvasItem *qcanvasItem2 ) const;
00091 virtual void copy();
00092 virtual void selectAll();
00093
00094
00095 virtual bool registerItem( QCanvasItem *qcanvasItem );
00099 Cells *cells() const { return m_cells; }
00104 inline bool isValidCellReference( const uint x, const uint y ) const
00105 {
00106 return ( x<m_cellsX && y<m_cellsY );
00107 }
00111 void addCPenalty( int x, int y, int score );
00119 bool joinConnectors( Node *node );
00120 static int gridSnap( int pos );
00121 static QPoint gridSnap( const QPoint &pos );
00126 virtual bool isValidItem( Item *item ) = 0;
00127 virtual bool isValidItem( const QString &itemId ) = 0;
00128 ConnectorList getCommonConnectors( const ItemList &list );
00129 NodeList getCommonNodes( const ItemList &list );
00130 const NodeList & nodeList() const { return m_nodeList; }
00131 const ConnectorList & connectorList() const { return m_connectorList; }
00132 const GuardedNodeGroupList & nodeGroupList() const { return m_nodeGroupList; }
00133 virtual ItemGroup *selectList() const;
00138 Connector * createConnector( Node *node1, Node *node2, QPointList *pointList = 0 );
00144 Connector * createConnector( Node *node, Connector *con, const QPoint &pos2, QPointList *pointList = 0 );
00150 Connector * createConnector( Connector *con1, Connector *con2, const QPoint &pos1, const QPoint &pos2, QPointList *pointList = 0 );
00155 FlowContainer *flowContainer( const QPoint &pos );
00159 void setItemResizeCursor( int cornerType );
00160
00161 void getTranslatable( const ItemList & itemList, ConnectorList * fixedConnectors = 0, ConnectorList * translatableConnectors = 0, NodeGroupList * translatableNodeGroups = 0 );
00166 void rerouteInvalidatedConnectors();
00171 void slotAssignNodeGroups();
00172
00173 public slots:
00178 virtual void deleteSelection();
00183 void requestRerouteInvalidatedConnectors();
00189 void createCellMap();
00193 void slotRequestAssignNG();
00194
00195 signals:
00199 void connectorAdded( Connector *connector );
00203 void nodeAdded( Node *node );
00204
00205 protected:
00210 void addAllItemConnectorPoints();
00211 virtual void fillContextMenu( const QPoint &pos );
00218 NodeGroup* createNodeGroup( Node *node );
00223 bool deleteNodeGroup( Node *node );
00224
00225 friend class CanvasEditor;
00226
00227 Cells *m_cells;
00228 uint m_cellsX, m_cellsY;
00229 NodeList m_nodeList;
00230 ConnectorList m_connectorList;
00231 CNItemGroup *m_selectList;
00232 GuardedNodeGroupList m_nodeGroupList;
00233
00234 private:
00235 QCanvasItemList m_itemDeleteList;
00236 };
00237
00238
00242 class DirCursor
00243 {
00244 public:
00245 static DirCursor* self();
00246 ~DirCursor();
00247
00248 static QPixmap leftArrow()
00249 {
00250 return self()->m_leftArrow;
00251 }
00252
00253 static QPixmap rightArrow()
00254 {
00255 return self()->m_rightArrow;
00256 }
00257
00258 static QPixmap upArrow()
00259 {
00260 return self()->m_upArrow;
00261 }
00262
00263 static QPixmap downArrow()
00264 {
00265 return self()->m_downArrow;
00266 }
00267
00268 protected:
00269 DirCursor();
00270 void initCursors();
00271
00272 static DirCursor *m_self;
00273 QPixmap m_leftArrow;
00274 QPixmap m_rightArrow;
00275 QPixmap m_upArrow;
00276 QPixmap m_downArrow;
00277 };
00278
00279
00280 #endif