track labels
[mussa.git] / qui / PathWidget.cpp
index 88f886fc13949cb37eac64c134d3f9c5b53d7811..1b4cd525a5b34165540a814f292fdde362b576b4 100644 (file)
@@ -1,54 +1,51 @@
 #include <iostream>
 
+#include <QLabel>
+#include <QScrollBar>
+#include <QSpacerItem>
+#include <QSplitter>
 #include <QVBoxLayout>
 #include <QWidget>
 
 #include "qui/PathScene.hpp"
 #include "qui/PathWidget.hpp"
+#include "qui/ScrollableScene.hpp"
+#include "qui/SequenceDescription.hpp"
+#include "alg/glsequence.hpp"
 
 #include <math.h>
 using namespace std;
 
-// whats the maximum reasonable range for a scrollbar
-const float max_scrollbar_range = 100000;
-
-PathWidget::PathWidget(QWidget *parent) :
-  QWidget(parent),
-  viewportBar(Qt::Horizontal)
+PathWidget::PathWidget(QWidget *parent)
+  : QSplitter(parent),
+    scrollable_scene(parent)
 {
-  QVBoxLayout *layout = new QVBoxLayout;
-
-  layout->addWidget(&scene);
-  layout->addWidget(&viewportBar);
+  setOrientation(Qt::Horizontal);
 
-  connect(&viewportBar, SIGNAL(valueChanged(int)), 
-          this, SLOT(setViewportCenter(int)));
-  connect(&scene, SIGNAL(viewportChanged()), 
-          this, SLOT(updateScrollBar()));
-  setLayout(layout);
+  addWidget(&left_sidebar);
+  addWidget(&scrollable_scene);
+  addWidget(&right_sidebar);
 
-  // sets range & scale
-  updateScrollBar();
+  connect(&scrollable_scene.scene(), SIGNAL(viewportChanged()),
+          this, SLOT(updatePosition()));
 }
 
-void PathWidget::updateScrollBar()
+void PathWidget::updateTracks()
 {
-  float max_right = scene.right();
-  float max_left = scene.left();
-  float max_range = max_right - max_left;
-  float cur_left = scene.viewportLeft();
-  float cur_right = scene.viewportRight();
-  float cur_center = ((cur_right-cur_left)/2)+cur_left;
-  // set range to min
-  thumb = (int)cur_center;
-  viewportBar.setRange((int)max_left, (int)max_right);
-  viewportBar.setValue(thumb);
+  left_sidebar.updateSidebar(scrollable_scene.scene());
+  right_sidebar.updateSidebar(scrollable_scene.scene());
+  updatePosition();
 }
 
-void PathWidget::setViewportCenter(int x)
+void PathWidget::updatePosition()
 {
-  if (x != thumb) {
-    thumb = x;
-    scene.setViewportCenter(thumb);
+  const PathScene& scene = scrollable_scene.scene();
+  const vector<GlSequence> &tracks = scene.tracks();
+  vector<SequenceDescription *> left = left_sidebar.descriptions;
+  vector<SequenceDescription *> right = right_sidebar.descriptions;
+  for(size_t i = 0; i != tracks.size() and i != right.size(); ++i)
+  {
+    left[i]->setPosition(tracks[i].leftbase(scene.viewportLeft()));
+    right[i]->setPosition(tracks[i].rightbase(scene.viewportRight()));
   }
 }