using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using System.Threading; using System.IO; using MapGoogle; using Telerik.WinControls.UI; using Telerik.WinControls; using Telerik.WinControls.UI.Docking; using SafeMobileLib; using Telerik.WinControls.Data; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.EngineCore; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Display; using Dispatcher.maptab.UIClasses; using Dispatcher.Helpers; using System.Drawing.Imaging; namespace Safedispatch_4_0 { /// /// This class implements the live tab. /// /// The live tab contains two areas, left and right. On the left side /// the vehicle selection is made, and on the right side information /// is displayed according to the criteria from the left public partial class LiveTabGIS : UserControl { /// /// The class constructor. /// public bool KillTimerActive = false; private String latname = ""; private String lngname = ""; private String zonename = ""; private String altname = ""; private String milesh, kmh,msg2,s18; public Boolean docLoad = true; private IMapControl3 m_mapControl = null; public IGraphicTracker m_graphicTracker = null; public IGraphicTracker placeSet = null; public static volatile Boolean TableViewDataComplete = true; public static volatile Boolean TableViewSortComplete = true; public static volatile Boolean TableViewFinish = true; public LiveTabGIS(MainForm2 parentParam,String tabNameParam) { parent = parentParam; tabName = tabNameParam; InitializeComponent(); LiveGridColumn ctc = new LiveGridColumn("live"); ctc.AllowResize = true; ctc.AllowGroup = true; ctc.Name = "live"; ctc.FieldName = "live"; ctc.HeaderText = "live"; ctc.AutoSizeMode = BestFitColumnMode.AllCells; ctc.HeaderTextAlignment = ContentAlignment.MiddleLeft; ctc.SortOrder = RadSortOrder.Ascending; this.vehiclesList.TableElement.RowHeight = 55; this.vehiclesList.Columns.Add(ctc); this.vehiclesList.Columns.Move(ctc.Index, 0); this.vehiclesList.GridViewElement.DrawBorder = false; this.vehiclesList.GridViewElement.GroupPanelElement.DrawBorder = false; LiveAddressGridColumn positionCell = new LiveAddressGridColumn("history"); positionCell.AllowResize = true; positionCell.Name = "history"; positionCell.FieldName = "history"; positionCell.HeaderText = "history"; positionCell.AutoSizeMode = BestFitColumnMode.AllCells; positionCell.HeaderTextAlignment = ContentAlignment.MiddleLeft; positionCell.SortOrder = RadSortOrder.Ascending; this.tableVehiclesList.TableElement.RowHeight = 75; this.tableVehiclesList.Columns.Add(positionCell); this.tableVehiclesList.Columns.Move(positionCell.Index, 0); this.tableVehiclesList.GridViewElement.DrawBorder = false; this.tableVehiclesList.GridViewElement.GroupPanelElement.DrawBorder = false; // set the group comparer in order to display the custom groups in // desired order CustomGroupComparer gc = new CustomGroupComparer(); this.vehiclesList.MasterTemplate.GroupComparer = gc; // change the icons for grouping and add them to the hashtable // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_filter_group")) MainForm2.imagesDictionary.Add("l_filter_group", global::Dispatcher.Properties.Resources.l_user_n); // return the desired image pbGroup.Image = MainForm2.imagesDictionary["l_filter_group"]; // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_filter_time")) MainForm2.imagesDictionary.Add("l_filter_time", global::Dispatcher.Properties.Resources.l_history_b); // return the desired image pbGroupTime.Image = MainForm2.imagesDictionary["l_filter_time"]; // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_filter_status")) MainForm2.imagesDictionary.Add("l_filter_status", global::Dispatcher.Properties.Resources.l_bullet_bl); // return the desired image pbGroupStatusType.Image = MainForm2.imagesDictionary["l_filter_status"]; pbFilter_Click(pbGroup, null); if (MainForm2.NOAddress) tableVehiclesList.Columns["address"].IsVisible = false; try { if (MainForm2.is24hours) { if (MainForm2.DayFirst) ((GridViewDateTimeColumn)tableVehiclesList.Columns["datetime"]).FormatString = "{0:dd/MM/yyyy HH:mm:ss}"; else ((GridViewDateTimeColumn)tableVehiclesList.Columns["datetime"]).FormatString = "{0:MM/dd/yyyy HH:mm:ss}"; } else { if (MainForm2.DayFirst) ((GridViewDateTimeColumn)tableVehiclesList.Columns["datetime"]).FormatString = "{0:dd/MM/yyyy hh:mm:ss tt}"; else ((GridViewDateTimeColumn)tableVehiclesList.Columns["datetime"]).FormatString = "{0:MM/dd/yyyy hh:mm:ss tt}"; } } catch (Exception ex) { SM.Debug("Error on gridview DateFormat:" + ex.ToString()); } this.SelectionLive.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(219)))), ((int)(((byte)(255))))); AdjustSizes(); populateVehiclesList(vehicleListNames); //ChangeIcons(vehicleListNames); SelectionLive.Enabled = true; GetPositionForPlace = false; GetPositionForStart = false; GetPositionForZones = false; #region THEMING rlUnits.ForeColor = MainForm2.LabelColor; displayButton.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; pbFilter.Image = Utils.ChangeColor(global::Dispatcher.Properties.Resources.i_search, MainForm2.ButtonColor); #endregion string s1 = MainForm2.returnLNGString("displayButton"), s2 = MainForm2.returnLNGString("cbselAll"), s3 = MainForm2.returnLNGString("selectionExpando"), s4 = MainForm2.returnLNGString("tabPage1"), s5 = MainForm2.returnLNGString("positions"), s6 = MainForm2.returnLNGString("htableVehiclesListColumns1"), s7 = MainForm2.returnLNGString("htableVehiclesListColumns1"), s8 = MainForm2.returnLNGString("alarmsListColumns1"), s9 = MainForm2.returnLNGString("tableVehiclesListColumns2"), s10 = MainForm2.returnLNGString("tablevehiclesListColumns3"), s11 = MainForm2.returnLNGString("tableVehiclesListColumns4"), s12 = MainForm2.returnLNGString("lbGroup"), s13 = MainForm2.returnLNGString("btGetAddress"), s15 = MainForm2.returnLNGString("SMScomp"), s16 = MainForm2.returnLNGString("DI"), s17 = MainForm2.returnLNGString("DO"), s19 = MainForm2.returnLNGString("quickhist"), s20 = MainForm2.returnLNGString("snd"), s21 = MainForm2.returnLNGString("changeDO"); s18 = MainForm2.returnLNGString("allunits"); langProgStat = MainForm2.returnLNGString("txProgStatLive"); latname = MainForm2.returnLNGString("colum2"); lngname = MainForm2.returnLNGString("colum3"); zonename = MainForm2.returnLNGString("zone"); msg2 = MainForm2.returnLNGString("toomany"); ckShowLand.Text = MainForm2.returnLNGString("prevland"); ckShowZone.Text = MainForm2.returnLNGString("prevzone"); altname = MainForm2.returnLNGString("altname"); kmh = MainForm2.returnLNGString("kmh"); milesh = MainForm2.returnLNGString("milesh"); displayButton.Text = s1; sel_desel.Text = s2; windowUnits.Text = s3; toolWindow2.Text = s4; windowPositions.Text = s5; vehiclesList.Columns[2].HeaderText = s6; vehiclesList.Columns[4].HeaderText = MainForm2.returnLNGString("SMSStatus"); tableVehiclesList.Columns[0].HeaderText = s7; tableVehiclesList.Columns[1].HeaderText = s8; tableVehiclesList.Columns[2].HeaderText = s9; if (MainForm2.isInMile) tableVehiclesList.Columns[3].HeaderText = s10 + " ("+milesh+")"; else tableVehiclesList.Columns[3].HeaderText = s10 + " ("+kmh+")"; tableVehiclesList.Columns[4].HeaderText = s11; tableVehiclesList.Columns[5].HeaderText = s16; tableVehiclesList.Columns[6].HeaderText = s17; sendSMSToolStripMenuItem1.Text = s15; sendSMSToolStripMenuItem.Text = s15; basicHistoryToolStripMenuItem.Text = s19; sendPOLLToolStripMenuItem.Text = s20; changeDOStatusToolStripMenuItem.Text = s21; tableVehiclesList.Columns[7].HeaderText = latname; tableVehiclesList.Columns[8].HeaderText = lngname; tableVehiclesList.Columns[9].HeaderText = ""; tableVehiclesList.Columns[10].HeaderText = altname; tableVehiclesList.Refresh(); LiveProgBar.Visible = false; txProgStatus.Visible = false; LivePanel.Visible = false; if (MainForm2.MotoTURBO) { sendPOLLToolStripMenuItem.Visibility = Telerik.WinControls.ElementVisibility.Hidden; changeDOStatusToolStripMenuItem.Visibility = Telerik.WinControls.ElementVisibility.Hidden; } else sendSMSToolStripMenuItem1.Visibility = Telerik.WinControls.ElementVisibility.Hidden; windowPositions.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu; windowPositions.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; windowPositions.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide; windowUnits.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu; windowUnits.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; windowUnits.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide; toolWindow2.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu; toolWindow2.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; ContextMenuService menuService = this.radDock1.GetService(); //menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying; //this disables the context menu menuService.AllowActiveWindowListContextMenu = false; menuService.AllowDocumentContextMenu = false; menuService.AllowToolContextMenu = false; switch (MainForm2.radioType) { case RADIOTYPE.HYT: radDock1.BackColor = MainForm2.HyteraColor; LivePanel.BackColor = MainForm2.HyteraColor; radSplitContainer1.BackColor = MainForm2.HyteraColor; radSplitContainer2.BackColor = MainForm2.HyteraColor; documentTabStrip1.BackColor = MainForm2.HyteraColor; break; case RADIOTYPE.HARRIS: radDock1.BackColor = MainForm2.HarrisColor; LivePanel.BackColor = MainForm2.HarrisColor; radSplitContainer1.BackColor = MainForm2.HarrisColor; radSplitContainer2.BackColor = MainForm2.HarrisColor; documentTabStrip1.BackColor = MainForm2.HarrisColor; break; case RADIOTYPE.ATLAS: radDock1.BackColor = MainForm2.HarrisColor; LivePanel.BackColor = MainForm2.HarrisColor; radSplitContainer1.BackColor = MainForm2.HarrisColor; radSplitContainer2.BackColor = MainForm2.HarrisColor; documentTabStrip1.BackColor = MainForm2.HarrisColor; break; case RADIOTYPE.SIMOCO: case RADIOTYPE.EXCERA: // probably we don't need color break; } rddlGroupingType.Items.Clear(); //RadListDataItem item = new RadListDataItem(MainForm2.returnLNGString("")) { Tag = "categories" }; rddlGroupingType.Items.Add(new RadListDataItem(MainForm2.returnLNGString("liveGroupingCategories")) { Tag = "categories" }); if (MainForm2.HasVoice) rddlGroupingType.Items.Add(new RadListDataItem(MainForm2.returnLNGString("liveGroupingRadioGateway")) { Tag = "radiogateway" }); String currentGroupingType = VisualSettings.GetGroupingTypeInLiveTab(tabName); bool found = false; foreach (RadListDataItem item in rddlGroupingType.Items) { if (currentGroupingType == null) { item.Selected = true; VisualSettings.SetGroupingTypeInLiveTab(item.Tag + "", tabName); break; } else if (item.Tag.ToString().Equals(currentGroupingType)) { item.Selected = true; found = true; } } rddlGroupingType.SelectedIndexChanged += GroupingType_SelectedIndexChanged; if (!found) rddlGroupingType.SelectedIndex = 0; } private void GroupingType_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) { // skip the case when the position is out of bounds if (!(e.Position >= 0 && e.Position < rddlGroupingType.Items.Count)) return; RadListDataItem selectedItem = rddlGroupingType.Items[e.Position]; gridVehicles_SetGrouping(selectedItem.Tag.ToString().Equals("categories") ? GroupType.GROUPNAME : GroupType.RADIOGATEWAY, false); } public void updateGwAndRagioGatewayForSubscriber(String radioID, String gwId, String radioGwId) { //Utils.WriteLine("updateGwAndRagioGatewayForSubscriber " + radioID, ConsoleColor.DarkMagenta); vehiclesList.BeginUpdate(); foreach (DataforVehList item in ListforVehList) { if (item == null) continue; if (item.RadioId.Equals(radioID)) { RadioGateway rg = MainForm2.myGatewaylist.Find(d => (gwId + "." + radioGwId).Equals(d.Gw_id + "." + d.Id)); item.RadioGateway = rg != null ? rg.Name : "unassigned"; item.NrOfUpdates++; } } vehiclesList.EndUpdate(); } public void CheckForUpdate(String unitName) { try { populateTableVehiclesList2(false, unitName); } catch (Exception ex) { SM.Debug("Unable to move unit on tab " + tabName + " ex:" + ex.ToString()); } } /// ///adjust controls sizes private void AdjustSizes() { try { Size size = new Size(); mapControl.Size = size; } catch (Exception ex) { SM.Debug("Error on AdjustSizes:"+ex.ToString()); } } private Hashtable CheckedGroup = new Hashtable(); private volatile Hashtable CheckedGroupTmp = new Hashtable(); /// ///populates the list of vehicles from the left part of the tab /// an array of strings containing the vehicles names public volatile List ListforVehList = new List(); volatile String GroupNameforgrid = ""; volatile Image Imageforgrid = null; volatile String Statusforgrid = ""; volatile Int32 EmergStat = 0; private void populateVehiclesList(ArrayList listOfVehicles) { SM.Debug("Before populate VehicleList"); try { ListforVehList.Clear(); vehiclesList.Columns["unitName"].SortOrder = RadSortOrder.None; int cont = 0; foreach (String obj in MainForm2.vehicleHT.Keys) { GroupNameforgrid = ((Vehicle)MainForm2.vehicleHT[obj]).group.Name; /*MainForm2.returnLNGString("otherunit"); if (MainForm2.GrpIdforScId[((Vehicle)MainForm2.vehicleHT[obj]).sc_id] != null) GroupNameforgrid = ((GroupClass)MainForm2.GrpIdforScId[((Vehicle)MainForm2.vehicleHT[obj]).sc_id]).name; */ Car crtCar = ((Car)MainForm2.carlist[((Vehicle)MainForm2.vehicleHT[obj]).IconID]); if (crtCar == null) { Utils.WriteLine("nullllll", ConsoleColor.Cyan); continue; } String iconPath = crtCar.listFilePath; try { Bitmap bmp = new Bitmap(iconPath); Image tmp2 = Utils.ScaleImage(bmp, 64, 64); //tmp.ToBitmap(); tmp2.Tag = crtCar.listFilePath; // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey(crtCar.listFilePath)) MainForm2.imagesDictionary.Add(crtCar.listFilePath, tmp2); // set the icon for the unit Imageforgrid = MainForm2.imagesDictionary[crtCar.listFilePath]; } catch (Exception) { SM.Debug("Grid icon could not be found [" + iconPath + "]"); Imageforgrid = imageList1.Images[2]; } ///new emergency status EmergStat = 0; if (((Vehicle)MainForm2.vehicleHT[obj]).is_emergency) { EmergStat = 1; ((Vehicle)MainForm2.vehicleHT[obj]).IconName.Replace(".png", "_FF79A6_l.png"); SetSymbol(((Vehicle)MainForm2.vehicleHT[obj])); } // get the Vehicle veh = ((Vehicle)MainForm2.vehicleHT[obj]); Statusforgrid = Vehicle.GetString_Status(veh.actual_status); cont++; RadioGateway rg = MainForm2.myGatewaylist.Find(d => (veh.GwandRadioID).Equals(d.Gw_id + "." + d.Id)); String gatewayName = rg == null ? "unassigned" : rg.Name; // add vehicle with position to the list ListforVehList.Add(new DataforVehList() { RadioId = veh.IMEI, SipId = veh.sipID, GrpName = GroupNameforgrid, Pict = Imageforgrid, UnitName = obj, OnMap = veh.is_displayed, UnitStatus = veh.actual_status, Status = Statusforgrid, Emerg0off1on = EmergStat, IsEmergency = veh.is_emergency, Latitude = veh.LAT, Longitude = veh.LNG, Address = veh.GetLastAddress(), PositionTime = veh.lastActivityTime.ConvertGMTToLocal().GetDTFromSeconds(), //lastValidPositionTime)), Speed = veh.GetSpeed(), IsMPH = MainForm2.isInMile, HasAlerts = false, HasVoice = veh.has_voice, HasText = veh.has_text, Stolen = veh.is_stolen, RadioGateway = gatewayName }); } try { // set data source and refresh it vehiclesList.DataSource = null; vehiclesList.DataSource = ListforVehList; } catch (Exception ex) { SM.Debug("Error on populate grid" + ex.ToString()); } vehiclesList.Columns["unitName"].SortOrder = RadSortOrder.Ascending; vehiclesList.MasterTemplate.GroupDescriptors.Clear(); GroupDescriptor groupDescriptor = new GroupDescriptor(); groupDescriptor.GroupNames.Add(vehiclesList.Columns["GroupName"].Name, ListSortDirection.Ascending); vehiclesList.GroupDescriptors.Add(groupDescriptor); CheckedGroup.Clear(); GridExpandAnimationType temp = vehiclesList.GroupExpandAnimationType; vehiclesList.GroupExpandAnimationType = GridExpandAnimationType.None; for (int i = 0; i < vehiclesList.Groups.Count; i++) { string key = this.tabName + "_" + "ExpandGroupingHT_" + (vehiclesList.Groups[i]).Key; if (MainForm2.HashVal.ContainsKey(key)) { if (Boolean.Parse(MainForm2.HashVal[key] + "")) this.Expand(vehiclesList.Groups[i]); } else { this.Expand(vehiclesList.Groups[i]); } //vehiclesList.Groups[i].HeaderRow CheckedGroup.Add(i, false); } vehiclesList.GroupExpandAnimationType = temp; vehiclesList.TableElement.ScrollToRow(0); } catch (Exception ex) { SM.Debug("ExLive4:" + ex.ToString()); } SM.Debug("Finish populate VehicleList"); } private void Expand(DataGroup group) { try { group.Expand(); if (group.Groups.Count > 0) { for (int i = 0; i < group.Groups.Count; i++) { this.Expand(group.Groups[i]); } } } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); } } volatile Boolean EnableAction = true; volatile List ListforGrid = new List(); public void populateTableVehiclesList2(Boolean Refresh, String unitName) { Int32 oldColomnSort = 0; RadSortOrder oldSortType = RadSortOrder.Ascending; EnableAction = false; try { Vehicle vehicleTemp; if (Refresh) { ListforGrid.Clear(); //aici e combinatia fatala try { for (int i = 0; i < tableVehiclesList.Columns.Count; i++) { if (tableVehiclesList.Columns[i].SortOrder != RadSortOrder.None) { oldColomnSort = i; oldSortType = tableVehiclesList.Columns[i].SortOrder; break; } } } catch (Exception ex) { SM.Debug("Error on finding the sort column:" + ex.ToString()); } tableVehiclesList.Columns["VehName"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["datetime"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["address"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["speed"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["head"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["di"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["do"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["lat"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["lng"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["zone"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["Altitude"].SortOrder = RadSortOrder.None; Thread.Sleep(100); } int countlist = -1; String LatStr = ""; String LngStr = ""; String AltStr = ""; String Zone; Double LatDou, LngDou; if (MainForm2.LatLngUTM.CompareTo("Lat/Lng No.") == 0) { tableVehiclesList.Columns["lat"].HeaderText = latname; tableVehiclesList.Columns["lng"].HeaderText = lngname; tableVehiclesList.Columns["zone"].HeaderText = ""; tableVehiclesList.Columns["Altitude"].HeaderText = altname; } else if (MainForm2.LatLngUTM.CompareTo("Lat/Lng Deg.") == 0) { tableVehiclesList.Columns["lat"].HeaderText = latname; tableVehiclesList.Columns["lng"].HeaderText = lngname; tableVehiclesList.Columns["zone"].HeaderText = ""; tableVehiclesList.Columns["Altitude"].HeaderText = altname; } else if (MainForm2.LatLngUTM.CompareTo("UTM") == 0) { tableVehiclesList.Columns["lat"].HeaderText = "X"; tableVehiclesList.Columns["lng"].HeaderText = "Y"; tableVehiclesList.Columns["zone"].HeaderText = zonename; tableVehiclesList.Columns["Altitude"].HeaderText = altname; } // flag that an update will be made //gridVehicles.TableElement.BeginUpdate(); //ListforGrid.Clear(); for (int contor = 0; contor < vehiclesList.Rows.Count; contor++) { // get current vehicle which is updated vehicleTemp = (Vehicle)MainForm2.vehicleHT[(String)vehiclesList.Rows[contor].Cells["UnitName"].Value]; // get the Data bound item for each grid row DataforVehList gridData = vehiclesList.Rows[contor].DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) { // skip this unit if it doesn't need to be updated if (unitName != null && !gridData.UnitName.Equals(unitName)) ; else { // save previous values string prevStatus = gridData.PreviousStatus; string prevTimeAgo = gridData.PositionTimeAgo; // remove null values to empty ones if (prevStatus == null) prevStatus = ""; if (prevTimeAgo == null) prevTimeAgo = ""; // update all the new fields and values gridData.Address = vehicleTemp.lastAddress; gridData.PositionTime = vehicleTemp.lastValidPositionTime.ConvertGMTToLocal().GetDTFromSeconds(); gridData.Latitude = vehicleTemp.LAT; gridData.Longitude = vehicleTemp.LNG; gridData.Speed = vehicleTemp.GetSpeed(); gridData.UnitStatus = vehicleTemp.actual_status; gridData.Status = Vehicle.GetString_Status(vehicleTemp.actual_status); ; // check to see if the status has changed if (!prevStatus.Equals(gridData.Status)) { Utils.WriteLine("REFRESH GROUPS BY STATUS " + " [" + prevStatus + " -> " + gridData.Status + "]", ConsoleColor.Yellow); // refresh the grid only if the group is STATUS if (groupType == GroupType.STATUS) gridVehicles_SetGrouping(groupType, false); } // check if the position had changed the ago time which needs to be displayed if (!prevTimeAgo.Equals(Utils.GetDateTimeAgo(gridData.PositionTime))) { Utils.WriteLine("REFRESH GROUPS BY TIME", ConsoleColor.Yellow); // notify that an update must be made gridData.NrOfUpdates = gridData.NrOfUpdates + 1; // refresh the grid only if the group is POSITION TIME if (groupType == GroupType.POSITIONTIMEAGO) gridVehicles_SetGrouping(groupType, false); } } } // if the update was as a result of a position received if (unitName != null && gridData.UnitName.Equals(unitName)) // notify that an update must be made gridData.NrOfUpdates = gridData.NrOfUpdates + 1; } } catch (Exception ex) { SM.Debug("EXLive6:" + ex.ToString()); } EnableAction = true; } /// ///Deletes all used resources /// public void Delete() { try { timerAddPlace.Stop(); timerAddPlace.Enabled = false; try { parent.isCanceled[tabName] = false; if (this.app != null) { app.Quit(); app = null; } Thread.Sleep(100); Killtimer.Enabled = true; Killtimer.Start(); //this.mapControl.Dispose(); Killtimer.Stop(); this.mapControl = null; this.Dispose(); GC.Collect(); } catch (Exception ex) { SM.Debug("Exception on close LIVETabGIS " + ex.ToString()); } } catch (Exception ex) { SM.Debug("Error on delete live :"+ex.ToString()); } } public delegate void UpdateVehListInvokeCallBack(String name, Boolean withoutReset); private Object thisLock = new Object(); private void UpdateDataGridUnit(String unitName) { // find the subscriber in the datasource DataforVehList result = ListforVehList.Find(d => d.UnitName.Equals(unitName)); // get current vehicle which is updated Vehicle vehicleTemp = (Vehicle)MainForm2.vehicleHT[unitName]; // update the favorite if found if (result != null) { lock (thisLock) { vehiclesList.BeginEdit(); // save previous values int prevSpeed = result.Speed; string prevStatus = result.PreviousStatus; string prevTimeAgo = result.PositionTimeAgo; // remove null values to empty ones if (prevStatus == null) prevStatus = ""; if (prevTimeAgo == null) prevTimeAgo = ""; // update all the new fields and values result.Address = vehicleTemp.lastAddress; result.PositionTime = vehicleTemp.lastActivityTime.ConvertGMTToLocal().GetDTFromSeconds(); // lastValidPositionTime)); result.Latitude = vehicleTemp.LAT; result.Longitude = vehicleTemp.LNG; result.Speed = vehicleTemp.GetSpeed(); result.UnitStatus = vehicleTemp.actual_status; result.Status = Vehicle.GetString_Status(vehicleTemp.actual_status); result.IsEmergency = vehicleTemp.is_emergency; result.Stolen = vehicleTemp.is_stolen; // check to see if the status has changed if (!prevStatus.Equals(result.Status) || prevSpeed != result.Speed) { //Utils.WriteLine("REFRESH GROUPS BY STATUS " + " [" + prevStatus + " -> " + gridData.Status + "]", ConsoleColor.Yellow); // notify that an update must be made result.NrOfUpdates = result.NrOfUpdates + 1; } // check if the position had changed the ago time which needs to be displayed if (!prevTimeAgo.Equals(Utils.GetDateTimeAgo(result.PositionTime))) { //Utils.WriteLine("REFRESH GROUPS BY TIME", ConsoleColor.Yellow); // notify that an update must be made result.NrOfUpdates = result.NrOfUpdates + 1; } vehiclesList.EndEdit(); // check to see if the status has changed if (!prevStatus.Equals(result.Status)) { // refresh the grid only if the group is STATUS if (groupType == GroupType.STATUS) { vehiclesList.BeginUpdate(); gridVehicles_SetGrouping(groupType, false); vehiclesList.EndUpdate(); } } // check if the position had changed the ago time which needs to be displayed if (!prevTimeAgo.Equals(Utils.GetDateTimeAgo(result.PositionTime))) { // refresh the grid only if the group is POSITION TIME if (groupType == GroupType.POSITIONTIMEAGO) { vehiclesList.BeginUpdate(); gridVehicles_SetGrouping(groupType, false); vehiclesList.EndUpdate(); } } } } } public void SetSymbol(Vehicle veh) { try { IPictureMarkerSymbol bitmapPictureMarkerSymbolCls = new ESRI.ArcGIS.Display.PictureMarkerSymbolClass(); //check if bmp file is saved for emergency string fileNamePattern = veh.IconName.Split('/')[1].Split('.')[0]; string filePath = System.Windows.Forms.Application.StartupPath + @"\resource\cars\" + fileNamePattern + ".png"; Image ArcgisImage = null; veh.IconID = veh.is_emergency ? 10000 + veh.IconID : veh.IconID % 10000; if (!MainForm2.carlist.ContainsKey(veh.IconID)) { MainForm2.carlist.Add(veh.IconID, new Car()); } if (!File.Exists(filePath)) { MainForm2.CheckCreateEmergencyIcon(veh.IconID % 10000); IconHelper.CheckCreateEmergencyIcon(veh.IconID % 10000); } ArcgisImage = Image.FromFile(filePath, true); ArcgisImage.Save(System.Windows.Forms.Application.StartupPath + @"\resource\cars\" + fileNamePattern + ".bmp", ImageFormat.Bmp); bitmapPictureMarkerSymbolCls.CreateMarkerSymbolFromFile(esriIPictureType.esriIPictureBitmap, filePath.Replace("png", "bmp")); bitmapPictureMarkerSymbolCls.Angle = 0;//Minicar RgbColor rgbColor = new ESRI.ArcGIS.Display.RgbColor(); rgbColor.Red = 255; rgbColor.Green = 255; rgbColor.Blue = 255; bitmapPictureMarkerSymbolCls.BitmapTransparencyColor = rgbColor; bitmapPictureMarkerSymbolCls.Size = 24; bitmapPictureMarkerSymbolCls.XOffset = -12; bitmapPictureMarkerSymbolCls.YOffset = -12; ((Car)MainForm2.carlist[veh.IconID]).GISsymb = bitmapPictureMarkerSymbolCls; ((Car)MainForm2.carlist[veh.IconID]).SymbGIS[tabName] = m_graphicTracker?.CreateSymbol(((Car)MainForm2.carlist[veh.IconID]).GISsymb as ISymbol, null); } catch(Exception ex) { Utils.WriteLine(ex.ToString(), ConsoleColor.Red); } } public void onEmergencyStateChangedHandler(Vehicle veh, Boolean isEmergency) { //update status for unit this.Invoke((MethodInvoker)delegate () { veh.actual_status = isEmergency ? Status_for_tab.EMERG : Status_for_tab.MADEON; veh.is_emergency = isEmergency; try { //create bitmap based on png file //set the red icon for unit SetSymbol(veh); if (isEmergency) { ((MapElement)((Vehicle)MainForm2.vehicleHT[veh.busName]).MapsHT[tabName])?.DeactivatePushpin(); // MainForm2.POLLunit = veh.busName; if ((Math.Round(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LAT) != 0) && (Math.Round(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LNG) != 0)) { if (((MapElement)(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).MapsHT[tabName])).isActive) ; else { //vehiclesList.SelectedRows[0].Cells["OnMap"].Value = true; displayButton.PerformClick(); } mapControl.Extent = MainForm2.ZoomTo(veh.LNG, veh.LAT, veh.LNG, veh.LAT); } } } catch (Exception ex) { SM.Debug("Error on CENTER ON MAP " + ex.ToString()); } }); } public void onUnitPositionOrStateChanged(String unitName) { //populateTableVehiclesList2(true, unitName); UpdateDataGridUnit(unitName); // refresh the grid if positions window is active if (positionsWindowIsActive) RefreshPositionsGrid(unitName); } public void RefreshPositionsGrid(string unitName) { for (int contor = 0; contor < tableVehiclesList.Rows.Count; contor++) { // get the Data bound item for each grid row DataforGRID gridData = tableVehiclesList.Rows[contor].DataBoundItem as DataforGRID; // verify if the unit is valid or not if (gridData != null) { if (!unitName.Equals(gridData.VehName)) continue; // get current vehicle which is updated Vehicle vehicleTemp = (Vehicle)MainForm2.vehicleHT[gridData.VehName]; int countlist = -1; String LatStr = ""; String LngStr = ""; String AltStr = ""; String Zone; Double LatDou, LngDou; LatLngUTM tmpLatLng = new LatLngUTM(); Zone = ""; AltStr = Math.Round(vehicleTemp.GetAlt(), 5).ToString(); if (MainForm2.LatLngUTM.CompareTo("Lat/Lng No.") == 0) { LatStr = Math.Round(vehicleTemp.GetLat(), 5).ToString(); LngStr = Math.Round(vehicleTemp.GetLng(), 5).ToString(); } else if (MainForm2.LatLngUTM.CompareTo("Lat/Lng Deg.") == 0) tmpLatLng.LatLongtoDeg(vehicleTemp.GetLat(), vehicleTemp.GetLng(), out LatStr, out LngStr); else if (MainForm2.LatLngUTM.CompareTo("UTM") == 0) { tmpLatLng.LatLongtoUTM(vehicleTemp.GetLat(), vehicleTemp.GetLng(), out LatDou, out LngDou, out Zone); LatStr = LatDou.ToString("###,###,###"); LngStr = LngDou.ToString("###,###,###"); } gridData.Address = vehicleTemp.GetLastAddress(); gridData.Datatime = (vehicleTemp.lastActivityTime).ConvertGMTToLocal().GetDTFromSeconds(); gridData.Speed = Convert.ToString(vehicleTemp.GetSpeed()); gridData.DI = Convert.ToString(vehicleTemp.GetDI()); gridData.DO = Convert.ToString(vehicleTemp.GetDO()); if (!((Math.Round(vehicleTemp.GetLat()) == 0) && (Math.Round(vehicleTemp.GetLng()) == 0))) { gridData.Alt = Convert.ToString(AltStr); gridData.Lat = Convert.ToString(LatStr); gridData.Lng = Convert.ToString(LngStr); gridData.Zone = zonename; gridData.Head = Utils.GetDirection(vehicleTemp.GetHeading()).ToString(); } else { gridData.Alt = gridData.Lat = gridData.Lng = "N/A"; gridData.Zone = ""; gridData.Head = "N/A"; } gridData.NrOfUpdates = gridData.NrOfUpdates + 1; } } //foreach() } public void OnUnitStolenChanged(String unitName, Boolean isStolen) { //UpdateVehList(unitName, true); UpdateDataGridUnit(unitName); } /// ///treats the click on Display Telerik.WinControls.UI.RadButton - centers map on selected vehicles private void displayButton_Click(object sender, EventArgs e) { displayButton.Enabled = false; try { centeredState = false; ComputeCheckedVehicles(true); mapControl.Extent = MainForm2.ZoomTo(LngminCAL, LatminCAL, LngmaxCAL, LatmaxCAL); if (MainForm2.Displaywithname) { //if (docLoad) mapGoogles.Navigate("javascript:void(GWTcallback('" + "putLabels," + vehiclesDataSet.Name + "'))"); HideALLName = true; } else { if (HideALLName) HideALLName = false; } //COMMENT TO BE REMOVED populateTableVehiclesList2(true, volVehName); } catch (Exception ex) { SM.Debug("Error on display Telerik.WinControls.UI.RadButton click" + ex.ToString()); } displayButton.Enabled = true; } public Double LatmaxCAL = -90, LatminCAL = 90, LngmaxCAL = -180, LngminCAL = 180; /// ///only displays on the map the selected vehicles public void ComputeCheckedVehicles(bool displayButtonCase) { this.Invoke((MethodInvoker)delegate () { int cont; Int32 timenowsec = (int)DateTime.Now.GetSecondsLocalFromDT(); try { LatmaxCAL = -90; LatminCAL = 90; LngmaxCAL = -180; LngminCAL = 180; if (displayButtonCase) { foreach (DataforVehList obj2 in (List)vehiclesList.DataSource) { if ((bool)obj2.OnMap) { try { if (!((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).itemCheck) { ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).itemCheck = true; if ((parent.NoteAddr[obj2.UnitName] == null)) parent.NoteAddr.Add(obj2.UnitName, "none"); else parent.NoteAddr[obj2.UnitName] = "none"; //((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).ActivatePushPin(); } if ((Math.Round(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).LAT) != 0) && (Math.Round(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).LNG) != 0) && (Math.Round(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).LAT) != 0.1) && (Math.Round(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).LNG) != 0.1)) { LatmaxCAL = Math.Max(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).lastLocLAT, LatmaxCAL); LatminCAL = Math.Min(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).lastLocLAT, LatminCAL); LngmaxCAL = Math.Max(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).lastLocLNG, LngmaxCAL); LngminCAL = Math.Min(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).lastLocLNG, LngminCAL); } ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).ActivatePushPin(); if (((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).GISID > 0) m_graphicTracker.Highlight(((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).GISID, false); ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).GISSelect = false; if (MainForm2.Displaywithname) ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).Updatelabel(((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).busName, 1); else ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).Updatelabel("", 1); if (MainForm2.HideInactiveUnitsCheck) if (((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).lastActivityTime < (timenowsec - (MainForm2.Livelastmin * 60))) ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).DeactivatePushpin(); } catch (Exception ex) { SM.Debug("Error in compute display not click: " + ex.ToString()); } } else { ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).itemCheck = false; if (((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).GISID != -1) { ((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).DeactivatePushpin(); if (((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).selectCenter) { ((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).selectCenter = false; centeredState = false; } } } if (((MapElement)((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).MapsHT[tabName]).GISID != -1) ((Vehicle)MainForm2.vehicleHT[obj2.UnitName]).selectCenter = false; } } else { for (cont = 0; cont < vehiclesList.Rows.Count; cont++) { if ((bool)vehiclesList.Rows[cont].Cells["OnMap"].Value) { try { ((MapElement)((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.Rows[cont].Cells["UnitName"].Value]).MapsHT[tabName]).ActivatePushPin(); if (MainForm2.HideInactiveUnitsCheck) if (((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.Rows[cont].Cells["UnitName"].Value]).lastActivityTime < (timenowsec - (MainForm2.Livelastmin * 60))) ((MapElement)((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.Rows[cont].Cells["UnitName"].Value]).MapsHT[tabName]).DeactivatePushpin(); } catch (Exception ex) { SM.Debug("Error in compute not Button Click: " + ex.ToString()); } } } } } catch (Exception x) { SM.Debug("Erorr compute checked vehicle " + x.ToString()); } }); } public void ForceUnitState(String Name, Boolean check) { try { vehiclesList.TableElement.BeginUpdate(); foreach (DataforVehList obj2 in (List)vehiclesList.DataSource) { if (obj2.UnitName.CompareTo(Name) == 0) { obj2.OnMap = check; break; } } vehiclesList.TableElement.EndUpdate(false); vehiclesList.TableElement.Update(GridUINotifyAction.DataChanged); vehiclesList.Refresh(); } catch (Exception x) { SM.Debug("Erorr on ForceUnitState: " + x.ToString()); } } /// ///Catches the event when ///the user inputs/deletes a character in/from the search box, ///and the vehicles list is refreshed accordingly private void searchTextBox_TextChanged(object sender, EventArgs e) { try { //RefreshVehiclesList(); FilterGridVehicles(searchTextBox.Text); } catch (Exception x) { SM.Debug("Erorr on searchTextBox_TextChanged: " + x.ToString()); } } private void Killtimer_Tick(object sender, EventArgs e) { if (MainForm2.ClosingApp) KillTimerActive = true; } private void sendPOLLToolStripMenuItem_Click(object sender, EventArgs e) { try { smdbObj.Send_cmd_to_val(false, ((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value]).IMEI, ""); } catch (Exception ex) { SM.Debug("Cann't send POLL cmd" + ex.ToString()); } } private void sel_desel_ToggleStateChanged(object sender, StateChangedEventArgs args) { seldeselALL(sel_desel.Checked); } public void seldeselALL(bool state) { for (int i = 0; i < vehiclesList.Groups.Count; i++) { //GridViewRowInfo groupHeaderRow = gridVehicles.Groups[i].GroupRow; GroupCheckBox_StateChanged(null, new GRPEventArgs(i, state)); //gridVehicles.Groups[i].GroupRow.ViewInfo.ChildRows DataGroup dg = (vehiclesList.Groups[i]) as DataGroup; //dg.GroupRow. } } private void vehiclesList_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e) { try { if (e.ContextMenuProvider is GridHeaderCellElement) { // e.ContextMenu = columnHeaderMenu; } else if (e.ContextMenuProvider is GridDataCellElement || e.ContextMenuProvider is LiveGridCellElement) { GridViewRowInfo row = (e.ContextMenuProvider is LiveGridCellElement ? ((LiveGridCellElement)e.ContextMenuProvider).RowInfo as GridViewDataRowInfo : ((GridDataCellElement)e.ContextMenuProvider).RowInfo); RadDropDownMenu TelemMenu = new RadDropDownMenu(); if ((!MainForm2.LimitedUser) && (MainForm2.radioType != RADIOTYPE.ATLAS) && (MainForm2.radioType != RADIOTYPE.TETRA) && (MainForm2.radioType != RADIOTYPE.CONECTPLUS) && (MainForm2.radioType != RADIOTYPE.SIMOCO) && (MainForm2.radioType != RADIOTYPE.EXCERA)) { if (!((Vehicle)MainForm2.vehicleHT[(String)row.Cells["UnitName"].Value]).canMakeSipCalls) { RadMenuItem tmpItem2 = new RadMenuItem(MainForm2.returnLNGString("enRadio")); tmpItem2.Image = Dispatcher.Properties.Resources.l_menu_enable; tmpItem2.Click += new EventHandler(SendRadioEnable_Click); TelemMenu.Items.Add(tmpItem2); RadMenuItem tmpItem3 = new RadMenuItem(MainForm2.returnLNGString("disRadio")); tmpItem3.Image = Dispatcher.Properties.Resources.l_menu_disable; tmpItem3.Click += new EventHandler(SendRadioDisable_Click); TelemMenu.Items.Add(tmpItem3); } } if (docLoad) { if ((MainForm2.radioType != RADIOTYPE.EXCERA)) { RadMenuItem tmpItem4 = new RadMenuItem(MainForm2.returnLNGString("poll")); tmpItem4.Image = Dispatcher.Properties.Resources.l_menu_poll; tmpItem4.Click += new EventHandler(SendPOLL_Click); TelemMenu.Items.Add(tmpItem4); } } if ((MainForm2.radioType == RADIOTYPE.HYT) || (MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.SIMOCO) || (MainForm2.radioType == RADIOTYPE.EXCERA)) { RadMenuItem tmpItem6 = new RadMenuItem(MainForm2.returnLNGString("radcheck")); tmpItem6.Click += new EventHandler(SendPOLLARS_Click); TelemMenu.Items.Add(tmpItem6); } RadMenuItem tmpItem5 = null; //markasstolen if ((!MainForm2.LimitedUser) && (MainForm2.radioType != RADIOTYPE.ATLAS) && (MainForm2.radioType != RADIOTYPE.TETRA) && (MainForm2.radioType != RADIOTYPE.CONECTPLUS) && (MainForm2.radioType != RADIOTYPE.SIMOCO) && (MainForm2.radioType != RADIOTYPE.EXCERA)) { if (!((Vehicle)MainForm2.vehicleHT[(String)row.Cells["UnitName"].Value]).is_stolen) { tmpItem5 = new RadMenuItem(MainForm2.returnLNGString("markasstolen")); tmpItem5.Image = Dispatcher.Properties.Resources.l_menu_stolen; tmpItem5.Click += new EventHandler(SendStolen_Click); TelemMenu.Items.Add(tmpItem5); } else { tmpItem5 = new RadMenuItem(MainForm2.returnLNGString("unmarkasstolen")); tmpItem5.Image = Dispatcher.Properties.Resources.l_menu_unstolen; tmpItem5.Click += new EventHandler(SendUNStolen_Click); TelemMenu.Items.Add(tmpItem5); } } RadMenuItem tmpItem7 = null; int sc_id = (((Vehicle)MainForm2.vehicleHT[(String)row.Cells["UnitName"].Value])).sc_id; DBalarmManager dbalm = new DBalarmManager(MainForm2.cfg.DB_IP, MainForm2.cfg.DB_schema, MainForm2.cfg.DB_user, MainForm2.cfg.DB_passwd, MainForm2.cfg.DB_port); int alarmsCounter = dbalm.Get_nonACK_alarms(sc_id).Count; if (alarmsCounter > 0) { tmpItem7 = new RadMenuItem(MainForm2.returnLNGString("alarmALLACK")); tmpItem7.Click += new EventHandler(AckAlarmForUnit_Click); TelemMenu.Items.Add(tmpItem7); } TelemMenu.Items.Add(new RadMenuSeparatorItem() { BackColor = MainForm2.ButtonColor, Padding = new Padding(0, 8, 0, 0) }); string unitName = (String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value; string groupName = (((Vehicle)MainForm2.vehicleHT[unitName])).group.Name; RadMenuItem tmpItemDisplay = new RadMenuItem(String.Format(MainForm2.returnLNGString("displayGroup"), groupName)); tmpItemDisplay.Tag = groupName; tmpItemDisplay.Image = Dispatcher.Properties.Resources.l_menu_display; tmpItemDisplay.Click += new EventHandler(delegate (object s, EventArgs e2) { String group_name = ((RadMenuItem)s).Tag.ToString(); GroupCheckBox_StateChanged(group_name,true); }); TelemMenu.Items.Add(tmpItemDisplay); RadMenuItem tmpItemHide = new RadMenuItem(String.Format(MainForm2.returnLNGString("hideGroup"), groupName)); tmpItemHide.Tag = groupName; tmpItemHide.Image = Dispatcher.Properties.Resources.l_menu_hide; tmpItemHide.Click += new EventHandler(delegate (object s, EventArgs e2) { String group_name = ((RadMenuItem)s).Tag.ToString(); GroupCheckBox_StateChanged(group_name, false); }); TelemMenu.Items.Add(tmpItemHide); if (MainForm2.GroupHash.Count > 0) { TelemMenu.Items.Add(new RadMenuSeparatorItem() { BackColor = MainForm2.ButtonColor, Padding = new Padding(0, 8, 0, 0) }); RadMenuItem tmpShowAll = new RadMenuItem(String.Format(MainForm2.returnLNGString("displayAllUnits"), groupName)); tmpShowAll.Image = Dispatcher.Properties.Resources.l_menu_display_all; tmpShowAll.Click += new EventHandler(delegate (object s, EventArgs e2) { seldeselALL(true); }); TelemMenu.Items.Add(tmpShowAll); RadMenuItem tmpHideAll = new RadMenuItem(String.Format(MainForm2.returnLNGString("hideAllUnits"), groupName)); tmpHideAll.Tag = groupName; tmpHideAll.Image = Dispatcher.Properties.Resources.l_menu_hide_all; tmpHideAll.Click += new EventHandler(delegate (object s, EventArgs e2) { seldeselALL(false); }); TelemMenu.Items.Add(tmpHideAll); } e.ContextMenu = TelemMenu; } } catch (Exception ex) { SM.Debug("EXLive10:" + ex.ToString()); } } void AckAlarmForUnit_Click(object sender, EventArgs e) { try { //AlarmTypes type = (((Vehicle)MainForm2.vehicleHT[(String)gridVehicles.SelectedRows[0].Cells["UnitName"].Value])).EventLists.Contains; //AlarmTypes type = AlarmTypes.emergency; string unitName = (String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value; int sc_id = (((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value])).sc_id; DBalarmManager dbalm = new DBalarmManager(MainForm2.cfg.DB_IP, MainForm2.cfg.DB_schema, MainForm2.cfg.DB_user, MainForm2.cfg.DB_passwd, MainForm2.cfg.DB_port); bool hasEmergencyActivated = dbalm.hasEmergencyActivated(sc_id); dbalm.ACKALLalarms(sc_id, MainForm2.userIDX); if (hasEmergencyActivated) { ((Vehicle)MainForm2.vehicleHT[unitName]).is_emergency = false; String Totrans = "#153#" + ((Vehicle)MainForm2.vehicleHT[unitName]).IMEI + "#" + (Int32)Status_for_tab.ON + "#"; parent.Send_UDP_cmd(Totrans, 0, 0); Utils.WriteLine("Sending ALARM ACK to " + unitName); //update GwandRadioID for current vehicle if is 0.0 ((Vehicle)MainForm2.vehicleHT[unitName]).CheckPositionInSystem(); Totrans = "#238#" + ((Vehicle)MainForm2.vehicleHT[unitName]).GwandRadioID + "." + ((Vehicle)MainForm2.vehicleHT[unitName]).IMEI + "#"; parent.Send_UDP_cmd(Totrans, 0, 0); Thread.Sleep(100); MainForm2.UpdateStatusLive(unitName); } String Totrans2 = "#238#" + ((Vehicle)MainForm2.vehicleHT[unitName]).GwandRadioID + "." + ((Vehicle)MainForm2.vehicleHT[unitName]).IMEI + "#" + (int)AlarmTypes.unknown; parent.Send_UDP_cmd(Totrans2, 0, 0); //NEED TO DO SAME STUFF FROM PUT EMERGENCY IN RED foreach (String name in ((Vehicle)MainForm2.vehicleHT[unitName]).MapsHT.Keys) { ((Vehicle)MainForm2.vehicleHT[unitName]).is_emergency = false; ((MapElement)((Vehicle)MainForm2.vehicleHT[unitName]).MapsHT[name]).UpdateSymbol(); MainForm2.RemoveIconsFromMap(); } Thread.Sleep(100); MainForm2.UpdateStatusLive(unitName); } catch (Exception ex) { SM.Debug("EX:" + ex.ToString()); } try { this.parent.AlarmTracking_Click(null, null); ((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value]).EventLists = new ArrayList(); } catch (Exception ex) { SM.Debug("EX:" + ex.ToString()); } } void SendRadioEnable_Click(object sender, EventArgs e) { try { parent.Send_EnableOrDisable((String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value,CMDTYPE.EnableCMD); } catch (Exception ex) { SM.Debug("Error on SendRadioEnable_Click " + ex.ToString()); } } void SendRadioDisable_Click(object sender, EventArgs e) { try { parent.Send_EnableOrDisable((String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value, CMDTYPE.DisableCMD); } catch (Exception ex) { SM.Debug("Error on SendRadioDisable_Click " + ex.ToString()); } } void SendStolen_Click(object sender, EventArgs e) { try { parent.Send_EnableOrDisable((String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value, CMDTYPE.StolenONCMD); } catch (Exception ex) { SM.Debug("Error on SendStolen_Click " + ex.ToString()); } } void SendUNStolen_Click(object sender, EventArgs e) { try { parent.Send_EnableOrDisable((String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value, CMDTYPE.StolenOFFCMD); } catch (Exception ex) { SM.Debug("Error on SendUNStolen_Click " + ex.ToString()); } } void SendPOLLARS_Click(object sender, EventArgs e) { try { parent.Send_EnableOrDisable((String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value, CMDTYPE.POLLARSCMD); } catch (Exception ex) { SM.Debug("Error on SendPOLLARS_Click " + ex.ToString()); } } void SendPOLL_Click(object sender, EventArgs e) { try { // 2 -- POLL UNIT parent.Send_EnableOrDisable((String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value, CMDTYPE.POLLGPSCMD); MainForm2.POLLunit = (String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value; if ((Math.Round(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LAT) != 0) && (Math.Round(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LNG) != 0)) { if (((MapElement)(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).MapsHT[tabName])).isActive) ; else { vehiclesList.SelectedRows[0].Cells["OnMap"].Value = true; displayButton.PerformClick(); } mapControl.Extent = MainForm2.ZoomTo(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LNG, ((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LAT, ((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LNG, ((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LAT); } } catch (Exception ex) { SM.Debug("Error on SendPOLL_Click " + ex.ToString()); } } private void vehiclesList_CellDoubleClick(object sender, GridViewCellEventArgs e) { GridViewDataRowInfo row = e.Row as GridViewDataRowInfo; if (row != null) { DataforVehList gridData = row.DataBoundItem as DataforVehList; if (gridData != null) { //gridVehicles.BeginUpdate(); // change the state of displayed/not Displayed on the map gridData.OnMap = !gridData.OnMap; //gridVehicles.EndUpdate(true); //gridVehicles.TableElement.Update(GridUINotifyAction.DataChanged); displayButton.PerformClick(); // notify that an update must be made gridData.NrOfUpdates = gridData.NrOfUpdates + 1; } } } private void ckShowLand_ToggleStateChanged(object sender, StateChangedEventArgs args) { try { if (ckShowLand.Checked) placeSymb = new PlaceSymbolsGIS(placeSet, tabName); MainForm2.simpleTextSymbol.YOffset = 20; Int32 Idgen = 0; if (loadfinish) placeSet.RemoveAll(); if (ckShowLand.Checked) { try { ArrayList tmp = smdbObj.get_all_places_GIS(""); foreach (Place obj in tmp) { IPoint point = new ESRI.ArcGIS.Geometry.Point(); point.PutCoords(obj.lng, obj.lat); point.SpatialReference = MainForm2.CreateGeoCoordSys(); Idgen = placeSet.Add(point as IGeometry, ((IGraphicTrackerSymbol)((Place)MainForm2.PlaceTypesGIS[obj.type + obj.color + obj.iconSize]).SymbGIS[tabName])); MainForm2.simpleTextSymbol.YOffset = 20; placeSet.SetTextSymbol(Idgen, MainForm2.simpleTextSymbol); placeSet.SetLabel(Idgen, obj.name + "\n" + obj.desc); } } catch (Exception ex) { SM.Debug("Error on put place on live:" + ex.ToString()); } } } catch (Exception ex) { SM.Debug("Error on ckShowLand_ToggleStateChanged:" + ex.ToString()); } } ArrayList ElementsZone = new ArrayList(); private void ckShowZone_ToggleStateChanged(object sender, StateChangedEventArgs args) { try { if (ckShowZone.Checked) ForceShowZone(); else ForceHideZone(); } catch (Exception ex) { SM.Debug("Error on ckShowZone_ToggleStateChanged:" + ex.ToString()); } } public void ForceShowZone() { try { object Missing = Type.Missing; IElement element = null; Boolean First = true; Int32 pas = -1; Double LatMN = 0, LatMX = 0, LngMN = 0, LngMX = 0; Boolean first = true; Double latfirst = 0, lngfirst = 0; int cont = 0; Boolean retur = false; ElementsZone.Clear(); foreach (Int32 obj3 in MainForm2.ZoneIDHash.Keys) { IPolyline newPath = new PolylineClass(); IPointCollection newPointCollection = newPath as IPointCollection; ZoneClass obj2 = (ZoneClass)MainForm2.ZoneIDHash[obj3]; pas++; first = true; foreach (PointonZone obj in obj2.arrSc_id) { if (First) { LatMN = obj.lat; LatMX = obj.lat; LngMN = obj.lng; LngMX = obj.lng; First = false; } if (first) { latfirst = obj.lat; lngfirst = obj.lng; first = false; } LatMN = System.Math.Min(obj.lat - 0.000, LatMN); LatMX = System.Math.Max(LatMX, obj.lat + 0.000); LngMN = System.Math.Min(obj.lng - 0.000, LngMN); LngMX = System.Math.Max(LngMX, obj.lng + 0.000); //datasetCMD = datasetCMD + MainForm2.FixDouble(obj.lat.ToString()) + "," + MainForm2.FixDouble(obj.lng.ToString()) + ","; ESRI.ArcGIS.Geometry.IPoint fromPoint = new ESRI.ArcGIS.Geometry.PointClass(); fromPoint.PutCoords(obj.lng, obj.lat); fromPoint.SpatialReference = MainForm2.CreateGeoCoordSys(); newPointCollection.AddPoint(fromPoint, ref Missing, ref Missing); cont++; } if (cont > 2) { ESRI.ArcGIS.Geometry.IPoint fromPoint = new ESRI.ArcGIS.Geometry.PointClass(); fromPoint.PutCoords(lngfirst, latfirst); fromPoint.SpatialReference = MainForm2.CreateGeoCoordSys(); newPointCollection.AddPoint(fromPoint, ref Missing, ref Missing); Color colorOK = (new GetColorID()).getColorid(obj2.color); ESRI.ArcGIS.Display.IColor color = new RgbColorClass() { Red = colorOK.R, Green = colorOK.G, Blue = colorOK.B }; // Implicit Cast ESRI.ArcGIS.Display.ISimpleLineSymbol simpleLineSymbol = new ESRI.ArcGIS.Display.SimpleLineSymbolClass(); simpleLineSymbol.Color = color; simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid; simpleLineSymbol.Width = 3; ILineElement lineElement = new LineElementClass(); lineElement.Symbol = simpleLineSymbol; element = (IElement)lineElement; // Explicit Cast element.Geometry = (IPolyline)newPointCollection; IGraphicsContainer graphicsContainer = (IGraphicsContainer)mapControl.ActiveView; graphicsContainer.AddElement(element, 0); ElementsZone.Add(element); } retur = true; } if (retur) { try { mapControl.Extent = MainForm2.ZoomTo(LngMN, LatMN, LngMX, LatMX); } catch (Exception ex) { SM.Debug("Error zone preview:" + ex.ToString()); } } } catch (Exception ex) { SM.Debug("Error on ForceShowZone:" + ex.ToString()); } } public void ForceHideZone() { try { IGraphicsContainer graphicsContainer = (IGraphicsContainer)mapControl.ActiveView; foreach (IElement obj in ElementsZone) graphicsContainer.DeleteElement(obj); mapControl.ActiveView.Refresh(); } catch (Exception ex) { SM.Debug("Unable to remove zones from map " + ex.ToString()); } } private void vehiclesList_GroupSummaryEvaluate(object sender, GroupSummaryEvaluationEventArgs e) { try { string suff = String.Concat(" (", e.Group.ItemCount.ToString(), ")"); e.Group.Header = e.Group.Key + ""; if (e.FormatString.Contains(":")) { //e.FormatString = e.FormatString.Replace("GroupName:", ""); e.FormatString = e.Group.Key + " " + e.FormatString.Replace("{0}:", ""); } if (!e.FormatString.EndsWith(suff)) { e.FormatString = String.Concat(e.FormatString, suff); } } catch (Exception ex) { SM.Debug("Erorr on GroupSummaryEvaluate" + ex.ToString()); } } Boolean loadfinish = false; private void LiveTabGIS_Load(object sender, EventArgs e) { try { if (mapControl.CheckMxFile(MainForm2.ArcGisFileName)) mapControl.LoadMxFile(MainForm2.ArcGisFileName); mapControl.SpatialReference = MainForm2.CreateGeoCoordSys(); //Get the MapControl m_mapControl = (IMapControl3)mapControl.Object; m_graphicTracker = new GraphicTrackerClass(); m_graphicTracker.Initialize(m_mapControl.Map as IBasicMap); placeSet = new GraphicTrackerClass(); placeSet.Initialize(m_mapControl.Map as IBasicMap); loadfinish = true; displayButton.Enabled = true; busSymb = new BusSymbolsGIS(m_graphicTracker, tabName); //placeSymb = new PlaceSymbolsGIS(placeSet, tabName); try { foreach (String obj in MainForm2.vehicleHT.Keys) ((Vehicle)MainForm2.vehicleHT[obj]).AddNewLiveGIS(tabName, m_graphicTracker, busSymb, mapControl); } catch (Exception ex) { SM.Debug("Error on init vehicle on new live tab:" + ex.Message); } ToolControl.AddItem(new SelectGT(m_graphicTracker, tabName)); } catch (Exception ex) { SM.Debug("Erorr on LiveTabGIS_Load:" + ex.ToString()); } } private void StartOver500msec_Tick(object sender, EventArgs e) { try { //Load a pre-authored map document into the PageLayoutControl using relative paths. //string fileName = @"E:\Cape Girardeau\GIS data\workspace.mxd"; } catch (Exception ex) { SM.Debug("Erorr on StartOver500msec_Tick:" + ex.ToString()); } } /// /// Set the type of data which will be displayed inside the grid /// private void vehiclesList_CreateCell(object sender, GridViewCreateCellEventArgs e) { // format live column if (e.Row is GridDataRowElement) { // increase row height //e.Row.RowInfo.Height = 53; if (e.Column.Name.Equals("live")) { e.CellType = typeof(LiveGridColumn); e.CellElement = new LiveGridCellElement(e.Column, e.Row); } if (e.Column is GridViewIndentColumn) { } } } private System.Threading.Timer timerCheck = null; private void vehiclesList_CellClick(object sender, GridViewCellEventArgs e) { if (e.ColumnIndex == 3) { SM.Debug("Fire the timer"); if (timerCheck != null) timerCheck.Dispose(); timerCheck = new System.Threading.Timer(VerifyChecks, null, 2000, 2000); } } //timer de verificat checkuri private void VerifyChecks(object state) { try { this.Invoke(new CheckOnInvokeCallBack(CheckOnInvoke2)); } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); } } private void CheckOnInvoke2() { try { Boolean someCheck = false; vehiclesList.TableElement.BeginUpdate(); vehiclesList.TableElement.EndUpdate(false); vehiclesList.TableElement.Update(GridUINotifyAction.DataChanged); vehiclesList.Refresh(); String selectedValue = ""; try { selectedValue = (String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value; } catch { selectedValue = " "; } SM.Debug("Verify Check"); CheckedGroupTmp.Clear(); foreach (DataforVehList obj2 in (List)vehiclesList.DataSource) { if ((obj2.OnMap) && (obj2.UnitName.CompareTo(selectedValue) != 0)) { someCheck = true; if (CheckedGroupTmp[obj2.GrpName] == null) CheckedGroupTmp.Add(obj2.GrpName, true); } } for (int i = 0; i < vehiclesList.Groups.Count; i++) if ((Boolean)CheckedGroup[i]) { if (CheckedGroupTmp[vehiclesList.Groups[i].Header] == null) { int j = -1; foreach (GridViewRowInfo row in this.vehiclesList.ChildRows) { j++; GridViewGroupRowInfo groupRow = row as GridViewGroupRowInfo; if ((groupRow != null) && (j == i)) { groupRow.Tag = false; CheckedGroup[i] = false; break; } } } } if ((sel_desel.Checked) && (!someCheck)) { SM.Debug("Select all false"); sel_desel.Checked = false; } if (timerCheck != null) timerCheck.Dispose(); } catch (Exception ex) { SM.Debug("Error backtop play" + ex.ToString()); } } public delegate void CheckOnInvokeCallBack(); private Font normalFont = new Font(new FontFamily("Segoe UI"), 8.0F, FontStyle.Regular); private Font boldFont = new Font(new FontFamily("Segoe UI"), 8.0F, FontStyle.Bold); public static GroupType groupType = GroupType.GROUPNAME; public static ListSortDirection sortDirection = ListSortDirection.Ascending; /// /// Event Handler for when a filter picture box is clicked /// This should group the grid based on it's status /// private void pbFilter_Click(object sender, EventArgs e) { // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey("l_filter_status_g")) MainForm2.imagesDictionary.Add("l_filter_status_g", Utils.MakeGrayscale3(global::Dispatcher.Properties.Resources.l_bullet_bl, 0.5f)); if (!MainForm2.imagesDictionary.ContainsKey("l_filter_time_g")) MainForm2.imagesDictionary.Add("l_filter_time_g", Utils.MakeGrayscale3(global::Dispatcher.Properties.Resources.l_history_b, 0.5f)); if (!MainForm2.imagesDictionary.ContainsKey("l_filter_group_g")) MainForm2.imagesDictionary.Add("l_filter_group_g", Utils.MakeGrayscale3(global::Dispatcher.Properties.Resources.l_user_n, 0.5f)); pbGroupTime.Image = MainForm2.imagesDictionary["l_filter_time_g"]; pbGroupStatusType.Image = MainForm2.imagesDictionary["l_filter_status_g"]; pbGroup.Image = MainForm2.imagesDictionary["l_filter_group_g"]; if ((PictureBox)sender == pbGroupTime) { if (!MainForm2.imagesDictionary.ContainsKey("l_filter_time")) MainForm2.imagesDictionary.Add("l_filter_time", global::Dispatcher.Properties.Resources.l_history_b); pbGroupTime.Image = MainForm2.imagesDictionary["l_filter_time"]; groupType = GroupType.POSITIONTIMEAGO; } else if ((PictureBox)sender == pbGroupStatusType) { if (!MainForm2.imagesDictionary.ContainsKey("l_filter_status")) MainForm2.imagesDictionary.Add("l_filter_status", global::Dispatcher.Properties.Resources.l_bullet_bl); pbGroupStatusType.Image = MainForm2.imagesDictionary["l_filter_status"]; groupType = GroupType.STATUS; } else if ((PictureBox)sender == pbGroup) { if (!MainForm2.imagesDictionary.ContainsKey("l_filter_group")) MainForm2.imagesDictionary.Add("l_filter_group", global::Dispatcher.Properties.Resources.l_user_n); pbGroup.Image = MainForm2.imagesDictionary["l_filter_group"]; groupType = GroupType.GROUPNAME; } // group the vehicles gridVehicles_SetGrouping(groupType, true); } /// /// Change the group type of the grid and mention if the reordering should be /// made or not /// /// Sorting type which corresponds to the column /// private void gridVehicles_SetGrouping(GroupType type, bool changeOrder) { string filterName = "GroupName"; if (type == GroupType.GROUPNAME) filterName = "GroupName"; else if (type == GroupType.POSITIONTIMEAGO) filterName = "PositionTimeAgo"; else if (type == GroupType.STATUS) filterName = "Status"; else if (type == GroupType.RADIOGATEWAY) filterName = "RadioGateway"; if (changeOrder) { // reverse the sorting order if (vehiclesList.GroupDescriptors.Count > 0 && vehiclesList.GroupDescriptors[0].Expression.Contains(filterName)) { GroupDescriptor gd = vehiclesList.GroupDescriptors[0]; sortDirection = gd.Expression.Contains("ASC") ? ListSortDirection.Descending : ListSortDirection.Ascending; } else if (type == GroupType.POSITIONTIMEAGO) { // time ago should start as descending sortDirection = ListSortDirection.Descending; } } // clear previous filters and add the new one vehiclesList.GroupDescriptors.Clear(); GroupDescriptor groupDescriptor = new GroupDescriptor(new SortDescriptor[] { new SortDescriptor(filterName, sortDirection) }); vehiclesList.GroupDescriptors.Add(groupDescriptor); int i = 0; CheckedGroup.Clear(); foreach (GridViewRowInfo groupRow in vehiclesList.ChildRows) { // the group has items if (groupRow.ChildRows.Count > 0) { // group name is groupRow.Group.Header bool areAllChecked = true; foreach (GridViewRowInfo gridRow in groupRow.ChildRows) { // get the Data bound item for each grid row DataforVehList gridData = gridRow.DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) { if (!gridData.OnMap) areAllChecked = false; } } CheckedGroup.Add(i++, areAllChecked); groupRow.IsExpanded = true; if (groupRow != null && areAllChecked) groupRow.Tag = true; } } } private void GroupCheckBox_StateChanged(string groupname, bool stat) { try { int nrstartPerf = 0; bool StartPerf = false; centeredState = false; //SM.Debug("Send command to google"); //gridVehicles.TableElement.BeginUpdate(); //timerBegin = new System.Threading.Timer(MakeUpdateToListBegin, null, 300, System.Threading.Timeout.Infinite); for (int contor = 0; contor < vehiclesList.Rows.Count; contor++) { // get current vehicle which is updated Vehicle vehicleTemp = (Vehicle)MainForm2.vehicleHT[(String)vehiclesList.Rows[contor].Cells["UnitName"].Value]; // get the Data bound item for each grid row DataforVehList gridData = vehiclesList.Rows[contor].DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) { bool isInThisGroup = false; if (groupType == GroupType.STATUS && gridData.Status.Equals(groupname)) { //Utils.WriteLine("THIS UNIT " + gridData.UnitName + " IS IN THIS GROUP " + vehiclesList.Groups[e.idx].Header, ConsoleColor.Red); isInThisGroup = true; } else if (groupType == GroupType.GROUPNAME && gridData.GrpName.Equals(groupname)) { //Utils.WriteLine("THIS UNIT " + gridData.UnitName + " IS IN THIS GROUP " + vehiclesList.Groups[e.idx].Header, ConsoleColor.Yellow); isInThisGroup = true; } else if (groupType == GroupType.POSITIONTIMEAGO && gridData.PositionTimeAgo.Equals(groupname)) { //Utils.WriteLine("THIS UNIT " + gridData.UnitName + " IS IN THIS GROUP " + vehiclesList.Groups[e.idx].Header, ConsoleColor.Cyan); isInThisGroup = true; } // make modifications only if the unit is in the group if (isInThisGroup) { if (!gridData.OnMap && stat) { nrstartPerf++; gridData.OnMap = true; // notify that an update must be made gridData.NrOfUpdates = gridData.NrOfUpdates + 1; ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).ActivatePushPin(); } else if (!stat && gridData.OnMap) { gridData.OnMap = false; // notify that an update must be made gridData.NrOfUpdates = gridData.NrOfUpdates + 1; if (((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).pp != null) { ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).pp.Highlight = false; ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).pp.BalloonState = GeoBalloonStatex.geoDisplayNone; ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).DeactivatePushpin(); if (((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).selectCenter) { ((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).selectCenter = false; centeredState = false; } } } } } // if group is selected if (stat) { if (StartPerf) { txProgStatus.Clear(); Console.WriteLine("Panel visibil false 3"); LivePanel.Visible = false; txProgStatus.Visible = false; Cursor = Cursors.Arrow; //mapControl.MousePointer = GeoPointerx.geoPointerDefault; } } //gridVehicles.TableElement.EndUpdate(false); //gridVehicles.TableElement.Update(GridUINotifyAction.DataChanged); displayButton.PerformClick(); } } catch (Exception ex) { SM.Debug("Error on select ALL: " + ex.ToString()); } } /// /// Event handler for when the groupBox checkbox changes its state /// private void GroupCheckBox_StateChanged(object sender, GRPEventArgs e) { try { int nrstartPerf = 0; bool StartPerf = false; centeredState = false; SM.Debug("Enter on custom cell customCell_MeCheckChanged with e.idx:" + e.idx); if (e.stat != (Boolean)CheckedGroup[e.idx]) { CheckedGroup[e.idx] = e.stat; //SM.Debug("Send command to google"); //gridVehicles.TableElement.BeginUpdate(); //timerBegin = new System.Threading.Timer(MakeUpdateToListBegin, null, 300, System.Threading.Timeout.Infinite); for (int contor = 0; contor < vehiclesList.Rows.Count; contor++) { // get current vehicle which is updated Vehicle vehicleTemp = (Vehicle)MainForm2.vehicleHT[(String)vehiclesList.Rows[contor].Cells["UnitName"].Value]; // get the Data bound item for each grid row DataforVehList gridData = vehiclesList.Rows[contor].DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) { bool isInThisGroup = false; if (groupType == GroupType.STATUS && gridData.Status.Equals(vehiclesList.Groups[e.idx].Header)) { //Utils.WriteLine("THIS UNIT " + gridData.UnitName + " IS IN THIS GROUP " + vehiclesList.Groups[e.idx].Header, ConsoleColor.Red); isInThisGroup = true; } else if (groupType == GroupType.GROUPNAME && gridData.GrpName.Equals(vehiclesList.Groups[e.idx].Header)) { //Utils.WriteLine("THIS UNIT " + gridData.UnitName + " IS IN THIS GROUP " + vehiclesList.Groups[e.idx].Header, ConsoleColor.Yellow); isInThisGroup = true; } else if (groupType == GroupType.POSITIONTIMEAGO && gridData.PositionTimeAgo.Equals(vehiclesList.Groups[e.idx].Header)) { //Utils.WriteLine("THIS UNIT " + gridData.UnitName + " IS IN THIS GROUP " + vehiclesList.Groups[e.idx].Header, ConsoleColor.Cyan); isInThisGroup = true; } // make modifications only if the unit is in the group if (isInThisGroup) { if (!gridData.OnMap && e.stat) { nrstartPerf++; gridData.OnMap = true; // notify that an update must be made gridData.NrOfUpdates = gridData.NrOfUpdates + 1; ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).ActivatePushPin(); } else if (!e.stat && gridData.OnMap) { gridData.OnMap = false; // notify that an update must be made gridData.NrOfUpdates = gridData.NrOfUpdates + 1; if (((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).pp != null) { ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).pp.Highlight = false; ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).pp.BalloonState = GeoBalloonStatex.geoDisplayNone; ((MapElement)((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).MapsHT[tabName]).DeactivatePushpin(); if (((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).selectCenter) { ((Vehicle)MainForm2.vehicleHT[gridData.UnitName]).selectCenter = false; centeredState = false; } } } } } } // if group is selected if (e.stat) { if (StartPerf) { txProgStatus.Clear(); Console.WriteLine("Panel visibil false 3"); LivePanel.Visible = false; txProgStatus.Visible = false; Cursor = Cursors.Arrow; //mapControl.MousePointer = GeoPointerx.geoPointerDefault; } } //gridVehicles.TableElement.EndUpdate(false); //gridVehicles.TableElement.Update(GridUINotifyAction.DataChanged); displayButton.PerformClick(); } } catch (Exception ex) { SM.Debug("Error on select ALL: " + ex.ToString()); } } private void vehiclesList_CustomGrouping(object sender, GridViewCustomGroupingEventArgs e) { string colName = vehiclesList.GroupDescriptors[e.Level].GroupNames[0].PropertyName; if (colName == "PositionTimeAgo") { // get the Data bound item for each grid row if (e.Row.DataBoundItem != null && e.Row.DataBoundItem is DataforVehList) { DataforVehList gridData = e.Row.DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) e.GroupKey = gridData.PositionTimeAgo; //new DateTime(gridData.PositionTime.Year, gridData.PositionTime.Month, gridData.PositionTime.Day); } } else if (colName == "Status") { // get the Data bound item for each grid row if (e.Row.DataBoundItem != null && e.Row.DataBoundItem is DataforVehList) { DataforVehList gridData = e.Row.DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) e.GroupKey = gridData.Status; } } else if (colName == "GroupName") { // get the Data bound item for each grid row if (e.Row.DataBoundItem != null && e.Row.DataBoundItem is DataforVehList) { DataforVehList gridData = e.Row.DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) e.GroupKey = gridData.GrpName; } } else if (colName == "RadioGateway") { // get the Data bound item for each grid row if (e.Row.DataBoundItem != null && e.Row.DataBoundItem is DataforVehList) { DataforVehList gridData = e.Row.DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) e.GroupKey = gridData.RadioGateway; } } } /// /// Filter the vehicles grid based on a string patter /// /// Filter for vehicle name private void FilterGridVehicles(string vehicleName) { try { for (int i = 0; i < vehiclesList.Rows.Count; i++) { // get the Data bound item for each grid row DataforVehList gridData = vehiclesList.Rows[i].DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null && gridData.UnitName.ToUpper().Contains(vehicleName.ToUpper())) vehiclesList.Rows[i].IsVisible = true; else vehiclesList.Rows[i].IsVisible = false; } } catch (Exception ex) { SM.Debug("ExLive8:" + ex.ToString()); } } private void vehiclesList_ViewCellFormatting_1(object sender, CellFormattingEventArgs e) { if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) { if (e.CellElement is GridGroupContentCellElement) { e.CellElement.ForeColor = MainForm2.HarTextColor; } else { e.CellElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local); } } if (e.CellElement.RowIndex >= 0) { //SM.Debug("VALUE OF THE BOX" + Convert.ToInt32(vehiclesList.Rows[e.CellElement.RowIndex].Cells[5].Value)); //if (Convert.ToInt32(vehiclesList.Rows[e.CellElement.RowIndex].Cells[5].Value) == 1) if (Convert.ToInt32(e.Row.Cells["Emerg0off1on"].Value) == 1) { e.CellElement.ForeColor = Color.Red; e.CellElement.Font = boldFont; } else { e.CellElement.ForeColor = Color.Black; e.CellElement.Font = normalFont; } } } /// /// Open a popup window which will desplay the desired info /// /// /// private void openPopupWindow(string unitName, EventType popupType) { try { if (MainForm2.PopupOpen[((Vehicle)MainForm2.vehicleHT[unitName]).IMEI] == null) { ((Vehicle)MainForm2.vehicleHT[unitName]).CheckPositionInSystem(); FastCommandWindow frmPop = new FastCommandWindow(unitName, ((Vehicle)MainForm2.vehicleHT[unitName]).IMEI, parent, popupType, smdbObj.get_all_DefSMS()) { has_text = ((Vehicle)MainForm2.vehicleHT[unitName]).has_text, has_voice = ((Vehicle)MainForm2.vehicleHT[unitName]).has_voice }; if (MainForm2.HasVoice) { if (parent.VoiceFirstTime) parent.First_time_start_radio(); frmPop.gwandradID = ((Vehicle)MainForm2.vehicleHT[unitName]).GwandRadioID; frmPop.checkStatus(); } else frmPop.DisablePTT(); frmPop.Show(); MainForm2.PopupOpen.Add(((Vehicle)MainForm2.vehicleHT[unitName]).IMEI, frmPop); } else { // the tab is already opened so it needs to change the tab FastCommandWindow frmPop = (FastCommandWindow)MainForm2.PopupOpen[((Vehicle)MainForm2.vehicleHT[unitName]).IMEI]; frmPop.SelectTab(popupType); frmPop.Activate(); } } catch (Exception ex) { SM.Debug("Cann't show new PopupWindow form" + ex.ToString()); } } private void vehiclesList_CellFormatting(object sender, CellFormattingEventArgs e) { GridCellElement cellElement = e.CellElement; GridViewDataColumn columnInfo = e.CellElement.ColumnInfo as GridViewDataColumn; // set padding and force the content adding if (cellElement is LiveGridCellElement && columnInfo.Name == "live") { cellElement.Padding = new Padding(0, 0, 0, 0); //cellElement.SetContent(); // add click listener only if not added before if ((cellElement.Tag != null && !cellElement.Tag.Equals("done")) || cellElement.Tag == null) { ((LiveGridCellElement)cellElement).OnLiveCell_Click += delegate(object s, LiveGridCellElement.LiveCellClickEventArgs ea) { Utils.WriteLine("CLICKED " + ea.gridData.UnitName + " | " + ea.eventType, ConsoleColor.Red); switch (ea.eventType) { // update the units which are displayed on the map case EventType.DISPLAY: displayButton.PerformClick(); break; case EventType.ALERT: { openPopupWindow(ea.gridData.UnitName, EventType.ALERT); break; } case EventType.TEXT: { openPopupWindow(ea.gridData.UnitName, EventType.TEXT); break; } case EventType.VOICE: { openPopupWindow(ea.gridData.UnitName, EventType.VOICE); break; } case EventType.CENTER: { // todo try { MainForm2.POLLunit = (String)vehiclesList.SelectedRows[0].Cells["UnitName"].Value; if ((Math.Round(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LAT) != 0) && (Math.Round(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).LNG) != 0)) { if (((MapElement)(((Vehicle)MainForm2.vehicleHT[MainForm2.POLLunit]).MapsHT[tabName])).isActive) ; else { vehiclesList.SelectedRows[0].Cells["OnMap"].Value = true; displayButton.PerformClick(); } mapControl.Extent = MainForm2.ZoomTo(ea.gridData.Longitude, ea.gridData.Latitude, ea.gridData.Longitude, ea.gridData.Latitude); } } catch (Exception ex) { SM.Debug("Error on CENTER ON MAP " + ex.ToString()); } break; } } }; } cellElement.Tag = "done"; } } private bool positionsWindowIsActive = false; /// /// Refresh the positions list only when the Window is entered /// private void windowPositions_Enter(object sender, EventArgs e) { positionsWindowIsActive = true; // get the address based on the positionss displayButton.PerformClick(); RefreshPositionsGrid(); } /// /// Refresh the grid of positions /// public void RefreshPositionsGrid() { Int32 oldColomnSort = 0; RadSortOrder oldSortType = RadSortOrder.Ascending; EnableAction = false; Vehicle vehicleTemp; ListforGrid.Clear(); //aici e combinatia fatala try { for (int i = 0; i < tableVehiclesList.Columns.Count; i++) { if (tableVehiclesList.Columns[i].SortOrder != RadSortOrder.None) { oldColomnSort = i; oldSortType = tableVehiclesList.Columns[i].SortOrder; break; } } } catch (Exception ex) { SM.Debug("Error on finding the sort column:" + ex.ToString()); } tableVehiclesList.Columns["VehName"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["datetime"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["address"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["speed"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["head"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["di"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["do"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["lat"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["lng"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["zone"].SortOrder = RadSortOrder.None; tableVehiclesList.Columns["Altitude"].SortOrder = RadSortOrder.None; Thread.Sleep(100); int countlist = -1; String LatStr = ""; String LngStr = ""; String AltStr = ""; String Zone; Double LatDou, LngDou; // flag that an update will be made //gridVehicles.TableElement.BeginUpdate(); //ListforGrid.Clear(); for (int contor = 0; contor < vehiclesList.Rows.Count; contor++) { // get current vehicle which is updated vehicleTemp = (Vehicle)MainForm2.vehicleHT[(String)vehiclesList.Rows[contor].Cells["UnitName"].Value]; // get the Data bound item for each grid row DataforVehList gridData = vehiclesList.Rows[contor].DataBoundItem as DataforVehList; // verify if the unit is valid or not if (gridData != null) { // skip this unit if it doesn't need to be updated if (gridData.OnMap) { LatLngUTM tmpLatLng = new LatLngUTM(); Zone = ""; AltStr = Math.Round(vehicleTemp.GetAlt(), 5).ToString(); if (MainForm2.LatLngUTM.CompareTo("Lat/Lng No.") == 0) { LatStr = Math.Round(vehicleTemp.GetLat(), 5).ToString(); LngStr = Math.Round(vehicleTemp.GetLng(), 5).ToString(); } else if (MainForm2.LatLngUTM.CompareTo("Lat/Lng Deg.") == 0) tmpLatLng.LatLongtoDeg(vehicleTemp.GetLat(), vehicleTemp.GetLng(), out LatStr, out LngStr); else if (MainForm2.LatLngUTM.CompareTo("UTM") == 0) { tmpLatLng.LatLongtoUTM(vehicleTemp.GetLat(), vehicleTemp.GetLng(), out LatDou, out LngDou, out Zone); LatStr = LatDou.ToString("###,###,###"); LngStr = LngDou.ToString("###,###,###"); } // update all the new fields and values if (!((Math.Round(vehicleTemp.GetLat()) == 0) && (Math.Round(vehicleTemp.GetLng()) == 0))) ListforGrid.Add(new DataforGRID(countlist.ToString(), vehicleTemp.busName, vehicleTemp.lastActivityTime.ConvertGMTToLocal().GetDTFromSeconds(), vehicleTemp.GetLastAddress(), Convert.ToString(vehicleTemp.GetSpeed()), Utils.GetDirection(vehicleTemp.GetHeading()).ToString(), Convert.ToString(vehicleTemp.GetDI()), Convert.ToString(vehicleTemp.GetDO()), Convert.ToString(LatStr), Convert.ToString(LngStr), Zone, Convert.ToString(AltStr))); else ListforGrid.Add(new DataforGRID(countlist.ToString(), vehicleTemp.busName, vehicleTemp.lastActivityTime.ConvertGMTToLocal().GetDTFromSeconds(), "N/A", Convert.ToString(vehicleTemp.GetSpeed()), "N/A", Convert.ToString(vehicleTemp.GetDI()), Convert.ToString(vehicleTemp.GetDO()), "N/A", "N/A", "", "N/A")); } } } TableViewSortComplete = false; TableViewDataComplete = false; try { tableVehiclesList.DataSource = null; tableVehiclesList.DataSource = ListforGrid; } catch (Exception ex) { SM.Debug("Error on populate grid" + ex.ToString()); } tableVehiclesList.Columns[oldColomnSort].SortOrder = oldSortType; tableVehiclesList.TableElement.ScrollToRow(0); tableVehiclesList.Refresh(); } #region CHANGE TABS BACKGROUND private DockWindow oldDockWindow = null; private void radDock1_ActiveWindowChanging(object sender, DockWindowCancelEventArgs e) { // reset the background icon for the previous tab e.OldWindow.TabStripItem.BackColor = Color.White; e.OldWindow.TabStripItem.DrawFill = true; e.OldWindow.TabStripItem.NumberOfColors = 1; // reset the background for the new window e.NewWindow.TabStripItem.DrawFill = true; e.NewWindow.TabStripItem.NumberOfColors = 1; e.NewWindow.TabStripItem.BackColor = MainForm2.TabSelectedColor; // save old dock window oldDockWindow = e.OldWindow; } private void radDock1_ActiveWindowChanged(object sender, DockWindowEventArgs e) { // reset the background icon for the previous tab oldDockWindow.TabStripItem.BackColor = Color.White; oldDockWindow.TabStripItem.DrawFill = true; oldDockWindow.TabStripItem.NumberOfColors = 1; e.DockWindow.TabStripItem.DrawFill = true; e.DockWindow.TabStripItem.NumberOfColors = 1; e.DockWindow.TabStripItem.BackColor = MainForm2.TabSelectedColor; } #endregion /// /// Event handler for when the left tab panel needs to be docked/transfor in floating state. /// This will cancel this event in order to prevent the stupid case with hiding the dock window /// private void radDock1_DockStateChanging(object sender, DockStateChangingEventArgs e) { e.Cancel = true; } } }