![]() |
TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
|
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