add "revert" button to lua script window
authorRobin Gareus <robin@gareus.org>
Sat, 26 Mar 2016 13:54:10 +0000 (14:54 +0100)
committerRobin Gareus <robin@gareus.org>
Sat, 26 Mar 2016 13:54:10 +0000 (14:54 +0100)
gtk2_ardour/luawindow.cc
gtk2_ardour/luawindow.h

index 15c7fb69a650eb4b87e0a7994dd26f99db04aa05..3bc3a4741ea21c7c677d9eeae2b5f1e1ff431778 100644 (file)
@@ -96,6 +96,7 @@ LuaWindow::LuaWindow ()
        , _btn_open (_("Import"))
        , _btn_save (_("Save"))
        , _btn_delete (_("Delete"))
+       , _btn_revert (_("Revert"))
        , _current_buffer ()
 {
        set_name ("Lua");
@@ -120,10 +121,12 @@ LuaWindow::LuaWindow ()
        _btn_open.signal_clicked.connect (sigc::mem_fun(*this, &LuaWindow::import_script));
        _btn_save.signal_clicked.connect (sigc::mem_fun(*this, &LuaWindow::save_script));
        _btn_delete.signal_clicked.connect (sigc::mem_fun(*this, &LuaWindow::delete_script));
+       _btn_revert.signal_clicked.connect (sigc::mem_fun(*this, &LuaWindow::revert_script));
 
        _btn_open.set_sensitive (false); // TODO
        _btn_save.set_sensitive (false);
        _btn_delete.set_sensitive (false);
+       _btn_revert.set_sensitive (false);
 
        // layout
 
@@ -143,6 +146,7 @@ LuaWindow::LuaWindow ()
        hbox->pack_start (_btn_open, false, false, 2);
        hbox->pack_start (_btn_save, false, false, 2);
        hbox->pack_start (_btn_delete, false, false, 2);
+       hbox->pack_start (_btn_revert, false, false, 2);
        hbox->pack_start (script_select, false, false, 2);
 
        Gtk::VBox *vbox = manage (new VBox());
@@ -343,6 +347,13 @@ LuaWindow::delete_script ()
        new_script ();
 }
 
+void
+LuaWindow::revert_script ()
+{
+       _current_buffer->flags &= BufferFlags(~Buffer_Valid);
+       script_selection_changed (_current_buffer, true);
+}
+
 void
 LuaWindow::import_script ()
 {
@@ -537,7 +548,7 @@ LuaWindow::rebuild_menu ()
 
        for (ScriptBufferList::const_iterator i = script_buffers.begin (); i != script_buffers.end (); ++i) {
                Menu_Helpers::MenuElem elem = Gtk::Menu_Helpers::MenuElem((*i)->name,
-                               sigc::bind(sigc::mem_fun(*this, &LuaWindow::script_selection_changed), (*i)));
+                               sigc::bind(sigc::mem_fun(*this, &LuaWindow::script_selection_changed), (*i), false));
 
                if ((*i)->flags & Buffer_Scratch) {
                        items_scratch.push_back(elem);
@@ -557,14 +568,17 @@ LuaWindow::rebuild_menu ()
 }
 
 void
-LuaWindow::script_selection_changed (ScriptBufferPtr n)
+LuaWindow::script_selection_changed (ScriptBufferPtr n, bool force)
 {
-       if (n == _current_buffer) {
+       if (n == _current_buffer && !force) {
                return;
        }
 
        Glib::RefPtr<Gtk::TextBuffer> tb (entry.get_buffer());
-       _current_buffer->script = tb->get_text();
+
+       if ((n->flags & Buffer_Valid)) {
+               _current_buffer->script = tb->get_text();
+       }
 
        if (!(n->flags & Buffer_Valid)) {
                if (!n->load()) {
@@ -606,6 +620,7 @@ LuaWindow::update_gui_state ()
 
        _btn_save.set_sensitive (sb.flags & Buffer_Dirty);
        _btn_delete.set_sensitive (sb.flags & Buffer_Scratch); // TODO allow to remove user-scripts
+       _btn_revert.set_sensitive ((sb.flags & Buffer_Dirty) && (sb.flags & Buffer_HasFile));
 }
 
 void
index 40fa269cef96b1a86dc00fa15c58c8d147fcbdac..38f688d4ad8b2e5bbc521b22137c89cec862dc3b 100644 (file)
@@ -103,6 +103,7 @@ class LuaWindow :
        ArdourButton _btn_open;
        ArdourButton _btn_save;
        ArdourButton _btn_delete;
+       ArdourButton _btn_revert;
 
        ArdourDropdown script_select;
 
@@ -122,7 +123,7 @@ class LuaWindow :
        uint32_t count_scratch_buffers () const;
 
        void script_changed ();
-       void script_selection_changed (ScriptBufferPtr n);
+       void script_selection_changed (ScriptBufferPtr n, bool force = false);
        void update_gui_state ();
 
        void append_text (std::string s);
@@ -133,6 +134,7 @@ class LuaWindow :
 
        void new_script ();
        void delete_script ();
+       void revert_script ();
        void import_script ();
        void save_script ();
 };