diff options
-rw-r--r-- | muse/ChangeLog | 2 | ||||
-rw-r--r-- | muse/TODO | 4 | ||||
-rw-r--r-- | muse/muse/muse.cpp | 74 | ||||
-rw-r--r-- | muse/muse/muse.h | 2 | ||||
-rw-r--r-- | muse/muse/projectdialog.cpp | 7 | ||||
-rw-r--r-- | muse/muse/song.cpp | 8 | ||||
-rw-r--r-- | muse/muse/song.h | 8 | ||||
-rw-r--r-- | muse/muse/songfile.cpp | 7 |
8 files changed, 70 insertions, 42 deletions
diff --git a/muse/ChangeLog b/muse/ChangeLog index 7a9303ed..98f6927a 100644 --- a/muse/ChangeLog +++ b/muse/ChangeLog @@ -1,3 +1,5 @@ +19.5 (ws) + * added project creation time and song len (in sec) to project file 18.5 (ws) * added "Muse templates" and "User templates" to template list in template dialog @@ -6,10 +6,6 @@ - create dialog to edit project comment BUGS - - if the user creates a new project and later decides to not - save the project, the created (empty) project directory is - not deleted on MusE exit - - updating the gui during midi recording is too slow; a new, faster implementation is needed diff --git a/muse/muse/muse.cpp b/muse/muse/muse.cpp index 4be5f45d..6340639e 100644 --- a/muse/muse/muse.cpp +++ b/muse/muse/muse.cpp @@ -1067,26 +1067,9 @@ void MusE::loadProject1(const QString& path) { QString header(tr("MusE: new project")); - if (song->dirty) { - int n = 0; - n = QMessageBox::warning(this, header, - tr("The current Project contains unsaved data\n" - "Load overwrites current Project:\n" - "Save Current Project?"), - tr("&Save"), tr("&Overwrite"), tr("&Abort"), 0, 2); - switch (n) { - case 0: - if (!save()) // abort if save failed - return; - break; - case 1: - break; - case 2: - return; - default: - printf("InternalError: gibt %d\n", n); - } - } + if (leaveProject()) + return; + if (mixer1) mixer1->clear(); if (mixer2) @@ -1125,6 +1108,7 @@ void MusE::loadProject1(const QString& path) emit startLoadSong(); song->setProjectPath(path); song->clear(false); + song->setCreated(newProject); QString s = pd.absoluteFilePath(name + ".med"); @@ -1303,18 +1287,12 @@ void MusE::quitDoc() } //--------------------------------------------------------- -// closeEvent +// leaveProject +// return false if user aborts operation //--------------------------------------------------------- -void MusE::closeEvent(QCloseEvent*) +bool MusE::leaveProject() { - song->setStop(true); - // - // wait for sequencer - // - while (audio->isPlaying()) { - qApp->processEvents(); - } // // delete all wave files created in this session and not // referenced any more @@ -1326,12 +1304,10 @@ void MusE::closeEvent(QCloseEvent*) tr("The current Project contains unsaved data\n" "Save Current Project?"), tr("&Save"), tr("&Nosave"), tr("&Abort"), 0, 2); - if (n == 0) { - if (!save()) // dont quit if save failed - return; - } + if (n == 0) + return !save(); else if (n == 2) - return; + return true; // // delete all wave files created in this session and not // referenced any more @@ -1341,6 +1317,36 @@ void MusE::closeEvent(QCloseEvent*) } else SndFile::cleanupRecFiles(true); + // + // if this is a new created project, + // delete project directory + // + if (song->created()) { + // delete project directory + QDir pp; + if (!pp.rmdir(song->absoluteProjectPath())) + printf("cannot remove dir <%s>\n", song->absoluteProjectPath().toLatin1().data()); + } + return false; + } + +//--------------------------------------------------------- +// closeEvent +//--------------------------------------------------------- + +void MusE::closeEvent(QCloseEvent*) + { + song->setStop(true); + // + // wait for sequencer + // + while (audio->isPlaying()) { + qApp->processEvents(); + } + + if (leaveProject()) + return; + seqStop(); // save "Open Recent" list diff --git a/muse/muse/muse.h b/muse/muse/muse.h index a3bd0749..7fe3742e 100644 --- a/muse/muse/muse.h +++ b/muse/muse/muse.h @@ -163,6 +163,8 @@ class MusE : public QMainWindow, public Ui::MuseBase void writeConfiguration(Xml&) const; void updateConfiguration(); + bool leaveProject(); + virtual void focusInEvent(QFocusEvent*); signals: diff --git a/muse/muse/projectdialog.cpp b/muse/muse/projectdialog.cpp index ebfcacc2..1c5f3219 100644 --- a/muse/muse/projectdialog.cpp +++ b/muse/muse/projectdialog.cpp @@ -177,10 +177,10 @@ void ProjectDialog::currentChanged(QTreeWidgetItem* item, QTreeWidgetItem*) pd += "/" + itemPath(item); QFileInfo pf(pd + "/" + item->text(0) + ".med"); - createdDate->setDateTime(pf.created()); modifiedDate->setDateTime(pf.lastModified()); QTime time(0, 0, 0); + QDateTime date; QFile f(pf.filePath()); QDomDocument doc; @@ -213,17 +213,22 @@ void ProjectDialog::currentChanged(QTreeWidgetItem* item, QTreeWidgetItem*) QString s(e.text()); if (tag == "comment") comment->setPlainText(s); + else if (tag == "createDate") + date = QDateTime::fromString(e.text(), Qt::ISODate); else if (tag == "LenInSec") { int sec = s.toInt(); time = time.addSecs(sec); + break; } } } } } + break; } } length->setTime(time); + createdDate->setDateTime(date); } //--------------------------------------------------------- diff --git a/muse/muse/song.cpp b/muse/muse/song.cpp index 0832e054..f17918de 100644 --- a/muse/muse/song.cpp +++ b/muse/muse/song.cpp @@ -1141,6 +1141,12 @@ void Song::panic() void Song::clear(bool signal) { + _created = false; + _backupWritten = false; + dirty = false; + _comment = ""; + _createDate = QDateTime::currentDateTime(); + seekInProgress = false; bounceTrack = 0; @@ -1180,8 +1186,6 @@ void Song::clear(bool signal) _quantize = false; _len = 1; // song len in ticks // _tempo = 500000; // default tempo 120 - dirty = false; - _backupWritten = false; if (signal) { emit loopChanged(false); recordChanged(false); diff --git a/muse/muse/song.h b/muse/muse/song.h index f7322c7f..344d1c80 100644 --- a/muse/muse/song.h +++ b/muse/muse/song.h @@ -88,11 +88,15 @@ class Song : public QObject { private: QString _projectPath; QString _comment; + bool _backupWritten; // set after first "save" operation from + // user; used to make sure there will + // be only one backup for a session + bool _created; // project was created in current session + QDateTime _createDate; MidiFifo eventFifo; int updateFlags; - bool _backupWritten; TrackList _tracks; // tracklist as seen by arranger MidiTrackList _midis; @@ -401,6 +405,8 @@ class Song : public QObject { void setProjectPath(const QString&); QString comment() const { return _comment; } void setComment(const QString& s) { _comment = s; } + void setCreated(bool val) { _created = val; } + bool created() const { return _created; } bool read(QFile* qf); void read20(QDomNode node); diff --git a/muse/muse/songfile.cpp b/muse/muse/songfile.cpp index 3e62ccaf..751f83a5 100644 --- a/muse/muse/songfile.cpp +++ b/muse/muse/songfile.cpp @@ -21,6 +21,7 @@ #include "muse.h" #include "song.h" #include "arranger/arranger.h" +#include "al/al.h" #include "al/xml.h" #include "midiedit/drummap.h" #include "al/marker.h" @@ -252,6 +253,8 @@ void Song::read(QDomNode node) DrumEdit::readConfiguration(node); else if (tag == "comment") _comment = e.text(); + else if (tag == "createDate") + _createDate = QDateTime::fromString(e.text(), Qt::ISODate); else printf("MusE:Song: unknown tag %s\n", tag.toLatin1().data()); } @@ -266,6 +269,10 @@ void Song::write(Xml& xml) const { xml.tag("song"); xml.strTag("comment", _comment); + xml.strTag("createDate", _createDate.toString(Qt::ISODate)); + int n = AL::tempomap.tick2frame(_len); + xml.intTag("LenInSec", n / AL::sampleRate); + xml.intTag("cpos", cpos()); xml.intTag("rpos", rpos()); xml.intTag("lpos", lpos()); |