From 6d181986beeacc4508aa6c3df71b8b56f6acfd0a Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Sun, 25 Dec 2011 20:02:44 +0000 Subject: disallowed mixing old-style and new-style drum tracks in one editor --- muse2/muse/midiedit/drumedit.cpp | 56 ++++++++++++++++++++++++++++++++------- muse2/muse/midiedit/drumedit.h | 7 +++-- muse2/muse/midiedit/scoreedit.cpp | 6 ++--- 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index 8f6d09ee..3bb48705 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -233,6 +233,48 @@ DrumEdit::DrumEdit(MusECore::PartList* pl, QWidget* parent, const char* name, un menuFunctions = menuBar()->addMenu(tr("Fu&nctions")); menuFunctions->setTearOffEnabled(true); + + + + // throw out new-style and midi tracks if there are old-style tracks present + bool has_old_style_tracks=false; + for (MusECore::ciPart p = parts()->begin(); p != parts()->end(); ++p) + if (p->second->track()->type()==MusECore::Track::DRUM) + { + has_old_style_tracks=true; + break; + } + + if (has_old_style_tracks) + { + bool thrown_out=false; + bool again; + do + { + again=false; + for (MusECore::ciPart p = parts()->begin(); p != parts()->end();p++) + if (p->second->track()->type()!=MusECore::Track::DRUM) + { + parts()->remove(p->second); + thrown_out=true; + again=true; + break; + } + } while (again); + + if (thrown_out) + { + QTimer* timer = new QTimer(this); + timer->setSingleShot(true); + connect(timer,SIGNAL(timeout()), this, SLOT(display_old_new_conflict_message())); + timer->start(10); + } + } + + _old_style_drummap_mode=has_old_style_tracks; + + + if (old_style_drummap_mode()) { @@ -1407,15 +1449,6 @@ void DrumEdit::setStep(QString v) canvas->setFocus(); } -bool DrumEdit::old_style_drummap_mode() -{ - for (MusECore::ciPart p = parts()->begin(); p != parts()->end(); ++p) - if (p->second->track()->type()==MusECore::Track::DRUM) - return true; - - return false; -} - void DrumEdit::ourDrumMapChanged(bool instrMapChanged) { if (instrMapChanged) @@ -1559,4 +1592,9 @@ void DrumEdit::hideEmptyInstruments() } +void DrumEdit::display_old_new_conflict_message() +{ + QMessageBox::information(this, tr("Not all parts are displayed"), tr("You selected both old-style-drumtracks and others (that is: new-style or midi tracks), but they cannot displayed in the same drum edit.\nI'll only display the old-style drumtracks in this editor, dropping the others.")); +} + } // namespace MusEGui diff --git a/muse2/muse/midiedit/drumedit.h b/muse2/muse/midiedit/drumedit.h index 59590d34..5bdd54a8 100644 --- a/muse2/muse/midiedit/drumedit.h +++ b/muse2/muse/midiedit/drumedit.h @@ -96,6 +96,7 @@ class DrumEdit : public MidiEditor { private: group_mode_t _group_mode; bool _ignore_hide; + bool _old_style_drummap_mode; MusECore::Event selEvent; MusECore::MidiPart* selPart; @@ -135,7 +136,7 @@ class DrumEdit : public MidiEditor { void setHeaderToolTips(); void setHeaderWhatsThis(); - + private slots: void setRaster(int); void noteinfoChanged(MusEGui::NoteInfo::ValType type, int val); @@ -159,6 +160,8 @@ class DrumEdit : public MidiEditor { void hideAllInstruments(); void hideUnusedInstruments(); void hideEmptyInstruments(); + + void display_old_new_conflict_message(); public slots: void setSelection(int, MusECore::Event&, MusECore::Part*); @@ -180,7 +183,7 @@ class DrumEdit : public MidiEditor { static void readConfiguration(MusECore::Xml& xml); static void writeConfiguration(int, MusECore::Xml&); - bool old_style_drummap_mode(); + bool old_style_drummap_mode() { return _old_style_drummap_mode; } group_mode_t group_mode() { return _group_mode; } bool ignore_hide() { return _ignore_hide; } diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 716ac65d..f17ea6f8 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4684,12 +4684,10 @@ void ScoreCanvas::add_new_parts(const std::map< MusECore::Part*, std::set