private void CreateHeaderWidgets(CookingRulesCollection crc, string path, Meta.Item yi, Widget headerWidget, Widget overridesWidget, CookingRules rules) { SimpleText computedValueText; Button createOrDestroyOverride = null; headerWidget.HitTestTarget = true; headerWidget.CompoundPostPresenter.Add(new DelegatePresenter <Widget>((widget) => { if (widget.IsMouseOver()) { widget.PrepareRendererState(); Renderer.DrawRect( Vector2.Zero, widget.Size, Theme.Colors.SelectedBackground.Transparentify(0.8f)); } })); Func <ITexture> btnTexture = () => IsOverridedByAssociatedCookingRules(crc, path, yi) ? IconPool.GetTexture("Filesystem.Cross") : IconPool.GetTexture("Filesystem.Plus"); Widget foldButton; headerWidget.Nodes.AddRange( (foldButton = CreateFoldButton(overridesWidget)), (new ThemedSimpleText { ForceUncutText = false, VAlignment = VAlignment.Center, HAlignment = HAlignment.Left, OverflowMode = TextOverflowMode.Ellipsis, LayoutCell = new LayoutCell { StretchX = 1 }, Size = new Vector2(150, RowHeight), MinSize = new Vector2(100, RowHeight), MaxSize = new Vector2(200, RowHeight), Text = yi.Name, }), (computedValueText = new ThemedSimpleText { LayoutCell = new LayoutCell { StretchX = 3 }, ForceUncutText = false, HAlignment = HAlignment.Left, Size = new Vector2(150, RowHeight), MinSize = new Vector2(50, RowHeight), MaxSize = new Vector2(300, RowHeight), }), (createOrDestroyOverride = new ToolbarButton { Texture = btnTexture(), Clicked = () => CreateOrDestroyFieldOverride(crc, path, yi, overridesWidget, createOrDestroyOverride), }) ); headerWidget.Clicked = foldButton.Clicked; createOrDestroyOverride.Padding = Thickness.Zero; createOrDestroyOverride.Size = createOrDestroyOverride.MinMaxSize = RowHeight * Vector2.One; if (IsCookingRulesFileItself(path)) { rules = GetAssociatedCookingRules(crc, path); } computedValueText.AddChangeWatcher(() => yi.GetValue(rules.EffectiveRules), (o) => computedValueText.Text = rules.FieldValueToString(yi, yi.GetValue(rules.EffectiveRules))); }
private Action <object> MakeReadOrMergeFunc(Meta.Item yi) { if (yi.SetValue != null) { var rf = ReadValueFunc(yi.Type); return(obj => yi.SetValue(obj, rf())); } else { var mf = MergeValueFunc(yi.Type); return(obj => mf(yi.GetValue(obj))); } }
private Action <object, object> MakeFieldCloner(Meta.Item yi) { if (yi.SetValue != null) { var cloner = cl.GetCloner(yi.Type); if (yi.SerializeCond != null) { return (dst, src) => { var v = yi.GetValue(src); if (yi.SerializeCond(src, v)) { yi.SetValue(dst, cloner(v)); } } } ; else { return((dst, src) => yi.SetValue(dst, cloner(yi.GetValue(src)))); } } else { var merger = cl.GetMerger(yi.Type); if (yi.SerializeCond != null) { return (dst, src) => { var v = yi.GetValue(src); if (yi.SerializeCond(src, v)) { merger(yi.GetValue(dst), v); } } } ; else { return((dst, src) => merger(yi.GetValue(dst), yi.GetValue(src))); } } }