src/prefs.c

changeset 3551
acce66c34dbd
parent 3526
35bb6c81d525
child 3563
ea2789c8077c
--- a/src/prefs.c	Wed Sep 25 14:27:18 2002 +0000
+++ b/src/prefs.c	Thu Sep 26 07:37:52 2002 +0000
@@ -100,7 +100,7 @@
 	for (v = 0; v < NUM_SOUNDS; v++) {
 		if (sound_file_new[v]) {
 			g_free(sound_file_new[v]);
-			sound_file_new[v] = NULL;
+		sound_file_new[v] = NULL;
 		}
 	}
 	sound_entry = NULL;
@@ -847,6 +847,198 @@
 	return ret;
 }
 
+#if USE_PLUGINS
+GtkWidget *plugin_description=NULL, *plugin_details=NULL;
+static void prefs_plugin_sel (GtkTreeSelection *sel, GtkTreeModel *model) 
+{
+	gchar buf[1024];
+	GtkTreeIter  iter;
+	GValue val = { 0, };
+	struct gaim_plugin *plug;
+
+	if (! gtk_tree_selection_get_selected (sel, &model, &iter))
+		return;
+	gtk_tree_model_get_value (model, &iter, 2, &val);
+	plug = g_value_get_pointer(&val);
+	
+	g_snprintf(buf, sizeof(buf), _("<span size=\"larger\">%s %s</span>\n\n%s"), 
+		   plug->desc.name, plug->desc.version, plug->desc.description);
+	gtk_label_set_markup(GTK_LABEL(plugin_description), buf);
+	g_snprintf(buf, sizeof(buf), _("<span size=\"larger\">%s %s</span>\n\n"
+				       "<span weight=\"bold\">Written by:</span>\t%s\n"
+				       "<span weight=\"bold\">URL:</span>\t%s\n"
+				       "<span weight=\"bold\">File name:</span>\t %s"),
+		   plug->desc.name, plug->desc.version, plug->desc.authors, plug->desc.url, plug->path);
+	gtk_label_set_markup(GTK_LABEL(plugin_details), buf);
+	g_value_unset (&val);
+}
+
+static void plugin_load (GtkCellRendererToggle *cell, gchar *pth, gpointer data)
+{
+	GtkTreeModel *model = (GtkTreeModel *)data;
+	GtkTreeIter iter;
+	GtkTreePath *path = gtk_tree_path_new_from_string(pth);
+	struct gaim_plugin *plug;
+	gchar buf[1024];
+	GdkCursor *wait = gdk_cursor_new (GDK_WATCH);
+	gdk_window_set_cursor(prefs->window, wait);
+	gdk_cursor_unref(wait);
+  
+	gtk_tree_model_get_iter (model, &iter, path);
+	gtk_tree_model_get (model, &iter, 2, &plug, -1);
+	
+	if (!plug->handle)
+
+		if (plug->type == plugin)
+#ifdef GAIM_PLUGINS
+			load_plugin(plug->path);
+#else
+	        {}	
+#endif
+		else
+#ifdef USE_PERL
+			perl_load_file(plug->path);
+#else
+	        {}
+#endif 
+	else
+		if (plug->type == plugin)
+#ifdef GAIM_PLUGINS
+			unload_plugin(plug);
+#else
+	                {} 
+#endif
+		else
+#ifdef USE_PERL
+			perl_unload_file(plug);
+#else
+	                {}
+#endif
+	gdk_window_set_cursor(prefs->window, NULL);
+	
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, plug->handle, -1);
+	g_snprintf(buf, sizeof(buf), _("<span size=\"larger\">%s %s</span>\n\n%s"), 
+		   plug->desc.name, plug->desc.version, plug->desc.description);
+	gtk_label_set_markup(GTK_LABEL(plugin_description), buf);
+	gtk_tree_path_free(path);
+}
+
+static GtkWidget *plugin_page ()
+{
+	GtkWidget *ret;
+
+	GtkWidget *sw, *vp;
+	GtkTreeIter iter;
+	GtkWidget *event_view;
+	GtkListStore *ls;
+	GtkCellRenderer *rend, *rendt;
+	GtkTreeViewColumn *col;
+	GtkTreeSelection *sel;
+	GtkTreePath *path;
+	
+	GtkWidget *nb;
+
+	GList *probes = probed_plugins;
+	struct gaim_plugin *plug;
+	
+	ret = gtk_vbox_new(FALSE, 18);
+	gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
+
+	sw = gtk_scrolled_window_new(NULL,NULL);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
+
+	gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0);
+
+	ls = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER);
+	while (probes) {
+		plug = probes->data;
+		gtk_list_store_append (ls, &iter);
+		gtk_list_store_set(ls, &iter,
+				   0, plug->handle,
+				   1, plug->desc.name ? plug->desc.name : plug->path, 
+				   2, plug, -1);
+		probes = probes->next;
+	}
+	
+	event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(ls));
+
+	rend = gtk_cell_renderer_toggle_new();
+	sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (event_view));
+
+	
+	col = gtk_tree_view_column_new_with_attributes ("Load",
+							rend,
+							"active", 0,
+							NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col);
+
+	rendt = gtk_cell_renderer_text_new();
+	col = gtk_tree_view_column_new_with_attributes ("Name",
+							rendt,
+							"text", 1,
+							NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col);
+	g_object_unref(G_OBJECT(ls));
+	gtk_container_add(GTK_CONTAINER(sw), event_view);
+	
+
+	nb = gtk_notebook_new();
+	gtk_notebook_set_tab_pos (GTK_NOTEBOOK(nb), GTK_POS_BOTTOM);
+	gtk_notebook_popup_disable(GTK_NOTEBOOK(nb));
+	
+	/* Description */
+	sw = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	plugin_description = gtk_label_new(NULL);
+	
+	vp = gtk_viewport_new(NULL, NULL);
+	gtk_viewport_set_shadow_type(vp, GTK_SHADOW_NONE);
+	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_NONE);
+
+	gtk_container_add(vp, plugin_description);
+	gtk_container_add(sw, vp);
+
+	gtk_label_set_selectable(plugin_description, TRUE);  
+	gtk_label_set_line_wrap(plugin_description, TRUE);
+	gtk_misc_set_alignment(GTK_MISC(plugin_description), 0, 0);
+	gtk_misc_set_padding(GTK_MISC(plugin_description), 6, 6);
+	gtk_notebook_append_page(GTK_NOTEBOOK(nb), sw, gtk_label_new(_("Description")));
+
+	/* Details */
+	sw = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	plugin_details = gtk_label_new(NULL);
+	
+	vp = gtk_viewport_new(NULL, NULL);
+	gtk_viewport_set_shadow_type(vp, GTK_SHADOW_NONE);
+	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_NONE);
+
+	gtk_container_add(vp, plugin_details);
+	gtk_container_add(sw, vp);
+
+	gtk_label_set_selectable(plugin_details, TRUE);  
+	gtk_label_set_line_wrap(plugin_details, TRUE);
+	gtk_misc_set_alignment(GTK_MISC(plugin_details), 0, 0);
+	gtk_misc_set_padding(GTK_MISC(plugin_details), 6, 6);	
+	gtk_notebook_append_page(GTK_NOTEBOOK(nb), sw, gtk_label_new(_("Details")));
+	gtk_box_pack_start(GTK_BOX(ret), nb, TRUE, TRUE, 0);
+
+	g_signal_connect (G_OBJECT (sel), "changed",
+			  G_CALLBACK (prefs_plugin_sel),
+			  NULL); 
+	g_signal_connect (G_OBJECT(rend), "toggled",
+			  G_CALLBACK(plugin_load), ls);
+
+	path = gtk_tree_path_new_first();
+	gtk_tree_selection_select_path(sel, path);
+	gtk_tree_path_free(path);
+
+	gtk_widget_show_all(ret);
+	return ret;
+}
+#endif
+
 static void event_toggled (GtkCellRendererToggle *cell, gchar *pth, gpointer data)
 {
 	GtkTreeModel *model = (GtkTreeModel *)data;
@@ -1233,6 +1425,9 @@
 	prefs_notebook_add_page(_("Sound Events"), NULL, sound_events_page(), &c, &p, a++);
 	prefs_notebook_add_page(_("Away / Idle"), NULL, away_page(), &p, NULL, a++);
 	prefs_notebook_add_page(_("Away Messages"), NULL, away_message_page(), &c, &p, a++);
+#if USE_PLUGINS
+	prefs_notebook_add_page(_("Plugins"), NULL, plugin_page(), &p, NULL, a++);
+#endif
 }
 
 void show_prefs()

mercurial