Make template descriptions editable in template manager
[ardour.git] / gtk2_ardour / template_dialog.h
index 2e7f2e454a376b9b3785f0a754ce8eb6c1abf4a1..d80ff366d9aa05d320c87d5c49581a06f78aef90 100644 (file)
 #include <vector>
 
 #include <gtkmm/liststore.h>
+#include <gtkmm/progressbar.h>
+#include <gtkmm/textview.h>
 #include <gtkmm/treeview.h>
 
 #include "ardour_dialog.h"
+#include "progress_reporter.h"
 
 namespace ARDOUR {
        struct TemplateInfo;
 }
 
-class TemplateDialog : public ArdourDialog
+class XMLTree;
+class XMLNode;
+
+class TemplateDialog : public ArdourDialog,
+                      public PBD::ScopedConnectionList
 {
 public:
        TemplateDialog ();
        ~TemplateDialog () {}
 };
 
-class TemplateManager : public Gtk::HBox
+class TemplateManager : public Gtk::HBox,
+                       public ProgressReporter
 {
 public:
        virtual ~TemplateManager () {}
        virtual void init () = 0;
 
+       PBD::Signal0<void> TemplatesImported;
+
 protected:
        TemplateManager ();
 
@@ -55,19 +65,35 @@ protected:
        void validate_edit (const Glib::ustring& path_string, const Glib::ustring& new_name);
        void start_edit ();
 
+       void set_desc_dirty ();
+
        bool key_event (GdkEventKey* ev);
 
        virtual void rename_template (Gtk::TreeModel::iterator& item, const Glib::ustring& new_name) = 0;
        virtual void delete_selected_template () = 0;
 
+       virtual void save_template_desc ();
+
+       void export_all_templates ();
+       void import_template_set ();
+
+       virtual std::string templates_dir () const = 0;
+       virtual std::string template_file (const Gtk::TreeModel::const_iterator& item) const = 0;
+
+       virtual bool adjust_xml_tree (XMLTree& tree, const std::string& old_name, const std::string& new_name) const = 0;
+
+       bool adjust_plugin_paths (XMLNode* node, const std::string& name, const std::string& new_name) const;
+
        struct SessionTemplateColumns : public Gtk::TreeModel::ColumnRecord {
                SessionTemplateColumns () {
                        add (name);
                        add (path);
+                       add (description);
                }
 
                Gtk::TreeModelColumn<std::string> name;
                Gtk::TreeModelColumn<std::string> path;
+               Gtk::TreeModelColumn<std::string> description;
        };
 
        SessionTemplateColumns _template_columns;
@@ -77,8 +103,20 @@ protected:
        Gtk::CellRendererText _validating_cellrenderer;
        Gtk::TreeView::Column _validated_column;
 
+       Gtk::TextView _description_editor;
+       Gtk::Button _save_desc;
+       bool _desc_dirty;
+
        Gtk::Button _remove_button;
        Gtk::Button _rename_button;
+
+       Gtk::Button _export_all_templates_button;
+       Gtk::Button _import_template_set_button;
+
+       Gtk::ProgressBar _progress_bar;
+       std::string _current_action;
+
+       void update_progress_gui (float p);
 };
 
 class SessionTemplateManager : public TemplateManager
@@ -92,6 +130,11 @@ public:
 private:
        void rename_template (Gtk::TreeModel::iterator& item, const Glib::ustring& new_name);
        void delete_selected_template ();
+
+       std::string templates_dir () const;
+       std::string template_file (const Gtk::TreeModel::const_iterator& item) const;
+
+       bool adjust_xml_tree (XMLTree& tree, const std::string& old_name, const std::string& new_name) const;
 };
 
 
@@ -106,6 +149,11 @@ public:
 private:
        void rename_template (Gtk::TreeModel::iterator& item, const Glib::ustring& new_name);
        void delete_selected_template ();
+
+       std::string templates_dir () const;
+       std::string template_file (const Gtk::TreeModel::const_iterator& item) const;
+
+       bool adjust_xml_tree (XMLTree& tree, const std::string& old_name, const std::string& new_name) const;
 };