Files
crtr/Assets/Cryville/Crtr/Browsing/UI/PathedResourceBrowser.cs

127 lines
2.9 KiB
C#

using Cryville.Common.Unity;
using Cryville.Common.Unity.UI;
using Cryville.Crtr.Browsing.Actions;
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 {
[SerializeField]
ScrollableItemGrid m_itemContainer;
[SerializeField]
DetailPanel m_detailPanel;
[SerializeField]
GameObject m_actionBar;
IPathedResourceManager<ChartDetail> _manager;
IResourceAction _importAction;
readonly HashSet<int> _selectedItems = new HashSet<int>();
readonly Dictionary<int, BrowserItem> _items = new Dictionary<int, BrowserItem>();
[Obsolete]
FileDialog _dialog;
protected virtual void Start() {
m_itemContainer.LoadItem = LoadItem;
InitDialog();
}
void OnDestroy() {
UnregisterManager();
}
void UnregisterManager() {
Master.Actions.Unregister(_importAction);
_manager.ItemChanged -= OnItemChanged;
_manager.DirectoryChanged -= OnDirectoryChanged;
}
void OnEnable() {
_manager.Activate();
}
void OnDisable() {
_manager.Deactivate();
}
public void Init(ResourceBrowserMaster master, IPathedResourceManager<ChartDetail> manager) {
if (_manager != null) {
UnregisterManager();
}
Init(master);
_manager = manager;
_manager.ItemChanged += OnItemChanged;
_manager.DirectoryChanged += OnDirectoryChanged;
Master.Actions.Register(_importAction = new ImportResourceAction(_manager));
OnItemChanged();
OnDirectoryChanged();
}
bool _itemChanged;
void OnItemChanged() {
_itemChanged = true;
}
void OnDirectoryChanged() {
}
void Update() {
if (_itemChanged) {
_itemChanged = false;
_selectedItems.Clear();
_items.Clear();
m_itemContainer.ItemCount = _manager.Count;
}
}
private bool LoadItem(int id, GameObject obj) {
var bi = obj.GetComponent<BrowserItem>();
_items[id] = bi;
try {
var item = _manager[id];
bi.Load(id, item, _selectedItems.Contains(id));
}
catch (Exception) {
bi.Load(id, default(ChartDetail), _selectedItems.Contains(id));
}
return true;
}
public virtual void OnDirectoryItemClicked(int id) {
_manager.OpenDirectory(id);
}
public void OnObjectItemClicked(int id) {
foreach (var item in _selectedItems) _items[item].OnDeselect();
_selectedItems.Clear();
_items[id].OnSelect();
_selectedItems.Add(id);
m_detailPanel.Load(_manager[id]);
m_actionBar.SetActive(true);
}
public void OnPathClicked(int index) {
_manager.ReturnToDirectory(index);
}
[Obsolete]
public void OnAddButtonClicked() {
_dialog.Show();
}
[Obsolete]
private void OnAddDialogClosed() {
if (_dialog.FileName == null) return;
if (ResourceManager.ImportItemFrom(new Uri(_dialog.FileName))) {
Popup.Create("Import succeeded");
}
else {
Popup.Create("Import failed");
}
}
}
}