using System; using System.Collections.Generic; using System.ComponentModel; 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 LiveGridCellElement : GridDataCellElement { static int counter = 0; private LightVisualElement timeElement; private LightVisualElement unitNameElement; private LightVisualElement statusElement; private LightVisualElement speedElement; private LightVisualElement unitIconElement; private LightVisualElement alertsIconElement; private LightVisualElement stolenIconElement; private LightVisualElement centerMapIconElement; private LightVisualElement textMessageIconElement; private LightVisualElement ticketingIconElement; private LightVisualElement voiceIconElement; //private RadCheckBoxElement isDisplayedElement; private StackLayoutElement stackTop; private StackLayoutElement stackBottom; private StackLayoutElement stackRight; private DockLayoutPanel dockLayout; public LiveGridCellElement(GridViewColumn column, GridRowElement row) : base(column, row) { } protected override void CreateChildElements() { base.CreateChildElements(); this.dockLayout = new DockLayoutPanel(); this.dockLayout.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.WrapAroundChildren; 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.dockLayout.AutoToolTip = true; //this.dockLayout.MaxSize = new System.Drawing.Size(249, 55); //this.dockLayout.MinSize = new System.Drawing.Size(249, 55); 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.AutoToolTip = true; /* 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.Auto; stackTop.ElementSpacing = 0; stackTop.Orientation = Orientation.Horizontal; stackTop.TextAlignment = ContentAlignment.MiddleLeft; stackTop.Alignment = ContentAlignment.MiddleLeft; stackTop.AutoToolTip = true; stackTop.ShouldHandleMouseInput = true; stackTop.DoubleClick += layout_DoubleClick; unitIconElement = new LightVisualElement(); unitIconElement.ShouldHandleMouseInput = true; unitIconElement.StretchHorizontally = false; unitIconElement.StretchVertically = true; unitIconElement.ImageAlignment = ContentAlignment.MiddleCenter; unitIconElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; unitIconElement.Alignment = ContentAlignment.MiddleLeft; unitIconElement.TextAlignment = ContentAlignment.MiddleLeft; unitIconElement.Margin = new System.Windows.Forms.Padding(2); Font fontNumber = new Font( unitIconElement.Font.FontFamily, 9, FontStyle.Regular, GraphicsUnit.Pixel); unitIconElement.Font = fontNumber; unitIconElement.ForeColor = Color.FromArgb(161, 161, 161); unitIconElement.MaxSize = new Size(27, 0); unitIconElement.MinSize = new Size(27, 0); unitIconElement.Click += layout_DoubleClick; unitNameElement = new LightVisualElement(); unitNameElement.StretchHorizontally = true; unitNameElement.StretchVertically = true; unitNameElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize; unitNameElement.AutoSize = true; unitNameElement.TextWrap = true; unitNameElement.MaxSize = new Size(167, 120); //unitNameElement.Size = unitNameElement.MaxSize; unitNameElement.TextAlignment = ContentAlignment.TopLeft; unitNameElement.Padding = new System.Windows.Forms.Padding(0, 3, 3, 0); unitNameElement.Margin = new Padding(0, 0, 20, 0); unitNameElement.ForeColor = Color.FromArgb(99, 99, 99); unitNameElement.ShouldHandleMouseInput = true; unitNameElement.DoubleClick += layout_DoubleClick; Font fontUnitName = new Font( unitNameElement.Font.FontFamily, 13, FontStyle.Bold, GraphicsUnit.Pixel); unitNameElement.Font = fontUnitName; unitNameElement.AutoToolTip = true; alertsIconElement = new LightVisualElement(); alertsIconElement.ShouldHandleMouseInput = true; alertsIconElement.StretchHorizontally = false; alertsIconElement.StretchVertically = true; alertsIconElement.AutoSize = true; //alertsIconElement.Alignment = ContentAlignment.MiddleLeft; // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_alert")) MainForm2.imagesDictionary.Add("l_alert", global::Dispatcher.Properties.Resources.l_alert); // set image for the list grid alertsIconElement.Image = MainForm2.imagesDictionary["l_alert"]; alertsIconElement.ImageAlignment = ContentAlignment.MiddleCenter; alertsIconElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; alertsIconElement.TextAlignment = ContentAlignment.MiddleLeft; alertsIconElement.Margin = new System.Windows.Forms.Padding(0); alertsIconElement.MaxSize = new Size(22, 0); alertsIconElement.MinSize = new Size(22, 0); alertsIconElement.Click += delegate(object sender, EventArgs args) { // get row GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { // get row data DataforVehList gridData = row.DataBoundItem as DataforVehList; // check if data exists if (gridData != null) { // trigger event for when click is done if (_onLiveCell_Click != null) _onLiveCell_Click(textMessageIconElement, new LiveCellClickEventArgs() { eventType = EventType.ALERT, gridData = gridData }); } } }; stolenIconElement = new LightVisualElement(); stolenIconElement.ShouldHandleMouseInput = true; stolenIconElement.StretchHorizontally = false; stolenIconElement.StretchVertically = true; stolenIconElement.AutoSize = true; //stolenIconElement.Alignment = ContentAlignment.MiddleLeft; //stolenIconElement.Padding = new Padding(0, 0, 35, 0); // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_stolen")) MainForm2.imagesDictionary.Add("l_stolen", global::Dispatcher.Properties.Resources.l_stolen); // set image for the list grid stolenIconElement.Image = MainForm2.imagesDictionary["l_stolen"]; stolenIconElement.ImageAlignment = ContentAlignment.MiddleCenter; stolenIconElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; stolenIconElement.TextAlignment = ContentAlignment.MiddleLeft; stolenIconElement.Margin = new System.Windows.Forms.Padding(0); stolenIconElement.ToolTipText = MainForm2.returnLNGString("stolen"); stolenIconElement.MaxSize = new Size(22, 0); stolenIconElement.MinSize = new Size(22, 0); statusElement = new LightVisualElement(); statusElement.StretchHorizontally = false; statusElement.AutoSize = true; statusElement.AutoToolTip = true; statusElement.Alignment = ContentAlignment.TopRight; statusElement.TextAlignment = ContentAlignment.MiddleRight; statusElement.Padding = new System.Windows.Forms.Padding(0, 0, 0, 0); statusElement.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0); statusElement.MaxSize = new Size(20, 0); statusElement.MinSize = new Size(20, 0); // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_d")) MainForm2.imagesDictionary.Add("l_bullet_d", global::Dispatcher.Properties.Resources.l_bullet_d); // set image for the list grid statusElement.Image = MainForm2.imagesDictionary["l_bullet_d"]; statusElement.ImageAlignment = ContentAlignment.MiddleRight; statusElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; statusElement.DrawText = false; // add crt number and address element to the top stack //stackTop.Children.Add(isDisplayedElement); //stackTop.Children.Add(alertsIconElement); // stackTop.Children.Add(unitIconElement); stackTop.Children.Add(unitNameElement); stackTop.Children.Add(stolenIconElement); stackTop.Children.Add(statusElement); // create the middle stack stackBottom = new StackLayoutElement(); stackBottom.StretchHorizontally = true; stackBottom.StretchVertically = false; stackBottom.AutoSize = true; stackBottom.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.Auto; stackBottom.ElementSpacing = 0; stackBottom.Orientation = Orientation.Horizontal; stackBottom.TextAlignment = ContentAlignment.MiddleLeft; stackBottom.Alignment = ContentAlignment.MiddleLeft; stackBottom.AutoToolTip = true; stackBottom.ShouldHandleMouseInput = true; stackBottom.DoubleClick += layout_DoubleClick; centerMapIconElement = new LightVisualElement(); centerMapIconElement.ShouldHandleMouseInput = true; centerMapIconElement.StretchHorizontally = false; centerMapIconElement.StretchVertically = true; centerMapIconElement.ImageAlignment = ContentAlignment.MiddleCenter; centerMapIconElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; centerMapIconElement.Alignment = ContentAlignment.MiddleLeft; centerMapIconElement.AutoToolTip = true; centerMapIconElement.ToolTipText = MainForm2.returnLNGString("centerMap"); // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_center")) MainForm2.imagesDictionary.Add("l_center", global::Dispatcher.Properties.Resources.l_center); // set image for the list grid centerMapIconElement.Image = MainForm2.imagesDictionary["l_center"]; centerMapIconElement.TextAlignment = ContentAlignment.MiddleLeft; centerMapIconElement.Margin = new System.Windows.Forms.Padding(2); centerMapIconElement.MaxSize = new Size(18, 0); centerMapIconElement.MinSize = new Size(18, 0); centerMapIconElement.DoubleClick += centerMapIconElement_DoubleClick; centerMapIconElement.Click += centerMapIconElement_DoubleClick; textMessageIconElement = new LightVisualElement(); textMessageIconElement.ShouldHandleMouseInput = true; textMessageIconElement.StretchHorizontally = false; textMessageIconElement.StretchVertically = true; textMessageIconElement.ImageAlignment = ContentAlignment.MiddleCenter; textMessageIconElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; textMessageIconElement.Alignment = ContentAlignment.MiddleLeft; textMessageIconElement.AutoToolTip = true; textMessageIconElement.ToolTipText = MainForm2.returnLNGString("quickSMS"); // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_text")) MainForm2.imagesDictionary.Add("l_text", global::Dispatcher.Properties.Resources.l_text); // set image for the list grid textMessageIconElement.Image = MainForm2.imagesDictionary["l_text"]; textMessageIconElement.TextAlignment = ContentAlignment.MiddleLeft; textMessageIconElement.Margin = new System.Windows.Forms.Padding(2); textMessageIconElement.MaxSize = new Size(18, 0); textMessageIconElement.MinSize = new Size(18, 0); textMessageIconElement.DoubleClick += textMessageIconElement_DoubleClick; textMessageIconElement.Click += textMessageIconElement_DoubleClick; ticketingIconElement = new LightVisualElement(); ticketingIconElement.ShouldHandleMouseInput = true; ticketingIconElement.StretchHorizontally = false; ticketingIconElement.StretchVertically = true; ticketingIconElement.ImageAlignment = ContentAlignment.MiddleCenter; ticketingIconElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; ticketingIconElement.Alignment = ContentAlignment.MiddleLeft; ticketingIconElement.AutoToolTip = true; ticketingIconElement.ToolTipText = MainForm2.returnLNGString("quickTicketing"); // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_ticketing")) MainForm2.imagesDictionary.Add("l_ticketing", global::Dispatcher.Properties.Resources.l_ticketing); // set image for the list grid ticketingIconElement.Image = MainForm2.imagesDictionary["l_ticketing"]; ticketingIconElement.TextAlignment = ContentAlignment.MiddleLeft; ticketingIconElement.Margin = new System.Windows.Forms.Padding(2); ticketingIconElement.MaxSize = new Size(18, 0); ticketingIconElement.MinSize = new Size(18, 0); ticketingIconElement.Click += delegate(object sender, EventArgs args) { // get row GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { // get row data DataforVehList gridData = row.DataBoundItem as DataforVehList; // check if data exists if (gridData != null) { // trigger event for when click is done if (_onLiveCell_Click != null) _onLiveCell_Click(ticketingIconElement, new LiveCellClickEventArgs() { eventType = EventType.TICKETING, gridData = gridData }); } } }; voiceIconElement = new LightVisualElement(); voiceIconElement.ShouldHandleMouseInput = true; voiceIconElement.StretchHorizontally = false; voiceIconElement.StretchVertically = true; voiceIconElement.ImageAlignment = ContentAlignment.MiddleCenter; voiceIconElement.ImageLayout = System.Windows.Forms.ImageLayout.Zoom; voiceIconElement.Alignment = ContentAlignment.MiddleLeft; voiceIconElement.AutoToolTip = true; voiceIconElement.ToolTipText = MainForm2.returnLNGString("quickPTT"); // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("t_voice_b")) MainForm2.imagesDictionary.Add("t_voice_b", global::Dispatcher.Properties.Resources.t_voice_b); // set image for the list grid voiceIconElement.Image = MainForm2.imagesDictionary["t_voice_b"]; voiceIconElement.TextAlignment = ContentAlignment.MiddleLeft; voiceIconElement.Margin = new System.Windows.Forms.Padding(2); voiceIconElement.MaxSize = new Size(18, 0); voiceIconElement.MinSize = new Size(18, 0); voiceIconElement.DoubleClick += voiceIconElement_DoubleClick; voiceIconElement.Click += voiceIconElement_DoubleClick; timeElement = new LightVisualElement(); Font font = new Font( timeElement.Font.FontFamily, 10, FontStyle.Regular, GraphicsUnit.Pixel); timeElement.Font = font; timeElement.ForeColor = Color.FromArgb(0, 0, 0); timeElement.StretchHorizontally = true; timeElement.AutoSize = true; timeElement.AutoSizeMode = Telerik.WinControls.RadAutoSizeMode.FitToAvailableSize; timeElement.Alignment = ContentAlignment.MiddleLeft; timeElement.AutoToolTip = true; timeElement.ToolTipText = "WELCOME"; timeElement.TextAlignment = ContentAlignment.MiddleLeft; timeElement.MinSize = new Size(140, 12); speedElement = new LightVisualElement(); speedElement.StretchHorizontally = true; speedElement.AutoSize = true; speedElement.Alignment = ContentAlignment.MiddleRight; speedElement.TextAlignment = ContentAlignment.MiddleRight; speedElement.MaxSize = new Size(110, 12); speedElement.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0); Font fontNumber3 = new Font( speedElement.Font.FontFamily, 9, FontStyle.Regular, GraphicsUnit.Pixel); speedElement.Font = fontNumber3; speedElement.ForeColor = Color.FromArgb(161, 161, 161); // add coordinates and time to bottom stack //stackBottom.Children.Add(alertsIconElement); stackBottom.Children.Add(centerMapIconElement); stackBottom.Children.Add(textMessageIconElement); stackBottom.Children.Add(voiceIconElement); stackBottom.Children.Add(ticketingIconElement); stackBottom.Children.Add(timeElement); stackBottom.Children.Add(speedElement); // add top, middle and bottom stacks to the right stack stackRight.Children.Add(stackTop); stackRight.Children.Add(stackBottom); stackRight.DoubleClick += layout_DoubleClick; // add stack to the dock dockLayout.Children.Add(stackRight); DockLayoutPanel.SetDock(this.stackRight, Telerik.WinControls.Layouts.Dock.Right); this.Children.Add(dockLayout); } /// /// Fire the event that a cell needs to be displayed on the map /// void layout_DoubleClick(object sender, EventArgs e) { // get row GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { // get row data DataforVehList gridData = row.DataBoundItem as DataforVehList; // check if data exists if (gridData != null) { // change the state of displayed/not Displayed on the map gridData.OnMap = !gridData.OnMap; // decide which icon should be used when displaying the unit icon SetUnitIconAndText(gridData); // trigger event for when click is done if (_onLiveCell_Click != null) _onLiveCell_Click(textMessageIconElement, new LiveCellClickEventArgs() { eventType = EventType.DISPLAY, gridData = gridData }); } } } void voiceIconElement_DoubleClick(object sender, EventArgs e) { // get row GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { // get row data DataforVehList gridData = row.DataBoundItem as DataforVehList; // check if data exists if (gridData != null) { // trigger event for when click is done if (_onLiveCell_Click != null) _onLiveCell_Click(ticketingIconElement, new LiveCellClickEventArgs() { eventType = EventType.VOICE, gridData = gridData }); } } } void textMessageIconElement_DoubleClick(object sender, EventArgs e) { // get row GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { // get row data DataforVehList gridData = row.DataBoundItem as DataforVehList; // check if data exists if (gridData != null) { // trigger event for when click is done if (_onLiveCell_Click != null) _onLiveCell_Click(textMessageIconElement, new LiveCellClickEventArgs() { eventType = EventType.TEXT, gridData = gridData }); } } } void centerMapIconElement_DoubleClick(object sender, EventArgs e) { // get row GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { // get row data DataforVehList gridData = row.DataBoundItem as DataforVehList; // check if data exists if (gridData != null) { // trigger event for when click is done if (_onLiveCell_Click != null) _onLiveCell_Click(textMessageIconElement, new LiveCellClickEventArgs() { eventType = EventType.CENTER, gridData = gridData }); } } } protected override Type ThemeEffectiveType { get { return typeof(GridDataCellElement); } } public override bool IsCompatible(GridViewColumn data, object context) { return data is HistoryGridColumn && context is GridDataRowElement; } private bool createdEventListener = false; public override void SetContent() { GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { DataforVehList gridData = row.DataBoundItem as DataforVehList; if (!createdEventListener) { gridData.PropertyChanged += gridData_PropertyChanged; createdEventListener = true; } // update the UI elements UpdateUIElements(gridData); if(!MainForm2.VoiceTabStarted) voiceIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } this.Text = string.Empty; } /// /// Listener and event handler for when a property changes value in /// the gridData object. This will cause the grid element to redraw /// with new values /// void gridData_PropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case "nrOfUpdates": { // get row GridViewDataRowInfo row = this.RowInfo as GridViewDataRowInfo; if (row != null) { // get row data DataforVehList gridData = row.DataBoundItem as DataforVehList; // update the UI elements UpdateUIElements(gridData); } break; } } } /// /// Update all UI elements with the ones received in gridData object /// /// Object containing all infos for the UI elements private void UpdateUIElements(DataforVehList item) { if (item != null) { /* if (item.UnitStatus == Status_for_tab.DISABLE) { this.DrawFill = true; this.NumberOfColors = 1; this.BackColor = Color.Silver; } // change background for the disabled units else if (item.UnitStatus == Status_for_tab.EMERG) { this.DrawFill = true; this.NumberOfColors = 1; this.BackColor = Color.FromArgb(156, 34, 0); }*/ SetUnitIconAndText(item); // set speed value speedElement.Text = item.Speed + (item.IsMPH ? " mph" : " kph"); // set time value timeElement.Text = GetDateTimeAgo(item.PositionTime); if (timeElement.Text.Equals(MainForm2.returnLNGString("scheduled"))) timeElement.Text = MainForm2.returnLNGString("inTheFuture"); timeElement.ToolTipText = (item.PositionTime.Year > 2000 ? item.PositionTime.ToString() : MainForm2.returnLNGString("neverReported")); // set the status icon statusElement.Image = GetStatusImage(item.PositionTime, item.UnitStatus, item.Speed); statusElement.ToolTipText = "Status: " + item.UnitStatus.ToString().Replace('_', ' '); if (item.HasAlerts) alertsIconElement.Visibility = Telerik.WinControls.ElementVisibility.Visible; else alertsIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; if (item.Stolen) stolenIconElement.Visibility = Telerik.WinControls.ElementVisibility.Visible; else stolenIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; if (!item.HasVoice && MainForm2.VoiceTabStarted) { voiceIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } if (!item.HasText) { textMessageIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } if (this.IsCurrentRow) { timeElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; centerMapIconElement.Visibility = Telerik.WinControls.ElementVisibility.Visible; if (item.HasText) { textMessageIconElement.Visibility = Telerik.WinControls.ElementVisibility.Visible; } ticketingIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; if (item.HasVoice && MainForm2.VoiceTabStarted) { voiceIconElement.Visibility = Telerik.WinControls.ElementVisibility.Visible; } this.DrawFill = true; this.BackColor = MainForm2.GridSelectedRow; //(gridData.UnitStatus == Status_for_tab.EMERG ? Color.Red : MainForm2.GridSelectedRow); //MainForm2.GridSelectedRow; } else { timeElement.Visibility = Telerik.WinControls.ElementVisibility.Visible; centerMapIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; textMessageIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; ticketingIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; voiceIconElement.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; // draw background if emergency or disabled if (item.UnitStatus != Status_for_tab.DISABLE || item.UnitStatus != Status_for_tab.EMERG) this.DrawFill = false; } // set the tooltip text which will be displayed string tooltipText = ""; if (Math.Abs(item.Latitude) <= 0.1 && Math.Abs(item.Longitude) <= 0.1) tooltipText = MainForm2.returnLNGString("neverReported"); else { tooltipText = (item.Address.Trim().Length > 0 || (!item.Address.Equals("N/A") && item.Address.Trim().Length > 0) ? item.Address : MainForm2.returnLNGString("unknownAddr")) + Environment.NewLine + "[" + Math.Round(item.Latitude, 5).ToString() + "," + Math.Round(item.Longitude, 5).ToString() + "]"; } this.stackBottom.ToolTipText = stackRight.ToolTipText = stackTop.ToolTipText = tooltipText; } } /// /// Set the unit icon and the text color based on the status of the unit /// and if it is displayed on the map or not /// /// The grid data for the unit which needs to be set private void SetUnitIconAndText(DataforVehList gridData) { if (gridData.UnitStatus == Status_for_tab.EMERG) { // decide which icon should be used when displaying the unit icon if (!gridData.OnMap) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey(gridData.Pict.Tag.ToString() + "_d")) MainForm2.imagesDictionary.Add(gridData.Pict.Tag.ToString() + "_d", Utils.MakeGrayscale3((Bitmap)gridData.Pict, 0.5f)); // set the icon for the unit unitIconElement.Image = MainForm2.imagesDictionary[gridData.Pict.Tag.ToString() + "_d"]; } else { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey(gridData.Pict.Tag.ToString() + "_e")) MainForm2.imagesDictionary.Add(gridData.Pict.Tag.ToString() + "_e", Utils.ChangeColor((Bitmap)gridData.Pict, Color.DarkRed)); // set the icon for the unit unitIconElement.Image = MainForm2.imagesDictionary[gridData.Pict.Tag.ToString() + "_e"]; } } else { // decide which icon should be used when displaying the unit icon if (!gridData.OnMap) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey(gridData.Pict.Tag.ToString() + "_d")) MainForm2.imagesDictionary.Add(gridData.Pict.Tag.ToString() + "_d", Utils.MakeGrayscale3((Bitmap)gridData.Pict, 0.5f)); // set the icon for the unit unitIconElement.Image = MainForm2.imagesDictionary[gridData.Pict.Tag.ToString() + "_d"]; } else { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey(gridData.Pict.Tag.ToString())) MainForm2.imagesDictionary.Add(gridData.Pict.Tag.ToString(), gridData.Pict); // set the icon for the unit unitIconElement.Image = MainForm2.imagesDictionary[gridData.Pict.Tag.ToString()]; } } // set the vehicle name unitNameElement.Text = gridData.UnitName + " [" + gridData.RadioId + "]"; unitNameElement.ToolTipText = "Radio id: " + gridData.RadioId; if (gridData.UnitStatus == Status_for_tab.EMERG) unitNameElement.ForeColor = Color.FromArgb(144, 0, 39); else if (gridData.UnitStatus == Status_for_tab.DISABLE) unitNameElement.ForeColor = Color.FromArgb(144, 144, 144); else unitNameElement.ForeColor = Color.Black; } /// /// Get a text representation for the date time representing /// the difference in minutes/hours/days from now /// /// DateTime value which needs to be converted /// String 'Ago' representation fot he date public static string GetDateTimeAgo(DateTime time) { // TODO // should add a localized procedure here // TODO return Utils.GetDateTimeAgo(time); } /// /// Get the bullet image for the current state of the unit /// based on its position time, speed and status /// /// Time of the position /// Unit status as decided bt the system /// Speed of the unit /// Image representing the state of the unit public Image GetStatusImage(DateTime positionTime, Status_for_tab status, Int16 speed) { if (status == Status_for_tab.ON) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_aon")) MainForm2.imagesDictionary.Add("l_bullet_aon", global::Dispatcher.Properties.Resources.l_bullet_aon); // return the desired image return MainForm2.imagesDictionary["l_bullet_aon"]; } else if (status == Status_for_tab.OFF) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_aoff")) MainForm2.imagesDictionary.Add("l_bullet_aoff", global::Dispatcher.Properties.Resources.l_bullet_aoff); // return the desired image return MainForm2.imagesDictionary["l_bullet_aoff"]; } else if (status == Status_for_tab.EMERG) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_r")) MainForm2.imagesDictionary.Add("l_bullet_r", global::Dispatcher.Properties.Resources.l_bullet_r); // return the desired image return MainForm2.imagesDictionary["l_bullet_r"]; } else if (status == Status_for_tab.DISABLE) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_d")) MainForm2.imagesDictionary.Add("l_bullet_d", global::Dispatcher.Properties.Resources.l_bullet_d); // return the desired image return MainForm2.imagesDictionary["l_bullet_d"]; } else if (status == Status_for_tab.ENABLE) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_mo")) MainForm2.imagesDictionary.Add("l_bullet_mo", global::Dispatcher.Properties.Resources.l_bullet_mo); // return the desired image return MainForm2.imagesDictionary["l_bullet_mo"]; } else if (status == Status_for_tab.MADEOFF) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_mo")) MainForm2.imagesDictionary.Add("l_bullet_mo", global::Dispatcher.Properties.Resources.l_bullet_mo); // return the desired image return MainForm2.imagesDictionary["l_bullet_mo"]; } else if (status == Status_for_tab.NOGPSFIX) { if (speed > 0) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bulet_ggnf")) MainForm2.imagesDictionary.Add("l_bulet_ggnf", global::Dispatcher.Properties.Resources.l_bulet_ggnf); // return the desired image return MainForm2.imagesDictionary["l_bulet_ggnf"]; } else { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_bgnf")) MainForm2.imagesDictionary.Add("l_bullet_bgnf", global::Dispatcher.Properties.Resources.l_bullet_bgnf); // return the desired image return MainForm2.imagesDictionary["l_bullet_bgnf"]; } } else if (status == Status_for_tab.GPS_POOR) { if (speed > 0) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_ggp")) MainForm2.imagesDictionary.Add("l_bullet_ggp", global::Dispatcher.Properties.Resources.l_bullet_ggp); // return the desired image return MainForm2.imagesDictionary["l_bullet_ggp"]; } else { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_bgp")) MainForm2.imagesDictionary.Add("l_bullet_bgp", global::Dispatcher.Properties.Resources.l_bullet_bgp); // return the desired image return MainForm2.imagesDictionary["l_bullet_bgp"]; } } else if (status == Status_for_tab.GPS_OFF) { if (speed > 0) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_ggo")) MainForm2.imagesDictionary.Add("l_bullet_ggo", global::Dispatcher.Properties.Resources.l_bullet_ggo); // return the desired image return MainForm2.imagesDictionary["l_bullet_ggo"]; } else { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_bgo")) MainForm2.imagesDictionary.Add("l_bullet_bgo", global::Dispatcher.Properties.Resources.l_bullet_bgo); // return the desired image return MainForm2.imagesDictionary["l_bullet_bgo"]; } } else if (status == Status_for_tab.GPS_ON) { if (speed == 0) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_b")) MainForm2.imagesDictionary.Add("l_bullet_b", global::Dispatcher.Properties.Resources.l_bullet_b); // return the desired image return MainForm2.imagesDictionary["l_bullet_b"]; } else { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_g")) MainForm2.imagesDictionary.Add("l_bullet_g", global::Dispatcher.Properties.Resources.l_bullet_g); // return the desired image return MainForm2.imagesDictionary["l_bullet_g"]; } } // return the disabled status // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_bullet_d")) MainForm2.imagesDictionary.Add("l_bullet_d", global::Dispatcher.Properties.Resources.l_bullet_d); // return the desired image return MainForm2.imagesDictionary["l_bullet_d"]; } #region LIVE CELL CLICK public class LiveCellClickEventArgs : EventArgs { public DataforVehList gridData { get; set; } public EventType eventType { get; set; } } private object _lockLiveCellClick = new object(); private event EventHandler _onLiveCell_Click; public event EventHandler OnLiveCell_Click { add { lock (_lockLiveCellClick) { _onLiveCell_Click += value; } } remove { lock (_lockLiveCellClick) { _onLiveCell_Click -= value; } } } #endregion } }