mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Allow multiple selections in the dive list
At this point we don't do anything with this - the commit just provides the infrastructure changes so that this becomes possible. Subsurface behaves the same if exactly one dive is selected and simply keeps the last selected dive if zero or more than one dives are selected. The goal is to be able to select multiple dives and then do actions on them. For example pick a tank used for all of them. Or edit the location or (yet to be implemented) other equipment data like weight carried. And also to be able to merge multiple dives. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
312eaed464
commit
19a1693f58
1 changed files with 31 additions and 6 deletions
37
divelist.c
37
divelist.c
|
@ -50,17 +50,42 @@ enum {
|
|||
DIVELIST_COLUMNS
|
||||
};
|
||||
|
||||
static GList *selected_dives;
|
||||
|
||||
static void selection_cb(GtkTreeSelection *selection, GtkTreeModel *model)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
GValue value = {0, };
|
||||
GtkTreePath *path;
|
||||
|
||||
if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
|
||||
int nr_selected = gtk_tree_selection_count_selected_rows(selection);
|
||||
|
||||
if (selected_dives) {
|
||||
g_list_foreach (selected_dives, (GFunc) gtk_tree_path_free, NULL);
|
||||
g_list_free (selected_dives);
|
||||
}
|
||||
selected_dives = gtk_tree_selection_get_selected_rows(selection, NULL);
|
||||
|
||||
switch (nr_selected) {
|
||||
case 0: /* keep showing the last selected dive */
|
||||
return;
|
||||
|
||||
gtk_tree_model_get_value(model, &iter, DIVE_INDEX, &value);
|
||||
selected_dive = g_value_get_int(&value);
|
||||
repaint_dive();
|
||||
case 1:
|
||||
/* just pick that dive as selected */
|
||||
path = g_list_nth_data(selected_dives, 0);
|
||||
if (gtk_tree_model_get_iter(model, &iter, path)) {
|
||||
gtk_tree_model_get_value(model, &iter, DIVE_INDEX, &value);
|
||||
selected_dive = g_value_get_int(&value);
|
||||
repaint_dive();
|
||||
}
|
||||
return;
|
||||
default: /* multiple selections - what now? At this point I
|
||||
* don't want to change the selected dive unless
|
||||
* there is exactly one dive selected; not sure this
|
||||
* is the most intuitive solution.
|
||||
* I do however want to keep around which dives have
|
||||
* been selected */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void date_data_func(GtkTreeViewColumn *col,
|
||||
|
@ -505,7 +530,7 @@ GtkWidget *dive_list_create(void)
|
|||
|
||||
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dive_list.tree_view));
|
||||
|
||||
gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);
|
||||
gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_MULTIPLE);
|
||||
gtk_widget_set_size_request(dive_list.tree_view, 200, 200);
|
||||
|
||||
dive_list.date = divelist_column(&dive_list, DIVE_DATE, "Date", date_data_func, PANGO_ALIGN_LEFT, TRUE);
|
||||
|
|
Loading…
Add table
Reference in a new issue