diff widgets/Pane.cpp @ 25:dcdb21b62dbb

* Refactor sparse models. Previously the 1D and time-value models duplicated a lot of code; now there is a base class (SparseModel) templated on the stored point type, and the subclasses define point types with the necessary characteristics. * Add NoteModel, a new SparseModel subclass. * Reorganise local feature description display. Instead of asking the layer to draw its own, just query it for a textual description and draw that in Pane. Greatly simplifies this part of the layer code. * Add local feature descriptions to colour 3D plot and waveform layers. * Add pitch in MIDI-pitch-and-cents to spectrogram layer. * Give AudioGenerator its own mutex to shorten lock times in CallbackPlaySource. * Minor adjustments to layers menu &c
author Chris Cannam
date Thu, 02 Feb 2006 16:10:19 +0000
parents ca57f70b0e48
children 38fe0ea9e46e
line wrap: on
line diff
--- a/widgets/Pane.cpp	Wed Feb 01 14:49:49 2006 +0000
+++ b/widgets/Pane.cpp	Thu Feb 02 16:10:19 2006 +0000
@@ -113,6 +113,57 @@
 	}
 
 	if (m_identifyFeatures) {
+
+	    QPoint pos = m_identifyPoint;
+	    QString desc = (*vi)->getFeatureDescription(pos);
+	    
+	    if (desc != "") {
+
+		paint.save();
+
+		int tabStop =
+		    paint.fontMetrics().width(tr("Some lengthy prefix:"));
+
+		QRect boundingRect = 
+		    paint.fontMetrics().boundingRect
+		    (rect(),
+		     Qt::AlignRight | Qt::AlignTop | Qt::TextExpandTabs,
+		     desc, tabStop);
+
+		if (hasLightBackground()) {
+		    paint.setPen(Qt::NoPen);
+		    paint.setBrush(QColor(250, 250, 250, 200));
+		} else {
+		    paint.setPen(Qt::NoPen);
+		    paint.setBrush(QColor(50, 50, 50, 200));
+		}
+
+		int extra = paint.fontMetrics().descent();
+		paint.drawRect(width() - boundingRect.width() - 10 - extra,
+			       10 - extra,
+			       boundingRect.width() + 2 * extra,
+			       boundingRect.height() + extra);
+
+		if (hasLightBackground()) {
+		    paint.setPen(QColor(150, 20, 0));
+		} else {
+		    paint.setPen(QColor(255, 150, 100));
+		}
+		
+		QTextOption option;
+		option.setWrapMode(QTextOption::NoWrap);
+		option.setAlignment(Qt::AlignRight | Qt::AlignTop);
+		option.setTabStop(tabStop);
+		paint.drawText(QRectF(width() - boundingRect.width() - 10, 10,
+				      boundingRect.width(),
+				      boundingRect.height()),
+			       desc,
+			       option);
+
+		paint.restore();
+	    }
+
+/*!!!
 	    QRect descRect = (*vi)->getFeatureDescriptionRect(paint,
 							      m_identifyPoint);
 	    if (descRect.width() > 0 && descRect.height() > 0 &&
@@ -137,6 +188,8 @@
 		
 		paint.restore();
 	    }
+
+*/
 	}
 
 	break;