diff options
Diffstat (limited to 'src/editor/editoptions.c')
-rw-r--r-- | src/editor/editoptions.c | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/src/editor/editoptions.c b/src/editor/editoptions.c new file mode 100644 index 0000000..d289611 --- /dev/null +++ b/src/editor/editoptions.c @@ -0,0 +1,240 @@ +/* + Editor options dialog box + + Copyright (C) 1996-2022 + Free Software Foundation, Inc. + + Written by: + Paul Sheer, 1996, 1997 + Andrew Borodin <aborodin@vmail.ru>, 2012-2022 + + This file is part of the Midnight Commander. + + The Midnight Commander 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 3 of the License, + or (at your option) any later version. + + The Midnight Commander 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, see <http://www.gnu.org/licenses/>. + */ + +/** \file + * \brief Source: editor options dialog box + * \author Paul Sheer + * \date 1996, 1997 + */ + +#include <config.h> + +#include <stdlib.h> /* atoi(), NULL */ + +#include "lib/global.h" +#include "lib/widget.h" + +#include "editwidget.h" +#include "edit-impl.h" +#include "src/setup.h" /* option_tab_spacing */ + +/*** global variables ****************************************************************************/ + +/*** file scope macro definitions ****************************************************************/ + +/*** file scope type declarations ****************************************************************/ + +/*** file scope variables ************************************************************************/ + +static const char *wrap_str[] = { + N_("&None"), + N_("&Dynamic paragraphing"), + N_("Type &writer wrap"), + NULL +}; + +/*** file scope functions ************************************************************************/ +/* --------------------------------------------------------------------------------------------- */ + +#ifdef ENABLE_NLS +static void +i18n_translate_array (const char *array[]) +{ + while (*array != NULL) + { + *array = _(*array); + array++; + } +} +#endif /* ENABLE_NLS */ +/* --------------------------------------------------------------------------------------------- */ +/** + * Callback for the iteration of objects in the 'editors' array. + * Tear down 'over_col' property in all editors. + * + * @param data probably WEdit object + * @param user_data unused + */ + +static void +edit_reset_over_col (void *data, void *user_data) +{ + (void) user_data; + + if (edit_widget_is_editor (CONST_WIDGET (data))) + ((WEdit *) data)->over_col = 0; +} + +/* --------------------------------------------------------------------------------------------- */ +/** + * Callback for the iteration of objects in the 'editors' array. + * Reload syntax lighlighting in all editors. + * + * @param data probably WEdit object + * @param user_data unused + */ + +static void +edit_reload_syntax (void *data, void *user_data) +{ + (void) user_data; + + if (edit_widget_is_editor (CONST_WIDGET (data))) + { + WEdit *edit = (WEdit *) data; + + edit_load_syntax (edit, NULL, edit->syntax_type); + } +} + +/* --------------------------------------------------------------------------------------------- */ +/*** public functions ****************************************************************************/ +/* --------------------------------------------------------------------------------------------- */ + +void +edit_options_dialog (WDialog * h) +{ + char wrap_length[16], tab_spacing[16]; + char *p, *q; + int wrap_mode = 0; + gboolean old_syntax_hl; + +#ifdef ENABLE_NLS + static gboolean i18n_flag = FALSE; + + if (!i18n_flag) + { + i18n_translate_array (wrap_str); + i18n_flag = TRUE; + } +#endif /* ENABLE_NLS */ + + g_snprintf (wrap_length, sizeof (wrap_length), "%d", option_word_wrap_line_length); + g_snprintf (tab_spacing, sizeof (tab_spacing), "%d", option_tab_spacing); + + if (option_auto_para_formatting) + wrap_mode = 1; + else if (option_typewriter_wrap) + wrap_mode = 2; + else + wrap_mode = 0; + + { + quick_widget_t quick_widgets[] = { + /* *INDENT-OFF* */ + QUICK_START_COLUMNS, + QUICK_START_GROUPBOX (N_("Wrap mode")), + QUICK_RADIO (3, wrap_str, &wrap_mode, NULL), + QUICK_STOP_GROUPBOX, + QUICK_SEPARATOR (FALSE), + QUICK_SEPARATOR (FALSE), + QUICK_START_GROUPBOX (N_("Tabulation")), + QUICK_CHECKBOX (N_("&Fake half tabs"), &option_fake_half_tabs, NULL), + QUICK_CHECKBOX (N_("&Backspace through tabs"), &option_backspace_through_tabs, + NULL), + QUICK_CHECKBOX (N_("Fill tabs with &spaces"), &option_fill_tabs_with_spaces, + NULL), + QUICK_LABELED_INPUT (N_("Tab spacing:"), input_label_left, tab_spacing, + "edit-tab-spacing", &q, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE), + QUICK_STOP_GROUPBOX, + QUICK_NEXT_COLUMN, + QUICK_START_GROUPBOX (N_("Other options")), + QUICK_CHECKBOX (N_("&Return does autoindent"), &option_return_does_auto_indent, + NULL), + QUICK_CHECKBOX (N_("Confir&m before saving"), &edit_confirm_save, NULL), + QUICK_CHECKBOX (N_("Save file &position"), &option_save_position, NULL), + QUICK_CHECKBOX (N_("&Visible trailing spaces"), &visible_tws, NULL), + QUICK_CHECKBOX (N_("Visible &tabs"), &visible_tabs, NULL), + QUICK_CHECKBOX (N_("Synta&x highlighting"), &option_syntax_highlighting, NULL), + QUICK_CHECKBOX (N_("C&ursor after inserted block"), &option_cursor_after_inserted_block, NULL), + QUICK_CHECKBOX (N_("Pers&istent selection"), &option_persistent_selections, + NULL), + QUICK_CHECKBOX (N_("Cursor be&yond end of line"), &option_cursor_beyond_eol, + NULL), + QUICK_CHECKBOX (N_("&Group undo"), &option_group_undo, NULL), + QUICK_LABELED_INPUT (N_("Word wrap line length:"), input_label_left, wrap_length, + "edit-word-wrap", &p, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE), + QUICK_STOP_GROUPBOX, + QUICK_STOP_COLUMNS, + QUICK_BUTTONS_OK_CANCEL, + QUICK_END + /* *INDENT-ON* */ + }; + + WRect r = { -1, -1, 0, 74 }; + + quick_dialog_t qdlg = { + r, N_("Editor options"), "[Editor options]", + quick_widgets, NULL, NULL + }; + + if (quick_dialog (&qdlg) == B_CANCEL) + return; + } + + old_syntax_hl = option_syntax_highlighting; + + if (!option_cursor_beyond_eol) + g_list_foreach (GROUP (h)->widgets, edit_reset_over_col, NULL); + + if (*p != '\0') + { + option_word_wrap_line_length = atoi (p); + if (option_word_wrap_line_length <= 0) + option_word_wrap_line_length = DEFAULT_WRAP_LINE_LENGTH; + g_free (p); + } + + if (*q != '\0') + { + option_tab_spacing = atoi (q); + if (option_tab_spacing <= 0) + option_tab_spacing = DEFAULT_TAB_SPACING; + g_free (q); + } + + if (wrap_mode == 1) + { + option_auto_para_formatting = TRUE; + option_typewriter_wrap = FALSE; + } + else if (wrap_mode == 2) + { + option_auto_para_formatting = FALSE; + option_typewriter_wrap = TRUE; + } + else + { + option_auto_para_formatting = FALSE; + option_typewriter_wrap = FALSE; + } + + /* Load or unload syntax rules if the option has changed */ + if (option_syntax_highlighting != old_syntax_hl) + g_list_foreach (GROUP (h)->widgets, edit_reload_syntax, NULL); +} + +/* --------------------------------------------------------------------------------------------- */ |