Allow changing the name for a sequence in the sequence browser.
[mussa.git] / qui / seqbrowser / SequenceBrowserWidget.cpp
index 0f396f2f27126eebe48eb6778e273e76dba75572..ef3db3309334530d1b1b43e9e60238c58f7f46bd 100644 (file)
@@ -65,7 +65,7 @@ void SequenceBrowserWidget::copySelectedTracksAsSeqLocation(
 }
 
 void SequenceBrowserWidget::setSequences(
-    const std::vector< boost::shared_ptr<Sequence> >& sequences,
+    const std::vector<boost::shared_ptr<Sequence> >& sequences,
     boost::shared_ptr<AnnotationColors> cm)
 {
   SequenceBrowser& browser = scrollable_browser.browser();
@@ -75,19 +75,33 @@ void SequenceBrowserWidget::setSequences(
       ++seq_i)
   {
     boost::shared_ptr<GlSequence> gs(new GlSequence(*seq_i, cm));
-    converted_sequences.push_back(*gs);
-    browser.push_sequence(*gs);
+    converted_sequences.push_back(gs);
+    browser.push_sequence(gs);
   }
   left_sidebar.setSequences(converted_sequences);
   right_sidebar.setSequences(converted_sequences);
+
+  // connect the text change signals to each other
+  vector<SequenceDescription *> left = left_sidebar.descriptions;
+  vector<SequenceDescription *> right = right_sidebar.descriptions;
+  for(size_t i = 0; i != sequences.size() and i != right.size(); ++i)
+  {
+    connect(left[i], SIGNAL(nameChanged(const QString &)),
+            right[i], SLOT(setName(const QString &)));
+    connect(right[i], SIGNAL(nameChanged(const QString &)),
+            left[i], SLOT(setName(const QString &)));
+  }
+
   updatePosition();
 }
 
-void SequenceBrowserWidget::setSequences(std::vector<GlSequence>& sequences)
+void SequenceBrowserWidget::setSequences(
+  std::vector<boost::shared_ptr<GlSequence> >& sequences
+)
 {
   SequenceBrowser& browser = scrollable_browser.browser();
   clear();
-  for(vector<GlSequence>::iterator seq_i = sequences.begin();
+  for(vector<boost::shared_ptr<GlSequence> >::iterator seq_i = sequences.begin();
       seq_i != sequences.end();
       ++seq_i)
   {
@@ -98,7 +112,7 @@ void SequenceBrowserWidget::setSequences(std::vector<GlSequence>& sequences)
   updatePosition();
 }
 
-const vector<GlSequence>& SequenceBrowserWidget::sequences() const
+const vector<boost::shared_ptr<GlSequence> >& SequenceBrowserWidget::sequences() const
 {
   return scrollable_browser.browser().sequences();
 }
@@ -140,13 +154,13 @@ void SequenceBrowserWidget::centerOnPath(const vector<int>& paths)
 void SequenceBrowserWidget::updatePosition()
 {
   const SequenceBrowser& browser = scrollable_browser.browser();
-  const vector<GlSequence> &sequences = browser.sequences();
+  const vector<boost::shared_ptr<GlSequence> > &sequences = browser.sequences();
   vector<SequenceDescription *> left = left_sidebar.descriptions;
   vector<SequenceDescription *> right = right_sidebar.descriptions;
   for(size_t i = 0; i != sequences.size() and i != right.size(); ++i)
   {
-    left[i]->setPosition(sequences[i].leftbase(browser.viewportLeft()));
-    right[i]->setPosition(sequences[i].rightbase(browser.viewportRight()));
+    left[i]->setPosition(sequences[i]->leftbase(browser.viewportLeft()));
+    right[i]->setPosition(sequences[i]->rightbase(browser.viewportRight()));
   }
   scrollable_browser.browser().update();
   scrollable_browser.updateScrollBar();