📄 dialog-prefs.c
字号:
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- *//* * gedit * * Copyright (C) 1998, 1999, 2000 Alex Roberts, Evan Lawrence, Jason Leach, Jose Celorio * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. * * Prefs glade-ized and rewritten by Jason Leach <leach@wam.umd.edu> */#include <config.h>#include <glib.h>#include <gtk/gtkwidget.h>#include <libgnome/libgnome.h>#include <libgnomeui/gnome-font-picker.h>#include <libgnomeui/gnome-paper-selector.h>#include <libgnomeui/gnome-color-picker.h>#include <libgnomeui/gnome-propertybox.h>#include <glade/glade.h>#include <string.h> /* For strcmp */#include "prefs.h"#include "view.h"#include "dialogs.h"#include "utils.h"#include "commands.h"#include "window.h"#include "print.h"static GtkWidget *propertybox;static GtkWidget *statusbar;#ifdef ENABLE_SPLIT_SCREENstatic GtkWidget *splitscreen;#endifstatic GtkWidget *autoindent;static GtkWidget *toolbar_radio_button_1;static GtkWidget *toolbar_radio_button_2;static GtkWidget *toolbar_radio_button_3;static GtkWidget *mdimode;static GtkWidget *tabsize;static GtkWidget *tabpos;static GtkWidget *foreground;static GtkWidget *background;static GtkWidget *defaultfont;static GtkWidget *print_wrap;static GtkWidget *print_header;static GtkWidget *print_lines;static GtkWidget *print_orientation_portrait_radio_button;static GtkWidget *print_lines_spin_button;static GtkWidget *lines_label;static GtkWidget *paperselector;static GtkWidget *undo_levels;static GtkWidget *undo_levels_spin_button;static GtkWidget *undo_levels_label;static gintgtk_option_menu_get_active_index (GtkWidget *omenu){ GtkMenu *menu; GtkWidget *active; GtkWidget *child; GList *children; gint i = 0; gedit_debug(DEBUG_PREFS, ""); menu = GTK_MENU (gtk_option_menu_get_menu (GTK_OPTION_MENU (omenu))); active = gtk_menu_get_active (menu); child = NULL; children = GTK_MENU_SHELL (menu)->children; while (children) { child = children->data; children = children->next; if (child == active) return i; else i++; } return 0;}static voiddestroy_cb (void){ gedit_debug (DEBUG_PREFS, ""); gtk_widget_destroy (GTK_WIDGET (propertybox)); propertybox = NULL;}static voidapply_cb (GnomePropertyBox *pbox, gint page, gpointer data){ GtkStyle *style; GdkColor *c; gint temp_mdi_mode; gint temp; gboolean tab_size_changed = FALSE; gedit_debug (DEBUG_PREFS, ""); if (page == -1) return; settings->auto_indent = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (autoindent)); settings->show_status = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (statusbar)); temp = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (tabsize)); if (settings->tab_size != temp) tab_size_changed = TRUE; settings->tab_size = temp; switch (gtk_radio_group_get_selected (GTK_RADIO_BUTTON(toolbar_radio_button_1)->group)) { case 0: settings->toolbar_labels = GEDIT_TOOLBAR_SYSTEM; break; case 1: settings->toolbar_labels = GEDIT_TOOLBAR_ICONS; break; case 2: settings->toolbar_labels = GEDIT_TOOLBAR_ICONS_AND_TEXT; break; default: g_return_if_fail (FALSE); break; } if (settings->font) g_free (settings->font); settings->font = g_strdup (gnome_font_picker_get_font_name (GNOME_FONT_PICKER (defaultfont))); if (gtk_radio_group_get_selected (GTK_RADIO_BUTTON(print_orientation_portrait_radio_button)->group)==0) settings->print_orientation = PRINT_ORIENT_PORTRAIT; else settings->print_orientation = PRINT_ORIENT_LANDSCAPE; settings->print_header = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_header)); settings->print_wrap_lines = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_wrap)); g_free (settings->papersize); if (strcmp( "custom", gnome_paper_selector_get_name( GNOME_PAPER_SELECTOR (paperselector)))==0) { g_warning ("Custom paper sizes not yet supported. Setting paper size to default\n"); settings->papersize = g_strdup (gnome_paper_name_default()); } else settings->papersize = g_strdup (gnome_paper_selector_get_name( GNOME_PAPER_SELECTOR (paperselector))); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print_lines))) { settings->print_lines = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (print_lines_spin_button)); } else { settings->print_lines = 0; } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (undo_levels))) settings->undo_levels = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (undo_levels_spin_button)); else settings->undo_levels = 0; style = gtk_style_new (); c = &style->base[0]; gnome_color_picker_get_i16 (GNOME_COLOR_PICKER (background), &c->red, &c->green, &c->blue, 0); settings->bg[0] = c->red; settings->bg[1] = c->green; settings->bg[2] = c->blue; c = &style->text[0]; gnome_color_picker_get_i16 (GNOME_COLOR_PICKER (foreground), &c->red, &c->green, &c->blue, 0); settings->fg[0] = c->red; settings->fg[1] = c->green; settings->fg[2] = c->blue; gtk_style_unref (style); settings->tab_pos = gtk_option_menu_get_active_index (tabpos); temp_mdi_mode = gtk_option_menu_get_active_index (mdimode); temp_mdi_mode = temp_mdi_mode != 3 ? temp_mdi_mode : GNOME_MDI_DEFAULT_MODE; if (settings->mdi_mode != temp_mdi_mode) { settings->mdi_mode = temp_mdi_mode; gedit_window_refresh_all (TRUE, tab_size_changed); } else { gedit_window_refresh_all (FALSE, tab_size_changed); } gedit_prefs_save_settings ();}static voidgtk_toggle_button_update_label_sensitivity (GtkWidget *widget, gboolean sens){ GList *children; GList *l; GtkContainer *container; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_CONTAINER (widget)); container = GTK_CONTAINER (widget); children = gtk_container_children (container); l = children; while (l) { GtkWidget *child = (GtkWidget*)l->data; if (GTK_IS_LABEL (child)) gtk_widget_set_sensitive (child, sens); l = l->next; } g_list_free (children);}static voidprefs_changed (GtkWidget *widget, gpointer data){ gedit_debug (DEBUG_PREFS, ""); gnome_property_box_changed (GNOME_PROPERTY_BOX (propertybox));}static voidprepare_general_page (GladeXML *gui){ gedit_debug (DEBUG_PREFS, ""); statusbar = glade_xml_get_widget (gui, "statusbar");#ifdef ENABLE_SPLIT_SCREEN splitscreen = glade_xml_get_widget (gui, "splitscreen");#endif autoindent = glade_xml_get_widget (gui, "autoindent"); tabsize = glade_xml_get_widget (gui, "tabwidthspin"); toolbar_radio_button_1 = glade_xml_get_widget (gui, "toolbar_radio_button_1"); toolbar_radio_button_2 = glade_xml_get_widget (gui, "toolbar_radio_button_2"); toolbar_radio_button_3 = glade_xml_get_widget (gui, "toolbar_radio_button_3"); if ( !statusbar ||#ifdef ENABLE_SPLIT_SCREEN !splitscreen ||#endif !autoindent || !tabsize || !toolbar_radio_button_1 || !toolbar_radio_button_2 || !toolbar_radio_button_3 ) { g_warning ("Could not load widgets from prefs.glade\n"); return; } /* set initial button status */ gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (statusbar), settings->show_status);#ifdef ENABLE_SPLIT_SCREEN gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (splitscreen), settings->splitscreen);#endif gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (autoindent), settings->auto_indent); gtk_spin_button_set_value (GTK_SPIN_BUTTON (tabsize), (guint) settings->tab_size); switch (settings->toolbar_labels) { case GEDIT_TOOLBAR_SYSTEM: gtk_radio_button_select (GTK_RADIO_BUTTON(toolbar_radio_button_1)->group, 0); break; case GEDIT_TOOLBAR_ICONS: gtk_radio_button_select (GTK_RADIO_BUTTON(toolbar_radio_button_1)->group, 1); break; case GEDIT_TOOLBAR_ICONS_AND_TEXT: gtk_radio_button_select (GTK_RADIO_BUTTON(toolbar_radio_button_1)->group, 2); break; } /* connect signals */ gtk_signal_connect (GTK_OBJECT (statusbar), "toggled", GTK_SIGNAL_FUNC (prefs_changed), NULL);#ifdef ENABLE_SPLIT_SCREEN gtk_signal_connect (GTK_OBJECT (splitscreen), "toggled",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -