37e95fb672349758cfda17ab125608ec81fbf3e7
[mussa.git] / qui / seqbrowser / SequenceBrowser.hpp
1 #ifndef _PATHSCENE_H_
2 #define _PATHSCENE_H_
3
4 #include <QAction>
5 #include <QGLWidget>
6 #include <QMenu>
7 #include <QRectF>
8 #include <QPoint>
9
10 #include <vector>
11 #include <set>
12
13 #include <boost/shared_ptr.hpp>
14
15 #include "alg/mussa.hpp"
16 #include "alg/glsequence.hpp"
17 #include "alg/glseqbrowser.hpp"
18 #include "qui/seqbrowser/seqproperties/PropertiesWindow.hpp"
19
20 class QMouseEvent;
21 class QRubberBand;
22
23 /*! \brief Render mussa sequences and paths 
24  */
25 class SequenceBrowser: public QGLWidget, public GlSeqBrowser
26 {
27   Q_OBJECT
28
29 public: 
30   SequenceBrowser(QWidget *parent=0);
31   SequenceBrowser(const SequenceBrowser&, QWidget *parent=0);
32
33   QSize sizeHint() const;
34   void clear();
35   void push_sequence(boost::shared_ptr<Sequence> s);
36   void push_sequence(boost::shared_ptr<GlSequence>);
37
38   //! return the popup menu for the glcanvas (reference stored internally)
39   QMenu *getPopupMenu();
40   //! return our copy action (reference stored internally)
41   QAction *getCopySelectedSequenceAsFastaAction();
42   //! return reference to copy sequence action
43   QAction *getCopySelectedSequenceAsStringAction();
44
45 public slots:
46   void copySelectedSequenceAsFasta();
47   void copySelectedSequenceAsString();
48   void displayContextMenu(const QPoint &p);
49   void editSequenceProperties();
50   void setClipPlane(int z);
51   //! set the center of the current viewport
52   void setViewportCenter(float x);
53   //! set our magnification level
54   void setZoom(double);
55
56 signals:
57   //! emited when someone adds to our list of tracks
58   void tracksChanged();
59   void viewportChanged();
60   //! emit when someone copies basepairs
61   void basepairsCopied(size_t);
62
63 protected:
64   void initializeGL();
65   void resizeGL(int height, int width);
66   void paintGL();
67
68   //! \defgroup Selection
69   /* \@{ */
70   QRubberBand *rubberBand;
71   QPoint bandOrigin;
72   QRect selectedDisplayRegion;
73   QRect selectedCanvasRegion;
74   void mousePressEvent(QMouseEvent *);
75   void mouseMoveEvent(QMouseEvent *);
76   void mouseReleaseEvent(QMouseEvent *);
77
78   void startSelecting(QMouseEvent *);
79   void stopSelecting(QMouseEvent *);
80   /* \@} */
81
82   QMenu *popupMenu;
83   QAction *copySelectedSequenceAsFastaAction;
84   QAction *copySelectedSequenceAsStringAction;
85   QAction *editSequencePropertiesAction;
86   PropertiesWindowRef properties;
87 };
88 #endif