traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src/traverso dialogs/project/ProjectMa...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src/traverso dialogs/project/ProjectMa...
Date: Tue, 03 Apr 2007 19:05:39 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/04/03 19:05:39

Modified files:
        src/traverso/dialogs/project: ProjectManagerDialog.cpp 
                                      ProjectManagerDialog.h 
        src/traverso   : Interface.cpp Interface.h traverso.pro 
        src/traverso/ui: ProjectManagerDialog.ui SongManagerDialog.ui 
Added files:
        src/traverso/dialogs/project: NewSongDialog.cpp NewSongDialog.h 
                                      OpenCreateProjectDialog.cpp 
                                      OpenCreateProjectDialog.h 
        src/traverso/ui: OpenCreateProjectDialog.ui 
Removed files:
        src/traverso/dialogs/project: SongManagerDialog.cpp 
                                      SongManagerDialog.h 

Log message:
        renamed ProjectManagerDialog -> OpenCreateProjectDialog
        renamed SongManagerDialog -> ProjectManagerDialog
        explicit un/redo buttons in ProjectManagerDialog, since a Project 
doesnt have a history view.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/ProjectManagerDialog.cpp?cvsroot=traverso&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/ProjectManagerDialog.h?cvsroot=traverso&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/NewSongDialog.cpp?cvsroot=traverso&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/NewSongDialog.h?cvsroot=traverso&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/OpenCreateProjectDialog.cpp?cvsroot=traverso&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/OpenCreateProjectDialog.h?cvsroot=traverso&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/SongManagerDialog.cpp?cvsroot=traverso&r1=1.11&r2=0
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/SongManagerDialog.h?cvsroot=traverso&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.cpp?cvsroot=traverso&r1=1.52&r2=1.53
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.h?cvsroot=traverso&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/traverso.pro?cvsroot=traverso&r1=1.37&r2=1.38
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/ui/ProjectManagerDialog.ui?cvsroot=traverso&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/ui/SongManagerDialog.ui?cvsroot=traverso&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/ui/OpenCreateProjectDialog.ui?cvsroot=traverso&rev=1.1

Patches:
Index: dialogs/project/ProjectManagerDialog.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/dialogs/project/ProjectManagerDialog.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- dialogs/project/ProjectManagerDialog.cpp    21 Mar 2007 19:17:16 -0000      
1.6
+++ dialogs/project/ProjectManagerDialog.cpp    3 Apr 2007 19:05:38 -0000       
1.7
@@ -1,41 +1,33 @@
 /*
-    Copyright (C) 2005-2006 Remon Sijrier 
+Copyright (C) 2005-2007 Remon Sijrier 
  
-    This file is part of Traverso
+This file is part of Traverso
  
-    Traverso is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
- 
-    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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+Traverso is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  
 */
 
 #include "ProjectManagerDialog.h"
-#include "ui_ProjectManagerDialog.h"
 
-#include <QDir>
+#include "libtraversocore.h"
 #include <QStringList>
 #include <QMessageBox>
-#include <QTextStream>
-#include <QDomDocument>
 #include <QFileDialog>
 #include <QHeaderView>
-
-#include <Config.h>
-#include <Information.h>
-#include <ProjectManager.h>
-#include <Project.h>
-#include <Utils.h>
-
+#include <dialogs/project/NewSongDialog.h>
+#include <Interface.h>
 
 // Always put me below _all_ includes, this is needed
 // in case we run with memory leak detection enabled!
@@ -45,244 +37,208 @@
        : QDialog(parent)
 {
        setupUi(this);
-       projectListView->setColumnCount(2);
-       update_projects_list();
-       QStringList stringList;
-       stringList << "Project Name" << "Songs";
-       projectListView->setHeaderLabels(stringList);
        
-       projectListView->header()->resizeSection(0, 160);
-       projectListView->header()->resizeSection(1, 30);
+       treeSongWidget->setColumnCount(3);
+       treeSongWidget->header()->resizeSection(0, 160);
+       treeSongWidget->header()->resizeSection(1, 55);
+       treeSongWidget->header()->resizeSection(2, 70);
+       QStringList stringList;
+       stringList << "Song Name" << "Tracks" << "Length";
+       treeSongWidget->setHeaderLabels(stringList);
        
-       trackCountSpinBox->setValue(config().get_property("Song", 
"trackCreationCount", 4).toInt());
+       set_project(pm().get_project());
 
+       undoButton->setIcon(QIcon(find_pixmap(":/undo-16")));
+       redoButton->setIcon(QIcon(find_pixmap(":/redo-16")));
 
-       connect(projectListView, SIGNAL(itemClicked(QTreeWidgetItem*,int)), 
this, SLOT(projectitem_clicked(QTreeWidgetItem*,int)));
+       connect(treeSongWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), 
this, SLOT(songitem_clicked(QTreeWidgetItem*,int)));
+       connect(&pm(), SIGNAL(projectLoaded(Project*)), this, 
SLOT(set_project(Project*)));
 }
 
-ProjectManagerDialog::~ ProjectManagerDialog( )
+ProjectManagerDialog::~ProjectManagerDialog()
 {}
 
