diff options
author | Tim E. Real <termtech@rogers.com> | 2011-09-13 23:59:23 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2011-09-13 23:59:23 +0000 |
commit | a8c8fa89d916bded2905e0a5a8c05ac30e159902 (patch) | |
tree | a921aa8311d8542a77f6cbfc952561691cb7bd8d /muse2/muse/arranger | |
parent | 56d4a94c40bbcae6a2862fba3e2923542511779f (diff) |
Added: You can now insert new tracks instead of always at the track list end.
If main menu 'Add track': Inserts before currently selected track, else adds at end.
If Track List right-click existing Track Name: New 'Insert track' menu inserts before clicked track.
If Track List right-click on empty space, or Mixer 'Create': Adds at end, as usual.
Fixed track selection bug: Track info panel not clearing when clicking empty area.
Diffstat (limited to 'muse2/muse/arranger')
-rw-r--r-- | muse2/muse/arranger/arrangerview.cpp | 7 | ||||
-rw-r--r-- | muse2/muse/arranger/arrangerview.h | 1 | ||||
-rw-r--r-- | muse2/muse/arranger/pcanvas.cpp | 18 | ||||
-rw-r--r-- | muse2/muse/arranger/tlist.cpp | 134 |
4 files changed, 64 insertions, 96 deletions
diff --git a/muse2/muse/arranger/arrangerview.cpp b/muse2/muse/arranger/arrangerview.cpp index 10f43436..06d41802 100644 --- a/muse2/muse/arranger/arrangerview.cpp +++ b/muse2/muse/arranger/arrangerview.cpp @@ -628,6 +628,7 @@ void ArrangerView::clearScoreMenuMappers() void ArrangerView::populateAddTrack() { QActionGroup *grp = MusEUtil::populateAddTrack(addTrack); + connect(addTrack, SIGNAL(triggered(QAction *)), SLOT(addNewTrack(QAction *))); trackMidiAction = grp->actions()[0]; trackDrumAction = grp->actions()[1]; @@ -638,6 +639,12 @@ void ArrangerView::populateAddTrack() trackAAuxAction = grp->actions()[6]; } +void ArrangerView::addNewTrack(QAction* action) +{ + song->addNewTrack(action, MusEGlobal::muse->arranger()->curTrack()); // Insert at current selected track. + //song->addNewTrack(action); // Add at end. +} + void ArrangerView::updateShortcuts() { editCutAction->setShortcut(shortcuts[SHRT_CUT].key); diff --git a/muse2/muse/arranger/arrangerview.h b/muse2/muse/arranger/arrangerview.h index d5e06c6c..bdb450ae 100644 --- a/muse2/muse/arranger/arrangerview.h +++ b/muse2/muse/arranger/arrangerview.h @@ -118,6 +118,7 @@ class ArrangerView : public TopWin void globalInsert(); void globalSplit(); void cmd(int); + void addNewTrack(QAction* action); signals: void deleted(TopWin*); diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index 1dd4c44d..056dcce7 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -349,7 +349,7 @@ UndoOp PartCanvas::moveItem(MusEWidget::CItem* item, const QPoint& newpos, DragT ntrack = tracks->size(); if (MusEGlobal::debugMsg) printf("PartCanvas::moveItem - add new track\n"); - Track* newTrack = song->addTrack(int(type)); + Track* newTrack = song->addTrack(type, false); // Add at end of list. if (type == Track::WAVE) { WaveTrack* st = (WaveTrack*) track; WaveTrack* dt = (WaveTrack*) newTrack; @@ -662,17 +662,17 @@ QMenu* PartCanvas::genItemPopup(MusEWidget::CItem* item) partPopup->addSeparator(); switch(trackType) { case Track::MIDI: { - partPopup->addAction(MusEGlobal::muse->arranger->parentWin->startPianoEditAction); - partPopup->addMenu(MusEGlobal::muse->arranger->parentWin->scoreSubmenu); - partPopup->addAction(MusEGlobal::muse->arranger->parentWin->startScoreEditAction); - partPopup->addAction(MusEGlobal::muse->arranger->parentWin->startListEditAction); + partPopup->addAction(MusEGlobal::muse->arranger()->parentWin->startPianoEditAction); + partPopup->addMenu(MusEGlobal::muse->arranger()->parentWin->scoreSubmenu); + partPopup->addAction(MusEGlobal::muse->arranger()->parentWin->startScoreEditAction); + partPopup->addAction(MusEGlobal::muse->arranger()->parentWin->startListEditAction); QAction *act_mexport = partPopup->addAction(tr("save part to disk")); act_mexport->setData(16); } break; case Track::DRUM: { - partPopup->addAction(MusEGlobal::muse->arranger->parentWin->startDrumEditAction); - partPopup->addAction(MusEGlobal::muse->arranger->parentWin->startListEditAction); + partPopup->addAction(MusEGlobal::muse->arranger()->parentWin->startDrumEditAction); + partPopup->addAction(MusEGlobal::muse->arranger()->parentWin->startListEditAction); QAction *act_dexport = partPopup->addAction(tr("save part to disk")); act_dexport->setData(16); } @@ -3236,9 +3236,9 @@ void PartCanvas::viewDropEvent(QDropEvent* event) if (!track) { // we need to create a track for this drop if (text.endsWith(".mpt", Qt::CaseInsensitive)) { - track = song->addTrack((Track::MIDI)); + track = song->addTrack(Track::MIDI, false); // Add at end of list. } else { - track = song->addTrack((Track::WAVE)); + track = song->addTrack(Track::WAVE, false); // Add at end of list. } } if (track->type() == Track::WAVE && diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index 786b4ad7..28b12fdc 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -990,105 +990,44 @@ void TList::mousePressEvent(QMouseEvent* ev) Track* t = y2Track(y + ypos); + // FIXME Observed: Ancient bug: Track Info doesn't change if selecting multiple tracks in reverse order. + // Will need to be fixed if/when adding 'multiple track global editing'. + TrackColumn col = TrackColumn(header->logicalIndexAt(x)); if (t == 0) { if (button == Qt::RightButton) { QMenu* p = new QMenu; - //p->clear(); - QAction* midi = p->addAction(*addtrack_addmiditrackIcon, - tr("Add Midi Track")); - midi->setData(Track::MIDI); - QAction* drum = p->addAction(*addtrack_drumtrackIcon, - tr("Add Drum Track")); - drum->setData(Track::DRUM); - QAction* wave = p->addAction(*addtrack_wavetrackIcon, - tr("Add Wave Track")); - wave->setData(Track::WAVE); - QAction* aoutput = p->addAction(*addtrack_audiooutputIcon, - tr("Add Output")); - aoutput->setData(Track::AUDIO_OUTPUT); - QAction* agroup = p->addAction(*addtrack_audiogroupIcon, - tr("Add Group")); - agroup->setData(Track::AUDIO_GROUP); - QAction* ainput = p->addAction(*addtrack_audioinputIcon, - tr("Add Input")); - ainput->setData(Track::AUDIO_INPUT); - QAction* aaux = p->addAction(*addtrack_auxsendIcon, - tr("Add Aux Send")); - aaux->setData(Track::AUDIO_AUX); + MusEUtil::populateAddTrack(p); - // Create a sub-menu and fill it with found synth types. Make p the owner. - QMenu* synp = MusEUtil::populateAddSynth(p); - synp->setIcon(*synthIcon); - synp->setTitle(QT_TRANSLATE_NOOP("@default", "Add Synth")); - - // Add the 'Add Synth' sub-menu to the menu. - p->addMenu(synp); - // Show the menu QAction* act = p->exec(ev->globalPos(), 0); // Valid click? if(act) { - int n = act->data().toInt(); - // Valid item? - if((n >= 0) && ((Track::TrackType)n != Track::AUDIO_SOFTSYNTH)) + t = song->addNewTrack(act); // Add at end of list. + if(t) { - // Synth sub-menu id? - if(n >= MENU_ADD_SYNTH_ID_BASE) - { - n -= MENU_ADD_SYNTH_ID_BASE; - //if(n < synthis.size()) - // t = song->createSynthI(synthis[n]->baseName()); - //if((n - MENU_ADD_SYNTH_ID_BASE) < (int)synthis.size()) - if(n < (int)synthis.size()) - { - //t = song->createSynthI(synp->text(n)); - //t = song->createSynthI(synthis[n]->name()); - t = song->createSynthI(synthis[n]->baseName(), synthis[n]->name()); - - if(t) - { - // Add instance last in midi device list. - for (int i = 0; i < MIDI_PORTS; ++i) - { - MidiPort* port = &midiPorts[i]; - MidiDevice* dev = port->device(); - if (dev==0) - { - midiSeq->msgSetMidiDevice(port, (SynthI*)t); - MusEGlobal::muse->changeConfig(true); // save configuration file - song->update(); - break; - } - } - } - } - } - // Normal track. - else - t = song->addTrack((Track::TrackType)n); - - if(t) - { - song->deselectTracks(); - t->setSelected(true); - - ///emit selectionChanged(); - emit selectionChanged(t); - adjustScrollbar(); - } - } + song->deselectTracks(); + t->setSelected(true); + + ///emit selectionChanged(); + emit selectionChanged(t); + adjustScrollbar(); + } } // Just delete p, and all its children will go too, right? //delete synp; delete p; - } + } else if (button == Qt::LeftButton) { - if (!ctrl) song->deselectTracks(); - } + if (!ctrl) + { + song->deselectTracks(); + emit selectionChanged(0); + } + } return; } @@ -1294,18 +1233,28 @@ void TList::mousePressEvent(QMouseEvent* ev) mode = NORMAL; QMenu* p = new QMenu; //p->clear(); - p->addAction(QIcon(*automation_clear_dataIcon), tr("Delete Track"))->setData(0); - p->addAction(QIcon(*track_commentIcon), tr("Track Comment"))->setData(1); + // Leave room for normal track IDs - base these at AUDIO_SOFTSYNTH. + p->addAction(QIcon(*automation_clear_dataIcon), tr("Delete Track"))->setData(Track::AUDIO_SOFTSYNTH + 1); + p->addAction(QIcon(*track_commentIcon), tr("Track Comment"))->setData(Track::AUDIO_SOFTSYNTH + 2); + p->addSeparator(); + QMenu* pnew = new QMenu(p); + pnew->setTitle(tr("Insert Track")); + pnew->setIcon(QIcon(*edit_track_addIcon)); + MusEUtil::populateAddTrack(pnew); + p->addMenu(pnew); QAction* act = p->exec(ev->globalPos(), 0); if (act) { int n = act->data().toInt(); - switch (n) { - case 0: // delete track + if(n >= Track::AUDIO_SOFTSYNTH && n < MENU_ADD_SYNTH_ID_BASE) + { + n -= Track::AUDIO_SOFTSYNTH; + switch (n) { + case 1: // delete track song->removeTrack0(t); audio->msgUpdateSoloStates(); break; - case 1: // show track comment + case 2: // show track comment { MusEWidget::TrackComment* tc = new MusEWidget::TrackComment(t, 0); tc->show(); @@ -1317,8 +1266,19 @@ void TList::mousePressEvent(QMouseEvent* ev) printf("action %d\n", n); break; } - } + else + { + t = song->addNewTrack(act, t); // Let addNewTrack handle it. Insert before clicked-on track 't'. + if(t) + { + song->deselectTracks(); + t->setSelected(true); + emit selectionChanged(t); + adjustScrollbar(); + } + } + } delete p; } break; |