Author: rolf Date: 2008-02-20 13:13:32 -0500 (Wed, 20 Feb 2008) New Revision: 96283
Modified: trunk/moon/plugin/ChangeLog trunk/moon/plugin/plugin-debug.cpp trunk/moon/plugin/plugin-debug.h trunk/moon/plugin/plugin.cpp trunk/moon/plugin/plugin.h Log: * plugin/plugin.cpp, plugin/plugin.h, plugin/plugin-debug.cpp, plugin/plugin-debug.h: Add a 'Sources' entry to the plugin context menu, shows a list of all the files the plugin has loaded, with the ability to open the files. Modified: trunk/moon/plugin/ChangeLog =================================================================== --- trunk/moon/plugin/ChangeLog 2008-02-20 18:10:29 UTC (rev 96282) +++ trunk/moon/plugin/ChangeLog 2008-02-20 18:13:32 UTC (rev 96283) @@ -1,5 +1,11 @@ 2008-02-20 Rolf Bjarne Kvinge <[EMAIL PROTECTED]> + * plugin.cpp, plugin.h, plugin-debug.cpp, plugin-debug.h: Add a 'Sources' + entry to the plugin context menu, shows a list of all the files the + plugin has loaded, with the ability to open the files. + +2008-02-20 Rolf Bjarne Kvinge <[EMAIL PROTECTED]> + * plugin.mdp: Updated. 2008-02-20 Rolf Bjarne Kvinge <[EMAIL PROTECTED]> Modified: trunk/moon/plugin/plugin-debug.cpp =================================================================== --- trunk/moon/plugin/plugin-debug.cpp 2008-02-20 18:10:29 UTC (rev 96282) +++ trunk/moon/plugin/plugin-debug.cpp 2008-02-20 18:13:32 UTC (rev 96283) @@ -129,4 +129,121 @@ gtk_widget_show_all (tree_win); } +static void +populate_tree_from_surface (PluginInstance *plugin, GtkTreeStore *store, GtkTreeIter *parent) +{ + if (plugin == NULL) + return; + + GtkTreeIter iter; + PluginInstance::moon_source *src = (PluginInstance::moon_source*) plugin->GetSources ()->First (); + for (; src != NULL; src = (PluginInstance::moon_source*) src->next) { + gtk_tree_store_append (store, &iter, parent); + + gtk_tree_store_set (store, &iter, + 0, src->uri, + 1, src->filename, + 2, src, + -1); + + } +} + +PluginInstance::moon_source *selected_source = NULL; + +static void +selection_changed_sources (GtkTreeSelection *selection, PluginInstance *plugin) +{ + GtkTreeModel *model; + GtkTreeIter iter; + + selected_source = NULL; + + if (!gtk_tree_selection_get_selected (selection, + &model, + &iter)) { + return; + } + + gtk_tree_model_get (model, &iter, + 2, &selected_source, + -1); + +} + +static void clicked_callback (GtkWidget *widget, gpointer data) +{ + if (selected_source == NULL) { + printf ("Select a source first.\n"); + } else { + gchar* argv [3]; + argv [0] = (gchar*) "xdg-open"; + argv [1] = (gchar*) selected_source->filename; + argv [2] = NULL; + g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); + } +} + +void +plugin_sources (PluginInstance *plugin) +{ + GtkWidget *tree_win = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (tree_win), "Sources"); + gtk_window_set_default_size (GTK_WINDOW (tree_win), 600, 400); + GtkBox *vbox = GTK_BOX (gtk_vbox_new (false, 0)); + + GtkTreeStore *tree_store = gtk_tree_store_new (3, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_POINTER); + + populate_tree_from_surface (plugin, tree_store, NULL); + + GtkWidget* tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (tree_store)); + + GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); + + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); + + g_signal_connect (G_OBJECT (selection), "changed", + G_CALLBACK (selection_changed_sources), plugin); + + GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); + GtkTreeViewColumn *col; + + /* The Name column */ + col = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col, "Uri"); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); + + gtk_tree_view_column_pack_start(col, renderer, TRUE); + gtk_tree_view_column_add_attribute (col, renderer, "text", 0); + + /* The Type column */ + col = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col, "Filename"); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); + + gtk_tree_view_column_pack_start(col, renderer, TRUE); + gtk_tree_view_column_add_attribute (col, renderer, "text", 1); + + GtkWidget *scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + gtk_container_add (GTK_CONTAINER (scrolled), tree_view); + //gtk_container_add (GTK_CONTAINER (tree_win), scrolled); + + GtkWidget *button = gtk_button_new_with_label ("Open file"); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (clicked_callback), NULL); + + gtk_box_pack_start (vbox, scrolled, TRUE, TRUE, 0); + gtk_box_pack_start (vbox, button, FALSE, FALSE, 0); + + gtk_container_add (GTK_CONTAINER (tree_win), GTK_WIDGET (vbox)); + + gtk_widget_show_all (tree_win); +} + #endif Modified: trunk/moon/plugin/plugin-debug.h =================================================================== --- trunk/moon/plugin/plugin-debug.h 2008-02-20 18:10:29 UTC (rev 96282) +++ trunk/moon/plugin/plugin-debug.h 2008-02-20 18:13:32 UTC (rev 96283) @@ -15,6 +15,7 @@ G_BEGIN_DECLS void plugin_debug (PluginInstance *plugin); +void plugin_sources (PluginInstance *plugin); G_END_DECLS Modified: trunk/moon/plugin/plugin.cpp =================================================================== --- trunk/moon/plugin/plugin.cpp 2008-02-20 18:10:29 UTC (rev 96282) +++ trunk/moon/plugin/plugin.cpp 2008-02-20 18:13:32 UTC (rev 96283) @@ -91,6 +91,10 @@ menu_item = gtk_menu_item_new_with_label ("Debug"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect_swapped (G_OBJECT(menu_item), "activate", G_CALLBACK (plugin_debug), plugin); + + menu_item = gtk_menu_item_new_with_label ("Sources"); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + g_signal_connect_swapped (G_OBJECT(menu_item), "activate", G_CALLBACK (plugin_sources), plugin); #endif gtk_widget_show_all (menu); @@ -317,6 +321,10 @@ /* back pointer to us */ instance->pdata = this; + +#if DEBUG + moon_sources = NULL; +#endif } PluginInstance::~PluginInstance () @@ -358,9 +366,33 @@ if (plugin_unload) plugin_unload (this); + +#if DEBUG + delete moon_sources; + moon_sources = NULL; +#endif } +#if DEBUG void +PluginInstance::AddSource (const char *uri, const char *filename) +{ + moon_source *src = new moon_source (); + src->uri = g_strdup (uri); + src->filename = g_strdup (filename); + if (moon_sources == NULL) + moon_sources = new List (); + moon_sources->Append (src); +} + +List* +PluginInstance::GetSources () +{ + return moon_sources; +} +#endif + +void PluginInstance::SetUnloadCallback (plugin_unload_callback* puc) { plugin_unload = puc; @@ -880,6 +912,10 @@ { // DEBUGMSG ("StreamAsFile: %s", fname); +#if DEBUG + AddSource (stream->url, fname); +#endif + if (IS_NOTIFY_SOURCE (stream->notifyData)) { // DEBUGMSG ("LoadFromXaml: %s", fname); if (xaml_loader) Modified: trunk/moon/plugin/plugin.h =================================================================== --- trunk/moon/plugin/plugin.h 2008-02-20 18:10:29 UTC (rev 96282) +++ trunk/moon/plugin/plugin.h 2008-02-20 18:13:32 UTC (rev 96283) @@ -67,8 +67,24 @@ static void ReportFPS (Surface *surface, int nframes, float nsecs, void *user_data); static void properties_dialog_response (GtkWidget *dialog, int response, PluginInstance *plugin); + + public: + +#if DEBUG + struct moon_source : List::Node { + char *uri; + char *filename; + virtual ~moon_source () + { + g_free (uri); + g_free (filename); + } + }; + List *moon_sources; + void AddSource (const char *uri, const char *filename); + List *GetSources (); +#endif - public: PluginInstance (NPP instance, uint16_t mode); ~PluginInstance (); _______________________________________________ Mono-patches maillist - Mono-patches@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-patches