UNIXworkcode

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Windows; 7 using System.Windows.Controls; 8 9 namespace UI 10 { 11 public interface Container 12 { 13 Layout Layout { get; set; } 14 15 void Add(UIElement control, bool fill); 16 } 17 18 public class Layout 19 { 20 public bool? Fill { get; set; } 21 public bool Hexpand { get; set; } 22 public bool Vexpand { get; set; } 23 public bool NewLine { get; set; } 24 public int GridWidth { get; set; } 25 public String Label { get; set; } 26 27 public Layout() 28 { 29 Reset(); 30 } 31 32 public bool IsFill(bool fill) 33 { 34 if (Fill != null) 35 { 36 37 return (bool)Fill; 38 } 39 return fill; 40 } 41 42 public void Reset() 43 { 44 Fill = null; 45 Hexpand = false; 46 Vexpand = false; 47 NewLine = false; 48 GridWidth = 1; 49 Label = null; 50 } 51 } 52 53 public enum BoxOrientation 54 { 55 VERTICAL, 56 HORIZONTAL 57 } 58 59 public class BoxContainer : Grid, Container 60 { 61 public Layout Layout { get; set; } 62 63 private BoxOrientation Orientation; 64 private int Spacing; 65 66 private int x = 0; 67 private int y = 0; 68 69 private bool filled = false; 70 71 public BoxContainer(BoxOrientation orientation, int margin, int spacing) : base() 72 { 73 Layout = new Layout(); 74 Margin = new Thickness(margin); 75 Spacing = spacing; 76 77 Orientation = orientation; 78 if(Orientation == BoxOrientation.HORIZONTAL) 79 { 80 RowDefinition row = new RowDefinition(); 81 row.Height = new GridLength(1, GridUnitType.Star); 82 RowDefinitions.Add(row); 83 } 84 else 85 { 86 ColumnDefinition col = new ColumnDefinition(); 87 col.Width = new GridLength(1, GridUnitType.Star); 88 ColumnDefinitions.Add(col); 89 } 90 } 91 92 public BoxContainer(Container parent, BoxOrientation orientation, int margin, int spacing) : this(orientation, margin, spacing) 93 { 94 parent.Add(this, true); 95 } 96 97 public void Add(UIElement control, bool fill) 98 { 99 fill = Layout.IsFill(fill); 100 101 if(Orientation == BoxOrientation.HORIZONTAL) 102 { 103 if(Spacing > 0) 104 { 105 ColumnDefinition spaceCol = new ColumnDefinition(); 106 spaceCol.Width = new GridLength(Spacing, GridUnitType.Pixel); 107 ColumnDefinitions.Add(spaceCol); 108 x++; 109 } 110 111 ColumnDefinition col = new ColumnDefinition(); 112 if(filled && fill) 113 { 114 fill = false; 115 Console.WriteLine("BoxContainer can only contain one filled control"); 116 } 117 if(fill) 118 { 119 col.Width = new GridLength(1, GridUnitType.Star); 120 filled = true; 121 } 122 else 123 { 124 col.Width = GridLength.Auto; 125 } 126 ColumnDefinitions.Add(col); 127 } 128 else 129 { 130 if (Spacing > 0) 131 { 132 RowDefinition spaceRow = new RowDefinition(); 133 spaceRow.Height = new GridLength(Spacing, GridUnitType.Pixel); 134 RowDefinitions.Add(spaceRow); 135 y++; 136 } 137 138 RowDefinition row = new RowDefinition(); 139 if (filled && fill) 140 { 141 fill = false; 142 Console.WriteLine("BoxContainer can only contain one filled control"); 143 } 144 if(fill) 145 { 146 row.Height = new GridLength(1, GridUnitType.Star); 147 filled = true; 148 } 149 else 150 { 151 row.Height = GridLength.Auto; 152 } 153 RowDefinitions.Add(row); 154 } 155 156 Grid.SetColumn(control, x); 157 Grid.SetRow(control, y); 158 Children.Add(control); 159 160 if(Orientation == BoxOrientation.HORIZONTAL) 161 { 162 x++; 163 } 164 else 165 { 166 y++; 167 } 168 169 Layout.Reset(); 170 } 171 } 172 173 public class GridContainer : Grid, Container 174 { 175 public Layout Layout { get; set; } 176 177 private int X = 0; 178 private int Y = 0; 179 private int CurrentWidth = 0; 180 private int CurrentHeight = 0; 181 182 private int ColSpacing; 183 private int RowSpacing; 184 185 public GridContainer(Container parent, int margin, int colspacing, int rowspacing) : base() 186 { 187 Layout = new Layout(); 188 189 Margin = new Thickness(margin); 190 ColSpacing = colspacing; 191 RowSpacing = rowspacing; 192 193 parent.Add(this, true); 194 } 195 196 public void Add(UIElement control, bool fill) 197 { 198 if(Layout.NewLine) 199 { 200 X = 0; 201 Y++; 202 } 203 204 ColumnDefinition col; 205 RowDefinition row; 206 bool getcol = false; 207 if(X >= CurrentWidth) 208 { 209 if (ColSpacing > 0 && X != 0) 210 { 211 ColumnDefinition spaceCol = new ColumnDefinition(); 212 spaceCol.Width = new GridLength(ColSpacing, GridUnitType.Pixel); 213 ColumnDefinitions.Add(spaceCol); 214 X++; 215 } 216 217 col = new ColumnDefinition(); 218 col.Width = GridLength.Auto; 219 ColumnDefinitions.Add(col); 220 221 CurrentWidth = X + 1; 222 } 223 else 224 { 225 if (ColSpacing > 0 && X % 2 > 0) 226 { 227 X++; 228 } 229 col = ColumnDefinitions.ElementAt(X); 230 } 231 232 if(getcol) 233 { 234 col = ColumnDefinitions.ElementAt(X); 235 } 236 237 if (Y >= CurrentHeight) 238 { 239 if (RowSpacing > 0 && Y != 0) 240 { 241 RowDefinition spaceRow = new RowDefinition(); 242 spaceRow.Height = new GridLength(RowSpacing, GridUnitType.Pixel); 243 RowDefinitions.Add(spaceRow); 244 Y++; 245 } 246 247 row = new RowDefinition(); 248 row.Height = GridLength.Auto; 249 RowDefinitions.Add(row); 250 CurrentHeight = Y + 1; 251 } 252 else 253 { 254 row = RowDefinitions.ElementAt(Y); 255 } 256 257 if(Layout.Hexpand) 258 { 259 col.Width = new GridLength(1, GridUnitType.Star); 260 } 261 if(Layout.Vexpand) 262 { 263 row.Height = new GridLength(1, GridUnitType.Star); 264 } 265 266 int gridwidth = Layout.GridWidth; 267 if(gridwidth > 1) 268 { 269 gridwidth++; 270 } 271 272 Grid.SetColumn(control, X); 273 Grid.SetRow(control, Y); 274 Grid.SetColumnSpan(control, gridwidth); 275 Children.Add(control); 276 277 Layout.Reset(); 278 X += gridwidth; 279 } 280 } 281 282 public class ScrollViewerContainer : ScrollViewer, Container 283 { 284 public Layout Layout { get; set; } 285 286 public ScrollViewerContainer(Container parent) : base() 287 { 288 Layout = new Layout(); 289 290 HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; 291 VerticalScrollBarVisibility = ScrollBarVisibility.Auto; 292 293 parent.Add(this, true); 294 } 295 296 public void Add(UIElement control, bool fill) 297 { 298 Content = control; 299 } 300 } 301 302 public class TabViewContainer : TabControl, Container 303 { 304 public Layout Layout { get; set; } 305 306 public TabViewContainer(Container parent) : base() 307 { 308 Layout = new Layout(); 309 parent.Add(this, true); 310 } 311 312 public void Add(UIElement control, bool fill) 313 { 314 TabItem tab = new TabItem(); 315 tab.Header = Layout.Label != null ? Layout.Label : "New Tab"; 316 Items.Add(tab); 317 tab.Content = control; 318 Layout.Reset(); 319 } 320 } 321 } 322