7357af143c0447b67e136fb3ce7defe7a88d6a4a
[mussa.git] / qui / seqbrowser / ScrollableSequenceBrowser.cpp
1 #include <QVBoxLayout>
2
3 #include "qui/seqbrowser/ScrollableSequenceBrowser.hpp"
4
5 ScrollableSequenceBrowser::ScrollableSequenceBrowser(QWidget *parent) :
6   QWidget(parent),
7   sequence_browser(0),
8   viewportBar(0)
9 {
10   QVBoxLayout *layout = new QVBoxLayout(this);
11   sequence_browser = new SequenceBrowser;
12   viewportBar = new QScrollBar(Qt::Horizontal);
13   // construct central opengl widget
14
15   layout->addWidget(sequence_browser);
16   layout->addWidget(viewportBar);
17
18   connect(viewportBar, SIGNAL(valueChanged(int)), 
19           this, SLOT(setViewportCenter(int)));
20   connect(sequence_browser, SIGNAL(viewportChanged()), 
21           this, SLOT(updateScrollBar()));
22
23   setLayout(layout);
24
25   // sets range & scale
26   updateScrollBar();
27
28   // enble keyboard input
29   viewportBar->setFocusPolicy(Qt::StrongFocus);
30 }
31
32 void ScrollableSequenceBrowser::updateScrollBar()
33 {
34   thumb = (int)sequence_browser->viewportCenter();
35   viewportBar->setRange((int)sequence_browser->left(), 
36                         (int)sequence_browser->right());
37   viewportBar->setValue(thumb);
38   viewportBar->setPageStep(static_cast<int>(sequence_browser->viewportWidth()));
39   int step_size = static_cast<int>(sequence_browser->zoom());
40   step_size = step_size > 1 ? step_size : 1;
41   viewportBar->setSingleStep(static_cast<int>( step_size ));
42 }
43
44 void ScrollableSequenceBrowser::setViewportCenter(int x)
45 {
46   if (x != thumb) {
47     thumb = x;
48     sequence_browser->setViewportCenter(thumb);
49   }
50 }