TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
GraphicsScene.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 
00003 Copyright (c) 2008 Deepak Chandran
00004 Contact: Deepak Chandran (dchandran1@gmail.com)
00005 See COPYRIGHT.TXT
00006 
00007 The primary task of the graphics scene is to draws items.
00008 All interactions with the GraphicsScene is done through MainWindow or NetworkHandle. 
00009 NetworkHandle provides functions such as move, insert, and remove. MainWindow relays
00010 all the signals, such as mouse and key events, from the GraphicsScene. So, there is rarely
00011 a need to directly  interact with the GraphicsScene
00012 ****************************************************************************/
00013 
00014 #ifndef TINKERCELL_GRAPHICSSCENE_H
00015 #define TINKERCELL_GRAPHICSSCENE_H
00016 
00017 #include <stdlib.h>
00018 #include <QtGui>
00019 #include <QString>
00020 #include <QPair>
00021 #include <QFileDialog>
00022 #include <QtDebug>
00023 #include <QGraphicsItem>
00024 #include <QGraphicsItemGroup>
00025 #include <QGraphicsScene>
00026 #include <QGraphicsView>
00027 #include <QAction>
00028 #include <QFile>
00029 #include <QHBoxLayout>
00030 #include <QMainWindow>
00031 #include <QHash>
00032 #include <QUndoCommand>
00033 #include <QGraphicsItemAnimation>
00034 #include <QPrinter>
00035 #include "CloneItems.h"
00036 
00037 namespace Tinkercell
00038 {
00039 
00040         class NodeGraphicsItem;
00041         class ConnectionGraphicsItem;
00042         class ItemHandle;
00043         class ItemData;
00044         class NetworkHandle;
00045         class NetworkWindow;
00046         class GraphicsView;
00047         class MainWindow;
00048         class ConsoleWindow;
00049         class ToolGraphicsItem;
00050 
00058         class TINKERCELLCOREEXPORT GraphicsScene : public QGraphicsScene
00059         {
00060                 Q_OBJECT
00061 
00062         public:
00067                 static bool USE_DEFAULT_BEHAVIOR;
00070                 static int GRID;
00072                 static QPen SelectionRectanglePen;
00074                 static QBrush SelectionRectangleBrush;
00076                 static QBrush BackgroundBrush;
00078                 static QColor BackgroundColor;
00080                 static QPen GridPen;
00082                 static QBrush ForegroundBrush;
00084                 static QBrush ToolTipBackgroundBrush;
00086                 static QBrush ToolTipTextBrush;
00088                 static qreal MIN_DRAG_DISTANCE;
00089 
00091                 enum InsertType { NEW, PASTED, LOADED, OTHER }; 
00092 
00094                 NetworkHandle * network;
00096                 NetworkWindow * networkWindow;
00098                 MainWindow * mainWindow() const;
00100                 ConsoleWindow * console() const;
00102                 ItemHandle * localHandle() const;
00104                 ItemHandle * globalHandle() const;
00106                 virtual bool useDefaultBehavior() const;
00108                 virtual void useDefaultBehavior(bool);
00113                 QMenu * contextItemsMenu;
00118                 QMenu * contextScreenMenu;
00122                 virtual QRectF visibleRegion() const;
00124                 virtual void setBackground(const QPixmap&) const;
00126                 virtual void setForeground(const QPixmap&) const;
00130                 virtual QPointF& lastPoint();
00134                 virtual QPoint& lastScreenPoint();
00138                 virtual QList<QGraphicsItem*>& selected();
00142                 virtual QRectF selectedRect();
00146                 virtual QList<QGraphicsItem*>& moving();
00149                 virtual qreal ZValue();
00151                 GraphicsScene(NetworkHandle * network);
00153                 virtual ~GraphicsScene();
00154 
00155         public:
00159                 virtual void enableGrid(int sz=100);
00162                 virtual void disableGrid();
00166                 virtual void setGridSize(int sz=100);
00169                 virtual int gridSize() const;
00174                 virtual void addItem(QGraphicsItem * item);
00178                 virtual void centerOn(const QPointF& point) const;
00181                 virtual void clearSelection();
00186                 virtual void print(QPaintDevice* printer,const QRectF& rect = QRectF());
00190                 virtual void select(QGraphicsItem* item);
00194                 virtual void select(const QList<QGraphicsItem*>& item);
00198                 virtual void deselect(QGraphicsItem* item);
00200                 virtual void showToolTip(QPointF,const QString&);
00201         
00202         public slots:
00205                 virtual void fitAll() const;
00209                 virtual void fitInView(const QRectF&) const;
00213                 virtual QRect mapToWidget(QRectF rect=QRectF(0,0,0,0)) const;
00216                 virtual void popOut();
00219                 virtual void popIn();
00223                 virtual void zoom(qreal scaleFactor);
00226                 virtual void zoomIn();
00230                 virtual void zoomOut();
00232                 virtual void selectAll();
00234                 virtual void find(const QString&, bool clearSelected = true);
00236                 virtual void find(const QStringList&);
00239                 virtual void deselect();
00241                 virtual void copy();
00243                 virtual void cut();
00245                 virtual void paste();
00246                 
00252                 virtual void move(QGraphicsItem * item, const QPointF& distance);
00258                 virtual void move(const QList<QGraphicsItem*>& items, const QPointF& distance);
00264                 virtual void move(const QList<QGraphicsItem*>& items, const QList<QPointF>& distance);
00270                 virtual void insert(const QString& name, QGraphicsItem * item, InsertType type=NEW);
00272                 virtual void insert(const QString& name, const QList<QGraphicsItem*>& items, InsertType type=NEW);
00274                 virtual void remove(const QString& name, QGraphicsItem * item);
00276                 virtual void remove(const QString& name, const QList<QGraphicsItem*>& items);
00278                 virtual void removeSelected();
00280                 virtual void setBrush(const QString& name, QGraphicsItem * item, const QBrush& to);
00282                 virtual void setBrush(const QString& name, const QList<QGraphicsItem*>& items, const QList<QBrush>& to);
00284                 virtual  void setZValue(const QString& name, QGraphicsItem * item, qreal to);
00286                 virtual  void setZValue(const QString& name, const QList<QGraphicsItem*>& items, const QList<qreal>& to);
00288                 virtual  void setPen(const QString& name, QGraphicsItem * item, const QPen& to);
00290                 virtual  void setPen(const QString& name, const QList<QGraphicsItem*>& items, const QList<QPen>& to);
00292                 virtual  void setBrushAndPen(const QString& name, QGraphicsItem * item, const QBrush& brush, const QPen& pen);
00294                 virtual  void setBrushAndPen(const QString& name, const QList<QGraphicsItem*>& items, const QList<QBrush>& brushes, const QList<QPen>& pens);
00296                 virtual  void transform(const QString& name, QGraphicsItem * item,
00297                         const QPointF& sizechange,
00298                         qreal anglechange=0.0,
00299                         bool VFlip=false, bool HFlip=false);
00301                 virtual void transform(const QString& name, const QList<QGraphicsItem *>& items,
00302                         const QList<QPointF>& sizechange,
00303                         const QList<qreal>& anglechange=QList<qreal>(),
00304                         const QList<bool>& verticalFlip=QList<bool>(), 
00305                         const QList<bool>& horizontalFlip=QList<bool>());
00307                 virtual  void setParentItem(const QString& name, QGraphicsItem * item, QGraphicsItem * newParent);
00309                 virtual  void setParentItem(const QString& name, const QList<QGraphicsItem*>& items, QGraphicsItem * newParent);
00311                 virtual  void setParentItem(const QString& name, const QList<QGraphicsItem*>& items, const QList<QGraphicsItem*>& newParents);
00312                 
00313         signals:
00319                 void copyItems(GraphicsScene * scene, QList<QGraphicsItem*>& , QList<ItemHandle*>& );
00326                 void itemsAboutToBeRemoved(GraphicsScene * scene, QList<QGraphicsItem*>& , QList<ItemHandle*>& , QList<QUndoCommand*>& );
00332                 void itemsRemoved(GraphicsScene * scene, const QList<QGraphicsItem*>& , const QList<ItemHandle*>& );
00340                 void itemsAboutToBeInserted(GraphicsScene * scene, QList<QGraphicsItem*>& , QList<ItemHandle*>& , QList<QUndoCommand*>&, GraphicsScene::InsertType type=NEW);
00347                 void itemsInserted(GraphicsScene * scene, const QList<QGraphicsItem*>& , const QList<ItemHandle*>& , GraphicsScene::InsertType type=NEW);
00354                 void itemsSelected(GraphicsScene * scene, const QList<QGraphicsItem*>& items, QPointF point, Qt::KeyboardModifiers modifiers);
00361                 void mousePressed(GraphicsScene * scene, QPointF point, Qt::MouseButton, Qt::KeyboardModifiers modifiers);
00368                 void mouseReleased(GraphicsScene * scene, QPointF point, Qt::MouseButton, Qt::KeyboardModifiers modifiers);
00374                 void mouseDoubleClicked (GraphicsScene * scene, QPointF point, QGraphicsItem *, Qt::MouseButton, Qt::KeyboardModifiers modifiers);
00382                 void mouseDragged(GraphicsScene * scene, QPointF from, QPointF to, Qt::MouseButton, Qt::KeyboardModifiers modifiers);
00390                 void itemsAboutToBeMoved(GraphicsScene * scene, QList<QGraphicsItem*>& item, QList<QPointF>& distance, QList<QUndoCommand*>&);
00397                 void itemsMoved(GraphicsScene * scene, const QList<QGraphicsItem*>& item, const QList<QPointF>& distance);
00406                 void mouseMoved(GraphicsScene * scene, QGraphicsItem* item, QPointF point, Qt::MouseButton, Qt::KeyboardModifiers modifiers, QList<QGraphicsItem*>&);
00414                 void mouseOnTopOf(GraphicsScene * scene, QGraphicsItem* item, QPointF point, Qt::KeyboardModifiers modifiers, QList<QGraphicsItem*>&);
00421                 void sceneRightClick(GraphicsScene * scene, QGraphicsItem* item, QPointF point, Qt::KeyboardModifiers modifiers);
00426                 void keyPressed(GraphicsScene * scene, QKeyEvent *);
00431                 void keyReleased(GraphicsScene * scene, QKeyEvent *);
00435                 void escapeSignal(const QWidget * sender);
00439                 void filesDropped(const QList<QFileInfo>& files);
00444                 void colorChanged(GraphicsScene * scene, const QList<QGraphicsItem*>& items);
00450                 void parentItemChanged(GraphicsScene * scene, const QList<QGraphicsItem*>& items, const QList<QGraphicsItem*>& parents);
00451 
00452         protected:
00454                 bool _useDefaultBehavior;
00456                 int gridSz;
00458                 qreal lastZ;
00460                 bool contextMenuJustActivated;
00462                 QGraphicsRectItem selectionRect;
00464                 QList<QGraphicsItem*> toolTips;
00466                 static QList<QGraphicsItem*> duplicateItems;
00468                 static GraphicsScene * copiedFromScene;
00470                 static void clearStaticItems();
00472                 QPointF clickedPoint;
00474                 QPoint clickedScreenPoint;
00476                 Qt::MouseButton clickedButton;
00478                 bool mouseDown;
00480                 QList<QGraphicsItem*> selectedItems;
00482                 QList<ToolGraphicsItem*> visibleTools;
00484                 QList<QGraphicsItem*> movingItems;
00486                 QGraphicsItemGroup * movingItemsGroup;
00488                 virtual void hideToolTips();
00490                 virtual void hideGraphicalTools();
00492                 virtual void showGraphicalTools();
00494                 virtual void scaleGraphicalTools();
00498                 virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
00502                 virtual void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * mouseEvent );
00506                 virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent);
00510                 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * mouseEvent);
00514                 virtual void keyPressEvent (QKeyEvent * event);
00518                 virtual void keyReleaseEvent (QKeyEvent * event);
00522                 virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * contextMenuEvent );
00525                 virtual void populateContextMenu();
00527                 virtual void drawBackground ( QPainter * painter, const QRectF & rect );
00529                 virtual void selectConnections(const QPointF&);
00530 
00531         public:
00535                 virtual void snapToGrid(QGraphicsItem*);
00536                 
00537 
00538                 friend class MainWindow;
00539                 friend class NetworkWindow;
00540                 friend class NetworkHandle;
00541                 friend class GraphicsView;
00542                 friend class SymbolsTable;
00543         };
00544 }
00545 
00546 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines