Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/screen/workspace_edit.c
| Show All 32 Lines | |||||
| #include "BKE_appdir.h" | #include "BKE_appdir.h" | ||||
| #include "BKE_blendfile.h" | #include "BKE_blendfile.h" | ||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| #include "BKE_idcode.h" | #include "BKE_idcode.h" | ||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BKE_library.h" | #include "BKE_library.h" | ||||
| #include "BKE_report.h" | #include "BKE_report.h" | ||||
| #include "BKE_scene.h" | |||||
| #include "BKE_screen.h" | #include "BKE_screen.h" | ||||
| #include "BKE_workspace.h" | #include "BKE_workspace.h" | ||||
| #include "BLO_readfile.h" | #include "BLO_readfile.h" | ||||
| #include "DNA_object_types.h" | #include "DNA_object_types.h" | ||||
| #include "DNA_screen_types.h" | #include "DNA_screen_types.h" | ||||
| #include "DNA_windowmanager_types.h" | #include "DNA_windowmanager_types.h" | ||||
| #include "DNA_workspace_types.h" | #include "DNA_workspace_types.h" | ||||
| #include "ED_object.h" | #include "ED_object.h" | ||||
| #include "ED_screen.h" | #include "ED_screen.h" | ||||
| #include "MEM_guardedalloc.h" | |||||
| #include "RNA_access.h" | #include "RNA_access.h" | ||||
| #include "UI_interface.h" | #include "UI_interface.h" | ||||
| #include "UI_resources.h" | #include "UI_resources.h" | ||||
| #include "WM_api.h" | #include "WM_api.h" | ||||
| #include "WM_types.h" | #include "WM_types.h" | ||||
| #include "screen_intern.h" | #include "screen_intern.h" | ||||
| /** \name Workspace API | /** \name Workspace API | ||||
| * | * | ||||
| * \brief API for managing workspaces and their data. | * \brief API for managing workspaces and their data. | ||||
| * \{ */ | * \{ */ | ||||
| WorkSpace *ED_workspace_add( | WorkSpace *ED_workspace_add( | ||||
| Main *bmain, const char *name, SceneLayer *act_render_layer) | Main *bmain, const char *name, SceneLayer *act_render_layer, ViewRender *view_render) | ||||
| { | { | ||||
| WorkSpace *workspace = BKE_workspace_add(bmain, name); | WorkSpace *workspace = BKE_workspace_add(bmain, name); | ||||
| #ifdef USE_WORKSPACE_MODE | #ifdef USE_WORKSPACE_MODE | ||||
| BKE_workspace_object_mode_set(workspace, OB_MODE_OBJECT); | BKE_workspace_object_mode_set(workspace, OB_MODE_OBJECT); | ||||
| #endif | #endif | ||||
| BKE_workspace_render_layer_set(workspace, act_render_layer); | BKE_workspace_render_layer_set(workspace, act_render_layer); | ||||
| BKE_viewrender_copy(&workspace->view_render, view_render); | |||||
| return workspace; | return workspace; | ||||
| } | } | ||||
| #ifdef USE_WORKSPACE_MODE | #ifdef USE_WORKSPACE_MODE | ||||
| /** | /** | ||||
| * Changes the object mode (if needed) to the one set in \a workspace_new. | * Changes the object mode (if needed) to the one set in \a workspace_new. | ||||
| * Object mode is still stored on object level. In future it should all be workspace level instead. | * Object mode is still stored on object level. In future it should all be workspace level instead. | ||||
| ▲ Show 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | |||||
| */ | */ | ||||
| WorkSpace *ED_workspace_duplicate( | WorkSpace *ED_workspace_duplicate( | ||||
| WorkSpace *workspace_old, Main *bmain, wmWindow *win) | WorkSpace *workspace_old, Main *bmain, wmWindow *win) | ||||
| { | { | ||||
| WorkSpaceLayout *layout_active_old = BKE_workspace_active_layout_get(win->workspace_hook); | WorkSpaceLayout *layout_active_old = BKE_workspace_active_layout_get(win->workspace_hook); | ||||
| ListBase *layouts_old = BKE_workspace_layouts_get(workspace_old); | ListBase *layouts_old = BKE_workspace_layouts_get(workspace_old); | ||||
| WorkSpace *workspace_new = ED_workspace_add( | WorkSpace *workspace_new = ED_workspace_add( | ||||
| bmain, workspace_old->id.name + 2, | bmain, workspace_old->id.name + 2, | ||||
| BKE_workspace_render_layer_get(workspace_old)); | BKE_workspace_render_layer_get(workspace_old), | ||||
| &workspace_old->view_render); | |||||
| ListBase *transform_orientations_old = BKE_workspace_transform_orientations_get(workspace_old); | ListBase *transform_orientations_old = BKE_workspace_transform_orientations_get(workspace_old); | ||||
| ListBase *transform_orientations_new = BKE_workspace_transform_orientations_get(workspace_new); | ListBase *transform_orientations_new = BKE_workspace_transform_orientations_get(workspace_new); | ||||
| #ifdef USE_WORKSPACE_MODE | #ifdef USE_WORKSPACE_MODE | ||||
| BKE_workspace_object_mode_set(workspace_new, BKE_workspace_object_mode_get(workspace_old)); | BKE_workspace_object_mode_set(workspace_new, BKE_workspace_object_mode_get(workspace_old)); | ||||
| #endif | #endif | ||||
| BLI_duplicatelist(transform_orientations_new, transform_orientations_old); | BLI_duplicatelist(transform_orientations_new, transform_orientations_old); | ||||
| for (WorkSpaceLayout *layout_old = layouts_old->first; layout_old; layout_old = layout_old->next) { | for (WorkSpaceLayout *layout_old = layouts_old->first; layout_old; layout_old = layout_old->next) { | ||||
| WorkSpaceLayout *layout_new = ED_workspace_layout_duplicate(workspace_new, layout_old, win); | WorkSpaceLayout *layout_new = ED_workspace_layout_duplicate(workspace_new, layout_old, win); | ||||
| if (layout_active_old == layout_old) { | if (layout_active_old == layout_old) { | ||||
| win->workspace_hook->temp_layout_store = layout_new; | win->workspace_hook->temp_layout_store = layout_new; | ||||
| } | } | ||||
| } | } | ||||
| return workspace_new; | return workspace_new; | ||||
| } | } | ||||
| /** | /** | ||||
| * \return if succeeded. | * \return if succeeded. | ||||
| */ | */ | ||||
| bool ED_workspace_delete( | bool ED_workspace_delete( | ||||
| WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm) | WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm) | ||||
| ▲ Show 20 Lines • Show All 197 Lines • Show Last 20 Lines | |||||