icndocument.h

00001 /***************************************************************************
00002  *   Copyright (C) 2005 by David Saxton                                    *
00003  *   david@bluehaze.org                                                    *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
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; // Selected objects
00232         GuardedNodeGroupList m_nodeGroupList;
00233         
00234 private:
00235         QCanvasItemList m_itemDeleteList; // List of canvas items to be deleted
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

Generated on Tue May 8 17:05:30 2007 for KTechLab by  doxygen 1.5.1