From 95f63a9a4e075aace606d0b6c6baace2150f1a77 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 16 Sep 2025 20:24:51 +0200 Subject: [PATCH] Improve Library manager UI * Only show progress bar when downloading/installing * Don't allow re-install * Scale progress bar width with UI * make sure target clip library folder exists --- gtk2_ardour/library_download_dialog.cc | 17 +++++++++++++---- gtk2_ardour/library_download_dialog.h | 2 ++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/gtk2_ardour/library_download_dialog.cc b/gtk2_ardour/library_download_dialog.cc index b22f9772da..b6f60ae104 100644 --- a/gtk2_ardour/library_download_dialog.cc +++ b/gtk2_ardour/library_download_dialog.cc @@ -27,6 +27,7 @@ #include +#include "ardour/clip_library.h" #include "ardour/rc_configuration.h" #include "ardour/library.h" @@ -126,9 +127,10 @@ void LibraryDownloadDialog::append_progress_column () { progress_renderer = new Gtk::CellRendererProgress(); - progress_renderer->property_width() = 100; + progress_renderer->property_width() = std::max(100, rintf(100. * UIConfiguration::instance().get_ui_scale())); Gtk::TreeViewColumn* tvc = manage (new Gtk::TreeViewColumn ("", *progress_renderer)); tvc->add_attribute (*progress_renderer, "value", _columns.progress); + tvc->add_attribute (*progress_renderer, "visible", _columns.installing); _display.append_column (*tvc); } @@ -155,6 +157,7 @@ LibraryDownloadDialog::add_library (ARDOUR::LibraryDescription const & ld) (*i)[_columns.installed] = ld.installed(); (*i)[_columns.url] = ld.url(); (*i)[_columns.toplevel] = ld.toplevel_dir(); + (*i)[_columns.installing] = false; if (ld.installed()) { (*i)[_columns.install] = string (_("Installed")); @@ -215,6 +218,7 @@ LibraryDownloadDialog::install_finished (Gtk::TreeModel::iterator row, std::stri (*row)[_columns.install] = _("Install"); (*row)[_columns.progress] = 0; } + (*row)[_columns.installing] = false; /* Always unlink (remove) the downloaded archive */ @@ -236,7 +240,7 @@ LibraryDownloadDialog::download (Gtk::TreePath const & path) PBD::Downloader* downloader; try { - downloader = new PBD::Downloader (url, ARDOUR::Config->get_clip_library_dir()); + downloader = new PBD::Downloader (url, ARDOUR::clip_library_dir (true)); } catch (...) { (*row)[_columns.install] = _("Error"); return; @@ -244,9 +248,11 @@ LibraryDownloadDialog::download (Gtk::TreePath const & path) /* setup timer callback to update progressbar */ + Glib::signal_timeout().connect (sigc::bind (sigc::mem_fun (*this, &LibraryDownloadDialog::dl_timer_callback), downloader, path), 40); (*row)[_columns.downloader] = downloader; + (*row)[_columns.installing] = true; /* and go ... */ @@ -274,6 +280,7 @@ LibraryDownloadDialog::dl_timer_callback (Downloader* dl, Gtk::TreePath treepath if (dl->status() < 0) { (*row)[_columns.install] = _("Install");; + (*row)[_columns.installing] = false; } else { (*row)[_columns.install] = _("Installing"); install (dl->download_path(), treepath); @@ -305,6 +312,10 @@ LibraryDownloadDialog::display_button_press (GdkEventButton* ev) Gtk::TreeIter iter = _model->get_iter (path); + if ((*iter)[_columns.installed]) { + return true; + } + string cur = (*iter)[_columns.install]; if (cur == _("Install")) { if (!(*iter)[_columns.installed]) { @@ -317,8 +328,6 @@ LibraryDownloadDialog::display_button_press (GdkEventButton* ev) if (dl) { dl->cancel (); } - - (*iter)[_columns.install] = _("Install"); } return true; diff --git a/gtk2_ardour/library_download_dialog.h b/gtk2_ardour/library_download_dialog.h index 17564d59a8..9fb93f1602 100644 --- a/gtk2_ardour/library_download_dialog.h +++ b/gtk2_ardour/library_download_dialog.h @@ -64,6 +64,7 @@ class LibraryDownloadDialog : public ArdourDialog add (toplevel); add (install); add (progress); + add (installing); add (downloader); } @@ -77,6 +78,7 @@ class LibraryDownloadDialog : public ArdourDialog Gtk::TreeModelColumn url; Gtk::TreeModelColumn toplevel; Gtk::TreeModelColumn downloader; + Gtk::TreeModelColumn installing; Gtk::TreeModelColumn progress; /* used as tooltip */ Gtk::TreeModelColumn description;