示例#1
0
 private void AddSelector([NotNull] ISelectorBase <TU> selector)
 {
     selector.Prepare();
     selector.Dirty ??= new ObservableProperty <bool>(false);
     selector.Dirty.Changed += UpdateView;
     _selectors.Add(selector);
     UpdateView(true);
 }
示例#2
0
        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);
        }
示例#3
0
        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)));
            }
        }