add prototype wrapping of the qt sequence browser
[mussa.git] / qui / seqbrowser / SequenceBrowserWidget.cpp
index c10136ec090c2922029e6366a19beff23f702a53..34c7a9a14067f690eb35b82967726c6d7890232e 100644 (file)
 #include <math.h>
 using namespace std;
 
+SequenceBrowserWidget::SequenceBrowserWidget(
+    QWidget *parent)
+  : QScrollArea(parent),
+    left_sidebar(0),
+    scrollable_browser(0),
+    right_sidebar(0),
+    layout(0),
+    layout_container(0)
+{
+  boost::shared_ptr<QDir> empty_dir(new QDir);
+  default_dir = empty_dir;
+
+  init();
+}
+
 SequenceBrowserWidget::SequenceBrowserWidget(
     boost::shared_ptr<QDir> default_dir_,
     QWidget *parent
@@ -31,6 +46,11 @@ SequenceBrowserWidget::SequenceBrowserWidget(
 {
   default_dir = default_dir_;
 
+  init();
+}
+
+void SequenceBrowserWidget::init()
+{
   layout_container = new QWidget(this);
   layout = new QHBoxLayout(layout_container);
   left_sidebar = new SequenceBrowserSidebar(layout_container);
@@ -50,6 +70,21 @@ SequenceBrowserWidget::SequenceBrowserWidget(
           this, SLOT(updatePosition()));
   connect(&(scrollable_browser->browser()), SIGNAL(basepairsCopied(size_t)),
           this, SIGNAL(basepairsCopied(size_t)));
+  
+  // Send the signal mouseWheelZoom signal from seq browser upward.
+  connect(&(scrollable_browser->browser()), SIGNAL(mouseWheelZoom(double)),
+          this, SIGNAL(mouseWheelZoom(double)));
+}
+
+
+SequenceBrowserWidget::SequenceBrowserWidget(const SequenceBrowserWidget &o)
+  : QScrollArea(o.window()),
+    left_sidebar(o.left_sidebar),
+    scrollable_browser(o.scrollable_browser),
+    right_sidebar(o.right_sidebar),
+    layout(o.layout),
+    layout_container(o.layout_container)
+{
 }
 
 QSize SequenceBrowserWidget::sizeHint() const
@@ -70,7 +105,6 @@ QSize SequenceBrowserWidget::sizeHint() const
   return QSize(width, center.height());
 }
 
-
 void SequenceBrowserWidget::clear()
 {
   converted_sequences.clear();
@@ -122,17 +156,17 @@ void SequenceBrowserWidget::copySelectedTracksAsSeqLocation(
 }
 
 void SequenceBrowserWidget::setSequences(
-    const std::vector<boost::shared_ptr<Sequence> >& sequences,
-    boost::shared_ptr<AnnotationColors> cm)
+    const std::vector<SequenceRef >& new_sequences,
+    AnnotationColorsRef cm)
 {
   SequenceBrowser& browser = scrollable_browser->browser();
   clear();
-  for(Mussa::vector_sequence_type::const_iterator seq_i = sequences.begin();
-      seq_i != sequences.end();
+  for(Mussa::vector_sequence_type::const_iterator seq_i = new_sequences.begin();
+      seq_i != new_sequences.end();
       ++seq_i)
   {
     // Blech *(*seq_i) is dereferencing the shared_ptr stored in the iterator.
-    boost::shared_ptr<GlSequence> gs(new GlSequence(*(*seq_i), cm));
+    boost::shared_ptr<GlSequence> gs(new GlSequence(*seq_i, cm));
     converted_sequences.push_back(gs);
     browser.push_sequence(gs);
   }
@@ -142,7 +176,7 @@ void SequenceBrowserWidget::setSequences(
   // connect the text change signals to each other
   SequenceBrowserSidebar::collection left = left_sidebar->descriptions;
   SequenceBrowserSidebar::collection right = right_sidebar->descriptions;
-  for(size_t i = 0; i != sequences.size() and i != right.size(); ++i)
+  for(size_t i = 0; i != new_sequences.size() and i != right.size(); ++i)
   {
     connect(left[i], SIGNAL(nameChanged(const QString &)),
             right[i], SLOT(setName(const QString &)));