From: <rab...@us...> - 2008-01-28 18:22:51
|
Revision: 8594 http://rosegarden.svn.sourceforge.net/rosegarden/?rev=8594&view=rev Author: raboofje Date: 2008-01-28 10:22:42 -0800 (Mon, 28 Jan 2008) Log Message: ----------- refactored to remove some code duplication, at the same time improving undo of syncing Modified Paths: -------------- trunk/rosegarden/src/commands/segment/SegmentSyncCommand.cpp trunk/rosegarden/src/commands/segment/SegmentSyncCommand.h trunk/rosegarden/src/gui/editors/notation/NotationView.cpp trunk/rosegarden/src/gui/editors/parameters/TrackParameterBox.cpp trunk/rosegarden/src/gui/general/PresetHandlerDialog.cpp Modified: trunk/rosegarden/src/commands/segment/SegmentSyncCommand.cpp =================================================================== --- trunk/rosegarden/src/commands/segment/SegmentSyncCommand.cpp 2008-01-27 16:20:38 UTC (rev 8593) +++ trunk/rosegarden/src/commands/segment/SegmentSyncCommand.cpp 2008-01-28 18:22:42 UTC (rev 8594) @@ -50,7 +50,26 @@ processSegment(segment, newTranspose, lowRange, highRange, clef); } } - + +SegmentSyncCommand::SegmentSyncCommand(std::vector<Segment *> segments, int newTranspose, int lowRange, int highRange, const Clef& clef) : + KMacroCommand(i18n("Sync segment parameters")) +{ + for (int i = 0; i < segments.size(); i++) { + processSegment(*(segments[i]), newTranspose, lowRange, highRange, clef); + } +} + +SegmentSyncCommand::SegmentSyncCommand(Composition::segmentcontainer& segments, TrackId selectedTrack, int newTranspose, int lowRange, int highRange, const Clef& clef) : + KMacroCommand(i18n("Sync segment parameters")) +{ + for (Composition::segmentcontainer::const_iterator si = segments.begin(); + si != segments.end(); ++si) { + if ((*si)->getTrack() == selectedTrack) { + processSegment(**si, newTranspose, lowRange, highRange, clef); + } + } +} + void SegmentSyncCommand::processSegment(Segment &segment, int newTranspose, int lowRange, int highRange, const Clef& clef) { Modified: trunk/rosegarden/src/commands/segment/SegmentSyncCommand.h =================================================================== --- trunk/rosegarden/src/commands/segment/SegmentSyncCommand.h 2008-01-27 16:20:38 UTC (rev 8593) +++ trunk/rosegarden/src/commands/segment/SegmentSyncCommand.h 2008-01-28 18:22:42 UTC (rev 8594) @@ -27,6 +27,7 @@ #define _RG_SEGMENTSYNCCOMMAND_H_ #include <kcommand.h> +#include "base/Composition.h" #include "base/Event.h" #include "base/NotationTypes.h" #include "document/MultiViewCommandHistory.h" @@ -46,8 +47,14 @@ int newTranspose, int lowRange, int highRange, const Clef& clef); SegmentSyncCommand(SegmentSelection selection, - int newTranspose, int lowRange, int highRange, const Clef& clef); + int newTranspose, int lowRange, int highRange, const Clef& clef); + SegmentSyncCommand(std::vector<Segment *> segments, + int newTranspose, int lowRange, int highRange, const Clef& clef); + + SegmentSyncCommand(Composition::segmentcontainer& segments, TrackId track, + int newTranspose, int lowRange, int highRange, const Clef& clef); + virtual ~SegmentSyncCommand(); protected: Modified: trunk/rosegarden/src/gui/editors/notation/NotationView.cpp =================================================================== --- trunk/rosegarden/src/gui/editors/notation/NotationView.cpp 2008-01-27 16:20:38 UTC (rev 8593) +++ trunk/rosegarden/src/gui/editors/notation/NotationView.cpp 2008-01-28 18:22:42 UTC (rev 8594) @@ -6191,19 +6191,25 @@ void NotationView::slotEditSwitchInstrument() { - PresetHandlerDialog presetHandlerDialog(this, true); + PresetHandlerDialog dialog(this, true); - if (presetHandlerDialog.exec() != QDialog::Accepted) return; + if (dialog.exec() != QDialog::Accepted) return; - // TODO combine commands into one - for (int i = 0; i < m_segments.size(); i++) - { - // TODO add support for 'apply to all segments on track - addCommandToHistory(new SegmentSyncCommand(*(m_segments[i]), - presetHandlerDialog.getTranspose(), - presetHandlerDialog.getLowRange(), - presetHandlerDialog.getHighRange(), - clefIndexToClef(presetHandlerDialog.getClef()))); + if (dialog.getConvertAllSegments()) { + // get all segments for this track and convert them. + Composition& comp = getDocument()->getComposition(); + TrackId selectedTrack = getCurrentSegment()->getTrack(); + addCommandToHistory(new SegmentSyncCommand(comp.getSegments(), selectedTrack, + dialog.getTranspose(), + dialog.getLowRange(), + dialog.getHighRange(), + clefIndexToClef(dialog.getClef()))); + } else { + addCommandToHistory(new SegmentSyncCommand(m_segments, + dialog.getTranspose(), + dialog.getLowRange(), + dialog.getHighRange(), + clefIndexToClef(dialog.getClef()))); } } Modified: trunk/rosegarden/src/gui/editors/parameters/TrackParameterBox.cpp =================================================================== --- trunk/rosegarden/src/gui/editors/parameters/TrackParameterBox.cpp 2008-01-27 16:20:38 UTC (rev 8593) +++ trunk/rosegarden/src/gui/editors/parameters/TrackParameterBox.cpp 2008-01-28 18:22:42 UTC (rev 8594) @@ -893,22 +893,12 @@ m_presetLbl->setText(dialog.getName()); trk->setPresetLabel(dialog.getName()); if (dialog.getConvertAllSegments()) { - // get all segments for this track and convert them. - for (Composition::segmentcontainer::const_iterator si = - comp.getSegments().begin(); - si != comp.getSegments().end(); ++si) { - if ((*si)->getTrack() == comp.getSelectedTrack()) - { - // convert this segment - Segment *s = *si; - SegmentSyncCommand* command = new - SegmentSyncCommand(*s, dialog.getTranspose(), - dialog.getLowRange(), dialog.getHighRange(), - clefIndexToClef(dialog.getClef())); - m_doc->getCommandHistory()->addCommand(command); - } - } - + SegmentSyncCommand* command = new SegmentSyncCommand( + comp.getSegments(), comp.getSelectedTrack(), + dialog.getTranspose(), dialog.getLowRange(), + dialog.getHighRange(), + clefIndexToClef(dialog.getClef())); + m_doc->getCommandHistory()->addCommand(command); } m_defClef->setCurrentItem(dialog.getClef()); m_defTranspose->setCurrentItem(QString("%1").arg Modified: trunk/rosegarden/src/gui/general/PresetHandlerDialog.cpp =================================================================== --- trunk/rosegarden/src/gui/general/PresetHandlerDialog.cpp 2008-01-27 16:20:38 UTC (rev 8593) +++ trunk/rosegarden/src/gui/general/PresetHandlerDialog.cpp 2008-01-28 18:22:42 UTC (rev 8594) @@ -101,7 +101,7 @@ QRadioButton *onlySelectedSegments = new QRadioButton(i18n("Only selected segments (EXPERIMENTAL)"), scopeBox); m_convertAllSegments = new - QRadioButton(i18n("All segments in this track (EXPERIMENTAL"), scopeBox); + QRadioButton(i18n("All segments in this track (EXPERIMENTAL)"), scopeBox); onlySelectedSegments->setChecked(true); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |