diff options
| author | Florian Jung <flo@windfisch.org> | 2011-09-13 16:35:38 +0000 | 
|---|---|---|
| committer | Florian Jung <flo@windfisch.org> | 2011-09-13 16:35:38 +0000 | 
| commit | 56d4a94c40bbcae6a2862fba3e2923542511779f (patch) | |
| tree | 9b7cf6297cd3c66e8c077a2cc0b3b3f947cc5877 /muse2/muse | |
| parent | ebf207e2c5e457e9a6fa93dfdd31b96ea379de9a (diff) | |
added copy-in-range support for midi editors
Diffstat (limited to 'muse2/muse')
| -rw-r--r-- | muse2/muse/helper.cpp | 7 | ||||
| -rw-r--r-- | muse2/muse/helper.h | 4 | ||||
| -rw-r--r-- | muse2/muse/midiedit/dcanvas.h | 2 | ||||
| -rw-r--r-- | muse2/muse/midiedit/drumedit.cpp | 6 | ||||
| -rw-r--r-- | muse2/muse/midiedit/drumedit.h | 2 | ||||
| -rw-r--r-- | muse2/muse/midiedit/pianoroll.cpp | 7 | ||||
| -rw-r--r-- | muse2/muse/midiedit/pianoroll.h | 1 | ||||
| -rw-r--r-- | muse2/muse/midiedit/prcanvas.h | 2 | ||||
| -rw-r--r-- | muse2/muse/midiedit/scoreedit.cpp | 16 | ||||
| -rw-r--r-- | muse2/muse/midiedit/scoreedit.h | 3 | 
10 files changed, 38 insertions, 12 deletions
| diff --git a/muse2/muse/helper.cpp b/muse2/muse/helper.cpp index 6aaacdb5..82c22c64 100644 --- a/muse2/muse/helper.cpp +++ b/muse2/muse/helper.cpp @@ -27,6 +27,7 @@  #include "app.h"  #include "icons.h"  #include "synth.h" +#include "functions.h"  #ifdef DSSI_SUPPORT  #include "dssihost.h" @@ -36,6 +37,7 @@  #include "vst.h"  #endif +using std::set;  namespace MusEGlobal {  extern bool hIsB; @@ -321,4 +323,9 @@ QActionGroup* populateAddTrack(QMenu* addTrack)        return grp;        } +bool any_event_selected(const set<Part*>& parts, bool in_range) +{ +  return !get_events(parts, in_range ? 3 : 1).empty(); +} +  } // namespace MusEUtil diff --git a/muse2/muse/helper.h b/muse2/muse/helper.h index 94143756..e86a8949 100644 --- a/muse2/muse/helper.h +++ b/muse2/muse/helper.h @@ -23,6 +23,8 @@  #ifndef __HELPER_H__  #define __HELPER_H__ +#include <set> +  class QActionGroup;  class QString;  class QMenu; @@ -36,6 +38,8 @@ QString pitch2string(int v);  Part* partFromSerialNumber(int serial); +bool any_event_selected(const std::set<Part*>&, bool in_range=false); +  QMenu* populateAddSynth(QWidget* parent);  QActionGroup* populateAddTrack(QMenu* addTrack); diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h index 110ecfb7..c25f71ca 100644 --- a/muse2/muse/midiedit/dcanvas.h +++ b/muse2/muse/midiedit/dcanvas.h @@ -106,7 +106,7 @@ class DrumCanvas : public EventCanvas {     public:        enum { -         CMD_CUT, CMD_COPY, CMD_PASTE, CMD_PASTE_DIALOG, CMD_SAVE, CMD_LOAD, CMD_RESET, +         CMD_CUT, CMD_COPY, CMD_COPY_RANGE, CMD_PASTE, CMD_PASTE_DIALOG, CMD_SAVE, CMD_LOAD, CMD_RESET,           CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT,           CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PREV_PART, CMD_SELECT_NEXT_PART,            CMD_DEL, CMD_FIXED_LEN, CMD_RIGHT, CMD_LEFT, CMD_RIGHT_NOSNAP, CMD_LEFT_NOSNAP, CMD_MODIFY_VELOCITY, CMD_CRESCENDO, diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index 182a2db3..a617f3ab 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -59,6 +59,7 @@  #include "audio.h"  #include "gconfig.h"  #include "functions.h" +#include "helper.h"  #include "widgets/function_dialogs/quantize.h"  /* @@ -197,6 +198,7 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini        menuEdit->addSeparator();        cutAction = menuEdit->addAction(QIcon(*editcutIconSet), tr("Cut"));        copyAction = menuEdit->addAction(QIcon(*editcopyIconSet), tr("Copy")); +      copyRangeAction = menuEdit->addAction(QIcon(*editcopyIconSet), tr("Copy events in range"));        pasteAction = menuEdit->addAction(QIcon(*editpasteIconSet), tr("Paste"));        pasteDialogAction = menuEdit->addAction(QIcon(*editpasteIconSet), tr("Paste (with Dialog)"));        menuEdit->addSeparator(); @@ -204,12 +206,14 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini        connect(cutAction, SIGNAL(triggered()), signalMapper, SLOT(map()));        connect(copyAction, SIGNAL(triggered()), signalMapper, SLOT(map())); +      connect(copyRangeAction, SIGNAL(triggered()), signalMapper, SLOT(map()));        connect(pasteAction, SIGNAL(triggered()), signalMapper, SLOT(map()));        connect(pasteDialogAction, SIGNAL(triggered()), signalMapper, SLOT(map()));        connect(deleteAction, SIGNAL(triggered()), signalMapper, SLOT(map()));        signalMapper->setMapping(cutAction, DrumCanvas::CMD_CUT);        signalMapper->setMapping(copyAction, DrumCanvas::CMD_COPY); +      signalMapper->setMapping(copyRangeAction, DrumCanvas::CMD_COPY_RANGE);        signalMapper->setMapping(pasteAction, DrumCanvas::CMD_PASTE);        signalMapper->setMapping(pasteDialogAction, DrumCanvas::CMD_PASTE_DIALOG);        signalMapper->setMapping(deleteAction, DrumCanvas::CMD_DEL); @@ -920,6 +924,7 @@ void DrumEdit::cmd(int cmd)                    erase_notes(partlist_to_set(parts()), 1);                    break;              case DrumCanvas::CMD_COPY: copy_notes(partlist_to_set(parts()), 1); break; +            case DrumCanvas::CMD_COPY_RANGE: copy_notes(partlist_to_set(parts()), MusEUtil::any_event_selected(partlist_to_set(parts())) ? 3 : 2); break;              case DrumCanvas::CMD_PASTE:                     ((DrumCanvas*)canvas)->cmd(DrumCanvas::CMD_SELECT_NONE);                    paste_notes(3072); @@ -1275,6 +1280,7 @@ void DrumEdit::initShortcuts()        cutAction->setShortcut(shortcuts[SHRT_CUT].key);        copyAction->setShortcut(shortcuts[SHRT_COPY].key); +      copyRangeAction->setShortcut(shortcuts[SHRT_COPY_RANGE].key);        pasteAction->setShortcut(shortcuts[SHRT_PASTE].key);        pasteDialogAction->setShortcut(shortcuts[SHRT_PASTE_DIALOG].key);        deleteAction->setShortcut(shortcuts[SHRT_DELETE].key); diff --git a/muse2/muse/midiedit/drumedit.h b/muse2/muse/midiedit/drumedit.h index be9481c9..06f7e131 100644 --- a/muse2/muse/midiedit/drumedit.h +++ b/muse2/muse/midiedit/drumedit.h @@ -91,7 +91,7 @@ class DrumEdit : public MidiEditor {        static int _dlistWidthInit, _dcanvasWidthInit;        QAction *loadAction, *saveAction, *resetAction; -      QAction *cutAction, *copyAction, *pasteAction, *pasteDialogAction, *deleteAction; +      QAction *cutAction, *copyAction, *copyRangeAction, *pasteAction, *pasteDialogAction, *deleteAction;        QAction *fixedAction, *veloAction, *crescAction, *quantizeAction;        QAction *sallAction, *snoneAction, *invAction, *inAction , *outAction;        QAction *prevAction, *nextAction; diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp index 771bd3dd..1eff2504 100644 --- a/muse2/muse/midiedit/pianoroll.cpp +++ b/muse2/muse/midiedit/pianoroll.cpp @@ -60,6 +60,7 @@  #include "icons.h"  #include "audio.h"  #include "functions.h" +#include "helper.h"  #include "cmd.h" @@ -107,6 +108,10 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i        mapper->setMapping(editCopyAction, PianoCanvas::CMD_COPY);        connect(editCopyAction, SIGNAL(triggered()), mapper, SLOT(map())); +      editCopyRangeAction = menuEdit->addAction(QIcon(*editcopyIconSet), tr("Copy events in range")); +      mapper->setMapping(editCopyRangeAction, PianoCanvas::CMD_COPY_RANGE); +      connect(editCopyRangeAction, SIGNAL(triggered()), mapper, SLOT(map())); +              editPasteAction = menuEdit->addAction(QIcon(*editpasteIconSet), tr("&Paste"));        mapper->setMapping(editPasteAction, PianoCanvas::CMD_PASTE);        connect(editPasteAction, SIGNAL(triggered()), mapper, SLOT(map())); @@ -634,6 +639,7 @@ void PianoRoll::cmd(int cmd)                    erase_notes(partlist_to_set(parts()), 1);                    break;              case PianoCanvas::CMD_COPY: copy_notes(partlist_to_set(parts()), 1); break; +            case PianoCanvas::CMD_COPY_RANGE: copy_notes(partlist_to_set(parts()), MusEUtil::any_event_selected(partlist_to_set(parts())) ? 3 : 2); break;              case PianoCanvas::CMD_PASTE:                                 ((PianoCanvas*)canvas)->cmd(PianoCanvas::CMD_SELECT_NONE);                                paste_notes(3072); @@ -1251,6 +1257,7 @@ void PianoRoll::initShortcuts()        {        editCutAction->setShortcut(shortcuts[SHRT_CUT].key);        editCopyAction->setShortcut(shortcuts[SHRT_COPY].key); +      editCopyRangeAction->setShortcut(shortcuts[SHRT_COPY_RANGE].key);        editPasteAction->setShortcut(shortcuts[SHRT_PASTE].key);        editPasteDialogAction->setShortcut(shortcuts[SHRT_PASTE_DIALOG].key);        editDelEventsAction->setShortcut(shortcuts[SHRT_DELETE].key); diff --git a/muse2/muse/midiedit/pianoroll.h b/muse2/muse/midiedit/pianoroll.h index 5a8d17bc..1a87d407 100644 --- a/muse2/muse/midiedit/pianoroll.h +++ b/muse2/muse/midiedit/pianoroll.h @@ -85,6 +85,7 @@ class PianoRoll : public MidiEditor {        QAction* editCutAction;         QAction* editCopyAction;  +      QAction* editCopyRangeAction;         QAction* editPasteAction;         QAction* editPasteDialogAction;         QAction* editDelEventsAction; diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index d45b5551..a44a9a4a 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -105,7 +105,7 @@ class PianoCanvas : public EventCanvas {     public:        enum { -         CMD_CUT, CMD_COPY, CMD_PASTE, CMD_PASTE_DIALOG, CMD_DEL, +         CMD_CUT, CMD_COPY, CMD_COPY_RANGE, CMD_PASTE, CMD_PASTE_DIALOG, CMD_DEL,           CMD_QUANTIZE,           CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT,           CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PREV_PART, CMD_SELECT_NEXT_PART,  diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 11632ef3..06e32c9c 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -366,6 +366,10 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos)  		menu_mapper->setMapping(copy_action, CMD_COPY);  		connect(copy_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); +		copy_range_action = edit_menu->addAction(QIcon(*editcopyIconSet), tr("Copy events in range")); +		menu_mapper->setMapping(copy_range_action, CMD_COPY_RANGE); +		connect(copy_range_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); +  		paste_action = edit_menu->addAction(QIcon(*editpasteIconSet), tr("&Paste"));  		menu_mapper->setMapping(paste_action, CMD_PASTE);  		connect(paste_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); @@ -504,6 +508,7 @@ void ScoreEdit::init_shortcuts()  {  	cut_action->setShortcut(shortcuts[SHRT_CUT].key);  	copy_action->setShortcut(shortcuts[SHRT_COPY].key); +	copy_range_action->setShortcut(shortcuts[SHRT_COPY_RANGE].key);  	paste_action->setShortcut(shortcuts[SHRT_PASTE].key);  	paste_dialog_action->setShortcut(shortcuts[SHRT_PASTE_DIALOG].key);  	del_action->setShortcut(shortcuts[SHRT_DELETE].key); @@ -701,6 +706,7 @@ void ScoreEdit::menu_command(int cmd)  			erase_notes(score_canvas->get_all_parts(), 1);  			break;  		case CMD_COPY: copy_notes(score_canvas->get_all_parts(), 1); break; +		case CMD_COPY_RANGE: copy_notes(score_canvas->get_all_parts(), MusEUtil::any_event_selected(score_canvas->get_all_parts()) ? 3 : 2); break;  		case CMD_PASTE:   			menu_command(CMD_SELECT_NONE);   			paste_notes(3072); @@ -4529,16 +4535,11 @@ void ScoreCanvas::add_new_parts(const std::map< Part*, std::set<Part*> >& param)   *     because after A (and B) got resized, the B-resize is invalid!   *   o when changing toolbarstate when sharing and immediately after that   *     changing "share" status, the changed state isn't stored + *   ? pasting in editors sometimes fails oO? ( ERROR: reading eventlist + *     from clipboard failed. ignoring this one... ) [ not reproducible ]   *    * CURRENT TODO - *   o pasting in editors sometimes fails oO? ( ERROR: reading eventlist from clipboard failed. ignoring this one... ) - *   o ctrl+shift+c for editors   *   o TEST pasting in editors! - *   x sane default for raster - *   x use raster and amount in paste_notes! - *   x clone-bug - *   x pasting in editors: add dialogs - *   x when pasting and creating new parts, inform the editors about that!   *    *   o ticks-to-quarter spinboxes   *  @@ -4547,7 +4548,6 @@ void ScoreCanvas::add_new_parts(const std::map< Part*, std::set<Part*> >& param)   *   o mirror most menus to an additional right-click context menu to avoid the long mouse pointer   *     journey to the menu bar. try to find a way which does not involve duplicate code!   *   o sane defaults for toolbars - *   o paste in midi editors   *   o implement borland-style maximize: free windows do not cover the main menu, even when maximized   *   o smart range selection: if range markers have been used recently (that is, a dialog with   *     "range" setting, or they've been modified), default to "in range" or "selected in range" diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index 9227389f..709a26ee 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -79,7 +79,7 @@ enum {CMD_COLOR_BLACK, CMD_COLOR_VELO, CMD_COLOR_PART,        CMD_QUANTIZE, CMD_VELOCITY, CMD_CRESCENDO, CMD_NOTELEN, CMD_TRANSPOSE,        CMD_ERASE, CMD_MOVE, CMD_FIXED_LEN, CMD_DELETE_OVERLAPS, CMD_LEGATO, -      CMD_CUT, CMD_COPY, CMD_PASTE, CMD_PASTE_DIALOG, CMD_DEL, +      CMD_CUT, CMD_COPY, CMD_COPY_RANGE, CMD_PASTE, CMD_PASTE_DIALOG, CMD_DEL,        CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT,        CMD_SELECT_ILOOP, CMD_SELECT_OLOOP}; @@ -133,6 +133,7 @@ class ScoreEdit : public TopWin  		QAction* cut_action;  		QAction* copy_action; +		QAction* copy_range_action;  		QAction* paste_action;  		QAction* paste_dialog_action;  		QAction* del_action; | 
