9da5e8cb723a4e8bd3da2397397ec2ee048a9998
[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 copy sequence action
43   QAction *getCopySelectedSequenceAsStringAction();
44   //! return view sequence properties action
45   QAction *getEditSequencePropertiesAction();
46
47 public slots:
48   void copySelectedSequenceAsFasta();
49   void copySelectedSequenceAsString();
50   void displayContextMenu(const QPoint &p);
51   void editSequenceProperties();
52   void setClipPlane(int z);
53   //! set the center of the current viewport
54   void setViewportCenter(float x);
55   //! set our magnification level
56   void setZoom(double);
57
58 signals:
59   //! emited when someone adds to our list of tracks
60   void tracksChanged();
61   void viewportChanged();
62   //! emit when someone copies basepairs
63   void basepairsCopied(size_t);
64
65 protected:
66   void initializeGL();
67   void resizeGL(int height, int width);
68   void paintGL();
69
70   //! \defgroup Selection
71   /* \@{ */
72   QRubberBand *rubberBand;
73   QPoint bandOrigin;
74   QRect selectedDisplayRegion;
75   QRect selectedCanvasRegion;
76   void mousePressEvent(QMouseEvent *);
77   void mouseMoveEvent(QMouseEvent *);
78   void mouseReleaseEvent(QMouseEvent *);
79
80   void startSelecting(QMouseEvent *);
81   void stopSelecting(QMouseEvent *);
82   /* \@} */
83
84   QMenu *popupMenu;
85   QAction *copySelectedSequenceAsFastaAction;
86   QAction *copySelectedSequenceAsStringAction;
87   QAction *editSequencePropertiesAction;
88   PropertiesWindowRef properties;
89 };
90 #endif