static void configure_panel_listing (WPanel * p, int list_type, int use_msformat, char *user, char *status) { p->user_mini_status = use_msformat; p->list_type = list_type; if (list_type == list_user || use_msformat) { g_free (p->user_format); p->user_format = user; g_free (p->user_status_format[list_type]); p->user_status_format[list_type] = status; set_panel_formats (p); } else { g_free (user); g_free (status); } set_panel_formats (p); do_refresh (); }
static void configure_panel_listing (WPanel * p, int list_type, int brief_cols, int use_msformat, char **user, char **status) { p->user_mini_status = use_msformat; p->list_type = list_type; if (list_type == list_brief) p->brief_cols = brief_cols; else if (list_type == list_user || use_msformat) { g_free (p->user_format); p->user_format = *user; *user = NULL; g_free (p->user_status_format[list_type]); p->user_status_format[list_type] = *status; *status = NULL; set_panel_formats (p); } set_panel_formats (p); do_refresh (); }
void panel_do_cols (int index) { if (get_display_type (index) == view_listing) set_panel_formats ((WPanel *) panels [index].widget); else { panel_update_cols (panels [index].widget, frame_half); } }
static void panel_do_cols (int idx) { if (get_display_type (idx) == view_listing) set_panel_formats (PANEL (panels[idx].widget)); else panel_update_cols (panels[idx].widget, frame_half); }
void gnome_custom_view_cmd (GtkWidget *widget, WPanel *panel) { if (panel->list_type == list_user) return; panel->list_type = list_user; set_panel_formats (panel); paint_panel (panel); do_refresh (); }
void gnome_full_view_cmd (GtkWidget *widget, WPanel *panel) { if (panel->list_type == list_full) return; panel->list_type = list_full; set_panel_formats (panel); paint_panel (panel); do_refresh (); }
/* Handle the tree internal listing modes switching */ static int set_basic_panel_listing_to (int panel_index, int listing_mode) { WPanel *p = (WPanel *) get_panel_widget (panel_index); switch_to_listing (panel_index); p->list_type = listing_mode; if (set_panel_formats (p)) return 0; do_refresh (); return 1; }
static void panel_do_cols (int index) { /* Only one panel at the moment */ index=0; if (get_display_type (index) == view_listing) set_panel_formats ((WPanel *) panels [index].widget); else { panel_update_cols (panels [index].widget, frame_half); /* In case of an Hex Quick View must review line length */ if (get_display_type (index) == view_quick) view_update_bytes_per_line ((WView *) panels [index].widget); } }
static gboolean set_basic_panel_listing_to (int panel_index, int listing_mode) { WPanel *p = (WPanel *) get_panel_widget (panel_index); gboolean ok; switch_to_listing (panel_index); p->list_type = listing_mode; ok = set_panel_formats (p) == 0; if (ok) do_refresh (); return ok; }
void set_display_type (int num, panel_view_mode_t type) { int x = 0, y = 0, cols = 0, lines = 0; unsigned int the_other = 0; /* Index to the other panel */ const char *file_name = NULL; /* For Quick view */ Widget *new_widget = NULL, *old_widget = NULL; panel_view_mode_t old_type = view_listing; WPanel *the_other_panel = NULL; if (num >= MAX_VIEWS) { fprintf (stderr, "Cannot allocate more that %d views\n", MAX_VIEWS); abort (); } /* Check that we will have a WPanel * at least */ if (type != view_listing) { the_other = num == 0 ? 1 : 0; if (panels[the_other].type != view_listing) return; } /* Get rid of it */ if (panels[num].widget != NULL) { Widget *w = panels[num].widget; WPanel *panel = PANEL (w); x = w->x; y = w->y; cols = w->cols; lines = w->lines; old_widget = w; old_type = panels[num].type; if (old_type == view_listing && panel->frame_size == frame_full && type != view_listing) { if (panels_layout.horizontal_split) { cols = COLS; x = 0; } else { cols = COLS - panels_layout.left_panel_size; if (num == 1) x = panels_layout.left_panel_size; } } } /* Restoring saved path from panels.ini for nonlist panel */ /* when it's first creation (for example view_info) */ if (old_widget == NULL && type != view_listing) { char *panel_dir; panel_dir = _vfs_get_cwd (); panels[num].last_saved_dir = g_strdup (panel_dir); g_free (panel_dir); } switch (type) { case view_nothing: case view_listing: new_widget = restore_into_right_dir_panel (num, old_widget); widget_set_size (new_widget, y, x, lines, cols); break; case view_info: new_widget = WIDGET (info_new (y, x, lines, cols)); break; case view_tree: new_widget = WIDGET (tree_new (y, x, lines, cols, TRUE)); break; case view_quick: new_widget = WIDGET (mcview_new (y, x, lines, cols, TRUE)); the_other_panel = PANEL (panels[the_other].widget); if (the_other_panel != NULL) file_name = the_other_panel->dir.list[the_other_panel->selected].fname; else file_name = ""; mcview_load ((struct mcview_struct *) new_widget, 0, file_name, 0, 0, 0); break; default: break; } if (type != view_listing) /* Must save dir, for restoring after change type to */ /* view_listing */ save_panel_dir (num); panels[num].type = type; panels[num].widget = new_widget; /* We use replace to keep the circular list of the dialog in the */ /* same state. Maybe we could just kill it and then replace it */ if ((midnight_dlg != NULL) && (old_widget != NULL)) { if (old_type == view_listing) { /* save and write directory history of panel * ... and other histories of midnight_dlg */ dlg_save_history (midnight_dlg); } widget_replace (old_widget, new_widget); } if (type == view_listing) { WPanel *panel = PANEL (new_widget); /* if existing panel changed type to view_listing, then load history */ if (old_widget != NULL) { ev_history_load_save_t event_data = { NULL, new_widget }; mc_event_raise (midnight_dlg->event_group, MCEVENT_HISTORY_LOAD, &event_data); } if (num == 0) left_panel = panel; else right_panel = panel; /* forced update format after set new sizes */ set_panel_formats (panel); } if (type == view_tree) the_tree = (WTree *) new_widget; /* Prevent current_panel's value from becoming invalid. * It's just a quick hack to prevent segfaults. Comment out and * try following: * - select left panel * - invoke menue left/tree * - as long as you stay in the left panel almost everything that uses * current_panel causes segfault, e.g. C-Enter, C-x c, ... */ if ((type != view_listing) && (current_panel == PANEL (old_widget))) current_panel = num == 0 ? right_panel : left_panel; g_free (old_widget); }
void swap_panels (void) { WPanel *panel1, *panel2; Widget *tmp_widget; panel1 = PANEL (panels[0].widget); panel2 = PANEL (panels[1].widget); if (panels[0].type == view_listing && panels[1].type == view_listing && !mc_config_get_bool (mc_main_config, CONFIG_PANELS_SECTION, "simple_swap", FALSE)) { WPanel panel; #define panelswap(x) panel.x = panel1->x; panel1->x = panel2->x; panel2->x = panel.x; #define panelswapstr(e) strcpy (panel.e, panel1->e); \ strcpy (panel1->e, panel2->e); \ strcpy (panel2->e, panel.e); /* Change content and related stuff */ panelswap (dir); panelswap (active); panelswap (cwd_vpath); panelswap (lwd_vpath); panelswap (marked); panelswap (dirs_marked); panelswap (total); panelswap (top_file); panelswap (selected); panelswap (is_panelized); panelswap (dir_stat); #undef panelswapstr #undef panelswap panel1->searching = FALSE; panel2->searching = FALSE; if (current_panel == panel1) current_panel = panel2; else current_panel = panel1; /* if sort options are different -> resort panels */ if (memcmp (&panel1->sort_info, &panel2->sort_info, sizeof (dir_sort_options_t)) != 0) { panel_re_sort (other_panel); panel_re_sort (current_panel); } if (widget_is_active (panels[0].widget)) dlg_select_widget (panels[1].widget); else if (widget_is_active (panels[1].widget)) dlg_select_widget (panels[0].widget); } else { WPanel *tmp_panel; int x, y, cols, lines; int tmp_type; tmp_panel = right_panel; right_panel = left_panel; left_panel = tmp_panel; if (panels[0].type == view_listing) { if (strcmp (panel1->panel_name, get_nth_panel_name (0)) == 0) { g_free (panel1->panel_name); panel1->panel_name = g_strdup (get_nth_panel_name (1)); } } if (panels[1].type == view_listing) { if (strcmp (panel2->panel_name, get_nth_panel_name (1)) == 0) { g_free (panel2->panel_name); panel2->panel_name = g_strdup (get_nth_panel_name (0)); } } x = panels[0].widget->x; y = panels[0].widget->y; cols = panels[0].widget->cols; lines = panels[0].widget->lines; panels[0].widget->x = panels[1].widget->x; panels[0].widget->y = panels[1].widget->y; panels[0].widget->cols = panels[1].widget->cols; panels[0].widget->lines = panels[1].widget->lines; panels[1].widget->x = x; panels[1].widget->y = y; panels[1].widget->cols = cols; panels[1].widget->lines = lines; tmp_widget = panels[0].widget; panels[0].widget = panels[1].widget; panels[1].widget = tmp_widget; tmp_type = panels[0].type; panels[0].type = panels[1].type; panels[1].type = tmp_type; /* force update formats because of possible changed sizes */ if (panels[0].type == view_listing) set_panel_formats (PANEL (panels[0].widget)); if (panels[1].type == view_listing) set_panel_formats (PANEL (panels[1].widget)); } }