MainForm.cs
author StephaneLenclud
Mon, 02 Feb 2015 22:12:15 +0100
changeset 48 1eb878505ae1
parent 42 219e9a418456
child 49 2ec781e51f36
permissions -rw-r--r--
Adding editor config and some Win32 struct.
sl@0
     1
using System;
sl@0
     2
using System.Drawing;
sl@0
     3
using System.Collections;
sl@0
     4
using System.ComponentModel;
sl@0
     5
using System.Windows.Forms;
sl@0
     6
using System.Data;
sl@6
     7
using Devices.RemoteControl;
sl@0
     8
sl@0
     9
namespace RemoteControlSample
sl@0
    10
{
sl@0
    11
	/// <summary>
sl@0
    12
	/// Summary description for Form1.
sl@0
    13
	/// </summary>
sl@36
    14
	public class MainForm : System.Windows.Forms.Form
sl@0
    15
	{
sl@0
    16
		/// <summary>
sl@0
    17
		/// Required designer variable.
sl@0
    18
		/// </summary>
sl@38
    19
        private System.ComponentModel.Container components = null;
sl@38
    20
        private RemoteControlDevice _remote;
sl@38
    21
        private Label labelButtonName;
sl@38
    22
        private Label labelDeviceName;
sl@39
    23
        private ListView listViewEvents;
sl@40
    24
        private ColumnHeader columnHeaderUsage;
sl@40
    25
        private ColumnHeader columnHeaderUsagePage;
sl@40
    26
        private ColumnHeader columnHeaderUsageCollection;
sl@42
    27
        private ColumnHeader columnHeaderRepeat;
sl@44
    28
        private ColumnHeader columnHeaderTime;
sl@0
    29
		private Timer _timer;
sl@0
    30
sl@41
    31
        public delegate void OnHidEventDelegate(object aSender, Hid.HidEvent aHidEvent);
sl@41
    32
sl@36
    33
		public MainForm()
sl@0
    34
		{
sl@0
    35
			//
sl@0
    36
			// Required for Windows Form Designer support
sl@0
    37
			//
sl@0
    38
			InitializeComponent();
sl@0
    39
sl@0
    40
			_timer = new Timer();
sl@0
    41
			_timer.Interval = 3000;
sl@0
    42
			_timer.Enabled = false;
sl@15
    43
			_timer.Tick +=new EventHandler(_timer_Tick);            
sl@0
    44
		}
sl@0
    45
sl@0
    46
		/// <summary>
sl@0
    47
		/// Clean up any resources being used.
sl@0
    48
		/// </summary>
sl@0
    49
		protected override void Dispose( bool disposing )
sl@0
    50
		{
sl@0
    51
			if( disposing )
sl@0
    52
			{
sl@6
    53
				if (components != null)
sl@0
    54
				{
sl@0
    55
					components.Dispose();
sl@0
    56
				}
sl@0
    57
			}
sl@0
    58
			base.Dispose( disposing );
sl@0
    59
		}
sl@0
    60
sl@0
    61
		#region Windows Form Designer generated code
sl@0
    62
		/// <summary>
sl@0
    63
		/// Required method for Designer support - do not modify
sl@0
    64
		/// the contents of this method with the code editor.
sl@0
    65
		/// </summary>
sl@0
    66
		private void InitializeComponent()
sl@0
    67
		{
sl@38
    68
            this.labelButtonName = new System.Windows.Forms.Label();
sl@38
    69
            this.labelDeviceName = new System.Windows.Forms.Label();
sl@39
    70
            this.listViewEvents = new System.Windows.Forms.ListView();
sl@40
    71
            this.columnHeaderUsage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
sl@40
    72
            this.columnHeaderUsagePage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
sl@40
    73
            this.columnHeaderUsageCollection = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
sl@42
    74
            this.columnHeaderRepeat = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
sl@44
    75
            this.columnHeaderTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
sl@38
    76
            this.SuspendLayout();
sl@38
    77
            // 
sl@38
    78
            // labelButtonName
sl@38
    79
            // 
sl@38
    80
            this.labelButtonName.AutoSize = true;
sl@38
    81
            this.labelButtonName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
sl@39
    82
            this.labelButtonName.Location = new System.Drawing.Point(600, 32);
sl@38
    83
            this.labelButtonName.Name = "labelButtonName";
sl@38
    84
            this.labelButtonName.Size = new System.Drawing.Size(103, 20);
sl@38
    85
            this.labelButtonName.TabIndex = 0;
sl@38
    86
            this.labelButtonName.Text = "Button Name";
sl@38
    87
            // 
sl@38
    88
            // labelDeviceName
sl@38
    89
            // 
sl@38
    90
            this.labelDeviceName.AutoSize = true;
sl@38
    91
            this.labelDeviceName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
sl@39
    92
            this.labelDeviceName.Location = new System.Drawing.Point(600, 12);
sl@38
    93
            this.labelDeviceName.Name = "labelDeviceName";
sl@38
    94
            this.labelDeviceName.Size = new System.Drawing.Size(103, 20);
sl@38
    95
            this.labelDeviceName.TabIndex = 1;
sl@38
    96
            this.labelDeviceName.Text = "Device Name";
sl@38
    97
            // 
sl@39
    98
            // listViewEvents
sl@39
    99
            // 
sl@39
   100
            this.listViewEvents.Alignment = System.Windows.Forms.ListViewAlignment.Left;
sl@39
   101
            this.listViewEvents.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
sl@39
   102
            | System.Windows.Forms.AnchorStyles.Left)));
