chiark / gitweb /
Disobedience choose 'select all' now only selects tracks (and
[disorder] / disobedience / choose.c
index 569b8b7d7b3e1bb19657c643d41c49a01196fd46..27ba940b25464b14eb6bcbc0d78ca0555a7bac7b 100644 (file)
  * TODO:
  * - sweep up contracted nodes
  * - update when content may have changed (e.g. after a rescan)
- * - popup menu
  * - playing state
  * - display length of tracks
  */
 
 #include "disobedience.h"
-
-/** @brief Extra data at each node */
-struct choosedata {
-  /** @brief Node type */
-  int type;
-
-  /** @brief Full track or directory name */
-  gchar *track;
-
-  /** @brief Sort key */
-  gchar *sort;
-};
-
-/** @brief Track name column number */
-#define NAME_COLUMN 0
-
-/** @brief Hidden column number */
-#define CHOOSEDATA_COLUMN 1
-
-/** @brief @ref choosedata node is a file */
-#define CHOOSE_FILE 0
-
-/** @brief @ref choosedata node is a directory */
-#define CHOOSE_DIRECTORY 1
+#include "choose.h"
 
 /** @brief The current selection tree */
-static GtkTreeStore *choose_store;
+GtkTreeStore *choose_store;
 
 /** @brief The view onto the selection tree */
-static GtkWidget *choose_view;
+GtkWidget *choose_view;
 
 /** @brief The selection tree's selection */
-static GtkTreeSelection *choose_selection;
-
-/** @brief Popup menu */
-//static GtkWidget *choose_menu;
+GtkTreeSelection *choose_selection;
 
 /** @brief Map choosedata types to names */
 static const char *const choose_type_map[] = { "track", "dir" };
 
 /** @brief Return the choosedata given an interator */
-static struct choosedata *choose_iter_to_data(GtkTreeIter *iter) {
+struct choosedata *choose_iter_to_data(GtkTreeIter *iter) {
   GValue v[1];
   memset(v, 0, sizeof v);
   gtk_tree_model_get_value(GTK_TREE_MODEL(choose_store), iter, CHOOSEDATA_COLUMN, v);
@@ -95,6 +68,14 @@ static struct choosedata *choose_iter_to_data(GtkTreeIter *iter) {
   return cd;
 }
 
+struct choosedata *choose_path_to_data(GtkTreePath *path) {
+  GtkTreeIter it[1];
+  gboolean itv = gtk_tree_model_get_iter(GTK_TREE_MODEL(choose_store),
+                                         it, path);
+  assert(itv);
+  return choose_iter_to_data(it);
+}
+
 /** @brief Remove node @p it and all its children
  * @param Iterator, updated to point to next
  * @return True if iterator remains valid
@@ -275,41 +256,6 @@ static void choose_row_expanded(GtkTreeView attribute((unused)) *treeview,
   /* The row references are destroyed in the _completed handlers. */
 }
 
-static int choose_tab_selectall_sensitive(void attribute((unused)) *extra) {
-  return TRUE;
-}
-  
-static void choose_tab_selectall_activate(void attribute((unused)) *extra) {
-  gtk_tree_selection_select_all(choose_selection);
-}
-  
-static int choose_tab_selectnone_sensitive(void attribute((unused)) *extra) {
-  return gtk_tree_selection_count_selected_rows(choose_selection) > 0;
-}
-  
-static void choose_tab_selectnone_activate(void attribute((unused)) *extra) {
-  gtk_tree_selection_unselect_all(choose_selection);
-}
-  
-static int choose_tab_properties_sensitive(void attribute((unused)) *extra) {
-  return TRUE;
-}
-  
-static void choose_tab_properties_activate(void attribute((unused)) *extra) {
-  fprintf(stderr, "TODO choose_tab_properties_activate\n");
-}
-
-static const struct tabtype choose_tabtype = {
-  choose_tab_properties_sensitive,
-  choose_tab_selectall_sensitive,
-  choose_tab_selectnone_sensitive,
-  choose_tab_properties_activate,
-  choose_tab_selectall_activate,
-  choose_tab_selectnone_activate,
-  0,
-  0
-};
-
 /** @brief Create the choose tab */
 GtkWidget *choose_widget(void) {
   /* Create the tree store. */
@@ -334,8 +280,10 @@ GtkWidget *choose_widget(void) {
   gtk_tree_selection_set_mode(choose_selection, GTK_SELECTION_MULTIPLE);
 
   /* Catch button presses */
-  /*g_signal_connect(choose_view, "button-press-event",
-    G_CALLBACK(choose_button_release), 0);*/
+  g_signal_connect(choose_view, "button-press-event",
+                   G_CALLBACK(choose_button_event), 0);
+  g_signal_connect(choose_view, "button-release-event",
+                   G_CALLBACK(choose_button_event), 0);
   /* Catch row expansions so we can fill in placeholders */
   g_signal_connect(choose_view, "row-expanded",
                    G_CALLBACK(choose_row_expanded), 0);