improve os x makefiles
[mussa.git] / qui / seqbrowser / SequenceBrowser.cpp
1 #include <QDir>
2 #include <QFileDialog>
3 #include <QMessageBox>
4 #include <QMouseEvent>
5 #include <QRubberBand>
6 #include <QRect>
7 #include <QString>
8 #include <iostream>
9 #include <set>
10
11 #include <math.h>
12
13 #include "qui/seqbrowser/SequenceBrowser.hpp"
14 #include "mussa_exceptions.hpp"
15
16 using namespace std;
17
18 SequenceBrowser::SequenceBrowser(QWidget *parent)
19   : QGLWidget(parent),
20     rubberBand(0),
21     drawingBand(false)
22
23 }
24
25 QSize SequenceBrowser::sizeHint() const
26 {
27   //return QSize((int)GlSeqBrowser::viewportHeight(), (int)GlSeqBrowser::viewportWidth());
28   return QSize(600, 400);
29 }
30
31 void SequenceBrowser::setViewportCenter(float x)
32 {
33   const float epsilon = 1e-10;
34   float center = GlSeqBrowser::viewportCenter();
35   float difference = fabsf(x - center);
36   float abs_x = fabsf(x);
37   center = fabsf(center);
38
39   // the difference < epsilon * val is one of the recommended tests
40   // for float equality.
41   // of course since we're looking for not equals, we need to toss a
42   // not at the beginning
43   if (not (difference < epsilon * abs_x or difference < epsilon * center))
44   {
45     GlSeqBrowser::setViewportCenter(x);
46     emit viewportChanged();
47     update();
48   }
49 }
50
51 void SequenceBrowser::setZoom(int new_zoom)
52 {
53   if (new_zoom != GlSeqBrowser::zoom()) {
54     GlSeqBrowser::setZoom(new_zoom);
55     emit viewportChanged();
56     update();
57   }
58 }
59
60 void SequenceBrowser::setClipPlane(int )
61 {
62 /*
63   if (clipZ != (double) newZ){
64     clipZ = (double) newZ;
65     update();
66   }
67 */
68 }
69
70 void SequenceBrowser::clear()
71 {
72   GlSeqBrowser::clear();
73   emit tracksChanged();
74 }
75
76 void SequenceBrowser::push_sequence(const Sequence &s)
77 {
78   GlSeqBrowser::push_sequence(s);
79   emit tracksChanged();
80 }
81
82 void SequenceBrowser::push_sequence(GlSequence &gs)
83 {
84   GlSeqBrowser::push_sequence(gs);
85   emit tracksChanged();
86 }
87
88 ////////////////////
89 // Rendering code
90 void SequenceBrowser::initializeGL()
91 {
92   GlSeqBrowser::initializeGL();
93 }
94
95 void SequenceBrowser::resizeGL(int width, int height)
96 {
97   GlSeqBrowser::resizeGL(width, height);
98   emit viewportChanged();
99 }
100
101 void SequenceBrowser::paintGL()
102 {
103   GlSeqBrowser::paintGL();
104 }
105
106 void SequenceBrowser::mousePressEvent( QMouseEvent *e)
107 {
108   drawingBand = true;
109
110   selectedMode = false;
111   bandOrigin = e->pos();
112   if (!rubberBand)
113     rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
114   
115   rubberBand->setGeometry(QRect(bandOrigin, QSize()));
116   rubberBand->show();
117 }
118
119 void SequenceBrowser::mouseMoveEvent( QMouseEvent *e)
120 {
121   if (drawingBand)
122     rubberBand->setGeometry(QRect(bandOrigin, e->pos()).normalized());
123 }
124
125 void SequenceBrowser::mouseReleaseEvent( QMouseEvent *e)
126 {
127   drawingBand = false;
128   if (rubberBand != 0) {
129     rubberBand->hide();
130     QRect r = QRect(bandOrigin, e->pos()).normalized();
131     bandOrigin = r.topLeft();
132   
133     selectRegion(r.top(), r.left(), r.bottom(), r.right());
134   }
135 }