206 lines
7.4 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|