private void AddSelector([NotNull] ISelectorBase <TU> selector) { selector.Prepare(); selector.Dirty ??= new ObservableProperty <bool>(false); selector.Dirty.Changed += UpdateView; _selectors.Add(selector); UpdateView(true); }
private void DrawSelectorMenu(Rect canvas) { var addRect = new Rect(0f, 0f, _addSelectorTextSize.x + 16f, Text.LineHeight); var selectorsRect = new Rect(0f, addRect.height, canvas.width, canvas.height - addRect.height); var viewPort = new Rect(0f, 0f, selectorsRect.width - 16f, _selectors.Count * Text.LineHeight); if (Widgets.ButtonText(addRect, _addSelectorText)) { Find.WindowStack.Add(new FloatMenu(_selectorAdders)); } _selectorScrollPos = GUI.BeginScrollView(selectorsRect, _selectorScrollPos, viewPort); ISelectorBase <TU> toRemove = null; for (var i = 0; i < _selectors.Count; i++) { ISelectorBase <TU> selector = _selectors[i]; var lineRect = new Rect(0f, Text.LineHeight * i, selectorsRect.width, Text.LineHeight); if (!lineRect.IsVisible(selectorsRect, _selectorScrollPos)) { continue; } if (i % 2 == 0) { Widgets.DrawLightHighlight(lineRect); } Rect sRect = lineRect.Trim(Direction8Way.East, Text.LineHeight - 2f); selector.Draw(sRect); if (UiHelper.FieldButton(lineRect, Widgets.CheckboxOffTex)) { toRemove = selector; } } GUI.EndScrollView(); if (toRemove == null) { return; } _selectors.Remove(toRemove); UpdateView(true); }
private protected void DiscoverSelectors(DomainIndexer.EditorTarget target) { foreach (DomainIndexer.SelectorEntry entry in DomainIndexer.Selectors) { if (entry.Target != target) { continue; } ISelectorBase <TU> selector = CreateSelector(entry); if (selector == null) { continue; } _selectorAdders.Add(new FloatMenuOption(selector.Label, () => AddSelector(selector))); } }