예제 #1
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 /// <param name="element">Instantiated element.</param>
 /// <param name="layer">Current root layout layer.</param>
 /// <param name="member">Binded member.</param>
 public VirtualizedItemMeta(object element, ref LayoutLayer layer, MemberInfo member)
 {
     Element = element as FrameworkElement;
     Field   = element as IGUIField;
     Root    = layer;
     Member  = member;
 }
예제 #2
0
        /// <summary>
        /// Spawning Header UI elements un shared layer. Connecting to the shared member.
        /// </summary>
        /// <param name="layer">Target UI layer.</param>
        /// <param name="args">
        /// Must contains: <see cref="UIDescriptor"/>.
        /// <see cref="MemberInfo"/> will excluded from array. Use UI.Controls.Header.OnGUI instead if you want to bind member to the field.</param>
        public virtual void OnLayout(ref LayoutLayer layer, params object[] args)
        {
            // Instiniate header UI.
            BindedUI = new UI.Controls.Header()
            {
                GUIContent = Content
            };

            // Remove reference to the member.
            // In other case header value would connected to meber that just describe UI view.
            for (int i = 0; i < args.Length; i++)
            {
                // Checking if the target argument.
                if (args[i] is MemberInfo)
                {
                    // Drop reference.
                    args[i] = null;
                    break;
                }
            }

            // Call GUI processing.
            BindedUI.OnLayout(ref layer, args);

            // Apply state to the element.
            BindedUI.Active = DefaultState;
        }
예제 #3
0
        internal static CustomLayoutOptions DeserializeCustomLayoutOptions(JsonElement element)
        {
            Optional <IDictionary <string, LayoutLayer> > layers = default;
            IDictionary <string, InputGroup> inputGroups         = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("layers"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    Dictionary <string, LayoutLayer> dictionary = new Dictionary <string, LayoutLayer>();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        dictionary.Add(property0.Name, LayoutLayer.DeserializeLayoutLayer(property0.Value));
                    }
                    layers = dictionary;
                    continue;
                }
                if (property.NameEquals("inputGroups"))
                {
                    Dictionary <string, InputGroup> dictionary = new Dictionary <string, InputGroup>();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        dictionary.Add(property0.Name, InputGroup.DeserializeInputGroup(property0.Value));
                    }
                    inputGroups = dictionary;
                    continue;
                }
            }
            return(new CustomLayoutOptions(Optional.ToDictionary(layers), inputGroups));
        }
예제 #4
0
        /// <summary>
        /// Going one layer deeper into UI layout.
        /// All child element will be placed in horizontal order till calling of the EndGroup element.
        /// </summary>
        /// <param name="layer">Curent layer. Refernece eill be changed to the new layer after performing.</param>
        /// <param name="args">Not using into that elelment.</param>
        public void OnLayout(ref LayoutLayer layer, params object[] args)
        {
            // Create grid.
            IAddChild root = new Grid();

            // Set new layer.
            layer  = layer.GoDeeper(root);
            _Layer = layer;
        }
        /// <summary>
        /// Going one layer deeper into UI layout.
        /// All child element will be placed in vertical order till calling of the EndGroup element.
        /// </summary>
        /// <param name="layer">Curent layer. Refernece eill be changed to the new layer after performing.</param>
        /// <param name="args">Not using into that elelment.</param>
        public void OnLayout(ref LayoutLayer layer, params object[] args)
        {
            // Creating stack panel.
            IAddChild root = new StackPanel()
            {
                Orientation = Orientation.Vertical
            };

            // Set new layer.
            layer  = layer.GoDeeper(root);
            _Layer = layer;
        }
예제 #6
0
 /// <summary>
 /// Not supported.
 /// </summary>
 /// <param name="layer"></param>
 /// <param name="args"></param>
 public void OnLayout(ref LayoutLayer layer, params object[] args)
 {
     // Trying to get shared properties.
     foreach (object obj in args)
     {
         if (obj is MemberInfo)
         {
             BindedMember = (MemberInfo)obj;
             break;
         }
     }
 }
예제 #7
0
        /// <summary>
        /// Spawn label element into the UI.
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="args"></param>
        public virtual void OnGUI(ref LayoutLayer layer, params object[] args)
        {
            // Instiniate element.
            var element = new System.Windows.Controls.Label
            {
                // Set content.
                Content = Content.GetTitle()
            };

            // Attaching to layout.
            layer.root.AddChild(element);
        }
예제 #8
0
        ///// <summary>
        ///// Occurs when contrent is changed.
        ///// </summary>
        //public event Action<IGUIField> ValueChanged;

        /// <summary>
        /// Spawn label element into the UI.
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="args"></param>
        public virtual void OnLayout(ref LayoutLayer layer, params object[] args)
        {
            // Instiniate element.
            var element = new WpfHandler.UI.Controls.GUIContentLabel
            {
                // Set content.
                LabelContent = Content
            };

            // Attaching to layout.
            layer.ApplyControl(element);

            // Activating the layout.
            element.OnLayout(ref layer, args);
        }
예제 #9
0
        /// <summary>
        /// Instiniating Space GUI lement.
        /// </summary>
        /// <param name="layer">Target GUI layer.</param>
        /// <param name="args">Not using in that element.</param>
        public void OnLayout(ref LayoutLayer layer, params object[] args)
        {
            // Instiniate GUI element.
            var canvas = new Canvas();

            // Convifurate layout's size.
            if (layer.orientation == Orientation.Horizontal)
            {
                canvas.Width = Size;
            }
            else
            {
                canvas.Height = Size;
            }

            // Add element to the root.
            layer.ApplyControl(canvas);
        }
예제 #10
0
        /// <summary>
        /// Configurate GUI element and bind it to auto layout handler.
        /// </summary>
        /// <param name="layer">Target UI layer.</param>
        /// <param name="args">Must contains: <see cref="UIDescriptor"/> and <see cref="MemberInfo"/></param>
        public void OnLayout(ref LayoutLayer layer, params object[] args)
        {
            // Find required referendes.
            MemberInfo member = null;

            // Trying to get shared properties.
            foreach (object obj in args)
            {
                if (obj is MemberInfo)
                {
                    member = (MemberInfo)obj;
                    break;
                }
            }

            // Defining field value mode.
            var type = UIDescriptor.MembersHandler.GetSpecifiedMemberType(member);

            DefineModeByType(type);
        }
예제 #11
0
 /// <summary>
 /// Trying to go to the upper UI's layer.
 /// </summary>
 /// <param name="layer">Current layer. Reference will be changed on relevant one.</param>
 /// <param name="args">Not using in that element.</param>
 public void OnLayout(ref LayoutLayer layer, params object[] args)
 {
     // Trying to go to the upper UI's layer.
     layer  = layer.GoUpper();
     _Layer = layer;
 }
예제 #12
0
 /// <summary>
 /// Not supported.
 /// </summary>
 /// <param name="layer"></param>
 /// <param name="args"></param>
 public void OnLayout(ref LayoutLayer layer, params object[] args)
 {
     throw new NotSupportedException();
 }