⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog-plugin.c

📁 GNOME下的短信息发送中心
💻 C
字号:
/* * plugin preferences dialog * * Authors:     Michael Jochum <e9725005@stud3.tuwien.ac.at> * * TODO:         * * Fixes: * * For license terms, see the file COPYING in the project directory. */#include <config.h>#include <string.h>#include <gnome.h>#include "dialog-plugin.h"#include "plugin.h"static void update_ctree(void);static void select_row_cb  (GtkCList *clist, gint row, gint column,                            GdkEventButton *event, gpointer user_data);static void update_priority_for_selected(void);static void plugin_about_cb(GtkButton *button, gpointer user_data);static void plugin_configure_cb(GtkButton *button, gpointer user_data);static void priority_apply_cb(GtkButton *button, gpointer user_data);static void priority_default_cb(GtkButton *button, gpointer user_data);typedef struct {	GtkWidget *dialog;	GtkWidget *list;	GtkWidget *about, *config;	GtkWidget *priority;	GtkWidget *info;	GtkWidget *net_list;	PluginData *plugd; /* plugin data of the selected plugin */}PluginPrivateData;static PluginPrivateData pd;GtkWidget* gsms_plugin_dialog_new (void){ 	gchar *titles[]={_("Priority"), _("   Name    "), _("     File    ") }; 	gchar *net_titles[]={_("Prefix"), _("Name")};	GtkWidget *frame, *swindow, *paned;	GtkWidget *vbox, *hbox, *label, *button;	GtkAdjustment *adjustment;	pd.dialog = gnome_app_new("Plugin","Gnome SMS Center - Plugin Preferences");/*	gtk_signal_connect(GTK_OBJECT(pd.dialog),                           "delete-event",                           GTK_SIGNAL_FUNC(delete_event_cb),                           NULL);       		gtk_signal_connect(GTK_OBJECT(pd.dialog),                           "destroy",                           GTK_SIGNAL_FUNC(destroy_event_cb),                           NULL);*/	frame = gtk_frame_new(NULL);	paned=gtk_hpaned_new();	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);	gtk_container_add(GTK_CONTAINER(frame), paned);	swindow = gtk_scrolled_window_new(NULL, NULL);	pd.list = gtk_clist_new_with_titles(3, titles);	gtk_signal_connect(GTK_OBJECT(pd.list), "select-row",                           GTK_SIGNAL_FUNC(select_row_cb), NULL);			gtk_container_add(GTK_CONTAINER(swindow), pd.list);	gtk_paned_pack1 (GTK_PANED (paned), swindow, TRUE, FALSE);	gtk_widget_set_usize (swindow, 100, -1);	gnome_app_set_contents(GNOME_APP(pd.dialog), frame);	gtk_window_set_default_size (GTK_WINDOW(pd.dialog), 600, 400); 	vbox = gtk_vbox_new(FALSE, 2);		gtk_paned_add2  (GTK_PANED (paned), vbox); 	hbox = gtk_hbox_new(FALSE, 0);	pd.about = gtk_button_new_with_label(_("About"));	gtk_widget_set_sensitive(GTK_WIDGET(pd.about), FALSE);	gtk_signal_connect(GTK_OBJECT(pd.about), "clicked",			   GTK_SIGNAL_FUNC(plugin_about_cb), NULL);	gtk_box_pack_start(GTK_BOX(hbox), pd.about, FALSE, FALSE, 2); 	pd.config = gtk_button_new_with_label(_("Configure"));	gtk_widget_set_sensitive(GTK_WIDGET(pd.config), FALSE);	gtk_signal_connect(GTK_OBJECT(pd.config), "clicked",                           GTK_SIGNAL_FUNC(plugin_configure_cb), NULL);	gtk_box_pack_start(GTK_BOX(hbox), pd.config, FALSE, FALSE, 2);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 	hbox = gtk_hbox_new(FALSE, 0);	label = gtk_label_new(_("Plugin Priority: "));	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);	adjustment = (GtkAdjustment *) gtk_adjustment_new(0, 1, 999, 1, 1, 0);	pd.priority = gtk_spin_button_new(adjustment, 0.0, 0);	gtk_box_pack_start(GTK_BOX(hbox), pd.priority, FALSE, FALSE, 3);	button = gtk_button_new_with_label(_("Apply"));	gtk_signal_connect(GTK_OBJECT(button), "clicked",                           GTK_SIGNAL_FUNC(priority_apply_cb), NULL);	gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 2);	button = gtk_button_new_with_label(_("Default"));	gtk_signal_connect(GTK_OBJECT(button), "clicked",                           GTK_SIGNAL_FUNC(priority_default_cb), NULL);	gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 2);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);	/*	adjustment = (GtkAdjustment *) gtk_adjustment_new(0, 0, 1, 0.1, 0, 0);        pd.info = gtk_text_new (NULL,adjustment); */	pd.info = gtk_text_new (NULL,NULL);	gtk_box_pack_start(GTK_BOX(vbox), pd.info, FALSE, FALSE, 2);	swindow = gtk_scrolled_window_new(NULL, NULL);	pd.net_list = gtk_clist_new_with_titles(2, net_titles);	gtk_clist_set_column_auto_resize(GTK_CLIST(pd.net_list),0, TRUE);	gtk_clist_set_column_auto_resize(GTK_CLIST(pd.net_list),1, TRUE);	gtk_container_add(GTK_CONTAINER(swindow), pd.net_list);	gtk_box_pack_start(GTK_BOX(vbox), swindow, TRUE, TRUE, 2);	update_ctree();	gtk_widget_show_all(pd.dialog);	return pd.dialog;}static voidupdate_ctree(void){	GSList *plugin;       	plugin = plugin_list;	while (plugin != NULL) {		gchar *line[3];		gint num;		PluginData *plugd = plugin->data;				line[0] = g_strdup_printf("%3d", plugd->priority);				line[1] = plugd->name;		line[2] = plugd->file;		num = gtk_clist_append(GTK_CLIST(pd.list), line);		gtk_clist_set_row_data(GTK_CLIST(pd.list), num, plugd);		g_free(line[0]);		plugin = g_slist_next(plugin);	}	gtk_clist_set_column_auto_resize(GTK_CLIST(pd.list),0, TRUE);	gtk_clist_set_column_auto_resize(GTK_CLIST(pd.list),1, TRUE);	gtk_clist_set_column_auto_resize(GTK_CLIST(pd.list),2, TRUE);}      static void select_row_cb(GtkCList *clist, gint row, gint column,              GdkEventButton *event, gpointer user_data){	PluginData *plugd;	GSList *nw;	gchar *info_text;	gint pos=0;	pd.plugd = plugd = gtk_clist_get_row_data(GTK_CLIST(pd.list), row);	gtk_editable_delete_text(GTK_EDITABLE(pd.info), 0, -1);	gtk_clist_clear(GTK_CLIST(pd.net_list));	/* fill in information about the plugin */	gtk_spin_button_set_value(GTK_SPIN_BUTTON(pd.priority),				  (gfloat) plugd->priority);	info_text = g_strdup_printf(		_("Name: %s\nVersion:%s\nFile: %s\nAuthor(s): %s\nInfo: %s"), 		plugd->name, plugd->version, 		plugd->file, plugd->authors, 		plugd->info);		gtk_editable_insert_text(GTK_EDITABLE(pd.info), info_text, 				 strlen(info_text), &pos);	g_free(info_text);	/* update the the list of supported GSM networks */	nw = plugd->networks;	while (nw != NULL) {		gchar *row[2] = { ((GSMNetwork *) nw->data) -> prefix,				  ((GSMNetwork *) nw->data) -> name };				gtk_clist_append(GTK_CLIST(pd.net_list), row);		nw = g_slist_next(nw);	}	if(plugd->configuration_dialog == NULL) 		gtk_widget_set_sensitive(GTK_WIDGET(pd.config), FALSE);	else 		gtk_widget_set_sensitive(GTK_WIDGET(pd.config), TRUE);	if(plugd->about_dialog == NULL) 		gtk_widget_set_sensitive(GTK_WIDGET(pd.about), FALSE);	else 		gtk_widget_set_sensitive(GTK_WIDGET(pd.about), TRUE);}static void plugin_about_cb(GtkButton *button, gpointer user_data){	pd.plugd->configuration_dialog(pd.plugd, pd.dialog);}static void plugin_configure_cb(GtkButton *button, gpointer user_data){	pd.plugd->configuration_dialog(pd.plugd, pd.dialog);}static voidupdate_priority_for_selected(void){	gchar prio_str[8];	gint row;	gtk_spin_button_set_value(GTK_SPIN_BUTTON(pd.priority),				  (gfloat) pd.plugd->priority);	row = gtk_clist_find_row_from_data(GTK_CLIST(pd.list), pd.plugd);	g_snprintf(prio_str, 8, "%3d", pd.plugd->priority);	gtk_clist_set_text(GTK_CLIST(pd.list), row, 0, prio_str);	gnome_config_push_prefix ("/gsms/Plugin_Priority/");	gnome_config_set_int(pd.plugd->name, pd.plugd->priority);	gnome_config_pop_prefix ();	gnome_config_sync ();}static voidpriority_apply_cb(GtkButton *button, gpointer user_data){	pd.plugd->priority = gtk_spin_button_get_value_as_int(		GTK_SPIN_BUTTON(pd.priority));	update_priority_for_selected();}static voidpriority_default_cb(GtkButton *button, gpointer user_data){	pd.plugd->priority = pd.plugd->default_priority;	update_priority_for_selected();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -