# HG changeset patch # User Chris Cannam # Date 1142446283 0 # Node ID b11edc8b8ea0c789cde7bf162b6390abb6affc9a # Parent 701404725897099095c89dc4ea89518d15966773 * Restore proper channel selection support for new layers * Use binary mode for SV file I/O on Windows * Commands for selection diff -r 701404725897 -r b11edc8b8ea0 base/View.cpp --- a/base/View.cpp Mon Mar 13 17:55:19 2006 +0000 +++ b/base/View.cpp Wed Mar 15 18:11:23 2006 +0000 @@ -55,14 +55,7 @@ { std::cerr << "View::~View(" << this << ")" << std::endl; - //!!! will want to _not_ delete layers - m_deleting = true; -/*!!! - for (LayerList::iterator i = m_layers.begin(); i != m_layers.end(); ++i) { - delete *i; - } -*/ delete m_propertyContainer; } @@ -477,6 +470,12 @@ } void +View::drawVisibleText(int x, int y, QString text, TextStyle style) +{ + //!!! blah. +} + +void View::setPlaybackFollow(PlaybackFollowMode m) { m_followPlay = m; diff -r 701404725897 -r b11edc8b8ea0 base/View.h --- a/base/View.h Mon Mar 13 17:55:19 2006 +0000 +++ b/base/View.h Wed Mar 15 18:11:23 2006 +0000 @@ -43,12 +43,8 @@ public: /** - * Deleting a View deletes all its views. However, it is - * also acceptable for the views to be deleted by other code (in - * which case they will remove themselves from this View - * automatically), or to be removed explicitly without deleting - * using removeLayer. - **!!!!!! + * Deleting a View does not delete any of its layers. They should + * be managed elsewhere (e.g. by the Document). */ virtual ~View(); @@ -169,6 +165,13 @@ virtual void setLightBackground(bool lb) { m_lightBackground = lb; } virtual bool hasLightBackground() const { return m_lightBackground; } + enum TextStyle { + BoxedText, + OutlinedText + }; + + virtual void drawVisibleText(int x, int y, QString text, TextStyle style); + virtual bool shouldIlluminateLocalFeatures(const Layer *, QPoint &) const { return false; } diff -r 701404725897 -r b11edc8b8ea0 base/ViewManager.cpp --- a/base/ViewManager.cpp Mon Mar 13 17:55:19 2006 +0000 +++ b/base/ViewManager.cpp Wed Mar 15 18:11:23 2006 +0000 @@ -10,6 +10,7 @@ #include "ViewManager.h" #include "AudioPlaySource.h" #include "Model.h" +#include "CommandHistory.h" #include @@ -120,31 +121,80 @@ void ViewManager::setSelection(const Selection &selection) { - m_selections.setSelection(selection); - emit selectionChanged(); + MultiSelection ms(m_selections); + ms.setSelection(selection); + setSelections(ms); } void ViewManager::addSelection(const Selection &selection) { - m_selections.addSelection(selection); - emit selectionChanged(); + MultiSelection ms(m_selections); + ms.addSelection(selection); + setSelections(ms); } void ViewManager::removeSelection(const Selection &selection) { - m_selections.removeSelection(selection); - emit selectionChanged(); + MultiSelection ms(m_selections); + ms.removeSelection(selection); + setSelections(ms); } void ViewManager::clearSelections() { - m_selections.clearSelections(); + MultiSelection ms(m_selections); + ms.clearSelections(); + setSelections(ms); +} + +void +ViewManager::setSelections(const MultiSelection &ms) +{ + if (m_selections.getSelections() == ms.getSelections()) return; + SetSelectionCommand *command = new SetSelectionCommand(this, ms); + CommandHistory::getInstance()->addCommand(command); +} + +void +ViewManager::signalSelectionChange() +{ emit selectionChanged(); } +ViewManager::SetSelectionCommand::SetSelectionCommand(ViewManager *vm, + const MultiSelection &ms) : + m_vm(vm), + m_oldSelection(vm->m_selections), + m_newSelection(ms) +{ +} + +ViewManager::SetSelectionCommand::~SetSelectionCommand() { } + +void +ViewManager::SetSelectionCommand::execute() +{ + m_vm->m_selections = m_newSelection; + m_vm->signalSelectionChange(); +} + +void +ViewManager::SetSelectionCommand::unexecute() +{ + m_vm->m_selections = m_oldSelection; + m_vm->signalSelectionChange(); +} + +QString +ViewManager::SetSelectionCommand::getName() const +{ + if (m_newSelection.getSelections().empty()) return tr("Clear Selection"); + else return tr("Select"); +} + Selection ViewManager::getContainingSelection(size_t frame, bool defaultToFollowing) const { diff -r 701404725897 -r b11edc8b8ea0 base/ViewManager.h --- a/base/ViewManager.h Mon Mar 13 17:55:19 2006 +0000 +++ b/base/ViewManager.h Wed Mar 15 18:11:23 2006 +0000 @@ -16,6 +16,7 @@ #include #include "Selection.h" +#include "Command.h" class AudioPlaySource; class Model; @@ -139,6 +140,24 @@ bool m_playLoopMode; bool m_playSelectionMode; + + void setSelections(const MultiSelection &ms); + void signalSelectionChange(); + + class SetSelectionCommand : public Command + { + public: + SetSelectionCommand(ViewManager *vm, const MultiSelection &ms); + virtual ~SetSelectionCommand(); + virtual void execute(); + virtual void unexecute(); + virtual QString getName() const; + + protected: + ViewManager *m_vm; + MultiSelection m_oldSelection; + MultiSelection m_newSelection; + }; }; #endif