106 lines
2.3 KiB
C++
106 lines
2.3 KiB
C++
/*
|
|
* Copyright 2014 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/callback.h>
|
|
#include <core/idle.h>
|
|
#include <core/index.h>
|
|
#include <core/library.h>
|
|
#include <lib/colmgr.h>
|
|
#include <gui/ocarina.h>
|
|
|
|
|
|
static Gtk::FileChooserWidget *c_chooser;
|
|
static Gtk::ProgressBar *c_progress;
|
|
static Gtk::TreeView *c_treeview;
|
|
|
|
|
|
static void cd_chooser(const std::string &dir)
|
|
{
|
|
if (c_chooser->get_current_folder() != dir)
|
|
c_chooser->set_current_folder(dir);
|
|
}
|
|
|
|
static bool find_cur_path(Gtk::TreePath &path)
|
|
{
|
|
Gtk::TreeViewColumn *col;
|
|
c_treeview->get_cursor(path, col);
|
|
return !path.empty();
|
|
}
|
|
|
|
static bool on_idle()
|
|
{
|
|
bool ret = idle :: run_task();
|
|
|
|
if (ret) {
|
|
c_progress->show();
|
|
c_progress->set_fraction(idle :: get_progress());
|
|
} else
|
|
c_progress->hide();
|
|
|
|
colmgr :: update_paths();
|
|
return ret;
|
|
}
|
|
|
|
|
|
static void on_ok()
|
|
{
|
|
colmgr :: add_path(c_chooser->get_filename());
|
|
lib :: idle(on_idle);
|
|
}
|
|
|
|
static void on_update()
|
|
{
|
|
library :: update_all();
|
|
lib :: idle(on_idle);
|
|
}
|
|
|
|
static void on_row_activated(const Gtk::TreePath &path, Gtk::TreeViewColumn *col)
|
|
{
|
|
colmgr :: update_path(path);
|
|
lib :: idle(on_idle);
|
|
}
|
|
|
|
static void on_cursor_changed()
|
|
{
|
|
Gtk::TreePath path;
|
|
if (find_cur_path(path))
|
|
cd_chooser(colmgr :: get_path(path));
|
|
}
|
|
|
|
static bool on_key_pressed(GdkEventKey *event)
|
|
{
|
|
Gtk::TreePath path;
|
|
|
|
if (lib :: key_name(event) != "Delete")
|
|
return false;
|
|
|
|
if (find_cur_path(path))
|
|
colmgr :: del_path(path);
|
|
return true;
|
|
}
|
|
|
|
static void on_toggled(const Glib::ustring &path)
|
|
{
|
|
colmgr :: toggle_path_enabled(Gtk::TreePath(path));
|
|
}
|
|
|
|
void collection_mgr_init()
|
|
{
|
|
Glib::RefPtr<Gtk::CellRendererToggle> toggle;
|
|
|
|
c_treeview = lib :: get_widget<Gtk::TreeView>("colmgr_treeview");
|
|
c_progress = lib :: get_widget<Gtk::ProgressBar>("o_idle_progress");
|
|
c_chooser = lib :: get_widget<Gtk::FileChooserWidget>("colmgr_chooser");
|
|
toggle = lib :: get_object<Gtk::CellRendererToggle>("colmgr_toggle");
|
|
|
|
connect_button("colmgr_add", on_ok);
|
|
connect_button("colmgr_update", on_update);
|
|
|
|
c_treeview->signal_row_activated().connect(sigc::ptr_fun(on_row_activated));
|
|
c_treeview->signal_cursor_changed().connect(sigc::ptr_fun(on_cursor_changed));
|
|
c_treeview->signal_key_press_event().connect(sigc::ptr_fun(on_key_pressed));
|
|
toggle->signal_toggled().connect(sigc::ptr_fun(on_toggled));
|
|
|
|
colmgr :: init();
|
|
}
|