render sequence correctly in mussa aligned window
authorDiane Trout <diane@caltech.edu>
Sun, 19 Mar 2006 02:32:41 +0000 (02:32 +0000)
committerDiane Trout <diane@caltech.edu>
Sun, 19 Mar 2006 02:32:41 +0000 (02:32 +0000)
My math for locating a sequence when seq_x moved was wrong, so I was
drawing the sequence in some weird off the wall place.

alg/glseqbrowser.cpp
alg/glseqbrowser.hpp
alg/glsequence.cpp
qui/MussaAlignedWindow.cpp
qui/MussaAlignedWindow.hpp
qui/seqbrowser/SequenceBrowserWidget.cpp
qui/seqbrowser/SequenceBrowserWidget.hpp

index 386b5f6f5d4d4fd04c4da49002a8604dc2823a71..147f36c04a84bea08009a37f6358da26c8d425ef 100644 (file)
@@ -256,7 +256,13 @@ int GlSeqBrowser::zoomOut()
     return 5000;
   }
 }
-
+int GlSeqBrowser::zoomToSequence()
+{
+  // (experimentally determined zoom level)
+  const int friendly_zoom = 7;
+  setZoom(friendly_zoom);
+  return friendly_zoom;
+}
 void GlSeqBrowser::setZoom(int new_zoom)
 {
   update_viewport(viewport_center, new_zoom);
index 36a17c821a89a875f78f4f07ce8ea3730565ba1b..fe5423c7a0ff83707e7c93743a054a3e074d8c0a 100644 (file)
@@ -43,6 +43,8 @@ public:
 
   //! zoom out far enough to show the full size of the sequence
   int zoomOut();
+  //! zoom in to a reasonable sequence view
+  int zoomToSequence();
   //! set the current zoom level in (base pairs / pix ) * 100
   /*! a zoomlevel of 1 is .01 base pairs per pixel or a rather exploded
    *  100 pixels per base pair
index 4a3b9899d208a31e8da5ec7488873662bb24e92c..1283af9e766519918debbd82e9a233bdc3022237 100644 (file)
@@ -62,7 +62,7 @@ GLfloat GlSequence::x() const
 
 GLfloat GlSequence::right() const
 {
-  return length()-seq_x;
+  return length()+seq_x;
 }
 
 void GlSequence::setY(GLfloat value)
@@ -306,7 +306,7 @@ void GlSequence::draw_sequence(GLfloat left, GLfloat right) const
   {
     assert ( basepair < seq.size() );
     glPushMatrix();
-    glTranslatef( leftbase(left) + basepair, seq_y, 1.0 );
+    glTranslatef( seq_x+leftbase(left) + basepair, seq_y, 1.0 );
     glScalef(0.1, 1.0, 1.0);
     switch (*seq_itor) {
       case 'A': case 'a':
index 28e5d1a347bef631197aafa9f980851719621744..46e2daad911797a97cb4cf30ea80a54bc0e0e416 100644 (file)
@@ -19,6 +19,7 @@ MussaAlignedWindow::MussaAlignedWindow(Mussa& m,
   browser.setSequences(analysis.sequences(), analysis.colorMapper());
   setSelectedPaths(m, sel_paths);
   setAlignment(0);
+  browser.zoomToSequence();
 
   QVBoxLayout *layout = new QVBoxLayout;
   layout->addWidget(&browser);
index 244a4d5c79c75b7052c2fc5aec72961e6e39a959..b828ea587f361a3b8f88dc049f13aaeafff7fa5d 100644 (file)
@@ -22,7 +22,8 @@ public slots:
 protected:
   void setSelectedPaths(Mussa &m, const std::set<int>& sel_paths);
   
-  Mussa &analysis;
+  Mussa& analysis;
+  //std::vector<Sequence> sequences;
   //const std::set<int>& selected_paths;
   std::vector<ExtendedConservedPath> selected_paths;
   SequenceBrowserWidget browser;
index 4a35f8bfa9d56b8f9d0f18c1b161e81ee0c8111e..dbfa4880d173fed76721ffceb6f846c3bea6c6ee 100644 (file)
@@ -121,6 +121,7 @@ void SequenceBrowserWidget::updatePosition()
     left[i]->setPosition(sequences[i].leftbase(browser.viewportLeft()));
     right[i]->setPosition(sequences[i].rightbase(browser.viewportRight()));
   }
+  scrollable_browser.updateScrollBar();
 }
 
 void SequenceBrowserWidget::promptSaveBrowserPixmap()
@@ -142,6 +143,13 @@ int SequenceBrowserWidget::zoom()
 void SequenceBrowserWidget::zoomOut()
 {
   scrollable_browser.browser().zoomOut();
+  scrollable_browser.updateScrollBar();
+}
+
+void SequenceBrowserWidget::zoomToSequence()
+{
+  scrollable_browser.browser().zoomToSequence();
+  scrollable_browser.updateScrollBar();
 }
 
 void SequenceBrowserWidget::setZoom(int z)
index f19f6322ba0a5da11014beacf34ae319f1f497bc..3460eaafbfad93aca0c44ba8c7f6a3046c444a75 100644 (file)
@@ -47,6 +47,8 @@ public slots:
   void setZoom(int);
   //! zoom to fit the whole scene on the screen
   void zoomOut();
+  //! zoom to sequence
+  void zoomToSequence();
 
   void updatePosition();
   //! ask the user where to save an image of the current browser view