fix problems with motif changes not showing up in sequencebrowser
[mussa.git] / qui / seqbrowser / SequenceBrowserWidget.cpp
index f0f0b4432385e6c55a5b1398e6be5597ba779253..7ccf966ab9962ea57cfb663a1ee791c264c5d3a5 100644 (file)
@@ -22,19 +22,29 @@ SequenceBrowserWidget::SequenceBrowserWidget(
     boost::shared_ptr<QDir> default_dir_,
     QWidget *parent
 )
-  : QWidget(parent),
-    default_dir(default_dir_),
-    left_sidebar(new SequenceBrowserSidebar),
-    scrollable_browser(new ScrollableSequenceBrowser),
-    right_sidebar(new SequenceBrowserSidebar),
-    layout(new QHBoxLayout)
+  : QScrollArea(parent),
+    left_sidebar(0),
+    scrollable_browser(0),
+    right_sidebar(0),
+    layout(0),
+    layout_container(0)
 {
+  default_dir = default_dir_;
+
+  layout_container = new QWidget(this);
+  layout = new QHBoxLayout(layout_container);
+  left_sidebar = new SequenceBrowserSidebar(layout_container);
+  scrollable_browser = new ScrollableSequenceBrowser(layout_container);
+  right_sidebar = new SequenceBrowserSidebar(layout_container);
+  
   layout->addWidget(left_sidebar, 0);
   layout->addWidget(scrollable_browser, 1);
   layout->addWidget(right_sidebar, 0);
-
-  setLayout(layout);
-
+  
+  layout_container->setLayout(layout);
+  setWidget(layout_container);
+  setWidgetResizable(true);
+  
   // update position values when something in the SequenceBrowser changes
   connect(&(scrollable_browser->browser()), SIGNAL(viewportChanged()),
           this, SLOT(updatePosition()));
@@ -60,7 +70,6 @@ QSize SequenceBrowserWidget::sizeHint() const
   return QSize(width, center.height());
 }
 
-
 void SequenceBrowserWidget::clear()
 {
   converted_sequences.clear();
@@ -94,6 +103,11 @@ QAction *SequenceBrowserWidget::getCopySelectedSequenceAsFastaAction()
   return scrollable_browser->browser().getCopySelectedSequenceAsFastaAction();
 }
 
+QAction *SequenceBrowserWidget::getEditSequencePropertiesAction()
+{
+  return scrollable_browser->browser().getEditSequencePropertiesAction();
+}
+
 void SequenceBrowserWidget::copySelectedSequenceAsFasta()
 {
   scrollable_browser->browser().copySelectedSequenceAsFasta();
@@ -107,15 +121,16 @@ 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));
     converted_sequences.push_back(gs);
     browser.push_sequence(gs);
@@ -126,7 +141,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 &)));