2011-02-23 10:52:22 +00:00
|
|
|
/*
|
2008-12-14 12:16:55 +00:00
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
2018-06-01 18:19:39 +02:00
|
|
|
* of the License, or (at your option) any later version.
|
2008-12-14 12:16:55 +00:00
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2008-12-14 12:16:55 +00:00
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 2008 Blender Foundation.
|
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
* \ingroup spfile
|
2011-02-27 20:29:51 +00:00
|
|
|
*/
|
|
|
|
|
2008-12-14 12:16:55 +00:00
|
|
|
#include <math.h>
|
2020-03-19 09:33:03 +01:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
2008-12-14 12:16:55 +00:00
|
|
|
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
2019-08-01 13:53:25 +10:00
|
|
|
/* path/file handling stuff */
|
2012-04-15 07:54:07 +00:00
|
|
|
#ifdef WIN32
|
|
|
|
# include "BLI_winstuff.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
# include <direct.h>
|
|
|
|
# include <io.h>
|
2010-05-07 23:34:03 +00:00
|
|
|
#else
|
2012-04-15 07:54:07 +00:00
|
|
|
# include <dirent.h>
|
2020-03-19 09:33:03 +01:00
|
|
|
# include <sys/times.h>
|
|
|
|
# include <unistd.h>
|
2010-05-07 23:34:03 +00:00
|
|
|
#endif
|
|
|
|
|
2008-12-14 12:16:55 +00:00
|
|
|
#include "DNA_screen_types.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "DNA_space_types.h"
|
2009-05-14 18:08:14 +00:00
|
|
|
#include "DNA_userdef_types.h"
|
2008-12-14 12:16:55 +00:00
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
|
|
#include "BLI_blenlib.h"
|
2013-08-27 18:29:30 +00:00
|
|
|
#include "BLI_fnmatch.h"
|
2020-05-13 12:50:14 +02:00
|
|
|
#include "BLI_math_base.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "BLI_utildefines.h"
|
2008-12-14 12:16:55 +00:00
|
|
|
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
#include "BLO_readfile.h"
|
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
#include "BLT_translation.h"
|
|
|
|
|
2014-11-23 14:37:13 +01:00
|
|
|
#include "BKE_appdir.h"
|
2008-12-18 02:56:48 +00:00
|
|
|
#include "BKE_context.h"
|
2020-12-14 13:50:36 +01:00
|
|
|
#include "BKE_idtype.h"
|
2010-10-18 06:41:16 +00:00
|
|
|
#include "BKE_main.h"
|
2020-12-14 13:50:36 +01:00
|
|
|
#include "BKE_preferences.h"
|
2008-12-14 12:16:55 +00:00
|
|
|
|
2009-05-14 18:54:41 +00:00
|
|
|
#include "BLF_api.h"
|
2009-05-14 18:08:14 +00:00
|
|
|
|
2009-01-06 14:42:54 +00:00
|
|
|
#include "ED_fileselect.h"
|
2020-11-02 21:47:08 +01:00
|
|
|
#include "ED_screen.h"
|
2008-12-14 12:16:55 +00:00
|
|
|
|
|
|
|
#include "WM_api.h"
|
|
|
|
#include "WM_types.h"
|
|
|
|
|
2009-07-27 19:06:33 +00:00
|
|
|
#include "RNA_access.h"
|
|
|
|
|
2008-12-14 12:16:55 +00:00
|
|
|
#include "UI_interface.h"
|
2010-11-14 10:48:36 +00:00
|
|
|
#include "UI_interface_icons.h"
|
2019-01-23 15:31:47 +01:00
|
|
|
#include "UI_view2d.h"
|
2008-12-14 12:16:55 +00:00
|
|
|
|
|
|
|
#include "file_intern.h"
|
2009-01-06 14:42:54 +00:00
|
|
|
#include "filelist.h"
|
2008-12-14 12:16:55 +00:00
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
#define VERTLIST_MAJORCOLUMN_WIDTH (25 * UI_UNIT_X)
|
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
static void fileselect_initialize_params_common(SpaceFile *sfile, FileSelectParams *params)
|
2009-01-08 18:47:16 +00:00
|
|
|
{
|
2020-12-14 13:50:36 +01:00
|
|
|
const char *blendfile_path = BKE_main_blendfile_path_from_global();
|
|
|
|
|
|
|
|
/* operator has no setting for this */
|
|
|
|
params->active_file = -1;
|
|
|
|
|
|
|
|
if (!params->dir[0]) {
|
|
|
|
if (blendfile_path[0] != '\0') {
|
|
|
|
BLI_split_dir_part(blendfile_path, params->dir, sizeof(params->dir));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
const char *doc_path = BKE_appdir_folder_default();
|
|
|
|
if (doc_path) {
|
|
|
|
BLI_strncpy(params->dir, doc_path, sizeof(params->dir));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
folder_history_list_ensure_for_active_browse_mode(sfile);
|
|
|
|
folderlist_pushdir(sfile->folders_prev, params->dir);
|
|
|
|
|
|
|
|
/* Switching thumbnails needs to recalc layout T28809. */
|
|
|
|
if (sfile->layout) {
|
|
|
|
sfile->layout->dirty = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void fileselect_ensure_updated_asset_params(SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
BLI_assert(sfile->browse_mode == FILE_BROWSE_MODE_ASSETS);
|
|
|
|
BLI_assert(sfile->op == NULL);
|
|
|
|
|
|
|
|
FileAssetSelectParams *asset_params = sfile->asset_params;
|
|
|
|
|
|
|
|
if (!asset_params) {
|
|
|
|
asset_params = sfile->asset_params = MEM_callocN(sizeof(*asset_params),
|
|
|
|
"FileAssetSelectParams");
|
|
|
|
asset_params->base_params.details_flags = U_default.file_space_data.details_flags;
|
|
|
|
asset_params->asset_library.type = FILE_ASSET_LIBRARY_LOCAL;
|
2020-12-15 16:58:30 +01:00
|
|
|
asset_params->asset_library.custom_library_index = -1;
|
2021-06-11 16:35:39 +02:00
|
|
|
asset_params->import_type = FILE_ASSET_IMPORT_APPEND;
|
2009-01-08 18:47:16 +00:00
|
|
|
}
|
2020-12-08 13:47:37 +01:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
FileSelectParams *base_params = &asset_params->base_params;
|
|
|
|
base_params->file[0] = '\0';
|
|
|
|
base_params->filter_glob[0] = '\0';
|
|
|
|
/* TODO this way of using filters to form categories is notably slower than specifying a
|
|
|
|
* "group" to read. That's because all types are read and filtering is applied afterwards. Would
|
|
|
|
* be nice if we could lazy-read individual groups. */
|
|
|
|
base_params->flag |= U_default.file_space_data.flag | FILE_ASSETS_ONLY | FILE_FILTER;
|
|
|
|
base_params->flag &= ~FILE_DIRSEL_ONLY;
|
|
|
|
base_params->filter |= FILE_TYPE_BLENDERLIB;
|
|
|
|
base_params->filter_id = FILTER_ID_OB | FILTER_ID_GR;
|
|
|
|
base_params->display = FILE_IMGDISPLAY;
|
|
|
|
base_params->sort = FILE_SORT_ALPHA;
|
|
|
|
base_params->recursion_level = 1;
|
|
|
|
/* 'SMALL' size by default. More reasonable since this is typically used as regular editor,
|
|
|
|
* space is more of an issue here. */
|
|
|
|
base_params->thumbnail_size = 96;
|
|
|
|
|
|
|
|
fileselect_initialize_params_common(sfile, base_params);
|
2009-01-08 18:47:16 +00:00
|
|
|
}
|
|
|
|
|
2012-10-24 04:29:35 +00:00
|
|
|
/**
|
2013-02-06 14:02:19 +00:00
|
|
|
* \note RNA_struct_property_is_set_ex is used here because we want
|
2012-10-24 04:29:35 +00:00
|
|
|
* the previously used settings to be used here rather than overriding them */
|
2020-12-08 21:19:22 +01:00
|
|
|
static FileSelectParams *fileselect_ensure_updated_file_params(SpaceFile *sfile)
|
2009-01-06 14:42:54 +00:00
|
|
|
{
|
2020-12-14 13:50:36 +01:00
|
|
|
BLI_assert(sfile->browse_mode == FILE_BROWSE_MODE_FILES);
|
|
|
|
|
2009-01-08 18:47:16 +00:00
|
|
|
FileSelectParams *params;
|
2009-07-27 19:06:33 +00:00
|
|
|
wmOperator *op = sfile->op;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-06-05 15:10:33 +02:00
|
|
|
const char *blendfile_path = BKE_main_blendfile_path_from_global();
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-07-27 19:06:33 +00:00
|
|
|
/* create new parameters if necessary */
|
2009-01-08 18:47:16 +00:00
|
|
|
if (!sfile->params) {
|
2012-06-18 13:01:24 +00:00
|
|
|
sfile->params = MEM_callocN(sizeof(FileSelectParams), "fileselparams");
|
2009-07-27 19:06:33 +00:00
|
|
|
/* set path to most recently opened .blend */
|
2018-06-05 15:10:33 +02:00
|
|
|
BLI_split_dirfile(blendfile_path,
|
|
|
|
sfile->params->dir,
|
|
|
|
sfile->params->file,
|
|
|
|
sizeof(sfile->params->dir),
|
|
|
|
sizeof(sfile->params->file));
|
2010-09-24 07:05:43 +00:00
|
|
|
sfile->params->filter_glob[0] = '\0';
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
sfile->params->thumbnail_size = U_default.file_space_data.thumbnail_size;
|
|
|
|
sfile->params->details_flags = U_default.file_space_data.details_flags;
|
2019-10-16 12:04:56 +02:00
|
|
|
sfile->params->filter_id = U_default.file_space_data.filter_id;
|
2009-01-06 14:42:54 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-01-08 18:47:16 +00:00
|
|
|
params = sfile->params;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-07-27 19:06:33 +00:00
|
|
|
/* set the parameters from the operator, if it exists */
|
|
|
|
if (op) {
|
2013-08-26 06:54:05 +00:00
|
|
|
PropertyRNA *prop;
|
2014-01-28 03:52:21 +11:00
|
|
|
const bool is_files = (RNA_struct_find_property(op->ptr, "files") != NULL);
|
|
|
|
const bool is_filepath = (RNA_struct_find_property(op->ptr, "filepath") != NULL);
|
|
|
|
const bool is_filename = (RNA_struct_find_property(op->ptr, "filename") != NULL);
|
|
|
|
const bool is_directory = (RNA_struct_find_property(op->ptr, "directory") != NULL);
|
|
|
|
const bool is_relative_path = (RNA_struct_find_property(op->ptr, "relative_path") != NULL);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-06-05 14:30:44 +02:00
|
|
|
BLI_strncpy_utf8(
|
|
|
|
params->title, WM_operatortype_name(op->type, op->ptr), sizeof(params->title));
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2015-02-17 13:09:21 +11:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filemode"))) {
|
|
|
|
params->type = RNA_property_int_get(op->ptr, prop);
|
|
|
|
}
|
|
|
|
else {
|
Key Configuration
Keymaps are now saveable and configurable from the user preferences, note
that editing one item in a keymap means the whole keymap is now defined by
the user and will not be updated by Blender, an option for syncing might be
added later. The outliner interface is still there, but I will probably
remove it.
There's actually 3 levels now:
* Default builtin key configuration.
* Key configuration loaded from .py file, for configs like Blender 2.4x
or other 3D applications.
* Keymaps edited by the user and saved in .B.blend. These can be saved
to .py files as well to make creating distributable configurations
easier.
Also, user preferences sections were reorganized a bit, now there is:
Interface, Editing, Input, Files and System.
Implementation notes:
* wmKeyConfig was added which represents a key configuration containing
keymaps.
* wmKeymapItem was renamed to wmKeyMapItem for consistency with wmKeyMap.
* Modal maps are not wrapped yet.
* User preferences DNA file reading did not support newdataadr() yet,
added this now for reading keymaps.
* Key configuration related settings are now RNA wrapped.
* is_property_set and is_property_hidden python methods were added.
2009-10-08 18:40:03 +00:00
|
|
|
params->type = FILE_SPECIAL;
|
2015-02-17 13:09:21 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
if (is_filepath && RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
|
2010-07-02 17:44:57 +00:00
|
|
|
char name[FILE_MAX];
|
2010-06-14 03:52:10 +00:00
|
|
|
RNA_string_get(op->ptr, "filepath", name);
|
2009-09-12 19:54:39 +00:00
|
|
|
if (params->type == FILE_LOADLIB) {
|
|
|
|
BLI_strncpy(params->dir, name, sizeof(params->dir));
|
2020-12-08 13:47:37 +01:00
|
|
|
params->file[0] = '\0';
|
2009-09-12 19:54:39 +00:00
|
|
|
}
|
2010-07-02 17:44:57 +00:00
|
|
|
else {
|
2020-12-08 13:47:37 +01:00
|
|
|
BLI_split_dirfile(
|
|
|
|
name, params->dir, params->file, sizeof(params->dir), sizeof(params->file));
|
2010-07-02 17:44:57 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
2010-07-02 17:44:57 +00:00
|
|
|
else {
|
2014-04-01 11:34:00 +11:00
|
|
|
if (is_directory && RNA_struct_property_is_set_ex(op->ptr, "directory", false)) {
|
2010-07-02 17:44:57 +00:00
|
|
|
RNA_string_get(op->ptr, "directory", params->dir);
|
2020-12-08 13:47:37 +01:00
|
|
|
params->file[0] = '\0';
|
2010-07-02 17:44:57 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
if (is_filename && RNA_struct_property_is_set_ex(op->ptr, "filename", false)) {
|
2010-07-02 17:44:57 +00:00
|
|
|
RNA_string_get(op->ptr, "filename", params->file);
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
|
|
|
|
2012-03-24 06:38:07 +00:00
|
|
|
if (params->dir[0]) {
|
2020-04-07 12:02:21 +10:00
|
|
|
BLI_path_normalize_dir(blendfile_path, params->dir);
|
2018-06-05 15:10:33 +02:00
|
|
|
BLI_path_abs(params->dir, blendfile_path);
|
2009-09-12 19:54:39 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-12-10 17:01:53 +01:00
|
|
|
params->flag = 0;
|
2014-04-01 11:34:00 +11:00
|
|
|
if (is_directory == true && is_filename == false && is_filepath == false &&
|
|
|
|
is_files == false) {
|
2011-06-24 03:30:50 +00:00
|
|
|
params->flag |= FILE_DIRSEL_ONLY;
|
|
|
|
}
|
2019-09-16 18:14:23 +02:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "check_existing"))) {
|
|
|
|
params->flag |= RNA_property_boolean_get(op->ptr, prop) ? FILE_CHECK_EXISTING : 0;
|
|
|
|
}
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "hide_props_region"))) {
|
|
|
|
params->flag |= RNA_property_boolean_get(op->ptr, prop) ? FILE_HIDE_TOOL_PROPS : 0;
|
|
|
|
}
|
|
|
|
|
2009-07-27 19:06:33 +00:00
|
|
|
params->filter = 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_blender"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_BLENDER : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_blenlib"))) {
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_BLENDERLIB : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_backup"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_BLENDER_BACKUP : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_image"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_IMAGE : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_movie"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_MOVIE : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_python"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_PYSCRIPT : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_font"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_FTFONT : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_sound"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_SOUND : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_text"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_TEXT : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2019-09-05 07:54:41 +02:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_archive"))) {
|
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_ARCHIVE : 0;
|
|
|
|
}
|
2019-04-22 09:19:45 +10:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_folder"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_FOLDER : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_btx"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_BTX : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_collada"))) {
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_COLLADA : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_alembic"))) {
|
Basic Alembic support
All in all, this patch adds an Alembic importer, an Alembic exporter,
and a new CacheFile data block which, for now, wraps around an Alembic
archive. This data block is made available through a new modifier ("Mesh
Sequence Cache") as well as a new constraint ("Transform Cache") to
somewhat properly support respectively geometric and transformation data
streaming from alembic caches.
A more in-depth documentation is to be found on the wiki, as well as a
guide to compile alembic: https://wiki.blender.org/index.php/
User:Kevindietrich/AlembicBasicIo.
Many thanks to everyone involved in this little project, and huge shout
out to "cgstrive" for the thorough testings with Maya, 3ds Max, Houdini
and Realflow as well as @fjuhec, @jensverwiebe and @jasperge for the
custom builds and compile fixes.
Reviewers: sergey, campbellbarton, mont29
Reviewed By: sergey, campbellbarton, mont29
Differential Revision: https://developer.blender.org/D2060
2016-08-06 06:20:37 +02:00
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_ALEMBIC : 0;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
USD: Introducing a simple USD Exporter
This commit introduces the first version of an exporter to Pixar's
Universal Scene Description (USD) format.
Reviewed By: sergey, LazyDodo
Differential Revision: https://developer.blender.org/D6287
- The USD libraries are built by `make deps`, but not yet built by
install_deps.sh.
- Only experimental support for instancing; by default all duplicated
objects are made real in the USD file. This is fine for exporting a
linked-in posed character, not so much for thousands of pebbles etc.
- The way materials and UV coordinates and Normals are exported is going
to change soon.
- This patch contains LazyDodo's fixes for building on Windows in D5359.
== Meshes ==
USD seems to support neither per-material nor per-face-group
double-sidedness, so we just use the flag from the first non-empty
material slot. If there is no material we default to double-sidedness.
Each UV map is stored on the mesh in a separate primvar. Materials can
refer to these UV maps, but this is not yet exported by Blender. The
primvar name is the same as the UV Map name. This is to allow the
standard name "st" for texture coordinates by naming the UV Map as such,
without having to guess which UV Map is the "standard" one.
Face-varying mesh normals are written to USD. When the mesh has custom
loop normals those are written. Otherwise the poly flag `ME_SMOOTH` is
inspected to determine the normals.
The UV maps and mesh normals take up a significant amount of space, so
exporting them is optional. They're still enabled by default, though.
For comparison: a shot of Spring (03_035_A) is 1.2 GiB when exported
with UVs and normals, and 262 MiB without. We probably have room for
optimisation of written UVs and normals.
The mesh subdivision scheme isn't using the default value 'Catmull
Clark', but uses 'None', indicating we're exporting a polygonal mesh.
This is necessary for USD to understand our normals; otherwise the mesh
is always rendered smooth. In the future we may want to expose this
choice of subdivision scheme to the user, or auto-detect it when we
actually support exporting pre-subdivision meshes.
A possible optimisation could be to inspect whether all polygons are
smooth or flat, and mark the USD mesh as such. This can be added when
needed.
== Animation ==
Mesh and transform animation are now written when passing
`animation=True` to the export operator. There is no inspection of
whether an object is actually animated or not; USD can handle
deduplication of static values for us.
The administration of which timecode to use for the export is left to
the file-format-specific concrete subclasses of
`AbstractHierarchyIterator`; the abstract iterator itself doesn't know
anything about the passage of time. This will allow subclasses for the
frame-based USD format and time-based Alembic format.
== Support for simple preview materials ==
Very simple versions of the materials are now exported, using only the
viewport diffuse RGB, metallic, and roughness.
When there are multiple materials, the mesh faces are stored as geometry
subset and each material is assigned to the appropriate subset. If there
is only one material this is skipped.
The first material if any) is always applied to the mesh itself
(regardless of the existence of geometry subsets), because the Hydra
viewport doesn't support materials on subsets. See
https://github.com/PixarAnimationStudios/USD/issues/542 for more info.
Note that the geometry subsets are not yet time-sampled, so it may break
when an animated mesh changes topology.
Materials are exported as a flat list under a top-level '/_materials'
namespace. This inhibits instancing of the objects using those
materials, so this is subject to change.
== Hair ==
Only the parent strands are exported, and only with a constant colour.
No UV coordinates, no information about the normals.
== Camera ==
Only perspective cameras are supported for now.
== Particles ==
Particles are only written when they are alive, which means that they
are always visible (there is currently no code that deals with marking
them as invisible outside their lifespan).
Particle-system-instanced objects are exported by suffixing the object
name with the particle's persistent ID, giving each particle XForm a
unique name.
== Instancing/referencing ==
This exporter has experimental support for instancing/referencing.
Dupli-object meshes are now written to USD as references to the original
mesh. This is still very limited in correctness, as there are issues
referencing to materials from a referenced mesh.
I am still committing this, as it gives us a place to start when
continuing the quest for proper instancing in USD.
== Lights ==
USD does not directly support spot lights, so those aren't exported yet.
It's possible to add this in the future via the UsdLuxShapingAPI. The
units used for the light intensity are also still a bit of a mystery.
== Fluid vertex velocities ==
Currently only fluid simulations (not meshes in general) have explicit
vertex velocities. This is the most important case for exporting
velocities, though, as the baked mesh changes topology all the time, and
thus computing the velocities at import time in a post-processing step
is hard.
== The Building Process ==
- USD is built as monolithic library, instead of 25 smaller libraries.
We were linking all of them as 'whole archive' anyway, so this doesn't
affect the final file size. It does, however, make life easier with
respect to linking order, and handling upstream changes.
- The JSON files required by USD are installed into datafiles/usd; they
are required on every platform. Set the `PXR_PATH_DEBUG` to any value
to have the USD library print the paths it uses to find those files.
- USD is patched so that it finds the aforementioned JSON files in a path
that we pass to it from Blender.
- USD is patched to have a `PXR_BUILD_USD_TOOLS` CMake option to disable
building the tools in its `bin` directory. This is sent as a pull
request at https://github.com/PixarAnimationStudios/USD/pull/1048
2019-12-13 10:27:40 +01:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_usd"))) {
|
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_USD : 0;
|
|
|
|
}
|
2020-03-17 14:41:48 +01:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_volume"))) {
|
|
|
|
params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_VOLUME : 0;
|
|
|
|
}
|
2013-08-26 06:54:05 +00:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "filter_glob"))) {
|
2021-02-13 17:44:51 +11:00
|
|
|
/* Protection against Python scripts not setting proper size limit. */
|
2016-01-27 18:04:50 +01:00
|
|
|
char *tmp = RNA_property_string_get_alloc(
|
|
|
|
op->ptr, prop, params->filter_glob, sizeof(params->filter_glob), NULL);
|
|
|
|
if (tmp != params->filter_glob) {
|
|
|
|
BLI_strncpy(params->filter_glob, tmp, sizeof(params->filter_glob));
|
|
|
|
MEM_freeN(tmp);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-06-18 12:26:47 +02:00
|
|
|
/* Fix stupid things that truncating might have generated,
|
|
|
|
* like last group being a 'match everything' wildcard-only one... */
|
|
|
|
BLI_path_extension_glob_validate(params->filter_glob);
|
2016-01-27 18:04:50 +01:00
|
|
|
}
|
2015-01-04 12:03:47 +01:00
|
|
|
params->filter |= (FILE_TYPE_OPERATOR | FILE_TYPE_FOLDER);
|
2010-09-24 07:05:43 +00:00
|
|
|
}
|
2010-09-25 08:29:25 +00:00
|
|
|
else {
|
|
|
|
params->filter_glob[0] = '\0';
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2010-04-15 20:37:47 +00:00
|
|
|
if (params->filter != 0) {
|
|
|
|
if (U.uiflag & USER_FILTERFILEEXTS) {
|
|
|
|
params->flag |= FILE_FILTER;
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
|
|
|
else {
|
2010-04-15 20:37:47 +00:00
|
|
|
params->flag &= ~FILE_FILTER;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
|
|
|
|
2009-11-22 20:24:36 +00:00
|
|
|
if (U.uiflag & USER_HIDE_DOT) {
|
|
|
|
params->flag |= FILE_HIDE_DOT;
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
|
|
|
else {
|
2009-11-22 20:24:36 +00:00
|
|
|
params->flag &= ~FILE_HIDE_DOT;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-09-12 19:54:39 +00:00
|
|
|
if (params->type == FILE_LOADLIB) {
|
|
|
|
params->flag |= RNA_boolean_get(op->ptr, "link") ? FILE_LINK : 0;
|
|
|
|
params->flag |= RNA_boolean_get(op->ptr, "autoselect") ? FILE_AUTOSELECT : 0;
|
2017-05-26 17:41:50 +02:00
|
|
|
params->flag |= RNA_boolean_get(op->ptr, "active_collection") ? FILE_ACTIVE_COLLECTION : 0;
|
2009-09-12 19:54:39 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2015-02-17 13:09:21 +11:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "display_type"))) {
|
|
|
|
params->display = RNA_property_enum_get(op->ptr, prop);
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-11-02 23:55:59 +01:00
|
|
|
if (params->display == FILE_DEFAULTDISPLAY) {
|
|
|
|
params->display = U_default.file_space_data.display_type;
|
|
|
|
}
|
|
|
|
|
2015-08-23 12:40:21 +02:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "sort_method"))) {
|
|
|
|
params->sort = RNA_property_enum_get(op->ptr, prop);
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-11-02 23:55:59 +01:00
|
|
|
if (params->sort == FILE_SORT_DEFAULT) {
|
|
|
|
params->sort = U_default.file_space_data.sort_type;
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
|
|
|
|
2011-10-12 00:15:19 +00:00
|
|
|
if (is_relative_path) {
|
2015-02-17 13:09:21 +11:00
|
|
|
if ((prop = RNA_struct_find_property(op->ptr, "relative_path"))) {
|
|
|
|
if (!RNA_property_is_set_ex(op->ptr, prop, false)) {
|
2015-02-19 12:33:14 +11:00
|
|
|
RNA_property_boolean_set(op->ptr, prop, (U.flag & USER_RELPATHS) != 0);
|
2011-10-12 00:15:19 +00:00
|
|
|
}
|
2011-06-24 03:30:50 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
|
|
|
}
|
2011-06-24 03:30:50 +00:00
|
|
|
else {
|
2009-07-27 19:06:33 +00:00
|
|
|
/* default values, if no operator */
|
2009-09-15 20:47:34 +00:00
|
|
|
params->type = FILE_UNIX;
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
params->flag |= U_default.file_space_data.flag;
|
2011-06-24 03:30:50 +00:00
|
|
|
params->flag &= ~FILE_DIRSEL_ONLY;
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
params->display = FILE_VERTICALDISPLAY;
|
2015-09-26 13:37:46 +02:00
|
|
|
params->sort = FILE_SORT_ALPHA;
|
2009-07-27 19:06:33 +00:00
|
|
|
params->filter = 0;
|
2010-09-25 08:29:25 +00:00
|
|
|
params->filter_glob[0] = '\0';
|
2009-07-07 07:25:44 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
fileselect_initialize_params_common(sfile, params);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
return params;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
/**
|
|
|
|
* If needed, create and return the file select parameters for the active browse mode.
|
|
|
|
*/
|
|
|
|
FileSelectParams *ED_fileselect_ensure_active_params(SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
switch ((eFileBrowse_Mode)sfile->browse_mode) {
|
|
|
|
case FILE_BROWSE_MODE_FILES:
|
|
|
|
if (!sfile->params) {
|
|
|
|
fileselect_ensure_updated_file_params(sfile);
|
2013-06-06 23:58:30 +00:00
|
|
|
}
|
2020-12-14 13:50:36 +01:00
|
|
|
return sfile->params;
|
|
|
|
case FILE_BROWSE_MODE_ASSETS:
|
|
|
|
if (!sfile->asset_params) {
|
|
|
|
fileselect_ensure_updated_asset_params(sfile);
|
|
|
|
}
|
|
|
|
return &sfile->asset_params->base_params;
|
2013-06-06 23:58:30 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
BLI_assert(!"Invalid browse mode set in file space.");
|
|
|
|
return NULL;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
/**
|
|
|
|
* Get the file select parameters for the active browse mode.
|
|
|
|
*/
|
|
|
|
FileSelectParams *ED_fileselect_get_active_params(const SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
if (!sfile) {
|
|
|
|
/* Sometimes called in poll before space type was checked. */
|
|
|
|
return NULL;
|
2011-10-05 07:57:33 +00:00
|
|
|
}
|
2020-12-08 21:19:22 +01:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
switch ((eFileBrowse_Mode)sfile->browse_mode) {
|
|
|
|
case FILE_BROWSE_MODE_FILES:
|
|
|
|
return sfile->params;
|
|
|
|
case FILE_BROWSE_MODE_ASSETS:
|
|
|
|
return (FileSelectParams *)sfile->asset_params;
|
|
|
|
}
|
|
|
|
|
|
|
|
BLI_assert(!"Invalid browse mode set in file space.");
|
|
|
|
return NULL;
|
2020-12-08 13:47:37 +01:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
FileSelectParams *ED_fileselect_get_file_params(const SpaceFile *sfile)
|
2020-12-08 13:47:37 +01:00
|
|
|
{
|
2020-12-14 13:50:36 +01:00
|
|
|
return (sfile->browse_mode == FILE_BROWSE_MODE_FILES) ? sfile->params : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
FileAssetSelectParams *ED_fileselect_get_asset_params(const SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
return (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) ? sfile->asset_params : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void fileselect_refresh_asset_params(FileAssetSelectParams *asset_params)
|
|
|
|
{
|
|
|
|
FileSelectAssetLibraryUID *library = &asset_params->asset_library;
|
|
|
|
FileSelectParams *base_params = &asset_params->base_params;
|
|
|
|
bUserAssetLibrary *user_library = NULL;
|
|
|
|
|
2021-02-13 17:44:51 +11:00
|
|
|
/* Ensure valid repository, or fall-back to local one. */
|
2020-12-14 13:50:36 +01:00
|
|
|
if (library->type == FILE_ASSET_LIBRARY_CUSTOM) {
|
2020-12-15 16:58:30 +01:00
|
|
|
BLI_assert(library->custom_library_index >= 0);
|
|
|
|
|
|
|
|
user_library = BKE_preferences_asset_library_find_from_index(&U,
|
|
|
|
library->custom_library_index);
|
2020-12-14 13:50:36 +01:00
|
|
|
if (!user_library) {
|
|
|
|
library->type = FILE_ASSET_LIBRARY_LOCAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (library->type) {
|
|
|
|
case FILE_ASSET_LIBRARY_LOCAL:
|
|
|
|
base_params->dir[0] = '\0';
|
|
|
|
break;
|
|
|
|
case FILE_ASSET_LIBRARY_CUSTOM:
|
|
|
|
BLI_assert(user_library);
|
|
|
|
BLI_strncpy(base_params->dir, user_library->path, sizeof(base_params->dir));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
base_params->type = (library->type == FILE_ASSET_LIBRARY_LOCAL) ? FILE_MAIN_ASSET : FILE_LOADLIB;
|
|
|
|
}
|
|
|
|
|
|
|
|
void fileselect_refresh_params(SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile);
|
|
|
|
if (asset_params) {
|
|
|
|
fileselect_refresh_asset_params(asset_params);
|
2020-12-08 13:47:37 +01:00
|
|
|
}
|
2020-12-14 13:50:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
bool ED_fileselect_is_asset_browser(const SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
return (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS);
|
2008-12-14 12:16:55 +00:00
|
|
|
}
|
|
|
|
|
2021-03-05 15:00:56 +01:00
|
|
|
struct ID *ED_fileselect_active_asset_get(const SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
if (!ED_fileselect_is_asset_browser(sfile)) {
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
|
|
|
const FileDirEntry *file = filelist_file(sfile->files, params->active_file);
|
|
|
|
if (file == NULL) {
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return filelist_file_get_id(file);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void on_reload_activate_by_id(SpaceFile *sfile, onReloadFnData custom_data)
|
|
|
|
{
|
|
|
|
ID *asset_id = (ID *)custom_data;
|
|
|
|
ED_fileselect_activate_by_id(sfile, asset_id, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ED_fileselect_activate_by_id(SpaceFile *sfile, ID *asset_id, const bool deferred)
|
|
|
|
{
|
|
|
|
if (!ED_fileselect_is_asset_browser(sfile)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If there are filelist operations running now ("pending" true) or soon ("force reset" true),
|
|
|
|
* there is a fair chance that the to-be-activated ID will only be present after these operations
|
|
|
|
* have completed. Defer activation until then. */
|
|
|
|
if (deferred || filelist_pending(sfile->files) || filelist_needs_force_reset(sfile->files)) {
|
|
|
|
/* This should be thread-safe, as this function is likely called from the main thread, and
|
|
|
|
* notifiers (which cause a call to the on-reload callback function) are handled on the main
|
|
|
|
* thread as well. */
|
|
|
|
file_on_reload_callback_register(sfile, on_reload_activate_by_id, asset_id);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
|
|
|
struct FileList *files = sfile->files;
|
|
|
|
|
|
|
|
const int num_files_filtered = filelist_files_ensure(files);
|
|
|
|
for (int file_index = 0; file_index < num_files_filtered; ++file_index) {
|
|
|
|
const FileDirEntry *file = filelist_file_ex(files, file_index, false);
|
|
|
|
|
|
|
|
if (filelist_file_get_id(file) != asset_id) {
|
|
|
|
filelist_entry_select_set(files, file, FILE_SEL_REMOVE, FILE_SEL_SELECTED, CHECK_ALL);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
params->active_file = file_index;
|
|
|
|
filelist_entry_select_set(files, file, FILE_SEL_ADD, FILE_SEL_SELECTED, CHECK_ALL);
|
|
|
|
|
|
|
|
/* Keep looping to deselect the other files. */
|
|
|
|
}
|
|
|
|
|
|
|
|
WM_main_add_notifier(NC_ASSET | NA_ACTIVATED, NULL);
|
|
|
|
WM_main_add_notifier(NC_ASSET | NA_SELECTED, NULL);
|
|
|
|
}
|
|
|
|
|
2020-11-02 23:55:59 +01:00
|
|
|
/* The subset of FileSelectParams.flag items we store into preferences. Note that FILE_SORT_ALPHA
|
|
|
|
* may also be remembered, but only conditionally. */
|
|
|
|
#define PARAMS_FLAGS_REMEMBERED (FILE_HIDE_DOT)
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
|
2019-11-15 10:05:02 -03:00
|
|
|
void ED_fileselect_window_params_get(const wmWindow *win, int win_size[2], bool *is_maximized)
|
|
|
|
{
|
2021-02-05 16:23:34 +11:00
|
|
|
/* Get DPI/pixel-size independent size to be stored in preferences. */
|
2019-11-15 10:05:02 -03:00
|
|
|
WM_window_set_dpi(win); /* Ensure the DPI is taken from the right window. */
|
|
|
|
|
|
|
|
win_size[0] = WM_window_pixels_x(win) / UI_DPI_FAC;
|
|
|
|
win_size[1] = WM_window_pixels_y(win) / UI_DPI_FAC;
|
|
|
|
|
|
|
|
*is_maximized = WM_window_is_maximized(win);
|
|
|
|
}
|
|
|
|
|
2020-11-02 23:55:59 +01:00
|
|
|
static bool file_select_use_default_display_type(const SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
PropertyRNA *prop;
|
|
|
|
return (sfile->op == NULL) ||
|
|
|
|
!(prop = RNA_struct_find_property(sfile->op->ptr, "display_type")) ||
|
|
|
|
(RNA_property_enum_get(sfile->op->ptr, prop) == FILE_DEFAULTDISPLAY);
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool file_select_use_default_sort_type(const SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
PropertyRNA *prop;
|
|
|
|
return (sfile->op == NULL) ||
|
|
|
|
!(prop = RNA_struct_find_property(sfile->op->ptr, "sort_method")) ||
|
|
|
|
(RNA_property_enum_get(sfile->op->ptr, prop) == FILE_SORT_DEFAULT);
|
|
|
|
}
|
|
|
|
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
void ED_fileselect_set_params_from_userdef(SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
wmOperator *op = sfile->op;
|
|
|
|
UserDef_FileSpaceData *sfile_udata = &U.file_space_data;
|
|
|
|
|
2020-12-15 18:49:56 +01:00
|
|
|
sfile->browse_mode = FILE_BROWSE_MODE_FILES;
|
2020-12-14 13:50:36 +01:00
|
|
|
|
2020-12-08 21:19:22 +01:00
|
|
|
FileSelectParams *params = fileselect_ensure_updated_file_params(sfile);
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
if (!op) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-12-08 13:47:37 +01:00
|
|
|
params->thumbnail_size = sfile_udata->thumbnail_size;
|
|
|
|
params->details_flags = sfile_udata->details_flags;
|
|
|
|
params->filter_id = sfile_udata->filter_id;
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
|
|
|
|
/* Combine flags we take from params with the flags we take from userdef. */
|
2020-12-08 13:47:37 +01:00
|
|
|
params->flag = (params->flag & ~PARAMS_FLAGS_REMEMBERED) |
|
|
|
|
(sfile_udata->flag & PARAMS_FLAGS_REMEMBERED);
|
2020-11-02 23:55:59 +01:00
|
|
|
|
|
|
|
if (file_select_use_default_display_type(sfile)) {
|
2020-12-08 13:47:37 +01:00
|
|
|
params->display = sfile_udata->display_type;
|
2020-11-02 23:55:59 +01:00
|
|
|
}
|
|
|
|
if (file_select_use_default_sort_type(sfile)) {
|
2020-12-08 13:47:37 +01:00
|
|
|
params->sort = sfile_udata->sort_type;
|
2020-11-02 23:55:59 +01:00
|
|
|
/* For the default sorting, also take invert flag from userdef. */
|
2020-12-08 13:47:37 +01:00
|
|
|
params->flag = (params->flag & ~FILE_SORT_INVERT) | (sfile_udata->flag & FILE_SORT_INVERT);
|
2020-11-02 23:55:59 +01:00
|
|
|
}
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Update the user-preference data for the file space. In fact, this also contains some
|
2019-10-10 10:25:46 +11:00
|
|
|
* non-FileSelectParams data, but we can safely ignore this.
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
*
|
2019-10-10 10:25:46 +11:00
|
|
|
* \param temp_win_size: If the browser was opened in a temporary window,
|
|
|
|
* pass its size here so we can store that in the preferences. Otherwise NULL.
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
*/
|
2019-11-15 10:05:02 -03:00
|
|
|
void ED_fileselect_params_to_userdef(SpaceFile *sfile,
|
2020-07-13 11:27:09 +02:00
|
|
|
const int temp_win_size[2],
|
2019-11-15 10:05:02 -03:00
|
|
|
const bool is_maximized)
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
{
|
2020-12-08 13:47:37 +01:00
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
UserDef_FileSpaceData *sfile_udata_new = &U.file_space_data;
|
|
|
|
UserDef_FileSpaceData sfile_udata_old = U.file_space_data;
|
|
|
|
|
2020-12-08 13:47:37 +01:00
|
|
|
sfile_udata_new->thumbnail_size = params->thumbnail_size;
|
|
|
|
sfile_udata_new->details_flags = params->details_flags;
|
|
|
|
sfile_udata_new->flag = params->flag & PARAMS_FLAGS_REMEMBERED;
|
|
|
|
sfile_udata_new->filter_id = params->filter_id;
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
|
2020-11-02 23:55:59 +01:00
|
|
|
/* In some rare cases, operators ask for a specific display or sort type (e.g. chronological
|
|
|
|
* sorting for "Recover Auto Save"). So the settings are optimized for a specific operation.
|
|
|
|
* Don't let that change the userdef memory for more general cases. */
|
|
|
|
if (file_select_use_default_display_type(sfile)) {
|
2020-12-08 13:47:37 +01:00
|
|
|
sfile_udata_new->display_type = params->display;
|
2020-11-02 23:55:59 +01:00
|
|
|
}
|
|
|
|
if (file_select_use_default_sort_type(sfile)) {
|
2020-12-08 13:47:37 +01:00
|
|
|
sfile_udata_new->sort_type = params->sort;
|
2020-11-02 23:55:59 +01:00
|
|
|
/* In this case also remember the invert flag. */
|
|
|
|
sfile_udata_new->flag = (sfile_udata_new->flag & ~FILE_SORT_INVERT) |
|
2020-12-08 13:47:37 +01:00
|
|
|
(params->flag & FILE_SORT_INVERT);
|
2020-11-02 23:55:59 +01:00
|
|
|
}
|
|
|
|
|
2019-11-15 10:05:02 -03:00
|
|
|
if (temp_win_size && !is_maximized) {
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
sfile_udata_new->temp_win_sizex = temp_win_size[0];
|
|
|
|
sfile_udata_new->temp_win_sizey = temp_win_size[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Tag prefs as dirty if something has changed. */
|
|
|
|
if (memcmp(sfile_udata_new, &sfile_udata_old, sizeof(sfile_udata_old)) != 0) {
|
|
|
|
U.runtime.is_dirty = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-09 18:40:34 +02:00
|
|
|
/**
|
|
|
|
* Sets FileSelectParams->file (name of selected file)
|
|
|
|
*/
|
|
|
|
void fileselect_file_set(SpaceFile *sfile, const int index)
|
|
|
|
{
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
const struct FileDirEntry *file = filelist_file(sfile->files, index);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
if (file && file->relpath && file->relpath[0] && !(file->typeflag & FILE_TYPE_DIR)) {
|
2020-12-08 13:47:37 +01:00
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
|
|
|
BLI_strncpy(params->file, file->relpath, FILE_MAXFILE);
|
2015-07-09 18:40:34 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
int ED_fileselect_layout_numfiles(FileLayout *layout, ARegion *region)
|
2009-07-26 12:40:44 +00:00
|
|
|
{
|
|
|
|
int numfiles;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-09-03 16:00:44 +10:00
|
|
|
/* Values in pixels.
|
|
|
|
*
|
|
|
|
* - *_item: size of each (row|col), (including padding)
|
|
|
|
* - *_view: (x|y) size of the view.
|
2021-03-18 09:35:12 +11:00
|
|
|
* - *_over: extra pixels, to take into account, when the fit isn't exact
|
2014-09-03 16:00:44 +10:00
|
|
|
* (needed since you may see the end of the previous column and the beginning of the next).
|
|
|
|
*
|
2014-09-05 10:16:11 +10:00
|
|
|
* Could be more clever and take scrolling into account,
|
2014-09-03 16:00:44 +10:00
|
|
|
* but for now don't bother.
|
|
|
|
*/
|
2009-07-26 12:40:44 +00:00
|
|
|
if (layout->flag & FILE_LAYOUT_HOR) {
|
2014-09-03 16:00:44 +10:00
|
|
|
const int x_item = layout->tile_w + (2 * layout->tile_border_x);
|
2020-03-06 16:56:42 +01:00
|
|
|
const int x_view = (int)(BLI_rctf_size_x(®ion->v2d.cur));
|
2014-09-03 16:00:44 +10:00
|
|
|
const int x_over = x_item - (x_view % x_item);
|
|
|
|
numfiles = (int)((float)(x_view + x_over) / (float)(x_item));
|
2012-06-18 13:01:24 +00:00
|
|
|
return numfiles * layout->rows;
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
2020-07-03 17:30:31 +02:00
|
|
|
|
|
|
|
const int y_item = layout->tile_h + (2 * layout->tile_border_y);
|
|
|
|
const int y_view = (int)(BLI_rctf_size_y(®ion->v2d.cur)) - layout->offset_top;
|
|
|
|
const int y_over = y_item - (y_view % y_item);
|
|
|
|
numfiles = (int)((float)(y_view + y_over) / (float)(y_item));
|
|
|
|
return numfiles * layout->flow_columns;
|
2009-07-26 12:40:44 +00:00
|
|
|
}
|
2009-03-08 13:14:12 +00:00
|
|
|
|
2014-01-28 03:52:21 +11:00
|
|
|
static bool is_inside(int x, int y, int cols, int rows)
|
2011-03-14 19:56:13 +00:00
|
|
|
{
|
2014-01-28 03:52:21 +11:00
|
|
|
return ((x >= 0) && (x < cols) && (y >= 0) && (y < rows));
|
2011-03-14 19:56:13 +00:00
|
|
|
}
|
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
FileSelection ED_fileselect_layout_offset_rect(FileLayout *layout, const rcti *rect)
|
2011-03-14 19:56:13 +00:00
|
|
|
{
|
|
|
|
int colmin, colmax, rowmin, rowmax;
|
|
|
|
FileSelection sel;
|
|
|
|
sel.first = sel.last = -1;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-04-22 09:19:45 +10:00
|
|
|
if (layout == NULL) {
|
2011-03-14 19:56:13 +00:00
|
|
|
return sel;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
colmin = (rect->xmin) / (layout->tile_w + 2 * layout->tile_border_x);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
rowmin = (rect->ymin - layout->offset_top) / (layout->tile_h + 2 * layout->tile_border_y);
|
2012-06-18 13:01:24 +00:00
|
|
|
colmax = (rect->xmax) / (layout->tile_w + 2 * layout->tile_border_x);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
rowmax = (rect->ymax - layout->offset_top) / (layout->tile_h + 2 * layout->tile_border_y);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
if (is_inside(colmin, rowmin, layout->flow_columns, layout->rows) ||
|
|
|
|
is_inside(colmax, rowmax, layout->flow_columns, layout->rows)) {
|
|
|
|
CLAMP(colmin, 0, layout->flow_columns - 1);
|
2012-06-18 13:01:24 +00:00
|
|
|
CLAMP(rowmin, 0, layout->rows - 1);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
CLAMP(colmax, 0, layout->flow_columns - 1);
|
2012-06-18 13:01:24 +00:00
|
|
|
CLAMP(rowmax, 0, layout->rows - 1);
|
2012-10-21 05:46:41 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
if ((colmin > layout->flow_columns - 1) || (rowmin > layout->rows - 1)) {
|
2011-03-14 19:56:13 +00:00
|
|
|
sel.first = -1;
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
|
|
|
else {
|
2019-04-22 09:19:45 +10:00
|
|
|
if (layout->flag & FILE_LAYOUT_HOR) {
|
2012-06-18 13:01:24 +00:00
|
|
|
sel.first = layout->rows * colmin + rowmin;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
else {
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
sel.first = colmin + layout->flow_columns * rowmin;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2011-03-14 19:56:13 +00:00
|
|
|
}
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
if ((colmax > layout->flow_columns - 1) || (rowmax > layout->rows - 1)) {
|
2011-03-14 19:56:13 +00:00
|
|
|
sel.last = -1;
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
|
|
|
else {
|
2019-04-22 09:19:45 +10:00
|
|
|
if (layout->flag & FILE_LAYOUT_HOR) {
|
2012-06-18 13:01:24 +00:00
|
|
|
sel.last = layout->rows * colmax + rowmax;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
else {
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
sel.last = colmax + layout->flow_columns * rowmax;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2011-03-14 19:56:13 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-03-14 19:56:13 +00:00
|
|
|
return sel;
|
|
|
|
}
|
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
int ED_fileselect_layout_offset(FileLayout *layout, int x, int y)
|
2009-03-08 13:14:12 +00:00
|
|
|
{
|
|
|
|
int offsetx, offsety;
|
|
|
|
int active_file;
|
|
|
|
|
2019-04-22 09:19:45 +10:00
|
|
|
if (layout == NULL) {
|
2011-03-14 19:56:13 +00:00
|
|
|
return -1;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
offsetx = (x) / (layout->tile_w + 2 * layout->tile_border_x);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
offsety = (y - layout->offset_top) / (layout->tile_h + 2 * layout->tile_border_y);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
if (offsetx > layout->flow_columns - 1) {
|
2012-02-27 10:35:39 +00:00
|
|
|
return -1;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
if (offsety > layout->rows - 1) {
|
2012-02-27 10:35:39 +00:00
|
|
|
return -1;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2019-04-22 09:19:45 +10:00
|
|
|
if (layout->flag & FILE_LAYOUT_HOR) {
|
2012-06-18 13:01:24 +00:00
|
|
|
active_file = layout->rows * offsetx + offsety;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
|
|
|
else {
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
active_file = offsetx + layout->flow_columns * offsety;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2009-03-08 13:14:12 +00:00
|
|
|
return active_file;
|
|
|
|
}
|
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
/**
|
|
|
|
* Get the currently visible bounds of the layout in screen space. Matches View2D.mask minus the
|
|
|
|
* top column-header row.
|
|
|
|
*/
|
|
|
|
void ED_fileselect_layout_maskrect(const FileLayout *layout, const View2D *v2d, rcti *r_rect)
|
|
|
|
{
|
|
|
|
*r_rect = v2d->mask;
|
|
|
|
r_rect->ymax -= layout->offset_top;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ED_fileselect_layout_is_inside_pt(const FileLayout *layout, const View2D *v2d, int x, int y)
|
|
|
|
{
|
|
|
|
rcti maskrect;
|
|
|
|
ED_fileselect_layout_maskrect(layout, v2d, &maskrect);
|
|
|
|
return BLI_rcti_isect_pt(&maskrect, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ED_fileselect_layout_isect_rect(const FileLayout *layout,
|
|
|
|
const View2D *v2d,
|
|
|
|
const rcti *rect,
|
|
|
|
rcti *r_dst)
|
|
|
|
{
|
|
|
|
rcti maskrect;
|
|
|
|
ED_fileselect_layout_maskrect(layout, v2d, &maskrect);
|
|
|
|
return BLI_rcti_isect(&maskrect, rect, r_dst);
|
|
|
|
}
|
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
void ED_fileselect_layout_tilepos(FileLayout *layout, int tile, int *x, int *y)
|
2009-03-08 13:14:12 +00:00
|
|
|
{
|
|
|
|
if (layout->flag == FILE_LAYOUT_HOR) {
|
2012-06-18 13:01:24 +00:00
|
|
|
*x = layout->tile_border_x +
|
|
|
|
(tile / layout->rows) * (layout->tile_w + 2 * layout->tile_border_x);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
*y = layout->offset_top + layout->tile_border_y +
|
2012-06-18 13:01:24 +00:00
|
|
|
(tile % layout->rows) * (layout->tile_h + 2 * layout->tile_border_y);
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
|
|
|
else {
|
2012-06-18 13:01:24 +00:00
|
|
|
*x = layout->tile_border_x +
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
((tile) % layout->flow_columns) * (layout->tile_w + 2 * layout->tile_border_x);
|
|
|
|
*y = layout->offset_top + layout->tile_border_y +
|
|
|
|
((tile) / layout->flow_columns) * (layout->tile_h + 2 * layout->tile_border_y);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if the region coordinate defined by \a x and \a y are inside the column header.
|
|
|
|
*/
|
|
|
|
bool file_attribute_column_header_is_inside(const View2D *v2d,
|
|
|
|
const FileLayout *layout,
|
|
|
|
int x,
|
|
|
|
int y)
|
|
|
|
{
|
|
|
|
rcti header_rect = v2d->mask;
|
|
|
|
header_rect.ymin = header_rect.ymax - layout->attribute_column_header_h;
|
|
|
|
return BLI_rcti_isect_pt(&header_rect, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool file_attribute_column_type_enabled(const FileSelectParams *params,
|
|
|
|
FileAttributeColumnType column)
|
|
|
|
{
|
|
|
|
switch (column) {
|
|
|
|
case COLUMN_NAME:
|
|
|
|
/* Always enabled */
|
|
|
|
return true;
|
|
|
|
case COLUMN_DATETIME:
|
|
|
|
return (params->details_flags & FILE_DETAILS_DATETIME) != 0;
|
|
|
|
case COLUMN_SIZE:
|
|
|
|
return (params->details_flags & FILE_DETAILS_SIZE) != 0;
|
|
|
|
default:
|
|
|
|
return false;
|
2009-03-08 13:14:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
/**
|
|
|
|
* Find the column type at region coordinate given by \a x (y doesn't matter for this).
|
|
|
|
*/
|
|
|
|
FileAttributeColumnType file_attribute_column_type_find_isect(const View2D *v2d,
|
|
|
|
const FileSelectParams *params,
|
|
|
|
FileLayout *layout,
|
|
|
|
int x)
|
|
|
|
{
|
|
|
|
float mx, my;
|
|
|
|
int offset_tile;
|
|
|
|
|
|
|
|
UI_view2d_region_to_view(v2d, x, v2d->mask.ymax - layout->offset_top - 1, &mx, &my);
|
|
|
|
offset_tile = ED_fileselect_layout_offset(
|
|
|
|
layout, (int)(v2d->tot.xmin + mx), (int)(v2d->tot.ymax - my));
|
|
|
|
if (offset_tile > -1) {
|
|
|
|
int tile_x, tile_y;
|
|
|
|
int pos_x = 0;
|
|
|
|
int rel_x; /* x relative to the hovered tile */
|
|
|
|
|
|
|
|
ED_fileselect_layout_tilepos(layout, offset_tile, &tile_x, &tile_y);
|
|
|
|
/* Column header drawing doesn't use left tile border, so subtract it. */
|
|
|
|
rel_x = mx - (tile_x - layout->tile_border_x);
|
|
|
|
|
|
|
|
for (FileAttributeColumnType column = 0; column < ATTRIBUTE_COLUMN_MAX; column++) {
|
|
|
|
if (!file_attribute_column_type_enabled(params, column)) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
const int width = layout->attribute_columns[column].width;
|
|
|
|
|
|
|
|
if (IN_RANGE(rel_x, pos_x, pos_x + width)) {
|
|
|
|
return column;
|
|
|
|
}
|
|
|
|
|
|
|
|
pos_x += width;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return COLUMN_NONE;
|
|
|
|
}
|
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
float file_string_width(const char *str)
|
2009-05-14 18:08:14 +00:00
|
|
|
{
|
2020-03-15 17:32:25 +11:00
|
|
|
const uiStyle *style = UI_style_get();
|
2015-05-27 17:15:48 +02:00
|
|
|
float width;
|
|
|
|
|
2014-11-09 21:20:40 +01:00
|
|
|
UI_fontstyle_set(&style->widget);
|
2015-05-27 17:15:48 +02:00
|
|
|
if (style->widget.kerning == 1) { /* for BLF_width */
|
|
|
|
BLF_enable(style->widget.uifont_id, BLF_KERNING_DEFAULT);
|
|
|
|
}
|
|
|
|
|
|
|
|
width = BLF_width(style->widget.uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
|
|
|
|
|
|
|
|
if (style->widget.kerning == 1) {
|
|
|
|
BLF_disable(style->widget.uifont_id, BLF_KERNING_DEFAULT);
|
|
|
|
}
|
|
|
|
|
|
|
|
return width;
|
2009-05-14 18:08:14 +00:00
|
|
|
}
|
|
|
|
|
2011-02-13 15:02:21 +00:00
|
|
|
float file_font_pointsize(void)
|
2009-05-14 18:08:14 +00:00
|
|
|
{
|
2011-01-13 04:53:55 +00:00
|
|
|
#if 0
|
2009-05-14 18:08:14 +00:00
|
|
|
float s;
|
|
|
|
char tmp[2] = "X";
|
2020-03-15 17:32:25 +11:00
|
|
|
const uiStyle *style = UI_style_get();
|
2014-11-09 21:20:40 +01:00
|
|
|
UI_fontstyle_set(&style->widget);
|
BugFix:
[#20854] PROPERTIES STAMP: Rendering stamp flickers in output renders
Blenfont was not thread safe, that is why one thread can change
the font properties (size, dpi, color, etc) at the same time
that the stamp draw on the image, and then the problem.
To make blenfont thread safe I have to change two important things:
1) Every BLF_* function take one argument, the font id.
2) We have two new function to make font "thread safe":
BLF_load_unique
BLF_load_mem_unique
This two function are for case like stamp, that need and own font
that don't share the glyph cache, so can draw without problem
in a different thread.
Why the BLF_*_unique function ?
Because blenfont keep only one copy of a font and keep a list of
"glyph cache". Every glyph cache have size and dpi, so if two
different thread access the same font at the same time, they can
change value and finish with something like the stamp problem.
Why don't remove the glyph cache ?
Because if we do that, we finish with a font object for every size
and dpi, and the stamp is really a special case that happen in
the rendering process, so I really thing is better keep the
glyph cache and make this two new function to handle this
special case.
(When I say "font object" I mean have the same freetype font multiple
times just to have differents size and dpi)
As Matt point we still can have one case that two thread access
the BLF_*_unique function at the same time, but I am looking to
fix this with some class of thread lock.
For now I test and work fine, so if some one found problem, please
let me know.
Campbell I have to change the python api (python/generic/blf_api.c)
to the new syntax, so maybe you can take a look at this.
2010-04-22 10:56:45 +00:00
|
|
|
s = BLF_height(style->widget.uifont_id, tmp);
|
2009-05-14 18:08:14 +00:00
|
|
|
return style->widget.points;
|
2011-06-07 15:33:01 +00:00
|
|
|
#else
|
2020-03-15 17:32:25 +11:00
|
|
|
const uiStyle *style = UI_style_get();
|
2014-11-09 21:20:40 +01:00
|
|
|
UI_fontstyle_set(&style->widget);
|
2011-06-07 15:33:01 +00:00
|
|
|
return style->widget.points * UI_DPI_FAC;
|
2011-01-13 04:53:55 +00:00
|
|
|
#endif
|
2009-05-14 18:08:14 +00:00
|
|
|
}
|
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
static void file_attribute_columns_widths(const FileSelectParams *params, FileLayout *layout)
|
2009-05-14 18:08:14 +00:00
|
|
|
{
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
FileAttributeColumn *columns = layout->attribute_columns;
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
const bool small_size = SMALL_SIZE_CHECK(params->thumbnail_size);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
const int pad = small_size ? 0 : ATTRIBUTE_COLUMN_PADDING * 2;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-09-08 00:12:26 +10:00
|
|
|
for (int i = 0; i < ATTRIBUTE_COLUMN_MAX; i++) {
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->attribute_columns[i].width = 0;
|
2009-05-14 18:08:14 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
/* Biggest possible reasonable values... */
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
columns[COLUMN_DATETIME].width = file_string_width(small_size ? "23/08/89" :
|
|
|
|
"23 Dec 6789, 23:59") +
|
|
|
|
pad;
|
2019-09-09 08:29:21 -07:00
|
|
|
columns[COLUMN_SIZE].width = file_string_width(small_size ? "98.7 M" : "098.7 MiB") + pad;
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
if (params->display == FILE_IMGDISPLAY) {
|
|
|
|
columns[COLUMN_NAME].width = ((float)params->thumbnail_size / 8.0f) * UI_UNIT_X;
|
|
|
|
}
|
|
|
|
/* Name column uses remaining width */
|
|
|
|
else {
|
|
|
|
int remwidth = layout->tile_w;
|
|
|
|
for (FileAttributeColumnType column_type = ATTRIBUTE_COLUMN_MAX - 1; column_type >= 0;
|
|
|
|
column_type--) {
|
|
|
|
if ((column_type == COLUMN_NAME) ||
|
|
|
|
!file_attribute_column_type_enabled(params, column_type)) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
remwidth -= columns[column_type].width;
|
|
|
|
}
|
|
|
|
columns[COLUMN_NAME].width = remwidth;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void file_attribute_columns_init(const FileSelectParams *params, FileLayout *layout)
|
|
|
|
{
|
|
|
|
file_attribute_columns_widths(params, layout);
|
|
|
|
|
|
|
|
layout->attribute_columns[COLUMN_NAME].name = N_("Name");
|
|
|
|
layout->attribute_columns[COLUMN_NAME].sort_type = FILE_SORT_ALPHA;
|
|
|
|
layout->attribute_columns[COLUMN_NAME].text_align = UI_STYLE_TEXT_LEFT;
|
|
|
|
layout->attribute_columns[COLUMN_DATETIME].name = N_("Date Modified");
|
|
|
|
layout->attribute_columns[COLUMN_DATETIME].sort_type = FILE_SORT_TIME;
|
|
|
|
layout->attribute_columns[COLUMN_DATETIME].text_align = UI_STYLE_TEXT_LEFT;
|
|
|
|
layout->attribute_columns[COLUMN_SIZE].name = N_("Size");
|
|
|
|
layout->attribute_columns[COLUMN_SIZE].sort_type = FILE_SORT_SIZE;
|
|
|
|
layout->attribute_columns[COLUMN_SIZE].text_align = UI_STYLE_TEXT_RIGHT;
|
2009-05-14 18:08:14 +00:00
|
|
|
}
|
2009-03-08 13:14:12 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
void ED_fileselect_init_layout(struct SpaceFile *sfile, ARegion *region)
|
2009-03-08 13:14:12 +00:00
|
|
|
{
|
2020-12-08 13:47:37 +01:00
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
2012-06-18 13:01:24 +00:00
|
|
|
FileLayout *layout = NULL;
|
2020-03-06 16:56:42 +01:00
|
|
|
View2D *v2d = ®ion->v2d;
|
2009-07-26 12:40:44 +00:00
|
|
|
int numfiles;
|
|
|
|
int textheight;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-03-05 10:29:10 +00:00
|
|
|
if (sfile->layout == NULL) {
|
2009-03-08 13:14:12 +00:00
|
|
|
sfile->layout = MEM_callocN(sizeof(struct FileLayout), "file_layout");
|
2014-04-01 11:34:00 +11:00
|
|
|
sfile->layout->dirty = true;
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
2014-04-01 11:34:00 +11:00
|
|
|
else if (sfile->layout->dirty == false) {
|
2011-10-05 12:20:38 +00:00
|
|
|
return;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
numfiles = filelist_files_ensure(sfile->files);
|
2011-04-10 09:37:04 +00:00
|
|
|
textheight = (int)file_font_pointsize();
|
2009-07-26 12:40:44 +00:00
|
|
|
layout = sfile->layout;
|
2009-08-20 18:39:25 +00:00
|
|
|
layout->textheight = textheight;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-03-08 13:14:12 +00:00
|
|
|
if (params->display == FILE_IMGDISPLAY) {
|
2015-05-01 01:49:58 +10:00
|
|
|
layout->prv_w = ((float)params->thumbnail_size / 20.0f) * UI_UNIT_X;
|
|
|
|
layout->prv_h = ((float)params->thumbnail_size / 20.0f) * UI_UNIT_Y;
|
2013-02-13 05:10:38 +00:00
|
|
|
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;
|
2012-06-18 13:01:24 +00:00
|
|
|
layout->tile_w = layout->prv_w + 2 * layout->prv_border_x;
|
|
|
|
layout->tile_h = layout->prv_h + 2 * layout->prv_border_y + textheight;
|
2012-09-15 11:48:20 +00:00
|
|
|
layout->width = (int)(BLI_rctf_size_x(&v2d->cur) - 2 * layout->tile_border_x);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->flow_columns = layout->width / (layout->tile_w + 2 * layout->tile_border_x);
|
|
|
|
layout->attribute_column_header_h = 0;
|
|
|
|
layout->offset_top = 0;
|
|
|
|
if (layout->flow_columns > 0) {
|
2020-05-13 12:50:14 +02:00
|
|
|
layout->rows = divide_ceil_u(numfiles, layout->flow_columns);
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2009-03-09 21:17:19 +00:00
|
|
|
else {
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->flow_columns = 1;
|
2020-05-13 12:50:14 +02:00
|
|
|
layout->rows = numfiles;
|
2009-03-09 21:17:19 +00:00
|
|
|
}
|
2012-06-18 13:01:24 +00:00
|
|
|
layout->height = sfile->layout->rows * (layout->tile_h + 2 * layout->tile_border_y) +
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->tile_border_y * 2 - layout->offset_top;
|
2009-07-26 12:40:44 +00:00
|
|
|
layout->flag = FILE_LAYOUT_VER;
|
2012-03-24 06:38:07 +00:00
|
|
|
}
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
else if (params->display == FILE_VERTICALDISPLAY) {
|
|
|
|
int rowcount;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->prv_w = ((float)params->thumbnail_size / 20.0f) * UI_UNIT_X;
|
|
|
|
layout->prv_h = ((float)params->thumbnail_size / 20.0f) * UI_UNIT_Y;
|
2013-02-13 05:10:38 +00:00
|
|
|
layout->tile_border_x = 0.4f * UI_UNIT_X;
|
|
|
|
layout->tile_border_y = 0.1f * UI_UNIT_Y;
|
2012-06-18 13:01:24 +00:00
|
|
|
layout->tile_h = textheight * 3 / 2;
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->width = (int)(BLI_rctf_size_x(&v2d->cur) - 2 * layout->tile_border_x);
|
|
|
|
layout->tile_w = layout->width;
|
|
|
|
layout->flow_columns = 1;
|
|
|
|
layout->attribute_column_header_h = layout->tile_h * 1.2f + 2 * layout->tile_border_y;
|
|
|
|
layout->offset_top = layout->attribute_column_header_h;
|
|
|
|
rowcount = (int)(BLI_rctf_size_y(&v2d->cur) - layout->offset_top - 2 * layout->tile_border_y) /
|
|
|
|
(layout->tile_h + 2 * layout->tile_border_y);
|
|
|
|
file_attribute_columns_init(params, layout);
|
|
|
|
|
|
|
|
layout->rows = MAX2(rowcount, numfiles);
|
|
|
|
BLI_assert(layout->rows != 0);
|
|
|
|
layout->height = sfile->layout->rows * (layout->tile_h + 2 * layout->tile_border_y) +
|
|
|
|
layout->tile_border_y * 2 + layout->offset_top;
|
|
|
|
layout->flag = FILE_LAYOUT_VER;
|
|
|
|
}
|
|
|
|
else if (params->display == FILE_HORIZONTALDISPLAY) {
|
|
|
|
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.4f * UI_UNIT_X;
|
|
|
|
layout->tile_border_y = 0.1f * UI_UNIT_Y;
|
|
|
|
layout->tile_h = textheight * 3 / 2;
|
|
|
|
layout->attribute_column_header_h = 0;
|
|
|
|
layout->offset_top = layout->attribute_column_header_h;
|
2012-09-15 11:48:20 +00:00
|
|
|
layout->height = (int)(BLI_rctf_size_y(&v2d->cur) - 2 * layout->tile_border_y);
|
2019-01-23 15:31:47 +01:00
|
|
|
/* Padding by full scrollbar H is too much, can overlap tile border Y. */
|
|
|
|
layout->rows = (layout->height - V2D_SCROLL_HEIGHT + layout->tile_border_y) /
|
|
|
|
(layout->tile_h + 2 * layout->tile_border_y);
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->tile_w = VERTLIST_MAJORCOLUMN_WIDTH;
|
|
|
|
file_attribute_columns_init(params, layout);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-04-22 09:19:45 +10:00
|
|
|
if (layout->rows > 0) {
|
2020-05-13 12:50:14 +02:00
|
|
|
layout->flow_columns = divide_ceil_u(numfiles, layout->rows);
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2009-03-09 21:17:19 +00:00
|
|
|
else {
|
2009-07-26 12:40:44 +00:00
|
|
|
layout->rows = 1;
|
2020-05-13 12:50:14 +02:00
|
|
|
layout->flow_columns = numfiles;
|
2009-03-09 21:17:19 +00:00
|
|
|
}
|
UI: File Browser Design Overhaul
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
2019-09-03 15:43:38 +02:00
|
|
|
layout->width = sfile->layout->flow_columns * (layout->tile_w + 2 * layout->tile_border_x) +
|
2012-06-18 13:01:24 +00:00
|
|
|
layout->tile_border_x * 2;
|
2009-07-26 12:40:44 +00:00
|
|
|
layout->flag = FILE_LAYOUT_HOR;
|
|
|
|
}
|
2014-04-01 11:34:00 +11:00
|
|
|
layout->dirty = false;
|
2009-03-08 13:14:12 +00:00
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
FileLayout *ED_fileselect_get_layout(struct SpaceFile *sfile, ARegion *region)
|
2009-03-08 13:14:12 +00:00
|
|
|
{
|
|
|
|
if (!sfile->layout) {
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_fileselect_init_layout(sfile, region);
|
2009-03-08 13:14:12 +00:00
|
|
|
}
|
|
|
|
return sfile->layout;
|
2009-03-11 23:22:07 +00:00
|
|
|
}
|
2009-07-07 07:25:44 +00:00
|
|
|
|
2020-09-12 17:55:36 +10:00
|
|
|
/**
|
|
|
|
* Support updating the directory even when this isn't the active space
|
|
|
|
* needed so RNA properties update function isn't context sensitive, see T70255.
|
|
|
|
*/
|
|
|
|
void ED_file_change_dir_ex(bContext *C, bScreen *screen, ScrArea *area)
|
2009-07-07 07:25:44 +00:00
|
|
|
{
|
2020-09-12 17:55:36 +10:00
|
|
|
/* May happen when manipulating non-active spaces. */
|
|
|
|
if (UNLIKELY(area->spacetype != SPACE_FILE)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
SpaceFile *sfile = area->spacedata.first;
|
2020-12-08 13:47:37 +01:00
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
|
|
|
if (params) {
|
2020-09-12 17:55:36 +10:00
|
|
|
wmWindowManager *wm = CTX_wm_manager(C);
|
|
|
|
Scene *scene = WM_windows_scene_get_from_screen(wm, screen);
|
|
|
|
if (LIKELY(scene != NULL)) {
|
|
|
|
ED_fileselect_clear(wm, scene, sfile);
|
|
|
|
}
|
2010-03-10 19:30:20 +00:00
|
|
|
|
2015-01-05 12:23:41 +01:00
|
|
|
/* Clear search string, it is very rare to want to keep that filter while changing dir,
|
|
|
|
* and usually very annoying to keep it actually! */
|
2020-12-08 13:47:37 +01:00
|
|
|
params->filter_search[0] = '\0';
|
|
|
|
params->active_file = -1;
|
2015-01-05 12:23:41 +01:00
|
|
|
|
2020-12-08 13:47:37 +01:00
|
|
|
if (!filelist_is_dir(sfile->files, params->dir)) {
|
|
|
|
BLI_strncpy(params->dir, filelist_dir(sfile->files), sizeof(params->dir));
|
2009-10-15 11:11:52 +00:00
|
|
|
/* could return but just refresh the current dir */
|
|
|
|
}
|
2020-12-08 13:47:37 +01:00
|
|
|
filelist_setdir(sfile->files, params->dir);
|
2015-07-11 05:20:35 +02:00
|
|
|
|
2019-04-22 09:19:45 +10:00
|
|
|
if (folderlist_clear_next(sfile)) {
|
2009-09-12 19:54:39 +00:00
|
|
|
folderlist_free(sfile->folders_next);
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2009-07-07 07:25:44 +00:00
|
|
|
|
2020-12-08 13:47:37 +01:00
|
|
|
folderlist_pushdir(sfile->folders_prev, params->dir);
|
2009-07-07 07:25:44 +00:00
|
|
|
|
2020-09-12 17:55:36 +10:00
|
|
|
file_draw_check_ex(C, area);
|
2009-07-07 07:25:44 +00:00
|
|
|
}
|
|
|
|
}
|
2009-07-10 17:05:04 +00:00
|
|
|
|
2020-09-12 17:55:36 +10:00
|
|
|
void ED_file_change_dir(bContext *C)
|
|
|
|
{
|
|
|
|
bScreen *screen = CTX_wm_screen(C);
|
|
|
|
ScrArea *area = CTX_wm_area(C);
|
|
|
|
ED_file_change_dir_ex(C, screen, area);
|
|
|
|
}
|
|
|
|
|
2012-06-17 14:16:26 +00:00
|
|
|
int file_select_match(struct SpaceFile *sfile, const char *pattern, char *matched_file)
|
2009-07-10 17:05:04 +00:00
|
|
|
{
|
|
|
|
int match = 0;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
int n = filelist_files_ensure(sfile->files);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-06-04 09:31:30 +02:00
|
|
|
/* select any file that matches the pattern, this includes exact match
|
2012-06-17 14:16:26 +00:00
|
|
|
* if the user selects a single file by entering the filename
|
|
|
|
*/
|
2020-09-09 18:41:07 +02:00
|
|
|
for (int i = 0; i < n; i++) {
|
|
|
|
FileDirEntry *file = filelist_file(sfile->files, i);
|
2019-01-15 23:24:20 +11:00
|
|
|
/* Do not check whether file is a file or dir here! Causes T44243
|
|
|
|
* (we do accept dirs at this stage). */
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
if (fnmatch(pattern, file->relpath, 0) == 0) {
|
|
|
|
filelist_entry_select_set(sfile->files, file, FILE_SEL_ADD, FILE_SEL_SELECTED, CHECK_ALL);
|
2012-06-17 14:16:26 +00:00
|
|
|
if (!match) {
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
BLI_strncpy(matched_file, file->relpath, FILE_MAX);
|
2009-07-10 17:05:04 +00:00
|
|
|
}
|
2013-11-22 14:35:34 +01:00
|
|
|
match++;
|
2009-07-10 17:05:04 +00:00
|
|
|
}
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-07-10 17:05:04 +00:00
|
|
|
return match;
|
|
|
|
}
|
2009-07-10 19:19:54 +00:00
|
|
|
|
2013-11-22 01:35:38 +01:00
|
|
|
int autocomplete_directory(struct bContext *C, char *str, void *UNUSED(arg_v))
|
2009-07-10 19:19:54 +00:00
|
|
|
{
|
2012-06-18 13:01:24 +00:00
|
|
|
SpaceFile *sfile = CTX_wm_space_file(C);
|
2013-11-19 16:31:48 +01:00
|
|
|
int match = AUTOCOMPLETE_NO_MATCH;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2010-05-07 23:34:03 +00:00
|
|
|
/* search if str matches the beginning of name */
|
2012-03-24 06:38:07 +00:00
|
|
|
if (str[0] && sfile->files) {
|
2010-05-07 23:34:03 +00:00
|
|
|
char dirname[FILE_MAX];
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2010-05-07 23:34:03 +00:00
|
|
|
DIR *dir;
|
|
|
|
struct dirent *de;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-10-21 02:13:36 +00:00
|
|
|
BLI_split_dir_part(str, dirname, sizeof(dirname));
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2010-05-07 23:34:03 +00:00
|
|
|
dir = opendir(dirname);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-03-24 06:38:07 +00:00
|
|
|
if (dir) {
|
2014-11-09 21:20:40 +01:00
|
|
|
AutoComplete *autocpl = UI_autocomplete_begin(str, FILE_MAX);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2010-05-07 23:34:03 +00:00
|
|
|
while ((de = readdir(dir)) != NULL) {
|
2015-01-26 16:58:02 +01:00
|
|
|
if (FILENAME_IS_CURRPAR(de->d_name)) {
|
2010-05-07 23:34:03 +00:00
|
|
|
/* pass */
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
char path[FILE_MAX];
|
2014-05-28 22:50:40 +06:00
|
|
|
BLI_stat_t status;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-02-13 03:21:27 +00:00
|
|
|
BLI_join_dirfile(path, sizeof(path), dirname, de->d_name);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-06-25 14:48:30 +00:00
|
|
|
if (BLI_stat(path, &status) == 0) {
|
2010-05-07 23:34:03 +00:00
|
|
|
if (S_ISDIR(status.st_mode)) { /* is subdir */
|
2014-11-09 21:20:40 +01:00
|
|
|
UI_autocomplete_update_name(autocpl, path);
|
2010-05-07 23:34:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
closedir(dir);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-11-09 21:20:40 +01:00
|
|
|
match = UI_autocomplete_end(autocpl, str);
|
2015-04-03 16:17:17 +02:00
|
|
|
if (match == AUTOCOMPLETE_FULL_MATCH) {
|
2020-04-07 12:02:21 +10:00
|
|
|
BLI_path_slash_ensure(str);
|
2010-05-07 23:34:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-11-22 01:35:38 +01:00
|
|
|
return match;
|
2010-05-07 23:34:03 +00:00
|
|
|
}
|
|
|
|
|
2013-11-22 01:35:38 +01:00
|
|
|
int autocomplete_file(struct bContext *C, char *str, void *UNUSED(arg_v))
|
2010-05-07 23:34:03 +00:00
|
|
|
{
|
2012-06-18 13:01:24 +00:00
|
|
|
SpaceFile *sfile = CTX_wm_space_file(C);
|
2013-11-19 16:31:48 +01:00
|
|
|
int match = AUTOCOMPLETE_NO_MATCH;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-07-10 19:19:54 +00:00
|
|
|
/* search if str matches the beginning of name */
|
2012-03-24 06:38:07 +00:00
|
|
|
if (str[0] && sfile->files) {
|
2014-11-09 21:20:40 +01:00
|
|
|
AutoComplete *autocpl = UI_autocomplete_begin(str, FILE_MAX);
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
int nentries = filelist_files_ensure(sfile->files);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-09-09 18:41:07 +02:00
|
|
|
for (int i = 0; i < nentries; i++) {
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
FileDirEntry *file = filelist_file(sfile->files, i);
|
|
|
|
UI_autocomplete_update_name(autocpl, file->relpath);
|
2009-07-10 19:19:54 +00:00
|
|
|
}
|
2014-11-09 21:20:40 +01:00
|
|
|
match = UI_autocomplete_end(autocpl, str);
|
2009-07-10 19:19:54 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-11-22 01:35:38 +01:00
|
|
|
return match;
|
2009-07-16 04:45:52 +00:00
|
|
|
}
|
2010-03-10 19:30:20 +00:00
|
|
|
|
2020-03-13 17:34:21 +01:00
|
|
|
void ED_fileselect_clear(wmWindowManager *wm, Scene *owner_scene, SpaceFile *sfile)
|
2010-03-10 19:30:20 +00:00
|
|
|
{
|
2020-09-30 20:09:02 +10:00
|
|
|
/* only NULL in rare cases - T29734. */
|
2011-12-31 03:52:07 +00:00
|
|
|
if (sfile->files) {
|
2020-03-13 17:34:21 +01:00
|
|
|
filelist_readjob_stop(wm, owner_scene);
|
2011-12-31 03:52:07 +00:00
|
|
|
filelist_freelib(sfile->files);
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
filelist_clear(sfile->files);
|
2011-12-31 03:52:07 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-08 13:47:37 +01:00
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
|
|
|
params->highlight_file = -1;
|
2013-03-15 19:56:29 +00:00
|
|
|
WM_main_add_notifier(NC_SPACE | ND_SPACE_FILE_LIST, NULL);
|
2010-03-10 19:30:20 +00:00
|
|
|
}
|
|
|
|
|
2020-03-13 17:34:21 +01:00
|
|
|
void ED_fileselect_exit(wmWindowManager *wm, Scene *owner_scene, SpaceFile *sfile)
|
2010-03-10 19:30:20 +00:00
|
|
|
{
|
2019-04-22 09:19:45 +10:00
|
|
|
if (!sfile) {
|
2012-03-24 06:38:07 +00:00
|
|
|
return;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2012-03-24 06:38:07 +00:00
|
|
|
if (sfile->op) {
|
2020-12-23 15:31:31 +01:00
|
|
|
wmWindow *temp_win = (wm->winactive && WM_window_is_temp_screen(wm->winactive)) ?
|
|
|
|
wm->winactive :
|
|
|
|
NULL;
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
if (temp_win) {
|
2019-11-15 10:05:02 -03:00
|
|
|
int win_size[2];
|
|
|
|
bool is_maximized;
|
|
|
|
|
|
|
|
ED_fileselect_window_params_get(temp_win, win_size, &is_maximized);
|
|
|
|
ED_fileselect_params_to_userdef(sfile, win_size, is_maximized);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ED_fileselect_params_to_userdef(sfile, NULL, false);
|
UI: Remember File Browser Display Options in Preferences
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
2019-09-30 18:54:11 +02:00
|
|
|
}
|
|
|
|
|
2013-03-15 19:56:29 +00:00
|
|
|
WM_event_fileselect_event(wm, sfile->op, EVT_FILESELECT_EXTERNAL_CANCEL);
|
2011-04-25 09:28:52 +00:00
|
|
|
sfile->op = NULL;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
folder_history_list_free(sfile);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2010-09-17 22:12:23 +00:00
|
|
|
if (sfile->files) {
|
2020-03-13 17:34:21 +01:00
|
|
|
ED_fileselect_clear(wm, owner_scene, sfile);
|
Final 'FileBrowser First Stage' merge.
It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
* Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
* Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
* Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
* Consequently, adds datablocks types filtering.
* Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB spared).
* Generates thumbnails way faster.
From code perspective, it:
* Is ready for asset engine needs (on data structure level in filebrowser's listing).
* Simplifies and makes 'generic' file listing much lighter.
* Separates file listing in three different aspects:
** 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
** 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
** 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
* Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
* Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (using the new 'notifier' timer to handle UI refresh, in similar way to jobs).
* Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
Revision: https://developer.blender.org/D1316
Thanks to Campbell & Sergey for the reviews. :)
2015-08-19 22:41:39 +02:00
|
|
|
filelist_free(sfile->files);
|
2010-09-17 22:12:23 +00:00
|
|
|
MEM_freeN(sfile->files);
|
2012-06-18 13:01:24 +00:00
|
|
|
sfile->files = NULL;
|
2010-09-17 22:12:23 +00:00
|
|
|
}
|
2019-03-05 16:17:09 +01:00
|
|
|
}
|
|
|
|
|
2019-06-15 09:24:38 +10:00
|
|
|
/**
|
|
|
|
* Helper used by both main update code, and smooth-scroll timer,
|
|
|
|
* to try to enable rename editing from #FileSelectParams.renamefile name.
|
|
|
|
*/
|
2019-03-05 16:17:09 +01:00
|
|
|
void file_params_renamefile_activate(SpaceFile *sfile, FileSelectParams *params)
|
|
|
|
{
|
2019-03-05 21:01:45 +01:00
|
|
|
BLI_assert(params->rename_flag != 0);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-03-05 21:01:45 +01:00
|
|
|
if ((params->rename_flag & (FILE_PARAMS_RENAME_ACTIVE | FILE_PARAMS_RENAME_POSTSCROLL_ACTIVE)) !=
|
|
|
|
0) {
|
|
|
|
return;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-03-05 16:17:09 +01:00
|
|
|
BLI_assert(params->renamefile[0] != '\0');
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-03-05 16:17:09 +01:00
|
|
|
const int idx = filelist_file_findpath(sfile->files, params->renamefile);
|
|
|
|
if (idx >= 0) {
|
|
|
|
FileDirEntry *file = filelist_file(sfile->files, idx);
|
2019-03-05 21:01:45 +01:00
|
|
|
BLI_assert(file != NULL);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-03-05 21:01:45 +01:00
|
|
|
if ((params->rename_flag & FILE_PARAMS_RENAME_PENDING) != 0) {
|
2019-03-05 16:17:09 +01:00
|
|
|
filelist_entry_select_set(sfile->files, file, FILE_SEL_ADD, FILE_SEL_EDITING, CHECK_ALL);
|
2019-03-05 21:01:45 +01:00
|
|
|
params->rename_flag = FILE_PARAMS_RENAME_ACTIVE;
|
|
|
|
}
|
|
|
|
else if ((params->rename_flag & FILE_PARAMS_RENAME_POSTSCROLL_PENDING) != 0) {
|
|
|
|
filelist_entry_select_set(sfile->files, file, FILE_SEL_ADD, FILE_SEL_HIGHLIGHTED, CHECK_ALL);
|
|
|
|
params->renamefile[0] = '\0';
|
|
|
|
params->rename_flag = FILE_PARAMS_RENAME_POSTSCROLL_ACTIVE;
|
2019-03-05 16:17:09 +01:00
|
|
|
}
|
|
|
|
}
|
2019-03-05 21:01:45 +01:00
|
|
|
/* File listing is now async, only reset renaming if matching entry is not found
|
|
|
|
* when file listing is not done. */
|
|
|
|
else if (filelist_is_ready(sfile->files)) {
|
2019-03-05 16:17:09 +01:00
|
|
|
params->renamefile[0] = '\0';
|
2019-03-05 21:01:45 +01:00
|
|
|
params->rename_flag = 0;
|
2019-03-05 16:17:09 +01:00
|
|
|
}
|
2010-03-10 19:30:20 +00:00
|
|
|
}
|
2020-11-02 21:47:08 +01:00
|
|
|
|
|
|
|
ScrArea *ED_fileselect_handler_area_find(const wmWindow *win, const wmOperator *file_operator)
|
|
|
|
{
|
|
|
|
bScreen *screen = WM_window_get_active_screen(win);
|
|
|
|
|
|
|
|
ED_screen_areas_iter (win, screen, area) {
|
|
|
|
if (area->spacetype == SPACE_FILE) {
|
|
|
|
SpaceFile *sfile = area->spacedata.first;
|
|
|
|
|
|
|
|
if (sfile->op == file_operator) {
|
|
|
|
return area;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|