diff options
author | Florian Jung <flo@windfisch.org> | 2011-12-25 20:02:44 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2011-12-25 20:02:44 +0000 |
commit | 6d181986beeacc4508aa6c3df71b8b56f6acfd0a (patch) | |
tree | a0e6c6b036dcfa256be9809697d6440e7771af4c | |
parent | c836582af5661f1ca0e7d93c2674c947462faeb0 (diff) |
disallowed mixing old-style and new-style drum tracks in one editor
-rw-r--r-- | muse2/muse/midiedit/drumedit.cpp | 56 | ||||
-rw-r--r-- | muse2/muse/midiedit/drumedit.h | 7 | ||||
-rw-r--r-- | 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<MusECo * test! * * drum editor is buggy. propagate_drum_map may operate on old values * ("BUGGY! problem is: while changing entries, ourDrumMap - may be reallocated which causes abort()s and/or bugs.") - [ seems to work, needs further testing! ] - * o don't mix DRUM and NEW_DRUM in drumeditor! + * may be reallocated which causes abort()s and/or bugs.") + * [ seems to work, needs further testing! ] * o quantize must round UP, not down when at 0.5 * o my record flag handling - * o option for disabling old-style / new-style drum tracks? * ! o once, using super glue while a score editor displaying the glued * parts is open let muse segfault. this may or may not be fixed * now. check! |