static void menubar_finish (WMenuBar * menubar) { menubar->is_dropped = FALSE; menubar->is_active = FALSE; menubar->widget.lines = 1; widget_want_hotkey (menubar->widget, 0); dlg_select_by_id (menubar->widget.owner, menubar->previous_widget); do_refresh (); }
static void menubar_finish (WMenuBar * menubar) { Widget *w = WIDGET (menubar); menubar->is_dropped = FALSE; menubar->is_active = FALSE; w->lines = 1; widget_want_hotkey (w, 0); dlg_select_by_id (w->owner, menubar->previous_widget); do_refresh (); }
/* * 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 :( * alex */ static replace_action_t overwrite_query_dialog (file_op_context_t * ctx, enum OperationMode mode) { #define ADD_RD_BUTTON(i, ypos) \ add_widget_autopos (ui->replace_dlg, \ button_new (ypos, rd_widgets [i].xpos, rd_widgets [i].value, \ NORMAL_BUTTON, rd_widgets [i].text, NULL), \ rd_widgets [i].pos_flags, ui->replace_dlg->current->data) #define ADD_RD_LABEL(i, p1, p2, ypos) \ g_snprintf (buffer, sizeof (buffer), rd_widgets [i].text, p1, p2); \ label2 = WIDGET (label_new (ypos, rd_widgets [i].xpos, buffer)); \ add_widget_autopos (ui->replace_dlg, label2, rd_widgets [i].pos_flags, \ ui->replace_dlg->current != NULL ? ui->replace_dlg->current->data : NULL) /* dialog sizes */ const int rd_ylen = 1; int rd_xlen = 60; int y = 2; unsigned long yes_id; struct { const char *text; int ypos, xpos; widget_pos_flags_t pos_flags; int value; /* 0 for labels */ } rd_widgets[] = { /* *INDENT-OFF* */ /* 0 */ { N_("Target file already exists!"), 3, 4, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, 0 }, /* 1 */ { "%s", 4, 4, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, 0 }, /* 2 */ { N_("New : %s, size %s"), 6, 4, WPOS_KEEP_DEFAULT, 0 }, /* 3 */ { N_("Existing: %s, size %s"), 7, 4, WPOS_KEEP_DEFAULT, 0 }, /* 4 */ { N_("Overwrite this target?"), 9, 4, WPOS_KEEP_DEFAULT, 0 }, /* 5 */ { N_("&Yes"), 9, 28, WPOS_KEEP_DEFAULT, REPLACE_YES }, /* 6 */ { N_("&No"), 9, 37, WPOS_KEEP_DEFAULT, REPLACE_NO }, /* 7 */ { N_("A&ppend"), 9, 45, WPOS_KEEP_DEFAULT, REPLACE_APPEND }, /* 8 */ { N_("&Reget"), 10, 28, WPOS_KEEP_DEFAULT, REPLACE_REGET }, /* 9 */ { N_("Overwrite all targets?"), 11, 4, WPOS_KEEP_DEFAULT, 0 }, /* 10 */ { N_("A&ll"), 11, 28, WPOS_KEEP_DEFAULT, REPLACE_ALWAYS }, /* 11 */ { N_("&Update"), 11, 36, WPOS_KEEP_DEFAULT, REPLACE_UPDATE }, /* 12 */ { N_("Non&e"), 11, 47, WPOS_KEEP_DEFAULT, REPLACE_NEVER }, /* 13 */ { N_("If &size differs"), 12, 28, WPOS_KEEP_DEFAULT, REPLACE_SIZE }, /* 14 */ { N_("&Abort"), 14, 25, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, REPLACE_ABORT } /* *INDENT-ON* */ }; const size_t num = G_N_ELEMENTS (rd_widgets); int *widgets_len; file_op_context_ui_t *ui = ctx->ui; char buffer[BUF_SMALL]; char fsize_buffer[BUF_SMALL]; Widget *label1, *label2; const char *title; vfs_path_t *stripped_vpath; const char *stripped_name; char *stripped_name_orig; int result; widgets_len = g_new0 (int, num); if (mode == Foreground) title = _("File exists"); else title = _("Background process: File exists"); stripped_vpath = vfs_path_from_str (ui->replace_filename); stripped_name = stripped_name_orig = vfs_path_to_str_flags (stripped_vpath, 0, VPF_STRIP_HOME | VPF_STRIP_PASSWORD); vfs_path_free (stripped_vpath); { size_t i; int l1, l2, l, row; int stripped_name_len; for (i = 0; i < num; i++) { #ifdef ENABLE_NLS if (i != 1) /* skip filename */ rd_widgets[i].text = _(rd_widgets[i].text); #endif /* ENABLE_NLS */ widgets_len[i] = str_term_width1 (rd_widgets[i].text); } /* * longest of "Overwrite..." labels * (assume "Target date..." are short enough) */ l1 = max (widgets_len[9], widgets_len[4]); /* longest of button rows */ l = l2 = 0; row = 0; for (i = 1; i < num - 1; 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 += widgets_len[i] + 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); */ stripped_name_len = str_term_width1 (stripped_name); rd_xlen = max (rd_xlen, min (COLS, stripped_name_len + 8)); /* Now place widgets */ l1 += 5; /* start of first button in the row */ l = l1; row = 0; for (i = 2; i < num - 1; i++) 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 += widgets_len[i] + 4; } } /* FIXME - missing help node */ ui->replace_dlg = dlg_create (TRUE, 0, 0, rd_ylen, rd_xlen, alarm_colors, NULL, NULL, "[Replace]", title, DLG_CENTER); /* prompt */ ADD_RD_LABEL (0, "", "", y++); /* file name */ ADD_RD_LABEL (1, "", "", y++); label1 = label2; add_widget (ui->replace_dlg, hline_new (y++, -1, -1)); /* source date and size */ size_trunc_len (fsize_buffer, sizeof (fsize_buffer), ui->s_stat->st_size, 0, panels_options.kilobyte_si); ADD_RD_LABEL (2, file_date (ui->s_stat->st_mtime), fsize_buffer, y++); rd_xlen = max (rd_xlen, label2->cols + 8); /* destination date and size */ size_trunc_len (fsize_buffer, sizeof (fsize_buffer), ui->d_stat->st_size, 0, panels_options.kilobyte_si); ADD_RD_LABEL (3, file_date (ui->d_stat->st_mtime), fsize_buffer, y++); rd_xlen = max (rd_xlen, label2->cols + 8); add_widget (ui->replace_dlg, hline_new (y++, -1, -1)); ADD_RD_LABEL (4, 0, 0, y); /* Overwrite this target? */ yes_id = ADD_RD_BUTTON (5, y); /* Yes */ ADD_RD_BUTTON (6, y); /* No */ /* "this target..." widgets */ if (!S_ISDIR (ui->d_stat->st_mode)) { ADD_RD_BUTTON (7, y++); /* Append */ if ((ctx->operation == OP_COPY) && (ui->d_stat->st_size != 0) && (ui->s_stat->st_size > ui->d_stat->st_size)) ADD_RD_BUTTON (8, y++); /* Reget */ } add_widget (ui->replace_dlg, hline_new (y++, -1, -1)); ADD_RD_LABEL (9, 0, 0, y); /* Overwrite all targets? */ ADD_RD_BUTTON (10, y); /* All" */ ADD_RD_BUTTON (11, y); /* Update */ ADD_RD_BUTTON (12, y++); /* None */ ADD_RD_BUTTON (13, y++); /* If size differs */ add_widget (ui->replace_dlg, hline_new (y++, -1, -1)); ADD_RD_BUTTON (14, y); /* Abort */ label_set_text (LABEL (label1), str_trunc (stripped_name, rd_xlen - 8)); dlg_set_size (ui->replace_dlg, y + 3, rd_xlen); dlg_select_by_id (ui->replace_dlg, yes_id); result = dlg_run (ui->replace_dlg); dlg_destroy (ui->replace_dlg); g_free (widgets_len); g_free (stripped_name_orig); return (result == B_CANCEL) ? REPLACE_ABORT : (replace_action_t) result; #undef ADD_RD_LABEL #undef ADD_RD_BUTTON }