Mercurial > hg > svcore
comparison base/View.cpp @ 8:214054a0d8b8
* Hook up tool selection buttons to switch the cursor mode
* Implement simple and multi-selection, snapping to the resolution
of the current layer. You can't actually do anything with a selection yet
author | Chris Cannam |
---|---|
date | Mon, 23 Jan 2006 17:02:57 +0000 |
parents | 149bb02a41ba |
children | 73d85d19919f |
comparison
equal
deleted
inserted
replaced
7:49a95b174050 | 8:214054a0d8b8 |
---|---|
6 | 6 |
7 This is experimental software. Not for distribution. | 7 This is experimental software. Not for distribution. |
8 */ | 8 */ |
9 | 9 |
10 #include "base/View.h" | 10 #include "base/View.h" |
11 #include "base/ViewManager.h" | |
12 #include "base/Layer.h" | 11 #include "base/Layer.h" |
13 #include "base/Model.h" | 12 #include "base/Model.h" |
14 #include "base/ZoomConstraint.h" | 13 #include "base/ZoomConstraint.h" |
15 #include "base/Profiler.h" | 14 #include "base/Profiler.h" |
16 | 15 |
40 m_showProgress(showProgress), | 39 m_showProgress(showProgress), |
41 m_cache(0), | 40 m_cache(0), |
42 m_cacheCentreFrame(0), | 41 m_cacheCentreFrame(0), |
43 m_cacheZoomLevel(1024), | 42 m_cacheZoomLevel(1024), |
44 m_deleting(false), | 43 m_deleting(false), |
44 m_haveSelectedLayer(false), | |
45 m_manager(0) | 45 m_manager(0) |
46 { | 46 { |
47 // QWidget::setAttribute(Qt::WA_PaintOnScreen); | 47 // QWidget::setAttribute(Qt::WA_PaintOnScreen); |
48 } | 48 } |
49 | 49 |
138 } | 138 } |
139 | 139 |
140 void | 140 void |
141 View::propertyContainerSelected(PropertyContainer *pc) | 141 View::propertyContainerSelected(PropertyContainer *pc) |
142 { | 142 { |
143 if (pc == this) return; | 143 if (pc == this) { |
144 if (m_haveSelectedLayer) { | |
145 m_haveSelectedLayer = false; | |
146 update(); | |
147 } | |
148 return; | |
149 } | |
144 | 150 |
145 delete m_cache; | 151 delete m_cache; |
146 m_cache = 0; | 152 m_cache = 0; |
147 | 153 |
148 Layer *selectedLayer = 0; | 154 Layer *selectedLayer = 0; |
154 break; | 160 break; |
155 } | 161 } |
156 } | 162 } |
157 | 163 |
158 if (selectedLayer) { | 164 if (selectedLayer) { |
165 m_haveSelectedLayer = true; | |
159 m_layers.push_back(selectedLayer); | 166 m_layers.push_back(selectedLayer); |
160 update(); | 167 update(); |
161 } | 168 } else { |
169 m_haveSelectedLayer = false; | |
170 } | |
171 } | |
172 | |
173 void | |
174 View::toolModeChanged() | |
175 { | |
176 std::cerr << "View::toolModeChanged(" << m_manager->getToolMode() << ")" << std::endl; | |
162 } | 177 } |
163 | 178 |
164 long | 179 long |
165 View::getStartFrame() const | 180 View::getStartFrame() const |
166 { | 181 { |
278 update(); | 293 update(); |
279 | 294 |
280 emit propertyContainerRemoved(layer); | 295 emit propertyContainerRemoved(layer); |
281 } | 296 } |
282 | 297 |
298 Layer * | |
299 View::getSelectedLayer() | |
300 { | |
301 if (m_haveSelectedLayer && !m_layers.empty()) { | |
302 return getLayer(getLayerCount() - 1); | |
303 } else { | |
304 return 0; | |
305 } | |
306 } | |
307 | |
283 void | 308 void |
284 View::setViewManager(ViewManager *manager) | 309 View::setViewManager(ViewManager *manager) |
285 { | 310 { |
286 if (m_manager) { | 311 if (m_manager) { |
287 m_manager->disconnect(this, SLOT(viewManagerCentreFrameChanged(void *, unsigned long, bool))); | 312 m_manager->disconnect(this, SLOT(viewManagerCentreFrameChanged(void *, unsigned long, bool))); |
288 m_manager->disconnect(this, SLOT(viewManagerZoomLevelChanged(void *, unsigned long, bool))); | 313 m_manager->disconnect(this, SLOT(viewManagerZoomLevelChanged(void *, unsigned long, bool))); |
289 disconnect(m_manager, SIGNAL(centreFrameChanged(void *, unsigned long, bool))); | 314 disconnect(m_manager, SIGNAL(centreFrameChanged(void *, unsigned long, bool))); |
290 disconnect(m_manager, SIGNAL(zoomLevelChanged(void *, unsigned long, bool))); | 315 disconnect(m_manager, SIGNAL(zoomLevelChanged(void *, unsigned long, bool))); |
316 disconnect(m_manager, SIGNAL(toolModeChanged())); | |
317 disconnect(m_manager, SIGNAL(selectionChanged())); | |
291 } | 318 } |
292 | 319 |
293 m_manager = manager; | 320 m_manager = manager; |
294 if (m_followPan) setCentreFrame(m_manager->getGlobalCentreFrame(), false); | 321 if (m_followPan) setCentreFrame(m_manager->getGlobalCentreFrame(), false); |
295 if (m_followZoom) setZoomLevel(m_manager->getGlobalZoom()); | 322 if (m_followZoom) setZoomLevel(m_manager->getGlobalZoom()); |
298 this, SLOT(viewManagerCentreFrameChanged(void *, unsigned long, bool))); | 325 this, SLOT(viewManagerCentreFrameChanged(void *, unsigned long, bool))); |
299 connect(m_manager, SIGNAL(playbackFrameChanged(unsigned long)), | 326 connect(m_manager, SIGNAL(playbackFrameChanged(unsigned long)), |
300 this, SLOT(viewManagerPlaybackFrameChanged(unsigned long))); | 327 this, SLOT(viewManagerPlaybackFrameChanged(unsigned long))); |
301 connect(m_manager, SIGNAL(zoomLevelChanged(void *, unsigned long, bool)), | 328 connect(m_manager, SIGNAL(zoomLevelChanged(void *, unsigned long, bool)), |
302 this, SLOT(viewManagerZoomLevelChanged(void *, unsigned long, bool))); | 329 this, SLOT(viewManagerZoomLevelChanged(void *, unsigned long, bool))); |
330 connect(m_manager, SIGNAL(toolModeChanged()), | |
331 this, SLOT(toolModeChanged())); | |
332 connect(m_manager, SIGNAL(selectionChanged()), | |
333 this, SLOT(update())); | |
303 | 334 |
304 connect(this, SIGNAL(centreFrameChanged(void *, unsigned long, bool)), | 335 connect(this, SIGNAL(centreFrameChanged(void *, unsigned long, bool)), |
305 m_manager, SIGNAL(centreFrameChanged(void *, unsigned long, bool))); | 336 m_manager, SIGNAL(centreFrameChanged(void *, unsigned long, bool))); |
306 connect(this, SIGNAL(zoomLevelChanged(void *, unsigned long, bool)), | 337 connect(this, SIGNAL(zoomLevelChanged(void *, unsigned long, bool)), |
307 m_manager, SIGNAL(zoomLevelChanged(void *, unsigned long, bool))); | 338 m_manager, SIGNAL(zoomLevelChanged(void *, unsigned long, bool))); |
339 | |
340 toolModeChanged(); | |
308 } | 341 } |
309 | 342 |
310 void | 343 void |
311 View::setFollowGlobalPan(bool f) | 344 View::setFollowGlobalPan(bool f) |
312 { | 345 { |
884 | 917 |
885 paint.setPen(Qt::black); | 918 paint.setPen(Qt::black); |
886 paint.setBrush(Qt::NoBrush); | 919 paint.setBrush(Qt::NoBrush); |
887 | 920 |
888 for (LayerList::iterator i = scrollables.begin(); i != scrollables.end(); ++i) { | 921 for (LayerList::iterator i = scrollables.begin(); i != scrollables.end(); ++i) { |
922 paint.setRenderHint(QPainter::Antialiasing, false); | |
923 paint.save(); | |
889 (*i)->paint(paint, cacheRect); | 924 (*i)->paint(paint, cacheRect); |
925 paint.restore(); | |
890 } | 926 } |
891 | 927 |
892 paint.end(); | 928 paint.end(); |
893 | 929 |
894 if (repaintCache) { | 930 if (repaintCache) { |
924 | 960 |
925 for (LayerList::iterator i = nonScrollables.begin(); i != nonScrollables.end(); ++i) { | 961 for (LayerList::iterator i = nonScrollables.begin(); i != nonScrollables.end(); ++i) { |
926 (*i)->paint(paint, nonCacheRect); | 962 (*i)->paint(paint, nonCacheRect); |
927 } | 963 } |
928 | 964 |
965 ViewManager::SelectionList selections; | |
966 | |
967 if (m_manager) { | |
968 selections = m_manager->getSelections(); | |
969 if (m_manager->haveInProgressSelection()) { | |
970 bool exclusive; | |
971 Selection inProgressSelection = | |
972 m_manager->getInProgressSelection(exclusive); | |
973 if (exclusive) selections.clear(); | |
974 selections.insert(inProgressSelection); | |
975 } | |
976 } | |
977 | |
978 paint.setPen(QColor(150, 150, 255)); | |
979 paint.setBrush(QColor(150, 150, 255, 80)); | |
980 | |
981 for (ViewManager::SelectionList::iterator i = selections.begin(); | |
982 i != selections.end(); ++i) { | |
983 | |
984 int p0 = -1, p1 = -1; | |
985 | |
986 if (int(i->getStartFrame()) >= getStartFrame()) { | |
987 p0 = (i->getStartFrame() - getStartFrame()) / m_zoomLevel; | |
988 } | |
989 | |
990 if (int(i->getEndFrame()) >= getStartFrame()) { | |
991 p1 = (i->getEndFrame() - getStartFrame()) / m_zoomLevel; | |
992 } | |
993 | |
994 if (p0 == -1 && p1 == -1) continue; | |
995 | |
996 if (p1 > width()) p1 = width() + 1; | |
997 | |
998 paint.drawRect(p0, -1, p1 - p0, height() + 1); | |
999 } | |
1000 | |
929 paint.end(); | 1001 paint.end(); |
930 | 1002 |
931 if (m_followPlay != PlaybackScrollContinuous) { | 1003 if (m_followPlay != PlaybackScrollContinuous) { |
932 | 1004 |
933 paint.begin(this); | 1005 paint.begin(this); |