Mercurial > hg > svcore
changeset 34:aaf73f7309f2
* Add "Export Audio File" option
* Make note layer align in frequency with any spectrogram layer on the same
view (if it's set to frequency mode)
* Start to implement mouse editing for ranges of points by dragging the
selection
* First scrappy attempt at a vertical scale for time value layer
author | Chris Cannam |
---|---|
date | Mon, 27 Feb 2006 17:34:41 +0000 |
parents | 51e158b505da |
children | 0164c8d3023b |
files | base/View.cpp base/View.h base/ViewManager.cpp |
diffstat | 3 files changed, 51 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/base/View.cpp Thu Feb 23 18:01:31 2006 +0000 +++ b/base/View.cpp Mon Feb 27 17:34:41 2006 +0000 @@ -1014,6 +1014,14 @@ } } + if (selectionCacheable) { + QPoint localPos; + bool closeToLeft, closeToRight; + if (shouldIlluminateLocalSelection(localPos, closeToLeft, closeToRight)) { + selectionCacheable = false; + } + } + #ifdef DEBUG_VIEW_WIDGET_PAINT std::cerr << "View(" << this << ")::paintEvent: have " << scrollables.size() << " scrollable back layers and " << nonScrollables.size() @@ -1237,11 +1245,18 @@ } paint.save(); - paint.setPen(QColor(150, 150, 255)); paint.setBrush(QColor(150, 150, 255, 80)); int sampleRate = getModelsSampleRate(); + QPoint localPos; + long illuminateFrame = -1; + bool closeToLeft, closeToRight; + + if (shouldIlluminateLocalSelection(localPos, closeToLeft, closeToRight)) { + illuminateFrame = getFrameForX(localPos.x()); + } + const QFontMetrics &metrics = paint.fontMetrics(); for (MultiSelection::SelectionList::iterator i = selections.begin(); @@ -1256,8 +1271,34 @@ std::cerr << "View::drawSelections: " << p0 << ",-1 [" << (p1-p0) << "x" << (height()+1) << "]" << std::endl; #endif + bool illuminateThis = + (illuminateFrame >= 0 && i->contains(illuminateFrame)); + + paint.setPen(QColor(150, 150, 255)); paint.drawRect(p0, -1, p1 - p0, height() + 1); + if (illuminateThis) { + paint.save(); + if (hasLightBackground()) { + paint.setPen(QPen(Qt::black, 2)); + } else { + paint.setPen(QPen(Qt::white, 2)); + } + if (closeToLeft) { + paint.drawLine(p0, 1, p1, 1); + paint.drawLine(p0, 0, p0, height()); + paint.drawLine(p0, height() - 1, p1, height() - 1); + } else if (closeToRight) { + paint.drawLine(p0, 1, p1, 1); + paint.drawLine(p1, 0, p1, height()); + paint.drawLine(p0, height() - 1, p1, height() - 1); + } else { + paint.setBrush(Qt::NoBrush); + paint.drawRect(p0, 1, p1 - p0, height() - 2); + } + paint.restore(); + } + if (sampleRate && shouldLabelSelections()) { QString startText = QString("%1 / %2")
--- a/base/View.h Thu Feb 23 18:01:31 2006 +0000 +++ b/base/View.h Mon Feb 27 17:34:41 2006 +0000 @@ -170,6 +170,9 @@ virtual bool shouldIlluminateLocalFeatures(const Layer *, QPoint &) { return false; } + virtual bool shouldIlluminateLocalSelection(QPoint &, bool &, bool &) { + return false; + } enum PlaybackFollowMode { PlaybackScrollContinuous,
--- a/base/ViewManager.cpp Thu Feb 23 18:01:31 2006 +0000 +++ b/base/ViewManager.cpp Mon Feb 27 17:34:41 2006 +0000 @@ -104,6 +104,12 @@ emit inProgressSelectionChanged(); } +const MultiSelection & +ViewManager::getSelection() const +{ + return m_selections; +} + const MultiSelection::SelectionList & ViewManager::getSelections() const {