public static void ToXmlIsRoundtripInvariant()
        {
            var fragmentXml     = Fragment.ToXml();
            var trippedFragment = SourceFragment.FromXml(fragmentXml);

            Assert.AreEqual(Fragment, trippedFragment);
        }
        LiveElement CreateChildElement(SourceFragment sourceFragment)
        {
            var elm = new LiveElement(parent: this);

            elm.UpdateFrom(sourceFragment.ToXml());
            return(elm);
        }
        static IElement CreateRootElement(SourceFragment fragment, string filename)
        {
            var parent = new LiveElement(
                AbsoluteFilePath.Parse("/project/" + filename),
                Observable.Never <ILookup <ObjectIdentifier, ObjectIdentifier> >(),
                Observable.Return(true),
                new Subject <Unit>(),
                Observer.Create <IBinaryMessage>(msg => { }),
                s => Element.Empty);

            // Panel is an example of an instance
            // Circle is an example of a class (called MyClass)
            parent.UpdateFrom(fragment.ToXml());

            return(parent);
        }
Beispiel #4
0
        public static IControl Create(IElement parent, Text name, SourceFragment fragment, Func <IElement, IControl> content)
        {
            var type     = fragment.ToXml().Name.LocalName;
            var children = parent.Children
                           .Where(e => e.Name.Is(type))
                           .Replay(1).RefCount();

            var hasContent = children.Select(c => c.Any());

            var selectedChild = children.Select(c => c.LastOrNone().Or(Element.Empty)).Switch();

            var stackedContent = children
                                 .PoolPerElement(e => content(e.Switch()))
                                 .StackFromTop(separator: () => Spacer.Medium);

            var textColor = parent.IsReadOnly().Select(ro => ro
                                ? Theme.DisabledText
                                : Theme.DefaultText).Switch();

            return(Layout.StackFromTop(
                       Separator.Weak,
                       Layout.Dock()
                       .Left(Label.Create(name, Theme.DefaultFont, color: textColor)
                             .CenterVertically())
                       .Right(ListButtons.AddButton(() => parent.Paste(fragment), isEnabled:  parent.IsReadOnly().IsFalse())
                              .CenterVertically())
                       .Right(Spacer.Small)
                       .Right(ListButtons.RemoveButton(() => selectedChild.Cut(), isEnabled: selectedChild.IsReadOnly().IsFalse())
                              .CenterVertically())
                       .Fill()
                       .WithHeight(30)
                       .WithInspectorPadding(),
                       Separator.Weak.ShowWhen(hasContent),
                       Separator.Weak.ShowWhen(hasContent),
                       Layout.StackFromTop(
                           Spacer.Medium,
                           stackedContent,
                           Spacer.Medium,
                           Separator.Weak.ShowWhen(hasContent))
                       .MakeCollapsable(RectangleEdge.Bottom, hasContent)));
        }