17 #include "base/AudioPlaySource.h" 18 #include "base/RealTime.h" 19 #include "data/model/Model.h" 25 #include <QApplication> 33 m_globalCentreFrame(0),
37 m_mainModelSampleRate(0),
40 m_inProgressExclusive(true),
41 m_toolMode(NavigateMode),
42 m_playLoopMode(false),
43 m_playSelectionMode(false),
44 m_playSoloMode(false),
46 m_overlayMode(StandardOverlays),
47 m_zoomWheelsEnabled(true),
48 m_showCentreLine(true),
49 m_illuminateLocalFeatures(true),
50 m_showWorkTitle(false),
52 m_lightPalette(QApplication::palette()),
53 m_darkPalette(QApplication::palette())
56 settings.beginGroup(
"MainWindow");
132 #ifdef DEBUG_VIEW_MANAGER 141 #ifdef DEBUG_VIEW_MANAGER 142 cerr <<
"ViewManager::setGlobalCentreFrame to " << f << endl;
151 #ifdef DEBUG_VIEW_MANAGER 152 cerr <<
"ViewManager::getGlobalZoom: returning " <<
m_globalZoom << endl;
193 #ifdef DEBUG_VIEW_MANAGER 194 cerr <<
"ViewManager::alignPlaybackFrameToReference(" << frame <<
"): playback model is " <<
m_playbackModel << endl;
200 #ifdef DEBUG_VIEW_MANAGER 201 cerr <<
"aligned frame = " << f << endl;
210 #ifdef DEBUG_VIEW_MANAGER 211 cerr <<
"ViewManager::alignReferenceToPlaybackFrame(" << frame <<
"): playback model is " <<
m_playbackModel << endl;
217 #ifdef DEBUG_VIEW_MANAGER 218 cerr <<
"aligned frame = " << f << endl;
253 const MultiSelection &
259 const MultiSelection::SelectionList &
269 ms.setSelection(selection);
277 ms.addSelection(selection);
285 ms.addSelection(selection);
293 ms.removeSelection(selection);
301 ms.clearSelections();
308 if (
m_selections.getSelections() == ms.getSelections())
return;
320 if (sl.empty())
return frame;
322 for (MultiSelection::SelectionList::const_iterator i = sl.begin();
323 i != sl.end(); ++i) {
325 if (frame < i->getEndFrame()) {
326 if (frame < i->getStartFrame()) {
327 return i->getStartFrame();
334 return sl.begin()->getStartFrame();
344 const MultiSelection &ms) :
346 m_oldSelection(vm->m_selections),
356 m_vm->m_selections = m_newSelection;
357 m_vm->signalSelectionChange();
363 m_vm->m_selections = m_oldSelection;
364 m_vm->signalSelectionChange();
370 if (m_newSelection.getSelections().empty())
return tr(
"Clear Selection");
371 if (m_newSelection.getSelections().size() > 1)
return tr(
"Select Multiple Regions");
372 else return tr(
"Select Region");
378 return m_selections.getContainingSelection(frame, defaultToFollowing);
431 if (mode) emit
activity(tr(
"Switch on Loop mode"));
432 else emit
activity(tr(
"Switch off Loop mode"));
446 if (mode) emit
activity(tr(
"Switch on Play Selection mode"));
447 else emit
activity(tr(
"Switch off Play Selection mode"));
461 if (mode) emit
activity(tr(
"Switch on Play Solo mode"));
462 else emit
activity(tr(
"Switch off Play Solo mode"));
476 if (mode) emit
activity(tr(
"Switch on Alignment mode"));
477 else emit
activity(tr(
"Switch off Alignment mode"));
511 #ifdef DEBUG_VIEW_MANAGER 512 cerr <<
"ViewManager::playStatusChanged" << endl;
522 float left = 0, right = 0;
533 #ifdef DEBUG_VIEW_MANAGER 549 #ifdef DEBUG_VIEW_MANAGER 550 cerr <<
"ViewManager::checkPlayStatus: Not playing" << endl;
565 View *v = dynamic_cast<View *>(sender());
567 #ifdef DEBUG_VIEW_MANAGER 568 cerr <<
"ViewManager::viewCentreFrameChanged(" << f <<
", " << locked <<
", " << mode <<
"), view is " << v << endl;
581 .arg(RealTime::frame2RealTime
595 #ifdef DEBUG_VIEW_MANAGER 596 cerr <<
"ViewManager::seek(" << f <<
")" << endl;
601 int diff = std::max(f, playFrame) - std::min(f, playFrame);
605 #ifdef DEBUG_VIEW_MANAGER 606 cerr <<
"ViewManager::considerSeek: reseeking from " << playFrame <<
" to " << f << endl;
621 View *v = dynamic_cast<View *>(sender());
624 SVDEBUG <<
"ViewManager::viewZoomLevelChanged: WARNING: sender is not a view" << endl;
634 #ifdef DEBUG_VIEW_MANAGER 635 cerr <<
"ViewManager::viewZoomLevelChanged(" << v <<
", " << z <<
", " << locked <<
")" << endl;
640 if (!dynamic_cast<Overview *>(v)) {
641 emit
activity(tr(
"Zoom to %n sample(s) per pixel",
"", z));
651 emit
activity(tr(
"Change overlay level"));
655 settings.beginGroup(
"MainWindow");
666 if (enabled) emit
activity(
"Show zoom wheels");
667 else emit
activity(
"Hide zoom wheels");
671 settings.beginGroup(
"MainWindow");
682 if (show) emit
activity(
"Show centre line");
683 else emit
activity(
"Hide centre line");
687 settings.beginGroup(
"MainWindow");
716 QColor windowBg = QApplication::palette().color(QPalette::Window);
717 if (windowBg.red() + windowBg.green() + windowBg.blue() < 384) {
void zoomWheelsEnabledChanged()
Emitted when the zoom wheels have been toggled.
void selectionChangedByUser()
Emitted when the selection has been changed through an explicit selection-editing action.
void playSelectionModeChanged()
Emitted when the play selection mode has been changed.
void setSelections(const MultiSelection &ms, bool quietly=false)
int getPlaybackFrame() const
int alignReferenceToPlaybackFrame(int) const
void viewCentreFrameChanged(View *v, int frame)
Emitted when user scrolls a view, but doesn't affect global centre.
ToolMode getToolModeFor(const View *v) const
Return override mode if it exists for this view or global mode otherwise.
View scrolls continuously during playback, keeping the playback position at the centre.
void viewZoomLevelChanged(View *v, int zoom, bool locked)
Emitted when a view zooms.
void toolModeChanged()
Emitted when the tool mode has been changed.
SetSelectionCommand(ViewManager *vm, const MultiSelection &ms)
void showCentreLineChanged()
Emitted when the centre line visibility has been changed.
int getGlobalZoom() const
bool haveInProgressSelection() const
void setGlobalDarkBackground(bool dark)
ToolMode getToolMode() const
Model * getPlaybackModel() const
void addCommand(Command *command)
Add a command to the command history.
int alignPlaybackFrameToReference(int) const
void outputLevelsChanged(float left, float right)
Emitted when the output levels change.
void playStatusChanged(bool playing)
void inProgressSelectionChanged()
Emitted when the in-progress (rubberbanding) selection has changed.
void removeSelection(const Selection &selection)
void addSelection(const Selection &selection)
void signalSelectionChange()
void setPlaySelectionMode(bool on)
virtual QString getName() const
Selection m_inProgressSelection
View follows playback page-by-page, but dragging the view relocates playback to the centre frame.
void overlayModeChanged()
Emitted when the overlay mode has been changed.
void setPlaybackFrame(int)
void globalCentreFrameChanged(int frame)
Emitted when user causes the global centre frame to change.
const Selection & getInProgressSelection(bool &exclusive) const
void setInProgressSelection(const Selection &selection, bool exclusive)
void setAudioPlaySource(AudioPlaySource *source)
void setPlaySoloMode(bool on)
void selectionChanged()
Emitted whenever the selection has changed.
void setOverlayMode(OverlayMode mode)
View is detached from playback.
void addSelectionQuietly(const Selection &selection)
Adding a selection normally emits the selectionChangedByUser signal.
bool m_inProgressExclusive
void playbackFrameChanged(int frame)
Emitted when the playback frame changes.
void setZoomWheelsEnabled(bool enable)
void alignModeChanged()
Emitted when the alignment mode has been changed.
static CommandHistory * getInstance()
int getOutputSampleRate() const
The sample rate of the audio output device.
void setShowCentreLine(bool show)
MultiSelection m_selections
void playSoloModeChanged()
Emitted when the play solo mode has been changed.
OverlayMode m_overlayMode
AudioPlaySource * m_playSource
!! void considerZoomChange(void *, int, bool);
void setGlobalCentreFrame(int)
void clearInProgressSelection()
int constrainFrameToSelection(int frame) const
void setSelection(const Selection &selection)
View is the base class of widgets that display one or more overlaid views of data against a horizonta...
void setToolModeFor(const View *v, ToolMode mode)
Override the tool mode for a specific view.
int getPlaybackSampleRate() const
The sample rate that is used for playback.
The ViewManager manages properties that may need to be synchronised between separate Views.
int getGlobalCentreFrame() const
const MultiSelection::SelectionList & getSelections() const
void setPlayLoopMode(bool on)
int m_mainModelSampleRate
!!
void setAlignMode(bool on)
void activity(QString)
Emitted when any loggable activity has occurred.
void playLoopModeChanged()
Emitted when the play loop mode has been changed.
Selection getContainingSelection(int frame, bool defaultToFollowing) const
Return the selection that contains a given frame.
void setPlaybackModel(Model *)
void clearToolModeOverrides()
Clear all current view-specific overrides.
virtual ~SetSelectionCommand()
const MultiSelection & getSelection() const
std::map< const View *, ToolMode > m_toolModeOverrides
void setToolMode(ToolMode mode)
bool getGlobalDarkBackground() const