mc/src/option.c

244 lines
7.1 KiB
C
Raw Normal View History

1998-02-27 07:54:42 +03:00
/* Configure box module for the Midnight Commander
Copyright (C) 1994 Radek Doulik
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1998-02-27 07:54:42 +03:00
*/
#include <config.h>
2005-02-08 12:04:03 +03:00
1998-02-27 07:54:42 +03:00
#include <stdio.h>
2005-02-08 12:04:03 +03:00
#include <string.h>
1998-02-27 07:54:42 +03:00
#include <sys/types.h>
#include <sys/stat.h>
2005-02-08 12:04:03 +03:00
#include <unistd.h>
1999-09-19 Andrew V. Samoilov <sav@bcs.zp.ua> * src/user.c (check_patterns): char* is used instead of char [] in sizeof * src/util.c (string_perm): prefix named pipes by 'p' and not by `s' 1999-09-19 David Martin <dmartina@usa.net> * gtkedit/editcmd.c (edit_print_string): Use unsigned char so that 8 bit chars from strftime get displayed when inserting date. * lib/mc.ext.in: Add entries for bzip2 compressed pages as used in Mandrake 6.0. The generic entry for bzip2 moved to the end of the file to avoid interferences. In this one I changed the extension check to a type check (as used for gzip) which might give problems in some systems. * configure.in: Use -Tlatin1 to format man pages when available and "view" 8 bit chars. 1999-09-19 Norbert Warmuth <nwarmuth@privat.circular.de> * gtkedit/edit.h: Include files reordered in order to make it compile with --with-debug * gtkedit/editcmd.c (menu_save_mode_cmd): calculate dialog width dependent on lenght of translated strings to display. * src/mad.c, mad.h, util.c, util.h: Move mad-functions from util.[ch] to mad.[ch] * src/option.c: Include files reordered in order to make it compile with --with-debug * src/mad.c (mad_init): New function. Initialize debug FILE pointer to stderr (moved to a function because not on every system stderr is a constant). (mad_set_debug): added const qualifier * src/main.c (main): call mad_init * po/*.po: s/defination/definition/ * gnome/Makefile.in ($(MAGICDEV_GENERATED)): Make it compile with $buildir != $srcdir. * vfs/ftpfs.c (ftpfs_set_debug), vfs.h: added const qualifier. * vfs/mcserv.c: removed definition of mad_strconcat which is also in mad.c.
1999-09-20 03:09:07 +04:00
#include "global.h"
1998-02-27 07:54:42 +03:00
#include "tty.h"
#include "win.h"
#include "color.h"
#include "dialog.h"
1998-02-27 07:54:42 +03:00
#include "widget.h"
#include "setup.h" /* For save_setup() */
#include "main.h"
#include "profile.h" /* For sync_profiles */
#include "panel.h" /* Needed for the externs */
2002-12-08 07:16:30 +03:00
#include "file.h" /* safe_delete */
1998-02-27 07:54:42 +03:00
#include "layout.h" /* For nice_rotating_dash */
1998-12-03 00:27:27 +03:00
#include "option.h"
1998-02-27 07:54:42 +03:00
static Dlg_head *conf_dlg;
#define TOGGLE_VARIABLE 0
static int first_width, second_width;
1998-02-27 07:54:42 +03:00
static struct {
const char *text;
1998-02-27 07:54:42 +03:00
int *variable;
void (*toggle_function)(void);
WCheck *widget;
} check_options [] = {
/* other options */
{N_("safe de&Lete"), &safe_delete, TOGGLE_VARIABLE, 0 },
{N_("cd follows lin&Ks"), &cd_symlinks, TOGGLE_VARIABLE, 0 },
{N_("L&ynx-like motion"), &navigate_with_arrows,TOGGLE_VARIABLE, 0 },
{N_("rotatin&G dash"), &nice_rotating_dash,TOGGLE_VARIABLE, 0 },
{N_("co&Mplete: show all"),&show_all_if_ambiguous,TOGGLE_VARIABLE, 0 },
{N_("&Use internal view"), &use_internal_view, TOGGLE_VARIABLE, 0 },
{N_("use internal ed&It"), &use_internal_edit, TOGGLE_VARIABLE, 0 },
{N_("auto m&Enus"), &auto_menu, TOGGLE_VARIABLE, 0 },
{N_("&Auto save setup"), &auto_save_setup, TOGGLE_VARIABLE, 0 },
{N_("shell &Patterns"), &easy_patterns, TOGGLE_VARIABLE, 0 },
{N_("Compute &Totals"), &file_op_compute_totals, TOGGLE_VARIABLE, 0 },
{N_("&Verbose operation"), &verbose, TOGGLE_VARIABLE, 0 },
/* panel options */
{N_("&Fast dir reload"), &fast_reload, toggle_fast_reload, 0 },
{N_("mi&X all files"), &mix_all_files, toggle_mix_all_files, 0 },
{N_("&Drop down menus"), &drop_menus, TOGGLE_VARIABLE, 0 },
{N_("ma&Rk moves down"), &mark_moves_down, TOGGLE_VARIABLE, 0 },
{N_("show &Hidden files"), &show_dot_files, toggle_show_hidden, 0 },
{N_("show &Backup files"), &show_backups, toggle_show_backup, 0 },
1998-02-27 07:54:42 +03:00
{ 0, 0, 0, 0 }
};
/* Make sure this corresponds to the check_options structure */
#define OTHER_OPTIONS 12
#define PANEL_OPTIONS 6
1998-02-27 07:54:42 +03:00
static WRadio *pause_radio;
2004-08-17 04:00:32 +04:00
static const char *pause_options [3] = {
N_("&Never"),
N_("on dumb &Terminals"),
N_("Alwa&ys") };
1998-02-27 07:54:42 +03:00
2004-08-16 21:43:36 +04:00
#define PAUSE_OPTIONS (sizeof(pause_options) / sizeof(pause_options[0]))
/* Heights of the panes */
#define PY 3
#define OY PY
/* Align bottoms of "pause after run" and "other options" */
#define RY (OTHER_OPTIONS - PAUSE_OPTIONS + OY)
#define DLG_Y (OTHER_OPTIONS + 9)
#define BY (DLG_Y - 3)
/* Horizontal dimensions */
#define X_MARGIN 3
#define X_PANE_GAP 1
#define PX X_MARGIN
#define RX X_MARGIN
#define OX (first_width + X_MARGIN + X_PANE_GAP)
/* Create the "Configure options" dialog */
static void
init_configure (void)
1998-02-27 07:54:42 +03:00
{
int i;
static int i18n_config_flag = 0;
static int b1, b2, b3;
const char *ok_button = _("&OK");
const char *cancel_button = _("&Cancel");
const char *save_button = _("&Save");
static const char *title1, *title2, *title3;
if (!i18n_config_flag) {
register int l1;
/* Similar code is in layout.c (init_layout()) */
title1 = _(" Panel options ");
title2 = _(" Pause after run... ");
title3 = _(" Other options ");
first_width = strlen (title1) + 1;
second_width = strlen (title3) + 1;
for (i = 0; check_options[i].text; i++) {
check_options[i].text = _(check_options[i].text);
l1 = strlen (check_options[i].text) + 7;
if (i >= OTHER_OPTIONS) {
if (l1 > first_width)
first_width = l1;
} else {
if (l1 > second_width)
second_width = l1;
}
}
2004-08-16 21:43:36 +04:00
i = PAUSE_OPTIONS;
while (i--) {
pause_options[i] = _(pause_options[i]);
l1 = strlen (pause_options[i]) + 7;
if (l1 > first_width)
first_width = l1;
}
1998-02-27 07:54:42 +03:00
l1 = strlen (title2) + 1;
if (l1 > first_width)
first_width = l1;
l1 = 11 + strlen (ok_button)
+ strlen (save_button)
+ strlen (cancel_button);
i = (first_width + second_width - l1) / 4;
b1 = 5 + i;
b2 = b1 + strlen (ok_button) + i + 6;
b3 = b2 + strlen (save_button) + i + 4;
i18n_config_flag = 1;
}
conf_dlg =
create_dlg (0, 0, DLG_Y,
first_width + second_width + 2 * X_MARGIN + X_PANE_GAP,
dialog_colors, NULL, "[Configuration]",
_("Configure options"), DLG_CENTER | DLG_REVERSE);
1998-02-27 07:54:42 +03:00
add_widget (conf_dlg,
groupbox_new (PX, PY, first_width, PANEL_OPTIONS + 2, title1));
add_widget (conf_dlg,
groupbox_new (RX, RY, first_width, PAUSE_OPTIONS + 2, title2));
add_widget (conf_dlg,
groupbox_new (OX, OY, second_width, OTHER_OPTIONS + 2, title3));
add_widget (conf_dlg,
button_new (BY, b3, B_CANCEL, NORMAL_BUTTON,
cancel_button, 0));
1998-02-27 07:54:42 +03:00
add_widget (conf_dlg,
button_new (BY, b2, B_EXIT, NORMAL_BUTTON,
save_button, 0));
add_widget (conf_dlg,
button_new (BY, b1, B_ENTER, DEFPUSH_BUTTON,
ok_button, 0));
1998-02-27 07:54:42 +03:00
#define XTRACT(i) *check_options[i].variable, check_options[i].text
1998-02-27 07:54:42 +03:00
/* Add checkboxes for "other options" */
for (i = 0; i < OTHER_OPTIONS; i++) {
check_options[i].widget =
check_new (OY + (OTHER_OPTIONS - i), OX + 2, XTRACT (i));
add_widget (conf_dlg, check_options[i].widget);
1998-02-27 07:54:42 +03:00
}
pause_radio =
radio_new (RY + 1, RX + 2, 3, pause_options, 1);
1998-02-27 07:54:42 +03:00
pause_radio->sel = pause_after_run;
add_widget (conf_dlg, pause_radio);
/* Add checkboxes for "panel options" */
for (i = 0; i < PANEL_OPTIONS; i++) {
check_options[i + OTHER_OPTIONS].widget =
check_new (PY + (PANEL_OPTIONS - i), PX + 2,
XTRACT (i + OTHER_OPTIONS));
add_widget (conf_dlg, check_options[i + OTHER_OPTIONS].widget);
1998-02-27 07:54:42 +03:00
}
}
void configure_box (void)
{
int result, i;
init_configure ();
run_dlg (conf_dlg);
result = conf_dlg->ret_value;
if (result == B_ENTER || result == B_EXIT){
for (i = 0; check_options [i].text; i++)
if (check_options [i].widget->state & C_CHANGE){
if (check_options [i].toggle_function)
(*check_options [i].toggle_function)();
else
*check_options [i].variable =
!(*check_options [i].variable);
}
pause_after_run = pause_radio->sel;
}
/* If they pressed the save button */
if (result == B_EXIT){
save_configure ();
sync_profiles ();
}
destroy_dlg (conf_dlg);
}