-void ProjectManagerDialog::update_projects_list()
+void ProjectManagerDialog::set_project(Project* project)
 {
-       projectListView->clear();
+       m_project = project;
        
-       QString path = config().get_property("Project", "directory", 
getenv("HOME")).toString();
-
-       QDir dir(path);
-
-       QStringList list = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
-       
-       foreach(QString dirname, list) {
+       if (m_project) {
+               connect(m_project, SIGNAL(songAdded(Song*)), this, 
SLOT(update_song_list()));
+               connect(m_project, SIGNAL(songRemoved(Song*)), this, 
SLOT(update_song_list()));
+               connect(m_project->get_history_stack(), SIGNAL(redoTextChanged 
( const QString &)),
+                       this, SLOT(redo_text_changed(const QString&)));
+               connect(m_project->get_history_stack(), SIGNAL(undoTextChanged 
( const QString &)),
+                       this, SLOT(undo_text_changed(const QString&)));
+               setWindowTitle("Manage Project - " + m_project->get_title());
+               descriptionTextEdit->setText(m_project->get_description());
+       } else {
+               setWindowTitle("Manage Project - No Project loaded!");
+               treeSongWidget->clear();
+               descriptionTextEdit->clear();
+       }
        
-               /************ FROM HERE ****************/
-               QDomDocument doc("Project");
-               QString fileToOpen = path + "/" + dirname + "/project.traverso";
+       update_song_list();
+}
                
-               QFile file(fileToOpen);
 
-               if (!file.open(QIODevice::ReadOnly)) {
-                       PWARN("ProjectManagerDialog:: Cannot open project 
properties file (%s)", fileToOpen.toAscii().data());
-                       continue;
+void ProjectManagerDialog::update_song_list( )
+{
+       if ( ! m_project) {
+               printf("ProjectManagerDialog:: no project ?\n");
+               return;
                }
 
-               QString errorMsg;
-               if (!doc.setContent(&file, &errorMsg)) {
-                       file.close();
-                       PWARN("ProjectManagerDialog:: Cannot set content of XML 
file (%s)", errorMsg.toAscii().data());
-                       continue;
-               }
+       printf("update_song_list() \n");
 
-               file.close();
+       treeSongWidget->clear();
+       foreach(Song* song, m_project->get_songs()) {
 
-               QDomElement docElem = doc.documentElement();
-               QDomNode propertiesNode = 
docElem.firstChildElement("Properties");
-               QDomElement e = propertiesNode.toElement();
-               QString title = e.attribute( "title", "" );
-               QString description = e.attribute("description", "No 
description set");
-               qint64 id = e.attribute( "id", "" ).toLongLong();
+               QString songNr = 
QString::number(m_project->get_song_index(song->get_id()));
+               QString songName = "Song " + songNr + " - " + song->get_title();
+               QString numberOfTracks = QString::number(song->get_numtracks());
+               QString songLength = frame_to_smpte(song->get_last_frame(), 
song->get_rate());
+               QString songStatus = song->is_changed()?"UnSaved":"Saved";
+               QString songSpaceAllocated = "Unknown";
                
+               QTreeWidgetItem* item = new QTreeWidgetItem(treeSongWidget);
+               item->setTextAlignment(1, Qt::AlignHCenter);
+               item->setTextAlignment(2, Qt::AlignHCenter);
+               item->setText(0, songName);
+               item->setText(1, numberOfTracks);
+               item->setText(2, songLength);
 
-               QDomNode songsNode = docElem.firstChildElement("Songs");
-               QDomNode songNode = songsNode.firstChild();
-               int songCounter = 0;
+               item->setData(0, Qt::UserRole, song->get_id());
+       }
+}
                
-               // count to get Songs number....
-               while(!songNode.isNull()) {
-                       songCounter++;
-                       songNode = songNode.nextSibling();
+void ProjectManagerDialog::songitem_clicked( QTreeWidgetItem* item, int)
+{
+       if (!item) {
+               return;
                }
 
-               QString sNumSongs = QString::number(songCounter);
+       Song* song;
 
-               /*********** TO HERE THIS CODE IS DUPLICATE FROM THAT IN 
PROJECT.CC :-( 
-               Don't know if this is avoidable at all *********/
+       qint64 id = item->data(0, Qt::UserRole).toLongLong();
+       song = m_project->get_song(id);
 
+       Q_ASSERT(song);
 
-               QTreeWidgetItem* item = new QTreeWidgetItem(projectListView);
-               item->setTextAlignment(0, Qt::AlignLeft);
-               item->setTextAlignment(1, Qt::AlignHCenter);
-               item->setText(0, title);
-               item->setText(1, sNumSongs);
-               QString html = "<html><head></head><body>Project: " + title + 
"<br /><br />";
-               html += tr("Description:") + "<br />";
-               html += description + "<br /><br />";
-               html += tr("Created on:") + " " + 
extract_date_time(id).toString() + "<br />";
-               html += "</body></html>";
-               item->setToolTip(0, html);
-       }
-}
+       selectedSongName->setText(song->get_title());
 
-void ProjectManagerDialog::projectitem_clicked( QTreeWidgetItem* item, int)
-{
-       if (item) {
-               selectedProjectName->setText(item->text(0));
-       }
+       m_project->set_current_song(song->get_id());
 }
 
-void ProjectManagerDialog::on_loadProjectButton_clicked( )
+void ProjectManagerDialog::on_renameSongButton_clicked( )
 {
-        // do we have the name of the project to load ?
-       QString title;
-       if (projectListView->currentItem()) {
-               title = projectListView->currentItem()->text(0);
-       }
-
-       if (title.isEmpty()) {
-               info().warning(tr("No Project selected!") );
-               info().information(tr("Select a project and click the 'Load' 
button again") );
+       if( ! m_project) {
                return;
        }
        
-       Project* project = pm().get_project();
+       QTreeWidgetItem* item = treeSongWidget->currentItem();
+       
 
        
-       if (project && (project->get_title() == title)) {
-               QMessageBox::StandardButton button = QMessageBox::question(this,
-                       "Traverso - Question",
-                       "Are you sure you want to reopen the current project ?",
-                       QMessageBox::Ok | QMessageBox::Cancel,
-                       QMessageBox::Cancel );
-               if (button == QMessageBox::Cancel) {
+       if ( ! item) {
                        return;
                }
-       }
                
-       // first test if project exists
-       // Note: this shouldn't be needed really, the projects in the view
-       // should exist, but just in case someone removed it, you never know!
-       if (!pm().project_exists(title)) {
-               info().warning(tr("Project does not exist! (%1)").arg(title));
+       qint64 id = item->data(0, Qt::UserRole).toLongLong();
+       Song* song = m_project->get_song(id);
+       
+       Q_ASSERT(song);
+       
+       QString newtitle = selectedSongName->text();
+       
+       if (newtitle.isEmpty()) {
+               info().information(tr("No new Song name was supplied!"));
                return;
        }
        
-       if (pm().load_project(title)<0) {
-               PERROR("Could not load project %s", title.toAscii().data());
-       }
+       song->set_title(newtitle);
+
+       update_song_list();
 }
 
-void ProjectManagerDialog::on_createProjectButton_clicked( )
+void ProjectManagerDialog::on_deleteSongButton_clicked( )
 {
+       QTreeWidgetItem* item = treeSongWidget->currentItem();
 
-        // do we have the name of the project to create ?
-       QString title = newProjectName->text();
-       
-       if (title.length() == 0) {
-               info().information(tr("You must supply a name for the 
project!") );
+       if ( ! item ) {
                return;
        }
 
+       qint64 id = item->data(0, Qt::UserRole).toLongLong();
 
-       // first test if project exists already
-       if (pm().project_exists(title)) {
-               switch (QMessageBox::information(this,
-                       tr("Traverso - Question"),
-                       tr("The Project \"%1\" already exists, do you want to 
remove it and replace it with a new one ?").arg(title),
-                       tr("Yes"), tr("No"), QString::null, 1, -1)) 
-               {
-                       case 0:
-                       pm().remove_project(title);
-                       break;
-                       default:
-                       return;
-                       break;
-               }
-       }
+       
Command::process_command(m_project->remove_song(m_project->get_song(id)));
+}
        
-       int numSongs = songCountSpinBox->value();
-       int numTracks = trackCountSpinBox->value();
+void ProjectManagerDialog::on_createSongButton_clicked( )
+{
+       Interface::instance()->show_newsong_dialog();
+}
        
-       Project* project;
-       if( (project = pm().create_new_project(numSongs, numTracks, title)) ) {
-               project->set_description(descriptionTextEdit->toPlainText());
-               project->set_engineer(newProjectEngineer->text());
-               project->save();
-               delete project;
-               update_projects_list();
-       } else {
-               info().warning(tr("Couldn't create project (%1)").arg(title) );
-       }
+void ProjectManagerDialog::redo_text_changed(const QString & text)
+{
+       redoButton->setText(text);
 }
 
-void ProjectManagerDialog::on_deleteProjectbutton_clicked( )
+void ProjectManagerDialog::undo_text_changed(const QString & text)
 {
-        // do we have the name of the project to delete ?
-       QString title = selectedProjectName->text();
+       undoButton->setText(text);
+}
 
-       if (title.isEmpty()) {
-               info().information(tr("You must supply a name for the 
project!") );
+void ProjectManagerDialog::on_undoButton_clicked()
+{
+       if (! m_project ) {
                return;
        }
 
-        // first test if project exists
-       if (!pm().project_exists(title)) {
-               info().warning(tr("Project does not exist! (%1)").arg(title));
-               return;
-       }
+       m_project->get_history_stack()->undo();
+}
 
-       switch (QMessageBox::information(this,
-               tr("Traverso - Question"),
-                  tr("Are you sure that you want to remove the project %1 ? 
It's not possible to undo it !").arg(title).toAscii().data(),
-                     "Yes", "No", QString::null, 1, -1)) {
-                             case 0:
-                                     pm().remove_project(title);
-                                     update_projects_list();
-                                     break;
-                             default:
+void ProjectManagerDialog::on_redoButton_clicked()
+{
+       if (! m_project ) {
                                      return;
-                                     break;
                      }
-                     return;
+       
+       m_project->get_history_stack()->redo();
 }
 
+void ProjectManagerDialog::on_songsExportButton_clicked()
+{
+       Interface::instance()->show_export_widget();
+}
 
-void ProjectManagerDialog::on_projectDirSelectButton_clicked( )
+void ProjectManagerDialog::on_exportTemplateButton_clicked()
 {
-       QString path = config().get_property("Project", "DefaultDirectory", 
getenv("HOME")).toString();
+}
        
-       QString newPath = QFileDialog::getExistingDirectory(this,
-                       tr("Choose an existing or create a new Project 
Directory"), path);
+//eof
                        
-       if (newPath.isEmpty() || newPath.isNull()) {
+void ProjectManagerDialog::accept()
+{
+       printf("accept\n");
+       if ( ! m_project ) {
+               hide();
                return;
        }
        
-       QDir dir;
+       m_project->set_description(descriptionTextEdit->toPlainText());
        
-       if (dir.exists(newPath)) {
-//             QMessageBox::information( interface, tr("Traverso - 
Information"), tr("Using existing Project directory: %1\n").arg(newPath), "OK", 
0 );
-       } else if (!dir.mkpath(newPath)) {
-               QMessageBox::warning( this, tr("Traverso - Warning"), 
tr("Unable to create Project directory! \n") +
-                               tr("Please check permission for this directory: 
%1").arg(newPath) );
+       hide();
+}
+
+void ProjectManagerDialog::reject()
+{
+       printf("reject\n");
+       if ( ! m_project ) {
+               hide();
                return;
-       } else {
-               QMessageBox::information( this, tr("Traverso - Information"), 
tr("Created new Project directory for you here: %1\n").arg(newPath), "OK", 0 );
        }
        
-       config().set_property("Project", "directory", newPath);
-       
-       update_projects_list();
+       descriptionTextEdit->setText(m_project->get_description());
+       hide();
 }
 
-
-//eof

Index: dialogs/project/ProjectManagerDialog.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/dialogs/project/ProjectManagerDialog.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- dialogs/project/ProjectManagerDialog.h      1 Mar 2007 00:20:17 -0000       
1.2
+++ dialogs/project/ProjectManagerDialog.h      3 Apr 2007 19:05:38 -0000       
1.3
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2005-2006 Remon Sijrier 
+    Copyright (C) 2005-2007 Remon Sijrier 
  
     This file is part of Traverso
  
@@ -17,33 +17,50 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  
-    $Id: ProjectManagerDialog.h,v 1.2 2007/03/01 00:20:17 r_sijrier Exp $
 */
 
-#ifndef PROJECT_MANAGER_DIALOG_H
-#define PROJECT_MANAGER_DIALOG_H
+#ifndef SONG_MANAGER_DIALOG_H
+#define SONG_MANAGER_DIALOG_H
 
 #include "ui_ProjectManagerDialog.h"
 #include <QDialog>
 
+class Project;
+class Song;
+
 class ProjectManagerDialog : public QDialog, protected Ui::ProjectManagerDialog
 {
-Q_OBJECT
+        Q_OBJECT
 
 public:
        ProjectManagerDialog(QWidget* parent = 0);
        ~ProjectManagerDialog();
 
+private:
+       Project* m_project;
+
 private slots:
-       void update_projects_list();
-       void on_loadProjectButton_clicked();
-       void on_createProjectButton_clicked();
-       void on_deleteProjectbutton_clicked();
-       void on_projectDirSelectButton_clicked();
-       void projectitem_clicked( QTreeWidgetItem* , int  );
+       void update_song_list();
+       void set_project(Project* project);
+       void songitem_clicked( QTreeWidgetItem* item, int);
+       void on_renameSongButton_clicked();
+        void on_deleteSongButton_clicked();
+        void on_createSongButton_clicked();
+       
+       void redo_text_changed(const QString& text);
+       void undo_text_changed(const QString& text);
+       
+       void on_undoButton_clicked();
+       void on_redoButton_clicked();
+       void on_songsExportButton_clicked();
+       void on_exportTemplateButton_clicked();
+       
+       void accept();
+       void reject();
 };
 
 #endif
 
 //eof
 
+

Index: Interface.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.cpp,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- Interface.cpp       3 Apr 2007 14:17:50 -0000       1.52
+++ Interface.cpp       3 Apr 2007 19:05:38 -0000       1.53
@@ -47,11 +47,11 @@
 
 #include "dialogs/settings/SettingsDialog.h"
 #include "dialogs/project/ProjectManagerDialog.h"
-#include "dialogs/project/SongManagerDialog.h"
+#include "dialogs/project/OpenCreateProjectDialog.h"
+#include <dialogs/project/NewSongDialog.h>
 #include "dialogs/CDTextDialog.h"
 #include "dialogs/MarkerDialog.h"
 #include "dialogs/BusSelectorDialog.h"
-#include <dialogs/NewSongDialog.h>
 
 
 // Always put me below _all_ includes, this is needed
@@ -169,7 +169,7 @@
        exportWidget = 0;
        m_settingsdialog = 0;
        m_projectManagerDialog = 0;
-       m_songManagerDialog = 0;
+       m_openCreateProjectDialog = 0;
        m_cdTextDialog = 0;
        m_markerDialog = 0;
        m_busSelector = 0;
@@ -337,7 +337,7 @@
        action = menu->addAction(tr("Open / Create"));
        
action->setIcon(style()->standardIcon(QStyle::SP_FileDialogContentsView));
        action->setShortcuts(QKeySequence::Open);
-       connect(action, SIGNAL(triggered(bool)), this, 
SLOT(show_project_manager_dialog()));
+       connect(action, SIGNAL(triggered(bool)), this, 
SLOT(show_open_create_project_dialog()));
        
        menu->addSeparator();
        
@@ -361,7 +361,7 @@
        action->setIcon(QIcon(find_pixmap(":/songmanager-16")));
        m_projectSongManagerAction = action;
        
-       connect(action, SIGNAL(triggered(bool)), this, 
SLOT(show_song_manager_dialog()));
+       connect(action, SIGNAL(triggered(bool)), this, 
SLOT(show_project_manager_dialog()));
        
        action = menu->addAction(tr("Export"));
        action->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
@@ -728,12 +728,12 @@
        return 0;
 }
 
-void Interface::show_song_manager_dialog()
+Command* Interface::show_open_create_project_dialog()
 {
-       if (! m_songManagerDialog ) {
-               m_songManagerDialog = new SongManagerDialog(this);
+       if (! m_openCreateProjectDialog ) {
+               m_openCreateProjectDialog = new OpenCreateProjectDialog(this);
        }
-       m_songManagerDialog->show();
+       m_openCreateProjectDialog->show();
 }
 
 Command * Interface::show_cdtext_dialog()

Index: Interface.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- Interface.h 3 Apr 2007 14:17:50 -0000       1.25
+++ Interface.h 3 Apr 2007 19:05:39 -0000       1.26
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2005-2006 Remon Sijrier 
+Copyright (C) 2005-2007 Remon Sijrier 
 
 This file is part of Traverso
 
@@ -54,7 +54,7 @@
 class SpectralMeterWidget;
 class SettingsDialog;
 class ProjectManagerDialog;
-class SongManagerDialog;
+class OpenCreateProjectDialog;
 class InfoToolBar;
 class SysInfoToolBar;
 class CDTextDialog;
@@ -101,7 +101,7 @@
        SpectralMeterWidget*    spectralMeter;
        SettingsDialog*         m_settingsdialog;
        ProjectManagerDialog*   m_projectManagerDialog;
-       SongManagerDialog*      m_songManagerDialog;
+       OpenCreateProjectDialog*        m_openCreateProjectDialog;
        CDTextDialog*           m_cdTextDialog;
        MarkerDialog*           m_markerDialog;
        InfoToolBar*            m_infoBar;
@@ -139,13 +139,13 @@
        void set_fade_in_shape(QAction* action);
        void set_fade_out_shape(QAction* action);
        void toggle_OpenGL(bool);
-       void show_song_manager_dialog();
 
        Command* show_song_widget();
        Command* full_screen();
        Command* about_traverso();
        Command* show_export_widget();
        Command* show_context_menu();
+       Command* show_open_create_project_dialog();
        Command* show_project_manager_dialog();
        Command* show_cdtext_dialog();
        Command* show_marker_dialog();

Index: traverso.pro
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/traverso.pro,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -b -r1.37 -r1.38
--- traverso.pro        3 Apr 2007 14:17:50 -0000       1.37
+++ traverso.pro        3 Apr 2007 19:05:39 -0000       1.38
@@ -45,7 +45,6 @@
        precompile.h \
        dialogs/settings/Pages.h \
        dialogs/settings/SettingsDialog.h \
-       dialogs/project/SongManagerDialog.h \
        dialogs/project/ProjectManagerDialog.h \
        songcanvas/MarkerView.h \
        widgets/InfoWidgets.h \
@@ -53,7 +52,8 @@
        dialogs/CDTextDialog.h \
        dialogs/MarkerDialog.h \
        dialogs/BusSelectorDialog.h \
-       dialogs/NewSongDialog.h
+       dialogs/project/NewSongDialog.h \
+       dialogs/project/OpenCreateProjectDialog.h
 SOURCES += \
        Traverso.cpp \
        AudioSourcesTreeWidget.cpp \
@@ -74,7 +74,6 @@
        QuickDriverConfigWidget.cpp \
        dialogs/settings/Pages.cpp \
        dialogs/settings/SettingsDialog.cpp \
-       dialogs/project/SongManagerDialog.cpp \
        dialogs/project/ProjectManagerDialog.cpp \
        songcanvas/MarkerView.cpp \
        widgets/InfoWidgets.cpp \
@@ -82,7 +81,8 @@
        dialogs/CDTextDialog.cpp \
        dialogs/MarkerDialog.cpp \
        dialogs/BusSelectorDialog.cpp \
-       dialogs/NewSongDialog.cpp
+       dialogs/project/NewSongDialog.cpp \
+       dialogs/project/OpenCreateProjectDialog.cpp
 FORMS += ui/ExportWidget.ui \
        ui/AudioSourcesManagerWidget.ui \
        ui/PluginSelectorDialog.ui \
@@ -100,7 +100,7 @@
        ui/MarkerDialog.ui \
        ui/CDTextDialog.ui \
        ui/BusSelectorDialog.ui \
-       ui/NewSongdialog.ui \
+       ui/OpenCreateProjectDialog.ui \
 
 
 INCLUDEPATH +=         ../core \
@@ -145,7 +145,8 @@
 
     # perhaps this doesn't cover mac os x ?
     # if so, copy paste into  macx section...
-    $$system(pkg-config --libs glib-2.0)}
+    LIBS += $$system(pkg-config --libs glib-2.0)
+}
 
 
 win32{

Index: ui/ProjectManagerDialog.ui
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/ui/ProjectManagerDialog.ui,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- ui/ProjectManagerDialog.ui  21 Mar 2007 19:21:26 -0000      1.6
+++ ui/ProjectManagerDialog.ui  3 Apr 2007 19:05:39 -0000       1.7
@@ -5,97 +5,56 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>520</width>
-    <height>450</height>
+    <width>581</width>
+    <height>281</height>
    </rect>
   </property>
-  <property name="minimumSize" >
-   <size>
-    <width>500</width>
-    <height>410</height>
-   </size>
-  </property>
   <property name="maximumSize" >
    <size>
-    <width>520</width>
-    <height>450</height>
+    <width>600</width>
+    <height>500</height>
    </size>
   </property>
   <property name="windowTitle" >
-   <string>Open / Create Project</string>
-  </property>
-  <layout class="QHBoxLayout" >
-   <property name="margin" >
-    <number>9</number>
-   </property>
-   <property name="spacing" >
-    <number>6</number>
+   <string>Dialog</string>
    </property>
-   <item>
     <layout class="QVBoxLayout" >
      <property name="margin" >
-      <number>0</number>
+    <number>9</number>
      </property>
      <property name="spacing" >
       <number>6</number>
      </property>
-    </layout>
-   </item>
    <item>
-    <layout class="QVBoxLayout" >
-     <property name="margin" >
+    <widget class="QTabWidget" name="tabWidget" >
+     <property name="currentIndex" >
       <number>0</number>
      </property>
-     <property name="spacing" >
-      <number>6</number>
-     </property>
-     <item>
-      <widget class="QTreeWidget" name="projectListView" >
-       <property name="sizePolicy" >
-        <sizepolicy>
-         <hsizetype>7</hsizetype>
-         <vsizetype>7</vsizetype>
-         <horstretch>2</horstretch>
-         <verstretch>4</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize" >
-        <size>
-         <width>230</width>
-         <height>0</height>
-        </size>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <layout class="QHBoxLayout" >
+     <widget class="QWidget" name="tab_4" >
+      <attribute name="title" >
+       <string>Project</string>
+      </attribute>
+      <layout class="QGridLayout" >
        <property name="margin" >
-        <number>0</number>
+        <number>9</number>
        </property>
        <property name="spacing" >
         <number>6</number>
        </property>
-       <item>
-        <widget class="QPushButton" name="projectDirSelectButton" >
-         <property name="text" >
-          <string>Select Project Dir</string>
+       <item rowspan="2" row="0" column="0" >
+        <widget class="QGroupBox" name="groupBox_3" >
+         <property name="title" >
+          <string>Informational</string>
          </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-    </layout>
-   </item>
-   <item>
     <layout class="QVBoxLayout" >
      <property name="margin" >
-      <number>0</number>
+           <number>9</number>
      </property>
      <property name="spacing" >
       <number>6</number>
      </property>
      <item>
-      <layout class="QVBoxLayout" >
+           <layout class="QHBoxLayout" >
        <property name="margin" >
         <number>0</number>
        </property>
@@ -103,50 +62,30 @@
         <number>6</number>
        </property>
        <item>
-        <widget class="QGroupBox" name="groupBox_2" >
+             <widget class="QLabel" name="label" >
          <property name="minimumSize" >
           <size>
-           <width>16</width>
-           <height>90</height>
+                <width>100</width>
+                <height>0</height>
           </size>
          </property>
-         <property name="title" >
-          <string>Selected Project</string>
-         </property>
-         <layout class="QVBoxLayout" >
-          <property name="margin" >
-           <number>9</number>
-          </property>
-          <property name="spacing" >
-           <number>9</number>
+              <property name="text" >
+               <string>Description</string>
           </property>
+             </widget>
+            </item>
           <item>
-           <widget class="QLineEdit" name="selectedProjectName" >
-            <property name="enabled" >
-             <bool>false</bool>
-            </property>
-            <property name="sizePolicy" >
-             <sizepolicy>
-              <hsizetype>7</hsizetype>
-              <vsizetype>0</vsizetype>
-              <horstretch>1</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="minimumSize" >
+             <widget class="QTextEdit" name="descriptionTextEdit" >
+              <property name="maximumSize" >
              <size>
-              <width>50</width>
-              <height>0</height>
+                <width>16777215</width>
+                <height>50</height>
              </size>
             </property>
-            <property name="mouseTracking" >
-             <bool>true</bool>
-            </property>
-            <property name="readOnly" >
-             <bool>false</bool>
-            </property>
            </widget>
           </item>
+           </layout>
+          </item>
           <item>
            <layout class="QHBoxLayout" >
             <property name="margin" >
@@ -156,139 +95,123 @@
              <number>6</number>
             </property>
             <item>
-             <widget class="QPushButton" name="deleteProjectbutton" >
+             <widget class="QLabel" name="label_2" >
+              <property name="minimumSize" >
+               <size>
+                <width>100</width>
+                <height>0</height>
+               </size>
+              </property>
               <property name="text" >
-               <string>Delete</string>
+               <string>Engineer</string>
               </property>
              </widget>
             </item>
             <item>
+             <widget class="QLineEdit" name="lineEdit" />
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="2" column="0" >
              <spacer>
               <property name="orientation" >
-               <enum>Qt::Horizontal</enum>
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Maximum</enum>
               </property>
               <property name="sizeHint" >
                <size>
-                <width>61</width>
-                <height>27</height>
+           <width>20</width>
+           <height>40</height>
                </size>
               </property>
              </spacer>
             </item>
-            <item>
-             <widget class="QPushButton" name="loadProjectButton" >
-              <property name="text" >
-               <string>Load</string>
+       <item rowspan="2" row="1" column="2" >
+        <spacer>
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
               </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-         </layout>
-        </widget>
+         <property name="sizeHint" >
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
        </item>
-       <item>
+       <item row="0" column="2" >
         <widget class="QGroupBox" name="groupBox" >
          <property name="minimumSize" >
           <size>
-           <width>16</width>
-           <height>110</height>
+           <width>150</width>
+           <height>0</height>
           </size>
          </property>
          <property name="title" >
-          <string>New Project</string>
+          <string>Export</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>
+           <number>9</number>
             </property>
             <item>
-             <widget class="QLabel" name="label_2_2" >
-              <property name="minimumSize" >
-               <size>
-                <width>70</width>
-                <height>0</height>
-               </size>
-              </property>
+           <widget class="QPushButton" name="songsExportButton" >
               <property name="text" >
-               <string>Name</string>
+             <string>Song(s)</string>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QLineEdit" name="newProjectName" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>7</hsizetype>
-                <vsizetype>0</vsizetype>
-                <horstretch>2</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="minimumSize" >
-               <size>
-                <width>100</width>
-                <height>0</height>
-               </size>
+           <widget class="QPushButton" name="exportTemplateButton" >
+            <property name="text" >
+             <string>Template</string>
               </property>
              </widget>
             </item>
            </layout>
+        </widget>
           </item>
-          <item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab" >
+      <attribute name="title" >
+       <string>Songs</string>
+      </attribute>
            <layout class="QHBoxLayout" >
             <property name="margin" >
-             <number>0</number>
+        <number>9</number>
             </property>
             <property name="spacing" >
              <number>6</number>
             </property>
             <item>
-             <widget class="QLabel" name="label" >
-              <property name="minimumSize" >
-               <size>
-                <width>0</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="text" >
-               <string>Description</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QTextEdit" name="descriptionTextEdit" >
+        <widget class="QTreeWidget" name="treeSongWidget" >
               <property name="sizePolicy" >
                <sizepolicy>
                 <hsizetype>7</hsizetype>
                 <vsizetype>7</vsizetype>
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
+           <horstretch>10</horstretch>
+           <verstretch>5</verstretch>
                </sizepolicy>
               </property>
-              <property name="maximumSize" >
+         <property name="minimumSize" >
                <size>
-                <width>16777215</width>
-                <height>30</height>
+           <width>250</width>
+           <height>120</height>
                </size>
               </property>
              </widget>
             </item>
-           </layout>
-          </item>
           <item>
-           <layout class="QHBoxLayout" >
+        <layout class="QVBoxLayout" >
             <property name="margin" >
              <number>0</number>
             </property>
@@ -296,32 +219,27 @@
              <number>6</number>
             </property>
             <item>
-             <widget class="QLabel" name="label_3_2" >
+          <widget class="QGroupBox" name="groupBox_4" >
+           <property name="title" >
+            <string>Selected Song</string>
+           </property>
+           <layout class="QVBoxLayout" >
+            <property name="margin" >
+             <number>9</number>
+            </property>
+            <property name="spacing" >
+             <number>6</number>
+            </property>
+            <item>
+             <widget class="QLineEdit" name="selectedSongName" >
               <property name="minimumSize" >
                <size>
-                <width>70</width>
+                <width>0</width>
                 <height>0</height>
                </size>
               </property>
-              <property name="text" >
-               <string>Engineer</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QLineEdit" name="newProjectEngineer" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>7</hsizetype>
-                <vsizetype>5</vsizetype>
-                <horstretch>2</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
              </widget>
             </item>
-           </layout>
-          </item>
           <item>
            <layout class="QHBoxLayout" >
             <property name="margin" >
@@ -331,84 +249,56 @@
              <number>6</number>
             </property>
             <item>
-             <widget class="QLabel" name="label_2_2_2" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>5</hsizetype>
-                <vsizetype>5</vsizetype>
-                <horstretch>2</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
+               <widget class="QPushButton" name="deleteSongButton" >
               <property name="text" >
-               <string>Song count</string>
+                 <string>Delete</string>
+                </property>
+                <property name="autoDefault" >
+                 <bool>false</bool>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QSpinBox" name="songCountSpinBox" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>1</hsizetype>
-                <vsizetype>0</vsizetype>
-                <horstretch>1</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
+               <spacer>
+                <property name="orientation" >
+                 <enum>Qt::Horizontal</enum>
               </property>
-              <property name="minimumSize" >
+                <property name="sizeType" >
+                 <enum>QSizePolicy::Minimum</enum>
+                </property>
+                <property name="sizeHint" >
                <size>
-                <width>40</width>
-                <height>0</height>
+                  <width>1</width>
+                  <height>20</height>
                </size>
               </property>
-              <property name="minimum" >
-               <number>1</number>
-              </property>
-              <property name="value" >
-               <number>1</number>
+               </spacer>
+              </item>
+              <item>
+               <widget class="QPushButton" name="renameSongButton" >
+                <property name="text" >
+                 <string>Rename</string>
               </property>
              </widget>
             </item>
            </layout>
           </item>
+           </layout>
+          </widget>
+         </item>
           <item>
+          <widget class="QGroupBox" name="groupBox_2" >
+           <property name="title" >
+            <string>New Song</string>
+           </property>
            <layout class="QHBoxLayout" >
             <property name="margin" >
-             <number>0</number>
+             <number>9</number>
             </property>
             <property name="spacing" >
              <number>6</number>
             </property>
             <item>
-             <widget class="QLabel" name="label_2" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>5</hsizetype>
-                <vsizetype>5</vsizetype>
-                <horstretch>2</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="text" >
-               <string>Tracks per Song</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QSpinBox" name="trackCountSpinBox" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>1</hsizetype>
-                <vsizetype>0</vsizetype>
-                <horstretch>1</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item>
            <layout class="QHBoxLayout" >
             <property name="margin" >
              <number>0</number>
@@ -417,32 +307,36 @@
              <number>6</number>
             </property>
             <item>
-             <widget class="QLabel" name="label_4_2" >
-              <property name="minimumSize" >
-               <size>
-                <width>70</width>
-                <height>0</height>
-               </size>
-              </property>
+               <widget class="QPushButton" name="createSongButton" >
               <property name="text" >
-               <string>Template</string>
+                 <string>Create new Song</string>
               </property>
              </widget>
             </item>
+             </layout>
+            </item>
+           </layout>
+          </widget>
+         </item>
             <item>
-             <widget class="QComboBox" name="templateComboBox" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>5</hsizetype>
-                <vsizetype>0</vsizetype>
-                <horstretch>2</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
+          <spacer>
+           <property name="orientation" >
+            <enum>Qt::Vertical</enum>
               </property>
-             </widget>
+           <property name="sizeHint" >
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
             </item>
            </layout>
           </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
           <item>
            <layout class="QHBoxLayout" >
             <property name="margin" >
@@ -452,50 +346,38 @@
              <number>6</number>
             </property>
             <item>
-             <spacer>
-              <property name="orientation" >
-               <enum>Qt::Horizontal</enum>
+      <layout class="QHBoxLayout" >
+       <property name="margin" >
+        <number>0</number>
               </property>
-              <property name="sizeHint" >
-               <size>
-                <width>40</width>
-                <height>20</height>
-               </size>
+       <property name="spacing" >
+        <number>6</number>
               </property>
-             </spacer>
-            </item>
             <item>
-             <widget class="QPushButton" name="createProjectButton" >
-              <property name="sizePolicy" >
-               <sizepolicy>
-                <hsizetype>5</hsizetype>
-                <vsizetype>0</vsizetype>
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
+        <widget class="QPushButton" name="undoButton" >
+         <property name="maximumSize" >
+          <size>
+           <width>16777215</width>
+           <height>22</height>
+          </size>
               </property>
               <property name="text" >
-               <string>Create</string>
+          <string/>
               </property>
              </widget>
             </item>
-           </layout>
-          </item>
-         </layout>
-        </widget>
-       </item>
        <item>
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" >
+        <widget class="QPushButton" name="redoButton" >
+         <property name="maximumSize" >
           <size>
-           <width>254</width>
-           <height>16</height>
+           <width>16777215</width>
+           <height>22</height>
           </size>
          </property>
-        </spacer>
+         <property name="text" >
+          <string/>
+         </property>
+        </widget>
        </item>
       </layout>
      </item>
@@ -505,7 +387,7 @@
         <enum>Qt::Horizontal</enum>
        </property>
        <property name="standardButtons" >
-        <set>QDialogButtonBox::Close</set>
+        
<set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
        </property>
       </widget>
      </item>
@@ -516,66 +398,50 @@
  <resources/>
  <connections>
   <connection>
-   <sender>projectListView</sender>
-   <signal>doubleClicked(QModelIndex)</signal>
-   <receiver>loadProjectButton</receiver>
-   <slot>animateClick()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>196</x>
-     <y>204</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>460</x>
-     <y>310</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>newProjectName</sender>
+   <sender>selectedSongName</sender>
    <signal>returnPressed()</signal>
-   <receiver>createProjectButton</receiver>
-   <slot>click()</slot>
+   <receiver>renameSongButton</receiver>
+   <slot>animateClick()</slot>
    <hints>
     <hint type="sourcelabel" >
-     <x>215</x>
-     <y>444</y>
+     <x>548</x>
+     <y>96</y>
     </hint>
     <hint type="destinationlabel" >
-     <x>427</x>
-     <y>503</y>
+     <x>547</x>
+     <y>130</y>
     </hint>
    </hints>
   </connection>
   <connection>
-   <sender>newProjectEngineer</sender>
-   <signal>returnPressed()</signal>
-   <receiver>createProjectButton</receiver>
-   <slot>click()</slot>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ProjectManagerDialog</receiver>
+   <slot>accept()</slot>
    <hints>
     <hint type="sourcelabel" >
-     <x>235</x>
-     <y>475</y>
+     <x>543</x>
+     <y>250</y>
     </hint>
     <hint type="destinationlabel" >
-     <x>408</x>
-     <y>503</y>
+     <x>576</x>
+     <y>219</y>
     </hint>
    </hints>
   </connection>
   <connection>
    <sender>buttonBox</sender>
-   <signal>clicked(QAbstractButton*)</signal>
+   <signal>rejected()</signal>
    <receiver>ProjectManagerDialog</receiver>
-   <slot>accept()</slot>
+   <slot>reject()</slot>
    <hints>
     <hint type="sourcelabel" >
-     <x>29</x>
-     <y>547</y>
+     <x>477</x>
+     <y>254</y>
     </hint>
     <hint type="destinationlabel" >
-     <x>355</x>
-     <y>527</y>
+     <x>492</x>
+     <y>240</y>
     </hint>
    </hints>
   </connection>

Index: ui/SongManagerDialog.ui
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/ui/SongManagerDialog.ui,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- ui/SongManagerDialog.ui     3 Apr 2007 14:17:50 -0000       1.5
+++ ui/SongManagerDialog.ui     3 Apr 2007 19:05:39 -0000       1.6
@@ -1,17 +1,17 @@
 <ui version="4.0" >
- <class>SongManagerDialog</class>
- <widget class="QDialog" name="SongManagerDialog" >
+ <class>ProjectManagerDialog</class>
+ <widget class="QDialog" name="ProjectManagerDialog" >
   <property name="geometry" >
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>530</width>
-    <height>236</height>
+    <width>600</width>
+    <height>309</height>
    </rect>
   </property>
   <property name="maximumSize" >
    <size>
-    <width>530</width>
+    <width>600</width>
     <height>500</height>
    </size>
   </property>
@@ -26,9 +26,22 @@
     <number>6</number>
    </property>
    <item>
+    <widget class="QTabWidget" name="tabWidget" >
+     <property name="currentIndex" >
+      <number>1</number>
+     </property>
+     <widget class="QWidget" name="tab_4" >
+      <attribute name="title" >
+       <string>Project</string>
+      </attribute>
+     </widget>
+     <widget class="QWidget" name="tab" >
+      <attribute name="title" >
+       <string>Songs</string>
+      </attribute>
     <layout class="QHBoxLayout" >
      <property name="margin" >
-      <number>0</number>
+        <number>9</number>
      </property>
      <property name="spacing" >
       <number>6</number>
@@ -39,7 +52,7 @@
         <sizepolicy>
          <hsizetype>7</hsizetype>
          <vsizetype>7</vsizetype>
-         <horstretch>2</horstretch>
+           <horstretch>10</horstretch>
          <verstretch>5</verstretch>
         </sizepolicy>
        </property>
@@ -60,14 +73,6 @@
         <number>6</number>
        </property>
        <item>
-        <layout class="QVBoxLayout" >
-         <property name="margin" >
-          <number>0</number>
-         </property>
-         <property name="spacing" >
-          <number>6</number>
-         </property>
-         <item>
           <widget class="QGroupBox" name="groupBox_4" >
            <property name="title" >
             <string>Selected Song</string>
@@ -113,11 +118,11 @@
                  <enum>Qt::Horizontal</enum>
                 </property>
                 <property name="sizeType" >
-                 <enum>QSizePolicy::Preferred</enum>
+                 <enum>QSizePolicy::Minimum</enum>
                 </property>
                 <property name="sizeHint" >
                  <size>
-                  <width>40</width>
+                  <width>10</width>
                   <height>20</height>
                  </size>
                 </property>
@@ -167,8 +172,6 @@
            </layout>
           </widget>
          </item>
-        </layout>
-       </item>
        <item>
         <spacer>
          <property name="orientation" >
@@ -185,6 +188,52 @@
       </layout>
      </item>
     </layout>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" >
+     <property name="margin" >
+      <number>0</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="QPushButton" name="undoPushButton" >
+         <property name="maximumSize" >
+          <size>
+           <width>16777215</width>
+           <height>22</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>undotext</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="redoPushButton" >
+         <property name="maximumSize" >
+          <size>
+           <width>16777215</width>
+           <height>22</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string>redotext</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
    </item>
    <item>
     <widget class="QDialogButtonBox" name="buttonBox" >
@@ -197,38 +246,40 @@
     </widget>
    </item>
   </layout>
+   </item>
+  </layout>
  </widget>
  <resources/>
  <connections>
   <connection>
-   <sender>selectedSongName</sender>
-   <signal>returnPressed()</signal>
-   <receiver>renameSongButton</receiver>
-   <slot>animateClick()</slot>
+   <sender>buttonBox</sender>
+   <signal>clicked(QAbstractButton*)</signal>
+   <receiver>ProjectManagerDialog</receiver>
+   <slot>accept()</slot>
    <hints>
     <hint type="sourcelabel" >
-     <x>189</x>
-     <y>254</y>
+     <x>520</x>
+     <y>424</y>
     </hint>
     <hint type="destinationlabel" >
-     <x>202</x>
-     <y>272</y>
+     <x>526</x>
+     <y>327</y>
     </hint>
    </hints>
   </connection>
   <connection>
-   <sender>buttonBox</sender>
-   <signal>clicked(QAbstractButton*)</signal>
-   <receiver>SongManagerDialog</receiver>
-   <slot>accept()</slot>
+   <sender>selectedSongName</sender>
+   <signal>returnPressed()</signal>
+   <receiver>renameSongButton</receiver>
+   <slot>animateClick()</slot>
    <hints>
     <hint type="sourcelabel" >
-     <x>515</x>
-     <y>332</y>
+     <x>484</x>
+     <y>114</y>
     </hint>
     <hint type="destinationlabel" >
-     <x>526</x>
-     <y>327</y>
+     <x>497</x>
+     <y>148</y>
     </hint>
    </hints>
   </connection>

Index: dialogs/project/NewSongDialog.cpp
===================================================================
RCS file: dialogs/project/NewSongDialog.cpp
diff -N dialogs/project/NewSongDialog.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ dialogs/project/NewSongDialog.cpp   3 Apr 2007 19:05:38 -0000       1.1
@@ -0,0 +1,125 @@
+/*
+Copyright (C) 2007 Remon Sijrier 
+
+This file is part of Traverso
+
+Traverso is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+
+*/
+
+
+#include "NewSongDialog.h"
+
+#include <libtraversocore.h>
+
+NewSongDialog::NewSongDialog(QWidget * parent)
+       : QDialog(parent)
+{
+       setupUi(this);
+       
+       trackCountSpinBox->setValue(config().get_property("Song", 
"trackCreationCount", 4).toInt());
+       
+       set_project(pm().get_project());
+       
+       connect(&pm(), SIGNAL(projectLoaded(Project*)), this, 
SLOT(set_project(Project*)));
+       connect(useTemplateCheckBox, SIGNAL(stateChanged (int)), this, 
SLOT(use_template_checkbox_state_changed(int)));
+}
+
+void NewSongDialog::accept()
+{
+       if (! m_project) {
+               info().information(tr("I can't create a new Song if here is no 
Project loaded!!"));
+               return;
+       }
+       
+       int count = countSpinBox->value();
+       int trackcount = trackCountSpinBox->value();
+       QString title = titleLineEdit->text();
+       
+       if (title.isEmpty()) {
+               title = "Untitled";
+       }
+       
+       int index = templateComboBox->currentIndex();
+       printf("index is %d\n", index);
+       bool usetemplate = false;
+       QDomNode node;
+       if (useTemplateCheckBox->isChecked() && index >= 0) {
+               usetemplate = true;
+               Song* templatesong = 
m_project->get_song(templateComboBox->itemData(index).toLongLong());
+               Q_ASSERT(templatesong);
+               QDomDocument doc("Song");
+               node = templatesong->get_state(doc, usetemplate);
+       }
+       
+       for (int i=0; i<count; ++i) {
+               Song* song;
+               if (usetemplate) {
+                       song = new Song(m_project);
+                       song->set_state(node);
+               } else {
+                       song = new Song(m_project, trackcount);
+               }
+               song->set_title(title);
+               Command::process_command(m_project->add_song(song));
+       }
+               
+       hide();
+}
+
+void NewSongDialog::set_project(Project * project)
+{
+       m_project = project;
+       
+       if (! m_project) {
+               templateComboBox->clear();
+               return;
+       }
+       
+       connect(m_project, SIGNAL(songAdded(Song*)), this, 
SLOT(update_template_combo()));
+       connect(m_project, SIGNAL(songRemoved(Song*)), this, 
SLOT(update_template_combo()));
+       
+       update_template_combo();
+}
+
+void NewSongDialog::reject()
+{
+       hide();
+}
+
+void NewSongDialog::update_template_combo()
+{
+       templateComboBox->clear();
+       
+       foreach(Song* song, m_project->get_songs()) {
+               QString text = "Song " + 
QString::number(m_project->get_song_index(song->get_id())) +
+                               " " + song->get_title();
+               
+               templateComboBox->addItem(text, song->get_id());
+               connect(song, SIGNAL(propertyChanged()), this, 
SLOT(update_template_combo()));
+       }
+}
+
+void NewSongDialog::use_template_checkbox_state_changed(int state)
+{
+       if (state == Qt::Checked) {
+               templateComboBox->setEnabled(true);
+               trackCountSpinBox->setEnabled(false);
+       } else {
+               templateComboBox->setEnabled(false);
+               trackCountSpinBox->setEnabled(true);
+       }
+}
+

Index: dialogs/project/NewSongDialog.h
===================================================================
RCS file: dialogs/project/NewSongDialog.h
diff -N dialogs/project/NewSongDialog.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ dialogs/project/NewSongDialog.h     3 Apr 2007 19:05:38 -0000       1.1
@@ -0,0 +1,53 @@
+/*
+Copyright (C) 2007 Remon Sijrier 
+
+This file is part of Traverso
+
+Traverso is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+
+*/
+
+#ifndef NEW_SONG_DIALOG_H
+#define NEW_SONG_DIALOG_H
+
+#include "ui_NewSongDialog.h"
+
+#include <QDialog>
+
+class Project;
+
+class NewSongDialog : public QDialog, protected Ui::NewSongDialog
+{
+       Q_OBJECT
+
+public:
+       NewSongDialog(QWidget* parent = 0);
+       ~NewSongDialog() {};
+       
+       
+private:
+       Project* m_project;
+       
+
+private slots:
+       void accept();
+       void reject();
+       void set_project(Project* project);
+       void update_template_combo();
+       void use_template_checkbox_state_changed(int state);
+
+};
+
+#endif

Index: dialogs/project/OpenCreateProjectDialog.cpp
===================================================================
RCS file: dialogs/project/OpenCreateProjectDialog.cpp
diff -N dialogs/project/OpenCreateProjectDialog.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ dialogs/project/OpenCreateProjectDialog.cpp 3 Apr 2007 19:05:38 -0000       
1.1
@@ -0,0 +1,288 @@
+/*
+    Copyright (C) 2005-2006 Remon Sijrier 
+ 
+    This file is part of Traverso
+ 
+    Traverso is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+ 
+    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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ 
+*/
+
+#include "OpenCreateProjectDialog.h"
+#include "ui_OpenCreateProjectDialog.h"
+
+#include <QDir>
+#include <QStringList>
+#include <QMessageBox>
+#include <QTextStream>
+#include <QDomDocument>
+#include <QFileDialog>
+#include <QHeaderView>
+
+#include <Config.h>
+#include <Information.h>
+#include <ProjectManager.h>
+#include <Project.h>
+#include <Utils.h>
+
+
+// Always put me below _all_ includes, this is needed
+// in case we run with memory leak detection enabled!
+#include "Debugger.h"
+
+OpenCreateProjectDialog::OpenCreateProjectDialog( QWidget * parent )
+       : QDialog(parent)
+{
+       setupUi(this);
+       projectListView->setColumnCount(2);
+       update_projects_list();
+       QStringList stringList;
+       stringList << "Project Name" << "Songs";
+       projectListView->setHeaderLabels(stringList);
+       
+       projectListView->header()->resizeSection(0, 160);
+       projectListView->header()->resizeSection(1, 30);
+       
+       trackCountSpinBox->setValue(config().get_property("Song", 
"trackCreationCount", 4).toInt());
+
+
+       connect(projectListView, SIGNAL(itemClicked(QTreeWidgetItem*,int)), 
this, SLOT(projectitem_clicked(QTreeWidgetItem*,int)));
+}
+
+OpenCreateProjectDialog::~ OpenCreateProjectDialog( )
+{}
+
+void OpenCreateProjectDialog::update_projects_list()
+{
+       projectListView->clear();
+       
+       QString path = config().get_property("Project", "directory", 
getenv("HOME")).toString();
+
+       QDir dir(path);
+
+       QStringList list = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+       
+       foreach(QString dirname, list) {
+       
+               /************ FROM HERE ****************/
+               QDomDocument doc("Project");
+               QString fileToOpen = path + "/" + dirname + "/project.traverso";
+               
+               QFile file(fileToOpen);
+
+               if (!file.open(QIODevice::ReadOnly)) {
+                       PWARN("OpenCreateProjectDialog:: Cannot open project 
properties file (%s)", fileToOpen.toAscii().data());
+                       continue;
+               }
+
+               QString errorMsg;
+               if (!doc.setContent(&file, &errorMsg)) {
+                       file.close();
+                       PWARN("OpenCreateProjectDialog:: Cannot set content of 
XML file (%s)", errorMsg.toAscii().data());
+                       continue;
+               }
+
+               file.close();
+
+               QDomElement docElem = doc.documentElement();
+               QDomNode propertiesNode = 
docElem.firstChildElement("Properties");
+               QDomElement e = propertiesNode.toElement();
+               QString title = e.attribute( "title", "" );
+               QString description = e.attribute("description", "No 
description set");
+               qint64 id = e.attribute( "id", "" ).toLongLong();
+               
+
+               QDomNode songsNode = docElem.firstChildElement("Songs");
+               QDomNode songNode = songsNode.firstChild();
+               int songCounter = 0;
+               
+               // count to get Songs number....
+               while(!songNode.isNull()) {
+                       songCounter++;
+                       songNode = songNode.nextSibling();
+               }
+
+               QString sNumSongs = QString::number(songCounter);
+
+               /*********** TO HERE THIS CODE IS DUPLICATE FROM THAT IN 
PROJECT.CC :-( 
+               Don't know if this is avoidable at all *********/
+
+
+               QTreeWidgetItem* item = new QTreeWidgetItem(projectListView);
+               item->setTextAlignment(0, Qt::AlignLeft);
+               item->setTextAlignment(1, Qt::AlignHCenter);
+               item->setText(0, title);
+               item->setText(1, sNumSongs);
+               QString html = "<html><head></head><body>Project: " + title + 
"<br /><br />";
+               html += tr("Description:") + "<br />";
+               html += description + "<br /><br />";
+               html += tr("Created on:") + " " + 
extract_date_time(id).toString() + "<br />";
+               html += "</body></html>";
+               item->setToolTip(0, html);
+       }
+}
+
+void OpenCreateProjectDialog::projectitem_clicked( QTreeWidgetItem* item, int)
+{
+       if (item) {
+               selectedProjectName->setText(item->text(0));
+       }
+}
+
+void OpenCreateProjectDialog::on_loadProjectButton_clicked( )
+{
+        // do we have the name of the project to load ?
+       QString title;
+       if (projectListView->currentItem()) {
+               title = projectListView->currentItem()->text(0);
+       }
+
+       if (title.isEmpty()) {
+               info().warning(tr("No Project selected!") );
+               info().information(tr("Select a project and click the 'Load' 
button again") );
+               return;
+       }
+       
+       Project* project = pm().get_project();
+
+       
+       if (project && (project->get_title() == title)) {
+               QMessageBox::StandardButton button = QMessageBox::question(this,
+                       "Traverso - Question",
+                       "Are you sure you want to reopen the current project ?",
+                       QMessageBox::Ok | QMessageBox::Cancel,
+                       QMessageBox::Cancel );
+               if (button == QMessageBox::Cancel) {
+                       return;
+               }
+       }
+               
+       // first test if project exists
+       // Note: this shouldn't be needed really, the projects in the view
+       // should exist, but just in case someone removed it, you never know!
+       if (!pm().project_exists(title)) {
+               info().warning(tr("Project does not exist! (%1)").arg(title));
+               return;
+       }
+       
+       if (pm().load_project(title)<0) {
+               PERROR("Could not load project %s", title.toAscii().data());
+       }
+}
+
+void OpenCreateProjectDialog::on_createProjectButton_clicked( )
+{
+
+        // do we have the name of the project to create ?
+       QString title = newProjectName->text();
+       
+       if (title.length() == 0) {
+               info().information(tr("You must supply a name for the 
project!") );
+               return;
+       }
+
+
+       // first test if project exists already
+       if (pm().project_exists(title)) {
+               switch (QMessageBox::information(this,
+                       tr("Traverso - Question"),
+                       tr("The Project \"%1\" already exists, do you want to 
remove it and replace it with a new one ?").arg(title),
+                       tr("Yes"), tr("No"), QString::null, 1, -1)) 
+               {
+                       case 0:
+                       pm().remove_project(title);
+                       break;
+                       default:
+                       return;
+                       break;
+               }
+       }
+       
+       int numSongs = songCountSpinBox->value();
+       int numTracks = trackCountSpinBox->value();
+       
+       Project* project;
+       if( (project = pm().create_new_project(numSongs, numTracks, title)) ) {
+               project->set_description(descriptionTextEdit->toPlainText());
+               project->set_engineer(newProjectEngineer->text());
+               project->save();
+               delete project;
+               update_projects_list();
+       } else {
+               info().warning(tr("Couldn't create project (%1)").arg(title) );
+       }
+}
+
+void OpenCreateProjectDialog::on_deleteProjectbutton_clicked( )
+{
+        // do we have the name of the project to delete ?
+       QString title = selectedProjectName->text();
+
+       if (title.isEmpty()) {
+               info().information(tr("You must supply a name for the 
project!") );
+               return;
+       }
+
+        // first test if project exists
+       if (!pm().project_exists(title)) {
+               info().warning(tr("Project does not exist! (%1)").arg(title));
+               return;
+       }
+
+       switch (QMessageBox::information(this,
+               tr("Traverso - Question"),
+                  tr("Are you sure that you want to remove the project %1 ? 
It's not possible to undo it !").arg(title).toAscii().data(),
+                     "Yes", "No", QString::null, 1, -1)) {
+                             case 0:
+                                     pm().remove_project(title);
+                                     update_projects_list();
+                                     break;
+                             default:
+                                     return;
+                                     break;
+                     }
+                     return;
+}
+
+
+void OpenCreateProjectDialog::on_projectDirSelectButton_clicked( )
+{
+       QString path = config().get_property("Project", "DefaultDirectory", 
getenv("HOME")).toString();
+       
+       QString newPath = QFileDialog::getExistingDirectory(this,
+                       tr("Choose an existing or create a new Project 
Directory"), path);
+                       
+       if (newPath.isEmpty() || newPath.isNull()) {
+               return;
+       }
+       
+       QDir dir;
+       
+       if (dir.exists(newPath)) {
+//             QMessageBox::information( interface, tr("Traverso - 
Information"), tr("Using existing Project directory: %1\n").arg(newPath), "OK", 
0 );
+       } else if (!dir.mkpath(newPath)) {
+               QMessageBox::warning( this, tr("Traverso - Warning"), 
tr("Unable to create Project directory! \n") +
+                               tr("Please check permission for this directory: 
%1").arg(newPath) );
+               return;
+       } else {
+               QMessageBox::information( this, tr("Traverso - Information"), 
tr("Created new Project directory for you here: %1\n").arg(newPath), "OK", 0 );
+       }
+       
+       config().set_property("Project", "directory", newPath);
+       
+       update_projects_list();
+}
+
+
+//eof

Index: dialogs/project/OpenCreateProjectDialog.h
===================================================================
RCS file: dialogs/project/OpenCreateProjectDialog.h
diff -N dialogs/project/OpenCreateProjectDialog.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ dialogs/project/OpenCreateProjectDialog.h   3 Apr 2007 19:05:38 -0000       
1.1
@@ -0,0 +1,49 @@
+/*
+    Copyright (C) 2005-2006 Remon Sijrier 
+ 
+    This file is part of Traverso
+ 
+    Traverso is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+ 
+    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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ 
+    $Id: OpenCreateProjectDialog.h,v 1.1 2007/04/03 19:05:38 r_sijrier Exp $
+*/
+
+#ifndef PROJECT_MANAGER_DIALOG_H
+#define PROJECT_MANAGER_DIALOG_H
+
+#include "ui_OpenCreateProjectDialog.h"
+#include <QDialog>
+
+class OpenCreateProjectDialog : public QDialog, protected 
Ui::OpenCreateProjectDialog
+{
+Q_OBJECT
+
+public:
+       OpenCreateProjectDialog(QWidget* parent = 0);
+       ~OpenCreateProjectDialog();
+
+private slots:
+       void update_projects_list();
+       void on_loadProjectButton_clicked();
+       void on_createProjectButton_clicked();
+       void on_deleteProjectbutton_clicked();
+       void on_projectDirSelectButton_clicked();
+       void projectitem_clicked( QTreeWidgetItem* , int  );
+};
+
+#endif
+
+//eof
+

Index: ui/OpenCreateProjectDialog.ui
===================================================================
RCS file: ui/OpenCreateProjectDialog.ui
diff -N ui/OpenCreateProjectDialog.ui
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ ui/OpenCreateProjectDialog.ui       3 Apr 2007 19:05:39 -0000       1.1
@@ -0,0 +1,583 @@
+<ui version="4.0" >
+ <class>OpenCreateProjectDialog</class>
+ <widget class="QDialog" name="OpenCreateProjectDialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>520</width>
+    <height>450</height>
+   </rect>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>500</width>
+    <height>410</height>
+   </size>
+  </property>
+  <property name="maximumSize" >
+   <size>
+    <width>520</width>
+    <height>450</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>Open / Create Project</string>
+  </property>
+  <layout class="QHBoxLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item>
+    <layout class="QVBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+    </layout>
+   </item>
+   <item>
+    <layout class="QVBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <widget class="QTreeWidget" name="projectListView" >
+       <property name="sizePolicy" >
+        <sizepolicy>
+         <hsizetype>7</hsizetype>
+         <vsizetype>7</vsizetype>
+         <horstretch>2</horstretch>
+         <verstretch>4</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize" >
+        <size>
+         <width>230</width>
+         <height>0</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" >
+       <property name="margin" >
+        <number>0</number>
+       </property>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item>
+        <widget class="QPushButton" name="projectDirSelectButton" >
+         <property name="text" >
+          <string>Select Project Dir</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QVBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <layout class="QVBoxLayout" >
+       <property name="margin" >
+        <number>0</number>
+       </property>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item>
+        <widget class="QGroupBox" name="groupBox_2" >
+         <property name="minimumSize" >
+          <size>
+           <width>16</width>
+           <height>90</height>
+          </size>
+         </property>
+         <property name="title" >
+          <string>Selected Project</string>
+         </property>
+         <layout class="QVBoxLayout" >
+          <property name="margin" >
+           <number>9</number>
+          </property>
+          <property name="spacing" >
+           <number>9</number>
+          </property>
+          <item>
+           <widget class="QLineEdit" name="selectedProjectName" >
+            <property name="enabled" >
+             <bool>false</bool>
+            </property>
+            <property name="sizePolicy" >
+             <sizepolicy>
+              <hsizetype>7</hsizetype>
+              <vsizetype>0</vsizetype>
+              <horstretch>1</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize" >
+             <size>
+              <width>50</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="mouseTracking" >
+             <bool>true</bool>
+            </property>
+            <property name="readOnly" >
+             <bool>false</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" >
+            <property name="margin" >
+             <number>0</number>
+            </property>
+            <property name="spacing" >
+             <number>6</number>
+            </property>
+            <item>
+             <widget class="QPushButton" name="deleteProjectbutton" >
+              <property name="text" >
+               <string>Delete</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer>
+              <property name="orientation" >
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" >
+               <size>
+                <width>61</width>
+                <height>27</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item>
+             <widget class="QPushButton" name="loadProjectButton" >
+              <property name="text" >
+               <string>Load</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="minimumSize" >
+          <size>
+           <width>16</width>
+           <height>110</height>
+          </size>
+         </property>
+         <property name="title" >
+          <string>New 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="QLabel" name="label_2_2" >
+              <property name="minimumSize" >
+               <size>
+                <width>70</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="text" >
+               <string>Name</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="newProjectName" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>7</hsizetype>
+                <vsizetype>0</vsizetype>
+                <horstretch>2</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="minimumSize" >
+               <size>
+                <width>100</width>
+                <height>0</height>
+               </size>
+              </property>
+             </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="minimumSize" >
+               <size>
+                <width>0</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="text" >
+               <string>Description</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QTextEdit" name="descriptionTextEdit" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>7</hsizetype>
+                <vsizetype>7</vsizetype>
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="maximumSize" >
+               <size>
+                <width>16777215</width>
+                <height>30</height>
+               </size>
+              </property>
+             </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_3_2" >
+              <property name="minimumSize" >
+               <size>
+                <width>70</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="text" >
+               <string>Engineer</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="newProjectEngineer" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>7</hsizetype>
+                <vsizetype>5</vsizetype>
+                <horstretch>2</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+             </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_2_2_2" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>5</hsizetype>
+                <vsizetype>5</vsizetype>
+                <horstretch>2</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text" >
+               <string>Song count</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QSpinBox" name="songCountSpinBox" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>1</hsizetype>
+                <vsizetype>0</vsizetype>
+                <horstretch>1</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="minimumSize" >
+               <size>
+                <width>40</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="minimum" >
+               <number>1</number>
+              </property>
+              <property name="value" >
+               <number>1</number>
+              </property>
+             </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_2" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>5</hsizetype>
+                <vsizetype>5</vsizetype>
+                <horstretch>2</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text" >
+               <string>Tracks per Song</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QSpinBox" name="trackCountSpinBox" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>1</hsizetype>
+                <vsizetype>0</vsizetype>
+                <horstretch>1</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+             </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_4_2" >
+              <property name="minimumSize" >
+               <size>
+                <width>70</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="text" >
+               <string>Template</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QComboBox" name="templateComboBox" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>5</hsizetype>
+                <vsizetype>0</vsizetype>
+                <horstretch>2</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+             </widget>
+            </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>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item>
+             <widget class="QPushButton" name="createProjectButton" >
+              <property name="sizePolicy" >
+               <sizepolicy>
+                <hsizetype>5</hsizetype>
+                <vsizetype>0</vsizetype>
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text" >
+               <string>Create</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <spacer>
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" >
+          <size>
+           <width>254</width>
+           <height>16</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QDialogButtonBox" name="buttonBox" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="standardButtons" >
+        <set>QDialogButtonBox::Close</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>projectListView</sender>
+   <signal>doubleClicked(QModelIndex)</signal>
+   <receiver>loadProjectButton</receiver>
+   <slot>animateClick()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>196</x>
+     <y>204</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>460</x>
+     <y>310</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>newProjectName</sender>
+   <signal>returnPressed()</signal>
+   <receiver>createProjectButton</receiver>
+   <slot>click()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>215</x>
+     <y>444</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>427</x>
+     <y>503</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>newProjectEngineer</sender>
+   <signal>returnPressed()</signal>
+   <receiver>createProjectButton</receiver>
+   <slot>click()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>235</x>
+     <y>475</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>408</x>
+     <y>503</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>clicked(QAbstractButton*)</signal>
+   <receiver>OpenCreateProjectDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>29</x>
+     <y>547</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>355</x>
+     <y>527</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>

Index: dialogs/project/SongManagerDialog.cpp
===================================================================
RCS file: dialogs/project/SongManagerDialog.cpp
diff -N dialogs/project/SongManagerDialog.cpp
--- dialogs/project/SongManagerDialog.cpp       3 Apr 2007 14:20:13 -0000       
1.11
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,196 +0,0 @@
-/*
-Copyright (C) 2005-2006 Remon Sijrier 
-
-This file is part of Traverso
-
-Traverso is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
-
-*/
-
-#include "SongManagerDialog.h"
-
-#include "libtraversocore.h"
-#include <QStringList>
-#include <QMessageBox>
-#include <QFileDialog>
-#include <QHeaderView>
-#include <dialogs/NewSongDialog.h>
-#include <Interface.h>
-
-// Always put me below _all_ includes, this is needed
-// in case we run with memory leak detection enabled!
-#include "Debugger.h"
-
-SongManagerDialog::SongManagerDialog( QWidget * parent )
-       : QDialog(parent)
-{
-       setupUi(this);
-
-       treeSongWidget->setColumnCount(3);
-       treeSongWidget->header()->resizeSection(0, 160);
-       treeSongWidget->header()->resizeSection(1, 55);
-       treeSongWidget->header()->resizeSection(2, 70);
-       QStringList stringList;
-       stringList << "Song Name" << "Tracks" << "Length";
-       treeSongWidget->setHeaderLabels(stringList);
-       
-       set_project(pm().get_project());
-       
-       connect(treeSongWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), 
this, SLOT(songitem_clicked(QTreeWidgetItem*,int)));
-       connect(&pm(), SIGNAL(projectLoaded(Project*)), this, 
SLOT(set_project(Project*)));
-}
-
-SongManagerDialog::~SongManagerDialog()
-{}
-
-void SongManagerDialog::set_project(Project* project)
-{
-       m_project = project;
-       
-       if (m_project) {
-               connect(m_project, SIGNAL(songAdded(Song*)), this, 
SLOT(update_song_list()));
-               connect(m_project, SIGNAL(songRemoved(Song*)), this, 
SLOT(update_song_list()));
-               setWindowTitle("Manage Project - " + m_project->get_title());
-       } else {
-               setWindowTitle("Manage Project - No Project loaded!");
-               treeSongWidget->clear();
-       }
-       
-       update_song_list();
-}
-
-
-void SongManagerDialog::update_song_list( )
-{
-       if ( ! m_project) {
-               printf("SongManagerDialog:: no project ?\n");
-               return;
-       }
-       
-       printf("update_song_list() \n");
-
-       treeSongWidget->clear();
-       foreach(Song* song, m_project->get_songs()) {
-
-               QString songNr = 
QString::number(m_project->get_song_index(song->get_id()));
-               QString songName = "Song " + songNr + " - " + song->get_title();
-               QString numberOfTracks = QString::number(song->get_numtracks());
-               QString songLength = frame_to_smpte(song->get_last_frame(), 
song->get_rate());
-               QString songStatus = song->is_changed()?"UnSaved":"Saved";
-               QString songSpaceAllocated = "Unknown";
-
-               QTreeWidgetItem* item = new QTreeWidgetItem(treeSongWidget);
-               item->setTextAlignment(1, Qt::AlignHCenter);
-               item->setTextAlignment(2, Qt::AlignHCenter);
-               item->setText(0, songName);
-               item->setText(1, numberOfTracks);
-               item->setText(2, songLength);
-               
-               item->setData(0, Qt::UserRole, song->get_id());
-       }
-}
-
-void SongManagerDialog::songitem_clicked( QTreeWidgetItem* item, int)
-{
-       if (!item) {
-               return;
-       }
-
-       Song* song;
-
-       qint64 id = item->data(0, Qt::UserRole).toLongLong();
-       song = m_project->get_song(id);
-
-       Q_ASSERT(song);
-               
-       selectedSongName->setText(song->get_title());
-       
-       m_project->set_current_song(song->get_id());
-}
-
-void SongManagerDialog::on_renameSongButton_clicked( )
-{
-       if( ! m_project) {
-               return;
-       }
-       
-       QTreeWidgetItem* item = treeSongWidget->currentItem();
-       
-       
-       
-       if ( ! item) {
-               return;
-       }
-       
-       qint64 id = item->data(0, Qt::UserRole).toLongLong();
-       Song* song = m_project->get_song(id);
-       
-       Q_ASSERT(song);
-       
-       QString newtitle = selectedSongName->text();
-       
-       if (newtitle.isEmpty()) {
-               info().information(tr("No new Song name was supplied!"));
-               return;
-       }
-       
-       song->set_title(newtitle);
-
-       update_song_list();
-}
-
-void SongManagerDialog::on_deleteSongButton_clicked( )
-{
-       QTreeWidgetItem* item = treeSongWidget->currentItem();
-       
-       if ( ! item ) {
-               return;
-       }
-       
-       qint64 id = item->data(0, Qt::UserRole).toLongLong();
-       
-       // Hmmm, to which history stack should this one be pushed ???? :-(
-       
Command::process_command(m_project->remove_song(m_project->get_song(id)));
-}
-
-void SongManagerDialog::on_createSongButton_clicked( )
-{
-       Interface::instance()->show_newsong_dialog();
-}
-
-
-void SongManagerDialog::hideEvent(QHideEvent * event)
-{
-       QDialog::hideEvent(event);
-       
-       if (m_project) {
-               Song* song = m_project->get_current_song();
-               if (song) {
-                       
pm().get_undogroup()->setActiveStack(song->get_history_stack());
-               }
-       }
-}
-
-void SongManagerDialog::showEvent(QShowEvent * event)
-{
-       QDialog::showEvent(event);
-       
-       if (m_project) {
-               
pm().get_undogroup()->setActiveStack(m_project->get_history_stack());
-       }
-}
-
-//eof
-

Index: dialogs/project/SongManagerDialog.h
===================================================================
RCS file: dialogs/project/SongManagerDialog.h
diff -N dialogs/project/SongManagerDialog.h
--- dialogs/project/SongManagerDialog.h 3 Apr 2007 14:20:14 -0000       1.6
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,59 +0,0 @@
-/*
-    Copyright (C) 2005-2006 Remon Sijrier 
- 
-    This file is part of Traverso
- 
-    Traverso is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
- 
-    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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
- 
-*/
-
-#ifndef SONG_MANAGER_DIALOG_H
-#define SONG_MANAGER_DIALOG_H
-
-#include "ui_SongManagerDialog.h"
-#include <QDialog>
-
-class Project;
-class Song;
-
-class SongManagerDialog : public QDialog, protected Ui::SongManagerDialog
-{
-        Q_OBJECT
-
-public:
-        SongManagerDialog(QWidget* parent = 0);
-        ~SongManagerDialog();
-
-protected:
-       void hideEvent ( QHideEvent * event );
-       void showEvent ( QShowEvent * event );
-
-private:
-       Project* m_project;
-
-private slots:
-       void update_song_list();
-       void set_project(Project* project);
-       void songitem_clicked( QTreeWidgetItem* item, int);
-       void on_renameSongButton_clicked();
-        void on_deleteSongButton_clicked();
-        void on_createSongButton_clicked();
-};
-
-#endif
-
-//eof
-
-




reply via email to

[Prev in Thread] Current Thread [Next in Thread]