From: <hj...@us...> - 2006-07-30 12:25:44
|
Revision: 7417 Author: hjunes Date: 2006-07-30 05:25:34 -0700 (Sun, 30 Jul 2006) ViewCVS: http://svn.sourceforge.net/rosegarden/?rev=7417&view=rev Log Message: ----------- include "Chord Overlapping Notes" mode also in the MatrixView. Modified Paths: -------------- trunk/rosegarden/gui/matrix.rc trunk/rosegarden/gui/matrixview.cpp trunk/rosegarden/gui/matrixview.h trunk/rosegarden/gui/notationviewslots.cpp Modified: trunk/rosegarden/gui/matrix.rc =================================================================== --- trunk/rosegarden/gui/matrix.rc 2006-07-30 01:19:10 UTC (rev 7416) +++ trunk/rosegarden/gui/matrix.rc 2006-07-30 12:25:34 UTC (rev 7417) @@ -142,6 +142,7 @@ <Separator/> <Action name="insert_note_actionmenu"/> <Action name="chord_mode"/> + <Action name="chord_overlapping"/> <Separator/> <Action name="toggle_step_by_step"/> Modified: trunk/rosegarden/gui/matrixview.cpp =================================================================== --- trunk/rosegarden/gui/matrixview.cpp 2006-07-30 01:19:10 UTC (rev 7416) +++ trunk/rosegarden/gui/matrixview.cpp 2006-07-30 12:25:34 UTC (rev 7417) @@ -92,6 +92,8 @@ #include "rosedebug.h" +#include <sys/time.h> + using Rosegarden::Segment; using Rosegarden::EventSelection; using Rosegarden::timeT; @@ -593,6 +595,12 @@ actionCollection(), "chord_mode"))-> setChecked(false); + icon = QIconSet(NotePixmapFactory::toQPixmap(NotePixmapFactory::makeToolbarPixmap("chord-overlapping"))); + (new KToggleAction(i18n("Chord O&verlapping Notes"), icon, Key_H + CTRL, + this, SLOT(slotUpdateInsertModeStatus()), + actionCollection(), "chord_overlapping"))-> + setChecked(false); + pixmap.load(pixmapDir + "/toolbar/step_by_step.xpm"); icon = QIconSet(pixmap); new KToggleAction(i18n("Ste&p Recording"), icon, 0, this, @@ -842,6 +850,13 @@ isChecked(); } +bool +MatrixView::isInChordOverlappingMode() +{ + return ((KToggleAction *)actionCollection()->action("chord_overlapping"))-> + isChecked(); +} + void MatrixView::slotDockParametersBack() { m_dockLeft->dockBack(); @@ -2666,8 +2681,19 @@ void MatrixView::slotInsertableNoteEventReceived(int pitch, int velocity, bool noteOn) { - if (!noteOn) return; + // hjj: + // Chord Overlapping Notes mode is implemented equivalently in + // notationviewslots.cpp: + // - proceed if notes do not overlap + // - make the chord if notes do overlap, and do not proceed + static int numberOfNotesOn = 0; + static time_t lastInsertionTime = 0; + if (!noteOn) { + numberOfNotesOn--; + return; + } + KToggleAction *action = dynamic_cast<KToggleAction *> (actionCollection()->action("toggle_step_by_step")); if (!action) { @@ -2699,14 +2725,25 @@ Rosegarden::Event modelEvent(Rosegarden::Note::EventType, 0, 1); modelEvent.set<Rosegarden::Int>(Rosegarden::BaseProperties::PITCH, pitch); - Rosegarden::timeT time(getInsertionTime()); - if (time >= segment.getEndMarkerTime()) { + static Rosegarden::timeT insertionTime(getInsertionTime()); + if (insertionTime >= segment.getEndMarkerTime()) { MATRIX_DEBUG << "WARNING: off end of segment" << endl; return; } - Rosegarden::timeT endTime(time + m_snapGrid->getSnapTime(time)); + time_t now; + time (&now); + double elapsed = difftime(now,lastInsertionTime); + time (&lastInsertionTime); - if (endTime <= time) { + if (numberOfNotesOn <= 0 || + !isInChordOverlappingMode() || elapsed > 10.0 ) { + numberOfNotesOn = 0; + insertionTime = getInsertionTime(); + } + numberOfNotesOn++; + Rosegarden::timeT endTime(insertionTime + m_snapGrid->getSnapTime(insertionTime)); + + if (endTime <= insertionTime) { static bool showingError = false; if (showingError) return; showingError = true; @@ -2716,7 +2753,7 @@ } MatrixInsertionCommand* command = - new MatrixInsertionCommand(segment, time, endTime, &modelEvent); + new MatrixInsertionCommand(segment, insertionTime, endTime, &modelEvent); addCommandToHistory(command); @@ -2761,6 +2798,8 @@ QString message; if (isInChordMode()) { message = i18n(" Chord"); + } else if (isInChordOverlappingMode()) { + message = i18n(" Chord Overlapping Notes"); } else { message = ""; } Modified: trunk/rosegarden/gui/matrixview.h =================================================================== --- trunk/rosegarden/gui/matrixview.h 2006-07-30 01:19:10 UTC (rev 7416) +++ trunk/rosegarden/gui/matrixview.h 2006-07-30 12:25:34 UTC (rev 7417) @@ -121,6 +121,12 @@ bool isInChordMode(); /** + * Discover whether chord-mode insertions are enabled + * for overlapping notes (as opposed forced chord-mode and melody-mode) + */ + bool isInChordOverlappingMode(); + + /** * Set the current event selection. * * If preview is true, sound the selection as well. Modified: trunk/rosegarden/gui/notationviewslots.cpp =================================================================== --- trunk/rosegarden/gui/notationviewslots.cpp 2006-07-30 01:19:10 UTC (rev 7416) +++ trunk/rosegarden/gui/notationviewslots.cpp 2006-07-30 12:25:34 UTC (rev 7417) @@ -2820,8 +2820,8 @@ double elapsed = difftime(now,lastInsertionTime); time (&lastInsertionTime); - if (numberOfNotesOn <= 0 && - ~isInChordOverlappingMode() && elapsed < 10.0 ) { + if (numberOfNotesOn <= 0 || + !isInChordOverlappingMode() || elapsed > 10.0 ) { numberOfNotesOn = 0; insertionTime = getInsertionTime(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |