127 lines
2.9 KiB
C#
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");
|
|
}
|
|
}
|
|
}
|
|
}
|