107
static GObjectClass *parent_class = NULL;
109
104
static guint rb_property_view_signals[LAST_SIGNAL] = { 0 };
111
static const GtkTargetEntry target_album [] = { { "text/x-rhythmbox-album", 0, 0 } };
112
static const GtkTargetEntry target_genre [] = { { "text/x-rhythmbox-genre", 0, 0 } };
113
static const GtkTargetEntry target_artist [] = { { "text/x-rhythmbox-artist", 0, 0 } };
116
rb_property_view_get_type (void)
118
static GType rb_property_view_type = 0;
120
if (rb_property_view_type == 0)
122
static const GTypeInfo our_info =
124
sizeof (RBPropertyViewClass),
127
(GClassInitFunc) rb_property_view_class_init,
130
sizeof (RBPropertyView),
132
(GInstanceInitFunc) rb_property_view_init
135
rb_property_view_type = g_type_register_static (GTK_TYPE_SCROLLED_WINDOW,
140
return rb_property_view_type;
113
static const GtkTargetEntry targets_album [] = {
114
{ "text/x-rhythmbox-album", 0, TARGET_ALBUMS },
115
{ "text/uri-list", 0, TARGET_URIS },
117
static const GtkTargetEntry targets_genre [] = {
118
{ "text/x-rhythmbox-genre", 0, TARGET_GENRE },
119
{ "text/uri-list", 0, TARGET_URIS },
121
static const GtkTargetEntry targets_artist [] = {
122
{ "text/x-rhythmbox-artist", 0, TARGET_ARTISTS },
123
{ "text/uri-list", 0, TARGET_URIS },
126
G_DEFINE_TYPE (RBPropertyView, rb_property_view, GTK_TYPE_SCROLLED_WINDOW)
144
130
rb_property_view_class_init (RBPropertyViewClass *klass)
146
132
GObjectClass *object_class = G_OBJECT_CLASS (klass);
148
parent_class = g_type_class_peek_parent (klass);
150
134
object_class->finalize = rb_property_view_finalize;
151
135
object_class->constructor = rb_property_view_constructor;
184
168
"RhythmDBPropertyModel",
185
169
RHYTHMDB_TYPE_PROPERTY_MODEL,
186
170
G_PARAM_READWRITE));
171
g_object_class_install_property (object_class,
173
g_param_spec_boolean ("draggable",
177
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
188
179
rb_property_view_signals[PROPERTY_ACTIVATED] =
189
180
g_signal_new ("property-activated",
294
287
gtk_tree_view_set_model (GTK_TREE_VIEW (view->priv->treeview),
295
288
GTK_TREE_MODEL (view->priv->prop_model));
290
g_object_ref (G_OBJECT (view->priv->prop_model));
297
291
g_signal_connect_object (G_OBJECT (view->priv->prop_model),
298
292
"pre-row-deletion",
299
293
G_CALLBACK (rb_property_view_pre_row_deleted_cb),
468
rb_property_view_drag_data_get (GtkWidget *widget, GdkDragContext *context,
469
GtkSelectionData *selection_data, guint info,
470
guint time, gpointer data)
473
RBPropertyView *view;
476
GList *selected_rows;
478
view = RB_PROPERTY_VIEW (data);
480
selected_rows = gtk_tree_selection_get_selected_rows (view->priv->selection, &model);
481
g_assert (gtk_tree_model_get_iter (model, &iter, selected_rows->data));
482
gtk_tree_model_get(model, &iter, 0, &str, -1);
483
gtk_selection_data_set (selection_data, selection_data->target,
484
8, str, strlen (str));
488
468
rb_property_view_constructor (GType type, guint n_construct_properties,
489
469
GObjectConstructParam *construct_properties)
494
474
RBPropertyView *view;
495
475
RBPropertyViewClass *klass;
496
GObjectClass *parent_class;
497
const GtkTargetEntry *target;
501
477
klass = RB_PROPERTY_VIEW_CLASS (g_type_class_peek (RB_TYPE_PROPERTY_VIEW));
503
parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
504
view = RB_PROPERTY_VIEW (parent_class->constructor (type, n_construct_properties,
505
construct_properties));
479
view = RB_PROPERTY_VIEW (G_OBJECT_CLASS (rb_property_view_parent_class)->
480
constructor (type, n_construct_properties, construct_properties));
507
482
view->priv->prop_model = rhythmdb_property_model_new (view->priv->db, view->priv->propid);
508
483
view->priv->treeview = GTK_WIDGET (gtk_tree_view_new_with_model (GTK_TREE_MODEL (view->priv->prop_model)));
509
gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view->priv->treeview), TRUE);
511
switch (view->priv->propid)
513
case RHYTHMDB_PROP_GENRE:
514
target = target_genre;
516
case RHYTHMDB_PROP_ALBUM:
517
target = target_album;
519
case RHYTHMDB_PROP_ARTIST:
520
target = target_artist;
524
g_assert_not_reached ();
527
gtk_drag_source_set (GTK_WIDGET(view->priv->treeview),
532
g_signal_connect_object (G_OBJECT (view->priv->treeview), "drag_data_get",
533
G_CALLBACK (rb_property_view_drag_data_get), view, 0);
485
if (view->priv->draggable)
486
rhythmdb_property_model_enable_drag (view->priv->prop_model,
487
GTK_TREE_VIEW (view->priv->treeview));
535
489
g_signal_connect_object (G_OBJECT (view->priv->treeview),
537
491
G_CALLBACK (rb_property_view_row_activated_cb),
540
495
view->priv->selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->priv->treeview));
541
496
g_signal_connect_object (G_OBJECT (view->priv->selection),
596
550
GtkTreeIter iter;
598
552
if (rhythmdb_property_model_iter_from_string (view->priv->prop_model, vals->data, &iter)) {
599
555
gtk_tree_selection_select_iter (view->priv->selection, &iter);
556
path = gtk_tree_model_get_path (GTK_TREE_MODEL (view->priv->prop_model), &iter);
558
gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (view->priv->treeview),
561
gtk_tree_path_free (path);