From: terminator356 <ter...@us...> - 2008-08-18 00:15:59
|
Update of /cvsroot/lmuse/muse/muse/instruments In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28139/muse/instruments Modified Files: Tag: REL07 ccontrolbase.ui editinstrument.cpp editinstrument.h editinstrumentbase.ui midictrledit.cpp midictrledit.h minstrument.cpp minstrument.h Removed Files: Tag: REL07 instr Log Message: See ChangeLog Index: midictrledit.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/midictrledit.h,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.2.1 diff -C2 -d -r1.1.1.1 -r1.1.1.1.2.1 *** midictrledit.h 27 Oct 2003 18:54:18 -0000 1.1.1.1 --- midictrledit.h 18 Aug 2008 00:15:25 -0000 1.1.1.1.2.1 *************** *** 20,25 **** --- 20,32 ---- Q_OBJECT + int _lastPort; + bool _modified; + void addControllerToView(MidiController* mctrl); void mergeReplace(bool replace); + void updatePredefinedList(); + void updateMidiPortsList(); + void updateViewController(); + void setModified(bool); private slots: *************** *** 28,31 **** --- 35,39 ---- virtual void accept(); virtual void reject(); + void apply(); void nameChanged(const QString&); void typeChanged(const QString&); *************** *** 36,39 **** --- 44,49 ---- void minChanged(int); void maxChanged(int); + void portChanged(int); + void songChanged(int); public: Index: editinstrument.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/editinstrument.h,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.2.1 diff -C2 -d -r1.1.1.1 -r1.1.1.1.2.1 *** editinstrument.h 27 Oct 2003 18:54:20 -0000 1.1.1.1 --- editinstrument.h 18 Aug 2008 00:15:24 -0000 1.1.1.1.2.1 *************** *** 11,14 **** --- 11,18 ---- #include "editinstrumentbase.h" + #include "minstrument.h" + #include "midictrl.h" + class ListBoxData; + class ListViewData; //--------------------------------------------------------- *************** *** 19,22 **** --- 23,38 ---- Q_OBJECT + MidiInstrument workingInstrument; + ListBoxData* oldMidiInstrument; + ListViewData* oldPatchItem; + void closeEvent(QCloseEvent*); + int checkDirty(MidiInstrument*, bool isClose = false); + bool fileSave(MidiInstrument*, const QString&); + void updateInstrument(MidiInstrument*); + void updatePatch(MidiInstrument*, Patch*); + void updatePatchGroup(MidiInstrument*, PatchGroup*); + void changeInstrument(); + ListViewData* addControllerToView(MidiController* mctrl); + private slots: virtual void fileNew(); *************** *** 25,29 **** --- 41,69 ---- virtual void fileSaveAs(); virtual void fileExit(); + virtual void helpWhatsThis(); void instrumentChanged(); + void patchChanged(); + void controllerChanged(); + //void instrumentNameChanged(const QString&); + void instrumentNameReturn(); + void patchNameReturn(); + void deletePatchClicked(); + void newPatchClicked(); + void newGroupClicked(); + //void newCategoryClicked(); + void deleteControllerClicked(); + void newControllerClicked(); + void addControllerClicked(); + void ctrlTypeChanged(int); + //void ctrlNameChanged(const QString&); + void ctrlNameReturn(); + void ctrlHNumChanged(int); + void ctrlLNumChanged(int); + void ctrlMinChanged(int); + void ctrlMaxChanged(int); + void ctrlDefaultChanged(int); + //void sysexChanged(); + //void deleteSysexClicked(); + //void newSysexClicked(); public: --- instr DELETED --- Index: minstrument.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/minstrument.cpp,v retrieving revision 1.10 retrieving revision 1.10.2.1 diff -C2 -d -r1.10 -r1.10.2.1 *** minstrument.cpp 18 Jun 2004 08:36:44 -0000 1.10 --- minstrument.cpp 18 Aug 2008 00:15:25 -0000 1.10.2.1 *************** *** 62,67 **** //--------------------------------------------------------- ! static void readIDF(Xml& xml) { bool skipmode = true; for (;;) { --- 62,134 ---- //--------------------------------------------------------- ! //--------------------------------------------------------- ! // loadIDF ! //--------------------------------------------------------- ! ! static void loadIDF(QFileInfo* fi) { + /* + QFile qf(fi->filePath()); + if (!qf.open(IO_ReadOnly)) { + printf("cannot open file %s\n", fi->fileName().latin1()); + return; + } + if (debugMsg) + printf(" load instrument definition <%s>\n", fi->filePath().local8Bit().data()); + QDomDocument doc; + int line, column; + QString err; + if (!doc.setContent(&qf, false, &err, &line, &column)) { + QString col, ln, error; + col.setNum(column); + ln.setNum(line); + error = err + " at line: " + ln + " col: " + col; + printf("error reading file <%s>:\n %s\n", + fi->filePath().latin1(), error.latin1()); + return; + } + QDomNode node = doc.documentElement(); + while (!node.isNull()) { + QDomElement e = node.toElement(); + if (e.isNull()) + continue; + if (e.tagName() == "muse") { + QString version = e.attribute(QString("version")); + for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement e = n.toElement(); + if (e.tagName() == "MidiInstrument") { + MidiInstrument* i = new MidiInstrument(); + i->read(n); + i->setFilePath(fi->filePath()); + bool replaced = false; + for (int idx = 0; idx < midiInstruments.size(); ++idx) { + if (midiInstruments[idx]->iname() == i->iname()) { + midiInstruments.replace(idx, i); + replaced = true; + if (debugMsg) + printf("Midi Instrument Definition <%s> overwritten\n", + i->iname().toLocal8Bit().data()); + break; + } + } + if (!replaced) + midiInstruments += i; + } + } + } + else + printf("MusE:laodIDF: %s not supported\n", e.tagName().latin1()); + node = node.nextSibling(); + } + qf.close(); + */ + + FILE* f = fopen(fi->filePath().ascii(), "r"); + if (f == 0) + return; + if (debugMsg) + printf("READ IDF %s\n", fi->filePath().latin1()); + Xml xml(f); + bool skipmode = true; for (;;) { *************** *** 79,82 **** --- 146,150 ---- else if (tag == "MidiInstrument") { MidiInstrument* i = new MidiInstrument(); + i->setFilePath(fi->filePath()); i->read(xml); midiInstruments.push_back(i); *************** *** 95,115 **** } } - } - - - //--------------------------------------------------------- - // loadIDF - //--------------------------------------------------------- - - static void loadIDF(QFileInfo* fi) - { - FILE* f = fopen(fi->filePath().ascii(), "r"); - if (f == 0) - return; - if (debugMsg) - printf("READ IDF %s\n", fi->filePath().latin1()); - Xml xml(f); - readIDF(xml); fclose(f); } --- 163,169 ---- } } fclose(f); + + } *************** *** 122,130 **** genericMidiInstrument = new MidiInstrument(QWidget::tr("generic midi")); midiInstruments.push_back(genericMidiInstrument); - QString museGlobalInstruments(museGlobalShare - + QString("/instruments")); if (debugMsg) ! printf("load instrument definitions from <%s>\n", museGlobalInstruments.latin1()); ! QDir instrumentsDir(museGlobalInstruments, QString("*.idf"), QDir::Files); if (instrumentsDir.exists()) { const QFileInfoList* list = instrumentsDir.entryInfoList(); --- 176,182 ---- genericMidiInstrument = new MidiInstrument(QWidget::tr("generic midi")); midiInstruments.push_back(genericMidiInstrument); if (debugMsg) ! printf("load instrument definitions from <%s>\n", museInstruments.latin1()); ! QDir instrumentsDir(museInstruments, QString("*.idf"), QDir::Files); if (instrumentsDir.exists()) { const QFileInfoList* list = instrumentsDir.entryInfoList(); *************** *** 136,139 **** --- 188,194 ---- } } + else + printf("Instrument directory not found: %s\n", museInstruments.latin1()); + } *************** *** 193,198 **** // this controllers are always available for all instruments // ! MidiController* prog = new MidiController("Program", CTRL_PROGRAM, 0, 0x7fffff, 0); _controller->push_back(prog); } --- 248,254 ---- // this controllers are always available for all instruments // ! MidiController* prog = new MidiController("Program", CTRL_PROGRAM, 0, 0xffffff, 0); _controller->push_back(prog); + _dirty = false; } *************** *** 218,229 **** --- 274,412 ---- MidiInstrument::~MidiInstrument() { + for (ciPatchGroup g = pg.begin(); g != pg.end(); ++g) + { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + { + delete *p; + } + delete pgp; + } + + delete _midiInit; delete _midiReset; delete _midiState; + for(iMidiController i = _controller->begin(); i != _controller->end(); ++i) + delete *i; delete _controller; + if (_initScript) delete _initScript; } + /* + //--------------------------------------------------------- + // uniqueCopy + //--------------------------------------------------------- + + MidiInstrument& MidiInstrument::uniqueCopy(const MidiInstrument& ins) + { + _initScript = 0; + _midiInit = new EventList(); + _midiReset = new EventList(); + _midiState = new EventList(); + //--------------------------------------------------------- + // TODO: Copy the init script, and the lists. + //--------------------------------------------------------- + _controller = new MidiControllerList(*(ins._controller)); + + // Assignment + pg = ins.pg; + + _name = ins._name; + _filePath = ins._filePath; + + // Hmm, dirty, yes? But init sets it to false... + //_dirty = ins._dirty; + //_dirty = false; + _dirty = true; + + return *this; + } + */ + + //--------------------------------------------------------- + // assign + //--------------------------------------------------------- + + MidiInstrument& MidiInstrument::assign(const MidiInstrument& ins) + { + //--------------------------------------------------------- + // TODO: Copy the _initScript, and _midiInit, _midiReset, and _midiState lists. + //--------------------------------------------------------- + + for(iMidiController i = _controller->begin(); i != _controller->end(); ++i) + delete *i; + _controller->clear(); + + // Assignment + // *_controller = *(ins._controller); + for(ciMidiController i = ins._controller->begin(); i != ins._controller->end(); ++i) + { + MidiController* mc = *i; + _controller->push_back(new MidiController(*mc)); + } + + // pg.clear(); + // for(iPatchGroup ipg = pg.begin(); ipg != pg.end(); ++ipg) + // { + //ipg->patches.clear(); + + //const PatchGroup& g = *ipg; + //for(ciPatch ip = ipg->begin(); ip != ipg->end(); ++ipg) + //{ + + //} + // } + + for (ciPatchGroup g = pg.begin(); g != pg.end(); ++g) + { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + { + delete *p; + } + + delete pgp; + } + pg.clear(); + + // Assignment + // pg = ins.pg; + for(ciPatchGroup g = ins.pg.begin(); g != ins.pg.end(); ++g) + { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + PatchGroup* npg = new PatchGroup; + npg->name = pgp->name; + pg.push_back(npg); + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + { + Patch* pp = *p; + Patch* np = new Patch; + np->typ = pp->typ; + np->hbank = pp->hbank; + np->lbank = pp->lbank; + np->prog = pp->prog; + np->name = pp->name; + np->drum = pp->drum; + npg->patches.push_back(np); + } + } + + _name = ins._name; + _filePath = ins._filePath; + + // Hmm, dirty, yes? But init sets it to false... + //_dirty = ins._dirty; + //_dirty = false; + //_dirty = true; + + return *this; + } + //--------------------------------------------------------- // reset *************** *** 264,269 **** case Xml::TagStart: if (tag == "Patch") { ! Patch patch; ! patch.read(xml); patches.push_back(patch); } --- 447,452 ---- case Xml::TagStart: if (tag == "Patch") { ! Patch* patch = new Patch; ! patch->read(xml); patches.push_back(patch); } *************** *** 329,332 **** --- 512,560 ---- //--------------------------------------------------------- + // write + //--------------------------------------------------------- + + void Patch::write(int level, Xml& xml) + { + //if (drumMap == 0) + //{ + //QString s = QString("Patch name=\"%1\"").arg(Xml::xmlString(name)); + //if (typ != -1) + // s += QString(" mode=\"%d\"").arg(typ); + //s += QString(" hbank=\"%1\" lbank=\"%2\" prog=\"%3\"").arg(hbank).arg(lbank).arg(prog); + //xml.tagE(s); + xml.nput(level, "<Patch name=\"%s\"", Xml::xmlString(name).latin1()); + if(typ != -1) + xml.nput(" mode=\"%d\"", typ); + + if(hbank != -1) + xml.nput(" hbank=\"%d\"", hbank); + + if(lbank != -1) + xml.nput(" lbank=\"%d\"", lbank); + + xml.nput(" prog=\"%d\"", prog); + + //xml.nput(level, " hbank=\"%d\" lbank=\"%d\" prog=\"%d\"", hbank, lbank, prog); + if(drum) + //xml.nput(level, " drum=\"%d\"", int(drum)); + xml.nput(" drum=\"%d\"", int(drum)); + //xml.put(level, " />"); + xml.put(" />"); + + //return; + //} + + //QString s = QString("drummap name=\"%1\"").arg(Xml::xmlString(name)); + //s += QString(" hbank=\"%1\" lbank=\"%2\" prog=\"%3\"").arg(hbank).arg(lbank).arg(prog); + //xml.stag(s); + //for (int i = 0; i < DRUM_MAPSIZE; ++i) { + // DrumMapEntry* dm = drumMap->entry(i); + // dm->write(xml); + // } + //xml.etag("drummap"); + } + + //--------------------------------------------------------- // readMidiState //--------------------------------------------------------- *************** *** 352,368 **** case Xml::TagStart: if (tag == "Patch") { ! Patch patch; ! patch.read(xml); if (pg.empty()) { ! PatchGroup p; ! p.patches.push_back(patch); pg.push_back(p); } else ! pg[0].patches.push_back(patch); } else if (tag == "PatchGroup") { ! PatchGroup p; ! p.read(xml); pg.push_back(p); } --- 580,596 ---- case Xml::TagStart: if (tag == "Patch") { ! Patch* patch = new Patch; ! patch->read(xml); if (pg.empty()) { ! PatchGroup* p = new PatchGroup; ! p->patches.push_back(patch); pg.push_back(p); } else ! pg[0]->patches.push_back(patch); } else if (tag == "PatchGroup") { ! PatchGroup* p = new PatchGroup; ! p->read(xml); pg.push_back(p); } *************** *** 370,373 **** --- 598,615 ---- MidiController* mc = new MidiController(); mc->read(xml); + // Added by Tim. Copied from muse 2. + // + // HACK: make predefined "Program" controller overloadable + // + if (mc->name() == "Program") { + for (iMidiController i = _controller->begin(); i != _controller->end(); ++i) { + if ((*i)->name() == mc->name()) { + delete *i; + _controller->erase(i); + break; + } + } + } + _controller->push_back(mc); } *************** *** 406,409 **** --- 648,699 ---- //--------------------------------------------------------- + // write + //--------------------------------------------------------- + + void MidiInstrument::write(int level, Xml& xml) + { + xml.header(); + //xml.stag("muse version=\"2.1\""); + xml.tag(level, "muse version=\"1.0\""); + //xml.stag(QString("MidiInstrument name=\"%1\"").arg(Xml::xmlString(iname()))); + level++; + xml.tag(level, "MidiInstrument name=\"%s\"", Xml::xmlString(iname()).latin1()); + + // ------------- + // What about Init, Reset, State, and InitScript ? + // ------------- + + //std::vector<PatchGroup>* pg = groups(); + //for (std::vector<PatchGroup>::iterator g = pg->begin(); g != pg->end(); ++g) { + level++; + //for (std::vector<PatchGroup>::iterator g = pg.begin(); g != pg.end(); ++g) { + for (ciPatchGroup g = pg.begin(); g != pg.end(); ++g) { + PatchGroup* pgp = *g; + const PatchList& pl = pgp->patches; + //xml.stag(QString("PatchGroup name=\"%1\"").arg(Xml::xmlString(g->name))); + //xml.tag(level, "PatchGroup name=\"%s\"", Xml::xmlString(g->name).latin1()); + xml.tag(level, "PatchGroup name=\"%s\"", Xml::xmlString(pgp->name).latin1()); + level++; + //for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) + for (ciPatch p = pl.begin(); p != pl.end(); ++p) + //(*p)->write(xml); + //p->write(level, xml); + (*p)->write(level, xml); + level--; + //xml.etag("PatchGroup"); + xml.etag(level, "PatchGroup"); + } + for (iMidiController ic = _controller->begin(); ic != _controller->end(); ++ic) + //(*ic)->write(xml); + (*ic)->write(level, xml); + //xml.etag("MidiInstrument"); + level--; + xml.etag(level, "MidiInstrument"); + //xml.etag("muse"); + level--; + xml.etag(level, "muse"); + } + + //--------------------------------------------------------- // getPatchName //--------------------------------------------------------- *************** *** 418,422 **** int tmask = 1; ! int drum = channel == 9; bool hb = false; bool lb = false; --- 708,712 ---- int tmask = 1; ! bool drum = channel == 9; bool hb = false; bool lb = false; *************** *** 441,454 **** break; } ! for (std::vector<PatchGroup>::iterator i = pg.begin(); i != pg.end(); ++i) { ! PatchList& pl = i->patches; ! for (PatchList::const_iterator ipl = pl.begin(); ipl != pl.end(); ++ipl) { ! const Patch& mp = *ipl; ! if ((mp.typ & tmask) ! && (prog == mp.prog) ! && (mp.drum == drum) ! && (hbank == mp.hbank || !hb || mp.hbank == -1) ! && (lbank == mp.lbank || !lb || mp.lbank == -1)) ! return mp.name.latin1(); } } --- 731,744 ---- break; } ! for (ciPatchGroup i = pg.begin(); i != pg.end(); ++i) { ! const PatchList& pl = (*i)->patches; ! for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { ! const Patch* mp = *ipl; ! if ((mp->typ & tmask) ! && (prog == mp->prog) ! && (mp->drum == drum) ! && (hbank == mp->hbank || !hb || mp->hbank == -1) ! && (lbank == mp->lbank || !lb || mp->lbank == -1)) ! return mp->name.latin1(); } } *************** *** 460,499 **** //--------------------------------------------------------- ! void MidiInstrument::populatePatchPopup(QPopupMenu* menu, int, MType songType) { menu->clear(); int mask = 0; switch (songType) { case MT_XG: mask = 4; break; case MT_GS: mask = 2; break; ! case MT_GM: mask = 1; break; case MT_UNKNOWN: mask = 7; break; } if (pg.size() > 1) { ! for (std::vector<PatchGroup>::iterator i = pg.begin(); i != pg.end(); ++i) { QPopupMenu* pm = new QPopupMenu(menu); pm->setCheckable(false); pm->setFont(config.fonts[0]); ! PatchList& pl = i->patches; ! for (PatchList::const_iterator ipl = pl.begin(); ipl != pl.end(); ++ipl) { ! const Patch& mp = *ipl; ! if (mp.typ & mask) { ! int id = ((mp.hbank & 0xff) << 16) ! + ((mp.lbank & 0xff) << 8) + (mp.prog & 0xff); ! pm->insertItem(mp.name, id); } } ! menu->insertItem(i->name, pm); } } else if (pg.size() == 1 ){ // no groups ! PatchList& pl = pg.front().patches; ! for (PatchList::const_iterator ipl = pl.begin(); ipl != pl.end(); ++ipl) { ! const Patch& mp = *ipl; ! if (mp.typ & mask) { ! int id = ((mp.hbank & 0xff) << 16) ! + ((mp.lbank & 0xff) << 8) + (mp.prog & 0xff); ! menu->insertItem(mp.name, id); } } --- 750,797 ---- //--------------------------------------------------------- ! void MidiInstrument::populatePatchPopup(QPopupMenu* menu, int chan, MType songType) { menu->clear(); int mask = 0; + bool drum = chan == 9; + switch (songType) { case MT_XG: mask = 4; break; case MT_GS: mask = 2; break; ! case MT_GM: ! if(chan == 9) ! return; ! mask = 1; ! break; case MT_UNKNOWN: mask = 7; break; } if (pg.size() > 1) { ! for (ciPatchGroup i = pg.begin(); i != pg.end(); ++i) { ! PatchGroup* pgp = *i; QPopupMenu* pm = new QPopupMenu(menu); pm->setCheckable(false); pm->setFont(config.fonts[0]); ! const PatchList& pl = pgp->patches; ! for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { ! const Patch* mp = *ipl; ! if ((mp->typ & mask) && mp->drum == drum) { ! int id = ((mp->hbank & 0xff) << 16) ! + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); ! pm->insertItem(mp->name, id); } + } ! menu->insertItem(pgp->name, pm); } } else if (pg.size() == 1 ){ // no groups ! const PatchList& pl = pg.front()->patches; ! for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { ! const Patch* mp = *ipl; ! if (mp->typ & mask) { ! int id = ((mp->hbank & 0xff) << 16) ! + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); ! menu->insertItem(mp->name, id); } } Index: minstrument.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/minstrument.h,v retrieving revision 1.3 retrieving revision 1.3.2.1 diff -C2 -d -r1.3 -r1.3.2.1 *** minstrument.h 19 Jan 2004 18:15:55 -0000 1.3 --- minstrument.h 18 Aug 2008 00:15:25 -0000 1.3.2.1 *************** *** 13,17 **** #include <list> #include <vector> - #include <qstring.h> class MidiPort; --- 13,16 ---- *************** *** 21,24 **** --- 20,24 ---- class EventList; class MidiControllerList; + class QString; //--------------------------------------------------------- *************** *** 32,38 **** bool drum; void read(Xml&); }; ! typedef std::list<Patch> PatchList; //--------------------------------------------------------- --- 32,41 ---- bool drum; void read(Xml&); + void write(int level, Xml&); }; ! typedef std::list<Patch*> PatchList; ! typedef PatchList::iterator iPatch; ! typedef PatchList::const_iterator ciPatch; //--------------------------------------------------------- *************** *** 46,49 **** --- 49,56 ---- }; + typedef std::vector<PatchGroup*> PatchGroupList; + typedef PatchGroupList::iterator iPatchGroup; + typedef PatchGroupList::const_iterator ciPatchGroup; + //--------------------------------------------------------- // MidiInstrument *************** *** 51,56 **** class MidiInstrument { ! std::vector<PatchGroup> pg; MidiControllerList* _controller; void init(); --- 58,64 ---- class MidiInstrument { ! PatchGroupList pg; MidiControllerList* _controller; + bool _dirty; void init(); *************** *** 62,65 **** --- 70,74 ---- char* _initScript; QString _name; + QString _filePath; public: *************** *** 69,72 **** --- 78,90 ---- const QString& iname() const { return _name; } void setIName(const QString& txt) { _name = txt; } + + //MidiInstrument& uniqueCopy(const MidiInstrument&); + // Assign will 'delete' all existing patches and groups from the instrument. + MidiInstrument& assign(const MidiInstrument&); + QString filePath() const { return _filePath; } + void setFilePath(const QString& s) { _filePath = s; } + bool dirty() const { return _dirty; } + void setDirty(bool v) { _dirty = v; } + EventList* midiInit() const { return _midiInit; } *************** *** 86,89 **** --- 104,109 ---- virtual void populatePatchPopup(QPopupMenu*, int, MType); void read(Xml&); + void write(int level, Xml&); + PatchGroupList* groups() { return &pg; } }; Index: editinstrumentbase.ui =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/editinstrumentbase.ui,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** editinstrumentbase.ui 29 Oct 2003 18:46:56 -0000 1.2 --- editinstrumentbase.ui 18 Aug 2008 00:15:24 -0000 1.2.2.1 *************** *** 1,3 **** ! <!DOCTYPE UI><UI version="3.1" stdsetdef="1"> <class>EditInstrumentBase</class> <widget class="QMainWindow"> --- 1,3 ---- ! <!DOCTYPE UI><UI version="3.3" stdsetdef="1"> <class>EditInstrumentBase</class> <widget class="QMainWindow"> *************** *** 9,14 **** <x>0</x> [...1907 lines suppressed...] *** 906,909 **** --- 1279,1288 ---- <slot>fileExit()</slot> </connection> + <connection> + <sender>whatsThisAction</sender> + <signal>activated()</signal> + <receiver>Form1</receiver> + <slot>helpWhatsThis()</slot> + </connection> </connections> <slots> *************** *** 913,916 **** --- 1292,1296 ---- <slot>fileSaveAs()</slot> <slot>fileExit()</slot> + <slot>helpWhatsThis()</slot> </slots> <layoutdefaults spacing="6" margin="11"/> Index: ccontrolbase.ui =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/Attic/ccontrolbase.ui,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** ccontrolbase.ui 29 Oct 2003 18:46:56 -0000 1.2 --- ccontrolbase.ui 18 Aug 2008 00:15:24 -0000 1.2.2.1 *************** *** 54,58 **** </property> <property name="autoDefault"> ! <bool>true</bool> </property> <property name="toolTip" stdset="0"> --- 54,58 ---- </property> <property name="autoDefault"> ! <bool>false</bool> </property> <property name="toolTip" stdset="0"> *************** *** 72,76 **** </property> <property name="autoDefault"> ! <bool>true</bool> </property> <property name="toolTip" stdset="0"> --- 72,76 ---- </property> <property name="autoDefault"> ! <bool>false</bool> </property> <property name="toolTip" stdset="0"> *************** *** 103,110 **** </property> <property name="autoDefault"> ! <bool>true</bool> </property> ! <property name="default"> ! <bool>true</bool> </property> </widget> --- 103,118 ---- </property> <property name="autoDefault"> ! <bool>false</bool> </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>buttonApply</cstring> ! </property> ! <property name="text"> ! <string>A&pply</string> ! </property> ! <property name="autoDefault"> ! <bool>false</bool> </property> </widget> *************** *** 117,121 **** </property> <property name="autoDefault"> ! <bool>true</bool> </property> </widget> --- 125,129 ---- </property> <property name="autoDefault"> ! <bool>false</bool> </property> </widget> *************** *** 393,396 **** --- 401,414 ---- </item> <item> + <property name="text"> + <string>RPN14</string> + </property> + </item> + <item> + <property name="text"> + <string>NRPN14</string> + </property> + </item> + <item> <property name="text"> <string>Pitch</string> *************** *** 501,504 **** --- 519,523 ---- <tabstop>buttonDelete</tabstop> <tabstop>buttonOk</tabstop> + <tabstop>buttonApply</tabstop> <tabstop>buttonCancel</tabstop> </tabstops> Index: editinstrument.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/editinstrument.cpp,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** editinstrument.cpp 1 Jun 2004 14:25:49 -0000 1.2 --- editinstrument.cpp 18 Aug 2008 00:15:24 -0000 1.2.2.1 *************** *** 8,14 **** --- 8,35 ---- #include <qlistbox.h> + #include <stdio.h> + #include <errno.h> + #include <qmessagebox.h> + #include <qspinbox.h> + #include <qcombobox.h> + #include <qlineedit.h> + #include <qcheckbox.h> [...2686 lines suppressed...] + //if (!f.open(QIODevice::WriteOnly)) + FILE* f = fopen(i->filePath().latin1(), "w"); + if(f == 0) + fileSaveAs(); + else { + //f.close(); + if(fclose(f) != 0) + printf("EditInstrument::checkDirty: Error closing file\n"); + + if(fileSave(i, i->filePath())) + i->setDirty(false); + } + } + //return false; + return 0; + } + //return n == 2; + return n; } Index: midictrledit.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/instruments/midictrledit.cpp,v retrieving revision 1.1.1.1.2.1 retrieving revision 1.1.1.1.2.2 diff -C2 -d -r1.1.1.1.2.1 -r1.1.1.1.2.2 *** midictrledit.cpp 21 May 2008 00:28:53 -0000 1.1.1.1.2.1 --- midictrledit.cpp 18 Aug 2008 00:15:24 -0000 1.1.1.1.2.2 *************** *** 14,20 **** --- 14,23 ---- #include "midictrl.h" #include "midictrledit.h" + #include "minstrument.h" + #include "song.h" #include "xml.h" #include "filedialog.h" #include "globals.h" + #include <qlistview.h> #include <qlineedit.h> *************** *** 28,34 **** static MidiController predefinedMidiController[] = { ! MidiController(QString("Pitch"), 0x40000, -10000, +10000, 0), ! MidiController(QString("Program"), 0x40001, 0, 127, 0), ! MidiController(QString("BankSel"), 0x10000, 0, 16383, 0) }; enum { --- 31,35 ---- static MidiController predefinedMidiController[] = { ! MidiController(QString("Pitch"), 0x40000, -8192, +8191, 0), }; enum { *************** *** 36,40 **** COL_HNUM, COL_LNUM, COL_MIN, COL_MAX }; - //--------------------------------------------------------- // addControllerToView --- 37,40 ---- *************** *** 44,58 **** { QString hnum; ! hnum.setNum(mctrl->num()); ! QString lnum("---"); QString min; - min.setNum(mctrl->minVal()); QString max; ! max.setNum(mctrl->maxVal()); new QListViewItem(viewController, mctrl->name(), ! int2ctrlType(mctrl->num()), hnum, lnum, min, max ); } //--------------------------------------------------------- --- 44,92 ---- { QString hnum; ! QString lnum; QString min; QString max; ! int n = mctrl->num(); ! int h = (n >> 8) & 0x7f; ! int l = n & 0x7f; ! MidiController::ControllerType t = midiControllerType(n); ! switch(t) ! { ! case MidiController::Controller7: ! hnum = "---"; ! lnum.setNum(l); ! min.setNum(mctrl->minVal()); ! max.setNum(mctrl->maxVal()); ! break; ! case MidiController::RPN: ! case MidiController::NRPN: ! case MidiController::RPN14: ! case MidiController::NRPN14: ! case MidiController::Controller14: ! hnum.setNum(h); ! lnum.setNum(l); ! min.setNum(mctrl->minVal()); ! max.setNum(mctrl->maxVal()); ! break; ! case MidiController::Pitch: ! hnum = "---"; ! lnum = "---"; ! min.setNum(mctrl->minVal()); ! max.setNum(mctrl->maxVal()); ! break; ! default: ! hnum = "---"; ! lnum = "---"; ! min.setNum(0); ! max.setNum(0); ! break; ! } ! new QListViewItem(viewController, mctrl->name(), ! int2ctrlType(t), hnum, lnum, min, max ); + } //--------------------------------------------------------- *************** *** 63,66 **** --- 97,101 ---- : MidiControllerEditDialogBase(parent, name, modal, fl) { + _lastPort = midiPortsList->currentItem(); viewController->setColumnAlignment(COL_HNUM, AlignCenter); viewController->setColumnAlignment(COL_LNUM, AlignCenter); *************** *** 70,79 **** // populate list of predefined controller int size = sizeof(predefinedMidiController) / sizeof(*predefinedMidiController); for (int i = 0; i < size; ++i) listController->insertItem(predefinedMidiController[i].name()); listController->setSelected(0, true); ! // populate ports pulldown for (int i = 0; i < MIDI_PORTS; ++i) { MidiPort* port = &midiPorts[i]; --- 105,177 ---- // populate list of predefined controller + updatePredefinedList(); + + // populate ports pulldown + updateMidiPortsList(); + connect(buttonNew, SIGNAL(clicked()), SLOT(ctrlAdd())); + connect(buttonDelete, SIGNAL(clicked()), SLOT(ctrlDelete())); + connect(entryName, SIGNAL(textChanged(const QString&)), SLOT(nameChanged(const QString&))); + connect(comboType, SIGNAL(activated(const QString&)), SLOT(typeChanged(const QString&))); + connect(spinboxHCtrlNo, SIGNAL(valueChanged(int)), SLOT(valueHChanged(int))); + connect(spinboxLCtrlNo, SIGNAL(valueChanged(int)), SLOT(valueLChanged(int))); + connect(spinboxMin, SIGNAL(valueChanged(int)), SLOT(minChanged(int))); + connect(spinboxMax, SIGNAL(valueChanged(int)), SLOT(maxChanged(int))); + connect(viewController, SIGNAL(selectionChanged()), SLOT(controllerChanged())); + connect(buttonApply, SIGNAL(clicked()), SLOT(apply())); + connect(midiPortsList, SIGNAL(activated(int)), SLOT(portChanged(int))); + + updateViewController(); + _modified = false; + buttonApply->setEnabled(false); + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); + } + + //--------------------------------------------------------- + // songChanged + //--------------------------------------------------------- + + void MidiControllerEditDialog::songChanged(int flags) + { + // Is it simply a midi controller value adjustment? Forget it. + if(flags == SC_MIDI_CONTROLLER) + return; + + if(flags & (SC_CONFIG | SC_MIDI_CONTROLLER)) + //if(flags & (SC_CONFIG | SC_MIDI_CONTROLLER_ADD)) + { + //listController->blockSignals(true); + midiPortsList->blockSignals(true); + //viewController->blockSignals(true); + updatePredefinedList(); + updateMidiPortsList(); + updateViewController(); + //viewController->setCurrentItem(viewController->firstChild()); + //controllerChanged(viewController->currentItem()); + //listController->blockSignals(false); + midiPortsList->blockSignals(false); + //viewController->blockSignals(false); + } + } + + //--------------------------------------------------------- + // updatePredefinedList + //--------------------------------------------------------- + + void MidiControllerEditDialog::updatePredefinedList() + { + listController->clear(); int size = sizeof(predefinedMidiController) / sizeof(*predefinedMidiController); for (int i = 0; i < size; ++i) listController->insertItem(predefinedMidiController[i].name()); listController->setSelected(0, true); + } ! //--------------------------------------------------------- ! // updateMidiPortsList ! //--------------------------------------------------------- ! ! void MidiControllerEditDialog::updateMidiPortsList() ! { ! midiPortsList->clear(); for (int i = 0; i < MIDI_PORTS; ++i) { MidiPort* port = &midiPorts[i]; *************** *** 84,103 **** midiPortsList->insertItem(name, i); } ! reject(); // populate list ! viewController->setCurrentItem(viewController->firstChild()); ! ! connect(buttonNew, SIGNAL(clicked()), SLOT(ctrlAdd())); ! connect(buttonDelete, SIGNAL(clicked()), SLOT(ctrlDelete())); ! connect(entryName, SIGNAL(textChanged(const QString&)), SLOT(nameChanged(const QString&))); ! connect(comboType, SIGNAL(activated(const QString&)), SLOT(typeChanged(const QString&))); ! connect(spinboxHCtrlNo, SIGNAL(valueChanged(int)), SLOT(valueHChanged(int))); ! connect(spinboxLCtrlNo, SIGNAL(valueChanged(int)), SLOT(valueLChanged(int))); ! connect(spinboxMin, SIGNAL(valueChanged(int)), SLOT(minChanged(int))); ! connect(spinboxMax, SIGNAL(valueChanged(int)), SLOT(maxChanged(int))); ! connect(viewController, SIGNAL(selectionChanged()), SLOT(controllerChanged())); controllerChanged(viewController->currentItem()); ! } //--------------------------------------------------------- --- 182,237 ---- midiPortsList->insertItem(name, i); } + _lastPort = midiPortsList->currentItem(); + } ! //--------------------------------------------------------- ! // updateViewController ! //--------------------------------------------------------- + void MidiControllerEditDialog::updateViewController() + { + //for (iMidiController i = midiControllerList.begin(); + // i != midiControllerList.end(); ++i) { + // addControllerToView(&*i); + int mpidx = midiPortsList->currentItem(); + + viewController->clear(); + //MidiControllerList* mcl; + MidiInstrument* mi = midiPorts[mpidx].instrument(); + //if(mi) + MidiControllerList* mcl = mi->controller(); + //else + // mcl = &defaultMidiController; + for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) + addControllerToView(*i); + + viewController->blockSignals(true); + viewController->setCurrentItem(viewController->firstChild()); controllerChanged(viewController->currentItem()); ! viewController->blockSignals(false); ! ! setModified(false); ! } ! ! //--------------------------------------------------------- ! // reject ! //--------------------------------------------------------- ! ! void MidiControllerEditDialog::setModified(bool v) ! { ! if(v == _modified) ! return; ! ! _modified = v; ! ! if(v) ! { ! buttonApply->setEnabled(true); ! } ! else ! { ! buttonApply->setEnabled(false); ! } ! } //--------------------------------------------------------- *************** *** 107,119 **** void MidiControllerEditDialog::reject() { ! viewController->clear(); ! for (iMidiController i = midiControllerList.begin(); ! i != midiControllerList.end(); ++i) { ! addControllerToView(&*i); ! } MidiControllerEditDialogBase::reject(); } //--------------------------------------------------------- // ctrlAdd //--------------------------------------------------------- --- 241,338 ---- void MidiControllerEditDialog::reject() { ! //MidiControllerList* mcl; ! // MidiInstrument* mi = midiPorts[mpidx].instrument(); ! //if(mi) ! // MidiControllerList* mcl = mi->controller(); ! //else ! // mcl = &defaultMidiController; ! // for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) ! // addControllerToView(*i); ! ! // Restore the list before closing this dialog. ! updateViewController(); ! //setModified(false); ! MidiControllerEditDialogBase::reject(); } //--------------------------------------------------------- + // apply + //--------------------------------------------------------- + + void MidiControllerEditDialog::apply() + { + int mpidx = midiPortsList->currentItem(); + //MidiControllerList* mcl; + MidiInstrument* mi = midiPorts[mpidx].instrument(); + //if(mi) + MidiControllerList* mcl = mi->controller(); + //else + // mcl = &defaultMidiController; + mcl->clear(); + + + QListViewItem* item = viewController->firstChild(); + int hval; + int lval; + while (item) { + hval = item->text(COL_HNUM).toInt(); + lval = item->text(COL_LNUM).toInt(); + MidiController* c = new MidiController(); + c->setName(item->text(COL_NAME)); + + MidiController::ControllerType type = ctrlType2Int(item->text(COL_TYPE)); + + switch(type) { + case MidiController::Controller7: + c->setNum(lval); + break; + case MidiController::Controller14: + c->setNum((hval << 8 | lval) | CTRL_14_OFFSET); + break; + case MidiController::RPN: + c->setNum((hval << 8 | lval) | CTRL_RPN_OFFSET); + break; + case MidiController::NRPN: + c->setNum((hval << 8 | lval) | CTRL_NRPN_OFFSET); + break; + case MidiController::RPN14: + c->setNum((hval << 8 | lval) | CTRL_RPN14_OFFSET); + break; + case MidiController::NRPN14: + c->setNum((hval << 8 | lval) | CTRL_NRPN14_OFFSET); + break; + case MidiController::Program: + c->setNum(CTRL_PROGRAM); + break; + case MidiController::Pitch: + c->setNum(CTRL_PITCH); + break; + default: + break; + } + if(type == MidiController::Program) + { + c->setMinVal(0); + c->setMaxVal(0xffffff); + } + else + { + c->setMinVal(item->text(COL_MIN).toInt()); + c->setMaxVal(item->text(COL_MAX).toInt()); + } + + mcl->push_back(c); + + item = item->nextSibling(); + } + + // Update the list before closing this dialog. + //updateViewController(); + //setModified(false); + song->update(SC_CONFIG | SC_MIDI_CONTROLLER); + } + + //--------------------------------------------------------- // ctrlAdd //--------------------------------------------------------- *************** *** 130,145 **** if (c->name() != name) continue; ! MidiController::ControllerType t = c->type(); QString type = int2ctrlType(t); QString min, max; - min.setNum(c->minVal()); - max.setNum(c->maxVal()); - QString hno, lno; ! int h = (c->num() >> 14) & 0x7f; int l = c->num() & 0x7f; switch(t) { case MidiController::Controller7: hno = "---"; lno.setNum(l); --- 349,363 ---- if (c->name() != name) continue; ! MidiController::ControllerType t = midiControllerType(c->num()); QString type = int2ctrlType(t); QString min, max; QString hno, lno; ! int h = (c->num() >> 8) & 0x7f; int l = c->num() & 0x7f; switch(t) { case MidiController::Controller7: + min.setNum(c->minVal()); + max.setNum(c->maxVal()); hno = "---"; lno.setNum(l); *************** *** 147,159 **** case MidiController::RPN: case MidiController::NRPN: case MidiController::Controller14: hno.setNum(h); lno.setNum(l); break; case MidiController::Pitch: ! case MidiController::Program: hno = "---"; lno = "---"; default: break; } --- 365,387 ---- case MidiController::RPN: case MidiController::NRPN: + case MidiController::RPN14: + case MidiController::NRPN14: case MidiController::Controller14: + min.setNum(c->minVal()); + max.setNum(c->maxVal()); hno.setNum(h); lno.setNum(l); break; case MidiController::Pitch: ! min.setNum(c->minVal()); ! max.setNum(c->maxVal()); hno = "---"; lno = "---"; + break; default: + hno = "---"; + lno = "---"; + min.setNum(0); + max.setNum(0); break; } *************** *** 162,167 **** --- 390,399 ---- name, type, hno, lno, min, max); + viewController->blockSignals(true); viewController->setCurrentItem(item); controllerChanged(item); + viewController->blockSignals(false); + + setModified(true); break; } *************** *** 178,181 **** --- 410,415 ---- return; delete item; + + setModified(true); } *************** *** 186,225 **** void MidiControllerEditDialog::accept() { ! midiControllerList.clear(); ! ! QListViewItem* item = viewController->firstChild(); ! int hval = item->text(COL_HNUM).toInt(); ! int lval = item->text(COL_LNUM).toInt(); ! while (item) { ! MidiController c; ! c.setName(item->text(COL_NAME)); ! MidiController::ControllerType type = ctrlType2Int(item->text(COL_TYPE)); ! switch(type) { ! case MidiController::Controller7: ! c.setNum(hval); ! break; ! case MidiController::Controller14: ! c.setNum((hval << 8 | lval) | 0x10000); ! break; ! case MidiController::RPN: ! c.setNum((hval << 8 | lval) | 0x20000); ! break; ! case MidiController::NRPN: ! c.setNum((hval << 8 | lval) | 0x30000); ! break; ! case MidiController::Pitch: ! c.setNum(CTRL_PITCH); ! break; ! default: ! break; ! } ! c.setMinVal(item->text(COL_MIN).toInt()); ! c.setMaxVal(item->text(COL_MAX).toInt()); ! midiControllerList.push_back(c); ! item = item->nextSibling(); ! } ! MidiControllerEditDialogBase::accept(); } --- 420,449 ---- void MidiControllerEditDialog::accept() { ! apply(); ! MidiControllerEditDialogBase::accept(); ! } ! //--------------------------------------------------------- ! // portChanged ! //--------------------------------------------------------- ! void MidiControllerEditDialog::portChanged(int n) ! { ! if(n == _lastPort) ! return; ! _lastPort = n; ! ! //listController->blockSignals(true); ! //midiPortsList->blockSignals(true); ! //viewController->blockSignals(true); ! //updatePredefinedList(); ! //updateMidiPortsList(); ! //reject(); // populate list ! updateViewController(); ! //viewController->setCurrentItem(viewController->firstChild()); ! //controllerChanged(viewController->currentItem()); ! //listController->blockSignals(false); ! //midiPortsList->blockSignals(false); ! //viewController->blockSignals(false); } *************** *** 234,237 **** --- 458,463 ---- return; item->setText(COL_NAME, s); + + setModified(true); } *************** *** 246,267 **** return; item->setText(COL_TYPE, s); - item->setText(COL_MIN, QString("0")); switch(ctrlType2Int(s)) { - case 2: // RPN - case 3: // NRPN case MidiController::Controller14: item->setText(COL_MAX, QString("16383")); break; case MidiController::Controller7: ! case MidiController::Program: item->setText(COL_MAX, QString("127")); break; case MidiController::Pitch: ! item->setText(COL_MIN, QString("-5000")); ! item->setText(COL_MAX, QString("+5000")); break; default: break; } controllerChanged(item); } --- 472,517 ---- return; item->setText(COL_TYPE, s); switch(ctrlType2Int(s)) { case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + item->setText(COL_LNUM, QString("0")); + item->setText(COL_HNUM, QString("0")); + item->setText(COL_MIN, QString("0")); item->setText(COL_MAX, QString("16383")); break; case MidiController::Controller7: ! item->setText(COL_MIN, QString("0")); ! item->setText(COL_MAX, QString("127")); ! item->setText(COL_LNUM, QString("0")); ! item->setText(COL_HNUM, QString("---")); ! break; ! case MidiController::RPN: ! case MidiController::NRPN: ! item->setText(COL_MIN, QString("0")); item->setText(COL_MAX, QString("127")); + item->setText(COL_LNUM, QString("0")); + item->setText(COL_HNUM, QString("0")); + break; + + case MidiController::Program: + + item->setText(COL_MIN, QString("---")); + item->setText(COL_MAX, QString("---")); + item->setText(COL_LNUM, QString("---")); + item->setText(COL_HNUM, QString("---")); break; case MidiController::Pitch: ! item->setText(COL_MIN, QString("-8192")); ! item->setText(COL_MAX, QString("8191")); ! item->setText(COL_LNUM, QString("---")); ! item->setText(COL_HNUM, QString("---")); break; default: break; } + + setModified(true); + controllerChanged(item); } *************** *** 279,282 **** --- 529,534 ---- s.setNum(val); item->setText(COL_HNUM, s); + + setModified(true); } *************** *** 293,296 **** --- 545,550 ---- s.setNum(val); item->setText(COL_LNUM, s); + + setModified(true); } *************** *** 334,345 **** spinboxMin->setEnabled(true); spinboxMax->setEnabled(true); ! ! spinboxHCtrlNo->setValue(item->text(COL_HNUM).toInt()); spinboxMin->setValue(item->text(COL_MIN).toInt()); spinboxMax->setValue(item->text(COL_MAX).toInt()); - item->setText(COL_LNUM, QString("---")); break; - case MidiController::Controller14: case MidiController::RPN: case MidiController::NRPN: --- 588,599 ---- spinboxMin->setEnabled(true); spinboxMax->setEnabled(true); ! spinboxHCtrlNo->setValue(0); ! spinboxLCtrlNo->setValue(item->text(COL_LNUM).toInt()); ! spinboxMin->setRange(0, 127); ! ... [truncated message content] |