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',