Collection Editor based on patch by Julian Eisel
This is extracted from the layer-manager branch. With the following changes: * Renamed references of layer manager to collections manager * I didn't include the editors/space_collections/ draw and util files. I still need to bring the drawing code here, so we see something.
This commit is contained in:
@@ -566,6 +566,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
|
||||
bf_editor_space_userpref
|
||||
bf_editor_space_view3d
|
||||
bf_editor_space_clip
|
||||
bf_editor_space_collections
|
||||
|
||||
bf_editor_transform
|
||||
bf_editor_util
|
||||
|
||||
@@ -69,6 +69,7 @@ _modules = [
|
||||
"space_graph",
|
||||
"space_image",
|
||||
"space_info",
|
||||
"space_collections",
|
||||
"space_logic",
|
||||
"space_nla",
|
||||
"space_node",
|
||||
|
||||
35
release/scripts/startup/bl_ui/space_collections.py
Normal file
35
release/scripts/startup/bl_ui/space_collections.py
Normal file
@@ -0,0 +1,35 @@
|
||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
||||
#
|
||||
# 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
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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,
|
||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
import bpy
|
||||
from bpy.types import Header, Menu
|
||||
|
||||
|
||||
class COLLECTIONS_HT_header(Header):
|
||||
bl_space_type = 'COLLECTION_MANAGER'
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.template_header()
|
||||
layout.label(text="Work in progress")
|
||||
|
||||
|
||||
if __name__ == "__main__": # only for live edit.
|
||||
bpy.utils.register_module(__name__)
|
||||
@@ -169,6 +169,7 @@ struct SpaceAction *CTX_wm_space_action(const bContext *C);
|
||||
struct SpaceInfo *CTX_wm_space_info(const bContext *C);
|
||||
struct SpaceUserPref *CTX_wm_space_userpref(const bContext *C);
|
||||
struct SpaceClip *CTX_wm_space_clip(const bContext *C);
|
||||
struct SpaceCollections *CTX_wm_space_collections(const bContext *C);
|
||||
|
||||
void CTX_wm_manager_set(bContext *C, struct wmWindowManager *wm);
|
||||
void CTX_wm_window_set(bContext *C, struct wmWindow *win);
|
||||
|
||||
@@ -815,6 +815,14 @@ struct SpaceClip *CTX_wm_space_clip(const bContext *C)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct SpaceCollections *CTX_wm_space_collections(const bContext *C)
|
||||
{
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
if (sa && sa->spacetype == SPACE_COLLECTIONS)
|
||||
return sa->spacedata.first;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CTX_wm_manager_set(bContext *C, wmWindowManager *wm)
|
||||
{
|
||||
C->wm.manager = wm;
|
||||
|
||||
@@ -103,6 +103,8 @@
|
||||
#include "DNA_movieclip_types.h"
|
||||
#include "DNA_mask_types.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "BLI_endian_switch.h"
|
||||
@@ -6552,6 +6554,10 @@ static void lib_link_screen(FileData *fd, Main *main)
|
||||
|
||||
slogic->gpd = newlibadr_us(fd, sc->id.lib, slogic->gpd);
|
||||
}
|
||||
else if (sl->spacetype == SPACE_COLLECTIONS) {
|
||||
SpaceCollections *slayer = (SpaceCollections *)sl;
|
||||
slayer->flag |= SC_COLLECTION_DATA_REFRESH;
|
||||
}
|
||||
}
|
||||
}
|
||||
sc->id.tag &= ~LIB_TAG_NEED_LINK;
|
||||
@@ -6937,6 +6943,10 @@ void blo_lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *cursc
|
||||
|
||||
slogic->gpd = restore_pointer_by_name(id_map, (ID *)slogic->gpd, USER_REAL);
|
||||
}
|
||||
else if (sl->spacetype == SPACE_COLLECTIONS) {
|
||||
SpaceCollections *slayer = (SpaceCollections *)sl;
|
||||
slayer->flag |= SC_COLLECTION_DATA_REFRESH;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7331,6 +7341,10 @@ static bool direct_link_screen(FileData *fd, bScreen *sc)
|
||||
sclip->scopes.track_preview = NULL;
|
||||
sclip->scopes.ok = 0;
|
||||
}
|
||||
else if (sl->spacetype == SPACE_COLLECTIONS) {
|
||||
SpaceCollections *slayer = (SpaceCollections *)sl;
|
||||
slayer->flag |= SC_COLLECTION_DATA_REFRESH;
|
||||
}
|
||||
}
|
||||
|
||||
BLI_listbase_clear(&sa->actionzones);
|
||||
|
||||
@@ -3200,6 +3200,9 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
|
||||
else if (sl->spacetype == SPACE_INFO) {
|
||||
writestruct(wd, DATA, SpaceInfo, 1, sl);
|
||||
}
|
||||
else if (sl->spacetype == SPACE_COLLECTIONS) {
|
||||
writestruct(wd, DATA, SpaceCollections, 1, sl);
|
||||
}
|
||||
|
||||
sl = sl->next;
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ if(WITH_BLENDER)
|
||||
add_subdirectory(space_graph)
|
||||
add_subdirectory(space_image)
|
||||
add_subdirectory(space_info)
|
||||
add_subdirectory(space_collections)
|
||||
add_subdirectory(space_logic)
|
||||
add_subdirectory(space_nla)
|
||||
add_subdirectory(space_node)
|
||||
|
||||
@@ -49,6 +49,7 @@ struct ColorManagedDisplaySettings;
|
||||
|
||||
void fdrawline(float x1, float y1, float x2, float y2); /* DEPRECATED */
|
||||
void fdrawbox(float x1, float y1, float x2, float y2); /* DEPRECATED */
|
||||
void fdrawbox_filled(float x1, float y1, float x2, float y2);
|
||||
void sdrawline(int x1, int y1, int x2, int y2); /* DEPRECATED */
|
||||
void sdrawbox(int x1, int y1, int x2, int y2); /* DEPRECATED */
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ struct wmOperatorType;
|
||||
struct PointerRNA;
|
||||
struct PropertyRNA;
|
||||
struct EnumPropertyItem;
|
||||
struct LayerTree;
|
||||
|
||||
/* object_edit.c */
|
||||
struct Object *ED_object_context(struct bContext *C); /* context.object */
|
||||
|
||||
@@ -162,6 +162,7 @@ int ED_operator_image_active(struct bContext *C);
|
||||
int ED_operator_nla_active(struct bContext *C);
|
||||
int ED_operator_logic_active(struct bContext *C);
|
||||
int ED_operator_info_active(struct bContext *C);
|
||||
int ED_operator_collections_active(struct bContext *C);
|
||||
int ED_operator_console_active(struct bContext *C);
|
||||
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ void ED_spacetype_logic(void);
|
||||
void ED_spacetype_console(void);
|
||||
void ED_spacetype_userpref(void);
|
||||
void ED_spacetype_clip(void);
|
||||
void ED_spacetype_collections(void);
|
||||
|
||||
/* calls for instancing and freeing spacetype static data
|
||||
* called in WM_init_exit */
|
||||
|
||||
@@ -212,6 +212,9 @@ enum {
|
||||
UI_BUT_ALIGN_STITCH_TOP = (1 << 18),
|
||||
UI_BUT_ALIGN_STITCH_LEFT = (1 << 19),
|
||||
UI_BUT_ALIGN_ALL = (UI_BUT_ALIGN | UI_BUT_ALIGN_STITCH_TOP | UI_BUT_ALIGN_STITCH_LEFT),
|
||||
|
||||
/* Another hack, in some rare cases we don't want any text margin */
|
||||
UI_BUT_TEXT_NO_MARGIN = (1 << 20),
|
||||
};
|
||||
|
||||
/* scale fixed button widths by this to account for DPI */
|
||||
|
||||
@@ -83,5 +83,6 @@ struct PreviewImage *UI_icon_to_preview(int icon_id);
|
||||
|
||||
int UI_rnaptr_icon_get(struct bContext *C, struct PointerRNA *ptr, int rnaicon, const bool big);
|
||||
int UI_idcode_icon_get(const int idcode);
|
||||
int UI_colorset_icon_get(const int set_idx);
|
||||
|
||||
#endif /* __UI_INTERFACE_ICONS_H__ */
|
||||
|
||||
@@ -1385,6 +1385,14 @@ int UI_idcode_icon_get(const int idcode)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \param set_idx: A value from #rna_enum_color_sets_items.
|
||||
*/
|
||||
int UI_colorset_icon_get(const int set_idx)
|
||||
{
|
||||
return (set_idx < 1) ? ICON_NONE : VICO_COLORSET_01_VEC - 1 + set_idx;
|
||||
}
|
||||
|
||||
static void icon_draw_at_size(
|
||||
float x, float y, int icon_id, float aspect, float alpha,
|
||||
enum eIconSizes size, const bool nocreate)
|
||||
|
||||
@@ -1575,7 +1575,10 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB
|
||||
}
|
||||
}
|
||||
|
||||
if (but->editstr || (but->drawflag & UI_BUT_TEXT_LEFT)) {
|
||||
if (but->drawflag & UI_BUT_TEXT_NO_MARGIN) {
|
||||
/* skip */
|
||||
}
|
||||
else if (but->editstr || (but->drawflag & UI_BUT_TEXT_LEFT)) {
|
||||
rect->xmin += (UI_TEXT_MARGIN_X * U.widget_unit) / but->block->aspect;
|
||||
}
|
||||
else if ((but->drawflag & UI_BUT_TEXT_RIGHT)) {
|
||||
|
||||
@@ -165,6 +165,9 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
|
||||
case SPACE_CLIP:
|
||||
ts = &btheme->tclip;
|
||||
break;
|
||||
case SPACE_COLLECTIONS:
|
||||
ts = &btheme->tcollections;
|
||||
break;
|
||||
default:
|
||||
ts = &btheme->tv3d;
|
||||
break;
|
||||
@@ -1206,6 +1209,11 @@ void ui_theme_init_default(void)
|
||||
rgba_char_args_set(btheme->tclip.strip_select, 0xff, 0x8c, 0x00, 0xff);
|
||||
btheme->tclip.handle_vertex_size = 5;
|
||||
ui_theme_space_init_handles_color(&btheme->tclip);
|
||||
|
||||
/* space collection manager */
|
||||
btheme->tcollections = btheme->tv3d;
|
||||
rgba_char_args_set_fl(btheme->tcollections.back, 0.42, 0.42, 0.42, 1.0);
|
||||
rgba_char_args_set(btheme->tcollections.hilite, 255, 140, 25, 255); /* selected files */
|
||||
}
|
||||
|
||||
void ui_style_init_default(void)
|
||||
@@ -2834,7 +2842,11 @@ void init_userdef_do_versions(void)
|
||||
* (keep this block even if it becomes empty).
|
||||
*/
|
||||
{
|
||||
|
||||
for (bTheme *btheme = U.themes.first; btheme; btheme = btheme->next) {
|
||||
btheme->tcollections = btheme->tv3d;
|
||||
rgba_char_args_set_fl(btheme->tcollections.back, 0.42, 0.42, 0.42, 1.0);
|
||||
rgba_char_args_set(btheme->tcollections.hilite, 255, 140, 25, 255); /* selected files */
|
||||
}
|
||||
}
|
||||
|
||||
if (U.pixelsize == 0.0f)
|
||||
|
||||
@@ -75,6 +75,18 @@ void fdrawbox(float x1, float y1, float x2, float y2)
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void fdrawbox_filled(float x1, float y1, float x2, float y2)
|
||||
{
|
||||
glBegin(GL_POLYGON);
|
||||
|
||||
glVertex2f(x1, y1);
|
||||
glVertex2f(x1, y2);
|
||||
glVertex2f(x2, y2);
|
||||
glVertex2f(x2, y1);
|
||||
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void fdrawcheckerboard(float x1, float y1, float x2, float y2) /* DEPRECATED */
|
||||
{
|
||||
unsigned char col1[4] = {40, 40, 40}, col2[4] = {50, 50, 50};
|
||||
|
||||
@@ -321,6 +321,10 @@ int ED_operator_info_active(bContext *C)
|
||||
return ed_spacetype_test(C, SPACE_INFO);
|
||||
}
|
||||
|
||||
int ED_operator_collections_active(bContext *C)
|
||||
{
|
||||
return ed_spacetype_test(C, SPACE_COLLECTIONS);
|
||||
}
|
||||
|
||||
int ED_operator_console_active(bContext *C)
|
||||
{
|
||||
|
||||
@@ -96,6 +96,7 @@ void ED_spacetypes_init(void)
|
||||
ED_spacetype_console();
|
||||
ED_spacetype_userpref();
|
||||
ED_spacetype_clip();
|
||||
ED_spacetype_collections();
|
||||
// ...
|
||||
|
||||
/* register operator types for screen and all spaces */
|
||||
|
||||
45
source/blender/editors/space_collections/CMakeLists.txt
Normal file
45
source/blender/editors/space_collections/CMakeLists.txt
Normal file
@@ -0,0 +1,45 @@
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
# 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
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# 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,
|
||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# Contributor(s): Jacques Beaurain.
|
||||
#
|
||||
# ***** END GPL LICENSE BLOCK *****
|
||||
|
||||
set(INC
|
||||
../include
|
||||
../../blenkernel
|
||||
../../blenlib
|
||||
../../blentranslation
|
||||
../../gpu
|
||||
../../makesdna
|
||||
../../makesrna
|
||||
../../windowmanager
|
||||
../../../../intern/guardedalloc
|
||||
../../../../intern/glew-mx
|
||||
)
|
||||
|
||||
set(INC_SYS
|
||||
${GLEW_INCLUDE_PATH}
|
||||
)
|
||||
|
||||
set(SRC
|
||||
collections_ops.c
|
||||
space_collections.c
|
||||
|
||||
collections_intern.h
|
||||
)
|
||||
|
||||
blender_add_lib(bf_editor_space_collections "${SRC}" "${INC}" "${INC_SYS}")
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||
*
|
||||
* 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
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_collections/collections_intern.h
|
||||
* \ingroup spcollections
|
||||
*/
|
||||
|
||||
#ifndef __COLLECTIONS_INTERN_H__
|
||||
#define __COLLECTIONS_INTERN_H__
|
||||
|
||||
struct wmKeyConfig;
|
||||
|
||||
/* collections_ops.c */
|
||||
void collections_operatortypes(void);
|
||||
void collections_keymap(struct wmKeyConfig *keyconf);
|
||||
|
||||
#endif /* __COLLECTIONS_INTERN_H__ */
|
||||
|
||||
37
source/blender/editors/space_collections/collections_ops.c
Normal file
37
source/blender/editors/space_collections/collections_ops.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||
*
|
||||
* 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
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_collections/collections_ops.c
|
||||
* \ingroup spcollections
|
||||
*/
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "collections_intern.h" /* own include */
|
||||
|
||||
|
||||
/* ************************** registration - operator types **********************************/
|
||||
|
||||
void collections_operatortypes(void)
|
||||
{
|
||||
}
|
||||
|
||||
void collections_keymap(wmKeyConfig *UNUSED(keyconf))
|
||||
{
|
||||
}
|
||||
182
source/blender/editors/space_collections/space_collections.c
Normal file
182
source/blender/editors/space_collections/space_collections.c
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||
*
|
||||
* 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
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
/** \file blender/editors/space_collections/space_collections.c
|
||||
* \ingroup spcollections
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "BIF_gl.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_screen.h"
|
||||
|
||||
#include "BLI_ghash.h"
|
||||
#include "BLI_listbase.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
#include "ED_space_api.h"
|
||||
|
||||
#include "UI_resources.h"
|
||||
#include "UI_view2d.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "collections_intern.h" /* own include */
|
||||
|
||||
/* ******************** default callbacks for collection manager space ***************** */
|
||||
|
||||
static SpaceLink *collections_new(const bContext *UNUSED(C))
|
||||
{
|
||||
ARegion *ar;
|
||||
SpaceCollections *scollection; /* hmm, that's actually a good band name... */
|
||||
|
||||
scollection = MEM_callocN(sizeof(SpaceCollections), __func__);
|
||||
scollection->spacetype = SPACE_COLLECTIONS;
|
||||
|
||||
/* header */
|
||||
ar = MEM_callocN(sizeof(ARegion), "header for collection manager");
|
||||
BLI_addtail(&scollection->regionbase, ar);
|
||||
ar->regiontype = RGN_TYPE_HEADER;
|
||||
ar->alignment = RGN_ALIGN_BOTTOM;
|
||||
|
||||
/* main region */
|
||||
ar = MEM_callocN(sizeof(ARegion), "main region for collection manager");
|
||||
BLI_addtail(&scollection->regionbase, ar);
|
||||
ar->regiontype = RGN_TYPE_WINDOW;
|
||||
ar->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM | V2D_SCROLL_HORIZONTAL_HIDE | V2D_SCROLL_VERTICAL_HIDE);
|
||||
ar->v2d.align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_POS_Y);
|
||||
|
||||
return (SpaceLink *)scollection;
|
||||
}
|
||||
|
||||
static void collections_free(SpaceLink *UNUSED(sl))
|
||||
{
|
||||
}
|
||||
|
||||
static SpaceLink *collections_duplicate(SpaceLink *sl)
|
||||
{
|
||||
SpaceCollections *scollection = MEM_dupallocN(sl);
|
||||
|
||||
/* clear or remove stuff from old */
|
||||
|
||||
return (SpaceLink *)scollection;
|
||||
}
|
||||
|
||||
/* add handlers, stuff you only do once or on area/region changes */
|
||||
static void collection_main_region_init(wmWindowManager *wm, ARegion *ar)
|
||||
{
|
||||
UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy);
|
||||
ar->v2d.scroll |= (V2D_SCROLL_VERTICAL_FULLR | V2D_SCROLL_HORIZONTAL_FULLR);
|
||||
|
||||
/* own keymap */
|
||||
wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "Layer Manager", SPACE_COLLECTIONS, 0);
|
||||
WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
|
||||
}
|
||||
|
||||
static void collections_main_region_draw(const bContext *C, ARegion *ar)
|
||||
{
|
||||
SpaceCollections *spc = CTX_wm_space_collections(C);
|
||||
View2D *v2d = &ar->v2d;
|
||||
|
||||
if (spc->flag & SC_COLLECTION_DATA_REFRESH) {
|
||||
}
|
||||
|
||||
/* v2d has initialized flag, so this call will only set the mask correct */
|
||||
UI_view2d_region_reinit(v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy);
|
||||
|
||||
UI_ThemeClearColor(TH_BACK);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
/* reset view matrix */
|
||||
UI_view2d_view_restore(C);
|
||||
|
||||
/* scrollers */
|
||||
View2DScrollers *scrollers;
|
||||
scrollers = UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY);
|
||||
UI_view2d_scrollers_draw(C, v2d, scrollers);
|
||||
UI_view2d_scrollers_free(scrollers);
|
||||
}
|
||||
|
||||
/* add handlers, stuff you only do once or on area/region changes */
|
||||
static void collections_header_region_init(wmWindowManager *UNUSED(wm), ARegion *ar)
|
||||
{
|
||||
ED_region_header_init(ar);
|
||||
}
|
||||
|
||||
static void collections_header_region_draw(const bContext *C, ARegion *ar)
|
||||
{
|
||||
ED_region_header(C, ar);
|
||||
}
|
||||
|
||||
static void collections_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
|
||||
{
|
||||
switch (wmn->category) {
|
||||
case NC_SCENE:
|
||||
if (wmn->data == ND_LAYER) {
|
||||
ED_region_tag_redraw(ar);
|
||||
}
|
||||
break;
|
||||
case NC_SPACE:
|
||||
if (wmn->data == ND_SPACE_COLLECTIONS) {
|
||||
ED_region_tag_redraw(ar);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* only called once, from space/spacetypes.c */
|
||||
void ED_spacetype_collections(void)
|
||||
{
|
||||
SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype collections");
|
||||
ARegionType *art;
|
||||
|
||||
st->spaceid = SPACE_COLLECTIONS;
|
||||
strncpy(st->name, "LayerManager", BKE_ST_MAXNAME);
|
||||
|
||||
st->new = collections_new;
|
||||
st->free = collections_free;
|
||||
st->duplicate = collections_duplicate;
|
||||
st->operatortypes = collections_operatortypes;
|
||||
st->keymap = collections_keymap;
|
||||
|
||||
/* regions: main window */
|
||||
art = MEM_callocN(sizeof(ARegionType), "spacetype collections region");
|
||||
art->regionid = RGN_TYPE_WINDOW;
|
||||
art->init = collection_main_region_init;
|
||||
art->draw = collections_main_region_draw;
|
||||
art->listener = collections_main_region_listener;
|
||||
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D;
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
/* regions: header */
|
||||
art = MEM_callocN(sizeof(ARegionType), "spacetype collections header");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->prefsizey = HEADERY;
|
||||
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_HEADER;
|
||||
art->init = collections_header_region_init;
|
||||
art->draw = collections_header_region_draw;
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
BKE_spacetype_register(st);
|
||||
}
|
||||
@@ -1343,6 +1343,20 @@ typedef enum eSpaceClip_GPencil_Source {
|
||||
SC_GPENCIL_SRC_TRACK = 1,
|
||||
} eSpaceClip_GPencil_Source;
|
||||
|
||||
/* Collection Manager ======================================= */
|
||||
|
||||
typedef struct SpaceCollections {
|
||||
SpaceLink *next, *prev;
|
||||
ListBase regionbase; /* storage of regions for inactive spaces */
|
||||
int spacetype;
|
||||
int flag; /* eSpaceCollections_Flag */
|
||||
} SpaceCollections;
|
||||
|
||||
/* SpaceClip->flag */
|
||||
typedef enum eSpaceCollections_Flag {
|
||||
SC_COLLECTION_DATA_REFRESH = (1 << 0), /* recreate/update SpaceCollections layer data, needed for undo/read/write */
|
||||
} eSpaceCollections_Flag;
|
||||
|
||||
/* **************** SPACE DEFINES ********************* */
|
||||
|
||||
/* space types, moved from DNA_screen_types.h */
|
||||
@@ -1372,8 +1386,9 @@ typedef enum eSpace_Type {
|
||||
SPACE_CONSOLE = 18,
|
||||
SPACE_USERPREF = 19,
|
||||
SPACE_CLIP = 20,
|
||||
|
||||
SPACEICONMAX = SPACE_CLIP
|
||||
SPACE_COLLECTIONS = 21,
|
||||
|
||||
SPACEICONMAX = SPACE_COLLECTIONS
|
||||
} eSpace_Type;
|
||||
|
||||
/* use for function args */
|
||||
|
||||
@@ -390,7 +390,8 @@ typedef struct bTheme {
|
||||
ThemeSpace tuserpref;
|
||||
ThemeSpace tconsole;
|
||||
ThemeSpace tclip;
|
||||
|
||||
ThemeSpace tcollections;
|
||||
|
||||
/* 20 sets of bone colors for this theme */
|
||||
ThemeWireColor tarm[20];
|
||||
/*ThemeWireColor tobj[20];*/
|
||||
|
||||
@@ -574,6 +574,7 @@ extern StructRNA RNA_SpaceFileBrowser;
|
||||
extern StructRNA RNA_SpaceGraphEditor;
|
||||
extern StructRNA RNA_SpaceImageEditor;
|
||||
extern StructRNA RNA_SpaceInfo;
|
||||
extern StructRNA RNA_SpaceCollectionManager;
|
||||
extern StructRNA RNA_SpaceLogicEditor;
|
||||
extern StructRNA RNA_SpaceNLA;
|
||||
extern StructRNA RNA_SpaceNodeEditor;
|
||||
@@ -642,6 +643,7 @@ extern StructRNA RNA_ThemeFontStyle;
|
||||
extern StructRNA RNA_ThemeGraphEditor;
|
||||
extern StructRNA RNA_ThemeImageEditor;
|
||||
extern StructRNA RNA_ThemeInfo;
|
||||
extern StructRNA RNA_ThemeCollectionManager;
|
||||
extern StructRNA RNA_ThemeLogicEditor;
|
||||
extern StructRNA RNA_ThemeNLAEditor;
|
||||
extern StructRNA RNA_ThemeNodeEditor;
|
||||
|
||||
@@ -79,6 +79,7 @@ EnumPropertyItem rna_enum_space_type_items[] = {
|
||||
{0, "", ICON_NONE, NULL, NULL},
|
||||
{SPACE_BUTS, "PROPERTIES", ICON_BUTS, "Properties", "Edit properties of active object and related data-blocks"},
|
||||
{SPACE_OUTLINER, "OUTLINER", ICON_OOPS, "Outliner", "Overview of scene graph and all available data-blocks"},
|
||||
{SPACE_COLLECTIONS, "COLLECTION_MANAGER", ICON_COLLAPSEMENU, "Collections", "Edit collections of active render layer"},
|
||||
{SPACE_USERPREF, "USER_PREFERENCES", ICON_PREFERENCES, "User Preferences", "Edit persistent configuration settings"},
|
||||
{SPACE_INFO, "INFO", ICON_INFO, "Info", "Main menu bar and list of error messages (drag down to expand and display)"},
|
||||
{0, "", ICON_NONE, NULL, NULL},
|
||||
@@ -315,6 +316,8 @@ static StructRNA *rna_Space_refine(struct PointerRNA *ptr)
|
||||
return &RNA_SpaceUserPreferences;
|
||||
case SPACE_CLIP:
|
||||
return &RNA_SpaceClipEditor;
|
||||
case SPACE_COLLECTIONS:
|
||||
return &RNA_SpaceCollectionManager;
|
||||
default:
|
||||
return &RNA_Space;
|
||||
}
|
||||
@@ -4812,6 +4815,15 @@ static void rna_def_space_clip(BlenderRNA *brna)
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
|
||||
}
|
||||
|
||||
static void rna_def_space_collections(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
|
||||
srna = RNA_def_struct(brna, "SpaceCollectionManager", "Space");
|
||||
RNA_def_struct_sdna(srna, "SpaceCollections");
|
||||
RNA_def_struct_ui_text(srna, "Space Collection Manager", "Layer Collection space data");
|
||||
}
|
||||
|
||||
|
||||
void RNA_def_space(BlenderRNA *brna)
|
||||
{
|
||||
@@ -4838,6 +4850,7 @@ void RNA_def_space(BlenderRNA *brna)
|
||||
rna_def_space_node(brna);
|
||||
rna_def_space_logic(brna);
|
||||
rna_def_space_clip(brna);
|
||||
rna_def_space_collections(brna);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2956,6 +2956,26 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna)
|
||||
rna_def_userdef_theme_spaces_curves(srna, false, false, false, true);
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_space_collections(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
srna = RNA_def_struct(brna, "ThemeCollectionManager", NULL);
|
||||
RNA_def_struct_sdna(srna, "ThemeSpace");
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Collection Manager", "Theme settings for the Collection Manager");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
rna_def_userdef_theme_spaces_list_main(srna);
|
||||
|
||||
prop = RNA_def_property(srna, "selected_collection", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "hilite");
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Selected Collection", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_themes(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
@@ -2982,6 +3002,7 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
|
||||
{16, "FILE_BROWSER", ICON_FILESEL, "File Browser", ""},
|
||||
{17, "CONSOLE", ICON_CONSOLE, "Python Console", ""},
|
||||
{20, "CLIP_EDITOR", ICON_CLIP, "Movie Clip Editor", ""},
|
||||
{21, "COLLECTION_MANAGER", ICON_COLLAPSEMENU, "Collection Manager", ""},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -3115,6 +3136,12 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "tclip");
|
||||
RNA_def_property_struct_type(prop, "ThemeClipEditor");
|
||||
RNA_def_property_ui_text(prop, "Clip Editor", "");
|
||||
|
||||
prop = RNA_def_property(srna, "collection_manager", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_NEVER_NULL);
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "tcollections");
|
||||
RNA_def_property_struct_type(prop, "ThemeCollectionManager");
|
||||
RNA_def_property_ui_text(prop, "Collection Manager", "");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_addon(BlenderRNA *brna)
|
||||
@@ -3205,6 +3232,7 @@ static void rna_def_userdef_dothemes(BlenderRNA *brna)
|
||||
rna_def_userdef_theme_space_console(brna);
|
||||
rna_def_userdef_theme_space_logic(brna);
|
||||
rna_def_userdef_theme_space_clip(brna);
|
||||
rna_def_userdef_theme_space_collections(brna);
|
||||
rna_def_userdef_theme_colorset(brna);
|
||||
rna_def_userdef_themes(brna);
|
||||
}
|
||||
|
||||
@@ -174,6 +174,7 @@ static eSpace_Type rna_Space_refine_reverse(StructRNA *srna)
|
||||
if (srna == &RNA_SpaceConsole) return SPACE_CONSOLE;
|
||||
if (srna == &RNA_SpaceUserPreferences) return SPACE_USERPREF;
|
||||
if (srna == &RNA_SpaceClipEditor) return SPACE_CLIP;
|
||||
if (srna == &RNA_SpaceCollectionManager) return SPACE_COLLECTIONS;
|
||||
return SPACE_EMPTY;
|
||||
}
|
||||
|
||||
|
||||
@@ -364,6 +364,7 @@ typedef struct wmNotifier {
|
||||
#define ND_SPACE_CHANGED (18<<16) /*sent to a new editor type after it's replaced an old one*/
|
||||
#define ND_SPACE_CLIP (19<<16)
|
||||
#define ND_SPACE_FILE_PREVIEW (20<<16)
|
||||
#define ND_SPACE_COLLECTIONS (21<<16)
|
||||
|
||||
/* subtype, 256 entries too */
|
||||
#define NOTE_SUBTYPE 0x0000FF00
|
||||
|
||||
@@ -1861,6 +1861,10 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname)
|
||||
else if (STRPREFIX(opname, "OUTLINER_OT")) {
|
||||
km = WM_keymap_find_all(C, "Outliner", sl->spacetype, 0);
|
||||
}
|
||||
/* Layer Manager */
|
||||
else if (STRPREFIX(opname, "COLLECTIONS_OT")) {
|
||||
km = WM_keymap_find_all(C, "Collection Manager", sl->spacetype, 0);
|
||||
}
|
||||
/* Transform */
|
||||
else if (STRPREFIX(opname, "TRANSFORM_OT")) {
|
||||
/* check for relevant editor */
|
||||
|
||||
Reference in New Issue
Block a user