using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using Telerik.WinControls.UI; using Telerik.WinControls; using Telerik.WinControls.UI.Docking; using System.Net.NetworkInformation; using SafeMobileLib; using System.Threading; using Dispatcher.maptab.UIClasses; using System.IO; using Telerik.WinControls.UI.Localization; using System.Drawing.Imaging; using Dispatcher.maptab; namespace Safedispatch_4_0 { public partial class LandZoneCfg : UserControl { private SMdb_access smdbObj; private Int32 loadcnt = 0; private String datasetCMD; public Boolean docLoad = false; private Boolean Loaddata = true; private Boolean StopTimer = false; private Boolean PingGoogle = false; private Boolean LandMarkNotSpecPoint = false; private Int32 RowToUpdate = -1; private ArrayList vehicleListNames = new ArrayList(); String col0, col1, col2, col3, col4, mess1, mess2, mess5, mess4, mess6, messaddlatlongout, messadd, messaddquiz, messaddname, msgNotSave, msgWar; String mess11, mess12, mess15, messWill, msgNotSaveZone, mess16, messPointToDel, need3Points, mesdeletelimit, messinfo, msgSplitEmail, msgInvalidEmail; Color color = Color.Red; private Boolean OnNewLandMark = false; private Boolean OnNewZone = false; public static Boolean isFilterLoaded = false; public static volatile Boolean StreetViewOpened = false; private volatile ReverseGeocoding volltmpGo2 = new ReverseGeocoding(MainForm2.cfg.ReverseGeoOSM); private Boolean ChangeLandmarkLocationOnClick = true; private static String safemobileDirPath = System.Windows.Forms.Application.StartupPath; public delegate void ProcessResponseFromMapInvokeCallBack(String url); // Colors list private List colorsList; public static Dictionary landmarkTypesList; private Image themeEditActive_Image = Utils.ChangeColor(Dispatcher.Properties.Resources._edit_geofence, MainForm2.ButtonColor); private Image themeEditDisabled_Image = Utils.MakeGrayscale3(Dispatcher.Properties.Resources._edit_geofence, 1); private MainForm2 parent = null; public LandZoneCfg(MainForm2 parent) { smdbObj = new SMdb_access(); RadGridLocalizationProvider.CurrentProvider = new GridLanguageProvider(); InitializeComponent(); this.parent = parent; #region THEMING labelGeofences.ForeColor = MainForm2.LabelColor; labelLandmarks.ForeColor = MainForm2.LabelColor; labelAlerts.ForeColor = MainForm2.LabelColor; labelStyle.ForeColor = MainForm2.LabelColor; rbResetGeofence.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; rbSaveGeofence.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; rbResetLandmark.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; rbSaveLandmark.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; documentTabStrip2.TabStripElement.BorderTopColor = MainForm2.ButtonColor; documentTabStrip2.TabStripElement.BorderTopShadowColor = MainForm2.ButtonColor; documentTabStrip2.SplitPanelElement.Border.TopShadowColor = MainForm2.ButtonColor; documentTabStrip2.SplitPanelElement.Border.TopColor = MainForm2.ButtonColor; rgbStyle.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbStyle.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; rgbStyle.GroupBoxElement.Header.TextPrimitive.ForeColor = MainForm2.ButtonColor; rgbStyle.GroupBoxElement.Header.ImagePrimitive.Image = pbStyle.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.i_style_24, MainForm2.ButtonColor); rgbAlerts.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbAlerts.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; rgbAlerts.GroupBoxElement.Header.TextPrimitive.ForeColor = MainForm2.ButtonColor; rgbAlerts.GroupBoxElement.Header.ImagePrimitive.Image = pbAlerts.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.i_alert_24, MainForm2.ButtonColor); rgbDetails.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbDetails.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; rgbDetails.GroupBoxElement.Header.TextPrimitive.ForeColor = MainForm2.ButtonColor; rgbDetails.GroupBoxElement.Header.ImagePrimitive.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.i_details_24, MainForm2.ButtonColor); rgbStyleLand.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbStyleLand.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; rgbStyleLand.GroupBoxElement.Header.TextPrimitive.ForeColor = MainForm2.ButtonColor; rgbStyleLand.GroupBoxElement.Header.ImagePrimitive.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.i_style_24, MainForm2.ButtonColor); rgbAlertsLand.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbAlertsLand.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; rgbAlertsLand.GroupBoxElement.Header.TextPrimitive.ForeColor = MainForm2.ButtonColor; rgbAlertsLand.GroupBoxElement.Header.ImagePrimitive.Image = pbAlerts.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.i_alert_24, MainForm2.ButtonColor); rgbDetailsLand.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbDetailsLand.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; rgbDetailsLand.GroupBoxElement.Header.TextPrimitive.ForeColor = MainForm2.ButtonColor; rgbDetailsLand.GroupBoxElement.Header.ImagePrimitive.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.i_details_24, MainForm2.ButtonColor); pbEditGeofence.Image = themeEditDisabled_Image; #endregion // set theme for the Message Box RadMessageBox.SetThemeName("TelerikMetroBlue"); // create the toolTip that will be displayed when the user sets a pattern // over the hint pictureBox toolTipHelp = new ToolTip(); toolTipHelp.ToolTipTitle = ""; toolTipHelp.AutoPopDelay = 0; toolTipHelp.InitialDelay = 0; toolTipHelp.ReshowDelay = 0; toolTipHelp.IsBalloon = false; toolTipHelp.ShowAlways = true; // check if resource directory exists if (!Directory.Exists("resource")) { Directory.CreateDirectory("resource"); } // check if resource directory exists if (!Directory.Exists("resource/landmarks")) { Directory.CreateDirectory("resource/landmarks"); } // set the items which will be used inside the telerik controls //RadGridLocalizationProvider.CurrentProvider = new MyEnglishRadGridLocalizationProvider(); // select the 'New Geofence' item and focus rddlGeofences.SelectedIndex = 0; rddlGeofences.Focus(); // select the 'New Landmark' item and focus rddlLandmarks.SelectedIndex = 0; rddlLandmarks.Focus(); #region COLORS LIST // create the list of colors for the Landmarks colorsList = new List() { System.Drawing.ColorTranslator.FromHtml("#efed4f"), System.Drawing.ColorTranslator.FromHtml("#d3e4ab"), System.Drawing.ColorTranslator.FromHtml("#b7e64b"), System.Drawing.ColorTranslator.FromHtml("#8ee247"), System.Drawing.ColorTranslator.FromHtml("#52c144"), System.Drawing.ColorTranslator.FromHtml("#61c1a3"), System.Drawing.ColorTranslator.FromHtml("#97c8e3"), System.Drawing.ColorTranslator.FromHtml("#3ea8e5"), System.Drawing.ColorTranslator.FromHtml("#1796d9"), System.Drawing.ColorTranslator.FromHtml("#007cb8"), System.Drawing.ColorTranslator.FromHtml("#2636cb"), System.Drawing.ColorTranslator.FromHtml("#4f6aa1"), System.Drawing.ColorTranslator.FromHtml("#856dc3"), System.Drawing.ColorTranslator.FromHtml("#ac70dd"), System.Drawing.ColorTranslator.FromHtml("#cd567a"), System.Drawing.ColorTranslator.FromHtml("#c7282a"), System.Drawing.ColorTranslator.FromHtml("#f94040"), System.Drawing.ColorTranslator.FromHtml("#e2635c"), System.Drawing.ColorTranslator.FromHtml("#fe5011"), System.Drawing.ColorTranslator.FromHtml("#fa7746"), System.Drawing.ColorTranslator.FromHtml("#f3b24b"), System.Drawing.ColorTranslator.FromHtml("#e4aa63"), System.Drawing.ColorTranslator.FromHtml("#e3e3e3"), System.Drawing.ColorTranslator.FromHtml("#b6b6b6"), System.Drawing.ColorTranslator.FromHtml("#606060"), System.Drawing.ColorTranslator.FromHtml("#414141"), System.Drawing.ColorTranslator.FromHtml("#000000") }; // style for the Colors ListView rlvLandmarkColors.ItemSize = new System.Drawing.Size(29, 29); rlvLandmarkColors.ItemSpacing = 0; // style the Visual Item for the Colors ListView rlvLandmarkColors.VisualItemCreating += delegate(object sender, Telerik.WinControls.UI.ListViewVisualItemCreatingEventArgs e) { e.VisualItem = new ColorCellElement(); }; // set the data source of the Colors ListView rlvLandmarkColors.DataSource = colorsList; // style for the Colors ListView rlvGeofenceBorderColors.ItemSize = new System.Drawing.Size(29, 29); rlvGeofenceBorderColors.ItemSpacing = 0; // style the Visual Item for the Colors ListView rlvGeofenceBorderColors.VisualItemCreating += delegate(object sender, Telerik.WinControls.UI.ListViewVisualItemCreatingEventArgs e) { e.VisualItem = new ColorCellElement(); }; // set the data source of the Colors ListView rlvGeofenceBorderColors.DataSource = colorsList; // style for the Colors ListView rlvGeofenceFillColors.ItemSize = new System.Drawing.Size(29, 29); rlvGeofenceFillColors.ItemSpacing = 0; // style the Visual Item for the Colors ListView rlvGeofenceFillColors.VisualItemCreating += delegate(object sender, Telerik.WinControls.UI.ListViewVisualItemCreatingEventArgs e) { e.VisualItem = new ColorCellElement(); }; // set the data source of the Colors ListView rlvGeofenceFillColors.DataSource = colorsList; #endregion #region LANDMARKS ICONS LIST // Process the list of files found in the directory. if (landmarkTypesList == null) landmarkTypesList = smdbObj.GetAllLandmarkTypes(); // style for the Icons ListView rlvIcons.ItemSize = new System.Drawing.Size(27, 27); rlvIcons.ItemSpacing = 0; // style the Visual Item for the Icons ListView rlvIcons.VisualItemCreating += delegate(object sender, Telerik.WinControls.UI.ListViewVisualItemCreatingEventArgs e) { e.VisualItem = new IconCellElement(); }; // set the data source of the Icons ListView rlvIcons.DataSource = landmarkTypesList; #endregion // populate the units list for the geofence alerts // for each Unit defined in the hash table List vehicles = new List(); foreach (DictionaryEntry de in MainForm2.vehicleHT) { Vehicle veh = de.Value as Vehicle; vehicles.Add(veh); /* if (veh != null) { // add units to the drop down list RadCheckedListDataItem item = new RadCheckedListDataItem(); item.Checked = false; item.Value = veh.veh_id; item.Text = veh.busName; item.Tag = veh.IMEI; rcbddUnitsList.Items.Add(item); }*/ } rcbddUnitsList.DataSource = vehicles; rcbddUnitsList.DisplayMember = "Name"; RadCheckedListDataItem radCheckedListDataItem1 = new RadCheckedListDataItem(MainForm2.returnLNGString("g_in"), true); RadCheckedListDataItem radCheckedListDataItem2 = new RadCheckedListDataItem(MainForm2.returnLNGString("g_out"), true); this.rcbddAlertType.Items.Add(radCheckedListDataItem1); this.rcbddAlertType.Items.Add(radCheckedListDataItem2); // remove all context menu options for the left panels ContextMenuService menuService2 = this.radDock1.GetService(); menuService2.ContextMenuDisplaying += delegate(object sender, ContextMenuDisplayingEventArgs e) { if (e.MenuType == ContextMenuType.DockWindow && e.DockWindow.DockTabStrip is DocumentTabStrip) { //remove the "Close" menu items for (int i = 0; i < e.MenuItems.Count; i++) e.MenuItems[i].Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } }; #region MAP // create the map element 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() { docLoad = true; 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 ? "false" : "false") + "');"); //mapGoogles.ExecuteScript("window.GWTcallback('setLegacyIcons," + (isClassicIcons ? "true" : "false") + "');"); mapGoogles.ExecuteScript("window.GWTcallback('centerzoom," + MainForm2.FixDoubleLAT(Safedispatch_4_0.MainForm2.LatStart.ToString()) + "," + MainForm2.FixDoubleLNG(Safedispatch_4_0.MainForm2.LngStart.ToString()) + "," + Safedispatch_4_0.MainForm2.ZoomStart + "');"); this.Invoke((MethodInvoker)delegate() { // get all geofences from the db and display them currentTab = "landmark"; GeofencesWindow_Enter(GeofencesWindow, null); // force the editing of a new geofence rddlGeofences_SelectedIndexChanged(rddlGeofences, new Telerik.WinControls.UI.Data.PositionChangedEventArgs(rddlGeofences.SelectedIndex)); }); } catch (Exception ex) { Utils.WriteLine("Error on Load page Geofence ex:" + ex.ToString(), ConsoleColor.Red); } }; mapGoogles.OnBrowserURLChanged += delegate(String currentURL) { //MessageBox.Show("Current URL is " + currentURL); }; mapGoogles.OnURLResponseReceived += delegate(String urlResponse) { try { this.Invoke(new ProcessResponseFromMapInvokeCallBack(this.ProcessResponseFromMap), urlResponse); } catch (Exception ex) { Utils.WriteLine("Error on response LandZone ex:" + ex.ToString(), ConsoleColor.Red); } }; MapPanel.Controls.Add(mapGoogles); #endregion // start the timer which will change the web page //StartGoogleMap.Enabled = true; setLanguage(); //mapGoogles.AllowFileAccessFromFileURLs = true; // load all items inside the Landmarks and Geofences comboboxes ReloadLandmarksDDL(""); ReloadGeofencesDDL(""); Loaddata = true; ContextMenuService menuService = this.radDock1.GetService(); menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying; menuService.AllowActiveWindowListContextMenu = false; menuService.AllowDocumentContextMenu = false; menuService.AllowToolContextMenu = false; MainForm2.RestartMEM += 70000000; } /// /// Localize objects from the UI /// private void setLanguage() { col0 = MainForm2.returnLNGString("colum0"); col1 = MainForm2.returnLNGString("lbDescript"); col2 = MainForm2.returnLNGString("colum2"); col3 = MainForm2.returnLNGString("colum3"); col4 = MainForm2.returnLNGString("colum4"); mess1 = MainForm2.returnLNGString("messdelete"); messPointToDel = MainForm2.returnLNGString("messdeletePoint"); mess2 = MainForm2.returnLNGString("messdeletequiz"); mess4 = MainForm2.returnLNGString("zonename"); mess5 = MainForm2.returnLNGString("messdeletename"); mess6 = MainForm2.returnLNGString("geoNameExist2"); messaddlatlongout = MainForm2.returnLNGString("messaddlatlongout"); messadd = MainForm2.returnLNGString("messadd"); messaddname = MainForm2.returnLNGString("messaddname"); messaddquiz = MainForm2.returnLNGString("messaddquiz"); msgWar = MainForm2.returnLNGString("msgWar"); msgNotSave = MainForm2.returnLNGString("msgNotSave"); msgNotSaveZone = MainForm2.returnLNGString("msgNotSaveZone"); need3Points = MainForm2.returnLNGString("need3Points"); mesdeletelimit = MainForm2.returnLNGString("mesdeletelimit"); mess11 = MainForm2.returnLNGString("zone"); mess12 = MainForm2.returnLNGString("messdeletequizzone"); mess15 = MainForm2.returnLNGString("messdeletenamezone"); mess16 = MainForm2.returnLNGString("messdeletenamePoint"); messWill = MainForm2.returnLNGString("willdelete"); messinfo = MainForm2.returnLNGString("info"); msgInvalidEmail = MainForm2.returnLNGString("msgInvalidEmail"); msgSplitEmail = MainForm2.returnLNGString("msgSplitEmail"); rgbDetails.Text = rgbDetailsLand.Text = MainForm2.returnLNGString("details"); rcbShowGeofences.Text = MainForm2.returnLNGString("showOtherGeofences"); rtbGeofenceName.NullText = MainForm2.returnLNGString("geoName"); rcbEditGeofence.Text = MainForm2.returnLNGString("editGeo"); rgbStyle.Text = labelStyle.Text = rgbStyleLand.Text = MainForm2.returnLNGString("style"); radLabel2.Text = radLabel12.Text = MainForm2.returnLNGString("name"); labelGeofences.Text = GeofencesWindow.Text = MainForm2.returnLNGString("geos"); radLabel6.Text = MainForm2.returnLNGString("borderColor"); radLabel3.Text = MainForm2.returnLNGString("borderOpacity"); radLabel5.Text = MainForm2.returnLNGString("borderWidth"); radLabel13.Text = MainForm2.returnLNGString("fillColor"); radLabel7.Text = MainForm2.returnLNGString("fillOpacity"); rbResetGeofence.Text = rbResetLandmark.Text = MainForm2.returnLNGString("reset"); rbSaveGeofence.Text = rbSaveLandmark.Text = MainForm2.returnLNGString("save"); labelAlerts.Text = rgbAlerts.Text = MainForm2.returnLNGString("tabAlerts"); radLabel19.Text = MainForm2.returnLNGString("emailAndMessage"); //Email address and message that will sent rtbEmailAddress.NullText = MainForm2.returnLNGString("fillemail"); //Fill email address rtbEmailMessage.NullText = MainForm2.returnLNGString("fillmsg"); //Fill email message radLabel17.Text = MainForm2.returnLNGString("geofenceAlertType"); //Geofence alert type rtbUnitMessage.NullText = MainForm2.returnLNGString("Msg2Unit"); //Message which will be sent to unit rtbUnitsMessage.NullText = MainForm2.returnLNGString("Msg2Units"); //Message which will be sent to units rcbddUnitsList.NullText = MainForm2.returnLNGString("selAtleast1Unit"); //Select at least one unit rcbEmailAlert.Text = MainForm2.returnLNGString("sendEmailWhenAlarmRaised"); //Send email when alert raised rcbUnitMessage.Text = MainForm2.returnLNGString("sendMsgUnit"); //Send message to unit which raised the alert rcbUnitsAlert.Text = MainForm2.returnLNGString("sendMsgUnits"); //Send text message to units when alert raised rcbSpeedLimit.Text = MainForm2.returnLNGString("speedLimitInGeofence"); //Speed limit in geofence [km/h] rcbSpeedLimit.Text = (!MainForm2.isInMile) ? string.Format(rcbSpeedLimit.Text, (MainForm2.returnLNGString("kmh"))) : string.Format(rcbSpeedLimit.Text, (MainForm2.returnLNGString("milesh"))); radLabel16.Text = MainForm2.returnLNGString("units2Rcv"); //Units which will receive the message radLabel18.Text = MainForm2.returnLNGString("mssg"); labelLandmarks.Text = LandmarksWindow.Text = MainForm2.returnLNGString("lands"); rtbLandName.NullText = MainForm2.returnLNGString("landName"); rtbLandDesc.NullText = MainForm2.returnLNGString("landDesc"); radLabel11.Text = MainForm2.returnLNGString("lbDescript"); radLabel10.Text = MainForm2.returnLNGString("colum2"); radLabel9.Text = MainForm2.returnLNGString("colum3"); radLabel8.Text = MainForm2.returnLNGString("tableVehiclesListColumns2"); rcbMoveLandmark.Text = MainForm2.returnLNGString("moveLand"); rtbSmall.Text = MainForm2.returnLNGString("small"); rtbMedium.Text = MainForm2.returnLNGString("medium"); rtbLarge.Text = MainForm2.returnLNGString("large"); radLabel14.Text = MainForm2.returnLNGString("markerColor"); radLabel15.Text = MainForm2.returnLNGString("markerIcon"); rtbLandAddress.NullText = MainForm2.returnLNGString("landAddr"); // The ToolTip for the PictureBox. new ToolTip().SetToolTip(pbSpeedLimitHint, MainForm2.returnLNGString("speedHint")); rgvGeofencePoints.Columns[0].HeaderText = ""; rgvGeofencePoints.Columns[1].HeaderText = ""; rgvGeofencePoints.Columns[2].HeaderText = MainForm2.returnLNGString("Lat"); rgvGeofencePoints.Columns[3].HeaderText = MainForm2.returnLNGString("Lng"); rgvGeofencePoints.Columns[5].HeaderText = ""; rddzSeverity.Items.Clear(); rddzSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity1"), 1)); rddzSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity2"), 2)); rddzSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity3"), 3)); rddzSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity4"), 4)); rddzSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity5"), 5)); rddlSeverity.Items.Clear(); rddlSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity1"), 1)); rddlSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity2"), 2)); rddlSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity3"), 3)); rddlSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity4"), 4)); rddlSeverity.Items.Add(new RadListDataItem(MainForm2.returnLNGString("severity5"), 5)); /* toolWindow1.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.None; //toolWindow1.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; toolWindow1.DocumentButtons = Telerik.WinControls.UI.Docking.DocumentStripButtons.None; toolWindow1.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide; toolWindow4.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.None; toolWindow4.DocumentButtons = Telerik.WinControls.UI.Docking.DocumentStripButtons.None; toolWindow4.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide;*/ // hide delete icons and tool caption button GeofencesWindow.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.None; GeofencesWindow.DocumentButtons = Telerik.WinControls.UI.Docking.DocumentStripButtons.None; LandmarksWindow.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.None; LandmarksWindow.DocumentButtons = Telerik.WinControls.UI.Docking.DocumentStripButtons.None; /* lbSpeedName.Text = MainForm2.kmh; if (MainForm2.isInMile) lbSpeedName.Text = MainForm2.milesh;*/ } 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 == "Hidden" || menuItem is RadMenuSeparatorItem) { menuItem.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } } } } /// /// Reaload all Landmarks inside the combo box /// /// The element which needs to be focused public void ReloadLandmarksDDL(String focus) { int index = 0; ArrayList tmpName = new ArrayList(); List allLandmarks = smdbObj.GetAllLandmarks(); allLandmarks.Insert(0, new LandmarkUI() { Name = MainForm2.returnLNGString("newLand"), Idx = 0 }); // search the focused element for (int i = 0; i < allLandmarks.Count; i++) if (allLandmarks[i].Name.Equals(focus)) { index = i; break; } foreach (Int32 obj in MainForm2.LandIDHash.Keys) tmpName.Add(new Zone_type((String)MainForm2.LandIDHash[obj], obj, 0)); tmpName.Sort(new DefineSMSComparer()); // load Landmarks inside the drop down list rddlLandmarks.DataSource = allLandmarks; rddlLandmarks.DisplayMember = "Name"; // select the desired index rddlLandmarks.SelectedIndex = index; } /// /// Reload all Geofences inside the combo box /// /// The element which needs to be focused public void ReloadGeofencesDDL(String focus) { int index = 0; List allGeofences = smdbObj.GetAllGeofences(); allGeofences.Insert(0, new GeofenceUI() { Name = MainForm2.returnLNGString("newGeofence"), Idx = 0 }); // search the focused element for (int i = 0; i < allGeofences.Count; i++) if (allGeofences[i].Name.Equals(focus)) { index = i; break; } ArrayList tmpName = new ArrayList(); foreach (Int32 obj in MainForm2.ZoneIDHash.Keys) tmpName.Add((ZoneClass)MainForm2.ZoneIDHash[obj]); tmpName.Sort(new ZoneClassComparer()); // load Geofences inside the drop down list rddlGeofences.DataSource = allGeofences; rddlGeofences.DisplayMember = "Name"; #region Hide CallOut from interface chkzCallout.Visible = false; lbzCalloutSeverity.Visible = false; rddzSeverity.Visible = false; rgbAlertsLand.Visible = false; radLabel1.Visible = false; pictureBox1.Visible = false; #endregion // reset values ResetGeofenceUI(); // select the desired index rddlGeofences.SelectedIndex = index; } /// /// Reset the values from the alerts panel /// private void ResetGeofenceUI() { // reset alerts UI foreach (RadCheckedListDataItem item in rcbddUnitsList.Items) item.Checked = false; rcbddUnitsList.SelectedItem = null; foreach (RadListDataItem item in rcbddAlertType.Items) item.Selected = true; //if (isFilterLoaded && rddlGeofences.Text != MainForm2.returnLNGString("newGeofence")) if (isFilterLoaded) { bool showTetraAudibleAlerts = MainForm2.radioType == RADIOTYPE.TETRA && MainForm2.hasAudibleAlerts; rcbEmailAlert.Checked = false; rcbSpeedLimit.Checked = false; rcbUnitMessage.Checked = false; rcbUnitsAlert.Checked = false; chkzCallout.Checked = false; #region Enable CallOut - to be added after dongle update //Make CallOut Audible Alerts visible in the interface chkzCallout.Visible = showTetraAudibleAlerts; lbzCalloutSeverity.Visible = showTetraAudibleAlerts; rddzSeverity.Visible = showTetraAudibleAlerts; rgbAlertsLand.Visible = showTetraAudibleAlerts; radLabel1.Visible = showTetraAudibleAlerts; pictureBox1.Visible = showTetraAudibleAlerts; #endregion rtbEmailAddress.ResetText(); rtbEmailMessage.ResetText(); rtbUnitMessage.ResetText(); rtbUnitsMessage.ResetText(); rseSpeedLimit.Value = 50; } } /// /// Remove all Geofences from the map, even the new one /// private void RemoveAllGeofences() { if (mapGoogles != null) { mapGoogles.ExecuteScript("window.GWTcallback('" + "deletePolygon,ALL');"); mapGoogles.ExecuteScript("window.GWTcallback('" + "removeDataset,ZOOM');"); // delete temporary geofence mapGoogles.ExecuteScript("window.GWTcallback('deletePolygon," + rddlGeofences.Text + "');"); } } /// /// Display all the landmarks defined in the combobox on the map /// private void DisplayAllLandmarksOnMap() { // send command to remove previous dataset mapGoogles.ExecuteScript("window.GWTcallback('removeDataset,LandView');"); try { List landmarks = smdbObj.GetAllLandmarks(); datasetCMD = "setDataset,LandView"; foreach (LandmarkUI land in landmarks) datasetCMD = datasetCMD + "," + MainForm2.FixDoubleLAT(land.Latitude + "") + "," + MainForm2.FixDoubleLNG(land.Longitude + "") + "," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + MainForm2.FixComma(land.Name) + "," + "speed" + "," + "0" + "," + MainForm2.FixComma(land.Description).Replace(',', ' ') + "," + "landmarks/" + GetLandmarkIcon(land.TypeIdx, land.Color, land.Size) + "," + "false" + "," + "false" + "," + "false"; datasetCMD = datasetCMD.Replace(';', ' '); mapGoogles.ExecuteScript("window.GWTcallback('" + datasetCMD + "');"); mapGoogles.ExecuteScript("window.GWTcallback('" + "putOnMap,false,LandView');"); System.Threading.Thread.Sleep(100); mapGoogles.ExecuteScript("window.GWTcallback('" + "putLabels,LandView');"); parent.DisplayToast(MainForm2.returnLNGString("landDisp"), string.Format(MainForm2.returnLNGString("landHTML"), landmarks.Count)); } catch (Exception ex) { Utils.WriteLine("Error on displaying all landmarks: " + ex.ToString(), ConsoleColor.Red); } } /// /// Display all the geofences on the map /// private void DisplayGeofencesOnMap() { String datasetCMD = ""; String datasetZoom = ""; foreach (GridViewRowInfo row in rgvGeofencePoints.Rows) { GridViewCellInfo lat = row.Cells["Lat"]; GridViewCellInfo lng = row.Cells["Lng"]; if (lat.Value == null || lng.Value == null) continue; Decimal latD = (Decimal)lat.Value; Decimal lngD = (Decimal)lng.Value; datasetCMD = datasetCMD + MainForm2.FixDoubleLAT(latD.ToString()) + "," + MainForm2.FixDoubleLNG(lngD.ToString()) + ","; datasetZoom = datasetZoom + "," + MainForm2.FixDoubleLAT(latD.ToString()) + "," + MainForm2.FixDoubleLNG(lngD.ToString()) + ",,,,,,,false,false,false"; } if (docLoad) { try { if (datasetCMD.Length > 0) datasetCMD = datasetCMD.Remove(datasetCMD.Length - 1); } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); } mapGoogles.ExecuteScript("window.GWTcallback('" + "deletePolygon,ALL');"); System.Threading.Thread.Sleep(100); mapGoogles.ExecuteScript("window.GWTcallback('" + "removeDataset,ZOOM');"); System.Threading.Thread.Sleep(100); if (rddlGeofences.SelectedItem != null) { GeofenceUI geofence = rddlGeofences.SelectedItem.DataBoundItem as GeofenceUI; if (geofence == null) return; // show other geofences if desired if (rcbShowGeofences.Checked) showOtherZone(geofence.Idx); Color fillColor = (Color)rlvGeofenceFillColors.SelectedItem.DataBoundItem; String hexFillColor = "#" + fillColor.R.ToString("X2") + fillColor.G.ToString("X2") + fillColor.B.ToString("X2"); Color borderColor = (Color)rlvGeofenceBorderColors.SelectedItem.DataBoundItem; String hexBorderColor = "#" + borderColor.R.ToString("X2") + borderColor.G.ToString("X2") + borderColor.B.ToString("X2"); mapGoogles.ExecuteScript("window.GWTcallback('" + "setPolygon," + geofence.Name + "," + hexFillColor + "," + MainForm2.FixDoubleLAT(rseFillOpacity.Value.ToString()) + "," + hexBorderColor + "," + MainForm2.FixDoubleLAT(rseBorderOpacity.Value.ToString()) + "," + MainForm2.FixDoubleLAT(rseBorderWidth.Value.ToString()) + "," + datasetCMD + "');"); if (datasetZoom.Length > 0) { mapGoogles.ExecuteScript("window.GWTcallback('" + "setDataset,ZOOM" + datasetZoom + "');"); mapGoogles.ExecuteScript("window.GWTcallback('putOnMap,true,ZOOM');"); } /* if(rddlGeofences.SelectedIndex == 0) mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + "tmpPol" + "');"); */ } } } /// /// Update the new Geofence as a result of a point beeing deleted /// private void UpdateNewGeofence() { // prepare the map to accept a new polygon Color fillColor = (Color)rlvGeofenceFillColors.SelectedItem.DataBoundItem; String hexFillColor = "#" + fillColor.R.ToString("X2") + fillColor.G.ToString("X2") + fillColor.B.ToString("X2"); Color borderColor = (Color)rlvGeofenceBorderColors.SelectedItem.DataBoundItem; String hexBorderColor = "#" + borderColor.R.ToString("X2") + borderColor.G.ToString("X2") + borderColor.B.ToString("X2"); // remove the geofence from the map if not point anymore if (rgvGeofencePoints.RowCount == 0) { mapGoogles.ExecuteScript("window.GWTcallback('endEditPolygon');"); System.Threading.Thread.Sleep(10); mapGoogles.ExecuteScript("window.GWTcallback('deletePolygon," + rddlGeofences.Text + "');"); System.Threading.Thread.Sleep(10); mapGoogles.ExecuteScript("window.GWTcallback('newPolygon," + rddlGeofences.Text + "," + hexFillColor + "," + MainForm2.FixDoubleLAT(rseFillOpacity.Value.ToString()) + "," + hexBorderColor + "," + MainForm2.FixDoubleLAT(rseBorderOpacity.Value.ToString()) + "," + MainForm2.FixDoubleLAT(rseBorderWidth.Value.ToString()) + "');"); System.Threading.Thread.Sleep(10); } else { mapGoogles.ExecuteScript("window.GWTcallback('endEditPolygon');"); System.Threading.Thread.Sleep(10); mapGoogles.ExecuteScript("window.GWTcallback('deletePolygon," + rddlGeofences.Text + "');"); System.Threading.Thread.Sleep(10); String datasetCMD = ""; // add again the points of the landmark foreach (GridViewRowInfo row in rgvGeofencePoints.Rows) { GridViewCellInfo lat = row.Cells["Lat"]; GridViewCellInfo lng = row.Cells["Lng"]; Decimal latD = (Decimal)lat.Value; Decimal lngD = (Decimal)lng.Value; datasetCMD = datasetCMD + MainForm2.FixDoubleLAT(latD.ToString()) + "," + MainForm2.FixDoubleLNG(lngD.ToString()) + ","; } try { datasetCMD = datasetCMD.Remove(datasetCMD.Length - 1); } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); } mapGoogles.ExecuteScript("window.GWTcallback('" + "setPolygon," + rddlGeofences.Text + "," + hexFillColor + "," + MainForm2.FixDoubleLAT(rseFillOpacity.Value.ToString()) + "," + hexBorderColor + "," + MainForm2.FixDoubleLAT(rseBorderOpacity.Value.ToString()) + "," + MainForm2.FixDoubleLAT(rseBorderWidth.Value.ToString()) + "," + datasetCMD + "');"); System.Threading.Thread.Sleep(10); mapGoogles.ExecuteScript("window.GWTcallback('" + "startEditPolygon," + rddlGeofences.Text + "');"); System.Threading.Thread.Sleep(10); } } /// /// Show others geofences which are not edited now /// private void showOtherZone(Int32 currentGeofenceID) { foreach (RadListDataItem obj2 in rddlGeofences.Items) { GeofenceUI geofence = obj2.DataBoundItem as GeofenceUI; // skip current geofence and the New Geofence one if (geofence.Idx != currentGeofenceID && geofence.Idx != 0) { datasetCMD = ""; foreach (GeofencePoint point in geofence.points) { datasetCMD = datasetCMD + MainForm2.FixDoubleLAT(point.Latitude + "") + "," + MainForm2.FixDoubleLNG(point.Longitude + "") + ","; } // get geofence fill color String hexFillColor = "#" + geofence.FillColor.R.ToString("X2") + geofence.FillColor.G.ToString("X2") + geofence.FillColor.B.ToString("X2"); String hexBorderColor = "#" + geofence.BorderColor.R.ToString("X2") + geofence.BorderColor.G.ToString("X2") + geofence.BorderColor.B.ToString("X2"); try { datasetCMD = datasetCMD.Remove(datasetCMD.Length - 1); } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); } if (docLoad) mapGoogles.ExecuteScript("window.GWTcallback('" + "setPolygon," + geofence.Name + "," + hexFillColor + "," + MainForm2.FixDoubleLAT(geofence.FillOpacity.ToString()) + "," + hexBorderColor + "," + MainForm2.FixDoubleLAT(geofence.BorderOpacity.ToString()) + "," + MainForm2.FixDoubleLAT(geofence.BorderWidth.ToString()) + "," + datasetCMD + "');"); System.Threading.Thread.Sleep(10); } } if (rddlGeofences.Items.Count > 0) parent.DisplayToast(MainForm2.returnLNGString("geofenceDisplayed"), string.Format(MainForm2.returnLNGString("geoHTML"),rddlGeofences.Items.Count - 1)); } /// /// Force the map to load our html map file after the timer expires /// private void StartGoogleMap_Tick(object sender, EventArgs e) { StartGoogleMap.Stop(); StartGoogleMap.Enabled = false; // remove space and # from the map path 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 String FixLandName(String Name) { String ret = Name; ret = ret.ToLower(); ret = ret.Replace(" ", "_"); //ret = ret.Insert(ret.Length, ".png"); return ret; } /// /// Get the icon name and relative path for a specific landmark /// /// The landmark icon type id for which the icon /// needs to be returned /// Color for the desired landmark /// Desired size of the landmark /// public static String GetLandmarkIcon(Int32 landmarkTypeID, Color color, LandmarkUI.IconSize iconSize) { int width = 36; int heigth = 48; if (iconSize == LandmarkUI.IconSize.MEDIUM) { width = 27; heigth = 36; } else if (iconSize == LandmarkUI.IconSize.SMALL) { width = 20; heigth = 26; } //36,48; 27,36; 20,26; // get the hex colors for the desired color String hexColor = color.R.ToString("X2") + color.G.ToString("X2") + color.B.ToString("X2"); LandmarkType lt = null; if (landmarkTypesList.ContainsKey(landmarkTypeID)) { lt = landmarkTypesList[landmarkTypeID]; // generate the name and the path of the desired icon string iconNameAndPath = System.Windows.Forms.Application.StartupPath + @"\resource\landmarks\" + lt.IconName.Replace(".png", "") + "_" + hexColor + "_" + iconSize.ToString() + ".png"; // check if the icon exists on the hdd if (System.IO.File.Exists(iconNameAndPath)) { // we are ok, and the icon doesn't need to be recreated } else { float r = (float)((1.0 / 256) * color.R);// / 256; float g = (float)((1.0 / 256) * color.G);// / 256; float b = (float)((1.0 / 256) * color.B);// / 256; // create the landmark icon using (Bitmap landmarkPin = new Bitmap(System.Windows.Forms.Application.StartupPath + @"\resource\landmarks\_pin_02.png")) { Bitmap bitmap = new Bitmap(landmarkPin.Width, landmarkPin.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); ImageAttributes imageAttributes = new ImageAttributes(); // create a color matrix in order to change the color float[][] colorMatrixElements = { new float[] {1, 0, 0, 0, 0}, // Red scaling [multiply] new float[] {0, 1, 0, 0, 0}, // Green scaling [multiply] new float[] {0, 0, 1, 0, 0}, // Blue scaling [multiply] new float[] {r, g, b, 1, 0}, // this will add values to R,G,B,A new float[] {0, 0, 0, 0, 1}}; // three translations of 0.2 ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); imageAttributes.SetColorMatrix( colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); // Create a Graphics object using (Graphics gr = Graphics.FromImage(bitmap)) { // Draw image with no affects gr.DrawImage(landmarkPin, 0, 0, landmarkPin.Width, landmarkPin.Height); // Draw image with ImageAttributes gr.DrawImage(landmarkPin, new Rectangle(0, 0, landmarkPin.Width, landmarkPin.Height), 0, 0, landmarkPin.Width, landmarkPin.Height, GraphicsUnit.Pixel, imageAttributes); // add landmark type icon string iconPath = safemobileDirPath + @"\resource\landmarks\" + lt.IconName; using (Image img = Utils.ScaleImage(Bitmap.FromFile(iconPath), 44, 44)) { gr.DrawImage(img, 19, 18); } Image resizedImage = Utils.ScaleImage(bitmap, width, heigth); resizedImage.Save(iconNameAndPath); //bitmap.Save(iconNameAndPath); // Dispose bitmap.Dispose(); resizedImage.Dispose(); } } } return lt.IconName.Replace(".png", "") + "_" + hexColor + "_" + iconSize.ToString() + ".png"; } return @"landmarks\default.png"; } private void MapPanelLand_Click(object sender, EventArgs e) { LandMarkNotSpecPoint = true; } /// /// Display a geofence on the map using a dataset command and a dataset zoom level /// /// Geofence object which contains all the informations in /// order to display it on the map /// Command to send to the map in order to display the points /// Zoom level to which the map has to zoom private void DisplayGeofenceOnMap(GeofenceUI geofence, String datasetCMD, string datasetZoom) { } private String FixInt(Int32 nr) { if (nr < 10) return "0" + nr.ToString(); else return nr.ToString(); } private void ckHide_ToggleStateChanged(object sender, StateChangedEventArgs args) { //populateList(); } private void TimerToLoadMap_Tick(object sender, EventArgs e) { try { String safemobileDirPath = System.Windows.Forms.Application.StartupPath.Replace('\\', '/').Replace(" ", "%20"); safemobileDirPath = safemobileDirPath.Replace("#", "%23"); mapGoogles.LoadWebPage("file:///" + safemobileDirPath + "/resource/" + MainForm2.MapHtmlName); TimerToLoadMap.Stop(); } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); } } 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()); } } private void ProcessResponseFromMap(String url) { Double lat, lng; //String slat, slng; //Console.WriteLine("URL-ul: " + url); if (url.IndexOf("app://") > -1) { //Console.WriteLine(url); //URL-ul: app://landmark/7.885147283424357,38.8476562500004 //URL-ul: app://landmark/6.6646075621725975,36.914062500000334 //processRequest(url); //polygon/[New2222,#008000,51.611194610484276,23.093261718750007,52.00517397055554,26.38916015625025,51.193115244645824,29.245605468749616] if (url.IndexOf("landmark") > -1) { if (!currentTab.Equals("landmark")) return; // do not handle anything if the pin icon wasn't selected if (!ChangeLandmarkLocationOnClick) return; // get current latitude and longitude ParseLatAndLng(url.Remove(0, url.IndexOf("landmark") + 9)); } //points/48.34164617237463,20.676269531249712,48.28319289548377,24.642333984375423,47.89424772020971,28.201904296874567,46.22545288226939,29.19067382812518,45.274886437048785,28.47656250000034 else if (url.IndexOf("points") > -1) { String tmpstr = url.Remove(0, url.IndexOf("points") + 7); //Console.WriteLine("TmpStr:" + tmpstr); String[] tmp = tmpstr.Split(','); //begin Int32 max = tmp.Length; Int32 Step = 0;//2 //Newarr.Clear(); int count = 1; while (Step < (max - 1)) { MainForm2.SafeConvertStringToDouble(tmp[Step], tmp[Step + 1], out lat, out lng); if ((lat == 0) && (lng == 0)) ; else { if (rgvGeofencePoints.RowCount <= (Step / 2)) rgvGeofencePoints.Rows.AddNew(); rgvGeofencePoints.Rows[Step / 2].Cells["Number"].Value = count++; rgvGeofencePoints.Rows[Step / 2].Cells[1].Value = global::Dispatcher.Properties.Resources.map; rgvGeofencePoints.Rows[Step / 2].Cells["Lat"].Value = lat.ToString(); rgvGeofencePoints.Rows[Step / 2].Cells["Lng"].Value = lng.ToString(); rgvGeofencePoints.Rows[Step / 2].Cells[5].Value = global::Dispatcher.Properties.Resources.trashmic1; } Step += 2; } rgvGeofencePoints.Refresh(); // scroll to last inserted point rgvGeofencePoints.TableElement.ScrollToRow(rgvGeofencePoints.RowCount - 1); } else 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; } } } /// /// Get the Latitude and Longitude from the response received /// from the maps /// /// String containing the response from the map private void ParseLatAndLng(string mapResponse) { String[] tmp = mapResponse.Split(','); Double lat = 0, lng = 0; string decimalSeparator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; String tmpLat = tmp[0]; String tmpLng = tmp[1]; if ((decimalSeparator == ",") && (tmpLat.Contains("."))) { tmpLat = tmpLat.Replace(".", ","); tmpLng = tmpLng.Replace(".", ","); } else if ((decimalSeparator == ".") && (tmpLat.Contains(","))) { tmpLat = tmpLat.Replace(",", "."); tmpLng = tmpLng.Replace(",", "."); } // get the double values of the latitude and longitude Double.TryParse(tmpLat, out lat); Double.TryParse(tmpLng, out lng); // write the latitude and longitude to the spin editors rseLatitude.Value = (decimal)lat; rseLongitude.Value = (decimal)lng; // prevent the case when no color is selected if (rlvLandmarkColors.SelectedItem == null) rlvLandmarkColors.SelectedIndex = 0; // prevent the case when no icon is selected if (rlvIcons.SelectedItem == null) rlvIcons.SelectedIndex = 0; KeyValuePair landType = (KeyValuePair)rlvIcons.SelectedItem.DataBoundItem; Color color = (Color)rlvLandmarkColors.SelectedItem.DataBoundItem; // if a new landmark was selected if (rddlLandmarks.SelectedIndex == 0) { String datasetCMD = "setDataset,NewLandView"; datasetCMD = datasetCMD + "," + MainForm2.FixDoubleLAT(lat.ToString()) + "," + MainForm2.FixDoubleLNG(lng.ToString()) + "," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + MainForm2.FixComma(rtbLandName.Text.Length > 0 ? rtbLandName.Text : "Unnamed") + "," + "speed" + "," + "0" + "," + MainForm2.FixComma(rtbLandDesc.Text) + "," + "landmarks/" + GetLandmarkIcon(landType.Value.Idx, color, GetIconSize()) + "," + "false" + "," + "false" + "," + "false"; datasetCMD = datasetCMD.Replace(';', ' '); // send commands to map in order to remove previous new landmark, // add the new one with its label mapGoogles.ExecuteScript("window.GWTcallback('removeDataset,NewLandView');"); mapGoogles.ExecuteScript("window.GWTcallback('" + datasetCMD + "');"); mapGoogles.ExecuteScript("window.GWTcallback('" + "putOnMap,false,NewLandView');"); System.Threading.Thread.Sleep(100); mapGoogles.ExecuteScript("window.GWTcallback('" + "putLabels,NewLandView');"); //if (docLoad) // mapGoogles.ExecuteScript("window.GWTcallback('centerzoom," + MainForm2.FixDoubleLAT(lat + "") + "," + MainForm2.FixDoubleLNG(lng + "") + ",-1');"); } else { //GetLandmarkIcon(land) mapGoogles.ExecuteScript("window.GWTcallback('updateDataset,LandView," + MainForm2.FixDoubleLAT(lat + "") + "," + MainForm2.FixDoubleLNG(lng + "") + "," + DateTime.Now.ToString() + "," + MainForm2.FixComma(rtbLandName.Text.Length > 0 ? rtbLandName.Text : "Unnamed") + "," + "speed" + "," + "0" + "," + MainForm2.FixComma(rtbLandDesc.Text) + "," + "landmarks/" + GetLandmarkIcon(landType.Value.Idx, color, GetIconSize()) + "," + "false" + "," + "false" + "," + "false" + "');"); mapGoogles.ExecuteScript("window.GWTcallback('putOnMap,false,LandView');"); //if (docLoad) // mapGoogles.ExecuteScript("window.GWTcallback('centerzoom," + MainForm2.FixDoubleLAT(lat + "") + "," + MainForm2.FixDoubleLNG(lng + "") + ",-1');"); } } private int previousLandmarkPosition = 0; private bool ddlLandmarkChanging = false; /// /// Event handler for when the Selected Landmark had been changed. This function /// will reset the UI elements values and fill focus the Landmark on the map /// private void rddlLandmarks_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) { // remove previous NewLandmark when the previous position was the New Landmark one if (previousLandmarkPosition == 0 && mapGoogles != null) { mapGoogles.ExecuteScript("window.GWTcallback('removeDataset,NewLandView');"); } // save current position as previous previousLandmarkPosition = e.Position; if (e.Position == 0) { // reset landmark values rtbLandName.ResetText(); rtbLandAddress.ResetText(); rtbLandDesc.ResetText(); // reset latitude and longitude rseLatitude.Value = 0; rseLongitude.Value = 0; // reset colors and icons rlvLandmarkColors.SelectedIndex = 0; rlvIcons.SelectedIndex = 0; // disable delete button pb_DeleteLandmark.Enabled = false; pb_DeleteLandmark.Cursor = Cursors.Default; pb_DeleteLandmark.Image = global::Dispatcher.Properties.Resources.trash_disabled; } else if (e.Position > 0) { if (rddlLandmarks.SelectedItem != null) { LandmarkUI land = rddlLandmarks.SelectedItem.DataBoundItem as LandmarkUI; if (land != null) { // reset landmark values rtbLandName.Text = land.Name; rtbLandAddress.Text = land.Address; rtbLandDesc.Text = land.Description; // reset latitude and longitude rseLatitude.Value = (decimal)land.Latitude; rseLongitude.Value = (decimal)land.Longitude; // set color, icon and icon size rlvLandmarkColors.SelectedIndex = colorsList.IndexOf(land.Color); // select Callout alert chklCallout.Checked = land.Callout; RadListDataItem selectedSeverityItem = rddlSeverity.Items.FirstOrDefault(d => (int)d.Value == land.CalloutSeverity); if (selectedSeverityItem != null) rddlSeverity.SelectedItem = selectedSeverityItem; else rddlSeverity.SelectedIndex = 2; // check to see if the type of landmark exists and then get the index of landmark type // from the alfabethicall order rlvIcons.SelectedIndex = landmarkTypesList.ContainsKey(land.TypeIdx) ? landmarkTypesList[land.TypeIdx].CrtIdx : 0; // change the toggle buttons state ChangeIconSizeToggleButtons(land.Size); { mapGoogles.ExecuteScript("window.GWTcallback('updateDataset,LandView," + MainForm2.FixDoubleLAT(land.Latitude + "") + "," + MainForm2.FixDoubleLNG(land.Longitude + "") + "," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + MainForm2.FixComma(land.Name) + "," + "speed" + "," + "0" + "," + MainForm2.FixComma(land.Description) + "," + "landmarks/" + GetLandmarkIcon(land.TypeIdx, land.Color, land.Size) + "," + "false" + "," + "false" + "," + "false" + "');"); mapGoogles.ExecuteScript("window.GWTcallback('putOnMap,false,LandView');"); if (docLoad) mapGoogles.ExecuteScript("window.GWTcallback('centerzoom," + MainForm2.FixDoubleLAT(land.Latitude + "") + "," + MainForm2.FixDoubleLNG(land.Longitude + "") + ",-1');"); } } // enable delete button pb_DeleteLandmark.Enabled = true; pb_DeleteLandmark.Cursor = Cursors.Hand; pb_DeleteLandmark.Image = global::Dispatcher.Properties.Resources.trash_activ; } } // flag that the change from the combobox had finished ddlLandmarkChanging = false; } /// /// Event handler for when the value inside the landmark combobox is changing. This /// will have to prevent others UI controls to change the map and flod it /// private void rddlLandmarks_SelectedIndexChanging(object sender, Telerik.WinControls.UI.Data.PositionChangingCancelEventArgs e) { ddlLandmarkChanging = true; } /// /// Change the toggle button which is on depending on the state received /// as a parameter /// /// The desired icon size which needs to be selected private void ChangeIconSizeToggleButtons(Safedispatch_4_0.LandmarkUI.IconSize size) { // find out which value needs to be on if (size == Safedispatch_4_0.LandmarkUI.IconSize.SMALL) rrbSmall.CheckState = CheckState.Checked; else if (size == Safedispatch_4_0.LandmarkUI.IconSize.MEDIUM) rrbMedium.CheckState = CheckState.Checked; else if (size == Safedispatch_4_0.LandmarkUI.IconSize.LARGE) rrbLarge.CheckState = CheckState.Checked; } /// /// Event handler for when the Alerts pictureBox or Label are pressed /// This will cause the Alerts GroupBox to be brought to front /// private void AlertsMenu_Click(object sender, EventArgs e) { if(sender == pbAlerts || sender == labelAlerts) rgbAlerts.BringToFront(); else if(sender == radLabel1 || sender == pictureBox1) rgbAlertsLand.BringToFront(); } /// /// Event handler for when the Style pictureBox or Label are pressed /// This will cause the Style GroupBox to be brought to front /// private void StyleMenu_Click(object sender, EventArgs e) { if(sender == pbStyle || sender == labelStyle) rgbStyle.BringToFront(); else if(sender == pictureBox2 || sender == radLabel21) rgbStyleLand.BringToFront(); } /// /// Event handler for when the speed limit checkbox state is changed /// private void rcbSpeedLimit_ToggleStateChanged(object sender, StateChangedEventArgs args) { rseSpeedLimit.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } /// /// Event handler for when the unit message checkbox state is changed /// private void rcbUnitMessage_ToggleStateChanged(object sender, StateChangedEventArgs args) { rtbUnitMessage.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } /// /// Event handler for when the units alert checkbox state is changed /// private void rcbUnitsAlert_ToggleStateChanged(object sender, StateChangedEventArgs args) { rtbUnitsMessage.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); rcbddUnitsList.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } /// /// Event handler for when the email alert checkbox state is changed /// private void rcbEmailAlert_ToggleStateChanged(object sender, StateChangedEventArgs args) { rtbEmailAddress.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); rtbEmailMessage.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } /// /// Event handler for when the Callout Zones alert checkbox state is changed /// private void chkzCallout_ToggleStateChanged(object sender, StateChangedEventArgs args) { lbzCalloutSeverity.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); rddzSeverity.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } /// /// Event handler for when the Callout LAndmarks alert checkbox state is changed /// private void chklCallout_ToggleStateChanged(object sender, StateChangedEventArgs args) { lblCalloutSeverity.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); rddlSeverity.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } private string currentTab = "landmark"; private string activeTab = "landmark"; /// /// Event handler for when the user enters in the Geofences Tab /// This will populate the geofences list, if needed, hide landmarks /// and display all geofences /// private void GeofencesWindow_Enter(object sender, EventArgs e) { // select 'New Geofence' item of the geofences list if (currentTab.Equals("landmark")) { // remove all Landmarks RemoveLandmarkDataset("LandView"); RemoveLandmarkDataset("NewLandView"); // display all geofences DisplayGeofencesOnMap(); currentTab = "geofence"; } /* else if(currentTab.Equals("geofence")) { // the tab is loading currentTab = "landmark"; // remove all Landmarks RemoveLandmarkDataset("LandView"); RemoveLandmarkDataset("NewLandView"); // display all geofences DisplayGeofencesOnMap(); // fake the change of index in order to set the new polygon state //rddlGeofences_SelectedIndexChanged(rddlGeofences, new Telerik.WinControls.UI.Data.PositionChangedEventArgs(rddlGeofences.SelectedIndex)); }*/ activeTab = "geofence"; } /// /// Event handler for when the user enters in the Landmarks Tab /// This will populate the landmarks list, if needed, hide geofences /// and display all landmarks /// private void LandmarksWindow_Enter(object sender, EventArgs e) { if (docLoad && currentTab.Equals("geofence")) { // clear all geofences from the map RemoveAllGeofences(); DisplayAllLandmarksOnMap(); currentTab = "landmark"; // fake the change of index in order to set the new landmark state //rddlLandmarks_SelectedIndexChanged(rddlLandmarks, new Telerik.WinControls.UI.Data.PositionChangedEventArgs(rddlLandmarks.SelectedIndex)); } activeTab = "landmark"; } /// /// Event handler for when the user enters in the Map Tab /// This will keep a track of windows focus /// private void mapWindow_Enter(object sender, EventArgs e) { activeTab = "map"; } /// /// Event handler for when the mouse enters over the Delete or /// Reset Landmark picture boxes /// private void pbDeleteAction_MouseEnter(object sender, EventArgs e) { if ((PictureBox)sender == pb_DeleteLandmark) { pb_DeleteLandmark.Image = global::Dispatcher.Properties.Resources.trash_over; label_DeleteLandmark.ForeColor = Color.Black; } else if ((PictureBox)sender == pb_DeleteGeofence) { pb_DeleteGeofence.Image = global::Dispatcher.Properties.Resources.trash_over; } } /// /// Event handler for when the mouse leaves the Delete or /// Reset Landmark picture boxes /// private void pbDeleteAction_MouseLeave(object sender, EventArgs e) { if ((PictureBox)sender == pb_DeleteLandmark) { pb_DeleteLandmark.Image = global::Dispatcher.Properties.Resources.trash_activ; label_DeleteLandmark.ForeColor = Color.FromArgb(158, 158, 158); } else if ((PictureBox)sender == pb_DeleteGeofence) { pb_DeleteGeofence.Image = global::Dispatcher.Properties.Resources.trash_activ; } } /// /// Event handler for when the mouse enters over the Delete or /// Reset Landmark labels /// private void labelLandmarkAction_MouseEnter(object sender, EventArgs e) { ((RadLabel)sender).ForeColor = Color.FromArgb(0, 0, 0); if ((RadLabel)sender == label_DeleteLandmark) pbDeleteAction_MouseLeave(pb_DeleteLandmark, null); } /// /// Event handler for when the mouse leaves the Delete or /// Reset Landmark labels /// private void labelLandmarkAction_MouseLeave(object sender, EventArgs e) { ((RadLabel)sender).ForeColor = Color.FromArgb(158, 158, 158); if ((RadLabel)sender == label_DeleteLandmark) pbDeleteAction_MouseLeave(pb_DeleteLandmark, null); } /// /// Reset the values from all UI controls when the reset button is pressed /// private void pb_ResetLandmark_Click(object sender, EventArgs e) { // remove previous landmark with this name // RemoveLandmarkDataset(rtbLandName.Text); // trigger the event for changing the combobo item rddlLandmarks_SelectedIndexChanged(null, new Telerik.WinControls.UI.Data.PositionChangedEventArgs(rddlLandmarks.SelectedIndex)); } /// /// Delete the Landmark which is selected /// private void pb_DeleteLandmark_Click(object sender, EventArgs e) { LandmarkUI landmark = rddlLandmarks.SelectedItem.DataBoundItem as LandmarkUI; if (landmark == null) return; Boolean validanswer = true; // stupid thing abount the password from the old version if (MainForm2.userIDX != landmark.UserIdx) { validanswer = false; if (landmark.UserIdx != 1) { TabName tmp = new TabName((String)MainForm2.userIDHash[landmark.UserIdx], true); tmp.ShowDialog(); string password = tmp.Name; if (password.ToUpper().CompareTo(((String)MainForm2.passUserHash[landmark.UserIdx]).ToUpper()) == 0) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } else { TabName tmp = new TabName("administrator", true); tmp.ShowDialog(); string password = tmp.Name; if (smdbObj.test_user(landmark.UserIdx, password)) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } } if (validanswer) { // display the delete dialog DialogResult dr2 = RadMessageBox.Show(this, mess1 + "\r\n" + col0 + " = " + rtbLandName.Text + "\r\n" + col1 + " = " + rtbLandDesc.Text + "\r\n" + col2 + " = " + rseLatitude.Value + "\r\n" + col3 + " = " + rseLongitude.Value + "\r\n" + mess2, mess5, MessageBoxButtons.YesNo, RadMessageIcon.Exclamation); if (dr2 == DialogResult.Yes) { try { // delete the landmark from the database smdbObj.Delete_Place(landmark.Idx + ""); parent.DisplayToast(string.Format(MainForm2.returnLNGString("LandDelSucces"), rtbLandName.Text), string.Format(MainForm2.returnLNGString("HTMLLandDelSucces"), rtbLandName.Text)); // remove the landmark from the hash MainForm2.LandIDHash.Remove(landmark.Idx); // remove the landmark from the dataset RemoveLandmarkFromDataset("LandView", landmark.Name); } catch (Exception ex) { if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; RadMessageBox.Show(MainForm2.returnLNGString("database"), MainForm2.returnLNGString("war"), MessageBoxButtons.OK, RadMessageIcon.Exclamation); SM.Debug("Ex:" + ex.ToString()); } int idx = rddlLandmarks.SelectedIndex; int newIdx = idx < rddlLandmarks.Items.Count - 1 ? idx : idx - 1; // remove the landmark from the drop down list rddlLandmarks.Items.RemoveAt(rddlLandmarks.SelectedIndex); // select New Landmark Item rddlLandmarks_SelectedIndexChanging(rddlLandmarks, new Telerik.WinControls.UI.Data.PositionChangingCancelEventArgs(newIdx)); rddlLandmarks_SelectedIndexChanged(rddlLandmarks, new Telerik.WinControls.UI.Data.PositionChangedEventArgs(newIdx)); } } } /// /// Save the landmark to the database, add it to the hash and to the /// drop down list /// private void rbSaveLandmark_Click(object sender, EventArgs e) { string password = ""; Place res = new Place(); Boolean saveOK = true; // get the selected Landmark which can be the 'New Landmark' one LandmarkUI landmark = rddlLandmarks.SelectedItem.DataBoundItem as LandmarkUI; if (landmark == null) return; // check if the landmark name was completed if ((rtbLandName.Text.Trim().Length >= 1) && (rtbLandName.Text.Trim() != "\\")) { try { // check if a landmark with same name exists in the database res = smdbObj.test_place_exist(rtbLandName.Text, landmark.Idx + ""); } catch (Exception ex) { SM.Debug("Error Test on save from add new place" + ex.Message); RadMessageBox.Show(MainForm2.returnLNGString("database"), MainForm2.returnLNGString("war"), MessageBoxButtons.OK, RadMessageIcon.Exclamation); return; } // if no error was found until now if (saveOK) { // display a modify message if a similar landmark was found into db if (res != null) { DialogResult dr2 = RadMessageBox.Show(this, messadd + "\r\n" + res.name + " = " + res.desc + "\r\n" + rseLatitude.Value + " = " + res.lat.ToString() + "\r\n" + rseLongitude.Value + " = " + res.lng.ToString() + "\r\n" + messaddquiz, messaddname, MessageBoxButtons.YesNo, RadMessageIcon.Exclamation); if (dr2 == DialogResult.No) saveOK = false; } } if (saveOK) { Boolean validanswer = true; if (MainForm2.userIDX != landmark.UserIdx && landmark.UserIdx > 0 && landmark.Idx > 0) { validanswer = false; if (landmark.UserIdx != 1) { TabName tmp = new TabName((String)MainForm2.userIDHash[landmark.UserIdx], true); DialogResult result = tmp.ShowDialog(); if (result == DialogResult.OK) { password = tmp.Name; if (password.ToUpper().CompareTo(((String)MainForm2.passUserHash[landmark.UserIdx]).ToUpper()) == 0) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } } else { TabName tmp = new TabName("administrator", true); DialogResult result = tmp.ShowDialog(); if (result == DialogResult.OK) { password = tmp.Name; if (smdbObj.test_user(landmark.UserIdx, password)) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } } } if (validanswer) { try { Color color = colorsList[0]; // get the landmark color if (rlvLandmarkColors.SelectedItem != null && rlvLandmarkColors.SelectedItem.DataBoundItem != null) { color = (Color)rlvLandmarkColors.SelectedItem.DataBoundItem; } // get landmark type KeyValuePair landType = (KeyValuePair)rlvIcons.SelectedItem.DataBoundItem; if (landmark.Idx != 0) smdbObj.Delete_Place(landmark.Idx + ""); if (!chklCallout.Checked) rddlSeverity.SelectedIndex = 2; // insert the landmark smdbObj.Insert_Place(rtbLandName.Text, rtbLandDesc.Text, (Double)rseLatitude.Value, (Double)rseLongitude.Value, (landType.Value != null ? landType.Value.Idx + "" : "1") + "", rtbLandAddress.Text, MainForm2.userIDX, color, GetIconSize(), chklCallout.Checked, (int)rddlSeverity.SelectedItem.Value); parent.DisplayToast(string.Format(MainForm2.returnLNGString("LandSaveSucces"), rtbLandName.Text), (rddlLandmarks.SelectedIndex == 0 ? string.Format(MainForm2.returnLNGString("HTMLLandAddedSucces"), rtbLandName.Text) : string.Format(MainForm2.returnLNGString("HTMLLandUpdatedSucces"), rtbLandName.Text) )); if (landmark.Idx != 0) { Int32 tmp = smdbObj.Get_Last_Place_Insert(); smdbObj.Update_all_old_alarms(tmp.ToString(), landmark.Idx + ""); smdbObj.Update_all_old_Reports(tmp.ToString(), landmark.Idx + "", false); } // reload hash tables smdbObj.get_land_and_ID_Hash(); // reload all hash tables ReloadLandmarksDDL(rtbLandName.Text); parent.Send_UDP_cmd("#209#", 0, 0); } catch (Exception ex) { SM.Debug("Error on save from add new place" + ex.Message + ex.StackTrace); RadMessageBox.Show(MainForm2.returnLNGString("database"), MainForm2.returnLNGString("war"), MessageBoxButtons.OK, RadMessageIcon.Exclamation); } } } } else { RadMessageBox.Show(msgNotSave, msgWar, MessageBoxButtons.OK, RadMessageIcon.Error); } } /// /// Remove the landmark from the map /// /// Name for the landmark dateset which needs to be removed private void RemoveLandmarkDataset(String datasetName) { mapGoogles.ExecuteScript("window.GWTcallback('removeDataset," + datasetName + "');"); } /// /// Delete a landmark from the dataset, a.k.a. eliminate it from the map /// /// Dataset name in which the landmark is to be found /// Landmark name which is to be deleted private void RemoveLandmarkFromDataset(String datasetName, String landmarkName) { mapGoogles.ExecuteScript("window.GWTcallback('deletefromdataset," + datasetName + "," + landmarkName + "');"); } /// /// Event when the color had changed for a landmark /// private void rlvLandmarkColors_SelectedIndexChanged(object sender, EventArgs e) { OnSomethingChangedForLandmark(rtbLandName.Text, rtbLandName.Text); if (rddlLandmarks.SelectedItem.Text == MainForm2.returnLNGString("newLand") && isFilterLoaded == true) { VisualSettings.InsertUpdateHTforVisualItems(this.Name, rlvLandmarkColors.Name, rlvLandmarkColors.SelectedIndex.ToString()); VisualSettings.InsertUpdateHTforVisualItems(this.Name, rlvIcons.Name, rlvIcons.SelectedIndex.ToString()); } } /// /// Event when the icon had changed for a landmark /// private void rlvIcons_SelectedIndexChanged(object sender, EventArgs e) { OnSomethingChangedForLandmark(rtbLandName.Text, rtbLandName.Text); if (rddlLandmarks.SelectedItem.Text == MainForm2.returnLNGString("newLand") && isFilterLoaded == true) { VisualSettings.InsertUpdateHTforVisualItems(this.Name, rlvLandmarkColors.Name, rlvLandmarkColors.SelectedIndex.ToString()); VisualSettings.InsertUpdateHTforVisualItems(this.Name, rlvIcons.Name, rlvIcons.SelectedIndex.ToString()); } } /// /// Determin the size of the icon as displayed in the UI /// /// Returns the size of the icon private LandmarkUI.IconSize GetIconSize() { // determin the icon size return rrbMedium.IsChecked ? LandmarkUI.IconSize.MEDIUM : (rrbLarge.IsChecked ? LandmarkUI.IconSize.LARGE : LandmarkUI.IconSize.SMALL); } /// /// The Latitude or Longitude of a landmark had changed /// private void rseLatLng_ValueChanged(object sender, EventArgs e) { OnSomethingChangedForLandmark(rtbLandName.Text, rtbLandName.Text); } /// /// Event which will handle every change of the landmark, meaning color, /// latitude/longitude, type, name /// /// Name of the landmark which will be private void OnSomethingChangedForLandmark(String prevLandmarkName, String crtlandmarkName) { if (rlvIcons.SelectedIndex < 0 || rlvIcons.SelectedItem.DataBoundItem == null) return; if (rlvLandmarkColors.SelectedIndex < 0 || rlvLandmarkColors.SelectedItem.DataBoundItem == null) return; // do not change the icon if the latitude and longitude ar false if (rseLongitude.Value == 0 && rseLongitude.Value == 0) return; KeyValuePair landType = (KeyValuePair)rlvIcons.SelectedItem.DataBoundItem; Color color = (Color)rlvLandmarkColors.SelectedItem.DataBoundItem; string dataSetName = "LandView"; if (rddlLandmarks.SelectedIndex == 0) dataSetName = "NewLandView"; UpdateLandmarkOnMap(dataSetName, (prevLandmarkName.Length > 0 ? prevLandmarkName : "Unnamed"), (double)rseLatitude.Value, (double)rseLongitude.Value, crtlandmarkName.Length > 0 ? crtlandmarkName : "Unnamed", rtbLandDesc.Text, landType.Value.Idx, color, GetIconSize()); } /// /// Update the pin on the map as a change of any parameter of it /// /// Name of the dataset which will be modified /// Latitude of the landmark /// Longitude of the landmark /// Name of the landmark /// Description of the landmark /// Id of the type of the landmark /// Color of the landmark /// Size of the landmark private void UpdateLandmarkOnMap(String datasetName, String prevLandmarkName, Double lat, Double lng, String name, String description, int landmarkTypeID, Color color, LandmarkUI.IconSize size) { if (mapGoogles == null || !docLoad) return; // do not change the map from here in order to prevent all others UI // controls to change the map if (ddlLandmarkChanging) return; mapGoogles.ExecuteScript("window.GWTcallback('deletefromdataset," + datasetName + "," + prevLandmarkName + "');"); Thread.Sleep(100); mapGoogles.ExecuteScript("window.GWTcallback('updateDataset," + datasetName + "," + MainForm2.FixDoubleLAT(lat + "") + "," + MainForm2.FixDoubleLNG(lng + "") + "," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + MainForm2.FixComma(name) + "," + "speed" + "," + "0" + "," + MainForm2.FixComma(description) + "," + "landmarks/" + GetLandmarkIcon(landmarkTypeID, color, size) + "," + "false" + "," + "false" + "," + "false" + "');"); mapGoogles.ExecuteScript("window.GWTcallback('putOnMap,false,LandView');"); Thread.Sleep(100); mapGoogles.ExecuteScript("window.GWTcallback('putOnMap,false," + datasetName + "');"); //if (docLoad) // mapGoogles.ExecuteScript("window.GWTcallback('centerzoom," + MainForm2.FixDoubleLAT(lat + "") + "," + MainForm2.FixDoubleLNG(lng + "") + ",-1');"); } /// /// Event Handler for when the size of the icon had changed. /// This will cause the Toggle Buttons to change the values /// and to trigger the ChangeLandmark event /// private void rrb_CheckStateChanged(object sender, EventArgs e) { RadRadioButton senderButton = sender as RadRadioButton; if (senderButton == null) return; // get current state CheckState state = (senderButton.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? CheckState.Checked : CheckState.Unchecked); // change the toggle button if (senderButton == rrbSmall) rtbSmall.CheckState = state; else if (senderButton == rrbMedium) rtbMedium.CheckState = state; else if (senderButton == rrbLarge) rtbLarge.CheckState = state; // change on the map the size of the landmark if (state == CheckState.Checked) OnSomethingChangedForLandmark(rtbLandName.Text, rtbLandName.Text); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadRadioButton)sender).Name, ((RadRadioButton)sender).IsChecked.ToString()); } /// /// Intercept the mouse up event on the Toggle Buttons in order to /// prevent setting the toggle button to unchecked state and to /// change the radio buttons when a new toggle button becames active /// private void rtb_MouseUp(object sender, MouseEventArgs e) { RadToggleButton toggleSender = sender as RadToggleButton; if (toggleSender == null) return; if ((toggleSender.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On)) { // this means that I have now on state and I can change the state Telerik.WinControls.Enumerations.ToggleState state = Telerik.WinControls.Enumerations.ToggleState.On; // change the state of the radio buttons according to the // radio button if (toggleSender == rtbSmall) rrbSmall.ToggleState = state; else if (toggleSender == rtbMedium) rrbMedium.ToggleState = state; else if (toggleSender == rtbLarge) rrbLarge.ToggleState = state; } else { // force the state to be on because I don't need the user to set this toggle button // to off state toggleSender.ToggleState = Telerik.WinControls.Enumerations.ToggleState.On; } } /// /// Event handler for when the key are pressed on the Landmark/Geofence Name TextBox. /// This will filter the keys in order to allow only letters, digits, space and backspace /// private void rtbName_KeyPress(object sender, KeyPressEventArgs e) { // check to see if letters,digits, backspace or space was pressed and handle them if (Char.IsLetterOrDigit(e.KeyChar) || e.KeyChar == '\b' || e.KeyChar == ' ' || e.KeyChar == '-' || e.KeyChar == '_') { } else { // do now allow the key to update the text e.Handled = true; } } /// /// Event handler for when the text name of the landmark had changed. This /// will update the UI /// private void rtbLandName_TextChanging(object sender, TextChangingEventArgs e) { OnSomethingChangedForLandmark(e.OldValue, e.NewValue); } /// /// Enable or disable the clicks on the map which allows the move of the landmark /// with every click /// private void rcbMoveLandmark_ToggleStateChanged(object sender, StateChangedEventArgs args) { ChangeLandmarkLocationOnClick = rcbMoveLandmark.Checked; if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } /// /// Event handler for when the Selected Geofence had been changed. This function /// will reset the UI elements values and fill focus the Geofence on the map /// private void rddlGeofences_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) { // reset the UI ResetGeofenceUI(); #region NEW GEOFENCE if (e.Position == 0) { rcbEditGeofence.Text = MainForm2.returnLNGString("startDrawGeo"); rcbEditGeofence.Checked = false; // reset geofence values rtbGeofenceName.ResetText(); try { rgvGeofencePoints.DataSource = null; while (rgvGeofencePoints.Rows.Count > 0) rgvGeofencePoints.Rows.RemoveAt(0); } catch (Exception ex) { Utils.WriteLine(ex.ToString(), ConsoleColor.Red); } if (isFilterLoaded && rddlGeofences.Text != MainForm2.returnLNGString("newGeofence")) { // reset opacity and width values rseBorderOpacity.Value = (decimal)0.7; rseBorderWidth.Value = (decimal)4; rseFillOpacity.Value = (decimal)0.7; // reset colors and icons rlvGeofenceBorderColors.SelectedIndex = 0; rlvGeofenceFillColors.SelectedIndex = 0; } // disable delete button pb_DeleteGeofence.Enabled = false; pb_DeleteGeofence.Cursor = Cursors.Default; pb_DeleteGeofence.Image = global::Dispatcher.Properties.Resources.trash_disabled; Color fillColor = Color.Black; if (rlvGeofenceFillColors.SelectedItem != null) fillColor = (Color)rlvGeofenceFillColors.SelectedItem.DataBoundItem; String hexFillColor = "#" + fillColor.R.ToString("X2") + fillColor.G.ToString("X2") + fillColor.B.ToString("X2"); Color borderColor = Color.Black; if (rlvGeofenceBorderColors.SelectedItem != null) borderColor = (Color)rlvGeofenceBorderColors.SelectedItem.DataBoundItem; String hexBorderColor = "#" + borderColor.R.ToString("X2") + borderColor.G.ToString("X2") + borderColor.B.ToString("X2"); if (mapGoogles != null) { if (rcbEditGeofence.Checked) { mapGoogles.ExecuteScript("window.GWTcallback('newPolygon," + rddlGeofences.Text + "," + hexFillColor + "," + MainForm2.FixDoubleLAT(rseFillOpacity.Value.ToString()) + "," + hexBorderColor + "," + MainForm2.FixDoubleLAT(rseBorderOpacity.Value.ToString()) + "," + MainForm2.FixDoubleLAT(rseBorderWidth.Value.ToString()) + "');"); Thread.Sleep(100); mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + rddlGeofences.Text + "');"); } else { Thread.Sleep(100); //mapGoogles.ExecuteScript("window.GWTcallback('endEditPolygon," + "tmpPol" + "');"); } // focus the map in order to prevent change of geofence on keys press mapGoogles.Focus(); } } #endregion #region OLD GEOFENCE else if (e.Position > 0) { if (rddlGeofences.SelectedItem != null) { rcbEditGeofence.Text = MainForm2.returnLNGString("editGeo"); // delete temporary geofence //mapGoogles.ExecuteScript("window.GWTcallback('deletePolygon,tmpPol');"); GeofenceUI geofence = rddlGeofences.SelectedItem.DataBoundItem as GeofenceUI; if (geofence != null) { // set geofence values rtbGeofenceName.Text = geofence.Name; // write points into the list int cont = 0; rgvGeofencePoints.DataSource = null; while (rgvGeofencePoints.Rows.Count > 0) rgvGeofencePoints.Rows.RemoveAt(0); String datasetCMD = ""; String datasetZoom = ""; // populate point and calculate which map zone to be displayed foreach (GeofencePoint point in geofence.points) { rgvGeofencePoints.Rows.AddNew(); rgvGeofencePoints.Rows[cont].Cells[0].Value = (cont + 1).ToString(); rgvGeofencePoints.Rows[cont].Cells[1].Value = global::Dispatcher.Properties.Resources.map; rgvGeofencePoints.Rows[cont].Cells[2].Value = Math.Round(point.Latitude, 5).ToString(); rgvGeofencePoints.Rows[cont].Cells[3].Value = Math.Round(point.Longitude, 5).ToString(); rgvGeofencePoints.Rows[cont].Cells[4].Value = point.Idx; rgvGeofencePoints.Rows[cont].Cells[5].Value = global::Dispatcher.Properties.Resources.trashmic1; datasetCMD = datasetCMD + MainForm2.FixDoubleLAT(point.Latitude.ToString()) + "," + MainForm2.FixDoubleLNG(point.Longitude.ToString()) + ","; datasetZoom = datasetZoom + "," + MainForm2.FixDoubleLAT(point.Latitude.ToString()) + "," + MainForm2.FixDoubleLNG(point.Longitude.ToString()) + ",,,"; cont++; } rgvGeofencePoints.TableElement.ScrollToRow(rgvGeofencePoints.RowCount - 1); // set opacity and width values rseBorderOpacity.Value = (decimal)geofence.BorderOpacity; rseBorderWidth.Value = (decimal)geofence.BorderWidth; rseFillOpacity.Value = (decimal)geofence.FillOpacity; // set color for border and fill rlvGeofenceBorderColors.SelectedIndex = colorsList.IndexOf(geofence.BorderColor); rlvGeofenceFillColors.SelectedIndex = colorsList.IndexOf(geofence.FillColor); // set speed limit value if (MainForm2.isInMile) rseSpeedLimit.Value = (geofence.SpeedLimit > 0 ? (decimal)(geofence.SpeedLimit * 0.621371) : 50); else rseSpeedLimit.Value = (geofence.SpeedLimit > 0 ? (decimal)geofence.SpeedLimit : 50); rcbSpeedLimit.Checked = (geofence.SpeedLimit > 0 ? true : false); // select alert type rcbddAlertType.Items[0].Checked = geofence.AlertTypee == GeofenceUI.AlertType.IN || geofence.AlertTypee == GeofenceUI.AlertType.IN_OUT; rcbddAlertType.Items[1].Checked = (geofence.AlertTypee == GeofenceUI.AlertType.OUT || geofence.AlertTypee == GeofenceUI.AlertType.IN_OUT); // select callout chkzCallout.Checked = geofence.Callout; RadListDataItem selectedSeverityItem = rddzSeverity.Items.FirstOrDefault(d => (int)d.Value == geofence.CalloutSeverity); if (selectedSeverityItem != null) rddzSeverity.SelectedItem = selectedSeverityItem; else rddzSeverity.SelectedIndex = 0; if (isFilterLoaded && rddlGeofences.Text != MainForm2.returnLNGString("newGeofence")) { // select message to unit rcbUnitMessage.Checked = geofence.SendUnitMessage; rtbUnitMessage.Text = geofence.UnitMessage; // select message to units and the checked units rcbUnitsAlert.Checked = geofence.SendUnitsMessage; rtbUnitsMessage.Text = geofence.UnitsMessage; // check for assigned units foreach (RadCheckedListDataItem item in rcbddUnitsList.Items) { Vehicle veh = item.DataBoundItem as Vehicle; if (veh == null) return; // check if the assigned unit id exists inside the units list if (geofence.UnitsIds.Contains(veh.sc_id)) item.Checked = true; } // select email and message addres + body rcbEmailAlert.Checked = geofence.SendEmail; rtbEmailAddress.Text = geofence.EmailAddress; rtbEmailMessage.Text = geofence.EmailBody; } // enable delete button pb_DeleteGeofence.Enabled = true; pb_DeleteGeofence.Cursor = Cursors.Hand; pb_DeleteGeofence.Image = global::Dispatcher.Properties.Resources.trash_activ; // display the geofence on map DisplayGeofencesOnMap(); // start editing the geofence if (rcbEditGeofence.Checked) { mapGoogles.ExecuteScript("window.GWTcallback('endEditPolygon," + geofence.Name + "');"); Thread.Sleep(100); mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + geofence.Name + "');"); } /* else { mapGoogles.ExecuteScript("window.GWTcallback('endEditPolygon," + "tmpPol" + "');"); }*/ } } } #endregion // display a message for when the table elements are empty if (rgvGeofencePoints.RowCount > 0) rgvGeofencePoints.TableElement.Text = ""; else rgvGeofencePoints.TableElement.Text = MainForm2.returnLNGString("pressMap"); } /// /// Event handler for when the value inside the geofence combobox is changing. This /// will have to prevent others UI controls to change the map and flod it /// private void rddlGeofences_SelectedIndexChanging(object sender, Telerik.WinControls.UI.Data.PositionChangingCancelEventArgs e) { // delete temporary geofence if (rddlGeofences.SelectedIndex == 0) mapGoogles.ExecuteScript("window.GWTcallback('deletePolygon,tmpPol');"); } /// /// Reset the values from all UI controls when the reset button is pressed /// private void rbResetGeofence_Click(object sender, EventArgs e) { // delete temporary geofence if (rddlGeofences.SelectedIndex == 0) mapGoogles.ExecuteScript("window.GWTcallback('deletePolygon,tmpPol');"); // trigger the event for changing the combobo item rddlGeofences_SelectedIndexChanged(null, new Telerik.WinControls.UI.Data.PositionChangedEventArgs(rddlGeofences.SelectedIndex)); } /// /// Delete the geofence which is selected /// private void pb_DeleteGeofence_Click(object sender, EventArgs e) { GeofenceUI geofence = rddlGeofences.SelectedItem.DataBoundItem as GeofenceUI; if (geofence == null) return; Boolean validanswer = true; if (MainForm2.userIDX != geofence.UserIdx) { validanswer = false; if (geofence.UserIdx != 1) { TabName tmp = new TabName((String)MainForm2.userIDHash[geofence.UserIdx], true); tmp.ShowDialog(); string password = tmp.Name; if (password.ToUpper().CompareTo(((String)MainForm2.passUserHash[geofence.UserIdx]).ToUpper()) == 0) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } else { TabName tmp = new TabName("administrator", true); tmp.ShowDialog(); string password = tmp.Name; if (smdbObj.test_user(geofence.UserIdx, password)) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } } if (validanswer) { DialogResult dr2 = RadMessageBox.Show(this, mess11 + " " + '"' + rddlGeofences.Text + '"' + " " + messWill + "\r\n" + mess12, mess15, MessageBoxButtons.YesNo, RadMessageIcon.Exclamation); if (dr2 == DialogResult.Yes) { try { smdbObj.Delete_Zone(geofence.Idx + ""); smdbObj.Delete_Zone_Alarm(geofence.Idx + ""); smdbObj.Delete_Zone_Reports(geofence.Idx + ""); MainForm2.ZoneIDHash.Remove(geofence.Idx + ""); parent.DisplayToast(string.Format(MainForm2.returnLNGString("GeoDelSucces"), rddlGeofences.Text), string.Format(MainForm2.returnLNGString("HTMLGeoDelSucces"), rddlGeofences.Text, rgvGeofencePoints.Rows.Count)); } catch (Exception ex) { RadMessageBox.Show(MainForm2.returnLNGString("database"), MainForm2.returnLNGString("war"), MessageBoxButtons.OK, RadMessageIcon.Exclamation); SM.Debug("Ex:" + ex.ToString()); } int idx = rddlGeofences.SelectedIndex; int newIdx = idx < rddlGeofences.Items.Count - 1 ? idx : idx - 1; // remove the geofence from the drop down list rddlGeofences.Items.RemoveAt(rddlGeofences.SelectedIndex); rddlGeofences_SelectedIndexChanging(rddlGeofences, new Telerik.WinControls.UI.Data.PositionChangingCancelEventArgs(newIdx)); rddlGeofences_SelectedIndexChanged(rddlGeofences, new Telerik.WinControls.UI.Data.PositionChangedEventArgs(newIdx)); if(rddlGeofences.Items.Count == 1) { // remove the final geofence RemoveAllGeofences(); } //rddlGeofences.SelectedIndex = (idx < rddlGeofences.Items.Count -1 ? idx : idx - 1); //rddlGeofences.SelectedIndex = 0; // reload all geofences //ReloadGeofencesDDL(""); } } } /// /// Event handler when a geofence needs to be saved /// private void rbSaveGeofence_Click(object sender, EventArgs e) { int geofenceIdx = 0; int geofenceUserIdx = -1; if (rtbGeofenceName.Text.Equals(MainForm2.returnLNGString("newGeofence"))) { RadMessageBox.Show("You are not allowed to use 'New Geofence' as name for a geofence", "Wrong geofence name", MessageBoxButtons.OK, RadMessageIcon.Error); return; } if (rcbUnitsAlert.Checked && rcbddUnitsList.Text == "") { RadMessageBox.Show("You have to select at least one unit!", "Error", MessageBoxButtons.OK, RadMessageIcon.Error); return; } // if a new geofence should be added if (rddlGeofences.SelectedIndex != 0) { GeofenceUI geofence = rddlGeofences.SelectedItem.DataBoundItem as GeofenceUI; if (geofence != null) { geofenceIdx = geofence.Idx; geofenceUserIdx = geofence.UserIdx; } } // check if another geofence exists with the same name { Boolean saveOK = true; foreach (Int32 obj in MainForm2.ZoneIDHash.Keys) { if (((ZoneClass)MainForm2.ZoneIDHash[obj]).name.ToUpper() == rddlGeofences.Text.ToUpper()) { if (geofenceIdx != 0) { if (geofenceIdx != obj) { saveOK = false; RadMessageBox.Show(mess4 + " " + '"' + rddlGeofences.Text + '"' + " " + mess6); break; } } else { saveOK = false; RadMessageBox.Show(mess4 + " " + '"' + rddlGeofences.Text + '"' + " " + mess6); break; } } } // check if the name of points is greater than three if ((saveOK) && (rgvGeofencePoints.RowCount < 3)) { RadMessageBox.Show(need3Points, msgWar, MessageBoxButtons.OK, RadMessageIcon.Error); saveOK = false; return; } // check if the email addresses are valid if (rcbEmailAlert.Checked && saveOK) { bool areEmailValids = (rtbEmailAddress.Text.Length > 0 ? true : false); string[] emails = rtbEmailAddress.Text.Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries); foreach (String email in emails) { // check if there is an email which is invalid if (!Utils.IsValidEmail(email)) areEmailValids = false; } // display invalid emails message if (!areEmailValids) { RadMessageBox.Show(msgInvalidEmail); saveOK = false; return; } } if (saveOK) { // redundant check for geofence if ((rtbGeofenceName.Text.Trim().Length >= 1) && (rtbGeofenceName.Text.Trim() != "\\")) { bool validanswer = true; if (MainForm2.userIDX != geofenceUserIdx && geofenceUserIdx > 0 && geofenceIdx > 0) { validanswer = false; if (geofenceUserIdx != 1) { TabName tmp = new TabName((String)MainForm2.userIDHash[geofenceUserIdx], true); DialogResult result = tmp.ShowDialog(); if (result == DialogResult.OK) { String password = tmp.Name; if (password.ToUpper().CompareTo(((String)MainForm2.passUserHash[geofenceUserIdx]).ToUpper()) == 0) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } } else { TabName tmp = new TabName("administrator", true); DialogResult result = tmp.ShowDialog(); if (result == DialogResult.OK) { String password = tmp.Name; if (smdbObj.test_user(geofenceUserIdx, password)) validanswer = true; else RadMessageBox.Show(MainForm2.returnLNGString("passIsWrong"), MainForm2.returnLNGString("error"), MessageBoxButtons.OK, RadMessageIcon.Error); } } } if (!validanswer) return; try { // delete previous geofence if an update is desired if (geofenceIdx != 0) smdbObj.Delete_Zone(geofenceIdx + ""); // get the type of the alarm GeofenceUI.AlertType alertType = GeofenceUI.AlertType.NONE; if (rcbddAlertType.Items[0].Checked && rcbddAlertType.Items[1].Checked) alertType = GeofenceUI.AlertType.IN_OUT; else if (rcbddAlertType.Items[0].Checked) alertType = GeofenceUI.AlertType.IN; else if (rcbddAlertType.Items[1].Checked) alertType = GeofenceUI.AlertType.OUT; String listOfUnits = ""; String imeilist = ""; if (rcbUnitsAlert.Checked) { // check for assigned units foreach (RadCheckedListDataItem item in rcbddUnitsList.Items) { Vehicle veh = item.DataBoundItem as Vehicle; if (veh == null) continue; // get the checked items and add them to the list if (item.Checked) { // add imei and id to the lists listOfUnits += veh.sc_id.ToString() + ","; imeilist += veh.IMEI.ToString() + ","; } } } // get and convert geofence value Int32 Speedval = 0; if (rcbSpeedLimit.Checked) Speedval = (MainForm2.isInMile ? (Int32)Math.Round((Int32)rseSpeedLimit.Value * 1.60934) : (Int32)rseSpeedLimit.Value); // get fillColor and borderColor Color fillColor = (Color)rlvGeofenceFillColors.SelectedItem.DataBoundItem; Color borderColor = (Color)rlvGeofenceBorderColors.SelectedItem.DataBoundItem; // get all geofence points List points = new List(); foreach (GridViewRowInfo row in rgvGeofencePoints.Rows) { GridViewCellInfo lat = row.Cells["Lat"]; GridViewCellInfo lng = row.Cells["Lng"]; Decimal latD = (Decimal)lat.Value; Decimal lngD = (Decimal)lng.Value; points.Add(new PointonZone((double)latD, (double)lngD, geofenceIdx)); } if (!chkzCallout.Checked) rddzSeverity.SelectedIndex = 2; if (!rcbEmailAlert.Checked) { rtbEmailAddress.ResetText(); rtbEmailMessage.ResetText(); } // insert the geofence string from = (MainForm2.radioType == RADIOTYPE.SIMOCO) ? "Simoco" : (MainForm2.radioType == RADIOTYPE.EXCERA) ? "Excera" : "SafeMobile"; Int32 newIdx = smdbObj.InsertGeofence(rtbGeofenceName.Text, fillColor, rseFillOpacity.Value, borderColor, rseBorderWidth.Value, rseBorderOpacity.Value, points, alertType, Speedval, rcbUnitMessage.Checked ? rtbUnitMessage.Text.Replace("\'", "\'\'") : "", rcbUnitsAlert.Checked ? rtbUnitsMessage.Text.Replace("\'", "\'\'") : "", listOfUnits, imeilist, rcbEmailAlert.Checked ? rtbEmailAddress.Text.Replace("\'", "\'\'") : "", "Geofence Alert from " + from, rtbEmailMessage.Text.Replace("\'", "\'\'"), chkzCallout.Checked, (int)rddzSeverity.SelectedItem.Value, MainForm2.userIDX); parent.DisplayToast(string.Format(MainForm2.returnLNGString("GeoSaveSucces"), rtbGeofenceName.Text), (rddlGeofences.SelectedIndex == 0 ? string.Format(MainForm2.returnLNGString("HTMLGeoAddedSucces"), rtbGeofenceName.Text, rgvGeofencePoints.Rows.Count) : string.Format(MainForm2.returnLNGString("HTMLGeoUpdatedSucces"), rtbGeofenceName.Text, rgvGeofencePoints.Rows.Count) )); // update alerts if updated a previous geofence if (geofenceIdx != 0) { smdbObj.Update_all_old_alarms(newIdx + "", geofenceIdx + ""); smdbObj.Update_all_old_Reports(newIdx + "", geofenceIdx + "", true); } // reload zones inside the hash tables MainForm2.ZoneIDHash = smdbObj.get_all_zone(); // reload Geofences ComboBox ReloadGeofencesDDL(rtbGeofenceName.Text); parent.Send_UDP_cmd("#209#", 0, 0); Utils.WriteLine("Send Restart Command to App Server (209)", ConsoleColor.Yellow); } catch (Exception ex) { SM.Debug("Erorr insert zone:" + ex.ToString()); } } else { RadMessageBox.Show(msgNotSaveZone, msgWar, MessageBoxButtons.OK, RadMessageIcon.Exclamation); } MainForm2.ForceSaveZone = false; } } //end save zone } /// /// Event which will handle every change of the geofence, meaning border and /// fill color, border width, opacity, name /// /// Name of the Geofence before editing /// Name of the Geofence after editing private void OnSomethingChangedForGeofence(String prevGeofenceName, String crtGeofenceName) { Color fillColor = Color.Black; if (rlvGeofenceFillColors.SelectedItem != null) fillColor = (Color)rlvGeofenceFillColors.SelectedItem.DataBoundItem; String hexFillColor = "#" + fillColor.R.ToString("X2") + fillColor.G.ToString("X2") + fillColor.B.ToString("X2"); Color borderColor = Color.Black; if (rlvGeofenceBorderColors.SelectedItem != null) borderColor = (Color)rlvGeofenceBorderColors.SelectedItem.DataBoundItem; String hexBorderColor = "#" + borderColor.R.ToString("X2") + borderColor.G.ToString("X2") + borderColor.B.ToString("X2"); if (rddlGeofences.SelectedIndex == 0) crtGeofenceName = "tmpPol"; if (mapGoogles != null) mapGoogles.ExecuteScript("window.GWTcallback('updatePolygonStyle," + crtGeofenceName + "," + hexFillColor + "," + MainForm2.FixDoubleLAT(rseFillOpacity.Value.ToString()) + "," + hexBorderColor + "," + MainForm2.FixDoubleLAT(rseBorderOpacity.Value.ToString()) + "," + MainForm2.FixDoubleLAT(rseBorderWidth.Value.ToString()) + "');"); } /// /// Event handler for when the value of a spin editor had changed. This will /// cause the geofence to be redraw one map /// private void rseGeofence_ValueChanged(object sender, EventArgs e) { OnSomethingChangedForGeofence(rddlGeofences.Text, rddlGeofences.Text); rse_ValueChanged(sender, e); } /// /// Event when the color had changed for a geofence, for border or fill /// private void rlvGeofenceColors_SelectedIndexChanged(object sender, EventArgs e) { OnSomethingChangedForGeofence(rddlGeofences.Text, rddlGeofences.Text); if (rddlGeofences.SelectedItem.Text == MainForm2.returnLNGString("newGeofence") && isFilterLoaded == true) { VisualSettings.InsertUpdateHTforVisualItems(this.Name, rlvGeofenceFillColors.Name, rlvGeofenceFillColors.SelectedIndex.ToString()); VisualSettings.InsertUpdateHTforVisualItems(this.Name, rlvGeofenceBorderColors.Name, rlvGeofenceBorderColors.SelectedIndex.ToString()); } } /// /// Event handler for when a latitude/longitude position had finished editing /// private void rgvGeofencePoints_CellEndEdit(object sender, GridViewCellEventArgs e) { Utils.WriteLine("Edit : " + e.Row.Index + " | " + e.Column.Index, ConsoleColor.Red); if (rddlGeofences.SelectedIndex == 0) // update the state of the geofence UpdateNewGeofence(); // display the geofence on map DisplayGeofencesOnMap(); // start editing the geofence if (rcbEditGeofence.Checked) { mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + rddlGeofences.Text + "');"); } } /// /// Set the default values for the new lat lng point /// private void rgvGeofencePoints_DefaultValuesNeeded(object sender, GridViewRowEventArgs e) { if (rgvGeofencePoints.CurrentRow is GridViewNewRowInfo) { // set delete icon e.Row.Cells["ColDelete"].Value = global::Dispatcher.Properties.Resources.trashmic1; if (rgvGeofencePoints.RowCount > 0) { e.Row.Cells["Number"].Value = rgvGeofencePoints.RowCount + 1; e.Row.Cells["Lat"].Value = rgvGeofencePoints.Rows[rgvGeofencePoints.RowCount - 1].Cells["Lat"].Value; e.Row.Cells["Lng"].Value = rgvGeofencePoints.Rows[rgvGeofencePoints.RowCount - 1].Cells["Lng"].Value; } else { e.Row.Cells["Number"].Value = rgvGeofencePoints.RowCount + 1; e.Row.Cells["Lat"].Value = 0; e.Row.Cells["Lng"].Value = 0; } } } /// /// Event when the show geofence state is change, this will cause the other /// geofences apart from the one in the combobox, to be hidden or shown /// on the map /// private void rcbShowGeofences_ToggleStateChanged(object sender, StateChangedEventArgs args) { // display the geofence on map DisplayGeofencesOnMap(); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); // start editing the geofence if (rcbEditGeofence.Checked) { mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + rddlGeofences.Text + "');"); } } /// /// Intercept delete point event in order to reset the geofence on the map /// private void rgvGeofencePoints_CellClick(object sender, GridViewCellEventArgs e) { if (e.ColumnIndex == 5 && e.RowIndex != -1) { Utils.WriteLine("Nr of rows : " + rgvGeofencePoints.RowCount); DialogResult dr2 = RadMessageBox.Show(this, messPointToDel + "\r\n" + "Latitude" + " = " + rgvGeofencePoints.Rows[e.RowIndex].Cells[2].Value.ToString() + "\r\n" + "Longitude" + " = " + rgvGeofencePoints.Rows[e.RowIndex].Cells[3].Value.ToString() + "\r\n" + mess12, mess16, MessageBoxButtons.YesNo, RadMessageIcon.Exclamation); if (dr2 == DialogResult.Yes) { try { // remove point from the grid rgvGeofencePoints.Rows.RemoveAt(e.RowIndex); if (rgvGeofencePoints.RowCount == 0) { rgvGeofencePoints.DataSource = new DataTable(); rgvGeofencePoints.Refresh(); } rgvGeofencePoints.Invalidate(); // reset the crt index number for (int i = 0; i < rgvGeofencePoints.Rows.Count; i++) rgvGeofencePoints.Rows[i].Cells[0].Value = (i + 1).ToString(); if (rddlGeofences.SelectedIndex == 0) // update the state of the geofence UpdateNewGeofence(); // display the geofence on map DisplayGeofencesOnMap(); // start editing the geofence if (rcbEditGeofence.Checked) { mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + rddlGeofences.Text + "');"); } } catch (Exception ex) { SM.Debug("Error on delete point:" + ex.ToString()); } } } } /// /// Intercept when a document window had changed it's state, on double click /// or drag/drop, and set that it is not allowed to close/hide it /// private void radDock1_DockStateChanged(object sender, DockWindowEventArgs e) { e.DockWindow.ToolCaptionButtons = ToolStripCaptionButtons.None; e.DockWindow.AllowedDockState = AllowedDockState.Docked | AllowedDockState.TabbedDocument; } /// /// 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 rgvGeofencePoints_RowsChanged(object sender, GridViewCollectionChangedEventArgs e) { // display a message for when the table elements are empty if (rgvGeofencePoints.RowCount > 0) rgvGeofencePoints.TableElement.Text = ""; else rgvGeofencePoints.TableElement.Text = "Press on the map in order to" + Environment.NewLine + " add points for the geofence."; } #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 toggleButton_StateChanged(object sender, StateChangedEventArgs args) { if (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On) ((RadToggleButton)sender).ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; else ((RadToggleButton)sender).ButtonElement.ButtonFillElement.BackColor = Color.White; } private void LandZoneCfg_Load(object sender, EventArgs e) { // change color for the toggle button if (rtbLarge.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On) rtbLarge.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; else if (rtbMedium.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On) rtbMedium.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; else if (rtbSmall.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On) rtbSmall.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; VisualSettings.loadUserVisualSettings(this.Name, this.radScrollablePanel1.PanelContainer, MainForm2.HashVal); VisualSettings.loadUserVisualSettings(this.Name, this.rgbStyle, MainForm2.HashVal); VisualSettings.loadUserVisualSettings(this.Name, this.rgbAlerts, MainForm2.HashVal); VisualSettings.loadUserVisualSettings(this.Name, this.rgbStyleLand, MainForm2.HashVal); VisualSettings.loadUserVisualSettings(this.Name, this.rgbAlertsLand, MainForm2.HashVal); isFilterLoaded = true; } /// /// Change background color for the row according to its state and theme /// private void rgvGeofencePoints_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; } private void rgvGeofencePoints_CellFormatting(object sender, CellFormattingEventArgs e) { // do not highlight the cell on which was clicked if (e.CellElement.IsCurrent) e.CellElement.IsCurrent = false; } private void pbEditGeofence_Click(object sender, EventArgs e) { GeofenceUI geofence = rddlGeofences.SelectedItem.DataBoundItem as GeofenceUI; if (geofence != null) { // set geofence values //rtbGeofenceName.Text = geofence.Name; string GeoName = rddlGeofences.Text; // set name for the geofence as tmpPol if new Geofence if (rddlGeofences.SelectedIndex == 0) GeoName = "tmpPol"; if (pbEditGeofence.Tag.Equals("disabled")) { pbEditGeofence.Tag = "enabled"; // start editing the geofence mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + GeoName + "');"); pbEditGeofence.Image = themeEditActive_Image; } else { pbEditGeofence.Tag = "disabled"; // start editing the geofence mapGoogles.ExecuteScript("window.GWTcallback('endEditPolygon," + GeoName + "');"); pbEditGeofence.Image = themeEditDisabled_Image; } } } private void rgvGeofencePoints_UserAddedRow(object sender, GridViewRowEventArgs e) { Utils.WriteLine("ADDED", ConsoleColor.DarkCyan); if (rddlGeofences.SelectedIndex == 0) // update the state of the geofence UpdateNewGeofence(); // display the geofence on map DisplayGeofencesOnMap(); // start editing the geofence if (rcbEditGeofence.Checked) { mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + rddlGeofences.Text + "');"); } } private void rse_ValueChanged(object sender, EventArgs e) { if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadSpinEditor)sender).Name, ((RadSpinEditor)sender).Value.ToString()); } /// /// Enable or disable the editing of selected geofence by actions on map /// private void rcbEditGeofence_ToggleStateChanged(object sender, StateChangedEventArgs args) { GeofenceUI geofence = rddlGeofences.SelectedItem.DataBoundItem as GeofenceUI; if (geofence != null) { // set geofence values //rtbGeofenceName.Text = geofence.Name; string GeoName = rddlGeofences.Text; // set name for the geofence as tmpPol if new Geofence if (rddlGeofences.SelectedIndex == 0) GeoName = "tmpPol"; if (rcbEditGeofence.Checked) { // send the new polygon command if the selected index is 'New Geofence' // this must be done because the start edit of a new geofence with 0 points // not working if (rgvGeofencePoints.RowCount == 0) { Color fillColor = Color.Black; if (rlvGeofenceFillColors.SelectedItem != null) fillColor = (Color)rlvGeofenceFillColors.SelectedItem.DataBoundItem; String hexFillColor = "#" + fillColor.R.ToString("X2") + fillColor.G.ToString("X2") + fillColor.B.ToString("X2"); Color borderColor = Color.Black; if (rlvGeofenceBorderColors.SelectedItem != null) borderColor = (Color)rlvGeofenceBorderColors.SelectedItem.DataBoundItem; String hexBorderColor = "#" + borderColor.R.ToString("X2") + borderColor.G.ToString("X2") + borderColor.B.ToString("X2"); mapGoogles.ExecuteScript("window.GWTcallback('newPolygon," + GeoName + "," + hexFillColor + "," + MainForm2.FixDoubleLAT(rseFillOpacity.Value.ToString()) + "," + hexBorderColor + "," + MainForm2.FixDoubleLAT(rseBorderOpacity.Value.ToString()) + "," + MainForm2.FixDoubleLAT(rseBorderWidth.Value.ToString()) + "');"); Thread.Sleep(100); } // start editing the geofence mapGoogles.ExecuteScript("window.GWTcallback('startEditPolygon," + GeoName + "');"); } else // start editing the geofence mapGoogles.ExecuteScript("window.GWTcallback('endEditPolygon," + GeoName + "');"); if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString()); } } private void RadTextBox_Leave(object sender, EventArgs e) { if (isFilterLoaded) VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadTextBox)sender).Name, ((RadTextBox)sender).Text); } #region Compute Coordinates private void rtbLandAddress_Leave(object sender, EventArgs e) { ComputeCoordinates(); } private void rtbLandAddress_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)13) { ComputeCoordinates(); } } private void ComputeCoordinates() { decimal lat, lng; volltmpGo2.getCoordinates(rtbLandAddress.Text, out lat, out lng); if (lat > -181 || lng > -181) { rseLatitude.Value = lat; rseLongitude.Value = lng; } } #endregion Compute Coordinates } public class GetColorID { public Color getColorid(Int32 id) { Color ret = Color.Black; switch (id) { case 0: ret = Color.Red; break; case 1: ret = Color.Green; break; case 2: ret = Color.Blue; break; case 3: ret = Color.Cyan; break; case 4: ret = Color.Magenta; break; } return ret; } } }