📄 dialog-plugin.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 + -