sl@39
   103
            this.listViewEvents.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
sl@39
   104
            this.listViewEvents.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
sl@40
   105
            this.columnHeaderUsage,
sl@40
   106
            this.columnHeaderUsagePage,
sl@42
   107
            this.columnHeaderUsageCollection,
sl@44
   108
            this.columnHeaderRepeat,
sl@44
   109
            this.columnHeaderTime});
sl@39
   110
            this.listViewEvents.GridLines = true;
sl@39
   111
            this.listViewEvents.Location = new System.Drawing.Point(12, 12);
sl@39
   112
            this.listViewEvents.Name = "listViewEvents";
sl@39
   113
            this.listViewEvents.Size = new System.Drawing.Size(582, 369);
sl@39
   114
            this.listViewEvents.TabIndex = 2;
sl@39
   115
            this.listViewEvents.UseCompatibleStateImageBehavior = false;
sl@39
   116
            this.listViewEvents.View = System.Windows.Forms.View.Details;
sl@39
   117
            // 
sl@40
   118
            // columnHeaderUsage
sl@39
   119
            // 
sl@40
   120
            this.columnHeaderUsage.Text = "Usage";
sl@40
   121
            this.columnHeaderUsage.Width = 180;
sl@40
   122
            // 
sl@40
   123
            // columnHeaderUsagePage
sl@40
   124
            // 
sl@40
   125
            this.columnHeaderUsagePage.Text = "Usage Page";
sl@40
   126
            this.columnHeaderUsagePage.Width = 120;
sl@40
   127
            // 
sl@40
   128
            // columnHeaderUsageCollection
sl@40
   129
            // 
sl@40
   130
            this.columnHeaderUsageCollection.Text = "Usage Collection";
sl@40
   131
            this.columnHeaderUsageCollection.Width = 120;
sl@39
   132
            // 
sl@42
   133
            // columnHeaderRepeat
sl@42
   134
            // 
sl@42
   135
            this.columnHeaderRepeat.Text = "Repeat";
sl@42
   136
            // 
sl@44
   137
            // columnHeaderTime
sl@44
   138
            // 
sl@44
   139
            this.columnHeaderTime.Text = "Time";
sl@44
   140
            this.columnHeaderTime.Width = 76;
sl@44
   141
            // 
sl@38
   142
            // MainForm
sl@38
   143
            // 
sl@38
   144
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
sl@38
   145
            this.BackColor = System.Drawing.SystemColors.Control;
sl@39
   146
            this.ClientSize = new System.Drawing.Size(926, 393);
sl@39
   147
            this.Controls.Add(this.listViewEvents);
sl@38
   148
            this.Controls.Add(this.labelDeviceName);
sl@38
   149
            this.Controls.Add(this.labelButtonName);
sl@38
   150
            this.Name = "MainForm";
sl@38
   151
            this.Text = "Remote Control Sample";
sl@38
   152
            this.Load += new System.EventHandler(this.Form1_Load);
sl@38
   153
            this.ResumeLayout(false);
sl@38
   154
            this.PerformLayout();
sl@0
   155
sl@0
   156
		}
sl@6
   157
		#endregion Windows Form Designer generated code
sl@0
   158
sl@0
   159
		/// <summary>
sl@0
   160
		/// The main entry point for the application.
sl@0
   161
		/// </summary>
sl@0
   162
		[STAThread]
sl@6
   163
		static void Main()
