Пример #1
0
        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)));
        }
Пример #2
0
 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)));
     }
 }
Пример #3
0
 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)));
         }
     }
 }