using Microsoft.Maui.Controls.Internals; using Sarand.Net.Mobile.Maui.App; using Sarand.Net.Mobile.Maui.Controls; using Sarand.Net.Mobile.Maui.Layouts; using Sarand.Net.Mobile.Maui.Utils; using Sarand.Net.Mobile.Maui.Views; using Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sarand.Net.Mobile.Maui.Panels { //======================================================================= public class SamPanel_Page_Header : SamPanel { //------------------------------------------------------------------- // Definitions. //------------------------------------------------------------------- // Data members. // Layout. private SamBoxView panelBorderTop = new SamBoxView() { BackgroundColor = Sam.Visuals.Page.Header.BorderColor, HeightRequest = Sam.Visuals.Page.Header.BorderStrokeWidthTop }; private VerticalStackLayout panelHeader = new VerticalStackLayout() { BackgroundColor = Sam.Visuals.Page.Header.BackgroundColor }; private SamBoxView panelBorderBottom = new SamBoxView() { BackgroundColor = Sam.Visuals.Page.Header.BorderColor, HeightRequest = Sam.Visuals.Page.Header.BorderStrokeWidthBottom }; // Grid. private SamGrid gridHeader = new SamGrid() { Padding = Sam.Visuals.Page.Header.Padding }; private ColumnDefinition colLeft = new ColumnDefinition(GridLength.Star); private ColumnDefinition colMiddle = new ColumnDefinition(GridLength.Auto); private ColumnDefinition colRight = new ColumnDefinition(GridLength.Star); // Panels. private VerticalStackLayout panelLeft = new VerticalStackLayout() { HorizontalOptions = LayoutOptions.Start }; private VerticalStackLayout panelMiddle = new VerticalStackLayout() { HorizontalOptions = LayoutOptions.Center }; private VerticalStackLayout panelRight = new VerticalStackLayout() { HorizontalOptions = LayoutOptions.End }; // Caption. private SamLabel labelCaption = new SamLabel() { HorizontalOptions = LayoutOptions.Center }; private Sam.DisplayPosition captionDisplay = Sam.DisplayPosition.Middle; // Text labels. private SamLabel labelLeft = new SamLabel() { HorizontalOptions = LayoutOptions.Start }; private SamLabel labelRight= new SamLabel() { HorizontalOptions = LayoutOptions.End }; // Toolbar. private Sam.DisplayPosition toolbarDisplay = Sam.Visuals.Page.Header.ToolbarDisplay; private HorizontalStackLayout panelToolbar = new HorizontalStackLayout() { }; private bool display_ToolbarItem_Back = Sam.Visuals.Page.Header.Display_ToolbarItem_Back; private Button toolbarItem_Back = new Button() { WidthRequest = 16, HeightRequest = 16, Text="<", Padding=new Thickness(0), BorderWidth = 0.0, BorderColor = Colors.DarkOliveGreen }; //------------------------------------------------------------------- // Construction. public SamPanel_Page_Header() { InitialiseComponents(); } //------------------------------------------------------------------- // Properties. public String Caption { get { return labelCaption.Text; } set { labelCaption.Text = value; ConfigureComponents(); } } public Sam.DisplayPosition CaptionDisplay { get { return captionDisplay; } set { captionDisplay = value; ConfigureComponents(); } } // Text labels. public String TextLeft { get { return labelLeft.Text; } set { labelLeft.Text = value; ConfigureComponents(); } } public String TextRight { get { return labelRight.Text; } set { labelRight.Text = value; ConfigureComponents(); } } // Toolbar. public Sam.DisplayPosition ToolbarDisplay { get { return toolbarDisplay; } set { toolbarDisplay = value; ConfigureComponents(); } } public bool Display_ToolbarItem_Back { get { return display_ToolbarItem_Back; } set { display_ToolbarItem_Back = value; ConfigureComponents(); } } //------------------------------------------------------------------- // Components. private void InitialiseComponents() { // Header panel. Content = panelHeader; // Top border. panelBorderTop.Margin = new Thickness(0, 0, 0, Sam.Visuals.Page.Header.Padding.Top); panelHeader.Children.Add(panelBorderTop); // Header grid. gridHeader.Margin = new Thickness(Sam.Visuals.Page.Header.Padding.Left, 0, Sam.Visuals.Page.Header.Padding.Right, 0); gridHeader.ColumnDefinitions.Add(colLeft); gridHeader.ColumnDefinitions.Add(colMiddle); gridHeader.ColumnDefinitions.Add(colRight); gridHeader.Add(panelLeft, 0, 0); gridHeader.Add(panelMiddle, 1, 0); gridHeader.Add(panelRight, 2, 0); panelHeader.Children.Add(gridHeader); // Bottom border. panelBorderBottom.Margin = new Thickness(0, Sam.Visuals.Page.Header.Padding.Bottom, 0, 0); panelHeader.Children.Add(panelBorderBottom); // Configure standard toolbar icons. toolbarItem_Back.Clicked += ToolbarItem_Back_Clicked; } public override void ConfigureComponents() { base.ConfigureComponents(); bool contentDisplayed = false; // Caption. panelLeft.Children.Remove(labelCaption); panelMiddle.Children.Remove(labelCaption); panelRight.Children.Remove(labelCaption); if (captionDisplay != Sam.DisplayPosition.None && !StringUtil.IsBlank(labelCaption.Text)) { contentDisplayed = true; if (captionDisplay == Sam.DisplayPosition.Left) panelLeft.Children.Add(labelCaption); else if (captionDisplay == Sam.DisplayPosition.Middle) panelMiddle.Children.Add(labelCaption); else if (captionDisplay == Sam.DisplayPosition.Right) panelRight.Children.Add(labelCaption); } // Text labels. panelLeft.Children.Remove(labelLeft); if (!StringUtil.IsBlank(labelLeft.Text)) { contentDisplayed = true; panelLeft.Children.Add(labelLeft); } panelRight.Children.Remove(labelRight); if (!StringUtil.IsBlank(labelRight.Text)) { contentDisplayed = true; panelRight.Children.Add(labelRight); } // Toolbar. panelLeft.Children.Remove(panelToolbar); panelMiddle.Children.Remove(panelToolbar); panelRight.Children.Remove(panelToolbar); panelToolbar.Children.Clear(); // Toolbar icons. if (display_ToolbarItem_Back) panelToolbar.Children.Add(toolbarItem_Back); if (panelToolbar.Children.Any() && ToolbarDisplay != Sam.DisplayPosition.None) { contentDisplayed = true; if (ToolbarDisplay == Sam.DisplayPosition.Left) panelLeft.Children.Add(panelToolbar); else if (ToolbarDisplay == Sam.DisplayPosition.Middle) panelMiddle.Children.Add(panelToolbar); else if (ToolbarDisplay == Sam.DisplayPosition.Right) panelRight.Children.Add(panelToolbar); } // Hide panel if nothing displayed. if (contentDisplayed) IsVisible = true; else IsVisible = false; } //------------------------------------------------------------------- // Toolbar actions. private void ToolbarItem_Back_Clicked(object? sender, EventArgs e) { //if (Navigation.NavigationStack.Where(item => System.Object.ReferenceEquals(item, this)).Any()) Page? page = this.GetPage(); if (Navigation.NavigationStack.Any() && System.Object.ReferenceEquals(Navigation.NavigationStack.Last(), page)) { Navigation.PopAsync(); return; } if (Navigation.ModalStack.Where(item => System.Object.ReferenceEquals(item, page)).Any()) { Navigation.PopModalAsync(); return; } } //------------------------------------------------------------------- } //======================================================================= }