diff options
-rw-r--r-- | muse/ChangeLog | 2 | ||||
-rw-r--r-- | muse/awl/tcanvas.cpp | 3 | ||||
-rw-r--r-- | muse/muse/audioaux.cpp | 2 | ||||
-rw-r--r-- | muse/muse/audiooutput.cpp | 2 | ||||
-rw-r--r-- | muse/muse/exportmidi.cpp | 2 | ||||
-rw-r--r-- | muse/muse/muse.cpp | 53 | ||||
-rw-r--r-- | muse/muse/muse.qrc | 1 | ||||
-rw-r--r-- | muse/muse/preferences.cpp | 1 | ||||
-rw-r--r-- | muse/muse/projectdialog.cpp | 205 | ||||
-rw-r--r-- | muse/muse/projectdialog.h | 11 | ||||
-rw-r--r-- | muse/muse/projectdialog.ui | 256 | ||||
-rw-r--r-- | muse/muse/song.cpp | 26 | ||||
-rw-r--r-- | muse/muse/song.h | 7 | ||||
-rw-r--r-- | muse/muse/wave.cpp | 4 | ||||
-rw-r--r-- | muse/muse/waveedit/waveview.cpp | 4 | ||||
-rw-r--r-- | muse/muse/xpm/folder_new.png | bin | 0 -> 1278 bytes |
16 files changed, 415 insertions, 164 deletions
diff --git a/muse/ChangeLog b/muse/ChangeLog index 5a4379e3..33b4639a 100644 --- a/muse/ChangeLog +++ b/muse/ChangeLog @@ -1,3 +1,5 @@ +11.5 (ws) + * implemented new project handling; first docs in doc/man/de 3.5 (ws) * moved build system to cmake * moved repository to svn diff --git a/muse/awl/tcanvas.cpp b/muse/awl/tcanvas.cpp index 0fe29e28..8b9a0925 100644 --- a/muse/awl/tcanvas.cpp +++ b/muse/awl/tcanvas.cpp @@ -678,10 +678,11 @@ void TimeCanvas::paintMetronomRuler(QPainter& p, const QRect& r) pos2.mbt(&bar2, &beat, &tick); int n = mag[metronomeRulerMag]; + bar1 = (bar1 / n) * n; // round down if (bar1 && n >= 2) bar1 -= 1; - bar2 = ((bar2 + n - 1) / n) * n - 1; // round up + bar2 = ((bar2 + n - 1) / n) * n; // round up for (int bar = bar1; bar <= bar2;) { AL::Pos stick(bar, 0, 0); diff --git a/muse/muse/audioaux.cpp b/muse/muse/audioaux.cpp index 1f1903f4..9023f058 100644 --- a/muse/muse/audioaux.cpp +++ b/muse/muse/audioaux.cpp @@ -90,7 +90,7 @@ void AudioAux::collectInputData() break; } } - RouteList* rl = inRoutes(); +// RouteList* rl = inRoutes(); bool copy = true; TrackList* tl = song->tracks(); diff --git a/muse/muse/audiooutput.cpp b/muse/muse/audiooutput.cpp index fbaac33c..b6cd4d70 100644 --- a/muse/muse/audiooutput.cpp +++ b/muse/muse/audiooutput.cpp @@ -178,7 +178,7 @@ void AudioOutput::deactivate() // gui context //--------------------------------------------------------- -void AudioOutput::stopRecording(const Pos& s, const Pos& e) +void AudioOutput::stopRecording(const Pos& /*s*/, const Pos& /*e*/) { SndFile* sf = recFile(); if (sf) diff --git a/muse/muse/exportmidi.cpp b/muse/muse/exportmidi.cpp index 1cfff45e..879482f4 100644 --- a/muse/muse/exportmidi.cpp +++ b/muse/muse/exportmidi.cpp @@ -116,7 +116,7 @@ static void addController(MPEventList* l, int tick, int /*port*/, int channel, i void MusE::exportMidi() { if (exportMidiDialog == 0) - exportMidiDialog = new ExportMidiDialog(song->projectDirectory()); + exportMidiDialog = new ExportMidiDialog(song->projectPath()); int rv = exportMidiDialog->exec(); if (rv == 0) return; diff --git a/muse/muse/muse.cpp b/muse/muse/muse.cpp index ea454a9a..26da3c8c 100644 --- a/muse/muse/muse.cpp +++ b/muse/muse/muse.cpp @@ -308,9 +308,8 @@ bool MusE::seqRestart() // addProject //--------------------------------------------------------- -void addProject(const QFileInfo& f) +void addProject(const QString& name) { - QString name(f.absoluteFilePath()); for (int i = 0; i < PROJECT_LIST_LEN; ++i) { if (projectList[i] == 0) break; @@ -1039,7 +1038,7 @@ void MusE::localOff() // loadProject //--------------------------------------------------------- -void MusE::loadProject(const QString& name) +void MusE::loadProject(const QString& path) { // // stop audio threads if running @@ -1053,7 +1052,7 @@ void MusE::loadProject(const QString& name) } seqStop(); } - loadProject1(name); + loadProject1(path); if (restartSequencer) seqStart(); audio->msgSeek(song->cPos()); @@ -1063,15 +1062,17 @@ void MusE::loadProject(const QString& name) // loadProject1 //--------------------------------------------------------- -void MusE::loadProject1(const QString& name) +void MusE::loadProject1(const QString& path) { + QString header(tr("MusE: new project")); + if (mixer1) mixer1->clear(); if (mixer2) mixer2->clear(); if (song->dirty) { int n = 0; - n = QMessageBox::warning(this, appName, + n = QMessageBox::warning(this, header, tr("The current Project contains unsaved data\n" "Load overwrites current Project:\n" "Save Current Project?"), @@ -1089,14 +1090,17 @@ void MusE::loadProject1(const QString& name) printf("InternalError: gibt %d\n", n); } } + QString name = path.split("/").last(); + QDir pd(QDir::homePath() + "/" + config.projectPath + "/" + path); + + addProject(path); // add to history - 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")); + QString s(tr("Cannot create project folder <%1>")); + QMessageBox::critical(this, header, s.arg(pd.path())); return; } } @@ -1115,7 +1119,7 @@ void MusE::loadProject1(const QString& name) w->close(); } emit startLoadSong(); - song->setProjectName(name); + song->setProjectPath(path); song->load(); tr_id->setChecked(config.transportVisible); @@ -1190,10 +1194,10 @@ void MusE::loadProject() int rv = projectDialog.exec(); if (rv == 0) return; - QString name = projectDialog.project(); - if (name.isEmpty()) + QString path = projectDialog.projectPath(); + if (path.isEmpty()) return; - loadProject(name); + loadProject(path); } //--------------------------------------------------------- @@ -1205,7 +1209,7 @@ bool MusE::save() QString backupCommand; QString name(song->projectName() + ".med"); - QFileInfo fi(song->projectDirectory() + "/" + name); + QFileInfo fi(song->absoluteProjectPath() + "/" + name); QTemporaryFile tmp(fi.path() + "/MusEXXXXXX"); tmp.setAutoRemove(false); @@ -2881,20 +2885,17 @@ int main(int argc, char* argv[]) } } - QString name; + QString path; // project path relativ to config.projectPath if (argc >= 2) - name = argv[optind]; // start with first name on command line + path = argv[optind]; // start with first name on command line else if (config.startMode == START_LAST_PROJECT) { if (projectList[0]) - name = *projectList[0]; + path = *projectList[0]; } else if (config.startMode == START_START_PROJECT) - name = config.startProject; + path = config.startProject; - //DEBUG: - name = ""; - - if (name.isEmpty()) { + if (path.isEmpty()) { // // ask user for a project // @@ -2902,8 +2903,8 @@ int main(int argc, char* argv[]) ProjectDialog projectDialog; int rv = projectDialog.exec(); if (rv == 1) { - name = projectDialog.project(); - if (!name.isEmpty()) + path = projectDialog.projectPath(); + if (!path.isEmpty()) break; } // the user did not select/create a project @@ -2922,7 +2923,7 @@ int main(int argc, char* argv[]) } } - muse->loadProject(name); + muse->loadProject(path); muse->changeConfig(false); if (!debugMode) { @@ -2936,5 +2937,3 @@ int main(int argc, char* argv[]) fprintf(stderr, "app end %d\n", n); return n; } - - diff --git a/muse/muse/muse.qrc b/muse/muse/muse.qrc index b5132647..e37e035e 100644 --- a/muse/muse/muse.qrc +++ b/muse/muse/muse.qrc @@ -14,6 +14,7 @@ <file>xpm/play.xpm</file> <file>xpm/frewind.xpm</file> <file>xpm/fforward.xpm</file> + <file>xpm/folder_new.png</file> </qresource> </RCC> diff --git a/muse/muse/preferences.cpp b/muse/muse/preferences.cpp index 96054b4a..f8b838cd 100644 --- a/muse/muse/preferences.cpp +++ b/muse/muse/preferences.cpp @@ -340,6 +340,7 @@ PreferencesDialog::PreferencesDialog(Arranger* a, QWidget* parent) setTransportCurrent->setEnabled(muse->transportWindow()); freewheelMode->setChecked(config->useJackFreewheelMode); showSplash->setChecked(config->showSplashScreen); + projectPath->setText(config->projectPath); stopActive->setChecked(midiRCList.isActive(RC_STOP)); playActive->setChecked(midiRCList.isActive(RC_PLAY)); diff --git a/muse/muse/projectdialog.cpp b/muse/muse/projectdialog.cpp index 95108be1..ffd039f2 100644 --- a/muse/muse/projectdialog.cpp +++ b/muse/muse/projectdialog.cpp @@ -21,6 +21,39 @@ #include "projectdialog.h" #include "gconfig.h" #include "song.h" +#include "icons.h" + +// +// entry types for projectTree tree widget: +// +enum { DIR_TYPE, PROJECT_TYPE }; + +//--------------------------------------------------------- +// processSubdirectories +//--------------------------------------------------------- + +void ProjectDialog::processSubdir(QTreeWidgetItem* item, const QString& p, + const QString& subdir, QTreeWidgetItem** current) + { + QString path(p + "/" + subdir); + QFile pf(path + "/" + subdir + ".med"); + if (pf.exists()) { + QTreeWidgetItem* pi = new QTreeWidgetItem(item, PROJECT_TYPE); + pi->setText(0, subdir); + pi->setIcon(0, style()->standardIcon(QStyle::SP_FileIcon)); + if (path == song->absoluteProjectPath()) + *current = pi; + } + else { + QDir sd(path); + QStringList dl = sd.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); + QTreeWidgetItem* pi = new QTreeWidgetItem(item, DIR_TYPE); + pi->setText(0, subdir); + itemCollapsed(pi); + foreach (QString s, dl) + processSubdir(pi, path, s, current); + } + } //--------------------------------------------------------- // ProjectDialog @@ -36,26 +69,47 @@ ProjectDialog::ProjectDialog(QWidget* parent) QStringList el = pd.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); QTreeWidgetItem* current = 0; foreach (QString s, el) { - QFile pf(QDir::homePath() + "/" + config.projectPath + "/" - + s + "/" + s + ".med"); + QString path(QDir::homePath() + "/" + config.projectPath + "/" + s); + QFile pf(path + "/" + s + ".med"); if (pf.exists()) { - QTreeWidgetItem* pi = new QTreeWidgetItem; + QTreeWidgetItem* pi = new QTreeWidgetItem(projectTree, PROJECT_TYPE); pi->setText(0, s); - projectTree->addTopLevelItem(pi); - if (s == song->projectName()) + pi->setIcon(0, style()->standardIcon(QStyle::SP_FileIcon)); + if (path == song->absoluteProjectPath()) current = pi; } + else { + QDir sd(path); + QStringList dl = sd.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); + if (!dl.isEmpty()) { + QTreeWidgetItem* pi = new QTreeWidgetItem(projectTree, DIR_TYPE); + pi->setText(0, s); + itemCollapsed(pi); + foreach (QString s, dl) { + processSubdir(pi, path, s, ¤t); + } + } + } } connect(projectTree, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), SLOT(currentChanged(QTreeWidgetItem*, QTreeWidgetItem*))); connect(projectTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), - SLOT(accept())); - connect(projectName, + SLOT(itemDoubleClicked(QTreeWidgetItem*, int))); + connect(projectTree, + SIGNAL(itemCollapsed(QTreeWidgetItem*)), + SLOT(itemCollapsed(QTreeWidgetItem*))); + connect(projectTree, + SIGNAL(itemExpanded(QTreeWidgetItem*)), + SLOT(itemExpanded(QTreeWidgetItem*))); + connect(projectNameEntry, SIGNAL(textEdited(const QString&)), SLOT(projectNameEdited(const QString&))); - + connect(newFolder, + SIGNAL(clicked()), + SLOT(newFolderClicked())); + if (current) projectTree->setCurrentItem(current); else @@ -63,23 +117,66 @@ ProjectDialog::ProjectDialog(QWidget* parent) } //--------------------------------------------------------- +// itemCollapsed +//--------------------------------------------------------- + +void ProjectDialog::itemCollapsed(QTreeWidgetItem* item) + { + item->setIcon(0, style()->standardIcon(QStyle::SP_DirClosedIcon)); + } + +//--------------------------------------------------------- +// itemExpanded +//--------------------------------------------------------- + +void ProjectDialog::itemExpanded(QTreeWidgetItem* item) + { + item->setIcon(0, style()->standardIcon(QStyle::SP_DirOpenIcon)); + } + +//--------------------------------------------------------- +// itemPath +//--------------------------------------------------------- + +QString ProjectDialog::itemPath(QTreeWidgetItem* item) const + { + QString path; + QTreeWidgetItem* ti = item; + QStringList dirComponent; + do { + dirComponent.prepend(ti->text(0)); + ti = ti->parent(); + } while (ti); + foreach (QString s, dirComponent) { + if (!path.isEmpty()) + path += "/"; + path += s; + } + return path; + } + +//--------------------------------------------------------- // currentChanged //--------------------------------------------------------- void ProjectDialog::currentChanged(QTreeWidgetItem* item, QTreeWidgetItem*) { - bool enable = item != 0; + bool enable = (item != 0) && (item->type() == PROJECT_TYPE); createdDate->setEnabled(enable); modifiedDate->setEnabled(enable); comment->setEnabled(enable); length->setEnabled(enable); - + + // newFolder->setEnabled(item == 0 || item->type() == DIR_TYPE); if (!enable) return; - projectName->setText(item->text(0)); - QFileInfo pf(QDir::homePath() + "/" + config.projectPath + "/" - + item->text(0) + "/" + item->text(0) + ".med"); + projectNameEntry->setText(item->text(0)); + QString pd(QDir::homePath() + "/" + config.projectPath + "/"); + + pd += "/" + itemPath(item); + + QFileInfo pf(pd + "/" + item->text(0) + ".med"); createdDate->setDateTime(pf.created()); modifiedDate->setDateTime(pf.lastModified()); @@ -136,8 +233,86 @@ void ProjectDialog::currentChanged(QTreeWidgetItem* item, QTreeWidgetItem*) void ProjectDialog::projectNameEdited(const QString&) { QTreeWidgetItem* item = projectTree->currentItem(); - if (item) + if (item && item->type() == PROJECT_TYPE) { projectTree->setItemSelected(item, false); - projectTree->setCurrentItem(0); + projectTree->setCurrentItem(0); + } + } + +//--------------------------------------------------------- +// projectPath +//--------------------------------------------------------- + +QString ProjectDialog::projectPath() const + { + QTreeWidgetItem* item = projectTree->currentItem(); + QString s; + if (item) { + if (item->type() == PROJECT_TYPE) + s = itemPath(item); + else + s = itemPath(item) + "/" + projectNameEntry->text(); + } + else + s = projectNameEntry->text(); + return s; + } + +//--------------------------------------------------------- +// newFolderClicked +//--------------------------------------------------------- + +void ProjectDialog::newFolderClicked() + { + QString title(tr("MusE: create new folder")); + QString folder = QInputDialog::getText(this, title, tr("new folder:")); + if (folder.isEmpty()) + return; + QString path; + QTreeWidgetItem* item = projectTree->currentItem(); + if (item) { + QStringList sl = itemPath(item).split("/"); + int n = sl.size() - 1; + for (int i = 0; i < n; ++i) { + if (!path.isEmpty()) + path += "/"; + path += sl[i]; + } + if (!path.isEmpty()) + path += "/"; + } + path += folder; + + QDir d; + if (!d.mkpath(QDir::homePath() + "/" + config.projectPath + "/" + path)) { + QString s("Creating new project folder <%1> failed"); + QMessageBox::critical(this, title, s.arg(path)); + } + else { + if (item) + item = item->parent(); + QStringList pathElements = folder.split("/"); + foreach(QString s, pathElements) { + QTreeWidgetItem* pi; + if (item == 0) + pi = new QTreeWidgetItem(projectTree, DIR_TYPE); + else + pi = new QTreeWidgetItem(item, DIR_TYPE); + pi->setText(0, s); + itemCollapsed(pi); + item = pi; + } + projectTree->setCurrentItem(item); + } + } + +//--------------------------------------------------------- +// itemDoubleClicked +//--------------------------------------------------------- + +void ProjectDialog::itemDoubleClicked(QTreeWidgetItem* item, int) + { + if (item->type() == PROJECT_TYPE) + accept(); } diff --git a/muse/muse/projectdialog.h b/muse/muse/projectdialog.h index c0ddfee9..09593b02 100644 --- a/muse/muse/projectdialog.h +++ b/muse/muse/projectdialog.h @@ -30,13 +30,22 @@ class ProjectDialog : public QDialog, public Ui_ProjectDialogBase { Q_OBJECT + void processSubdir(QTreeWidgetItem*, const QString&, + const QString&, QTreeWidgetItem**); + + QString itemPath(QTreeWidgetItem*) const; + private slots: void currentChanged(QTreeWidgetItem*, QTreeWidgetItem*); void projectNameEdited(const QString&); + void itemCollapsed(QTreeWidgetItem*); + void itemExpanded(QTreeWidgetItem*); + void newFolderClicked(); + void itemDoubleClicked(QTreeWidgetItem*, int); public: ProjectDialog(QWidget* parent = 0); - QString project() const { return projectName->text(); } + QString projectPath() const; }; #endif diff --git a/muse/muse/projectdialog.ui b/muse/muse/projectdialog.ui index 006db8cc..ffc03eeb 100644 --- a/muse/muse/projectdialog.ui +++ b/muse/muse/projectdialog.ui @@ -15,120 +15,132 @@ <property name="windowTitle" > <string>MusE: Select Project</string> </property> - <layout class="QVBoxLayout" > + <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> - <item> - <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> + <item row="0" column="1" > + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> </property> - <property name="spacing" > - <number>6</number> + <property name="sizeHint" > + <size> + <width>221</width> + <height>20</height> + </size> </property> - <item> - <widget class="QTreeWidget" name="projectTree" > - <column> + </spacer> + </item> + <item row="0" column="0" > + <widget class="QToolButton" name="newFolder" > + <property name="toolTip" > + <string>create new project folder</string> + </property> + <property name="text" > + <string>...</string> + </property> + <property name="icon" > + <iconset resource="muse.qrc" >:/xpm/folder_new.png</iconset> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2" > + <widget class="QTreeWidget" name="projectTree" > + <column> + <property name="text" > + <string>Projectlist</string> + </property> + </column> + </widget> + </item> + <item rowspan="2" row="0" column="2" > + <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="focusPolicy" > + <enum>Qt::NoFocus</enum> + </property> + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="QDateEdit" name="modifiedDate" > + <property name="focusPolicy" > + <enum>Qt::NoFocus</enum> + </property> + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="1" > + <widget class="QTimeEdit" name="length" > + <property name="focusPolicy" > + <enum>Qt::NoFocus</enum> + </property> + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="label_4" > <property name="text" > - <string>Project</string> + <string>Length:</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> + </widget> + </item> + <item row="3" column="0" > + <widget class="QLabel" name="label_5" > + <property name="text" > + <string>Comment:</string> </property> - <property name="spacing" > - <number>3</number> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="label_3" > + <property name="text" > + <string>Modified:</string> </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> + </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" > + <property name="focusPolicy" > + <enum>Qt::NoFocus</enum> + </property> + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> </item> - <item> + <item row="3" column="0" colspan="3" > <layout class="QHBoxLayout" > <property name="margin" > <number>0</number> @@ -154,6 +166,9 @@ <property name="text" > <string>OK</string> </property> + <property name="default" > + <bool>true</bool> + </property> </widget> </item> <item> @@ -165,10 +180,47 @@ </item> </layout> </item> + <item row="2" column="0" colspan="3" > + <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="projectNameEntry" > + <property name="toolTip" > + <string>project name</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> <pixmapfunction></pixmapfunction> - <resources/> + <tabstops> + <tabstop>okButton</tabstop> + <tabstop>cancelButton</tabstop> + <tabstop>projectNameEntry</tabstop> + <tabstop>projectTree</tabstop> + <tabstop>newFolder</tabstop> + <tabstop>modifiedDate</tabstop> + <tabstop>length</tabstop> + <tabstop>createdDate</tabstop> + <tabstop>comment</tabstop> + </tabstops> + <resources> + <include location="muse.qrc" /> + </resources> <connections> <connection> <sender>okButton</sender> diff --git a/muse/muse/song.cpp b/muse/muse/song.cpp index 47965f43..35e277ae 100644 --- a/muse/muse/song.cpp +++ b/muse/muse/song.cpp @@ -2356,12 +2356,21 @@ bool Song::trackExists(Track* t) const } //--------------------------------------------------------- -// projectDirectory +// absoluteProjectPath //--------------------------------------------------------- -QString Song::projectDirectory() const +QString Song::absoluteProjectPath() const { - return QDir::homePath() + "/" + config.projectPath + "/" + _projectName; + return QDir::homePath() + "/" + config.projectPath + "/" + _projectPath; + } + +//--------------------------------------------------------- +// projectPath +//--------------------------------------------------------- + +QString Song::projectPath() const + { + return _projectPath; } //--------------------------------------------------------- @@ -2370,16 +2379,17 @@ QString Song::projectDirectory() const QString Song::projectName() const { - return _projectName; + QString name = _projectPath.split("/").last(); + return name; } //--------------------------------------------------------- -// setProjectName +// setProjectPath //--------------------------------------------------------- -void Song::setProjectName(const QString& s) +void Song::setProjectPath(const QString& s) { - _projectName = s; + _projectPath = s; } //--------------------------------------------------------- @@ -2390,7 +2400,7 @@ void Song::load() { clear(false); - QString s = projectDirectory() + "/" + _projectName + ".med"; + QString s = absoluteProjectPath() + "/" + projectName() + ".med"; QFile f(s); if (f.open(QIODevice::ReadOnly)) { diff --git a/muse/muse/song.h b/muse/muse/song.h index 2317ae6d..1338de13 100644 --- a/muse/muse/song.h +++ b/muse/muse/song.h @@ -86,7 +86,7 @@ class Song : public QObject { MARKER_TICK, MARKER_LOCK }; private: - QString _projectName; + QString _projectPath; QString _comment; MidiFifo eventFifo; @@ -395,9 +395,10 @@ class Song : public QObject { void setSolo(Track*,bool); void setOff(Track*,bool); - QString projectDirectory() const; + QString projectPath() const; + QString absoluteProjectPath() const; QString projectName() const; - void setProjectName(const QString&); + void setProjectPath(const QString&); QString comment() const { return _comment; } void setComment(const QString& s) { _comment = s; } diff --git a/muse/muse/wave.cpp b/muse/muse/wave.cpp index 4bd0b262..74d71006 100644 --- a/muse/muse/wave.cpp +++ b/muse/muse/wave.cpp @@ -465,7 +465,7 @@ QString SndFile::strerror() const SndFile* SndFile::getWave(const QString& inName, bool writeFlag) { - QString name = song->projectDirectory() + "/" + inName; + QString name = song->absoluteProjectPath() + "/" + inName; // printf("=====%s %s\n", inName.toLatin1().data(), name.toLatin1().data()); SndFile* f = sndFiles.value(name); @@ -759,7 +759,7 @@ SndFile* SndFile::createRecFile(int channels) QString fileName("%1/rec%2.wav"); QFileInfo fi; do { - fi.setFile(fileName.arg(song->projectDirectory()).arg(recFileNumber)); + fi.setFile(fileName.arg(song->absoluteProjectPath()).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 d01e8148..863a34dd 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 = song->projectDirectory() + "/tmp_musewav"; //!@TODO: Don't hardcode like this + QString tmpWavDir = song->absoluteProjectPath() + "/tmp_musewav"; //!@TODO: Don't hardcode like this QFileInfo tmpdirfi(tmpWavDir); if (!tmpdirfi.isDir()) { // Try to create a tmpdir - QDir projdir(song->projectDirectory()); + QDir projdir(song->absoluteProjectPath()); if (!projdir.mkdir("tmp_musewav")) { printf("Could not create undo dir!\n"); return false; diff --git a/muse/muse/xpm/folder_new.png b/muse/muse/xpm/folder_new.png Binary files differnew file mode 100644 index 00000000..1277281f --- /dev/null +++ b/muse/muse/xpm/folder_new.png |