#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()));
}
}