diff options
| -rw-r--r-- | muse/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | muse/TODO | 26 | ||||
| -rw-r--r-- | muse/all.h | 1 | ||||
| -rw-r--r-- | muse/muse/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | muse/muse/conf.cpp | 11 | ||||
| -rw-r--r-- | muse/muse/dssihost.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/exportmidi.cpp | 4 | ||||
| -rw-r--r-- | muse/muse/gconfig.cpp | 19 | ||||
| -rw-r--r-- | muse/muse/gconfig.h | 13 | ||||
| -rw-r--r-- | muse/muse/globals.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/globals.h | 2 | ||||
| -rw-r--r-- | muse/muse/importmidi.cpp | 8 | ||||
| -rw-r--r-- | muse/muse/muse.cpp | 687 | ||||
| -rw-r--r-- | muse/muse/muse.h | 21 | ||||
| -rw-r--r-- | muse/muse/preferences.cpp | 39 | ||||
| -rw-r--r-- | muse/muse/preferences.h | 2 | ||||
| -rw-r--r-- | muse/muse/preferences.ui | 4008 | ||||
| -rw-r--r-- | muse/muse/projectdialog.cpp | 143 | ||||
| -rw-r--r-- | muse/muse/projectdialog.h | 43 | ||||
| -rw-r--r-- | muse/muse/projectdialog.ui | 206 | ||||
| -rw-r--r-- | muse/muse/song.cpp | 122 | ||||
| -rw-r--r-- | muse/muse/song.h | 130 | ||||
| -rw-r--r-- | muse/muse/songfile.cpp | 80 | ||||
| -rw-r--r-- | muse/muse/synth.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/wave.cpp | 14 | ||||
| -rw-r--r-- | muse/muse/waveedit/waveview.cpp | 4 | ||||
| -rw-r--r-- | muse/muse/waveevent.cpp | 11 | 
27 files changed, 3020 insertions, 2588 deletions
diff --git a/muse/CMakeLists.txt b/muse/CMakeLists.txt index 97a81145..bb434178 100644 --- a/muse/CMakeLists.txt +++ b/muse/CMakeLists.txt @@ -20,7 +20,7 @@  project(muse)  CMAKE_MINIMUM_REQUIRED(VERSION 2.4.1) -set(CMAKE_VERBOSE_MAKEFILE ON) +# set(CMAKE_VERBOSE_MAKEFILE ON)  set(CMAKE_INCLUDE_CURRENT_DIR TRUE)  set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)  set(CMAKE_SKIP_RULE_DEPENDENCY TRUE) @@ -1,17 +1,17 @@  -----------------------------TODO------------------------------------------- -(4.5.2006) -	- manage project subdirectories (better organize wave files) -            - muse is always associated with a project, there is no -              "No Project" or "Default Project" -            - muse on start asks for a project name (select or create) -            - midi files cannot be loaded directly als project anymore, -              you have to first create a project and then call -              "import midifile" -            - "New File" and "Select File" are combined into -              "Select Project" -            - there is no "Save As" anymore (your project always has a -              name) -               +(10.5.2006) +      - Select Project Dialog: +            - add Toolbar with Functions: +                  - create Subfolder +                  - Folder Up +                  - Folder Down +            - display project subfolder +            - show current project path in QLabel +            - marke projects with different samplerat as current +      - check for samplerate when loading project +      - compute song len in seconds when saving project +      - create dialog to edit project comment +  BUGS  	- updating the gui during midi recording is too slow;          a new, faster implementation is needed @@ -46,6 +46,7 @@  #include <QtCore/QEvent>  #include <QtCore/QTranslator>  #include <QtCore/qatomic.h> +#include <QtCore/QTemporaryFile>  #include <QtDesigner/QDesignerCustomWidgetInterface>  #include <QtDesigner/QDesignerFormEditorInterface> diff --git a/muse/muse/CMakeLists.txt b/muse/muse/CMakeLists.txt index a997f084..438d22f1 100644 --- a/muse/muse/CMakeLists.txt +++ b/muse/muse/CMakeLists.txt @@ -43,16 +43,19 @@ MACRO(WRAP_UI outfiles )  subdirs(        ctrl widgets master driver instruments marker liste        ) +  set (muse_uics        muse preferences exportmididialog configmidifile        transport aboutbox transpose +      projectdialog        midiedit/quantconfig        mixer/routedialog        arranger/configtrack        )  set(muse_mocs -	preferences plugingui midiplugin muse song transport conf editor +	projectdialog preferences plugingui midiplugin muse  +      song transport conf editor  	cobject transpose track midisynti midiport        miditrack wavetrack audiotrack audioaux audiooutput        audioinput audiogroup exportmidi @@ -110,7 +113,6 @@ add_executable ( muse        midiedit/drummap.cpp         midiedit/citem.cpp  -#      midiedit/midieditor.cpp        ${muse_mocCPP}        ${muse_moc_headers} diff --git a/muse/muse/conf.cpp b/muse/muse/conf.cpp index 40f91dec..ca8064f7 100644 --- a/muse/muse/conf.cpp +++ b/muse/muse/conf.cpp @@ -248,9 +248,9 @@ void readConfiguration(QDomNode node)  //TD            else if (tag == "midiTransform")  //                  readMidiTransform(node.firstChild());              else if (tag == "startMode") -                  config.startMode = i; -            else if (tag == "startSong") -                  config.startSong = s; +                  config.startMode = (StartMode)i; +            else if (tag == "startProject") +                  config.startProject = s;              else if (tag == "followMode")                    TimeCanvas::followMode = (FollowMode)i;              else if (tag == "defaultMidiInputDevice") @@ -265,6 +265,8 @@ void readConfiguration(QDomNode node)                    config.connectToAllMidiTracks = i;              else if (tag == "createDefaultMidiInput")                    config.createDefaultMidiInput = i; +            else if (tag == "projectPath") +                  config.projectPath = s;              else if (tag == "PianoRoll")                    PianoRoll::readConfiguration(node);              else if (tag == "DrumEdit") @@ -394,7 +396,7 @@ void MusE::writeGlobalConfiguration(Xml& xml) const        xml.strTag("copyright", config.copyright);        xml.intTag("smfFormat", config.smfFormat);        xml.intTag("startMode", config.startMode); -      xml.strTag("startSong", config.startSong); +      xml.strTag("startProject", config.startProject);        xml.intTag("freewheelMode", config.useJackFreewheelMode);        xml.intTag("txDeviceId", txDeviceId); @@ -482,6 +484,7 @@ void MusE::writeGlobalConfiguration(Xml& xml) const        xml.intTag("connectToAllMidiDevices", config.connectToAllMidiDevices);        xml.intTag("connectToAllMidiTracks", config.connectToAllMidiTracks);        xml.intTag("createDefaultMidiInput", config.createDefaultMidiInput); +      xml.strTag("projectPath", config.projectPath);        PianoRoll::writeConfiguration(xml);        DrumEdit::writeConfiguration(xml); diff --git a/muse/muse/dssihost.cpp b/muse/muse/dssihost.cpp index 1e8ab542..7fbe5274 100644 --- a/muse/muse/dssihost.cpp +++ b/muse/muse/dssihost.cpp @@ -116,7 +116,7 @@ int DssiSynthIF::oscUpdate(lo_arg **argv)        */        lo_send(uiTarget, uiOscConfigurePath, "ss", -         DSSI_PROJECT_DIRECTORY_KEY, museProject.toLatin1().data()); +         DSSI_PROJECT_DIRECTORY_KEY, song->projectDirectory().toLatin1().data());  #if 0        /* Send current bank/program  (-FIX- another race...) */ diff --git a/muse/muse/exportmidi.cpp b/muse/muse/exportmidi.cpp index d1713a35..1cfff45e 100644 --- a/muse/muse/exportmidi.cpp +++ b/muse/muse/exportmidi.cpp @@ -40,7 +40,7 @@  //   addController  //--------------------------------------------------------- -static void addController(MPEventList* l, int tick, int port, int channel, int a, int b) +static void addController(MPEventList* l, int tick, int /*port*/, int channel, int a, int b)        {        if (a < 0x1000) {          // 7 Bit Controller              l->add(MidiEvent(tick, channel, ME_CONTROLLER, a, b)); @@ -116,7 +116,7 @@ static void addController(MPEventList* l, int tick, int port, int channel, int a  void MusE::exportMidi()        {        if (exportMidiDialog == 0) -            exportMidiDialog = new ExportMidiDialog(project.filePath()); +            exportMidiDialog = new ExportMidiDialog(song->projectDirectory());        int rv = exportMidiDialog->exec();        if (rv == 0)              return; diff --git a/muse/muse/gconfig.cpp b/muse/muse/gconfig.cpp index 25d6013b..37534203 100644 --- a/muse/muse/gconfig.cpp +++ b/muse/muse/gconfig.cpp @@ -93,7 +93,7 @@ GlobalConfigValues config = {        384,                          // division for smf export        QString(""),                  // copyright string for smf export        1,                            // smf export file format -      1,                            // startMode +      START_ASK_FOR_PROJECT,        // startMode        QString(""),                  // start song path        384,                          // gui division        QRect(0, 0, 800, 560),        // GeometryMain; @@ -102,15 +102,15 @@ GlobalConfigValues config = {        QRect(100, 100, 600, 400),    // GeometryPianoroll;        QRect(0, 0, 600, 400),        // GeometryDrumedit;        { -      QRect(0, 0, 300, 500),        // Mixer1 -      false, true, true, true, true, -      true, true, true, true, true, true -            }, +         QRect(0, 0, 300, 500),        // Mixer1 +         false, true, true, true, true, +         true, true, true, true, true, true +         },        { -      QRect(200, 200, 300, 500),    // Mixer2 -      false, true, true, true, true, -      true, true, true, true, true, true -            }, +         QRect(200, 200, 300, 500),    // Mixer2 +         false, true, true, true, true, +         true, true, true, true, true, true +         },        false,                        // TransportVisible        false,                        // BigTimeVisible;        false,                        // mixerVisible1; @@ -135,5 +135,6 @@ GlobalConfigValues config = {        true,                         // connectToAllMidiDevices        true,                         // connectToAllMidiTracks        true,                         // createDefaultMidiInput +      QString("MusE/projects"),     // projectPath        }; diff --git a/muse/muse/gconfig.h b/muse/muse/gconfig.h index 328d2810..8bfed74b 100644 --- a/muse/muse/gconfig.h +++ b/muse/muse/gconfig.h @@ -27,6 +27,12 @@  #include "al/xml.h"  using AL::Xml; +enum StartMode { +      START_ASK_FOR_PROJECT, +      START_LAST_PROJECT, +      START_START_PROJECT +      }; +  //---------------------------------------------------------  //   MixerConfig  //--------------------------------------------------------- @@ -80,10 +86,8 @@ struct GlobalConfigValues {        QString copyright;      // copyright string for smf export        int smfFormat;          // smf export file type -      int startMode;          // 0 - start with last song -                              // 1 - start with default template -                              // 2 - start with song -      QString startSong;      // path for start song +      enum StartMode startMode; +      QString startProject;   // path for start project        int guiDivision;        // division for tick display        QRect geometryMain; @@ -119,6 +123,7 @@ struct GlobalConfigValues {        bool connectToAllMidiDevices;        bool connectToAllMidiTracks;        bool createDefaultMidiInput; +      QString projectPath;        };  extern GlobalConfigValues config; diff --git a/muse/muse/globals.cpp b/muse/muse/globals.cpp index 54f3665f..3a5f9558 100644 --- a/muse/muse/globals.cpp +++ b/muse/muse/globals.cpp @@ -66,8 +66,6 @@ const signed char flatTab[14][7]  = {  QString museGlobalLib;  QString museGlobalShare;  QString museUser; -QString museProject; -QString museProjectInitPath("./");  QString configName;  QString lastWavePath("."); diff --git a/muse/muse/globals.h b/muse/muse/globals.h index ddd1a377..9e7f413b 100644 --- a/muse/muse/globals.h +++ b/muse/muse/globals.h @@ -47,8 +47,6 @@ extern const signed char flatTab[14][7];  extern QString museGlobalLib;  extern QString museGlobalShare;  extern QString museUser; -extern QString museProject;         // current project directory -extern QString museProjectInitPath;  extern QString configName;  extern QString lastWavePath; diff --git a/muse/muse/importmidi.cpp b/muse/muse/importmidi.cpp index 928fc078..4fd5808d 100644 --- a/muse/muse/importmidi.cpp +++ b/muse/muse/importmidi.cpp @@ -74,7 +74,7 @@ void MusE::importMidi(const QString &file)                    song->update(-1);                    break;              case 1: -                  loadProjectFile(fn, false, false);    // replace +//TODO                  loadProjectFile(fn, false, false);    // replace                    break;              default:                    return; @@ -303,9 +303,9 @@ bool MusE::importMidi(const QString name, bool merge)              int z = sig.z;              int n = sig.n; -            int tempo = AL::tempomap.tempo(0);              transport->setTimesig(z, n); -//TD            transport->setTempo(tempo); +//TD          int tempo = AL::tempomap.tempo(0); +//            transport->setTempo(tempo);              bool masterF = !AL::tempomap.empty();              song->setMasterFlag(masterF); @@ -426,7 +426,7 @@ void MusE::processTrack(MidiTrack* track)              }        if (tevents->size()) -            printf("-----------events left: %ld\n", tevents->size()); +            printf("-----------events left: %zd\n", tevents->size());        for (iEvent i = tevents->begin(); i != tevents->end(); ++i) {              printf("%d===\n", i->first);              i->second.dump(); diff --git a/muse/muse/muse.cpp b/muse/muse/muse.cpp index 052c1278..ea454a9a 100644 --- a/muse/muse/muse.cpp +++ b/muse/muse/muse.cpp @@ -59,6 +59,7 @@  #include "widgets/utils.h"  #include "instruments/editinstrument.h"  #include "part.h" +#include "projectdialog.h"  static pthread_t watchdogThread; @@ -444,12 +445,10 @@ MusE::MusE()        midiFilterConfig      = 0;        midiInputTransform    = 0;        midiRhythmGenerator   = 0; -//      globalSettingsConfig  = 0;        preferencesDialog     = 0;        softSynthesizerConfig = 0;        midiTransformerDialog = 0;        shortcutConfig        = 0; -//      appearance            = 0;        editInstrument        = 0;        appName               = QString("MusE");        _raster               = 0; @@ -794,9 +793,6 @@ MusE::MusE()        //-------------------------------------------------------------        menuSettings = mb->addMenu(tr("Setti&ngs")); - -//      menu_ids[CMD_GLOBAL_CONFIG] = menuSettings->addAction(QIcon(*settings_globalsettingsIcon), tr("Global Settings")); -//      connect(menu_ids[CMD_GLOBAL_CONFIG], SIGNAL(triggered()), this, SLOT(configGlobalSettings()));        menu_ids[CMD_CONFIG_SHORTCUTS] = menuSettings->addAction(QIcon(*settings_configureshortcutsIcon), tr("Configure shortcuts"));        connect(menu_ids[CMD_CONFIG_SHORTCUTS], SIGNAL(triggered()), this, SLOT(configShortCuts())); @@ -822,7 +818,6 @@ MusE::MusE()        menu_ids[CMD_MIDI_FILE_CONFIG] = menuSettings->addAction(QIcon(*settings_midifileexportIcon), tr("Midi File Export"));        connect(menu_ids[CMD_MIDI_FILE_CONFIG], SIGNAL(triggered()), this, SLOT(configMidiFile()));        menuSettings->addSeparator(); -//      menu_ids[CMD_GLOBAL_CONFIG] = menuSettings->addAction(QIcon(*settings_globalsettingsIcon), tr("Global Settings"));        QAction* action = menuSettings->addAction(QIcon(*settings_globalsettingsIcon), tr("Preferences"));        connect(action, SIGNAL(triggered()), this, SLOT(preferences())); @@ -949,7 +944,7 @@ MusE::MusE()        connect(tools1, SIGNAL(toolChanged(int)), SLOT(setTool(int)));        connect(arranger, SIGNAL(editPart(Part*)), SLOT(startEditor(Part*))); -//TODO1      connect(arranger, SIGNAL(dropSongFile(const QString&)), SLOT(loadProjectFile(const QString&))); +//TODO1      connect(arranger, SIGNAL(dropSongFile(const QString&)), SLOT(loadProject(const QString&)));  //TODO1      connect(arranger, SIGNAL(dropMidiFile(const QString&)), SLOT(importMidi(const QString&)));        connect(arranger, SIGNAL(cursorPos(const AL::Pos&,bool)), cursorPos, SLOT(setValue(const AL::Pos&,bool))); @@ -1041,20 +1036,10 @@ void MusE::localOff()        }  //--------------------------------------------------------- -//   loadProjectFile -//    load *.med, *.mid, *.kar -// -//    template - if true, load file but do not change -//                project name +//   loadProject  //--------------------------------------------------------- -// for drop: -void MusE::loadProjectFile(const QString& name) -      { -      loadProjectFile(name, false, false); -      } - -void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) +void MusE::loadProject(const QString& name)        {        //        // stop audio threads if running @@ -1068,22 +1053,17 @@ void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll)                    }              seqStop();              } -      loadProjectFile1(name, songTemplate, loadAll); +      loadProject1(name);        if (restartSequencer)              seqStart();        audio->msgSeek(song->cPos());        }  //--------------------------------------------------------- -//   loadProjectFile1 -//    load *.med, *.mid, *.kar -// -//    template - if true, load file but do not change -//                project name -//    loadAll  - load song data + configuration data +//   loadProject1  //--------------------------------------------------------- -void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll) +void MusE::loadProject1(const QString& name)        {        if (mixer1)              mixer1->clear(); @@ -1109,6 +1089,17 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll                          printf("InternalError: gibt %d\n", n);                    }              } + +      QDir pd(QDir::homePath() + "/" + config.projectPath + "/" + name); +      bool newProject = false; +      if (!pd.exists()) { +            newProject = true; +            if (!pd.mkdir(pd.path())) { +                  QMessageBox::critical(this, QString("MusE: new project"), +                        tr("Cannot create project directory")); +                  return; +                  } +            }        foreach(QWidget* w, QApplication::topLevelWidgets()) {              if (!w->isVisible())                    continue; @@ -1123,77 +1114,30 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll              else if (strcmp("ListEdit", w->metaObject()->className()) == 0)                    w->close();              } -        emit startLoadSong(); - -      song->clear(false); -      QFileInfo fi(name); -      if (songTemplate) { -            if (!fi.isReadable()) { -                  QMessageBox::critical(this, QString("MusE"), -                     tr("Cannot read template")); -                  return; -                  } -            project.setFile("untitled"); -            } -      else { -            museProject = fi.absolutePath(); -            project.setFile(name); -            } -      QString ex = fi.suffix().toLower(); -      if (ex.isEmpty() || ex == "med") { -            // -            //  read *.med file -            // -      	QFile* f = new QFile(ex.isEmpty() ? name + ".med" : name); -		if (f->open(QIODevice::ReadOnly)) { -                  int rv = read(f, !loadAll); -                  f->close(); -                  if (rv) { -                        QMessageBox::critical(this, QString("MusE"), -                           tr("File read error")); -                        setUntitledProject(); -                        } -                  } -            delete f; -            } -      else if (ex == "mid" || ex == "kar") { -            if (importMidi(name, false)) { -                  setUntitledProject(); -                  } -            } -      else { -            QMessageBox::critical(this, QString("MusE"), -               tr("Unknown File Format")); -            setUntitledProject(); -            } -      if (!songTemplate) { -            addProject(project); -            setWindowTitle(QString("MusE: Song: ") + project.baseName()); -            } -      song->dirty = false; +      song->setProjectName(name); +      song->load();        tr_id->setChecked(config.transportVisible);        bt_id->setChecked(config.bigTimeVisible); -      if (loadAll) { -            // -            // dont emit song->update(): -            song->blockSignals(true); +      // +      // dont emit song->update(): +      song->blockSignals(true); -            showBigtime(config.bigTimeVisible); -            showMixer1(config.mixer1Visible); -            showMixer2(config.mixer2Visible); -            resize(config.geometryMain.size()); -            move(config.geometryMain.topLeft()); +      showBigtime(config.bigTimeVisible); +      showMixer1(config.mixer1Visible); +      showMixer2(config.mixer2Visible); +      resize(config.geometryMain.size()); +      move(config.geometryMain.topLeft()); -            if (config.transportVisible) -                  transport->show(); -            transport->move(config.geometryTransport.topLeft()); -            showTransport(config.transportVisible); +      if (config.transportVisible) +            transport->show(); +      transport->move(config.geometryTransport.topLeft()); +      showTransport(config.transportVisible); -            song->blockSignals(false); -            } +      song->blockSignals(false); +              transport->setMasterFlag(song->masterFlag());        punchinAction->setChecked(song->punchin());        punchoutAction->setChecked(song->punchout()); @@ -1202,7 +1146,6 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll        selectionChanged();           // enable/disable "Copy" & "Paste"        song->setLen(song->len());    // emit song->lenChanged() signal -      // song->update();        //        // add connected channels        // @@ -1234,17 +1177,7 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll                    }              (*i)->blockSignals(false);              } -      } - -//--------------------------------------------------------- -//   setUntitledProject -//--------------------------------------------------------- - -void MusE::setUntitledProject() -      { -      QString name("untitled"); -      museProject = QFileInfo(name).absolutePath(); -      project.setFile(name); +      setWindowTitle(QString("MusE: Song: ") + name);        }  //--------------------------------------------------------- @@ -1253,16 +1186,14 @@ void MusE::setUntitledProject()  void MusE::loadProject()        { -      QStringList pattern; -      const char** p = med_midi_file_pattern; -      while (*p) -            pattern << *p++; -      QString fn = getOpenFileName(QString("."), pattern, this, -         tr("MusE: load project")); -      if (!fn.isEmpty()) { -            museProject = QFileInfo(fn).absolutePath(); -            loadProjectFile(fn, false, true);   // load all -            } +      ProjectDialog projectDialog; +      int rv = projectDialog.exec(); +      if (rv == 0) +            return; +      QString name = projectDialog.project(); +      if (name.isEmpty()) +            return; +      loadProject(name);        }  //--------------------------------------------------------- @@ -1271,74 +1202,48 @@ void MusE::loadProject()  bool MusE::save()        { -      return save(project.filePath(), false); -      } - -//--------------------------------------------------------- -//   save -//--------------------------------------------------------- - -bool MusE::save(const QString& fname, bool overwriteWarn) -      {        QString backupCommand; -      QString name(fname); -      QFileInfo info(name); -      QString zip; +      QString name(song->projectName() + ".med"); +      QFileInfo fi(song->projectDirectory() + "/" + name); -      if (info.completeSuffix() == "") { -            name += ".med"; -            info.setFile(name); -            } -      if (overwriteWarn && info.exists()) { -            QString s(QWidget::tr("File\n") + name + QWidget::tr("\nexists")); -            int rv = QMessageBox::warning(this, -               QWidget::tr("MusE: write"), -               s, -               QWidget::tr("Overwrite"), -               QWidget::tr("Quit"), QString::null, 0, 1); -            switch(rv) { -                  case 0:  // overwrite -                        break; -                  case 1:  // quit -                        return 0; -                  } -            } -      char* tmpName = tempnam(info.absolutePath().toLatin1().data(), "MusE"); -      FILE* fp = fopen(tmpName, "w"); -      if (fp == 0) { +      QTemporaryFile tmp(fi.path() + "/MusEXXXXXX"); +      tmp.setAutoRemove(false); + +      if (!tmp.open()) {              QString s("Creating temp file failed: ");              s += strerror(errno);              QMessageBox::critical(this,                 tr("MusE: Create tmp file failed"), s);              return false;              } -      QFile file; -      file.open(fp, QIODevice::WriteOnly); -      Xml xml(&file); +      Xml xml(&tmp);        write(xml); -      if (ferror(fp)) { -            QString s = QString("Write File\n") + name + QString("\nfailed: ") -               + QString(strerror(errno)); -            QMessageBox::critical(this, -               tr("MusE: Write File failed"), s); -            fclose(fp); -            unlink(tmpName); +      if (tmp.error()) { +            QString s = QString("Write File\n") + tmp.fileName() + QString("\nfailed: ") +               + tmp.errorString(); +            QMessageBox::critical(this, tr("MusE: Write File failed"), s);              return false;              } -      file.close(); -      fclose(fp); -      if (!overwriteWarn && !song->backupWritten()) { +      if (!song->backupWritten()) {              // -            // create backup file +            // remove old backup file              // -            if (info.exists()) { -                  QString backupName = "." + name + ","; -                  rename(name.toLatin1().data(), backupName.toLatin1().data()); -                  song->setBackupWritten(true); -                  } +            QDir dir(fi.path()); +            QString backupName = QString(".") + fi.fileName() + QString(","); +            dir.remove(backupName); + +            // +            // rename old file to backup +            // +            QString n(fi.filePath()); +            dir.rename(n, backupName);              } -      rename(tmpName, name.toLatin1().data()); +      // +      //  rename temp name to file name +      // +      tmp.rename(fi.filePath()); +        song->dirty = false;        SndFile::updateRecFiles();        return true; @@ -1634,7 +1539,7 @@ void MusE::selectProject(QAction* a)        QString* name = projectList[id];        if (name == 0)              return; -      loadProjectFile(*name, false, true); +      loadProject(*name);        }  //--------------------------------------------------------- @@ -1777,207 +1682,6 @@ static void catchSignal(int sig)  #endif  //--------------------------------------------------------- -//   main -//--------------------------------------------------------- - -int main(int argc, char* argv[]) -      { -      museUser = QString(getenv("MUSEHOME")); -      if (museUser.isEmpty()) -            museUser = QString(getenv("HOME")); -      QString museGlobal; -      const char* p = getenv("MUSE"); -      museGlobal = p ? p : INSTPREFIX; - -      museGlobalLib   =  museGlobal + "/lib/"   INSTALL_NAME; -      museGlobalShare =  museGlobal + "/share/" INSTALL_NAME; - -      museProject = museProjectInitPath; -      configName  = museUser + QString("/." INSTALL_NAME); - -      srand(time(0));   // initialize random number generator -      initMidiController(); -      MuseApplication app(argc, argv); - -      config.fonts[0] = new QFont(QString("arial"), 10, QFont::Normal); -      config.fonts[1] = new QFont(QString("arial"),  8, QFont::Normal); -      config.fonts[2] = new QFont(QString("arial"), 10, QFont::Normal); -      config.fonts[3] = new QFont(QString("arial"),  8, QFont::Bold); -      config.fonts[4] = new QFont(QString("arial"),  8,  QFont::Bold);    // simple buttons, timescale numbers -      config.fonts[5] = new QFont(QString("Lucidatypewriter"), 14,  QFont::Bold); - -      initShortCuts(); -      gmDrumMap.initGm();    // init default drum map -      readConfiguration(); - -     	QApplication::setFont(*config.fonts[0]); - -      // SHOW MUSE SPLASH SCREEN -      if (config.showSplashScreen) { -            QPixmap splsh(":/xpm/splash.png"); - -            if (!splsh.isNull()) { -                  QSplashScreen* muse_splash = new QSplashScreen(splsh, -                     Qt::WindowStaysOnTopHint); -                  muse_splash->show(); -                  QTimer* stimer = new QTimer(0); -                  muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close())); -                  stimer->start(6000); -                  } -            } -      char c; -      QString opts("mvdDiosP:p"); - -#ifdef VST_SUPPORT -      opts += "V"; -#endif -#ifdef DSSI_SUPPORT -      opts += "I"; -#endif -      while ((c = getopt(argc, argv, opts.toLatin1().data())) != EOF) { -            switch (c) { -                  case 'v': printVersion(argv[0]); return 0; -                  case 'd': -                        debugMode = true; -                        realTimePriority = false; -                        break; -                  case 'm': midiOnly = true; break; -                  case 'D': debugMsg = true; break; -                  case 'i': midiInputTrace = true; break; -                  case 'o': midiOutputTrace = true; break; -                  case 's': debugSync = true; break; -                  case 'p': loadPlugins = false; break; -                  case 'V': loadVST = false; break; -                  case 'I': loadDSSI = false; break; -                  default:  usage(argv[0], "bad argument"); return -1; -                  } -            } -      if (midiOnly) { -            loadDSSI    = false; -            loadPlugins = false; -            loadVST     = false; -            } - -      bool useJACK = !(debugMode || midiOnly); -      if (useJACK) { -            if (initJackAudio()) { -                  if (!debugMode) -                        { -                        QMessageBox::critical(NULL, "MusE fatal error", -                           "MusE failed to find a Jack audio server.\n" -                           "Check that Jack was started.\n" -                           "If Jack was started check that it was\n" -                           "started as the same user as MusE."); -                        // fatalError("cannot start JACK"); -                        } -                  else -                        { -                        fprintf(stderr, "fatal error: no JACK audio server found\n"); -                        fprintf(stderr, "no audio functions available\n"); -                        fprintf(stderr, "*** experimental mode -- no play possible ***\n"); -                        } -                  useJACK = false; -                  debugMode = true; -                  } -            } -      if (!useJACK) -            initDummyAudio(); - -      argc -= optind; -      ++argc; - -      if (debugMsg) { -            printf("global lib:   <%s>\n", museGlobalLib.toLatin1().data()); -            printf("global share: <%s>\n", museGlobalShare.toLatin1().data()); -            printf("muse home:    <%s>\n", museUser.toLatin1().data()); -            printf("project dir:  <%s>\n", museProject.toLatin1().data()); -            printf("config file:  <%s>\n", configName.toLatin1().data()); -            } - -      static QTranslator translator; -      QString lo(QLocale::system().name()); - -      if (lo != "C") { -            QString loc("muse_"); -            loc += lo; -            if (translator.load(loc, QString(".")) == false) { -                  QString lp(museGlobalShare); -                  lp += QString("/locale"); -                  if (translator.load(loc, lp) == false) { -                        printf("no locale <%s> in <%s>\n", loc.toLatin1().data(), lp.toLatin1().data()); -                        } -                  } -            qApp->installTranslator(&translator); -            } - -      if (loadPlugins) { -            initPlugins(); -            initMidiPlugins(); -            } -      if (loadVST) -            initVST(); -      if (loadDSSI) -            initDSSI(); - -      initIcons(); -      if (!midiOnly) -            initMetronome(); - -      if (debugMsg) { -            QStringList list = app.libraryPaths(); -            QStringList::Iterator it = list.begin(); -            printf("QtLibraryPath:\n"); -            while(it != list.end()) { -                  printf("  <%s>\n", (*it).toLatin1().data()); -                  ++it; -                  } -            } - -      song = new Song(); -      muse = new MusE(); -      app.setMuse(muse); -      muse->setWindowIcon(*museIcon); - -      //--------------------------------------------------- -      //  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[optind]; -      else if (config.startMode == 0) { -            if (argc < 2) -                  name = projectList[0] ? *projectList[0] : QString("untitled"); -            else -                  name = argv[0]; -            } -      else if (config.startMode == 1) { -            name = museGlobalShare + QString("/templates/default.med"); -            useTemplate = true; -            } -      else if (config.startMode == 2) -            name = config.startSong; -      muse->loadProjectFile(name, useTemplate, true); -      muse->changeConfig(false); - -      if (!debugMode) { -            if (mlockall(MCL_CURRENT | MCL_FUTURE)) -                  perror("WARNING: Cannot lock memory:"); -            } -      muse->show(); -      muse->seqStart(); -      int n = app.exec(); -      if (n) -            fprintf(stderr, "app end %d\n", n); -      return n; -      } - -//---------------------------------------------------------  //   setFollow  //--------------------------------------------------------- @@ -2985,3 +2689,252 @@ void MusE::setGlobalTempo(int val)        globalTempoSpinBox->setValue(val);        } +//--------------------------------------------------------- +//   main +//--------------------------------------------------------- + +int main(int argc, char* argv[]) +      { +      museUser = QString(getenv("MUSEHOME")); +      if (museUser.isEmpty()) +            museUser = QString(getenv("HOME")); +      QString museGlobal; +      const char* p = getenv("MUSE"); +      museGlobal = p ? p : INSTPREFIX; + +      museGlobalLib   =  museGlobal + "/lib/"   INSTALL_NAME; +      museGlobalShare =  museGlobal + "/share/" INSTALL_NAME; + +      configName  = museUser + QString("/." INSTALL_NAME); + +      srand(time(0));   // initialize random number generator +      initMidiController(); +      MuseApplication app(argc, argv); + +      config.fonts[0] = new QFont(QString("arial"), 10, QFont::Normal); +      config.fonts[1] = new QFont(QString("arial"),  8, QFont::Normal); +      config.fonts[2] = new QFont(QString("arial"), 10, QFont::Normal); +      config.fonts[3] = new QFont(QString("arial"),  8, QFont::Bold); +      config.fonts[4] = new QFont(QString("arial"),  8,  QFont::Bold);    // simple buttons, timescale numbers +      config.fonts[5] = new QFont(QString("Lucidatypewriter"), 14,  QFont::Bold); + +      initShortCuts(); +      gmDrumMap.initGm();    // init default drum map +      readConfiguration(); + +     	QApplication::setFont(*config.fonts[0]); + +      // SHOW MUSE SPLASH SCREEN +      if (config.showSplashScreen) { +            QPixmap splsh(":/xpm/splash.png"); + +            if (!splsh.isNull()) { +                  QSplashScreen* muse_splash = new QSplashScreen(splsh, +                     Qt::WindowStaysOnTopHint); +                  muse_splash->show(); +                  QTimer* stimer = new QTimer(0); +                  muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close())); +                  stimer->start(6000); +                  } +            } +      char c; +      QString opts("mvdDiosP:p"); + +#ifdef VST_SUPPORT +      opts += "V"; +#endif +#ifdef DSSI_SUPPORT +      opts += "I"; +#endif +      while ((c = getopt(argc, argv, opts.toLatin1().data())) != EOF) { +            switch (c) { +                  case 'v': printVersion(argv[0]); return 0; +                  case 'd': +                        debugMode = true; +                        realTimePriority = false; +                        break; +                  case 'm': midiOnly = true; break; +                  case 'D': debugMsg = true; break; +                  case 'i': midiInputTrace = true; break; +                  case 'o': midiOutputTrace = true; break; +                  case 's': debugSync = true; break; +                  case 'p': loadPlugins = false; break; +                  case 'V': loadVST = false; break; +                  case 'I': loadDSSI = false; break; +                  default:  usage(argv[0], "bad argument"); return -1; +                  } +            } +      if (midiOnly) { +            loadDSSI    = false; +            loadPlugins = false; +            loadVST     = false; +            } + +      bool useJACK = !(debugMode || midiOnly); +      if (useJACK) { +            if (initJackAudio()) { +                  if (!debugMode) +                        { +                        QMessageBox::critical(NULL, "MusE fatal error", +                           "MusE failed to find a Jack audio server.\n" +                           "Check that Jack was started.\n" +                           "If Jack was started check that it was\n" +                           "started as the same user as MusE."); +                        // fatalError("cannot start JACK"); +                        } +                  else +                        { +                        fprintf(stderr, "fatal error: no JACK audio server found\n"); +                        fprintf(stderr, "no audio functions available\n"); +                        fprintf(stderr, "*** experimental mode -- no play possible ***\n"); +                        } +                  useJACK = false; +                  debugMode = true; +                  } +            } +      if (!useJACK) +            initDummyAudio(); + +      argc -= optind; +      ++argc; + +      if (debugMsg) { +            printf("global lib:   <%s>\n", museGlobalLib.toLatin1().data()); +            printf("global share: <%s>\n", museGlobalShare.toLatin1().data()); +            printf("muse home:    <%s>\n", museUser.toLatin1().data()); +            printf("project dir:  <%s>\n", config.projectPath.toLatin1().data()); +            printf("config file:  <%s>\n", configName.toLatin1().data()); +            } + +      static QTranslator translator; +      QString lo(QLocale::system().name()); + +      if (lo != "C") { +            QString loc("muse_"); +            loc += lo; +            if (translator.load(loc, QString(".")) == false) { +                  QString lp(museGlobalShare); +                  lp += QString("/locale"); +                  if (translator.load(loc, lp) == false) { +                        printf("no locale <%s> in <%s>\n", loc.toLatin1().data(), lp.toLatin1().data()); +                        } +                  } +            qApp->installTranslator(&translator); +            } + +      if (loadPlugins) { +            initPlugins(); +            initMidiPlugins(); +            } +      if (loadVST) +            initVST(); +      if (loadDSSI) +            initDSSI(); + +      initIcons(); +      if (!midiOnly) +            initMetronome(); + +      if (debugMsg) { +            QStringList list = app.libraryPaths(); +            QStringList::Iterator it = list.begin(); +            printf("QtLibraryPath:\n"); +            while(it != list.end()) { +                  printf("  <%s>\n", (*it).toLatin1().data()); +                  ++it; +                  } +            } + +      song = new Song(); +      muse = new MusE(); +      app.setMuse(muse); +      muse->setWindowIcon(*museIcon); + +      //--------------------------------------------------- +      //  load project +      //--------------------------------------------------- + +      // first check if there is a project directory: + +      QDir pd(QDir::homePath() + "/" + config.projectPath); +      if (!pd.exists()) { +            // ask user to create a new project directory +            QString s; +            s = "The MusE project directory\n%1\ndoes not exists"; +            s = s.arg(pd.path()); + +            int rv = QMessageBox::question(0,  +               "MusE: create project directory", +               s, +               "Create", +               "Abort", +               QString(), +               0, 1); +            if (rv == 1) +                  exit(0); +            if (!pd.mkpath(pd.path())) { +                  // TODO: tell user why this has happened +                  QMessageBox::critical(0, +                  "MusE: create project directory", +                  "Creating project directory failed"); +                  exit(-1); +                  } +            } + +      QString name; +      if (argc >= 2) +            name = argv[optind];    // start with first name on command line +      else if (config.startMode == START_LAST_PROJECT) { +            if (projectList[0]) +                  name = *projectList[0]; +            } +      else if (config.startMode == START_START_PROJECT) +            name = config.startProject; + +      //DEBUG: +      name = ""; + +      if (name.isEmpty()) { +            // +            // ask user for a project +            // +            for (;;) { +                  ProjectDialog projectDialog; +                  int rv = projectDialog.exec(); +                  if (rv == 1) { +                        name = projectDialog.project(); +                        if (!name.isEmpty()) +                              break; +                        } +                  // the user did not select/create a project +                  QString s; +                  s = "before MusE starts, you must select a project\n" +                      "or create a new one"; +                  rv = QMessageBox::question(0,  +                     "MusE: create select project", +                     s, +                     "Go Back", +                     "Abort", +                     QString(), +                     0, 1); +                  if (rv == 1) +                        exit(0); +                  } +            } + +      muse->loadProject(name); +      muse->changeConfig(false); + +      if (!debugMode) { +            if (mlockall(MCL_CURRENT | MCL_FUTURE)) +                  perror("WARNING: Cannot lock memory:"); +            } +      muse->show(); +      muse->seqStart(); +      int n = app.exec(); +      if (n) +            fprintf(stderr, "app end %d\n", n); +      return n; +      } + + diff --git a/muse/muse/muse.h b/muse/muse/muse.h index 7b9e0bd6..a3bd0749 100644 --- a/muse/muse/muse.h +++ b/muse/muse/muse.h @@ -43,13 +43,11 @@ class AudioConf;  class MidiFileConfig;  class MidiFilterConfig;  class MarkerView; -// class GlobalSettingsConfig;  class MidiInputTransformDialog;  class MidiTransformerDialog;  class RhythmGen;  class MidiTrack;  class ShortcutConfig; -// class Appearance;  class PreferencesDialog;  class EditInstrument;  class Mixer; @@ -62,7 +60,6 @@ extern void configMidiController();  //---------------------------------------------------------  class MusE : public QMainWindow, public Ui::MuseBase -// class MusE : public QMainWindow        {        Q_OBJECT        enum { @@ -95,7 +92,6 @@ class MusE : public QMainWindow, public Ui::MuseBase        QAction* fileNewAction;        QString appName; -      QFileInfo project;        QToolBar *tools;        EditToolBar *tools1;        int _raster; @@ -139,11 +135,9 @@ class MusE : public QMainWindow, public Ui::MuseBase        MetronomeConfig* metronomeConfig;        AudioConf* audioConfig;        MidiFileConfig* midiFileConfig; -//      GlobalSettingsConfig* globalSettingsConfig;        MidiFilterConfig* midiFilterConfig;        MidiInputTransformDialog* midiInputTransform;        ShortcutConfig* shortcutConfig; -//      Appearance* appearance;        PreferencesDialog* preferencesDialog;        ExportMidiDialog* exportMidiDialog; @@ -154,23 +148,17 @@ class MusE : public QMainWindow, public Ui::MuseBase        //------------------------------------------        bool readMidi(FILE*); -      bool read(QFile*, bool skipConfig); -      void read10(QDomNode); -      void read20(QDomNode);        void processTrack(MidiTrack* track);        void write(Xml& xml) const; -      bool save(const QString&, bool); -      void setUntitledProject();        void setFollow(FollowMode);        void readConfigParts(QDomNode);        void readCtrl(QDomNode, int port, int channel); -      void readToplevels(QDomNode);        PartList* getMidiPartsToEdit();        Part* readPart(QDomNode);        bool checkRegionNotNull(); -      void loadProjectFile1(const QString&, bool songTemplate, bool loadAll); +      void loadProject1(const QString&);        void writeGlobalConfiguration(Xml&) const;        void writeConfiguration(Xml&) const;        void updateConfiguration(); @@ -185,7 +173,6 @@ class MusE : public QMainWindow, public Ui::MuseBase     private slots:        void loadProject();        bool save(); -//      void configGlobalSettings();        void quitDoc();        void about();        void aboutQt(); @@ -201,7 +188,6 @@ class MusE : public QMainWindow, public Ui::MuseBase        void configMidiSync();        void configMidiFile();        void configShortCuts(); -//      void configAppearance();        void startMasterEditor();        void startListEditor(); @@ -214,7 +200,6 @@ class MusE : public QMainWindow, public Ui::MuseBase        void startPianoroll(PartList* pl);        void startWaveEditor();        void startWaveEditor(PartList*); -//      void startMidiTransformer();        void writeGlobalConfiguration() const;        void startEditInstrument(); @@ -256,8 +241,7 @@ class MusE : public QMainWindow, public Ui::MuseBase     public slots:        void bounceToFile();        void closeEvent(QCloseEvent*e); -      void loadProjectFile(const QString&); -      void loadProjectFile(const QString&, bool songTemplate, bool loadAll); +      void loadProject(const QString&);        void loadTheme(const QString&);        bool seqStart();        void showTransport(bool flag); @@ -298,6 +282,7 @@ class MusE : public QMainWindow, public Ui::MuseBase                          // 0xaabb   aa - major version, bb minor version  	int raster() const { return _raster; }  	void setupTransportToolbar(QToolBar* tb) const; +      void readToplevels(QDomNode);        };  extern MusE* muse; diff --git a/muse/muse/preferences.cpp b/muse/muse/preferences.cpp index 2c85b228..96054b4a 100644 --- a/muse/muse/preferences.cpp +++ b/muse/muse/preferences.cpp @@ -286,17 +286,23 @@ PreferencesDialog::PreferencesDialog(Arranger* a, QWidget* parent)        minMeterSelect->setValue(config->minMeter);        peakHoldTime->setValue(config->peakHoldTime);        helpBrowser->setText(config->helpBrowser); -      startSongEntry->setText(config->startSong); +      startProjectEntry->setText(config->startProject); -      startSongGroup = new QButtonGroup(this); -      startSongGroup->addButton(startLast); -      startSongGroup->addButton(startTemplate); -      startSongGroup->addButton(startSong); +      startProjectGroup = new QButtonGroup(this); +      startProjectGroup->addButton(alwaysAsk); +      startProjectGroup->addButton(startWithLastProject); +      startProjectGroup->addButton(startWithProject);        switch(config->startMode) { -            case 0: startLast->setChecked(true); break; -            case 1: startTemplate->setChecked(true); break; -            case 2: startSong->setChecked(true); break; +            case START_ASK_FOR_PROJECT:  +                  alwaysAsk->setChecked(true);  +                  break; +            case START_LAST_PROJECT:  +                  startWithLastProject->setChecked(true);  +                  break; +            case START_START_PROJECT:  +                  startWithProject->setChecked(true);  +                  break;              }        showTransport->setChecked(config->transportVisible); @@ -545,14 +551,14 @@ void PreferencesDialog::apply()        ::config.rtcTicks     = rtcResolutions[rtcticks];        ::config.guiDivision  = divisions[div];        ::config.helpBrowser  = helpBrowser->text(); -      ::config.startSong    = startSongEntry->text(); +      ::config.startProject = startProjectEntry->text(); -      if (startLast->isChecked()) -            ::config.startMode = 0; -      else if (startTemplate->isChecked()) -            ::config.startMode = 1; -      else if (startSong->isChecked()) -            ::config.startMode = 2; +      if (alwaysAsk->isChecked()) +            ::config.startMode = START_ASK_FOR_PROJECT; +      else if (startWithLastProject->isChecked()) +            ::config.startMode = START_LAST_PROJECT; +      else if (startWithProject->isChecked()) +            ::config.startMode = START_START_PROJECT;        ::config.transportVisible = showTransport->isChecked();        ::config.bigTimeVisible   = showBigtime->isChecked(); @@ -587,6 +593,8 @@ void PreferencesDialog::apply()        ::config.useJackFreewheelMode = freewheelMode->isChecked();        ::config.showSplashScreen = showSplash->isChecked(); +      ::config.projectPath = projectPath->text(); +        PianoRoll::initWidth  = pianorollWidth->value();        PianoRoll::initHeight = pianorollHeight->value();        PianoRoll::initRaster = pianorollRaster->raster(); @@ -620,6 +628,7 @@ void PreferencesDialog::apply()              w->move(::config.geometryBigTime.topLeft());              } +        muse->resize(::config.geometryMain.size());        muse->move(::config.geometryMain.topLeft()); diff --git a/muse/muse/preferences.h b/muse/muse/preferences.h index d4f1496c..c3ab3929 100644 --- a/muse/muse/preferences.h +++ b/muse/muse/preferences.h @@ -40,7 +40,7 @@ class PreferencesDialog : public QDialog, public Ui::PreferencesDialogBase {        QString currentBg;        GlobalConfigValues* config;        QButtonGroup* colorGroup; -      QButtonGroup* startSongGroup; +      QButtonGroup* startProjectGroup;        void updateFonts();        void updateColor(); diff --git a/muse/muse/preferences.ui b/muse/muse/preferences.ui index 1a2fdd63..cb7e2db4 100644 --- a/muse/muse/preferences.ui +++ b/muse/muse/preferences.ui @@ -8,451 +8,922 @@     <rect>      <x>0</x>      <y>0</y> -    <width>721</width> -    <height>569</height> +    <width>731</width> +    <height>602</height>     </rect>    </property>    <property name="windowTitle" >     <string>Dialog</string>    </property> -  <widget class="QTabWidget" name="tabWidget" > -   <property name="geometry" > -    <rect> -     <x>9</x> -     <y>9</y> -     <width>703</width> -     <height>508</height> -    </rect> +  <layout class="QVBoxLayout" > +   <property name="margin" > +    <number>9</number>     </property> -   <widget class="QWidget" name="tab" > -    <attribute name="title" > -     <string>Application</string> -    </attribute> -    <widget class="QGroupBox" name="groupBox_2" > -     <property name="title" > -      <string>Views</string> -     </property> -     <layout class="QGridLayout" > -      <property name="margin" > -       <number>9</number> -      </property> -      <property name="spacing" > -       <number>6</number> -      </property> -      <item row="3" column="6" > -       <widget class="QPushButton" name="setMixerCurrent1" > -        <property name="text" > -         <string>Cur</string> -        </property> -       </widget> -      </item> -      <item row="3" column="1" > -       <widget class="QCheckBox" name="showMixer1" > -        <property name="text" > -         <string>show</string> -        </property> -       </widget> -      </item> -      <item row="3" column="0" > -       <widget class="QLabel" name="label_5" > -        <property name="text" > -         <string>Mixer 1</string> -        </property> -       </widget> -      </item> -      <item row="2" column="0" > -       <widget class="QLabel" name="label_4" > -        <property name="text" > -         <string>Big Time</string> -        </property> -       </widget> -      </item> -      <item row="1" column="6" > -       <widget class="QPushButton" name="setTransportCurrent" > -        <property name="text" > -         <string>Cur</string> -        </property> -       </widget> -      </item> -      <item row="4" column="6" > -       <widget class="QPushButton" name="setMixerCurrent2" > -        <property name="text" > -         <string>Cur</string> -        </property> -       </widget> -      </item> -      <item row="0" column="6" > -       <widget class="QPushButton" name="setArrangerCurrent" > -        <property name="text" > -         <string>Cur</string> -        </property> -       </widget> -      </item> -      <item row="4" column="5" > -       <widget class="QSpinBox" name="mixerH2" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="4" column="4" > -       <widget class="QSpinBox" name="mixerW2" > -        <property name="maximum" > -         <number>9999</number> -        </property> -        <property name="value" > -         <number>0</number> -        </property> -       </widget> -      </item> -      <item row="3" column="5" > -       <widget class="QSpinBox" name="mixerH1" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="3" column="4" > -       <widget class="QSpinBox" name="mixerW1" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="2" column="5" > -       <widget class="QSpinBox" name="bigtimeH" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="2" column="4" > -       <widget class="QSpinBox" name="bigtimeW" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="0" column="5" > -       <widget class="QSpinBox" name="arrangerH" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="0" column="4" > -       <widget class="QSpinBox" name="arrangerW" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="4" column="3" > -       <widget class="QSpinBox" name="mixerY2" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="3" column="3" > -       <widget class="QSpinBox" name="mixerY1" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="2" column="3" > -       <widget class="QSpinBox" name="bigtimeY" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="1" column="3" > -       <widget class="QSpinBox" name="transportY" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="0" column="3" > -       <widget class="QSpinBox" name="arrangerY" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="4" column="2" > -       <widget class="QSpinBox" name="mixerX1" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="3" column="2" > -       <widget class="QSpinBox" name="mixerX2" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="2" column="2" > -       <widget class="QSpinBox" name="bigtimeX" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="1" column="2" > -       <widget class="QSpinBox" name="transportX" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="0" column="2" > -       <widget class="QSpinBox" name="arrangerX" > -        <property name="maximum" > -         <number>9999</number> -        </property> -       </widget> -      </item> -      <item row="4" column="1" > -       <widget class="QCheckBox" name="showMixer2" > -        <property name="text" > -         <string>show</string> -        </property> -       </widget> -      </item> -      <item row="1" column="1" > -       <widget class="QCheckBox" name="showTransport" > -        <property name="text" > -         <string>show</string> -        </property> -       </widget> -      </item> -      <item row="4" column="0" > -       <widget class="QLabel" name="label_6" > -        <property name="text" > -         <string>Mixer 2</string> -        </property> -       </widget> -      </item> -      <item row="1" column="0" > -       <widget class="QLabel" name="label_3" > -        <property name="text" > -         <string>Transport</string> -        </property> -       </widget> -      </item> -      <item row="0" column="0" > -       <widget class="QLabel" name="label_2" > -        <property name="text" > -         <string>Arranger</string> -        </property> -       </widget> -      </item> -      <item row="2" column="1" > -       <widget class="QCheckBox" name="showBigtime" > -        <property name="text" > -         <string>show</string> -        </property> -       </widget> -      </item> -      <item row="2" column="6" > -       <widget class="QPushButton" name="setBigtimeCurrent" > -        <property name="text" > -         <string>Cur</string> -        </property> -       </widget> -      </item> -     </layout> -    </widget> -    <widget class="QGroupBox" name="groupBox" > -     <property name="title" > -      <string>Start MusE</string> -     </property> -     <layout class="QHBoxLayout" > -      <property name="margin" > -       <number>9</number> -      </property> -      <property name="spacing" > -       <number>6</number> -      </property> -      <item> -       <widget class="QGroupBox" name="startSongGroup" > -        <property name="title" > -         <string/> -        </property> -        <layout class="QVBoxLayout" > -         <property name="margin" > -          <number>9</number> -         </property> -         <property name="spacing" > -          <number>6</number> -         </property> -         <item> -          <widget class="QRadioButton" name="startLast" > -           <property name="text" > -            <string>always ask</string> -           </property> -          </widget> -         </item> -         <item> -          <widget class="QRadioButton" name="startTemplate" > -           <property name="text" > -            <string>start with last project</string> -           </property> -          </widget> -         </item> -         <item> -          <widget class="QRadioButton" name="startSong" > -           <property name="text" > -            <string>start with project:</string> -           </property> -          </widget> -         </item> -         <item> -          <widget class="QLineEdit" name="startSongEntry" /> -         </item> -        </layout> -       </widget> -      </item> -      <item> -       <layout class="QVBoxLayout" > -        <property name="margin" > -         <number>0</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item> -         <widget class="QCheckBox" name="showSplash" > -          <property name="text" > -           <string>show splash screen</string> -          </property> -         </widget> -        </item> -        <item> -         <spacer> -          <property name="orientation" > -           <enum>Qt::Vertical</enum> -          </property> -          <property name="sizeHint" > -           <size> -            <width>20</width> -            <height>40</height> -           </size> -          </property> -         </spacer> -        </item> -       </layout> -      </item> -     </layout> -    </widget> -   </widget> -   <widget class="QWidget" name="tab_5" > -    <attribute name="title" > -     <string>Editors</string> -    </attribute> -    <widget class="QTabWidget" name="tabWidget2" > -     <property name="geometry" > -      <rect> -       <x>9</x> -       <y>9</y> -       <width>641</width> -       <height>457</height> -      </rect> -     </property> -     <widget class="QWidget" name="tab_61" > +   <property name="spacing" > +    <number>6</number> +   </property> +   <item> +    <widget class="QTabWidget" name="tabWidget" > +     <widget class="QWidget" name="tab" >        <attribute name="title" > -       <string>Arranger</string> +       <string>Application</string>        </attribute> -      <layout class="QGridLayout" > +      <layout class="QVBoxLayout" >         <property name="margin" >          <number>9</number>         </property>         <property name="spacing" >          <number>6</number>         </property> -       <item row="2" column="0" colspan="2" > -        <widget class="QCheckBox" name="arrGrid" > -         <property name="text" > -          <string>show snap grid</string> +       <item> +        <widget class="QGroupBox" name="groupBox" > +         <property name="title" > +          <string>Start MusE</string>           </property> +         <layout class="QHBoxLayout" > +          <property name="margin" > +           <number>9</number> +          </property> +          <property name="spacing" > +           <number>3</number> +          </property> +          <item> +           <layout class="QVBoxLayout" > +            <property name="margin" > +             <number>0</number> +            </property> +            <property name="spacing" > +             <number>3</number> +            </property> +            <item> +             <widget class="QRadioButton" name="alwaysAsk" > +              <property name="text" > +               <string>always ask</string> +              </property> +             </widget> +            </item> +            <item> +             <widget class="QRadioButton" name="startWithLastProject" > +              <property name="text" > +               <string>start with last project</string> +              </property> +             </widget> +            </item> +            <item> +             <widget class="QRadioButton" name="startWithProject" > +              <property name="text" > +               <string>start with project:</string> +              </property> +             </widget> +            </item> +            <item> +             <widget class="QLineEdit" name="startProjectEntry" /> +            </item> +           </layout> +          </item> +          <item> +           <layout class="QVBoxLayout" > +            <property name="margin" > +             <number>0</number> +            </property> +            <property name="spacing" > +             <number>6</number> +            </property> +            <item> +             <widget class="QCheckBox" name="showSplash" > +              <property name="text" > +               <string>show splash screen</string> +              </property> +             </widget> +            </item> +            <item> +             <spacer> +              <property name="orientation" > +               <enum>Qt::Vertical</enum> +              </property> +              <property name="sizeHint" > +               <size> +                <width>20</width> +                <height>40</height> +               </size> +              </property> +             </spacer> +            </item> +           </layout> +          </item> +         </layout>          </widget>         </item> -       <item row="0" column="1" > -        <widget class="QGroupBox" name="eventButtonGroup" > +       <item> +        <widget class="QGroupBox" name="groupBox_7" >           <property name="title" > -          <string>Events</string> +          <string>Path</string>           </property> -         <layout class="QGridLayout" > +         <layout class="QHBoxLayout" >            <property name="margin" > -           <number>11</number> +           <number>9</number>            </property>            <property name="spacing" >             <number>6</number>            </property> -          <item row="0" column="0" > -           <widget class="QCheckBox" name="eventNoteon" > +          <item> +           <widget class="QLabel" name="label" >              <property name="text" > -             <string>note on</string> +             <string>Project Path</string>              </property>             </widget>            </item> -          <item row="1" column="0" > -           <widget class="QCheckBox" name="eventPolypressure" > +          <item> +           <widget class="QLineEdit" name="projectPath" /> +          </item> +         </layout> +        </widget> +       </item> +       <item> +        <widget class="QGroupBox" name="groupBox_2" > +         <property name="title" > +          <string>Views</string> +         </property> +         <layout class="QGridLayout" > +          <property name="margin" > +           <number>9</number> +          </property> +          <property name="spacing" > +           <number>3</number> +          </property> +          <item row="3" column="6" > +           <widget class="QPushButton" name="setMixerCurrent1" > +            <property name="text" > +             <string>Cur</string> +            </property> +           </widget> +          </item> +          <item row="3" column="1" > +           <widget class="QCheckBox" name="showMixer1" > +            <property name="text" > +             <string>show</string> +            </property> +           </widget> +          </item> +          <item row="3" column="0" > +           <widget class="QLabel" name="label_5" >              <property name="text" > -             <string>poly pressure</string> +             <string>Mixer 1</string>              </property>             </widget>            </item>            <item row="2" column="0" > -           <widget class="QCheckBox" name="eventController" > +           <widget class="QLabel" name="label_4" > +            <property name="text" > +             <string>Big Time</string> +            </property> +           </widget> +          </item> +          <item row="1" column="6" > +           <widget class="QPushButton" name="setTransportCurrent" >              <property name="text" > -             <string>controller</string> +             <string>Cur</string> +            </property> +           </widget> +          </item> +          <item row="4" column="6" > +           <widget class="QPushButton" name="setMixerCurrent2" > +            <property name="text" > +             <string>Cur</string> +            </property> +           </widget> +          </item> +          <item row="0" column="6" > +           <widget class="QPushButton" name="setArrangerCurrent" > +            <property name="text" > +             <string>Cur</string> +            </property> +           </widget> +          </item> +          <item row="4" column="5" > +           <widget class="QSpinBox" name="mixerH2" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="4" column="4" > +           <widget class="QSpinBox" name="mixerW2" > +            <property name="maximum" > +             <number>9999</number> +            </property> +            <property name="value" > +             <number>0</number> +            </property> +           </widget> +          </item> +          <item row="3" column="5" > +           <widget class="QSpinBox" name="mixerH1" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="3" column="4" > +           <widget class="QSpinBox" name="mixerW1" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="2" column="5" > +           <widget class="QSpinBox" name="bigtimeH" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="2" column="4" > +           <widget class="QSpinBox" name="bigtimeW" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="0" column="5" > +           <widget class="QSpinBox" name="arrangerH" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="0" column="4" > +           <widget class="QSpinBox" name="arrangerW" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="4" column="3" > +           <widget class="QSpinBox" name="mixerY2" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="3" column="3" > +           <widget class="QSpinBox" name="mixerY1" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="2" column="3" > +           <widget class="QSpinBox" name="bigtimeY" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="1" column="3" > +           <widget class="QSpinBox" name="transportY" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="0" column="3" > +           <widget class="QSpinBox" name="arrangerY" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="4" column="2" > +           <widget class="QSpinBox" name="mixerX1" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="3" column="2" > +           <widget class="QSpinBox" name="mixerX2" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="2" column="2" > +           <widget class="QSpinBox" name="bigtimeX" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="1" column="2" > +           <widget class="QSpinBox" name="transportX" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="0" column="2" > +           <widget class="QSpinBox" name="arrangerX" > +            <property name="maximum" > +             <number>9999</number> +            </property> +           </widget> +          </item> +          <item row="4" column="1" > +           <widget class="QCheckBox" name="showMixer2" > +            <property name="text" > +             <string>show</string>              </property>             </widget>            </item>            <item row="1" column="1" > -           <widget class="QCheckBox" name="eventAftertouch" > +           <widget class="QCheckBox" name="showTransport" >              <property name="text" > -             <string>aftertouch</string> +             <string>show</string>              </property>             </widget>            </item> -          <item row="2" column="1" > -           <widget class="QCheckBox" name="eventPitchbend" > +          <item row="4" column="0" > +           <widget class="QLabel" name="label_6" >              <property name="text" > -             <string>pitch bend</string> +             <string>Mixer 2</string>              </property>             </widget>            </item> -          <item row="0" column="1" > -           <widget class="QCheckBox" name="eventProgramchange" > +          <item row="1" column="0" > +           <widget class="QLabel" name="label_3" >              <property name="text" > -             <string>program change</string> +             <string>Transport</string>              </property>             </widget>            </item> -          <item row="3" column="0" > -           <widget class="QCheckBox" name="eventSpecial" > +          <item row="0" column="0" > +           <widget class="QLabel" name="label_2" >              <property name="text" > -             <string>special</string> +             <string>Arranger</string> +            </property> +           </widget> +          </item> +          <item row="2" column="1" > +           <widget class="QCheckBox" name="showBigtime" > +            <property name="text" > +             <string>show</string> +            </property> +           </widget> +          </item> +          <item row="2" column="6" > +           <widget class="QPushButton" name="setBigtimeCurrent" > +            <property name="text" > +             <string>Cur</string>              </property>             </widget>            </item>           </layout>          </widget>         </item> -       <item row="1" column="0" colspan="2" > -        <widget class="QGroupBox" name="useCanvasBgPixmap" > +      </layout> +     </widget> +     <widget class="QWidget" name="tab_5" > +      <attribute name="title" > +       <string>Editors</string> +      </attribute> +      <layout class="QVBoxLayout" > +       <property name="margin" > +        <number>9</number> +       </property> +       <property name="spacing" > +        <number>6</number> +       </property> +       <item> +        <widget class="QTabWidget" name="tabWidget2" > +         <widget class="QWidget" name="tab_61" > +          <attribute name="title" > +           <string>Arranger</string> +          </attribute> +          <layout class="QGridLayout" > +           <property name="margin" > +            <number>9</number> +           </property> +           <property name="spacing" > +            <number>6</number> +           </property> +           <item row="2" column="0" colspan="2" > +            <widget class="QCheckBox" name="arrGrid" > +             <property name="text" > +              <string>show snap grid</string> +             </property> +            </widget> +           </item> +           <item row="0" column="1" > +            <widget class="QGroupBox" name="eventButtonGroup" > +             <property name="title" > +              <string>Events</string> +             </property> +             <layout class="QGridLayout" > +              <property name="margin" > +               <number>11</number> +              </property> +              <property name="spacing" > +               <number>6</number> +              </property> +              <item row="0" column="0" > +               <widget class="QCheckBox" name="eventNoteon" > +                <property name="text" > +                 <string>note on</string> +                </property> +               </widget> +              </item> +              <item row="1" column="0" > +               <widget class="QCheckBox" name="eventPolypressure" > +                <property name="text" > +                 <string>poly pressure</string> +                </property> +               </widget> +              </item> +              <item row="2" column="0" > +               <widget class="QCheckBox" name="eventController" > +                <property name="text" > +                 <string>controller</string> +                </property> +               </widget> +              </item> +              <item row="1" column="1" > +               <widget class="QCheckBox" name="eventAftertouch" > +                <property name="text" > +                 <string>aftertouch</string> +                </property> +               </widget> +              </item> +              <item row="2" column="1" > +               <widget class="QCheckBox" name="eventPitchbend" > +                <property name="text" > +                 <string>pitch bend</string> +                </property> +               </widget> +              </item> +              <item row="0" column="1" > +               <widget class="QCheckBox" name="eventProgramchange" > +                <property name="text" > +                 <string>program change</string> +                </property> +               </widget> +              </item> +              <item row="3" column="0" > +               <widget class="QCheckBox" name="eventSpecial" > +                <property name="text" > +                 <string>special</string> +                </property> +               </widget> +              </item> +             </layout> +            </widget> +           </item> +           <item row="1" column="0" colspan="2" > +            <widget class="QGroupBox" name="useCanvasBgPixmap" > +             <property name="title" > +              <string>Background</string> +             </property> +             <property name="checkable" > +              <bool>false</bool> +             </property> +             <layout class="QGridLayout" > +              <property name="margin" > +               <number>9</number> +              </property> +              <property name="spacing" > +               <number>6</number> +              </property> +              <item row="1" column="2" > +               <widget class="QToolButton" name="selectCanvasBgColor" > +                <property name="text" > +                 <string>select...</string> +                </property> +               </widget> +              </item> +              <item row="0" column="2" > +               <widget class="QToolButton" name="selectCanvasBgPixmap" > +                <property name="text" > +                 <string>select...</string> +                </property> +               </widget> +              </item> +              <item row="1" column="0" > +               <widget class="QRadioButton" name="useColor" > +                <property name="text" > +                 <string>Color</string> +                </property> +               </widget> +              </item> +              <item row="0" column="0" > +               <widget class="QRadioButton" name="usePixmap" > +                <property name="text" > +                 <string>Pixmap</string> +                </property> +               </widget> +              </item> +              <item row="0" column="1" > +               <widget class="QLabel" name="currentBgLabel" > +                <property name="sizePolicy" > +                 <sizepolicy> +                  <hsizetype>7</hsizetype> +                  <vsizetype>1</vsizetype> +                  <horstretch>0</horstretch> +                  <verstretch>0</verstretch> +                 </sizepolicy> +                </property> +                <property name="text" > +                 <string>bg</string> +                </property> +                <property name="alignment" > +                 <set>Qt::AlignCenter</set> +                </property> +                <property name="indent" > +                 <number>-1</number> +                </property> +               </widget> +              </item> +              <item row="1" column="1" > +               <widget class="QLabel" name="canvasBackgroundColor" > +                <property name="text" > +                 <string>Color</string> +                </property> +                <property name="alignment" > +                 <set>Qt::AlignCenter</set> +                </property> +               </widget> +              </item> +             </layout> +            </widget> +           </item> +           <item row="0" column="0" > +            <widget class="QGroupBox" name="ButtonGroup3" > +             <property name="title" > +              <string>Parts</string> +             </property> +             <layout class="QVBoxLayout" > +              <property name="margin" > +               <number>11</number> +              </property> +              <property name="spacing" > +               <number>6</number> +              </property> +              <item> +               <widget class="QCheckBox" name="partShownames" > +                <property name="text" > +                 <string>show names</string> +                </property> +               </widget> +              </item> +              <item> +               <widget class="QRadioButton" name="partShowevents" > +                <property name="text" > +                 <string>show events</string> +                </property> +               </widget> +              </item> +              <item> +               <widget class="QRadioButton" name="partShowCakes" > +                <property name="text" > +                 <string>show Cakewalk Style</string> +                </property> +               </widget> +              </item> +             </layout> +            </widget> +           </item> +          </layout> +         </widget> +         <widget class="QWidget" name="tab_6" > +          <attribute name="title" > +           <string>Pianoroll</string> +          </attribute> +          <layout class="QGridLayout" > +           <property name="margin" > +            <number>9</number> +           </property> +           <property name="spacing" > +            <number>6</number> +           </property> +           <item row="3" column="0" > +            <spacer> +             <property name="orientation" > +              <enum>Qt::Vertical</enum> +             </property> +             <property name="sizeHint" > +              <size> +               <width>20</width> +               <height>211</height> +              </size> +             </property> +            </spacer> +           </item> +           <item row="2" column="0" > +            <widget class="QLabel" name="label_25" > +             <property name="text" > +              <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Quant</p></body></html></string> +             </property> +            </widget> +           </item> +           <item row="1" column="0" > +            <widget class="QLabel" name="label_24" > +             <property name="text" > +              <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Raster</p></body></html></string> +             </property> +            </widget> +           </item> +           <item row="0" column="0" > +            <widget class="QLabel" name="label_21" > +             <property name="text" > +              <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> +             </property> +            </widget> +           </item> +           <item row="0" column="3" > +            <widget class="QLabel" name="label_23" > +             <property name="text" > +              <string>height:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +           <item row="0" column="1" > +            <widget class="QLabel" name="label_22" > +             <property name="text" > +              <string>width:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +           <item row="0" column="4" > +            <widget class="QSpinBox" name="pianorollHeight" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="0" column="2" > +            <widget class="QSpinBox" name="pianorollWidth" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="2" column="1" > +            <widget class="QuantCombo" name="pianorollQuant" /> +           </item> +           <item row="1" column="1" > +            <widget class="RasterCombo" name="pianorollRaster" /> +           </item> +          </layout> +         </widget> +         <widget class="QWidget" name="tab_7" > +          <attribute name="title" > +           <string>DrumEditor</string> +          </attribute> +          <layout class="QGridLayout" > +           <property name="margin" > +            <number>9</number> +           </property> +           <property name="spacing" > +            <number>6</number> +           </property> +           <item row="1" column="0" > +            <spacer> +             <property name="orientation" > +              <enum>Qt::Vertical</enum> +             </property> +             <property name="sizeHint" > +              <size> +               <width>20</width> +               <height>351</height> +              </size> +             </property> +            </spacer> +           </item> +           <item row="0" column="0" > +            <widget class="QLabel" name="label_27" > +             <property name="text" > +              <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> +             </property> +            </widget> +           </item> +           <item row="0" column="2" > +            <widget class="QSpinBox" name="drumEditorWidth" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="0" column="1" > +            <widget class="QLabel" name="label_28" > +             <property name="text" > +              <string>width:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +           <item row="0" column="4" > +            <widget class="QSpinBox" name="drumEditorHeight" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="0" column="3" > +            <widget class="QLabel" name="label_26" > +             <property name="text" > +              <string>height:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +          </layout> +         </widget> +         <widget class="QWidget" name="tab_8" > +          <attribute name="title" > +           <string>MasterEditor</string> +          </attribute> +          <layout class="QGridLayout" > +           <property name="margin" > +            <number>9</number> +           </property> +           <property name="spacing" > +            <number>6</number> +           </property> +           <item row="1" column="0" > +            <spacer> +             <property name="orientation" > +              <enum>Qt::Vertical</enum> +             </property> +             <property name="sizeHint" > +              <size> +               <width>20</width> +               <height>331</height> +              </size> +             </property> +            </spacer> +           </item> +           <item row="0" column="4" > +            <widget class="QSpinBox" name="masterEditorHeight" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="0" column="3" > +            <widget class="QLabel" name="label_30" > +             <property name="text" > +              <string>height:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +           <item row="0" column="2" > +            <widget class="QSpinBox" name="masterEditorWidth" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="0" column="1" > +            <widget class="QLabel" name="label_29" > +             <property name="text" > +              <string>width:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +           <item row="0" column="0" > +            <widget class="QLabel" name="label_31" > +             <property name="text" > +              <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> +             </property> +            </widget> +           </item> +          </layout> +         </widget> +         <widget class="QWidget" name="tab_9" > +          <attribute name="title" > +           <string>WaveEditor</string> +          </attribute> +          <layout class="QGridLayout" > +           <property name="margin" > +            <number>9</number> +           </property> +           <property name="spacing" > +            <number>6</number> +           </property> +           <item row="0" column="4" > +            <widget class="QSpinBox" name="waveEditorHeight" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="0" column="3" > +            <widget class="QLabel" name="label_34" > +             <property name="text" > +              <string>height:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +           <item row="0" column="1" > +            <widget class="QLabel" name="label_32" > +             <property name="text" > +              <string>width:</string> +             </property> +             <property name="alignment" > +              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +             </property> +            </widget> +           </item> +           <item row="0" column="0" > +            <widget class="QLabel" name="label_33" > +             <property name="text" > +              <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> +             </property> +            </widget> +           </item> +           <item row="0" column="2" > +            <widget class="QSpinBox" name="waveEditorWidth" > +             <property name="maximum" > +              <number>9999</number> +             </property> +             <property name="minimum" > +              <number>50</number> +             </property> +            </widget> +           </item> +           <item row="1" column="0" > +            <spacer> +             <property name="orientation" > +              <enum>Qt::Vertical</enum> +             </property> +             <property name="sizeHint" > +              <size> +               <width>20</width> +               <height>351</height> +              </size> +             </property> +            </spacer> +           </item> +          </layout> +         </widget> +        </widget> +       </item> +      </layout> +     </widget> +     <widget class="QWidget" name="tab_1" > +      <attribute name="title" > +       <string>Audio</string> +      </attribute> +      <layout class="QVBoxLayout" > +       <property name="margin" > +        <number>9</number> +       </property> +       <property name="spacing" > +        <number>6</number> +       </property> +       <item> +        <widget class="QGroupBox" name="groupBox_4" >           <property name="title" > -          <string>Background</string> -         </property> -         <property name="checkable" > -          <bool>false</bool> +          <string>Mixer</string>           </property>           <layout class="QGridLayout" >            <property name="margin" > @@ -461,118 +932,300 @@            <property name="spacing" >             <number>6</number>            </property> -          <item row="1" column="2" > -           <widget class="QToolButton" name="selectCanvasBgColor" > -            <property name="text" > -             <string>select...</string> +          <item row="0" column="3" > +           <widget class="QSpinBox" name="peakHoldTime" > +            <property name="suffix" > +             <string>ms</string> +            </property> +            <property name="maximum" > +             <number>5000</number> +            </property> +            <property name="minimum" > +             <number>20</number>              </property>             </widget>            </item>            <item row="0" column="2" > -           <widget class="QToolButton" name="selectCanvasBgPixmap" > +           <widget class="QLabel" name="label_20" >              <property name="text" > -             <string>select...</string> +             <string>Peak Hold Time:</string> +            </property> +           </widget> +          </item> +          <item row="1" column="1" > +           <widget class="QSpinBox" name="minMeterSelect" > +            <property name="suffix" > +             <string>dB</string> +            </property> +            <property name="maximum" > +             <number>0</number> +            </property> +            <property name="minimum" > +             <number>-100</number> +            </property> +            <property name="singleStep" > +             <number>10</number> +            </property> +            <property name="value" > +             <number>-60</number> +            </property> +           </widget> +          </item> +          <item row="0" column="1" > +           <widget class="QSpinBox" name="minSliderSelect" > +            <property name="suffix" > +             <string>dB</string> +            </property> +            <property name="maximum" > +             <number>0</number> +            </property> +            <property name="minimum" > +             <number>-100</number> +            </property> +            <property name="value" > +             <number>-60</number>              </property>             </widget>            </item>            <item row="1" column="0" > -           <widget class="QRadioButton" name="useColor" > +           <widget class="QLabel" name="label_8" >              <property name="text" > -             <string>Color</string> +             <string>min. Meter Val</string>              </property>             </widget>            </item>            <item row="0" column="0" > -           <widget class="QRadioButton" name="usePixmap" > +           <widget class="QLabel" name="label_7" >              <property name="text" > -             <string>Pixmap</string> +             <string>min. Slider Val</string>              </property>             </widget>            </item> -          <item row="0" column="1" > -           <widget class="QLabel" name="currentBgLabel" > -            <property name="sizePolicy" > -             <sizepolicy> -              <hsizetype>7</hsizetype> -              <vsizetype>1</vsizetype> -              <horstretch>0</horstretch> -              <verstretch>0</verstretch> -             </sizepolicy> -            </property> +         </layout> +        </widget> +       </item> +       <item> +        <widget class="QCheckBox" name="freewheelMode" > +         <property name="text" > +          <string>use JACK freewheel mode if possible</string> +         </property> +        </widget> +       </item> +       <item> +        <spacer> +         <property name="orientation" > +          <enum>Qt::Vertical</enum> +         </property> +         <property name="sizeHint" > +          <size> +           <width>20</width> +           <height>40</height> +          </size> +         </property> +        </spacer> +       </item> +      </layout> +     </widget> +     <widget class="QWidget" name="tab_2" > +      <attribute name="title" > +       <string>Midi</string> +      </attribute> +      <layout class="QVBoxLayout" > +       <property name="margin" > +        <number>8</number> +       </property> +       <property name="spacing" > +        <number>6</number> +       </property> +       <item> +        <widget class="QGroupBox" name="groupBox_5" > +         <property name="title" > +          <string>Ticks</string> +         </property> +         <layout class="QGridLayout" > +          <property name="margin" > +           <number>9</number> +          </property> +          <property name="spacing" > +           <number>6</number> +          </property> +          <item row="1" column="0" > +           <widget class="QLabel" name="label_10" >              <property name="text" > -             <string>bg</string> -            </property> -            <property name="alignment" > -             <set>Qt::AlignCenter</set> -            </property> -            <property name="indent" > -             <number>-1</number> +             <string>Displayed Resolution +(Ticks/Quarternote)</string>              </property>             </widget>            </item> -          <item row="1" column="1" > -           <widget class="QLabel" name="canvasBackgroundColor" > +          <item row="0" column="0" > +           <widget class="QLabel" name="label_9" >              <property name="text" > -             <string>Color</string> +             <string>RTC Resolution +(Ticks/Sec)</string>              </property> -            <property name="alignment" > -             <set>Qt::AlignCenter</set> +           </widget> +          </item> +          <item row="0" column="1" > +           <widget class="QComboBox" name="rtcResolutionSelect" > +            <item> +             <property name="text" > +              <string>1024</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>2048</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>4096</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>8172</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="1" column="1" > +           <widget class="QComboBox" name="midiDivisionSelect" > +            <property name="currentIndex" > +             <number>3</number>              </property> +            <item> +             <property name="text" > +              <string>48</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>96</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>192</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>384</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>768</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>1536</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>3072</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>6144</string> +             </property> +            </item> +            <item> +             <property name="text" > +              <string>12288</string> +             </property> +            </item>             </widget>            </item>           </layout>          </widget>         </item> -       <item row="0" column="0" > -        <widget class="QGroupBox" name="ButtonGroup3" > +       <item> +        <widget class="QGroupBox" name="groupBox_3" >           <property name="title" > -          <string>Parts</string> +          <string>Input Routing</string>           </property> -         <layout class="QVBoxLayout" > +         <layout class="QGridLayout" >            <property name="margin" > -           <number>11</number> +           <number>8</number>            </property>            <property name="spacing" >             <number>6</number>            </property> -          <item> -           <widget class="QCheckBox" name="partShownames" > +          <item row="1" column="1" > +           <widget class="QCheckBox" name="connectToAllTracks" >              <property name="text" > -             <string>show names</string> +             <string>Connect to all Tracks</string>              </property>             </widget>            </item> -          <item> -           <widget class="QRadioButton" name="partShowevents" > +          <item row="0" column="1" > +           <widget class="QCheckBox" name="connectToAllDevices" >              <property name="text" > -             <string>show events</string> +             <string>Connect to all Input Devices</string>              </property>             </widget>            </item> -          <item> -           <widget class="QRadioButton" name="partShowCakes" > +          <item row="1" column="0" > +           <widget class="QLabel" name="label_17" >              <property name="text" > -             <string>show Cakewalk Style</string> +             <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Input Device:</p></body></html></string> +            </property> +           </widget> +          </item> +          <item row="2" column="0" > +           <widget class="QComboBox" name="preferredInput" /> +          </item> +          <item row="0" column="0" > +           <widget class="QCheckBox" name="createDefaultInput" > +            <property name="text" > +             <string>Create Default Input Strip</string>              </property>             </widget>            </item>           </layout>          </widget>         </item> -      </layout> -     </widget> -     <widget class="QWidget" name="tab_6" > -      <attribute name="title" > -       <string>Pianoroll</string> -      </attribute> -      <layout class="QGridLayout" > -       <property name="margin" > -        <number>9</number> -       </property> -       <property name="spacing" > -        <number>6</number> -       </property> -       <item row="3" column="0" > +       <item> +        <widget class="QGroupBox" name="groupBox_6" > +         <property name="title" > +          <string>Output Routing</string> +         </property> +         <layout class="QGridLayout" > +          <property name="margin" > +           <number>8</number> +          </property> +          <property name="spacing" > +           <number>8</number> +          </property> +          <item row="0" column="0" > +           <widget class="QLabel" name="label_18" > +            <property name="text" > +             <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Output Device:</p></body></html></string> +            </property> +           </widget> +          </item> +          <item row="1" column="1" colspan="2" > +           <widget class="QComboBox" name="preferredInstrument" /> +          </item> +          <item row="0" column="1" > +           <widget class="QLabel" name="label_19" > +            <property name="text" > +             <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Instrument:</p></body></html></string> +            </property> +           </widget> +          </item> +          <item row="1" column="0" > +           <widget class="QComboBox" name="preferredOutput" /> +          </item> +         </layout> +        </widget> +       </item> +       <item>          <spacer>           <property name="orientation" >            <enum>Qt::Vertical</enum> @@ -580,83 +1233,16 @@           <property name="sizeHint" >            <size>             <width>20</width> -           <height>211</height> +           <height>20</height>            </size>           </property>          </spacer>         </item> -       <item row="2" column="0" > -        <widget class="QLabel" name="label_25" > -         <property name="text" > -          <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Quant</p></body></html></string> -         </property> -        </widget> -       </item> -       <item row="1" column="0" > -        <widget class="QLabel" name="label_24" > -         <property name="text" > -          <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Raster</p></body></html></string> -         </property> -        </widget> -       </item> -       <item row="0" column="0" > -        <widget class="QLabel" name="label_21" > -         <property name="text" > -          <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> -         </property> -        </widget> -       </item> -       <item row="0" column="3" > -        <widget class="QLabel" name="label_23" > -         <property name="text" > -          <string>height:</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -         </property> -        </widget> -       </item> -       <item row="0" column="1" > -        <widget class="QLabel" name="label_22" > -         <property name="text" > -          <string>width:</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -         </property> -        </widget> -       </item> -       <item row="0" column="4" > -        <widget class="QSpinBox" name="pianorollHeight" > -         <property name="maximum" > -          <number>9999</number> -         </property> -         <property name="minimum" > -          <number>50</number> -         </property> -        </widget> -       </item> -       <item row="0" column="2" > -        <widget class="QSpinBox" name="pianorollWidth" > -         <property name="maximum" > -          <number>9999</number> -         </property> -         <property name="minimum" > -          <number>50</number> -         </property> -        </widget> -       </item> -       <item row="2" column="1" > -        <widget class="QuantCombo" name="pianorollQuant" /> -       </item> -       <item row="1" column="1" > -        <widget class="RasterCombo" name="pianorollRaster" /> -       </item>        </layout>       </widget> -     <widget class="QWidget" name="tab_7" > +     <widget class="QWidget" name="tab_3" >        <attribute name="title" > -       <string>DrumEditor</string> +       <string>GUI</string>        </attribute>        <layout class="QGridLayout" >         <property name="margin" > @@ -665,7 +1251,7 @@         <property name="spacing" >          <number>6</number>         </property> -       <item row="1" column="0" > +       <item row="2" column="0" >          <spacer>           <property name="orientation" >            <enum>Qt::Vertical</enum> @@ -673,72 +1259,144 @@           <property name="sizeHint" >            <size>             <width>20</width> -           <height>351</height> +           <height>40</height>            </size>           </property>          </spacer>         </item> -       <item row="0" column="0" > -        <widget class="QLabel" name="label_27" > -         <property name="text" > -          <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> -         </property> -        </widget> +       <item row="1" column="1" > +        <widget class="QLineEdit" name="helpBrowser" />         </item> -       <item row="0" column="2" > -        <widget class="QSpinBox" name="drumEditorWidth" > -         <property name="maximum" > -          <number>9999</number> -         </property> -         <property name="minimum" > -          <number>50</number> +       <item row="1" column="0" > +        <widget class="QLabel" name="label_12" > +         <property name="text" > +          <string>Help Browser</string>           </property>          </widget>         </item>         <item row="0" column="1" > -        <widget class="QLabel" name="label_28" > -         <property name="text" > -          <string>width:</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +        <widget class="QSpinBox" name="guiRefreshSelect" > +         <property name="suffix" > +          <string>/sec</string>           </property> -        </widget> -       </item> -       <item row="0" column="4" > -        <widget class="QSpinBox" name="drumEditorHeight" >           <property name="maximum" > -          <number>9999</number> +          <number>100</number>           </property>           <property name="minimum" > -          <number>50</number> +          <number>2</number> +         </property> +         <property name="value" > +          <number>20</number>           </property>          </widget>         </item> -       <item row="0" column="3" > -        <widget class="QLabel" name="label_26" > +       <item row="0" column="0" > +        <widget class="QLabel" name="label_11" >           <property name="text" > -          <string>height:</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +          <string>GUI Refresh Rate:</string>           </property>          </widget>         </item>        </layout>       </widget> -     <widget class="QWidget" name="tab_8" > +     <widget class="QWidget" name="tab_4" >        <attribute name="title" > -       <string>MasterEditor</string> +       <string>RemoteControl</string>        </attribute> -      <layout class="QGridLayout" > +      <layout class="QVBoxLayout" >         <property name="margin" >          <number>9</number>         </property>         <property name="spacing" >          <number>6</number>         </property> -       <item row="1" column="0" > +       <item> +        <widget class="QGroupBox" name="rcGroup" > +         <property name="toolTip" > +          <string>enable midi remote control</string> +         </property> +         <property name="title" > +          <string>Midi Remote Control</string> +         </property> +         <property name="checkable" > +          <bool>true</bool> +         </property> +         <layout class="QGridLayout" > +          <property name="margin" > +           <number>9</number> +          </property> +          <property name="spacing" > +           <number>6</number> +          </property> +          <item row="1" column="0" > +           <widget class="QLabel" name="label_14" > +            <property name="text" > +             <string>Record</string> +            </property> +           </widget> +          </item> +          <item row="2" column="0" > +           <widget class="QLabel" name="label_15" > +            <property name="text" > +             <string>Goto Left Mark</string> +            </property> +           </widget> +          </item> +          <item row="0" column="0" > +           <widget class="QLabel" name="label_13" > +            <property name="text" > +             <string>Stop</string> +            </property> +           </widget> +          </item> +          <item row="0" column="3" > +           <spacer> +            <property name="orientation" > +             <enum>Qt::Horizontal</enum> +            </property> +            <property name="sizeHint" > +             <size> +              <width>40</width> +              <height>20</height> +             </size> +            </property> +           </spacer> +          </item> +          <item row="3" column="0" > +           <widget class="QLabel" name="label_16" > +            <property name="text" > +             <string>Play</string> +            </property> +           </widget> +          </item> +          <item row="0" column="2" > +           <widget class="RecordButton" name="recordStop" /> +          </item> +          <item row="1" column="2" > +           <widget class="RecordButton" name="recordRecord" /> +          </item> +          <item row="2" column="2" > +           <widget class="RecordButton" name="recordGotoLeftMark" /> +          </item> +          <item row="3" column="2" > +           <widget class="RecordButton" name="recordPlay" /> +          </item> +          <item row="0" column="1" > +           <widget class="GreendotButton" name="stopActive" /> +          </item> +          <item row="1" column="1" > +           <widget class="GreendotButton" name="recordActive" /> +          </item> +          <item row="2" column="1" > +           <widget class="GreendotButton" name="gotoLeftMarkActive" /> +          </item> +          <item row="3" column="1" > +           <widget class="GreendotButton" name="playActive" /> +          </item> +         </layout> +        </widget> +       </item> +       <item>          <spacer>           <property name="orientation" >            <enum>Qt::Vertical</enum> @@ -746,63 +1404,16 @@           <property name="sizeHint" >            <size>             <width>20</width> -           <height>331</height> +           <height>40</height>            </size>           </property>          </spacer>         </item> -       <item row="0" column="4" > -        <widget class="QSpinBox" name="masterEditorHeight" > -         <property name="maximum" > -          <number>9999</number> -         </property> -         <property name="minimum" > -          <number>50</number> -         </property> -        </widget> -       </item> -       <item row="0" column="3" > -        <widget class="QLabel" name="label_30" > -         <property name="text" > -          <string>height:</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -         </property> -        </widget> -       </item> -       <item row="0" column="2" > -        <widget class="QSpinBox" name="masterEditorWidth" > -         <property name="maximum" > -          <number>9999</number> -         </property> -         <property name="minimum" > -          <number>50</number> -         </property> -        </widget> -       </item> -       <item row="0" column="1" > -        <widget class="QLabel" name="label_29" > -         <property name="text" > -          <string>width:</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -         </property> -        </widget> -       </item> -       <item row="0" column="0" > -        <widget class="QLabel" name="label_31" > -         <property name="text" > -          <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> -         </property> -        </widget> -       </item>        </layout>       </widget> -     <widget class="QWidget" name="tab_9" > +     <widget class="QWidget" name="tab_11" >        <attribute name="title" > -       <string>WaveEditor</string> +       <string>Colors</string>        </attribute>        <layout class="QGridLayout" >         <property name="margin" > @@ -811,1473 +1422,891 @@         <property name="spacing" >          <number>6</number>         </property> -       <item row="0" column="4" > -        <widget class="QSpinBox" name="waveEditorHeight" > -         <property name="maximum" > -          <number>9999</number> +       <item row="3" column="1" colspan="2" > +        <layout class="QHBoxLayout" > +         <property name="margin" > +          <number>0</number>           </property> -         <property name="minimum" > -          <number>50</number> +         <property name="spacing" > +          <number>6</number>           </property> -        </widget> +         <item> +          <widget class="QLabel" name="textLabel5_2" > +           <property name="text" > +            <string>S</string> +           </property> +           <property name="alignment" > +            <set>Qt::AlignCenter</set> +           </property> +          </widget> +         </item> +         <item> +          <widget class="QSlider" name="sslider" > +           <property name="maximum" > +            <number>255</number> +           </property> +           <property name="orientation" > +            <enum>Qt::Horizontal</enum> +           </property> +          </widget> +         </item> +        </layout>         </item> -       <item row="0" column="3" > -        <widget class="QLabel" name="label_34" > -         <property name="text" > -          <string>height:</string> +       <item row="2" column="1" colspan="2" > +        <layout class="QHBoxLayout" > +         <property name="margin" > +          <number>0</number>           </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +         <property name="spacing" > +          <number>6</number>           </property> -        </widget> +         <item> +          <widget class="QLabel" name="textLabel4_2" > +           <property name="text" > +            <string>H</string> +           </property> +           <property name="alignment" > +            <set>Qt::AlignCenter</set> +           </property> +          </widget> +         </item> +         <item> +          <widget class="QSlider" name="hslider" > +           <property name="maximum" > +            <number>255</number> +           </property> +           <property name="orientation" > +            <enum>Qt::Horizontal</enum> +           </property> +          </widget> +         </item> +        </layout>         </item> -       <item row="0" column="1" > -        <widget class="QLabel" name="label_32" > -         <property name="text" > -          <string>width:</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +       <item rowspan="2" row="0" column="2" > +        <widget class="QFrame" name="colorframe" > +         <property name="sizePolicy" > +          <sizepolicy> +           <hsizetype>7</hsizetype> +           <vsizetype>7</vsizetype> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property> +         <property name="frameShape" > +          <enum>QFrame::StyledPanel</enum> +         </property> +         <property name="frameShadow" > +          <enum>QFrame::Sunken</enum>           </property>          </widget>         </item> -       <item row="0" column="0" > -        <widget class="QLabel" name="label_33" > +       <item row="1" column="1" > +        <widget class="QPushButton" name="addToPalette" >           <property name="text" > -          <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">Geometry</p></body></html></string> +          <string>add to palette</string>           </property>          </widget>         </item> -       <item row="0" column="2" > -        <widget class="QSpinBox" name="waveEditorWidth" > -         <property name="maximum" > -          <number>9999</number> -         </property> -         <property name="minimum" > -          <number>50</number> -         </property> -        </widget> -       </item> -       <item row="1" column="0" > -        <spacer> -         <property name="orientation" > -          <enum>Qt::Vertical</enum> +       <item row="0" column="1" > +        <widget class="QGroupBox" name="colorPalette" > +         <property name="focusPolicy" > +          <enum>Qt::NoFocus</enum>           </property> -         <property name="sizeHint" > -          <size> -           <width>20</width> -           <height>351</height> -          </size> +         <property name="title" > +          <string>Palette</string>           </property> -        </spacer> -       </item> -      </layout> -     </widget> -    </widget> -   </widget> -   <widget class="QWidget" name="tab_1" > -    <attribute name="title" > -     <string>Audio</string> -    </attribute> -    <layout class="QVBoxLayout" > -     <property name="margin" > -      <number>9</number> -     </property> -     <property name="spacing" > -      <number>6</number> -     </property> -     <item> -      <widget class="QGroupBox" name="groupBox_4" > -       <property name="title" > -        <string>Mixer</string> -       </property> -       <layout class="QGridLayout" > -        <property name="margin" > -         <number>9</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item row="0" column="3" > -         <widget class="QSpinBox" name="peakHoldTime" > -          <property name="suffix" > -           <string>ms</string> -          </property> -          <property name="maximum" > -           <number>5000</number> -          </property> -          <property name="minimum" > -           <number>20</number> -          </property> -         </widget> -        </item> -        <item row="0" column="2" > -         <widget class="QLabel" name="label_20" > -          <property name="text" > -           <string>Peak Hold Time:</string> -          </property> -         </widget> -        </item> -        <item row="1" column="1" > -         <widget class="QSpinBox" name="minMeterSelect" > -          <property name="suffix" > -           <string>dB</string> -          </property> -          <property name="maximum" > -           <number>0</number> -          </property> -          <property name="minimum" > -           <number>-100</number> -          </property> -          <property name="singleStep" > -           <number>10</number> -          </property> -          <property name="value" > -           <number>-60</number> -          </property> -         </widget> -        </item> -        <item row="0" column="1" > -         <widget class="QSpinBox" name="minSliderSelect" > -          <property name="suffix" > -           <string>dB</string> -          </property> -          <property name="maximum" > -           <number>0</number> -          </property> -          <property name="minimum" > -           <number>-100</number> -          </property> -          <property name="value" > -           <number>-60</number> -          </property> -         </widget> -        </item> -        <item row="1" column="0" > -         <widget class="QLabel" name="label_8" > -          <property name="text" > -           <string>min. Meter Val</string> -          </property> -         </widget> -        </item> -        <item row="0" column="0" > -         <widget class="QLabel" name="label_7" > -          <property name="text" > -           <string>min. Slider Val</string> -          </property> -         </widget> -        </item> -       </layout> -      </widget> -     </item> -     <item> -      <widget class="QCheckBox" name="freewheelMode" > -       <property name="text" > -        <string>use JACK freewheel mode if possible</string> -       </property> -      </widget> -     </item> -     <item> -      <spacer> -       <property name="orientation" > -        <enum>Qt::Vertical</enum> -       </property> -       <property name="sizeHint" > -        <size> -         <width>20</width> -         <height>40</height> -        </size> -       </property> -      </spacer> -     </item> -    </layout> -   </widget> -   <widget class="QWidget" name="tab_2" > -    <attribute name="title" > -     <string>Midi</string> -    </attribute> -    <layout class="QVBoxLayout" > -     <property name="margin" > -      <number>8</number> -     </property> -     <property name="spacing" > -      <number>6</number> -     </property> -     <item> -      <widget class="QGroupBox" name="groupBox_5" > -       <property name="title" > -        <string>Ticks</string> -       </property> -       <layout class="QGridLayout" > -        <property name="margin" > -         <number>9</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item row="1" column="0" > -         <widget class="QLabel" name="label_10" > -          <property name="text" > -           <string>Displayed Resolution -(Ticks/Quarternote)</string> +         <layout class="QGridLayout" > +          <property name="margin" > +           <number>9</number>            </property> -         </widget> -        </item> -        <item row="0" column="0" > -         <widget class="QLabel" name="label_9" > -          <property name="text" > -           <string>RTC Resolution -(Ticks/Sec)</string> +          <property name="spacing" > +           <number>6</number>            </property> -         </widget> -        </item> -        <item row="0" column="1" > -         <widget class="QComboBox" name="rtcResolutionSelect" > -          <item> -           <property name="text" > -            <string>1024</string> -           </property> +          <item row="3" column="3" > +           <widget class="QToolButton" name="palette15" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>2048</string> -           </property> +          <item row="3" column="2" > +           <widget class="QToolButton" name="palette14" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>4096</string> -           </property> +          <item row="2" column="3" > +           <widget class="QToolButton" name="palette11" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>8172</string> -           </property> +          <item row="2" column="2" > +           <widget class="QToolButton" name="palette10" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -         </widget> -        </item> -        <item row="1" column="1" > -         <widget class="QComboBox" name="midiDivisionSelect" > -          <property name="currentIndex" > -           <number>3</number> -          </property> -          <item> -           <property name="text" > -            <string>48</string> -           </property> +          <item row="1" column="3" > +           <widget class="QToolButton" name="palette7" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>96</string> -           </property> +          <item row="1" column="2" > +           <widget class="QToolButton" name="palette6" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>192</string> -           </property> +          <item row="3" column="1" > +           <widget class="QToolButton" name="palette13" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>384</string> -           </property> +          <item row="2" column="1" > +           <widget class="QToolButton" name="palette9" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>768</string> -           </property> +          <item row="1" column="1" > +           <widget class="QToolButton" name="palette5" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>1536</string> -           </property> +          <item row="3" column="0" > +           <widget class="QToolButton" name="palette12" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>3072</string> -           </property> +          <item row="2" column="0" > +           <widget class="QToolButton" name="palette8" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>6144</string> -           </property> +          <item row="1" column="0" > +           <widget class="QToolButton" name="palette4" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -          <item> -           <property name="text" > -            <string>12288</string> -           </property> +          <item row="0" column="3" > +           <widget class="QToolButton" name="palette3" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget>            </item> -         </widget> -        </item> -       </layout> -      </widget> -     </item> -     <item> -      <widget class="QGroupBox" name="groupBox_3" > -       <property name="title" > -        <string>Input Routing</string> -       </property> -       <layout class="QGridLayout" > -        <property name="margin" > -         <number>8</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item row="1" column="1" > -         <widget class="QCheckBox" name="connectToAllTracks" > -          <property name="text" > -           <string>Connect to all Tracks</string> -          </property> -         </widget> -        </item> -        <item row="0" column="1" > -         <widget class="QCheckBox" name="connectToAllDevices" > -          <property name="text" > -           <string>Connect to all Input Devices</string> -          </property> -         </widget> -        </item> -        <item row="1" column="0" > -         <widget class="QLabel" name="label_17" > -          <property name="text" > -           <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Input Device:</p></body></html></string> -          </property> -         </widget> -        </item> -        <item row="2" column="0" > -         <widget class="QComboBox" name="preferredInput" /> -        </item> -        <item row="0" column="0" > -         <widget class="QCheckBox" name="createDefaultInput" > -          <property name="text" > -           <string>Create Default Input Strip</string> -          </property> -         </widget> -        </item> -       </layout> -      </widget> -     </item> -     <item> -      <widget class="QGroupBox" name="groupBox_6" > -       <property name="title" > -        <string>Output Routing</string> -       </property> -       <layout class="QGridLayout" > -        <property name="margin" > -         <number>8</number> -        </property> -        <property name="spacing" > -         <number>8</number> -        </property> -        <item row="0" column="0" > -         <widget class="QLabel" name="label_18" > -          <property name="text" > -           <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Output Device:</p></body></html></string> -          </property> -         </widget> -        </item> -        <item row="1" column="1" colspan="2" > -         <widget class="QComboBox" name="preferredInstrument" /> -        </item> -        <item row="0" column="1" > -         <widget class="QLabel" name="label_19" > -          <property name="text" > -           <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Preferred Instrument:</p></body></html></string> -          </property> -         </widget> -        </item> -        <item row="1" column="0" > -         <widget class="QComboBox" name="preferredOutput" /> -        </item> -       </layout> -      </widget> -     </item> -     <item> -      <spacer> -       <property name="orientation" > -        <enum>Qt::Vertical</enum> -       </property> -       <property name="sizeHint" > -        <size> -         <width>20</width> -         <height>20</height> -        </size> -       </property> -      </spacer> -     </item> -    </layout> -   </widget> -   <widget class="QWidget" name="tab_3" > -    <attribute name="title" > -     <string>GUI</string> -    </attribute> -    <layout class="QGridLayout" > -     <property name="margin" > -      <number>9</number> -     </property> -     <property name="spacing" > -      <number>6</number> -     </property> -     <item row="2" column="0" > -      <spacer> -       <property name="orientation" > -        <enum>Qt::Vertical</enum> -       </property> -       <property name="sizeHint" > -        <size> -         <width>20</width> -         <height>40</height> -        </size> -       </property> -      </spacer> -     </item> -     <item row="1" column="1" > -      <widget class="QLineEdit" name="helpBrowser" /> -     </item> -     <item row="1" column="0" > -      <widget class="QLabel" name="label_12" > -       <property name="text" > -        <string>Help Browser</string> -       </property> -      </widget> -     </item> -     <item row="0" column="1" > -      <widget class="QSpinBox" name="guiRefreshSelect" > -       <property name="suffix" > -        <string>/sec</string> -       </property> -       <property name="maximum" > -        <number>100</number> -       </property> -       <property name="minimum" > -        <number>2</number> -       </property> -       <property name="value" > -        <number>20</number> -       </property> -      </widget> -     </item> -     <item row="0" column="0" > -      <widget class="QLabel" name="label_11" > -       <property name="text" > -        <string>GUI Refresh Rate:</string> -       </property> -      </widget> -     </item> -    </layout> -   </widget> -   <widget class="QWidget" name="tab_4" > -    <attribute name="title" > -     <string>RemoteControl</string> -    </attribute> -    <layout class="QVBoxLayout" > -     <property name="margin" > -      <number>9</number> -     </property> -     <property name="spacing" > -      <number>6</number> -     </property> -     <item> -      <widget class="QGroupBox" name="rcGroup" > -       <property name="toolTip" > -        <string>enable midi remote control</string> -       </property> -       <property name="title" > -        <string>Midi Remote Control</string> -       </property> -       <property name="checkable" > -        <bool>true</bool> -       </property> -       <layout class="QGridLayout" > -        <property name="margin" > -         <number>9</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item row="1" column="0" > -         <widget class="QLabel" name="label_14" > -          <property name="text" > -           <string>Record</string> -          </property> -         </widget> -        </item> -        <item row="2" column="0" > -         <widget class="QLabel" name="label_15" > -          <property name="text" > -           <string>Goto Left Mark</string> -          </property> -         </widget> -        </item> -        <item row="0" column="0" > -         <widget class="QLabel" name="label_13" > -          <property name="text" > -           <string>Stop</string> -          </property> -         </widget> -        </item> -        <item row="0" column="3" > -         <spacer> -          <property name="orientation" > -           <enum>Qt::Horizontal</enum> -          </property> -          <property name="sizeHint" > -           <size> -            <width>40</width> -            <height>20</height> -           </size> -          </property> -         </spacer> -        </item> -        <item row="3" column="0" > -         <widget class="QLabel" name="label_16" > -          <property name="text" > -           <string>Play</string> -          </property> -         </widget> -        </item> -        <item row="0" column="2" > -         <widget class="RecordButton" name="recordStop" /> -        </item> -        <item row="1" column="2" > -         <widget class="RecordButton" name="recordRecord" /> -        </item> -        <item row="2" column="2" > -         <widget class="RecordButton" name="recordGotoLeftMark" /> -        </item> -        <item row="3" column="2" > -         <widget class="RecordButton" name="recordPlay" /> -        </item> -        <item row="0" column="1" > -         <widget class="GreendotButton" name="stopActive" /> -        </item> -        <item row="1" column="1" > -         <widget class="GreendotButton" name="recordActive" /> -        </item> -        <item row="2" column="1" > -         <widget class="GreendotButton" name="gotoLeftMarkActive" /> -        </item> -        <item row="3" column="1" > -         <widget class="GreendotButton" name="playActive" /> -        </item> -       </layout> -      </widget> -     </item> -     <item> -      <spacer> -       <property name="orientation" > -        <enum>Qt::Vertical</enum> -       </property> -       <property name="sizeHint" > -        <size> -         <width>20</width> -         <height>40</height> -        </size> -       </property> -      </spacer> -     </item> -    </layout> -   </widget> -   <widget class="QWidget" name="tab_11" > -    <attribute name="title" > -     <string>Colors</string> -    </attribute> -    <layout class="QGridLayout" > -     <property name="margin" > -      <number>9</number> -     </property> -     <property name="spacing" > -      <number>6</number> -     </property> -     <item row="3" column="1" colspan="2" > -      <layout class="QHBoxLayout" > -       <property name="margin" > -        <number>0</number> -       </property> -       <property name="spacing" > -        <number>6</number> -       </property> -       <item> -        <widget class="QLabel" name="textLabel5_2" > -         <property name="text" > -          <string>S</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignCenter</set> -         </property> -        </widget> -       </item> -       <item> -        <widget class="QSlider" name="sslider" > -         <property name="maximum" > -          <number>255</number> -         </property> -         <property name="orientation" > -          <enum>Qt::Horizontal</enum> -         </property> +          <item row="0" column="2" > +           <widget class="QToolButton" name="palette2" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget> +          </item> +          <item row="0" column="1" > +           <widget class="QToolButton" name="palette1" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget> +          </item> +          <item row="0" column="0" > +           <widget class="QToolButton" name="palette0" > +            <property name="text" > +             <string/> +            </property> +            <property name="checkable" > +             <bool>true</bool> +            </property> +           </widget> +          </item> +         </layout>          </widget>         </item> -      </layout> -     </item> -     <item row="2" column="1" colspan="2" > -      <layout class="QHBoxLayout" > -       <property name="margin" > -        <number>0</number> -       </property> -       <property name="spacing" > -        <number>6</number> -       </property> -       <item> -        <widget class="QLabel" name="textLabel4_2" > -         <property name="text" > -          <string>H</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignCenter</set> -         </property> +       <item rowspan="5" row="0" column="0" > +        <widget class="QTreeWidget" name="itemList" > +         <property name="sizePolicy" > +          <sizepolicy> +           <hsizetype>1</hsizetype> +           <vsizetype>7</vsizetype> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property> +         <property name="rootIsDecorated" > +          <bool>true</bool> +         </property> +         <column> +          <property name="text" > +           <string>Items</string> +          </property> +         </column>          </widget>         </item> -       <item> -        <widget class="QSlider" name="hslider" > -         <property name="maximum" > -          <number>255</number> +       <item row="4" column="1" colspan="2" > +        <layout class="QHBoxLayout" > +         <property name="margin" > +          <number>0</number>           </property> -         <property name="orientation" > -          <enum>Qt::Horizontal</enum> +         <property name="spacing" > +          <number>6</number>           </property> -        </widget> +         <item> +          <widget class="QLabel" name="textLabel6_2" > +           <property name="text" > +            <string>V</string> +           </property> +           <property name="alignment" > +            <set>Qt::AlignCenter</set> +           </property> +          </widget> +         </item> +         <item> +          <widget class="QSlider" name="vslider" > +           <property name="maximum" > +            <number>255</number> +           </property> +           <property name="orientation" > +            <enum>Qt::Horizontal</enum> +           </property> +          </widget> +         </item> +        </layout>         </item>        </layout> -     </item> -     <item rowspan="2" row="0" column="2" > -      <widget class="QFrame" name="colorframe" > -       <property name="sizePolicy" > -        <sizepolicy> -         <hsizetype>7</hsizetype> -         <vsizetype>7</vsizetype> -         <horstretch>0</horstretch> -         <verstretch>0</verstretch> -        </sizepolicy> -       </property> -       <property name="frameShape" > -        <enum>QFrame::StyledPanel</enum> -       </property> -       <property name="frameShadow" > -        <enum>QFrame::Sunken</enum> -       </property> -      </widget> -     </item> -     <item row="1" column="1" > -      <widget class="QPushButton" name="addToPalette" > -       <property name="text" > -        <string>add to palette</string> -       </property> -      </widget> -     </item> -     <item row="0" column="1" > -      <widget class="QGroupBox" name="colorPalette" > -       <property name="focusPolicy" > -        <enum>Qt::NoFocus</enum> -       </property> -       <property name="title" > -        <string>Palette</string> -       </property> -       <layout class="QGridLayout" > -        <property name="margin" > -         <number>9</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item row="3" column="3" > -         <widget class="QToolButton" name="palette15" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="3" column="2" > -         <widget class="QToolButton" name="palette14" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="2" column="3" > -         <widget class="QToolButton" name="palette11" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="2" column="2" > -         <widget class="QToolButton" name="palette10" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="1" column="3" > -         <widget class="QToolButton" name="palette7" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="1" column="2" > -         <widget class="QToolButton" name="palette6" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="3" column="1" > -         <widget class="QToolButton" name="palette13" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="2" column="1" > -         <widget class="QToolButton" name="palette9" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="1" column="1" > -         <widget class="QToolButton" name="palette5" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="3" column="0" > -         <widget class="QToolButton" name="palette12" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="2" column="0" > -         <widget class="QToolButton" name="palette8" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="1" column="0" > -         <widget class="QToolButton" name="palette4" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="0" column="3" > -         <widget class="QToolButton" name="palette3" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="0" column="2" > -         <widget class="QToolButton" name="palette2" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="0" column="1" > -         <widget class="QToolButton" name="palette1" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="0" column="0" > -         <widget class="QToolButton" name="palette0" > -          <property name="text" > -           <string/> -          </property> -          <property name="checkable" > -           <bool>true</bool> -          </property> -         </widget> -        </item> -       </layout> -      </widget> -     </item> -     <item rowspan="5" row="0" column="0" > -      <widget class="QTreeWidget" name="itemList" > -       <property name="sizePolicy" > -        <sizepolicy> -         <hsizetype>1</hsizetype> -         <vsizetype>7</vsizetype> -         <horstretch>0</horstretch> -         <verstretch>0</verstretch> -        </sizepolicy> -       </property> -       <property name="rootIsDecorated" > -        <bool>true</bool> -       </property> -       <column> -        <property name="text" > -         <string>Items</string> -        </property> -       </column> -      </widget> -     </item> -     <item row="4" column="1" colspan="2" > -      <layout class="QHBoxLayout" > +     </widget> +     <widget class="QWidget" name="tab_12" > +      <attribute name="title" > +       <string>Fonts/Style</string> +      </attribute> +      <layout class="QVBoxLayout" >         <property name="margin" > -        <number>0</number> +        <number>9</number>         </property>         <property name="spacing" >          <number>6</number>         </property>         <item> -        <widget class="QLabel" name="textLabel6_2" > -         <property name="text" > -          <string>V</string> -         </property> -         <property name="alignment" > -          <set>Qt::AlignCenter</set> -         </property> -        </widget> -       </item> -       <item> -        <widget class="QSlider" name="vslider" > -         <property name="maximum" > -          <number>255</number> +        <widget class="QGroupBox" name="GroupBox18_3" > +         <property name="sizePolicy" > +          <sizepolicy> +           <hsizetype>7</hsizetype> +           <vsizetype>5</vsizetype> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy>           </property> -         <property name="orientation" > -          <enum>Qt::Horizontal</enum> +         <property name="title" > +          <string>QT Theme</string>           </property> -        </widget> -       </item> -      </layout> -     </item> -    </layout> -   </widget> -   <widget class="QWidget" name="tab_12" > -    <attribute name="title" > -     <string>Style/Fonts</string> -    </attribute> -    <layout class="QVBoxLayout" > -     <property name="margin" > -      <number>9</number> -     </property> -     <property name="spacing" > -      <number>6</number> -     </property> -     <item> -      <widget class="QGroupBox" name="GroupBox18_3" > -       <property name="sizePolicy" > -        <sizepolicy> -         <hsizetype>7</hsizetype> -         <vsizetype>5</vsizetype> -         <horstretch>0</horstretch> -         <verstretch>0</verstretch> -        </sizepolicy> -       </property> -       <property name="title" > -        <string>QT Theme</string> -       </property> -       <layout class="QVBoxLayout" > -        <property name="margin" > -         <number>11</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item> -         <layout class="QHBoxLayout" > +         <layout class="QVBoxLayout" >            <property name="margin" > -           <number>0</number> +           <number>11</number>            </property>            <property name="spacing" >             <number>6</number>            </property>            <item> -           <widget class="QComboBox" name="themeComboBox" > -            <property name="sizePolicy" > -             <sizepolicy> -              <hsizetype>1</hsizetype> -              <vsizetype>0</vsizetype> -              <horstretch>0</horstretch> -              <verstretch>0</verstretch> -             </sizepolicy> +           <layout class="QHBoxLayout" > +            <property name="margin" > +             <number>0</number> +            </property> +            <property name="spacing" > +             <number>6</number>              </property>              <item> -             <property name="text" > -              <string>Windows</string> -             </property> -            </item> -            <item> -             <property name="text" > -              <string>MusE</string> -             </property> -            </item> -            <item> -             <property name="text" > -              <string>Metal</string> -             </property> -            </item> -            <item> -             <property name="text" > -              <string>Norwegian Wood</string> -             </property> -            </item> -            <item> -             <property name="text" > -              <string>Platinum</string> -             </property> -            </item> -            <item> -             <property name="text" > -              <string>CDE</string> -             </property> +             <widget class="QComboBox" name="themeComboBox" > +              <property name="sizePolicy" > +               <sizepolicy> +                <hsizetype>1</hsizetype> +                <vsizetype>0</vsizetype> +                <horstretch>0</horstretch> +                <verstretch>0</verstretch> +               </sizepolicy> +              </property> +              <item> +               <property name="text" > +                <string>Windows</string> +               </property> +              </item> +              <item> +               <property name="text" > +                <string>MusE</string> +               </property> +              </item> +              <item> +               <property name="text" > +                <string>Metal</string> +               </property> +              </item> +              <item> +               <property name="text" > +                <string>Norwegian Wood</string> +               </property> +              </item> +              <item> +               <property name="text" > +                <string>Platinum</string> +               </property> +              </item> +              <item> +               <property name="text" > +                <string>CDE</string> +               </property> +              </item> +              <item> +               <property name="text" > +                <string>Motif</string> +               </property> +              </item> +              <item> +               <property name="text" > +                <string>Motif Plus</string> +               </property> +              </item> +             </widget>              </item>              <item> -             <property name="text" > -              <string>Motif</string> -             </property> +             <spacer> +              <property name="orientation" > +               <enum>Qt::Horizontal</enum> +              </property> +              <property name="sizeType" > +               <enum>QSizePolicy::Expanding</enum> +              </property> +              <property name="sizeHint" > +               <size> +                <width>190</width> +                <height>20</height> +               </size> +              </property> +             </spacer>              </item> -            <item> -             <property name="text" > -              <string>Motif Plus</string> -             </property> -            </item> -           </widget> +           </layout>            </item>            <item>             <spacer>              <property name="orientation" > -             <enum>Qt::Horizontal</enum> +             <enum>Qt::Vertical</enum>              </property>              <property name="sizeType" >               <enum>QSizePolicy::Expanding</enum>              </property>              <property name="sizeHint" >               <size> -              <width>190</width> -              <height>20</height> +              <width>20</width> +              <height>40</height>               </size>              </property>             </spacer>            </item>           </layout> -        </item> -        <item> -         <spacer> -          <property name="orientation" > -           <enum>Qt::Vertical</enum> -          </property> -          <property name="sizeType" > -           <enum>QSizePolicy::Expanding</enum> +        </widget> +       </item> +       <item> +        <widget class="QGroupBox" name="GroupBox6_3" > +         <property name="title" > +          <string>Fonts</string> +         </property> +         <layout class="QGridLayout" > +          <property name="margin" > +           <number>11</number>            </property> -          <property name="sizeHint" > -           <size> -            <width>20</width> -            <height>40</height> -           </size> +          <property name="spacing" > +           <number>2</number>            </property> -         </spacer> -        </item> -       </layout> +          <item row="0" column="1" > +           <widget class="QLabel" name="textLabel2_3" > +            <property name="text" > +             <string>Family</string> +            </property> +           </widget> +          </item> +          <item row="0" column="2" > +           <widget class="QLabel" name="TextLabel1_3" > +            <property name="text" > +             <string>Size</string> +            </property> +           </widget> +          </item> +          <item row="2" column="0" > +           <widget class="QLabel" name="textLabel4_6" > +            <property name="text" > +             <string>Font 1</string> +            </property> +           </widget> +          </item> +          <item row="3" column="0" > +           <widget class="QLabel" name="textLabel5_6" > +            <property name="text" > +             <string>Font 2</string> +            </property> +           </widget> +          </item> +          <item row="4" column="0" > +           <widget class="QLabel" name="textLabel6_6" > +            <property name="text" > +             <string>Font 3</string> +            </property> +           </widget> +          </item> +          <item row="1" column="1" > +           <widget class="QLineEdit" name="fontName0" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>7</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="2" column="1" > +           <widget class="QLineEdit" name="fontName1" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>7</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="3" column="1" > +           <widget class="QLineEdit" name="fontName2" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>7</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="4" column="1" > +           <widget class="QLineEdit" name="fontName3" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>7</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="1" column="0" > +           <widget class="QLabel" name="textLabel3_3" > +            <property name="text" > +             <string>Font 0</string> +            </property> +           </widget> +          </item> +          <item row="1" column="2" > +           <widget class="QSpinBox" name="fontSize0" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="2" column="2" > +           <widget class="QSpinBox" name="fontSize1" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="3" column="2" > +           <widget class="QSpinBox" name="fontSize2" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="4" column="2" > +           <widget class="QSpinBox" name="fontSize3" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="2" column="3" > +           <widget class="QCheckBox" name="bold1" > +            <property name="text" > +             <string>Bold</string> +            </property> +           </widget> +          </item> +          <item row="3" column="3" > +           <widget class="QCheckBox" name="bold2" > +            <property name="text" > +             <string>Bold</string> +            </property> +           </widget> +          </item> +          <item row="4" column="3" > +           <widget class="QCheckBox" name="bold3" > +            <property name="text" > +             <string>Bold</string> +            </property> +           </widget> +          </item> +          <item row="1" column="3" > +           <widget class="QCheckBox" name="bold0" > +            <property name="text" > +             <string>Bold</string> +            </property> +           </widget> +          </item> +          <item row="3" column="4" > +           <widget class="QCheckBox" name="italic2" > +            <property name="text" > +             <string>Italic</string> +            </property> +           </widget> +          </item> +          <item row="4" column="4" > +           <widget class="QCheckBox" name="italic3" > +            <property name="text" > +             <string>Italic</string> +            </property> +           </widget> +          </item> +          <item row="2" column="4" > +           <widget class="QCheckBox" name="italic1" > +            <property name="text" > +             <string>Italic</string> +            </property> +           </widget> +          </item> +          <item row="1" column="4" > +           <widget class="QCheckBox" name="italic0" > +            <property name="text" > +             <string>Italic</string> +            </property> +           </widget> +          </item> +          <item row="1" column="5" > +           <widget class="QToolButton" name="fontBrowse0" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>1</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="text" > +             <string>...</string> +            </property> +           </widget> +          </item> +          <item row="2" column="5" > +           <widget class="QToolButton" name="fontBrowse1" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>1</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="text" > +             <string>...</string> +            </property> +           </widget> +          </item> +          <item row="3" column="5" > +           <widget class="QToolButton" name="fontBrowse2" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>1</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="text" > +             <string>...</string> +            </property> +           </widget> +          </item> +          <item row="4" column="5" > +           <widget class="QToolButton" name="fontBrowse3" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>1</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="text" > +             <string>...</string> +            </property> +           </widget> +          </item> +          <item row="5" column="0" > +           <widget class="QLabel" name="textLabel7_4" > +            <property name="text" > +             <string>Font 4</string> +            </property> +           </widget> +          </item> +          <item row="5" column="1" > +           <widget class="QLineEdit" name="fontName4" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>7</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="6" column="0" > +           <widget class="QLabel" name="textLabel7_5" > +            <property name="text" > +             <string>Font 5</string> +            </property> +           </widget> +          </item> +          <item row="6" column="1" > +           <widget class="QLineEdit" name="fontName5" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>7</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="5" column="2" > +           <widget class="QSpinBox" name="fontSize4" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="6" column="2" > +           <widget class="QSpinBox" name="fontSize5" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>0</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +           </widget> +          </item> +          <item row="5" column="3" > +           <widget class="QCheckBox" name="bold4" > +            <property name="text" > +             <string>Bold</string> +            </property> +           </widget> +          </item> +          <item row="6" column="3" > +           <widget class="QCheckBox" name="bold5" > +            <property name="text" > +             <string>Bold</string> +            </property> +           </widget> +          </item> +          <item row="5" column="4" > +           <widget class="QCheckBox" name="italic4" > +            <property name="text" > +             <string>Italic</string> +            </property> +           </widget> +          </item> +          <item row="6" column="4" > +           <widget class="QCheckBox" name="italic5" > +            <property name="text" > +             <string>Italic</string> +            </property> +           </widget> +          </item> +          <item row="5" column="5" > +           <widget class="QToolButton" name="fontBrowse4" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>1</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="text" > +             <string>...</string> +            </property> +           </widget> +          </item> +          <item row="6" column="5" > +           <widget class="QToolButton" name="fontBrowse5" > +            <property name="sizePolicy" > +             <sizepolicy> +              <hsizetype>4</hsizetype> +              <vsizetype>1</vsizetype> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="text" > +             <string>...</string> +            </property> +           </widget> +          </item> +         </layout> +        </widget> +       </item> +      </layout> +     </widget> +    </widget> +   </item> +   <item> +    <layout class="QHBoxLayout" > +     <property name="margin" > +      <number>0</number> +     </property> +     <property name="spacing" > +      <number>6</number> +     </property> +     <item> +      <spacer> +       <property name="orientation" > +        <enum>Qt::Horizontal</enum> +       </property> +       <property name="sizeHint" > +        <size> +         <width>131</width> +         <height>31</height> +        </size> +       </property> +      </spacer> +     </item> +     <item> +      <widget class="QPushButton" name="applyButton" > +       <property name="text" > +        <string>Apply</string> +       </property>        </widget>       </item>       <item> -      <widget class="QGroupBox" name="GroupBox6_3" > -       <property name="title" > -        <string>Fonts</string> +      <widget class="QPushButton" name="okButton" > +       <property name="text" > +        <string>OK</string> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QPushButton" name="cancelButton" > +       <property name="text" > +        <string>Cancel</string>         </property> -       <layout class="QGridLayout" > -        <property name="margin" > -         <number>11</number> -        </property> -        <property name="spacing" > -         <number>6</number> -        </property> -        <item row="0" column="1" > -         <widget class="QLabel" name="textLabel2_3" > -          <property name="text" > -           <string>Family</string> -          </property> -         </widget> -        </item> -        <item row="0" column="2" > -         <widget class="QLabel" name="TextLabel1_3" > -          <property name="text" > -           <string>Size</string> -          </property> -         </widget> -        </item> -        <item row="2" column="0" > -         <widget class="QLabel" name="textLabel4_6" > -          <property name="text" > -           <string>Font 1</string> -          </property> -         </widget> -        </item> -        <item row="3" column="0" > -         <widget class="QLabel" name="textLabel5_6" > -          <property name="text" > -           <string>Font 2</string> -          </property> -         </widget> -        </item> -        <item row="4" column="0" > -         <widget class="QLabel" name="textLabel6_6" > -          <property name="text" > -           <string>Font 3</string> -          </property> -         </widget> -        </item> -        <item row="1" column="1" > -         <widget class="QLineEdit" name="fontName0" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>7</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="2" column="1" > -         <widget class="QLineEdit" name="fontName1" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>7</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="3" column="1" > -         <widget class="QLineEdit" name="fontName2" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>7</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="4" column="1" > -         <widget class="QLineEdit" name="fontName3" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>7</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="1" column="0" > -         <widget class="QLabel" name="textLabel3_3" > -          <property name="text" > -           <string>Font 0</string> -          </property> -         </widget> -        </item> -        <item row="1" column="2" > -         <widget class="QSpinBox" name="fontSize0" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="2" column="2" > -         <widget class="QSpinBox" name="fontSize1" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="3" column="2" > -         <widget class="QSpinBox" name="fontSize2" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="4" column="2" > -         <widget class="QSpinBox" name="fontSize3" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="2" column="3" > -         <widget class="QCheckBox" name="bold1" > -          <property name="text" > -           <string>Bold</string> -          </property> -         </widget> -        </item> -        <item row="3" column="3" > -         <widget class="QCheckBox" name="bold2" > -          <property name="text" > -           <string>Bold</string> -          </property> -         </widget> -        </item> -        <item row="4" column="3" > -         <widget class="QCheckBox" name="bold3" > -          <property name="text" > -           <string>Bold</string> -          </property> -         </widget> -        </item> -        <item row="1" column="3" > -         <widget class="QCheckBox" name="bold0" > -          <property name="text" > -           <string>Bold</string> -          </property> -         </widget> -        </item> -        <item row="3" column="4" > -         <widget class="QCheckBox" name="italic2" > -          <property name="text" > -           <string>Italic</string> -          </property> -         </widget> -        </item> -        <item row="4" column="4" > -         <widget class="QCheckBox" name="italic3" > -          <property name="text" > -           <string>Italic</string> -          </property> -         </widget> -        </item> -        <item row="2" column="4" > -         <widget class="QCheckBox" name="italic1" > -          <property name="text" > -           <string>Italic</string> -          </property> -         </widget> -        </item> -        <item row="1" column="4" > -         <widget class="QCheckBox" name="italic0" > -          <property name="text" > -           <string>Italic</string> -          </property> -         </widget> -        </item> -        <item row="1" column="5" > -         <widget class="QToolButton" name="fontBrowse0" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>1</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="text" > -           <string>...</string> -          </property> -         </widget> -        </item> -        <item row="2" column="5" > -         <widget class="QToolButton" name="fontBrowse1" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>1</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="text" > -           <string>...</string> -          </property> -         </widget> -        </item> -        <item row="3" column="5" > -         <widget class="QToolButton" name="fontBrowse2" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>1</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="text" > -           <string>...</string> -          </property> -         </widget> -        </item> -        <item row="4" column="5" > -         <widget class="QToolButton" name="fontBrowse3" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>1</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="text" > -           <string>...</string> -          </property> -         </widget> -        </item> -        <item row="5" column="0" > -         <widget class="QLabel" name="textLabel7_4" > -          <property name="text" > -           <string>Font 4</string> -          </property> -         </widget> -        </item> -        <item row="5" column="1" > -         <widget class="QLineEdit" name="fontName4" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>7</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="6" column="0" > -         <widget class="QLabel" name="textLabel7_5" > -          <property name="text" > -           <string>Font 5</string> -          </property> -         </widget> -        </item> -        <item row="6" column="1" > -         <widget class="QLineEdit" name="fontName5" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>7</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="5" column="2" > -         <widget class="QSpinBox" name="fontSize4" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="6" column="2" > -         <widget class="QSpinBox" name="fontSize5" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>0</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -         </widget> -        </item> -        <item row="5" column="3" > -         <widget class="QCheckBox" name="bold4" > -          <property name="text" > -           <string>Bold</string> -          </property> -         </widget> -        </item> -        <item row="6" column="3" > -         <widget class="QCheckBox" name="bold5" > -          <property name="text" > -           <string>Bold</string> -          </property> -         </widget> -        </item> -        <item row="5" column="4" > -         <widget class="QCheckBox" name="italic4" > -          <property name="text" > -           <string>Italic</string> -          </property> -         </widget> -        </item> -        <item row="6" column="4" > -         <widget class="QCheckBox" name="italic5" > -          <property name="text" > -           <string>Italic</string> -          </property> -         </widget> -        </item> -        <item row="5" column="5" > -         <widget class="QToolButton" name="fontBrowse4" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>1</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="text" > -           <string>...</string> -          </property> -         </widget> -        </item> -        <item row="6" column="5" > -         <widget class="QToolButton" name="fontBrowse5" > -          <property name="sizePolicy" > -           <sizepolicy> -            <hsizetype>4</hsizetype> -            <vsizetype>1</vsizetype> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="text" > -           <string>...</string> -          </property> -         </widget> -        </item> -       </layout>        </widget>       </item>      </layout> -   </widget> -  </widget> -  <widget class="QWidget" name="" > -   <layout class="QHBoxLayout" > -    <property name="margin" > -     <number>0</number> -    </property> -    <property name="spacing" > -     <number>6</number> -    </property> -    <item> -     <spacer> -      <property name="orientation" > -       <enum>Qt::Horizontal</enum> -      </property> -      <property name="sizeHint" > -       <size> -        <width>131</width> -        <height>31</height> -       </size> -      </property> -     </spacer> -    </item> -    <item> -     <widget class="QPushButton" name="applyButton" > -      <property name="text" > -       <string>Apply</string> -      </property> -     </widget> -    </item> -    <item> -     <widget class="QPushButton" name="okButton" > -      <property name="text" > -       <string>OK</string> -      </property> -     </widget> -    </item> -    <item> -     <widget class="QPushButton" name="cancelButton" > -      <property name="text" > -       <string>Cancel</string> -      </property> -     </widget> -    </item> -   </layout> -  </widget> +   </item> +  </layout>   </widget>   <pixmapfunction></pixmapfunction>   <customwidgets>    <customwidget> -   <class>RecordButton</class> -   <extends>QToolButton</extends> -   <header>recordbutton.h</header> -   <container>0</container> -   <pixmap></pixmap> -  </customwidget> -  <customwidget>     <class>GreendotButton</class>     <extends>QToolButton</extends>     <header>greendotbutton.h</header> @@ -2298,6 +2327,13 @@     <container>0</container>     <pixmap></pixmap>    </customwidget> +  <customwidget> +   <class>RecordButton</class> +   <extends>QToolButton</extends> +   <header>recordbutton.h</header> +   <container>0</container> +   <pixmap></pixmap> +  </customwidget>   </customwidgets>   <resources/>   <connections> diff --git a/muse/muse/projectdialog.cpp b/muse/muse/projectdialog.cpp new file mode 100644 index 00000000..95108be1 --- /dev/null +++ b/muse/muse/projectdialog.cpp @@ -0,0 +1,143 @@ +//============================================================================= +//  MusE +//  Linux Music Editor +//  $Id:$ +// +//  Copyright (C) 2002-2006 by Werner Schweer and others +// +//  This program is free software; you can redistribute it and/or modify +//  it under the terms of the GNU General Public License version 2. +// +//  This program is distributed in the hope that it will be useful, +//  but WITHOUT ANY WARRANTY; without even the implied warranty of +//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +//  GNU General Public License for more details. +// +//  You should have received a copy of the GNU General Public License +//  along with this program; if not, write to the Free Software +//  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "projectdialog.h" +#include "gconfig.h" +#include "song.h" + +//--------------------------------------------------------- +//   ProjectDialog +//--------------------------------------------------------- + +ProjectDialog::ProjectDialog(QWidget* parent) +  : QDialog(parent) +      { +      setupUi(this); +      projectTree->setSelectionBehavior(QAbstractItemView::SelectRows); +      projectTree->setSelectionMode(QAbstractItemView::SingleSelection); +      QDir pd(QDir::homePath() + "/" + config.projectPath); +      QStringList el = pd.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); +      QTreeWidgetItem* current = 0; +      foreach (QString s, el) { +            QFile pf(QDir::homePath() + "/" + config.projectPath + "/"  +               + s + "/" + s + ".med"); +            if (pf.exists()) { +                  QTreeWidgetItem* pi = new QTreeWidgetItem; +                  pi->setText(0, s); +                  projectTree->addTopLevelItem(pi); +                  if (s == song->projectName()) +                        current = pi; +                  } +            } +      connect(projectTree,  +         SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),  +         SLOT(currentChanged(QTreeWidgetItem*, QTreeWidgetItem*))); +      connect(projectTree,  +         SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), +         SLOT(accept())); +      connect(projectName, +         SIGNAL(textEdited(const QString&)), +         SLOT(projectNameEdited(const QString&))); + +      if (current) +            projectTree->setCurrentItem(current);  +      else +            currentChanged(0, 0); +      } + +//--------------------------------------------------------- +//   currentChanged +//--------------------------------------------------------- + +void ProjectDialog::currentChanged(QTreeWidgetItem* item, QTreeWidgetItem*) +      { +      bool enable = item != 0; +      createdDate->setEnabled(enable); +      modifiedDate->setEnabled(enable); +      comment->setEnabled(enable); +      length->setEnabled(enable); + +      if (!enable) +            return; + +      projectName->setText(item->text(0)); +      QFileInfo pf(QDir::homePath() + "/" + config.projectPath + "/"  +         + item->text(0) + "/" + item->text(0) + ".med"); +      createdDate->setDateTime(pf.created()); +      modifiedDate->setDateTime(pf.lastModified()); + +      QTime time(0, 0, 0); + +      QFile f(pf.filePath()); +      QDomDocument doc; +      int line, column; +      QString err; +      if (!doc.setContent(&f, false, &err, &line, &column)) { +            QString col, ln, error; +            col.setNum(column); +            ln.setNum(line); +            error = err + "\n    at line: " + ln + " col: " + col; +            printf("error reading med file: %s\n", error.toLatin1().data()); +            return; +            } +      for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { +            QDomElement e = node.toElement(); +            if (e.isNull()) +                  continue; +            if (e.tagName() == "muse") { +                  QString sversion = e.attribute("version", "1.0"); +                  int major=0, minor=0; +                  sscanf(sversion.toLatin1().data(), "%d.%d", &major, &minor); +                  int version = major << 8 + minor; +                  if (version >= 0x200) { +                        for (QDomNode n1 = node.firstChild(); !n1.isNull(); n1 = n1.nextSibling()) { +                              QDomElement e = n1.toElement(); +                              if (e.tagName() == "song") { +                                    for (QDomNode n2 = n1.firstChild(); !n2.isNull(); n2 = n2.nextSibling()) { +                                          QDomElement e = n2.toElement(); +                                          QString tag(e.tagName()); +                                          QString s(e.text()); +                                          if (tag == "comment") +                                                comment->setPlainText(s); +                                          else if (tag == "LenInSec") { +                                                int sec = s.toInt(); +                                                time = time.addSecs(sec); +                                                } +                                          } +                                    } +                              } +                        } +                  } +            } +      length->setTime(time); +      } + +//--------------------------------------------------------- +//   projectNameEdited +//--------------------------------------------------------- + +void ProjectDialog::projectNameEdited(const QString&) +      { +      QTreeWidgetItem* item = projectTree->currentItem(); +      if (item) +            projectTree->setItemSelected(item, false); +      projectTree->setCurrentItem(0);       +      } + diff --git a/muse/muse/projectdialog.h b/muse/muse/projectdialog.h new file mode 100644 index 00000000..c0ddfee9 --- /dev/null +++ b/muse/muse/projectdialog.h @@ -0,0 +1,43 @@ +//============================================================================= +//  MusE +//  Linux Music Editor +//  $Id:$ +// +//  Copyright (C) 2002-2006 by Werner Schweer and others +// +//  This program is free software; you can redistribute it and/or modify +//  it under the terms of the GNU General Public License version 2. +// +//  This program is distributed in the hope that it will be useful, +//  but WITHOUT ANY WARRANTY; without even the implied warranty of +//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +//  GNU General Public License for more details. +// +//  You should have received a copy of the GNU General Public License +//  along with this program; if not, write to the Free Software +//  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __PROJECT_DIALOG_H__ +#define __PROJECT_DIALOG_H__ + +#include "ui_projectdialog.h" + +//--------------------------------------------------------- +//   ProjectDialog +//--------------------------------------------------------- + +class ProjectDialog : public QDialog, public Ui_ProjectDialogBase { +      Q_OBJECT + +   private slots: +      void currentChanged(QTreeWidgetItem*, QTreeWidgetItem*); +      void projectNameEdited(const QString&); + +   public: +      ProjectDialog(QWidget* parent = 0); +      QString project() const { return projectName->text(); } +      }; + +#endif + diff --git a/muse/muse/projectdialog.ui b/muse/muse/projectdialog.ui new file mode 100644 index 00000000..006db8cc --- /dev/null +++ b/muse/muse/projectdialog.ui @@ -0,0 +1,206 @@ +<ui version="4.0" > + <author></author> + <comment></comment> + <exportmacro></exportmacro> + <class>ProjectDialogBase</class> + <widget class="QDialog" name="ProjectDialogBase" > +  <property name="geometry" > +   <rect> +    <x>0</x> +    <y>0</y> +    <width>574</width> +    <height>385</height> +   </rect> +  </property> +  <property name="windowTitle" > +   <string>MusE: Select Project</string> +  </property> +  <layout class="QVBoxLayout" > +   <property name="margin" > +    <number>9</number> +   </property> +   <property name="spacing" > +    <number>6</number> +   </property> +   <item> +    <layout class="QHBoxLayout" > +     <property name="margin" > +      <number>0</number> +     </property> +     <property name="spacing" > +      <number>6</number> +     </property> +     <item> +      <widget class="QTreeWidget" name="projectTree" > +       <column> +        <property name="text" > +         <string>Project</string> +        </property> +       </column> +      </widget> +     </item> +     <item> +      <widget class="QGroupBox" name="groupBox" > +       <property name="title" > +        <string>Properties</string> +       </property> +       <layout class="QGridLayout" > +        <property name="margin" > +         <number>9</number> +        </property> +        <property name="spacing" > +         <number>3</number> +        </property> +        <item row="0" column="1" > +         <widget class="QDateEdit" name="createdDate" > +          <property name="readOnly" > +           <bool>true</bool> +          </property> +         </widget> +        </item> +        <item row="1" column="1" > +         <widget class="QDateEdit" name="modifiedDate" > +          <property name="readOnly" > +           <bool>true</bool> +          </property> +         </widget> +        </item> +        <item row="2" column="1" > +         <widget class="QTimeEdit" name="length" > +          <property name="readOnly" > +           <bool>true</bool> +          </property> +         </widget> +        </item> +        <item row="2" column="0" > +         <widget class="QLabel" name="label_4" > +          <property name="text" > +           <string>Length:</string> +          </property> +         </widget> +        </item> +        <item row="3" column="0" > +         <widget class="QLabel" name="label_5" > +          <property name="text" > +           <string>Comment:</string> +          </property> +         </widget> +        </item> +        <item row="1" column="0" > +         <widget class="QLabel" name="label_3" > +          <property name="text" > +           <string>Modified:</string> +          </property> +         </widget> +        </item> +        <item row="0" column="0" > +         <widget class="QLabel" name="label_2" > +          <property name="text" > +           <string>Created:</string> +          </property> +         </widget> +        </item> +        <item row="4" column="0" colspan="2" > +         <widget class="QTextEdit" name="comment" /> +        </item> +       </layout> +      </widget> +     </item> +    </layout> +   </item> +   <item> +    <layout class="QHBoxLayout" > +     <property name="margin" > +      <number>0</number> +     </property> +     <property name="spacing" > +      <number>6</number> +     </property> +     <item> +      <widget class="QLabel" name="label" > +       <property name="text" > +        <string>Project:</string> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QLineEdit" name="projectName" /> +     </item> +    </layout> +   </item> +   <item> +    <layout class="QHBoxLayout" > +     <property name="margin" > +      <number>0</number> +     </property> +     <property name="spacing" > +      <number>6</number> +     </property> +     <item> +      <spacer> +       <property name="orientation" > +        <enum>Qt::Horizontal</enum> +       </property> +       <property name="sizeHint" > +        <size> +         <width>131</width> +         <height>31</height> +        </size> +       </property> +      </spacer> +     </item> +     <item> +      <widget class="QPushButton" name="okButton" > +       <property name="text" > +        <string>OK</string> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QPushButton" name="cancelButton" > +       <property name="text" > +        <string>Cancel</string> +       </property> +      </widget> +     </item> +    </layout> +   </item> +  </layout> + </widget> + <pixmapfunction></pixmapfunction> + <resources/> + <connections> +  <connection> +   <sender>okButton</sender> +   <signal>clicked()</signal> +   <receiver>ProjectDialogBase</receiver> +   <slot>accept()</slot> +   <hints> +    <hint type="sourcelabel" > +     <x>278</x> +     <y>253</y> +    </hint> +    <hint type="destinationlabel" > +     <x>96</x> +     <y>254</y> +    </hint> +   </hints> +  </connection> +  <connection> +   <sender>cancelButton</sender> +   <signal>clicked()</signal> +   <receiver>ProjectDialogBase</receiver> +   <slot>reject()</slot> +   <hints> +    <hint type="sourcelabel" > +     <x>369</x> +     <y>253</y> +    </hint> +    <hint type="destinationlabel" > +     <x>179</x> +     <y>282</y> +    </hint> +   </hints> +  </connection> + </connections> +</ui> diff --git a/muse/muse/song.cpp b/muse/muse/song.cpp index 287bf812..47965f43 100644 --- a/muse/muse/song.cpp +++ b/muse/muse/song.cpp @@ -39,6 +39,7 @@  #include "midiplugin.h"  #include "midirc.h"  #include "part.h" +#include "conf.h"  Song* song; @@ -2353,3 +2354,124 @@ bool Song::trackExists(Track* t) const              }        return false;        } + +//--------------------------------------------------------- +//   projectDirectory +//--------------------------------------------------------- + +QString Song::projectDirectory() const +      { +      return QDir::homePath() + "/" + config.projectPath + "/" + _projectName; +      } + +//--------------------------------------------------------- +//   projectName +//--------------------------------------------------------- + +QString Song::projectName() const +      { +      return _projectName; +      } + +//--------------------------------------------------------- +//   setProjectName +//--------------------------------------------------------- + +void Song::setProjectName(const QString& s) +      { +      _projectName = s;       +      } + +//--------------------------------------------------------- +//   load +//--------------------------------------------------------- + +void Song::load() +      { +      clear(false); + +      QString s = projectDirectory() + "/" + _projectName + ".med"; + +      QFile f(s); +      if (f.open(QIODevice::ReadOnly)) { +            int rv = read(&f); +            f.close(); +            if (rv) { +                  QMessageBox::critical(0, QString("MusE"), +                     tr("File read error")); +                  return; +                  } +            } +      dirty = false; +      } + +//--------------------------------------------------------- +//   read +//--------------------------------------------------------- + +bool Song::read(QFile* qf) +      { +      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 + "\n    at line: " + ln + " col: " + col; +            printf("error reading med file: %s\n", error.toLatin1().data()); +            return true; +            } +      for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { +            QDomElement e = node.toElement(); +            if (e.isNull()) +                  continue; +            if (e.tagName() == "muse") { +                  QString sversion = e.attribute("version", "1.0"); +                  int major=0, minor=0; +                  sscanf(sversion.toLatin1().data(), "%d.%d", &major, &minor); +                  int version = major << 8 + minor; +                  if (version >= 0x200) +                        read20(node.firstChild()); +                  else if (version == 0x100) +                        read10(node.firstChild()); +                  else +                        printf("unsupported *.med file version %s\n", sversion.toLatin1().data()); +                  } +            else +                  printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); +            } +      return false; +      } + +//--------------------------------------------------------- +//   read10 +//--------------------------------------------------------- + +void Song::read10(QDomNode) +      { +      printf("reading type 1.0 *.med files not implemented\n"); +      } + +//--------------------------------------------------------- +//   read20 +//--------------------------------------------------------- + +void Song::read20(QDomNode node) +      { +      for (; !node.isNull(); node = node.nextSibling()) { +            QDomElement e = node.toElement(); +            if (e.isNull()) +                  continue; +            if (e.tagName() == "configuration") +                  readConfiguration(node.firstChild()); +            else if (e.tagName() == "song") +                  read(node.firstChild()); +            else if (e.tagName() == "toplevels") +                  muse->readToplevels(node.firstChild()); +            else +                  printf("MusE:read20(): unknown tag %s\n", e.tagName().toLatin1().data()); +            } +      } + diff --git a/muse/muse/song.h b/muse/muse/song.h index 0ff78413..2317ae6d 100644 --- a/muse/muse/song.h +++ b/muse/muse/song.h @@ -86,6 +86,9 @@ class Song : public QObject {           MARKER_TICK, MARKER_LOCK };     private: +      QString _projectName; +      QString _comment; +        MidiFifo eventFifo;        int updateFlags; @@ -126,6 +129,66 @@ class Song : public QObject {        int _globalPitchShift;        void readMarker(QDomNode); +   public slots: +      void beat(); + +      void undo(); +      void redo(); + +      void setTempo(int t); +      void setSig(const AL::TimeSignature&); + +      void setMasterFlag(bool flag); +      void setLoop(bool f); +      void setRecord(bool f); +      void setPlay(bool f); +      void setStop(bool); +      void forward(); +      void rewindStart(); +      void rewind(); +      void setPunchin(bool f); +      void setPunchout(bool f); +      void setClick(bool val); +      void setQuantize(bool val); +      void panic(); +      void seqSignal(int fd); +      Track* addTrack(QAction*); +      void setMeasureLen(int l); +      void changePart(Part*, unsigned, unsigned); +      void createLRPart(Track* track); +      void setTickPos(int, unsigned); + +      void setPos(int, const AL::Pos&); +      void setPos(int, const AL::Pos&, bool sig, bool isSeek = true, +         bool adjustScrollbar = false); + +   signals: +      void songChanged(int); +      void posChanged(int, const AL::Pos&, bool); +      void loopChanged(bool); +      void recordChanged(bool); +      void playChanged(bool); +      void punchinChanged(bool); +      void punchoutChanged(bool); +      void clickChanged(bool); +      void quantizeChanged(bool); +      void markerChanged(int); +      void midiPortsChanged(); +      void midiEvent(const MidiEvent&); +      void trackAdded(Track*, int idx); +      void trackRemoved(Track*); +      void lenChanged(const AL::Pos&); +      void measureLenChanged(int); + +      void recordChanged(Track*,bool); +      void muteChanged(Track*,bool); +      void soloChanged(Track*,bool); +      void offChanged(Track*,bool); +      void autoReadChanged(Track*,bool); +      void autoWriteChanged(Track*,bool); +      void trackSelectionChanged(Track*); +      void tempoChanged(); +     public:        Song();        ~Song(); @@ -332,65 +395,16 @@ class Song : public QObject {        void setSolo(Track*,bool);        void setOff(Track*,bool); -   public slots: -      void beat(); - -      void undo(); -      void redo(); - -      void setTempo(int t); -      void setSig(const AL::TimeSignature&); - -      void setMasterFlag(bool flag); -      void setLoop(bool f); -      void setRecord(bool f); -      void setPlay(bool f); -      void setStop(bool); -      void forward(); -      void rewindStart(); -      void rewind(); -      void setPunchin(bool f); -      void setPunchout(bool f); -      void setClick(bool val); -      void setQuantize(bool val); -      void panic(); -      void seqSignal(int fd); -      Track* addTrack(QAction*); -      void setMeasureLen(int l); -      void changePart(Part*, unsigned, unsigned); -      void createLRPart(Track* track); -      void setTickPos(int, unsigned); +      QString projectDirectory() const; +      QString projectName() const; +      void setProjectName(const QString&); +      QString comment() const           { return _comment; } +      void setComment(const QString& s) { _comment = s; } -      void setPos(int, const AL::Pos&); -      void setPos(int, const AL::Pos&, bool sig, bool isSeek = true, -         bool adjustScrollbar = false); - -   signals: -      void songChanged(int); -      void posChanged(int, const AL::Pos&, bool); -      void loopChanged(bool); -      void recordChanged(bool); -      void playChanged(bool); -      void punchinChanged(bool); -      void punchoutChanged(bool); -      void clickChanged(bool); -      void quantizeChanged(bool); -      void markerChanged(int); -      void midiPortsChanged(); -      void midiEvent(const MidiEvent&); -      void trackAdded(Track*, int idx); -      void trackRemoved(Track*); -      void lenChanged(const AL::Pos&); -      void measureLenChanged(int); - -      void recordChanged(Track*,bool); -      void muteChanged(Track*,bool); -      void soloChanged(Track*,bool); -      void offChanged(Track*,bool); -      void autoReadChanged(Track*,bool); -      void autoWriteChanged(Track*,bool); -      void trackSelectionChanged(Track*); -      void tempoChanged(); +      void load(); +      bool read(QFile* qf); +      void read20(QDomNode node); +      void read10(QDomNode);        };  extern Song* song; diff --git a/muse/muse/songfile.cpp b/muse/muse/songfile.cpp index ba6409d1..3e62ccaf 100644 --- a/muse/muse/songfile.cpp +++ b/muse/muse/songfile.cpp @@ -250,6 +250,8 @@ void Song::read(QDomNode node)                    PianoRoll::readConfiguration(node);              else if (tag == "DrumEdit")                    DrumEdit::readConfiguration(node); +            else if (tag == "comment") +                  _comment = e.text();              else                    printf("MusE:Song: unknown tag %s\n", tag.toLatin1().data());              } @@ -263,9 +265,10 @@ void Song::read(QDomNode node)  void Song::write(Xml& xml) const        {        xml.tag("song"); -      xml.intTag("cpos", song->cpos()); -      xml.intTag("rpos", song->rpos()); -      xml.intTag("lpos", song->lpos()); +      xml.strTag("comment", _comment); +      xml.intTag("cpos", cpos()); +      xml.intTag("rpos", rpos()); +      xml.intTag("lpos", lpos());        xml.intTag("master", _masterFlag);        if (loopFlag)              xml.intTag("loop", loopFlag); @@ -354,74 +357,3 @@ void MusE::write(Xml& xml) const        xml.etag("muse");        } -//--------------------------------------------------------- -//   read -//    read song -//--------------------------------------------------------- - -bool MusE::read(QFile* qf, bool /*skipConfig*/) -      { -      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 + "\n    at line: " + ln + " col: " + col; -            printf("error reading med file: %s\n", error.toLatin1().data()); -            return true; -            } -      for (QDomNode node = doc.documentElement(); !node.isNull(); node = node.nextSibling()) { -            QDomElement e = node.toElement(); -            if (e.isNull()) -                  continue; -            if (e.tagName() == "muse") { -                  QString sversion = e.attribute("version", "1.0"); -                  int major=0, minor=0; -                  sscanf(sversion.toLatin1().data(), "%d.%d", &major, &minor); -                  version = major << 8 + minor; -                  if (version >= 0x200) -                        read20(node.firstChild()); -                  else if (version == 0x100) -                        read10(node.firstChild()); -                  else -                        printf("unsupported *.med file version %s\n", sversion.toLatin1().data()); -                  } -            else -                  printf("MusE: %s not supported\n", e.tagName().toLatin1().data()); -            } -      return false; -      } - -//--------------------------------------------------------- -//   read10 -//--------------------------------------------------------- - -void MusE::read10(QDomNode) -      { -      printf("reading type 1.0 *.med files not implemented\n"); -      } - -//--------------------------------------------------------- -//   read20 -//--------------------------------------------------------- - -void MusE::read20(QDomNode node) -      { -      for (; !node.isNull(); node = node.nextSibling()) { -            QDomElement e = node.toElement(); -            if (e.isNull()) -                  continue; -            if (e.tagName() == "configuration") -                  readConfiguration(node.firstChild()); -            else if (e.tagName() == "song") -                  song->read(node.firstChild()); -            else if (e.tagName() == "toplevels") -                  readToplevels(node.firstChild()); -            else -                  printf("MusE:read20(): unknown tag %s\n", e.tagName().toLatin1().data()); -            } -      } - diff --git a/muse/muse/synth.cpp b/muse/muse/synth.cpp index fecd5084..06e798a0 100644 --- a/muse/muse/synth.cpp +++ b/muse/muse/synth.cpp @@ -345,7 +345,7 @@ void initMidiSynth()                    synthis.push_back(new MessSynth(&fi));                    }              if (debugMsg) -                  printf("%ld soft synth found\n", synthis.size()); +                  printf("%zd soft synth found\n", synthis.size());              }        } diff --git a/muse/muse/wave.cpp b/muse/muse/wave.cpp index cb0d7d49..4bd0b262 100644 --- a/muse/muse/wave.cpp +++ b/muse/muse/wave.cpp @@ -465,18 +465,8 @@ QString SndFile::strerror() const  SndFile* SndFile::getWave(const QString& inName, bool writeFlag)        { -      QString name = inName; +      QString name = song->projectDirectory() + "/" + inName; -      if (QFileInfo(name).isRelative()) { -            name = museProject + QString("/") + name; -            } -      else { -            if (!QFile::exists(name)) { -                  if (QFile::exists(museProject + QString("/") + name)) { -                        name = museProject + QString("/") + name; -                        } -                  } -            }  // printf("=====%s %s\n", inName.toLatin1().data(), name.toLatin1().data());        SndFile* f = sndFiles.value(name);        if (f == 0) { @@ -769,7 +759,7 @@ SndFile* SndFile::createRecFile(int channels)        QString fileName("%1/rec%2.wav");        QFileInfo fi;        do { -		fi.setFile(fileName.arg(museProject).arg(recFileNumber)); +		fi.setFile(fileName.arg(song->projectDirectory()).arg(recFileNumber));              ++recFileNumber;              } while (fi.exists());  	SndFile* recFile = new SndFile(fi.absoluteFilePath()); diff --git a/muse/muse/waveedit/waveview.cpp b/muse/muse/waveedit/waveview.cpp index 84a187ad..d01e8148 100644 --- a/muse/muse/waveedit/waveview.cpp +++ b/muse/muse/waveedit/waveview.cpp @@ -761,11 +761,11 @@ void WaveView::editExternal(unsigned file_format, unsigned file_samplerate, unsi  bool WaveView::getUniqueTmpfileName(QString& newFilename)        {        // Check if tmp-directory exists under project path -      QString tmpWavDir = museProject + "/tmp_musewav"; //!@TODO: Don't hardcode like this +      QString tmpWavDir = song->projectDirectory() + "/tmp_musewav"; //!@TODO: Don't hardcode like this        QFileInfo tmpdirfi(tmpWavDir);        if (!tmpdirfi.isDir()) {              // Try to create a tmpdir -            QDir projdir(museProject); +            QDir projdir(song->projectDirectory());              if (!projdir.mkdir("tmp_musewav")) {                    printf("Could not create undo dir!\n");                    return false; diff --git a/muse/muse/waveevent.cpp b/muse/muse/waveevent.cpp index eee863c2..a15418cc 100644 --- a/muse/muse/waveevent.cpp +++ b/muse/muse/waveevent.cpp @@ -104,16 +104,7 @@ void WaveEventBase::write(Xml& xml, const Pos& offset) const  //            wpos.setTick(wpos.tick() + offset);        wpos.write(xml, "poslen");        xml.intTag("frame", _spos);  // offset in wave file - -      // -      // waves in the project dirctory are stored -      // with relative path name, others with absolute path -      // -      QString path = f.finfo()->absolutePath(); -      if (path == museProject) -            xml.strTag("file", f.finfo()->fileName()); -      else -            xml.strTag("file", f.finfo()->filePath()); +      xml.strTag("file", f.finfo()->fileName());        xml.etag("event");        }  | 
