comparison view/Pane.cpp @ 1239:a496986aa61b

Fix #1792 measure tool crosshairs rendered in wrong colour. Also extend crosshairs over the no-man's-land at the left
author Chris Cannam
date Tue, 21 Feb 2017 11:12:07 +0000
parents 6f0d7aa25816
children a34a2a25907c
comparison
equal deleted inserted replaced
1238:4d0ca1ab4cd0 1239:a496986aa61b
426 if (e) paint.setClipRect(r); 426 if (e) paint.setClipRect(r);
427 427
428 ViewManager::ToolMode toolMode = ViewManager::NavigateMode; 428 ViewManager::ToolMode toolMode = ViewManager::NavigateMode;
429 if (m_manager) toolMode = m_manager->getToolModeFor(this); 429 if (m_manager) toolMode = m_manager->getToolModeFor(this);
430 430
431 if (m_manager && 431 // Locate some relevant layers and models
432 m_mouseInWidget && 432
433 toolMode == ViewManager::MeasureMode) {
434
435 for (LayerList::iterator vi = m_layerStack.end(); vi != m_layerStack.begin(); ) {
436 --vi;
437
438 std::vector<QRect> crosshairExtents;
439
440 if ((*vi)->getCrosshairExtents(this, paint, m_identifyPoint,
441 crosshairExtents)) {
442 (*vi)->paintCrosshairs(this, paint, m_identifyPoint);
443 break;
444 } else if ((*vi)->isLayerOpaque()) {
445 break;
446 }
447 }
448 }
449
450 Layer *topLayer = getTopLayer(); 433 Layer *topLayer = getTopLayer();
451 bool haveSomeTimeXAxis = false; 434 bool haveSomeTimeXAxis = false;
452 435
453 const Model *waveformModel = 0; // just for reporting purposes 436 const Model *waveformModel = 0; // just for reporting purposes
454 const Model *workModel = 0; 437 const Model *workModel = 0;
471 } 454 }
472 455
473 if (waveformModel && workModel && haveSomeTimeXAxis) break; 456 if (waveformModel && workModel && haveSomeTimeXAxis) break;
474 } 457 }
475 458
476 m_scaleWidth = 0; 459 // Block off left and right extents so we can see where the main model ends
477 460
478 if (workModel && hasTopLayerTimeXAxis()) { 461 if (workModel && hasTopLayerTimeXAxis()) {
479 drawModelTimeExtents(r, paint, workModel); 462 drawModelTimeExtents(r, paint, workModel);
480 } 463 }
481 464
465 // Crosshairs for mouse movement in measure mode
466
467 if (m_manager &&
468 m_mouseInWidget &&
469 toolMode == ViewManager::MeasureMode) {
470
471 for (LayerList::iterator vi = m_layerStack.end(); vi != m_layerStack.begin(); ) {
472 --vi;
473
474 std::vector<QRect> crosshairExtents;
475
476 if ((*vi)->getCrosshairExtents(this, paint, m_identifyPoint,
477 crosshairExtents)) {
478 (*vi)->paintCrosshairs(this, paint, m_identifyPoint);
479 break;
480 } else if ((*vi)->isLayerOpaque()) {
481 break;
482 }
483 }
484 }
485
486 // Scale width will be set implicitly during drawVerticalScale call
487 m_scaleWidth = 0;
488
482 if (m_manager && m_manager->shouldShowVerticalScale() && topLayer) { 489 if (m_manager && m_manager->shouldShowVerticalScale() && topLayer) {
483 drawVerticalScale(r, topLayer, paint); 490 drawVerticalScale(r, topLayer, paint);
484 } 491 }
485 492
493 // Feature description: the box in top-right showing values from
494 // the nearest feature to the mouse
495
486 if (m_identifyFeatures && 496 if (m_identifyFeatures &&
487 m_manager && m_manager->shouldIlluminateLocalFeatures() && 497 m_manager && m_manager->shouldIlluminateLocalFeatures() &&
488 topLayer) { 498 topLayer) {
489 drawFeatureDescription(topLayer, paint); 499 drawFeatureDescription(topLayer, paint);
490 } 500 }
525 if (m_manager && 535 if (m_manager &&
526 m_manager->shouldShowLayerNames()) { 536 m_manager->shouldShowLayerNames()) {
527 drawLayerNames(r, paint); 537 drawLayerNames(r, paint);
528 } 538 }
529 539
540 // The blue box that is shown when you ctrl-click in navigate mode
541 // to define a zoom region
542
530 if (m_shiftPressed && m_clickedInRange && 543 if (m_shiftPressed && m_clickedInRange &&
531 (toolMode == ViewManager::NavigateMode || m_navigating)) { 544 (toolMode == ViewManager::NavigateMode || m_navigating)) {
532 545
533 //!!! be nice if this looked a bit more in keeping with the 546 //!!! be nice if this looked a bit more in keeping with the
534 //selection block 547 //selection block