changeset 426:72a2b4210e50 templating

Add filesystem watcher to recreate template menu when templates change; start implementing save-session-as-template
author Chris Cannam
date Tue, 10 May 2011 13:58:59 +0100
parents eaab4c65c7bc
children ba07505d20e2
files main/MainWindow.cpp main/MainWindow.h
diffstat 2 files changed, 21 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/main/MainWindow.cpp	Mon May 09 16:57:29 2011 +0100
+++ b/main/MainWindow.cpp	Tue May 10 13:58:59 2011 +0100
@@ -114,6 +114,7 @@
 #include <QRegExp>
 #include <QScrollArea>
 #include <QDesktopServices>
+#include <QFileSystemWatcher>
 
 #include <iostream>
 #include <cstdio>
@@ -139,6 +140,7 @@
     m_sliceMenu(0),
     m_recentFilesMenu(0),
     m_recentTransformsMenu(0),
+    m_templatesMenu(0),
     m_rightButtonMenu(0),
     m_rightButtonLayerMenu(0),
     m_rightButtonTransformsMenu(0),
@@ -160,7 +162,8 @@
     m_preferencesDialog(0),
     m_layerTreeDialog(0),
     m_activityLog(new ActivityLog()),
-    m_keyReference(new KeyReference())
+    m_keyReference(new KeyReference()),
+    m_templateWatcher(0)
 {
     Profiler profiler("MainWindow::MainWindow");
 
@@ -1697,6 +1700,13 @@
     connect(action, SIGNAL(triggered()), this, SLOT(manageSavedTemplates()));
     action->setEnabled(havePersonal);
     m_templatesMenu->addAction(action);
+
+    if (!m_templateWatcher) {
+        m_templateWatcher = new QFileSystemWatcher(this);
+        m_templateWatcher->addPath(ResourceFinder().getResourceSaveDir("templates"));
+        connect(m_templateWatcher, SIGNAL(directoryChanged(const QString &)),
+                this, SLOT(setupTemplatesMenu()));
+    }
 }
 
 void
@@ -2859,9 +2869,13 @@
          tr("Please enter a name for the saved template:"));
     if (name == "") return;
     
-    //!!! sanitise!
-
-    
+    //!!! sanitise name!
+
+    //!!! check/confirm if target exists!
+
+    ResourceFinder rf;
+    QString dir = rf.getResourceSaveDir("templates");
+    saveSessionTemplate(QString("%1/%2.svt").arg(dir).arg(name));
 }
 
 void
--- a/main/MainWindow.h	Mon May 09 16:57:29 2011 +0100
+++ b/main/MainWindow.h	Tue May 10 13:58:59 2011 +0100
@@ -58,6 +58,7 @@
 class KeyReference;
 class Labeller;
 class ActivityLog;
+class QFileSystemWatcher;
 
 class MainWindow : public MainWindowBase
 {
@@ -227,6 +228,8 @@
     ActivityLog             *m_activityLog;
     KeyReference            *m_keyReference;
 
+    QFileSystemWatcher      *m_templateWatcher;
+
     struct LayerConfiguration {
 	LayerConfiguration(LayerFactory::LayerType _layer
 			                       = LayerFactory::TimeRuler,