medit/moo/mooedit/mooeditprefs.c

131 lines
4.5 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4; coding: utf-8 -*-
*
* Copyright (C) 2004-2005 by Yevgen Muntyan <muntyan@math.tamu.edu>
*
* 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.
*
* See COPYING file that comes with this distribution.
*/
#define MOOEDIT_COMPILATION
#include "mooedit/mooeditprefs.h"
#include "mooedit/mooedit-private.h"
#include "mooedit/mootextbuffer.h"
#include <string.h>
#define STR_STACK_SIZE 4
const char *moo_edit_setting (const char *setting_name)
{
static GString *stack[STR_STACK_SIZE];
static guint p;
g_return_val_if_fail (setting_name != NULL, NULL);
if (!stack[0])
{
for (p = 0; p < STR_STACK_SIZE; ++p)
stack[p] = g_string_new ("");
p = STR_STACK_SIZE - 1;
}
if (p == STR_STACK_SIZE - 1)
p = 0;
else
p++;
g_string_printf (stack[p], MOO_EDIT_PREFS_PREFIX "/%s", setting_name);
return stack[p]->str;
}
static void set_font (MooEdit *edit);
#define NEW_KEY_BOOL(s,v) moo_prefs_new_key_bool (MOO_EDIT_PREFS_PREFIX "/" s, v)
#define NEW_KEY_INT(s,v) moo_prefs_new_key_int (MOO_EDIT_PREFS_PREFIX "/" s, v)
#define NEW_KEY_STRING(s,v) moo_prefs_new_key_string (MOO_EDIT_PREFS_PREFIX "/" s, v)
#define NEW_KEY_COLOR(s,v) moo_prefs_new_key_color (MOO_EDIT_PREFS_PREFIX "/" s, v)
#define NEW_KEY_ENUM(s,t,v) moo_prefs_new_key_enum (MOO_EDIT_PREFS_PREFIX "/" s, t, v)
void _moo_edit_set_default_settings (void)
{
NEW_KEY_BOOL (MOO_EDIT_PREFS_SEARCH_SELECTED, FALSE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_SMART_HOME_END, TRUE);
NEW_KEY_INT (MOO_EDIT_PREFS_TABS_WIDTH, 8);
NEW_KEY_BOOL (MOO_EDIT_PREFS_SPACES_NO_TABS, FALSE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_AUTO_INDENT, FALSE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_LIMIT_UNDO, FALSE);
NEW_KEY_INT (MOO_EDIT_PREFS_LIMIT_UNDO_NUM, 25);
NEW_KEY_BOOL (MOO_EDIT_PREFS_WRAP_ENABLE, FALSE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_WRAP_DONT_SPLIT_WORDS, TRUE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_SHOW_LINE_NUMBERS, FALSE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_SHOW_MARGIN, FALSE);
NEW_KEY_INT (MOO_EDIT_PREFS_MARGIN, 80);
NEW_KEY_BOOL (MOO_EDIT_PREFS_USE_DEFAULT_FONT, FALSE);
NEW_KEY_STRING (MOO_EDIT_PREFS_FONT, "Courier New 11");
NEW_KEY_BOOL (MOO_EDIT_PREFS_HIGHLIGHT_CURRENT_LINE, TRUE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_USE_SYNTAX_HIGHLIGHTING, TRUE);
NEW_KEY_ENUM (MOO_EDIT_PREFS_ON_EXTERNAL_CHANGES,
MOO_TYPE_EDIT_ON_EXTERNAL_CHANGES,
MOO_EDIT_RELOAD_IF_SAFE);
NEW_KEY_BOOL (MOO_EDIT_PREFS_AUTO_SAVE, FALSE);
NEW_KEY_INT (MOO_EDIT_PREFS_AUTO_SAVE_INTERVAL, 5);
}
#define get_string(key) moo_prefs_get_string (MOO_EDIT_PREFS_PREFIX "/" key)
#define get_bool(key) moo_prefs_get_bool (MOO_EDIT_PREFS_PREFIX "/" key)
#define get_int(key) moo_prefs_get_int (MOO_EDIT_PREFS_PREFIX "/" key)
#define get_color(key) moo_prefs_get_color (MOO_EDIT_PREFS_PREFIX "/" key)
#define get_enum(key) moo_prefs_get_enum (MOO_EDIT_PREFS_PREFIX "/" key)
void _moo_edit_apply_settings (MooEdit *edit)
{
GtkTextView *text_view = GTK_TEXT_VIEW (edit);
if (get_bool (MOO_EDIT_PREFS_WRAP_ENABLE))
{
if (get_bool (MOO_EDIT_PREFS_WRAP_DONT_SPLIT_WORDS))
gtk_text_view_set_wrap_mode (text_view, GTK_WRAP_WORD);
else
gtk_text_view_set_wrap_mode (text_view, GTK_WRAP_CHAR);
}
else
{
gtk_text_view_set_wrap_mode (text_view, GTK_WRAP_NONE);
}
}
void _moo_edit_apply_style_settings (MooEdit *edit)
{
set_font (edit);
}
void _moo_edit_settings_changed (const char *key,
G_GNUC_UNUSED const GValue *newval,
MooEdit *edit)
{
if (!strcmp (key, MOO_EDIT_PREFS_PREFIX "/" MOO_EDIT_PREFS_USE_DEFAULT_FONT) ||
!strcmp (key, MOO_EDIT_PREFS_PREFIX "/" MOO_EDIT_PREFS_FONT))
{
set_font (edit);
}
}
static void set_font (MooEdit *edit)
{
if (get_bool (MOO_EDIT_PREFS_USE_DEFAULT_FONT))
moo_text_view_set_font_from_string (MOO_TEXT_VIEW (edit), NULL);
else
moo_text_view_set_font_from_string (MOO_TEXT_VIEW (edit),
get_string (MOO_EDIT_PREFS_FONT));
}