+ if (Lib.CanPersistConfiguration())
+ {
+ Lib.GetCurrentConfiguration(Config);
+ ConfigurationChanged(Config);
+ }
+ else
+ {
+ ReloadXMLConfiguration();
+ }
+ }
+
+ private void cbVendorOverride_CheckedChanged(object sender, EventArgs e)
+ {
+ if (cbVendorOverride.Checked)
+ {
+ cbVendorId.Enabled = true;
+ switch (cbVendorId.Text)
+ {
+ case "LG":
+ Config.TvVendor = CecVendorId.LG;
+ break;
+ case "Onkyo":
+ Config.TvVendor = CecVendorId.Onkyo;
+ break;
+ case "Panasonic":
+ Config.TvVendor = CecVendorId.Panasonic;
+ break;
+ case "Philips":
+ Config.TvVendor = CecVendorId.Philips;
+ break;
+ case "Pioneer":
+ Config.TvVendor = CecVendorId.Pioneer;
+ break;
+ case "Samsung":
+ Config.TvVendor = CecVendorId.Samsung;
+ break;
+ case "Sony":
+ Config.TvVendor = CecVendorId.Sony;
+ break;
+ case "Yamaha":
+ Config.TvVendor = CecVendorId.Yamaha;
+ break;
+ default:
+ Config.TvVendor = CecVendorId.Unknown;
+ break;
+ }
+ }
+ else
+ {
+ cbVendorId.Enabled = false;
+ Config.TvVendor = CecVendorId.Unknown;
+ }
+ }
+
+ private void cbDeviceType_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ CecDeviceType type = SelectedDeviceType;
+ if (type != Config.DeviceTypes.Types[0])
+ {
+ Config.DeviceTypes.Types[0] = type;
+ if (!DeviceChangeWarningDisplayed)
+ {
+ DeviceChangeWarningDisplayed = true;
+ MessageBox.Show("You have changed the device type. Save the configuration, and restart the application to use the new setting.", "Pulse-Eight USB-CEC Adapter", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ }
+ }
+ }
+ #endregion
+
+ #region Key configuration tab
+ delegate void SelectKeypressRowCallback(CecKeypress key);
+ private void SelectKeypressRow(CecKeypress key)
+ {
+ if (dgButtons.InvokeRequired)
+ {
+ SelectKeypressRowCallback d = new SelectKeypressRowCallback(SelectKeypressRow);
+ try
+ {
+ this.Invoke(d, new object[] { key });
+ }
+ catch (Exception) { }
+ }
+ else
+ {
+ int rowIndex = -1;
+ foreach (DataGridViewRow row in dgButtons.Rows)
+ {
+ CecButtonConfigItem item = row.DataBoundItem as CecButtonConfigItem;
+ if (item != null && item.Key.Keycode == key.Keycode)
+ {
+ rowIndex = row.Index;
+ row.Selected = true;
+ item.Enabled = true;
+ }
+ else
+ {
+ row.Selected = false;
+ }
+ }
+ if (rowIndex > -1)
+ dgButtons.FirstDisplayedScrollingRowIndex = rowIndex;
+ }
+ }
+
+ private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
+ {
+ DataGridView grid = sender as DataGridView;
+ CecButtonConfigItem data = grid.Rows[e.RowIndex].DataBoundItem as CecButtonConfigItem;
+ if (data == null || !data.Enabled)
+ e.CellStyle.ForeColor = Color.Gray;
+ }
+ #endregion
+
+ #region CEC Tester tab
+ public void CheckActiveDevices()
+ {
+ CecLogicalAddresses activeDevices = Lib.GetActiveDevices();
+ List<string> deviceList = new List<string>();
+ foreach (CecLogicalAddress activeDevice in activeDevices.Addresses)
+ {
+ if (activeDevice != CecLogicalAddress.Unknown)
+ deviceList.Add(string.Format("{0,1:X} : {1}", (int)activeDevice, Lib.ToString(activeDevice)));
+ }
+ deviceList.Add(string.Format("{0,1:X} : {1}", (int)CecLogicalAddress.Broadcast, Lib.ToString(CecLogicalAddress.Broadcast)));
+
+ SetActiveDevices(deviceList.ToArray());
+ }
+
+ delegate void SetActiveDevicesCallback(string[] activeDevices);
+ private void SetActiveDevices(string[] activeDevices)
+ {
+ if (this.cbCommandDestination.InvokeRequired)
+ {
+ SetActiveDevicesCallback d = new SetActiveDevicesCallback(SetActiveDevices);
+ try
+ {
+ this.Invoke(d, new object[] { activeDevices });
+ }
+ catch (Exception) { }
+ }
+ else
+ {
+ this.cbCommandDestination.Items.Clear();
+ foreach (string item in activeDevices)
+ this.cbCommandDestination.Items.Add(item);
+ }
+ }
+
+ delegate CecLogicalAddress GetTargetDeviceCallback();
+ private CecLogicalAddress GetTargetDevice()
+ {
+ if (this.cbCommandDestination.InvokeRequired)
+ {
+ GetTargetDeviceCallback d = new GetTargetDeviceCallback(GetTargetDevice);
+ CecLogicalAddress retval = CecLogicalAddress.Unknown;
+ try
+ {
+ retval = (CecLogicalAddress)this.Invoke(d, new object[] { });
+ }
+ catch (Exception) { }
+ return retval;
+ }
+
+ return GetLogicalAddressFromString(this.cbCommandDestination.Text);
+ }
+
+ private CecLogicalAddress GetLogicalAddressFromString(string name)
+ {
+ switch (name.Substring(0, 1).ToLower())
+ {
+ case "0":
+ return CecLogicalAddress.Tv;
+ case "1":
+ return CecLogicalAddress.RecordingDevice1;
+ case "2":
+ return CecLogicalAddress.RecordingDevice2;
+ case "3":
+ return CecLogicalAddress.Tuner1;
+ case "4":
+ return CecLogicalAddress.PlaybackDevice1;
+ case "5":
+ return CecLogicalAddress.AudioSystem;
+ case "6":
+ return CecLogicalAddress.Tuner2;
+ case "7":
+ return CecLogicalAddress.Tuner3;
+ case "8":
+ return CecLogicalAddress.PlaybackDevice2;
+ case "9":
+ return CecLogicalAddress.RecordingDevice3;
+ case "a":
+ return CecLogicalAddress.Tuner4;
+ case "b":
+ return CecLogicalAddress.PlaybackDevice3;
+ case "c":
+ return CecLogicalAddress.Reserved1;
+ case "d":
+ return CecLogicalAddress.Reserved2;
+ case "e":
+ return CecLogicalAddress.FreeUse;
+ case "f":
+ return CecLogicalAddress.Broadcast;
+ default:
+ return CecLogicalAddress.Unknown;
+ }
+ }
+
+ private void bSendImageViewOn_Click(object sender, EventArgs e)
+ {
+ SendImageViewOn(GetTargetDevice());
+ }
+
+ private void bStandby_Click(object sender, EventArgs e)
+ {
+ SendStandby(GetTargetDevice());
+ }
+
+ private void bScan_Click(object sender, EventArgs e)
+ {
+ ShowDeviceInfo(GetTargetDevice());
+ }
+
+ private void bActivateSource_Click(object sender, EventArgs e)
+ {
+ ActivateSource(GetTargetDevice());
+ }
+
+ private void cbCommandDestination_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ bool enableVolumeButtons = (GetTargetDevice() == CecLogicalAddress.AudioSystem);
+ this.bVolUp.Enabled = enableVolumeButtons;
+ this.bVolDown.Enabled = enableVolumeButtons;
+ this.bMute.Enabled = enableVolumeButtons;
+ this.bActivateSource.Enabled = (GetTargetDevice() != CecLogicalAddress.Broadcast);
+ this.bScan.Enabled = (GetTargetDevice() != CecLogicalAddress.Broadcast);
+ }
+
+ private void bVolUp_Click(object sender, EventArgs e)
+ {
+ SetControlsEnabled(false);
+ Lib.VolumeUp(true);
+ SetControlsEnabled(true);
+ }
+
+ private void bVolDown_Click(object sender, EventArgs e)
+ {
+ SetControlsEnabled(false);
+ Lib.VolumeDown(true);
+ SetControlsEnabled(true);
+ }
+
+ private void bMute_Click(object sender, EventArgs e)
+ {
+ SetControlsEnabled(false);
+ Lib.MuteAudio(true);
+ SetControlsEnabled(true);
+ }
+
+ private void bRescanDevices_Click(object sender, EventArgs e)
+ {
+ if (!SuppressUpdates && ActiveProcess == null)