mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 04:46:55 +03:00
Ticket #1538: redesign of overwrite query dialog.
Modified main text in overwrite query dialog. Trancated the target file name less. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
cb78d61a27
commit
ae313482e6
198
src/filegui.c
198
src/filegui.c
@ -556,8 +556,6 @@ file_progress_show_deleting (FileOpContext *ctx, const char *s)
|
||||
return check_progress_buttons (ctx);
|
||||
}
|
||||
|
||||
#define X_TRUNC 52
|
||||
|
||||
/*
|
||||
* FIXME: probably it is better to replace this with quick dialog machinery,
|
||||
* but actually I'm not familiar with it and have not much time :(
|
||||
@ -568,28 +566,31 @@ static struct {
|
||||
int ypos, xpos;
|
||||
int value; /* 0 for labels */
|
||||
} rd_widgets[] = {
|
||||
{
|
||||
N_("Target file \"%s\" already exists!"), 3, 4, 0}, {
|
||||
N_("&Abort"), BY + 3, 25, REPLACE_ABORT}, {
|
||||
N_("If &size differs"), BY + 1, 28, REPLACE_SIZE}, {
|
||||
N_("Non&e"), BY, 47, REPLACE_NEVER}, {
|
||||
N_("&Update"), BY, 36, REPLACE_UPDATE}, {
|
||||
N_("A&ll"), BY, 28, REPLACE_ALWAYS}, {
|
||||
N_("Overwrite all targets?"), BY, 4, 0}, {
|
||||
N_("&Reget"), BY - 1, 28, REPLACE_REGET}, {
|
||||
N_("A&ppend"), BY - 2, 45, REPLACE_APPEND}, {
|
||||
N_("&No"), BY - 2, 37, REPLACE_NO}, {
|
||||
N_("&Yes"), BY - 2, 28, REPLACE_YES}, {
|
||||
N_("Overwrite this target?"), BY - 2, 4, 0}, {
|
||||
/* 0 */ { N_("Target file already exists:\n%s"), 3, 4, 0 },
|
||||
#if (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) || (defined _LARGE_FILES && _LARGE_FILES)
|
||||
N_("Target date: %s, size %llu"), 6, 4, 0}, {
|
||||
N_("Source date: %s, size %llu"), 5, 4, 0}
|
||||
/* 1 */ { N_("Source date: %s, size %llu"), 6, 4, 0 },
|
||||
/* 2 */ { N_("Target date: %s, size %llu"), 7, 4, 0 },
|
||||
#else
|
||||
N_("Target date: %s, size %u"), 6, 4, 0}, {
|
||||
N_("Source date: %s, size %u"), 5, 4, 0}
|
||||
/* 1 */ { N_("Source date: %s, size %u"), 6, 4, 0 },
|
||||
/* 2 */ { N_("Target date: %s, size %u"), 7, 4, 0 },
|
||||
#endif
|
||||
/* 3 */ { N_("&Abort"), 14, 25, REPLACE_ABORT },
|
||||
/* 4 */ { N_("If &size differs"), 12, 28, REPLACE_SIZE },
|
||||
/* 5 */ { N_("Non&e"), 11, 47, REPLACE_NEVER },
|
||||
/* 6 */ { N_("&Update"), 11, 36, REPLACE_UPDATE },
|
||||
/* 7 */ { N_("A&ll"), 11, 28, REPLACE_ALWAYS },
|
||||
/* 8 */ { N_("Overwrite all targets?"), 11, 4, 0 },
|
||||
/* 9 */ { N_("&Reget"), 10, 28, REPLACE_REGET },
|
||||
/* 10 */ { N_("A&ppend"), 9, 45, REPLACE_APPEND },
|
||||
/* 11 */ { N_("&No"), 9, 37, REPLACE_NO },
|
||||
/* 12 */ { N_("&Yes"), 9, 28, REPLACE_YES },
|
||||
/* 13 */ { N_("Overwrite this target?"), 9, 4, 0 }
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
init_replace (FileOpContext *ctx, enum OperationMode mode)
|
||||
{
|
||||
#define ADD_RD_BUTTON(i)\
|
||||
add_widget (ui->replace_dlg,\
|
||||
button_new (rd_widgets [i].ypos, rd_widgets [i].xpos, rd_widgets [i].value,\
|
||||
@ -600,105 +601,104 @@ static struct {
|
||||
add_widget (ui->replace_dlg,\
|
||||
label_new (rd_widgets [i].ypos, rd_widgets [i].xpos, buffer))
|
||||
|
||||
static void
|
||||
init_replace (FileOpContext *ctx, enum OperationMode mode)
|
||||
{
|
||||
FileOpContextUI *ui;
|
||||
/* dialog sizes */
|
||||
const int rd_ylen = 17;
|
||||
int rd_xlen = 60;
|
||||
|
||||
FileOpContextUI *ui = ctx->ui;
|
||||
|
||||
char buffer[BUF_SMALL];
|
||||
const char *title;
|
||||
static int rd_xlen = 60, rd_trunc = X_TRUNC;
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
static int i18n_flag;
|
||||
if (!i18n_flag) {
|
||||
int l1, l2, l, row;
|
||||
register int i = sizeof (rd_widgets) / sizeof (rd_widgets[0]);
|
||||
while (i--)
|
||||
rd_widgets[i].text = _(rd_widgets[i].text);
|
||||
|
||||
/*
|
||||
* longest of "Overwrite..." labels
|
||||
* (assume "Target date..." are short enough)
|
||||
*/
|
||||
l1 = max (str_term_width1 (rd_widgets[6].text),
|
||||
str_term_width1 (rd_widgets[11].text));
|
||||
|
||||
/* longest of button rows */
|
||||
i = sizeof (rd_widgets) / sizeof (rd_widgets[0]);
|
||||
for (row = l = l2 = 0; i--;) {
|
||||
if (rd_widgets[i].value != 0) {
|
||||
if (row != rd_widgets[i].ypos) {
|
||||
row = rd_widgets[i].ypos;
|
||||
l2 = max (l2, l);
|
||||
l = 0;
|
||||
}
|
||||
l+= str_term_width1 (rd_widgets[i].text) + 4;
|
||||
}
|
||||
}
|
||||
l2 = max (l2, l); /* last row */
|
||||
rd_xlen = max (rd_xlen, l1 + l2 + 8);
|
||||
rd_trunc = rd_xlen - 6;
|
||||
|
||||
/* Now place buttons */
|
||||
l1 += 5; /* start of first button in the row */
|
||||
i = sizeof (rd_widgets) / sizeof (rd_widgets[0]);
|
||||
|
||||
for (l = l1, row = 0; --i > 1;) {
|
||||
if (rd_widgets[i].value != 0) {
|
||||
if (row != rd_widgets[i].ypos) {
|
||||
row = rd_widgets[i].ypos;
|
||||
l = l1;
|
||||
}
|
||||
rd_widgets[i].xpos = l;
|
||||
l+= str_term_width1 (rd_widgets[i].text) + 4;
|
||||
}
|
||||
}
|
||||
/* Abort button is centered */
|
||||
rd_widgets[1].xpos =
|
||||
(rd_xlen - str_term_width1 (rd_widgets[1].text) - 3) / 2;
|
||||
}
|
||||
#endif /* ENABLE_NLS */
|
||||
|
||||
ui = ctx->ui;
|
||||
|
||||
if (mode == Foreground)
|
||||
title = _(" File exists ");
|
||||
else
|
||||
title = _(" Background process: File exists ");
|
||||
|
||||
{
|
||||
const int num = sizeof (rd_widgets) / sizeof (rd_widgets[0]);
|
||||
int i, l1, l2, l, row;
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
for (i = 0; i < num; i++)
|
||||
rd_widgets[i].text = _(rd_widgets[i].text);
|
||||
#endif /* ENABLE_NLS */
|
||||
|
||||
/*
|
||||
* longest of "Overwrite..." labels
|
||||
* (assume "Target date..." are short enough)
|
||||
*/
|
||||
l1 = max (str_term_width1 (rd_widgets[8].text),
|
||||
str_term_width1 (rd_widgets[13].text));
|
||||
|
||||
/* longest of button rows */
|
||||
i = num;
|
||||
for (row = l = l2 = 0; i--;)
|
||||
if (rd_widgets[i].value != 0) {
|
||||
if (row != rd_widgets[i].ypos) {
|
||||
row = rd_widgets[i].ypos;
|
||||
l2 = max (l2, l);
|
||||
l = 0;
|
||||
}
|
||||
l += str_term_width1 (rd_widgets[i].text) + 4;
|
||||
}
|
||||
|
||||
l2 = max (l2, l); /* last row */
|
||||
rd_xlen = max (rd_xlen, l1 + l2 + 8);
|
||||
rd_xlen = max (rd_xlen, str_term_width1 (title) + 2);
|
||||
|
||||
/* Now place buttons */
|
||||
l1 += 5; /* start of first button in the row */
|
||||
i = num;
|
||||
for (l = l1, row = 0; --i > 1;)
|
||||
if (rd_widgets[i].value != 0) {
|
||||
if (row != rd_widgets[i].ypos) {
|
||||
row = rd_widgets[i].ypos;
|
||||
l = l1;
|
||||
}
|
||||
rd_widgets[i].xpos = l;
|
||||
l += str_term_width1 (rd_widgets[i].text) + 4;
|
||||
}
|
||||
|
||||
/* Abort button is centered */
|
||||
rd_widgets[3].xpos =
|
||||
(rd_xlen - str_term_width1 (rd_widgets[3].text) - 3) / 2;
|
||||
}
|
||||
|
||||
/* FIXME - missing help node */
|
||||
ui->replace_dlg =
|
||||
create_dlg (0, 0, 16, rd_xlen, alarm_colors, NULL, "[Replace]",
|
||||
create_dlg (0, 0, rd_ylen, rd_xlen, alarm_colors, NULL, "[Replace]",
|
||||
title, DLG_CENTER | DLG_REVERSE);
|
||||
|
||||
|
||||
ADD_RD_LABEL (ui, 0,
|
||||
str_trunc (ui->replace_filename,
|
||||
rd_trunc - str_term_width1 (rd_widgets[0].text)), 0);
|
||||
ADD_RD_BUTTON (1);
|
||||
str_trunc (strip_home_and_password (ui->replace_filename),
|
||||
rd_xlen - 8), 0);
|
||||
ADD_RD_LABEL (ui, 1, file_date (ui->s_stat->st_mtime),
|
||||
(off_t) ui->s_stat->st_size);
|
||||
ADD_RD_LABEL (ui, 2, file_date (ui->d_stat->st_mtime),
|
||||
(off_t) ui->d_stat->st_size);
|
||||
|
||||
ADD_RD_BUTTON (2);
|
||||
ADD_RD_BUTTON (3);
|
||||
ADD_RD_BUTTON (4);
|
||||
ADD_RD_BUTTON (5);
|
||||
ADD_RD_LABEL (ui, 6, 0, 0);
|
||||
ADD_RD_BUTTON (6);
|
||||
ADD_RD_BUTTON (7);
|
||||
ADD_RD_LABEL (ui, 8, 0, 0);
|
||||
|
||||
/* "this target..." widgets */
|
||||
if (!S_ISDIR (ui->d_stat->st_mode)) {
|
||||
if ((ctx->operation == OP_COPY) && (ui->d_stat->st_size != 0)
|
||||
&& (ui->s_stat->st_size > ui->d_stat->st_size))
|
||||
ADD_RD_BUTTON (7); /* reget */
|
||||
ADD_RD_BUTTON (9); /* reget */
|
||||
|
||||
ADD_RD_BUTTON (8); /* Overwrite all targets? */
|
||||
}
|
||||
ADD_RD_BUTTON (9);
|
||||
ADD_RD_BUTTON (10);
|
||||
ADD_RD_LABEL (ui, 11, 0, 0);
|
||||
}
|
||||
ADD_RD_BUTTON (11);
|
||||
ADD_RD_BUTTON (12);
|
||||
ADD_RD_LABEL (ui, 13, 0, 0);
|
||||
|
||||
ADD_RD_LABEL (ui, 12, file_date (ui->d_stat->st_mtime),
|
||||
(off_t) ui->d_stat->st_size);
|
||||
ADD_RD_LABEL (ui, 13, file_date (ui->s_stat->st_mtime),
|
||||
(off_t) ui->s_stat->st_size);
|
||||
#undef ADD_RD_LABEL
|
||||
#undef ADD_RD_BUTTON
|
||||
}
|
||||
|
||||
void
|
||||
@ -707,12 +707,9 @@ file_progress_set_stalled_label (FileOpContext *ctx, const char *stalled_msg)
|
||||
FileOpContextUI *ui;
|
||||
|
||||
g_return_if_fail (ctx != NULL);
|
||||
|
||||
if (ctx->ui == NULL)
|
||||
return;
|
||||
g_return_if_fail (ctx->ui != NULL);
|
||||
|
||||
ui = ctx->ui;
|
||||
|
||||
label_set_text (ui->stalled_label, stalled_msg);
|
||||
}
|
||||
|
||||
@ -733,12 +730,13 @@ file_progress_real_query_replace (FileOpContext *ctx,
|
||||
ui->replace_filename = destname;
|
||||
ui->s_stat = _s_stat;
|
||||
ui->d_stat = _d_stat;
|
||||
|
||||
init_replace (ctx, mode);
|
||||
run_dlg (ui->replace_dlg);
|
||||
ui->replace_result = ui->replace_dlg->ret_value;
|
||||
ui->replace_result = run_dlg (ui->replace_dlg);
|
||||
destroy_dlg (ui->replace_dlg);
|
||||
|
||||
if (ui->replace_result == B_CANCEL)
|
||||
ui->replace_result = REPLACE_ABORT;
|
||||
destroy_dlg (ui->replace_dlg);
|
||||
}
|
||||
|
||||
switch (ui->replace_result) {
|
||||
|
Loading…
Reference in New Issue
Block a user