Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}