QSplitter has rendering problems on os x
[mussa.git] / qui / seqbrowser / SequenceBrowserWidget.hpp
1 #ifndef _PATH_WIDGET_H_
2 #define _PATH_WIDGET_H_
3
4 #include <vector>
5
6 #include <QWidget>
7
8 #include "alg/sequence.hpp"
9 #include "alg/glsequence.hpp"
10 #include "qui/seqbrowser/ScrollableSequenceBrowser.hpp"
11 #include "qui/seqbrowser/SequenceBrowserSidebar.hpp"
12
13 //! the master widget that makes a useful Sequence Browser
14 class SequenceBrowserWidget : public QWidget 
15 {
16   Q_OBJECT 
17
18 public:
19   SequenceBrowserWidget(QWidget *parent=0);
20
21   //! return current zoom size
22   double zoom();
23
24   //! reset all of our stored data back to the empty state
25   void clear();
26
27   /* Attach sequences to our browser, its best to attach them all
28    * at once, as otherwise the Sidebar has some rendering trouble
29    * as it draw and redraws the SequenceDescriptions in the various
30    * positions.
31    */
32   //void push_sequences(std::vector<Sequence>& sequences);
33   void setSequences(const std::vector<Sequence>& sequences, AnnotationColors& cm);
34   void setSequences(std::vector<GlSequence>& sequences);
35   const std::vector<GlSequence>& sequences() const;
36
37   //! reset just the links we're displaying
38   void clear_links();
39   //! set per species links
40   void link(const std::vector<int> &path, const std::vector<bool>& isRC, int length);
41   // return set of pathids defined by order of link calls
42   const std::set<int> selectedPaths() const;
43   void centerOnPath(const std::vector<int>& paths);
44  
45 public slots:
46   //! set the zoom level of our browser
47   void setZoom(double);
48   //! zoom to fit the whole scene on the screen
49   double zoomOut();
50   //! zoom to sequence
51   double zoomToSequence();
52
53   void updatePosition();
54   //! ask the user where to save an image of the current browser view
55   void promptSaveBrowserPixmap();
56
57   void update();
58
59 private:
60   ScrollableSequenceBrowser scrollable_browser;
61   SequenceBrowserSidebar left_sidebar;
62   SequenceBrowserSidebar right_sidebar;
63
64   //! sequences created by a setSequences(vector<Sequences>) call
65   /*! I need to save them so i can free them to avoid a memory leak 
66    */
67   std::vector<GlSequence> converted_sequences;
68 };
69 #endif