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);