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]
|
[SerializeField]
|
||||||
DetailPanel m_detailPanel;
|
DetailPanel m_detailPanel;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
GameObject m_actionBar;
|
ActionBar m_actionBar;
|
||||||
|
|
||||||
IPathedResourceManager<ChartDetail> _manager;
|
IPathedResourceManager<ChartDetail> _manager;
|
||||||
IResourceAction _importAction;
|
IResourceAction _importAction;
|
||||||
@@ -77,6 +77,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
_items.Clear();
|
_items.Clear();
|
||||||
m_itemContainer.ItemCount = _manager.Count;
|
m_itemContainer.ItemCount = _manager.Count;
|
||||||
m_detailPanel.Clear();
|
m_detailPanel.Clear();
|
||||||
|
m_actionBar.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,8 +103,9 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
_selectedItems.Clear();
|
_selectedItems.Clear();
|
||||||
_items[id].OnSelect();
|
_items[id].OnSelect();
|
||||||
_selectedItems.Add(id);
|
_selectedItems.Add(id);
|
||||||
m_detailPanel.Load(_manager[id]);
|
ChartDetail res = _manager[id];
|
||||||
m_actionBar.SetActive(true);
|
m_detailPanel.Load(res);
|
||||||
|
m_actionBar.Load(this, Master.Actions.GetActions(res.GetType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPathClicked(int index) {
|
public void OnPathClicked(int index) {
|
||||||
@@ -121,5 +123,19 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
if (result != 0) return;
|
if (result != 0) return;
|
||||||
foreach (var item in _selectedItems.OrderByDescending(i => i)) _manager.RemoveAt(item);
|
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;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Cryville.Crtr.Browsing.UI {
|
namespace Cryville.Crtr.Browsing.UI {
|
||||||
@@ -10,5 +11,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
protected void Init(ResourceBrowserMaster master) {
|
protected void Init(ResourceBrowserMaster master) {
|
||||||
Master = 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;
|
||||||
using Cryville.Crtr.Config.UI;
|
using Cryville.Crtr.Config.UI;
|
||||||
|
|
||||||
@@ -6,5 +7,6 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
protected virtual void Awake() {
|
protected virtual void Awake() {
|
||||||
GetComponent<PropertyMasterPanel>().Adapter = new DefaultPropertyMasterAdapter(Settings.Default);
|
GetComponent<PropertyMasterPanel>().Adapter = new DefaultPropertyMasterAdapter(Settings.Default);
|
||||||
}
|
}
|
||||||
|
public override void InvokeAction(IResourceAction action) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -469,6 +469,7 @@ GameObject:
|
|||||||
- component: {fileID: 92937987}
|
- component: {fileID: 92937987}
|
||||||
- component: {fileID: 92937986}
|
- component: {fileID: 92937986}
|
||||||
- component: {fileID: 92937985}
|
- component: {fileID: 92937985}
|
||||||
|
- component: {fileID: 92937989}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: Play
|
m_Name: Play
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@@ -495,7 +496,7 @@ RectTransform:
|
|||||||
m_AnchorMin: {x: 1, y: 0}
|
m_AnchorMin: {x: 1, y: 0}
|
||||||
m_AnchorMax: {x: 1, y: 1}
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
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}
|
m_Pivot: {x: 1, y: 0.5}
|
||||||
--- !u!114 &92937985
|
--- !u!114 &92937985
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@@ -593,6 +594,19 @@ CanvasRenderer:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 92937983}
|
m_GameObject: {fileID: 92937983}
|
||||||
m_CullTransparentMesh: 1
|
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
|
--- !u!1 &142941875
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -1562,10 +1576,10 @@ RectTransform:
|
|||||||
m_Father: {fileID: 913152473}
|
m_Father: {fileID: 913152473}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
m_AnchorMax: {x: 0, y: 0}
|
m_AnchorMax: {x: 0, y: 1}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
m_AnchoredPosition: {x: 304, y: -19.808006}
|
||||||
m_SizeDelta: {x: 0, y: 0}
|
m_SizeDelta: {x: 47.539215, y: 39.616013}
|
||||||
m_Pivot: {x: 1, y: 0.5}
|
m_Pivot: {x: 1, y: 0.5}
|
||||||
--- !u!222 &268116900
|
--- !u!222 &268116900
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
@@ -3570,10 +3584,10 @@ RectTransform:
|
|||||||
m_Father: {fileID: 913152473}
|
m_Father: {fileID: 913152473}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 1
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
m_AnchorMax: {x: 0, y: 0}
|
m_AnchorMax: {x: 0, y: 1}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
m_AnchoredPosition: {x: 128.2304, y: -19.808006}
|
||||||
m_SizeDelta: {x: 0, y: 0}
|
m_SizeDelta: {x: 256.4608, y: 39.616013}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!1 &969586382
|
--- !u!1 &969586382
|
||||||
GameObject:
|
GameObject:
|
||||||
@@ -3788,7 +3802,7 @@ MonoBehaviour:
|
|||||||
m_pathText: {fileID: 13115418}
|
m_pathText: {fileID: 13115418}
|
||||||
m_itemContainer: {fileID: 17676803}
|
m_itemContainer: {fileID: 17676803}
|
||||||
m_detailPanel: {fileID: 1177404488}
|
m_detailPanel: {fileID: 1177404488}
|
||||||
m_actionBar: {fileID: 1514109545}
|
m_actionBar: {fileID: 1514109549}
|
||||||
--- !u!1 &1039999565
|
--- !u!1 &1039999565
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -5080,6 +5094,7 @@ GameObject:
|
|||||||
- component: {fileID: 1514109546}
|
- component: {fileID: 1514109546}
|
||||||
- component: {fileID: 1514109548}
|
- component: {fileID: 1514109548}
|
||||||
- component: {fileID: 1514109547}
|
- component: {fileID: 1514109547}
|
||||||
|
- component: {fileID: 1514109549}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: Actionbar
|
m_Name: Actionbar
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@@ -5146,6 +5161,19 @@ CanvasRenderer:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 1514109545}
|
m_GameObject: {fileID: 1514109545}
|
||||||
m_CullTransparentMesh: 1
|
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
|
--- !u!1 &1585700337
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -5677,7 +5705,7 @@ MonoBehaviour:
|
|||||||
m_faceColor:
|
m_faceColor:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
rgba: 4294967295
|
rgba: 4294967295
|
||||||
m_fontSize: 29.55
|
m_fontSize: 30.15
|
||||||
m_fontSizeBase: 14
|
m_fontSizeBase: 14
|
||||||
m_fontWeight: 400
|
m_fontWeight: 400
|
||||||
m_enableAutoSizing: 1
|
m_enableAutoSizing: 1
|
||||||
|
|||||||
Reference in New Issue
Block a user