17
17
* You should have received a copy of the GNU General Public License
18
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
37
37
#include "rhythmdb-property-model.h"
38
38
#include "rb-stock-icons.h"
39
39
#include "eel-gconf-extensions.h"
41
42
static void rb_property_view_class_init (RBPropertyViewClass *klass);
42
43
static void rb_property_view_init (RBPropertyView *view);
62
63
static void rb_property_view_post_row_deleted_cb (GtkTreeModel *model,
64
65
RBPropertyView *view);
66
static gboolean rb_property_view_popup_menu_cb (GtkTreeView *treeview,
67
RBPropertyView *view);
68
static gboolean rb_property_view_button_press_cb (GtkTreeView *tree,
69
GdkEventButton *event,
70
RBPropertyView *view);
66
72
struct RBPropertyViewPrivate
218
225
g_cclosure_marshal_VOID__VOID,
228
rb_property_view_signals[SHOW_POPUP] =
229
g_signal_new ("show_popup",
230
G_OBJECT_CLASS_TYPE (object_class),
232
G_STRUCT_OFFSET (RBPropertyViewClass, show_popup),
234
g_cclosure_marshal_VOID__VOID,
222
239
g_type_class_add_private (klass, sizeof (RBPropertyViewPrivate));
303
320
G_CALLBACK (rb_property_view_selection_changed_cb),
306
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (view->priv->prop_model), &iter);
307
323
gtk_tree_selection_unselect_all (view->priv->selection);
308
gtk_tree_selection_select_iter (view->priv->selection, &iter);
324
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (view->priv->prop_model), &iter))
325
gtk_tree_selection_select_iter (view->priv->selection, &iter);
309
326
g_signal_handlers_unblock_by_func (G_OBJECT (view->priv->selection),
310
327
G_CALLBACK (rb_property_view_selection_changed_cb),
429
446
if (gtk_tree_selection_count_selected_rows (view->priv->selection) == 0) {
430
447
GtkTreeIter first_iter;
431
448
rb_debug ("no rows selected, signalling reset");
432
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (view->priv->prop_model),
434
g_signal_handlers_block_by_func (G_OBJECT (view->priv->selection),
435
G_CALLBACK (rb_property_view_selection_changed_cb),
437
gtk_tree_selection_select_iter (view->priv->selection, &first_iter);
438
g_signal_emit (G_OBJECT (view), rb_property_view_signals[SELECTION_RESET], 0);
439
g_signal_handlers_unblock_by_func (G_OBJECT (view->priv->selection),
440
G_CALLBACK (rb_property_view_selection_changed_cb),
449
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (view->priv->prop_model), &first_iter)) {
450
g_signal_handlers_block_by_func (G_OBJECT (view->priv->selection),
451
G_CALLBACK (rb_property_view_selection_changed_cb),
453
gtk_tree_selection_select_iter (view->priv->selection, &first_iter);
454
g_signal_emit (G_OBJECT (view), rb_property_view_signals[SELECTION_RESET], 0);
455
g_signal_handlers_unblock_by_func (G_OBJECT (view->priv->selection),
456
G_CALLBACK (rb_property_view_selection_changed_cb),
536
553
G_CALLBACK (rb_property_view_selection_changed_cb),
556
g_signal_connect_object (G_OBJECT (view->priv->treeview),
558
G_CALLBACK (rb_property_view_popup_menu_cb),
562
g_signal_connect_object (G_OBJECT (view->priv->treeview),
563
"button_press_event",
564
G_CALLBACK (rb_property_view_button_press_cb),
540
569
gtk_container_add (GTK_CONTAINER (view), view->priv->treeview);
569
598
rb_debug ("row activated");
570
gtk_tree_model_get_iter (GTK_TREE_MODEL (view->priv->prop_model), &iter, path);
599
g_return_if_fail (gtk_tree_model_get_iter (GTK_TREE_MODEL (view->priv->prop_model),
572
602
gtk_tree_model_get (GTK_TREE_MODEL (view->priv->prop_model), &iter,
573
603
RHYTHMDB_PROPERTY_MODEL_COLUMN_TITLE, &val,
647
677
G_CALLBACK (rb_property_view_selection_changed_cb),
649
679
gtk_tree_selection_unselect_all (selection);
650
gtk_tree_model_get_iter_first (model, &iter);
651
gtk_tree_selection_select_iter (selection, &iter);
680
if (gtk_tree_model_get_iter_first (model, &iter))
681
gtk_tree_selection_select_iter (selection, &iter);
652
682
g_signal_handlers_unblock_by_func (G_OBJECT (view->priv->selection),
653
683
G_CALLBACK (rb_property_view_selection_changed_cb),
656
686
g_signal_emit (G_OBJECT (view), rb_property_view_signals[PROPERTIES_SELECTED], 0,
657
687
selected_properties);
688
rb_list_deep_free (selected_properties);
659
690
if (gtk_tree_selection_get_selected (view->priv->selection, &model, &iter)) {
660
691
gtk_tree_model_get (model, &iter,
664
695
is_all ? NULL : selected_prop);
670
rb_property_view_get_treeview (RBPropertyView *view)
672
return view->priv->treeview;
699
g_free (selected_prop);
703
rb_property_view_popup_menu_cb (GtkTreeView *treeview,
704
RBPropertyView *view)
706
g_signal_emit (G_OBJECT (view), rb_property_view_signals[SHOW_POPUP], 0);
711
rb_property_view_append_column_custom (RBPropertyView *view,
712
GtkTreeViewColumn *column)
714
gtk_tree_view_append_column (GTK_TREE_VIEW (view->priv->treeview), column);
718
rb_property_view_button_press_cb (GtkTreeView *tree,
719
GdkEventButton *event,
720
RBPropertyView *view)
723
if (event->button == 3) {
724
GtkTreeSelection *selection;
727
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->priv->treeview));
729
gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (view->priv->treeview), event->x, event->y, &path, NULL, NULL, NULL);
731
gtk_tree_selection_unselect_all (selection);
738
model = gtk_tree_view_get_model (GTK_TREE_VIEW (view->priv->treeview));
739
if (gtk_tree_model_get_iter (model, &iter, path)) {
740
gtk_tree_model_get (model, &iter, 0, &val, -1);
741
lst = g_list_prepend (lst, (gpointer) val);
742
rb_property_view_set_selection (view, lst);
745
g_signal_emit (G_OBJECT (view), rb_property_view_signals[SHOW_POPUP], 0);
753
rb_property_view_set_search_func (RBPropertyView *view,
754
GtkTreeViewSearchEqualFunc func,
756
GtkDestroyNotify notify)
758
gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (view->priv->treeview),