cec-config-gui: updated labels, added 'not implemented' warning for the button config...
[deb_libcec.git] / src / cec-config-gui / DeviceInformation.cs
index 9d9b983a158bd0ae3ead618754caa539029fb456..d340e4774f1805fed5c87bf1c9595827521e33bd 100644 (file)
@@ -11,21 +11,88 @@ namespace CecConfigGui
 {
   public partial class DeviceInformation : Form
   {
-    public DeviceInformation(CecLogicalAddress address, ref LibCecSharp lib,
+    public DeviceInformation(CecConfigGUI gui, CecLogicalAddress address, ref LibCecSharp lib,
       bool devicePresent, CecVendorId vendor, bool isActiveSource, ushort physicalAddress,
       CecVersion version, CecPowerStatus power, string osdName, string menuLanguage)
     {
+      Gui = gui;
+      Lib = lib;
+      Address = address;
       InitializeComponent();
       this.lDevice.Text = lib.ToString(address);
-      this.lLogicalAddress.Text = "#" + (int)address;
-      this.lPhysicalAddress.Text = physicalAddress.ToString();
+      this.lLogicalAddress.Text = String.Format("{0,1:X}", (int)address);
+      this.lPhysicalAddress.Text = String.Format("{0,4:X}", physicalAddress);
       this.lDevicePresent.Text = devicePresent ? "yes" : "no";
-      this.lActiveSource.Text = isActiveSource ? "yes" : "no";
-      this.lVendor.Text = lib.ToString(vendor) + " (" + (UInt64)vendor +")";
+      this.lActiveSource.Visible = isActiveSource;
+      this.lInactiveSource.Visible = !isActiveSource;
+      this.lVendor.Text = vendor != CecVendorId.Unknown ? lib.ToString(vendor) : "unknown";
       this.lCecVersion.Text = lib.ToString(version);
       this.lPowerStatus.Text = lib.ToString(power);
+      bool isPoweredOn = (power == CecPowerStatus.On || power == CecPowerStatus.InTransitionStandbyToOn);
       this.lOsdName.Text = osdName;
       this.lMenuLanguage.Text = menuLanguage;
+      this.Text = "Device: " + osdName;
     }
+
+    delegate void SetControlVisibleCallback(Control control, bool val);
+    private void SetControlVisible(Control control, bool val)
+    {
+      if (control.InvokeRequired)
+      {
+        SetControlVisibleCallback d = new SetControlVisibleCallback(SetControlVisible);
+        try
+        {
+          this.Invoke(d, new object[] { control, val });
+        }
+        catch (Exception) { }
+      }
+      else
+      {
+        control.Visible = val;
+      }
+    }
+
+    delegate void SetControlTextCallback(Control control, string val);
+    private void SetControlText(Control control, string val)
+    {
+      if (control.InvokeRequired)
+      {
+        SetControlTextCallback d = new SetControlTextCallback(SetControlText);
+        try
+        {
+          this.Invoke(d, new object[] { control, val });
+        }
+        catch (Exception) { }
+      }
+      else
+      {
+        control.Text = val;
+      }
+    }
+
+    private void lInactiveSource_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+    {
+      SetControlVisible(lInactiveSource, false);
+      SetControlVisible(lActiveSource, true);
+      Gui.ActivateSource(Address);
+    }
+
+
+    private void lStandby_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+    {
+      LinkLabel label = sender as LinkLabel;
+      bool sendPowerOn = label.Text != Lib.ToString(CecPowerStatus.InTransitionStandbyToOn) &&
+        label.Text != Lib.ToString(CecPowerStatus.On);
+
+      SetControlText(lPowerStatus, Lib.ToString(sendPowerOn ? CecPowerStatus.On : CecPowerStatus.Standby));
+      if (sendPowerOn)
+        Gui.SendImageViewOn(Address);
+      else
+        Gui.SendStandby(Address);
+    }
+
+    private CecLogicalAddress Address;
+    private CecConfigGUI Gui;
+    private LibCecSharp Lib;
   }
 }