Highlight auditioned clips
This changes the color of auditioned clips in the clip-list. The highlight is reset when changing folders or when importing a clip via DnD.
This commit is contained in:
parent
61fc46ff79
commit
a0a2138651
|
@ -180,6 +180,13 @@ TriggerClipPicker::TriggerClipPicker ()
|
|||
_view.set_reorderable (false);
|
||||
_view.get_selection ()->set_mode (SELECTION_MULTIPLE);
|
||||
|
||||
Gtk::TreeViewColumn* name_col = _view.get_column (0);
|
||||
Gtk::CellRendererText* renderer = dynamic_cast<Gtk::CellRendererText*> (_view.get_column_cell_renderer (0));
|
||||
name_col->add_attribute (renderer->property_foreground_gdk (), _columns.color);
|
||||
|
||||
_view.ensure_style ();
|
||||
on_theme_changed ();
|
||||
|
||||
/* DnD source */
|
||||
std::vector<TargetEntry> dnd;
|
||||
dnd.push_back (TargetEntry ("text/uri-list"));
|
||||
|
@ -201,6 +208,8 @@ TriggerClipPicker::TriggerClipPicker ()
|
|||
_view.signal_drag_motion ().connect (sigc::mem_fun (*this, &TriggerClipPicker::drag_motion));
|
||||
_view.signal_drag_data_received ().connect (sigc::mem_fun (*this, &TriggerClipPicker::drag_data_received));
|
||||
|
||||
UIConfiguration::instance ().ColorsChanged.connect (sigc::mem_fun (*this, &TriggerClipPicker::on_theme_changed));
|
||||
UIConfiguration::instance ().ParameterChanged.connect (sigc::mem_fun (*this, &TriggerClipPicker::parameter_changed));
|
||||
Config->ParameterChanged.connect (_config_connection, invalidator (*this), boost::bind (&TriggerClipPicker::parameter_changed, this, _1), gui_context ());
|
||||
LibraryClipAdded.connect (_clip_added_connection, invalidator (*this), boost::bind (&TriggerClipPicker::clip_added, this, _1, _2), gui_context ());
|
||||
|
||||
|
@ -239,6 +248,8 @@ TriggerClipPicker::parameter_changed (std::string const& p)
|
|||
} else if (p == "clip-library-dir") {
|
||||
_clip_library_dir = clip_library_dir ();
|
||||
refill_dropdown ();
|
||||
} else if (p == "highlight-auditioned-clips") {
|
||||
reset_audition_marks (true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -452,6 +463,7 @@ TriggerClipPicker::cursor_changed ()
|
|||
* However, checking if `i` is _view.get_selection () does not reliably work from this context.
|
||||
*/
|
||||
if (i && (*i)[_columns.file]) {
|
||||
mark_auditioned (i);
|
||||
audition ((*i)[_columns.path]);
|
||||
}
|
||||
}
|
||||
|
@ -515,6 +527,7 @@ TriggerClipPicker::row_activated (TreeModel::Path const& p, TreeViewColumn*)
|
|||
{
|
||||
TreeModel::iterator i = _model->get_iter (p);
|
||||
if (i && (*i)[_columns.file]) {
|
||||
mark_auditioned (i);
|
||||
audition ((*i)[_columns.path]);
|
||||
} else if (i) {
|
||||
list_dir ((*i)[_columns.path]);
|
||||
|
@ -571,6 +584,7 @@ TriggerClipPicker::drag_data_get (Glib::RefPtr<Gdk::DragContext> const&, Selecti
|
|||
}
|
||||
}
|
||||
data.set_uris (uris);
|
||||
reset_audition_marks ();
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -756,11 +770,12 @@ TriggerClipPicker::list_dir (std::string const& path, Gtk::TreeNodeChildren cons
|
|||
|
||||
if (!pc) {
|
||||
if (_root_paths.find (_current_path) == _root_paths.end ()) {
|
||||
TreeModel::Row row = *(_model->append ());
|
||||
row[_columns.name] = "..";
|
||||
row[_columns.path] = Glib::path_get_dirname (_current_path);
|
||||
row[_columns.read] = false;
|
||||
row[_columns.file] = false;
|
||||
TreeModel::Row row = *(_model->append ());
|
||||
row[_columns.name] = "..";
|
||||
row[_columns.path] = Glib::path_get_dirname (_current_path);
|
||||
row[_columns.read] = false;
|
||||
row[_columns.file] = false;
|
||||
row[_columns.color] = _color_foreground;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -776,8 +791,9 @@ TriggerClipPicker::list_dir (std::string const& path, Gtk::TreeNodeChildren cons
|
|||
row[_columns.read] = false;
|
||||
row[_columns.file] = false;
|
||||
/* add stub child */
|
||||
row = *(_model->append (row.children ()));
|
||||
row[_columns.read] = false;
|
||||
row = *(_model->append (row.children ()));
|
||||
row[_columns.read] = false;
|
||||
row[_columns.color] = _color_foreground;
|
||||
}
|
||||
|
||||
for (auto& f : files) {
|
||||
|
@ -898,9 +914,46 @@ TriggerClipPicker::audition_selected ()
|
|||
}
|
||||
TreeView::Selection::ListHandle_Path rows = _view.get_selection ()->get_selected_rows ();
|
||||
TreeIter i = _model->get_iter (*rows.begin ());
|
||||
mark_auditioned (i);
|
||||
audition ((*i)[_columns.path]);
|
||||
}
|
||||
|
||||
void
|
||||
TriggerClipPicker::mark_auditioned (TreeModel::iterator i)
|
||||
{
|
||||
if (!UIConfiguration::instance ().get_highlight_auditioned_clips()) {
|
||||
return;
|
||||
}
|
||||
(*i)[_columns.color] = _color_auditioned;
|
||||
(*i)[_columns.auditioned] = true;
|
||||
}
|
||||
|
||||
void
|
||||
TriggerClipPicker::reset_audition_marks (bool force)
|
||||
{
|
||||
for (auto const& i : _model->children ()) {
|
||||
if (i[_columns.auditioned] || force) {
|
||||
i[_columns.color] = _color_foreground;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TriggerClipPicker::on_theme_changed ()
|
||||
{
|
||||
_color_foreground = _view.get_style ()->get_fg (STATE_NORMAL);
|
||||
_color_auditioned = _view.get_style ()->get_fg (STATE_INSENSITIVE);
|
||||
|
||||
for (auto const& i : _model->children ()) {
|
||||
if (i[_columns.auditioned]) {
|
||||
i[_columns.color] = _color_auditioned;
|
||||
} else {
|
||||
i[_columns.color] = _color_foreground;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TriggerClipPicker::audition (std::string const& path)
|
||||
{
|
||||
|
|
|
@ -88,6 +88,9 @@ private:
|
|||
bool seek_button_press (GdkEventButton*);
|
||||
bool seek_button_release (GdkEventButton*);
|
||||
void auditioner_combo_changed ();
|
||||
void on_theme_changed ();
|
||||
void mark_auditioned (Gtk::TreeModel::iterator);
|
||||
void reset_audition_marks (bool force = false);
|
||||
|
||||
ArdourWidgets::ArdourDropdown _clip_dir_menu;
|
||||
Gtk::FileChooserDialog _fcd;
|
||||
|
@ -99,11 +102,15 @@ private:
|
|||
add (path);
|
||||
add (read);
|
||||
add (file);
|
||||
add (color);
|
||||
add (auditioned);
|
||||
}
|
||||
Gtk::TreeModelColumn<std::string> name;
|
||||
Gtk::TreeModelColumn<std::string> path;
|
||||
Gtk::TreeModelColumn<bool> read;
|
||||
Gtk::TreeModelColumn<bool> file;
|
||||
Gtk::TreeModelColumn<Gdk::Color> color;
|
||||
Gtk::TreeModelColumn<bool> auditioned;
|
||||
};
|
||||
|
||||
Columns _columns;
|
||||
|
@ -118,6 +125,8 @@ private:
|
|||
ArdourWidgets::ArdourButton _show_plugin_btn;
|
||||
Gtk::HScale _seek_slider;
|
||||
Gtk::CheckButton _autoplay_btn;
|
||||
Gdk::Color _color_foreground;
|
||||
Gdk::Color _color_auditioned;
|
||||
|
||||
/* MIDI props */
|
||||
Gtk::Table _midi_prop_table;
|
||||
|
|
|
@ -51,6 +51,7 @@ UI_CONFIG_VARIABLE (std::string, vkeybd_layout, "vkeybd-layout", "QWERTY Single"
|
|||
UI_CONFIG_VARIABLE (bool, only_copy_imported_files, "only-copy-imported-files", true)
|
||||
UI_CONFIG_VARIABLE (bool, autoplay_files, "autoplay-files", false)
|
||||
UI_CONFIG_VARIABLE (bool, autoplay_clips, "autoplay-clips", true)
|
||||
UI_CONFIG_VARIABLE (bool, highlight_auditioned_clips, "highlight-auditioned-clips", true)
|
||||
UI_CONFIG_VARIABLE (bool, default_narrow_ms, "default-narrow_ms", false)
|
||||
UI_CONFIG_VARIABLE (bool, name_new_markers, "name-new-markers", false)
|
||||
UI_CONFIG_VARIABLE (bool, rubberbanding_snaps_to_grid, "rubberbanding-snaps-to-grid", false)
|
||||
|
|
Loading…
Reference in New Issue