using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using System.Threading; using Microsoft.Win32; using System.Resources; using System.IO; using Telerik.WinControls.UI; using Telerik.WinControls; using Telerik.WinControls.UI.Docking; using SafeMobileLib; using Dispatcher.maptab; namespace Safedispatch_4_0 { public partial class TelemTab : UserControl { public enum TelemCommands { SET = 0, CLEAR = 1, TOGGLE = 2, PULSE = 3 }; public bool KillTimerActive = false; private String milesh, kmh; public Boolean docLoad = false; private Boolean PingGoogle = false; private Int32 loadcnt = 0; public String updatecomand; public String getADDRcomand; public String lasttime; private String selectName = ""; public static volatile Boolean StreetViewOpened = false; private void setLanguage() { langProgStat = MainForm2.returnLNGString("txProgStatLive"); kmh = MainForm2.returnLNGString("kmh"); milesh = MainForm2.returnLNGString("milesh"); toolWindow2.Text = MainForm2.returnLNGString("tabPage1"); toolWindow3.Text = MainForm2.returnLNGString("tabPage2"); vehiclesList.Columns[2].HeaderText = MainForm2.returnLNGString("htableVehiclesListColumns1"); lasttime = MainForm2.returnLNGString("lbLastTime"); lbStatus1.Text = MainForm2.returnLNGString("SMSStatus"); lbStatus2.Text = MainForm2.returnLNGString("SMSStatus"); lbStatus3.Text = MainForm2.returnLNGString("SMSStatus"); lbStatus4.Text = MainForm2.returnLNGString("SMSStatus"); lbStatus5.Text = MainForm2.returnLNGString("SMSStatus"); btSend1.Text = MainForm2.returnLNGString("send"); btSend2.Text = MainForm2.returnLNGString("send"); btSend3.Text = MainForm2.returnLNGString("send"); btSend4.Text = MainForm2.returnLNGString("send"); btSend5.Text = MainForm2.returnLNGString("send"); documentWindow1.Text = MainForm2.returnLNGString("telemetryStatus"); } public TelemTab(MainForm2 parentParam) { DateTime FirstTime; parent = parentParam; InitializeComponent(); // set height for the grid items this.vehiclesList.TableElement.RowHeight = 45; this.vehiclesList.GridViewElement.DrawBorder = false; this.vehiclesList.GridViewElement.GroupPanelElement.DrawBorder = false; String safemobileDirPath = System.Windows.Forms.Application.StartupPath.Replace('\\', '/').Replace(" ", "%20"); safemobileDirPath = safemobileDirPath.Replace("#", "%23"); mapGoogles = new CefSharpChromiumWebBrowser("file:///" + safemobileDirPath + "/resource/" + MainForm2.MapHtmlName); mapGoogles.OnWebPageLoaded += delegate() { bool isClassicIcons = (Safedispatch_4_0.MainForm2.iconThemeType == IconTheme.CLASSIC ? true : false); try { mapGoogles.ExecuteScript(string.Format("window.GWTcallback('showconsole,{0}');", MainForm2.MapDebugConsole)); //FORKITT mapGoogles.ExecuteScript("window.GWTcallback('setLegacyIcons," + (isClassicIcons ? "true" : "false") + "');"); mapGoogles.ExecuteScript("window.GWTcallback('centerzoom," + MainForm2.FixDoubleLAT(Safedispatch_4_0.MainForm2.LatStart.ToString()) + "," + MainForm2.FixDoubleLAT(Safedispatch_4_0.MainForm2.LngStart.ToString()) + "," + Safedispatch_4_0.MainForm2.ZoomStart + "');"); // open bubble for selected row once the map is loaded this.Invoke(new MethodInvoker(delegate() { vehiclesList.CurrentRow = vehiclesList.Rows[0]; vehiclesList.CurrentColumn = vehiclesList.Columns["UnitName"]; // use the selected row if (vehiclesList.SelectedRows.Count > 0) vehiclesList_CellDoubleClick(vehiclesList, new GridViewCellEventArgs(vehiclesList.SelectedRows[0], null, null)); else if (vehiclesList.RowCount > 0) { // select first row vehiclesList.Rows[0].IsSelected = true; vehiclesList_CellDoubleClick(vehiclesList, new GridViewCellEventArgs(vehiclesList.SelectedRows[0], null, null)); } })); } catch (Exception ex) { Utils.WriteLine("Error on loadPage telemtry Ex:"+ex.ToString(),ConsoleColor.Red); } }; mapGoogles.OnBrowserURLChanged += delegate(String currentURL) { }; mapGoogles.OnURLResponseReceived += delegate(String urlResponse) { try { this.Invoke(new ProcessResponseFromMapInvokeCallBack(this.ProcessResponseFromMap), urlResponse); } catch (Exception ex) { Utils.WriteLine("Error on Response telemtry Ex:" + ex.ToString(), ConsoleColor.Red); } }; LiveMapPanel.Controls.Add(mapGoogles); //mapGoogles.AllowFileAccessFromFileURLs = true; //this.SelectionLive.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(219)))), ((int)(((byte)(255))))); //ThemeResolutionService.ApplyThemeToControlTree(this, "ControlDefault"); FirstTime = DateTime.Now; setLanguage(); //vehiclesList.TableElement.RowHeight = 32; StartGoogleMap.Enabled = true; StartGoogleMap.Start(); populateVehiclesList(vehicleListNames); //update data try { if (vehiclesList.SelectedRows[0].Cells["UnitName"].Value != null) { selectName = vehiclesList.SelectedRows[0].Cells["UnitName"].Value.ToString(); foreach (TelemetryObj temobj in ((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells["UnitName"].Value.ToString()]).telemList) { ChangePreview(temobj, (Bitmap)vehiclesList.SelectedRows[0].Cells[temobj.DigitalNr + 2].Value); } /* if (((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells[2].Value.ToString()]).telemPos != null) lbLastUpdate.Text = lasttime + ": " + convDT.GetDTFromSeconds(convDT.ConvertGMTToLocal(((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells[2].Value.ToString()]).telemPos.TimeGMT));*/ } else selectName = ""; } catch (Exception ex) { SM.Debug("Unable to change telemetry " + ex.ToString()); } MainForm2.RestartMEM += 40000000; cbType1.SelectedIndex = 0; cbType2.SelectedIndex = 0; cbType3.SelectedIndex = 0; cbType4.SelectedIndex = 0; cbType5.SelectedIndex = 0; GetPositionForPlace = false; GetPositionForStart = false; GetPositionForZones = false; toolWindow2.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu; toolWindow2.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; toolWindow3.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu; toolWindow3.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; toolWindow3.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide; ContextMenuService menuService = this.radDock1.GetService(); menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying; //this disables the context menu menuService.AllowActiveWindowListContextMenu = false; menuService.AllowDocumentContextMenu = false; menuService.AllowToolContextMenu = false; ContextMenu cm = new System.Windows.Forms.ContextMenu(); cm.Popup += delegate(object sender, EventArgs e) { // select the cell in the grid in order for the telerik context menu // to activate the required options if (cm.SourceControl == splitPanel2) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi1"]; else if (cm.SourceControl == splitPanel3) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi2"]; else if (cm.SourceControl == splitPanel4) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi3"]; else if (cm.SourceControl == splitPanel5) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi4"]; else if (cm.SourceControl == splitPanel6) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi5"]; this.vehiclesList.ContextMenuManager.ShowContextMenu(this.vehiclesList.CurrentCell); }; // assign a context menu to the split panels // this context menu is necessary because the split panels allows only microsoft context // and in this way I intercept the right click and the display the context menu // that telerik provided splitPanel2.ContextMenu = cm; splitPanel3.ContextMenu = cm; splitPanel4.ContextMenu = cm; splitPanel5.ContextMenu = cm; splitPanel6.ContextMenu = cm; } private void menuService_ContextMenuDisplaying(object sender, ContextMenuDisplayingEventArgs e) { if (e.MenuType == ContextMenuType.DockWindow && e.DockWindow.DockTabStrip is DocumentTabStrip) { for (int i = 0; i < e.MenuItems.Count; i++) { RadMenuItemBase menuItem = e.MenuItems[i]; if (menuItem.Name == "CloseWindow" || menuItem.Name == "CloseAllButThis" || menuItem.Name == "CloseAll" || menuItem.Name == "Floating" || menuItem.Name == "Docked" || menuItem.Name == "Hidden" || menuItem is RadMenuSeparatorItem) { menuItem.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } } } } /// ///populates the list of vehicles from the left part of the tab /// an array of strings containing the vehicles names public volatile List ListforTelemList = new List(); volatile String GroupNameforgrid = ""; volatile Image Imageforgrid = null; volatile String Statusforgrid = ""; volatile List ListImg = new List(); private void populateVehiclesList(ArrayList listOfVehicles) { vehiclesList.Columns[2].SortOrder = RadSortOrder.None; int cont = 0; ListforTelemList.Clear(); foreach(String obj in MainForm2.vehicleHT.Keys) { GroupNameforgrid = 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]); String iconPath = crtCar.listFilePath; try { Bitmap bmp = new Bitmap(iconPath); Image tmp2 = bmp; //tmp.ToBitmap(); Imageforgrid = tmp2; } catch (Exception ex) { SM.Debug("Grid icon could not be found [" + iconPath + "]"); Imageforgrid = imageList1.Images[2]; } ListImg.Clear(); for (int i=0;i<5;i++) ListImg.Add(global::Dispatcher.Properties.Resources.te_in_d); if ((((Vehicle)MainForm2.vehicleHT[obj]).telemList.Count != 0)) { foreach (TelemetryObj temobj in ((Vehicle)MainForm2.vehicleHT[obj]).telemList) { // set icon for no valid info in case of a out pin if (!temobj.DigitalType.Equals("IN")) ListImg[temobj.DigitalNr - 1] = global::Dispatcher.Properties.Resources.te_out_d; Byte digit = (Byte)Math.Pow(2, temobj.DigitalNr - 1); // if old value exists for this unit if ((((Vehicle)MainForm2.vehicleHT[obj]).telemPos != null)) { // if the pin value is on if ((((Byte)((Vehicle)MainForm2.vehicleHT[obj]).telemPos.ByteValue) & digit) > 0) { // set icon for in pin ListImg[temobj.DigitalNr - 1] = global::Dispatcher.Properties.Resources.te_in_g; // set icon for out pin if (!temobj.DigitalType.Equals("IN")) ListImg[temobj.DigitalNr - 1] = global::Dispatcher.Properties.Resources.te_out_g;//vehiclesList.Rows[cont].Cells[temobj.DigitalNr + 2].Value = global::Dispatcher.Properties.Resources.green_status; } // if pin vlaue is off else { // set icon for in pin ListImg[temobj.DigitalNr - 1] = global::Dispatcher.Properties.Resources.te_in_r; // set icon for out pin if (!temobj.DigitalType.Equals("IN")) ListImg[temobj.DigitalNr - 1] = global::Dispatcher.Properties.Resources.te_out_r; } } } } cont++; ListforTelemList.Add(new DataforTelemList(GroupNameforgrid, Imageforgrid, obj, ListImg[0], ListImg[1], ListImg[2], ListImg[3], ListImg[4])); } try { vehiclesList.DataSource = null; vehiclesList.DataSource = ListforTelemList; } catch (Exception ex) { SM.Debug("Error on populate grid" + ex.ToString()); } vehiclesList.Columns[2].SortOrder = RadSortOrder.Ascending; //grouping stuff vehiclesList.GroupDescriptors.Clear(); GridGroupByExpression expression = new GridGroupByExpression(); expression.Expression = "GroupName as GroupName format \"{0}: {1}\" Group By GroupName"; vehiclesList.GroupDescriptors.Add(expression); // vehiclesList.MasterGridViewTemplate.GroupDescriptors.Insert(0, new Telerik.WinControls.Data.GroupDescriptor("GroupName as GroupName format \"{0}: {1}\" Group By GroupName")); GridExpandAnimationType temp = vehiclesList.GroupExpandAnimationType; vehiclesList.GroupExpandAnimationType = GridExpandAnimationType.None; for (int i = 0; i < vehiclesList.Groups.Count; i++) this.Expand(vehiclesList.Groups[i]); vehiclesList.GroupExpandAnimationType = temp; //if (vehiclesList.RowCount > 0) // vehiclesList.Rows[0].IsSelected = true; //vehiclesList.Refresh(); } public void updateName(String Name) { Boolean change = false; try { foreach (GridViewRowInfo obj in vehiclesList.Rows) if (obj.Cells[2].Value.ToString() == Name) { if ((((Vehicle)MainForm2.vehicleHT[Name]).telemList.Count != 0) && (((Vehicle)MainForm2.vehicleHT[Name]).telemPos != null)) { foreach (TelemetryObj temobj in ((Vehicle)MainForm2.vehicleHT[Name]).telemList) { Byte digit = (Byte)Math.Pow(2, temobj.DigitalNr - 1); Bitmap tmpImg = global::Dispatcher.Properties.Resources.te_in_r; if (!temobj.DigitalType.Equals("IN")) tmpImg = global::Dispatcher.Properties.Resources.te_out_r; if ((((Byte)((Vehicle)MainForm2.vehicleHT[Name]).telemPos.ByteValue) & digit) > 0) { tmpImg = global::Dispatcher.Properties.Resources.te_in_g; if (!temobj.DigitalType.Equals("IN")) tmpImg = global::Dispatcher.Properties.Resources.te_out_g; } obj.Cells[temobj.DigitalNr + 2].Value = tmpImg; change = true; if (selectName == Name) { ChangePreview(temobj, tmpImg); //lbLastUpdate.Text = lasttime + ": " + convDT.GetDTFromSeconds(convDT.ConvertGMTToLocal(((Vehicle)MainForm2.vehicleHT[Name]).telemPos.TimeGMT)); } } } break; } if (change) vehiclesList.Refresh(); } catch (Exception ex) { SM.Debug("Erorr on UpdateName:"+ex.ToString()); } } private void Expand(DataGroup group) { group.Expand(); if (group.Groups.Count > 0) { for (int i = 0; i < group.Groups.Count; i++) { this.Expand(group.Groups[i]); } } } private void Killtimer_Tick(object sender, EventArgs e) { if (MainForm2.ClosingApp) { SM.Debug("Worker Live:Telem FINISHED from timer"); SM.Debug("RELEASE SEMAFOR TAB LIVE: Telem"); KillTimerActive = true; } } void SendTelem_Click(object sender, EventArgs e) { foreach(TelemetryObj obj in ((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.SelectedRows[0].Cells[2].Value]).telemList) if (obj.Name == ((RadMenuItem)sender).Text) { String Totrans = "#106#"+((Vehicle)MainForm2.vehicleHT[(String)vehiclesList.SelectedRows[0].Cells[2].Value]).sc_id+"#"+ obj.DigitalNr+"#"; parent.Send_UDP_cmd(Totrans, 10000,0); break; } } private void vehiclesList_SelectionChanged(object sender, EventArgs e) { if (vehiclesList.SelectedRows.Count > 0) { lbName1.Text = "Unknown1"; lbName2.Text = "Unknown2"; lbName3.Text = "Unknown3"; lbName4.Text = "Unknown4"; lbName5.Text = "Unknown5"; panStat1.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat2.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat3.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat4.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat5.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; btSend1.Visible = true; cbType1.Visible = true; btSend2.Visible = true; cbType2.Visible = true; btSend3.Visible = true; cbType3.Visible = true; btSend4.Visible = true; cbType4.Visible = true; btSend5.Visible = true; cbType5.Visible = true; btSend1.Enabled = false; cbType1.Enabled = false; btSend2.Enabled = false; cbType2.Enabled = false; btSend3.Enabled = false; cbType3.Enabled = false; btSend4.Enabled = false; cbType4.Enabled = false; btSend5.Enabled = false; cbType5.Enabled = false; try { if (vehiclesList.SelectedRows[0].Cells[2].Value != null) { selectName = vehiclesList.SelectedRows[0].Cells[2].Value.ToString(); foreach (TelemetryObj temobj in ((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells[2].Value.ToString()]).telemList) { ChangePreview(temobj, (Bitmap)vehiclesList.SelectedRows[0].Cells[temobj.DigitalNr + 2].Value); } } else selectName = ""; } catch (Exception ex) { SM.Debug("Unable to change telemetry " + ex.ToString()); } } } private void ChangePreview(TelemetryObj temobj,Bitmap tmpImg) { switch (temobj.DigitalNr) { case 1: lbName1.Text = temobj.Name; panStat1.BackgroundImage = tmpImg; if (temobj.DigitalType == "IN") { btSend1.Visible = false; cbType1.Visible = false; } else { btSend1.Enabled = true; cbType1.Enabled = true; } break; case 2: lbName2.Text = temobj.Name; panStat2.BackgroundImage = tmpImg; if (temobj.DigitalType == "IN") { btSend2.Visible = false; cbType2.Visible = false; } else { btSend2.Enabled = true; cbType2.Enabled = true; } break; case 3: lbName3.Text = temobj.Name; panStat3.BackgroundImage = tmpImg; if (temobj.DigitalType == "IN") { btSend3.Visible = false; cbType3.Visible = false; } else { btSend3.Enabled = true; cbType3.Enabled = true; } break; case 4: lbName4.Text = temobj.Name; panStat4.BackgroundImage = tmpImg; if (temobj.DigitalType == "IN") { btSend4.Visible = false; cbType4.Visible = false; } else { btSend4.Enabled = true; cbType4.Enabled = true; } break; case 5: lbName5.Text = temobj.Name; panStat5.BackgroundImage = tmpImg; if (temobj.DigitalType == "IN") { btSend5.Visible = false; cbType5.Visible = false; } else { btSend5.Enabled = true; cbType5.Enabled = true; } break; } } private void btSend1_Click(object sender, EventArgs e) { parent.Send_telem_digit((String)vehiclesList.SelectedRows[0].Cells[2].Value, 1, cbType1.SelectedIndex); } private void btSend2_Click(object sender, EventArgs e) { parent.Send_telem_digit((String)vehiclesList.SelectedRows[0].Cells[2].Value, 2, cbType2.SelectedIndex); } private void btSend3_Click(object sender, EventArgs e) { parent.Send_telem_digit((String)vehiclesList.SelectedRows[0].Cells[2].Value, 3, cbType3.SelectedIndex); } private void btSend4_Click(object sender, EventArgs e) { parent.Send_telem_digit((String)vehiclesList.SelectedRows[0].Cells[2].Value, 4, cbType4.SelectedIndex); } private void btSend5_Click(object sender, EventArgs e) { parent.Send_telem_digit((String)vehiclesList.SelectedRows[0].Cells[2].Value, 5, cbType5.SelectedIndex); } private void btRefresh_Click(object sender, EventArgs e) { if (selectName != "") parent.Send_telem_digit(selectName,10,0); } private void vehiclesList_GroupSummaryEvaluate(object sender, GroupSummaryEvaluationEventArgs e) { try { string suff = String.Concat(" (", e.Group.ItemCount.ToString(), ")"); if (e.FormatString.Contains(":")) { e.FormatString = e.FormatString.Replace("{0}:", ""); } if (!e.FormatString.EndsWith(suff)) { e.FormatString = String.Concat(e.FormatString, suff); } // convert text to upper case e.FormatString = e.FormatString.ToUpper(); } catch (Exception ex) { SM.Debug("Erorr on GroupSummaryEvaluate" + ex.ToString()); } } private void vehiclesList_CellDoubleClick(object sender, GridViewCellEventArgs e) { if (vehiclesList.SelectedRows.Count > 0) { lbName1.Text = "Unknown1"; lbName2.Text = "Unknown2"; lbName3.Text = "Unknown3"; lbName4.Text = "Unknown4"; lbName5.Text = "Unknown5"; panStat1.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat2.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat3.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat4.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; panStat5.BackgroundImage = global::Dispatcher.Properties.Resources.te_in_d; btSend1.Visible = true; cbType1.Visible = true; btSend2.Visible = true; cbType2.Visible = true; btSend3.Visible = true; cbType3.Visible = true; btSend4.Visible = true; cbType4.Visible = true; btSend5.Visible = true; cbType5.Visible = true; btSend1.Enabled = false; cbType1.Enabled = false; btSend2.Enabled = false; cbType2.Enabled = false; btSend3.Enabled = false; cbType3.Enabled = false; btSend4.Enabled = false; cbType4.Enabled = false; btSend5.Enabled = false; cbType5.Enabled = false; try { if (vehiclesList.SelectedRows[0].Cells["UnitName"].Value != null) { selectName = vehiclesList.SelectedRows[0].Cells["UnitName"].Value.ToString(); foreach (TelemetryObj temobj in ((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells["UnitName"].Value.ToString()]).telemList) { ChangePreview(temobj, (Bitmap)vehiclesList.SelectedRows[0].Cells[temobj.DigitalNr + 2].Value); } } else selectName = ""; } catch (Exception ex) { SM.Debug("Unable to change telemetry " + ex.ToString()); } try { if (vehiclesList.SelectedRows[0].Cells["UnitName"].Value != null) { String datasetCMD = "setDataset,PointSelect"; Vehicle veh = (Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells["UnitName"].Value.ToString()]; if (Math.Abs(veh.LAT) <= 0.1 && Math.Abs(veh.LNG) <= 0.1) parent.DisplayToast(string.Format(MainForm2.returnLNGString("unableDisp") , selectName), string.Format(MainForm2.returnLNGString("HTMLnoValidGPS"), selectName )); DateTime positionTime = (((veh).lastValidPositionTime).ConvertGMTToLocal()).GetDTFromSeconds(); Boolean hasVoice = veh.has_voice; Boolean hasText = veh.has_text; Boolean isInCall = veh.inCall; int smsLength = SmsUtils.GetMaxNumberOfCharacters(MainForm2.radioType); #region mapCallTimeout int mapCallTimeout = 3; ((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells["UnitName"].Value.ToString()]).CheckPositionInSystem(); string GatewayAndRadioID = ((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells["UnitName"].Value.ToString()]).GwandRadioID; int gwType = (int)GatewayType.Unknown; if (MainForm2.radioGwHT[GatewayAndRadioID] != null) { if (((RadioGateway)MainForm2.radioGwHT[GatewayAndRadioID]).Type == (int)GatewayType.Broadband || ((RadioGateway)MainForm2.radioGwHT[GatewayAndRadioID]).Type == (int)GatewayType.Tier3Radio) { mapCallTimeout = MainForm2.MapCallTimeout; } gwType = ((RadioGateway)MainForm2.radioGwHT[GatewayAndRadioID]).Type; smsLength = SmsUtils.GetMaxNumberOfCharacters(gwType); } #endregion datasetCMD = datasetCMD + "," + MainForm2.FixDoubleLAT(veh.LAT.ToString()) + "," + MainForm2.FixDoubleLNG(veh.LNG.ToString()) + "," + positionTime.ToString("yyyy-MM-dd HH:mm:ss") + "," + veh.busName + "," + veh.GetSpeed() + (MainForm2.isInMile ? "mph" : "kph") + "," + veh.GetAlt() + "," + veh.GetLastAddress().Replace(',', ' ') + "," + "images/telemetry.png" + "," + (hasVoice ? mapCallTimeout : 0) + "," + (hasText ? smsLength : 0) + "," + isInCall; if (docLoad) { datasetCMD = datasetCMD.Replace(';', ' '); mapGoogles.ExecuteScript("window.GWTcallback('" + datasetCMD + "');"); mapGoogles.ExecuteScript("window.GWTcallback('" + "putOnMap,true,PointSelect');"); mapGoogles.ExecuteScript("window.GWTcallback('" + "openInfo," + MainForm2.FixComma(vehiclesList.SelectedRows[0].Cells[2].Value.ToString()) + "');"); } } } catch (Exception ex) { SM.Debug("Eroare cu google" + ex.ToString()); } } } private void StartGoogleMap_Tick(object sender, EventArgs e) { StartGoogleMap.Stop(); StartGoogleMap.Enabled = false; String safemobileDirPath = System.Windows.Forms.Application.StartupPath.Replace('\\', '/').Replace(" ", "%20"); safemobileDirPath = safemobileDirPath.Replace("#", "%23"); mapGoogles.LoadWebPage("file:///" + safemobileDirPath + "/resource/" + MainForm2.MapHtmlName); TimerToLoadMap.Enabled = true; TimerToLoadMap.Start(); docLoad = true; } private void vehiclesList_ViewCellFormatting(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); } } } private void Timer_Tick(object sender, EventArgs e) { } private WaitToLoad WaitWindow = null; private void MessageScreen_Tick(object sender, EventArgs e) { try { MessageScreen.Stop(); MessageScreen.Enabled = false; WaitWindow = new WaitToLoad(false); WaitWindow.ShowDialog(); } catch (Exception ex) { SM.Debug("Ex10:" + ex.ToString()); } } public delegate void ProcessResponseFromMapInvokeCallBack(String url); private void ProcessResponseFromMap(String url) { if (url.IndexOf("app://") > -1) { Utils.WriteLine("RESPONSE FROM MAP : " + url, ConsoleColor.Magenta); // hide the loading window because the map has loaded if (url.IndexOf("map-loaded") > -1) { if (WaitWindow != null) WaitWindow.Close(); } else if (url.IndexOf("street-view-open") > -1) { String tmpstr = url.Remove(0, url.IndexOf("street-view-open") + 17); Console.WriteLine("parsare:" + tmpstr); tmpstr = tmpstr.Trim(); if (tmpstr.ToUpper().CompareTo("TRUE") == 0) StreetViewOpened = true; else StreetViewOpened = false; } } } /// /// Hide borders and grid lines for the grid /// private void vehiclesList_CellFormatting(object sender, CellFormattingEventArgs e) { GridCellElement cellElement = e.CellElement; GridViewDataColumn columnInfo = e.CellElement.ColumnInfo as GridViewDataColumn; if (cellElement != null) cellElement.DrawBorder = false; // do not highlight the cell on which was clicked if (e.CellElement.IsCurrent) e.CellElement.IsCurrent = false; if(columnInfo.Name.StartsWith("Digi")) { string unitName = e.Row.Cells[2].Value.ToString(); foreach (TelemetryObj temobj in ((Vehicle)MainForm2.vehicleHT[unitName]).telemList) { /* if (("Digi" + temobj.DigitalNr).Equals(columnInfo.Name) && !temobj.DigitalType.Equals("IN")) { cellElement.DrawFill = true; cellElement.NumberOfColors = 1; cellElement.BackColor = Color.Thistle; }*/ } } } private void vehiclesList_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e) { GridDataCellElement cell = e.ContextMenuProvider as GridDataCellElement; if (cell == null) { return; } try { if (e.ContextMenuProvider is GridDataCellElement) { GridViewRowInfo row = ((GridDataCellElement)e.ContextMenuProvider).RowInfo; // create the drop down menu RadDropDownMenu TelemMenu = new RadDropDownMenu(); try { if (vehiclesList.SelectedRows[0].Cells[2].Value != null) { selectName = vehiclesList.SelectedRows[0].Cells[2].Value.ToString(); foreach (TelemetryObj temobj in ((Vehicle)MainForm2.vehicleHT[vehiclesList.SelectedRows[0].Cells[2].Value.ToString()]).telemList) { if (temobj.DigitalNr == cell.ColumnIndex - 2) { TelemMenu.Text = "Pin " + temobj.DigitalNr + " options"; if (temobj.DigitalType != "IN") { // create context menu button RadMenuItem itemSet = new RadMenuItem(MainForm2.returnLNGString("telemSet")); // add click listener for the context menu button itemSet.Click += delegate(object s, EventArgs ev) { // send SET command parent.Send_telem_digit(selectName, temobj.DigitalNr, (int)TelemCommands.SET); parent.DisplayToast(string.Format(MainForm2.returnLNGString("telemSent"), selectName), string.Format(MainForm2.returnLNGString("pinCmdToGW"), itemSet.Text.ToUpper(), temobj.DigitalNr)); TelemMenu.ClosePopup(RadPopupCloseReason.Mouse); }; // add button to context menu TelemMenu.Items.Add(itemSet); // create context menu button RadMenuItem itemClear = new RadMenuItem(MainForm2.returnLNGString("telemClear")); // add click listener for the context menu button itemClear.Click += delegate(object s, EventArgs ev) { // send CLEAR command parent.Send_telem_digit(selectName, temobj.DigitalNr, (int)TelemCommands.CLEAR); parent.DisplayToast(string.Format(MainForm2.returnLNGString("telemSent"), selectName), string.Format(MainForm2.returnLNGString("pinCmdToGW"), itemClear.Text.ToUpper(), temobj.DigitalNr)); TelemMenu.ClosePopup(RadPopupCloseReason.Mouse); }; // add button to context menu TelemMenu.Items.Add(itemClear); // create context menu button RadMenuItem itemToggle = new RadMenuItem(MainForm2.returnLNGString("telemToggle")); // add click listener for the context menu button itemToggle.Click += delegate(object s, EventArgs ev) { // send TOGGLE command parent.Send_telem_digit(selectName, temobj.DigitalNr, (int)TelemCommands.TOGGLE); parent.DisplayToast(string.Format(MainForm2.returnLNGString("telemSent"), selectName), string.Format(MainForm2.returnLNGString("pinCmdToGW"),itemToggle.Text.ToUpper(),temobj.DigitalNr)); TelemMenu.ClosePopup(RadPopupCloseReason.Mouse); }; // add button to context menu TelemMenu.Items.Add(itemToggle); // create context menu button RadMenuItem itemPulse = new RadMenuItem(MainForm2.returnLNGString("telemPulse")); // add click listener for the context menu button itemPulse.Click += delegate(object s, EventArgs ev) { // send PULSE command parent.Send_telem_digit(selectName, temobj.DigitalNr, (int)TelemCommands.PULSE); parent.DisplayToast(string.Format(MainForm2.returnLNGString("telemSent"), selectName), string.Format(MainForm2.returnLNGString("pinCmdToGW"),itemPulse.Text.ToUpper(),temobj.DigitalNr)); TelemMenu.ClosePopup(RadPopupCloseReason.Mouse); }; // add button to context menu TelemMenu.Items.Add(itemPulse); } } } } } catch (Exception ex) { SM.Debug("Unable to change telemetry " + ex.ToString()); } // create context menu button RadMenuItem itemRefresh = new RadMenuItem(MainForm2.returnLNGString("refreshAll")); // add click listener for the context menu button itemRefresh.Click += delegate(object s, EventArgs ev) { // send the refresh command if (selectName != "") { parent.Send_telem_digit(selectName, 10, 0); parent.DisplayToast(string.Format(MainForm2.returnLNGString("telemSent"), selectName), string.Format(MainForm2.returnLNGString("CmdHTML"),itemRefresh.Text.ToUpper())); } TelemMenu.ClosePopup(RadPopupCloseReason.Mouse); }; // add button to context menu TelemMenu.Items.Add(itemRefresh); e.ContextMenu = TelemMenu; } } catch (Exception ex) { SM.Debug("EXLive10:" + ex.ToString()); } } /// /// Format the cell in order to remove the indent of the cells /// 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 is GridViewIndentColumn) { e.Column.IsVisible = false; /* e.Column.MaxWidth = 7; e.Column.MinWidth = 7; e.Column.Width = 7;*/ //e.CellElement.Visibility = ElementVisibility.Hidden; } } } /// /// 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; } private void TelemTab_Load(object sender, EventArgs e) { // register for when the unit call status is changed this.parent.OnCallStatusChanged += delegate(string unitname, bool inCall, Boolean fromField) { Utils.WriteLine("SET CALL " + unitname + " " + inCall); mapGoogles.ExecuteScript(String.Format("window.GWTcallback('setCall,{0},{1}')", unitname, inCall)); }; } /// /// Change background color for the row according to its state and theme /// private void vehiclesList_RowFormatting(object sender, RowFormattingEventArgs e) { if (e.RowElement.IsSelected) { e.RowElement.DrawFill = true; e.RowElement.BackColor = MainForm2.GridSelectedRow; e.RowElement.NumberOfColors = 1; } else e.RowElement.DrawFill = false; } #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 private void vehiclesList_CellClick(object sender, GridViewCellEventArgs e) { if(e.ColumnIndex > vehiclesList.Columns["UnitName"].Index) this.vehiclesList.ContextMenuManager.ShowContextMenu(this.vehiclesList.CurrentCell); } private void splitPanel3_Click(object sender, EventArgs e) { // select the cell in the grid in order for the telerik context menu // to activate the required options if (sender == splitPanel2) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi1"]; else if (sender == splitPanel3) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi2"]; else if (sender == splitPanel4) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi3"]; else if (sender == splitPanel5) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi4"]; else if (sender == splitPanel6) vehiclesList.CurrentColumn = vehiclesList.Columns["Digi5"]; this.vehiclesList.ContextMenuManager.ShowContextMenu(this.vehiclesList.CurrentCell); } } }