Implement closable tab.

This commit is contained in:
2023-11-30 15:10:44 +08:00
parent 048a9f54fb
commit d8048b1d89
3 changed files with 313 additions and 6 deletions

View File

@@ -13,9 +13,12 @@ namespace Cryville.Crtr.Browsing.UI {
[SerializeField]
TextMeshProUGUI m_text;
[SerializeField]
Button m_closeButton;
[SerializeField]
float m_deselectedAlpha = 0.6f;
public event Action<BrowserTab> Clicked;
public event Action<BrowserTab> Closed;
public Sprite Icon {
get { return m_icon.sprite; }
@@ -25,6 +28,10 @@ namespace Cryville.Crtr.Browsing.UI {
get { return m_text.text; }
set { m_text.text = value; }
}
public bool Closable {
get { return m_closeButton.gameObject.activeSelf; }
set { m_closeButton.gameObject.SetActive(value); }
}
bool m_selected;
public bool Selected {
@@ -45,11 +52,15 @@ namespace Cryville.Crtr.Browsing.UI {
void Awake() {
_group = GetComponent<CanvasGroup>();
_layout = GetComponent<BrowserTabLayout>();
m_closeButton.onClick.AddListener(OnCloseClicked);
UpdateSelected();
}
public void OnPointerClick(PointerEventData eventData) {
Clicked?.Invoke(this);
}
public void OnCloseClicked() {
Closed?.Invoke(this);
}
}
}

View File

@@ -47,6 +47,7 @@ namespace Cryville.Crtr.Browsing.UI {
tab.Icon = browser.Icon;
tab.Text = name;
tab.Clicked += OnTabClicked;
tab.Closed += OnTabClosed;
browser.gameObject.SetActive(false);
_tabs.Add(tab, browser);
return tab;
@@ -64,6 +65,12 @@ namespace Cryville.Crtr.Browsing.UI {
_tabs[_currentTab].gameObject.SetActive(true);
}
}
void OnTabClosed(BrowserTab tab) {
Destroy(tab.gameObject);
Destroy(_tabs[tab].gameObject);
_tabs.Remove(tab);
if (_currentTab == tab) _currentTab = null;
}
void OnActionsChanged() {
foreach (var tab in _tabs) {

View File

@@ -50,7 +50,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4152cfa558755cd44bf81d408a0fdeb6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_aspectRatio: 1
m_aspectRatio: 0.6
m_isVertical: 0
--- !u!1 &1950821457908238823
GameObject:
@@ -261,6 +261,7 @@ RectTransform:
m_Children:
- {fileID: 8933519220164484658}
- {fileID: 196868636178997228}
- {fileID: 7583083652338078371}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -402,6 +403,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_icon: {fileID: 262420016426466097}
m_text: {fileID: 1950821457908238818}
m_closeButton: {fileID: 7074654772311656957}
m_deselectedAlpha: 0.6
--- !u!114 &1950821458490172666
MonoBehaviour:
@@ -430,8 +432,8 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Left: 12
m_Right: 8
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 3
@@ -516,7 +518,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 8
m_Right: 0
m_Top: 4
m_Bottom: 4
m_ChildAlignment: 0
@@ -526,6 +528,293 @@ MonoBehaviour:
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
--- !u!1 &2934925711997970974
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2584485007010372945}
- component: {fileID: 5617054805027653231}
- component: {fileID: 9077288180321115386}
- component: {fileID: 4484088173748341514}
m_Layer: 5
m_Name: _text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2584485007010372945
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2934925711997970974}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 7583083652338078371}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5617054805027653231
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2934925711997970974}
m_CullTransparentMesh: 1
--- !u!114 &9077288180321115386
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2934925711997970974}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 83e7715acbfae1d4b84414c13d03ed3f, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\xD7"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 55abfc132f6c8ee4a8c912218ff4cc77, type: 2}
m_sharedMaterial: {fileID: 5827430292905875570, guid: 55abfc132f6c8ee4a8c912218ff4cc77,
type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 0
m_fontSizeMax: 0
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_parseCtrlCharacters: 0
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!114 &4484088173748341514
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2934925711997970974}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 57404eb6519ecae44b051485280e879f, type: 3}
m_Name:
m_EditorClassIdentifier:
m_shader: {fileID: 0}
--- !u!1 &5637100345084011874
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7583083652338078371}
- component: {fileID: 3532179571627654188}
- component: {fileID: 2613012256084569388}
- component: {fileID: 7074654772311656957}
- component: {fileID: 6229336928005927970}
m_Layer: 5
m_Name: Close
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &7583083652338078371
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5637100345084011874}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2584485007010372945}
m_Father: {fileID: 1950821458490172548}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 130, y: -20}
m_SizeDelta: {x: 24, y: 40}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3532179571627654188
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5637100345084011874}
m_CullTransparentMesh: 1
--- !u!114 &2613012256084569388
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5637100345084011874}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &7074654772311656957
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5637100345084011874}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 9077288180321115386}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &6229336928005927970
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5637100345084011874}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4152cfa558755cd44bf81d408a0fdeb6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_aspectRatio: 0.6
m_isVertical: 0
--- !u!1 &6751278081830119663
GameObject:
m_ObjectHideFlags: 0
@@ -559,8 +848,8 @@ RectTransform:
m_Father: {fileID: 8933519220164484658}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.3, y: 0.2}
m_AnchorMax: {x: 0.9, y: 0.8}
m_AnchorMin: {x: 0, y: 0.2}
m_AnchorMax: {x: 1, y: 0.8}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}