summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-08 13:22:00 +0200
committerRobin Gareus <robin@gareus.org>2017-06-08 13:22:00 +0200
commited5761a8b46459a24c6c74bb0be312c761de4f59 (patch)
tree74dbed0582838bcfc507e59b16795b26214ee5c8
parent6ac76734f53b28e3e0bf08c58eb463b16f719d6a (diff)
Add a file-chooser LuaDialog Widget
-rw-r--r--gtk2_ardour/luadialog.cc53
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));
}
}