using SafeMobileLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; using Telerik.WinControls; namespace Safedispatch_4_0.Radio { public partial class CallsForm : Telerik.WinControls.UI.RadForm { public const int WM_NCLBUTTONDOWN = 0xA1; public const int HT_CAPTION = 0x2; [DllImportAttribute("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImportAttribute("user32.dll")] public static extern bool ReleaseCapture(); public Int32 callStatus; public string _IP; private Int64 id = 0; internal String name = ""; private Int32 groupID = 0; private Cmd_type_callForm type_of_message = Cmd_type_callForm.End_call; private SubscriberType subsType = SubscriberType.SUBSCRIBER; private String Imei = ""; private String ip = ""; bool pttIsPressed = false; internal static int positionY = 0; internal static int positionX = 0; public string Title { get { return label_name.Text; } set { label_name.Text = value; base.Text = value; } } public string GatewayName { get { return gatewayName; } set { lbGatewayName.Text = value; gatewayName = value; } } private string gatewayName; public CallsForm(long ID,String Name_to_Display,Int32 groupID,Int32 callType,Int32 _callStatus, string ip) { InitializeComponent(); this.id = ID; this.name = Name_to_Display; this.groupID = groupID; Imei = id.ToString(); this.ip = string.Format("224.20.{0}.1", id); _IP = ip; if (MainForm2.radioType == RADIOTYPE.SIMOCO) label_name.Text = "Simoco"; //if (MainForm2.radioType == RADIOTYPE.EXCERA) // label_name.Text = "Excera"; lbName.Text = Name_to_Display; switch (callType) { case 101: lbCallType.Text = MainForm2.returnLNGString("allcall"); picBoxCallType.Image = Dispatcher.Properties.Resources.r_call_received_all; subsType = SubscriberType.ALL; break; case 102: lbCallType.Text = MainForm2.returnLNGString("privateCall"); picBoxCallType.Image = Dispatcher.Properties.Resources.r_call_received_private; subsType = SubscriberType.SUBSCRIBER; break; case 103: string groupName = MainForm2.GroupCPSIDOnlyHashWithoutCategory.ContainsKey(groupID + RadioTab.responseGW) ? " - " + MainForm2.GroupCPSIDOnlyHashWithoutCategory[groupID + RadioTab.responseGW].Name + " ": ""; lbCallType.Text = String.Format(MainForm2.returnLNGString("groupcallWithInfo"), groupName, groupID); picBoxCallType.Image = Dispatcher.Properties.Resources.r_call_received_group; subsType = SubscriberType.GROUP; Imei = groupID.ToString(); break; case 201: lbCallType.Text = MainForm2.returnLNGString("dispatcherCall"); picBoxCallType.Image = Dispatcher.Properties.Resources.r_call_received_dispatcher; subsType = SubscriberType.DISPATCHER; break; case 162: lbCallType.Text = MainForm2.returnLNGString("remoteMonitor"); picBoxCallType.Image = Dispatcher.Properties.Resources.r_call_received_remote; break; } callStatus = _callStatus; //this.TopLevel = true; //this.TopMost = true; this.Location = new Point(Screen.PrimaryScreen.Bounds.X + positionX , //should be (0,0) Screen.PrimaryScreen.Bounds.Y + positionY); this.TopMost = true; this.StartPosition = FormStartPosition.Manual; } #region KeyIntercept private void CallsForm_KeyDown(object sender, KeyEventArgs e) { if (e.Alt == true && e.KeyCode == Keys.P) { e.SuppressKeyPress = true; e.Handled = true; if (!pttIsPressed) { callButton_MouseDown(null, null); pttIsPressed = true; } } } private void CallsForm_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.P && pttIsPressed) { e.Handled = true; e.SuppressKeyPress = true; callButton_MouseUp(null, null); pttIsPressed = false; } } #endregion public void UpdateCallStatus(Int32 _callStatus) { callStatus = _callStatus; callButton.Image = Dispatcher.Properties.Resources.r_ptt; } public bool RequestForClosing() { if (type_of_message != Cmd_type_callForm.Start_PTT) { this.Close(); return true; } else return false; } internal void SetMute(bool Status) { this.pbHeadset.Image = !Status ? Dispatcher.Properties.Resources.r_headset_d: Dispatcher.Properties.Resources.r_headset; this.pbHeadset.Tag = Status.ToString().ToLower(); } internal void SetEmergencyColorBackground() { this.BackgroundImage = Dispatcher.Properties.Resources.frame_calls_emergency; } private void pbClose_Click(object sender, EventArgs e) { type_of_message = Cmd_type_callForm.End_call; if (_onPlay_Click != null) _onPlay_Click(pbHeadset, new ToggleClickEventArgs() { IMEI = lbCallType.Text == MainForm2.returnLNGString("allCall") ? "0" : Imei, isActive = true, SubsType = subsType, IP = this._IP, Type_of_message = type_of_message, CallerName = this.name }); this.Close(); } private void CallsForm_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ReleaseCapture(); SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); } } private void callButton_MouseDown(object sender, MouseEventArgs e) { if (callStatus == 2) { type_of_message = Cmd_type_callForm.Start_PTT; } else { //send Dekey or Close // send end_call just for Simoco if (MainForm2.radioType == RADIOTYPE.SIMOCO || MainForm2.radioType == RADIOTYPE.EXCERA) { type_of_message = Cmd_type_callForm.End_call; } else type_of_message = Cmd_type_callForm.Dekey; //if ((MainForm2.radioType == RADIOTYPE.MOTO) || (MainForm2.radioType == RADIOTYPE.REPEATER_TRBO)) //{ // type_of_message = Cmd_type_callForm.Dekey; //} //else //{ // type_of_message = Cmd_type_callForm.End_call; //} } // trigger event for when click is done if (_onPlay_Click != null) _onPlay_Click(pbHeadset, new ToggleClickEventArgs() { IMEI = Imei, isActive = true, SubsType = subsType, IP = this._IP, Type_of_message = type_of_message, CallerName = this.name }); } private void pbHeadset_MouseUp(object sender, MouseEventArgs e) { Console.WriteLine("FAV Click"); if (this.pbHeadset.Tag.Equals("false")) { this.pbHeadset.Image = Dispatcher.Properties.Resources.r_headset; this.pbHeadset.Tag = "true"; } else { this.pbHeadset.Image = Dispatcher.Properties.Resources.r_headset_d; this.pbHeadset.Tag = "false"; } // trigger event for when click is done if (_onHeadset_Click != null) _onHeadset_Click(pbHeadset, new ToggleClickEventArgs() { IMEI = Imei, isActive = true, SubsType = subsType, IP = this._IP, Type_of_message = type_of_message, CallerName = this.name }); } public enum Cmd_type_callForm { End_call = 0, Dekey, Start_PTT, Stop_PTT, Sound_OFF, Sound_ON }; private void callButton_MouseUp(object sender, MouseEventArgs e) { if (callStatus == 2) type_of_message = Cmd_type_callForm.Stop_PTT; // trigger event for when click is done if (_onPlay_Click != null) _onPlay_Click(pbHeadset, new ToggleClickEventArgs() { IMEI = Imei, isActive = true, SubsType = subsType, IP = this._IP, Type_of_message = type_of_message, CallerName = this.name }); this.Close(); } #region CELL CLICK EVENTS public class ToggleClickEventArgs : EventArgs { public String IMEI { get; set; } public String IP { get; set; } public String CallerName { get; set; } public Boolean isActive { get; set; } public SubscriberType SubsType { get; set; } public Cmd_type_callForm Type_of_message { get; set; } } private object _lockHeadsetClick = new object(); private event EventHandler _onHeadset_Click; public event EventHandler OnHeadset_Click { add { lock (_lockHeadsetClick) { _onHeadset_Click += value; } } remove { lock (_lockHeadsetClick) { _onHeadset_Click -= value; } } } private object _lockPlayClick = new object(); private event EventHandler _onPlay_Click; public event EventHandler OnPlay_Click { add { lock (_lockPlayClick) { _onPlay_Click += value; } } remove { lock (_lockPlayClick) { _onPlay_Click -= value; } } } private object _lockFormClosing = new object(); private event EventHandler _onForm_Closing; public event EventHandler OnForm_Closing { add { lock (_lockFormClosing) { _onForm_Closing += value; } } remove { lock (_lockFormClosing) { _onForm_Closing -= value; } } } #endregion private void CallsForm_FormClosing(object sender, FormClosingEventArgs e) { _onForm_Closing?.Invoke(sender, e); } } }