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
This commit is contained in:
Robin Gareus 2025-09-16 20:24:51 +02:00
parent 3cd7bd661c
commit 95f63a9a4e
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
2 changed files with 15 additions and 4 deletions

View file

@ -27,6 +27,7 @@
#include <glibmm/markup.h>
#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<int>(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;

View file

@ -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<std::string> url;
Gtk::TreeModelColumn<std::string> toplevel;
Gtk::TreeModelColumn<PBD::Downloader*> downloader;
Gtk::TreeModelColumn<bool> installing;
Gtk::TreeModelColumn<int> progress;
/* used as tooltip */
Gtk::TreeModelColumn<std::string> description;