Restructure resource browsers.

This commit is contained in:
2023-11-23 00:50:37 +08:00
parent d7a38416aa
commit 54f75781f3
5 changed files with 51 additions and 43 deletions

View File

@@ -3,7 +3,11 @@ using Cryville.Common.Unity.UI;
using Cryville.Crtr.UI;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Cryville.Crtr.Browsing.UI {
public class PathedResourceBrowser : ResourceBrowser {
@@ -14,7 +18,7 @@ namespace Cryville.Crtr.Browsing.UI {
[SerializeField]
GameObject m_actionBar;
public IPathedResourceManager<ChartDetail> ResourceManager;
IPathedResourceManager<ChartDetail> _manager;
readonly HashSet<int> _selectedItems = new HashSet<int>();
readonly Dictionary<int, BrowserItem> _items = new Dictionary<int, BrowserItem>();
@@ -24,36 +28,48 @@ namespace Cryville.Crtr.Browsing.UI {
protected virtual void Start() {
m_itemContainer.LoadItem = LoadItem;
ResourceManager.ItemChanged += OnItemChanged;
ResourceManager.ChangeDirectory(new string[] { "" });
InitDialog();
}
void OnDestroy() {
UnregisterManager();
}
void UnregisterManager() {
_manager.ItemChanged -= OnItemChanged;
_manager.DirectoryChanged -= OnDirectoryChanged;
}
void OnEnable() {
ResourceManager.Activate();
_manager.Activate();
}
void OnDisable() {
ResourceManager.Deactivate();
_manager.Deactivate();
}
[Obsolete]
protected void InitDialog() {
_dialog = Instantiate(Resources.Load<GameObject>("Common/FileDialog")).GetComponent<FileDialog>();
_dialog.gameObject.SetActive(false);
_dialog.Filter = ResourceManager.GetSupportedFormats();
_dialog.PresetPaths = ResourceManager.GetPresetPaths();
_dialog.OnClose += OnAddDialogClosed;
public void Init(ResourceBrowserMaster master, IPathedResourceManager<ChartDetail> manager) {
if (_manager != null) {
UnregisterManager();
}
Init(master);
_manager = manager;
_manager.ItemChanged += OnItemChanged;
_manager.DirectoryChanged += OnDirectoryChanged;
OnItemChanged();
OnDirectoryChanged();
}
bool _itemChanged;
void OnItemChanged() { _itemChanged = true; }
void OnItemChanged() {
_itemChanged = true;
}
void OnDirectoryChanged() {
}
void Update() {
if (_itemChanged) {
_itemChanged = false;
_selectedItems.Clear();
_items.Clear();
m_itemContainer.ItemCount = ResourceManager.Count;
m_itemContainer.ItemCount = _manager.Count;
}
}
@@ -61,7 +77,7 @@ namespace Cryville.Crtr.Browsing.UI {
var bi = obj.GetComponent<BrowserItem>();
_items[id] = bi;
try {
var item = ResourceManager[id];
var item = _manager[id];
bi.Load(id, item, _selectedItems.Contains(id));
}
catch (Exception) {
@@ -71,7 +87,7 @@ namespace Cryville.Crtr.Browsing.UI {
}
public virtual void OnDirectoryItemClicked(int id) {
ResourceManager.OpenDirectory(id);
_manager.OpenDirectory(id);
}
public void OnObjectItemClicked(int id) {
@@ -79,12 +95,12 @@ namespace Cryville.Crtr.Browsing.UI {
_selectedItems.Clear();
_items[id].OnSelect();
_selectedItems.Add(id);
m_detailPanel.Load(id, ResourceManager[id]);
m_detailPanel.Load(_manager[id]);
m_actionBar.SetActive(true);
}
public void OnPathClicked(int index) {
ResourceManager.ReturnToDirectory(index);
_manager.ReturnToDirectory(index);
}
[Obsolete]