ui/winui/window.cpp

branch
newapi
changeset 226
4eef1d49f794
parent 221
a82d9beaa94a
child 241
c51dd0e9ecb7
--- a/ui/winui/window.cpp	Sun Nov 26 15:44:28 2023 +0100
+++ b/ui/winui/window.cpp	Tue Jan 16 12:49:46 2024 +0100
@@ -109,16 +109,66 @@
 	}
 
 	if (uic_toolbar_isenabled()) {
+		// create a grid for the toolbar: ColumnDefinitions="Auto, *, Auto"
+		Grid toolbar_grid = Grid();
+		GridLength gl;
+		gl.Value = 0;
+		gl.GridUnitType = GridUnitType::Auto;
+
+		ColumnDefinition coldef0 = ColumnDefinition();
+		coldef0.Width(gl);
+		toolbar_grid.ColumnDefinitions().Append(coldef0);
+
+		gl.Value = 1;
+		gl.GridUnitType = GridUnitType::Star;
+		ColumnDefinition coldef1 = ColumnDefinition();
+		coldef1.Width(gl);
+		toolbar_grid.ColumnDefinitions().Append(coldef1);
+
+		gl.Value = 0;
+		gl.GridUnitType = GridUnitType::Auto;
+		ColumnDefinition coldef2 = ColumnDefinition();
+		coldef2.Width(gl);
+		toolbar_grid.ColumnDefinitions().Append(coldef2);
+
+		// rowdef
+		gl.Value = 0;
+		gl.GridUnitType = GridUnitType::Auto;
+		RowDefinition rowdef = RowDefinition();
+		rowdef.Height(gl);
+		toolbar_grid.RowDefinitions().Append(rowdef);
+
+
 		// create commandbar
-		CommandBar toolbar = ui_create_toolbar(obj);
-		// wrap the commandbar in a stackpanel, because we
-		// don't want to fill the horizontal space
-		StackPanel toolbar_panel = StackPanel();
-		toolbar_panel.Orientation(Orientation::Horizontal);
-		toolbar_panel.Children().Append(toolbar);
+		CxList* def_l = uic_get_toolbar_defaults(UI_TOOLBAR_LEFT);
+		CxList* def_c = uic_get_toolbar_defaults(UI_TOOLBAR_CENTER);
+		CxList* def_r = uic_get_toolbar_defaults(UI_TOOLBAR_RIGHT);
 
-		toolbar_panel.VerticalAlignment(VerticalAlignment::Top);
-		obj->container->Add(toolbar_panel, false);
+		bool addappmenu = true;
+		if (def_r->size > 0) {
+			CommandBar toolbar_r = ui_create_toolbar(obj, def_r, addappmenu);
+			toolbar_grid.SetColumn(toolbar_r, 2);
+			toolbar_grid.SetRow(toolbar_r, 0);
+			toolbar_grid.Children().Append(toolbar_r);
+			addappmenu = false;
+		}
+		if (def_c->size > 0) {
+			CommandBar toolbar_c = ui_create_toolbar(obj, def_c, addappmenu);
+			toolbar_c.HorizontalAlignment(HorizontalAlignment::Center);
+			toolbar_grid.SetColumn(toolbar_c, 1);
+			toolbar_grid.SetRow(toolbar_c, 0);
+			toolbar_grid.Children().Append(toolbar_c);
+			addappmenu = false;
+		}
+		if (def_l->size > 0) {
+			CommandBar toolbar_l = ui_create_toolbar(obj, def_l, addappmenu);
+			toolbar_grid.SetColumn(toolbar_l, 0);
+			toolbar_grid.SetRow(toolbar_l, 0);
+			toolbar_grid.Children().Append(toolbar_l);
+		}
+
+		toolbar_grid.VerticalAlignment(VerticalAlignment::Top);
+		obj->container->Add(toolbar_grid, false);
 	}
 
 	obj->window = window_data;

mercurial