3372 lines
104 KiB
C#
3372 lines
104 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using Telerik.WinControls.UI;
|
|
using System.Collections;
|
|
using SafeMobileLib;
|
|
using Telerik.WinControls;
|
|
using Telerik.WinControls.Primitives;
|
|
using System.Threading;
|
|
using Telerik.WinControls.Data;
|
|
using Telerik.WinControls.UI.Docking;
|
|
using Dispatcher.maptab.UIClasses;
|
|
|
|
namespace Safedispatch_4_0
|
|
{
|
|
public partial class SMSuserControl : UserControl
|
|
{
|
|
public enum TextStatus
|
|
{
|
|
SD_NO_GW = 0,
|
|
UNREAD_OUT = 1,
|
|
READ_OUT = 2,
|
|
UNREAD_IN = 3,
|
|
READ_IN = 4,
|
|
UNREAD_EMAIL = 5,
|
|
READ_EMAIL = 7,
|
|
UNKNOWN = 6
|
|
};
|
|
|
|
private SMdb_access smdbObj;
|
|
public MainForm2 parent;
|
|
//language
|
|
String msginboxallunit, msgoutboxallunit, msginboxunit, msgoutboxunit, msginboxgrp, msgoutboxgrp, msgRecy;
|
|
String wordRecyBin, wordMoveDel,wordInbox, wordOutbox, wordFrom, wordTo, wordMarkRead, wordMarkUnRead, wordDate, wordDelete;
|
|
#region Value from SD_LITE
|
|
enum NodeType
|
|
{
|
|
trash = 0,
|
|
inbox,
|
|
outbox,
|
|
grInbox,
|
|
grOutbox,
|
|
subInbox,
|
|
subOutbox
|
|
}
|
|
ArrayList arVehSCID;
|
|
ArrayList arInboxSMS;
|
|
ArrayList arInboxSMSLimit2000;
|
|
ArrayList arDeletedSMS;
|
|
public Hashtable htSUIDwithNewSMS;
|
|
private RadTreeNode selectedTreeNode = null;
|
|
private NodeType selectedNodeType = NodeType.grInbox;
|
|
public int selectedSC_ID = 0;
|
|
public bool inboxSelec = true;
|
|
private bool trashSelec = false;
|
|
public int[] selectedSC_IDlist = null;
|
|
//public static ConvertDT convDT;
|
|
public static Hashtable htGroupsKeyNAmeValueID;
|
|
private int[] slectedSMSidx;
|
|
internal static Boolean isSMSLoaded = false;
|
|
#endregion
|
|
|
|
|
|
|
|
public SMSuserControl(MainForm2 mf2)
|
|
{
|
|
htGroupsKeyNAmeValueID = new Hashtable(); htSUIDwithNewSMS = new Hashtable(); arVehSCID = new ArrayList(); arInboxSMS = new ArrayList(); arDeletedSMS = new ArrayList();
|
|
parent = mf2;
|
|
InitializeComponent();
|
|
SetLanguage();
|
|
|
|
|
|
#region STYLE THEMING
|
|
labelReportName.ForeColor = MainForm2.LabelColor;
|
|
labelUser.ForeColor = MainForm2.LabelColor;
|
|
rbNewMessage.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
|
|
rbtSendQuick.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
|
|
pbReportType.Image = Utils.ChangeColor(Dispatcher.Properties.Resources.r_textmessaging, MainForm2.ButtonColor);
|
|
|
|
|
|
SMSGridView.GridNavigator.GridViewElement.PagingPanelElement.ShowFastBackButton = false;
|
|
SMSGridView.GridNavigator.GridViewElement.PagingPanelElement.ShowFastForwardButton = false;
|
|
//SMSGridView.GridNavigator.GridViewElement.PagingPanelElement.ButtonsStripElement.S = false;
|
|
SMSGridView.GridNavigator.GridViewElement.PagingPanelElement.ShowNumericalButtons = false;
|
|
#endregion
|
|
|
|
rlMsgStatus.Text = MainForm2.returnLNGString("msg_status");
|
|
rddlFilterMsgStatus.Items.Add(MainForm2.returnLNGString("displayall"));
|
|
rddlFilterMsgStatus.Items.Add(MainForm2.returnLNGString("msg_read"));
|
|
rddlFilterMsgStatus.Items.Add(MainForm2.returnLNGString("msg_unread"));
|
|
rddlFilterMsgStatus.SelectedIndex = 0;
|
|
|
|
// set theme for the Message Box
|
|
RadMessageBox.SetThemeName("TelerikMetroBlue");
|
|
|
|
// add icons for picture box keys
|
|
|
|
// add image to the dictionary if not exists
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_key_r_d"))
|
|
MainForm2.imagesDictionary.Add("s_key_r_d", Utils.MakeGrayscale3((Bitmap)Dispatcher.Properties.Resources.s_key_r, 0.5f));
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_key_u_d"))
|
|
MainForm2.imagesDictionary.Add("s_key_u_d", Utils.MakeGrayscale3((Bitmap)Dispatcher.Properties.Resources.s_key_u, 0.5f));
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_key_del_d"))
|
|
MainForm2.imagesDictionary.Add("s_key_del_d", Utils.MakeGrayscale3((Bitmap)Dispatcher.Properties.Resources.s_key_del, 0.5f));
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_key_r"))
|
|
MainForm2.imagesDictionary.Add("s_key_r", Dispatcher.Properties.Resources.s_key_r);
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_key_u"))
|
|
MainForm2.imagesDictionary.Add("s_key_u", Dispatcher.Properties.Resources.s_key_u);
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_key_del"))
|
|
MainForm2.imagesDictionary.Add("s_key_del", Dispatcher.Properties.Resources.s_key_del);
|
|
|
|
|
|
// 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;
|
|
|
|
|
|
// set the row height
|
|
SMSGridView.TableElement.RowHeight = 43;
|
|
this.SMSGridView.EnableAlternatingRowColor = true;
|
|
this.SMSGridView.TableElement.GridViewElement.TableElement.AlternatingRowColor = Color.LightYellow;
|
|
|
|
// remove border for grid
|
|
this.SMSGridView.GridViewElement.DrawBorder = false;
|
|
this.SMSGridView.GridViewElement.GroupPanelElement.DrawBorder = false;
|
|
|
|
smdbObj = new SMdb_access();
|
|
|
|
}
|
|
|
|
private void SetLanguage()
|
|
{
|
|
wordInbox = MainForm2.returnLNGString("Inbox");
|
|
wordOutbox = MainForm2.returnLNGString("Outbox");
|
|
wordRecyBin = MainForm2.returnLNGString("RecycleBin");
|
|
wordFrom = MainForm2.returnLNGString("Ilabel1");
|
|
wordTo = MainForm2.returnLNGString("Ilabel2");
|
|
wordDate = MainForm2.returnLNGString("rapday");
|
|
|
|
wordMoveDel = MainForm2.returnLNGString("movedel");
|
|
wordDelete = MainForm2.returnLNGString("SMSDelete");
|
|
msginboxallunit = MainForm2.returnLNGString("msginboxallunit");
|
|
msgoutboxallunit = MainForm2.returnLNGString("msgoutboxallunit");
|
|
msginboxunit = MainForm2.returnLNGString("msginboxunit");
|
|
msgoutboxunit = MainForm2.returnLNGString("msgoutboxunit");
|
|
msginboxgrp = MainForm2.returnLNGString("msginboxgrp");
|
|
msgoutboxgrp = MainForm2.returnLNGString("msgoutboxgrp");
|
|
msgRecy = MainForm2.returnLNGString("msgRecy");
|
|
|
|
wordMarkRead = MainForm2.returnLNGString("wordMarkRead");
|
|
wordMarkUnRead = MainForm2.returnLNGString("wordMarkUnRead");
|
|
SMSGridView.Columns["Source"].HeaderText = wordFrom;
|
|
SMSGridView.Columns["DisplayMessage"].HeaderText = MainForm2.returnLNGString("Message");
|
|
SMSGridView.Columns["Date"].HeaderText = MainForm2.returnLNGString("Received");
|
|
SMSGridView.Columns["timeAgo"].HeaderText = MainForm2.returnLNGString("datetimefil");
|
|
SMSGridView.Columns["Color"].HeaderText = MainForm2.returnLNGString("Color");
|
|
radMenuWriteSMS.Text = MainForm2.returnLNGString("WriteSMS");
|
|
radLabelSMSstatus.Text = MainForm2.returnLNGString("SMSStatus");
|
|
rbNewMessage.Text = MainForm2.returnLNGString("newText");
|
|
tbSearch.NullText = MainForm2.returnLNGString("searchtextmessage");
|
|
rcbDeleteConfirmation.Text = MainForm2.returnLNGString("delconfirm");
|
|
searchTextBox.NullText = MainForm2.returnLNGString("type2search");
|
|
rbtSendQuick.Text = MainForm2.returnLNGString("sendmsg");
|
|
documentWindow2.Text = MainForm2.returnLNGString("msg");
|
|
labelReportName.Text = MainForm2.returnLNGString("tabSMS");
|
|
labelReportDetails.Text = MainForm2.returnLNGString("smstabDetails");
|
|
}
|
|
|
|
#region SMS from SD_LITE
|
|
|
|
private void btn_refreshSMS_Click(object sender, EventArgs e)
|
|
{
|
|
RefreshALL(false);
|
|
}
|
|
|
|
private void SMSGridView_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
#region DELETE KEY
|
|
if (e.KeyCode == Keys.Delete && pbDelete.Tag.Equals("selected"))
|
|
{
|
|
// detect if many messages are selected or not
|
|
bool multiMessagesSelected = SMSGridView.SelectedRows.Count > 1;
|
|
|
|
DialogResult dr2 = DialogResult.Yes;
|
|
|
|
if (rcbDeleteConfirmation.Checked)
|
|
{
|
|
dr2 = RadMessageBox.Show("Are you sure you want to delete selected " +
|
|
(multiMessagesSelected ? "messages" : "message"),
|
|
(multiMessagesSelected ? "Delete messages" : "Delete message"),
|
|
MessageBoxButtons.YesNo, RadMessageIcon.Info);
|
|
}
|
|
// only if yes was pressed
|
|
if (dr2 == DialogResult.Yes)
|
|
{
|
|
|
|
if (slectedSMSidx != null && slectedSMSidx.Length > 0)
|
|
{
|
|
GridViewSelectedRowsCollection selectedRows = SMSGridView.SelectedRows;
|
|
foreach (GridViewDataRowInfo row in SMSGridView.SelectedRows.ToList())
|
|
{
|
|
if (!trashSelec)
|
|
{
|
|
smdbObj.Delete_SMS(Int16.Parse(row.Cells["Idx"].Value.ToString()));
|
|
}
|
|
else
|
|
{
|
|
smdbObj.Delete_SMS_from_trash(new int[] { Int16.Parse(row.Cells["Idx"].Value.ToString()) });
|
|
}
|
|
|
|
// remove item from the grid
|
|
//if (row.DataBoundItem != null && row.DataBoundItem is SMSDataforGRID)
|
|
// ListforGrid.Remove(row.DataBoundItem as SMSDataforGRID);
|
|
SMSGridView.Rows.Remove(row);
|
|
}
|
|
|
|
// display no events panel
|
|
if (SMSGridView.Rows.Count == 0)
|
|
panelNoEvents.Visible = true;
|
|
|
|
|
|
/*
|
|
if (selectedSC_IDlist != null)
|
|
{
|
|
if (selectedSC_IDlist.Length > 0)
|
|
{
|
|
updateDataGrid(selectedSC_IDlist, inboxSelec, false, false, false);
|
|
SelectSMSandDisplay(false);
|
|
}
|
|
}
|
|
RefreshALL(true);*/
|
|
}
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region UNREAD KEY
|
|
else if (e.KeyCode == Keys.U && pbU.Tag.Equals("selected"))
|
|
{
|
|
foreach (GridViewRowInfo r in SMSGridView.SelectedRows)
|
|
{
|
|
smdbObj.Update_SMS(
|
|
(GetTreeLevel() == TreeLevel.INBOX ? (int)TextStatus.UNREAD_IN : (int)TextStatus.UNREAD_OUT),
|
|
Convert.ToInt32(r.Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = r.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
gridItem.Status = 0;
|
|
}
|
|
|
|
r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
r.Cells["Status"].Value = 0;
|
|
}
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
}
|
|
#endregion
|
|
|
|
#region READ KEY
|
|
else if (e.KeyCode == Keys.R && pbR.Tag.Equals("selected"))
|
|
{
|
|
foreach (GridViewRowInfo r in SMSGridView.SelectedRows)
|
|
{
|
|
smdbObj.Update_SMS(
|
|
(GetTreeLevel() == TreeLevel.INBOX ? (int)TextStatus.READ_IN : (int)TextStatus.READ_OUT), Convert.ToInt32(r.Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = r.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
gridItem.Status = 1;
|
|
}
|
|
|
|
r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
r.Cells["Status"].Value = 1;
|
|
}
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
private RadTreeNode getParent(RadTreeNode rtn)
|
|
{
|
|
RadTreeNode returnNode = rtn;
|
|
if (rtn.Parent != null)
|
|
{
|
|
returnNode = getParent(rtn.Parent);
|
|
}
|
|
return returnNode;
|
|
}
|
|
private int[] getChildSC_ID(RadTreeNode rtn)
|
|
{
|
|
int[] ret = new int[0];
|
|
if (rtn != null)
|
|
{
|
|
if (rtn.Nodes.Count > 0)
|
|
{
|
|
int x = 0;
|
|
int count = 0;
|
|
int[][] tempArray = new int[rtn.Nodes.Count][];
|
|
foreach (RadTreeNode rtnChild in rtn.Nodes)
|
|
{
|
|
int[] temp = getChildSC_ID(rtnChild);
|
|
tempArray[x] = temp;
|
|
x++;
|
|
count += temp.Length;
|
|
}
|
|
ret = new int[count];
|
|
int count2 = 0;
|
|
for (int i = 0; i < rtn.Nodes.Count; i++)
|
|
{
|
|
for (int j = 0; j < tempArray[i].Length; j++)
|
|
{
|
|
ret[count2] = tempArray[i][j];
|
|
count2++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
if (rtn.Name != null && rtn.Name != "")
|
|
{
|
|
if (MainForm2.vehicleHT.ContainsKey(rtn.Name))
|
|
{
|
|
ret = new int[1];
|
|
ret[0] = ((Vehicle)MainForm2.vehicleHT[rtn.Name]).sc_id;
|
|
}
|
|
else
|
|
{
|
|
SM.Debug("Empty group selected3 :" + rtn.Name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
private int[] getChildSC_ID_GroupID(RadTreeNode rtn, out Boolean isAgroup)
|
|
{
|
|
isAgroup = false;
|
|
int[] ret = new int[0];
|
|
if (rtn != null)
|
|
{
|
|
if (rtn.Nodes.Count > 0)
|
|
{
|
|
if (rtn.Name != null && rtn.Name != "")
|
|
{
|
|
foreach (GroupClass obj in MainForm2.GroupHash.Values)
|
|
{
|
|
if (obj.name.CompareTo(rtn.Name) == 0)
|
|
{
|
|
ret = new int[1];
|
|
ret[0] = obj.cps_id;
|
|
isAgroup = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
if (rtn.Name != null && rtn.Name != "")
|
|
{
|
|
if (MainForm2.vehicleHT.ContainsKey(rtn.Name))
|
|
{
|
|
ret = new int[1];
|
|
ret[0] = ((Vehicle)MainForm2.vehicleHT[rtn.Name]).sc_id;
|
|
}
|
|
else
|
|
{
|
|
foreach (GroupClass obj in MainForm2.GroupHash.Values)
|
|
{
|
|
if (obj.name.CompareTo(rtn.Name) == 0)
|
|
{
|
|
ret = new int[1];
|
|
ret[0] = obj.cps_id;
|
|
isAgroup = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!isAgroup) SM.Debug("Empty group selected2 :" + rtn.Name);
|
|
}
|
|
}
|
|
}
|
|
if (ret.Length == 0)
|
|
{
|
|
ret = getChildSC_ID(rtn);
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
public String whereCommand = "";
|
|
private Boolean Type_Inbox_for_limit2000 = true;
|
|
private Int32 PageforInbox = 0;
|
|
private void getInboxSMS(int[] sc_id)
|
|
{
|
|
PageforInbox = 0;
|
|
whereCommand = "where deleted=0 AND mess not like 'Linx%.%' AND sc_id_sour IN (";
|
|
Type_Inbox_for_limit2000 = true;
|
|
for (int i = 0; i < sc_id.Length; i++)
|
|
{
|
|
if (i != sc_id.Length - 1)
|
|
{
|
|
whereCommand += sc_id[i].ToString() + ",";
|
|
}
|
|
else
|
|
{
|
|
whereCommand += sc_id[i].ToString() + ")";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
if (sc_id.Length > 0)
|
|
{
|
|
arInboxSMS = smdbObj.get_SMS(whereCommand, true);
|
|
//arInboxSMS = smdbObj.get_SMS_with_limit(whereCommand, true, 0);
|
|
}
|
|
else
|
|
{
|
|
arInboxSMS = smdbObj.get_SMS("where deleted=0", true);
|
|
whereCommand = "where deleted=0";
|
|
//arInboxSMS = smdbObj.get_SMS_with_limit("where deleted=0", true,0);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error getInboxSMS:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
private void getOutboxSMS_ifisGroup(int[] sc_id)
|
|
{
|
|
PageforInbox = 0;
|
|
whereCommand = "where deleted=0 AND mess not like 'Linx%.%' AND sc_id_sour=sc_id_dest and sc_id_sour=" + sc_id[0].ToString();
|
|
try
|
|
{
|
|
if (sc_id.Length > 0)
|
|
{
|
|
arInboxSMS = smdbObj.get_SMS(whereCommand, true);
|
|
//arInboxSMS = smdbObj.get_SMS_with_limit(whereCommand, true, 0);
|
|
}
|
|
else
|
|
{
|
|
arInboxSMS = smdbObj.get_SMS("where deleted=0", true);
|
|
whereCommand = "where deleted=0";
|
|
//arInboxSMS = smdbObj.get_SMS_with_limit("where deleted=0", true,0);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error getInboxSMS:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
private void getOutboxSMS(int[] sc_id)
|
|
{
|
|
if (sc_id != null)
|
|
{
|
|
PageforInbox = 0;
|
|
Type_Inbox_for_limit2000 = false;
|
|
whereCommand = "where deleted=0 AND mess not like 'Linx%.%' and sc_id_dest IN (";
|
|
for (int i = 0; i < sc_id.Length; i++)
|
|
{
|
|
if (i != sc_id.Length - 1)
|
|
{
|
|
whereCommand += sc_id[i].ToString() + ",";
|
|
}
|
|
else
|
|
{
|
|
whereCommand += sc_id[i].ToString() + ")";
|
|
}
|
|
}
|
|
try
|
|
{
|
|
if (sc_id.Length > 0)
|
|
{
|
|
arInboxSMS = smdbObj.get_SMS(whereCommand, false);
|
|
//arInboxSMS = smdbObj.get_SMS_with_limit(whereCommand, false,0);
|
|
}
|
|
else
|
|
{
|
|
arInboxSMS = smdbObj.get_SMS("where deleted=0", false);
|
|
whereCommand = "where deleted=0";
|
|
//arInboxSMS = smdbObj.get_SMS_with_limit("where deleted=0", false,0);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error getOutboxSMS:" + ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SetLabelText(RadTreeNode rtn)
|
|
{
|
|
NodeType nt = getNodeType(rtn);
|
|
if (rtn != null)
|
|
{
|
|
switch (nt)
|
|
{
|
|
case NodeType.inbox:
|
|
radLabelSMSstatus.Text = msginboxallunit;
|
|
break;
|
|
case NodeType.outbox:
|
|
radLabelSMSstatus.Text = msgoutboxallunit;
|
|
break;
|
|
case NodeType.trash:
|
|
radLabelSMSstatus.Text = msgRecy;
|
|
break;
|
|
case NodeType.grInbox:
|
|
radLabelSMSstatus.Text = msginboxgrp + rtn.Text;
|
|
break;
|
|
case NodeType.grOutbox:
|
|
radLabelSMSstatus.Text = msgoutboxgrp + rtn.Text;
|
|
break;
|
|
case NodeType.subInbox:
|
|
radLabelSMSstatus.Text = msginboxunit + rtn.Text;
|
|
break;
|
|
case NodeType.subOutbox:
|
|
radLabelSMSstatus.Text = msgoutboxunit + rtn.Text;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private NodeType getNodeType(RadTreeNode rtn)
|
|
{
|
|
NodeType ret = NodeType.inbox;
|
|
if (rtn.Nodes.Count > 0)
|
|
{
|
|
if (rtn.Parent != null)
|
|
{
|
|
if (inboxSelec)
|
|
{
|
|
ret = NodeType.grInbox;
|
|
}
|
|
else
|
|
{
|
|
ret = NodeType.grOutbox;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (inboxSelec)
|
|
{
|
|
ret = NodeType.inbox;
|
|
}
|
|
else
|
|
{
|
|
ret = NodeType.outbox;
|
|
}
|
|
if (trashSelec)
|
|
{
|
|
ret = NodeType.trash;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (selectedSC_ID != 0)
|
|
{
|
|
if (inboxSelec)
|
|
{
|
|
ret = NodeType.subInbox;
|
|
}
|
|
else
|
|
{
|
|
ret = NodeType.subOutbox;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (inboxSelec)
|
|
{
|
|
ret = NodeType.grInbox;
|
|
}
|
|
else
|
|
{
|
|
ret = NodeType.grOutbox;
|
|
}
|
|
if (trashSelec)
|
|
{
|
|
ret = NodeType.trash;
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
private void CheckAllInbox()
|
|
{
|
|
int[] scidArray = new int[arVehSCID.Count];
|
|
int i = 0;
|
|
foreach (VehandID obj in arVehSCID)
|
|
{
|
|
try
|
|
{
|
|
scidArray[i] = obj.sc_id;
|
|
i++;
|
|
}
|
|
catch (Exception ex) { SM.Debug("Ex: "+ex.ToString()); }
|
|
}
|
|
//Console.WriteLine("CheckAllInbox getInboxSMS");
|
|
getInboxSMS(scidArray);
|
|
htSUIDwithNewSMS.Clear();
|
|
if (arInboxSMS.Count > 0)
|
|
{
|
|
foreach (SMSfromDB obj in arInboxSMS)
|
|
{
|
|
if (obj.status == (int)TextStatus.SD_NO_GW || obj.status == (int)TextStatus.UNREAD_OUT
|
|
|| obj.status == (int)TextStatus.UNREAD_IN || obj.status == (int)TextStatus.UNKNOWN)
|
|
{
|
|
if (!htSUIDwithNewSMS.Contains(obj.sc_id))
|
|
{
|
|
htSUIDwithNewSMS.Add(obj.sc_id, 0);
|
|
}
|
|
int tempI = Convert.ToInt32(htSUIDwithNewSMS[obj.sc_id]);
|
|
tempI++;
|
|
htSUIDwithNewSMS[obj.sc_id] = tempI;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void update4DeletedSMS()
|
|
{
|
|
try
|
|
{
|
|
arDeletedSMS = smdbObj.get_Deleted_SMS();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error update4DeletedSMS:"+ex.ToString());
|
|
}
|
|
|
|
SMSGridView.Rows.Clear();
|
|
SMSGridView.Columns["Dest"].IsVisible = true;
|
|
SMSGridView.Columns["Dest"].HeaderText = wordTo;
|
|
SMSGridView.Columns["Source"].HeaderText = wordFrom;
|
|
|
|
Bitmap img = null;
|
|
Int32 stat = 0;
|
|
String email = "";
|
|
ListforGrid.Clear();
|
|
foreach (SMSfromDB obj in arDeletedSMS)
|
|
{
|
|
string content = obj.mes;
|
|
if (obj.mes.Length > 25)
|
|
{
|
|
//content = obj.mes.Substring(0, 25) + "...";
|
|
}
|
|
if (obj.status == (int)TextStatus.SD_NO_GW || obj.status == (int)TextStatus.UNREAD_OUT
|
|
|| obj.status == (int)TextStatus.UNREAD_IN || obj.status == (int)TextStatus.UNKNOWN)
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.trashmic1;
|
|
stat = 0;
|
|
email = "";
|
|
}
|
|
else
|
|
{
|
|
if (obj.status == (int)TextStatus.UNREAD_EMAIL || obj.status == (int)TextStatus.READ_EMAIL)
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.trashmic1;
|
|
stat = 2;
|
|
email = obj.email;
|
|
}
|
|
else
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.trashmic1;
|
|
stat = 1;
|
|
email = "";
|
|
}
|
|
}
|
|
|
|
//set corect names
|
|
string subNAmeSource = "Unknown unit name1";
|
|
if (MainForm2.VehIDHash[obj.sc_id_sour] != null)
|
|
{
|
|
subNAmeSource = (string)MainForm2.VehIDHash[obj.sc_id_sour];
|
|
}
|
|
else
|
|
{
|
|
if (stat != 2)
|
|
{
|
|
subNAmeSource = "Dispatcher";
|
|
}
|
|
else
|
|
{
|
|
subNAmeSource = email;
|
|
}
|
|
}
|
|
string subNAmeDest = "Unknown unit name2";
|
|
if (MainForm2.VehIDHash[obj.sc_id_Dest] != null)
|
|
{
|
|
subNAmeDest = (string)MainForm2.VehIDHash[obj.sc_id_Dest];
|
|
}
|
|
else
|
|
{
|
|
if (stat != 2)
|
|
{
|
|
subNAmeDest = "Dispatcher";
|
|
}
|
|
else
|
|
{
|
|
subNAmeDest = email;
|
|
}
|
|
}
|
|
//ListforGrid.Add(new SMSDataforGRID(obj.idx, img, subNAmeSource, subNAmeDest, content, obj.mes, convDT.GetDTLocalFromSeconds(obj.date).ToString("MMM d,yyyy '-' HH:mm:ss"), stat, email));
|
|
try
|
|
{
|
|
String DataString = obj.date.GetRegionalFormat(MainForm2.is24hours, MainForm2.DayFirst);
|
|
SMSDataforGRID smsItem = new SMSDataforGRID(obj.idx, img, subNAmeSource, subNAmeDest, content, obj.mes, DataString, stat, email, obj.sc_id_sour, obj.sc_id_Dest,
|
|
(new DateTime(1970, 1, 1)).AddSeconds(obj.date));
|
|
smsItem.Color = obj.color;
|
|
ListforGrid.Add(smsItem);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error on gridview DateFormat:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
ArrayList positions = new ArrayList();
|
|
if (arInboxSMS.Count > 0)
|
|
{
|
|
try
|
|
{
|
|
SMSGridView.DataSource = null;
|
|
SMSGridView.DataSource = ListforGrid;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error on populate grid" + ex.ToString());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SMSGridView.Rows.Clear();
|
|
//SMSGridView.Refresh();
|
|
}
|
|
SMSGridView.Refresh();
|
|
SMSGridView.TableElement.ScrollToRow(0);
|
|
}
|
|
|
|
bool firstTime = true;
|
|
volatile List<SMSDataforGRID> ListforGrid = new List<SMSDataforGRID>();
|
|
public void updateDataGrid(int[] sc_id, bool inbox, bool trash, Boolean jump_over_select, Boolean ifisGroup)
|
|
{
|
|
try
|
|
{
|
|
// ArrayList ar = new ArrayList();
|
|
if (!jump_over_select)
|
|
{
|
|
if (inbox)
|
|
{
|
|
getInboxSMS(sc_id);
|
|
SMSGridView.Columns["Dest"].IsVisible = false;
|
|
}
|
|
else
|
|
{
|
|
if (!ifisGroup)
|
|
getOutboxSMS(sc_id);
|
|
else
|
|
getOutboxSMS_ifisGroup(sc_id);
|
|
SMSGridView.Columns["Dest"].IsVisible = false;
|
|
}
|
|
}
|
|
if (trash)
|
|
{
|
|
update4DeletedSMS();
|
|
}
|
|
else
|
|
{
|
|
SMSGridView.Rows.Clear();
|
|
ListforGrid.Clear();
|
|
if (arInboxSMS.Count <= 2000)
|
|
{
|
|
btn_PrevPage.Visible = false;
|
|
btn_NextPage.Visible = false;
|
|
foreach (SMSfromDB obj in arInboxSMS)
|
|
{
|
|
string subNAme = "Unknown unit name";
|
|
Bitmap img = null;
|
|
Int32 stat = 0;
|
|
String email = "";
|
|
|
|
|
|
// if unit is found and not a group node selected
|
|
if (MainForm2.VehIDHash[obj.sc_id] != null && SMSTreeView.SelectedNode.Nodes.Count >= 0)
|
|
{
|
|
subNAme = (string)MainForm2.VehIDHash[obj.sc_id];
|
|
}
|
|
// set name for group as destination one
|
|
else
|
|
subNAme = SMSTreeView.SelectedNode.Text;
|
|
|
|
|
|
if (!inbox)
|
|
{
|
|
/*
|
|
if (obj.sc_id_Dest == obj.sc_id_sour)
|
|
subNAme = SMSTreeView.SelectedNode.Name;
|
|
* */
|
|
//if(SMSTreeView.SelectedNode.Name.Equals("Outbox"))
|
|
|
|
}
|
|
string content = obj.mes;
|
|
if (obj.mes.Length > 25)
|
|
{
|
|
//content = obj.mes.Substring(0, 25) + "...";
|
|
}
|
|
if (obj.status == (int)TextStatus.SD_NO_GW || obj.status == (int)TextStatus.UNREAD_OUT
|
|
|| obj.status == (int)TextStatus.UNREAD_IN || obj.status == (int)TextStatus.UNKNOWN)
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
stat = 0;
|
|
email = "";
|
|
}
|
|
else
|
|
{
|
|
if (obj.status == (int)TextStatus.UNREAD_EMAIL || obj.status == (int)TextStatus.READ_EMAIL)
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.email;
|
|
stat = 2;
|
|
email = obj.email;
|
|
}
|
|
else
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
stat = 1;
|
|
email = "";
|
|
}
|
|
}
|
|
//ListforGrid.Add(new SMSDataforGRID(obj.idx, img, subNAme, "", content, obj.mes, convDT.GetDTLocalFromSeconds(obj.date).ToString("MMM d,yyyy '-' HH:mm:ss"), stat, email));
|
|
try
|
|
{
|
|
String DataString = "";
|
|
DataString = obj.date.GetRegionalFormat(MainForm2.is24hours, MainForm2.DayFirst);
|
|
//if (MainForm2.is24hours)
|
|
//{
|
|
// if (MainForm2.DayFirst)
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("dd/MM/yyyy HH:mm:ss, ddd");
|
|
// else
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("MM/dd/yyyy HH:mm:ss, ddd");
|
|
//}
|
|
//else
|
|
//{
|
|
// if (MainForm2.DayFirst)
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("dd/MM/yyyy hh:mm:ss tt, ddd");
|
|
// else
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("MM/dd/yyyy hh:mm:ss tt, ddd");
|
|
//}
|
|
|
|
// find spaces to add a new line between them
|
|
string[] split = DataString.Split(" ".ToCharArray());
|
|
if (split.Length == 4)
|
|
DataString = String.Format("{0}\n{1} {2} {3}", split[0], split[1], split[2], split[3]);
|
|
else if (split.Length == 3)
|
|
DataString = String.Format("{0}\n{1} {2}", split[0], split[1], split[2]);
|
|
else if (split.Length == 2)
|
|
DataString = String.Format("{0}\n{1}", split[0], split[1]);
|
|
|
|
|
|
SMSDataforGRID gridItem = new SMSDataforGRID(obj.idx, img, subNAme, "", content, obj.mes, DataString, stat, email, obj.sc_id, 0,
|
|
(new DateTime(1970, 1, 1)).AddSeconds(obj.date));
|
|
|
|
gridItem.Color = obj.color;
|
|
|
|
ListforGrid.Add(gridItem);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error on gridview DateFormat:" + ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
arInboxSMSLimit2000 = smdbObj.get_SMS_with_limit(whereCommand, Type_Inbox_for_limit2000, PageforInbox);
|
|
Console.WriteLine("Page for Index value:" + PageforInbox);
|
|
if (PageforInbox > 0) btn_PrevPage.Visible = true;
|
|
else btn_PrevPage.Visible = false;
|
|
if (arInboxSMSLimit2000.Count == 2000) btn_NextPage.Visible = true;
|
|
else btn_NextPage.Visible = false;
|
|
foreach (SMSfromDB obj in arInboxSMSLimit2000)
|
|
{
|
|
string subNAme = "Unknown unit name4";
|
|
Bitmap img = null;
|
|
Int32 stat = 0;
|
|
String email = "";
|
|
if (MainForm2.VehIDHash[obj.sc_id] != null)
|
|
{
|
|
subNAme = (string)MainForm2.VehIDHash[obj.sc_id];
|
|
}
|
|
if (obj.sc_id_Dest == obj.sc_id_sour)
|
|
subNAme = SMSTreeView.SelectedNode.Name;
|
|
string content = obj.mes;
|
|
if (obj.mes.Length > 25)
|
|
{
|
|
//content = obj.mes.Substring(0, 25) + "...";
|
|
}
|
|
if (obj.status == (int)TextStatus.SD_NO_GW || obj.status == (int)TextStatus.UNREAD_OUT
|
|
|| obj.status == (int)TextStatus.UNREAD_IN || obj.status == (int)TextStatus.UNKNOWN)
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
stat = 0;
|
|
email = "";
|
|
}
|
|
else
|
|
{
|
|
if (obj.status == (int)TextStatus.UNREAD_EMAIL || obj.status == (int)TextStatus.READ_EMAIL)
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.email;
|
|
stat = 2;
|
|
email = obj.email;
|
|
}
|
|
else
|
|
{
|
|
img = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
stat = 1;
|
|
email = "";
|
|
}
|
|
}
|
|
//ListforGrid.Add(new SMSDataforGRID(obj.idx, img, subNAme, "", content, obj.mes, convDT.GetDTLocalFromSeconds(obj.date).ToString("MMM d,yyyy '-' HH:mm:ss"), stat, email));
|
|
try
|
|
{
|
|
String DataString = "";
|
|
DataString = obj.date.GetRegionalFormat(MainForm2.is24hours, MainForm2.DayFirst);
|
|
//if (MainForm2.is24hours)
|
|
//{
|
|
// if (MainForm2.DayFirst)
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("dd/MM/yyyy HH:mm:ss, ddd");
|
|
// else
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("MM/dd/yyyy HH:mm:ss, ddd");
|
|
//}
|
|
//else
|
|
//{
|
|
// if (MainForm2.DayFirst)
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("dd/MM/yyyy hh:mm:ss tt, ddd");
|
|
// else
|
|
// DataString = convDT.GetDTLocalFromSeconds(obj.date).ToString("MM/dd/yyyy hh:mm:ss tt, ddd");
|
|
//}
|
|
|
|
// find spaces to add a new line between them
|
|
string[] split = DataString.Split(" ".ToCharArray());
|
|
if (split.Length == 4)
|
|
DataString = String.Format("{0}\n{1} {2} {3}", split[0], split[1], split[2], split[3]);
|
|
else if (split.Length == 3)
|
|
DataString = String.Format("{0}\n{1} {2}", split[0], split[1], split[2]);
|
|
else if (split.Length == 2)
|
|
DataString = String.Format("{0}\n{1}", split[0], split[1]);
|
|
|
|
|
|
SMSDataforGRID gridItem = new SMSDataforGRID(obj.idx, img, subNAme, "", content, obj.mes, DataString, stat, email, obj.sc_id, 0,
|
|
(new DateTime(1970, 1, 1)).AddSeconds(obj.date));
|
|
|
|
gridItem.Color = obj.color;
|
|
|
|
ListforGrid.Add(gridItem);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error on gridview DateFormat:" + ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
ArrayList positions = new ArrayList();
|
|
if (arInboxSMS.Count > 0 )
|
|
{
|
|
try
|
|
{
|
|
SMSGridView.DataSource = null;
|
|
SMSGridView.DataSource = ListforGrid;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error on populate grid" + ex.ToString());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SMSGridView.Rows.Clear();
|
|
SMSGridView.Refresh();
|
|
}
|
|
SMSGridView.TableElement.ScrollToRow(0);
|
|
}
|
|
SMSGridView.Refresh();
|
|
SMSGridView.TableElement.ScrollToRow(0);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
}
|
|
|
|
public void updateOnlytree(Int32 _sc_id,String _vehName)
|
|
{
|
|
try
|
|
{
|
|
Int32 sc_idd = _sc_id;
|
|
String vehName = _vehName;
|
|
RadTreeNode selNode = SMSTreeView.SelectedNode;
|
|
foreach (RadTreeNode node in SMSTreeView.Nodes)
|
|
{
|
|
if (node.Name.Contains("Inbox"))
|
|
{
|
|
foreach (RadTreeNode nodegr in node.Nodes)
|
|
{
|
|
if (nodegr.Nodes.Count == 0)
|
|
{
|
|
if (nodegr.Name.CompareTo(vehName) == 0)
|
|
{
|
|
selNode = nodegr;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (RadTreeNode nodein in nodegr.Nodes)
|
|
{
|
|
if (nodein.Name.CompareTo(vehName) == 0)
|
|
{
|
|
selNode = nodein;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
selNode.Text = vehName;
|
|
if (htSUIDwithNewSMS.Contains(sc_idd))
|
|
{
|
|
int tempI = Convert.ToInt32(htSUIDwithNewSMS[sc_idd]);
|
|
tempI++;
|
|
htSUIDwithNewSMS[sc_idd] = tempI;
|
|
selNode.Text += " [" + htSUIDwithNewSMS[sc_idd].ToString() + "]";
|
|
selNode.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
|
|
//selNode.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
else
|
|
{
|
|
htSUIDwithNewSMS.Add(sc_idd, 1);
|
|
selNode.Text += " [" + htSUIDwithNewSMS[sc_idd].ToString() + "]";
|
|
selNode.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
selNode.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error on updating the tree:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
public void updateInboxAndOutboxView(Boolean fromDB)
|
|
{
|
|
SM.Debug("Enter on update Inbox");
|
|
arVehSCID.Clear();
|
|
if (fromDB) CheckAllInbox();
|
|
SMSTreeView.Nodes.Clear();
|
|
SMSTreeView.MultiSelect = false;
|
|
|
|
RadTreeNode inboxNode = new RadTreeNode(wordInbox);
|
|
|
|
inboxNode.Name = "Inbox";
|
|
inboxNode.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
13,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
// add image to the dictionary if not exists
|
|
Image img = Utils.ScaleImage(global::Dispatcher.Properties.Resources.s_inbox, 37, 37);
|
|
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_inbox" + "_37"))
|
|
MainForm2.imagesDictionary.Add("s_inbox" + "_37", Utils.ChangeColor((Bitmap)img, MainForm2.ButtonColor));
|
|
|
|
// set the icon for the unit
|
|
inboxNode.Image = MainForm2.imagesDictionary["s_inbox" + "_37"];
|
|
inboxNode.BackColor = Color.FromArgb(225, 228, 219);
|
|
inboxNode.ItemHeight = 40;
|
|
inboxNode.AllowDrop = true;
|
|
//add elements in groups
|
|
GroupClass g;
|
|
ArrayList arrSCidsINGroups = new ArrayList();
|
|
foreach (int i in MainForm2.GroupHash.Keys)
|
|
{
|
|
g = (GroupClass)MainForm2.GroupHash[i];
|
|
RadTreeNode nodeGroup = new RadTreeNode(g.name.ToUpper());
|
|
nodeGroup.Name = g.name.ToUpper();
|
|
nodeGroup.Image = Utils.ChangeColor(global::Dispatcher.Properties.Resources.s_group, MainForm2.ButtonColor);
|
|
|
|
foreach (int scID in g.arrSc_id)
|
|
{
|
|
if (MainForm2.VehIDHash.ContainsKey(scID))
|
|
{
|
|
RadTreeNode node1 = new RadTreeNode((string)MainForm2.VehIDHash[scID]);
|
|
node1.Name = (string)MainForm2.VehIDHash[scID];
|
|
|
|
#region NODE IMAGE
|
|
Car crtCar = ((Car)MainForm2.carlist[((Vehicle)MainForm2.vehicleHT[(string)MainForm2.VehIDHash[scID]]).IconID]);
|
|
if (crtCar != null)
|
|
{
|
|
String iconPath = crtCar.listFilePath;
|
|
|
|
try
|
|
{
|
|
Bitmap bmp = new Bitmap(iconPath);
|
|
Image tmp2 = bmp; //tmp.ToBitmap();
|
|
tmp2.Tag = crtCar.listFilePath;
|
|
|
|
// add image to the dictionary if not exists
|
|
if (!MainForm2.imagesDictionary.ContainsKey(crtCar.listFilePath + "_16"))
|
|
MainForm2.imagesDictionary.Add(crtCar.listFilePath + "_16", Utils.ScaleImage(tmp2, 16, 16));
|
|
|
|
// set the icon for the unit
|
|
node1.Image = MainForm2.imagesDictionary[crtCar.listFilePath + "_16"];
|
|
}
|
|
catch (Exception)
|
|
{
|
|
SM.Debug("Grid icon could not be found [" + iconPath + "]");
|
|
node1.Image = global::Dispatcher.Properties.Resources.subscriber;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
arrSCidsINGroups.Add(scID);
|
|
node1.ContextMenu = Menu4UnitsSMS;
|
|
// set
|
|
node1.Tag = scID;
|
|
|
|
//test if u got new sms
|
|
if (htSUIDwithNewSMS.Contains(scID))
|
|
{
|
|
node1.Text += " [" + htSUIDwithNewSMS[scID].ToString() + "]";
|
|
node1.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
//node1.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
else
|
|
{
|
|
node1.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Regular,
|
|
GraphicsUnit.Pixel);
|
|
//node1.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Regular))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
nodeGroup.Nodes.Add(node1);
|
|
|
|
//nodeGroup.Font = new System.Drawing.Font("Tahoma", 11F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
node1.AllowDrop = false;
|
|
}
|
|
}
|
|
nodeGroup.AllowDrop = true;
|
|
// set the group ID as Tag value
|
|
nodeGroup.Tag = g.cps_id;
|
|
// change font for group node
|
|
nodeGroup.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
13,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
|
|
//add only groups that have 1 ore more elemets
|
|
|
|
if (nodeGroup.Nodes.Count > 0)
|
|
inboxNode.Nodes.Add(nodeGroup);
|
|
}
|
|
|
|
//add groups without elements
|
|
foreach (string Gname in htGroupsKeyNAmeValueID.Keys)
|
|
{
|
|
bool found = false;
|
|
foreach (int j in MainForm2.GroupHash.Keys)
|
|
{
|
|
g = (GroupClass)MainForm2.GroupHash[j];
|
|
if (g.name == Gname)
|
|
{
|
|
found = true;
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
RadTreeNode nodeGroup = new RadTreeNode(Gname.ToUpper());
|
|
nodeGroup.Name = Gname;
|
|
nodeGroup.Image = Utils.ChangeColor(global::Dispatcher.Properties.Resources.s_group, MainForm2.ButtonColor);
|
|
nodeGroup.AllowDrop = true;
|
|
// set the group ID as Tag value
|
|
nodeGroup.Tag = htGroupsKeyNAmeValueID[Gname];
|
|
nodeGroup.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
13,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
//nodeGroup.Font = new System.Drawing.Font("Tahoma", 11F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
|
|
inboxNode.Nodes.Add(nodeGroup);
|
|
}
|
|
}
|
|
|
|
|
|
//add elements NOT in groups
|
|
foreach (VehandID obj in MainForm2.arVehSCID)
|
|
{
|
|
if (!arrSCidsINGroups.Contains(obj.sc_id))
|
|
{
|
|
RadTreeNode node1 = new RadTreeNode((string)MainForm2.VehIDHash[obj.sc_id]);
|
|
node1.Name = (string)MainForm2.VehIDHash[obj.sc_id];
|
|
node1.AllowDrop = false;
|
|
node1.ContextMenu = Menu4UnitsSMS;
|
|
|
|
// set the unit ID as Tag value
|
|
node1.Tag = obj.sc_id;
|
|
#region NODE IMAGE
|
|
Car crtCar = ((Car)MainForm2.carlist[((Vehicle)MainForm2.vehicleHT[(string)MainForm2.VehIDHash[obj.sc_id]]).IconID]);
|
|
if (crtCar != null)
|
|
{
|
|
String iconPath = crtCar.listFilePath;
|
|
|
|
try
|
|
{
|
|
Bitmap bmp = new Bitmap(iconPath);
|
|
Image tmp2 = bmp; //tmp.ToBitmap();
|
|
tmp2.Tag = crtCar.listFilePath;
|
|
|
|
// add image to the dictionary if not exists
|
|
if (!MainForm2.imagesDictionary.ContainsKey(crtCar.listFilePath + "_16"))
|
|
MainForm2.imagesDictionary.Add(crtCar.listFilePath + "_16", Utils.ScaleImage(tmp2, 16, 16));
|
|
|
|
// set the icon for the unit
|
|
node1.Image = MainForm2.imagesDictionary[crtCar.listFilePath + "_16"];
|
|
}
|
|
catch (Exception)
|
|
{
|
|
SM.Debug("Grid icon could not be found [" + iconPath + "]");
|
|
node1.Image = global::Dispatcher.Properties.Resources.subscriber;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
if (htSUIDwithNewSMS.Contains(obj.sc_id))
|
|
{
|
|
node1.Text += " [" + htSUIDwithNewSMS[obj.sc_id].ToString() + "]";
|
|
node1.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
//node1.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
//node1.ForeColor = Color.Red;
|
|
}
|
|
else
|
|
node1.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Regular,
|
|
GraphicsUnit.Pixel);
|
|
inboxNode.Nodes.Add(node1);
|
|
}
|
|
}
|
|
//SMSTreeView.MultiSelect = false;
|
|
SMSTreeView.Nodes.Add(inboxNode);
|
|
////////////////outBOX
|
|
RadTreeNode outboxNode = new RadTreeNode(wordOutbox);
|
|
outboxNode.Name = "Outbox";
|
|
outboxNode.BackColor = Color.FromArgb(225, 228, 219);
|
|
outboxNode.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
13,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
//outboxNode.Font = new System.Drawing.Font("Tahoma", 13F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Regular))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
|
|
Image img2 = Utils.ScaleImage(global::Dispatcher.Properties.Resources.s_outbox, 37, 37);
|
|
// add image to the dictionary if not exists
|
|
if (!MainForm2.imagesDictionary.ContainsKey("s_outbox" + "_37"))
|
|
MainForm2.imagesDictionary.Add("s_outbox" + "_37", Utils.ChangeColor((Bitmap)img2, MainForm2.ButtonColor));
|
|
|
|
// set the icon for the unit
|
|
outboxNode.Image = MainForm2.imagesDictionary["s_outbox" + "_37"];
|
|
|
|
outboxNode.ItemHeight = 40;
|
|
outboxNode.AllowDrop = true;
|
|
arrSCidsINGroups = new ArrayList();
|
|
foreach (int i in MainForm2.GroupHash.Keys)
|
|
{
|
|
g = (GroupClass)MainForm2.GroupHash[i];
|
|
RadTreeNode nodeGroup = new RadTreeNode(g.name.ToUpper());
|
|
nodeGroup.Name = g.name.ToUpper();
|
|
// set the group ID as Tag value
|
|
nodeGroup.Tag = g.cps_id;
|
|
|
|
foreach (int scID in g.arrSc_id)
|
|
{
|
|
if (MainForm2.VehIDHash.ContainsKey(scID))
|
|
{
|
|
RadTreeNode node1 = new RadTreeNode((string)MainForm2.VehIDHash[scID]);
|
|
node1.Name = (string)MainForm2.VehIDHash[scID];
|
|
arrSCidsINGroups.Add(scID);
|
|
node1.AllowDrop = false;
|
|
node1.ContextMenu = Menu4UnitsSMS;
|
|
// set the unit ID as Tag value
|
|
node1.Tag = scID;
|
|
node1.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Regular,
|
|
GraphicsUnit.Pixel);
|
|
|
|
#region NODE IMAGE
|
|
Car crtCar = ((Car)MainForm2.carlist[((Vehicle)MainForm2.vehicleHT[(string)MainForm2.VehIDHash[scID]]).IconID]);
|
|
if (crtCar != null)
|
|
{
|
|
String iconPath = crtCar.listFilePath;
|
|
|
|
try
|
|
{
|
|
Bitmap bmp = new Bitmap(iconPath);
|
|
Image tmp2 = bmp; //tmp.ToBitmap();
|
|
tmp2.Tag = crtCar.listFilePath;
|
|
|
|
// add image to the dictionary if not exists
|
|
if (!MainForm2.imagesDictionary.ContainsKey(crtCar.listFilePath + "_16"))
|
|
MainForm2.imagesDictionary.Add(crtCar.listFilePath + "_16", Utils.ScaleImage(tmp2, 16, 16));
|
|
|
|
// set the icon for the unit
|
|
node1.Image = MainForm2.imagesDictionary[crtCar.listFilePath + "_16"];
|
|
}
|
|
catch (Exception)
|
|
{
|
|
SM.Debug("Grid icon could not be found [" + iconPath + "]");
|
|
node1.Image = global::Dispatcher.Properties.Resources.subscriber;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
nodeGroup.Nodes.Add(node1);
|
|
}
|
|
}
|
|
nodeGroup.AllowDrop = true;
|
|
// set font for the node group
|
|
nodeGroup.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
13,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
nodeGroup.Image = Utils.ChangeColor(global::Dispatcher.Properties.Resources.s_group, MainForm2.ButtonColor);
|
|
|
|
//add only groups that have 1 ore more elemets
|
|
if (nodeGroup.Nodes.Count > 0)
|
|
outboxNode.Nodes.Add(nodeGroup);
|
|
}
|
|
//add groups without elements
|
|
SM.Debug("GroupHash.Keys Count" + MainForm2.GroupHash.Keys.Count);
|
|
foreach (string Gname in htGroupsKeyNAmeValueID.Keys)
|
|
{
|
|
bool found = false;
|
|
foreach (int j in MainForm2.GroupHash.Keys)
|
|
{
|
|
g = (GroupClass)MainForm2.GroupHash[j];
|
|
if (g.name == Gname)
|
|
{
|
|
found = true;
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
RadTreeNode nodeGroup = new RadTreeNode(Gname.ToUpper());
|
|
nodeGroup.Name = Gname.ToUpper();
|
|
nodeGroup.AllowDrop = true;
|
|
// set the group ID as Tag value
|
|
nodeGroup.Tag = htGroupsKeyNAmeValueID[Gname];
|
|
nodeGroup.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
13,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
//nodeGroup.Font = new System.Drawing.Font("Tahoma", 11F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
nodeGroup.Image = global::Dispatcher.Properties.Resources.users;
|
|
|
|
outboxNode.Nodes.Add(nodeGroup);
|
|
}
|
|
}
|
|
//add elements NOT in groups
|
|
foreach (VehandID obj in MainForm2.arVehSCID)
|
|
{
|
|
if (!arrSCidsINGroups.Contains(obj.sc_id))
|
|
{
|
|
RadTreeNode node1 = new RadTreeNode((string)MainForm2.VehIDHash[obj.sc_id]);
|
|
node1.Name = (string)MainForm2.VehIDHash[obj.sc_id];
|
|
node1.AllowDrop = false;
|
|
node1.ContextMenu = Menu4UnitsSMS;
|
|
// set the unit ID as Tag value
|
|
node1.Tag = obj.sc_id;
|
|
node1.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
12,
|
|
FontStyle.Regular,
|
|
GraphicsUnit.Pixel);
|
|
|
|
#region NODE IMAGE
|
|
Car crtCar = ((Car)MainForm2.carlist[((Vehicle)MainForm2.vehicleHT[(string)MainForm2.VehIDHash[obj.sc_id]]).IconID]);
|
|
if (crtCar != null)
|
|
{
|
|
String iconPath = crtCar.listFilePath;
|
|
|
|
try
|
|
{
|
|
Bitmap bmp = new Bitmap(iconPath);
|
|
Image tmp2 = bmp; //tmp.ToBitmap();
|
|
tmp2.Tag = crtCar.listFilePath;
|
|
|
|
// add image to the dictionary if not exists
|
|
if (!MainForm2.imagesDictionary.ContainsKey(crtCar.listFilePath + "_16"))
|
|
MainForm2.imagesDictionary.Add(crtCar.listFilePath + "_16", Utils.ScaleImage(tmp2, 16, 16));
|
|
|
|
// set the icon for the unit
|
|
node1.Image = MainForm2.imagesDictionary[crtCar.listFilePath + "_16"];
|
|
}
|
|
catch (Exception)
|
|
{
|
|
SM.Debug("Grid icon could not be found [" + iconPath + "]");
|
|
node1.Image = global::Dispatcher.Properties.Resources.subscriber;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
outboxNode.Nodes.Add(node1);
|
|
}
|
|
}
|
|
|
|
RadTreeNode TrashNode = new RadTreeNode(wordRecyBin);
|
|
TrashNode.Name = "Recycle";
|
|
TrashNode.Font = new Font(
|
|
new FontFamily("Segoe UI"),
|
|
13,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
//TrashNode.Font = new System.Drawing.Font("Tahoma", 13F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Regular))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
TrashNode.BackColor = Color.FromArgb(225, 228, 219);
|
|
|
|
Image img3 = Utils.ScaleImage(global::Dispatcher.Properties.Resources.trash_activ, 37, 37);
|
|
|
|
// add image to the dictionary if not exists
|
|
if (!MainForm2.imagesDictionary.ContainsKey("trash_activ" + "_37"))
|
|
MainForm2.imagesDictionary.Add("trash_activ" + "_37", Utils.ChangeColor((Bitmap)img3, MainForm2.ButtonColor));
|
|
|
|
// set the icon for the unit
|
|
TrashNode.Image = MainForm2.imagesDictionary["trash_activ" + "_37"];
|
|
|
|
TrashNode.ItemHeight = 40;
|
|
|
|
|
|
|
|
SMSTreeView.Nodes.Add(outboxNode);
|
|
SMSTreeView.Nodes.Add(TrashNode);
|
|
SMSTreeView.ExpandAll();
|
|
//reselect the previous tree node
|
|
if (selectedTreeNode != null)
|
|
{
|
|
switch (selectedNodeType)
|
|
{
|
|
case NodeType.inbox:
|
|
SMSTreeView.Nodes[0].Selected = true;
|
|
break;
|
|
case NodeType.outbox:
|
|
SMSTreeView.Nodes[1].Selected = true;
|
|
break;
|
|
case NodeType.trash:
|
|
SMSTreeView.Nodes[2].Selected = true;
|
|
break;
|
|
case NodeType.grInbox:
|
|
SM.Debug("Reselcting inbox group:" + selectedTreeNode.Name);
|
|
foreach (RadTreeNode node in SMSTreeView.Nodes[0].Nodes)
|
|
{
|
|
if (node.Name == selectedTreeNode.Name)
|
|
{
|
|
node.Selected = true;
|
|
}
|
|
}
|
|
break;
|
|
case NodeType.grOutbox:
|
|
SM.Debug("Reselcting outbox group:" + selectedTreeNode.Name);
|
|
foreach (RadTreeNode node in SMSTreeView.Nodes[1].Nodes)
|
|
{
|
|
if (node.Name == selectedTreeNode.Name)
|
|
{
|
|
node.Selected = true;
|
|
}
|
|
}
|
|
break;
|
|
case NodeType.subInbox:
|
|
SM.Debug("Reselcting inbox subscriber:" + selectedTreeNode.Name);
|
|
foreach (RadTreeNode nodeGR in SMSTreeView.Nodes[0].Nodes)
|
|
{
|
|
foreach (RadTreeNode node in nodeGR.Nodes)
|
|
{
|
|
if (node.Name == selectedTreeNode.Name)
|
|
{
|
|
node.Selected = true;
|
|
}
|
|
}
|
|
if (nodeGR.Name == selectedTreeNode.Name)
|
|
{
|
|
nodeGR.Selected = true;
|
|
}
|
|
}
|
|
break;
|
|
case NodeType.subOutbox:
|
|
SM.Debug("Reselcting outbox subscriber:" + selectedTreeNode.Text);
|
|
foreach (RadTreeNode nodeGR in SMSTreeView.Nodes[1].Nodes)
|
|
{
|
|
foreach (RadTreeNode node in nodeGR.Nodes)
|
|
{
|
|
if (node.Name == selectedTreeNode.Name)
|
|
{
|
|
node.Selected = true;
|
|
}
|
|
}
|
|
if (nodeGR.Name == selectedTreeNode.Name)
|
|
{
|
|
nodeGR.Selected = true;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
SMSTreeView.SelectedNode = SMSTreeView.Nodes[0];
|
|
|
|
SMSTreeView_Click(SMSTreeView, null);
|
|
}
|
|
|
|
|
|
|
|
|
|
private String oldSelected = "";
|
|
private String oldparent = "";
|
|
private void SMSTreeView_SelectedNodeChanged(object sender, RadTreeViewEventArgs e)
|
|
{
|
|
SMSTreeView_Click(SMSTreeView, null);
|
|
}
|
|
|
|
private void SMSTreeView_Click(object sender, EventArgs e)
|
|
{
|
|
if (SMSTreeView.SelectedNode == null)
|
|
return;
|
|
// update text for the LOGGED IN USER
|
|
labelUser.Text = SMSTreeView.SelectedNode.Text.Split("[".ToCharArray())[0].ToUpper();
|
|
|
|
if (CanSendQuickTextMessage(SMSTreeView.SelectedNode))
|
|
{
|
|
//rbtSendQuick.Enabled = true;
|
|
rtbQuickText.Enabled = true;
|
|
rtbQuickText.Text = "";
|
|
}
|
|
else
|
|
{
|
|
//rbtSendQuick.Enabled = false;
|
|
rtbQuickText.Enabled = false;
|
|
rtbQuickText.Text = "";
|
|
}
|
|
|
|
|
|
try
|
|
{
|
|
// refresh tree if desired by sending a new sms
|
|
if (((SMSTreeView.SelectedNode != null) && ((oldSelected != SMSTreeView.SelectedNode.Name) || (getParent(SMSTreeView.SelectedNode).Name!=oldparent)))
|
|
|| sender != SMSTreeView)
|
|
{
|
|
oldSelected = SMSTreeView.SelectedNode.Name;
|
|
oldparent = getParent(SMSTreeView.SelectedNode).Name;
|
|
webBrowser1.DocumentText = "";
|
|
selectedTreeNode = SMSTreeView.SelectedNode;
|
|
|
|
if (MainForm2.vehicleHT.ContainsKey(SMSTreeView.SelectedNode.Name))
|
|
{
|
|
selectedSC_ID = ((Vehicle)MainForm2.vehicleHT[SMSTreeView.SelectedNode.Name]).sc_id;
|
|
}
|
|
else
|
|
{
|
|
selectedSC_ID = 0;
|
|
}
|
|
SM.Debug("Selected node = " + SMSTreeView.SelectedNode.Name + " with sc_id = " + selectedSC_ID);
|
|
|
|
|
|
string msg = (SMSTreeView.SelectedNode.Nodes.Count > 0) ? MainForm2.returnLNGString("sendquickgroupsms") : MainForm2.returnLNGString("sendquicksms");
|
|
rtbQuickText.NullText = String.Format(msg, SMSTreeView.SelectedNode.Text.Split("[".ToCharArray())[0]);
|
|
|
|
|
|
// display maximum number of characters
|
|
rtbQuickText.MaxLength = SmsUtils.GetMaxNumberOfCharacters(MainForm2.radioType);
|
|
if (MainForm2.vehicleHT.Contains(SMSTreeView.SelectedNode.Name))
|
|
{
|
|
((Vehicle)MainForm2.vehicleHT[SMSTreeView.SelectedNode.Name]).CheckPositionInSystem();
|
|
string GatewayAndRadioID = ((Vehicle)MainForm2.vehicleHT[SMSTreeView.SelectedNode.Name]).GwandRadioID;
|
|
int gwType = (int)GatewayType.Unknown;
|
|
if (MainForm2.radioGwHT[GatewayAndRadioID] != null)
|
|
{
|
|
gwType = ((RadioGateway)MainForm2.radioGwHT[GatewayAndRadioID]).Type;
|
|
rtbQuickText.MaxLength = SmsUtils.GetMaxNumberOfCharacters(gwType);
|
|
}
|
|
}
|
|
labelCount.Text = String.Format(MainForm2.returnLNGString("charactersLeft"), rtbQuickText.MaxLength);
|
|
|
|
|
|
//txTO.Text = SMSTreeView.SelectedNode.Name;
|
|
RadTreeNode inOrOutNode = getParent(SMSTreeView.SelectedNode);
|
|
if (inOrOutNode.Name == "Inbox")
|
|
{
|
|
try
|
|
{
|
|
SMSGridView.Columns["Date"].HeaderText = MainForm2.returnLNGString("Received");
|
|
inboxSelec = true;
|
|
SMSGridView.Columns["Source"].HeaderText = wordFrom;
|
|
int[] scidArray = getChildSC_ID(SMSTreeView.SelectedNode);
|
|
selectedSC_IDlist = scidArray;
|
|
if (scidArray.Length > 0)
|
|
{
|
|
updateDataGrid(scidArray, true, false,false,false);
|
|
trashSelec = false;
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Ex:" + ex.ToString());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (inOrOutNode.Name == "Outbox")
|
|
{
|
|
// this is a GROUP NODE or an unit with no group :-?
|
|
|
|
SMSGridView.Columns["Date"].HeaderText = MainForm2.returnLNGString("send2");
|
|
try
|
|
{
|
|
inboxSelec = false;
|
|
SMSGridView.Columns["Source"].HeaderText = wordTo;
|
|
Boolean ifisGroup = false;
|
|
|
|
|
|
|
|
int[] scidArray = getChildSC_ID_GroupID(SMSTreeView.SelectedNode, out ifisGroup);
|
|
|
|
//if (SMSTreeView.SelectedNode.Nodes.Count > 0)
|
|
//{
|
|
// ifisGroup = true;
|
|
// scidArray = new int[] { Int16.Parse(SMSTreeView.SelectedNode.Tag.ToString()) };
|
|
//}
|
|
|
|
selectedSC_IDlist = scidArray;
|
|
if (scidArray.Length > 0)
|
|
{
|
|
updateDataGrid(scidArray, false, false,false,ifisGroup);
|
|
trashSelec = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Ex:" + ex.ToString());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
try
|
|
{
|
|
inboxSelec = false;
|
|
//SMSGridView.Columns[2].HeaderText = "To/From";
|
|
int[] scidArray = getChildSC_ID(SMSTreeView.SelectedNode);
|
|
|
|
updateDataGrid(scidArray, false, true,false,false);
|
|
trashSelec = true;
|
|
inboxSelec = false;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Ex:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// find out what kind of node is it ... inbox/outbox group or subscriber
|
|
selectedNodeType = getNodeType(selectedTreeNode);
|
|
|
|
//set sms label
|
|
SetLabelText(selectedTreeNode);
|
|
if (SMSGridView.RowCount > 0)
|
|
{
|
|
//SelectSMSandDisplay(false);
|
|
panelNoEvents.Visible = false;
|
|
}
|
|
else
|
|
panelNoEvents.Visible = true;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Selected node exception:"+ex.ToString());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>Verific daca activez sau nu butonul de send quick text</para>
|
|
/// <para>in functie de nodul selectat</para>
|
|
/// </summary>
|
|
/// <param name="selectedTreeNode">nodul selectat</param>
|
|
/// <returns>true daca pot trimite quick text, false altfel</returns>
|
|
private bool CanSendQuickTextMessage(RadTreeNode selectedTreeNode)
|
|
{
|
|
// enable or disable the quick text option depending on the level
|
|
// of the tree view which is selected
|
|
if (SMSTreeView.SelectedNode == null)
|
|
return false;
|
|
else if (SMSTreeView.SelectedNode.Level == 0)
|
|
return false;
|
|
else if (SMSTreeView.SelectedNode.Nodes.Count > 0)
|
|
return true;
|
|
else if (SMSTreeView.SelectedNode.GetNodeCount(true) != 0)
|
|
{
|
|
// Nodul este un grup
|
|
// Nu permit quick text message pentru atlas, Simoco, conectPlus, turborepeater, tetra
|
|
if (MainForm2.radioType == RADIOTYPE.MOTO || MainForm2.radioType == RADIOTYPE.HYT || MainForm2.radioType == RADIOTYPE.HARRIS)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
private void SMSTreeView_DragEnded(object sender, RadTreeViewDragEventArgs e)
|
|
{
|
|
if (selectedNodeType == NodeType.subInbox || selectedNodeType == NodeType.subOutbox)
|
|
{
|
|
int[] arryS = getChildSC_ID(e.Node);
|
|
if (arryS != null)
|
|
{
|
|
if (arryS.Length == 1)
|
|
{
|
|
try
|
|
{
|
|
if (htGroupsKeyNAmeValueID.ContainsKey(e.TargetNode.Name))
|
|
{
|
|
SM.Debug("Valid drag and drop ---- moving item with sc_id " + arryS[0] + " TO group with id " + htGroupsKeyNAmeValueID[e.TargetNode.Name]);
|
|
smdbObj.AddGroupElement(arryS[0], Convert.ToInt32(htGroupsKeyNAmeValueID[e.TargetNode.Name]));
|
|
}
|
|
else
|
|
{
|
|
SM.Debug("Valid drag and drop ---- moving item with sc_id " + arryS[0] + " TO inbox or outbox");
|
|
smdbObj.RemoveGroupElement(arryS[0]);
|
|
}
|
|
MainForm2.GroupHash = smdbObj.Select_groups();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Ex:" + ex.ToString());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SM.Debug("Invalid drag and drop... ");
|
|
}
|
|
}
|
|
}
|
|
updateInboxAndOutboxView(true);
|
|
}
|
|
|
|
private void SMSGridView_CellClick(object sender, GridViewCellEventArgs e)
|
|
{
|
|
if (SMSGridView.CurrentCell != null && e.Column.Name.Equals("Color") && !(e.Row is GridViewTableHeaderRowInfo))
|
|
SMSGridView.ContextMenuManager.ShowContextMenu(SMSGridView.CurrentCell);
|
|
else
|
|
{
|
|
|
|
if (PageforInbox == 0)
|
|
SelectSMSandDisplay(false);
|
|
else
|
|
SelectSMSandDisplay(true);
|
|
|
|
if (GetTreeLevel() == TreeLevel.OUTBOX && SMSGridView.SelectedRows.Count == 1)
|
|
{
|
|
foreach (GridViewRowInfo r in SMSGridView.SelectedRows)
|
|
{
|
|
smdbObj.Update_SMS(
|
|
(GetTreeLevel() == TreeLevel.INBOX ? (int)TextStatus.READ_IN : (int)TextStatus.READ_OUT),
|
|
Convert.ToInt32(r.Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = r.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
gridItem.Status = 1;
|
|
}
|
|
r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
r.Cells["Status"].Value = 1;
|
|
}
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Open the context menu when the Color cell is double clicked
|
|
/// </summary>
|
|
private void SMSGridView_CellDoubleClick(object sender, GridViewCellEventArgs e)
|
|
{
|
|
if (SMSGridView.CurrentCell != null && e.Column.Name.Equals("Color") && !(e.Row is GridViewTableHeaderRowInfo))
|
|
SMSGridView.ContextMenuManager.ShowContextMenu(SMSGridView.CurrentCell);
|
|
}
|
|
|
|
|
|
private void SelectSMSandDisplay(Boolean with_out_refresh)
|
|
{
|
|
SM.Debug("Selected rows count = " + SMSGridView.SelectedRows.Count);
|
|
|
|
if (SMSGridView.SelectedRows.Count > 0)
|
|
{
|
|
slectedSMSidx = new int[SMSGridView.SelectedRows.Count];
|
|
for (int i = 0; i < SMSGridView.SelectedRows.Count; i++)
|
|
{
|
|
slectedSMSidx[i] = Convert.ToInt32(SMSGridView.SelectedRows[i].Cells["Idx"].Value);
|
|
}
|
|
|
|
String s = (String)SMSGridView.SelectedRows[0].Cells["Message"].Value;
|
|
string head = "<html><body>";
|
|
string end = "</html></body>";
|
|
string from = "";
|
|
string to = "";
|
|
if (inboxSelec)
|
|
{
|
|
from = (string)SMSGridView.SelectedRows[0].Cells["Source"].Value;
|
|
if (Convert.ToInt32(SMSGridView.SelectedRows[0].Cells["Status"].Value) != (int)TextStatus.READ_OUT)
|
|
{
|
|
to = "Dispatcher";
|
|
}
|
|
else
|
|
{
|
|
to = (string)SMSGridView.SelectedRows[0].Cells["email"].Value;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Convert.ToInt32(SMSGridView.SelectedRows[0].Cells["Status"].Value) != (int)TextStatus.READ_OUT)
|
|
{
|
|
from = "Dispatcher";
|
|
}
|
|
else
|
|
{
|
|
from = (string)SMSGridView.SelectedRows[0].Cells["email"].Value;
|
|
}
|
|
to = (string)SMSGridView.SelectedRows[0].Cells["Source"].Value;
|
|
}
|
|
string status = "<div style=\"background: #D0D4DD\">" + "<FONT style=\"FONT-SIZE:10pt\" color=\"#000000\" face=\"Arial\">" +
|
|
wordFrom + ": " + from + "<br/>" +
|
|
wordTo + ": " + to + "<br/>" +
|
|
wordDate + ": " + (String)SMSGridView.SelectedRows[0].Cells["Date"].Value + "<br/>" +
|
|
"</FONT></div><br/>";
|
|
string text = "<div>" + s + "</div>";
|
|
webBrowser1.AllowNavigation = true;
|
|
webBrowser1.DocumentText = head + status + text + end;
|
|
Application.DoEvents();
|
|
webBrowser1.AllowNavigation = false;
|
|
|
|
if (inboxSelec)
|
|
{
|
|
if ((!with_out_refresh) && (Convert.ToInt32(SMSGridView.SelectedRows[0].Cells["Status"].Value) != (int)TextStatus.UNREAD_OUT))
|
|
{
|
|
try
|
|
{
|
|
Int32 sc_idd = (Int32)SMSGridView.SelectedRows[0].Cells["sc_id_source"].Value;
|
|
RadTreeNode selNode = SMSTreeView.SelectedNode;
|
|
foreach (RadTreeNode node in SMSTreeView.Nodes)
|
|
{
|
|
if (node.Name.Contains("Inbox"))
|
|
{
|
|
foreach (RadTreeNode nodegr in node.Nodes)
|
|
{
|
|
if (nodegr.Nodes.Count == 0)
|
|
{
|
|
if (nodegr.Name.CompareTo((string)SMSGridView.SelectedRows[0].Cells["Source"].Value) == 0)
|
|
{
|
|
selNode = nodegr;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (RadTreeNode nodein in nodegr.Nodes)
|
|
{
|
|
if (nodein.Name.CompareTo((string)SMSGridView.SelectedRows[0].Cells["Source"].Value) == 0)
|
|
{
|
|
selNode = nodein;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
selNode.Text = (string)SMSGridView.SelectedRows[0].Cells["Source"].Value;
|
|
if (htSUIDwithNewSMS.Contains(sc_idd))
|
|
{
|
|
int tempI = Convert.ToInt32(htSUIDwithNewSMS[sc_idd]);
|
|
tempI--;
|
|
if (tempI == 0) htSUIDwithNewSMS.Remove(sc_idd);
|
|
else htSUIDwithNewSMS[sc_idd] = tempI;
|
|
|
|
if (htSUIDwithNewSMS.Contains(sc_idd))
|
|
{
|
|
selNode.Text += " [" + htSUIDwithNewSMS[sc_idd].ToString() + "]";
|
|
selNode.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
else
|
|
selNode.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Regular))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
else
|
|
selNode.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Regular))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error on updating the tree:"+ex.ToString());
|
|
}
|
|
}
|
|
|
|
if (Convert.ToInt32(SMSGridView.SelectedRows[0].Cells["Status"].Value) != (int)TextStatus.READ_OUT)
|
|
{
|
|
//mark sms as read (status 4)
|
|
try
|
|
{
|
|
smdbObj.Update_SMS(4, Convert.ToInt32(SMSGridView.SelectedRows[0].Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = SMSGridView.SelectedRows[0].DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
gridItem.Status = (int)TextStatus.UNREAD_OUT;
|
|
}
|
|
|
|
SMSGridView.SelectedRows[0].Cells["Icon"].Value = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
SMSGridView.SelectedRows[0].Cells["Status"].Value = (int)TextStatus.UNREAD_OUT;
|
|
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
|
|
// update the tree node value
|
|
// TODO
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Error UpdateSMS:" + ex.ToString());
|
|
}
|
|
//only in read case made refresh
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SMSGridView_CellFormatting(object sender, CellFormattingEventArgs e)
|
|
{
|
|
GridCellElement cellElement = e.CellElement;
|
|
GridViewDataColumn columnInfo = e.CellElement.ColumnInfo as GridViewDataColumn;
|
|
|
|
if (cellElement == null || columnInfo == null)
|
|
return;
|
|
|
|
// do not draw border
|
|
cellElement.DrawBorder = false;
|
|
|
|
// do not highlight the cell on which was clicked
|
|
if (e.CellElement.IsCurrent)
|
|
{
|
|
e.CellElement.IsCurrent = false;
|
|
}
|
|
|
|
if (e.CellElement.ColumnInfo.Name == "number" && string.IsNullOrEmpty(e.CellElement.Text))
|
|
{
|
|
e.CellElement.Text = (e.CellElement.RowIndex + 1).ToString();
|
|
cellElement.DrawText = true;
|
|
Font font3 = new Font(
|
|
cellElement.Font.FontFamily,
|
|
9,
|
|
FontStyle.Regular,
|
|
GraphicsUnit.Pixel);
|
|
|
|
cellElement.ForeColor = Color.FromArgb(0x66, 0x66, 0x66);
|
|
cellElement.Font = font3;
|
|
cellElement.Padding = new Padding(1, 1, 3, 1);
|
|
}
|
|
|
|
try
|
|
{
|
|
if (!trashSelec)
|
|
{
|
|
if (e.Row.DataBoundItem as SMSDataforGRID != null)
|
|
{
|
|
SMSDataforGRID gridItem = e.Row.DataBoundItem as SMSDataforGRID;
|
|
//if ((e.CellElement.RowIndex >= 0) && (SMSGridView.Rows[e.CellElement.RowIndex].Cells["Status"].Value != DBNull.Value))
|
|
if (gridItem.Status == 0)
|
|
{
|
|
//if (Convert.ToInt32(SMSGridView.Rows[e.CellElement.RowIndex].Cells["Status"].Value) == (int)TextStatus.SD_NO_GW)
|
|
e.CellElement.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
else
|
|
{
|
|
e.CellElement.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
}
|
|
}
|
|
|
|
if(cellElement is GridImageCellElement && (columnInfo.Name == "Icon"))
|
|
{
|
|
SMSDataforGRID gridItem = e.Row.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem.Status == 0)
|
|
{
|
|
e.CellElement.Image = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
}
|
|
else
|
|
{
|
|
e.CellElement.Image = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (cellElement is GridDataCellElement && (columnInfo.Name == "timeAgo" || columnInfo.Name == "Date"))
|
|
{
|
|
Font font = new Font(
|
|
cellElement.Font.FontFamily,
|
|
10,
|
|
FontStyle.Bold,
|
|
GraphicsUnit.Pixel);
|
|
|
|
cellElement.ForeColor = Color.FromArgb(0x66,0x66,0x66);
|
|
cellElement.Font = font;
|
|
}
|
|
else if (cellElement is GridDataCellElement && columnInfo.Name == "Color")
|
|
{
|
|
cellElement.DrawText = false;
|
|
GridColorCellElement colorCellElement = e.CellElement as GridColorCellElement;
|
|
colorCellElement.Text = string.Empty;
|
|
int colorBoxWidth = 20;
|
|
int leftMargin = (this.SMSGridView.Columns["Color"].Width - colorBoxWidth) / 2;
|
|
colorCellElement.ColorBox.Margin = new Padding(leftMargin, 10, 2, 10);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Ex:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Create the context menu which will be displayed when a cell is right clicked
|
|
/// This will select the options for each selection
|
|
/// </summary>
|
|
private void SMSGridView_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e)
|
|
{
|
|
|
|
GridDataCellElement cell = e.ContextMenuProvider as GridDataCellElement;
|
|
if (cell == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (e.ContextMenuProvider is GridDataCellElement)
|
|
{
|
|
|
|
GridViewRowInfo row = ((GridDataCellElement)e.ContextMenuProvider).RowInfo;
|
|
|
|
// get the database index of the current sms
|
|
Int16 idx = 0;
|
|
Int16.TryParse(row.Cells["idx"].Value.ToString(), out idx);
|
|
|
|
// create the drop down menu
|
|
RadDropDownMenu menu = new RadDropDownMenu();
|
|
|
|
if(cell.ColumnIndex == SMSGridView.Columns["Color"].Index)
|
|
{
|
|
#region COLOR ITEMS
|
|
// create context menu button
|
|
RadMenuItem itemNone = new RadMenuItem(MainForm2.returnLNGString("categoryNo"));
|
|
// add click listener for the context menu button
|
|
itemNone.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// set the purple color
|
|
GridColorCellElement colorCellElement = cell as GridColorCellElement;
|
|
colorCellElement.Value = Color.White;
|
|
|
|
// update color in the DB
|
|
if(idx != 0)
|
|
smdbObj.ChangeSMSColor(idx, Color.White);
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
itemNone.Image = global::Dispatcher.Properties.Resources.s_categ_none;
|
|
itemNone.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
// add button to context menu
|
|
menu.Items.Add(itemNone);
|
|
|
|
// create context menu button
|
|
RadMenuItem itemRed = new RadMenuItem(MainForm2.returnLNGString("categoryRed"));
|
|
// add click listener for the context menu button
|
|
itemRed.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// set the purple color
|
|
GridColorCellElement colorCellElement = cell as GridColorCellElement;
|
|
colorCellElement.Value = Color.FromArgb(167, 29, 35);
|
|
|
|
// update color in the DB
|
|
if (idx != 0)
|
|
smdbObj.ChangeSMSColor(idx, Color.FromArgb(167, 29, 35));
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
itemRed.Image = global::Dispatcher.Properties.Resources.s_categ_red;
|
|
itemRed.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
// add button to context menu
|
|
menu.Items.Add(itemRed);
|
|
|
|
// create context menu button
|
|
RadMenuItem itemGreen = new RadMenuItem(MainForm2.returnLNGString("categoryGreen"));
|
|
// add click listener for the context menu button
|
|
itemGreen.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// set the purple color
|
|
GridColorCellElement colorCellElement = cell as GridColorCellElement;
|
|
colorCellElement.Value = Color.FromArgb(55, 126, 45);
|
|
|
|
// update color in the DB
|
|
if (idx != 0)
|
|
smdbObj.ChangeSMSColor(idx, Color.FromArgb(55, 126, 45));
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
itemGreen.Image = global::Dispatcher.Properties.Resources.s_categ_green;
|
|
itemGreen.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
// add button to context menu
|
|
menu.Items.Add(itemGreen);
|
|
|
|
// create context menu button
|
|
RadMenuItem itemBlue = new RadMenuItem(MainForm2.returnLNGString("categoryBlue"));
|
|
// add click listener for the context menu button
|
|
itemBlue.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// set the purple color
|
|
GridColorCellElement colorCellElement = cell as GridColorCellElement;
|
|
colorCellElement.Value = Color.FromArgb(40, 81, 142);
|
|
|
|
// update color in the DB
|
|
if (idx != 0)
|
|
smdbObj.ChangeSMSColor(idx, Color.FromArgb(40, 81, 142));
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
itemBlue.Image = global::Dispatcher.Properties.Resources.s_categ_blue;
|
|
itemBlue.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
// add button to context menu
|
|
menu.Items.Add(itemBlue);
|
|
|
|
// create context menu button
|
|
RadMenuItem itemYellow = new RadMenuItem(MainForm2.returnLNGString("categoryYellow"));
|
|
// add click listener for the context menu button
|
|
itemYellow.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// set the purple color
|
|
GridColorCellElement colorCellElement = cell as GridColorCellElement;
|
|
colorCellElement.Value = Color.FromArgb(255, 249, 104);
|
|
|
|
// update color in the DB
|
|
if (idx != 0)
|
|
smdbObj.ChangeSMSColor(idx, Color.FromArgb(255, 249, 104));
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
itemYellow.Image = global::Dispatcher.Properties.Resources.s_categ_yellow;
|
|
itemYellow.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
// add button to context menu
|
|
menu.Items.Add(itemYellow);
|
|
|
|
|
|
// create context menu button
|
|
RadMenuItem itemOrange = new RadMenuItem(MainForm2.returnLNGString("categoryOrange"));
|
|
// add click listener for the context menu button
|
|
itemOrange.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// set the purple color
|
|
GridColorCellElement colorCellElement = cell as GridColorCellElement;
|
|
colorCellElement.Value = Color.FromArgb(173, 77, 13);
|
|
|
|
// update color in the DB
|
|
if (idx != 0)
|
|
smdbObj.ChangeSMSColor(idx, Color.FromArgb(173, 77, 13));
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
itemOrange.Image = global::Dispatcher.Properties.Resources.s_categ_orange;
|
|
itemOrange.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
// add button to context menu
|
|
menu.Items.Add(itemOrange);
|
|
|
|
// create context menu button
|
|
RadMenuItem itemPurple = new RadMenuItem(MainForm2.returnLNGString("categoryPurple"));
|
|
// add click listener for the context menu button
|
|
itemPurple.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// set the purple color
|
|
GridColorCellElement colorCellElement = cell as GridColorCellElement;
|
|
colorCellElement.Value = Color.FromArgb(77, 49, 141);
|
|
|
|
// update color in the DB
|
|
if (idx != 0)
|
|
smdbObj.ChangeSMSColor(idx, Color.FromArgb(77, 49, 141));
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
itemPurple.Image = global::Dispatcher.Properties.Resources.s_categ_purple;
|
|
itemPurple.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
// add button to context menu
|
|
menu.Items.Add(itemPurple);
|
|
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
// detect if many messages are selected or not
|
|
bool multiMessagesSelected = SMSGridView.SelectedRows.Count > 1;
|
|
|
|
#region DELETE MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemDelete = new RadMenuItem(multiMessagesSelected ? MainForm2.returnLNGString("delmsgs") : MainForm2.returnLNGString("delmsg"));
|
|
// add click listener for the context menu button
|
|
itemDelete.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
|
|
DialogResult dr2 = DialogResult.Yes;
|
|
|
|
if (rcbDeleteConfirmation.Checked)
|
|
{
|
|
dr2 = RadMessageBox.Show(MainForm2.returnLNGString("delselected") +" " +
|
|
(multiMessagesSelected ? MainForm2.returnLNGString("mss") : MainForm2.returnLNGString("ms")) +"?",
|
|
itemDelete.Text, MessageBoxButtons.YesNo, RadMessageIcon.Info);
|
|
}
|
|
// only if yes was pressed
|
|
if (dr2 == DialogResult.Yes)
|
|
{
|
|
|
|
if (slectedSMSidx != null && slectedSMSidx.Length > 0)
|
|
{
|
|
GridViewSelectedRowsCollection selectedRows = SMSGridView.SelectedRows;
|
|
foreach (GridViewDataRowInfo roww in SMSGridView.SelectedRows.ToList())
|
|
{
|
|
if (!trashSelec)
|
|
{
|
|
smdbObj.Delete_SMS(Int16.Parse(roww.Cells["Idx"].Value.ToString()));
|
|
}
|
|
else
|
|
{
|
|
smdbObj.Delete_SMS_from_trash(new int[] { Int16.Parse(roww.Cells["Idx"].Value.ToString()) });
|
|
}
|
|
|
|
// remove item from the grid
|
|
SMSGridView.Rows.Remove(roww);
|
|
}
|
|
}
|
|
}
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
//itemDelete.Image = global::Dispatcher.Properties.Resources.s_categ_none;
|
|
itemDelete.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
|
|
#region COPY TEXT MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemCopy = new RadMenuItem(MainForm2.returnLNGString("copyMsg"));
|
|
// add click listener for the context menu button
|
|
itemCopy.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
Clipboard.SetText(row.Cells["Message"].Value.ToString());
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
//itemCopy.Image = global::Dispatcher.Properties.Resources.s_categ_none;
|
|
itemCopy.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
|
|
#region WRITE TEXT MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemWrite = new RadMenuItem(MainForm2.returnLNGString("writeNewMsg"));
|
|
// add click listener for the context menu button
|
|
itemWrite.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// write new sms
|
|
//nsf = new NewSmsForm(this, SMSmode.New4Unit, MainForm2.VehIDHash, MainForm2.vehicleHT, row.Cells["Source"].Value.ToString(), "", smdbObj);
|
|
nsf = new NewSmsForm(this, SMSmode.New4Unit, MainForm2.VehIDHash, MainForm2.vehicleHT, row.Cells["Source"].Value.ToString(), "", smdbObj);
|
|
nsf.FormClosed += new FormClosedEventHandler(nsf_FormClosed);
|
|
nsf.Show();
|
|
nsf.BringToFront();
|
|
if (nsf.WindowState == FormWindowState.Minimized)
|
|
nsf.WindowState = FormWindowState.Normal;
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
//itemCopy.Image = global::Dispatcher.Properties.Resources.s_categ_none;
|
|
itemWrite.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
#region FORWARD TEXT MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemForward = new RadMenuItem(MainForm2.returnLNGString("FWmsg"));
|
|
// add click listener for the context menu button
|
|
itemForward.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// forward the sms
|
|
btn_forwardSMS_Click(s, ev);
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
//itemCopy.Image = global::Dispatcher.Properties.Resources.s_categ_none;
|
|
itemForward.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
#region REPLY TEXT MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemReply = new RadMenuItem(MainForm2.returnLNGString("replyMsg"));
|
|
// add click listener for the context menu button
|
|
itemReply.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
// reply the sms
|
|
nsf = new NewSmsForm(this, SMSmode.Reply, MainForm2.VehIDHash, MainForm2.vehicleHT, row.Cells["Source"].Value.ToString(), "", smdbObj);
|
|
nsf.FormClosed += new FormClosedEventHandler(nsf_FormClosed);
|
|
nsf.Show();
|
|
nsf.BringToFront();
|
|
if (nsf.WindowState == FormWindowState.Minimized)
|
|
nsf.WindowState = FormWindowState.Normal;
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
};
|
|
//itemCopy.Image = global::Dispatcher.Properties.Resources.s_categ_none;
|
|
itemReply.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
|
|
#region RESTORE TEXT MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemRestore = new RadMenuItem(MainForm2.returnLNGString("restoreMsg"));
|
|
// add click listener for the context menu button
|
|
itemRestore.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
smdbObj.UnDelete_SMS(Convert.ToInt32(row.Cells["Idx"].Value));
|
|
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
|
|
updateDataGrid(selectedSC_IDlist, inboxSelec, true, false, false);
|
|
};
|
|
//itemCopy.Image = global::Dispatcher.Properties.Resources.s_categ_none;
|
|
itemRestore.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
#region MARK UNREAD MENU ITEM
|
|
bool isReadAtLeastOne = false;
|
|
foreach (GridViewRowInfo r in SMSGridView.SelectedRows)
|
|
{
|
|
if (Convert.ToInt32(r.Cells["Status"].Value.ToString()) == (int)TextStatus.UNREAD_OUT)
|
|
isReadAtLeastOne = true;
|
|
}
|
|
|
|
// create context menu button
|
|
RadMenuItem itemMarkUnread = new RadMenuItem(multiMessagesSelected ?
|
|
MainForm2.returnLNGString("markSelMsgsAsUnread") : MainForm2.returnLNGString("markSelMsgAsUnread"));
|
|
// add click listener for the context menu button
|
|
itemMarkUnread.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
foreach (GridViewRowInfo r in SMSGridView.SelectedRows)
|
|
{
|
|
|
|
smdbObj.Update_SMS(
|
|
(GetTreeLevel() == TreeLevel.INBOX ? (int)TextStatus.UNREAD_IN : (int)TextStatus.UNREAD_OUT),
|
|
Convert.ToInt32(r.Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = r.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
gridItem.Status = 0;
|
|
}
|
|
|
|
r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
r.Cells["Status"].Value = 0;
|
|
}
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
};
|
|
itemMarkUnread.Image = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
itemMarkUnread.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
#region MARK ALL UNREAD MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemMarkAllUnread = new RadMenuItem("Mark all as unread");
|
|
// add click listener for the context menu button
|
|
itemMarkAllUnread.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
DialogResult dr2 = RadMessageBox.Show("Are you sure you want to mark all messages" +
|
|
" as unread?", "Mark all as unread", MessageBoxButtons.YesNo, RadMessageIcon.Info);
|
|
|
|
// only if yes was pressed
|
|
if (dr2 == DialogResult.Yes)
|
|
{
|
|
foreach (GridViewRowInfo r in SMSGridView.Rows)
|
|
{
|
|
//mark sms as unread (status 3) for inbox
|
|
smdbObj.Update_SMS(3, Convert.ToInt32(r.Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = r.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
gridItem.Status = 0;
|
|
}
|
|
|
|
r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
r.Cells["Status"].Value = 0;
|
|
}
|
|
}
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
};
|
|
itemMarkAllUnread.Image = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
itemMarkAllUnread.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
|
|
#region MARK READ MENU ITEM
|
|
bool isUnReadAtLeastOne = false;
|
|
foreach (GridViewRowInfo r in SMSGridView.SelectedRows)
|
|
{
|
|
if (Convert.ToInt32(r.Cells["Status"].Value.ToString()) == (int)TextStatus.SD_NO_GW)
|
|
isUnReadAtLeastOne = true;
|
|
}
|
|
|
|
// create context menu button
|
|
RadMenuItem itemMarkRead = new RadMenuItem(multiMessagesSelected ?
|
|
MainForm2.returnLNGString("markMsgsAsRead") : MainForm2.returnLNGString("markMsgAsRead"));
|
|
// add click listener for the context menu button
|
|
itemMarkRead.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
foreach (GridViewRowInfo r in SMSGridView.SelectedRows)
|
|
{
|
|
smdbObj.Update_SMS(
|
|
(GetTreeLevel() == TreeLevel.INBOX ? (int)TextStatus.READ_IN : (int)TextStatus.READ_OUT),
|
|
Convert.ToInt32(r.Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = r.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
gridItem.Status = 1;
|
|
}
|
|
|
|
r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
r.Cells["Status"].Value = 1;
|
|
}
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
};
|
|
itemMarkRead.Image = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
itemMarkRead.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
#region MARK ALL READ MENU ITEM
|
|
// create context menu button
|
|
RadMenuItem itemMarkAllRead = new RadMenuItem("Mark all as read");
|
|
// add click listener for the context menu button
|
|
itemMarkAllRead.Click += delegate(object s, EventArgs ev)
|
|
{
|
|
DialogResult dr2 = RadMessageBox.Show("Are you sure you want to mark all messages" +
|
|
" as read?", "Mark all as read", MessageBoxButtons.YesNo, RadMessageIcon.Info);
|
|
|
|
// only if yes was pressed
|
|
if (dr2 == DialogResult.Yes)
|
|
{
|
|
foreach (GridViewRowInfo r in SMSGridView.Rows)
|
|
{
|
|
//mark sms as unread (status 3) for inbox
|
|
smdbObj.Update_SMS(1, Convert.ToInt32(r.Cells["Idx"].Value));
|
|
|
|
SMSDataforGRID gridItem = r.DataBoundItem as SMSDataforGRID;
|
|
if (gridItem != null)
|
|
{
|
|
gridItem.Icon = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
gridItem.Status = 1;
|
|
}
|
|
|
|
r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
r.Cells["Status"].Value = 1;
|
|
}
|
|
}
|
|
// close the menu
|
|
menu.ClosePopup(RadPopupCloseReason.Mouse);
|
|
//update number of message for current node
|
|
updateInboxAndOutboxView(true);
|
|
// notify that messages has changed
|
|
parent.UpdateUnreadMessagesNumber();
|
|
};
|
|
itemMarkAllRead.Image = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
itemMarkAllRead.ImageAlignment = ContentAlignment.MiddleLeft;
|
|
#endregion
|
|
|
|
|
|
// display the context menu based on the level of the tree where is selected
|
|
switch(GetTreeLevel())
|
|
{
|
|
case TreeLevel.INBOX:
|
|
{
|
|
// add mark as unread option if needed
|
|
if (isReadAtLeastOne)
|
|
menu.Items.Add(itemMarkUnread);
|
|
|
|
if(isUnReadAtLeastOne)
|
|
menu.Items.Add(itemMarkRead);
|
|
|
|
menu.Items.Add(new RadMenuSeparatorItem());
|
|
|
|
//menu.Items.Add(itemMarkAllUnread);
|
|
//menu.Items.Add(itemMarkAllRead);
|
|
//menu.Items.Add(new RadMenuSeparatorItem());
|
|
menu.Items.Add(itemWrite);
|
|
menu.Items.Add(itemForward);
|
|
menu.Items.Add(itemReply);
|
|
menu.Items.Add(new RadMenuSeparatorItem());
|
|
// add delete button to context menu
|
|
menu.Items.Add(itemDelete);
|
|
if (!multiMessagesSelected)
|
|
menu.Items.Add(itemCopy);
|
|
break;
|
|
}
|
|
case TreeLevel.OUTBOX:
|
|
{
|
|
// add mark as unread option if needed
|
|
if (isReadAtLeastOne)
|
|
menu.Items.Add(itemMarkUnread);
|
|
|
|
if (isUnReadAtLeastOne)
|
|
menu.Items.Add(itemMarkRead);
|
|
|
|
menu.Items.Add(new RadMenuSeparatorItem());
|
|
//menu.Items.Add(itemMarkAllUnread);
|
|
//menu.Items.Add(itemMarkAllRead);
|
|
//menu.Items.Add(new RadMenuSeparatorItem());
|
|
menu.Items.Add(itemWrite);
|
|
menu.Items.Add(itemForward);
|
|
menu.Items.Add(new RadMenuSeparatorItem());
|
|
// add delete button to context menu
|
|
menu.Items.Add(itemDelete);
|
|
if (!multiMessagesSelected)
|
|
menu.Items.Add(itemCopy);
|
|
break;
|
|
}
|
|
case TreeLevel.TRASH:
|
|
{
|
|
menu.Items.Add(itemRestore);
|
|
menu.Items.Add(new RadMenuSeparatorItem());
|
|
// add delete button to context menu
|
|
menu.Items.Add(itemDelete);
|
|
break;
|
|
}
|
|
case TreeLevel.UNKNOWN:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// add the menu to the cell context menu
|
|
e.ContextMenu = menu;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private enum TreeLevel { INBOX, OUTBOX, TRASH, UNKNOWN };
|
|
|
|
/// <summary>
|
|
/// Get level at which the SMS Tree View is selected (placed)
|
|
/// </summary>
|
|
/// <returns>An enum value representing the Tree Level</returns>
|
|
private TreeLevel GetTreeLevel()
|
|
{
|
|
try
|
|
{
|
|
// detect if inbox, outbox or trash is selected
|
|
if (SMSTreeView.SelectedNode.Level == 0)
|
|
{
|
|
// The Group is selected
|
|
if (SMSTreeView.SelectedNode.Name.ToLower().Equals("inbox"))
|
|
return TreeLevel.INBOX;
|
|
else if (SMSTreeView.SelectedNode.Name.ToLower().Equals("outbox"))
|
|
return TreeLevel.OUTBOX;
|
|
else
|
|
return TreeLevel.TRASH;
|
|
}
|
|
else if (SMSTreeView.SelectedNode.Level == 1)
|
|
{
|
|
// a group is selected
|
|
if (SMSTreeView.SelectedNode.Parent.Name.ToLower().Equals("inbox"))
|
|
return TreeLevel.INBOX;
|
|
else if (SMSTreeView.SelectedNode.Parent.Name.ToLower().Equals("outbox"))
|
|
return TreeLevel.OUTBOX;
|
|
else
|
|
return TreeLevel.TRASH;
|
|
}
|
|
else if (SMSTreeView.SelectedNode.Level == 2)
|
|
{
|
|
// a unit is selected
|
|
if (SMSTreeView.SelectedNode.Parent.Parent.Name.ToLower().Equals("inbox"))
|
|
return TreeLevel.INBOX;
|
|
else if (SMSTreeView.SelectedNode.Parent.Parent.Name.ToLower().Equals("outbox"))
|
|
return TreeLevel.OUTBOX;
|
|
else
|
|
return TreeLevel.TRASH;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
|
|
return TreeLevel.UNKNOWN;
|
|
}
|
|
|
|
|
|
private int selectedIndex = 0;
|
|
|
|
private void RefreshALL(Boolean withoutTreeRefresh)
|
|
{
|
|
// save previous selected row
|
|
if (SMSGridView.SelectedRows.Count > 0)
|
|
selectedIndex = SMSGridView.SelectedRows[0].Index;
|
|
|
|
if (!trashSelec)
|
|
{
|
|
if (selectedSC_IDlist != null)
|
|
{
|
|
if (selectedSC_IDlist.Length > 0)
|
|
{
|
|
updateDataGrid(selectedSC_IDlist, inboxSelec, false,false,false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SM.Debug("Error in refresh ...selectedSC_IDlist is NULL");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
updateDataGrid(selectedSC_IDlist, false, true,false,false);
|
|
}
|
|
|
|
if (!withoutTreeRefresh)
|
|
updateInboxAndOutboxView(true);
|
|
|
|
|
|
if(SMSGridView.Rows.Count > selectedIndex)
|
|
{
|
|
SMSGridView.Rows[selectedIndex].IsSelected = true;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region SMS buttons events
|
|
private NewSmsForm nsf = null;
|
|
private void btn_write_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
//open write sms form
|
|
nsf = new NewSmsForm(this,SMSmode.New, MainForm2.VehIDHash, MainForm2.vehicleHT, "", "", smdbObj);
|
|
nsf.FormClosed += new FormClosedEventHandler(nsf_FormClosed);
|
|
nsf.Show();
|
|
nsf.BringToFront();
|
|
if (nsf.WindowState == FormWindowState.Minimized)
|
|
nsf.WindowState = FormWindowState.Normal;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Cann't show new SMS form" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
void nsf_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
// skip if the form was closed with X or other way
|
|
if (nsf != null && nsf.DialogResult != DialogResult.OK)
|
|
return;
|
|
|
|
System.Threading.Thread.Sleep(200);
|
|
|
|
// force to take again all the messages
|
|
oldSelected = "";
|
|
|
|
SMSTreeView_Click(rtbQuickText, null);
|
|
|
|
/*
|
|
updateDataGrid(selectedSC_IDlist, inboxSelec, false,false,false);
|
|
//webBrowser1.DocumentText = "";
|
|
if (SMSGridView.RowCount > 0)
|
|
{
|
|
SelectSMSandDisplay(false);
|
|
}*/
|
|
|
|
nsf = null;
|
|
}
|
|
|
|
private void btn_forwardSMS_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (SMSGridView.SelectedRows.Count > 0)
|
|
{
|
|
//opne new form
|
|
String text = (String)SMSGridView.SelectedRows[0].Cells["Message"].Value;
|
|
nsf = new NewSmsForm(this, SMSmode.Forward, MainForm2.VehIDHash, MainForm2.vehicleHT, "", text, smdbObj);
|
|
nsf.FormClosed += new FormClosedEventHandler(nsf_FormClosed);
|
|
nsf.Show();
|
|
nsf.BringToFront();
|
|
if (nsf.WindowState == FormWindowState.Minimized)
|
|
nsf.WindowState = FormWindowState.Normal;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Cann't show new SMS form" + ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
private void btn_deleteSMS_Click_1(object sender, EventArgs e)
|
|
{
|
|
if (slectedSMSidx != null && slectedSMSidx.Length > 0)
|
|
{
|
|
for (int i = 0; i < slectedSMSidx.Length; i++)
|
|
{
|
|
SM.Debug("Deleting SMS with index :" + slectedSMSidx[i]);
|
|
try
|
|
{
|
|
if (!trashSelec)
|
|
{
|
|
smdbObj.Delete_SMS(slectedSMSidx[i]);
|
|
}
|
|
else
|
|
{
|
|
smdbObj.Delete_SMS_from_trash(new int[] {slectedSMSidx[i]});
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{ SM.Debug("Delete SMS"+ex.ToString()); }
|
|
|
|
}
|
|
if (selectedSC_IDlist != null)
|
|
{
|
|
if (selectedSC_IDlist.Length > 0)
|
|
{
|
|
updateDataGrid(selectedSC_IDlist, inboxSelec, false,false,false);
|
|
SelectSMSandDisplay(false);
|
|
}
|
|
}
|
|
RefreshALL(true);
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region aux functions
|
|
|
|
|
|
private ArrayList sc_id4SMS;
|
|
|
|
private ArrayList getAllsc_idFromSelection()
|
|
{
|
|
ArrayList v_sc_idList = new ArrayList();
|
|
foreach (RadTreeNode node in SMSTreeView.SelectedNodes)
|
|
{
|
|
int[] scidArray = getChildSC_ID(node);
|
|
for (int i = 0; i < scidArray.Length; i++)
|
|
{
|
|
if (!v_sc_idList.Contains(scidArray[i]))
|
|
{
|
|
v_sc_idList.Add(scidArray[i]);
|
|
}
|
|
}
|
|
}
|
|
return v_sc_idList;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region send&predefine buttons events
|
|
|
|
public void SendSMS(string text, int sc_id, int sched_timegmt)
|
|
{
|
|
parent.SendSmsOnMBus(text, sc_id, sched_timegmt);
|
|
}
|
|
|
|
public void SendSMSGroupMotorola(string text, int cps_id, int sched_timegmt, Int32 sc_id_for_test)
|
|
{
|
|
try
|
|
{
|
|
if ((MainForm2.VehIDHash[sc_id_for_test] != null) && (MainForm2.vehicleHT[MainForm2.VehIDHash[sc_id_for_test].ToString()] != null))
|
|
{
|
|
((Vehicle)MainForm2.vehicleHT[MainForm2.VehIDHash[sc_id_for_test].ToString()]).CheckPositionInSystem();
|
|
String Totrans = "#142#" + ((Vehicle)MainForm2.vehicleHT[MainForm2.VehIDHash[sc_id_for_test].ToString()]).GwandRadioID + "." + cps_id + "#" + text + "#" + sched_timegmt + "#";
|
|
parent.Send_UDP_cmd(Totrans, 0, 0);
|
|
((Vehicle)MainForm2.vehicleHT[MainForm2.VehIDHash[sc_id_for_test].ToString()]).EventLists.Add(new Alarms(rep_type.SMSSEND, DateTime.Now, "", text));
|
|
|
|
parent.DisplayToast(MainForm2.returnLNGString("txtMsgToGrp") + cps_id, "<html>" + MainForm2.returnLNGString("grpmsj") + " " + "<i>" + text + "</i>" + " " + MainForm2.returnLNGString("wasSentToGW") + "</html>");
|
|
}
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Send SMS error on hash:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
public void SendSMSGroup(string text, int cps_id, int sched_timegmt)
|
|
{
|
|
try
|
|
{
|
|
parent.SendSMSGroup(text, cps_id, sched_timegmt, SMSTreeView.SelectedNode.Text);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SM.Debug("Send SMS Group error:" + ex.ToString());
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
private void radMenuWriteSMS_Click(object sender, EventArgs e)
|
|
{
|
|
SMSmode mode = SMSmode.Reply;
|
|
if (selectedTreeNode != null)
|
|
{
|
|
if (selectedTreeNode.Name != "")
|
|
{
|
|
mode = SMSmode.Reply;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mode = SMSmode.New4Unit;
|
|
}
|
|
|
|
// skip case when no tree view item is selected
|
|
if (SMSTreeView.SelectedNode == null)
|
|
return;
|
|
|
|
// write new sms
|
|
nsf = new NewSmsForm(this, mode, MainForm2.VehIDHash, MainForm2.vehicleHT,
|
|
SMSTreeView.SelectedNode.Name, "", smdbObj);
|
|
nsf.FormClosed += new FormClosedEventHandler(nsf_FormClosed);
|
|
nsf.Show();
|
|
nsf.BringToFront();
|
|
if (nsf.WindowState == FormWindowState.Minimized)
|
|
nsf.WindowState = FormWindowState.Normal;
|
|
}
|
|
|
|
|
|
private void btn_NextPage_Click(object sender, EventArgs e)
|
|
{
|
|
PageforInbox++;
|
|
int[] tmp = null;
|
|
updateDataGrid(tmp, Type_Inbox_for_limit2000, false, true,false);
|
|
}
|
|
|
|
private void btn_PrevPage_Click(object sender, EventArgs e)
|
|
{
|
|
PageforInbox--;
|
|
int[] tmp = null;
|
|
updateDataGrid(tmp, Type_Inbox_for_limit2000, false, true,false);
|
|
}
|
|
private Boolean cusaufara = true;
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
//private RadTreeNode selectedTreeNode = null;
|
|
RadTreeNode selNode = SMSTreeView.SelectedNode;
|
|
selNode.Collapse();
|
|
if (cusaufara)
|
|
{
|
|
selNode.Text += "(" + "20" + ")";
|
|
selNode.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
cusaufara = false;
|
|
}
|
|
else
|
|
{
|
|
selNode.Font = new System.Drawing.Font("Tahoma", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Regular))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
cusaufara = true;
|
|
}
|
|
selNode.Expand();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Filter the text message grid when search text box changes its text
|
|
/// </summary>
|
|
private FilterDescriptor prevValueFilter = null;
|
|
private void tbSearch_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (tbSearch.Text.Length == 0)
|
|
{
|
|
pbSearch.Image = Dispatcher.Properties.Resources.s_search;
|
|
pbSearch.Cursor = Cursors.Default;
|
|
}
|
|
else
|
|
{
|
|
pbSearch.Image = Dispatcher.Properties.Resources.s_delete;
|
|
pbSearch.Cursor = Cursors.Hand;
|
|
}
|
|
|
|
FilterDescriptor valueFilter = new FilterDescriptor("Message", FilterOperator.Contains, tbSearch.Text);
|
|
|
|
//while (SMSGridView.FilterDescriptors.Count > 0)
|
|
// SMSGridView.FilterDescriptors.RemoveAt(0);
|
|
|
|
// remove previous filter if exists
|
|
if (prevValueFilter != null)
|
|
SMSGridView.FilterDescriptors.Remove(prevValueFilter);
|
|
|
|
SMSGridView.FilterDescriptors.Add(valueFilter);
|
|
|
|
// save filter for the next one
|
|
prevValueFilter = valueFilter;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reset the search text box text
|
|
/// </summary>
|
|
private void pbSearch_Click(object sender, EventArgs e)
|
|
{
|
|
if(tbSearch.Text.Length > 0)
|
|
tbSearch.Text = "";
|
|
}
|
|
|
|
|
|
|
|
#region PICTURE BOX MAP PIN
|
|
/// <summary>
|
|
/// Enable or disable the clicks on keys and then changes in grid view
|
|
/// </summary>
|
|
private void pbKeys_Click(object sender, EventArgs e)
|
|
{
|
|
PictureBox s = (PictureBox)sender;
|
|
|
|
if (s.Tag.Equals("selected"))
|
|
{
|
|
s.Tag = "unselected";
|
|
if(s == pbR)
|
|
s.Image = MainForm2.imagesDictionary["s_key_r_d"];
|
|
else if (s == pbU)
|
|
s.Image = MainForm2.imagesDictionary["s_key_u_d"];
|
|
else if (s == pbDelete)
|
|
s.Image = MainForm2.imagesDictionary["s_key_del_d"];
|
|
}
|
|
else
|
|
{
|
|
s.Tag = "selected";
|
|
if (s == pbR)
|
|
s.Image = MainForm2.imagesDictionary["s_key_r"];
|
|
else if (s == pbU)
|
|
s.Image = MainForm2.imagesDictionary["s_key_u"];
|
|
else if (s == pbDelete)
|
|
s.Image = MainForm2.imagesDictionary["s_key_del"];
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Display the Tooltip when the mouse is over the picture box
|
|
/// </summary>
|
|
private void pbKeys_MouseEnter(object sender, EventArgs e)
|
|
{
|
|
PictureBox s = (PictureBox)sender;
|
|
|
|
toolTipHelp.ToolTipTitle = "Current state: " + (((PictureBox)sender).Tag.Equals("selected") ? "Active" : "Inactive");
|
|
toolTipHelp.Show(
|
|
String.Format("When active, the stroke on "
|
|
+ Environment.NewLine
|
|
+ (s == pbR ? "R key will mark as read the message" :
|
|
(s == pbU ? "U key will mark as unread the message" : "Del key will delete the message")))
|
|
,(PictureBox)sender, 50000);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Hide the tooltip when the mouse leaves the picture box
|
|
/// </summary>
|
|
private void pbKeys_MouseLeave(object sender, EventArgs e)
|
|
{
|
|
toolTipHelp.Hide((PictureBox)sender);
|
|
}
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
/// Quick way to send a text message to a desired unit
|
|
/// </summary>
|
|
private void rbtSendQuick_Click(object sender, EventArgs e)
|
|
{
|
|
// skip case when no tree view item is selected
|
|
if (SMSTreeView.SelectedNode == null && SMSTreeView.SelectedNode.Tag != null)
|
|
return;
|
|
|
|
Int16 scID = 0;
|
|
Int16.TryParse(SMSTreeView.SelectedNode.Tag.ToString(), out scID);
|
|
|
|
if (scID > 0 && SMSTreeView.SelectedNode.Nodes.Count == 0)
|
|
{
|
|
SendSMS(rtbQuickText.Text, scID, (int)DateTime.Now.ToUniversalTime().DateTo70Format());
|
|
}
|
|
else
|
|
{
|
|
SendSMSGroup(rtbQuickText.Text, scID, (int)DateTime.Now.ToUniversalTime().DateTo70Format());
|
|
}
|
|
|
|
rtbQuickText.ResetText();
|
|
//rtbQuickText.Text = "";
|
|
rtbQuickText.Focus();
|
|
|
|
rbtSendQuick.Enabled = false;
|
|
|
|
SMSTreeView_Click(rbtSendQuick, null);
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Send text message when enter key was pressed
|
|
/// </summary>
|
|
private void rtbQuickText_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter && rtbQuickText.Text != "")
|
|
rbtSendQuick.PerformClick();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Change background color of the button when it becomes enable or disabled
|
|
/// </summary>
|
|
private void rbtSendQuick_EnabledChanged(object sender, EventArgs e)
|
|
{
|
|
if (rbtSendQuick.Enabled)
|
|
rbtSendQuick.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor;
|
|
else
|
|
rbtSendQuick.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColorDisabled;
|
|
}
|
|
|
|
private void SMSuserControl_Load(object sender, EventArgs e)
|
|
{
|
|
// disable the Send Quick message button
|
|
rbtSendQuick.Enabled = false;
|
|
isSMSLoaded = true;
|
|
VisualSettings.loadUserVisualSettings(this.Name, this.documentWindow2, MainForm2.HashVal);
|
|
|
|
updateInboxAndOutboxView(true);
|
|
Color focusColor = Color.Black;
|
|
MainForm2.RestartMEM += 30000000;
|
|
|
|
}
|
|
|
|
|
|
/// <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;
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Catches the event when
|
|
/// the user inputs/deletes a character in/from the search box,
|
|
/// and the vehicles list is refreshed accordingly </summary>
|
|
/// </summary>
|
|
private void searchTextBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
SMSTreeView.Filter = null;
|
|
SMSTreeView.Filter = searchTextBox.Text;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Change background color for the row according to its state and theme
|
|
/// </summary>
|
|
private void SMSGridView_RowFormatting(object sender, RowFormattingEventArgs e)
|
|
{
|
|
e.RowElement.DrawFill = true;
|
|
e.RowElement.NumberOfColors = 1;
|
|
|
|
if (e.RowElement.IsSelected)
|
|
e.RowElement.BackColor = MainForm2.GridSelectedRow;
|
|
else
|
|
e.RowElement.BackColor = (e.RowElement.RowInfo.Index % 2 == 0 ? Color.White : MainForm2.GridAlternateRow);
|
|
|
|
SMSDataforGRID sms = e.RowElement.Data.DataBoundItem as SMSDataforGRID;
|
|
if (sms != null && sms.DateTime.CompareTo(DateTime.UtcNow) > 0 && !e.RowElement.IsSelected)
|
|
{
|
|
e.RowElement.BackColor = Color.FromArgb(225,255,210);
|
|
}
|
|
if (sms != null && sms.Status == 0)
|
|
{
|
|
e.RowElement.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
//e.RowElement.VisualCells[2].Image = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
}
|
|
else
|
|
{
|
|
e.RowElement.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
//e.RowElement.VisualCells[2].Image = global::Dispatcher.Properties.Resources.openEnvelope;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Change background color for the row according to its state and theme
|
|
/// </summary>
|
|
private void SMSTreeView_NodeFormatting(object sender, TreeNodeFormattingEventArgs e)
|
|
{
|
|
if (e.NodeElement.IsSelected)
|
|
{
|
|
e.NodeElement.DrawFill = true;
|
|
e.NodeElement.BackColor = MainForm2.GridSelectedRow;
|
|
e.NodeElement.NumberOfColors = 1;
|
|
}
|
|
else
|
|
e.NodeElement.DrawFill = false;
|
|
}
|
|
|
|
#region CHANGE TABS BACKGROUND
|
|
private DockWindow oldDockWindow = null;
|
|
private void radDock1_ActiveWindowChanging(object sender, DockWindowCancelEventArgs e)
|
|
{
|
|
// reset the background icon for the previous tab
|
|
e.OldWindow.TabStripItem.BackColor = Color.White;
|
|
e.OldWindow.TabStripItem.DrawFill = true;
|
|
e.OldWindow.TabStripItem.NumberOfColors = 1;
|
|
|
|
// reset the background for the new window
|
|
e.NewWindow.TabStripItem.DrawFill = true;
|
|
e.NewWindow.TabStripItem.NumberOfColors = 1;
|
|
e.NewWindow.TabStripItem.BackColor = MainForm2.TabSelectedColor;
|
|
|
|
// save old dock window
|
|
oldDockWindow = e.OldWindow;
|
|
}
|
|
|
|
private void radDock1_ActiveWindowChanged(object sender, DockWindowEventArgs e)
|
|
{
|
|
|
|
// reset the background icon for the previous tab
|
|
oldDockWindow.TabStripItem.BackColor = Color.White;
|
|
oldDockWindow.TabStripItem.DrawFill = true;
|
|
oldDockWindow.TabStripItem.NumberOfColors = 1;
|
|
|
|
e.DockWindow.TabStripItem.DrawFill = true;
|
|
e.DockWindow.TabStripItem.NumberOfColors = 1;
|
|
e.DockWindow.TabStripItem.BackColor = MainForm2.TabSelectedColor;
|
|
}
|
|
#endregion
|
|
|
|
private void rcbDeleteConfirmation_ToggleStateChanged(object sender, StateChangedEventArgs args)
|
|
{
|
|
VisualSettings.InsertUpdateHTforVisualItems(this.Name, ((RadCheckBox)sender).Name, ((RadCheckBox)sender).Checked.ToString());
|
|
}
|
|
|
|
private void SMSGridView_CustomSorting(object sender, GridViewCustomSortingEventArgs e)
|
|
{
|
|
int descriptorIndex = -1;
|
|
|
|
// search the Date column and get it's descriptor Index
|
|
for (int i = 0; i < this.SMSGridView.SortDescriptors.Count; i++)
|
|
{
|
|
if (SMSGridView.SortDescriptors[i].PropertyName == "Date")
|
|
{
|
|
descriptorIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// custom sort the ticket column
|
|
if (descriptorIndex != -1)
|
|
{
|
|
// get data bound items for the two rows
|
|
SMSDataforGRID sms1 = e.Row1.DataBoundItem as SMSDataforGRID;
|
|
SMSDataforGRID sms2 = e.Row2.DataBoundItem as SMSDataforGRID;
|
|
|
|
// compare based on the sms time
|
|
int sortResult = sms1.DateTime.CompareTo(sms2.DateTime);
|
|
|
|
// invert result if set sort descriptor is descending
|
|
if (sortResult != 0)
|
|
{
|
|
if (this.SMSGridView.SortDescriptors[descriptorIndex].Direction == ListSortDirection.Descending)
|
|
sortResult = -sortResult;
|
|
}
|
|
|
|
// set sort result
|
|
e.SortResult = sortResult;
|
|
}
|
|
// do not handle the sorting for other columns
|
|
else
|
|
e.Handled = false;
|
|
}
|
|
|
|
|
|
private void rtbQuickText_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (CanSendQuickTextMessage(SMSTreeView.SelectedNode))
|
|
rbtSendQuick.Enabled = (rtbQuickText.Text.Length != 0);
|
|
|
|
// update the number of characters
|
|
labelCount.Text = String.Format(MainForm2.returnLNGString("charactersLeft"), rtbQuickText.MaxLength - rtbQuickText.Text.Length);
|
|
|
|
}
|
|
|
|
|
|
private void rddlFilterMsgStatus_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
|
|
{
|
|
// clear status filter
|
|
SMSGridView.FilterDescriptors.Remove("Status");
|
|
// Create a composite file descriptor with OR logic
|
|
FilterDescriptor valueFilter = new FilterDescriptor();
|
|
|
|
|
|
// if display all is selected I can exit
|
|
if (rddlFilterMsgStatus.SelectedIndex == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
else if(rddlFilterMsgStatus.SelectedIndex == 1)
|
|
{
|
|
// read messages needs to be displayed
|
|
/*
|
|
statusDescriptor.FilterDescriptors.Add(new FilterDescriptor("Icon", FilterOperator.IsEqualTo,
|
|
global::Dispatcher.Properties.Resources.openEnvelope));
|
|
statusDescriptor.FilterDescriptors.Add(new FilterDescriptor("Status", FilterOperator.IsEqualTo,
|
|
1));*/
|
|
valueFilter = new FilterDescriptor("Status", FilterOperator.IsLike, "1");
|
|
/*
|
|
statusDescriptor.FilterDescriptors.Add(new FilterDescriptor("Status", FilterOperator.IsEqualTo,
|
|
(int)TextStatus.READ_OUT));*/
|
|
}
|
|
else
|
|
{
|
|
//r.Cells["Icon"].Value = global::Dispatcher.Properties.Resources.closedEnvelope;
|
|
// read messages needs to be displayed
|
|
// for each selected status add a custom filedescroptor
|
|
/*
|
|
statusDescriptor.FilterDescriptors.Add(new FilterDescriptor("Icon", FilterOperator.IsEqualTo,
|
|
global::Dispatcher.Properties.Resources.closedEnvelope));
|
|
|
|
statusDescriptor.FilterDescriptors.Add(new FilterDescriptor("Status", FilterOperator.IsEqualTo,0));/*
|
|
statusDescriptor.FilterDescriptors.Add(new FilterDescriptor("Status", FilterOperator.IsEqualTo,
|
|
(int)TextStatus.UNREAD_OUT));*/
|
|
valueFilter = new FilterDescriptor("Status", FilterOperator.IsLike, "0");
|
|
}
|
|
|
|
SMSGridView.FilterDescriptors.Add(valueFilter);
|
|
|
|
}
|
|
|
|
private void SMSGridView_FilterChanged(object sender, GridViewCollectionChangedEventArgs e)
|
|
{
|
|
/*
|
|
SMSGridView.DataSource = null;
|
|
SMSGridView.DataSource = ListforGrid;*/
|
|
}
|
|
|
|
|
|
}
|
|
}
|