Chris@919
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@919
|
2
|
Chris@919
|
3 /*
|
Chris@919
|
4 Sonic Visualiser
|
Chris@919
|
5 An audio file viewer and annotation editor.
|
Chris@919
|
6 Centre for Digital Music, Queen Mary, University of London.
|
Chris@919
|
7
|
Chris@919
|
8 This program is free software; you can redistribute it and/or
|
Chris@919
|
9 modify it under the terms of the GNU General Public License as
|
Chris@919
|
10 published by the Free Software Foundation; either version 2 of the
|
Chris@919
|
11 License, or (at your option) any later version. See the file
|
Chris@919
|
12 COPYING included with this distribution for more information.
|
Chris@919
|
13 */
|
Chris@919
|
14
|
Chris@919
|
15 #ifndef VIEW_PROXY_H
|
Chris@919
|
16 #define VIEW_PROXY_H
|
Chris@919
|
17
|
Chris@919
|
18 #include "LayerGeometryProvider.h"
|
Chris@919
|
19
|
Chris@919
|
20 class ViewProxy : public LayerGeometryProvider
|
Chris@919
|
21 {
|
Chris@919
|
22 public:
|
Chris@919
|
23 ViewProxy(View *view, int scaleFactor) :
|
Chris@919
|
24 m_view(view), m_scaleFactor(scaleFactor) { }
|
Chris@919
|
25
|
Chris@919
|
26 virtual sv_frame_t getStartFrame() const {
|
Chris@919
|
27 return m_view->getStartFrame();
|
Chris@919
|
28 }
|
Chris@919
|
29 virtual sv_frame_t getCentreFrame() const {
|
Chris@919
|
30 return m_view->getCentreFrame();
|
Chris@919
|
31 }
|
Chris@919
|
32 virtual sv_frame_t getEndFrame() const {
|
Chris@919
|
33 return m_view->getEndFrame();
|
Chris@919
|
34 }
|
Chris@919
|
35 virtual int getXForFrame(sv_frame_t frame) const {
|
Chris@950
|
36 //!!! not actually correct, if frame lies between view's pixels
|
Chris@919
|
37 return m_scaleFactor * m_view->getXForFrame(frame);
|
Chris@919
|
38 }
|
Chris@919
|
39 virtual sv_frame_t getFrameForX(int x) const {
|
Chris@950
|
40 sv_frame_t f0 = m_view->getFrameForX(x / m_scaleFactor);
|
Chris@950
|
41 if (m_scaleFactor == 1) return f0;
|
Chris@950
|
42 sv_frame_t f1 = m_view->getFrameForX((x / m_scaleFactor) + 1);
|
Chris@950
|
43 return f0 + ((f1 - f0) * (x % m_scaleFactor)) / m_scaleFactor;
|
Chris@919
|
44 }
|
Chris@1030
|
45 virtual int getXForViewX(int viewx) const {
|
Chris@1030
|
46 return viewx * m_scaleFactor;
|
Chris@1030
|
47 }
|
Chris@1030
|
48 virtual int getViewXForX(int x) const {
|
Chris@1030
|
49 return x / m_scaleFactor;
|
Chris@1030
|
50 }
|
Chris@919
|
51 virtual sv_frame_t getModelsStartFrame() const {
|
Chris@919
|
52 return m_view->getModelsStartFrame();
|
Chris@919
|
53 }
|
Chris@919
|
54 virtual sv_frame_t getModelsEndFrame() const {
|
Chris@919
|
55 return m_view->getModelsEndFrame();
|
Chris@919
|
56 }
|
Chris@919
|
57 virtual double getYForFrequency(double frequency,
|
Chris@919
|
58 double minFreq, double maxFreq,
|
Chris@919
|
59 bool logarithmic) const {
|
Chris@919
|
60 return m_scaleFactor *
|
Chris@919
|
61 m_view->getYForFrequency(frequency, minFreq, maxFreq, logarithmic);
|
Chris@919
|
62 }
|
Chris@919
|
63 virtual double getFrequencyForY(int y, double minFreq, double maxFreq,
|
Chris@919
|
64 bool logarithmic) const {
|
Chris@950
|
65 double f0 = m_view->getFrequencyForY
|
Chris@950
|
66 (y / m_scaleFactor, minFreq, maxFreq, logarithmic);
|
Chris@950
|
67 if (m_scaleFactor == 1) return f0;
|
Chris@950
|
68 double f1 = m_view->getFrequencyForY
|
Chris@950
|
69 ((y / m_scaleFactor) + 1, minFreq, maxFreq, logarithmic);
|
Chris@950
|
70 return f0 + ((f1 - f0) * (y % m_scaleFactor)) / m_scaleFactor;
|
Chris@919
|
71 }
|
Chris@919
|
72 virtual int getTextLabelHeight(const Layer *layer, QPainter &paint) const {
|
Chris@919
|
73 return m_scaleFactor * m_view->getTextLabelHeight(layer, paint);
|
Chris@919
|
74 }
|
Chris@919
|
75 virtual bool getValueExtents(QString unit, double &min, double &max,
|
Chris@919
|
76 bool &log) const {
|
Chris@919
|
77 return m_view->getValueExtents(unit, min, max, log);
|
Chris@919
|
78 }
|
Chris@919
|
79 virtual int getZoomLevel() const {
|
Chris@919
|
80 int z = m_view->getZoomLevel();
|
Chris@1000
|
81 // cerr << "getZoomLevel: from " << z << " to ";
|
Chris@919
|
82 z = z / m_scaleFactor;
|
Chris@1000
|
83 // cerr << z << endl;
|
Chris@999
|
84 if (z < 1) z = 1;
|
Chris@919
|
85 return z;
|
Chris@919
|
86 }
|
Chris@919
|
87 virtual QRect getPaintRect() const {
|
Chris@919
|
88 QRect r = m_view->getPaintRect();
|
Chris@919
|
89 return QRect(r.x() * m_scaleFactor,
|
Chris@919
|
90 r.y() * m_scaleFactor,
|
Chris@919
|
91 r.width() * m_scaleFactor,
|
Chris@919
|
92 r.height() * m_scaleFactor);
|
Chris@919
|
93 }
|
Chris@954
|
94 virtual QSize getPaintSize() const {
|
Chris@954
|
95 return getPaintRect().size();
|
Chris@954
|
96 }
|
Chris@954
|
97 virtual int getPaintWidth() const {
|
Chris@954
|
98 return getPaintRect().width();
|
Chris@954
|
99 }
|
Chris@954
|
100 virtual int getPaintHeight() const {
|
Chris@954
|
101 return getPaintRect().height();
|
Chris@954
|
102 }
|
Chris@919
|
103 virtual bool hasLightBackground() const {
|
Chris@919
|
104 return m_view->hasLightBackground();
|
Chris@919
|
105 }
|
Chris@919
|
106 virtual QColor getForeground() const {
|
Chris@919
|
107 return m_view->getForeground();
|
Chris@919
|
108 }
|
Chris@919
|
109 virtual QColor getBackground() const {
|
Chris@919
|
110 return m_view->getBackground();
|
Chris@919
|
111 }
|
Chris@919
|
112 virtual ViewManager *getViewManager() const {
|
Chris@919
|
113 return m_view->getViewManager();
|
Chris@919
|
114 }
|
Chris@919
|
115
|
Chris@954
|
116 virtual bool shouldIlluminateLocalFeatures(const Layer *layer,
|
Chris@954
|
117 QPoint &point) const {
|
Chris@954
|
118 QPoint p;
|
Chris@954
|
119 bool should = m_view->shouldIlluminateLocalFeatures(layer, p);
|
Chris@954
|
120 point = QPoint(p.x() * m_scaleFactor, p.y() * m_scaleFactor);
|
Chris@954
|
121 return should;
|
Chris@919
|
122 }
|
Chris@954
|
123
|
Chris@919
|
124 virtual bool shouldShowFeatureLabels() const {
|
Chris@919
|
125 return m_view->shouldShowFeatureLabels();
|
Chris@919
|
126 }
|
Chris@919
|
127
|
Chris@919
|
128 virtual void drawVisibleText(QPainter &p, int x, int y,
|
Chris@919
|
129 QString text, TextStyle style) const {
|
Chris@919
|
130 m_view->drawVisibleText(p, x, y, text, style);
|
Chris@919
|
131 }
|
Chris@919
|
132
|
Chris@919
|
133 virtual void drawMeasurementRect(QPainter &p, const Layer *layer,
|
Chris@919
|
134 QRect rect, bool focus) const {
|
Chris@919
|
135 m_view->drawMeasurementRect(p, layer, rect, focus);
|
Chris@919
|
136 }
|
Chris@919
|
137
|
Chris@1030
|
138 virtual void updatePaintRect(QRect r) {
|
Chris@1030
|
139 m_view->update(r.x() / m_scaleFactor,
|
Chris@1030
|
140 r.y() / m_scaleFactor,
|
Chris@1030
|
141 r.width() / m_scaleFactor,
|
Chris@1030
|
142 r.height() / m_scaleFactor);
|
Chris@1030
|
143 }
|
Chris@1030
|
144
|
Chris@919
|
145 virtual View *getView() { return m_view; }
|
Chris@919
|
146 virtual const View *getView() const { return m_view; }
|
Chris@919
|
147
|
Chris@919
|
148 private:
|
Chris@919
|
149 View *m_view;
|
Chris@919
|
150 int m_scaleFactor;
|
Chris@919
|
151 };
|
Chris@919
|
152
|
Chris@919
|
153 #endif
|