SafeDispatch/Safedispatch_4_0/maptab/UIClasses/HistoryGridCellElement.cs
2024-02-22 18:43:59 +02:00

250 lines
9.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Safedispatch_4_0;
using SafeMobileLib;
using Telerik.WinControls.Layouts;
using Telerik.WinControls.UI;
namespace Dispatcher.maptab.UIClasses
{
public class HistoryGridCellElement : GridDataCellElement
{
public static String timeFormat = "MM/dd HH:mm:ss";
private LightVisualElement unitNameElement;
private LightVisualElement addressElement;
private LightVisualElement timeElement;
private LightVisualElement numberElement;
private StackLayoutElement stackTop;
private StackLayoutElement stackBottom;
private StackLayoutElement stackRight;
private DockLayoutPanel dockLayout;
public HistoryGridCellElement(GridViewColumn column, GridRowElement row)
: base(column, row)
{
}
protected override void CreateChildElements()
{
base.CreateChildElements();
this.dockLayout = new DockLayoutPanel();
this.dockLayout.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize;
this.dockLayout.StretchHorizontally = true;
this.dockLayout.StretchVertically = true;
this.dockLayout.AutoSize = true;
this.dockLayout.ShouldHandleMouseInput = false;
this.dockLayout.Margin = new Padding(0, 0, 0, 0);
this.dockLayout.Padding = new Padding(0, 0, 0, 0);
this.AutoToolTip = true;
stackRight = new StackLayoutElement();
stackRight.ElementSpacing = 0;
stackRight.Orientation = Orientation.Vertical;
stackRight.TextAlignment = ContentAlignment.MiddleLeft;
stackRight.Alignment = ContentAlignment.MiddleLeft;
stackRight.StretchHorizontally = true;
stackRight.StretchVertically = true;
stackRight.AutoSize = true;
stackRight.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize;
stackRight.Margin = new Padding(0, 0, 0, 0);
/*
stackRight.MinSize = new System.Drawing.Size(107, stackRight.Size.Height);
stackRight.MaxSize = new System.Drawing.Size(107, stackRight.Size.Height);
stackRight.Size = new System.Drawing.Size(107, stackRight.Size.Height);*/
stackTop = new StackLayoutElement();
stackTop.StretchHorizontally = true;
stackTop.StretchVertically = true;
stackTop.AutoSize = true;
stackTop.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize;
stackTop.ElementSpacing = 0;
stackTop.Orientation = Orientation.Horizontal;
stackTop.TextAlignment = ContentAlignment.MiddleLeft;
stackTop.Alignment = ContentAlignment.MiddleLeft;
numberElement = new LightVisualElement();
numberElement.StretchHorizontally = false;
numberElement.StretchVertically = true;
numberElement.AutoSize = true;
numberElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.WrapAroundChildren;
numberElement.Alignment = ContentAlignment.MiddleLeft;
numberElement.TextAlignment = ContentAlignment.MiddleLeft;
Font fontNumber = new Font(
numberElement.Font.FontFamily,
9,
FontStyle.Regular,
GraphicsUnit.Pixel);
numberElement.Font = fontNumber;
numberElement.ForeColor = Color.FromArgb(161, 161, 161);
//numberElement.MaxSize = new System.Drawing.Size(30, 0);
numberElement.MinSize = new System.Drawing.Size(25, 0);
addressElement = new LightVisualElement();
addressElement.StretchHorizontally = true;
addressElement.StretchVertically = true;
addressElement.AutoSize = true;
addressElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.WrapAroundChildren;
addressElement.Alignment = ContentAlignment.MiddleLeft;
addressElement.TextAlignment = ContentAlignment.MiddleLeft;
addressElement.Padding = new System.Windows.Forms.Padding(0, 3, 3, 0);
addressElement.Margin = new System.Windows.Forms.Padding(0,0,6,0);
addressElement.ForeColor = Color.FromArgb(99, 99, 99);
addressElement.TextWrap = true;
//addressElement.MaxSize = new System.Drawing.Size(dockLayout.MaxSize.Width - 30, 0);
//addressElement.MinSize = new System.Drawing.Size(dockLayout.MaxSize.Width - 30, 0);
// add crt number and address element to the top stack
stackTop.Children.Add(numberElement);
stackTop.Children.Add(addressElement);
// create the middle stack
stackBottom = new StackLayoutElement();
stackBottom.StretchHorizontally = true;
stackBottom.StretchVertically = true;
stackBottom.AutoSize = true;
stackBottom.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize;
stackBottom.ElementSpacing = 0;
stackBottom.Orientation = Orientation.Horizontal;
stackBottom.TextAlignment = ContentAlignment.MiddleLeft;
stackBottom.Alignment = ContentAlignment.MiddleLeft;
unitNameElement = new LightVisualElement();
Font font = new Font(
unitNameElement.Font.FontFamily,
10,
FontStyle.Bold,
GraphicsUnit.Pixel);
unitNameElement.Font = font;
unitNameElement.ForeColor = Color.FromArgb(0, 0, 0);
unitNameElement.StretchHorizontally = true;
unitNameElement.AutoSize = true;
unitNameElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize;
unitNameElement.Alignment = ContentAlignment.MiddleLeft;
unitNameElement.TextAlignment = ContentAlignment.MiddleLeft;
unitNameElement.MinSize = new System.Drawing.Size(140, 12);
timeElement = new LightVisualElement();
timeElement.StretchHorizontally = true;
unitNameElement.AutoSize = true;
timeElement.Alignment = ContentAlignment.MiddleRight;
timeElement.TextAlignment = ContentAlignment.MiddleRight;
timeElement.MaxSize = new System.Drawing.Size(110, 12);
timeElement.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0);
Font fontNumber3 = new Font(
timeElement.Font.FontFamily,
9,
FontStyle.Regular,
GraphicsUnit.Pixel);
timeElement.Font = fontNumber3;
timeElement.ForeColor = Color.FromArgb(161, 161, 161);
// add coordinates and time to bottom stack
stackBottom.Children.Add(unitNameElement);
stackBottom.Children.Add(timeElement);
// add top, middle and bottom stacks to the right stack
stackRight.Children.Add(stackTop);
stackRight.Children.Add(stackBottom);
// add stack to the dock
dockLayout.Children.Add(stackRight);
DockLayoutPanel.SetDock(this.stackRight, Telerik.WinControls.Layouts.Dock.Right);
this.Children.Add(dockLayout);
}
protected override Type ThemeEffectiveType
{
get
{
return typeof(GridDataCellElement);
}
}
public override bool IsCompatible(GridViewColumn data, object context)
{
return data is HistoryGridColumn && context is GridDataRowElement;
}
public override void SetContent()
{
GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo;
if (row != null)
{
DataforGRID gridData = row.DataBoundItem as DataforGRID;
if (gridData != null)
{
// set the current point number
numberElement.Text = (row.Index + 1) + ""; // (Double.Parse(gridData.Id) + 1 ) + ".";
// set the vehicle name
unitNameElement.Text = gridData.VehName;
// set position time
if (gridData.Datatime.Year > 2000)
//timeElement.Text = String.Format("{0:"+ timeFormat+"}", gridData.Datatime);
timeElement.Text = $"{gridData.Datatime.ToString(timeFormat)}";
if (gridData.Address.Length > 0 && !gridData.Address.Equals("N/A"))
{
// set the addres
addressElement.Text = gridData.Address;
// add coordinates if available
if (gridData.Lng.Length > 0 && !gridData.Lng.Equals("N/A"))
addressElement.Text += " [" + gridData.Lat + "," + gridData.Lng + "]";
// add speed to the addres field
addressElement.Text += " - " + gridData.Speed + (MainForm2.isInMile ? " " + MainForm2.milesh : " " + MainForm2.kmh);
// set the tooltip text which will be displayed
this.ToolTipText = addressElement.Text;
}
else
addressElement.Text = MainForm2.returnLNGString("noAddress");
// change color of the selected row
if (this.IsCurrentRow)
{
this.DrawFill = true;
this.BackColor = MainForm2.GridSelectedRow;
}
else
this.DrawFill = false;
}
}
this.Text = string.Empty;
}
}
}