diff options
author | Florian Jung <flo@windfisch.org> | 2012-01-06 15:37:19 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2012-01-06 15:37:19 +0000 |
commit | bcc4a8edf89457a6e0f15c14970202ca7c05b6e0 (patch) | |
tree | 6a2d4dd707475ee9bfc7c9e62307c11c70f4e4f7 /muse2 | |
parent | eec7d9eb4d38a8f7bdbdb9d6301990a8574b3936 (diff) |
merged with release_2_0
Diffstat (limited to 'muse2')
-rw-r--r-- | muse2/muse/app.cpp | 123 | ||||
-rw-r--r-- | muse2/muse/app.h | 10 | ||||
-rw-r--r-- | muse2/muse/conf.cpp | 116 | ||||
-rw-r--r-- | muse2/muse/conf.h | 2 | ||||
-rw-r--r-- | muse2/muse/ctrl/ctrlpanel.cpp | 4 | ||||
-rw-r--r-- | muse2/muse/midiedit/scoreedit.cpp | 23 | ||||
-rw-r--r-- | muse2/muse/songfile.cpp | 9 | ||||
-rw-r--r-- | muse2/muse/widgets/fdialogbuttons.ui | 19 | ||||
-rw-r--r-- | muse2/muse/widgets/filedialog.cpp | 26 | ||||
-rw-r--r-- | muse2/muse/widgets/filedialog.h | 2 | ||||
-rw-r--r-- | muse2/share/templates/audio.med | 24 | ||||
-rw-r--r-- | muse2/share/templates/default.med | 26 | ||||
-rw-r--r-- | muse2/share/templates/midiGM.med | 24 | ||||
-rw-r--r-- | muse2/share/templates/monorecord.med | 24 | ||||
-rw-r--r-- | muse2/share/templates/synti.med | 24 |
15 files changed, 147 insertions, 309 deletions
diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index 21426979..3dfba915 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -964,77 +964,17 @@ MusE::MusE(int /*argc*/, char** /*argv*/) : QMainWindow() MusEGlobal::song->blockSignals(false); // Load start song moved to main.cpp p4.0.41 REMOVE Tim. - /* - - //--------------------------------------------------- - // load project - // if no songname entered on command line: - // startMode: 0 - load last song - // 1 - load default template - // 2 - load configured start song - //--------------------------------------------------- - - QString name; - bool useTemplate = false; - if (argc >= 2) - name = argv[0]; - else if (MusEGlobal::config.startMode == 0) { - if (argc < 2) - //name = projectList[0] ? *projectList[0] : QString("untitled"); - name = projectList[0] ? *projectList[0] : MusEGui::getUniqueUntitledName(); // p4.0.40 - else - name = argv[0]; - printf("starting with selected song %s\n", MusEGlobal::config.startSong.toLatin1().constData()); - } - else if (MusEGlobal::config.startMode == 1) { - printf("starting with default template\n"); - name = MusEGlobal::museGlobalShare + QString("/templates/default.med"); - useTemplate = true; - } - else if (MusEGlobal::config.startMode == 2) { - printf("starting with pre configured song %s\n", MusEGlobal::config.startSong.toLatin1().constData()); - name = MusEGlobal::config.startSong; - } - - // loadProjectFile(name, useTemplate, true); //commented out by flo: see below (*) - */ changeConfig(false); QSettings settings("MusE", "MusE-qt"); restoreGeometry(settings.value("MusE/geometry").toByteArray()); - //restoreState(settings.value("MusE/windowState").toByteArray()); - MusEGlobal::song->update(); // commented out by flo: will be done by the below (*) - updateWindowMenu(); // same here + MusEGlobal::song->update(); + updateWindowMenu(); // Load start song moved to main.cpp p4.0.41 REMOVE Tim. - /* - - // this is (*). - // this is a really hackish workaround for the loading-on-startup problem. - // i have absolutely no idea WHY it breaks when using loadProjectFile() - // above, but it does on my machine (it doesn't on others!). - // the problem can be worked around by delaying loading the song file. - // i use hackishSongOpenTimer for this, which calls after 10ms a slot - // which then does the actual loadProjectFile() call. - // FIXME: please, if anyone finds the real problem, FIX it and - // remove that dirty, dirty workaround! - hackishSongOpenFilename=name; - hackishSongOpenUseTemplate=useTemplate; - hackishSongOpenTimer=new QTimer(this); - hackishSongOpenTimer->setInterval(10); - hackishSongOpenTimer->setSingleShot(true); - connect(hackishSongOpenTimer, SIGNAL(timeout()), this, SLOT(hackishSongOpenTimerTimeout())); - hackishSongOpenTimer->start(); - */ } -// Load start song moved to main.cpp p4.0.41 REMOVE Tim. -//void MusE::hackishSongOpenTimerTimeout() -//{ - ///loadProjectFile(hackishSongOpenFilename, hackishSongOpenUseTemplate, true); - //loadProjectFile(hackishSongOpenFilename, hackishSongOpenUseTemplate, !hackishSongOpenUseTemplate); -//} MusE::~MusE() { @@ -1133,7 +1073,7 @@ void MusE::loadProjectFile(const QString& name) loadProjectFile(name, false, false); } -void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) +void MusE::loadProjectFile(const QString& name, bool songTemplate, bool doReadMidiPorts) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); @@ -1179,7 +1119,7 @@ void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) } microSleep(100000); progress->setValue(10); - loadProjectFile1(name, songTemplate, loadAll); + loadProjectFile1(name, songTemplate, doReadMidiPorts); microSleep(100000); progress->setValue(90); if (restartSequencer) @@ -1203,10 +1143,10 @@ void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) // // template - if true, load file but do not change // project name -// loadAll - load song data + configuration data +// doReadMidiPorts - also read midi port configuration //--------------------------------------------------------- -void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll) +void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool doReadMidiPorts) { //if (audioMixer) // audioMixer->clear(); @@ -1216,7 +1156,7 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll mixer2->clear(); _arranger->clear(); // clear track info //if (clearSong()) - if (clearSong(loadAll)) // Allow not touching things like midi ports. p4.0.17 TESTING: Maybe some problems... + if (clearSong(doReadMidiPorts)) // Allow not touching things like midi ports. p4.0.17 TESTING: Maybe some problems... return; progress->setValue(20); @@ -1264,7 +1204,7 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll } else { MusECore::Xml xml(f); - read(xml, !loadAll, songTemplate); + read(xml, doReadMidiPorts, songTemplate); bool fileError = ferror(f); popenFlag ? pclose(f) : fclose(f); if (fileError) { @@ -1274,7 +1214,6 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll } } } - //else if (ex == "mid." || ex == "kar.") { else if (mex == "mid" || mex == "kar") { setConfigDefaults(); if (!importMidi(name, false)) @@ -1300,7 +1239,8 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll autoMixerAction->setChecked(MusEGlobal::automation); - if (loadAll) { + //FINDMICHJETZT does this work? + { showBigtime(MusEGlobal::config.bigTimeVisible); //showMixer(MusEGlobal::config.mixerVisible); showMixer1(MusEGlobal::config.mixer1Visible); @@ -1333,7 +1273,8 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll transport->show(); transport->move(MusEGlobal::config.geometryTransport.topLeft()); showTransport(MusEGlobal::config.transportVisible); - } + } + progress->setValue(40); transport->setMasterFlag(MusEGlobal::song->masterFlag()); @@ -1348,7 +1289,7 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll progress->setValue(50); // Try this AFTER the song update above which does a mixer update... Tested OK - mixers resize properly now. - if (loadAll) + //FINDMICHJETZT does this work? { if(mixer1) { @@ -1382,7 +1323,7 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll if (songTemplate) { - // maximize the arranger in traditional SDI mode + // maximize the arranger when in traditional SDI mode if (MusEGui::TopWin::_defaultSubwin[MusEGui::TopWin::ARRANGER]) { bool maximizeArranger=true; @@ -1448,12 +1389,12 @@ void MusE::setFollow() void MusE::loadProject() { - bool loadAll; + bool doReadMidiPorts; QString fn = MusEGui::getOpenFileName(QString(""), MusEGlobal::med_file_pattern, this, - tr("MusE: load project"), &loadAll); + tr("MusE: load project"), &doReadMidiPorts); if (!fn.isEmpty()) { MusEGlobal::museProject = QFileInfo(fn).absolutePath(); - loadProjectFile(fn, false, loadAll); + loadProjectFile(fn, false, doReadMidiPorts); } } @@ -2757,11 +2698,11 @@ MusE::lash_idle_cb () return; while ( (event = lash_get_event (lash_client)) ) - { + { switch (lash_event_get_type (event)) - { + { case LASH_Save_File: - { + { /* save file */ QString ss = QString(lash_event_get_string(event)) + QString("/lash-project-muse.med"); int ok = save (ss.toAscii(), false); @@ -2773,37 +2714,37 @@ MusE::lash_idle_cb () MusEGlobal::museProject = QFileInfo(ss.toAscii()).absolutePath(); } lash_send_event (lash_client, event); - } - break; + } + break; case LASH_Restore_File: - { + { /* load file */ QString sr = QString(lash_event_get_string(event)) + QString("/lash-project-muse.med"); loadProjectFile(sr.toAscii(), false, true); lash_send_event (lash_client, event); - } - break; + } + break; case LASH_Quit: - { + { /* quit muse */ std::cout << "MusE::lash_idle_cb Received LASH_Quit" << std::endl; lash_event_destroy (event); - } - break; + } + break; default: - { + { std::cout << "MusE::lash_idle_cb Received unknown LASH event of type " << lash_event_get_type (event) << std::endl; lash_event_destroy (event); - } - break; } - } + break; + } + } } #endif /* HAVE_LASH */ diff --git a/muse2/muse/app.h b/muse2/muse/app.h index 5dad1ff5..2e62db1a 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -211,12 +211,8 @@ class MusE : public QMainWindow MidiTransformerDialog* midiTransformerDialog; QMenu* openRecent; - //QTimer* hackishSongOpenTimer; - //QString hackishSongOpenFilename; - //bool hackishSongOpenUseTemplate; - bool readMidi(FILE*); - void read(MusECore::Xml& xml, bool skipConfig, bool isTemplate); + void read(MusECore::Xml& xml, bool doReadMidiPorts, bool isTemplate); void processTrack(MusECore::MidiTrack* track); void write(MusECore::Xml& xml) const; @@ -235,7 +231,7 @@ class MusE : public QMainWindow MusECore::PartList* getMidiPartsToEdit(); MusECore::Part* readPart(MusECore::Xml& xml); bool checkRegionNotNull(); - void loadProjectFile1(const QString&, bool songTemplate, bool loadAll); + void loadProjectFile1(const QString&, bool songTemplate, bool doReadMidiPorts); void writeGlobalConfiguration(int level, MusECore::Xml&) const; void writeConfiguration(int level, MusECore::Xml&) const; void updateConfiguration(); @@ -336,7 +332,7 @@ class MusE : public QMainWindow void bounceToFile(MusECore::AudioOutput* ao = 0); void closeEvent(QCloseEvent*e); void loadProjectFile(const QString&); - void loadProjectFile(const QString&, bool songTemplate, bool loadAll); + void loadProjectFile(const QString&, bool songTemplate, bool doReadMidiPorts); void toplevelDeleting(MusEGui::TopWin* tl); void loadTheme(const QString&); void loadStyleSheetFile(const QString&); diff --git a/muse2/muse/conf.cpp b/muse2/muse/conf.cpp index e9ec1396..b1481f60 100644 --- a/muse2/muse/conf.cpp +++ b/muse2/muse/conf.cpp @@ -220,7 +220,7 @@ static void readPortChannel(Xml& xml, int midiPort) // readConfigMidiPort //--------------------------------------------------------- -static void readConfigMidiPort(Xml& xml, bool skipConfig) +static void readConfigMidiPort(Xml& xml, bool onlyReadChannelState) { int idx = 0; QString device; @@ -250,14 +250,14 @@ static void readConfigMidiPort(Xml& xml, bool skipConfig) switch (token) { case Xml::TagStart: - // skipConfig added so it doesn't overwrite midi ports. p4.0.41 Tim. + // onlyReadChannelState added so it doesn't overwrite midi ports. p4.0.41 Tim. // Try to keep the controller information. But, this may need to be moved below. // Also may want to try to keep sync info, but that's a bit risky, so let's not for now. if (tag == "channel") { readPortChannel(xml, idx); break; } - else if (skipConfig){ + else if (onlyReadChannelState){ xml.skip(tag); break; } @@ -303,7 +303,7 @@ static void readConfigMidiPort(Xml& xml, bool skipConfig) case Xml::TagEnd: if (tag == "midiport") { - if(skipConfig) // p4.0.41 + if(onlyReadChannelState) // p4.0.41 return; //if (idx > MIDI_PORTS) { @@ -495,7 +495,7 @@ static void loadConfigMetronom(Xml& xml) // readSeqConfiguration //--------------------------------------------------------- -static void readSeqConfiguration(Xml& xml, bool skipConfig) +static void readSeqConfiguration(Xml& xml, bool skipMidiPorts) { for (;;) { Xml::Token token = xml.parse(); @@ -507,7 +507,7 @@ static void readSeqConfiguration(Xml& xml, bool skipConfig) if (tag == "metronom") loadConfigMetronom(xml); else if (tag == "midiport") - readConfigMidiPort(xml, skipConfig); + readConfigMidiPort(xml, skipMidiPorts); else if (tag == "rcStop") MusEGlobal::rcStopNote = xml.parseInt(); else if (tag == "rcEnable") @@ -537,8 +537,10 @@ static void readSeqConfiguration(Xml& xml, bool skipConfig) // readConfiguration //--------------------------------------------------------- -void readConfiguration(Xml& xml, bool readOnlySequencer, bool doReadGlobalConfig) +void readConfiguration(Xml& xml, bool doReadMidiPortConfig, bool doReadGlobalConfig) { + if (doReadGlobalConfig) doReadMidiPortConfig=true; + int mixers = 0; for (;;) { Xml::Token token = xml.parse(); @@ -557,10 +559,54 @@ void readConfiguration(Xml& xml, bool readOnlySequencer, bool doReadGlobalConfig midiport configuration and VOLUME. */ if (tag == "sequencer") { - readSeqConfiguration(xml, readOnlySequencer); + readSeqConfiguration(xml, !doReadMidiPortConfig); break; } - else if (readOnlySequencer) { + else if (tag == "waveTracksVisible") + WaveTrack::setVisible((bool)xml.parseInt()); + else if (tag == "auxTracksVisible") + AudioAux::setVisible((bool)xml.parseInt()); + else if (tag == "groupTracksVisible") + AudioGroup::setVisible((bool)xml.parseInt()); + else if (tag == "midiTracksVisible") + MidiTrack::setVisible((bool)xml.parseInt()); + else if (tag == "inputTracksVisible") + AudioInput::setVisible((bool)xml.parseInt()); + else if (tag == "outputTracksVisible") + AudioOutput::setVisible((bool)xml.parseInt()); + else if (tag == "synthTracksVisible") + SynthI::setVisible((bool)xml.parseInt()); + else if (tag == "bigtimeVisible") + MusEGlobal::config.bigTimeVisible = xml.parseInt(); + else if (tag == "transportVisible") + MusEGlobal::config.transportVisible = xml.parseInt(); + else if (tag == "mixer1Visible") + MusEGlobal::config.mixer1Visible = xml.parseInt(); + else if (tag == "mixer2Visible") + MusEGlobal::config.mixer2Visible = xml.parseInt(); + else if (tag == "markerVisible") + // I thought this was obsolete (done by song's toplevel list), but + // it's obviously needed. (flo) + MusEGlobal::config.markerVisible = xml.parseInt(); + else if (tag == "arrangerVisible") + // same here. + MusEGlobal::config.arrangerVisible = xml.parseInt(); + else if (tag == "geometryTransport") + MusEGlobal::config.geometryTransport = readGeometry(xml, tag); + else if (tag == "geometryBigTime") + MusEGlobal::config.geometryBigTime = readGeometry(xml, tag); + else if (tag == "Mixer") { + if(mixers == 0) + MusEGlobal::config.mixer1.read(xml); + else + MusEGlobal::config.mixer2.read(xml); + ++mixers; + } + else if (tag == "geometryMain") + MusEGlobal::config.geometryMain = readGeometry(xml, tag); + + + else if (doReadMidiPortConfig==false) { xml.skip(tag); break; } @@ -585,30 +631,6 @@ void readConfiguration(Xml& xml, bool readOnlySequencer, bool doReadGlobalConfig MusEGlobal::midiFilterCtrl3 = xml.parseInt(); else if (tag == "midiFilterCtrl4") MusEGlobal::midiFilterCtrl4 = xml.parseInt(); - else if (tag == "waveTracksVisible") - WaveTrack::setVisible((bool)xml.parseInt()); - else if (tag == "auxTracksVisible") - AudioAux::setVisible((bool)xml.parseInt()); - else if (tag == "groupTracksVisible") - AudioGroup::setVisible((bool)xml.parseInt()); - else if (tag == "midiTracksVisible") - MidiTrack::setVisible((bool)xml.parseInt()); - else if (tag == "inputTracksVisible") - AudioInput::setVisible((bool)xml.parseInt()); - else if (tag == "outputTracksVisible") { - printf("output track set from config!\n"); - AudioOutput::setVisible((bool)xml.parseInt()); - } - else if (tag == "synthTracksVisible") - SynthI::setVisible((bool)xml.parseInt()); - else if (tag == "bigtimeVisible") - MusEGlobal::config.bigTimeVisible = xml.parseInt(); - else if (tag == "transportVisible") - MusEGlobal::config.transportVisible = xml.parseInt(); - else if (tag == "mixer1Visible") - MusEGlobal::config.mixer1Visible = xml.parseInt(); - else if (tag == "mixer2Visible") - MusEGlobal::config.mixer2Visible = xml.parseInt(); else if (tag == "mtctype") MusEGlobal::mtcType= xml.parseInt(); else if (tag == "sendClockDelay") @@ -637,19 +659,6 @@ void readConfiguration(Xml& xml, bool readOnlySequencer, bool doReadGlobalConfig readMidiTransform(xml); else if (tag == "midiInputTransform") readMidiInputTransform(xml); - else if (tag == "geometryTransport") - MusEGlobal::config.geometryTransport = readGeometry(xml, tag); - else if (tag == "geometryBigTime") - MusEGlobal::config.geometryBigTime = readGeometry(xml, tag); - else if (tag == "Mixer") { - if(mixers == 0) - MusEGlobal::config.mixer1.read(xml); - else - MusEGlobal::config.mixer2.read(xml); - ++mixers; - } - else if (tag == "geometryMain") - MusEGlobal::config.geometryMain = readGeometry(xml, tag); // don't insert else if(...) clauses between // this line and "Global config stuff begins here". @@ -977,9 +986,6 @@ void readConfiguration(Xml& xml, bool readOnlySequencer, bool doReadGlobalConfig // ---- the following only skips obsolete entries ---- else if ((tag == "arranger") || (tag == "geometryPianoroll") || (tag == "geometryDrumedit")) xml.skip(tag); - else if (tag == "markerVisible") - //MusEGlobal::config.markerVisible = xml.parseInt(); //Obsolete (done by song's toplevel list) - xml.skip(tag); else if (tag == "mixerVisible") // MusEGlobal::config.mixerVisible = xml.parseInt(); // Obsolete xml.skip(tag); @@ -1032,9 +1038,9 @@ void readConfiguration(Xml& xml, bool readOnlySequencer, bool doReadGlobalConfig printf("text <%s>\n", xml.s1().toLatin1().constData()); break; case Xml::Attribut: - if (readOnlySequencer) + if (doReadMidiPortConfig==false) break; - if (tag == "version") { + else if (tag == "version") { int major = xml.s2().section('.', 0, 0).toInt(); int minor = xml.s2().section('.', 1, 1).toInt(); xml.setVersion(major, minor); @@ -1083,7 +1089,7 @@ bool readConfiguration() else if (skipmode) break; else if (tag == "configuration") - readConfiguration(xml,false, true /* read global config as well */); + readConfiguration(xml,true, true /* read global config as well */); else xml.unknown("muse config"); break; @@ -1517,6 +1523,12 @@ void MusE::writeConfiguration(int level, MusECore::Xml& xml) const if (bigtime) xml.geometryTag(level, "geometryBigTime", bigtime); + // i thought this was obsolete, but it seems to be necessary (flo) + xml.intTag(level, "arrangerVisible", viewArrangerAction->isChecked()); + xml.intTag(level, "markerVisible", viewMarkerAction->isChecked()); + // but storing the geometry IS obsolete. this is really + // done by TopLevel::writeConfiguration + xml.intTag(level, "mixer1Visible", viewMixerAAction->isChecked()); xml.intTag(level, "mixer2Visible", viewMixerBAction->isChecked()); if (mixer1) diff --git a/muse2/muse/conf.h b/muse2/muse/conf.h index f3f4753c..0813ed3e 100644 --- a/muse2/muse/conf.h +++ b/muse2/muse/conf.h @@ -54,7 +54,7 @@ class MidiFileConfig : public QDialog, public Ui::ConfigMidiFileBase { namespace MusECore { class Xml; extern bool readConfiguration(); -extern void readConfiguration(Xml&, bool readOnlySequencer, bool doReadGlobalConfig); +extern void readConfiguration(Xml&, bool doReadMidiPorts, bool doReadGlobalConfig); } #endif diff --git a/muse2/muse/ctrl/ctrlpanel.cpp b/muse2/muse/ctrl/ctrlpanel.cpp index e46f949c..2de234b8 100644 --- a/muse2/muse/ctrl/ctrlpanel.cpp +++ b/muse2/muse/ctrl/ctrlpanel.cpp @@ -770,8 +770,8 @@ void CtrlPanel::ctrlPopup() std::list<CI> sList; typedef std::list<CI>::iterator isList; - for (MusECore::iMidiCtrlValList i = cll->lower_bound(min); i != cll->lower_bound(max); ++i) { - MusECore::MidiCtrlValList* cl = i->second; + for (MusECore::iMidiCtrlValList it = cll->lower_bound(min); it != cll->lower_bound(max); ++it) { + MusECore::MidiCtrlValList* cl = it->second; MusECore::MidiController* c = port->midiController(cl->num()); // dont show drum specific controller if not a drum track if ((c->num() & 0xff) == 0xff) { diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 7e40a41f..46ce8e60 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4668,12 +4668,33 @@ void ScoreCanvas::add_new_parts(const std::map< MusECore::Part*, std::set<MusECo * o test drum controllers * o test old- and new drumtrack recording, steprecording * - * > o fix valgrind problems (the two "FINDMICHJETZT" lines in scoreedit.cpp) * > o add a songposition scrollbar-toolbar (in different sizes) * this might be equivalent to "redo transport menu" (below). * > o add toolbar(s) for tempo- etc spinboxes from the transport window + * o add controller editor "like search-and-replace": + * acts on all specified type's events, and edits the value: + * - apply some MIN or MAX on it + * - scale it + * - offset it + * - only act on values in a certain value range + * - maybe do curve-mapping + * o add "volume", "pan", "prog" etc columns to the arranger. + * ideally make them fully configurable: let the user add any + * controller together with any column label to the list. + * these will just set the controller at the very first tick. + * o remove the silly song type! + * o remove the song length spinbox + * o logical/physical device mapping: + * song only contains logical information: not some "synth port", + * but a "synth name", like "Yamaha DX7" or "TR-808". + * the global config contains physical information, like + * "'Yamaha DX7' is on 'USB Midi Bridge, Output two'", + * "'TR-808' is on 'jack-midi port foo, connected to bar'" + * if loading a song with unknown synth name, ask the user. + * o prerecord feature. * * o find and fix FINDMICHJETZT + * o fix valgrind problems (the two "FINDMICHJETZT" lines in scoreedit.cpp) * * IMPORTANT TODO * o allow steprec-insert-rest-note to be set to "off" / "unused" diff --git a/muse2/muse/songfile.cpp b/muse2/muse/songfile.cpp index 5726345e..f76c16f9 100644 --- a/muse2/muse/songfile.cpp +++ b/muse2/muse/songfile.cpp @@ -1504,7 +1504,7 @@ void MusE::readMidiport(MusECore::Xml& xml) // read song //--------------------------------------------------------- -void MusE::read(MusECore::Xml& xml, bool skipConfig, bool isTemplate) +void MusE::read(MusECore::Xml& xml, bool doReadMidiPorts, bool isTemplate) { bool skipmode = true; for (;;) { @@ -1522,12 +1522,7 @@ void MusE::read(MusECore::Xml& xml, bool skipConfig, bool isTemplate) else if (skipmode) break; else if (tag == "configuration") - if (skipConfig) - //xml.skip(tag); - readConfiguration(xml,true /* only read sequencer settings */, false /* do NOT read global settings, see below */); - // see even more below! - else - readConfiguration(xml, false, false /* do NOT read global settings, see below */); + readConfiguration(xml, doReadMidiPorts, false /* do NOT read global settings, see below */); /* Explanation for why "do NOT read global settings": * if you would use true here, then muse would overwrite certain global config stuff * by the settings stored in the song. but you don't want this. imagine that you diff --git a/muse2/muse/widgets/fdialogbuttons.ui b/muse2/muse/widgets/fdialogbuttons.ui index 09f9e52d..a2196b66 100644 --- a/muse2/muse/widgets/fdialogbuttons.ui +++ b/muse2/muse/widgets/fdialogbuttons.ui @@ -6,7 +6,7 @@ <rect> <x>0</x> <y>0</y> - <width>145</width> + <width>150</width> <height>438</height> </rect> </property> @@ -121,7 +121,7 @@ </spacer> </item> <item> - <widget class="QFrame" name="loadAllGroup"> + <widget class="QFrame" name="readMidiPortsGroup"> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> </property> @@ -130,21 +130,16 @@ </property> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> - <widget class="QRadioButton" name="loadAllButton"> + <widget class="QCheckBox" name="readMidiPortsButton"> <property name="text"> - <string>Songdata + + <string>read Midi Port Configuration</string> </property> - <property name="checked"> + <property name="checkable"> <bool>true</bool> </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="loadSongButton"> - <property name="text"> - <string>only -Songdata</string> + <property name="checked"> + <bool>true</bool> </property> </widget> </item> diff --git a/muse2/muse/widgets/filedialog.cpp b/muse2/muse/widgets/filedialog.cpp index 7f2c1681..5fbae28b 100644 --- a/muse2/muse/widgets/filedialog.cpp +++ b/muse2/muse/widgets/filedialog.cpp @@ -239,7 +239,7 @@ MFileDialog::MFileDialog(const QString& dir, } } - buttons.loadAllGroup->setVisible(false); + buttons.readMidiPortsGroup->setVisible(false); } } @@ -276,7 +276,7 @@ void MFileDialog::directoryChanged(const QString&) // getOpenFileName //--------------------------------------------------------- QString getOpenFileName(const QString &startWith, const char** filters_chararray, - QWidget* parent, const QString& name, bool* all, MFileDialog::ViewType viewType) + QWidget* parent, const QString& name, bool* doReadMidiPorts, MFileDialog::ViewType viewType) { QStringList filters = localizedStringListFromCharArray(filters_chararray, "file_patterns"); @@ -290,26 +290,24 @@ QString getOpenFileName(const QString &startWith, const char** filters_chararray dlg->projectToggled(true); else if (viewType == MFileDialog::USER_VIEW) dlg->userToggled(true); - if (all) { - dlg->buttons.loadAllGroup->setVisible(true); - //dlg->buttons.globalButton->setVisible(false); - } + if (doReadMidiPorts) + dlg->buttons.readMidiPortsGroup->setVisible(true); + if (!initialSelection.isEmpty()) dlg->selectFile(initialSelection); dlg->setFileMode(QFileDialog::ExistingFile); QStringList files; QString result; if (dlg->exec() == QDialog::Accepted) { - files = dlg->selectedFiles(); - if (!files.isEmpty()) - result = files[0]; - if (all) { - *all = dlg->buttons.loadAllButton->isChecked(); - } - } + files = dlg->selectedFiles(); + if (!files.isEmpty()) + result = files[0]; + if (doReadMidiPorts) + *doReadMidiPorts = dlg->buttons.readMidiPortsButton->isChecked(); + } delete dlg; return result; - } +} //--------------------------------------------------------- // getSaveFileName diff --git a/muse2/muse/widgets/filedialog.h b/muse2/muse/widgets/filedialog.h index b4e21e2c..c9ab8e09 100644 --- a/muse2/muse/widgets/filedialog.h +++ b/muse2/muse/widgets/filedialog.h @@ -93,7 +93,7 @@ class ContentsPreview : public QWidget, public Q3FilePreview { QString getSaveFileName(const QString& startWidth, const char** filters, QWidget* parent, const QString& name); QString getOpenFileName(const QString& startWidth, const char** filters, - QWidget* parent, const QString& name, bool* openAll, MFileDialog::ViewType viewType = MFileDialog::PROJECT_VIEW); + QWidget* parent, const QString& name, bool* doReadMidiPorts, MFileDialog::ViewType viewType = MFileDialog::PROJECT_VIEW); QString getImageFileName(const QString& startWith, const char** filters, QWidget* parent, const QString& name); diff --git a/muse2/share/templates/audio.med b/muse2/share/templates/audio.med index df4463ff..0e0abd55 100644 --- a/muse2/share/templates/audio.med +++ b/muse2/share/templates/audio.med @@ -647,28 +647,4 @@ <drummap> </drummap> </song> - <toplevels> - <arrangerview> - <topwin> - <is_subwin>1</is_subwin> - <x>0</x> - <y>0</y> - <width>850</width> - <height>382</height> - <shares_menu>1</shares_menu> - <toolbars>000000ff00000000fd00000000000000000000000000000004000000040000000800000008fc00000000</toolbars> - </topwin> - <tool>1</tool> - <arranger> - <info>1</info> - <split>370 477 </split> - <list> - <header> 7 9 8 6 5 4 3 2 1 0 </header> - </list> - <xpos>0</xpos> - <xmag>266</xmag> - <ypos>0</ypos> - </arranger> - </arrangerview> - </toplevels> </muse> diff --git a/muse2/share/templates/default.med b/muse2/share/templates/default.med index 49ccbc02..a33ffc3d 100644 --- a/muse2/share/templates/default.med +++ b/muse2/share/templates/default.med @@ -412,29 +412,5 @@ <drummap> </drummap> </song> - <toplevels> - <arrangerview> - <topwin> - <is_subwin>1</is_subwin> - <x>0</x> - <y>0</y> - <width>850</width> - <height>382</height> - <shares_menu>1</shares_menu> - <toolbars>000000ff00000000fd00000000000000000000000000000004000000040000000800000008fc00000000</toolbars> - </topwin> - <tool>1</tool> - <arranger> - <info>1</info> - <split>440 407 </split> - <list> - <header> 7 9 8 6 5 4 3 2 1 0 </header> - </list> - <xpos>0</xpos> - <xmag>266</xmag> - <ypos>0</ypos> - </arranger> - </arrangerview> - </toplevels> </muse> -
\ No newline at end of file + diff --git a/muse2/share/templates/midiGM.med b/muse2/share/templates/midiGM.med index 54ec99a0..19b74dff 100644 --- a/muse2/share/templates/midiGM.med +++ b/muse2/share/templates/midiGM.med @@ -560,28 +560,4 @@ <drummap> </drummap> </song> - <toplevels> - <arrangerview> - <topwin> - <is_subwin>1</is_subwin> - <x>0</x> - <y>0</y> - <width>850</width> - <height>382</height> - <shares_menu>1</shares_menu> - <toolbars>000000ff00000000fd00000000000000000000000000000004000000040000000800000008fc00000000</toolbars> - </topwin> - <tool>1</tool> - <arranger> - <info>1</info> - <split>557 290 </split> - <list> - <header> 7 9 8 6 5 4 3 2 1 0 </header> - </list> - <xpos>0</xpos> - <xmag>266</xmag> - <ypos>0</ypos> - </arranger> - </arrangerview> - </toplevels> </muse> diff --git a/muse2/share/templates/monorecord.med b/muse2/share/templates/monorecord.med index 4651a7eb..738cab17 100644 --- a/muse2/share/templates/monorecord.med +++ b/muse2/share/templates/monorecord.med @@ -853,28 +853,4 @@ <drummap> </drummap> </song> - <toplevels> - <arrangerview> - <topwin> - <is_subwin>1</is_subwin> - <x>0</x> - <y>0</y> - <width>850</width> - <height>382</height> - <shares_menu>1</shares_menu> - <toolbars>000000ff00000000fd00000000000000000000000000000004000000040000000800000008fc00000000</toolbars> - </topwin> - <tool>1</tool> - <arranger> - <info>1</info> - <split>557 290 </split> - <list> - <header> 7 9 8 6 5 4 3 2 1 0 </header> - </list> - <xpos>0</xpos> - <xmag>266</xmag> - <ypos>0</ypos> - </arranger> - </arrangerview> - </toplevels> </muse> diff --git a/muse2/share/templates/synti.med b/muse2/share/templates/synti.med index e242e775..461e315a 100644 --- a/muse2/share/templates/synti.med +++ b/muse2/share/templates/synti.med @@ -971,28 +971,4 @@ <drummap> </drummap> </song> - <toplevels> - <arrangerview> - <topwin> - <is_subwin>1</is_subwin> - <x>0</x> - <y>0</y> - <width>850</width> - <height>382</height> - <shares_menu>1</shares_menu> - <toolbars>000000ff00000000fd00000000000000000000000000000004000000040000000800000008fc00000000</toolbars> - </topwin> - <tool>1</tool> - <arranger> - <info>1</info> - <split>370 477 </split> - <list> - <header> 7 9 8 6 5 4 3 2 1 0 </header> - </list> - <xpos>0</xpos> - <xmag>266</xmag> - <ypos>0</ypos> - </arranger> - </arrangerview> - </toplevels> </muse> |