void ED_fileselect_init_layout(struct SpaceFile *sfile, ARegion *ar) { FileSelectParams *params = ED_fileselect_get_params(sfile); FileLayout *layout = NULL; View2D *v2d = &ar->v2d; int maxlen = 0; int numfiles; int textheight; if (sfile->layout == NULL) { sfile->layout = MEM_callocN(sizeof(struct FileLayout), "file_layout"); sfile->layout->dirty = true; } else if (sfile->layout->dirty == false) { return; } numfiles = filelist_numfiles(sfile->files); textheight = (int)file_font_pointsize(); layout = sfile->layout; layout->textheight = textheight; if (params->display == FILE_IMGDISPLAY) { layout->prv_w = ((float)params->thumbnail_size / 20.0f) * UI_UNIT_X; layout->prv_h = ((float)params->thumbnail_size / 20.0f) * UI_UNIT_Y; layout->tile_border_x = 0.3f * UI_UNIT_X; layout->tile_border_y = 0.3f * UI_UNIT_X; layout->prv_border_x = 0.3f * UI_UNIT_X; layout->prv_border_y = 0.3f * UI_UNIT_Y; layout->tile_w = layout->prv_w + 2 * layout->prv_border_x; layout->tile_h = layout->prv_h + 2 * layout->prv_border_y + textheight; layout->width = (int)(BLI_rctf_size_x(&v2d->cur) - 2 * layout->tile_border_x); layout->columns = layout->width / (layout->tile_w + 2 * layout->tile_border_x); if (layout->columns > 0) layout->rows = numfiles / layout->columns + 1; // XXX dirty, modulo is zero else { layout->columns = 1; layout->rows = numfiles + 1; // XXX dirty, modulo is zero } layout->height = sfile->layout->rows * (layout->tile_h + 2 * layout->tile_border_y) + layout->tile_border_y * 2; layout->flag = FILE_LAYOUT_VER; } else { int column_space = 0.6f * UI_UNIT_X; int column_icon_space = 0.2f * UI_UNIT_X; layout->prv_w = 0; layout->prv_h = 0; layout->tile_border_x = 0.4f * UI_UNIT_X; layout->tile_border_y = 0.1f * UI_UNIT_Y; layout->prv_border_x = 0; layout->prv_border_y = 0; layout->tile_h = textheight * 3 / 2; layout->height = (int)(BLI_rctf_size_y(&v2d->cur) - 2 * layout->tile_border_y); layout->rows = layout->height / (layout->tile_h + 2 * layout->tile_border_y); column_widths(sfile->files, layout); if (params->display == FILE_SHORTDISPLAY) { maxlen = ICON_DEFAULT_WIDTH_SCALE + column_icon_space + (int)layout->column_widths[COLUMN_NAME] + column_space + (int)layout->column_widths[COLUMN_SIZE] + column_space; } else { maxlen = ICON_DEFAULT_WIDTH_SCALE + column_icon_space + (int)layout->column_widths[COLUMN_NAME] + column_space + #ifndef WIN32 (int)layout->column_widths[COLUMN_MODE1] + column_space + (int)layout->column_widths[COLUMN_MODE2] + column_space + (int)layout->column_widths[COLUMN_MODE3] + column_space + (int)layout->column_widths[COLUMN_OWNER] + column_space + #endif (int)layout->column_widths[COLUMN_DATE] + column_space + (int)layout->column_widths[COLUMN_TIME] + column_space + (int)layout->column_widths[COLUMN_SIZE] + column_space; } layout->tile_w = maxlen; if (layout->rows > 0) layout->columns = numfiles / layout->rows + 1; // XXX dirty, modulo is zero else { layout->rows = 1; layout->columns = numfiles + 1; // XXX dirty, modulo is zero } layout->width = sfile->layout->columns * (layout->tile_w + 2 * layout->tile_border_x) + layout->tile_border_x * 2; layout->flag = FILE_LAYOUT_HOR; } layout->dirty = false; }
void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar) { FileSelectParams *params = ED_fileselect_get_params(sfile); FileLayout *layout=0; View2D *v2d= &ar->v2d; int maxlen = 0; int numfiles; int textheight; if (sfile->layout == 0) { sfile->layout = MEM_callocN(sizeof(struct FileLayout), "file_layout"); sfile->layout->dirty = 1; } if (!sfile->layout->dirty) return; numfiles = filelist_numfiles(sfile->files); textheight = file_font_pointsize(); layout = sfile->layout; layout->textheight = textheight; if (params->display == FILE_IMGDISPLAY) { layout->prv_w = 96; layout->prv_h = 96; layout->tile_border_x = 6; layout->tile_border_y = 6; layout->prv_border_x = 6; layout->prv_border_y = 6; layout->tile_w = layout->prv_w + 2*layout->prv_border_x; layout->tile_h = layout->prv_h + 2*layout->prv_border_y + textheight; layout->width= (v2d->cur.xmax - v2d->cur.xmin - 2*layout->tile_border_x); layout->columns= layout->width / (layout->tile_w + 2*layout->tile_border_x); if(layout->columns > 0) layout->rows= numfiles/layout->columns + 1; // XXX dirty, modulo is zero else { layout->columns = 1; layout->rows= numfiles + 1; // XXX dirty, modulo is zero } layout->height= sfile->layout->rows*(layout->tile_h+2*layout->tile_border_y) + layout->tile_border_y*2; layout->flag = FILE_LAYOUT_VER; } else { layout->prv_w = 0; layout->prv_h = 0; layout->tile_border_x = 8; layout->tile_border_y = 2; layout->prv_border_x = 0; layout->prv_border_y = 0; layout->tile_h = textheight*3/2; layout->height= v2d->cur.ymax - v2d->cur.ymin - 2*layout->tile_border_y; layout->rows = layout->height / (layout->tile_h + 2*layout->tile_border_y); column_widths(sfile->files, layout); if (params->display == FILE_SHORTDISPLAY) { maxlen = layout->column_widths[COLUMN_NAME] + 12 + layout->column_widths[COLUMN_SIZE]; maxlen += 20; // for icon } else { maxlen = layout->column_widths[COLUMN_NAME] + 12 + #ifndef WIN32 layout->column_widths[COLUMN_MODE1] + 12 + layout->column_widths[COLUMN_MODE2] + 12 + layout->column_widths[COLUMN_MODE3] + 12 + layout->column_widths[COLUMN_OWNER] + 12 + #endif layout->column_widths[COLUMN_DATE] + 12 + layout->column_widths[COLUMN_TIME] + 12 + layout->column_widths[COLUMN_SIZE]; maxlen += 20; // for icon } layout->tile_w = maxlen; if(layout->rows > 0) layout->columns = numfiles/layout->rows + 1; // XXX dirty, modulo is zero else { layout->rows = 1; layout->columns = numfiles + 1; // XXX dirty, modulo is zero } layout->width = sfile->layout->columns * (layout->tile_w + 2*layout->tile_border_x) + layout->tile_border_x*2; layout->flag = FILE_LAYOUT_HOR; } layout->dirty= 0; }