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 CustomTicketCellElement : GridDataCellElement { private LightVisualElement ticketSubjectElement; private LightVisualElement ticketBodyElement; private LightVisualElement ticketStatusElement; private LightVisualElement ticketNumberElement; private StackLayoutElement stackLeft; private StackLayoutElement stackRight; private DockLayoutPanel dockLayout; public CustomTicketCellElement(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.ShouldHandleMouseInput = false; this.dockLayout.Margin = new Padding(0, 3, 0, 3); this.dockLayout.Padding = new Padding(0, 3, 0, 3); stackLeft = new StackLayoutElement(); stackLeft.StretchHorizontally = true; stackLeft.StretchVertically = true; stackLeft.AutoSize = true; stackLeft.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize; stackLeft.ElementSpacing = 0; stackLeft.Orientation = Orientation.Vertical; stackLeft.TextAlignment = ContentAlignment.MiddleLeft; stackLeft.Alignment = ContentAlignment.MiddleLeft; stackLeft.Margin = new Padding(5, 5, 5, 0); ticketSubjectElement = new LightVisualElement(); Font font = new Font( //ticketSubjectElement.Font.FontFamily, new FontFamily("SEGOE UI"), 13, FontStyle.Bold, GraphicsUnit.Pixel); ticketSubjectElement.Font = font; ticketSubjectElement.ForeColor = MainForm2.LabelColorTicketSubject; //Color.FromArgb(72, 191, 255); ticketSubjectElement.StretchHorizontally = true; ticketSubjectElement.AutoSize = true; ticketSubjectElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize; ticketSubjectElement.Alignment = ContentAlignment.MiddleLeft; ticketSubjectElement.TextAlignment = ContentAlignment.MiddleLeft; ticketSubjectElement.MinSize = new System.Drawing.Size(230, 14); ticketBodyElement = new LightVisualElement(); ticketBodyElement.AutoSize = true; ticketBodyElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize; ticketBodyElement.StretchHorizontally = true; ticketBodyElement.Alignment = ContentAlignment.MiddleLeft; ticketBodyElement.TextAlignment = ContentAlignment.MiddleLeft; ticketBodyElement.MinSize = new System.Drawing.Size(230, 14); // add Subject and body into left stack stackLeft.Children.Add(ticketSubjectElement); stackLeft.Children.Add(ticketBodyElement); stackRight = new StackLayoutElement(); stackRight.ElementSpacing = 0; stackRight.Orientation = Orientation.Vertical; stackRight.TextAlignment = ContentAlignment.MiddleRight; stackRight.Alignment = ContentAlignment.MiddleRight; stackRight.StretchHorizontally = true; stackRight.StretchVertically = true; stackRight.Margin = new Padding(5, 5, 5, 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); ticketStatusElement = new LightVisualElement(); ticketStatusElement.StretchHorizontally = false; ticketStatusElement.Alignment = ContentAlignment.MiddleRight; ticketStatusElement.TextAlignment = ContentAlignment.MiddleRight; ticketStatusElement.DrawFill = true; ticketStatusElement.NumberOfColors = 1; ticketStatusElement.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0); ticketStatusElement.ForeColor = Color.FromArgb(213, 213, 213); ticketNumberElement = new LightVisualElement(); ticketNumberElement.StretchHorizontally = true; ticketNumberElement.Alignment = ContentAlignment.MiddleRight; ticketNumberElement.TextAlignment = ContentAlignment.MiddleRight; Font fontNumber = new Font( ticketNumberElement.Font.FontFamily, 11, FontStyle.Regular, GraphicsUnit.Pixel); ticketNumberElement.Font = fontNumber; ticketNumberElement.ForeColor = Color.FromArgb(0x66, 0x66, 0x66); // add status and number into right stack stackRight.Children.Add(ticketStatusElement); stackRight.Children.Add(ticketNumberElement); dockLayout.Children.Add(stackLeft); dockLayout.Children.Add(stackRight); DockLayoutPanel.SetDock(this.stackLeft, Telerik.WinControls.Layouts.Dock.Left); 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 CustomTicketColumn && context is GridDataRowElement; } public override void SetContent() { GridViewHierarchyRowInfo row = this.RowInfo as GridViewHierarchyRowInfo; if (row != null) { JobTickets jt = row.DataBoundItem as JobTickets; if (jt != null) { DateTime endDate = DateTime.UtcNow.AddDays(-10); // try to parse the end time if(jt.End_time_specified != null) DateTime.TryParse(jt.End_time_specified, out endDate); // change color for an expired ticket if (jt.IsExpired) this.ticketSubjectElement.ForeColor = Color.FromArgb(255, 0, 0); else this.ticketSubjectElement.ForeColor = MainForm2.LabelColorTicketSubject; this.ticketSubjectElement.Text = jt.Name; this.ticketBodyElement.Text = jt.Comment; this.ticketNumberElement.Text = "#" + jt.Ticket_id + ""; this.ticketStatusElement.Text = jt.Status; // change background and forecolor depending on the ticket status this.ticketStatusElement.BackColor = SafeMobileLib.Utils.TicketingStatuses.GetTicketStatusColor(jt.Status); // flag the deleted tickets if(jt.Deleted == 1) { this.ticketSubjectElement.ForeColor = Color.DarkGray; this.ticketBodyElement.ForeColor = Color.DarkGray; this.ticketStatusElement.DrawFill = false; this.ticketStatusElement.ForeColor = Color.DarkGray; this.ticketNumberElement.ForeColor = Color.DarkGray; } } } this.Text = string.Empty; } } }