📄 interface.c
字号:
{ GNOME_APP_UI_ITEM, N_("_Go to SmsSend home page for more scripts"), NULL, on_goto_smssend_activate, NULL, NULL, GNOME_APP_PIXMAP_DATA, home_icon, 0, 0, NULL}, { GNOME_APP_UI_ITEM, N_("_Execute SmsSend for delayed connections"), NULL, on_sendnow_activate, NULL, NULL, GNOME_APP_PIXMAP_DATA, send_icon, 0, 0, NULL}, GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_MENU_CLOSE_ITEM(on_close_activate, NULL), GNOMEUIINFO_MENU_EXIT_ITEM(on_exit_activate, NULL), GNOMEUIINFO_END};static GnomeUIInfo settings_menu_uiinfo[] = { { GNOME_APP_UI_ITEM, N_("Manage _aliases"), NULL, on_manage_alias_activate, NULL, NULL, GNOME_APP_PIXMAP_DATA, alias_icon, 0, 0, NULL}, { GNOME_APP_UI_ITEM, N_("Manage _scripts"), NULL, on_manage_scripts_activate, NULL, NULL, GNOME_APP_PIXMAP_DATA, scripts_icon, 0, 0, NULL}, { GNOME_APP_UI_ITEM, N_("Check for _updates"), NULL, on_check_updates_activate, NULL, NULL, GNOME_APP_PIXMAP_DATA, updates_icon, 0, 0, NULL}, GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_MENU_PREFERENCES_ITEM(on_preferences_activate, NULL), GNOMEUIINFO_END};static GnomeUIInfo help_menu_uiinfo[] = {#ifndef DEVEL GNOMEUIINFO_HELP(PACKAGE), GNOMEUIINFO_SEPARATOR,#endif GNOMEUIINFO_MENU_ABOUT_ITEM(on_about_activate, NULL), GNOMEUIINFO_END};static GnomeUIInfo menubar_uiinfo[] = { GNOMEUIINFO_MENU_FILE_TREE(file_menu_uiinfo), GNOMEUIINFO_MENU_SETTINGS_TREE(settings_menu_uiinfo), GNOMEUIINFO_MENU_HELP_TREE(help_menu_uiinfo), GNOMEUIINFO_END};GtkWidget *create_gnome_smssend(){ /* create the application main window */ GtkWidget *smssend; GtkWidget *dock; Tooltips = gtk_tooltips_new(); smssend = gnome_app_new(PACKAGE, PACKAGE " - " VERSION); gtk_window_set_wmclass(GTK_WINDOW(smssend), "Smssend", "SmsSend"); dock = GNOME_APP(smssend)->dock; gtk_widget_show(dock); gnome_app_create_menus(GNOME_APP(smssend), menubar_uiinfo); Notebook = gtk_notebook_new(); gtk_widget_show(Notebook); gnome_app_set_contents(GNOME_APP(smssend), Notebook); gtk_notebook_set_scrollable (GTK_NOTEBOOK (Notebook), TRUE); gtk_container_set_border_width(GTK_CONTAINER(Notebook), 2); gtk_notebook_set_tab_hborder (GTK_NOTEBOOK (Notebook), 2); gtk_notebook_set_tab_vborder (GTK_NOTEBOOK (Notebook), 2); Appbar = gnome_appbar_new(TRUE, TRUE, GNOME_PREFERENCES_NEVER); gtk_widget_show(Appbar); gnome_app_set_statusbar(GNOME_APP(smssend), Appbar); gtk_signal_connect (GTK_OBJECT (smssend), "destroy", GTK_SIGNAL_FUNC (on_exit_activate), NULL); return smssend;}PProvider_t create_provider(const char filename[]){ /* create a provider tab in the notebook */ PProvider_t Pv; /* read provider script */ Pv = CreateProviderFromFile(filename); if (Pv == NULL) return (NULL); /* update provider's list */ g_hash_table_insert(ProviderHash,(gpointer) filename, (gpointer) Pv); NumProvider++; if ( (SavedProviderHash) && (g_hash_table_lookup (SavedProviderHash, (gconstpointer) filename) == NULL) ) /* if not saved don't display it but keep it for further use */ return (NULL); show_provider((gchar *)filename,Pv); return (Pv);}void show_provider(gchar *filename,PProvider_t Pv){ /* create a provider tab in the notebook */ GtkWidget *provider_box; GtkWidget *param_frame; GtkWidget *table_params; GtkWidget *rightbox; GtkWidget *remaining; GtkWidget *send_button; GtkWidget *provider_label; GtkWidget *message=(GtkWidget *)NULL; gchar *label, *dot; int i, msgindex = -1; /* filename is to be shown */ label = g_strdup(g_basename(filename)); dot = (gchar *)g_extension_pointer (label); *--dot = '\000'; /* use provider name only as the label */ provider_label = gtk_label_new(label); /* update shown provider's list */ g_hash_table_insert(ShownProviderHash,(gpointer) filename, (gpointer) Pv); /* save filename and label in structure for DoSms() */ Pv->Label = label; Pv->Filename = g_strdup(filename); provider_box = gtk_hbox_new(FALSE, 2); gtk_widget_show(provider_box); gtk_container_add(GTK_CONTAINER(Notebook), provider_box); gtk_container_set_border_width(GTK_CONTAINER(provider_box), 2); /* save provider_box in structure */ Pv->PageWidget = provider_box; param_frame = gtk_frame_new(_("Parameters")); gtk_widget_show(param_frame); gtk_box_pack_start(GTK_BOX(provider_box), param_frame, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(param_frame), 2); gtk_frame_set_label_align(GTK_FRAME(param_frame), 0.02, 0.5); table_params = gtk_table_new(Pv->NbParams, 2, FALSE); gtk_widget_show(table_params); gtk_container_add(GTK_CONTAINER(param_frame), table_params); gtk_container_set_border_width(GTK_CONTAINER(table_params), 2); gtk_table_set_row_spacings(GTK_TABLE(table_params), 2); gtk_table_set_col_spacings(GTK_TABLE(table_params), 2); /* create entries for the parameters */ for (i = 0; i < Pv->NbParams; i++) { GtkWidget *param_label; GtkWidget *param_value; if (g_strncasecmp(Pv->Params[i].Name, "Message",9) == 0) { /* message parameter is treated below */ msgindex = i; goto end_for; } param_label = gtk_label_new(Pv->Params[i].Name); gtk_widget_show(param_label); gtk_table_attach(GTK_TABLE(table_params), param_label, 0, 1, i, i + 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 2, 2); gtk_label_set_justify(GTK_LABEL(param_label), GTK_JUSTIFY_LEFT); gtk_misc_set_padding(GTK_MISC(param_label), 2, 2); if (Pv->Params[i].Size) param_value = gtk_entry_new_with_max_length(Pv->Params[i].Size); else param_value = gtk_entry_new(); gtk_widget_show(param_value); if (Pv->Params[i].Hidden) gtk_entry_set_visibility(GTK_ENTRY(param_value), FALSE); else { /* Attach events to check for aliases */ gtk_signal_connect(GTK_OBJECT(param_value), "focus-out-event", GTK_SIGNAL_FUNC(on_value_check), (gpointer) &Pv->Params[i]); gtk_signal_connect(GTK_OBJECT(param_value), "activate", GTK_SIGNAL_FUNC(on_value_check), (gpointer) &Pv->Params[i]); } gtk_table_attach(GTK_TABLE(table_params), param_value, 1, 2, i, i + 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 2); Pv->Params[i].Widget = param_value; if (Pv->Params[i].Help) gtk_tooltips_set_tip(Tooltips, param_value, Pv->Params[i].Help, NULL); if (KeepPass && g_strncasecmp(Pv->Params[i].Name, "Password",10) == 0) { gchar *config_file; gchar *path; gchar *password; /* password is perhaps in preference file */ config_file=gnome_util_prepend_user_home(".smssend/smssendrc"); path = g_strdup_printf("=%s=/Passwords/%s",config_file,label); password = gnome_config_get_string_with_default(path,NULL); if (password && strlen(password)) { crypt_password(password); Pv->Params[i].Value = password; } g_free(path); g_free(config_file); } if (Pv->Params[i].Value) gtk_entry_set_text(GTK_ENTRY(param_value), Pv->Params[i].Value);end_for: } rightbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(rightbox); gtk_box_pack_start(GTK_BOX(provider_box), rightbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(rightbox), 2); /* message widget and remaining widget value */ if (msgindex != -1) { GtkWidget *remainbox; GtkWidget *remainlabl; char remain[4]; message = gtk_text_new(NULL, NULL); gtk_widget_show(message); gtk_box_pack_start(GTK_BOX(rightbox), message, TRUE, FALSE, 0); gtk_text_set_editable(GTK_TEXT(message), TRUE); remainbox = gtk_hbox_new(TRUE, 2); gtk_widget_show(remainbox); gtk_box_pack_start(GTK_BOX(rightbox), remainbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(remainbox), 2); remainlabl = gtk_label_new(_("Remaining characters")); gtk_widget_show(remainlabl); gtk_box_pack_start(GTK_BOX(remainbox), remainlabl, FALSE, FALSE, 0); gtk_label_set_justify(GTK_LABEL(remainlabl), GTK_JUSTIFY_RIGHT); remaining = gtk_entry_new_with_max_length(3); gtk_widget_show(remaining); gtk_box_pack_start(GTK_BOX(remainbox), remaining, FALSE, FALSE, 2); gtk_entry_set_editable(GTK_ENTRY(remaining), FALSE); gtk_tooltips_set_tip(Tooltips, message, Pv->Params[msgindex].Help, NULL); g_snprintf(remain, 5, "%d", Pv->Params[msgindex].Size); gtk_entry_set_text(GTK_ENTRY(remaining), remain); Pv->Params[msgindex].Widget = message; gtk_signal_connect(GTK_OBJECT(message), "changed", GTK_SIGNAL_FUNC(on_message_changed), (gpointer) Pv->Params[msgindex].Size); gtk_object_set_data(GTK_OBJECT(message), "remain", remaining); } /* send button */ send_button = gnome_stock_button(GNOME_STOCK_BUTTON_APPLY); gtk_widget_show(send_button); gtk_tooltips_set_tip(Tooltips, send_button, _("Send SMS !"), NULL); gtk_box_pack_start(GTK_BOX(rightbox), send_button, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(send_button), 2); gtk_widget_set_name(send_button,"send_button"); gtk_signal_connect(GTK_OBJECT(send_button), "pressed", GTK_SIGNAL_FUNC(on_send_pressed), (gpointer) Pv); /* modify notebook's label */ gtk_widget_show(provider_label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(Notebook), provider_box, provider_label); /* cross save Pv and widget */ Pv->MessageWidget = message; gtk_object_set_data(GTK_OBJECT(provider_box), "provider", Pv);}static void scan_dir(gchar *dirname){ DIR *dir; struct dirent *dirent; gchar *ext; PProvider_t Pv = NULL; dir = opendir(dirname); if (!dir) return; while ((dirent = readdir(dir))) { /* Search for SMSSEND extension */ ext = (gchar *)g_extension_pointer(dirent->d_name); if ((strlen(ext) == strlen(SMSSEND_SUF)) && (g_strncasecmp(ext,SMSSEND_SUF,3) == 0)) { Pv = create_provider(g_strconcat(dirname,"/",dirent->d_name,NULL)); } } closedir(dir);}void create_notebook(){ /* Create all notebook's tabs */ gchar *dirname; gchar *status; if (ScriptFilename) { gchar *ext; PProvider_t Pv = NULL; /* Search for SMSSEND extension */ ext = (gchar *)g_extension_pointer(ScriptFilename); if ((strlen(ext) == strlen(SMSSEND_SUF)) && (g_strncasecmp(ext,SMSSEND_SUF,3) == 0)) { Pv = create_provider(ScriptFilename); } } else { if (ScriptPath) /* shouldn't be set together with 'only-user' option */ { scan_dir(ScriptPath); } /* First try to load local .sms script */ scan_dir(g_get_current_dir()); /* Then try to load user's scripts */ scan_dir(gnome_util_prepend_user_home(".smssend/")); if (!MyScripts) { /* Then try to load global shared scripts */ scan_dir(SMSSEND_SHAREPATH); /* Use an environment variable */ if ( (dirname = getenv("SMSSEND_SCRIPTPATH")) != NULL) { scan_dir(dirname); } } } if (NumProvider == 0) { g_printerr(_("No provider file found!\n")); gtk_exit(-1); } status = g_strdup_printf(_("%s : %d provider(s) found"),PACKAGE,NumProvider); gnome_appbar_set_status(GNOME_APPBAR(Appbar), status); g_free(status);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -