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

📄 settings.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
📖 第 1 页 / 共 5 页
字号:
/* 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 + -