Elin Decompiled Documentation EA 23.291 Nightly Patch 1
Loading...
Searching...
No Matches
UIDynamicList.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using Mosframe;
4using UnityEngine;
5using UnityEngine.UI;
6
7public class UIDynamicList : BaseList
8{
9 public class Row
10 {
11 public bool isHeader;
12
13 public List<object> objects = new List<object>();
14
15 public Action<UIItem> onSetHeader;
16 }
17
19
20 public Transform moldItem;
21
22 public Transform moldHeader;
23
24 public int columns = 1;
25
26 public bool autoSize = true;
27
28 public bool captureScreen = true;
29
30 public bool refreshHighlight = true;
31
32 public bool rebuildLayout = true;
33
34 public bool useGrid;
35
36 public bool useHighlight;
37
38 public List<Row> rows = new List<Row>();
39
40 public List<object> objects = new List<object>();
41
42 public object selectedObject;
43
44 public float minHeight;
45
46 public Func<object, bool> funcFilter;
47
48 [NonSerialized]
49 public bool first = true;
50
51 private bool autoSized;
52
53 public override int ItemCount => objects.Count;
54
55 public override int RowCount => rows.Count;
56
57 public Row NewRow()
58 {
59 Row row = new Row();
60 rows.Add(row);
61 return row;
62 }
63
64 public override void Clear()
65 {
66 rows.Clear();
67 objects.Clear();
68 }
69
70 public override void Add(object o)
71 {
72 if (o == null)
73 {
74 Debug.Log("Tried to add null object");
75 }
76 else
77 {
78 objects.Add(o);
79 }
80 }
81
82 private void _Add(object o)
83 {
84 if (autoSize && !autoSized)
85 {
86 autoSized = true;
87 this.RebuildLayoutTo<Layer>();
88 GridLayoutGroup component = dsv.itemPrototype.GetComponent<GridLayoutGroup>();
89 if ((bool)component)
90 {
91 columns = (int)(this.Rect().rect.width / (component.spacing.x + component.cellSize.x));
92 }
93 if (columns < 1)
94 {
95 columns = 1;
96 }
97 }
98 if (rows.Count == 0)
99 {
100 NewRow();
101 }
102 Row row = rows.LastItem();
103 if (row.objects.Count >= columns)
104 {
105 row = NewRow();
106 }
107 row.objects.Add(o);
108 }
109
110 public void Remove(object o)
111 {
112 objects.Remove(o);
113 }
114
115 public override void AddDynamic(object item)
116 {
117 Add(item);
118 Refresh();
119 }
120
121 public override void RemoveDynamic(object item)
122 {
124 Remove(item);
125 List();
126 }
127
128 public override void OnMove(object o, object select = null)
129 {
131 List();
132 Select(select ?? o);
133 SE.Click();
134 }
135
136 public override bool Contains(object item)
137 {
138 return objects.Contains(item);
139 }
140
141 public void AddHeader(Action<UIItem> onSetHeader)
142 {
143 Row row = NewRow();
144 row.isHeader = true;
145 row.onSetHeader = onSetHeader;
146 NewRow();
147 }
148
149 public void Refresh()
150 {
151 dsv.prevTotalItemCount = -1;
152 dsv.totalItemCount = rows.Count;
153 this.RebuildLayoutTo<Layer>();
154 if (!isBuilt)
155 {
156 dsv.Build();
157 isBuilt = true;
158 }
159 else
160 {
161 dsv.Update();
162 }
165 }
166
167 public int GetIndex(object o)
168 {
169 for (int i = 0; i < rows.Count; i++)
170 {
171 for (int j = 0; j < rows[i].objects.Count; j++)
172 {
173 if (rows[i].objects[j] == o)
174 {
175 return i;
176 }
177 }
178 }
179 return -1;
180 }
181
182 public void UpdateRow(DSVRow dsvRow, int index)
183 {
184 Row row = rows[index];
185 for (int i = 0; i < columns; i++)
186 {
187 if (dsvRow.items.Count <= i)
188 {
189 dsvRow.items.Add(new DSVRow.Item
190 {
191 comp = callbacks.GetComponent(Util.Instantiate(moldItem, dsvRow.transform).transform)
192 });
193 }
194 Component comp = dsvRow.items[i].comp;
195 bool flag = !row.isHeader && row.objects.Count > i;
196 comp.SetActive(flag);
197 dsvRow.items[i].obj = null;
198 if (!flag)
199 {
200 continue;
201 }
202 object obj = row.objects[i];
203 dsvRow.items[i].obj = obj;
204 callbacks.OnRedraw(obj, comp, columns * index + i);
205 UIButton uIButton = comp as UIButton;
206 if (!uIButton)
207 {
208 uIButton = (comp as UIItem)?.button1;
209 }
210 if ((bool)uIButton && callbacks.useOnClick)
211 {
212 uIButton.onClick.RemoveAllListeners();
213 uIButton.onClick.AddListener(delegate
214 {
215 callbacks.OnClick(obj, comp);
216 });
217 }
218 if (useHighlight)
219 {
220 uIButton.selected = obj == selectedObject;
221 if (uIButton.selected)
222 {
223 uIButton.DoHighlightTransition(instant: true);
224 }
225 else
226 {
227 uIButton.DoNormalTransition();
228 }
229 }
230 }
231 if (dsvRow.items.Count > columns)
232 {
233 for (int j = columns; j < dsvRow.items.Count; j++)
234 {
235 dsvRow.items[j].comp.SetActive(enable: false);
236 dsvRow.items[j].obj = null;
237 }
238 }
239 if ((bool)dsvRow.itemHeader)
240 {
241 if (row.isHeader)
242 {
243 dsvRow.itemHeader.SetActive(enable: true);
244 row.onSetHeader(dsvRow.itemHeader);
245 }
246 else
247 {
248 dsvRow.itemHeader.SetActive(enable: false);
249 }
250 }
251 if ((bool)dsvRow.bgGrid)
252 {
253 dsvRow.bgGrid.SetActive(useGrid);
254 }
255 if (useGrid)
256 {
257 dsvRow.bgGrid.Rect().sizeDelta = new Vector2((float)row.objects.Count * dsvRow.GetComponent<GridLayoutGroup>().cellSize.x, 0f);
258 dsvRow.bgGrid.uvRect = new Rect(0f, 0f, row.objects.Count, 1f);
259 }
260 }
261
262 public override void Redraw()
263 {
264 List();
265 }
266
267 public override void List()
268 {
269 List(sortMode);
270 }
271
272 public override void List(UIList.SortMode m)
273 {
274 if (!first && captureScreen)
275 {
277 }
278 first = false;
279 sortMode = m;
280 Clear();
281 callbacks.OnList(sortMode);
282 if (callbacks.useSort)
283 {
284 objects.Sort((object a, object b) => callbacks.OnSort(b, sortMode) - callbacks.OnSort(a, sortMode));
285 }
286 if (funcFilter != null)
287 {
288 foreach (object @object in objects)
289 {
290 if (funcFilter(@object))
291 {
292 _Add(@object);
293 }
294 }
295 }
296 else
297 {
298 foreach (object object2 in objects)
299 {
300 _Add(object2);
301 }
302 }
303 Layer root = base.transform.GetComponentInParent<Layer>();
304 root = root.parent?.GetComponent<Layer>() ?? root;
305 if (objects.Count != 0)
306 {
308 {
310 UIButton.TryShowTip(root.transform);
312 {
314 UIButton.TryShowTip(root.transform);
315 if (captureScreen)
316 {
318 {
320 });
321 }
322 });
323 }
324 }
325 else
326 {
328 }
329 Refresh();
330 }
331
332 public void OnResizeWindow()
333 {
334 if (autoSize)
335 {
336 this.RebuildLayoutTo<Layer>();
337 GridLayoutGroup component = dsv.itemPrototype.GetComponent<GridLayoutGroup>();
338 columns = (int)(this.Rect().rect.width / (component.spacing.x + component.cellSize.x));
339 if (columns < 1)
340 {
341 columns = 1;
342 }
343 List();
344 dsv.OnResize();
345 }
346 }
347
348 public void Select<T>(Func<T, bool> func, bool invoke = false)
349 {
350 foreach (DSVRow container in dsv.containers)
351 {
352 foreach (DSVRow.Item item in container.items)
353 {
354 UIButton uIButton = item.comp as UIButton;
355 if (!(uIButton == null) && uIButton.gameObject.activeInHierarchy)
356 {
357 T arg = (T)item.obj;
358 if (func(arg))
359 {
360 Select(item.obj, invoke);
361 return;
362 }
363 }
364 }
365 }
366 }
367
368 public bool Select(object o, bool invoke = false)
369 {
370 selectedObject = o;
371 return RefreshHighlight(invoke);
372 }
373
374 public bool RefreshHighlight(bool invoke = false)
375 {
376 bool result = false;
377 foreach (DSVRow container in dsv.containers)
378 {
379 foreach (DSVRow.Item item in container.items)
380 {
381 UIButton b = item.comp as UIButton;
382 if (b == null || !b.gameObject.activeInHierarchy)
383 {
384 continue;
385 }
386 b.selected = item.obj == selectedObject;
387 if (b.selected)
388 {
390 {
391 if (b != null)
392 {
394 b.DoHighlightTransition(instant: true);
395 }
396 });
397 result = true;
398 b.DoHighlightTransition(instant: true);
399 if (invoke)
400 {
401 callbacks.OnClick(item.obj, item.comp);
402 }
403 }
404 else
405 {
407 }
408 }
409 }
410 return result;
411 }
412
413 public void Scroll(int index = 0)
414 {
415 if (index <= 0)
416 {
417 dsv.contentAnchoredPosition = 0f;
418 }
419 else
420 {
421 dsv.scrollByItemIndex(index);
422 }
423 dsv.refresh();
424 }
425
426 public void Scroll(object o)
427 {
428 int index = objects.IndexOf(o);
429 Scroll(index);
430 }
431
432 public T GetComp<T>(object o) where T : Component
433 {
434 foreach (DSVRow container in dsv.containers)
435 {
436 foreach (DSVRow.Item item in container.items)
437 {
438 if (item.obj == o)
439 {
440 return item.comp as T;
441 }
442 }
443 }
444 return null;
445 }
446}
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
void WaitForEndOfFrame(Action action)
Definition: BaseCore.cs:61
List< Action > actionsNextFrame
Definition: BaseCore.cs:31
virtual void UnfreezeScreen()
Definition: BaseCore.cs:84
static BaseCore Instance
Definition: BaseCore.cs:11
virtual void FreezeScreen(float duration=0.2f)
Definition: BaseCore.cs:80
void RefreshNoItem()
Definition: BaseList.cs:86
bool isBuilt
Definition: BaseList.cs:36
UIList.ICallback callbacks
Definition: BaseList.cs:13
UIList.SortMode sortMode
Definition: BaseList.cs:33
void RefreshBGGrid()
Definition: BaseList.cs:106
Definition: DSVRow.cs:7
UIItem itemHeader
Definition: DSVRow.cs:17
RawImage bgGrid
Definition: DSVRow.cs:19
List< Item > items
Definition: DSVRow.cs:15
Definition: Layer.cs:9
Layer parent
Definition: Layer.cs:104
LinkedList< DSVRow > containers
void scrollByItemIndex(int itemIndex)
static TooltipManager Instance
void HideTooltips(bool immediate=false)
void DoHighlightTransition(bool instant=false)
Definition: UIButton.cs:526
static void TryHihlight()
Definition: UIButton.cs:768
bool selected
Definition: UIButton.cs:163
static void TryShowTip(Transform root=null, bool highlight=true, bool ignoreWhenRightClick=true)
Definition: UIButton.cs:778
void DoNormalTransition(bool instant=true)
Definition: UIButton.cs:531
List< object > objects
Action< UIItem > onSetHeader
override int RowCount
override void AddDynamic(object item)
override void List()
List< Row > rows
override void List(UIList.SortMode m)
List< object > objects
int GetIndex(object o)
void Scroll(int index=0)
override bool Contains(object item)
Transform moldItem
override void Redraw()
override void Add(object o)
void Remove(object o)
void Scroll(object o)
void AddHeader(Action< UIItem > onSetHeader)
void UpdateRow(DSVRow dsvRow, int index)
bool Select(object o, bool invoke=false)
override void OnMove(object o, object select=null)
DynamicScrollView dsv
void Select< T >(Func< T, bool > func, bool invoke=false)
bool RefreshHighlight(bool invoke=false)
Transform moldHeader
Func< object, bool > funcFilter
void _Add(object o)
object selectedObject
void OnResizeWindow()
override void Clear()
override int ItemCount
bool refreshHighlight
override void RemoveDynamic(object item)
T GetComp< T >(object o)
Definition: UIItem.cs:5
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27