106
120
GtkTreeIter children;
107
if (gtk_tree_model_iter_children (GTK_TREE_MODEL(mm_store),
121
if (gtk_tree_model_iter_children (mm_model, &children, iter))
109
122
count = gen_actions_sub (ui, actions, &children, count);
112
} while (gtk_tree_model_iter_next (GTK_TREE_MODEL(mm_store), iter));
125
} while (gtk_tree_model_iter_next (mm_model, iter));
141
154
GtkTreeIter children;
142
155
gtk_ui_manager_add_ui (ui, merge, path, name, name,
143
156
GTK_UI_MANAGER_MENU, FALSE);
144
if (gtk_tree_model_iter_children (GTK_TREE_MODEL(mm_store),
157
if (gtk_tree_model_iter_children (mm_model, &children, iter))
147
159
char *newpath = g_strdup_printf ("%s/%s", path, name);
148
160
count = gen_items (ui, newpath, &children, merge, count);
316
328
sscanf (str, "%d", &time);
317
play_item = play_item_new (id, mrl, time);
329
play_item = play_item_new (id, mrl, time, 0);
319
331
gtk_tree_store_append (mm_store, &iter, depth ? &parent : NULL);
320
332
gtk_tree_store_set (mm_store, &iter,
411
static gboolean row_clicked_lcb (GtkWidget *widget, GdkEventButton *ev,
414
return list_menu_click_cb (tree, ev, (GtkMenu **) data);
417
static gboolean key_press_lcb (GtkWidget *widget, GdkEventButton *ev,
420
return list_menu_key_press_cb (tree, ev, (GtkMenu **) data);
399
423
static void delete_cb (GtkWidget* widget, gpointer data)
401
425
GtkTreeIter iter;
528
552
const char *title = xine_get_meta_info (stream, XINE_META_INFO_TITLE);
530
play_item = playlist_get_current_item () ? : play_item_new ("", "", 0);
554
play_item = playlist_get_current_item () ? : play_item_new ("", "", 0, 0);
532
556
/* default title? try to get title from meta-info */
533
557
dot = strrchr (play_item->mrl, '.');
723
static gboolean map_cb (GtkWidget* widget, gpointer data)
725
gdk_window_set_events (widget->window,
726
gdk_window_get_events (widget->window) | GDK_BUTTON_PRESS_MASK);
699
730
static const GtkActionEntry buttons_data[] = {
731
{ "play", GTK_STOCK_MEDIA_PLAY, NULL, NULL, NULL, play_cb },
700
732
{ "new", GTK_STOCK_NEW, NULL, NULL, N_("Add an MRL"), mm_add_show },
701
{ "newcat", GTK_STOCK_DIRECTORY, N_("New category"), "<Control>F", N_("Add a category folder"), new_category_cb },
733
{ "newcat", GTK_STOCK_DIRECTORY, N_("_Category"), "<Control>F", N_("Add a category folder"), new_category_cb },
702
734
{ "edit", GTK_STOCK_EDIT, NULL, "<Control>E", N_("Edit the selected item"), edit_cb },
703
735
{ "delete", GTK_STOCK_DELETE, NULL, "Delete", N_("Delete the selected item"), delete_cb },
704
736
{ "copy", GTK_STOCK_COPY, NULL, NULL, NULL, copy_cb },
716
748
"<toolitem action='copy' />\n"
717
749
"<toolitem action='cut' />\n"
718
750
"<toolitem action='paste' />\n"
752
"<toolitem action='play' />\n"
754
"<popup name='item_menu'>\n"
755
"<menuitem action='play' />\n"
757
"<menuitem action='edit' />\n"
758
"<menuitem action='delete' />\n"
759
"<menuitem action='copy' />\n"
760
"<menuitem action='cut' />\n"
761
"<menuitem action='paste' />\n"
763
"<popup name='list_menu'>\n"
764
"<menuitem action='new' />\n"
765
"<menuitem action='newcat' />\n"
766
"<menuitem action='paste' />\n"
722
770
static void sel_changed_cb (GtkTreeSelection *sel, gpointer data)
724
772
static const char *const items[] = { "edit", "delete", NULL };
725
static const char *const cb_items[] = { "copy", "cut", NULL };
773
static const char *const cb_items[] = { "play", "copy", "cut", NULL };
726
774
GtkTreeIter iter;
727
775
gboolean have_selected = gtk_tree_selection_get_selected (sel, NULL, &iter);
736
784
void mediamarks_init (void)
738
GtkWidget *tree, *scrolled_window, *hbox, *label;
786
GtkWidget *scrolled_window, *hbox, *label;
741
789
GtkCellRenderer *cell;
742
790
GtkTreeViewColumn *column;
791
GError *error = NULL;
794
* create (for now invisible) mm_manage dialog
797
manage_dlg = gtk_dialog_new_with_buttons (_("Manage media marks..."), NULL, 0,
798
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
799
GTK_STOCK_CLOSE, GTK_RESPONSE_DELETE_EVENT,
801
gtk_window_set_default_size (GTK_WINDOW (manage_dlg), 400, 250);
802
hide_on_delete (manage_dlg, &is_visible);
803
vbox = GTK_BOX (GTK_DIALOG (manage_dlg)->vbox);
805
/* buttons & menus */
807
mm_ui = ui_create_manager ("mm", manage_dlg);
808
GtkActionGroup *group = ui_get_action_group (mm_ui);
809
gtk_action_group_add_actions (group, buttons_data,
810
G_N_ELEMENTS (buttons_data), tree);
811
gtk_ui_manager_add_ui_from_string (mm_ui, buttons_structure, -1, &error);
814
g_printerr (_("playlist XML: %s\n"), error->message);
815
g_clear_error (&error);
817
menu[0] = GTK_MENU (gtk_ui_manager_get_widget (mm_ui, "/ui/list_menu"));
818
menu[1] = GTK_MENU (gtk_ui_manager_get_widget (mm_ui, "/ui/item_menu"));
819
play_item = gtk_action_group_get_action (group, "play");
820
gtk_action_group_connect_accelerators (group);
746
823
* init tree store
756
833
"signal::rows-reordered", G_CALLBACK (tree_changed_cb), NULL,
760
* create (for now invisible) mm_manage dialog
763
manage_dlg = gtk_dialog_new_with_buttons (_("Manage media marks..."), NULL, 0,
764
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
765
GTK_STOCK_CLOSE, GTK_RESPONSE_DELETE_EVENT,
767
gtk_window_set_default_size (GTK_WINDOW (manage_dlg), 400, 250);
768
g_signal_connect (G_OBJECT(manage_dlg), "response",
769
G_CALLBACK(mm_response_cb), NULL);
770
hide_on_delete (manage_dlg, &is_visible);
772
vbox = GTK_BOX (GTK_DIALOG (manage_dlg)->vbox);
836
/* connect up the signals now that the menus etc. are initialised */
838
g_object_connect (G_OBJECT(manage_dlg),
839
"signal::map-event", G_CALLBACK (map_cb), NULL,
840
"signal::button-press-event", G_CALLBACK(list_menu_popup_cb), menu[0],
841
"signal::key-press-event", G_CALLBACK(key_press_lcb), menu,
842
"signal::response", G_CALLBACK(mm_response_cb), NULL,
774
845
/* add a nice toolbar and tree view widget here */
776
mm_tree = tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(mm_store));
777
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree), TRUE);
847
mm_tree = gtk_tree_view_new_with_model (mm_model);
848
tree = GTK_TREE_VIEW (mm_tree);
849
gtk_tree_view_set_rules_hint (tree, TRUE);
779
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
851
sel = gtk_tree_view_get_selection (tree);
780
852
g_signal_connect (G_OBJECT (sel), "changed",
781
853
G_CALLBACK (sel_changed_cb), NULL);
785
mm_ui = ui_create_manager ("mm", manage_dlg);
786
gtk_action_group_add_actions (ui_get_action_group (mm_ui), buttons_data,
787
G_N_ELEMENTS (buttons_data), tree);
788
gtk_ui_manager_add_ui_from_string (mm_ui, buttons_structure, -1, &error);
789
gtk_box_pack_start (vbox, gtk_ui_manager_get_widget (mm_ui, "/toolbar"),
855
gtk_box_pack_start (vbox, gtk_ui_manager_get_widget (mm_ui, "/ui/toolbar"),
790
856
FALSE, FALSE, 0);
791
gtk_action_group_connect_accelerators (ui_get_action_group (mm_ui));
793
858
sel_changed_cb (sel, NULL);
799
864
"ellipsize", 2, "width_chars", 16, NULL); /* foo...bar */
800
865
column = gtk_tree_view_column_new_with_attributes (_("Media mark"), cell,
801
866
"text", COLUMN_TITLE, NULL);
802
gtk_tree_view_column_set_resizable (GTK_TREE_VIEW_COLUMN(column), TRUE);
803
gtk_tree_view_append_column (GTK_TREE_VIEW (tree),
804
GTK_TREE_VIEW_COLUMN (column));
867
gtk_tree_view_column_set_resizable (column, TRUE);
868
gtk_tree_view_append_column (tree, column);
806
870
cell = gtk_cell_renderer_text_new ();
807
871
g_object_set (G_OBJECT(cell),
808
872
"ellipsize", 1, "width_chars", 16, NULL); /* ...bar */
809
873
column = gtk_tree_view_column_new_with_attributes (_("MRL"), cell,
810
874
"text", COLUMN_MRL, NULL);
811
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN(column),
812
GTK_TREE_VIEW_COLUMN_AUTOSIZE);
813
gtk_tree_view_append_column (GTK_TREE_VIEW (tree),
814
GTK_TREE_VIEW_COLUMN (column));
875
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
876
gtk_tree_view_append_column (tree, column);
816
gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tree), TRUE);
878
gtk_tree_view_set_reorderable (tree, TRUE);
818
880
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
819
881
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
820
882
GTK_POLICY_AUTOMATIC,
821
883
GTK_POLICY_AUTOMATIC);
822
gtk_container_add (GTK_CONTAINER (scrolled_window), tree);
884
gtk_container_add (GTK_CONTAINER (scrolled_window), mm_tree);
824
g_signal_connect (G_OBJECT (tree), "row-activated",
825
G_CALLBACK (edit_cb), NULL);
886
g_object_connect (G_OBJECT (tree),
887
"signal::row-activated", G_CALLBACK (edit_cb), NULL,
888
"signal::button-press-event", G_CALLBACK (row_clicked_lcb), menu,
827
891
gtk_box_pack_start (vbox, scrolled_window, TRUE, TRUE, 2);