📄 config.c
字号:
if(!strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[2])->entry)), "odd")) config.parite = 1; else if(!strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[2])->entry)), "even")) config.parite = 2; else config.parite = 0; config.stops = atoi(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[4])->entry))); if(!strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[5])->entry)), "Xon/Xoff")) config.flux = 1; else if(!strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[5])->entry)), "RTS/CTS")) config.flux = 2; else config.flux = 0; if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Combos[7]))) { config.car = *gtk_entry_get_text(GTK_ENTRY(Entry)); config.delai = 0; } else config.car = -1; message = Config_port(); if(message == NULL) message = g_strdup_printf(_("No open port")); Set_status_message(message); g_free(message); return FALSE;}gint Grise_Degrise(GtkWidget *bouton, gpointer pointeur){ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(bouton))) { gtk_widget_set_sensitive(GTK_WIDGET(Entry), TRUE); gtk_widget_set_sensitive(GTK_WIDGET(pointeur), FALSE); } else { gtk_widget_set_sensitive(GTK_WIDGET(Entry), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(pointeur), TRUE); } return FALSE;}gint Config_Font(GtkWidget *widget, guint param){ GtkFontSelectionDialog *fontsel; fontsel = (GtkFontSelectionDialog *)gtk_font_selection_dialog_new(_("Font selection")); gtk_signal_connect(GTK_OBJECT(fontsel), "delete_event", (GtkSignalFunc)gtk_widget_destroy, NULL); gtk_signal_connect(GTK_OBJECT(fontsel), "destroy", (GtkSignalFunc)gtk_widget_destroy, NULL); gtk_signal_connect_object(GTK_OBJECT(fontsel->cancel_button), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(fontsel)); gtk_signal_connect_object(GTK_OBJECT(fontsel->ok_button), "clicked", (GtkSignalFunc)Lis_Font, GTK_OBJECT(fontsel)); gtk_signal_connect_object(GTK_OBJECT(fontsel->ok_button), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(fontsel)); gtk_font_selection_dialog_set_font_name(fontsel, term_conf.font); gtk_widget_show(GTK_WIDGET(fontsel)); return FALSE;}void Set_Font(void){ if(Bouton_font != NULL) { gchar *string; gtk_button_set_label(GTK_BUTTON(Bouton_font), term_conf.font); string = g_strdup(term_conf.font); cfgStoreValue(cfg, "font", string, CFG_INI, 0); g_free(string); } if(term_conf.font != NULL) vte_terminal_set_font_from_string(VTE_TERMINAL(display), term_conf.font); }gint Lis_Font(GtkFontSelectionDialog *fontsel){ g_free(term_conf.font); term_conf.font = gtk_font_selection_dialog_get_font_name(fontsel); Set_Font(); return FALSE;}gint config_window(gpointer *pointer, guint param){ switch(param) { case 0: Select_config(_("Load configuration"), G_CALLBACK(load_config)); break; case 1: Save_config_file(); break; default: Select_config(_("Delete configuration"), G_CALLBACK(delete_config)); } return 0;}void Select_config(gchar *title, void *callback){ GtkWidget *dialog; gint i, max; GtkWidget *Frame, *Scroll, *Liste, *Label; gchar *texte_label; GtkListStore *Modele_Liste; GtkTreeIter iter_Liste; GtkCellRenderer *renderer; GtkTreeViewColumn *Colonne; GtkTreeSelection *Selection_Liste; enum { N_texte, N_COLONNES }; /* Parse the config file */ max = cfgParse(config_file, cfg, CFG_INI); if(max == -1) { show_message(_("Cannot read configuration file !\n"), MSG_ERR); return; } else { gchar *Titre[]= {_("Configurations")}; dialog = gtk_dialog_new_with_buttons (title, NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_NONE, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); Modele_Liste = gtk_list_store_new(N_COLONNES, G_TYPE_STRING); Liste = gtk_tree_view_new_with_model(GTK_TREE_MODEL(Modele_Liste)); gtk_tree_view_set_search_column(GTK_TREE_VIEW(Liste), N_texte); Selection_Liste = gtk_tree_view_get_selection(GTK_TREE_VIEW(Liste)); gtk_tree_selection_set_mode(Selection_Liste, GTK_SELECTION_SINGLE); Frame = gtk_frame_new(NULL); Scroll = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(Frame), Scroll); gtk_container_add(GTK_CONTAINER(Scroll), Liste); renderer = gtk_cell_renderer_text_new(); g_object_set(G_OBJECT(renderer), "xalign", (gfloat)0.5, NULL); Colonne = gtk_tree_view_column_new_with_attributes(Titre[0], renderer, "text", 0, NULL); gtk_tree_view_column_set_sort_column_id(Colonne, 0); Label=gtk_label_new(""); texte_label = g_strdup_printf("<span weight=\"bold\" style=\"italic\">%s</span>", Titre[0]); gtk_label_set_markup(GTK_LABEL(Label), texte_label); g_free(texte_label); gtk_tree_view_column_set_widget(GTK_TREE_VIEW_COLUMN(Colonne), Label); gtk_widget_show(Label); gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(Colonne), 0.5f); gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(Colonne), FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(Liste), Colonne); for(i = 0; i < max; i++) { gtk_list_store_append(Modele_Liste, &iter_Liste); gtk_list_store_set(Modele_Liste, &iter_Liste, N_texte, cfgSectionNumberToName(i), -1); } gtk_widget_set_size_request(GTK_WIDGET(dialog), 200, 200); g_signal_connect(GTK_OBJECT(dialog), "response", G_CALLBACK (callback), GTK_TREE_SELECTION(Selection_Liste)); g_signal_connect_swapped(GTK_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), GTK_WIDGET(dialog)); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), Frame); gtk_widget_show_all (dialog); }}void Save_config_file(void){ GtkWidget *dialog, *label, *box, *entry; dialog = gtk_dialog_new_with_buttons (_("Save configuration"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_NONE, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); label=gtk_label_new(_("Configuration name : ")); box = gtk_hbox_new(FALSE, 0); entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(box), entry, FALSE, TRUE, 0); g_signal_connect(GTK_OBJECT(dialog), "response", G_CALLBACK(save_config), GTK_ENTRY(entry)); g_signal_connect_swapped(GTK_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), GTK_WIDGET(dialog)); gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), box); gtk_widget_show_all (dialog);}void really_save_config(GtkDialog *Fenetre, gint id, gpointer data){ int max, cfg_num, i; gchar *string = NULL; cfg_num = -1; if(id == GTK_RESPONSE_ACCEPT) { max = cfgParse(config_file, cfg, CFG_INI); if(max == -1) return; for(i = 0; i < max; i++) { if(!strcmp((char *)data, cfgSectionNumberToName(i))) cfg_num = i; } /* not overwriting */ if(cfg_num == -1) { max = cfgAllocForNewSection(cfg, (char *)data); cfg_num = max - 1; } else { if(remove_section(config_file, (char *)data) == -1) { show_message(_("Cannot overwrite section !"), MSG_ERR); return; } if(max == cfgParse(config_file, cfg, CFG_INI)) { show_message(_("Cannot read configuration file !"), MSG_ERR); return; } max = cfgAllocForNewSection(cfg, (char *)data); cfg_num = max - 1; } Copy_configuration(cfg_num); cfgDump(config_file, cfg, CFG_INI, max); string = g_strdup_printf(_("Configuration [%s] saved\n"), (char *)data); show_message(string, MSG_WRN); g_free(string); } else Save_config_file();}void save_config(GtkDialog *Fenetre, gint id, GtkWidget *edit){ int max, i; GtkWidget *dialog, *label; static gchar text[100]; if(id == GTK_RESPONSE_ACCEPT) { max = cfgParse(config_file, cfg, CFG_INI); if(max == -1) return; for(i = 0; i < max; i++) { if(!strcmp(gtk_entry_get_text(GTK_ENTRY(edit)), cfgSectionNumberToName(i))) { /* section already exists */ dialog = gtk_dialog_new_with_buttons (_("Warning !"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_NONE, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); sprintf(text, _("\nSection [%s] already exists\nDo you want to overwrite it ?\n"), gtk_entry_get_text(GTK_ENTRY(edit))); label=gtk_label_new(text); strcpy(text, gtk_entry_get_text(GTK_ENTRY(edit))); g_signal_connect(GTK_OBJECT(dialog), "response", G_CALLBACK(really_save_config), (gpointer)text); g_signal_connect_swapped(GTK_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), GTK_WIDGET(dialog)); gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); gtk_widget_show_all (dialog); i = max + 1; } } if(i == max) /* Section does not exist */ { strcpy(text, gtk_entry_get_text(GTK_ENTRY(edit))); really_save_config(Fenetre, GTK_RESPONSE_ACCEPT, (gpointer)text); } }}void load_config(GtkDialog *Fenetre, gint id, GtkTreeSelection *Selection_Liste){ GtkTreeIter iter; GtkTreeModel *Modele; gchar *txt, *message; if(id == GTK_RESPONSE_ACCEPT) { if(gtk_tree_selection_get_selected(Selection_Liste, &Modele, &iter)) { gtk_tree_model_get(GTK_TREE_MODEL(Modele), &iter, 0, (gint *)&txt, -1); Load_configuration_from_file(txt); Verify_configuration(); message = Config_port(); Set_Font(); add_shortcuts(); if(message == NULL) message = g_strdup_printf(_("No open port")); Set_status_message(message); g_free(message); } }}void delete_config(GtkDialog *Fenetre, gint id, GtkTreeSelection *Selection_Liste){ GtkTreeIter iter; GtkTreeModel *Modele; gchar *txt; if(id == GTK_RESPONSE_ACCEPT) { if(gtk_tree_selection_get_selected(Selection_Liste, &Modele, &iter)) { gtk_tree_model_get(GTK_TREE_MODEL(Modele), &iter, 0, (gint *)&txt, -1); if(remove_section(config_file, txt) == -1) show_message(_("Cannot delete section !"), MSG_ERR); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -