UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SDockingTabStack.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Layout/Margin.h"
7#include "Layout/Visibility.h"
10#include "Layout/Geometry.h"
11#include "Input/Reply.h"
12#include "Widgets/SWidget.h"
16
17#define DEBUG_TAB_MANAGEMENT 0
18
19class FUICommandList;
20class FWeakWidgetPath;
21class FWidgetPath;
22class SDockingTabWell;
23class SBorder;
24
25template<typename ChildType> class TSlotlessChildren;
26
28{
34
35 // Content that appears on the left side of tabs in this docking stack
37
38 // Content that appears on the right side of tabs in this docking stack
40
41 // Content that appears on the right side of the title bar in the window this stack is in
43};
44
45
52{
53public:
58
59 virtual Type GetNodeType() const override
60 {
62 }
63
65
67
68 SLATE_API void OnTabRemoved( const FTabId& TabId );
69
70 SLATE_API void Construct( const FArguments& InArgs, const TSharedRef<FTabManager::FStack>& PersistentNode );
71
72 // TabStack methods
73
75
77
79
82
84 SLATE_API void SetTabPinnedInSidebar(const TSharedRef<SDockTab>& InTab, bool bPinnedInSidebar);
85
88
91
94
97
100
101 SLATE_API bool HasTab( const struct FTabMatcher& TabMatcher ) const;
102
105
107
108 SLATE_API bool IsShowingLiveTabs() const;
109
111
114
116
118 SLATE_API virtual TArray< TSharedRef<SDockTab> > GetAllChildTabs() const override;
119
121 SLATE_API virtual int32 GetNumTabs() const override;
122
123 SLATE_API virtual SSplitter::ESizeRule GetSizeRule() const override;
124
130 SLATE_API bool CanHideTabWell() const;
131
132
139 SLATE_API bool IsTabWellHidden() const;
140
142
144 enum class EChromeElement
145 {
146 Icon,
148 };
149
160
161public:
164 SLATE_API virtual void OnDragLeave( const FDragDropEvent& DragDropEvent ) override;
165 SLATE_API virtual FReply OnDrop( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) override;
168 SLATE_API virtual FReply OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) override;
169 virtual bool SupportsKeyboardFocus() const override { return true; }
170
171protected:
172
174 {
175 // Pretend we are a title bar so the user can grab the area to move the window around
177 }
178
180
187
189 {
190 Left,
191 Right
192 };
193
195
202
204
206
208
210
211 SLATE_API void RemovePersistentTab( const FTabId& TabId );
212
215
217 bool IsContentEnabled() const;
218
219private:
220
223
224
232 SLATE_API TSharedRef< SDockingTabStack > CreateNewTabStackBySplitting( const SDockingNode::RelativeDirection Direction );
233
235 SLATE_API const FSlateBrush* GetContentAreaBrush() const;
236
238 SLATE_API FMargin GetContentPadding() const;
239
241 SLATE_API const FSlateBrush* GetTabWellBrush() const;
242
244 SLATE_API EVisibility GetTabWellVisibility() const;
245
247 SLATE_API EVisibility GetUnhideButtonVisibility() const;
248
250 SLATE_API void ToggleTabWellVisibility();
251
253 SLATE_API void MoveForegroundTabToSidebar();
254
256 SLATE_API FReply UnhideTabWell();
257
259 SLATE_API bool CanCloseForegroundTab() const;
260
261 static int32 GetIncrementFromCloseTabsDirection(ECloseTabsDirection);
262
264 SLATE_API bool CanCloseTabsInDirectionOfForegroundTab(ECloseTabsDirection Direction) const;
265
267 SLATE_API bool CanCloseAllButForegroundTab() const;
268
270 SLATE_API bool CanMoveForegroundTabToSidebar() const;
271
273 SLATE_API bool IsTabAllowedInSidebar(TSharedPtr<SDockTab> Tab) const;
274
277
279 SHorizontalBox::FSlot* InlineContentAreaLeft;
280 SHorizontalBox::FSlot* InlineContentAreaRight;
281
282 SVerticalBox::FSlot* TitleBarSlot;
283 TSharedPtr<SWidget> TitleBarContent;
284
285 TSharedPtr<SBorder> ContentSlot;
286
287 FOverlayManagement OverlayManagement;
288
289 SLATE_API TSharedRef<SWidget> MakeContextMenu();
290
292 SLATE_API void ShowCross();
293
295 SLATE_API void HideCross();
296
298 bool bIsDocumentArea;
299
301 FCurveSequence ShowHideTabWell;
302
304 SLATE_API FVector2D GetTabWellScale() const;
305
307 SLATE_API FVector2D GetUnhideTabWellButtonScale() const;
309 SLATE_API FSlateColor GetUnhideTabWellButtonOpacity() const;
310
312 SLATE_API const FSlateBrush* GetTabStackBorderImage() const;
313
317 SLATE_API EVisibility GetMaximizeSpacerVisibility() const;
318
320 SLATE_API void BindTabCommands();
321
323 SLATE_API void ExecuteCloseMajorTabCommand();
324
326 SLATE_API bool CanExecuteCloseMajorTabCommand();
327
329 SLATE_API void ExecuteCloseMinorTabCommand();
330
332 SLATE_API bool CanExecuteCloseMinorTabCommand();
333
335 SLATE_API void ExecuteCloseFocusedTabCommand();
336
338 SLATE_API bool CanExecuteCloseFocusedTabCommand();
339
341 SLATE_API virtual void OnResized() override;
342
343#if DEBUG_TAB_MANAGEMENT
344 SLATE_API FString ShowPersistentTabs() const;
345#endif
346
349
351 bool bShowingTitleBarArea;
352};
353
354
356{
357 FTabMatcher( const FTabId& InTabId, ETabState::Type InTabState = static_cast<ETabState::Type>(ETabState::ClosedTab | ETabState::OpenedTab | ETabState::SidebarTab), const bool InTreatIndexNoneAsWildcard = true )
361 {
362 }
363
364 bool operator()(const FTabManager::FTab& Candidate) const
365 {
366 return
367 ((Candidate.TabState & RequiredTabState) != 0) &&
368 (Candidate.TabId.TabType == TabIdToMatch.TabType) &&
369 // INDEX_NONE is treated as a wildcard
370 ((TreatIndexNoneAsWildcard && TabIdToMatch.InstanceId == INDEX_NONE) || TabIdToMatch.InstanceId == Candidate.TabId.InstanceId);;
371 }
372
374 ETabState::Type RequiredTabState;
376};
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define SLATE_END_ARGS()
Definition DeclarativeSyntaxSupport.h:116
#define SLATE_ARGUMENT(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:208
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition DragAndDrop.h:141
Definition NameTypes.h:617
Definition Reply.h:24
Definition UICommandList.h:16
Definition WidgetPath.h:213
Definition WidgetPath.h:51
Definition SBorder.h:31
Definition SDockingNode.h:19
ECleanupRetVal
Definition SDockingNode.h:129
RelativeDirection
Definition SDockingNode.h:38
Type
Definition SDockingNode.h:22
@ DockTabStack
Definition SDockingNode.h:27
ELayoutModification
Definition SDockingNode.h:77
Definition SDockingTabStack.h:52
SLATE_API bool IsTabPinnedInSidebar(const TSharedRef< SDockTab > &InTab)
Definition SDockingTabStack.cpp:360
virtual SLATE_API TArray< TSharedRef< SDockTab > > GetAllChildTabs() const override
Definition SDockingTabStack.cpp:575
SLATE_API void CloseAllButForegroundTab(ETabsToClose TabsToClose)
Definition SDockingTabStack.cpp:616
bool IsContentEnabled() const
Definition SDockingTabStack.cpp:981
SLATE_API void OnTabClosed(const TSharedRef< SDockTab > &ClosedTab, SDockingNode::ELayoutModification RemovalMethod)
Definition SDockingTabStack.cpp:249
SLATE_API float GetTabSidebarSizeCoefficient(const TSharedRef< SDockTab > &InTab)
Definition SDockingTabStack.cpp:340
SLATE_API void SetTabWellHidden(bool bShouldHideTabWell)
Definition SDockingTabStack.cpp:1240
SLATE_API bool IsShowingLiveTabs() const
Definition SDockingTabStack.cpp:436
SLATE_API void ReserveSpaceForWindowChrome(EChromeElement Element, bool bIncludePaddingForMenuBar, bool bOnlyMinorTabs)
Definition SDockingTabStack.cpp:907
SLATE_API void RemoveClosedTabsWithName(FName InName)
Definition SDockingTabStack.cpp:420
SLATE_API void RemovePersistentTab(const FTabId &TabId)
Definition SDockingTabStack.cpp:1396
virtual SLATE_API SDockingNode::ECleanupRetVal CleanUpNodes() override
Definition SDockingTabStack.cpp:654
SLATE_API void RestoreTabFromSidebar(TSharedRef< SDockTab > Tab)
Definition SDockingTabStack.cpp:1082
virtual SLATE_API int32 GetNumTabs() const override
Definition SDockingTabStack.cpp:405
SLATE_API int32 ClosePersistentTab(const FTabId &TabId)
Definition SDockingTabStack.cpp:1386
virtual SLATE_API FReply OnMouseButtonDown(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SDockingTabStack.cpp:521
SLATE_API void CloseForegroundTab()
Definition SDockingTabStack.cpp:580
virtual SLATE_API FReply OnDragOver(const FGeometry &MyGeometry, const FDragDropEvent &DragDropEvent) override
Definition SDockingTabStack.cpp:462
virtual SLATE_API void OnFocusChanging(const FWeakWidgetPath &PreviousFocusPath, const FWidgetPath &NewWidgetPath, const FFocusEvent &InFocusEvent) override
Definition SDockingTabStack.cpp:505
SLATE_API void OpenTab(const TSharedRef< SDockTab > &InTab, int32 InsertAtLocation=INDEX_NONE, bool bKeepInactive=false)
Definition SDockingTabStack.cpp:275
SLATE_BEGIN_ARGS(SDockingTabStack)
Definition SDockingTabStack.h:54
SLATE_API void SetTabPinnedInSidebar(const TSharedRef< SDockTab > &InTab, bool bPinnedInSidebar)
Definition SDockingTabStack.cpp:371
SLATE_API void SetTabSidebarSizeCoefficient(const TSharedRef< SDockTab > &InTab, float InSizeCoefficient)
Definition SDockingTabStack.cpp:351
SLATE_API bool CanHideTabWell() const
Definition SDockingTabStack.cpp:1104
virtual SLATE_API FReply OnDrop(const FGeometry &MyGeometry, const FDragDropEvent &DragDropEvent) override
Definition SDockingTabStack.cpp:495
SLATE_API void AddSidebarTab(const TSharedRef< SDockTab > &InTab)
Definition SDockingTabStack.cpp:335
SLATE_API void Construct(const FArguments &InArgs, const TSharedRef< FTabManager::FStack > &PersistentNode)
Definition SDockingTabStack.cpp:48
SLATE_API void CloseTabsInDirectionFromForegroundTab(ETabsToClose TabsToClose, ECloseTabsDirection Direction)
Definition SDockingTabStack.cpp:589
SLATE_API int32 OpenPersistentTab(const FTabId &TabId, int32 OpenLocationAmongActiveTabs=INDEX_NONE)
Definition SDockingTabStack.cpp:1285
virtual SLATE_API void SetParentNode(TSharedRef< class SDockingSplitter > InParent) override
Definition SDockingTabStack.cpp:974
SLATE_API void SetTabLocked(const TSharedRef< const SDockTab > &InTab, TOptional< bool > bInLocked)
Definition SDockingTabStack.cpp:391
SLATE_API const TSlotlessChildren< SDockTab > & GetTabs() const
Definition SDockingTabStack.cpp:400
SLATE_API bool IsTabLocked(const TSharedRef< const SDockTab > &InTab) const
Definition SDockingTabStack.cpp:380
SLATE_API void BringToFront(const TSharedRef< SDockTab > &TabToBringToFront)
Definition SDockingTabStack.cpp:441
virtual SLATE_API FReply OnKeyDown(const FGeometry &MyGeometry, const FKeyEvent &InKeyEvent) override
Definition SDockingTabStack.cpp:547
virtual SLATE_API TSharedPtr< FTabManager::FLayoutNode > GatherPersistentLayout() const override
Definition SDockingTabStack.cpp:858
SLATE_API void OnTabRemoved(const FTabId &TabId)
Definition SDockingTabStack.cpp:270
SLATE_API void OnLastTabRemoved()
Definition SDockingTabStack.cpp:235
virtual SLATE_API void OnDragLeave(const FDragDropEvent &DragDropEvent) override
Definition SDockingTabStack.cpp:487
virtual SLATE_API FReply OnUserAttemptingDock(SDockingNode::RelativeDirection Direction, const FDragDropEvent &DragDropEvent) override
Definition SDockingTabStack.cpp:557
SLATE_API bool HasTab(const struct FTabMatcher &TabMatcher) const
Definition SDockingTabStack.cpp:410
virtual SLATE_API SSplitter::ESizeRule GetSizeRule() const override
Definition SDockingTabStack.cpp:1219
virtual Type GetNodeType() const override
Definition SDockingTabStack.h:59
ECloseTabsDirection
Definition SDockingTabStack.h:189
SLATE_API FGeometry GetTabStackGeometry() const
Definition SDockingTabStack.cpp:415
SLATE_API void ClearReservedSpace()
Definition SDockingTabStack.cpp:901
SLATE_API void MoveTabToSidebar(TSharedRef< SDockTab > Tab)
Definition SDockingTabStack.cpp:1065
SLATE_API bool CanMoveTabToSideBar(TSharedRef< SDockTab > Tab) const
Definition SDockingTabStack.cpp:1199
SLATE_API bool IsTabWellHidden() const
Definition SDockingTabStack.cpp:1258
SLATE_API FReply TabWellRightClicked(const FGeometry &TabWellGeometry, const FPointerEvent &MouseEvent)
Definition SDockingTabStack.cpp:640
SLATE_API void AddTabWidget(const TSharedRef< SDockTab > &InTab, int32 AtLocation=INDEX_NONE, bool bKeepInactive=false)
Definition SDockingTabStack.cpp:316
SLATE_API void SetNodeContent(const TSharedRef< SWidget > &InContent, const FDockingStackOptionalContent &OptionalContent)
Definition SDockingTabStack.cpp:446
EChromeElement
Definition SDockingTabStack.h:145
ETabsToClose
Definition SDockingTabStack.h:182
virtual EWindowZone::Type GetWindowZoneOverride() const override
Definition SDockingTabStack.h:173
virtual bool SupportsKeyboardFocus() const override
Definition SDockingTabStack.h:169
Definition SDockingTabWell.h:32
Definition SBoxPanel.h:175
Definition SNullWidget.h:14
ESizeRule
Definition SSplitter.h:50
Definition SBoxPanel.h:326
Definition Array.h:670
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition Children.h:836
Type
Definition GenericApplicationMessageHandler.h:87
@ TitleBar
Definition GenericApplicationMessageHandler.h:98
@ false
Definition radaudio_common.h:23
Definition Visibility.h:12
Definition CurveSequence.h:26
Definition SDockingTabStack.h:28
TSharedRef< SWidget > ContentRight
Definition SDockingTabStack.h:39
FDockingStackOptionalContent()
Definition SDockingTabStack.h:29
TSharedRef< SWidget > TitleBarContentRight
Definition SDockingTabStack.h:42
TSharedRef< SWidget > ContentLeft
Definition SDockingTabStack.h:36
Definition Events.h:51
Definition Geometry.h:40
Definition Events.h:431
Definition Margin.h:17
Definition Events.h:695
Definition SlateBrush.h:239
Definition SlateColor.h:42
Definition TabManager.h:73
FName TabType
Definition TabManager.h:140
int32 InstanceId
Definition TabManager.h:141
Definition TabManager.h:468
Definition SDockingTabStack.h:356
bool TreatIndexNoneAsWildcard
Definition SDockingTabStack.h:375
FTabId TabIdToMatch
Definition SDockingTabStack.h:373
bool operator()(const FTabManager::FTab &Candidate) const
Definition SDockingTabStack.h:364
ETabState::Type RequiredTabState
Definition SDockingTabStack.h:374
FTabMatcher(const FTabId &InTabId, ETabState::Type InTabState=static_cast< ETabState::Type >(ETabState::ClosedTab|ETabState::OpenedTab|ETabState::SidebarTab), const bool InTreatIndexNoneAsWildcard=true)
Definition SDockingTabStack.h:357
Definition Optional.h:131