Implement action bar.
This commit is contained in:
28
Assets/Cryville/Crtr/Browsing/UI/ActionBar.cs
Normal file
28
Assets/Cryville/Crtr/Browsing/UI/ActionBar.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using Cryville.Crtr.Browsing.Actions;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
internal class ActionBar : MonoBehaviour {
|
||||
[SerializeField]
|
||||
ActionButton m_mainButton;
|
||||
|
||||
public void Load(ResourceBrowser browser, IReadOnlyCollection<IResourceAction> actions) {
|
||||
var enumerator = actions.OrderBy(i => i.Priority).GetEnumerator();
|
||||
if (enumerator.MoveNext()) {
|
||||
gameObject.SetActive(true);
|
||||
m_mainButton.Load(browser, enumerator.Current);
|
||||
// TODO Subactions
|
||||
}
|
||||
else {
|
||||
m_mainButton.Clear();
|
||||
Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public void Clear() {
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/Cryville/Crtr/Browsing/UI/ActionBar.cs.meta
Normal file
11
Assets/Cryville/Crtr/Browsing/UI/ActionBar.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2023a3c5fbf0e144588637193aabf286
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
29
Assets/Cryville/Crtr/Browsing/UI/ActionButton.cs
Normal file
29
Assets/Cryville/Crtr/Browsing/UI/ActionButton.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using Cryville.Crtr.Browsing.Actions;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
internal class ActionButton : MonoBehaviour, IPointerClickHandler {
|
||||
[SerializeField]
|
||||
TextMeshProUGUI m_text;
|
||||
|
||||
ResourceBrowser _browser;
|
||||
IResourceAction _action;
|
||||
|
||||
public void Load(ResourceBrowser browser, IResourceAction action) {
|
||||
gameObject.SetActive(true);
|
||||
_browser = browser;
|
||||
_action = action;
|
||||
m_text.text = action.Name;
|
||||
}
|
||||
public void Clear() {
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public void OnPointerClick(PointerEventData eventData) {
|
||||
if (_action == null) return;
|
||||
_browser.InvokeAction(_action);
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/Cryville/Crtr/Browsing/UI/ActionButton.cs.meta
Normal file
11
Assets/Cryville/Crtr/Browsing/UI/ActionButton.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a8a3fbcb7ecfd941bcc43425f01cfef
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -20,7 +20,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
[SerializeField]
|
||||
DetailPanel m_detailPanel;
|
||||
[SerializeField]
|
||||
GameObject m_actionBar;
|
||||
ActionBar m_actionBar;
|
||||
|
||||
IPathedResourceManager<ChartDetail> _manager;
|
||||
IResourceAction _importAction;
|
||||
@@ -77,6 +77,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
_items.Clear();
|
||||
m_itemContainer.ItemCount = _manager.Count;
|
||||
m_detailPanel.Clear();
|
||||
m_actionBar.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,8 +103,9 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
_selectedItems.Clear();
|
||||
_items[id].OnSelect();
|
||||
_selectedItems.Add(id);
|
||||
m_detailPanel.Load(_manager[id]);
|
||||
m_actionBar.SetActive(true);
|
||||
ChartDetail res = _manager[id];
|
||||
m_detailPanel.Load(res);
|
||||
m_actionBar.Load(this, Master.Actions.GetActions(res.GetType()));
|
||||
}
|
||||
|
||||
public void OnPathClicked(int index) {
|
||||
@@ -121,5 +123,19 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
if (result != 0) return;
|
||||
foreach (var item in _selectedItems.OrderByDescending(i => i)) _manager.RemoveAt(item);
|
||||
}
|
||||
|
||||
public override void InvokeAction(IResourceAction action) {
|
||||
if (_selectedItems.Count == 0) {
|
||||
Popup.Create("No item is selected.");
|
||||
return;
|
||||
}
|
||||
if (_selectedItems.Count > 1) {
|
||||
Popup.Create("Cannot run this action with multiple items.");
|
||||
return;
|
||||
}
|
||||
foreach (var i in _selectedItems) {
|
||||
action.Invoke(_manager.GetItemUri(i), _manager[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,3 +1,4 @@
|
||||
using Cryville.Crtr.Browsing.Actions;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
@@ -10,5 +11,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
protected void Init(ResourceBrowserMaster master) {
|
||||
Master = master;
|
||||
}
|
||||
|
||||
public abstract void InvokeAction(IResourceAction action);
|
||||
}
|
||||
}
|
||||
|
@@ -1,3 +1,4 @@
|
||||
using Cryville.Crtr.Browsing.Actions;
|
||||
using Cryville.Crtr.Config;
|
||||
using Cryville.Crtr.Config.UI;
|
||||
|
||||
@@ -6,5 +7,6 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
protected virtual void Awake() {
|
||||
GetComponent<PropertyMasterPanel>().Adapter = new DefaultPropertyMasterAdapter(Settings.Default);
|
||||
}
|
||||
public override void InvokeAction(IResourceAction action) { }
|
||||
}
|
||||
}
|
||||
|
@@ -469,6 +469,7 @@ GameObject:
|
||||
- component: {fileID: 92937987}
|
||||
- component: {fileID: 92937986}
|
||||
- component: {fileID: 92937985}
|
||||
- component: {fileID: 92937989}
|
||||
m_Layer: 5
|
||||
m_Name: Play
|
||||
m_TagString: Untagged
|
||||
@@ -495,7 +496,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 1, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 198.26378, y: 0}
|
||||
m_SizeDelta: {x: 202.3943, y: 0}
|
||||
m_Pivot: {x: 1, y: 0.5}
|
||||
--- !u!114 &92937985
|
||||
MonoBehaviour:
|
||||
@@ -593,6 +594,19 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 92937983}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &92937989
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 92937983}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9a8a3fbcb7ecfd941bcc43425f01cfef, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_text: {fileID: 1830105347}
|
||||
--- !u!1 &142941875
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1562,10 +1576,10 @@ RectTransform:
|
||||
m_Father: {fileID: 913152473}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 304, y: -19.808006}
|
||||
m_SizeDelta: {x: 47.539215, y: 39.616013}
|
||||
m_Pivot: {x: 1, y: 0.5}
|
||||
--- !u!222 &268116900
|
||||
CanvasRenderer:
|
||||
@@ -3570,10 +3584,10 @@ RectTransform:
|
||||
m_Father: {fileID: 913152473}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 128.2304, y: -19.808006}
|
||||
m_SizeDelta: {x: 256.4608, y: 39.616013}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &969586382
|
||||
GameObject:
|
||||
@@ -3788,7 +3802,7 @@ MonoBehaviour:
|
||||
m_pathText: {fileID: 13115418}
|
||||
m_itemContainer: {fileID: 17676803}
|
||||
m_detailPanel: {fileID: 1177404488}
|
||||
m_actionBar: {fileID: 1514109545}
|
||||
m_actionBar: {fileID: 1514109549}
|
||||
--- !u!1 &1039999565
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -5080,6 +5094,7 @@ GameObject:
|
||||
- component: {fileID: 1514109546}
|
||||
- component: {fileID: 1514109548}
|
||||
- component: {fileID: 1514109547}
|
||||
- component: {fileID: 1514109549}
|
||||
m_Layer: 5
|
||||
m_Name: Actionbar
|
||||
m_TagString: Untagged
|
||||
@@ -5146,6 +5161,19 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1514109545}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1514109549
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1514109545}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2023a3c5fbf0e144588637193aabf286, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_mainButton: {fileID: 92937989}
|
||||
--- !u!1 &1585700337
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -5677,7 +5705,7 @@ MonoBehaviour:
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 29.55
|
||||
m_fontSize: 30.15
|
||||
m_fontSizeBase: 14
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
|
Reference in New Issue
Block a user