00001 00002 #ifndef ROSEGRAPHICSVIEW_H 00003 #define ROSEGRAPHICSVIEW_H 00004 00005 00006 #include <QGraphicsView> 00007 #include <QMimeData> 00008 00009 class SgNode; 00010 class AstFilterInterface; 00011 00017 class RoseGraphicsView : public QGraphicsView 00018 { 00019 Q_OBJECT 00020 00021 Q_PROPERTY(bool SgDragEnabled READ isSgDragEnabled WRITE setSgDragEnabled); 00022 Q_PROPERTY(bool SgDropEnabled READ isSgDropEnabled WRITE setSgDropEnabled); 00023 00024 00025 public: 00026 RoseGraphicsView(QWidget * parent=0); 00027 virtual ~RoseGraphicsView(); 00028 00029 void setSgDragEnabled(bool b) { dragEnabled= b; } 00030 void setSgDropEnabled(bool b) { dropEnabled= b; } 00031 00032 bool isSgDragEnabled() const { return dragEnabled; } 00033 bool isSgDropEnabled() const { return dropEnabled; } 00034 00035 00036 public slots: 00037 void setNode(SgNode * sgNode); 00038 00039 // TODO: implement proper goto mechanism 00040 void gotoNode( SgNode *sgNode ) 00041 { setNode( sgNode ); } 00042 00043 void setFilter(AstFilterInterface * filter); 00044 void setFileFilter(int id); 00045 00046 00047 signals: 00048 void nodeActivated(SgNode * node); 00049 void nodeActivatedAlt(SgNode * node); 00050 void clicked(const QString & filename, int line, int column); 00051 void nodeDropped(SgNode * node, QPoint pos); 00052 00053 00054 protected: 00055 00058 virtual void updateGraph(SgNode * node, AstFilterInterface * filter)= 0; 00059 00060 00061 00062 // Zoom 00063 virtual void wheelEvent(QWheelEvent *event); 00064 virtual void scaleView(qreal scaleFactor); 00065 virtual void mousePressEvent(QMouseEvent *event); 00066 00067 // Drop & Drop 00068 virtual void dragEnterEvent(QDragEnterEvent * ev); 00069 virtual void dropEvent(QDropEvent *ev); 00070 virtual void dragMoveEvent( QDragMoveEvent * ev); 00071 virtual void mouseMoveEvent(QMouseEvent *event); 00072 00073 virtual bool acceptMimeData( const QMimeData *mimeData ); 00074 virtual void handleMimeData( const QMimeData *mimeData, const QPoint& pos ); 00075 00076 00077 //Drag and drop members 00078 QPoint dragStartPosition; 00079 bool dragEnabled; 00080 bool dropEnabled; 00081 00082 00083 private: 00084 AstFilterInterface * curFilter; 00085 SgNode * curNode; 00086 00087 }; 00088 00089 00090 00091 #endif
1.4.7