📄 settings.c
字号:
/* X-Chat * Copyright (C) 1998 Peter Zelezny. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <string.h>#include "fe-gtk.h"#include "../common/xchat.h"#include "../common/cfgfiles.h"#include "../common/fe.h"#include "../common/util.h"#include "../common/outbound.h"#include "../common/notify.h"#include "../common/xchatc.h"#include "settings.h"#include "gtkutil.h"#include "xtext.h"#include "palette.h"#include "maingui.h"#include "menu.h"#include "pixmaps.h"struct setup{ GtkWidget *settings_window; GtkWidget *nu_color; GtkWidget *bt_color; GtkWidget *font_normal; GtkWidget *font_bold; GtkWidget *dialog_font_normal; GtkWidget *dialog_font_bold; GtkWidget *entry_stamp_format; GtkWidget *entry_bluestring; GtkWidget *entry_doubleclickuser; GtkWidget *entry_max_lines; GtkWidget *entry_nick_suffix; GtkWidget *entry_quit; GtkWidget *entry_part; GtkWidget *entry_away; GtkWidget *entry_timeout; GtkWidget *entry_dccdir; GtkWidget *entry_dcctimeout; GtkWidget *entry_dccstalltimeout; GtkWidget *entry_permissions; GtkWidget *entry_dcc_blocksize; GtkWidget *entry_dnsprogram; GtkWidget *entry_recon_delay; GtkWidget *entry_proxy_host; GtkWidget *entry_proxy_port; GtkWidget *entry_dcc_send_port_first; GtkWidget *entry_dcc_send_port_last; GtkWidget *entry_sounddir; GtkWidget *entry_soundcmd; GtkWidget *entry_mainw_left; GtkWidget *entry_mainw_top; GtkWidget *entry_mainw_width; GtkWidget *entry_mainw_height; GtkWidget *entry_hostname; GtkWidget *entry_dcc_ip_str; GtkWidget *background; GtkWidget *background_dialog; GtkWidget *check_transparent; GtkWidget *check_tint; GtkWidget *check_detecthost; GtkWidget *check_detectip; GtkWidget *check_ip; GtkWidget *entry_trans_file; GtkWidget *dialog_check_transparent; GtkWidget *dialog_check_tint; GtkWidget *cancel_button; GtkWidget *logmask_entry; GtkWidget *logtimestamp_entry; struct xchatprefs prefs;};static GtkWidget *fontdialog = 0;extern GtkStyle *create_inputgad_style (void);/* Generic interface creation functions */static voidsettings_create_optmenu (GtkWidget *table, char *label, char **text, void *callback, void *userdata, int row_index, int history){ GtkWidget *wid, *menu, *align; int i; align = gtk_alignment_new (1.0, 0.5, 0.0, 0.0); gtk_table_attach (GTK_TABLE (table), align, 0, 1, row_index, row_index + 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (align); wid = gtk_label_new (label); gtk_container_add (GTK_CONTAINER (align), wid); gtk_widget_show (wid); wid = gtk_option_menu_new (); menu = gtk_menu_new (); i = 0; while (text[i]) { menu_quick_item_with_callback (callback, text[i], menu, (void *) i); i++; } gtk_object_set_user_data (GTK_OBJECT (menu), userdata); gtk_option_menu_set_menu (GTK_OPTION_MENU (wid), menu); gtk_option_menu_set_history (GTK_OPTION_MENU (wid), history); gtk_widget_show (menu); align = gtk_alignment_new (0.0, 1.0, 0.0, 0.0); gtk_table_attach_defaults (GTK_TABLE (table), align, 2, 3, row_index, row_index + 1); gtk_widget_show (align); gtk_container_add (GTK_CONTAINER (align), wid); gtk_widget_show (wid);}static voidsettings_create_tworows (GtkWidget *box, GtkWidget **left_box, GtkWidget **right_box){ GtkWidget *ac_box; ac_box = gtk_hbox_new (0, 0); gtk_container_add (GTK_CONTAINER (box), ac_box); gtk_widget_show (ac_box); *left_box = gtk_vbox_new (0, 0); gtk_container_add (GTK_CONTAINER (ac_box), *left_box); gtk_widget_show (*left_box); *right_box = gtk_vbox_new (0, 0); gtk_container_add (GTK_CONTAINER (ac_box), *right_box); gtk_widget_show (*right_box);}static GtkWidget *settings_create_group (GtkWidget * vvbox, gchar * title){ GtkWidget *frame; GtkWidget *vbox; frame = gtk_frame_new (title); gtk_box_pack_start (GTK_BOX (vvbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); vbox = gtk_vbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_show (vbox); return vbox;}static GtkWidget *settings_create_table (GtkWidget * vvbox){ GtkWidget *table; table = gtk_table_new (3, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (table), 2); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_box_pack_start (GTK_BOX (vvbox), table, FALSE, FALSE, 0); gtk_widget_show (table); return table;}static GtkWidget *settings_create_entry (char *text, int maxlen, GtkWidget * table, char *defval, GtkWidget ** entry, char *suffix, void *suffixcallback, int row){ GtkWidget *label; GtkWidget *align; GtkWidget *hbox; GtkWidget *wid; label = gtk_label_new (text); gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (label), 0, 1, row, row + 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (label); wid = gtk_entry_new_with_max_length (maxlen); if (entry) *entry = wid; gtk_entry_set_text (GTK_ENTRY (wid), defval); gtk_widget_show (wid); align = gtk_alignment_new (0.0, 1.0, 0.0, 0.0); gtk_table_attach_defaults (GTK_TABLE (table), align, 2, 3, row, row + 1); gtk_widget_show (align); hbox = gtk_hbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (wid), 2, 3, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (hbox); if (suffixcallback || suffix) { GtkWidget *swid; if (suffixcallback) { swid = gtk_button_new_with_label (_("Browse...")); gtk_signal_connect (GTK_OBJECT (swid), "clicked", GTK_SIGNAL_FUNC (suffixcallback), *entry); } else { swid = gtk_label_new (suffix); } gtk_widget_show (swid); gtk_table_attach (GTK_TABLE (table), swid, 3, 4, row, row + 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); } gtk_container_add (GTK_CONTAINER (align), hbox); return wid;}static GtkWidget *settings_create_numberentry (char *text, int min, int max, int climb, GtkWidget *table, int defval, int row, char *suffix){ GtkWidget *label, *wid, *rbox, *align; GtkAdjustment *adj; label = gtk_label_new (text); gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (label), 0, 1, row, row + 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (label); align = gtk_alignment_new (0.0, 1.0, 0.0, 0.0); gtk_table_attach_defaults (GTK_TABLE (table), align, 2, 3, row, row + 1); gtk_widget_show (align); rbox = gtk_hbox_new (0, 0); gtk_container_add (GTK_CONTAINER (align), rbox); gtk_widget_show (rbox); wid = gtk_spin_button_new (0, climb, 0); adj = gtk_spin_button_get_adjustment ((GtkSpinButton*)wid); adj->lower = min; adj->upper = max; adj->step_increment = climb; gtk_adjustment_changed (adj); gtk_spin_button_set_value ((GtkSpinButton*)wid, defval); gtk_widget_set_usize (wid, 60, 0); gtk_box_pack_start (GTK_BOX (rbox), wid, 0, 0, 0); gtk_widget_show (wid); if (suffix) { label = gtk_label_new (suffix); gtk_box_pack_start (GTK_BOX (rbox), label, 0, 0, 0); gtk_widget_show (label); } return wid;}static GtkWidget *settings_create_toggle (char *label, GtkWidget * box, int state, void *callback, void *sess){ GtkWidget *wid; wid = gtk_check_button_new_with_label (label); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wid), state); gtk_signal_connect (GTK_OBJECT (wid), "toggled", GTK_SIGNAL_FUNC (callback), sess); if (box) gtk_box_pack_start (GTK_BOX (box), wid, 0, 0, 0); gtk_widget_show (wid); return wid;}static voidsettings_create_color_box (char *text, GtkWidget * table, int defval, GtkWidget ** entry, void *callback, struct session *sess, int row){ GtkWidget *label; GtkWidget *align; GtkWidget *hbox; GtkWidget *swid; GtkWidget *wid; GtkStyle *style; char buf[127]; label = gtk_label_new (text); gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT); gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (label), 0, 1, row, row + 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (label); sprintf (buf, "%d", defval); wid = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (wid), buf); gtk_widget_set_usize (GTK_WIDGET (wid), 40, -1); gtk_signal_connect (GTK_OBJECT (wid), "activate", GTK_SIGNAL_FUNC (callback), sess); gtk_widget_show (wid); align = gtk_alignment_new (0.0, 1.0, 0.0, 0.0); gtk_table_attach_defaults (GTK_TABLE (table), align, 2, 3, row, row + 1); gtk_widget_show (align); hbox = gtk_hbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); gtk_box_pack_start (GTK_BOX (hbox), wid, FALSE, FALSE, 0); gtk_widget_show (hbox); style = gtk_style_new (); style->bg[0] = colors[defval]; swid = gtk_event_box_new (); if (entry) *entry = swid; gtk_widget_set_style (GTK_WIDGET (swid), style); gtk_style_unref (style); gtk_widget_set_usize (GTK_WIDGET (swid), 40, -1); gtk_widget_show (swid); gtk_box_pack_start (GTK_BOX (hbox), swid, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (align), hbox);}static GtkWidget *settings_create_page (GtkWidget * book, gchar * book_label, GtkWidget * ctree, gchar * tree_label, GtkCTreeNode * parent, GtkCTreeNode ** node, gint page_index, void (*draw_func) (struct session *, GtkWidget *), struct session *sess){ GtkWidget *frame; GtkWidget *label; GtkWidget *vvbox; GtkWidget *vbox; gchar *titles[1]; vvbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vvbox); /* border for the label */ frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); gtk_box_pack_start (GTK_BOX (vvbox), frame, FALSE, TRUE, 0); gtk_widget_show (frame); /* label */ label = gtk_label_new (book_label); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_misc_set_padding (GTK_MISC (label), 2, 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -