--- a/ui/wpf/UIcore/Container.cs Sat Apr 05 17:57:04 2025 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,321 +0,0 @@ -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 - { - Layout Layout { get; set; } - - void Add(UIElement control, bool fill); - } - - public class Layout - { - public bool? Fill { get; set; } - public bool Hexpand { get; set; } - public bool Vexpand { get; set; } - public bool NewLine { get; set; } - public int GridWidth { get; set; } - public String Label { get; set; } - - public Layout() - { - Reset(); - } - - public bool IsFill(bool fill) - { - if (Fill != null) - { - - return (bool)Fill; - } - return fill; - } - - public void Reset() - { - Fill = null; - Hexpand = false; - Vexpand = false; - NewLine = false; - GridWidth = 1; - Label = null; - } - } - - public enum BoxOrientation - { - VERTICAL, - HORIZONTAL - } - - public class BoxContainer : Grid, Container - { - public Layout Layout { get; set; } - - private BoxOrientation Orientation; - private int Spacing; - - private int x = 0; - private int y = 0; - - private bool filled = false; - - public BoxContainer(BoxOrientation orientation, int margin, int spacing) : base() - { - Layout = new Layout(); - Margin = new Thickness(margin); - Spacing = spacing; - - 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, int margin, int spacing) : this(orientation, margin, spacing) - { - parent.Add(this, true); - } - - public void Add(UIElement control, bool fill) - { - fill = Layout.IsFill(fill); - - if(Orientation == BoxOrientation.HORIZONTAL) - { - if(Spacing > 0) - { - ColumnDefinition spaceCol = new ColumnDefinition(); - spaceCol.Width = new GridLength(Spacing, GridUnitType.Pixel); - ColumnDefinitions.Add(spaceCol); - x++; - } - - 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 - { - if (Spacing > 0) - { - RowDefinition spaceRow = new RowDefinition(); - spaceRow.Height = new GridLength(Spacing, GridUnitType.Pixel); - RowDefinitions.Add(spaceRow); - y++; - } - - 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++; - } - - Layout.Reset(); - } - } - - public class GridContainer : Grid, Container - { - public Layout Layout { get; set; } - - private int X = 0; - private int Y = 0; - private int CurrentWidth = 0; - private int CurrentHeight = 0; - - private int ColSpacing; - private int RowSpacing; - - public GridContainer(Container parent, int margin, int colspacing, int rowspacing) : base() - { - Layout = new Layout(); - - Margin = new Thickness(margin); - ColSpacing = colspacing; - RowSpacing = rowspacing; - - parent.Add(this, true); - } - - public void Add(UIElement control, bool fill) - { - if(Layout.NewLine) - { - X = 0; - Y++; - } - - ColumnDefinition col; - RowDefinition row; - bool getcol = false; - if(X >= CurrentWidth) - { - if (ColSpacing > 0 && X != 0) - { - ColumnDefinition spaceCol = new ColumnDefinition(); - spaceCol.Width = new GridLength(ColSpacing, GridUnitType.Pixel); - ColumnDefinitions.Add(spaceCol); - X++; - } - - col = new ColumnDefinition(); - col.Width = GridLength.Auto; - ColumnDefinitions.Add(col); - - CurrentWidth = X + 1; - } - else - { - if (ColSpacing > 0 && X % 2 > 0) - { - X++; - } - col = ColumnDefinitions.ElementAt(X); - } - - if(getcol) - { - col = ColumnDefinitions.ElementAt(X); - } - - if (Y >= CurrentHeight) - { - if (RowSpacing > 0 && Y != 0) - { - RowDefinition spaceRow = new RowDefinition(); - spaceRow.Height = new GridLength(RowSpacing, GridUnitType.Pixel); - RowDefinitions.Add(spaceRow); - Y++; - } - - row = new RowDefinition(); - row.Height = GridLength.Auto; - RowDefinitions.Add(row); - CurrentHeight = Y + 1; - } - else - { - row = RowDefinitions.ElementAt(Y); - } - - if(Layout.Hexpand) - { - col.Width = new GridLength(1, GridUnitType.Star); - } - if(Layout.Vexpand) - { - row.Height = new GridLength(1, GridUnitType.Star); - } - - int gridwidth = Layout.GridWidth; - if(gridwidth > 1) - { - gridwidth++; - } - - Grid.SetColumn(control, X); - Grid.SetRow(control, Y); - Grid.SetColumnSpan(control, gridwidth); - Children.Add(control); - - Layout.Reset(); - X += gridwidth; - } - } - - public class ScrollViewerContainer : ScrollViewer, Container - { - public Layout Layout { get; set; } - - public ScrollViewerContainer(Container parent) : base() - { - Layout = new Layout(); - - HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; - VerticalScrollBarVisibility = ScrollBarVisibility.Auto; - - parent.Add(this, true); - } - - public void Add(UIElement control, bool fill) - { - Content = control; - } - } - - public class TabViewContainer : TabControl, Container - { - public Layout Layout { get; set; } - - public TabViewContainer(Container parent) : base() - { - Layout = new Layout(); - parent.Add(this, true); - } - - public void Add(UIElement control, bool fill) - { - TabItem tab = new TabItem(); - tab.Header = Layout.Label != null ? Layout.Label : "New Tab"; - Items.Add(tab); - tab.Content = control; - Layout.Reset(); - } - } -}