Files
Common-VS2019/SacsMobileMaui/Maui/Panels/SamPanel_Page_Header.cs
T

206 lines
7.4 KiB
C#

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;
}
}
//-------------------------------------------------------------------
}
//=======================================================================
}