Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/screen/workspace_edit.c
| Show First 20 Lines • Show All 192 Lines • ▼ Show 20 Lines | WorkSpace *ED_workspace_duplicate(WorkSpace *workspace_old, Main *bmain, wmWindow *win) | ||||
| workspace_new->flags = workspace_old->flags; | workspace_new->flags = workspace_old->flags; | ||||
| workspace_new->object_mode = workspace_old->object_mode; | workspace_new->object_mode = workspace_old->object_mode; | ||||
| workspace_new->order = workspace_old->order; | workspace_new->order = workspace_old->order; | ||||
| BLI_duplicatelist(&workspace_new->owner_ids, &workspace_old->owner_ids); | BLI_duplicatelist(&workspace_new->owner_ids, &workspace_old->owner_ids); | ||||
| /* TODO(campbell): tools */ | /* TODO(campbell): tools */ | ||||
| for (WorkSpaceLayout *layout_old = layouts_old->first; layout_old; | LISTBASE_FOREACH (WorkSpaceLayout *, layout_old, layouts_old) { | ||||
| layout_old = layout_old->next) { | |||||
| WorkSpaceLayout *layout_new = ED_workspace_layout_duplicate( | WorkSpaceLayout *layout_new = ED_workspace_layout_duplicate( | ||||
| bmain, workspace_new, layout_old, win); | bmain, 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(WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm) | bool ED_workspace_delete(WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm) | ||||
| { | { | ||||
| if (BLI_listbase_is_single(&bmain->workspaces)) { | if (BLI_listbase_is_single(&bmain->workspaces)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| ListBase ordered; | ListBase ordered; | ||||
| BKE_id_ordered_list(&ordered, &bmain->workspaces); | BKE_id_ordered_list(&ordered, &bmain->workspaces); | ||||
| WorkSpace *prev = NULL, *next = NULL; | WorkSpace *prev = NULL, *next = NULL; | ||||
| for (LinkData *link = ordered.first; link; link = link->next) { | LISTBASE_FOREACH (LinkData *, link, &ordered) { | ||||
| if (link->data == workspace) { | if (link->data == workspace) { | ||||
| prev = link->prev ? link->prev->data : NULL; | prev = link->prev ? link->prev->data : NULL; | ||||
| next = link->next ? link->next->data : NULL; | next = link->next ? link->next->data : NULL; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| BLI_freelistN(&ordered); | BLI_freelistN(&ordered); | ||||
| BLI_assert((prev != NULL) || (next != NULL)); | BLI_assert((prev != NULL) || (next != NULL)); | ||||
| for (wmWindow *win = wm->windows.first; win; win = win->next) { | LISTBASE_FOREACH (wmWindow *, win, &wm->windows) { | ||||
| WorkSpace *workspace_active = WM_window_get_active_workspace(win); | WorkSpace *workspace_active = WM_window_get_active_workspace(win); | ||||
| if (workspace_active == workspace) { | if (workspace_active == workspace) { | ||||
| ED_workspace_change((prev != NULL) ? prev : next, C, wm, win); | ED_workspace_change((prev != NULL) ? prev : next, C, wm, win); | ||||
| } | } | ||||
| } | } | ||||
| BKE_id_free(bmain, &workspace->id); | BKE_id_free(bmain, &workspace->id); | ||||
| return true; | return true; | ||||
| ▲ Show 20 Lines • Show All 232 Lines • ▼ Show 20 Lines | static int workspace_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) | ||||
| uiPopupMenu *pup = UI_popup_menu_begin(C, op->type->name, ICON_ADD); | uiPopupMenu *pup = UI_popup_menu_begin(C, op->type->name, ICON_ADD); | ||||
| uiLayout *layout = UI_popup_menu_layout(pup); | uiLayout *layout = UI_popup_menu_layout(pup); | ||||
| uiItemMenuF(layout, IFACE_("General"), ICON_NONE, workspace_add_menu, NULL); | uiItemMenuF(layout, IFACE_("General"), ICON_NONE, workspace_add_menu, NULL); | ||||
| ListBase templates; | ListBase templates; | ||||
| BKE_appdir_app_templates(&templates); | BKE_appdir_app_templates(&templates); | ||||
| for (LinkData *link = templates.first; link; link = link->next) { | LISTBASE_FOREACH (LinkData *, link, &templates) { | ||||
| char *template = link->data; | char *template = link->data; | ||||
| char display_name[FILE_MAX]; | char display_name[FILE_MAX]; | ||||
| BLI_path_to_display_name(display_name, sizeof(display_name), template); | BLI_path_to_display_name(display_name, sizeof(display_name), template); | ||||
| /* Steals ownership of link data string. */ | /* Steals ownership of link data string. */ | ||||
| uiItemMenuFN(layout, display_name, ICON_NONE, workspace_add_menu, template); | uiItemMenuFN(layout, display_name, ICON_NONE, workspace_add_menu, template); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 84 Lines • Show Last 20 Lines | |||||