add prototype wrapping of the qt sequence browser
[mussa.git] / qui / seqbrowser / SequenceBrowserWidget.hpp
index 55d55f931dec54398874439ee60d4784282df388..8f957c76a1d975198205103a71f67a60266ec5f8 100644 (file)
@@ -1,9 +1,13 @@
 #ifndef _PATH_WIDGET_H_
 #define _PATH_WIDGET_H_
-
 #include <vector>
 
-#include <QSplitter>
+#include <boost/shared_ptr.hpp>
+
+#include <QDir>
+#include <QScrollArea>
+#include <QSize>
+#include <QWidget>
 
 #include "alg/sequence.hpp"
 #include "alg/glsequence.hpp"
 #include "qui/seqbrowser/SequenceBrowserSidebar.hpp"
 
 //! the master widget that makes a useful Sequence Browser
-class SequenceBrowserWidget : public QSplitter
+class SequenceBrowserWidget : public QScrollArea 
 {
   Q_OBJECT 
 
 public:
   SequenceBrowserWidget(QWidget *parent=0);
+  SequenceBrowserWidget(const SequenceBrowserWidget &);
+  SequenceBrowserWidget(boost::shared_ptr<QDir>, QWidget *parent=0);
+
+  //! return our wrapped browser, so we can test it.
+  SequenceBrowser& browser() { return scrollable_browser->browser(); }
+  
+  //! return the popup menu for the glcanvas (reference stored internally)
+  QMenu *getPopupMenu();
+  //! return our fasta copy action (reference stored internally)
+  QAction *getCopySelectedSequenceAsFastaAction();
+  //! return our string copy action (reference stored internally)
+  QAction *getCopySelectedSequenceAsStringAction();
+  //! return sequence properties edit action
+  QAction *getEditSequencePropertiesAction();
+
+  QSize sizeHint() const;
+    
+  //! copy selected track regions into a list of SequenceLocations
+  void copySelectedTracksAsSeqLocation(std::list<SequenceLocation>& );
+
+  //! return current zoom size
+  double zoom();
 
-  //SequenceBrowser& browser() { return scrollable_browser.browser(); }
   //! reset all of our stored data back to the empty state
   void clear();
 
@@ -28,10 +52,11 @@ public:
    * as it draw and redraws the SequenceDescriptions in the various
    * positions.
    */
-  //void push_sequences(std::vector<Sequence>& sequences);
-  void setSequences(const std::vector<Sequence>& sequences, AnnotationColors& cm);
-  void setSequences(std::vector<GlSequence>& sequences);
-  const std::vector<GlSequence>& sequences() const;
+  void setSequences(
+      const std::vector< boost::shared_ptr<Sequence> >& sequences, 
+      boost::shared_ptr<AnnotationColors> cm);
+  void setSequences(std::vector<boost::shared_ptr<GlSequence> >& sequences);
+  const std::vector<boost::shared_ptr<GlSequence> >& sequences() const;
 
   //! reset just the links we're displaying
   void clear_links();
@@ -42,21 +67,42 @@ public:
   void centerOnPath(const std::vector<int>& paths);
  
 public slots:
+  //! copy selected sequence
+  void copySelectedSequenceAsFasta();
+
   //! set the zoom level of our browser
-  void setZoom(int);
+  void setZoom(double);
+  //! zoom to fit the whole scene on the screen
+  double zoomOut();
+  //! zoom to sequence
+  double zoomToSequence();
 
   void updatePosition();
   //! ask the user where to save an image of the current browser view
   void promptSaveBrowserPixmap();
 
+  void update();
+  
+signals:
+  //! emit when someone copies basepairs
+  void basepairsCopied(size_t);
+  //! emit when sequence browser alerts this widget of mouse wheel zoom event
+  void mouseWheelZoom(double);
+  
 private:
-  ScrollableSequenceBrowser scrollable_browser;
-  SequenceBrowserSidebar left_sidebar;
-  SequenceBrowserSidebar right_sidebar;
+  boost::shared_ptr<QDir> default_dir;
+  ScrollableSequenceBrowser *scrollable_browser;
+  SequenceBrowserSidebar *left_sidebar;
+  SequenceBrowserSidebar *right_sidebar;
+  QHBoxLayout *layout;
+  QWidget *layout_container;
 
   //! sequences created by a setSequences(vector<Sequences>) call
   /*! I need to save them so i can free them to avoid a memory leak 
    */
-  std::vector<GlSequence> converted_sequences;
+  std::vector<GlSequenceRef > converted_sequences;
+
+  //! shared code for constructors
+  void init();
 };
 #endif