ui/wpf/UIcore/Container.cs

Sun, 01 Feb 2015 10:35:07 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 01 Feb 2015 10:35:07 +0100
changeset 84
a56c2baa9429
parent 83
a38aec91bd66
child 85
91f45354d1e2
permissions
-rw-r--r--

added vbox,hbox function (WPF)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace UI
{
    public interface Container
    {
        void Add(UIElement control, bool fill);
    }

    public enum BoxOrientation
    {
        VERTICAL,
        HORIZONTAL
    }

    public class BoxContainer : Grid, Container
    {
        public BoxOrientation Orientation;

        private int x = 0;
        private int y = 0;

        private bool filled = false;

        public BoxContainer(BoxOrientation orientation) : base()
        {
            Orientation = orientation;
            if(Orientation == BoxOrientation.HORIZONTAL)
            {
                RowDefinition row = new RowDefinition();
                row.Height = new GridLength(1, GridUnitType.Star);
                RowDefinitions.Add(row);
            }
            else
            {
                ColumnDefinition col = new ColumnDefinition();
                col.Width = new GridLength(1, GridUnitType.Star);
                ColumnDefinitions.Add(col);
            }
        }

        public BoxContainer(Container parent, BoxOrientation orientation) : this(orientation)
        {
            parent.Add(this, true);
        }
        
        public void Add(UIElement control, bool fill)
        {
            if(Orientation == BoxOrientation.HORIZONTAL)
            {
                ColumnDefinition col = new ColumnDefinition();
                if(filled && fill)
                {
                    fill = false;
                    Console.WriteLine("BoxContainer can only contain one filled control");
                }
                if(fill)
                {
                    col.Width = new GridLength(1, GridUnitType.Star);
                    filled = true;
                }
                else
                {
                    col.Width = GridLength.Auto;
                }
                ColumnDefinitions.Add(col);
            }
            else
            {
                RowDefinition row = new RowDefinition();
                if (filled && fill)
                {
                    fill = false;
                    Console.WriteLine("BoxContainer can only contain one filled control");
                }
                if(fill)
                {
                    row.Height = new GridLength(1, GridUnitType.Star);
                    filled = true;
                }
                else
                {
                    row.Height = GridLength.Auto;
                }
                RowDefinitions.Add(row);
            }

            Grid.SetColumn(control, x);
            Grid.SetRow(control, y);
            Children.Add(control);

            if(Orientation == BoxOrientation.HORIZONTAL)
            {
                x++;
            }
            else
            {
                y++;
            }
        }

        public static BoxContainer CreateBoxContainer(Container parent, BoxOrientation orientation)
        {
            return Application.GetInstance().Exec<BoxContainer>(() => new BoxContainer(parent, orientation));
        }
    }
    
    public class GridContainer : Container
    {
        public Grid Grid;

        public GridContainer(System.Windows.Controls.Grid grid)
        {
            Grid = grid;
        }

        public void Add(UIElement control, bool fill)
        {

        }
    }
}

mercurial