Store Sequence sequence location in a shared_ptr class
[mussa.git] / qui / seqbrowser / SequenceDescription.cpp
index 80dfa8f8a93ad683fc557811f100c1b598c3774f..f3f19116f044da5b82a733e3c1fbd8ed35fe7737 100644 (file)
@@ -1,14 +1,17 @@
-#include <QVBoxLayout>
 #include "qui/seqbrowser/SequenceDescription.hpp"
 
 using namespace std;
 
 SequenceDescription::SequenceDescription(QWidget *parent)
-  : QFrame(parent), 
+  : QFrame(parent),
+    layout(0),
+    name_label(0),
+    position_label(0),
+    length_label(0),
     pos(-1) // set pos to an invalid value so the setPos function will call
             // setText
 {
-  createWidget();
+  setupWidgets();
 }
 
 SequenceDescription::SequenceDescription(
@@ -16,21 +19,34 @@ SequenceDescription::SequenceDescription(
     QWidget *parent
 ) : QFrame(parent) 
 {
+  setupWidgets();
   setGlSequence(glseq);  
 }
 
-void SequenceDescription::createWidget()
+void SequenceDescription::setupWidgets()
 {
+  layout = new QVBoxLayout;
+  name_label = new QLineEdit;
+  position_label = new QLabel;
+  length_label = new QLabel;
+  
   setFrameStyle(QFrame::Panel | QFrame::Sunken);
   setLineWidth(1);
-  QLayout *layout = new QVBoxLayout;
-  layout->addWidget(&name_label);
-  layout->addWidget(&length_label);
-  layout->addWidget(&position_label);
-  name_label.setMaximumWidth(length_label.fontMetrics().width("01234567"));
-  setLayout(layout);
 
-  connect(&name_label, SIGNAL(textChanged(const QString& )),
+  // What's this feature descriptions
+  // FIXME: The extra space is added because for some reason
+  // Qt's whatsthis feature is chopping off the last word
+  // under linux.
+  name_label->setWhatsThis("Name of sequence ");
+  position_label->setWhatsThis("Edge of viewport base pair position ");
+  length_label->setWhatsThis("Total length of sequence ");
+  
+  layout->addWidget(name_label);
+  layout->addWidget(position_label);
+  layout->addWidget(length_label);
+  name_label->setMaximumWidth(length_label->fontMetrics().width("01234567"));
+  setLayout(layout);
+  connect(name_label, SIGNAL(textChanged(const QString& )),
           this, SLOT(setName(const QString& )));
 }
 
@@ -39,8 +55,8 @@ void SequenceDescription::setGlSequence(
 {
   if (glseq != glsequence_) {
     glsequence_ = glseq;
-    setName(glsequence_->sequence()->get_species());
-    setLength(glsequence_->sequence()->length());
+    setName(glsequence_->get_species());
+    setLength(glsequence_->size());
     emit glsequenceChanged(glsequence_);
   }
 }
@@ -59,21 +75,22 @@ void SequenceDescription::setName(const QString& name_)
 {
   std::string std_name_ = name_.toStdString();
 
-  if (std_name_ != glsequence_->sequence()->get_species()) {
-    glsequence_->sequence()->set_species(std_name_);
+  if (std_name_ != glsequence_->get_species()) {
+    glsequence_->set_species(std_name_);
     emit nameChanged(name_);
   }
 
     // no need to setText again if its because of user editing
-  if (name_ != name_label.text()) {
-    name_label.setText(name_);
+  if (name_ != name_label->text()) {
+    name_label->setText(name_);
+    name_label->setCursorPosition(0);
   }
 }
 
 std::string SequenceDescription::name() const 
 { 
   if (glsequence_) 
-    return glsequence_->sequence()->get_species();
+    return glsequence_->get_species();
   else
     return string("");
 }
@@ -94,7 +111,7 @@ void SequenceDescription::setLength(int length)
     s.setNum(short_length);
     s += "b";
   }
-  length_label.setText(s);
+  length_label->setText(s);
 }
 
 int SequenceDescription::length() const 
@@ -102,7 +119,7 @@ int SequenceDescription::length() const
   return 0;
 
   if (glsequence_)
-    return glsequence_->sequence()->size();
+    return glsequence_->size();
   else
     return 0;
 }
@@ -112,7 +129,7 @@ void SequenceDescription::setPosition(int pos_)
   QString s; 
   if (pos != pos_) {
     pos = pos_;
-    position_label.setText(s.setNum(pos_));
+    position_label->setText(s.setNum(pos_));
     emit positionChanged(pos);
   }
 }