diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 81f9c55e27..8644c069fa 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -656,6 +656,7 @@
+
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index ec18d179e6..fa18bf93ec 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -148,6 +148,7 @@
#include "io_plugin_window.h"
#include "keyboard.h"
#include "keyeditor.h"
+#include "library_download_dialog.h"
#include "location_ui.h"
#include "lua_script_manager.h"
#include "luawindow.h"
@@ -324,6 +325,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, big_clock_window (X_("big-clock"), _("Big Clock"), boost::bind (&ARDOUR_UI::create_big_clock_window, this))
, big_transport_window (X_("big-transport"), _("Transport Controls"), boost::bind (&ARDOUR_UI::create_big_transport_window, this))
, virtual_keyboard_window (X_("virtual-keyboard"), _("Virtual Keyboard"), boost::bind (&ARDOUR_UI::create_virtual_keyboard_window, this))
+ , library_manager_window (X_("library-manager"), _("Library Manager"), boost::bind (&ARDOUR_UI::create_library_manager_window, this))
, audio_port_matrix (X_("audio-connection-manager"), _("Audio Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::AUDIO))
, midi_port_matrix (X_("midi-connection-manager"), _("MIDI Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::MIDI))
, key_editor (X_("key-editor"), _("Keyboard Shortcuts"), boost::bind (&ARDOUR_UI::create_key_editor, this))
@@ -525,6 +527,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
WM::Manager::instance().register_window (&big_clock_window);
WM::Manager::instance().register_window (&big_transport_window);
WM::Manager::instance().register_window (&virtual_keyboard_window);
+ WM::Manager::instance().register_window (&library_manager_window);
WM::Manager::instance().register_window (&audio_port_matrix);
WM::Manager::instance().register_window (&midi_port_matrix);
WM::Manager::instance().register_window (&luawindow);
@@ -551,6 +554,12 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
ARDOUR::Port::set_connecting_blocked (ARDOUR_COMMAND_LINE::no_connect_ports);
}
+void
+ARDOUR_UI::library_show_status (LibraryDescription ld)
+{
+ std::cerr << "Library " << ld.name() << " installed ? " << ld.installed() << std::endl;
+}
+
GlobalPortMatrixWindow*
ARDOUR_UI::create_global_port_matrix (ARDOUR::DataType type)
{
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 408eeff9ce..5e50e3b033 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -48,6 +48,7 @@
#include
#include
+#include
#include "pbd/xml++.h"
#include
@@ -73,6 +74,7 @@
#include "gtkmm2ext/visibility_tracker.h"
#include "ardour/ardour.h"
+#include "ardour/library.h"
#include "ardour/types.h"
#include "ardour/utils.h"
#include "ardour/plugin.h"
@@ -123,6 +125,7 @@
#include "speaker_dialog.h"
#include "transport_masters_dialog.h"
#include "virtual_keyboard_window.h"
+#include "library_download_dialog.h"
#else
class About;
class AddRouteDialog;
@@ -148,6 +151,7 @@ class PluginManagerUI;
class DspStatisticsWindow;
class TransportMastersWindow;
class VirtualKeyboardWindow;
+class LibraryDownloadDialog;
#endif
class VideoTimeLine;
@@ -415,6 +419,8 @@ protected:
void toggle_rc_options_window ();
void toggle_session_options_window ();
+ void library_show_status (ARDOUR::LibraryDescription ld);
+
private:
Gtk::Window _main_window;
@@ -758,6 +764,7 @@ private:
WM::ProxyWithConstructor big_clock_window;
WM::ProxyWithConstructor big_transport_window;
WM::ProxyWithConstructor virtual_keyboard_window;
+ WM::ProxyWithConstructor library_manager_window;
WM::ProxyWithConstructor audio_port_matrix;
WM::ProxyWithConstructor midi_port_matrix;
WM::ProxyWithConstructor key_editor;
@@ -771,6 +778,7 @@ private:
BigClockWindow* create_big_clock_window();
BigTransportWindow* create_big_transport_window();
VirtualKeyboardWindow* create_virtual_keyboard_window();
+ LibraryDownloadDialog* create_library_manager_window();
GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
KeyEditor* create_key_editor ();
LuaWindow* create_luawindow ();
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 27cdfaf80d..7b8724b7ab 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -60,6 +60,7 @@
#include "gui_object.h"
#include "gui_thread.h"
#include "keyeditor.h"
+#include "library_download_dialog.h"
#include "location_ui.h"
#include "lua_script_manager.h"
#include "luawindow.h"
@@ -1005,6 +1006,13 @@ ARDOUR_UI::create_virtual_keyboard_window ()
return vkbd;
}
+LibraryDownloadDialog*
+ARDOUR_UI::create_library_manager_window ()
+{
+ LibraryDownloadDialog* ldd = new LibraryDownloadDialog ();
+ return ldd;
+}
+
LuaWindow*
ARDOUR_UI::create_luawindow ()
{
diff --git a/gtk2_ardour/library_download_dialog.cc b/gtk2_ardour/library_download_dialog.cc
new file mode 100644
index 0000000000..e7d2c05cca
--- /dev/null
+++ b/gtk2_ardour/library_download_dialog.cc
@@ -0,0 +1,65 @@
+#include "pbd/i18n.h"
+
+#include
+
+#include "ardour/library.h"
+
+#include "library_download_dialog.h"
+
+LibraryDownloadDialog::LibraryDownloadDialog ()
+ : ArdourDialog (_("Loop Library Manager"), true) /* modal */
+{
+ _model = Gtk::ListStore::create (_columns);
+ _display.set_model (_model);
+
+ _display.append_column (_("Name"), _columns.name);
+ _display.append_column (_("Author"), _columns.author);
+ _display.append_column (_("License"), _columns.license);
+ _display.append_column (_("Size"), _columns.size);
+ _display.append_column_editable (_("Installed"), _columns.installed);
+
+ Gtk::CellRendererToggle *toggle = dynamic_cast (_display.get_column_cell_renderer (4));
+ toggle->set_alignment (0.0, 0.5);
+ toggle->signal_toggled().connect (sigc::mem_fun (*this, &LibraryDownloadDialog::install_activated));
+
+ _display.set_headers_visible (true);
+ _display.set_tooltip_column (5); /* path */
+
+ Gtk::HBox* h = new Gtk::HBox;
+ h->set_spacing (8);
+ h->set_border_width (8);
+ h->pack_start (_display);
+
+ get_vbox()->set_spacing (8);
+ get_vbox()->pack_start (*Gtk::manage (h));
+
+
+ ARDOUR::LibraryFetcher lf;
+ lf.get_descriptions ();
+ lf.foreach_description (boost::bind (&LibraryDownloadDialog::add_library, this, _1));
+}
+
+void
+LibraryDownloadDialog::add_library (ARDOUR::LibraryDescription const & ld)
+{
+
+ Gtk::TreeModel::iterator i = _model->append();
+ (*i)[_columns.name] = ld.name();
+ (*i)[_columns.author] = ld.author();
+ (*i)[_columns.license] = ld.license();
+ (*i)[_columns.size] = ld.size();
+ (*i)[_columns.installed] = ld.installed();
+
+ /* tooltip must be escape for pango markup, and we should strip all
+ * duplicate spaces
+ */
+
+ (*i)[_columns.description] = Glib::Markup::escape_text (ld.description());
+ std::cerr << "set descr to " << ld.description() << std::endl;
+}
+
+
+void
+LibraryDownloadDialog::install_activated (std::string str)
+{
+}
diff --git a/gtk2_ardour/library_download_dialog.h b/gtk2_ardour/library_download_dialog.h
new file mode 100644
index 0000000000..c8f366de06
--- /dev/null
+++ b/gtk2_ardour/library_download_dialog.h
@@ -0,0 +1,70 @@
+#ifndef __gtk2_ardour_library_download_dialog_h__
+#define __gtk2_ardour_library_download_dialog_h__
+
+#include
+
+#include
+#include
+#include
+
+#include "ardour_dialog.h"
+
+namespace ARDOUR {
+ class LibraryDescription;
+}
+
+class LibraryDownloadDialog : public ArdourDialog
+{
+ public:
+ LibraryDownloadDialog ();
+
+ void add_library (ARDOUR::LibraryDescription const &);
+
+ private:
+ class LibraryColumns : public Gtk::TreeModelColumnRecord {
+ public:
+ LibraryColumns() {
+ add (name);
+ add (author);
+ add (license);
+ add (size);
+ add (installed);
+ add (description);
+ }
+
+ Gtk::TreeModelColumn name;
+ Gtk::TreeModelColumn author;
+ Gtk::TreeModelColumn license;
+ Gtk::TreeModelColumn size;
+ Gtk::TreeModelColumn description;
+ Gtk::TreeModelColumn installed;
+ };
+
+ Gtk::TreeView _display;
+ Glib::RefPtr _model;
+ LibraryColumns _columns;
+
+ template
+ Gtk::TreeViewColumn* append_col (Gtk::TreeModelColumn const& col, int width = 0)
+ {
+ Gtk::TreeViewColumn* c = manage (new Gtk::TreeViewColumn ("", col));
+ if (width) {
+ c->set_fixed_width (width);
+ c->set_sizing (Gtk::TREE_VIEW_COLUMN_FIXED);
+ }
+ _display.append_column (*c);
+ return c;
+ }
+
+ bool tv_query_tooltip (int x, int y, bool kbd, const Glib::RefPtr& tooltip);
+
+
+ void setup_col (Gtk::TreeViewColumn*, int, Gtk::AlignmentEnum, const char*, const char*);
+ void setup_toggle (Gtk::TreeViewColumn*, sigc::slot);
+
+ void install_activated (std::string str);
+};
+
+
+
+#endif /* __gtk2_ardour_library_download_dialog_h__ */
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index d9b35a900e..8c721becf1 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -150,6 +150,7 @@ gtk2_ardour_sources = [
'latency_gui.cc',
'led.cc',
'level_meter.cc',
+ 'library_download_dialog.cc',
'location_ui.cc',
'loudness_dialog.cc',
'loudness_settings.cc',