Bring back editor pulldown menus, get operators to work, T for nav-bar
- Adds the View, Edit & Select pulldown menus - Makes asset operators work (e.g. catalog management) - Correct notifiers (fixing missing redraws) - Add T shortcut to toggle toolbar
This commit is contained in:
parent
ff213c802c
commit
f29fa9895f
|
@ -2135,7 +2135,6 @@ def km_info(params):
|
|||
|
||||
return keymap
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Editor (File Browser)
|
||||
|
||||
|
@ -2291,6 +2290,25 @@ def km_file_browser_buttons(_params):
|
|||
return keymap
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Editor (Asset Browser)
|
||||
|
||||
def km_asset_browser(params):
|
||||
items = []
|
||||
keymap = (
|
||||
"Asset Browser",
|
||||
{"space_type": 'ASSET_BROWSER', "region_type": 'WINDOW'},
|
||||
{"items": items},
|
||||
)
|
||||
|
||||
items.extend([
|
||||
("wm.context_toggle", {"type": 'T', "value": 'PRESS'},
|
||||
{"properties": [("data_path", 'space_data.show_region_nav_bar')]}),
|
||||
])
|
||||
|
||||
return keymap
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Editor (Dope Sheet)
|
||||
|
||||
|
@ -7718,6 +7736,7 @@ def generate_keymaps(params=None):
|
|||
km_node_editor(params),
|
||||
km_spreadsheet_generic(params),
|
||||
km_info(params),
|
||||
km_asset_browser(params),
|
||||
km_file_browser(params),
|
||||
km_file_browser_main(params),
|
||||
km_file_browser_buttons(params),
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
from bpy.types import Header
|
||||
from bpy.types import Header, Menu
|
||||
|
||||
|
||||
class ASSETBROWSER_HT_header(Header):
|
||||
|
@ -29,9 +29,58 @@ class ASSETBROWSER_HT_header(Header):
|
|||
|
||||
layout.template_header()
|
||||
|
||||
ASSETBROWSER_MT_editor_menus.draw_collapsible(context, layout)
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_editor_menus(Menu):
|
||||
bl_idname = "ASSETBROWSER_MT_editor_menus"
|
||||
bl_label = ""
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.menu("ASSETBROWSER_MT_view")
|
||||
layout.menu("ASSETBROWSER_MT_select")
|
||||
layout.menu("ASSETBROWSER_MT_edit")
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_view(Menu):
|
||||
bl_label = "View"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
st = context.space_data
|
||||
|
||||
layout.prop(st, "show_region_nav_bar", text="Navigation")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("INFO_MT_area")
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_select(Menu):
|
||||
bl_label = "Select"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_edit(Menu):
|
||||
bl_label = "Edit"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("asset.catalog_undo", text="Undo")
|
||||
layout.operator("asset.catalog_redo", text="Redo")
|
||||
|
||||
|
||||
classes = (
|
||||
ASSETBROWSER_HT_header,
|
||||
ASSETBROWSER_MT_editor_menus,
|
||||
ASSETBROWSER_MT_view,
|
||||
ASSETBROWSER_MT_select,
|
||||
ASSETBROWSER_MT_edit,
|
||||
)
|
||||
|
||||
if __name__ == "__main__": # only for live edit.
|
||||
|
|
|
@ -80,7 +80,7 @@ class FILEBROWSER_HT_header(Header):
|
|||
layout.template_header()
|
||||
|
||||
if SpaceAssetInfo.is_asset_browser(space_data):
|
||||
ASSETBROWSER_MT_editor_menus.draw_collapsible(context, layout)
|
||||
ASSETBROWSEROLD_MT_editor_menus.draw_collapsible(context, layout)
|
||||
layout.separator()
|
||||
self.draw_asset_browser_buttons(context)
|
||||
else:
|
||||
|
@ -638,19 +638,19 @@ class AssetBrowserMenu:
|
|||
return SpaceAssetInfo.is_asset_browser_poll(context)
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_editor_menus(AssetBrowserMenu, Menu):
|
||||
bl_idname = "ASSETBROWSER_MT_editor_menus"
|
||||
class ASSETBROWSEROLD_MT_editor_menus(AssetBrowserMenu, Menu):
|
||||
bl_idname = "ASSETBROWSEROLD_MT_editor_menus"
|
||||
bl_label = ""
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.menu("ASSETBROWSER_MT_view")
|
||||
layout.menu("ASSETBROWSER_MT_select")
|
||||
layout.menu("ASSETBROWSEROLD_MT_view")
|
||||
layout.menu("ASSETBROWSEROLD_MT_select")
|
||||
layout.menu("ASSETBROWSER_MT_edit")
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_view(AssetBrowserMenu, Menu):
|
||||
class ASSETBROWSEROLD_MT_view(AssetBrowserMenu, Menu):
|
||||
bl_label = "View"
|
||||
|
||||
def draw(self, context):
|
||||
|
@ -671,7 +671,7 @@ class ASSETBROWSER_MT_view(AssetBrowserMenu, Menu):
|
|||
layout.menu("INFO_MT_area")
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_select(AssetBrowserMenu, Menu):
|
||||
class ASSETBROWSEROLD_MT_select(AssetBrowserMenu, Menu):
|
||||
bl_label = "Select"
|
||||
|
||||
def draw(self, _context):
|
||||
|
@ -686,7 +686,7 @@ class ASSETBROWSER_MT_select(AssetBrowserMenu, Menu):
|
|||
layout.operator("file.select_box")
|
||||
|
||||
|
||||
class ASSETBROWSER_MT_edit(AssetBrowserMenu, Menu):
|
||||
class ASSETBROWSEROLD_MT_edit(AssetBrowserMenu, Menu):
|
||||
bl_label = "Edit"
|
||||
|
||||
def draw(self, _context):
|
||||
|
@ -845,10 +845,10 @@ classes = (
|
|||
FILEBROWSER_MT_context_menu,
|
||||
ASSETBROWSER_PT_display,
|
||||
ASSETBROWSER_PT_filter,
|
||||
ASSETBROWSER_MT_editor_menus,
|
||||
ASSETBROWSER_MT_view,
|
||||
ASSETBROWSER_MT_select,
|
||||
ASSETBROWSER_MT_edit,
|
||||
ASSETBROWSEROLD_MT_editor_menus,
|
||||
ASSETBROWSEROLD_MT_view,
|
||||
ASSETBROWSEROLD_MT_select,
|
||||
ASSETBROWSEROLD_MT_edit,
|
||||
ASSETBROWSER_MT_metadata_preview_menu,
|
||||
ASSETBROWSER_PT_metadata,
|
||||
ASSETBROWSER_PT_metadata_preview,
|
||||
|
|
|
@ -446,24 +446,38 @@ static void ASSET_OT_library_refresh(struct wmOperatorType *ot)
|
|||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
static AssetLibrary *get_asset_library(const bContext *C)
|
||||
{
|
||||
if (const SpaceFile *sfile = CTX_wm_space_file(C)) {
|
||||
return ED_fileselect_active_asset_library_get(sfile);
|
||||
}
|
||||
if (const AssetLibraryReference *library_ref = CTX_wm_asset_library_ref(C)) {
|
||||
return ED_assetlist_library_get(library_ref);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static bool asset_catalog_operator_poll(bContext *C)
|
||||
{
|
||||
const SpaceFile *sfile = CTX_wm_space_file(C);
|
||||
return sfile && ED_fileselect_active_asset_library_get(sfile);
|
||||
return get_asset_library(C) != nullptr;
|
||||
}
|
||||
|
||||
static int asset_catalog_new_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceFile *sfile = CTX_wm_space_file(C);
|
||||
struct AssetLibrary *asset_library = ED_fileselect_active_asset_library_get(sfile);
|
||||
AssetLibrary *asset_library = get_asset_library(C);
|
||||
char *parent_path = RNA_string_get_alloc(op->ptr, "parent_path", nullptr, 0, nullptr);
|
||||
|
||||
blender::bke::AssetCatalog *new_catalog = ED_asset_catalog_add(
|
||||
asset_library, "Catalog", parent_path);
|
||||
|
||||
if (sfile) {
|
||||
if (SpaceFile *sfile = CTX_wm_space_file(C)) {
|
||||
ED_fileselect_activate_asset_catalog(sfile, new_catalog->catalog_id);
|
||||
}
|
||||
else if (SpaceAssets *sassets = CTX_wm_space_assets(C)) {
|
||||
/* TODO how can we select the catalog here in a nice way, without being space dependent? Idea:
|
||||
* use an operator macro instead? */
|
||||
UNUSED_VARS(sassets);
|
||||
}
|
||||
|
||||
MEM_freeN(parent_path);
|
||||
|
||||
|
@ -494,8 +508,7 @@ static void ASSET_OT_catalog_new(struct wmOperatorType *ot)
|
|||
|
||||
static int asset_catalog_delete_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceFile *sfile = CTX_wm_space_file(C);
|
||||
struct AssetLibrary *asset_library = ED_fileselect_active_asset_library_get(sfile);
|
||||
AssetLibrary *asset_library = get_asset_library(C);
|
||||
char *catalog_id_str = RNA_string_get_alloc(op->ptr, "catalog_id", nullptr, 0, nullptr);
|
||||
bke::CatalogID catalog_id;
|
||||
if (!BLI_uuid_parse_string(&catalog_id, catalog_id_str)) {
|
||||
|
@ -530,13 +543,16 @@ static void ASSET_OT_catalog_delete(struct wmOperatorType *ot)
|
|||
|
||||
static bke::AssetCatalogService *get_catalog_service(bContext *C)
|
||||
{
|
||||
const SpaceFile *sfile = CTX_wm_space_file(C);
|
||||
if (!sfile) {
|
||||
return nullptr;
|
||||
if (const SpaceFile *sfile = CTX_wm_space_file(C)) {
|
||||
AssetLibrary *asset_lib = ED_fileselect_active_asset_library_get(sfile);
|
||||
return BKE_asset_library_get_catalog_service(asset_lib);
|
||||
}
|
||||
if (const AssetLibraryReference *library_ref = CTX_wm_asset_library_ref(C)) {
|
||||
AssetLibrary *asset_lib = ED_assetlist_library_get(library_ref);
|
||||
return BKE_asset_library_get_catalog_service(asset_lib);
|
||||
}
|
||||
|
||||
AssetLibrary *asset_lib = ED_fileselect_active_asset_library_get(sfile);
|
||||
return BKE_asset_library_get_catalog_service(asset_lib);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static int asset_catalog_undo_exec(bContext *C, wmOperator * /*op*/)
|
||||
|
@ -547,7 +563,7 @@ static int asset_catalog_undo_exec(bContext *C, wmOperator * /*op*/)
|
|||
}
|
||||
|
||||
catalog_service->undo();
|
||||
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr);
|
||||
WM_event_add_notifier(C, NC_ASSET | ND_ASSET_CATALOGS, nullptr);
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
|
@ -577,7 +593,7 @@ static int asset_catalog_redo_exec(bContext *C, wmOperator * /*op*/)
|
|||
}
|
||||
|
||||
catalog_service->redo();
|
||||
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr);
|
||||
WM_event_add_notifier(C, NC_ASSET | ND_ASSET_CATALOGS, nullptr);
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
|
@ -654,8 +670,7 @@ static bool asset_catalogs_save_poll(bContext *C)
|
|||
|
||||
static int asset_catalogs_save_exec(bContext *C, wmOperator * /*op*/)
|
||||
{
|
||||
const SpaceFile *sfile = CTX_wm_space_file(C);
|
||||
::AssetLibrary *asset_library = ED_fileselect_active_asset_library_get(sfile);
|
||||
::AssetLibrary *asset_library = get_asset_library(C);
|
||||
|
||||
ED_asset_catalogs_save_from_main_path(asset_library, CTX_data_main(C));
|
||||
|
||||
|
@ -690,11 +705,12 @@ static bool has_external_files(Main *bmain, struct ReportList *reports);
|
|||
static bool asset_bundle_install_poll(bContext *C)
|
||||
{
|
||||
/* This operator only works when the asset browser is set to Current File. */
|
||||
const SpaceFile *sfile = CTX_wm_space_file(C);
|
||||
if (sfile == nullptr) {
|
||||
const AssetLibraryReference *asset_library_ref = CTX_wm_asset_library_ref(C);
|
||||
if (asset_library_ref == nullptr) {
|
||||
return false;
|
||||
}
|
||||
if (!ED_fileselect_is_local_asset_library(sfile)) {
|
||||
|
||||
if (asset_library_ref->type == ASSET_LIBRARY_LOCAL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "UI_resources.h"
|
||||
#include "UI_view2d.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_message.h"
|
||||
|
||||
#include "asset_browser_intern.hh"
|
||||
|
@ -104,16 +105,49 @@ static SpaceLink *asset_browser_duplicate(SpaceLink *sl)
|
|||
return (SpaceLink *)asset_browser_new;
|
||||
}
|
||||
|
||||
static void asset_browser_keymap(wmKeyConfig *UNUSED(keyconf))
|
||||
static void asset_browser_keymap(wmKeyConfig *keyconf)
|
||||
{
|
||||
/* keys for all regions */
|
||||
WM_keymap_ensure(keyconf, "Asset Browser", SPACE_ASSETS, 0);
|
||||
}
|
||||
|
||||
const char *asset_browser_context_dir[] = {
|
||||
"asset_library_ref",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static int /*eContextResult*/ asset_browser_context(const bContext *C,
|
||||
const char *member,
|
||||
bContextDataResult *result)
|
||||
{
|
||||
if (CTX_data_dir(member)) {
|
||||
CTX_data_dir_set(result, asset_browser_context_dir);
|
||||
return CTX_RESULT_OK;
|
||||
}
|
||||
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
SpaceAssets *assets_space = CTX_wm_space_assets(C);
|
||||
|
||||
if (CTX_data_equals(member, "asset_library_ref")) {
|
||||
CTX_data_pointer_set(
|
||||
result, &screen->id, &RNA_AssetLibraryReference, &assets_space->asset_library_ref);
|
||||
return CTX_RESULT_OK;
|
||||
}
|
||||
|
||||
return CTX_RESULT_MEMBER_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
/* Main Region */
|
||||
|
||||
static void asset_browser_main_region_init(wmWindowManager *UNUSED(wm), ARegion *region)
|
||||
static void asset_browser_main_region_init(wmWindowManager *wm, ARegion *region)
|
||||
{
|
||||
UI_view2d_region_reinit(®ion->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
|
||||
|
||||
{
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Asset Browser", SPACE_ASSETS, 0);
|
||||
WM_event_add_keymap_handler(®ion->handlers, keymap);
|
||||
}
|
||||
}
|
||||
|
||||
static void asset_browser_main_region_listener(const wmRegionListenerParams *UNUSED(params))
|
||||
|
@ -162,6 +196,11 @@ static void asset_browser_navigation_region_init(wmWindowManager *wm, ARegion *r
|
|||
{
|
||||
region->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_VERTICAL_HIDE;
|
||||
ED_region_panels_init(wm, region);
|
||||
|
||||
{
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Asset Browser", SPACE_ASSETS, 0);
|
||||
WM_event_add_keymap_handler(®ion->handlers, keymap);
|
||||
}
|
||||
}
|
||||
|
||||
static void asset_browser_navigation_region_draw(const bContext *C, ARegion *region)
|
||||
|
@ -191,6 +230,7 @@ void ED_spacetype_assets(void)
|
|||
st->duplicate = asset_browser_duplicate;
|
||||
st->operatortypes = asset_browser_operatortypes;
|
||||
st->keymap = asset_browser_keymap;
|
||||
st->context = asset_browser_context;
|
||||
|
||||
/* Main region. */
|
||||
art = MEM_cnew<ARegionType>("spacetype asset browser main region");
|
||||
|
|
|
@ -868,6 +868,20 @@ static void rna_Space_show_region_hud_update(bContext *C, PointerRNA *ptr)
|
|||
rna_Space_bool_from_region_flag_update_by_type(C, ptr, RGN_TYPE_HUD, RGN_FLAG_HIDDEN_BY_USER);
|
||||
}
|
||||
|
||||
/* Navigation Region. */
|
||||
static bool rna_Space_show_region_nav_bar_get(PointerRNA *ptr)
|
||||
{
|
||||
return !rna_Space_bool_from_region_flag_get_by_type(ptr, RGN_TYPE_NAV_BAR, RGN_FLAG_HIDDEN);
|
||||
}
|
||||
static void rna_Space_show_region_nav_bar_set(PointerRNA *ptr, bool value)
|
||||
{
|
||||
rna_Space_bool_from_region_flag_set_by_type(ptr, RGN_TYPE_NAV_BAR, RGN_FLAG_HIDDEN, !value);
|
||||
}
|
||||
static void rna_Space_show_region_nav_bar_update(bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
rna_Space_bool_from_region_flag_update_by_type(C, ptr, RGN_TYPE_NAV_BAR, RGN_FLAG_HIDDEN);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
static bool rna_Space_view2d_sync_get(PointerRNA *ptr)
|
||||
|
@ -3385,6 +3399,10 @@ static void rna_def_space_generic_show_region_toggles(StructRNA *srna, int regio
|
|||
region_type_mask &= ~(1 << RGN_TYPE_HUD);
|
||||
DEF_SHOW_REGION_PROPERTY(show_region_hud, "Adjust Last Operation", "");
|
||||
}
|
||||
if (region_type_mask & (1 << RGN_TYPE_NAV_BAR)) {
|
||||
region_type_mask &= ~(1 << RGN_TYPE_NAV_BAR);
|
||||
DEF_SHOW_REGION_PROPERTY(show_region_nav_bar, "Navigation Bar", "");
|
||||
}
|
||||
BLI_assert(region_type_mask == 0);
|
||||
}
|
||||
|
||||
|
@ -8054,7 +8072,7 @@ static void rna_def_space_assets(BlenderRNA *brna)
|
|||
srna = RNA_def_struct(brna, "SpaceAssets", "Space");
|
||||
RNA_def_struct_ui_text(srna, "Space Asset Browser", "Asset browser space data");
|
||||
|
||||
// rna_def_space_generic_show_region_toggles(srna, (1 << RGN_TYPE_NAV_BAR));
|
||||
rna_def_space_generic_show_region_toggles(srna, (1 << RGN_TYPE_NAV_BAR));
|
||||
|
||||
prop = rna_def_asset_library_reference_common(
|
||||
srna, "rna_SpaceAssets_asset_library_get", "rna_SpaceAssets_asset_library_set");
|
||||
|
|
|
@ -433,6 +433,10 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname)
|
|||
else if (STRPREFIX(opname, "FILE_OT")) {
|
||||
km = WM_keymap_find_all(wm, "File Browser", sl->spacetype, 0);
|
||||
}
|
||||
/* Asset browser */
|
||||
else if (STRPREFIX(opname, "ASSET_OT")) {
|
||||
km = WM_keymap_find_all(wm, "Asset Browser", sl->spacetype, 0);
|
||||
}
|
||||
/* Logic Editor */
|
||||
else if (STRPREFIX(opname, "LOGIC_OT")) {
|
||||
km = WM_keymap_find_all(wm, "Logic Editor", sl->spacetype, 0);
|
||||
|
|
Loading…
Reference in New Issue