sl@0
   164
		{
sl@36
   165
			Application.Run(new MainForm());
sl@0
   166
		}
sl@0
   167
sl@0
   168
		private void Form1_Load(object sender, System.EventArgs e)
sl@0
   169
		{
sl@15
   170
            _remote = new RemoteControlDevice(this.Handle);
sl@15
   171
            _remote.ButtonPressed += new Devices.RemoteControl.RemoteControlDevice.RemoteControlDeviceEventHandler(_remote_ButtonPressed);
sl@41
   172
            _remote.iHidHandler.OnHidEvent += HandleHidEventThreadSafe;             
sl@0
   173
		}
sl@0
   174
sl@41
   175
        public void HandleHidEventThreadSafe(object aSender, Hid.HidEvent aHidEvent)
sl@40
   176
        {
sl@42
   177
            if (aHidEvent.IsStray)
sl@42
   178
            {
sl@42
   179
                //Stray event just ignore it
sl@42
   180
                return;
sl@42
   181
            }
sl@42
   182
sl@41
   183
            if (this.InvokeRequired)
sl@41
   184
            {
sl@41
   185
                //Not in the proper thread, invoke ourselves
sl@41
   186
                OnHidEventDelegate d = new OnHidEventDelegate(HandleHidEventThreadSafe);
sl@41
   187
                this.Invoke(d, new object[] { aSender, aHidEvent });
sl@41
   188
            }
sl@41
   189
            else
sl@41
   190
            {
sl@41
   191
                //We are in the proper thread
sl@42
   192
                listViewEvents.Items.Insert(0, aHidEvent.ToListViewItem());
sl@41
   193
            }
sl@40
   194
        }
sl@0
   195
sl@0
   196
		protected override void WndProc(ref Message message)
sl@0
   197
		{
sl@15
   198
            if (_remote != null)
sl@15
   199
            {
sl@15
   200
                _remote.ProcessMessage(message);
sl@15
   201
            }
sl@0
   202
			base.WndProc(ref message);
sl@0
   203
		}
sl@0
   204
sl@19
   205
		private bool _remote_ButtonPressed(object sender, RemoteControlEventArgs e)
sl@0
   206
		{
sl@41
   207
            //Set text from here was disabled because of threading issues
sl@41
   208
            //That whole thing should be removed anyway
sl@19
   209
            bool processed = false;
sl@0
   210
			_timer.Enabled = false;
sl@3
   211
            if (e.Button != RemoteControlButton.Unknown)
sl@3
   212
            {
sl@41
   213
                //labelButtonName.Text = e.Button.ToString();
sl@19
   214
                processed = true;
sl@3
   215
            }
sl@30
   216
            else if (e.MceButton != Hid.UsageTables.WindowsMediaCenterRemoteControl.Null)
sl@3
   217
            {
sl@5
   218
                //Display MCE button name
sl@41
   219
                //labelButtonName.Text = e.MceButton.ToString();
sl@5
   220
                //Check if this is an HP extension
sl@31
   221
                if (Enum.IsDefined(typeof(Hid.UsageTables.HpWindowsMediaCenterRemoteControl), (ushort)e.MceButton))
sl@5
   222
                {
sl@5
   223
                    //Also display HP button name
sl@41
   224
                    //labelButtonName.Text += " / HP:" + ((Hid.UsageTables.HpWindowsMediaCenterRemoteControl)e.MceButton).ToString();
sl@6
   225
                }
sl@19
   226
sl@40
   227
                processed = true;                
sl@19
   228
            }
sl@19
   229
            else if (e.ConsumerControl != Hid.UsageTables.ConsumerControl.Null)
sl@19
   230
            {
sl@19
   231
                //Display consumer control name
sl@41
   232
                //labelButtonName.Text = e.ConsumerControl.ToString();
sl@19
   233
                processed = true;
sl@3
   234
            }
sl@3
   235
            else
sl@3
   236
            {
sl@41
   237
                //labelButtonName.Text = "Unknown";
sl@3
   238
            }
sl@41
   239
			//labelDeviceName.Text = e.Device.ToString();
sl@0
   240
			_timer.Enabled = true;
sl@19
   241
            return processed;
sl@0
   242
		}
sl@0
   243
sl@0
   244
		private void _timer_Tick(object sender, EventArgs e)
sl@0
   245
		{
sl@0
   246
			_timer.Enabled = false;
sl@38
   247
			labelButtonName.Text = "Ready...";
sl@0
   248
		}
sl@38
   249
sl@0
   250
	}
sl@0
   251
}