2011-02-23 10:52:22 +00:00
|
|
|
/*
|
2008-12-14 11:25:00 +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 11:25:00 +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 11:25:00 +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 11:25:00 +00:00
|
|
|
#include <stdio.h>
|
2020-03-19 09:33:03 +01:00
|
|
|
#include <string.h>
|
2008-12-14 11:25:00 +00:00
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
|
|
#include "BLI_blenlib.h"
|
2011-01-07 18:36:47 +00:00
|
|
|
#include "BLI_utildefines.h"
|
2008-12-14 11:25:00 +00:00
|
|
|
|
2014-11-23 14:37:13 +01:00
|
|
|
#include "BKE_appdir.h"
|
2008-12-18 02:56:48 +00:00
|
|
|
#include "BKE_context.h"
|
2012-08-08 08:25:20 +00:00
|
|
|
#include "BKE_global.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "BKE_screen.h"
|
2008-12-14 11:25:00 +00:00
|
|
|
|
2013-03-07 02:44:55 +00:00
|
|
|
#include "RNA_access.h"
|
2020-12-14 13:50:36 +01:00
|
|
|
#include "RNA_define.h"
|
|
|
|
#include "RNA_enum_types.h"
|
2013-03-07 02:44:55 +00:00
|
|
|
|
|
|
|
#include "WM_api.h"
|
2017-11-13 19:43:34 +11:00
|
|
|
#include "WM_message.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "WM_types.h"
|
2013-03-07 02:44:55 +00:00
|
|
|
|
2009-01-06 14:42:54 +00:00
|
|
|
#include "ED_fileselect.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "ED_screen.h"
|
|
|
|
#include "ED_space_api.h"
|
2008-12-14 11:25:00 +00:00
|
|
|
|
2009-03-03 10:24:06 +00:00
|
|
|
#include "IMB_imbuf_types.h"
|
|
|
|
#include "IMB_thumbs.h"
|
2008-12-14 11:25:00 +00:00
|
|
|
|
|
|
|
#include "UI_resources.h"
|
|
|
|
#include "UI_view2d.h"
|
|
|
|
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "GPU_framebuffer.h"
|
2012-06-18 13:01:24 +00:00
|
|
|
#include "file_intern.h" /* own include */
|
2009-01-06 14:42:54 +00:00
|
|
|
#include "filelist.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "fsmenu.h"
|
2008-12-14 11:25:00 +00:00
|
|
|
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
static ARegion *file_ui_region_ensure(ScrArea *area, ARegion *region_prev)
|
|
|
|
{
|
|
|
|
ARegion *region;
|
|
|
|
|
|
|
|
if ((region = BKE_area_find_region_type(area, RGN_TYPE_UI)) != NULL) {
|
|
|
|
return region;
|
|
|
|
}
|
|
|
|
|
|
|
|
region = MEM_callocN(sizeof(ARegion), "execute region for file");
|
|
|
|
BLI_insertlinkafter(&area->regionbase, region_prev, region);
|
|
|
|
region->regiontype = RGN_TYPE_UI;
|
|
|
|
region->alignment = RGN_ALIGN_TOP;
|
|
|
|
region->flag = RGN_FLAG_DYNAMIC_SIZE;
|
|
|
|
|
|
|
|
return region;
|
|
|
|
}
|
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
static ARegion *file_execute_region_ensure(ScrArea *area, ARegion *region_prev)
|
2019-09-20 15:09:47 +02:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ARegion *region;
|
2019-09-20 15:09:47 +02:00
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
if ((region = BKE_area_find_region_type(area, RGN_TYPE_EXECUTE)) != NULL) {
|
2020-03-06 16:56:42 +01:00
|
|
|
return region;
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
region = MEM_callocN(sizeof(ARegion), "execute region for file");
|
2020-04-03 13:25:03 +02:00
|
|
|
BLI_insertlinkafter(&area->regionbase, region_prev, region);
|
2020-03-06 16:56:42 +01:00
|
|
|
region->regiontype = RGN_TYPE_EXECUTE;
|
|
|
|
region->alignment = RGN_ALIGN_BOTTOM;
|
|
|
|
region->flag = RGN_FLAG_DYNAMIC_SIZE;
|
2019-09-20 15:09:47 +02:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
return region;
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
static ARegion *file_tool_props_region_ensure(ScrArea *area, ARegion *region_prev)
|
2019-09-20 15:09:47 +02:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ARegion *region;
|
2019-09-20 15:09:47 +02:00
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
if ((region = BKE_area_find_region_type(area, RGN_TYPE_TOOL_PROPS)) != NULL) {
|
2020-03-06 16:56:42 +01:00
|
|
|
return region;
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* add subdiv level; after execute region */
|
2020-03-06 16:56:42 +01:00
|
|
|
region = MEM_callocN(sizeof(ARegion), "tool props for file");
|
2020-04-03 13:25:03 +02:00
|
|
|
BLI_insertlinkafter(&area->regionbase, region_prev, region);
|
2020-03-06 16:56:42 +01:00
|
|
|
region->regiontype = RGN_TYPE_TOOL_PROPS;
|
|
|
|
region->alignment = RGN_ALIGN_RIGHT;
|
2021-01-14 13:29:36 +01:00
|
|
|
region->flag = RGN_FLAG_HIDDEN;
|
2019-09-20 15:09:47 +02:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
return region;
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
|
2008-12-14 12:16:55 +00:00
|
|
|
/* ******************** default callbacks for file space ***************** */
|
2008-12-14 11:25:00 +00:00
|
|
|
|
2020-08-04 14:39:53 +02:00
|
|
|
static SpaceLink *file_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
|
2008-12-14 11:25:00 +00:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ARegion *region;
|
2008-12-14 11:25:00 +00:00
|
|
|
SpaceFile *sfile;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
sfile = MEM_callocN(sizeof(SpaceFile), "initfile");
|
|
|
|
sfile->spacetype = SPACE_FILE;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* header */
|
2020-03-06 16:56:42 +01:00
|
|
|
region = MEM_callocN(sizeof(ARegion), "header for file");
|
|
|
|
BLI_addtail(&sfile->regionbase, region);
|
|
|
|
region->regiontype = RGN_TYPE_HEADER;
|
2018-12-14 09:47:10 +11:00
|
|
|
/* Ignore user preference "USER_HEADER_BOTTOM" here (always show top for new types). */
|
2020-03-06 16:56:42 +01:00
|
|
|
region->alignment = RGN_ALIGN_TOP;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-09-29 20:16:19 +02:00
|
|
|
/* Tools region */
|
2020-03-06 16:56:42 +01:00
|
|
|
region = MEM_callocN(sizeof(ARegion), "tools region for file");
|
|
|
|
BLI_addtail(&sfile->regionbase, region);
|
|
|
|
region->regiontype = RGN_TYPE_TOOLS;
|
|
|
|
region->alignment = RGN_ALIGN_LEFT;
|
2019-09-29 20:16:19 +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
|
|
|
/* ui list region */
|
2020-03-06 16:56:42 +01:00
|
|
|
region = MEM_callocN(sizeof(ARegion), "ui region for file");
|
|
|
|
BLI_addtail(&sfile->regionbase, region);
|
|
|
|
region->regiontype = RGN_TYPE_UI;
|
|
|
|
region->alignment = RGN_ALIGN_TOP;
|
|
|
|
region->flag |= RGN_FLAG_DYNAMIC_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
|
|
|
|
2019-09-20 17:36:38 +02:00
|
|
|
/* Tool props and execute region are added as needed, see file_refresh(). */
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2015-11-28 17:14:45 +01:00
|
|
|
/* main region */
|
2020-03-06 16:56:42 +01:00
|
|
|
region = MEM_callocN(sizeof(ARegion), "main region for file");
|
|
|
|
BLI_addtail(&sfile->regionbase, region);
|
|
|
|
region->regiontype = RGN_TYPE_WINDOW;
|
|
|
|
region->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM);
|
|
|
|
region->v2d.align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_POS_Y);
|
|
|
|
region->v2d.keepzoom = (V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y | V2D_LIMITZOOM | V2D_KEEPASPECT);
|
|
|
|
region->v2d.keeptot = V2D_KEEPTOT_STRICT;
|
|
|
|
region->v2d.minzoom = region->v2d.maxzoom = 1.0f;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
return (SpaceLink *)sfile;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* not spacelink itself */
|
|
|
|
static void file_free(SpaceLink *sl)
|
2018-06-04 09:31:30 +02:00
|
|
|
{
|
2012-06-18 13:01:24 +00:00
|
|
|
SpaceFile *sfile = (SpaceFile *)sl;
|
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
|
|
|
BLI_assert(sfile->previews_timer == NULL);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-03-24 06:38:07 +00:00
|
|
|
if (sfile->files) {
|
2010-03-10 19:30:20 +00:00
|
|
|
/* XXX would need to do thumbnails_stop here, but no context available */
|
2009-09-12 19:54:39 +00:00
|
|
|
filelist_freelib(sfile->files);
|
2009-01-06 19:22:29 +00:00
|
|
|
filelist_free(sfile->files);
|
|
|
|
MEM_freeN(sfile->files);
|
2012-06-18 13:01:24 +00:00
|
|
|
sfile->files = NULL;
|
2009-01-06 19:22:29 +00:00
|
|
|
}
|
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
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
MEM_SAFE_FREE(sfile->params);
|
|
|
|
MEM_SAFE_FREE(sfile->asset_params);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-03-08 13:14:12 +00:00
|
|
|
if (sfile->layout) {
|
|
|
|
MEM_freeN(sfile->layout);
|
|
|
|
sfile->layout = NULL;
|
|
|
|
}
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2009-02-17 13:11:09 +00:00
|
|
|
/* spacetype; init callback, area size changes, screen set, etc */
|
2020-04-03 13:25:03 +02:00
|
|
|
static void file_init(wmWindowManager *UNUSED(wm), ScrArea *area)
|
2009-01-06 19:22:29 +00:00
|
|
|
{
|
2020-04-03 13:25:03 +02:00
|
|
|
SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
|
2015-02-16 15:48:37 +01:00
|
|
|
|
2019-04-22 09:19:45 +10:00
|
|
|
if (sfile->layout) {
|
2014-04-01 11:34:00 +11:00
|
|
|
sfile->layout->dirty = true;
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
static void file_exit(wmWindowManager *wm, ScrArea *area)
|
2013-03-15 19:56:29 +00:00
|
|
|
{
|
2020-04-03 13:25:03 +02:00
|
|
|
SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
|
2013-03-15 19:56:29 +00: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
|
|
|
if (sfile->previews_timer) {
|
|
|
|
WM_event_remove_timer_notifier(wm, NULL, sfile->previews_timer);
|
|
|
|
sfile->previews_timer = NULL;
|
|
|
|
}
|
|
|
|
|
2020-03-13 17:34:21 +01:00
|
|
|
ED_fileselect_exit(wm, NULL, sfile);
|
2013-03-15 19:56:29 +00:00
|
|
|
}
|
2009-02-17 13:11:09 +00:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
static SpaceLink *file_duplicate(SpaceLink *sl)
|
|
|
|
{
|
2012-06-18 13:01:24 +00:00
|
|
|
SpaceFile *sfileo = (SpaceFile *)sl;
|
|
|
|
SpaceFile *sfilen = MEM_dupallocN(sl);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* clear or remove stuff from old */
|
2009-02-17 13:11:09 +00:00
|
|
|
sfilen->op = NULL; /* file window doesn't own operators */
|
2009-01-06 19:22:29 +00:00
|
|
|
|
2018-02-09 16:13:13 +01:00
|
|
|
sfilen->previews_timer = NULL;
|
|
|
|
sfilen->smoothscroll_timer = NULL;
|
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
FileSelectParams *active_params_old = ED_fileselect_get_active_params(sfileo);
|
|
|
|
if (active_params_old) {
|
|
|
|
sfilen->files = filelist_new(active_params_old->type);
|
|
|
|
filelist_setdir(sfilen->files, active_params_old->dir);
|
|
|
|
}
|
|
|
|
|
2010-03-10 19:30:20 +00:00
|
|
|
if (sfileo->params) {
|
2012-06-18 13:01:24 +00:00
|
|
|
sfilen->params = MEM_dupallocN(sfileo->params);
|
2010-03-10 19:30:20 +00:00
|
|
|
}
|
2020-12-14 13:50:36 +01:00
|
|
|
if (sfileo->asset_params) {
|
|
|
|
sfilen->asset_params = MEM_dupallocN(sfileo->asset_params);
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2009-07-07 07:25:44 +00:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
sfilen->folder_histories = folder_history_list_duplicate(&sfileo->folder_histories);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2009-03-08 13:14:12 +00:00
|
|
|
if (sfileo->layout) {
|
2012-06-18 13:01:24 +00:00
|
|
|
sfilen->layout = MEM_dupallocN(sfileo->layout);
|
2009-03-08 13:14:12 +00:00
|
|
|
}
|
2008-12-14 12:16:55 +00:00
|
|
|
return (SpaceLink *)sfilen;
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2019-09-20 15:09:47 +02:00
|
|
|
static void file_ensure_valid_region_state(bContext *C,
|
|
|
|
wmWindowManager *wm,
|
|
|
|
wmWindow *win,
|
2020-04-03 13:25:03 +02:00
|
|
|
ScrArea *area,
|
2019-09-20 15:09:47 +02:00
|
|
|
SpaceFile *sfile,
|
|
|
|
FileSelectParams *params)
|
|
|
|
{
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
ARegion *region_tools = BKE_area_find_region_type(area, RGN_TYPE_TOOLS);
|
2020-08-01 13:02:21 +10:00
|
|
|
bool needs_init = false; /* To avoid multiple ED_area_init() calls. */
|
2019-09-20 15:09:47 +02:00
|
|
|
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
BLI_assert(region_tools);
|
|
|
|
|
|
|
|
if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
|
2021-01-14 13:29:36 +01:00
|
|
|
file_tool_props_region_ensure(area, region_tools);
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
|
2021-01-14 13:29:36 +01:00
|
|
|
ARegion *region_execute = BKE_area_find_region_type(area, RGN_TYPE_EXECUTE);
|
|
|
|
if (region_execute) {
|
|
|
|
ED_region_remove(C, area, region_execute);
|
|
|
|
needs_init = true;
|
|
|
|
}
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
ARegion *region_ui = BKE_area_find_region_type(area, RGN_TYPE_UI);
|
|
|
|
if (region_ui) {
|
|
|
|
ED_region_remove(C, area, region_ui);
|
|
|
|
needs_init = true;
|
|
|
|
}
|
|
|
|
}
|
2019-09-20 15:09:47 +02:00
|
|
|
/* If there's an file-operation, ensure we have the option and execute region */
|
2021-02-08 16:09:35 +01:00
|
|
|
else if (sfile->op && !BKE_area_find_region_type(area, RGN_TYPE_TOOL_PROPS)) {
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
ARegion *region_ui = file_ui_region_ensure(area, region_tools);
|
|
|
|
ARegion *region_execute = file_execute_region_ensure(area, region_ui);
|
|
|
|
ARegion *region_props = file_tool_props_region_ensure(area, region_execute);
|
2019-09-20 15:09:47 +02:00
|
|
|
|
|
|
|
if (params->flag & FILE_HIDE_TOOL_PROPS) {
|
2020-04-03 12:51:03 +02:00
|
|
|
region_props->flag |= RGN_FLAG_HIDDEN;
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
else {
|
2020-04-03 12:51:03 +02:00
|
|
|
region_props->flag &= ~RGN_FLAG_HIDDEN;
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
needs_init = true;
|
|
|
|
}
|
|
|
|
/* If there's _no_ file-operation, ensure we _don't_ have the option and execute region */
|
2021-02-08 16:09:35 +01:00
|
|
|
else if (!sfile->op) {
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
ARegion *region_props = BKE_area_find_region_type(area, RGN_TYPE_TOOL_PROPS);
|
|
|
|
ARegion *region_execute = BKE_area_find_region_type(area, RGN_TYPE_EXECUTE);
|
|
|
|
ARegion *region_ui = file_ui_region_ensure(area, region_tools);
|
|
|
|
UNUSED_VARS(region_ui);
|
2019-09-20 15:09:47 +02:00
|
|
|
|
2021-01-14 13:29:36 +01:00
|
|
|
if (region_execute) {
|
|
|
|
ED_region_remove(C, area, region_execute);
|
|
|
|
needs_init = true;
|
|
|
|
}
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
if (region_props) {
|
|
|
|
ED_region_remove(C, area, region_props);
|
|
|
|
needs_init = true;
|
|
|
|
}
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (needs_init) {
|
2020-08-01 13:02:21 +10:00
|
|
|
ED_area_init(wm, win, area);
|
2019-09-20 15:09:47 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
/**
|
|
|
|
* Tag the space to recreate the file-list.
|
|
|
|
*/
|
|
|
|
static void file_tag_reset_list(ScrArea *area, SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
filelist_tag_force_reset(sfile->files);
|
|
|
|
ED_area_tag_refresh(area);
|
|
|
|
}
|
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
static void file_refresh(const bContext *C, ScrArea *area)
|
2009-06-29 20:23:40 +00:00
|
|
|
{
|
2013-03-15 19:56:29 +00:00
|
|
|
wmWindowManager *wm = CTX_wm_manager(C);
|
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
|
|
|
wmWindow *win = CTX_wm_window(C);
|
2012-06-18 13:01:24 +00:00
|
|
|
SpaceFile *sfile = CTX_wm_space_file(C);
|
2020-12-08 13:47:37 +01:00
|
|
|
FileSelectParams *params = ED_fileselect_ensure_active_params(sfile);
|
2020-12-14 13:50:36 +01:00
|
|
|
FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile);
|
2015-02-11 00:09:45 +01:00
|
|
|
struct FSMenu *fsmenu = ED_fsmenu_get();
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
fileselect_refresh_params(sfile);
|
|
|
|
folder_history_list_ensure_for_active_browse_mode(sfile);
|
|
|
|
|
|
|
|
if (sfile->files && (sfile->tags & FILE_TAG_REBUILD_MAIN_FILES) &&
|
|
|
|
filelist_needs_reset_on_main_changes(sfile->files)) {
|
|
|
|
filelist_tag_force_reset(sfile->files);
|
2014-12-31 20:13:21 +01:00
|
|
|
}
|
2020-12-14 13:50:36 +01:00
|
|
|
sfile->tags &= ~FILE_TAG_REBUILD_MAIN_FILES;
|
|
|
|
|
2009-06-29 20:23:40 +00:00
|
|
|
if (!sfile->files) {
|
2009-09-12 19:54:39 +00:00
|
|
|
sfile->files = filelist_new(params->type);
|
File Browser Arrow Keys Navigation
Adds support for selecting/deselecting files in File Browser using the
arrow keys. All directions (up, down, left, right) are possible.
When to Select, When to Deselect?
Standard behaviour is selecting, however if we move into a block of
already selected files (meaning 2+ files are selected) we start
deselecting
Possible Selection Methods
Simple selection (arrow-key): All other files are deselected
Expand selection (Shift+arrow key): Add to/remove from existing
selection
ill-Expand selection (Ctrl+Shift+arrow key): Add to/remove from existing
selection and fill everything in-between
From which file do we start navigating?
From each available selection method (Mouse-, Walk-, All-, Border
Select), we use the last selected file. If there's no selection at all
we use the first (down/right arrow) or last (up/left arrow) file.
(Ideally, the view would automatically be set to the new selection, but
this behaviour overlaps with an other patch I've been working on, so
prefer to do that separately)
(Also tweaks color for highlighted file for better feedback)
D1297, Review done by @campbellbarton, thx a lot :)
2015-06-11 17:20:29 +02:00
|
|
|
params->highlight_file = -1; /* added this so it opens nicer (ton) */
|
2009-06-29 20:23:40 +00:00
|
|
|
}
|
2020-12-14 13:50:36 +01:00
|
|
|
filelist_settype(sfile->files, params->type);
|
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_setdir(sfile->files, params->dir);
|
|
|
|
filelist_setrecursion(sfile->files, params->recursion_level);
|
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
|
|
|
filelist_setsorting(sfile->files, params->sort, params->flag & FILE_SORT_INVERT);
|
2020-12-14 13:50:36 +01:00
|
|
|
filelist_setlibrary(sfile->files, asset_params ? &asset_params->asset_library : NULL);
|
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
|
|
|
filelist_setfilter_options(
|
|
|
|
sfile->files,
|
|
|
|
(params->flag & FILE_FILTER) != 0,
|
|
|
|
(params->flag & FILE_HIDE_DOT) != 0,
|
|
|
|
true, /* Just always hide parent, prefer to not add an extra user option for this. */
|
|
|
|
params->filter,
|
|
|
|
params->filter_id,
|
2020-12-14 13:50:36 +01:00
|
|
|
(params->flag & FILE_ASSETS_ONLY) != 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
|
|
|
params->filter_glob,
|
|
|
|
params->filter_search);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2015-02-11 00:09:45 +01:00
|
|
|
/* Update the active indices of bookmarks & co. */
|
|
|
|
sfile->systemnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_SYSTEM, params->dir);
|
|
|
|
sfile->system_bookmarknr = fsmenu_get_active_indices(
|
|
|
|
fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, params->dir);
|
|
|
|
sfile->bookmarknr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_BOOKMARKS, params->dir);
|
|
|
|
sfile->recentnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_RECENT, params->dir);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
if (filelist_needs_force_reset(sfile->files)) {
|
2020-03-13 17:34:21 +01:00
|
|
|
filelist_readjob_stop(wm, CTX_data_scene(C));
|
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);
|
2014-12-31 20:13:21 +01:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
if (filelist_needs_reading(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
|
|
|
if (!filelist_pending(sfile->files)) {
|
|
|
|
filelist_readjob_start(sfile->files, C);
|
2012-03-24 06:38:07 +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
|
|
|
filelist_sort(sfile->files);
|
2014-12-31 20:13:21 +01:00
|
|
|
filelist_filter(sfile->files);
|
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
|
|
|
if (params->display == FILE_IMGDISPLAY) {
|
|
|
|
filelist_cache_previews_set(sfile->files, true);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
filelist_cache_previews_set(sfile->files, false);
|
|
|
|
if (sfile->previews_timer) {
|
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
|
|
|
WM_event_remove_timer_notifier(wm, win, sfile->previews_timer);
|
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
|
|
|
sfile->previews_timer = NULL;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
|
|
|
|
2019-03-05 21:01:45 +01:00
|
|
|
if (params->rename_flag != 0) {
|
2019-03-05 16:17:09 +01:00
|
|
|
file_params_renamefile_activate(sfile, params);
|
2009-09-13 09:41:00 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-12-31 20:13:21 +01:00
|
|
|
if (sfile->layout) {
|
|
|
|
sfile->layout->dirty = true;
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
/* Might be called with NULL area, see file_main_region_draw() below. */
|
|
|
|
if (area) {
|
|
|
|
file_ensure_valid_region_state((bContext *)C, wm, win, area, sfile, params);
|
2019-09-20 12:03:32 +02:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-04-03 13:25:03 +02:00
|
|
|
ED_area_tag_redraw(area);
|
2009-06-29 20:23:40 +00:00
|
|
|
}
|
|
|
|
|
2021-01-19 12:59:00 +11:00
|
|
|
static void file_listener(const wmSpaceTypeListenerParams *params)
|
2009-06-29 20:23:40 +00:00
|
|
|
{
|
2021-01-18 17:28:47 -06:00
|
|
|
ScrArea *area = params->area;
|
|
|
|
wmNotifier *wmn = params->notifier;
|
2020-04-03 13:25:03 +02:00
|
|
|
SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-06-29 20:23:40 +00:00
|
|
|
/* context changes */
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (wmn->category) {
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case NC_SPACE:
|
2009-06-29 20:23:40 +00:00
|
|
|
switch (wmn->data) {
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case ND_SPACE_FILE_LIST:
|
2020-04-03 13:25:03 +02:00
|
|
|
ED_area_tag_refresh(area);
|
2009-06-29 20:23:40 +00:00
|
|
|
break;
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case ND_SPACE_FILE_PARAMS:
|
2020-04-03 13:25:03 +02:00
|
|
|
ED_area_tag_refresh(area);
|
2009-06-29 20:23:40 +00:00
|
|
|
break;
|
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
|
|
|
case ND_SPACE_FILE_PREVIEW:
|
2015-08-23 20:27:59 +02:00
|
|
|
if (sfile->files && filelist_cache_previews_update(sfile->files)) {
|
2020-04-03 13:25:03 +02:00
|
|
|
ED_area_tag_refresh(area);
|
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
|
|
|
}
|
|
|
|
break;
|
2020-12-15 16:58:30 +01:00
|
|
|
case ND_SPACE_ASSET_PARAMS:
|
|
|
|
if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
|
|
|
|
ED_area_tag_refresh(area);
|
|
|
|
}
|
|
|
|
break;
|
2009-06-29 20:23:40 +00:00
|
|
|
}
|
|
|
|
break;
|
2020-12-14 13:50:36 +01:00
|
|
|
case NC_ASSET: {
|
|
|
|
if (sfile->files && filelist_needs_reset_on_main_changes(sfile->files)) {
|
|
|
|
/* Full refresh of the file list if local asset data was changed. Refreshing this view is
|
|
|
|
* cheap and users expect this to be updated immediately. */
|
|
|
|
file_tag_reset_list(area, sfile);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2009-06-29 20:23:40 +00:00
|
|
|
}
|
|
|
|
}
|
2008-12-14 11:25:00 +00:00
|
|
|
|
|
|
|
/* add handlers, stuff you only do once or on area/region changes */
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_main_region_init(wmWindowManager *wm, ARegion *region)
|
2008-12-14 11:25:00 +00:00
|
|
|
{
|
2009-09-17 21:36:02 +00:00
|
|
|
wmKeyMap *keymap;
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
UI_view2d_region_reinit(®ion->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2009-07-05 22:26:43 +00:00
|
|
|
/* own keymaps */
|
2018-08-31 13:36:14 +10:00
|
|
|
keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
|
2020-03-06 16:56:42 +01:00
|
|
|
WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap);
|
2009-07-05 22:26:43 +00:00
|
|
|
|
2018-08-31 13:36:14 +10:00
|
|
|
keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Main", SPACE_FILE, 0);
|
2020-03-06 16:56:42 +01:00
|
|
|
WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap);
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2021-01-19 12:59:00 +11:00
|
|
|
static void file_main_region_listener(const wmRegionListenerParams *params)
|
2009-07-26 12:40:44 +00:00
|
|
|
{
|
2021-01-18 17:28:47 -06:00
|
|
|
ARegion *region = params->region;
|
|
|
|
wmNotifier *wmn = params->notifier;
|
|
|
|
|
2009-07-26 12:40:44 +00:00
|
|
|
/* context changes */
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (wmn->category) {
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case NC_SPACE:
|
2009-07-26 12:40:44 +00:00
|
|
|
switch (wmn->data) {
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case ND_SPACE_FILE_LIST:
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_tag_redraw(region);
|
2009-07-26 12:40:44 +00:00
|
|
|
break;
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case ND_SPACE_FILE_PARAMS:
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_tag_redraw(region);
|
2009-07-26 12:40:44 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2021-01-21 21:40:25 +01:00
|
|
|
case NC_ID:
|
|
|
|
if (ELEM(wmn->action, NA_RENAME)) {
|
|
|
|
/* In case the filelist shows ID names. */
|
|
|
|
ED_region_tag_redraw(region);
|
|
|
|
}
|
|
|
|
break;
|
2009-07-26 12:40:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-19 12:59:00 +11:00
|
|
|
static void file_main_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
|
2017-11-13 19:43:34 +11:00
|
|
|
{
|
2021-01-18 17:28:47 -06:00
|
|
|
struct wmMsgBus *mbus = params->message_bus;
|
|
|
|
bScreen *screen = params->screen;
|
|
|
|
ScrArea *area = params->area;
|
|
|
|
ARegion *region = params->region;
|
2020-04-03 13:25:03 +02:00
|
|
|
SpaceFile *sfile = area->spacedata.first;
|
2021-01-18 17:28:47 -06:00
|
|
|
|
|
|
|
FileSelectParams *file_params = ED_fileselect_ensure_active_params(sfile);
|
2017-11-13 19:43:34 +11:00
|
|
|
/* This is a bit odd that a region owns the subscriber for an area,
|
|
|
|
* keep for now since all subscribers for WM are regions.
|
|
|
|
* May be worth re-visiting later. */
|
|
|
|
wmMsgSubscribeValue msg_sub_value_area_tag_refresh = {
|
2020-03-06 16:56:42 +01:00
|
|
|
.owner = region,
|
2020-04-03 13:25:03 +02:00
|
|
|
.user_data = area,
|
2017-11-13 19:43:34 +11:00
|
|
|
.notify = ED_area_do_msg_notify_tag_refresh,
|
|
|
|
};
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-01-29 12:50:15 +01:00
|
|
|
/* SpaceFile itself. */
|
|
|
|
{
|
|
|
|
PointerRNA ptr;
|
|
|
|
RNA_pointer_create(&screen->id, &RNA_SpaceFileBrowser, sfile, &ptr);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-01-29 12:50:15 +01:00
|
|
|
/* All properties for this space type. */
|
|
|
|
WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2017-11-13 19:43:34 +11:00
|
|
|
/* FileSelectParams */
|
|
|
|
{
|
|
|
|
PointerRNA ptr;
|
2021-01-18 17:28:47 -06:00
|
|
|
RNA_pointer_create(&screen->id, &RNA_FileSelectParams, file_params, &ptr);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2017-11-13 19:43:34 +11:00
|
|
|
/* All properties for this space type. */
|
|
|
|
WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
static bool file_main_region_needs_refresh_before_draw(SpaceFile *sfile)
|
|
|
|
{
|
|
|
|
/* Needed, because filelist is not initialized on loading */
|
|
|
|
if (!sfile->files || filelist_needs_reading(sfile->files)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* File reading tagged the space because main data changed that may require a filelist reset. */
|
|
|
|
if (filelist_needs_reset_on_main_changes(sfile->files) &&
|
|
|
|
(sfile->tags & FILE_TAG_REBUILD_MAIN_FILES)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_main_region_draw(const bContext *C, ARegion *region)
|
2008-12-14 11:25:00 +00:00
|
|
|
{
|
|
|
|
/* draw entirely, view changes should be handled here */
|
2012-06-18 13:01:24 +00:00
|
|
|
SpaceFile *sfile = CTX_wm_space_file(C);
|
2020-12-08 13:47:37 +01:00
|
|
|
FileSelectParams *params = ED_fileselect_ensure_active_params(sfile);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
View2D *v2d = ®ion->v2d;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
if (file_main_region_needs_refresh_before_draw(sfile)) {
|
2009-07-26 12:40:44 +00:00
|
|
|
file_refresh(C, NULL);
|
2019-04-22 09:19:45 +10:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* clear and setup matrix */
|
2020-08-23 11:11:27 +02:00
|
|
|
UI_ThemeClearColor(TH_BACK);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-02-17 13:11:09 +00:00
|
|
|
/* Allow dynamically sliders to be set, saves notifiers etc. */
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-08-26 06:54:05 +00:00
|
|
|
if (params->display == FILE_IMGDISPLAY) {
|
2009-02-17 13:11:09 +00:00
|
|
|
v2d->scroll = V2D_SCROLL_RIGHT;
|
2009-03-09 09:15:23 +00:00
|
|
|
v2d->keepofs &= ~V2D_LOCKOFS_Y;
|
|
|
|
v2d->keepofs |= V2D_LOCKOFS_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
|
|
|
else if (params->display == FILE_VERTICALDISPLAY) {
|
|
|
|
v2d->scroll = V2D_SCROLL_RIGHT;
|
|
|
|
v2d->keepofs &= ~V2D_LOCKOFS_Y;
|
|
|
|
v2d->keepofs |= V2D_LOCKOFS_X;
|
|
|
|
}
|
2009-03-09 09:15:23 +00:00
|
|
|
else {
|
2009-02-17 13:11:09 +00:00
|
|
|
v2d->scroll = V2D_SCROLL_BOTTOM;
|
2009-03-09 09:15:23 +00:00
|
|
|
v2d->keepofs &= ~V2D_LOCKOFS_X;
|
|
|
|
v2d->keepofs |= V2D_LOCKOFS_Y;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2010-12-20 18:29:32 +00:00
|
|
|
/* XXX this happens on scaling down Screen (like from startup.blend) */
|
2018-09-27 15:35:22 +02:00
|
|
|
/* view2d has no type specific for filewindow case, which doesn't scroll vertically */
|
2012-03-24 06:38:07 +00:00
|
|
|
if (v2d->cur.ymax < 0) {
|
2010-12-20 18:29:32 +00:00
|
|
|
v2d->cur.ymin -= v2d->cur.ymax;
|
2012-03-24 02:51:46 +00:00
|
|
|
v2d->cur.ymax = 0;
|
2010-12-20 18:29:32 +00:00
|
|
|
}
|
2009-03-09 09:15:23 +00:00
|
|
|
}
|
|
|
|
/* v2d has initialized flag, so this call will only set the mask correct */
|
2020-03-06 16:56:42 +01:00
|
|
|
UI_view2d_region_reinit(v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-01-28 11:27:25 +00:00
|
|
|
/* sets tile/border settings in sfile */
|
2020-03-06 16:56:42 +01:00
|
|
|
file_calc_previews(C, region);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-02-17 13:11:09 +00:00
|
|
|
/* set view */
|
2010-10-14 01:22:14 +00:00
|
|
|
UI_view2d_view_ortho(v2d);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-01-28 11:27:25 +00:00
|
|
|
/* on first read, find active file */
|
File Browser Arrow Keys Navigation
Adds support for selecting/deselecting files in File Browser using the
arrow keys. All directions (up, down, left, right) are possible.
When to Select, When to Deselect?
Standard behaviour is selecting, however if we move into a block of
already selected files (meaning 2+ files are selected) we start
deselecting
Possible Selection Methods
Simple selection (arrow-key): All other files are deselected
Expand selection (Shift+arrow key): Add to/remove from existing
selection
ill-Expand selection (Ctrl+Shift+arrow key): Add to/remove from existing
selection and fill everything in-between
From which file do we start navigating?
From each available selection method (Mouse-, Walk-, All-, Border
Select), we use the last selected file. If there's no selection at all
we use the first (down/right arrow) or last (up/left arrow) file.
(Ideally, the view would automatically be set to the new selection, but
this behaviour overlaps with an other patch I've been working on, so
prefer to do that separately)
(Also tweaks color for highlighted file for better feedback)
D1297, Review done by @campbellbarton, thx a lot :)
2015-06-11 17:20:29 +02:00
|
|
|
if (params->highlight_file == -1) {
|
2012-06-18 13:01:24 +00:00
|
|
|
wmEvent *event = CTX_wm_window(C)->eventstate;
|
2020-03-06 16:56:42 +01:00
|
|
|
file_highlight_set(sfile, region, event->x, event->y);
|
2009-01-28 11:27:25 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
if (!file_draw_hint_if_invalid(sfile, region)) {
|
|
|
|
file_draw_list(C, region);
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* reset view matrix */
|
|
|
|
UI_view2d_view_restore(C);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-01-06 14:42:54 +00:00
|
|
|
/* scrollers */
|
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
|
|
|
rcti view_rect;
|
|
|
|
ED_fileselect_layout_maskrect(sfile->layout, v2d, &view_rect);
|
2020-06-22 21:44:18 +02:00
|
|
|
UI_view2d_scrollers_draw(v2d, &view_rect);
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2011-02-14 17:55:27 +00:00
|
|
|
static void file_operatortypes(void)
|
2008-12-14 11:25:00 +00:00
|
|
|
{
|
2009-02-14 14:25:48 +00:00
|
|
|
WM_operatortype_append(FILE_OT_select);
|
File Browser Arrow Keys Navigation
Adds support for selecting/deselecting files in File Browser using the
arrow keys. All directions (up, down, left, right) are possible.
When to Select, When to Deselect?
Standard behaviour is selecting, however if we move into a block of
already selected files (meaning 2+ files are selected) we start
deselecting
Possible Selection Methods
Simple selection (arrow-key): All other files are deselected
Expand selection (Shift+arrow key): Add to/remove from existing
selection
ill-Expand selection (Ctrl+Shift+arrow key): Add to/remove from existing
selection and fill everything in-between
From which file do we start navigating?
From each available selection method (Mouse-, Walk-, All-, Border
Select), we use the last selected file. If there's no selection at all
we use the first (down/right arrow) or last (up/left arrow) file.
(Ideally, the view would automatically be set to the new selection, but
this behaviour overlaps with an other patch I've been working on, so
prefer to do that separately)
(Also tweaks color for highlighted file for better feedback)
D1297, Review done by @campbellbarton, thx a lot :)
2015-06-11 17:20:29 +02:00
|
|
|
WM_operatortype_append(FILE_OT_select_walk);
|
2018-07-03 15:44:56 +02:00
|
|
|
WM_operatortype_append(FILE_OT_select_all);
|
2018-10-05 10:27:04 +10:00
|
|
|
WM_operatortype_append(FILE_OT_select_box);
|
2009-02-14 14:25:48 +00:00
|
|
|
WM_operatortype_append(FILE_OT_select_bookmark);
|
|
|
|
WM_operatortype_append(FILE_OT_highlight);
|
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
|
|
|
WM_operatortype_append(FILE_OT_sort_column_ui_context);
|
2009-09-04 04:29:54 +00:00
|
|
|
WM_operatortype_append(FILE_OT_execute);
|
2009-02-14 14:25:48 +00:00
|
|
|
WM_operatortype_append(FILE_OT_cancel);
|
|
|
|
WM_operatortype_append(FILE_OT_parent);
|
2009-07-07 07:25:44 +00:00
|
|
|
WM_operatortype_append(FILE_OT_previous);
|
|
|
|
WM_operatortype_append(FILE_OT_next);
|
2009-03-12 06:40:03 +00:00
|
|
|
WM_operatortype_append(FILE_OT_refresh);
|
2009-11-28 14:37:21 +00:00
|
|
|
WM_operatortype_append(FILE_OT_bookmark_add);
|
2013-10-08 13:16:14 +00:00
|
|
|
WM_operatortype_append(FILE_OT_bookmark_delete);
|
2015-02-11 17:07:52 +01:00
|
|
|
WM_operatortype_append(FILE_OT_bookmark_cleanup);
|
2015-02-11 00:09:45 +01:00
|
|
|
WM_operatortype_append(FILE_OT_bookmark_move);
|
2012-09-17 21:38:04 +00:00
|
|
|
WM_operatortype_append(FILE_OT_reset_recent);
|
2016-10-03 16:34:51 +02:00
|
|
|
WM_operatortype_append(FILE_OT_hidedot);
|
2009-07-05 22:26:43 +00:00
|
|
|
WM_operatortype_append(FILE_OT_filenum);
|
2009-07-10 17:05:04 +00:00
|
|
|
WM_operatortype_append(FILE_OT_directory_new);
|
|
|
|
WM_operatortype_append(FILE_OT_delete);
|
2009-07-26 18:52:27 +00:00
|
|
|
WM_operatortype_append(FILE_OT_rename);
|
2010-05-08 21:02:22 +00:00
|
|
|
WM_operatortype_append(FILE_OT_smoothscroll);
|
2015-11-04 14:24:46 +01:00
|
|
|
WM_operatortype_append(FILE_OT_filepath_drop);
|
2020-02-28 14:33:31 +01:00
|
|
|
WM_operatortype_append(FILE_OT_start_filter);
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2009-01-28 12:28:50 +00:00
|
|
|
/* NOTE: do not add .blend file reading on this level */
|
2011-02-14 17:55:27 +00:00
|
|
|
static void file_keymap(struct wmKeyConfig *keyconf)
|
2008-12-14 11:25:00 +00:00
|
|
|
{
|
2015-11-28 17:14:45 +01:00
|
|
|
/* keys for all regions */
|
2018-11-08 15:59:51 +11:00
|
|
|
WM_keymap_ensure(keyconf, "File Browser", SPACE_FILE, 0);
|
2015-12-03 12:21:57 +01:00
|
|
|
|
2015-11-28 17:14:45 +01:00
|
|
|
/* keys for main region */
|
2018-11-08 15:59:51 +11:00
|
|
|
WM_keymap_ensure(keyconf, "File Browser Main", SPACE_FILE, 0);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2015-11-28 17:14:45 +01:00
|
|
|
/* keys for button region (top) */
|
2018-11-08 15:59:51 +11:00
|
|
|
WM_keymap_ensure(keyconf, "File Browser Buttons", SPACE_FILE, 0);
|
2009-01-06 14:42:54 +00:00
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_tools_region_init(wmWindowManager *wm, ARegion *region)
|
2009-01-06 14:42:54 +00:00
|
|
|
{
|
2009-09-17 21:36:02 +00:00
|
|
|
wmKeyMap *keymap;
|
2009-07-05 22:26:43 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
region->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_VERTICAL_HIDE;
|
|
|
|
ED_region_panels_init(wm, region);
|
2009-07-05 22:26:43 +00:00
|
|
|
|
|
|
|
/* own keymaps */
|
2018-08-31 13:36:14 +10:00
|
|
|
keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
|
2020-03-06 16:56:42 +01:00
|
|
|
WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap);
|
2009-01-06 14:42:54 +00:00
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_tools_region_draw(const bContext *C, ARegion *region)
|
2009-01-06 14:42:54 +00:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels(C, region);
|
2009-06-29 20:23:40 +00:00
|
|
|
}
|
2009-01-06 14:42:54 +00:00
|
|
|
|
2021-01-19 12:59:00 +11:00
|
|
|
static void file_tools_region_listener(const wmRegionListenerParams *UNUSED(params))
|
2009-06-29 20:23:40 +00:00
|
|
|
{
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2021-01-21 21:40:25 +01:00
|
|
|
static void file_tool_props_region_listener(const wmRegionListenerParams *params)
|
|
|
|
{
|
|
|
|
const wmNotifier *wmn = params->notifier;
|
|
|
|
ARegion *region = params->region;
|
|
|
|
|
|
|
|
switch (wmn->category) {
|
|
|
|
case NC_ID:
|
|
|
|
if (ELEM(wmn->action, NA_RENAME)) {
|
|
|
|
/* In case the filelist shows ID names. */
|
|
|
|
ED_region_tag_redraw(region);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* add handlers, stuff you only do once or on area/region changes */
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_header_region_init(wmWindowManager *wm, ARegion *region)
|
2008-12-14 11:25:00 +00:00
|
|
|
{
|
2010-05-10 08:57:58 +00:00
|
|
|
wmKeyMap *keymap;
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_header_init(region);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2018-08-31 13:36:14 +10:00
|
|
|
keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
|
2020-03-06 16:56:42 +01:00
|
|
|
WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap);
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_header_region_draw(const bContext *C, ARegion *region)
|
2008-12-14 11:25:00 +00:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_header(C, region);
|
2008-12-14 11:25:00 +00:00
|
|
|
}
|
|
|
|
|
2009-01-06 14:42:54 +00:00
|
|
|
/* add handlers, stuff you only do once or on area/region changes */
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_ui_region_init(wmWindowManager *wm, ARegion *region)
|
2009-01-06 14:42:54 +00:00
|
|
|
{
|
2009-09-17 21:36:02 +00:00
|
|
|
wmKeyMap *keymap;
|
2009-07-05 22:26:43 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels_init(wm, region);
|
|
|
|
region->v2d.keepzoom |= V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y;
|
2009-07-05 22:26:43 +00:00
|
|
|
|
|
|
|
/* own keymap */
|
2018-08-31 13:36:14 +10:00
|
|
|
keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
|
2020-03-06 16:56:42 +01:00
|
|
|
WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap);
|
2009-07-05 22:26:43 +00:00
|
|
|
|
2018-08-31 13:36:14 +10:00
|
|
|
keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Buttons", SPACE_FILE, 0);
|
2020-03-06 16:56:42 +01:00
|
|
|
WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap);
|
2009-01-06 14:42:54 +00:00
|
|
|
}
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_ui_region_draw(const bContext *C, ARegion *region)
|
2009-01-06 14:42:54 +00:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels(C, region);
|
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
|
|
|
}
|
2009-01-06 14:42:54 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_execution_region_init(wmWindowManager *wm, ARegion *region)
|
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
|
|
|
{
|
2019-09-08 20:31:12 +02:00
|
|
|
wmKeyMap *keymap;
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels_init(wm, region);
|
|
|
|
region->v2d.keepzoom |= V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y;
|
2019-09-08 20:31:12 +02:00
|
|
|
|
|
|
|
/* own keymap */
|
|
|
|
keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
|
2020-03-06 16:56:42 +01:00
|
|
|
WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap);
|
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
|
|
|
}
|
2011-10-03 04:48:14 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void file_execution_region_draw(const bContext *C, ARegion *region)
|
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
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels(C, region);
|
2009-01-06 14:42:54 +00:00
|
|
|
}
|
|
|
|
|
2021-01-19 12:59:00 +11:00
|
|
|
static void file_ui_region_listener(const wmRegionListenerParams *params)
|
2009-07-26 19:23:07 +00:00
|
|
|
{
|
2021-01-18 17:28:47 -06:00
|
|
|
ARegion *region = params->region;
|
|
|
|
wmNotifier *wmn = params->notifier;
|
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* context changes */
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (wmn->category) {
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case NC_SPACE:
|
2009-07-26 19:23:07 +00:00
|
|
|
switch (wmn->data) {
|
2.5
Notifiers
---------
Various fixes for wrong use of notifiers, and some new notifiers
to make things a bit more clear and consistent, with two notable
changes:
* Geometry changes are now done with NC_GEOM, rather than
NC_OBJECT|ND_GEOM_, so an object does need to be available.
* Space data now use NC_SPACE|ND_SPACE_*, instead of data
notifiers or even NC_WINDOW in some cases. Note that NC_SPACE
should only be used for notifying about changes in space data,
we don't want to go back to allqueue(REDRAW..).
Depsgraph
---------
The dependency graph now has a different flush call:
DAG_object_flush_update(scene, ob, flag)
is replaced by:
DAG_id_flush_update(id, flag)
It still works basically the same, one difference is that it now
also accepts object data (e.g. Mesh), again to avoid requiring an
Object to be available. Other ID types will simply do nothing at
the moment.
Docs
----
I made some guidelines for how/when to do which kinds of updates
and notifiers. I can't specify totally exact how to make these
decisions, but these are basically the guidelines I use. So, new
and updated docs are here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/NotifiersUpdates
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/DataNotifiers
2009-09-04 20:51:09 +00:00
|
|
|
case ND_SPACE_FILE_LIST:
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_tag_redraw(region);
|
2009-07-26 19:23:07 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2008-12-14 11:25:00 +00:00
|
|
|
|
2018-08-07 10:38:20 +02:00
|
|
|
static bool filepath_drop_poll(bContext *C,
|
|
|
|
wmDrag *drag,
|
|
|
|
const wmEvent *UNUSED(event),
|
2020-03-25 17:58:58 +11:00
|
|
|
const char **UNUSED(r_tooltip))
|
2015-11-04 14:24:46 +01:00
|
|
|
{
|
|
|
|
if (drag->type == WM_DRAG_PATH) {
|
|
|
|
SpaceFile *sfile = CTX_wm_space_file(C);
|
|
|
|
if (sfile) {
|
2020-09-02 19:10:18 +02:00
|
|
|
return true;
|
2015-11-04 14:24:46 +01:00
|
|
|
}
|
|
|
|
}
|
2020-09-02 19:10:18 +02:00
|
|
|
return false;
|
2015-11-04 14:24:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void filepath_drop_copy(wmDrag *drag, wmDropBox *drop)
|
|
|
|
{
|
|
|
|
RNA_string_set(drop->ptr, "filepath", drag->path);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* region dropbox definition */
|
|
|
|
static void file_dropboxes(void)
|
|
|
|
{
|
|
|
|
ListBase *lb = WM_dropboxmap_find("Window", SPACE_EMPTY, RGN_TYPE_WINDOW);
|
|
|
|
|
|
|
|
WM_dropbox_add(lb, "FILE_OT_filepath_drop", filepath_drop_poll, filepath_drop_copy);
|
|
|
|
}
|
|
|
|
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
static int file_space_subtype_get(ScrArea *area)
|
|
|
|
{
|
|
|
|
SpaceFile *sfile = area->spacedata.first;
|
|
|
|
return sfile->browse_mode;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void file_space_subtype_set(ScrArea *area, int value)
|
|
|
|
{
|
|
|
|
SpaceFile *sfile = area->spacedata.first;
|
|
|
|
sfile->browse_mode = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void file_space_subtype_item_extend(bContext *UNUSED(C),
|
|
|
|
EnumPropertyItem **item,
|
|
|
|
int *totitem)
|
|
|
|
{
|
2021-01-13 00:52:10 +01:00
|
|
|
if (U.experimental.use_asset_browser) {
|
|
|
|
RNA_enum_items_add(item, totitem, rna_enum_space_file_browse_mode_items);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
RNA_enum_items_add_value(
|
|
|
|
item, totitem, rna_enum_space_file_browse_mode_items, FILE_BROWSE_MODE_FILES);
|
|
|
|
}
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
}
|
|
|
|
|
2021-01-25 14:19:14 +01:00
|
|
|
static const char *file_context_dir[] = {"active_file", "id", NULL};
|
2020-12-14 13:50:36 +01:00
|
|
|
|
|
|
|
static int /*eContextResult*/ file_context(const bContext *C,
|
|
|
|
const char *member,
|
|
|
|
bContextDataResult *result)
|
|
|
|
{
|
|
|
|
bScreen *screen = CTX_wm_screen(C);
|
|
|
|
SpaceFile *sfile = CTX_wm_space_file(C);
|
|
|
|
FileSelectParams *params = ED_fileselect_get_active_params(sfile);
|
|
|
|
|
|
|
|
BLI_assert(!ED_area_is_global(CTX_wm_area(C)));
|
|
|
|
|
|
|
|
if (CTX_data_dir(member)) {
|
|
|
|
CTX_data_dir_set(result, file_context_dir);
|
|
|
|
return CTX_RESULT_OK;
|
|
|
|
}
|
2020-12-14 23:01:24 +01:00
|
|
|
|
|
|
|
/* The following member checks return file-list data, check if that needs refreshing first. */
|
|
|
|
if (file_main_region_needs_refresh_before_draw(sfile)) {
|
|
|
|
return CTX_RESULT_NO_DATA;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (CTX_data_equals(member, "active_file")) {
|
2020-12-14 13:50:36 +01:00
|
|
|
FileDirEntry *file = filelist_file(sfile->files, params->active_file);
|
2020-12-17 11:20:12 +01:00
|
|
|
if (file == NULL) {
|
|
|
|
return CTX_RESULT_NO_DATA;
|
|
|
|
}
|
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
CTX_data_pointer_set(result, &screen->id, &RNA_FileSelectEntry, file);
|
|
|
|
return CTX_RESULT_OK;
|
|
|
|
}
|
2020-12-16 01:05:46 +01:00
|
|
|
if (CTX_data_equals(member, "id")) {
|
2020-12-14 13:50:36 +01:00
|
|
|
const FileDirEntry *file = filelist_file(sfile->files, params->active_file);
|
2020-12-17 11:20:12 +01:00
|
|
|
if (file == NULL) {
|
|
|
|
return CTX_RESULT_NO_DATA;
|
|
|
|
}
|
2020-12-14 13:50:36 +01:00
|
|
|
|
|
|
|
ID *id = filelist_file_get_id(file);
|
2020-12-17 11:20:12 +01:00
|
|
|
if (id == NULL) {
|
|
|
|
return CTX_RESULT_NO_DATA;
|
2020-12-14 13:50:36 +01:00
|
|
|
}
|
2020-12-17 11:20:12 +01:00
|
|
|
|
|
|
|
CTX_data_id_pointer_set(result, id);
|
2020-12-14 13:50:36 +01:00
|
|
|
return CTX_RESULT_OK;
|
|
|
|
}
|
2020-12-14 23:01:24 +01:00
|
|
|
|
2020-12-14 13:50:36 +01:00
|
|
|
return CTX_RESULT_MEMBER_NOT_FOUND;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void file_id_remap(ScrArea *area, SpaceLink *sl, ID *UNUSED(old_id), ID *UNUSED(new_id))
|
|
|
|
{
|
|
|
|
SpaceFile *sfile = (SpaceFile *)sl;
|
|
|
|
|
|
|
|
/* If the file shows main data (IDs), tag it for reset. */
|
|
|
|
if (sfile->files && filelist_needs_reset_on_main_changes(sfile->files)) {
|
|
|
|
/* Full refresh of the file list if main data was changed, don't even attempt remap pointers.
|
|
|
|
* We could give file list types a id-remap callback, but it's probably not worth it.
|
|
|
|
* Refreshing local file lists is relatively cheap. */
|
|
|
|
file_tag_reset_list(area, sfile);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* only called once, from space/spacetypes.c */
|
|
|
|
void ED_spacetype_file(void)
|
|
|
|
{
|
2012-06-18 13:01:24 +00:00
|
|
|
SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype file");
|
2008-12-14 11:25:00 +00:00
|
|
|
ARegionType *art;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-06-18 13:01:24 +00:00
|
|
|
st->spaceid = SPACE_FILE;
|
2009-12-19 22:37:51 +00:00
|
|
|
strncpy(st->name, "File", BKE_ST_MAXNAME);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-08-04 14:39:53 +02:00
|
|
|
st->create = file_create;
|
2012-06-18 13:01:24 +00:00
|
|
|
st->free = file_free;
|
|
|
|
st->init = file_init;
|
2013-03-15 19:56:29 +00:00
|
|
|
st->exit = file_exit;
|
2012-06-18 13:01:24 +00:00
|
|
|
st->duplicate = file_duplicate;
|
|
|
|
st->refresh = file_refresh;
|
|
|
|
st->listener = file_listener;
|
|
|
|
st->operatortypes = file_operatortypes;
|
|
|
|
st->keymap = file_keymap;
|
2015-11-04 14:24:46 +01:00
|
|
|
st->dropboxes = file_dropboxes;
|
Asset System: New Asset Browser editor
This introduces the User Interface part of the Asset Browser, based on the
design in T54642.
Additions:
* New Asset Browser (internally a sub-editor of the File Browser).
* Navigation region showing asset categories.
* Main region showing the assets of the selected asset library with previews.
The assets may be stored over multiple .blends in the directory that's
"mounted" as asset library in the Preferences. They will all be shown in this
list.
* Header with an asset library dropdown, allowing to choose the active asset
library to show. Options are the "Current File" as asset library and all
custom libraries.
* Display popover, filter popover and search box (partially dummies, see
T82680).
* Sidebar showing the metadata of the currently active file (name, preview,
description and tags), which can be edited for assets in the "Current File"
asset library. (For others it will reset on reload.)
* The sidebar includes a button to load a custom preview image from a file.
* Make asset files draggable (with preview image).
* If a library with invalid path is selected, a message is drawn in the main
region to help the user understand what's wrong.
* Operators to add and remove asset tags. Exposed in the sidebar.
* "Only Assets" option for Link/Append.
* Internal utilities for asset UI scripts.
For screenshots or demo videos, please see D9725. Or the 2.92 release notes.
Note that there are many things to be tweaked and polished in the Asset Browser
UI still. For example, the filter and display popovers are mostly dummies. See
T82680.
Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1
project milestone on developer.blender.org.
Differential Revision: https://developer.blender.org/D9725
Reviewed by: Brecht Van Lommel, Hans Goudey
2020-12-14 14:07:42 +01:00
|
|
|
st->space_subtype_item_extend = file_space_subtype_item_extend;
|
|
|
|
st->space_subtype_get = file_space_subtype_get;
|
|
|
|
st->space_subtype_set = file_space_subtype_set;
|
2020-12-14 13:50:36 +01:00
|
|
|
st->context = file_context;
|
|
|
|
st->id_remap = file_id_remap;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* regions: main window */
|
2012-06-18 13:01:24 +00:00
|
|
|
art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
|
2008-12-14 11:25:00 +00:00
|
|
|
art->regionid = RGN_TYPE_WINDOW;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->init = file_main_region_init;
|
|
|
|
art->draw = file_main_region_draw;
|
|
|
|
art->listener = file_main_region_listener;
|
2017-11-13 19:43:34 +11:00
|
|
|
art->message_subscribe = file_main_region_message_subscribe;
|
2012-06-18 13:01:24 +00:00
|
|
|
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D;
|
2008-12-14 11:25:00 +00:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
/* regions: header */
|
2012-06-18 13:01:24 +00:00
|
|
|
art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
|
2008-12-14 11:25:00 +00:00
|
|
|
art->regionid = RGN_TYPE_HEADER;
|
2012-06-18 13:01:24 +00:00
|
|
|
art->prefsizey = HEADERY;
|
|
|
|
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_HEADER;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->init = file_header_region_init;
|
|
|
|
art->draw = file_header_region_draw;
|
|
|
|
// art->listener = file_header_region_listener;
|
2008-12-14 11:25:00 +00:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-01-06 14:42:54 +00:00
|
|
|
/* regions: ui */
|
2012-06-18 13:01:24 +00:00
|
|
|
art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
|
2009-01-06 14:42:54 +00:00
|
|
|
art->regionid = RGN_TYPE_UI;
|
2012-06-18 13:01:24 +00:00
|
|
|
art->keymapflag = ED_KEYMAP_UI;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->listener = file_ui_region_listener;
|
|
|
|
art->init = file_ui_region_init;
|
|
|
|
art->draw = file_ui_region_draw;
|
2009-01-06 14:42:54 +00:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
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
|
|
|
/* regions: execution */
|
|
|
|
art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
|
|
|
|
art->regionid = RGN_TYPE_EXECUTE;
|
|
|
|
art->keymapflag = ED_KEYMAP_UI;
|
|
|
|
art->listener = file_ui_region_listener;
|
|
|
|
art->init = file_execution_region_init;
|
|
|
|
art->draw = file_execution_region_draw;
|
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-09-04 16:21:42 +02:00
|
|
|
file_execute_region_panels_register(art);
|
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
|
|
|
|
2009-01-06 14:42:54 +00:00
|
|
|
/* regions: channels (directories) */
|
2012-06-18 13:01:24 +00:00
|
|
|
art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
|
2015-02-11 00:09:45 +01:00
|
|
|
art->regionid = RGN_TYPE_TOOLS;
|
2012-06-18 13:01:24 +00:00
|
|
|
art->prefsizex = 240;
|
2015-02-11 00:09:45 +01:00
|
|
|
art->prefsizey = 60;
|
|
|
|
art->keymapflag = ED_KEYMAP_UI;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->listener = file_tools_region_listener;
|
|
|
|
art->init = file_tools_region_init;
|
|
|
|
art->draw = file_tools_region_draw;
|
2015-02-11 00:09:45 +01:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2015-02-11 00:09:45 +01:00
|
|
|
/* regions: tool properties */
|
|
|
|
art = MEM_callocN(sizeof(ARegionType), "spacetype file operator region");
|
|
|
|
art->regionid = RGN_TYPE_TOOL_PROPS;
|
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
|
|
|
art->prefsizex = 240;
|
|
|
|
art->prefsizey = 60;
|
2012-06-18 13:01:24 +00:00
|
|
|
art->keymapflag = ED_KEYMAP_UI;
|
2021-01-21 21:40:25 +01:00
|
|
|
art->listener = file_tool_props_region_listener;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->init = file_tools_region_init;
|
|
|
|
art->draw = file_tools_region_draw;
|
2008-12-14 12:16:55 +00:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-09-04 16:21:42 +02:00
|
|
|
file_tool_props_region_panels_register(art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-14 11:25:00 +00:00
|
|
|
BKE_spacetype_register(st);
|
|
|
|
}
|
|
|
|
|
2009-01-06 14:42:54 +00:00
|
|
|
void ED_file_init(void)
|
|
|
|
{
|
2013-12-20 17:39:22 +01:00
|
|
|
ED_file_read_bookmarks();
|
2010-07-04 15:35:23 +00:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
if (G.background == false) {
|
2012-08-08 08:25:20 +00:00
|
|
|
filelist_init_icons();
|
|
|
|
}
|
|
|
|
|
2009-03-03 10:24:06 +00:00
|
|
|
IMB_thumb_makedirs();
|
2009-01-06 14:42:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ED_file_exit(void)
|
|
|
|
{
|
2013-12-20 17:39:22 +01:00
|
|
|
fsmenu_free();
|
2012-08-08 08:25:20 +00:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
if (G.background == false) {
|
2012-08-08 08:25:20 +00:00
|
|
|
filelist_free_icons();
|
|
|
|
}
|
2009-01-18 18:24:11 +00:00
|
|
|
}
|
2013-12-20 17:39:22 +01:00
|
|
|
|
|
|
|
void ED_file_read_bookmarks(void)
|
|
|
|
{
|
2014-11-23 15:54:29 +01:00
|
|
|
const char *const cfgdir = BKE_appdir_folder_id(BLENDER_USER_CONFIG, NULL);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2013-12-20 17:39:22 +01:00
|
|
|
fsmenu_free();
|
|
|
|
|
2015-02-11 00:09:45 +01:00
|
|
|
fsmenu_read_system(ED_fsmenu_get(), true);
|
2013-12-20 17:39:22 +01:00
|
|
|
|
|
|
|
if (cfgdir) {
|
|
|
|
char name[FILE_MAX];
|
2020-03-07 13:23:26 +11:00
|
|
|
BLI_join_dirfile(name, sizeof(name), cfgdir, BLENDER_BOOKMARK_FILE);
|
2015-02-11 00:09:45 +01:00
|
|
|
fsmenu_read_bookmarks(ED_fsmenu_get(), name);
|
2013-12-20 17:39:22 +01:00
|
|
|
}
|
|
|
|
}
|