diff options
author | Robin Gareus <robin@gareus.org> | 2017-06-08 13:22:00 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-06-08 13:22:00 +0200 |
commit | ed5761a8b46459a24c6c74bb0be312c761de4f59 (patch) | |
tree | 74dbed0582838bcfc507e59b16795b26214ee5c8 /gtk2_ardour | |
parent | 6ac76734f53b28e3e0bf08c58eb463b16f719d6a (diff) |
Add a file-chooser LuaDialog Widget
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/luadialog.cc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/gtk2_ardour/luadialog.cc b/gtk2_ardour/luadialog.cc index 22fcee6cda..295fa372f7 100644 --- a/gtk2_ardour/luadialog.cc +++ b/gtk2_ardour/luadialog.cc @@ -436,6 +436,47 @@ protected: luabridge::LuaRef* _rv; }; +class LuaFileChooser : public LuaDialogWidget +{ +public: + LuaFileChooser (std::string const& key, std::string const& title, Gtk::FileChooserAction a, const std::string& path) + : LuaDialogWidget (key, title) + , _fc (a) + { + if (!path.empty ()) { + switch (a) { + case Gtk::FILE_CHOOSER_ACTION_OPEN: + case Gtk::FILE_CHOOSER_ACTION_SAVE: + if (Glib::file_test (path, Glib::FILE_TEST_IS_REGULAR|Glib::FILE_TEST_EXISTS)) { + _fc.set_filename (path); + } + break; + case Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER: + if (Glib::file_test (path, Glib::FILE_TEST_IS_DIR|Glib::FILE_TEST_EXISTS)) { + _fc.set_filename (path); + } + break; + case Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER: + break; + } + } + } + + Gtk::Widget* widget () + { + return &_fc; + } + + void assign (luabridge::LuaRef* rv) const + { + (*rv)[_key] = std::string (_fc.get_filename ()); + } + +protected: + Gtk::FileChooserButton _fc; +}; + + /******************************************************************************* * Lua Parameter Dialog @@ -546,6 +587,18 @@ Dialog::Dialog (std::string const& title, luabridge::LuaRef lr) dflt = i.value ()["default"].cast<std::string> (); } _widgets.push_back (new LuaDialogDropDown (key, title, i.value ()["values"], dflt)); + } else if (type == "file") { + std::string path; + if (i.value ()["path"].isString ()) { + path = i.value ()["path"].cast<std::string> (); + } + _widgets.push_back (new LuaFileChooser (key, title, Gtk::FILE_CHOOSER_ACTION_OPEN, path)); + } else if (type == "folder") { + std::string path; + if (i.value ()["path"].isString ()) { + path = i.value ()["path"].cast<std::string> (); + } + _widgets.push_back (new LuaFileChooser (key, title, Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER, path)); } } |