1 /* Some misc dialog boxes for the program.
3 Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
4 2005, 2006, 2009 Free Software Foundation, Inc.
6 Authors: 1994, 1995 Miguel de Icaza
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
24 * \brief Source: Some misc dialog boxes for the program
34 #include <sys/types.h>
39 #include "../src/tty/tty.h"
40 #include "../src/skin/skin.h" /* INPUT_COLOR */
41 #include "../src/tty/key.h" /* XCTRL and ALT macros */
43 #include "../src/mcconfig/mcconfig.h" /* Load/save user formats */
45 #include "dialog.h" /* The nice dialog manager */
46 #include "widget.h" /* The widgets for the nice dialog manager */
48 #include "setup.h" /* For profile_name */
49 #include "command.h" /* For cmdline */
51 #include "panel.h" /* LIST_TYPES */
53 #include "main.h" /* For the confirm_* variables */
55 #include "layout.h" /* for get_nth_panel_name proto */
56 #include "background.h" /* task_list */
61 #include "selcodepage.h"
65 # include "../vfs/ftpfs.h"
69 #include "../vfs/gc.h"
73 static WRadio
*display_radio
;
74 static WInput
*display_user_format
;
75 static WInput
*display_mini_status
;
76 static WCheck
*display_check_status
;
77 static char **displays_status
;
78 static int display_user_hotkey
= 'u';
81 display_callback (Dlg_head
*h
, Widget
*sender
,
82 dlg_msg_t msg
, int parm
, void *data
)
86 if (dlg_widget_active (display_radio
)) {
87 assign_text (display_mini_status
, displays_status
[display_radio
->sel
]);
88 input_set_point (display_mini_status
, 0);
94 if (dlg_widget_active (display_radio
)) {
95 assign_text (display_mini_status
, displays_status
[display_radio
->sel
]);
100 if (dlg_widget_active (display_user_format
)) {
101 h
->ret_value
= B_USER
+ 6;
106 if (dlg_widget_active (display_mini_status
)) {
107 h
->ret_value
= B_USER
+ 7;
113 if (g_ascii_tolower (parm
) == display_user_hotkey
&& dlg_widget_active (display_user_format
)
114 && dlg_widget_active (display_mini_status
)) {
115 display_radio
->sel
= 3;
116 dlg_select_widget (display_radio
); /* force redraw */
117 dlg_select_widget (display_user_format
);
120 return MSG_NOT_HANDLED
;
123 return default_dlg_callback (h
, sender
, msg
, parm
, data
);
128 display_init (int radio_sel
, char *init_text
, int _check_status
,
131 int dlg_width
= 48, dlg_height
= 15;
134 /* Controls whether the array strings have been translated */
135 const char *displays
[LIST_TYPES
] =
137 N_("&Full file list"),
138 N_("&Brief file list"),
139 N_("&Long file list"),
143 /* Index in displays[] for "user defined" */
144 const int user_type_idx
= 3;
146 const char *display_title
= N_("Listing mode");
147 const char *user_mini_status
= N_("user &Mini status");
148 const char *ok_name
= N_("&OK");
149 const char *cancel_name
= N_("&Cancel");
151 WButton
*ok_button
, *cancel_button
;
156 int ok_len
, cancel_len
;
159 display_title
= _(display_title
);
160 user_mini_status
= _(user_mini_status
);
161 ok_name
= _(ok_name
);
162 cancel_name
= _(cancel_name
);
164 for (i
= 0; i
< LIST_TYPES
; i
++)
165 displays
[i
] = _(displays
[i
]);
168 /* get hotkey of user-defined format string */
169 cp
= strchr (displays
[user_type_idx
], '&');
170 if (cp
!= NULL
&& *++cp
!= '\0')
171 display_user_hotkey
= g_ascii_tolower (*cp
);
173 /* xpos will be fixed later */
174 ok_button
= button_new (dlg_height
- 3, 0, B_ENTER
, DEFPUSH_BUTTON
, ok_name
, 0);
175 ok_len
= button_get_len (ok_button
);
176 cancel_button
= button_new (dlg_height
- 3, 0, B_CANCEL
, NORMAL_BUTTON
, cancel_name
, 0);
177 cancel_len
= button_get_len (cancel_button
);
179 dlg_width
= max (dlg_width
, str_term_width1 (display_title
) + 10);
180 /* calculate max width of radiobutons */
181 for (i
= 0; i
< LIST_TYPES
; i
++)
182 maxlen
= max (maxlen
, str_term_width1 (displays
[i
]));
183 dlg_width
= max (dlg_width
, maxlen
);
184 dlg_width
= max (dlg_width
, str_term_width1 (user_mini_status
) + 13);
187 dlg_width
= max (dlg_width
, ok_len
+ cancel_len
+ 8);
188 ok_button
->widget
.x
= dlg_width
/3 - ok_len
/2;
189 cancel_button
->widget
.x
= dlg_width
* 2/3 - cancel_len
/2;
192 displays_status
= _status
;
194 dd
= create_dlg (0, 0, dlg_height
, dlg_width
, dialog_colors
,
195 display_callback
, "[Listing Mode...]", display_title
,
196 DLG_CENTER
| DLG_REVERSE
);
198 add_widget (dd
, cancel_button
);
199 add_widget (dd
, ok_button
);
201 display_mini_status
= input_new (10, 8, INPUT_COLOR
, dlg_width
- 12, _status
[radio_sel
],
202 "mini-input", INPUT_COMPLETE_DEFAULT
);
203 add_widget (dd
, display_mini_status
);
204 input_set_point (display_mini_status
, 0);
206 display_check_status
= check_new (9, 4, _check_status
, user_mini_status
);
207 add_widget (dd
, display_check_status
);
209 display_user_format
= input_new (7, 8, INPUT_COLOR
, dlg_width
- 12, init_text
,
210 "user-fmt-input", INPUT_COMPLETE_DEFAULT
);
211 add_widget (dd
, display_user_format
);
212 input_set_point (display_user_format
, 0);
214 display_radio
= radio_new (3, 4, LIST_TYPES
, displays
);
215 display_radio
->sel
= display_radio
->pos
= radio_sel
;
216 add_widget (dd
, display_radio
);
222 display_box (WPanel
*panel
, char **userp
, char **minip
, int *use_msformat
, int num
)
226 char *section
= NULL
;
230 const char *p
= get_nth_panel_name (num
);
231 panel
= g_new (WPanel
, 1);
232 panel
->list_type
= list_full
;
233 panel
->user_format
= g_strdup (DEFAULT_USER_FORMAT
);
234 panel
->user_mini_status
= 0;
235 for (i
= 0; i
< LIST_TYPES
; i
++)
236 panel
->user_status_format
[i
] = g_strdup (DEFAULT_USER_FORMAT
);
237 section
= g_strconcat ("Temporal:", p
, (char *) NULL
);
238 if (! mc_config_has_group (mc_main_config
, section
)) {
240 section
= g_strdup (p
);
242 panel_load_setup (panel
, section
);
246 dd
= display_init (panel
->list_type
, panel
->user_format
,
247 panel
->user_mini_status
, panel
->user_status_format
);
249 if (run_dlg (dd
) != B_CANCEL
) {
250 result
= display_radio
->sel
;
251 *userp
= g_strdup (display_user_format
->buffer
);
252 *minip
= g_strdup (display_mini_status
->buffer
);
253 *use_msformat
= display_check_status
->state
& C_BOOL
;
256 if (section
!= NULL
) {
257 g_free (panel
->user_format
);
258 for (i
= 0; i
< LIST_TYPES
; i
++)
259 g_free (panel
->user_status_format
[i
]);
268 const panel_field_t
*
269 sort_box (const panel_field_t
*sort_format
, int *reverse
, int *case_sensitive
, int *exec_first
)
271 int dlg_width
= 40, dlg_height
= 15;
273 const char **sort_orders_names
;
274 gsize sort_names_num
;
278 const panel_field_t
*result
= sort_format
;
281 int max_radio
= 0, max_check
= 0;
282 int ok_len
, cancel_len
;
285 QuickWidget quick_widgets
[] =
288 QUICK_BUTTON (0, dlg_width
, dlg_height
- 3, dlg_height
, N_("&Cancel"), B_CANCEL
, NULL
),
290 QUICK_BUTTON (0, dlg_width
, dlg_height
- 3, dlg_height
, N_("&OK"), B_ENTER
, NULL
),
292 QUICK_CHECKBOX (0, dlg_width
, 5, dlg_height
, N_("&Reverse"), reverse
),
294 QUICK_CHECKBOX (0, dlg_width
, 4, dlg_height
, N_("Case sensi&tive"), case_sensitive
),
296 QUICK_CHECKBOX (0, dlg_width
, 3, dlg_height
, N_("Executable &first"), exec_first
),
298 QUICK_RADIO (4, dlg_width
, 3, dlg_height
, 0,
303 QuickDialog quick_dlg
=
305 dlg_width
, dlg_height
, -1, -1,
306 N_("Sort order"), "[Sort Order...]",
310 sort_orders_names
= panel_get_sortable_fields(&sort_names_num
);
311 quick_widgets
[5].u
.radio
.items
= sort_orders_names
;
312 quick_widgets
[5].u
.radio
.count
= sort_names_num
;
314 for (i
= 0; i
< sort_names_num
; i
++)
315 if (strcmp (sort_orders_names
[i
], _(sort_format
->title_hotkey
)) == 0 ) {
321 quick_dlg
.title
= _(quick_dlg
.title
);
323 for (i
= 0; i
< 2; i
++)
324 quick_widgets
[i
].u
.button
.text
= _(quick_widgets
[i
].u
.button
.text
);
326 for (i
= 2; i
< 5; i
++)
327 quick_widgets
[i
].u
.checkbox
.text
= _(quick_widgets
[i
].u
.checkbox
.text
);
328 #endif /* ENABLE_NlS */
331 cancel_len
= str_term_width1 (quick_widgets
[0].u
.button
.text
) + 4;
332 ok_len
= str_term_width1 (quick_widgets
[1].u
.button
.text
) + 6;
334 for (i
= 2; i
< 5; i
++)
335 max_check
= max (max_check
, str_term_width1 (quick_widgets
[i
].u
.checkbox
.text
) + 4);
337 for (i
= 0; i
< sort_names_num
; i
++)
338 max_radio
= max (max_radio
, str_term_width1 (sort_orders_names
[i
]) + 4);
341 dlg_width
= max (dlg_width
, str_term_width1 (quick_dlg
.title
) + 8);
342 dlg_width
= max (dlg_width
, ok_len
+ cancel_len
+ 8);
343 dlg_width
= max (dlg_width
, 2 * max (max_radio
, max_check
) + 8);
345 /* fix widget and dialog parameters */
347 quick_dlg
.xlen
= dlg_width
;
349 for (i
= 0; (size_t) i
< sizeof (quick_widgets
)/sizeof (quick_widgets
[0]) - 1; i
++)
350 quick_widgets
[i
].x_divisions
= dlg_width
;
352 quick_widgets
[0].relative_x
= dlg_width
* 2/3 - cancel_len
/2;
353 quick_widgets
[1].relative_x
= dlg_width
/3 - ok_len
/2;
355 for (i
= 2; i
< 5; i
++)
356 quick_widgets
[i
].relative_x
= dlg_width
/2 + 2;
358 if (quick_dialog (&quick_dlg
) != B_CANCEL
)
359 result
= panel_get_field_by_title_hotkey(sort_orders_names
[sort_idx
]);
362 result
= sort_format
;
364 g_strfreev((gchar
**)sort_orders_names
);
378 const char *title
= _(" Confirmation ");
380 QuickWidget conf_widgets
[] =
382 /* 0 */ QUICK_BUTTON (29, dlg_width
, 9, dlg_height
, N_("&Cancel"), B_CANCEL
, NULL
),
383 /* 1 */ QUICK_BUTTON (12, dlg_width
, 9, dlg_height
, N_("&OK"), B_ENTER
, NULL
),
384 /* 2 */ QUICK_CHECKBOX (3, dlg_width
, 7, dlg_height
, N_(" confirm di&Rectory hotlist delete "), &confirm_directory_hotlist_delete
),
385 /* 3 */ QUICK_CHECKBOX (3, dlg_width
, 6, dlg_height
, N_(" confirm &Exit "), &confirm_exit
),
386 /* 4 */ QUICK_CHECKBOX (3, dlg_width
, 5, dlg_height
, N_(" confirm e&Xecute "), &confirm_execute
),
387 /* 5 */ QUICK_CHECKBOX (3, dlg_width
, 4, dlg_height
, N_(" confirm o&Verwrite "), &confirm_overwrite
),
388 /* 6 */ QUICK_CHECKBOX (3, dlg_width
, 3, dlg_height
, N_(" confirm &Delete "), &confirm_delete
),
394 int cancel_len
, ok_len
, blen
;
399 for (i
= 0; i
< 2; i
++)
400 conf_widgets
[i
].u
.button
.text
= _(conf_widgets
[i
].u
.button
.text
);
402 for (i
= 2; i
< w_num
; i
++)
403 conf_widgets
[i
].u
.checkbox
.text
= _(conf_widgets
[i
].u
.checkbox
.text
);
404 #endif /* ENABLE_NLS */
406 /* maximumr length of checkboxes */
407 for (i
= 2; i
< w_num
; i
++)
408 maxlen
= max (maxlen
, str_term_width1 (conf_widgets
[i
].u
.checkbox
.text
) + 3);
410 /* length of buttons */
411 cancel_len
= str_term_width1 (conf_widgets
[0].u
.button
.text
) + 2;
412 ok_len
= str_term_width1 (conf_widgets
[0].u
.button
.text
) + 4; /* default button */
414 blen
= cancel_len
+ ok_len
+ 2;
416 dlg_width
= max (maxlen
, blen
) + 6;
417 dlg_width
= max (dlg_width
, str_term_width1 (title
) + 4);
419 /* correct widget parameters */
420 for (i
= 0; i
< w_num
; i
++)
421 conf_widgets
[i
].x_divisions
= dlg_width
;
423 conf_widgets
[0].relative_x
= dlg_width
* 2/3 - cancel_len
/2;
424 conf_widgets
[1].relative_x
= dlg_width
/3 - ok_len
/2;
427 QuickDialog confirmation
=
429 dlg_width
, dlg_height
, -1, -1, title
,
430 "[Confirmation]", conf_widgets
, 1
433 (void) quick_dialog (&confirmation
);
440 display_bits_box (void) /* AB:FIXME: test dialog */
443 const int DISPY
= 13;
444 const int DISPX
= 46;
449 const char *display_bits_str
[] =
452 N_("Full 8 bits output"),
457 QuickWidget display_widgets
[] =
459 /* 0 */ QUICK_BUTTON (15, DISPX
, DISPY
- 3, DISPY
, N_("&Cancel"), B_CANCEL
, NULL
),
460 /* 1 */ QUICK_BUTTON (29, DISPX
, DISPY
- 3, DISPY
, N_("&OK"), B_ENTER
, NULL
),
461 /* 2 */ QUICK_CHECKBOX (3, DISPX
, 8, DISPY
, N_("F&ull 8 bits input"), &new_meta
),
462 /* 3 */ QUICK_RADIO (3, DISPX
, 3, DISPY
, 4, display_bits_str
, ¤t_mode
),
466 QuickDialog display_bits
=
468 DISPX
, DISPY
, -1, -1, _(" Display bits "),
469 "[Display bits]", display_widgets
, TRUE
474 int ok_len
, cancel_len
;
477 static gboolean i18n_flag
= FALSE
;
480 for (i
= 0; i
< 3; i
++) {
481 display_bits_str
[i
] = _(display_bits_str
[i
]);
484 display_widgets
[0].u
.button
.text
= _(display_widgets
[0].u
.button
.text
);
485 display_widgets
[1].u
.button
.text
= _(display_widgets
[1].u
.button
.text
);
486 display_widgets
[2].u
.checkbox
.text
= _(display_widgets
[2].u
.checkbox
.text
);
490 #endif /* ENABLE_NLS */
493 for (i
= 0; i
< 3; i
++)
494 maxlen
= max (maxlen
, str_term_width1 (display_bits_str
[i
]));
497 cancel_len
= str_term_width1 (display_widgets
[0].u
.button
.text
) + 2;
498 ok_len
= str_term_width1 (display_widgets
[1].u
.button
.text
) + 4; /* default button */
500 l1
= max (cancel_len
, ok_len
);
502 display_bits
.xlen
= max (maxlen
, l1
) + 20;
504 for (i
= 0; i
< 4; i
++)
505 display_widgets
[i
].x_divisions
= display_bits
.xlen
;
507 display_widgets
[0].relative_x
= display_bits
.xlen
* 2/3 - cancel_len
/2;
508 display_widgets
[1].relative_x
= display_bits
.xlen
/3 - ok_len
/2;
512 else if (eight_bit_clean
)
517 new_meta
= !use_8th_bit_as_meta
;
519 if (quick_dialog (&display_bits
) != B_CANCEL
) {
520 eight_bit_clean
= current_mode
< 3;
521 full_eight_bits
= current_mode
< 2;
523 meta (stdscr
, eight_bit_clean
);
525 SLsmg_Display_Eight_Bit
= full_eight_bits
? 128 : 160;
527 use_8th_bit_as_meta
= !new_meta
;
531 #else /* HAVE_CHARSET */
533 static int new_display_codepage
;
535 static WLabel
*cplabel
;
536 static WCheck
*inpcheck
;
539 sel_charset_button (int action
)
545 new_dcp
= select_charset (-1, -1, new_display_codepage
, TRUE
);
547 if (new_dcp
!= SELECT_CHARSET_CANCEL
) {
551 new_display_codepage
= new_dcp
;
552 cpname
= (new_display_codepage
== SELECT_CHARSET_OTHER_8BIT
) ?
553 _("Other 8 bit") : codepages
[new_display_codepage
].name
;
555 utf8_display
= str_isutf8 (cpname
);
556 /* avoid strange bug with label repainting */
557 g_snprintf (buf
, sizeof (buf
), "%-27s", cpname
);
558 label_set_text (cplabel
, buf
);
565 init_disp_bits_box (void)
568 const int DISPY
= 11;
569 const int DISPX
= 46;
577 create_dlg (0, 0, DISPY
, DISPX
, dialog_colors
, NULL
,
578 "[Display bits]", _(" Display bits "), DLG_CENTER
| DLG_REVERSE
);
580 add_widget (dbits_dlg
,
581 label_new (3, 4, _("Input / display codepage:")));
583 cpname
= (new_display_codepage
< 0)
585 : codepages
[new_display_codepage
].name
;
586 cplabel
= label_new (4, 4, cpname
);
587 add_widget (dbits_dlg
, cplabel
);
589 add_widget (dbits_dlg
,
590 button_new (DISPY
- 3, DISPX
/ 2 + 3, B_CANCEL
,
591 NORMAL_BUTTON
, _("&Cancel"), 0));
592 add_widget (dbits_dlg
,
593 button_new (DISPY
- 3, 7, B_ENTER
, NORMAL_BUTTON
, _("&OK"),
597 check_new (6, 4, !use_8th_bit_as_meta
, _("F&ull 8 bits input"));
598 add_widget (dbits_dlg
, inpcheck
);
600 cpname
= _("&Select");
601 add_widget (dbits_dlg
,
602 button_new (4, DISPX
- 7 - str_term_width1 (cpname
), B_USER
,
603 NORMAL_BUTTON
, cpname
, sel_charset_button
));
609 display_bits_box (void)
612 new_display_codepage
= display_codepage
;
614 application_keypad_mode ();
615 dbits_dlg
= init_disp_bits_box ();
619 if (dbits_dlg
->ret_value
== B_ENTER
) {
621 display_codepage
= new_display_codepage
;
623 init_translation_table (source_codepage
, display_codepage
);
625 message (D_ERROR
, MSG_ERROR
, "%s", errmsg
);
627 tty_display_8bit (display_codepage
!= 0 && display_codepage
!= 1);
629 tty_display_8bit (display_codepage
!= 0);
631 use_8th_bit_as_meta
= !(inpcheck
->state
& C_BOOL
);
633 destroy_dlg (dbits_dlg
);
637 #endif /* HAVE_CHARSET */
640 tree_callback (Dlg_head
*h
, Widget
*sender
,
641 dlg_msg_t msg
, int parm
, void *data
)
645 /* The enter key will be processed by the tree widget */
647 h
->ret_value
= B_ENTER
;
653 /* command from buttonbar */
654 return send_message ((Widget
*) find_tree (h
), WIDGET_COMMAND
, parm
);
657 return default_dlg_callback (h
, sender
, msg
, parm
, data
);
661 /* Show tree in a box, not on a panel */
663 tree_box (const char *current_dir
)
672 /* Create the components */
673 dlg
= create_dlg (0, 0, LINES
- 9, COLS
- 20, dialog_colors
,
674 tree_callback
, "[Directory Tree]",
675 NULL
, DLG_CENTER
| DLG_REVERSE
);
677 mytree
= tree_new (0, 2, 2, dlg
->lines
- 6, dlg
->cols
- 5);
678 add_widget (dlg
, mytree
);
679 bar
= buttonbar_new (TRUE
);
680 add_widget (dlg
, bar
);
681 /* restore ButtonBar coordinates after add_widget() */
682 ((Widget
*) bar
)->x
= 0;
683 ((Widget
*) bar
)->y
= LINES
- 1;
685 if (run_dlg (dlg
) == B_ENTER
)
686 val
= g_strdup (tree_selected_name (mytree
));
694 static char *ret_timeout
;
697 static char *ret_passwd
;
698 static char *ret_directory_timeout
;
699 static char *ret_ftp_proxy
;
713 char buffer2
[BUF_TINY
];
715 char buffer3
[BUF_TINY
];
718 QuickWidget confvfs_widgets
[] =
720 /* 0 */ QUICK_BUTTON (30, VFSX
, VFSY
- 3, VFSY
, N_("&Cancel"), B_CANCEL
, NULL
),
721 /* 1 */ QUICK_BUTTON (12, VFSX
, VFSY
- 3, VFSY
, N_("&OK"), B_ENTER
, NULL
),
723 /* 2 */ QUICK_CHECKBOX (4, VFSX
, 12, VFSY
, N_("Use passive mode over pro&xy"), &ftpfs_use_passive_connections_over_proxy
),
724 /* 3 */ QUICK_CHECKBOX (4, VFSX
, 11, VFSY
, N_("Use &passive mode"), &ftpfs_use_passive_connections
),
725 /* 4 */ QUICK_CHECKBOX (4, VFSX
, 10, VFSY
, N_("&Use ~/.netrc"), &use_netrc
),
726 /* 5 */ QUICK_INPUT (4, VFSX
, 9, VFSY
, ftpfs_proxy_host
, 48, 0, "input-ftp-proxy", &ret_ftp_proxy
),
727 /* 6 */ QUICK_CHECKBOX (4, VFSX
, 8, VFSY
, N_("&Always use ftp proxy"), &ftpfs_always_use_proxy
),
728 /* 7 */ QUICK_LABEL (49, VFSX
, 7, VFSY
, N_("sec")),
729 /* 8 */ QUICK_INPUT (38, VFSX
, 7, VFSY
, buffer3
, 10, 0, "input-timeout", &ret_directory_timeout
),
730 /* 9 */ QUICK_LABEL (4, VFSX
, 7, VFSY
, N_("ftpfs directory cache timeout:")),
731 /* 10 */ QUICK_INPUT (4, VFSX
, 6, VFSY
, ftpfs_anonymous_passwd
, 48, 0, "input-passwd", &ret_passwd
),
732 /* 11 */ QUICK_LABEL (4, VFSX
, 5, VFSY
, N_("ftp anonymous password:")),
734 /* 12 */ QUICK_LABEL (49, VFSX
, 3, VFSY
, N_("sec")),
735 /* 13 */ QUICK_INPUT (38, VFSX
, 3, VFSY
, buffer2
, 10, 0, "input-timo-vfs", &ret_timeout
),
736 /* 14 */ QUICK_LABEL (4, VFSX
, 3, VFSY
, N_("Timeout for freeing VFSs:")),
740 QuickDialog confvfs_dlg
=
742 VFSX
, VFSY
, -1, -1, N_(" Virtual File System Setting "),
743 "[Virtual FS]", confvfs_widgets
, FALSE
747 g_snprintf (buffer3
, sizeof (buffer3
), "%i", ftpfs_directory_timeout
);
749 g_snprintf (buffer2
, sizeof (buffer2
), "%i", vfs_timeout
);
751 if (quick_dialog (&confvfs_dlg
) != B_CANCEL
) {
752 vfs_timeout
= atoi (ret_timeout
);
753 g_free (ret_timeout
);
755 if (vfs_timeout
< 0 || vfs_timeout
> 10000)
758 g_free (ftpfs_anonymous_passwd
);
759 ftpfs_anonymous_passwd
= ret_passwd
;
760 g_free (ftpfs_proxy_host
);
761 ftpfs_proxy_host
= ret_ftp_proxy
;
762 ftpfs_directory_timeout
= atoi(ret_directory_timeout
);
763 g_free (ret_directory_timeout
);
776 const char *label
= N_("cd");
786 len
= str_term_width1 (label
);
791 QuickWidget quick_widgets
[] =
793 /* 0 */ QUICK_INPUT (4 + len
, xlen
, 2, ylen
, "", xlen
- 7 - len
, 2, "input" , &my_str
),
794 /* 1 */ QUICK_LABEL (3, xlen
, 2, ylen
, label
),
798 QuickDialog Quick_input
=
800 xlen
, ylen
, 2, LINES
- 2 - ylen
, _("Quick cd"),
801 "[Quick cd]", quick_widgets
, TRUE
804 return (quick_dialog (&Quick_input
) != B_CANCEL
) ? my_str
: NULL
;
809 symlink_dialog (const char *existing
, const char *new, char **ret_existing
,
812 QuickWidget quick_widgets
[] =
814 /* 0 */ QUICK_BUTTON (50, 80, 6, 8, N_("&Cancel"), B_CANCEL
, NULL
),
815 /* 1 */ QUICK_BUTTON (16, 80, 6, 8, N_("&OK"), B_ENTER
, NULL
),
816 /* 2 */ QUICK_INPUT (4, 80, 5, 8, new, 58, 0, "input-1", ret_new
),
817 /* 3 */ QUICK_LABEL (4, 80, 4, 8, N_("Symbolic link filename:")),
818 /* 4 */ QUICK_INPUT (4, 80, 3, 8, existing
, 58, 0, "input-2", ret_existing
),
819 /* 5 */ QUICK_LABEL (4, 80, 2, 8, N_("Existing filename (filename symlink will point to):")),
823 QuickDialog Quick_input
=
825 64, 12, -1, -1, N_("Symbolic link"),
826 "[File Menu]", quick_widgets
, FALSE
829 if (quick_dialog (&Quick_input
) == B_CANCEL
) {
831 *ret_existing
= NULL
;
835 #ifdef WITH_BACKGROUND
836 #define B_STOP (B_USER+1)
837 #define B_RESUME (B_USER+2)
838 #define B_KILL (B_USER+3)
840 static int JOBS_X
= 60;
842 static WListbox
*bg_list
;
843 static Dlg_head
*jobs_dlg
;
846 jobs_fill_listbox (void)
848 static const char *state_str
[2];
849 TaskList
*tl
= task_list
;
852 state_str
[0] = _("Running ");
853 state_str
[1] = _("Stopped");
859 s
= g_strconcat (state_str
[tl
->state
], " ", tl
->info
, (char *) NULL
);
860 listbox_add_item (bg_list
, LISTBOX_APPEND_AT_END
, 0, s
, (void *) tl
);
875 /* Get this instance information */
876 tl
= (TaskList
*) bg_list
->current
->data
;
879 if (action
== B_STOP
){
881 tl
->state
= Task_Stopped
;
882 } else if (action
== B_RESUME
){
884 tl
->state
= Task_Running
;
887 if (action
== B_KILL
){
892 unregister_task_running (tl
->pid
, tl
->fd
);
895 listbox_remove_list (bg_list
);
896 jobs_fill_listbox ();
898 /* This can be optimized to just redraw this widget :-) */
899 dlg_redraw (jobs_dlg
);
909 int (*callback
)(int);
913 {N_("&Stop"), 3, B_STOP
, task_cb
},
914 {N_("&Resume"), 12, B_RESUME
, task_cb
},
915 {N_("&Kill"), 23, B_KILL
, task_cb
},
916 {N_("&OK"), 35, B_CANCEL
, NULL
}
923 int n_buttons
= sizeof (job_buttons
) / sizeof (job_buttons
[0]);
926 static int i18n_flag
= 0;
929 int startx
= job_buttons
[0].xpos
;
932 for (i
= 0; i
< n_buttons
; i
++)
934 job_buttons
[i
].name
= _(job_buttons
[i
].name
);
936 len
= str_term_width1 (job_buttons
[i
].name
) + 4;
937 JOBS_X
= max (JOBS_X
, startx
+ len
+ 3);
939 job_buttons
[i
].xpos
= startx
;
943 /* Last button - Ok a.k.a. Cancel :) */
944 job_buttons
[n_buttons
- 1].xpos
=
945 JOBS_X
- str_term_width1 (job_buttons
[n_buttons
- 1].name
) - 7;
949 #endif /* ENABLE_NLS */
951 jobs_dlg
= create_dlg (0, 0, JOBS_Y
, JOBS_X
, dialog_colors
, NULL
,
952 "[Background jobs]", _("Background Jobs"),
953 DLG_CENTER
| DLG_REVERSE
);
955 bg_list
= listbox_new (2, 3, JOBS_Y
- 9, JOBS_X
- 7, NULL
);
956 add_widget (jobs_dlg
, bg_list
);
961 add_widget (jobs_dlg
, button_new (JOBS_Y
-4,
962 job_buttons
[i
].xpos
, job_buttons
[i
].value
,
963 NORMAL_BUTTON
, job_buttons
[i
].name
,
964 job_buttons
[i
].callback
));
967 /* Insert all of task information in the list */
968 jobs_fill_listbox ();
971 destroy_dlg (jobs_dlg
);
973 #endif /* WITH_BACKGROUND */
976 struct smb_authinfo
*
977 vfs_smb_get_authinfo (const char *host
, const char *share
, const char *domain
,
980 static int dialog_x
= 44;
981 enum { b0
= 3, dialog_y
= 12};
982 struct smb_authinfo
*return_value
;
983 static const char* lc_labs
[] = {N_("Domain:"), N_("Username:"), N_("Password:")};
984 static const char* buts
[] = {N_("&OK"), N_("&Cancel")};
985 static int ilen
= 30, istart
= 14;
994 static int i18n_flag
= 0;
998 register int i
= sizeof(lc_labs
)/sizeof(lc_labs
[0]);
1003 l1
= str_term_width1 (lc_labs
[i
] = _(lc_labs
[i
]));
1007 i
= maxlen
+ ilen
+ 7;
1011 for (i
= sizeof(buts
)/sizeof(buts
[0]), l1
= 0; i
--; )
1013 l1
+= str_term_width1 (buts
[i
] = _(buts
[i
]));
1019 ilen
= dialog_x
- 7 - maxlen
; /* for the case of very long buttons :) */
1020 istart
= dialog_x
- 3 - ilen
;
1022 b2
= dialog_x
- (str_term_width1 (buts
[1]) + 6);
1027 #endif /* ENABLE_NLS */
1034 title
= g_strdup_printf (_("Password for \\\\%s\\%s"), host
, share
);
1036 auth_dlg
= create_dlg (0, 0, dialog_y
, dialog_x
, dialog_colors
, NULL
,
1037 "[Smb Authinfo]", title
, DLG_CENTER
| DLG_REVERSE
);
1041 in_user
= input_new (5, istart
, INPUT_COLOR
, ilen
, user
, "auth_name", INPUT_COMPLETE_DEFAULT
);
1042 add_widget (auth_dlg
, in_user
);
1044 in_domain
= input_new (3, istart
, INPUT_COLOR
, ilen
, domain
, "auth_domain", INPUT_COMPLETE_DEFAULT
);
1045 add_widget (auth_dlg
, in_domain
);
1046 add_widget (auth_dlg
, button_new (9, b2
, B_CANCEL
, NORMAL_BUTTON
,
1048 add_widget (auth_dlg
, button_new (9, b0
, B_ENTER
, DEFPUSH_BUTTON
,
1051 in_password
= input_new (7, istart
, INPUT_COLOR
, ilen
, "", "auth_password", INPUT_COMPLETE_DEFAULT
);
1052 in_password
->completion_flags
= 0;
1053 in_password
->is_password
= 1;
1054 add_widget (auth_dlg
, in_password
);
1056 add_widget (auth_dlg
, label_new (7, 3, lc_labs
[2]));
1057 add_widget (auth_dlg
, label_new (5, 3, lc_labs
[1]));
1058 add_widget (auth_dlg
, label_new (3, 3, lc_labs
[0]));
1062 switch (auth_dlg
->ret_value
) {
1067 return_value
= g_new (struct smb_authinfo
, 1);
1069 return_value
->host
= g_strdup (host
);
1070 return_value
->share
= g_strdup (share
);
1071 return_value
->domain
= g_strdup (in_domain
->buffer
);
1072 return_value
->user
= g_strdup (in_user
->buffer
);
1073 return_value
->password
= g_strdup (in_password
->buffer
);
1077 destroy_dlg (auth_dlg
);
1079 return return_value
;
1081 #endif /* WITH_SMBFS */