summaryrefslogtreecommitdiff
path: root/muse2/muse/arranger
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2011-09-13 23:59:23 +0000
committerTim E. Real <termtech@rogers.com>2011-09-13 23:59:23 +0000
commita8c8fa89d916bded2905e0a5a8c05ac30e159902 (patch)
treea921aa8311d8542a77f6cbfc952561691cb7bd8d /muse2/muse/arranger
parent56d4a94c40bbcae6a2862fba3e2923542511779f (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.cpp7
-rw-r--r--muse2/muse/arranger/arrangerview.h1
-rw-r--r--muse2/muse/arranger/pcanvas.cpp18
-rw-r--r--muse2/muse/arranger/tlist.cpp134
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;