SafeDispatch/Safedispatch_4_0/maptab/HistoryTabGIS.cs
2024-02-22 18:43:59 +02:00

2292 lines
104 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Resources;
using Telerik.WinControls.UI;
using Telerik.WinControls;
using Telerik.WinControls.UI.Docking;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.EngineCore;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;
using SafeMobileLib;
using Dispatcher.maptab.UIClasses;
namespace Safedispatch_4_0
{
/// <summary>
/// This class implements the history tab.</summary>
/// <remarks>
/// The history tab contains two areas, left and right. On the left side
/// the vehicle selection and intervals are made, and on the right side information
/// is displayed according to the criteria from the left</remarks>
public partial class HistoryTabGIS : UserControl
{
public bool KillTimerActive = false;
public String calcADDr, endtimegreate,onlyonecar;
private Boolean docLoad = false;
private Int32 loadcnt = 0;
private Int32 timestart = 0, timestop = 0;
private volatile Boolean ForceStop = false;
private volatile Int32 timeTemp = 0;
private volatile bool first = true;
private volatile RoutesInfo routesTemp;
private Hashtable NametoSym = new Hashtable();
private volatile Boolean hitLimit = false;
private String plsselcectcar = "";
private Boolean AniStateExpande = false;
private IMapControl3 m_mapControl = null;
public IGraphicTracker m_graphicTracker = null;
public IGraphicTracker PlayTracker = null;
private String Nodata = "";
private Image theme24H_Image = Utils.ChangeColor(Dispatcher.Properties.Resources.h_24h, MainForm2.ButtonColor);
private Image themelFilter_Image = Utils.ChangeColor(Dispatcher.Properties.Resources.h_filter, MainForm2.ButtonColor);
private void setLanguage()
{
calcADDr = MainForm2.returnLNGString("retrevAddr");
endtimegreate = MainForm2.returnLNGString("endtimegreate");
//animatedPlayExpandoText.Text = MainForm2.returnLNGString("animatedPlayExpando");
btDisplayHeading.Text = MainForm2.returnLNGString("btDisplayHeading");
btnDisplayHistory.Text = MainForm2.returnLNGString("displayHistoryButton");
label1.Text = MainForm2.returnLNGString("hlabel1");
//sel_desel.Text = MainForm2.returnLNGString("cbselAll");
//gridHistoryPoints.Columns[0].HeaderText = MainForm2.returnLNGString("ID");
//gridHistoryPoints.Columns[1].HeaderText = MainForm2.returnLNGString("htableVehiclesListColumns1");
//gridHistoryPoints.Columns[2].HeaderText = MainForm2.returnLNGString("alarmsListColumns1");
//gridHistoryPoints.Columns[3].HeaderText = MainForm2.returnLNGString("tableVehiclesListColumns2");
//if (MainForm2.isInMile) gridHistoryPoints.Columns[4].HeaderText = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.milesh + ")";
//else gridHistoryPoints.Columns[4].HeaderText = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.kmh + ")";
//gridHistoryPoints.Columns[5].HeaderText = MainForm2.returnLNGString("DI");
//gridHistoryPoints.Columns[6].HeaderText = MainForm2.returnLNGString("DO");
//toolWindow1.Text = MainForm2.returnLNGString("selectionExpando");
//toolWindow2.Text = MainForm2.returnLNGString("tabPage1");
//windowHistoryResult.Text = MainForm2.returnLNGString("tabPage2");
label2.Text = MainForm2.returnLNGString("label2");
label3.Text = MainForm2.returnLNGString("label3");
//label4.Text = MainForm2.returnLNGString("label4");
//label5.Text = MainForm2.returnLNGString("label5");
//vehiclesList.Columns[0].HeaderText = "";
//vehiclesList.Columns[1].HeaderText = "";
//vehiclesList.Columns[2].HeaderText = MainForm2.returnLNGString("htableVehiclesListColumns1");
onlyonecar = MainForm2.returnLNGString("onlyonecar");
plsselcectcar = MainForm2.returnLNGString("selval");
//radLabel3.Text = MainForm2.returnLNGString("hisInv");
rdpStartTime.Culture = MainForm2.culture;
rdpEndTime.Culture = MainForm2.culture;
rdpStartTime.CustomFormat = rdpEndTime.CustomFormat = Utils.getDayCustomFormat(MainForm2.is24hours, MainForm2.DayFirst);
//if (MainForm2.is24hours)
//{
// if (MainForm2.DayFirst)
// {
// dtFrom.CustomFormat = "dd/MM/yyyy HH:mm";
// dtTo.CustomFormat = "dd/MM/yyyy HH:mm";
// }
// else
// {
// dtFrom.CustomFormat = "MM/dd/yyyy HH:mm";
// dtTo.CustomFormat = "MM/dd/yyyy HH:mm";
// }
//}
//else
//{
// if (MainForm2.DayFirst)
// {
// dtFrom.CustomFormat = "dd/MM/yyyy hh:mm tt";
// dtTo.CustomFormat = "dd/MM/yyyy hh:mm tt";
// }
// else
// {
// dtFrom.CustomFormat = "MM/dd/yyyy hh:mm tt";
// dtTo.CustomFormat = "MM/dd/yyyy hh:mm tt";
// }
//}
String speedname = MainForm2.HistSpeedLimit.ToString() + " " + MainForm2.kmh;
if (MainForm2.isInMile)
speedname = MainForm2.HistSpeedLimit.ToString() + " " + MainForm2.milesh;
//lbSpeedLimit.Text = MainForm2.returnLNGString("spdlimit") + ": " + speedname;
Nodata = MainForm2.returnLNGString("nodata");//nodata;
rcbComputeAddress.Text = MainForm2.returnLNGString("compAddr");
rcbSpeedLower.Text = MainForm2.returnLNGString("lowerSpeed");
rcbSpeedLower.Text = (!MainForm2.isInMile) ? string.Format(rcbSpeedLower.Text,(MainForm2.returnLNGString("kmh"))) : string.Format(rcbSpeedLower.Text,(MainForm2.returnLNGString("milesh")));
rcbSpeedUpper.Text = MainForm2.returnLNGString("upperSpeed");
rcbSpeedUpper.Text = (!MainForm2.isInMile) ? string.Format(rcbSpeedUpper.Text, (MainForm2.returnLNGString("kmh"))) : string.Format(rcbSpeedUpper.Text, (MainForm2.returnLNGString("milesh")));
}
public HistoryTabGIS(MainForm2 parentParam, String tabNameParam)
{
tabName = tabNameParam;
parent = parentParam;
try
{
smdbObj = new SMdb_access();
foreach (String obj in MainForm2.vehicleHT.Keys)
{
vehicleListNames.Add(((Vehicle)MainForm2.vehicleHT[obj]).busName);
routesHT[((Vehicle)MainForm2.vehicleHT[obj]).busName] = new RoutesInfo(((Vehicle)MainForm2.vehicleHT[obj]).IMEI, ((Vehicle)MainForm2.vehicleHT[obj]).busName);
}
}
catch (Exception ex)
{
SM.Debug("Error Connect to database: " + ex.ToString());
MainForm2.Connfailed = true;
return;
}
InitializeComponent();
#region STYLE THEMING
labelUnits.ForeColor = labelSlideshow.ForeColor = MainForm2.LabelColor;
btnDisplayHistory.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
btDisplayHeading.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
rbResetHistory.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
// play buttons
btBack.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
btPause.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
btForward.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
btPlay.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
btStop.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
pb24H.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.h_24h, MainForm2.ButtonColor);
theme24H_Image = pb24H.Image;
pbFilter.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.i_search, MainForm2.ButtonColor);
#endregion
// set theme for the Message Box
RadMessageBox.SetThemeName("TelerikMetroBlue");
// add filter rule/predicate to the units tree
treeViewUnits.TreeViewElement.FilterPredicate = FilterNode;
// create the custom column which will display the positions in
// the new way
HistoryGridColumn ctc = new HistoryGridColumn("history");
ctc.AllowResize = true;
ctc.Name = "history";
ctc.FieldName = "history";
ctc.HeaderText = "history";
ctc.AutoSizeMode = BestFitColumnMode.AllCells;
ctc.HeaderTextAlignment = ContentAlignment.MiddleLeft;
ctc.SortOrder = RadSortOrder.Ascending;
this.gridHistoryPoints.TableElement.RowHeight = 55;
this.gridHistoryPoints.Columns.Add(ctc);
this.gridHistoryPoints.Columns.Move(ctc.Index, 0);
// create the toolTip that will be displayed when the user sets a pattern
// over the pictureBox
toolTipHelp = new ToolTip();
toolTipHelp.ToolTipTitle = "";
toolTipHelp.AutoPopDelay = 0;
toolTipHelp.InitialDelay = 0;
toolTipHelp.ReshowDelay = 0;
toolTipHelp.IsBalloon = false;
toolTipHelp.ShowAlways = true;
// add the groups and the units to the tree view
populateListBoxGroup();
populateListBoxUnits();
// set the values for start and end time
rdpStartTime.Value = DateTime.Now.AddDays(-1);
rdpEndTime.Value = DateTime.Now;
// disable the history result window
foreach (Control ctr in windowHistoryResult.Controls)
ctr.Enabled = false;
setLanguage();
minTime = Int32.MaxValue;
maxTime = 0;
if (MainForm2.Connfailed)
return;
GetPositionForStart = false;
txProgStatus.Visible = false;
HistroyProgBar.Visible = false;
HistoryPanel.Visible = false;
rdpStartTime.Value = DateTime.Now;
rdpEndTime.Value = DateTime.Now;
toolWindow1.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu;
toolWindow1.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close;
toolWindow1.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide;
toolWindow2.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu;
toolWindow2.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close;
windowHistoryResult.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu;
windowHistoryResult.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close;
windowHistoryResult.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide;
ContextMenuService menuService = this.radDock1.GetService<ContextMenuService>();
menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying;
btnDisplayHistory.Visible = false;
//btDisplayHeading.Size = new Size(splitPanel2.Width - 10, btDisplayHeading.Height);
//if (MainForm2.InterCalcAddr) rcbComputeAddress.Checked = true;
//else rcbComputeAddress.Checked = false;
rdpStartTime.CustomFormat = rdpEndTime.CustomFormat = Utils.getDayCustomFormat(MainForm2.is24hours, MainForm2.DayFirst);
//if (MainForm2.is24hours)
//{
// if (MainForm2.DayFirst)
// {
// dtFrom.CustomFormat = "dd/MM/yyyy HH:mm";
// dtTo.CustomFormat = "dd/MM/yyyy HH:mm";
// }
// else
// {
// dtFrom.CustomFormat = "MM/dd/yyyy HH:mm";
// dtTo.CustomFormat = "MM/dd/yyyy HH:mm";
// }
//}
//else
//{
// if (MainForm2.DayFirst)
// {
// dtFrom.CustomFormat = "dd/MM/yyyy hh:mm tt";
// dtTo.CustomFormat = "dd/MM/yyyy hh:mm tt";
// }
// else
// {
// dtFrom.CustomFormat = "MM/dd/yyyy hh:mm tt";
// dtTo.CustomFormat = "MM/dd/yyyy hh:mm tt";
// }
//}
try
{
switch (MainForm2.radioType)
{
case RADIOTYPE.HYT:
radDock1.BackColor = MainForm2.HyteraColor;
//splitPanel5.BackColor = MainForm2.HyteraColor;
//splitPanel2.BackColor = MainForm2.HyteraColor;
//splitPanel3.BackColor = MainForm2.HyteraColor;
//radSplitContainer1.BackColor = MainForm2.HyteraColor;
//radSplitContainer2.BackColor = MainForm2.HyteraColor;
documentTabStrip1.BackColor = MainForm2.HyteraColor;
documentContainer1.BackColor = MainForm2.HyteraColor;
HistoryPanel.BackColor = MainForm2.HyteraColor;
//splitPanel2.BackColor = MainForm2.HyteraColor;
//splitPanel3.BackColor = MainForm2.HyteraColor;
break;
case RADIOTYPE.HARRIS:
radDock1.BackColor = MainForm2.HarrisColor;
//splitPanel5.BackColor = MainForm2.HarrisColor;
//splitPanel2.BackColor = MainForm2.HarrisColor;
//splitPanel3.BackColor = MainForm2.HarrisColor;
radSplitContainer1.BackColor = MainForm2.HarrisColor;
//radSplitContainer2.BackColor = MainForm2.HarrisColor;
documentTabStrip1.BackColor = MainForm2.HarrisColor;
documentContainer1.BackColor = MainForm2.HarrisColor;
HistoryPanel.BackColor = MainForm2.HarrisColor;
//splitPanel2.BackColor = MainForm2.HarrisColor;
//splitPanel3.BackColor = MainForm2.HarrisColor;
this.label1.ForeColor = MainForm2.HarTextColor;
this.label2.ForeColor = MainForm2.HarTextColor;
this.label3.ForeColor = MainForm2.HarTextColor;
//this.label4.ForeColor = MainForm2.HarTextColor;
//this.label5.ForeColor = MainForm2.HarTextColor;
this.label7.ForeColor = MainForm2.HarTextColor;
//this.radLabel3.ForeColor = MainForm2.HarTextColor;
//this.animatedPlayExpandoText.ForeColor = MainForm2.HarTextColor;
//this.sel_desel.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor;
this.rcbComputeAddress.ForeColor = MainForm2.HarTextColor;
break;
case RADIOTYPE.ATLAS:
radDock1.BackColor = MainForm2.HarrisColor;
//splitPanel5.BackColor = MainForm2.HarrisColor;
//splitPanel2.BackColor = MainForm2.HarrisColor;
//splitPanel3.BackColor = MainForm2.HarrisColor;
radSplitContainer1.BackColor = MainForm2.HarrisColor;
//radSplitContainer2.BackColor = MainForm2.HarrisColor;
documentTabStrip1.BackColor = MainForm2.HarrisColor;
documentContainer1.BackColor = MainForm2.HarrisColor;
HistoryPanel.BackColor = MainForm2.HarrisColor;
//splitPanel2.BackColor = MainForm2.HarrisColor;
//splitPanel3.BackColor = MainForm2.HarrisColor;
this.label1.ForeColor = MainForm2.HarTextColor;
this.label2.ForeColor = MainForm2.HarTextColor;
this.label3.ForeColor = MainForm2.HarTextColor;
//this.label4.ForeColor = MainForm2.HarTextColor;
//this.label5.ForeColor = MainForm2.HarTextColor;
this.label7.ForeColor = MainForm2.HarTextColor;
//this.radLabel3.ForeColor = MainForm2.HarTextColor;
//this.animatedPlayExpandoText.ForeColor = MainForm2.HarTextColor;
//this.sel_desel.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor;
this.rcbComputeAddress.ForeColor = MainForm2.HarTextColor;
//this.lbSpeedLimit.ForeColor = MainForm2.HarTextColor;
break;
case RADIOTYPE.SIMOCO:
// we don't need this probably
break;
case RADIOTYPE.EXCERA:
// we don't need this probably
break;
}
}
catch (Exception ex)
{
SM.Debug("Error on change color hytera:" + ex.ToString());
}
}
private void menuService_ContextMenuDisplaying(object sender, ContextMenuDisplayingEventArgs e)
{
if (e.MenuType == ContextMenuType.DockWindow &&
e.DockWindow.DockTabStrip is DocumentTabStrip)
{
for (int i = 0; i < e.MenuItems.Count; i++)
{
RadMenuItemBase menuItem = e.MenuItems[i];
if (menuItem.Name == "CloseWindow" ||
menuItem.Name == "CloseAllButThis" ||
menuItem.Name == "CloseAll" ||
menuItem.Name == "Floating" ||
menuItem.Name == "Docked" ||
menuItem.Name == "Hidden" ||
menuItem is RadMenuSeparatorItem)
{
menuItem.Visibility = Telerik.WinControls.ElementVisibility.Collapsed;
}
}
}
}
private void GetPositionsAndAlarms(ArrayList listOfVehicles)
{
String toSendVehicles;
String toSendTimes;
toSendVehicles = "";
toSendTimes = "";
Int32 maxGooglePos = 50000;
Int32 cntLimPos = 0; //max 50000 for google
Int32 oldcntLimPos = 0;
ArrayList ri;
selectedPositions.Clear();
try
{
//for (int contor = 0; contor < listOfVehicles.Count; contor++)
//{
// if (((bool)vehiclesList.Rows[contor].Cells[0].Value))
// {
//for each group I should check the units which are selected
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
for (int contor2 = 0; contor2 < ((RoutesInfo)routesHT[unit.Text]).nOfRoutes; contor2++)
{
ri = (((RoutesInfo)routesHT[unit.Text]).routes);
toSendVehicles = toSendVehicles + unit.Text + ",";
if (cntLimPos < maxGooglePos)
{
((RouteInfo)ri[contor2]).positions = smdbObj.get_HistoryPositions2(unit.Text, ((RouteInfo)ri[contor2]).startTime, ((RouteInfo)ri[contor2]).endTime);
oldcntLimPos = cntLimPos;
cntLimPos += ((RouteInfo)ri[contor2]).positions.Count;
if (cntLimPos > maxGooglePos)
{
hitLimit = true;
for (int i = (maxGooglePos - oldcntLimPos); i < (cntLimPos - oldcntLimPos); i++)
((RouteInfo)ri[contor2]).positions.RemoveAt(maxGooglePos - oldcntLimPos);
}
if (closeTabThread)
return;
((RouteInfo)ri[contor2]).nOfPositions = ((RouteInfo)ri[contor2]).positions.Count;
((RouteInfo)ri[contor2]).Addresses = new String[((RouteInfo)ri[contor2]).positions.Count];
if (closeTabThread)
return;
((RouteInfo)ri[contor2]).ComputeCorners();
if (addrDecision)
{
//aici caut adresse
try
{
foreach (SMposition obj in ((RouteInfo)ri[contor2]).positions)
{
if ((obj.m_address == "") || (obj.m_address == " "))
{
MainForm2.AddrCnt++;
MainForm2.AddrGISQueue.Enqueue(new AddrAndID(MainForm2.AddrCnt, obj.m_lat, obj.m_lng));
MainForm2.IdReportHS.Add(MainForm2.AddrCnt.ToString(), "no address");
obj.m_address = MainForm2.AddrCnt.ToString();
}
// obj.m_address = "LAT:" + Math.Round(dr.GetDouble(3), 5).ToString() + " , LNG:" + Math.Round(dr.GetDouble(4), 5).ToString();
}
}
catch (Exception ex)
{
SM.Debug("Error on calculate address:" + ex.ToString());
}
}
((RoutesInfo)routesHT[unit.Text]).nOfPositions = ((RoutesInfo)routesHT[unit.Text]).nOfPositions + ((RouteInfo)ri[contor2]).nOfPositions;
foreach (SMposition obj in ((RouteInfo)ri[contor2]).positions)
selectedPositions.Add(obj);
}
else ((RouteInfo)ri[contor2]).positions = new ArrayList();
}
}
// }
//}
if (toSendVehicles.Length > 0)
{
//
selectedPositions.Sort(new VehicleComparer());
actualNOfPositions = selectedPositions.Count;
}
else
{
actualNOfPositions = 0;
selectedPositions.Clear();
}
}
catch (Exception ex)
{
SM.Debug("Error on database connection Mess: "+ex.Message);
MainForm2.Connfailed = true;
throw new ArgumentException("Database connection failed");
}
}
/// <summary>
///populates the list of vehicles from the Table tab </summary>
/// <param name="listOfVehicles">an array of strings containing the vehicles names</param>
private void populateTableVehiclesList()
{
if (selectedPositions.Count > 0)
{
try
{
gridHistoryPoints.DataSource = null;
gridHistoryPoints.DataSource = ListforGrid;
// activate the history result tab
radDock1.ActivateWindow(windowHistoryResult);
// enable the history result window
foreach (Control ctr in windowHistoryResult.Controls)
ctr.Enabled = true;
}
catch (Exception ex)
{
SM.Debug("Error on populate grid" + ex.ToString());
}
}
else
{
gridHistoryPoints.Rows.Clear();
gridHistoryPoints.Refresh();
if ((MainForm2.radioType == RADIOTYPE.HARRIS)||(MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor;
RadMessageBox.Show(Nodata, "Info", MessageBoxButtons.OK, RadMessageIcon.Info);
}
gridHistoryPoints.TableElement.ScrollToRow(0);
}
/// <summary>
/// Save the current configuration (selected vehicles and other info)
/// to a XML file, from which information can be loaded afterwards
/// </summary>
private void UpdateAddresses(ArrayList listOfVehicles)
{
int contor;
RoutesInfo routesTemp=null;
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
routesTemp = ((RoutesInfo)routesHT[unit.Text]);
try
{
foreach (RouteInfo obj in routesTemp.routes)
{
if (obj.checkedRoute)
{
obj.ComputeAddresses(null);
}
}
}
catch (Exception ex)
{
SM.Debug(" Address: " + ex.ToString());
}
}
}
/// <summary>
/// Deletes all used resources
/// </summary>
public void Delete()
{
try
{
if (WorkerHead.IsBusy)
closeTabThread = true;
WorkerHead.Dispose();
this.Dispose();
}
catch (Exception ex)
{
SM.Debug("Error on close TAB HISTORY:"+tabName+"/n Ex:"+ex.Message);
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
rseSkipSeconds.Text = ValidateText(rseSkipSeconds.Text);
playInterval = Convert.ToInt32(rseSkipSeconds.Text);
}
catch (System.Exception ex)
{
SM.Debug("File: HistoryTabMap.cs Meth: textBox1_TextChanged " + ex.Message);
rseSkipSeconds.Text = "10";
playInterval = 10;
}
}
private void pauseIntervalTB_TextChanged(object sender, EventArgs e)
{
try
{
rsePositionDisplay.Text = ValidateText(rsePositionDisplay.Text);
pauseInterval = Convert.ToInt32(rsePositionDisplay.Text);
}
catch (System.Exception ex)
{
SM.Debug("File: HistoryTabMap.cs Meth: pauseIntervalTB_TextChanged" + ex.Message);
rsePositionDisplay.Text = "10";
pauseInterval = 10;
}
}
private void UpdateCurrentTime(string text)
{
currentTimeBox.Text = text;
}
public delegate void UpdateCurrentTimeCallBack(string text);
private void UpdateStatusBar(string text)
{
txProgStatus.Text = text;
txProgStatus.Update();
}
private void UpdateChangeSize(string text)
{
txProgStatus.Size = new Size(205, 20);
txProgStatus.Update();
}
public delegate void UpdateStatusBarCallBack(string text);
private void UpdateProgressBar(Int32 max)
{
if (max == -1)
{
HistroyProgBar.ProgressBarElement.PerformStepValue1();
HistroyProgBar.Update();
}
else HistroyProgBar.Maximum = max;
}
public delegate void UpdateProgressBarCallBack(Int32 max);
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
e.Result = Computation(worker, e);
try
{
if (this.mapControl == null)
return;
parent.isCanceled[tabName] = false;
int countStop = 0;
while (this.WorkerHead.IsBusy)
{
Thread.Sleep(200);
countStop++;
if (countStop > 20) break;
}
Killtimer.Enabled = true;
Killtimer.Start();
Killtimer.Stop();
this.mapControl = null;
this.routesHT = null;
GC.Collect();
}
catch (Exception ex)
{
SM.Debug("Exception on close map HistoryTabMap "+ex.Message);
}
if ((MainForm2.ClosingApp)&&(!KillTimerActive))
{
SM.Debug("Worker History : " + tabName + " FINISHED");
}
}
/// <summary>
/// Validates the text from param; the text is valid if only contains numbers (from 0 to 9)
/// </summary>
/// <param name="param">The string to be validated</param>
/// <returns></returns>
public String ValidateText(String param)
{
string text, text2;
int i;
text = param; text2 = "";
for (i = 0; i < text.Length; i++)
{
if ((text[i] >= '0') && (text[i] <= '9'))
{
text2=text2+text[i];
}
}
return text2;
}
private Int32 CalcHead(Double lastLocX, Double lastLocY, Double prevLocX, Double prevLocY, Int32 heading)
{
Double dlng = lastLocX - prevLocX;
Double dlat = lastLocY - prevLocY;
Double mdelta_min = -0.00001;
Double delta_min = 0.00001;
Int32 headcalc = 0;
Double blat = 0;
Double blng = 0;
if ((dlat > mdelta_min) && (dlat < delta_min) && ((mdelta_min < dlng) && dlng < (delta_min))) headcalc = (Int32)heading;
else
{
if ((mdelta_min < dlat) && (dlat < delta_min))
{
blng = 1;
if (dlng < 0) headcalc = 180;
else headcalc = 0;
}
else
{
blat = 1;
if (dlat > 0) headcalc = 90;
else headcalc = 270;
}
}
if ((mdelta_min < dlng) && (dlng < delta_min))
{
if (blat == 0)
{
if (dlat > 0)
{
if (headcalc == 180) headcalc = 135;
if (headcalc == 0) headcalc = 45;
}
else
{
if (headcalc == 180) headcalc = 225;
if (headcalc == 0) headcalc = 315;
}
}
}
else
{
if (blng == 0)
{
if (dlng < 0)
{
if (headcalc == 90) headcalc = 135;
if (headcalc == 270) headcalc = 225;
}
else
{
if (headcalc == 90) headcalc = 45;
if (headcalc == 270) headcalc = 315;
}
}
}
return headcalc;
}
/// <summary>
/// Catches the click on the display history button
/// Checks each vehicle for defined routes and displays them on the MapPoint control
/// Computes the positions of the corners for all defined routes, for zooming purposes
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btDisplayHeadingHisotry_Click(object sender, EventArgs e)
{
// save upper and lower speed limits
MainForm2.HistSpeedLimit = (rcbSpeedLower.Checked ? (int)rseSpeedLower.Value : 0);
MainForm2.HistUpperSpeedLimit = (rcbSpeedUpper.Checked ? (int)rseSpeedUpper.Value : 0);
try
{
smdbObj.Update_Speed_Limit("hisMinSpeed", MainForm2.HistSpeedLimit);
smdbObj.Update_Speed_Limit("hisMaxSpeed", MainForm2.HistUpperSpeedLimit);
}
catch (Exception ex)
{
SM.Debug("Add history speed limit in Database" + ex.ToString());
}
Boolean selOK = false;
if (rdpStartTime.Enabled)
{
if (rdpStartTime.Value.GetSecondsFromDT().ConvertLocalToGMT() > rdpEndTime.Value.GetSecondsFromDT().ConvertLocalToGMT())
MessageBox.Show(endtimegreate, "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
else
{
selOK = true;
timestart = rdpStartTime.Value.GetSecondsFromDT().ConvertLocalToGMT();
timestop = rdpEndTime.Value.GetSecondsFromDT().ConvertLocalToGMT();
}
}
else
{
selOK = true;
timestart = DateTime.Now.GetSecondsFromDT().ConvertLocalToGMT() - 86400;
timestop = DateTime.Now.GetSecondsFromDT().ConvertLocalToGMT();
}
//hide animatedPlay
//animatedPlayExpando.Enabled = false;
if (selOK)
{
Boolean havecar = false;
//for (int cont = 0; cont < vehiclesList.Rows.Count; cont++)
// if ((bool)vehiclesList.Rows[cont].Cells[0].Value) { havecar = true; break; }
//if (havecar) HeadStart();
// for each group I should check the units which are selected
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
havecar = true;
break;
}
if (havecar)
HeadStart();
else
{
if ((MainForm2.radioType == RADIOTYPE.HARRIS)||(MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor;
RadMessageBox.Show(plsselcectcar);
}
}
}
private volatile Boolean addrDecision = false;
private void HeadStart()
{
try
{
//splitPanel3.SizeInfo.MaximumSize = new Size(splitPanel1.Width, 1);
//splitPanel3.SizeInfo.MinimumSize = new Size(splitPanel1.Width, 1);
int count = 0;
//for (int cont = 0; cont < vehiclesList.Rows.Count; cont++)
//{
// if ((bool)vehiclesList.Rows[cont].Cells[0].Value)
// {
// for each group I should check the units which are selected
foreach(RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach(RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
count++;
((RoutesInfo)routesHT[unit.Text]).RemoveQuick();
((RoutesInfo)routesHT[unit.Text]).AddRoute2(timestart, timestop, unit.Text, Color.Cyan, unit.Text + "_quick");
}
/* if (count > 1) MainForm2.HistContinu = true;
else MainForm2.HistContinu = false;*/
addrDecision = rcbComputeAddress.Checked;
btnDisplayHistory.Enabled = false;
btDisplayHeading.Enabled = false;
rcbComputeAddress.Enabled = false;
Cursor = Cursors.WaitCursor;
//mapControl.MousePointer = GeoPointer.geoPointerHourglass;
HistroyProgBar.Visible = true;
HistroyProgBar.Value1 = 0;
HistoryPanel.Visible = true;
txProgStatus.Visible = true;
txProgStatus.Clear();
WorkerHead.RunWorkerAsync();
}
catch (Exception ex)
{
SM.Debug("Error on start heading" + ex.Message);
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
if (this.mapControl == null)
return;
parent.isCanceled[tabName] = false;
if (e.Cancelled)
SM.Debug("File: HistoryTabMap.cs Meth: backgroundWorker1_RunWorkerCompleted You cancelled!");
else if (e.Error != null)
SM.Debug("File: HistoryTabMap.cs Meth: backgroundWorker1_RunWorkerCompleted Worker exception: " + e.Error.ToString());
else
SM.Debug("File: HistoryTabMap.cs Meth: backgroundWorker1_RunWorkerCompleted Complete - " + e.Result); // from DoWork
//if (this.WorkerHead.IsBusy || this.WorkerHist.IsBusy)
// Thread.Sleep(100);
while (this.WorkerHead.IsBusy)
{
Thread.Sleep(100);
}
Killtimer.Enabled = true;
Killtimer.Start();
Killtimer.Stop();
this.mapControl = null;
this.routesHT = null;
GC.Collect();
}
catch (Exception ex)
{
SM.Debug("Final RunCompleted Worker History Error" + ex.ToString());
}
if ((MainForm2.ClosingApp)&&(!KillTimerActive))
{
SM.Debug("Worker History : " + tabName + " FINISHED");
}
}
enum PS
{
BACK = 0,
PLAY,
PAUSE,
STOP,
FORWARD
}
PS ePlayStatus = PS.STOP;
PS ePrevPlayStatus = PS.STOP;
private void btBack_Click(object sender, EventArgs e)
{
rseSkipSeconds.Enabled = true;
rsePositionDisplay.Enabled = true;
//expando1.Enabled = false;
ePrevPlayStatus = ePlayStatus;
ePlayStatus = PS.BACK;
btBack.Enabled = true;
btPlay.Enabled = true;
btPause.Enabled = false;
btStop.Enabled = true;
btForward.Enabled = true;
Thread.Sleep(200);
}
private void btPlay_Click(object sender, EventArgs e)
{
rseSkipSeconds.Enabled = false;
rsePositionDisplay.Enabled = false;
//expando1.Enabled = false;
m_graphicTracker.RemoveAll();
ePrevPlayStatus = ePlayStatus;
ePlayStatus = PS.PLAY;
btBack.Enabled = false;
btPlay.Enabled = false;
btPause.Enabled = true;
btStop.Enabled = true;
btForward.Enabled = false;
btDisplayHeading.Enabled = false;
btnDisplayHistory.Enabled = false;
rcbComputeAddress.Enabled = false;
Thread.Sleep(200);
}
private void btPause_Click(object sender, EventArgs e)
{
rseSkipSeconds.Enabled = true;
rsePositionDisplay.Enabled = true;
ePrevPlayStatus = ePlayStatus;
ePlayStatus = PS.PAUSE;
btBack.Enabled = true;
btPlay.Enabled = true;
btPause.Enabled = false;
btStop.Enabled = true;
btForward.Enabled = true;
btDisplayHeading.Enabled = true;
btnDisplayHistory.Enabled = true;
rcbComputeAddress.Enabled = true;
Thread.Sleep(200);
}
private void btStopInvoke(string text)
{
btStop.PerformClick();
}
public delegate void btStopInvokeCallBack(String text);
private void btStop_Click(object sender, EventArgs e)
{
rseSkipSeconds.Enabled = true;
rsePositionDisplay.Enabled = true;
//expando1.Enabled = true;
ePrevPlayStatus = ePlayStatus;
ePlayStatus = PS.STOP;
btBack.Enabled = false;
btPlay.Enabled = true;
btPause.Enabled = false;
btStop.Enabled = false;
btForward.Enabled = false;
btDisplayHeading.Enabled = true;
btnDisplayHistory.Enabled = true;
rcbComputeAddress.Enabled = true;
Thread.Sleep(200);
}
private void btForward_Click(object sender, EventArgs e)
{
rseSkipSeconds.Enabled = true;
rsePositionDisplay.Enabled = true;
//expando1.Enabled = false;
ePrevPlayStatus = ePlayStatus;
ePlayStatus = PS.FORWARD;
btBack.Enabled = true;
btPlay.Enabled = true;
btPause.Enabled = false;
btStop.Enabled = true;
btForward.Enabled = true;
Thread.Sleep(200);
}
long Computation(BackgroundWorker worker, DoWorkEventArgs e)
{
SMposition tempPos;
int contor = 0;
//ConvertDT convDT = new ConvertDT();
timeTemp = 0;
first = true;
while (MainForm2.isRunning)
{
if (FirstPlay)
{
FirstPlay = false;
timeTemp = FirstTime;
}
Currenttime = timeTemp;
try
{
Thread.Sleep(10);
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
if (ePlayStatus == ePrevPlayStatus)
continue;
switch (ePlayStatus)
{
case PS.PLAY:
{
if (first)
{
timeTemp = minTime;
first = false;
}
if (ePrevPlayStatus == PS.STOP)
{
contor = 0;
//while (contor < vehicleListNames.Count)
//{
// if (((bool)vehiclesList.Rows[contor].Cells[0].Value))
// {
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
routesTemp = ((RoutesInfo)routesHT[unit.Text]);
foreach (RouteInfo obj in routesTemp.routes)
{
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
if (obj.checkedRoute)
{
/* Location loc = mapControl.ActiveMap.GetLocation(obj.GetCurrentPosition().m_lat, obj.GetCurrentPosition().m_lng, 10);
pp = mapControl.ActiveMap.AddPushpin(loc, (String)vehiclesList.Rows[contor].Cells[2].Value);
Thread.Sleep(10);
if (pp != null && loc != null)
{
obj.SetPushpinMap(pp);
pp.Symbol = busSymb.GetSymbolFromOrientation(obj.GetInitialHeading());
pp.MoveTo(vehiclesDataSet);
if (checkBox2.Checked)
{
pp.BalloonState = GeoBalloonState.geoDisplayBalloon;
}
else
{
pp.BalloonState = GeoBalloonState.geoDisplayNone;
}
if (pp.Note == "") pp.Note = " ";
}*/
IPoint point = new ESRI.ArcGIS.Geometry.Point();
point.PutCoords(obj.GetCurrentPosition().m_lng, obj.GetCurrentPosition().m_lat);
point.SpatialReference = MainForm2.CreateGeoCoordSys();
Int32 GISID = PlayTracker.Add(point as IGeometry, busSymb2.GetSymbolFromOrientation(obj.GetInitialHeading()));
}
}
}
// }
// contor++;
//}
} // end if prev state is STOP
try
{
while ((timeTemp >= minTime) && (timeTemp <= maxTime - playInterval) && (ePlayStatus == PS.PLAY))
{
contor = 0;
//while (contor < vehicleListNames.Count)
//{
// if (((bool)vehiclesList.Rows[contor].Cells[0].Value))
// {
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
routesTemp = ((RoutesInfo)routesHT[unit.Text]);
foreach (RouteInfo obj in routesTemp.routes)
{
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
if (obj.checkedRoute)
{
tempPos = obj.LastPositionBeforeGivenTime(timeTemp - playInterval, timeTemp, out timeTemp, false);
if (ePlayStatus == PS.PLAY)
worker.ReportProgress(11, tempPos);
else
break;
}
}
}
// }
// contor++;
//}
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
if (pauseInterval > 200)
{
for (int mk = 0; mk < pauseInterval / 200; mk++)
{
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
Thread.Sleep(200);
}
}
else Thread.Sleep(pauseInterval);
timeTemp = timeTemp + playInterval;
Currenttime = timeTemp;
}
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
if (timeTemp > maxTime - playInterval)
{
lock (this)
{
if ((currentTimeBox != null) && (!MainForm2.ClosingApp))
currentTimeBox.Invoke(new UpdateCurrentTimeCallBack(this.UpdateCurrentTime), new object[] {(maxTime).ConvertGMTToLocal().GetDTFromSeconds().ToString() });
btStop.Invoke(new btStopInvokeCallBack(this.btStopInvoke), new object[] { "test" });
}
}
}
catch (Exception ex)
{
SM.Debug("Exception in play: " + ex.ToString());
}
ePrevPlayStatus = PS.PLAY;
}
break;
// ---------------------------------------------------------
case PS.STOP:
{
StopProced();
}
ePrevPlayStatus = PS.STOP;
break;
// ---------------------------------------------------------
case PS.BACK:
{
//for (contor = 0; contor < vehicleListNames.Count; contor++)
//{
// if (((bool)vehiclesList.Rows[contor].Cells[0].Value))
// {
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
routesTemp = ((RoutesInfo)routesHT[unit.Text]);
foreach (RouteInfo obj in routesTemp.routes)
{
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
if (obj.checkedRoute)
{
if (timeTemp >= minTime + playInterval)
timeTemp = timeTemp - playInterval;
else
timeTemp = minTime;
//tempPos = obj.LastPositionBeforeGivenTime(timeTemp - playInterval, timeTemp, out timeTemp,true);
tempPos = obj.FirstPositionBeforeGivenTime(timeTemp);
timeTemp = tempPos.m_time;
worker.ReportProgress(11, tempPos);
}
}
}
// }
//}
}
ePlayStatus = PS.PAUSE;
break;
// ---------------------------------------------------------
case PS.PAUSE:
break;
// ---------------------------------------------------------
case PS.FORWARD:
{
//for (contor = 0; contor < vehicleListNames.Count; contor++)
//{
// if (((bool)vehiclesList.Rows[contor].Cells[0].Value))
// {
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
routesTemp = ((RoutesInfo)routesHT[unit.Text]);
foreach (RouteInfo obj in routesTemp.routes)
{
if ((parent.isCanceled[tabName] != null && (bool)parent.isCanceled[tabName])
|| MainForm2.ClosingApp)
{
e.Cancel = true;
return 1;
}
if (obj.checkedRoute)
{
if (timeTemp <= maxTime - playInterval)
timeTemp = timeTemp + playInterval;
else
timeTemp = maxTime;
tempPos = obj.FirstPositionAfterGivenTime(timeTemp);
timeTemp = tempPos.m_time;
worker.ReportProgress(11, tempPos);
}
}
}
// }
//}
}
ePlayStatus = PS.PAUSE;
break;
}
}
catch (Exception ex)
{
SM.Debug("File: HistoryTabMap.cs Meth: compuation :"+ex.ToString());
StopProced();
}
} // end while (true)
return 0;
}
private void StopProced()
{
//for (int contor = 0; contor < vehicleListNames.Count; contor++)
//{
// if (routesHT != null && vehiclesList != null)
// {
// for each group I should check the units which are selected
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (routesHT != null && unit.Checked)
{
PlayTracker.RemoveAll();
routesTemp = ((RoutesInfo)routesHT[unit.Text]);
if (routesTemp != null)
if (routesTemp.nOfRoutes > 0)
{
foreach (RouteInfo obj in routesTemp.routes)
{
obj.ResetCurrentPosition();
}
}
}
// }
//}
timeTemp = minTime;
first = true;
}
long ComputHead(BackgroundWorker worker, DoWorkEventArgs e)
{
try
{
hitLimit = false;
string proc1 = MainForm2.returnLNGString("Update"),
proc2 = MainForm2.returnLNGString("Retriev"),
proc3 = MainForm2.returnLNGString("Computing"),
proc4 = MainForm2.returnLNGString("DelOld");
txProgStatus.Invoke(new UpdateStatusBarCallBack(this.UpdateStatusBar),proc4);
RoutesInfo tempRoutes = null;
int contor;
int i = 0;
headingMode = true;
if (closeTabThread)
{
e.Cancel = true;
return 1;
}
//clean the map
WorkerHead.ReportProgress(11);
if (closeTabThread)
{
e.Cancel = true;
return 1;
}
corners[0] = corners[2] = 181.00;
corners[1] = corners[3] = -181.00;
txProgStatus.Invoke(new UpdateStatusBarCallBack(this.UpdateStatusBar), proc2);
if (closeTabThread)
{
e.Cancel = true;
return 1;
}
GetPositionsAndAlarms(vehicleListNames);
if (closeTabThread)
{
e.Cancel = true;
return 1;
}
txProgStatus.Invoke(new UpdateStatusBarCallBack(this.UpdateStatusBar), proc1);
UpdateAddresses(vehicleListNames);
HistroyProgBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), actualNOfPositions / 250);
if (closeTabThread) return 1;
//checks for each vehicle if there is any defined route
//there_are_routes is true if there are routes, and false otherwise
bool there_are_routes = false;
actualNOfPositions = 0;
minTime = Int32.MaxValue;
maxTime = 0;
txProgStatus.Invoke(new UpdateStatusBarCallBack(this.UpdateStatusBar), proc3);
int progStep = 0;
LNGMAX = -181;LNGMIN = 181;
LATMAX = -91;LATMIN = 90;
//for (contor = 0; contor < vehicleListNames.Count; contor++)
//{
// if ((bool)vehiclesList.Rows[contor].Cells[0].Value)
// {
// for each group I should check the units which are selected
foreach (RadTreeNode node in treeViewUnits.Nodes[0].Nodes)
foreach (RadTreeNode unit in node.Nodes)
if (unit.Checked)
{
tempRoutes = ((RoutesInfo)routesHT[unit.Text]);
foreach (RouteInfo obj in tempRoutes.routes)
{
if (obj.checkedRoute)
{
actualNOfPositions = actualNOfPositions + obj.nOfPositions;
if (obj.nOfPositions > 0) there_are_routes = true;
Double oldLAT = -500, oldLNG = -500;
Int32 Headingtmp = 0;
i = 0;
foreach (SMposition tempPos in obj.positions)
{
if (closeTabThread)
{
e.Cancel = true;
return 1;
}
i++;
tempPos.m_posID = i;
if ((Math.Round(tempPos.m_lat) == 0) && (Math.Round(tempPos.m_lng) == 0)) continue;
if ((progStep % 250) == 0)
HistroyProgBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1);
if (oldLAT != -500)
if (tempPos.m_speed > 0)
Headingtmp = CalcHead(tempPos.m_lng, tempPos.m_lat, oldLNG, oldLAT, Headingtmp);
if (closeTabThread)
{
e.Cancel = true;
return 1;
}
string headtitle = unit.Text + " - " + i.ToString();
if (tempPos.m_evnt_id != 0)
headtitle += " (ALARM)";
LNGMAX = Math.Max(LNGMAX, (float)tempPos.m_lng);
LNGMIN = Math.Min(LNGMIN, (float)tempPos.m_lng);
LATMAX = Math.Max(LATMAX, (float)tempPos.m_lat);
LATMIN = Math.Min(LATMIN, (float)tempPos.m_lat);
oldLAT = tempPos.m_lat;
oldLNG = tempPos.m_lng;
tempPos.m_heading = Headingtmp;
tempPos.m_imei = headtitle;
WorkerHead.ReportProgress(12, tempPos);
progStep++;
if (minTime > tempPos.m_time)
minTime = tempPos.m_time;
if (maxTime < tempPos.m_time)
maxTime = tempPos.m_time;
}
if (i != 0)
{
try
{
obj.colorName = ((Vehicle)MainForm2.vehicleHT[unit.Text]).histcolor;
}
catch (Exception ex)
{
SM.Debug("Erorr Change color:" + ex.ToString());
}
WorkerHead.ReportProgress(13, obj);
}
}
tempRoutes.ComputeCorners();
if (corners[0] > tempRoutes.corners[0]) corners[0] = tempRoutes.corners[0];
if (corners[1] < tempRoutes.corners[1]) corners[1] = tempRoutes.corners[1];
if (corners[2] > tempRoutes.corners[2]) corners[2] = tempRoutes.corners[2];
if (corners[3] < tempRoutes.corners[3]) corners[3] = tempRoutes.corners[3];
}
}
// }
//}
bool retrynew = true;
int cntmax = 0;
Int32 limitstay = 0;
ForceStop = false;
if ((addrDecision)&&(MainForm2.IdReportHS.Keys.Count > 0))
{
try
{
txProgStatus.Invoke(new UpdateStatusBarCallBack(this.UpdateStatusBar), calcADDr);
txProgStatus.Invoke(new UpdateStatusBarCallBack(this.UpdateChangeSize), calcADDr);
HistroyProgBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), MainForm2.IdReportHS.Keys.Count + 4);
}
catch
{
SM.Debug("Error on put on screen calc address");
}
Int32 contNR = MainForm2.IdReportHS.Keys.Count;
ArrayList numbers = new ArrayList();
Int32 continvalid = 0;
while (retrynew)
{
cntmax++;
retrynew = false;
continvalid = 0;
Int32 maxLimit = 0;
Boolean stay = true;
limitstay = (Int32)(contNR * System.Math.Abs(100 - cntmax * 3 + 10) * (0.5 + 0.1 * cntmax)); // nu poate depasi 50% din timp total
lock (this)
{
foreach (String obj in MainForm2.IdReportHS.Keys)
numbers.Add(obj);
}
foreach (String obj3 in numbers)
{
if (ForceStop) break;
if ((String)MainForm2.IdReportHS[obj3] == "no address")
{
if (stay)
{
SM.Debug("Sta " + System.Math.Abs(100 - cntmax * 3 + 10) + " secunda");
Thread.Sleep(System.Math.Abs(100 - cntmax * 3 + 10));
maxLimit = maxLimit + System.Math.Abs(100 - cntmax * 3 + 10);
retrynew = true;
}
continvalid++;
}
if (maxLimit > limitstay) { SM.Debug("OUT OVER Limit stay"); stay = false; }
}
if (cntmax > 20) retrynew = false;
for (int ii = contNR; ii >= continvalid; ii--)
HistroyProgBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1);
contNR = continvalid;
SM.Debug("new number count:" + contNR);
if (ForceStop) break;
}
ForceStop = false;
foreach (SMposition obj3 in selectedPositions)
{
if (MainForm2.IdReportHS[obj3.m_address] != null)
{
obj3.m_address = (String)MainForm2.IdReportHS[obj3.m_address];
//MainForm2.IdReportHS.Remove(obj3.m_address);
if (obj3.m_address != "no address") smdbObj.Update_address_hist(obj3.m_imei, obj3.m_scevMSSQL, obj3.m_address);
}
}
}
if (there_are_routes)
{
//Load data for GRID
ListforGrid.Clear();
int contx = -1;
foreach (SMposition obj in selectedPositions)
{
contx++;
if (MainForm2.isInMile) volSpeedString = Convert.ToString((int)Math.Round(obj.m_speed * 0.621371192));
else volSpeedString = Convert.ToString((int)(obj.m_speed));
volAddress = obj.m_address;
if ((volAddress == "") || (volAddress == " ")) volAddress = "LAT:" + Math.Round(obj.m_lat, 5).ToString() + " , LNG:" + Math.Round(obj.m_lng, 5).ToString();
ListforGrid.Add(new DataforGRID(contx.ToString(), obj.m_vehName, (obj.m_time).ConvertGMTToLocal().GetDTFromSeconds(), volAddress, volSpeedString, Convert.ToString(obj.m_di), Convert.ToString(obj.m_do), "", "","",obj.m_heading));
}
worker.ReportProgress(1);
}
else worker.ReportProgress(0);
}
catch (Exception ex)
{
SM.Debug("Thread exception:" + ex.ToString());
}
return 1;
}
volatile String volSpeedString ="";
volatile String volAddress = "";
volatile List<DataforGRID> ListforGrid = new List<DataforGRID>();
private void WorkerHead_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
e.Result = ComputHead(worker, e);
}
private volatile float LNGMAX = -181;
private volatile float LNGMIN = 181;
private volatile float LATMAX = -91;
private volatile float LATMIN = 90;
private object Missing = Type.Missing;
private IElement element = null;
private volatile ArrayList ElementsZone = new ArrayList();
private volatile ArrayList PositionList = new ArrayList();
private void WorkerHead_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage == 11)
{
try
{
m_graphicTracker.RemoveAll();
PlayTracker.RemoveAll();
IGraphicsContainer graphicsContainer = (IGraphicsContainer)mapControl.ActiveView;
foreach (IElement obj in ElementsZone)
graphicsContainer.DeleteElement(obj);
ElementsZone.Clear();
mapControl.ActiveView.Refresh();
PositionList.Clear();
OLDHighlight = -1;
}
catch (Exception ex)
{
SM.Debug("Ex:"+ex.ToString());
}
}
else if (e.ProgressPercentage == 12)
{
try
{
SMposition tempPos = (e.UserState as SMposition);
IPoint point = new ESRI.ArcGIS.Geometry.Point();
point.PutCoords(tempPos.m_lng, tempPos.m_lat);
point.SpatialReference = MainForm2.CreateGeoCoordSys();
Int32 GISID = m_graphicTracker.Add(point as IGeometry, busSymb.GetSymbolFromOrientation(tempPos.m_heading));
PositionList.Add(new POSIDGIS(GISID, tempPos));
toolSel.UpdateLIST(PositionList);
}
catch (Exception ex)
{
SM.Debug("Ex:" + ex.ToString());
}
//m_graphicTracker.SetLabel(GISID, tempPos.m_imei + "\n" + MainForm2.langTime + " " + new ConvertDT().DateTimeOfDayHHMMLocal(tempPos.m_time) + " ; Speed: " + tempPos.m_speed.ToString() + Mainform2.Measure + ((tempPos.m_address != "") ? "\n" + tempPos.m_address : ""));
}
else if (e.ProgressPercentage == 13)
{
try
{
IPolyline newPath = new PolylineClass();
IPointCollection newPointCollection = newPath as IPointCollection;
RouteInfo tempRoute = (e.UserState as RouteInfo);
foreach (SMposition obj in tempRoute.positions)
{
if ((obj.m_lng != 0) && (obj.m_lat != 0))
{
ESRI.ArcGIS.Geometry.IPoint fromPoint = new ESRI.ArcGIS.Geometry.PointClass();
fromPoint.PutCoords(obj.m_lng, obj.m_lat);
fromPoint.SpatialReference = MainForm2.CreateGeoCoordSys();
newPointCollection.AddPoint(fromPoint, ref Missing, ref Missing);
}
}
ESRI.ArcGIS.Display.IColor color = new RgbColorClass() { Red = tempRoute.colorName.R, Green = tempRoute.colorName.G, Blue = tempRoute.colorName.B }; // Implicit Cast
ESRI.ArcGIS.Display.ISimpleLineSymbol simpleLineSymbol = new ESRI.ArcGIS.Display.SimpleLineSymbolClass();
simpleLineSymbol.Color = color;
simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
simpleLineSymbol.Width = 3;
ILineElement lineElement = new LineElementClass();
lineElement.Symbol = simpleLineSymbol;
element = (IElement)lineElement; // Explicit Cast
element.Geometry = (IPolyline)newPointCollection;
IGraphicsContainer graphicsContainer = (IGraphicsContainer)mapControl.ActiveView;
graphicsContainer.AddElement(element, 0);
ElementsZone.Add(element);
}
catch (Exception ex)
{
SM.Debug("Error add route in histroy:"+ex.ToString());
}
}
else
{
try
{
Boolean there_are_routes = (e.ProgressPercentage == 1) ? true : false;
populateTableVehiclesList();
if (there_are_routes)
{
startTimeBox.Text = (minTime).ConvertGMTToLocal().GetDTFromSeconds().ToString();
endTimeBox.Text = (maxTime).ConvertGMTToLocal().GetDTFromSeconds().ToString();
currentTimeBox.Text = (minTime).ConvertGMTToLocal().GetDTFromSeconds().ToString();
mapControl.Extent = MainForm2.ZoomTo(LNGMIN, LATMIN, LNGMAX, LATMAX);
AniStateExpande = true;
}
else
{
AniStateExpande = false;
}
}
catch (Exception ex)
{
SM.Debug("Erorr Worker Heading ProgressChanged: " + ex.Message + "\n Source: " + ex.Source);
}
}
}
private void WorkerHead_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
if (!closeTabThread)
{
Cursor = Cursors.Arrow;
//mapControl.MousePointer = GeoPointer.geoPointerDefault;
HistroyProgBar.Visible = false;
HistoryPanel.Visible = false;
HistoryPanel.Update();
txProgStatus.Visible = false;
txProgStatus.Update();
btnDisplayHistory.Enabled = true;
btDisplayHeading.Enabled = true;
rcbComputeAddress.Enabled = true;
}
}
catch (Exception ex)
{
SM.Debug("Erorr Worker Heading Complete: " + ex.ToString());
}
if (MainForm2.Connfailed)
{
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);
MainForm2.Connfailed = false;
}
if (hitLimit)
{
if ((MainForm2.radioType == RADIOTYPE.HARRIS)||(MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor;
RadMessageBox.Show(MainForm2.returnLNGString("lim50000"), MainForm2.returnLNGString("info"), MessageBoxButtons.OK, RadMessageIcon.Info);
}
SM.Debug("WorkerHead_RunWorkerCompleted END" + tabName);
}
private Boolean loadfinish = false;
private volatile SelectGTHIS toolSel = null;
private void HistoryTabMap_Load(object sender, EventArgs e)
{
//Load a pre-authored map document into the PageLayoutControl using relative paths.
if (mapControl.CheckMxFile(MainForm2.ArcGisFileName)) mapControl.LoadMxFile(MainForm2.ArcGisFileName);
mapControl.SpatialReference = MainForm2.CreateGeoCoordSys();
//Get the MapControl
m_mapControl = (IMapControl3)mapControl.Object;
m_graphicTracker = new GraphicTrackerClass();
m_graphicTracker.Initialize(m_mapControl.Map as IBasicMap);
PlayTracker = new GraphicTrackerClass();
PlayTracker.Initialize(m_mapControl.Map as IBasicMap);
loadfinish = true;
busSymb = new BusSymbolsGIS(m_graphicTracker, tabName);
busSymb2 = new BusSymbolsGIS(PlayTracker, tabName);
toolSel = new SelectGTHIS(m_graphicTracker);
ToolControl.AddItem(toolSel);
backgroundWorker1.RunWorkerAsync();
VisualSettings.loadUserVisualSettings(this.Name, this.toolWindow1, MainForm2.HashVal);
VisualSettings.loadUserVisualSettings(this.Name, this.windowHistoryResult, MainForm2.HashVal);
}
private void Killtimer_Tick(object sender, EventArgs e)
{
if (MainForm2.ClosingApp)
KillTimerActive = true;
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage == 11)
{
SMposition tempPos = (e.UserState as SMposition);
try
{
PlayTracker.SetLabel(OLDPlay, "");
}
catch
{
SM.Debug("Error remove lable unknow id:" + OLDPlay);
}
IPoint point = new ESRI.ArcGIS.Geometry.Point();
point.PutCoords(tempPos.m_lng, tempPos.m_lat);
point.SpatialReference = MainForm2.CreateGeoCoordSys();
Int32 GISID = PlayTracker.Add(point as IGeometry, busSymb2.GetSymbolFromOrientation(tempPos.m_heading));
MainForm2.simpleTextSymbol.YOffset = 20;
PlayTracker.SetTextSymbol(GISID, MainForm2.simpleTextSymbol);
if (MainForm2.isInMile) PlayTracker.SetLabel(GISID, MainForm2.langSpeed + " " + Convert.ToString((int)Math.Round(tempPos.m_speed * 0.621371192)) + MainForm2.Measure + " " + MainForm2.langTime + " " + tempPos.m_time.DateTimeOfDayHHMMLocal() + "\n" + MainForm2.FixComma(tempPos.m_address));
else PlayTracker.SetLabel(GISID, MainForm2.langSpeed + " " + tempPos.m_speed.ToString() + MainForm2.Measure + " " + MainForm2.langTime + " " + tempPos.m_time.DateTimeOfDayHHMMLocal() + "\n" + MainForm2.FixComma(tempPos.m_address));
OLDPlay = GISID;
currentTimeBox.Text = (tempPos.m_time).ConvertGMTToLocal().GetDTFromSeconds().ToString();
}
else
{
Int32 index = (Int32)e.UserState;
if (index >= 0)
{
// idx
gridHistoryPoints.Rows[index].IsSelected = true;
gridHistoryPoints.Rows[index].IsCurrent = true;
}
}
}
private Int32 OLDHighlight = -1;
private Int32 OLDPlay = -1;
private void gridHistoryPoints_CellDoubleClick(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
try
{
if ((PositionList.Count > 0)||(loadfinish))
{
Int32 both = 0;
foreach (POSIDGIS obj in PositionList)
{
Console.WriteLine("Name:" + obj.SMpos.m_vehName + " name2:" + (String)gridHistoryPoints.SelectedRows[0].Cells[1].Value + " iful:" + (obj.SMpos.m_vehName == (String)gridHistoryPoints.SelectedRows[0].Cells[1].Value) + "db1:" + obj.SMpos.m_lat + " db2:" + Convert.ToDouble((String)gridHistoryPoints.SelectedRows[0].Cells[7].Value) + "if: " + (obj.SMpos.m_lat == Convert.ToDouble((String)gridHistoryPoints.SelectedRows[0].Cells[7].Value)) + " dbaa1:" + obj.SMpos.m_lng+" dbaa2:"+Convert.ToDouble((String)gridHistoryPoints.SelectedRows[0].Cells[8].Value)+"if2:"+(obj.SMpos.m_lng == Convert.ToDouble((String)gridHistoryPoints.SelectedRows[0].Cells[8].Value)));
if ((obj.SMpos.m_vehName == (String)gridHistoryPoints.SelectedRows[0].Cells[1].Value) && (obj.SMpos.m_lat == Convert.ToDouble((String)gridHistoryPoints.SelectedRows[0].Cells[7].Value)) && (obj.SMpos.m_lng == Convert.ToDouble((String)gridHistoryPoints.SelectedRows[0].Cells[8].Value)))
{
Console.WriteLine("Enter over if");
m_graphicTracker.Highlight(obj.GISID, true);
MainForm2.simpleTextSymbol.YOffset = 30;
m_graphicTracker.SetTextSymbol(obj.GISID, MainForm2.simpleTextSymbol);
String tmpSpeedData = "";
if (MainForm2.isInMile) tmpSpeedData = MainForm2.langSpeed + " " + Convert.ToString((int)Math.Round(obj.SMpos.m_speed * 0.621371192)) + MainForm2.milesh;
else tmpSpeedData = MainForm2.langSpeed + " " + Convert.ToString(obj.SMpos.m_speed) + MainForm2.kmh;
m_graphicTracker.SetLabel(obj.GISID, obj.SMpos.m_vehName + "_" + obj.SMpos.m_posID + "\n" + tmpSpeedData + " " + MainForm2.langTime + " " + obj.SMpos.m_time.ConvertGMTToLocal().GetDTFromSeconds().ToShortTimeString() + "\n" + obj.SMpos.m_address);
obj.Select = true;
both++;
}
else if (obj.Select)
{
m_graphicTracker.Highlight(obj.GISID, false);
m_graphicTracker.SetLabel(obj.GISID, "");
obj.Select = false;
both++;
}
if (both == 2) break;
}
}
}
catch (Exception ex)
{
SM.Debug("Exception on click select a unit:" + ex.ToString());
}
}
private void StartBasicHistory_Tick(object sender, EventArgs e)
{
if (docLoad)
{
btDisplayHeading.PerformClick();
StartBasicHistory.Stop();
StartBasicHistory.Enabled = false;
}
}
private void btStopCalc_Click(object sender, EventArgs e)
{
}
private void toolWindow2_Resize(object sender, EventArgs e)
{
int diffHeight, diffWidth;
Control control = (Control)sender;
diffHeight = control.Size.Height / 2;
diffWidth = control.Size.Width / 2;
diffHeight = diffHeight - 50;
diffWidth = diffWidth - 170;
if ((diffHeight > 0) && (diffWidth > 0))
HistoryPanel.Location = new System.Drawing.Point(diffWidth, diffHeight);
}
private Color getcolorFromID(Int32 id)
{
Color tmp = Color.Black;
switch (id)
{
case 0: tmp = Color.Cyan; break;
case 1: tmp = Color.Magenta; break;
case 2: tmp = Color.Red; break;
case 3: tmp = Color.Green; break;
case 4: tmp = Color.Blue; break;
}
return tmp;
}
private void btCollapse_Click(object sender, EventArgs e)
{
if (!AniStateExpande)
{
AniStateExpande = true;
}
else
{
AniStateExpande = false;
}
}
private void btStopCalc_Click_1(object sender, EventArgs e)
{
ForceStop = true;
}
private void ResizeWorker_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(700);
}
private void ResizeWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
/// <summary>
/// Enable/disable the speed spinners when the combobox are selected
/// </summary>
private void speedLimit_CheckStateChanged(object sender, EventArgs e)
{
if ((RadCheckBox)sender == rcbSpeedLower)
rseSpeedLower.Enabled = ((RadCheckBox)sender).Checked;
else if ((RadCheckBox)sender == rcbSpeedUpper)
rseSpeedUpper.Enabled = ((RadCheckBox)sender).Checked;
}
#region 24H
/// <summary>
/// Enable/Disable the date pickers for history stand and
/// end date. The icon for the 24H will be changed depanding
/// on it's state
/// </summary>
private void pb24H_Click(object sender, EventArgs e)
{
if (pb24H.Tag.Equals("selected"))
{
pb24H.Tag = "unselected";
rdpEndTime.Enabled = true;
rdpStartTime.Enabled = true;
pb24H.Image = global::Dispatcher.Properties.Resources.h_24h_w;
}
else if (pb24H.Tag.Equals("unselected"))
{
pb24H.Tag = "selected";
rdpEndTime.Enabled = false;
rdpStartTime.Enabled = false;
pb24H.Image = global::Dispatcher.Properties.Resources.h_24h;
pb24H.Image = theme24H_Image;
}
}
/// <summary>
/// Display the tooltip when the mouse enters the 24H picture box
/// </summary>
private void pb24H_MouseEnter(object sender, EventArgs e)
{
toolTipHelp.ToolTipTitle = "Display last 24 hours: " + (pb24H.Tag.Equals("selected") ? "Active" : "Inactive");
toolTipHelp.Show(
String.Format("Decide between displaying the last 24 hours of history "
+ Environment.NewLine
+ "or selected a desired interval.")
, pb24H, 150000);
}
/// <summary>
/// Hide the tooltip when the mouse leaves the 24H picture box
/// </summary>
private void pb24H_MouseLeave(object sender, EventArgs e)
{
toolTipHelp.Hide(pb24H);
}
#endregion
/// <summary>
/// Display the tooltip when the mouse enters the Filter picture box
/// </summary>
private void pbFilter_MouseEnter(object sender, EventArgs e)
{
toolTipHelp.ToolTipTitle = "Filter units: " + (pbFilter.Tag.Equals("selected") ? "Active" : "Inactive");
toolTipHelp.Show(
String.Format("Filter the units list when the text box value changes")
, pbFilter, 150000);
}
/// <summary>
/// Hide the tooltip when the mouse leaves the Filter picture box
/// </summary>
private void pbFilter_MouseLeave(object sender, EventArgs e)
{
toolTipHelp.Hide(pbFilter);
}
/// <summary>
/// Hide or show the filter for the units tree view
/// </summary>
private void pbFilter_Click(object sender, EventArgs e)
{
// activate the filter and show the text box
if (pbFilter.Tag.Equals("unselected"))
{
pbFilter.Image = global::Dispatcher.Properties.Resources.h_filter;
pbFilter.Tag = "selected";
rtbFilterUnits.Visible = true;
}
else if (pbFilter.Tag.Equals("selected"))
{
pbFilter.Image = global::Dispatcher.Properties.Resources.h_filter_w;
pbFilter.Tag = "unselected";
rtbFilterUnits.Visible = false;
rtbFilterUnits.Text = "";
}
}
/// <summary>
/// Filter the tree view in order for the units to be find faster
/// </summary>
private void rtbFilterUnits_TextChanged(object sender, EventArgs e)
{
treeViewUnits.Filter = null;
treeViewUnits.Filter = rtbFilterUnits.Text;
}
/// <summary>
/// Set the type of the item inside the tree view to be
/// a Custom Tree Node which will hav the Color in the right
/// and as a property of the object
/// </summary>
private void treeViewUnits_CreateNodeElement(object sender, CreateTreeNodeElementEventArgs e)
{
e.NodeElement = new CustomTreeNodeElement();
if (e.NodeElement.ContentElement is ColorTreeContentElement)
{
ColorTreeContentElement treeElement = e.NodeElement.ContentElement as ColorTreeContentElement;
treeElement.OnColorChanged += delegate(object s2, ColorTreeContentElement.ColorChangedEventArgs e2)
{
if (e2.unitName != null && e2.unitName.Length > 0)
{
((Vehicle)MainForm2.vehicleHT[e2.unitName]).histcolor = e2.newColor;
String imageColor = "#" + e2.newColor.R.ToString("X2") + e2.newColor.G.ToString("X2") + e2.newColor.B.ToString("X2");
VisualSettings.InsertUpdateHTforVisualItems("histColor", ((Vehicle)MainForm2.vehicleHT[e2.unitName]).sc_id + "", imageColor);
}
};
}
}
/// <summary>
/// Add the Groups as Nodes inside the Tree View
/// </summary>
private void populateListBoxGroup()
{
// all units group
ColorUnitTreeNode groupNode = new ColorUnitTreeNode(MainForm2.returnLNGString("allunits"));
groupNode.Font = new Font(
new FontFamily("Segoe UI"),
12,
FontStyle.Bold,
GraphicsUnit.Pixel);
groupNode.Tag = -1;
groupNode.CheckState = Telerik.WinControls.Enumerations.ToggleState.Off;
groupNode.Expanded = true;
groupNode.Color = Color.Brown;
treeViewUnits.Nodes.Add(groupNode);
GroupClass g = new GroupClass();
// for each group add a tree node
foreach (int i in MainForm2.GroupHash.Keys)
{
g = (GroupClass)MainForm2.GroupHash[i];
try
{
AddTreeGroup(g.name, g.id);
}
catch (Exception ex)
{
Utils.WriteLine("Unable to create Group: " + ex.ToString(), ConsoleColor.Red);
}
}
}
/// <summary>
/// Add a Group Node to the Tree View
/// </summary>
/// <param name="groupName">Group name which needs to be added to the Tree Node</param>
/// <param name="groupID">Group ID which will be set as a tag for this group node</param>
/// <returns>Returns the inserted Tree Node</returns>
private ColorUnitTreeNode AddTreeGroup(string groupName, Int32 groupID)
{
ColorUnitTreeNode groupNode = new ColorUnitTreeNode(groupName);
groupNode.Font = new Font(
new FontFamily("Segoe UI"),
12,
FontStyle.Bold,
GraphicsUnit.Pixel);
groupNode.Tag = groupID;
groupNode.CheckState = Telerik.WinControls.Enumerations.ToggleState.Off;
groupNode.Expanded = true;
groupNode.Color = Color.Red;
// add the node to the tree view
treeViewUnits.Nodes[0].Nodes.Add(groupNode);
return groupNode;
}
private bool DefaultGroupAdded = false;
/// <summary>
/// Add Units to the groups nodes in the Tree View
/// </summary>
private void populateListBoxUnits()
{
// for each Unit defined in the hash table
foreach (DictionaryEntry de in MainForm2.vehicleHT)
{
Vehicle veh = de.Value as Vehicle;
if (veh != null)
{
ColorUnitTreeNode unitNode = new ColorUnitTreeNode(veh.busName);
unitNode.Tag = veh.sc_id;
unitNode.Color = ((Vehicle)MainForm2.vehicleHT[veh.busName]).histcolor;
// check to see if the unit is assigned to a group
if (veh.group != null && veh.group.Id != 0)
{
// the group already exists
}
else
{
// create Unassigned group if not created until now
if (!DefaultGroupAdded)
{
AddTreeGroup(MainForm2.returnLNGString("otherunit"), 0);
DefaultGroupAdded = true;
}
}
// search the group in which the unit will be added
foreach (ColorUnitTreeNode groupNode in treeViewUnits.Nodes[0].Nodes)
{
Int32 groupID = (Int32)groupNode.Tag;
if (groupID == veh.group.Id)
groupNode.Nodes.Add(unitNode);
}
}
}
}
/// <summary>
///
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private bool FilterNode(RadTreeNode node)
{
// add Group and 'All units' Nodes
if (node.Level < 2)
return true;
// add unit if no filtering is required
if (!rtbFilterUnits.Visible || (rtbFilterUnits.Visible && rtbFilterUnits.Text.Length == 0))
return true;
// add unit if the name contains the desired text
if (node.Text.ToUpper().Contains(rtbFilterUnits.Text.Trim().ToUpper()))
return true;
return false;
}
/// <summary>
/// Reset the visual UI for the history tab, including speeds,
/// times, grids and animation
/// </summary>
private void rbResetHistory_Click(object sender, EventArgs e)
{
// remove old dataset points
if (docLoad)
{
btDisplayHeading.PerformClick();
StartBasicHistory.Stop();
StartBasicHistory.Enabled = false;
}
// uncheck all units
foreach (RadTreeNode node in treeViewUnits.Nodes)
node.Checked = false;
// clear speed values
rseSpeedLower.Value = 0;
rseSpeedUpper.Value = 0;
// clear time values
rdpStartTime.Value = DateTime.Now.AddDays(-1);
rdpEndTime.Value = DateTime.Now;
// clear the grid
ListforGrid.Clear();
gridHistoryPoints.DataSource = null;
// reset the animation
btStop.PerformClick();
// disable the history result window
foreach (Control ctr in windowHistoryResult.Controls)
ctr.Enabled = false;
}
/// <summary>
/// Set the type of data which will be displayed inside the points grid
/// </summary>
private void gridHistoryPoints_CreateCell(object sender, GridViewCreateCellEventArgs e)
{
// format Ticket Log table
if (e.Row is GridDataRowElement)
{
// increase row height
//e.Row.RowInfo.Height = 53;
if (e.Column.Name.Equals("history"))
{
e.CellType = typeof(HistoryGridColumn);
e.CellElement = new HistoryGridCellElement(e.Column, e.Row);
}
}
}
/// <summary>
/// Format the cells of history points to the custom format, including padding
/// </summary>
private void gridHistoryPoints_CellFormatting(object sender, CellFormattingEventArgs e)
{
GridCellElement cellElement = e.CellElement;
GridViewDataColumn columnInfo = e.CellElement.ColumnInfo as GridViewDataColumn;
// set padding and force the content adding
if (cellElement is HistoryGridCellElement && columnInfo.Name == "history")
{
cellElement.Padding = new Padding(0, 0, 0, 0);
cellElement.SetContent();
}
}
/// <summary>
/// Change the buttons background color for the animation buttons depending on their enabled/disabled
/// state
/// </summary>
private void rbtAnimation_EnabledChanged(object sender, EventArgs e)
{
if (((RadButton)sender).Enabled)
((RadButton)sender).ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
else
((RadButton)sender).ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColorDisabled;
}
#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
/// <summary>
/// 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
/// </summary>
private void radDock1_DockStateChanging(object sender, DockStateChangingEventArgs e)
{
e.Cancel = true;
}
private void checkbox_UpdateHT(object sender, StateChangedEventArgs args)
{
VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString());
}
private void rse_ValueChanged(object sender, EventArgs e)
{
VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadSpinEditor)sender).Name, ((RadSpinEditor)sender).Value.ToString());
}
}
}