root/src/editor/editoptions.c

/* [previous][next][first][last][top][bottom][index][help]  */

DEFINITIONS

This source file includes following definitions.
  1. i18n_translate_array
  2. edit_reset_over_col
  3. edit_reload_syntax
  4. edit_options_dialog

   1 /*
   2    Editor options dialog box
   3 
   4    Copyright (C) 1996-2019
   5    Free Software Foundation, Inc.
   6 
   7    Written by:
   8    Paul Sheer, 1996, 1997
   9    Andrew Borodin <aborodin@vmail.ru>, 2012
  10 
  11    This file is part of the Midnight Commander.
  12 
  13    The Midnight Commander is free software: you can redistribute it
  14    and/or modify it under the terms of the GNU General Public License as
  15    published by the Free Software Foundation, either version 3 of the License,
  16    or (at your option) any later version.
  17 
  18    The Midnight Commander is distributed in the hope that it will be useful,
  19    but WITHOUT ANY WARRANTY; without even the implied warranty of
  20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21    GNU General Public License for more details.
  22 
  23    You should have received a copy of the GNU General Public License
  24    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  25  */
  26 
  27 /** \file
  28  *  \brief Source: editor options dialog box
  29  *  \author Paul Sheer
  30  *  \date 1996, 1997
  31  */
  32 
  33 #include <config.h>
  34 
  35 #include <stdlib.h>             /* atoi(), NULL */
  36 
  37 #include "lib/global.h"
  38 #include "lib/widget.h"
  39 
  40 #include "editwidget.h"
  41 #include "edit-impl.h"
  42 #include "src/setup.h"          /* option_tab_spacing */
  43 
  44 /*** global variables ****************************************************************************/
  45 
  46 /*** file scope macro definitions ****************************************************************/
  47 
  48 /*** file scope type declarations ****************************************************************/
  49 
  50 /*** file scope variables ************************************************************************/
  51 
  52 static const char *wrap_str[] = {
  53     N_("&None"),
  54     N_("&Dynamic paragraphing"),
  55     N_("Type &writer wrap"),
  56     NULL
  57 };
  58 
  59 /*** file scope functions ************************************************************************/
  60 /* --------------------------------------------------------------------------------------------- */
  61 
  62 #ifdef ENABLE_NLS
  63 static void
  64 i18n_translate_array (const char *array[])
     /* [previous][next][first][last][top][bottom][index][help]  */
  65 {
  66     while (*array != NULL)
  67     {
  68         *array = _(*array);
  69         array++;
  70     }
  71 }
  72 #endif /* ENABLE_NLS */
  73 /* --------------------------------------------------------------------------------------------- */
  74 /**
  75  * Callback for the iteration of objects in the 'editors' array.
  76  * Tear down 'over_col' property in all editors.
  77  *
  78  * @param data      probably WEdit object
  79  * @param user_data unused
  80  */
  81 
  82 static void
  83 edit_reset_over_col (void *data, void *user_data)
     /* [previous][next][first][last][top][bottom][index][help]  */
  84 {
  85     (void) user_data;
  86 
  87     if (edit_widget_is_editor (CONST_WIDGET (data)))
  88         ((WEdit *) data)->over_col = 0;
  89 }
  90 
  91 /* --------------------------------------------------------------------------------------------- */
  92 /**
  93  * Callback for the iteration of objects in the 'editors' array.
  94  * Reload syntax lighlighting in all editors.
  95  *
  96  * @param data      probably WEdit object
  97  * @param user_data unused
  98  */
  99 
 100 static void
 101 edit_reload_syntax (void *data, void *user_data)
     /* [previous][next][first][last][top][bottom][index][help]  */
 102 {
 103     (void) user_data;
 104 
 105     if (edit_widget_is_editor (CONST_WIDGET (data)))
 106     {
 107         WEdit *edit = (WEdit *) data;
 108 
 109         edit_load_syntax (edit, NULL, edit->syntax_type);
 110     }
 111 }
 112 
 113 /* --------------------------------------------------------------------------------------------- */
 114 /*** public functions ****************************************************************************/
 115 /* --------------------------------------------------------------------------------------------- */
 116 
 117 void
 118 edit_options_dialog (WDialog * h)
     /* [previous][next][first][last][top][bottom][index][help]  */
 119 {
 120     char wrap_length[16], tab_spacing[16];
 121     char *p, *q;
 122     int wrap_mode = 0;
 123     gboolean old_syntax_hl;
 124 
 125 #ifdef ENABLE_NLS
 126     static gboolean i18n_flag = FALSE;
 127 
 128     if (!i18n_flag)
 129     {
 130         i18n_translate_array (wrap_str);
 131         i18n_flag = TRUE;
 132     }
 133 #endif /* ENABLE_NLS */
 134 
 135     g_snprintf (wrap_length, sizeof (wrap_length), "%d", option_word_wrap_line_length);
 136     g_snprintf (tab_spacing, sizeof (tab_spacing), "%d", option_tab_spacing);
 137 
 138     if (option_auto_para_formatting)
 139         wrap_mode = 1;
 140     else if (option_typewriter_wrap)
 141         wrap_mode = 2;
 142     else
 143         wrap_mode = 0;
 144 
 145     {
 146         quick_widget_t quick_widgets[] = {
 147             /* *INDENT-OFF* */
 148             QUICK_START_COLUMNS,
 149                 QUICK_START_GROUPBOX (N_("Wrap mode")),
 150                     QUICK_RADIO (3, wrap_str, &wrap_mode, NULL),
 151                 QUICK_STOP_GROUPBOX,
 152                 QUICK_SEPARATOR (FALSE),
 153                 QUICK_SEPARATOR (FALSE),
 154                 QUICK_START_GROUPBOX (N_("Tabulation")),
 155                     QUICK_CHECKBOX (N_("&Fake half tabs"), &option_fake_half_tabs, NULL),
 156                     QUICK_CHECKBOX (N_("&Backspace through tabs"), &option_backspace_through_tabs,
 157                                     NULL),
 158                     QUICK_CHECKBOX (N_("Fill tabs with &spaces"), &option_fill_tabs_with_spaces,
 159                                     NULL),
 160                     QUICK_LABELED_INPUT (N_("Tab spacing:"), input_label_left, tab_spacing,
 161                                           "edit-tab-spacing", &q, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
 162                 QUICK_STOP_GROUPBOX,
 163             QUICK_NEXT_COLUMN,
 164                 QUICK_START_GROUPBOX (N_("Other options")),
 165                     QUICK_CHECKBOX (N_("&Return does autoindent"), &option_return_does_auto_indent,
 166                                     NULL),
 167                     QUICK_CHECKBOX (N_("Confir&m before saving"), &edit_confirm_save, NULL),
 168                     QUICK_CHECKBOX (N_("Save file &position"), &option_save_position, NULL),
 169                     QUICK_CHECKBOX (N_("&Visible trailing spaces"), &visible_tws, NULL),
 170                     QUICK_CHECKBOX (N_("Visible &tabs"), &visible_tabs, NULL),
 171                     QUICK_CHECKBOX (N_("Synta&x highlighting"), &option_syntax_highlighting, NULL),
 172                     QUICK_CHECKBOX (N_("C&ursor after inserted block"), &option_cursor_after_inserted_block, NULL),
 173                     QUICK_CHECKBOX (N_("Pers&istent selection"), &option_persistent_selections,
 174                                      NULL),
 175                     QUICK_CHECKBOX (N_("Cursor be&yond end of line"), &option_cursor_beyond_eol,
 176                                      NULL),
 177                     QUICK_CHECKBOX (N_("&Group undo"), &option_group_undo, NULL),
 178                     QUICK_LABELED_INPUT (N_("Word wrap line length:"), input_label_left, wrap_length,
 179                                          "edit-word-wrap", &p, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
 180                 QUICK_STOP_GROUPBOX,
 181             QUICK_STOP_COLUMNS,
 182             QUICK_BUTTONS_OK_CANCEL,
 183             QUICK_END
 184             /* *INDENT-ON* */
 185         };
 186 
 187         quick_dialog_t qdlg = {
 188             -1, -1, 74,
 189             N_("Editor options"), "[Editor options]",
 190             quick_widgets, NULL, NULL
 191         };
 192 
 193         if (quick_dialog (&qdlg) == B_CANCEL)
 194             return;
 195     }
 196 
 197     old_syntax_hl = option_syntax_highlighting;
 198 
 199     if (!option_cursor_beyond_eol)
 200         g_list_foreach (h->widgets, edit_reset_over_col, NULL);
 201 
 202     if (p != NULL)
 203     {
 204         option_word_wrap_line_length = atoi (p);
 205         if (option_word_wrap_line_length <= 0)
 206             option_word_wrap_line_length = DEFAULT_WRAP_LINE_LENGTH;
 207         g_free (p);
 208     }
 209 
 210     if (q != NULL)
 211     {
 212         option_tab_spacing = atoi (q);
 213         if (option_tab_spacing <= 0)
 214             option_tab_spacing = DEFAULT_TAB_SPACING;
 215         g_free (q);
 216     }
 217 
 218     if (wrap_mode == 1)
 219     {
 220         option_auto_para_formatting = TRUE;
 221         option_typewriter_wrap = FALSE;
 222     }
 223     else if (wrap_mode == 2)
 224     {
 225         option_auto_para_formatting = FALSE;
 226         option_typewriter_wrap = TRUE;
 227     }
 228     else
 229     {
 230         option_auto_para_formatting = FALSE;
 231         option_typewriter_wrap = FALSE;
 232     }
 233 
 234     /* Load or unload syntax rules if the option has changed */
 235     if (option_syntax_highlighting != old_syntax_hl)
 236         g_list_foreach (h->widgets, edit_reload_syntax, NULL);
 237 }
 238 
 239 /* --------------------------------------------------------------------------------------------- */

/* [previous][next][first][last][top][bottom][index][help]  */