Log In
New Account
  
Home My Page Project Cloud Code Snippets Project Openings Pierogi
Summary Forums Tracker Lists Tasks Docs News SCM Files
authorJohn Pietrzak <john@pietrzak.org>
Mon, 20 Feb 2012 00:26:18 +0000 (19:26 -0500)
committerJohn Pietrzak <john@pietrzak.org>
Mon, 20 Feb 2012 00:26:18 +0000 (19:26 -0500)
A huge improvement in memory usage, through the simple expedient of avoiding
keyset initialization until absolutely necessary.  Still a lot more work to
do on this front, but its a start.  Also, a fix for the Sky/Sky+ protocol,
and first pass at keysets for HP and Motorola.

133 files changed:
keysets/acer.cpp
keysets/acer.h
keysets/admiral.cpp
keysets/admiral.h
keysets/aiwa.cpp
keysets/aiwa.h
keysets/apple.cpp
keysets/apple.h
keysets/beko.cpp
keysets/beko.h
keysets/bose.cpp
keysets/bose.h
keysets/cambridge.cpp
keysets/cambridge.h
keysets/daewoo.cpp
keysets/daewoo.h
keysets/denon.cpp
keysets/denon.h
keysets/digitalstream.cpp
keysets/digitalstream.h
keysets/directv.cpp
keysets/directv.h
keysets/dish.cpp
keysets/dish.h
keysets/ei.cpp
keysets/ei.h
keysets/elgato.cpp
keysets/elgato.h
keysets/emerson.cpp
keysets/emerson.h
keysets/fortec.cpp
keysets/fortec.h
keysets/goldstar.cpp
keysets/goldstar.h
keysets/grundig.cpp
keysets/grundig.h
keysets/haier.cpp
keysets/haier.h
keysets/hauppauge.cpp
keysets/hauppauge.h
keysets/hitachi.cpp
keysets/hitachi.h
keysets/homecast.cpp
keysets/homecast.h
keysets/hp.cpp [new file with mode: 0644]
keysets/hp.h [new file with mode: 0644]
keysets/huawei.cpp
keysets/huawei.h
keysets/jvc.cpp
keysets/jvc.h
keysets/kenwood.cpp
keysets/kenwood.h
keysets/lg.cpp
keysets/lg.h
keysets/logitech.cpp
keysets/logitech.h
keysets/magnavox.cpp
keysets/magnavox.h
keysets/mce.cpp
keysets/mce.h
keysets/mitsubishi.cpp
keysets/mitsubishi.h
keysets/motorola.cpp [new file with mode: 0644]
keysets/motorola.h [new file with mode: 0644]
keysets/nokia.cpp
keysets/nokia.h
keysets/onida.cpp
keysets/onida.h
keysets/panasonic.cpp
keysets/panasonic.h
keysets/philco.cpp
keysets/philco.h
keysets/philips.cpp
keysets/philips.h
keysets/pinnacle.cpp
keysets/pinnacle.h
keysets/pioneer.cpp
keysets/pioneer.h
keysets/raite.cpp
keysets/raite.h
keysets/rca.cpp
keysets/rca.h
keysets/roku.cpp
keysets/roku.h
keysets/saba.cpp
keysets/saba.h
keysets/sagem.cpp
keysets/sagem.h
keysets/samsung.cpp
keysets/samsung.h
keysets/sanyo.cpp
keysets/sanyo.h
keysets/sharp.cpp
keysets/sharp.h
keysets/sky.cpp
keysets/sky.h
keysets/sony.cpp
keysets/sony.h
keysets/tivo.cpp
keysets/tivo.h
keysets/topfield.cpp
keysets/topfield.h
keysets/toshiba.cpp
keysets/toshiba.h
keysets/vestel.cpp
keysets/vestel.h
keysets/virgin.cpp
keysets/virgin.h
keysets/vizio.cpp
keysets/vizio.h
keysets/wd.cpp
keysets/wd.h
keysets/westinghouse.cpp
keysets/westinghouse.h
keysets/yamaha.cpp
keysets/yamaha.h
keysets/zenith.cpp
keysets/zenith.h
mainwindow.cpp
pierogi.pro
pierogi.pro.user
pirkeysetmanager.cpp
pirkeysetmanager.h
pirkeysetmetadata.cpp
pirkeysetmetadata.h
pirmakenames.cpp
pirmakenames.h
pirrx51hardware.cpp
protocols/giprotocol.cpp [new file with mode: 0644]
protocols/giprotocol.h [new file with mode: 0644]
protocols/rc6skyprotocol.cpp
qtc_packaging/debian_fremantle/changelog
qtc_packaging/debian_fremantle/control

index b471cd7..778bb61 100644 (file)
@@ -2,13 +2,23 @@
 #include "protocols/necprotocol.h"
 
 AcerTV1::AcerTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Acer_Make,
       index)
 {
+}
+
+void AcerTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x6361, 16);
@@ -74,7 +84,6 @@ AcerTV1::AcerTV1(
 
 
 AcerPC1::AcerPC1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "PC Keyset 1",
@@ -83,6 +92,17 @@ AcerPC1::AcerPC1(
 {
   addControlledDevice(Acer_Make, "Aspire 9500", Computer_Device);
   addControlledDevice(Acer_Make, "Aspire 9800", Computer_Device);
+}
+
+
+void AcerPC1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
index a2eb94e..3ea5691 100644 (file)
@@ -9,16 +9,20 @@ class AcerTV1: public PIRKeysetMetaData
 {
 public:
   AcerTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AcerPC1: public PIRKeysetMetaData
 {
 public:
   AcerPC1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // ACER_H
index 676b988..58c8d2c 100644 (file)
@@ -3,13 +3,24 @@
 #include "protocols/rc5protocol.h"
 
 AdmiralTV1::AdmiralTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Admiral_Make,
       index)
 {
+}
+
+
+void AdmiralTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new SharpProtocol(guiObject, index, true);
 
   addSharpKey("tv-1", One_Key, 0x01, 0x01);
@@ -37,15 +48,27 @@ AdmiralTV1::AdmiralTV1(
 }
 
 
-// The following is just a guess:
 AdmiralTV2::AdmiralTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 2",
       Admiral_Make,
       index)
 {
+}
+
+
+
+// The following is just a guess:
+void AdmiralTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("0", Zero_Key, 0x1000, 13);
@@ -97,13 +120,24 @@ AdmiralTV2::AdmiralTV2(
 
 
 AdmiralVCR1::AdmiralVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       Admiral_Make,
       index)
 {
+}
+
+
+void AdmiralVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new SharpProtocol(guiObject, index, true);
 
   addSharpKey("vcr-1", One_Key, 0x03, 0x01);
index f5721e0..8f28151 100644 (file)
@@ -9,24 +9,30 @@ class AdmiralTV1: public PIRKeysetMetaData
 {
 public:
   AdmiralTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AdmiralTV2: public PIRKeysetMetaData
 {
 public:
   AdmiralTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AdmiralVCR1: public PIRKeysetMetaData
 {
 public:
   AdmiralVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // ADMIRAL_H
index d6ca886..2d58566 100644 (file)
@@ -4,7 +4,6 @@
 #include "protocols/necprotocol.h"
 
 AiwaVCR1::AiwaVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
@@ -12,6 +11,17 @@ AiwaVCR1::AiwaVCR1(
       index)
 {
   addControlledDevice(Aiwa_Make, "HV-CX100KER", VCR_Device);
+}
+
+
+void AiwaVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
@@ -96,13 +106,24 @@ AiwaVCR1::AiwaVCR1(
 
 
 AiwaVCR2::AiwaVCR2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 2",
       Aiwa_Make,
       index)
 {
+}
+
+
+void AiwaVCR2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x6E, 8);
@@ -151,13 +172,24 @@ AiwaVCR2::AiwaVCR2(
 
 
 AiwaVCR3::AiwaVCR3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 3",
       Aiwa_Make,
       index)
 {
+}
+
+
+void AiwaVCR3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, false);
 
   setPreData(0x7B80, 16);
@@ -208,7 +240,6 @@ AiwaVCR3::AiwaVCR3(
 
 
 AiwaAudio1::AiwaAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
@@ -217,6 +248,17 @@ AiwaAudio1::AiwaAudio1(
 {
   addControlledDevice(Aiwa_Make, "LCX-100", Audio_Device);
   addControlledDevice(Aiwa_Make, "RC-TD3", Audio_Device);
+}
+
+
+void AiwaAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
@@ -276,16 +318,28 @@ AiwaAudio1::AiwaAudio1(
 }
 
 
-// Don't know why only the numbers are different for this one:
 AiwaAudio1a::AiwaAudio1a(
-  QObject *guiObject,
   unsigned int index)
-  : AiwaAudio1(guiObject, index)
+  : AiwaAudio1(index)
 {
   setKeysetName("Audio Keyset 1a");
 
   addControlledDevice(Aiwa_Make, "XR-M201", Audio_Device);
   addControlledDevice(Aiwa_Make, "CA-DW635", Audio_Device);
+}
+
+
+// Don't know why only the numbers are different for this one:
+void AiwaAudio1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  AiwaAudio1::populateProtocol(guiObject);
 
   addKey("1", One_Key, 0x01, 8);
   addKey("2", Two_Key, 0x02, 8);
@@ -304,7 +358,6 @@ AiwaAudio1a::AiwaAudio1a(
 
 
 AiwaAudio2::AiwaAudio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 2",
@@ -324,6 +377,17 @@ AiwaAudio2::AiwaAudio2(
   addControlledDevice(Aiwa_Make, "NSX-500", Audio_Device);
   addControlledDevice(Aiwa_Make, "NSX-540", Audio_Device);
   addControlledDevice(Aiwa_Make, "NSX-DR5", Audio_Device);
+}
+
+
+void AiwaAudio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
@@ -391,11 +455,23 @@ AiwaAudio2::AiwaAudio2(
 
 
 AiwaAudio2a::AiwaAudio2a(
-  QObject *guiObject,
   unsigned int index)
-  : AiwaAudio2(guiObject, index)
+  : AiwaAudio2(index)
 {
   setKeysetName("Audio Keyset 2a");
+}
+
+
+void AiwaAudio2a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  AiwaAudio2::populateProtocol(guiObject);
 
   addKey("Rec", Record_Key, 0x5F, 8);
   addKey("ChUp", ChannelUp_Key, 0x86, 8);
@@ -404,11 +480,23 @@ AiwaAudio2a::AiwaAudio2a(
 
 
 AiwaAudio2b::AiwaAudio2b(
-  QObject *guiObject,
   unsigned int index)
-  : AiwaAudio2(guiObject, index)
+  : AiwaAudio2(index)
 {
   setKeysetName("Audio Keyset 2b");
+}
+
+
+void AiwaAudio2b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  AiwaAudio2::populateProtocol(guiObject);
 
   addKey("UP", Up_Key, 0x40, 8);
   addKey("DOWN", Down_Key, 0x41, 8);
@@ -418,13 +506,25 @@ AiwaAudio2b::AiwaAudio2b(
 
 
 AiwaAudio2c::AiwaAudio2c(
-  QObject *guiObject,
   unsigned int index)
-  : AiwaAudio2(guiObject, index)
+  : AiwaAudio2(index)
 {
   setKeysetName("Audio Keyset 2c");
 
   addControlledDevice(Aiwa_Make, "XR-MD201", Audio_Device);
+}
+
+
+void AiwaAudio2c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  AiwaAudio2::populateProtocol(guiObject);
 
   addKey("display", Info_Key, 0x14, 8);
   addKey("rec", Record_Key, 0x71, 8);
@@ -437,13 +537,24 @@ AiwaAudio2c::AiwaAudio2c(
 
 // Might not be audio here:
 AiwaAudio3::AiwaAudio3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 3",
       Aiwa_Make,
       index)
 {
+}
+
+
+void AiwaAudio3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
   setPreData(0x007B, 13);
@@ -480,13 +591,24 @@ AiwaAudio3::AiwaAudio3(
 
 
 AiwaAudio4::AiwaAudio4(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 4",
       Aiwa_Make,
       index)
 {
+}
+
+
+void AiwaAudio4::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
   setPreData(0x00F6, 13);
@@ -538,13 +660,24 @@ AiwaAudio4::AiwaAudio4(
 
 
 AiwaAudio5::AiwaAudio5(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 5",
       Aiwa_Make,
       index)
 {
+}
+
+
+void AiwaAudio5::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
   setPreData(0x0076, 13);
@@ -574,7 +707,6 @@ AiwaAudio5::AiwaAudio5(
 
 
 AiwaAudio6::AiwaAudio6(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 6",
@@ -583,6 +715,17 @@ AiwaAudio6::AiwaAudio6(
 {
   addControlledDevice(Aiwa_Make, "CX-770", Audio_Device);
   addControlledDevice(Aiwa_Make, "Series 70", Audio_Device);
+}
+
+
+void AiwaAudio6::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
@@ -610,13 +753,24 @@ AiwaAudio6::AiwaAudio6(
 
 
 AiwaCarStereo1::AiwaCarStereo1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Car Stereo Keyset 1",
       Aiwa_Make,
       index)
 {
+}
+
+
+void AiwaCarStereo1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x1386, 16);
@@ -637,13 +791,24 @@ AiwaCarStereo1::AiwaCarStereo1(
 
 
 AiwaDVD1::AiwaDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       Aiwa_Make,
       index)
 {
+}
+
+
+void AiwaDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
index 0e6562a..fc6f38e 100644 (file)
@@ -9,120 +9,150 @@ class AiwaVCR1: public PIRKeysetMetaData
 {
 public:
   AiwaVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaVCR2: public PIRKeysetMetaData
 {
 public:
   AiwaVCR2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaVCR3: public PIRKeysetMetaData
 {
 public:
   AiwaVCR3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio1: public PIRKeysetMetaData
 {
 public:
   AiwaAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio1a: public AiwaAudio1
 {
 public:
   AiwaAudio1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio2: public PIRKeysetMetaData
 {
 public:
   AiwaAudio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio2a: public AiwaAudio2
 {
 public:
   AiwaAudio2a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio2b: public AiwaAudio2
 {
 public:
   AiwaAudio2b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio2c: public AiwaAudio2
 {
 public:
   AiwaAudio2c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio3: public PIRKeysetMetaData
 {
 public:
   AiwaAudio3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio4: public PIRKeysetMetaData
 {
 public:
   AiwaAudio4(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio5: public PIRKeysetMetaData
 {
 public:
   AiwaAudio5(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaAudio6: public PIRKeysetMetaData
 {
 public:
   AiwaAudio6(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaCarStereo1: public PIRKeysetMetaData
 {
 public:
   AiwaCarStereo1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class AiwaDVD1: public PIRKeysetMetaData
 {
 public:
   AiwaDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // AIWA_H
index e68c59c..1d3be72 100644 (file)
@@ -3,7 +3,6 @@
 
 // Based on LIRC Apple_A1156 config file
 AppleWhiteRemote::AppleWhiteRemote(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "White Remote",
@@ -11,6 +10,17 @@ AppleWhiteRemote::AppleWhiteRemote(
       index)
 {
   addControlledDevice(Apple_Make, "Mac Mini", Computer_Device);
+}
+
+
+void AppleWhiteRemote::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   // Set up the threadable object:
   LIRCProtocol *lp = new LIRCProtocol(
index 2d5cd93..3157220 100644 (file)
@@ -9,8 +9,10 @@ class AppleWhiteRemote: public PIRKeysetMetaData
 {
 public:
   AppleWhiteRemote(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // APPLE_H
index f70fc32..b415af4 100644 (file)
@@ -3,13 +3,24 @@
 
 
 BekoTV1::BekoTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Beko_Make,
       index)
 {
+}
+
+
+void BekoTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("MIX", TeletextAndTV_Key, 0x1004, 13);
index 839e30b..25c8e1e 100644 (file)
@@ -9,8 +9,10 @@ class BekoTV1: public PIRKeysetMetaData
 {
 public:
   BekoTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // BEKO_H
index f5db3cc..897ea73 100644 (file)
@@ -3,13 +3,24 @@
 #include "protocols/necprotocol.h"
 
 BoseRadio1::BoseRadio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Wave Radio Keyset 1",
       Bose_Make,
       index)
 {
+}
+
+
+void BoseRadio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new BoseProtocol(guiObject, index);
 
   addKey("Mute", Mute_Key, 0x01, 8);
@@ -47,13 +58,24 @@ BoseRadio1::BoseRadio1(
 
 
 BoseRadio2::BoseRadio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Wave Radio Keyset 2",
       Bose_Make,
       index)
 {
+}
+
+
+void BoseRadio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new BoseProtocol(guiObject, index);
 
   addKey("on/off", Power_Key, 0x00, 8);
@@ -81,13 +103,24 @@ BoseRadio2::BoseRadio2(
 
 
 BoseRadio3::BoseRadio3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Wave Radio Keyset 3",
       Bose_Make,
       index)
 {
+}
+
+
+void BoseRadio3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, false);
 
   setPreData(0xBA, 8);
@@ -117,13 +150,24 @@ BoseRadio3::BoseRadio3(
 
 
 BoseHomeTheater1::BoseHomeTheater1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Home Theater 1",
       Bose_Make,
       index)
 {
+}
+
+
+void BoseHomeTheater1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, false);
 
   setPreData(0x4BBA, 16);
index 345a523..ae3057f 100644 (file)
@@ -9,32 +9,40 @@ class BoseRadio1: public PIRKeysetMetaData
 {
 public:
   BoseRadio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class BoseRadio2: public PIRKeysetMetaData
 {
 public:
   BoseRadio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class BoseRadio3: public PIRKeysetMetaData
 {
 public:
   BoseRadio3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class BoseHomeTheater1: public PIRKeysetMetaData
 {
 public:
   BoseHomeTheater1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // BOSE_H
index 6bc9ea6..0462dd0 100644 (file)
@@ -5,13 +5,24 @@
 
 
 CambridgeCD1::CambridgeCD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "CD Keyset 1",
       Cambridge_Make,
       index)
 {
+}
+
+
+void CambridgeCD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x4D84, 16);
@@ -47,13 +58,24 @@ CambridgeCD1::CambridgeCD1(
 
 
 CambridgeAudio1::CambridgeAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
       Cambridge_Make,
       index)
 {
+}
+
+
+void CambridgeAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECXProtocol(guiObject, index, true);
 
   setPreData(0xA0A0, 16);
@@ -91,13 +113,24 @@ CambridgeAudio1::CambridgeAudio1(
 
 
 CambridgeAudio2::CambridgeAudio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 2",
       Cambridge_Make,
       index)
 {
+}
+
+
+void CambridgeAudio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECXProtocol(guiObject, index, true);
 
   setPreData(0xC0C0, 16);
@@ -146,13 +179,24 @@ CambridgeAudio2::CambridgeAudio2(
 
 
 CambridgeAudio3::CambridgeAudio3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 3",
       Cambridge_Make,
       index)
 {
+}
+
+
+void CambridgeAudio3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("Tape_Mon", TapeInput_Key, 0x1400, 13);
@@ -178,7 +222,6 @@ CambridgeAudio3::CambridgeAudio3(
 
 
 CambridgeDVD1::CambridgeDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -189,6 +232,17 @@ CambridgeDVD1::CambridgeDVD1(
   addControlledDevice(Cambridge_Make, "DVD55", DVD_Device);
   addControlledDevice(Cambridge_Make, "DVD57", DVD_Device);
   addControlledDevice(Cambridge_Make, "DVD59B", DVD_Device);
+}
+
+
+void CambridgeDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
index 9e7c800..e948520 100644 (file)
@@ -9,40 +9,50 @@ class CambridgeCD1: public PIRKeysetMetaData
 {
 public:
   CambridgeCD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class CambridgeAudio1: public PIRKeysetMetaData
 {
 public:
   CambridgeAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class CambridgeAudio2: public PIRKeysetMetaData
 {
 public:
   CambridgeAudio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class CambridgeAudio3: public PIRKeysetMetaData
 {
 public:
   CambridgeAudio3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class CambridgeDVD1: public PIRKeysetMetaData
 {
 public:
   CambridgeDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // CAMBRIDGE_H
index 3d8e955..ea3dbf4 100644 (file)
@@ -4,7 +4,6 @@
 #include "protocols/necprotocol.h"
 
 DaewooTV1::DaewooTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -12,6 +11,17 @@ DaewooTV1::DaewooTV1(
       index)
 {
   addControlledDevice(Daewoo_Make, "21T5T", TV_Device);
+}
+
+
+void DaewooTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -61,7 +71,6 @@ DaewooTV1::DaewooTV1(
 
 
 DaewooTV2::DaewooTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -69,6 +78,17 @@ DaewooTV2::DaewooTV2(
       index)
 {
   addControlledDevice(Daewoo_Make, "DMQ-2141", TV_Device);
+}
+
+
+void DaewooTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new DaewooProtocol(guiObject, index);
 
@@ -117,13 +137,24 @@ DaewooTV2::DaewooTV2(
 
 
 DaewooTV3::DaewooTV3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 3",
       Daewoo_Make,
       index)
 {
+}
+
+
+void DaewooTV3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x14, 8);
@@ -193,13 +224,24 @@ DaewooTV3::DaewooTV3(
 
 
 DaewooTV4::DaewooTV4(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 4",
       Daewoo_Make,
       index)
 {
+}
+
+
+void DaewooTV4::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x1004, 16);
@@ -245,13 +287,24 @@ DaewooTV4::DaewooTV4(
 
 
 DaewooDVD1::DaewooDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       Daewoo_Make,
       index)
 {
+}
+
+
+void DaewooDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new DaewooProtocol(guiObject, index);
 
   setPreData(0x15, 8);
@@ -305,7 +358,6 @@ DaewooDVD1::DaewooDVD1(
 
 
 DaewooVCR1::DaewooVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
@@ -313,6 +365,17 @@ DaewooVCR1::DaewooVCR1(
       index)
 {
   addControlledDevice(Daewoo_Make, "PV-200", VCR_Device);
+}
+
+
+void DaewooVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
@@ -358,7 +421,6 @@ DaewooVCR1::DaewooVCR1(
 
 
 DaewooVCR2::DaewooVCR2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 2",
@@ -366,6 +428,17 @@ DaewooVCR2::DaewooVCR2(
       index)
 {
   addControlledDevice(Daewoo_Make, "VQ857S", VCR_Device);
+}
+
+
+void DaewooVCR2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new DaewooProtocol(guiObject, index);
 
index a13adb1..7571663 100644 (file)
@@ -9,56 +9,70 @@ class DaewooTV1: public PIRKeysetMetaData
 {
 public:
   DaewooTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DaewooTV2: public PIRKeysetMetaData
 {
 public:
   DaewooTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DaewooTV3: public PIRKeysetMetaData
 {
 public:
   DaewooTV3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DaewooTV4: public PIRKeysetMetaData
 {
 public:
   DaewooTV4(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DaewooDVD1: public PIRKeysetMetaData
 {
 public:
   DaewooDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DaewooVCR1: public PIRKeysetMetaData
 {
 public:
   DaewooVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DaewooVCR2: public PIRKeysetMetaData
 {
 public:
   DaewooVCR2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // DAEWOO_H
index 4aaa0b5..006ee96 100644 (file)
@@ -6,7 +6,6 @@
 // This whole set of Denon keysets is a mess.  Need to clean it up!!!
 
 DenonDVD1::DenonDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -14,6 +13,17 @@ DenonDVD1::DenonDVD1(
       index)
 {
   addControlledDevice(Denon_Make, "DVD-1930", DVD_Device);
+}
+
+
+void DenonDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new SharpProtocol(guiObject, index, false);
 
@@ -68,7 +78,6 @@ DenonDVD1::DenonDVD1(
 
 
 DenonDVD2::DenonDVD2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 2",
@@ -76,6 +85,17 @@ DenonDVD2::DenonDVD2(
       index)
 {
   addControlledDevice(Denon_Make, "DVD-2500", DVD_Device);
+}
+
+
+void DenonDVD2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
@@ -134,7 +154,6 @@ DenonDVD2::DenonDVD2(
 
 
 DenonDVD3::DenonDVD3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 3",
@@ -142,6 +161,17 @@ DenonDVD3::DenonDVD3(
       index)
 {
   addControlledDevice(Denon_Make, "dvd-1000", DVD_Device);
+}
+
+
+void DenonDVD3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new SharpProtocol(guiObject, index, false);
 
@@ -189,7 +219,6 @@ DenonDVD3::DenonDVD3(
 
 
 DenonReceiver1::DenonReceiver1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Receiver Keyset 1",
@@ -197,6 +226,17 @@ DenonReceiver1::DenonReceiver1(
       index)
 {
   addControlledDevice(Denon_Make, "avr-1708", Audio_Device);
+}
+
+
+void DenonReceiver1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new SharpProtocol(guiObject, index, false);
 
@@ -261,13 +301,25 @@ DenonReceiver1::DenonReceiver1(
 
 
 DenonReceiver1a::DenonReceiver1a(
-  QObject *guiObject,
   unsigned int index)
-  : DenonReceiver1(guiObject, index)
+  : DenonReceiver1(index)
 {
   setKeysetName("Receiver Keyset 1a");
 
   addControlledDevice(Denon_Make, "AVR-1610", Audio_Device);
+}
+
+
+void DenonReceiver1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonReceiver1::populateProtocol(guiObject);
 
   addSharpKey("BTN_SKIP", Unmapped_Key, 0x0C, 0xCC);
   addSharpKey("BTN_PAUSE", Pause_Key, 0x0C, 0xCD);
@@ -283,13 +335,25 @@ DenonReceiver1a::DenonReceiver1a(
 
 
 DenonReceiver1b::DenonReceiver1b(
-  QObject *guiObject,
   unsigned int index)
-  : DenonReceiver1(guiObject, index)
+  : DenonReceiver1(index)
 {
   setKeysetName("Receiver Keyset 1b");
 
   addControlledDevice(Denon_Make, "avr-3300", Audio_Device);
+}
+
+
+void DenonReceiver1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonReceiver1::populateProtocol(guiObject);
 
   addSharpKey("setup", Menu_Key, 0x0C, 0x50);
   addSharpKey("params", Unmapped_Key, 0x0C, 0x51);
@@ -297,15 +361,27 @@ DenonReceiver1b::DenonReceiver1b(
 
 
 DenonReceiver1c::DenonReceiver1c(
-  QObject *guiObject,
   unsigned int index)
-  : DenonReceiver1(guiObject, index)
+  : DenonReceiver1(index)
 {
   setKeysetName("Receiver Keyset 1c");
 
   addControlledDevice(Denon_Make, "AVR-1602", Audio_Device);
   addControlledDevice(Denon_Make, "AVR-1802", Audio_Device);
   addControlledDevice(Denon_Make, "AVR-1803", Audio_Device);
+}
+
+
+void DenonReceiver1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonReceiver1::populateProtocol(guiObject);
 
   addSharpKey("ONE", One_Key, 0x02, 0xC3);
   addSharpKey("TWO", Two_Key, 0x02, 0xC4);
@@ -344,13 +420,25 @@ DenonReceiver1c::DenonReceiver1c(
 
 
 DenonReceiver1d::DenonReceiver1d(
-  QObject *guiObject,
   unsigned int index)
-  : DenonReceiver1c(guiObject, index)
+  : DenonReceiver1c(index)
 {
   setKeysetName("Receiver Keyset 1d");
 
   addControlledDevice(Denon_Make, "PMA-480R", Audio_Device);
+}
+
+
+void DenonReceiver1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonReceiver1c::populateProtocol(guiObject);
 
   addSharpKey("AMP_PHONO", PhonoInput_Key, 0x02, 0x81);
   addSharpKey("AMP_TUNER", TunerInput_Key, 0x02, 0x83);
@@ -374,13 +462,25 @@ DenonReceiver1d::DenonReceiver1d(
 
 
 DenonReceiver1e::DenonReceiver1e(
-  QObject *guiObject,
   unsigned int index)
-  : DenonReceiver1d(guiObject, index)
+  : DenonReceiver1d(index)
 {
   setKeysetName("Receiver Keyset 1e");
 
   addControlledDevice(Denon_Make, "DRA-385RD", Audio_Device);
+}
+
+
+void DenonReceiver1e::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonReceiver1d::populateProtocol(guiObject);
 
   addSharpKey("voldwn", VolumeDown_Key, 0x0C, 0x4C);
   addSharpKey("volup", VolumeUp_Key, 0x0C, 0x4D);
@@ -395,15 +495,28 @@ DenonReceiver1e::DenonReceiver1e(
   addSharpKey("tape2", Unmapped_Key, 0x0C, 0x5E);
 }
 
+
 DenonReceiver1f::DenonReceiver1f(
-  QObject *guiObject,
   unsigned int index)
-  : DenonReceiver1c(guiObject, index)
+  : DenonReceiver1c(index)
 {
   setKeysetName("Receiver Keyset 1f");
 
   addControlledDevice(Denon_Make, "AVR-700RD", Audio_Device);
   addControlledDevice(Denon_Make, "RC-841", Audio_Device);
+}
+
+
+void DenonReceiver1f::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonReceiver1c::populateProtocol(guiObject);
 
   addSharpKey("Power", Power_Key, 0x02, 0xC1);
 
@@ -416,13 +529,24 @@ DenonReceiver1f::DenonReceiver1f(
 
 
 DenonReceiver2::DenonReceiver2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Receiver Keyset 2",
       Denon_Make,
       index)
 {
+}
+
+
+void DenonReceiver2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new SharpProtocol(guiObject, index, false);
 
   addSharpKey("tun_1", One_Key, 0x13, 0x42);
@@ -468,13 +592,25 @@ DenonReceiver2::DenonReceiver2(
 
 
 DenonReceiver2a::DenonReceiver2a(
-  QObject *guiObject,
   unsigned int index)
-  : DenonReceiver2(guiObject, index)
+  : DenonReceiver2(index)
 {
   setKeysetName("Receiver Keyset 2a");
 
   addControlledDevice(Denon_Make, "PMA-425R", Audio_Device);
+}
+
+
+void DenonReceiver2a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonReceiver2::populateProtocol(guiObject);
 
   addSharpKey("AMP_TAPE2", Unmapped_Key, 0x1D, 0x9A);
   addSharpKey("AMP_TAPE1", TapeInput_Key, 0x1D, 0x99);
@@ -490,7 +626,6 @@ DenonReceiver2a::DenonReceiver2a(
 
 
 DenonReceiver3::DenonReceiver3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Receiver Keyset 3",
@@ -498,6 +633,17 @@ DenonReceiver3::DenonReceiver3(
       index)
 {
   addControlledDevice(Denon_Make, "AVR-600 RD", Audio_Device);
+}
+
+
+void DenonReceiver3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
@@ -535,7 +681,6 @@ DenonReceiver3::DenonReceiver3(
 
 
 DenonAudio1::DenonAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
@@ -547,6 +692,17 @@ DenonAudio1::DenonAudio1(
   addControlledDevice(Denon_Make, "DCD-335", Audio_Device);
   addControlledDevice(Denon_Make, "DRA-275RD", Audio_Device);
   addControlledDevice(Denon_Make, "UD-M30", Audio_Device);
+}
+
+
+void DenonAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new SharpProtocol(guiObject, index, false);
 
@@ -634,15 +790,27 @@ DenonAudio1::DenonAudio1(
 
 
 DenonAudio1a::DenonAudio1a(
-  QObject *guiObject,
   unsigned int index)
-  : DenonAudio1(guiObject, index)
+  : DenonAudio1(index)
 {
   setKeysetName("Audio Keyset 1a");
 
   addControlledDevice(Denon_Make, "UCD-F07", Audio_Device);
   addControlledDevice(Denon_Make, "UDR-F07", Audio_Device);
   addControlledDevice(Denon_Make, "UDRA-F07", Audio_Device);
+}
+
+
+void DenonAudio1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonAudio1::populateProtocol(guiObject);
 
   addSharpKey("rec", Record_Key, 0x04, 0x5F);
   addSharpKey("side_a/b", Unmapped_Key, 0x08, 0x53);
@@ -650,14 +818,26 @@ DenonAudio1a::DenonAudio1a(
 
 
 DenonAudio1b::DenonAudio1b(
-  QObject *guiObject,
   unsigned int index)
-  : DenonAudio1(guiObject, index)
+  : DenonAudio1(index)
 {
   setKeysetName("Audio Keyset 1b");
 
   addControlledDevice(Denon_Make, "DCD-1015", Audio_Device);
   addControlledDevice(Denon_Make, "DCD-655", Audio_Device);
+}
+
+
+void DenonAudio1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonAudio1::populateProtocol(guiObject);
 
   addSharpKey("vol_up", VolumeUp_Key, 0x08, 0x4E);
   addSharpKey("vol_down", VolumeDown_Key, 0x08, 0x4F);
@@ -666,22 +846,33 @@ DenonAudio1b::DenonAudio1b(
 
 
 DenonAudio1c::DenonAudio1c(
-  QObject *guiObject,
   unsigned int index)
-  : DenonAudio1b(guiObject, index)
+  : DenonAudio1b(index)
 {
   setKeysetName("Audio Keyset 1c");
 
   addControlledDevice(Denon_Make, "DCM-260", Audio_Device);
+}
+
+
+void DenonAudio1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonAudio1b::populateProtocol(guiObject);
 
   addSharpKey("DISC_SELECT", NextDisc_Key, 0x08, 0x62);
 }
 
 
 DenonAudio1d::DenonAudio1d(
-  QObject *guiObject,
   unsigned int index)
-  : DenonAudio1(guiObject, index)
+  : DenonAudio1(index)
 {
   setKeysetName("Audio Keyset 1d");
 
@@ -691,6 +882,19 @@ DenonAudio1d::DenonAudio1d(
   addControlledDevice(Denon_Make, "UDR-F88", Audio_Device);
   addControlledDevice(Denon_Make, "UTU-F88", Audio_Device);
   addControlledDevice(Denon_Make, "RC-846", Audio_Device);
+}
+
+
+void DenonAudio1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DenonAudio1::populateProtocol(guiObject);
 
   addSharpKey("TAPE_REC", Record_Key, 0x04, 0x5F);
 
@@ -703,7 +907,6 @@ DenonAudio1d::DenonAudio1d(
 
 
 DenonAudio2::DenonAudio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 2",
@@ -711,6 +914,17 @@ DenonAudio2::DenonAudio2(
       index)
 {
   addControlledDevice(Denon_Make, "D-C30", Audio_Device);
+}
+
+
+void DenonAudio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
@@ -757,7 +971,6 @@ DenonAudio2::DenonAudio2(
 
 
 DenonAudio3::DenonAudio3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 3",
@@ -765,6 +978,17 @@ DenonAudio3::DenonAudio3(
       index)
 {
   addControlledDevice(Denon_Make, "DMD-800", Audio_Device);
+}
+
+
+void DenonAudio3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new SharpProtocol(guiObject, index, false);
 
@@ -803,7 +1027,6 @@ DenonAudio3::DenonAudio3(
 
 
 DenonAudio4::DenonAudio4(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 4",
@@ -811,6 +1034,17 @@ DenonAudio4::DenonAudio4(
       index)
 {
   addControlledDevice(Denon_Make, "D-G1MD", Audio_Device);
+}
+
+
+void DenonAudio4::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
index ea7ea18..adac371 100644 (file)
@@ -9,168 +9,210 @@ class DenonDVD1: public PIRKeysetMetaData
 {
 public:
   DenonDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonDVD2: public PIRKeysetMetaData
 {
 public:
   DenonDVD2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonDVD3: public PIRKeysetMetaData
 {
 public:
   DenonDVD3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver1: public PIRKeysetMetaData
 {
 public:
   DenonReceiver1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver1a: public DenonReceiver1
 {
 public:
   DenonReceiver1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver1b: public DenonReceiver1
 {
 public:
   DenonReceiver1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver1c: public DenonReceiver1
 {
 public:
   DenonReceiver1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver1d: public DenonReceiver1c
 {
 public:
   DenonReceiver1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver1e: public DenonReceiver1d
 {
 public:
   DenonReceiver1e(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver1f: public DenonReceiver1c
 {
 public:
   DenonReceiver1f(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver2: public PIRKeysetMetaData
 {
 public:
   DenonReceiver2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver2a: public DenonReceiver2
 {
 public:
   DenonReceiver2a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonReceiver3: public PIRKeysetMetaData
 {
 public:
   DenonReceiver3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio1: public PIRKeysetMetaData
 {
 public:
   DenonAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio1a: public DenonAudio1
 {
 public:
   DenonAudio1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio1b: public DenonAudio1
 {
 public:
   DenonAudio1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio1c: public DenonAudio1b
 {
 public:
   DenonAudio1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio1d: public DenonAudio1
 {
 public:
   DenonAudio1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio2: public PIRKeysetMetaData
 {
 public:
   DenonAudio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio3: public PIRKeysetMetaData
 {
 public:
   DenonAudio3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DenonAudio4: public PIRKeysetMetaData
 {
 public:
   DenonAudio4(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // DENON_H
index a873770..9769bc2 100644 (file)
@@ -3,13 +3,24 @@
 
 
 DigitalStreamReceiver::DigitalStreamReceiver(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Receiver Keyset 1",
       DigitalStream_Make,
       index)
 {
+}
+
+
+void DigitalStreamReceiver::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x482C, 16);
index d836c7b..2de6487 100644 (file)
@@ -9,8 +9,10 @@ class DigitalStreamReceiver: public PIRKeysetMetaData
 {
 public:
   DigitalStreamReceiver(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // DIGITALSTREAM_H
index 355dc52..5cf0a92 100644 (file)
@@ -4,13 +4,24 @@
 
 // Note: volume keys are tricky!
 DirectvReceiver1::DirectvReceiver1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 1",
       Directv_Make,
       index)
 {
+}
+
+
+void DirectvReceiver1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new DirectvProtocol(guiObject, index, LowFreq, true);
 
   setPreData(0xC, 4);
index 8e2a20d..e06c92c 100644 (file)
@@ -9,8 +9,10 @@ class DirectvReceiver1: public PIRKeysetMetaData
 {
 public:
   DirectvReceiver1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // DIRECTV_H
index 690ee12..223b611 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/dishprotocol.h"
 
 DishReceiver1::DishReceiver1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 1",
       Dish_Make,
       index)
 {
+}
+
+
+void DishReceiver1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new DishProtocol(guiObject, index);
 
   setPreData(0x00, 5);
@@ -85,150 +96,345 @@ DishReceiver1::DishReceiver1(
 
 
 DishReceiver1a::DishReceiver1a(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 2");
+}
+
+
+void DishReceiver1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x01, 5);
 }
 
 
 DishReceiver1b::DishReceiver1b(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 3");
+}
+
+
+void DishReceiver1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x02, 5);
 }
 
 
 DishReceiver1c::DishReceiver1c(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 4");
+}
+
+
+void DishReceiver1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x03, 5);
 }
 
 
 DishReceiver1d::DishReceiver1d(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 5");
+}
+
+
+void DishReceiver1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x04, 5);
 }
 
 
 DishReceiver1e::DishReceiver1e(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 6");
+}
+
+
+void DishReceiver1e::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x05, 5);
 }
 
 
 DishReceiver1f::DishReceiver1f(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 7");
+}
+
+
+void DishReceiver1f::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x06, 5);
 }
 
 
 DishReceiver1g::DishReceiver1g(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 8");
+}
+
+
+void DishReceiver1g::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x07, 5);
 }
 
 
 DishReceiver1h::DishReceiver1h(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 9");
+}
+
+
+void DishReceiver1h::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x08, 5);
 }
 
 
 DishReceiver1i::DishReceiver1i(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 10");
+}
+
+
+void DishReceiver1i::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x09, 5);
 }
 
 
 DishReceiver1j::DishReceiver1j(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 11");
+}
+
+
+void DishReceiver1j::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x0A, 5);
 }
 
 
 DishReceiver1k::DishReceiver1k(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 12");
+}
+
+
+void DishReceiver1k::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x0B, 5);
 }
 
 
 DishReceiver1l::DishReceiver1l(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 13");
+}
+
+
+void DishReceiver1l::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x0C, 5);
 }
 
 
 DishReceiver1m::DishReceiver1m(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 14");
+}
+
+
+void DishReceiver1m::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x0D, 5);
 }
 
 
 DishReceiver1n::DishReceiver1n(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 15");
+}
+
+
+void DishReceiver1n::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x0E, 5);
 }
 
 
 DishReceiver1o::DishReceiver1o(
-  QObject *guiObject,
   unsigned int index)
-  : DishReceiver1(guiObject, index)
+  : DishReceiver1(index)
 {
   setKeysetName("Sat Keyset 1 mode 16");
+}
+
+
+void DishReceiver1o::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  DishReceiver1::populateProtocol(guiObject);
+
   setPreData(0x0F, 5);
 }
index a78f569..e0c9949 100644 (file)
@@ -9,128 +9,160 @@ class DishReceiver1: public PIRKeysetMetaData
 {
 public:
   DishReceiver1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1a: public DishReceiver1
 {
 public:
   DishReceiver1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1b: public DishReceiver1
 {
 public:
   DishReceiver1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1c: public DishReceiver1
 {
 public:
   DishReceiver1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1d: public DishReceiver1
 {
 public:
   DishReceiver1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1e: public DishReceiver1
 {
 public:
   DishReceiver1e(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1f: public DishReceiver1
 {
 public:
   DishReceiver1f(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1g: public DishReceiver1
 {
 public:
   DishReceiver1g(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1h: public DishReceiver1
 {
 public:
   DishReceiver1h(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1i: public DishReceiver1
 {
 public:
   DishReceiver1i(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1j: public DishReceiver1
 {
 public:
   DishReceiver1j(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1k: public DishReceiver1
 {
 public:
   DishReceiver1k(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1l: public DishReceiver1
 {
 public:
   DishReceiver1l(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1m: public DishReceiver1
 {
 public:
   DishReceiver1m(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1n: public DishReceiver1
 {
 public:
   DishReceiver1n(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class DishReceiver1o: public DishReceiver1
 {
 public:
   DishReceiver1o(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // DISH_H
index 1fe7955..35e12d9 100644 (file)
@@ -3,7 +3,6 @@
 
 // Based on LIRC Ei-TV90 config file
 EiTV1::EiTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -15,6 +14,17 @@ EiTV1::EiTV1(
   addControlledDevice(Ei_Make, "COLOR 63105", TV_Device);
   addControlledDevice(Ei_Make, "COLOR 56105", TV_Device);
   addControlledDevice(Ei_Make, "COLOR 72105", TV_Device);
+}
+
+
+void EiTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index, 0x40);
 
index 55703ed..d407f81 100644 (file)
@@ -9,8 +9,10 @@ class EiTV1: public PIRKeysetMetaData
 {
 public:
   EiTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // EI_H
index 484cb58..b482415 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/necprotocol.h"
 
 ElgatoEyeTV1::ElgatoEyeTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "EyeTV Keyset 1",
       Elgato_Make,
       index)
 {
+}
+
+
+void ElgatoEyeTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x45, 8);
index 5a48fbd..5d2c064 100644 (file)
@@ -9,8 +9,10 @@ class ElgatoEyeTV1: public PIRKeysetMetaData
 {
 public:
   ElgatoEyeTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // ELGATO_H
index 010a616..7bc4268 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/necprotocol.h"
 
 EmersonTV1::EmersonTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Emerson_Make,
       index)
 {
+}
+
+
+void EmersonTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, false);
 
   setPreData(0x0586, 16);
@@ -44,13 +55,24 @@ EmersonTV1::EmersonTV1(
 
 
 EmersonDVD1::EmersonDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       Emerson_Make,
       index)
 {
+}
+
+
+void EmersonDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x2287, 16);
index 179032b..c0be67f 100644 (file)
@@ -9,16 +9,20 @@ class EmersonTV1: public PIRKeysetMetaData
 {
 public:
   EmersonTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class EmersonDVD1: public PIRKeysetMetaData
 {
 public:
   EmersonDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // EMERSON_H
index eb10324..f082cfe 100644 (file)
@@ -3,13 +3,24 @@
 
 
 FortecReceiver1::FortecReceiver1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 1",
       Fortec_Make,
       index)
 {
+}
+
+
+void FortecReceiver1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x20, 8);
@@ -51,13 +62,24 @@ FortecReceiver1::FortecReceiver1(
 
 
 FortecReceiver2::FortecReceiver2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 2",
       Fortec_Make,
       index)
 {
+}
+
+
+void FortecReceiver2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0xFD01, 8);
index f316922..3040637 100644 (file)
@@ -9,16 +9,20 @@ class FortecReceiver1: public PIRKeysetMetaData
 {
 public:
   FortecReceiver1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class FortecReceiver2: public PIRKeysetMetaData
 {
 public:
   FortecReceiver2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // FORTEC_H
index b09cc71..e9fbbf0 100644 (file)
@@ -4,7 +4,6 @@
 #include "protocols/lircprotocol.h"
 
 GoldStarTV1::GoldStarTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "105-210A TV",
@@ -12,6 +11,17 @@ GoldStarTV1::GoldStarTV1(
       index)
 {
   addControlledDevice(GoldStar_Make, "105-210A", TV_Device);
+}
+
+
+void GoldStarTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
@@ -51,13 +61,24 @@ GoldStarTV1::GoldStarTV1(
 
 
 GoldStarTV2::GoldStarTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 2",
       GoldStar_Make,
       index)
 {
+}
+
+
+void GoldStarTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index, 0x40);
 
   addKey("0", Zero_Key, 0x00, 6);
@@ -101,7 +122,6 @@ GoldStarTV2::GoldStarTV2(
 
 
 GoldStarVCR1::GoldStarVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
@@ -110,6 +130,17 @@ GoldStarVCR1::GoldStarVCR1(
 {
   addControlledDevice(GoldStar_Make, "GSE-Q204P", VCR_Device);
   addControlledDevice(GoldStar_Make, "QUISY 500", VCR_Device);
+}
+
+
+void GoldStarVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
@@ -166,33 +197,69 @@ GoldStarVCR1::GoldStarVCR1(
 
 
 GoldStarVCR1a::GoldStarVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : GoldStarVCR1(guiObject, index)
+  : GoldStarVCR1(index)
 {
   setKeysetName("VCR Keyset 1a");
+}
+
+
+void GoldStarVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  GoldStarVCR1::populateProtocol(guiObject);
 
   addKey("TU_AV", Input_Key, 0x56, 16);
 }
 
 
 GoldStarVCR1b::GoldStarVCR1b(
-  QObject *guiObject,
   unsigned int index)
-  : GoldStarVCR1(guiObject, index)
+  : GoldStarVCR1(index)
 {
   setKeysetName("VCR Keyset 1b");
+}
+
+
+void GoldStarVCR1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  GoldStarVCR1::populateProtocol(guiObject);
 
   addKey("BACK", Exit_Key, 0x4C, 8);
 }
 
 
 GoldStarVCR1c::GoldStarVCR1c(
-  QObject *guiObject,
   unsigned int index)
-  : GoldStarVCR1(guiObject, index)
+  : GoldStarVCR1(index)
 {
   setKeysetName("VCR Keyset 1c");
+}
+
+
+void GoldStarVCR1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  GoldStarVCR1::populateProtocol(guiObject);
 
   addKey("trk-", TrackingMinus_Key, 0xED, 8);
   addKey("trk+", TrackingPlus_Key, 0xEE, 8);
@@ -201,9 +268,7 @@ GoldStarVCR1c::GoldStarVCR1c(
 }
 
 
-// Based on LIRC 6710S-6000A config file
 GoldStarCD1::GoldStarCD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
@@ -211,6 +276,19 @@ GoldStarCD1::GoldStarCD1(
       index)
 {
   addControlledDevice(GoldStar_Make, "FFH-272A/L", Audio_Device);
+}
+
+
+
+// Based on LIRC 6710S-6000A config file
+void GoldStarCD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
index e694f28..6809724 100644 (file)
@@ -9,8 +9,10 @@ class GoldStarTV1: public PIRKeysetMetaData
 {
 public:
   GoldStarTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -18,8 +20,10 @@ class GoldStarTV2: public PIRKeysetMetaData
 {
 public:
   GoldStarTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -27,8 +31,10 @@ class GoldStarVCR1: public PIRKeysetMetaData
 {
 public:
   GoldStarVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -36,8 +42,10 @@ class GoldStarVCR1a: public GoldStarVCR1
 {
 public:
   GoldStarVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -45,8 +53,10 @@ class GoldStarVCR1b: public GoldStarVCR1
 {
 public:
   GoldStarVCR1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -54,8 +64,10 @@ class GoldStarVCR1c: public GoldStarVCR1
 {
 public:
   GoldStarVCR1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -63,8 +75,10 @@ class GoldStarCD1: public PIRKeysetMetaData
 {
 public:
   GoldStarCD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // GOLDSTAR_H
index d883272..13352ea 100644 (file)
@@ -5,13 +5,24 @@
 
 // This one is iffy, might be another brand:
 GrundigSat1::GrundigSat1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Satellite Keyset 1",
       Grundig_Make,
       index)
 {
+}
+
+
+void GrundigSat1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("Mute", Mute_Key, 0x0286, 13);
@@ -49,7 +60,6 @@ GrundigSat1::GrundigSat1(
 
 
 GrundigSat2::GrundigSat2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Satellite Keyset 2",
@@ -57,6 +67,17 @@ GrundigSat2::GrundigSat2(
       index)
 {
   addControlledDevice(Grundig_Make, "STR 7100", Sat_Device);
+}
+
+
+void GrundigSat2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -96,7 +117,6 @@ GrundigSat2::GrundigSat2(
 
 
 GrundigAmp1::GrundigAmp1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Amp Keyset 1",
@@ -104,6 +124,17 @@ GrundigAmp1::GrundigAmp1(
       index)
 {
   addControlledDevice(Grundig_Make, "FineArts Amplifier V1", Audio_Device);
+}
+
+
+void GrundigAmp1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -159,7 +190,6 @@ GrundigAmp1::GrundigAmp1(
 
 
 GrundigAudio1::GrundigAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio(CD) Keyset 1",
@@ -167,6 +197,17 @@ GrundigAudio1::GrundigAudio1(
       index)
 {
   addControlledDevice(Grundig_Make, "CD 8400", Audio_Device);
+}
+
+
+void GrundigAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -201,7 +242,6 @@ GrundigAudio1::GrundigAudio1(
 
 
 GrundigAudio2::GrundigAudio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 2",
@@ -210,6 +250,17 @@ GrundigAudio2::GrundigAudio2(
 {
   addControlledDevice(Grundig_Make, "CDM 700", Audio_Device);
   addControlledDevice(Grundig_Make, "UMS-9V", Audio_Device);
+}
+
+
+void GrundigAudio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECXProtocol(guiObject, index, true);
 
@@ -254,7 +305,6 @@ GrundigAudio2::GrundigAudio2(
 
 
 GrundigVCR1::GrundigVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
@@ -262,6 +312,17 @@ GrundigVCR1::GrundigVCR1(
       index)
 {
   addControlledDevice(Grundig_Make, "GV 437", VCR_Device);
+}
+
+
+void GrundigVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -305,11 +366,23 @@ GrundigVCR1::GrundigVCR1(
 
 
 GrundigVCR1a::GrundigVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : GrundigVCR1(guiObject, index)
+  : GrundigVCR1(index)
 {
   setKeysetName("VCR Keyset 1a");
+}
+
+
+void GrundigVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  GrundigVCR1::populateProtocol(guiObject);
 
   addKey("INDEX", Unmapped_Key, 0x0170, 13);
   addKey("PAUSE", Pause_Key, 0x1169, 13);
@@ -317,7 +390,6 @@ GrundigVCR1a::GrundigVCR1a(
 
 
 GrundigTV1::GrundigTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -325,6 +397,17 @@ GrundigTV1::GrundigTV1(
       index)
 {
   addControlledDevice(Grundig_Make, "ST 55-908", TV_Device);
+}
+
+
+void GrundigTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -366,13 +449,24 @@ GrundigTV1::GrundigTV1(
 
 
 GrundigTV2::GrundigTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 2",
       Grundig_Make,
       index)
 {
+}
+
+
+void GrundigTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("P+", ChannelUp_Key, 0x0010, 13);
@@ -420,13 +514,24 @@ GrundigTV2::GrundigTV2(
 
 
 GrundigTV3::GrundigTV3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV/VDR Keyset 3",
       Grundig_Make,
       index)
 {
+}
+
+
+void GrundigTV3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("USR4", Unmapped_Key, 0x0205, 13);
@@ -477,7 +582,6 @@ GrundigTV3::GrundigTV3(
 
 
 GrundigDVD1::GrundigDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -485,6 +589,17 @@ GrundigDVD1::GrundigDVD1(
       index)
 {
   addControlledDevice(Grundig_Make, "GDV 130", DVD_Device);
+}
+
+
+void GrundigDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
index 67e6a74..2b4bb4e 100644 (file)
@@ -9,88 +9,110 @@ class GrundigSat1: public PIRKeysetMetaData
 {
 public:
   GrundigSat1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigSat2: public PIRKeysetMetaData
 {
 public:
   GrundigSat2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigAmp1: public PIRKeysetMetaData
 {
 public:
   GrundigAmp1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigAudio1: public PIRKeysetMetaData
 {
 public:
   GrundigAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigAudio2: public PIRKeysetMetaData
 {
 public:
   GrundigAudio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigVCR1: public PIRKeysetMetaData
 {
 public:
   GrundigVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigVCR1a: public GrundigVCR1
 {
 public:
   GrundigVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigTV1: public PIRKeysetMetaData
 {
 public:
   GrundigTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigTV2: public PIRKeysetMetaData
 {
 public:
   GrundigTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigTV3: public PIRKeysetMetaData
 {
 public:
   GrundigTV3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class GrundigDVD1: public PIRKeysetMetaData
 {
 public:
   GrundigDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // GRUNDIG_H
index df14f06..250342f 100644 (file)
@@ -2,7 +2,6 @@
 #include "protocols/aiwaprotocol.h"
 
 HaierTV1::HaierTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -10,6 +9,17 @@ HaierTV1::HaierTV1(
       index)
 {
   addControlledDevice(Haier_Make, "TN201AUV", TV_Device);
+}
+
+
+void HaierTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new AiwaProtocol(guiObject, index);
 
index c0ae1ea..ff8ddf9 100644 (file)
@@ -9,8 +9,10 @@ class HaierTV1: public PIRKeysetMetaData
 {
 public:
   HaierTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // HAIER_H
index 25921a4..f98dbe0 100644 (file)
@@ -2,7 +2,6 @@
 #include "protocols/rc5protocol.h"
 
 HauppaugePCTV1::HauppaugePCTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "PCTV Keyset 1",
@@ -10,6 +9,18 @@ HauppaugePCTV1::HauppaugePCTV1(
       index)
 {
   addControlledDevice(Hauppauge_Make, "PVR 350", Computer_Device);
+}
+
+
+void HauppaugePCTV1::populateProtocol(
+  QObject *guiObject)
+{
+
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index, 0x5E);
 
@@ -63,26 +74,50 @@ HauppaugePCTV1::HauppaugePCTV1(
 
 
 HauppaugePCTV1a::HauppaugePCTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : HauppaugePCTV1(guiObject, index)
+  : HauppaugePCTV1(index)
 {
   setKeysetName("PCTV Keyset 1a");
 
   addControlledDevice(Hauppauge_Make, "WinTV-HVR-950Q", Computer_Device);
+}
+
+
+void HauppaugePCTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  HauppaugePCTV1::populateProtocol(guiObject);
 
   setPreData(0x5D, 7);
 }
 
 
 HauppaugePCTV1b::HauppaugePCTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : HauppaugePCTV1(guiObject, index)
+  : HauppaugePCTV1(index)
 {
   setKeysetName("PCTV Keyset 1b");
 
   addControlledDevice(Hauppauge_Make, "MVP", Computer_Device);
+}
+
+
+void HauppaugePCTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  HauppaugePCTV1::populateProtocol(guiObject);
 
   setPreData(0x43, 7);
 
@@ -92,14 +127,26 @@ HauppaugePCTV1b::HauppaugePCTV1b(
 
 
 HauppaugePCTV1c::HauppaugePCTV1c(
-  QObject *guiObject,
   unsigned int index)
-  : HauppaugePCTV1(guiObject, index)
+  : HauppaugePCTV1(index)
 {
   setKeysetName("PCTV Keyset 1c");
 
   addControlledDevice(Hauppauge_Make, "PVR 250", Computer_Device);
 //  addControlledDevice(Hauppauge_Make, "PVR 350", Computer_Device);
+}
+
+
+void HauppaugePCTV1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  HauppaugePCTV1::populateProtocol(guiObject);
 
   setPreData(0x5F, 7);
 
@@ -108,9 +155,7 @@ HauppaugePCTV1c::HauppaugePCTV1c(
 }
 
 
-// Based on LIRC Sony_RM-V302-DVD010 config file
 HauppaugePCTV2::HauppaugePCTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "PCTV Keyset 2",
@@ -118,6 +163,18 @@ HauppaugePCTV2::HauppaugePCTV2(
       index)
 {
   addControlledDevice(Hauppauge_Make, "PVR-250", Computer_Device);
+}
+
+
+// Based on LIRC Sony_RM-V302-DVD010 config file
+void HauppaugePCTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
index 7b74e28..5229d9f 100644 (file)
@@ -9,40 +9,50 @@ class HauppaugePCTV1: public PIRKeysetMetaData
 {
 public:
   HauppaugePCTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HauppaugePCTV1a: public HauppaugePCTV1
 {
 public:
   HauppaugePCTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HauppaugePCTV1b: public HauppaugePCTV1
 {
 public:
   HauppaugePCTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HauppaugePCTV1c: public HauppaugePCTV1
 {
 public:
   HauppaugePCTV1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HauppaugePCTV2: public PIRKeysetMetaData
 {
 public:
   HauppaugePCTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // HAUPPAUGE_H
index 2330c84..d1321e1 100644 (file)
@@ -3,13 +3,24 @@
 
 
 HitachiTV1::HitachiTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Hitachi_Make,
       index)
 {
+}
+
+
+void HitachiTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
 //  setPreData(0x0AF5, 16);
@@ -72,21 +83,45 @@ HitachiTV1::HitachiTV1(
 
 
 HitachiTV1a::HitachiTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : HitachiTV1(guiObject, index)
+  : HitachiTV1(index)
 {
   setKeysetName("TV Keyset 1a");
+}
+
+
+void HitachiTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  HitachiTV1::populateProtocol(guiObject);
 
   addKey("menu", Menu_Key, 0x53, 8);
 }
 
 HitachiTV1b::HitachiTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : HitachiTV1a(guiObject, index)
+  : HitachiTV1a(index)
 {
   setKeysetName("TV Keyset 1b");
+}
+
+
+void HitachiTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  HitachiTV1a::populateProtocol(guiObject);
 
   addKey("Sound+", VolumeUp_Key, 0x72, 8);
   addKey("Sound-", VolumeDown_Key, 0x73, 8);
@@ -95,13 +130,25 @@ HitachiTV1b::HitachiTV1b(
 
 
 HitachiTV1c::HitachiTV1c(
-  QObject *guiObject,
   unsigned int index)
-  : HitachiTV1(guiObject, index)
+  : HitachiTV1(index)
 {
   setKeysetName("TV Keyset 1c");
 
   addControlledDevice(Hitachi_Make, "57F510", TV_Device);
+}
+
+
+void HitachiTV1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  HitachiTV1::populateProtocol(guiObject);
 
   addKey("LastChannel", PrevChannel_Key, 0x0A, 8);
   addKey("Info", Info_Key, 0x10, 8);
@@ -150,13 +197,24 @@ HitachiTV1c::HitachiTV1c(
 
 // Taken from Hitachi 42HDM12.rmdu, a plasma HDMI monitor without a tuner
 HitachiTV2::HitachiTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV (monitor) Keyset 2",
       Hitachi_Make,
       index)
 {
+}
+
+
+void HitachiTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x50, 8); // This might be wrong...
@@ -191,13 +249,18 @@ HitachiTV2::HitachiTV2(
 
 // See: http://www.hitachi-america.us/supportingdocs/forhome/ubcg/remote_ir_codes/2009_RC_Layouts_and_IR_Codes_L19_L26.pdf
 HitachiTV3::HitachiTV3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 3",
       Hitachi_Make,
       index)
 {
+}
+
+
+void HitachiTV3::populateProtocol(
+  QObject *guiObject)
+{
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
 //  setPreData(0x0AF5, 16);
@@ -274,13 +337,24 @@ HitachiTV3::HitachiTV3(
 
 
 HitachiProjector::HitachiProjector(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Projector Keyset",
       Hitachi_Make,
       index)
 {
+}
+
+
+void HitachiProjector::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
 //  setPreData(0xE1A2, 16);
@@ -316,13 +390,24 @@ HitachiProjector::HitachiProjector(
 
 
 HitachiDVD1::HitachiDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       Hitachi_Make,
       index)
 {
+}
+
+
+void HitachiDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
 //  setPreData(0x01C4, 16);
@@ -373,7 +458,6 @@ HitachiDVD1::HitachiDVD1(
 
 
 HitachiAudio1::HitachiAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
@@ -382,6 +466,17 @@ HitachiAudio1::HitachiAudio1(
 {
   addControlledDevice(Hitachi_Make, "FX-7", Audio_Device);
   addControlledDevice(Hitachi_Make, "FX-77", Audio_Device);
+}
+
+
+void HitachiAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
@@ -421,13 +516,24 @@ HitachiAudio1::HitachiAudio1(
 
 
 HitachiVCR1::HitachiVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       Hitachi_Make,
       index)
 {
+}
+
+
+void HitachiVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
 //  setPreData(0x06F9, 16);
index bbc6e5f..e7831f4 100644 (file)
@@ -9,80 +9,100 @@ class HitachiTV1: public PIRKeysetMetaData
 {
 public:
   HitachiTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiTV1a: public HitachiTV1
 {
 public:
   HitachiTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiTV1b: public HitachiTV1a
 {
 public:
   HitachiTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiTV1c: public HitachiTV1
 {
 public:
   HitachiTV1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiTV2: public PIRKeysetMetaData
 {
 public:
   HitachiTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiTV3: public PIRKeysetMetaData
 {
 public:
   HitachiTV3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiProjector: public PIRKeysetMetaData
 {
 public:
   HitachiProjector(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiDVD1: public PIRKeysetMetaData
 {
 public:
   HitachiDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiAudio1: public PIRKeysetMetaData
 {
 public:
   HitachiAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HitachiVCR1: public PIRKeysetMetaData
 {
 public:
   HitachiVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // HITACHI_H
index 423e7c4..e6be8bb 100644 (file)
@@ -3,13 +3,24 @@
 
 
 HomecastReceiver1::HomecastReceiver1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 1",
       Homecast_Make,
       index)
 {
+}
+
+
+void HomecastReceiver1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x2020, 16);
@@ -52,13 +63,24 @@ HomecastReceiver1::HomecastReceiver1(
 
 
 HomecastReceiver2::HomecastReceiver2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVB-T Keyset 1",
       Homecast_Make,
       index)
 {
+}
+
+
+void HomecastReceiver2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x4040, 16);
index a8e36f7..90f88ee 100644 (file)
@@ -9,16 +9,20 @@ class HomecastReceiver1: public PIRKeysetMetaData
 {
 public:
   HomecastReceiver1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HomecastReceiver2: public PIRKeysetMetaData
 {
 public:
   HomecastReceiver2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // HOMECAST_H
diff --git a/keysets/hp.cpp b/keysets/hp.cpp
new file mode 100644 (file)
index 0000000..cfa598f
--- /dev/null
@@ -0,0 +1,55 @@
+#include "hp.h"
+#include "protocols/mceprotocol.h"
+
+
+HPRemote1::HPRemote1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Remote Keyset 1",
+      HP_Make,
+      index)
+{
+}
+
+
+void HPRemote1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new MCEProtocol(guiObject, index, 0x8011);
+
+  setPreData(0x04, 7);
+
+  addKey("KEY_POWER", Power_Key, 0x0C, 8);
+  addKey("KEY_MEDIA", Unmapped_Key, 0x0D, 8);
+  addKey("KEY_MUTE", Mute_Key, 0x0E, 8);
+  addKey("KEY_INFO", Info_Key, 0x0F, 8);
+
+  addKey("KEY_VOLUMEUP", VolumeUp_Key, 0x10, 8);
+  addKey("KEY_VOLUMEDOWN", VolumeDown_Key, 0x11, 8);
+  addKey("KEY_PAGEUP", PageUp_Key, 0x12, 8);
+  addKey("KEY_PAGEDOWN", PageDown_Key, 0x13, 8);
+  addKey("KEY_FASTFORWARD", FastForward_Key, 0x14, 8);
+  addKey("KEY_REWIND", Rewind_Key, 0x15, 8);
+  addKey("KEY_PLAYPAUSE", Play_Key, 0x16, 8);
+  addKey("KEY_PLAYPAUSE", Pause_Key, 0x16, 8);
+  addKey("KEY_STOP", Stop_Key, 0x19, 8);
+  addKey("KEY_NEXTSONG", Next_Key, 0x1A, 8);
+  addKey("KEY_PREVIOUSSONG", Previous_Key, 0x1B, 8);
+  addKey("KEY_UP", Up_Key, 0x1E, 8);
+  addKey("KEY_DOWN", Down_Key, 0x1F, 8);
+
+  addKey("KEY_LEFT", Left_Key, 0x20, 8);
+  addKey("KEY_RIGHT", Right_Key, 0x21, 8);
+  addKey("KEY_OK", Select_Key, 0x22, 8);
+  addKey("KEY_ENTER", Enter_Key, 0x23, 8);
+  addKey("KEY_DVD", DiscMenu_Key, 0x24, 8);
+
+  addKey("KEY_REPEAT", Repeat_Key, 0x4A, 8);
+  addKey("KEY_SWITCHVIDEOMODE", Input_Key, 0x4F, 8);
+}
diff --git a/keysets/hp.h b/keysets/hp.h
new file mode 100644 (file)
index 0000000..94ed006
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef HP_H
+#define HP_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class HPRemote1: public PIRKeysetMetaData
+{
+public:
+  HPRemote1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // HP_H
index ad433ac..d5dabef 100644 (file)
@@ -4,7 +4,6 @@
 
 
 HuaweiSTB1::HuaweiSTB1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "STB Keyset 1",
@@ -12,6 +11,17 @@ HuaweiSTB1::HuaweiSTB1(
       index)
 {
   addControlledDevice(Huawei_Make, "EX2108", Other_Device);
+}
+
+
+void HuaweiSTB1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECXProtocol(guiObject, index, false);
 
@@ -56,7 +66,6 @@ HuaweiSTB1::HuaweiSTB1(
 
 
 HuaweiSTB2::HuaweiSTB2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "STB Keyset 2",
@@ -64,6 +73,17 @@ HuaweiSTB2::HuaweiSTB2(
       index)
 {
   addControlledDevice(Huawei_Make, "EC2108", Other_Device);
+}
+
+
+void HuaweiSTB2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
index 8c67c6c..fd3605a 100644 (file)
@@ -9,16 +9,20 @@ class HuaweiSTB1: public PIRKeysetMetaData
 {
 public:
   HuaweiSTB1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class HuaweiSTB2: public PIRKeysetMetaData
 {
 public:
   HuaweiSTB2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // HUAWEI_H
index f34ed93..47c047e 100644 (file)
@@ -3,13 +3,24 @@
 #include "protocols/lircprotocol.h"
 
 JVCSat1::JVCSat1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat (Dish) Keyset 1",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCSat1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
    guiObject,
    index,
@@ -70,13 +81,24 @@ JVCSat1::JVCSat1(
 
 
 JVCSat2::JVCSat2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat (Dish) Keyset 2",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCSat2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
@@ -136,13 +158,24 @@ JVCSat2::JVCSat2(
 
 
 JVCVCR1::JVCVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
 //  setPreData(0xC2, 8);
@@ -228,11 +261,23 @@ JVCVCR1::JVCVCR1(
 
 
 JVCVCR1a::JVCVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : JVCVCR1(guiObject, index)
+  : JVCVCR1(index)
 {
   setKeysetName("VCR Keyset 1a");
+}
+
+
+void JVCVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCVCR1::populateProtocol(guiObject);
 
   addKey("red", Red_Key, 0x07, 8);
   addKey("green", Green_Key, 0x51, 8);
@@ -246,35 +291,70 @@ JVCVCR1a::JVCVCR1a(
 
 // Setup keysets for use in B-mode:
 JVCVCRBmode1::JVCVCRBmode1(
-  QObject *guiObject,
   unsigned int index)
-  : JVCVCR1(guiObject, index)
+  : JVCVCR1(index)
 {
   setKeysetName("VCR (B Mode) keyset 1");
+}
+
+
+void JVCVCRBmode1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCVCR1::populateProtocol(guiObject);
 
   setPreData(0x53, 8);
 }
 
 
 JVCVCRBmode1a::JVCVCRBmode1a(
-  QObject *guiObject,
   unsigned int index)
-  : JVCVCR1a(guiObject, index)
+  : JVCVCR1a(index)
 {
   setKeysetName("VCR (B Mode) keyset 1a");
+}
+
+
+void JVCVCRBmode1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCVCR1a::populateProtocol(guiObject);
 
   setPreData(0x53, 8);
 }
 
 
 JVCTV1::JVCTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
   setPreData(0x03, 8);
@@ -355,33 +435,69 @@ JVCTV1::JVCTV1(
 
 
 JVCTV1a::JVCTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : JVCTV1(guiObject, index)
+  : JVCTV1(index)
 {
   setKeysetName("TV Keyset 1a");
+}
+
+
+void JVCTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCTV1::populateProtocol(guiObject);
 
   addKey("+10", DoubleDigit_Key, 0x71, 8);
 }
 
 
 JVCTV1b::JVCTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : JVCTV1(guiObject, index)
+  : JVCTV1(index)
 {
   setKeysetName("TV Keyset 1b");
+}
+
+
+void JVCTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCTV1::populateProtocol(guiObject);
 
   addKey("sleep_timer", Sleep_Key, 0x03, 8);
 }
 
 
 JVCTV1c::JVCTV1c(
-  QObject *guiObject,
   unsigned int index)
-  : JVCTV1(guiObject, index)
+  : JVCTV1(index)
 {
   setKeysetName("TV Keyset 1c");
+}
+
+
+void JVCTV1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCTV1::populateProtocol(guiObject);
 
   addKey("STOP", Stop_Key, 0x00, 8);
   addKey("REC", Record_Key, 0x04, 8);
@@ -394,11 +510,23 @@ JVCTV1c::JVCTV1c(
 
 // TVs where "volume" and "channel" keys are used to navigate menus:
 JVCTV1d::JVCTV1d(
-  QObject *guiObject,
   unsigned int index)
-  : JVCTV1(guiObject, index)
+  : JVCTV1(index)
 {
   setKeysetName("TV Keyset 1d");
+}
+
+
+void JVCTV1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCTV1::populateProtocol(guiObject);
 
   addKey("down", Down_Key, 0x18, 8);
   addKey("up", Up_Key, 0x19, 8);
@@ -408,13 +536,24 @@ JVCTV1d::JVCTV1d(
 
 
 JVCDAT1::JVCDAT1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DAT Keyset 1",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCDAT1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
 //  setPreData(0xC9, 8);
@@ -455,13 +594,24 @@ JVCDAT1::JVCDAT1(
 
 
 JVCCarDeck1::JVCCarDeck1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Car Deck Keyset 1",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCCarDeck1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
 //  setPreData(0xF1, 8);
@@ -488,13 +638,24 @@ JVCCarDeck1::JVCCarDeck1(
 // together, they might as well all be a single command anyway...
 
 JVCAudio1::JVCAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
   addKey("SLEEP", Sleep_Key, 0x03A3, 16);
@@ -549,11 +710,23 @@ JVCAudio1::JVCAudio1(
 
 
 JVCAudio1a::JVCAudio1a(
-  QObject *guiObject,
   unsigned int index)
-  : JVCAudio1(guiObject, index)
+  : JVCAudio1(index)
 {
   setKeysetName("Audio Keyset 1a");
+}
+
+
+void JVCAudio1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCAudio1::populateProtocol(guiObject);
 
   addKey("CD-PLAY-PAUSE", Play_Key, 0x3DA3, 16);
   addKey("MD-PLAY-PAUSE", Unmapped_Key, 0x30AF, 16);
@@ -561,11 +734,23 @@ JVCAudio1a::JVCAudio1a(
 
 
 JVCAudio1b::JVCAudio1b(
-  QObject *guiObject,
   unsigned int index)
-  : JVCAudio1(guiObject, index)
+  : JVCAudio1(index)
 {
   setKeysetName("Audio Keyset 1b");
+}
+
+
+void JVCAudio1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  JVCAudio1::populateProtocol(guiObject);
 
   addKey("VCR", VCRInput_Key, 0x2443, 16);
 
@@ -623,13 +808,24 @@ JVCAudio1b::JVCAudio1b(
 
 
 JVCAudio2::JVCAudio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 2",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCAudio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
 //  setPreData(0xF9, 8);
@@ -714,13 +910,24 @@ JVCAudio2::JVCAudio2(
 
 
 JVCDVD1::JVCDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       JVC_Make,
       index)
 {
+}
+
+
+void JVCDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
 //  setPreData(0xF7, 8);
index df08fe9..92553a4 100644 (file)
@@ -9,144 +9,180 @@ class JVCSat1: public PIRKeysetMetaData
 {
 public:
   JVCSat1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCSat2: public PIRKeysetMetaData
 {
 public:
   JVCSat2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCVCR1: public PIRKeysetMetaData
 {
 public:
   JVCVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCVCR1a: public JVCVCR1
 {
 public:
   JVCVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCVCRBmode1: public JVCVCR1
 {
 public:
   JVCVCRBmode1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCVCRBmode1a: public JVCVCR1a
 {
 public:
   JVCVCRBmode1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCTV1: public PIRKeysetMetaData
 {
 public:
   JVCTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCTV1a: public JVCTV1
 {
 public:
   JVCTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCTV1b: public JVCTV1
 {
 public:
   JVCTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCTV1c: public JVCTV1
 {
 public:
   JVCTV1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCTV1d: public JVCTV1
 {
 public:
   JVCTV1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCDAT1: public PIRKeysetMetaData
 {
 public:
   JVCDAT1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCCarDeck1: public PIRKeysetMetaData
 {
 public:
   JVCCarDeck1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCAudio1: public PIRKeysetMetaData
 {
 public:
   JVCAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCAudio1a: public JVCAudio1
 {
 public:
   JVCAudio1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCAudio1b: public JVCAudio1
 {
 public:
   JVCAudio1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCAudio2: public PIRKeysetMetaData
 {
 public:
   JVCAudio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class JVCDVD1: public PIRKeysetMetaData
 {
 public:
   JVCDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // JVC_H
index 96653b0..0756fba 100644 (file)
@@ -3,13 +3,24 @@
 
 
 KenwoodAudio1::KenwoodAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
       Kenwood_Make,
       index)
 {
+}
+
+
+void KenwoodAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0xB8, 8);
@@ -108,13 +119,24 @@ KenwoodAudio2::KenwoodAudio2(
 
 
 KenwoodComponent1::KenwoodComponent1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Component Keyset 1",
       Kenwood_Make,
       index)
 {
+}
+
+
+void KenwoodComponent1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x00B8, 16);
@@ -196,13 +218,24 @@ KenwoodComponent1::KenwoodComponent1(
 
 
 KenwoodComponent2::KenwoodComponent2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Component Keyset 2",
       Kenwood_Make,
       index)
 {
+}
+
+
+void KenwoodComponent2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x01B8, 16);
@@ -245,13 +278,24 @@ KenwoodComponent2::KenwoodComponent2(
 
 
 KenwoodComponent3::KenwoodComponent3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Component Keyset 3",
       Kenwood_Make,
       index)
 {
+}
+
+
+void KenwoodComponent3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x02B8, 16);
@@ -322,13 +366,24 @@ KenwoodAudio5::KenwoodAudio5(
 
 
 KenwoodCD1::KenwoodCD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "CD Keyset 1",
       Kenwood_Make,
       index)
 {
+}
+
+
+void KenwoodCD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0xB6, 8);
@@ -405,7 +460,6 @@ KenwoodCD1::KenwoodCD1(
 
 
 KenwoodDVD1::KenwoodDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -413,6 +467,17 @@ KenwoodDVD1::KenwoodDVD1(
       index)
 {
   addControlledDevice(Kenwood_Make, "DVF-9010", Audio_Device);
+}
+
+
+void KenwoodDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
@@ -472,13 +537,24 @@ KenwoodDVD1::KenwoodDVD1(
 
 
 KenwoodTV1::KenwoodTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Kenwood_Make,
       index)
 {
+}
+
+
+void KenwoodTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x04, 8);
index 32a5907..21c5f95 100644 (file)
@@ -9,56 +9,70 @@ class KenwoodAudio1: public PIRKeysetMetaData
 {
 public:
   KenwoodAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class KenwoodComponent1: public PIRKeysetMetaData
 {
 public:
   KenwoodComponent1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class KenwoodComponent2: public PIRKeysetMetaData
 {
 public:
   KenwoodComponent2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class KenwoodComponent3: public PIRKeysetMetaData
 {
 public:
   KenwoodComponent3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class KenwoodCD1: public PIRKeysetMetaData
 {
 public:
   KenwoodCD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class KenwoodDVD1: public PIRKeysetMetaData
 {
 public:
   KenwoodDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class KenwoodTV1: public PIRKeysetMetaData
 {
 public:
   KenwoodTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // KENWOOD_H
index 8133e06..e8aaa42 100644 (file)
@@ -4,7 +4,6 @@
 #include "protocols/rc5protocol.h"
 
 LGTV1::LGTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -12,6 +11,17 @@ LGTV1::LGTV1(
       index)
 {
   addControlledDevice(LG_Make, "32LH301C", TV_Device);
+}
+
+
+void LGTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
@@ -117,11 +127,23 @@ LGTV1::LGTV1(
 
 
 LGTV1a::LGTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : LGTV1(guiObject, index)
+  : LGTV1(index)
 {
   setKeysetName("TV Keyset 1a");
+}
+
+
+void LGTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGTV1::populateProtocol(guiObject);
 
   addKey("*", Unmapped_Key, 0x39, 8);
   addKey("exit", Exit_Key, 0x5B, 8);
@@ -138,11 +160,23 @@ LGTV1a::LGTV1a(
 
 
 LGTV1b::LGTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : LGTV1(guiObject, index)
+  : LGTV1(index)
 {
   setKeysetName("TV Keyset 1b");
+}
+
+
+void LGTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGTV1::populateProtocol(guiObject);
 
   addKey("PR+/Up_Arrow", Up_Key, 0x00, 8);
   addKey("PR-/Down_Arrow", Down_Key, 0x01, 8);
@@ -156,15 +190,27 @@ LGTV1b::LGTV1b(
 
 
 LGTV1c::LGTV1c(
-  QObject *guiObject,
   unsigned int index)
-  : LGTV1(guiObject, index)
+  : LGTV1(index)
 {
   setKeysetName("TV Keyset 1c");
 
   addControlledDevice(LG_Make, "60px950", TV_Device);
   addControlledDevice(LG_Make, "60pg60", TV_Device);
   addControlledDevice(LG_Make, "55lw9500", TV_Device);
+}
+
+
+void LGTV1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGTV1::populateProtocol(guiObject);
 
 //  addKey("Mark", Unmapped_Key, 0x1E, 8); // This is probably an error
 //  addKey("3DOption", Unmapped_Key, 0x45, 8); // also probably error
@@ -185,13 +231,24 @@ LGTV1c::LGTV1c(
 
 
 LGTV2::LGTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 2",
       LG_Make,
       index)
 {
+}
+
+
+void LGTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index, 0x40);
 
   addKey("0", Zero_Key, 0x00, 6);
@@ -241,11 +298,23 @@ LGTV2::LGTV2(
 
 
 LGTV2a::LGTV2a(
-  QObject *guiObject,
   unsigned int index)
-  : LGTV2(guiObject, index)
+  : LGTV2(index)
 {
   setKeysetName("TV Keyset 2a");
+}
+
+
+void LGTV2a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGTV2::populateProtocol(guiObject);
 
   addKey("KEY_YELLOW", Yellow_Key, 0x32, 6);
   addKey("KEY_BLUE", Blue_Key, 0x34, 6);
@@ -255,11 +324,23 @@ LGTV2a::LGTV2a(
 
 
 LGTV2b::LGTV2b(
-  QObject *guiObject,
   unsigned int index)
-  : LGTV2(guiObject, index)
+  : LGTV2(index)
 {
   setKeysetName("TV Keyset 2b");
+}
+
+
+void LGTV2b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGTV2::populateProtocol(guiObject);
 
   addKey("sleep", Sleep_Key, 0x26, 6); // might need separate class
   addKey("Q.VIEW", Unmapped_Key, 0x32, 6);
@@ -270,13 +351,24 @@ LGTV2b::LGTV2b(
 
 
 LGDisc1::LGDisc1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD/BD Keyset 1",
       LG_Make,
       index)
 {
+}
+
+
+void LGDisc1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECXProtocol(guiObject, index, true);
 
 //  setPreData(0x3434, 16);
@@ -346,13 +438,24 @@ LGDisc1::LGDisc1(
 
 
 LGDisc2::LGDisc2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD/BD Keyset 2",
       LG_Make,
       index)
 {
+}
+
+
+void LGDisc2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECXProtocol(guiObject, index, true);
 
 //  setPreData(0xB4B4, 16);
@@ -408,11 +511,23 @@ LGDisc2::LGDisc2(
 
 
 LGDisc2a::LGDisc2a(
-  QObject *guiObject,
   unsigned int index)
-  : LGDisc2(guiObject, index)
+  : LGDisc2(index)
 {
   setKeysetName("DVD/BD Keyset 2a");
+}
+
+
+void LGDisc2a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGDisc2::populateProtocol(guiObject);
 
   addKey("KEY_HOME", Menu_Key, 0x67, 8);
   addKey("KEY_CLEAR", Clear_Key, 0x7C, 8);
@@ -424,13 +539,24 @@ LGDisc2a::LGDisc2a(
 
 
 LGVCR1::LGVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       LG_Make,
       index)
 {
+}
+
+
+void LGVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
 //  setPreData(0x7689, 16);
@@ -489,22 +615,46 @@ LGVCR1::LGVCR1(
 
 
 LGVCR1a::LGVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : LGVCR1(guiObject, index)
+  : LGVCR1(index)
 {
   setKeysetName("VCR Keyset 1a");
+}
+
+
+void LGVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGVCR1::populateProtocol(guiObject);
 
   addKey("power", Power_Key, 0x7D, 8);
 }
 
 
 LGVCR1b::LGVCR1b(
-  QObject *guiObject,
   unsigned int index)
-  : LGVCR1(guiObject, index)
+  : LGVCR1(index)
 {
   setKeysetName("VCR Keyset 1b");
+}
+
+
+void LGVCR1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  LGVCR1::populateProtocol(guiObject);
 
   addKey("menu-up", Up_Key, 0x82, 8);
   addKey("menu-left", Left_Key, 0x83, 8);
@@ -515,13 +665,24 @@ LGVCR1b::LGVCR1b(
 
 
 LGAC1::LGAC1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Air Conditioner 1",
       LG_Make,
       index)
 {
+}
+
+
+void LGAC1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x6681, 16);
index c35ba87..5fd1096 100644 (file)
@@ -9,112 +9,140 @@ class LGTV1: public PIRKeysetMetaData
 {
 public:
   LGTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGTV1a: public LGTV1
 {
 public:
   LGTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGTV1b: public LGTV1
 {
 public:
   LGTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGTV1c: public LGTV1
 {
 public:
   LGTV1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGTV2: public PIRKeysetMetaData
 {
 public:
   LGTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGTV2a: public LGTV2
 {
 public:
   LGTV2a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGTV2b: public LGTV2
 {
 public:
   LGTV2b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGDisc1: public PIRKeysetMetaData
 {
 public:
   LGDisc1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGDisc2: public PIRKeysetMetaData
 {
 public:
   LGDisc2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGDisc2a: public LGDisc2
 {
 public:
   LGDisc2a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGVCR1: public PIRKeysetMetaData
 {
 public:
   LGVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGVCR1a: public LGVCR1
 {
 public:
   LGVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGVCR1b: public LGVCR1
 {
 public:
   LGVCR1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class LGAC1: public PIRKeysetMetaData
 {
 public:
   LGAC1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // LG_H
index 0ac7f37..6f20278 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/necprotocol.h"
 
 LogitechSpeakers::LogitechSpeakers(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Digital Speakers Keyset",
       Logitech_Make,
       index)
 {
+}
+
+
+void LogitechSpeakers::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x08, 8);
index 58edd00..f5e010f 100644 (file)
@@ -9,8 +9,10 @@ class LogitechSpeakers: public PIRKeysetMetaData
 {
 public:
   LogitechSpeakers(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // LOGITECH_H
index 444419d..ce4e36a 100644 (file)
@@ -4,7 +4,6 @@
 #include "protocols/lircprotocol.h"
 
 MagnavoxDVD1::MagnavoxDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -12,6 +11,17 @@ MagnavoxDVD1::MagnavoxDVD1(
       index)
 {
   addControlledDevice(Magnavox_Make, "MDV450", DVD_Device);
+}
+
+
+void MagnavoxDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x04);
 
@@ -52,13 +62,24 @@ MagnavoxDVD1::MagnavoxDVD1(
 
 
 MagnavoxVCR1::MagnavoxVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       Magnavox_Make,
       index)
 {
+}
+
+
+void MagnavoxVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("Power", Power_Key, 0x114C, 13);
@@ -121,7 +142,6 @@ MagnavoxVCR1::MagnavoxVCR1(
 
 
 MagnavoxConverterBox1::MagnavoxConverterBox1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Settop Box Keyset 1",
@@ -129,6 +149,17 @@ MagnavoxConverterBox1::MagnavoxConverterBox1(
       index)
 {
   addControlledDevice(Magnavox_Make, "TB100MG9", Other_Device);
+}
+
+
+void MagnavoxConverterBox1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
@@ -172,13 +203,24 @@ MagnavoxConverterBox1::MagnavoxConverterBox1(
 
 
 MagnavoxTV1::MagnavoxTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV(?) Keyset 1",
       Magnavox_Make,
       index)
 {
+}
+
+
+void MagnavoxTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index, 0x40);
 
   addKey("Zero", Zero_Key, 0x00, 6);
index b2f8ba9..b46024c 100644 (file)
@@ -9,32 +9,40 @@ class MagnavoxDVD1: public PIRKeysetMetaData
 {
 public:
   MagnavoxDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MagnavoxVCR1: public PIRKeysetMetaData
 {
 public:
   MagnavoxVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MagnavoxConverterBox1: public PIRKeysetMetaData
 {
 public:
   MagnavoxConverterBox1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MagnavoxTV1: public PIRKeysetMetaData
 {
 public:
   MagnavoxTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // MAGNAVOX_H
index 68ea81a..460d650 100644 (file)
@@ -2,7 +2,6 @@
 #include "protocols/mceprotocol.h"
 
 MCERemote1::MCERemote1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Remote mode 1",
@@ -10,6 +9,17 @@ MCERemote1::MCERemote1(
       index)
 {
   addControlledDevice(Any_Make, "ASRock HT330", Computer_Device);
+}
+
+
+void MCERemote1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new MCEProtocol(guiObject, index, 0x800F);
 
@@ -91,77 +101,161 @@ MCERemote1::MCERemote1(
 
 
 MCERemote1a::MCERemote1a(
-  QObject *guiObject,
   unsigned int index)
-  : MCERemote1(guiObject, index)
+  : MCERemote1(index)
 {
   setKeysetName("Remote mode 2");
+}
+
+
+void MCERemote1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MCERemote1::populateProtocol(guiObject);
 
   setPreData(0x14, 7);
 }
 
 
 MCERemote1b::MCERemote1b(
-  QObject *guiObject,
   unsigned int index)
-  : MCERemote1(guiObject, index)
+  : MCERemote1(index)
 {
   setKeysetName("Remote mode 3");
+}
+
+
+void MCERemote1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MCERemote1::populateProtocol(guiObject);
 
   setPreData(0x24, 7);
 }
 
 
 MCERemote1c::MCERemote1c(
-  QObject *guiObject,
   unsigned int index)
-  : MCERemote1(guiObject, index)
+  : MCERemote1(index)
 {
   setKeysetName("Remote mode 4");
+}
+
+
+void MCERemote1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MCERemote1::populateProtocol(guiObject);
 
   setPreData(0x34, 7);
 }
 
 
 MCERemote1d::MCERemote1d(
-  QObject *guiObject,
   unsigned int index)
-  : MCERemote1(guiObject, index)
+  : MCERemote1(index)
 {
   setKeysetName("Remote mode 5");
+}
+
+
+void MCERemote1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MCERemote1::populateProtocol(guiObject);
 
   setPreData(0x44, 7);
 }
 
 
 MCERemote1e::MCERemote1e(
-  QObject *guiObject,
   unsigned int index)
-  : MCERemote1(guiObject, index)
+  : MCERemote1(index)
 {
   setKeysetName("Remote mode 6");
+}
+
+
+void MCERemote1e::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MCERemote1::populateProtocol(guiObject);
 
   setPreData(0x54, 7);
 }
 
 
 MCERemote1f::MCERemote1f(
-  QObject *guiObject,
   unsigned int index)
-  : MCERemote1(guiObject, index)
+  : MCERemote1(index)
 {
   setKeysetName("Remote mode 7");
+}
+
+
+void MCERemote1f::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MCERemote1::populateProtocol(guiObject);
 
   setPreData(0x64, 7);
 }
 
 
 MCERemote1g::MCERemote1g(
-  QObject *guiObject,
   unsigned int index)
-  : MCERemote1(guiObject, index)
+  : MCERemote1(index)
 {
   setKeysetName("Remote mode 8");
+}
+
+
+void MCERemote1g::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MCERemote1::populateProtocol(guiObject);
 
   setPreData(0x74, 7);
 }
index 406ecca..e43d7d5 100644 (file)
@@ -9,64 +9,80 @@ class MCERemote1: public PIRKeysetMetaData
 {
 public:
   MCERemote1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MCERemote1a: public MCERemote1
 {
 public:
   MCERemote1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MCERemote1b: public MCERemote1
 {
 public:
   MCERemote1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MCERemote1c: public MCERemote1
 {
 public:
   MCERemote1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MCERemote1d: public MCERemote1
 {
 public:
   MCERemote1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MCERemote1e: public MCERemote1
 {
 public:
   MCERemote1e(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MCERemote1f: public MCERemote1
 {
 public:
   MCERemote1f(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MCERemote1g: public MCERemote1
 {
 public:
   MCERemote1g(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // MCE_H
index 896d3f6..ef6900c 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/lircprotocol.h"
 
 MitsubishiTV1::MitsubishiTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Mitsubishi_Make,
       index)
 {
+}
+
+
+void MitsubishiTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
@@ -92,11 +103,23 @@ MitsubishiTV1::MitsubishiTV1(
 
 
 MitsubishiTV1a::MitsubishiTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : MitsubishiTV1(guiObject, index)
+  : MitsubishiTV1(index)
 {
   setKeysetName("TV Keyset 1a");
+}
+
+
+void MitsubishiTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MitsubishiTV1::populateProtocol(guiObject);
 
   addKey("TURNLEFT", Unmapped_Key, 0xAC, 8);
   addKey("TURNRIGHT", Unmapped_Key, 0xB4, 8);
@@ -106,13 +129,25 @@ MitsubishiTV1a::MitsubishiTV1a(
 
 
 MitsubishiVCR1::MitsubishiVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       Mitsubishi_Make,
       index)
 {
+}
+
+
+
+void MitsubishiVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
@@ -185,11 +220,23 @@ MitsubishiVCR1::MitsubishiVCR1(
 
 
 MitsubishiVCR1a::MitsubishiVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : MitsubishiVCR1(guiObject, index)
+  : MitsubishiVCR1(index)
 {
   setKeysetName("VCR Keyset 1a");
+}
+
+
+void MitsubishiVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  MitsubishiVCR1::populateProtocol(guiObject);
 
   addKey("->", Unmapped_Key, 0xAC, 8); // Shuttle right
   addKey("<-", Unmapped_Key, 0xD0, 8);  // Shuttle left
index 0972174..24a91ee 100644 (file)
@@ -9,32 +9,40 @@ class MitsubishiTV1: public PIRKeysetMetaData
 {
 public:
   MitsubishiTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MitsubishiTV1a: public MitsubishiTV1
 {
 public:
   MitsubishiTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MitsubishiVCR1: public PIRKeysetMetaData
 {
 public:
   MitsubishiVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class MitsubishiVCR1a: public MitsubishiVCR1
 {
 public:
   MitsubishiVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // MITSUBISHI_H
diff --git a/keysets/motorola.cpp b/keysets/motorola.cpp
new file mode 100644 (file)
index 0000000..36582af
--- /dev/null
@@ -0,0 +1,282 @@
+#include "motorola.h"
+#include "protocols/lircprotocol.h"
+#include "protocols/giprotocol.h"
+#include "protocols/necprotocol.h"
+
+
+Motorola4DTV::Motorola4DTV(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "4DTV/StarChoice Keyset",
+      Motorola_Make,
+      index)
+{
+}
+
+
+void Motorola4DTV::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  LIRCProtocol *lp = new LIRCProtocol(
+    guiObject, index,
+    1000, 1000,
+    1000, 3000,
+    100000, true);
+
+  threadableProtocol = lp;
+
+  lp->setHeaderPair(5000, 2000);
+  lp->setTrailerPulse(1000);
+
+  addKey("0", Zero_Key, 0x246, 12);
+  addKey("1", One_Key, 0xF04, 12);
+  addKey("2", Two_Key, 0x886, 12);
+  addKey("3", Three_Key, 0x486, 12);
+  addKey("4", Four_Key, 0xE83, 12);
+  addKey("5", Five_Key, 0x98B, 12);
+  addKey("6", Six_Key, 0xD8D, 12);
+  addKey("7", Seven_Key, 0x50B, 12);
+  addKey("8", Eight_Key, 0x901, 12);
+  addKey("9", Nine_Key, 0x708, 12);
+  addKey("Power", Power_Key, 0x605, 12);
+  addKey("Source", Input_Key, 0xA4A, 12);
+  addKey("Sat", SatInput_Key, 0xA85, 12);
+  addKey("Up", Up_Key, 0xC4F, 12);
+  addKey("Down", Down_Key, 0x045, 12);
+  addKey("Right", Right_Key, 0x80C, 12);
+  addKey("Left", Left_Key, 0xB88, 12);
+  addKey("Enter", Enter_Key, 0x384, 12);
+  addKey("GoBack", Unmapped_Key, 0x68F, 12);
+  addKey("Exit", Exit_Key, 0xA0F, 12);
+  addKey("Guide", Guide_Key, 0x782, 12);
+  addKey("Interests", Unmapped_Key, 0x581, 12);
+  addKey("Options", Unmapped_Key, 0x289, 12);
+  addKey("Info", Info_Key, 0xE4C, 12);
+  addKey("Browse", Unmapped_Key, 0x849, 12);
+  addKey("Future", Unmapped_Key, 0x443, 12);
+  addKey("Ch-UP", ChannelUp_Key, 0xD07, 12);
+  addKey("Ch-DOWN", ChannelDown_Key, 0x08A, 12);
+  addKey("LastCh", PrevChannel_Key, 0x187, 12);
+  addKey("Help", Unmapped_Key, 0xF8E, 12);
+}
+
+
+MotorolaSTB1::MotorolaSTB1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "STB Keyset 1",
+      Motorola_Make,
+      index)
+{
+}
+
+
+void MotorolaSTB1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new GIProtocol(guiObject, index);
+
+  addKey("0", Zero_Key, 0x0000, 16);
+  addKey("1", One_Key, 0xF001, 16);
+  addKey("2", Two_Key, 0xE002, 16);
+  addKey("3", Three_Key, 0xD003, 16);
+  addKey("4", Four_Key, 0xC004, 16);
+  addKey("5", Five_Key, 0xB005, 16);
+  addKey("6", Six_Key, 0xA006, 16);
+  addKey("7", Seven_Key, 0x9007, 16);
+  addKey("8", Eight_Key, 0x8008, 16);
+  addKey("9", Nine_Key, 0x7009, 16);
+  addKey("power", Power_Key, 0x600A, 16);
+  addKey("ch+", ChannelUp_Key, 0x500B, 16);
+  addKey("ch-", ChannelDown_Key, 0x400C, 16);
+  addKey("vol+", VolumeUp_Key, 0x300D, 16);
+  addKey("vol-", VolumeDown_Key, 0x200E, 16);
+  addKey("mute", Mute_Key, 0x100F, 16);
+
+  addKey("MUSIC", Unmapped_Key, 0xF010, 16);
+  addKey("select", Select_Key, 0xE011, 16);
+  addKey("enter", Enter_Key, 0xE011, 16);
+  addKey("exit", Exit_Key, 0xD012, 16);
+  addKey("last", PrevChannel_Key, 0xC013, 16);
+  addKey("input", Input_Key, 0xB014, 16); // "tv/vcr_input"
+  addKey("fav", Favorites_Key, 0xA015, 16);
+  addKey("ppv", Unmapped_Key, 0x9016, 16);
+  addKey("a", Audio_Key, 0x8017, 16); // "lang"
+  addKey("menu", Menu_Key, 0x6019, 16);
+  addKey("ffwd", FastForward_Key, 0x201D, 16);
+  addKey("rew", Rewind_Key, 0x101E, 16);
+  addKey("pause", Pause_Key, 0x001F, 16);
+
+//  addKey("pnp-swap", PIPSwap_Key, 0xB020, 16);
+  addKey("pip_onoff", PIP_Key, 0xC022, 16);
+  addKey("pip_swap", PIPSwap_Key, 0xB023, 16);
+  addKey("pip_move", PIPMove_Key, 0xA024, 16);
+  addKey("pip_chan_up", PIPChannelUp_Key, 0x9025, 16);
+  addKey("pip_chan_down", PIPChannelDown_Key, 0x8026, 16);
+  addKey("b", Unmapped_Key, 0x7027, 16);
+  addKey("c", Unmapped_Key, 0x6028, 16);
+
+  addKey("guide", Guide_Key, 0xD030, 16);
+  addKey("record", Record_Key, 0xC031, 16);
+  addKey("settings", Unmapped_Key, 0xB032, 16); // "help"
+  addKey("info", Info_Key, 0xA033, 16);
+  addKey("up", Up_Key, 0x9034, 16);
+  addKey("down", Down_Key, 0x8035, 16);
+  addKey("left", Left_Key, 0x7036, 16);
+  addKey("right", Right_Key, 0x6037, 16);
+  addKey("play", Play_Key, 0x5038, 16);
+  addKey("stop", Stop_Key, 0x4039, 16);
+  addKey("page+", PageUp_Key, 0x303A, 16);
+  addKey("page-", PageDown_Key, 0x203B, 16);
+  addKey("skipback", Replay_Key, 0x103C, 16);
+  addKey("mydvr", HDDInput_Key, 0x003D, 16);
+  addKey("live", LiveTV_Key, 0xF03E, 16);
+  addKey("next", Advance_Key, 0xE03F, 16);
+
+  addKey("hdzoom_enter", AspectRatio_Key, 0xC040, 16);
+
+  addKey("red", Red_Key, 0xC06E, 16);
+  addKey("green", Green_Key, 0xB06F, 16);
+  addKey("yelow", Yellow_Key, 0x9070, 16);
+  addKey("blue", Blue_Key, 0x8071, 16);
+  addKey("grey", Unmapped_Key, 0x7072, 16);
+
+  addKey("back", Unmapped_Key, 0x649D, 16);
+
+  addKey("exit", Unmapped_Key, 0x60FB, 16); // separate keyset?
+}
+
+
+MotorolaSTB1a::MotorolaSTB1a(
+  unsigned int index)
+  : MotorolaSTB1(index)
+{
+  setKeysetName("STB Keyset 1a");
+}
+
+
+void MotorolaSTB1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Already populated.
+    return;
+  }
+
+  MotorolaSTB1::populateProtocol(guiObject);
+
+  addKey("a_lock", Unmapped_Key, 0x9016, 16);
+  addKey("ppv", Unmapped_Key, 0x7018, 16);
+  addKey("vod", Unmapped_Key, 0x501A, 16);
+  addKey("play", Play_Key, 0x401B, 16);
+  addKey("stop", Stop_Key, 0x301C, 16);
+
+  addKey("c_day+", Unmapped_Key, 0x5038, 16);
+  addKey("b_day-", Unmapped_Key, 0x4039, 16);
+}
+
+
+MotorolaSTB1b::MotorolaSTB1b(
+  unsigned int index)
+  : MotorolaSTB1(index)
+{
+  setKeysetName("STB Keyset 1b");
+}
+
+
+void MotorolaSTB1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Already populated.
+    return;
+  }
+
+  MotorolaSTB1::populateProtocol(guiObject);
+
+  addKey("yellow", Yellow_Key, 0x8017, 16);
+  addKey("ondemand", Unmapped_Key, 0x501A, 16);
+  addKey("stop", Stop_Key, 0x301C, 16);
+  addKey("play-pause", Play_Key, 0x001F, 16);
+  addKey("play-pause", Pause_Key, 0x001F, 16);
+  addKey("blue", Blue_Key, 0x7027, 16);
+  addKey("red", Red_Key, 0x6028, 16);
+  addKey("green", Green_Key, 0x5029, 16);
+  addKey("#", Unmapped_Key, 0xC040, 16);
+  addKey("widgets", Unmapped_Key, 0x9043, 16);
+  addKey("*", Unmapped_Key, 0x8044, 16);
+}
+
+
+MotorolaSkyDigital::MotorolaSkyDigital(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Sky Digital Keyset",
+      Motorola_Make,
+      index)
+{
+}
+
+
+void MotorolaSkyDigital::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x2F86, 16);
+
+  addKey("chandown", ChannelDown_Key, 0x01, 8);
+  addKey("1", One_Key, 0x02, 8);
+  addKey("yellow", Yellow_Key, 0x04, 8);
+  addKey("chanup", ChannelUp_Key, 0x07, 8);
+  addKey("blue", Blue_Key, 0x09, 8);
+  addKey("mute", Mute_Key, 0x0A, 8);
+  addKey("3", Three_Key, 0x0C, 8);
+  addKey("8", Eight_Key, 0x0D, 8);
+  addKey("0", Zero_Key, 0x0E, 8);
+
+  addKey("ok", Select_Key, 0x10, 8);
+  addKey("volup", VolumeUp_Key, 0x12, 8);
+  addKey("2", Two_Key, 0x13, 8);
+  addKey("5", Five_Key, 0x14, 8);
+  addKey("plus", Unmapped_Key, 0x15, 8);
+  addKey("4", Four_Key, 0x16, 8);
+  addKey("6", Six_Key, 0x17, 8);
+  addKey("7", Seven_Key, 0x18, 8);
+  addKey("9", Nine_Key, 0x19, 8);
+  addKey("power", Power_Key, 0x1A, 8);
+  addKey("voldown", VolumeDown_Key, 0x1B, 8);
+  addKey("green", Green_Key, 0x1E, 8);
+  addKey("red", Red_Key, 0x1F, 8);
+
+  addKey("tv", Input_Key, 0x82, 8);
+  addKey("left", Left_Key, 0x88, 8);
+  addKey("back", Exit_Key, 0x89, 8);
+  addKey("up", Up_Key, 0x8B, 8);
+  addKey("question", Unmapped_Key, 0x8F, 8);
+
+  addKey("down", Down_Key, 0x91, 8);
+  addKey("interactive", Unmapped_Key, 0x93, 8);
+  addKey("guide", Guide_Key, 0x9C, 8);
+  addKey("right", Right_Key, 0x9D, 8);
+}
diff --git a/keysets/motorola.h b/keysets/motorola.h
new file mode 100644 (file)
index 0000000..b22c61b
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef MOTOROLA_H
+#define MOTOROLA_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class Motorola4DTV: public PIRKeysetMetaData
+{
+public:
+  Motorola4DTV(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class MotorolaSTB1: public PIRKeysetMetaData
+{
+public:
+  MotorolaSTB1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class MotorolaSTB1a: public MotorolaSTB1
+{
+public:
+  MotorolaSTB1a(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class MotorolaSTB1b: public MotorolaSTB1
+{
+public:
+  MotorolaSTB1b(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class MotorolaSkyDigital: public PIRKeysetMetaData
+{
+public:
+  MotorolaSkyDigital(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // MOTOROLA_H
index 4a3d776..56a0fad 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/lircprotocol.h"
 
 NokiaGenericVCR::NokiaGenericVCR(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Generic VCR",
       Nokia_Make,
       index)
 {
+}
+
+
+void NokiaGenericVCR::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
index 98d6bcf..a82d31b 100644 (file)
@@ -9,8 +9,10 @@ class NokiaGenericVCR: public PIRKeysetMetaData
 {
 public:
   NokiaGenericVCR(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // NOKIA_H
index 7083342..9e1a145 100644 (file)
@@ -4,13 +4,24 @@
 
 
 OnidaTV1::OnidaTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Onida_Make,
       index)
 {
+}
+
+
+void OnidaTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new JVCProtocol(guiObject, index);
 
   setPreData(0x03, 8);
@@ -50,13 +61,24 @@ OnidaTV1::OnidaTV1(
 
 
 OnidaDVD1::OnidaDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       Onida_Make,
       index)
 {
+}
+
+
+void OnidaDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x00, 8);
index 3de7ddb..3ab1152 100644 (file)
@@ -9,16 +9,20 @@ class OnidaTV1: public PIRKeysetMetaData
 {
 public:
   OnidaTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class OnidaDVD1: public PIRKeysetMetaData
 {
 public:
   OnidaDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // ONIDA_H
index 5f7b792..fcf3d29 100644 (file)
@@ -4,13 +4,24 @@
 
 
 PanasonicCarAudio::PanasonicCarAudio(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Car Audio Keyset",
       Panasonic_Make,
       index)
 {
+}
+
+
+void PanasonicCarAudio::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, false);
 
 //  setPreData(0x8156, 16);
@@ -28,13 +39,24 @@ PanasonicCarAudio::PanasonicCarAudio(
 
 
 PanasonicSat1::PanasonicSat1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Satellite Keyset 1",
       Panasonic_Make,
       index)
 {
+}
+
+
+void PanasonicSat1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new KaseikyoProtocol(guiObject, index);
 
 //  setPreData(0x40040140, 32);
@@ -81,11 +103,23 @@ PanasonicSat1::PanasonicSat1(
 
 
 PanasonicSat1a::PanasonicSat1a(
-  QObject *guiObject,
   unsigned int index)
-  : PanasonicSat1(guiObject, index)
+  : PanasonicSat1(index)
 {
   setKeysetName("Satellite Keyset 1a");
+}
+
+
+void PanasonicSat1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PanasonicSat1::populateProtocol(guiObject);
 
   addKaseikyoKey("EXIT", Exit_Key, 0x028, 0xCF);
   addKaseikyoKey("CH+", ChannelUp_Key, 0x028, 0xB2);
@@ -94,13 +128,24 @@ PanasonicSat1a::PanasonicSat1a(
 
 
 PanasonicTV1::PanasonicTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Panasonic_Make,
       index)
 {
+}
+
+
+void PanasonicTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new KaseikyoProtocol(guiObject, index);
 
 //  setPreData(0x400401, 24);
@@ -213,11 +258,24 @@ PanasonicTV1::PanasonicTV1(
 
 
 PanasonicTV1a::PanasonicTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : PanasonicTV1(guiObject, index)
+  : PanasonicTV1(index)
 {
   setKeysetName("TV Keyset 1a");
+}
+
+
+void PanasonicTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PanasonicTV1::populateProtocol(guiObject);
+
   // Overwrite some of the keys:
   addKaseikyoKey("OK", Select_Key, 0x008, 0x49);
   addKaseikyoKey("MENU", Menu_Key, 0x008, 0x06);
@@ -225,9 +283,8 @@ PanasonicTV1a::PanasonicTV1a(
 
 
 PanasonicTV1b::PanasonicTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : PanasonicTV1(guiObject, index)
+  : PanasonicTV1(index)
 {
   setKeysetName("TV Keyset 1b");
 
@@ -235,6 +292,19 @@ PanasonicTV1b::PanasonicTV1b(
   addControlledDevice(Panasonic_Make, "Viera 42PZ700U", TV_Device);
   addControlledDevice(Panasonic_Make, "Viera 42PZ8ES", TV_Device);
   addControlledDevice(Panasonic_Make, "Quintrix TX-25MK1C", TV_Device);
+}
+
+
+void PanasonicTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PanasonicTV1::populateProtocol(guiObject);
 
   addKaseikyoKey("Info", Info_Key, 0x008, 0x39); // "OSD"
   addKaseikyoKey("OK", Select_Key, 0x008, 0x49);
@@ -247,13 +317,24 @@ PanasonicTV1b::PanasonicTV1b(
 
 
 PanasonicVCR1::PanasonicVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       Panasonic_Make,
       index)
 {
+}
+
+
+void PanasonicVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new KaseikyoProtocol(guiObject, index);
 
 //  setPreData(0x400409, 24);
@@ -351,11 +432,23 @@ PanasonicVCR1::PanasonicVCR1(
 
 
 PanasonicVCR1a::PanasonicVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : PanasonicVCR1(guiObject, index)
+  : PanasonicVCR1(index)
 {
   setKeysetName("VCR Keyset 1a");
+}
+
+
+void PanasonicVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PanasonicVCR1::populateProtocol(guiObject);
 
   addKaseikyoKey("OSD", Info_Key, 0x009, 0x57);
   addKaseikyoKey("AV", Input_Key, 0x009, 0xC0);
@@ -364,11 +457,23 @@ PanasonicVCR1a::PanasonicVCR1a(
 
 
 PanasonicVCR1b::PanasonicVCR1b(
-  QObject *guiObject,
   unsigned int index)
-  : PanasonicVCR1(guiObject, index)
+  : PanasonicVCR1(index)
 {
   setKeysetName("VCR Keyset 1b");
+}
+
+
+void PanasonicVCR1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PanasonicVCR1::populateProtocol(guiObject);
 
   addKaseikyoKey("repeat", Repeat_Key, 0x009, 0xF9);
   addKaseikyoKey("prog", Program_Key, 0x009, 0xFF);
@@ -377,11 +482,23 @@ PanasonicVCR1b::PanasonicVCR1b(
 
 
 PanasonicVCR1c::PanasonicVCR1c(
-  QObject *guiObject,
   unsigned int index)
-  : PanasonicVCR1(guiObject, index)
+  : PanasonicVCR1(index)
 {
   setKeysetName("VCR Keyset 1c");
+}
+
+
+void PanasonicVCR1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PanasonicVCR1::populateProtocol(guiObject);
 
   addKaseikyoKey("rotate", Up_Key, 0x019, 0x02);
   addKaseikyoKey("rotatedown", Down_Key, 0x019, 0x03);
@@ -391,13 +508,24 @@ PanasonicVCR1c::PanasonicVCR1c(
 
 
 PanasonicDVD1::PanasonicDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       Panasonic_Make,
       index)
 {
+}
+
+
+void PanasonicDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new KaseikyoProtocol(guiObject, index);
 
 //  setPreData(0x40040D00, 32);
@@ -480,11 +608,23 @@ PanasonicDVD1::PanasonicDVD1(
 
 
 PanasonicDVD1a::PanasonicDVD1a(
-  QObject *guiObject,
   unsigned int index)
-  : PanasonicDVD1(guiObject, index)
+  : PanasonicDVD1(index)
 {
   setKeysetName("DVD Keyset 1a");
+}
+
+
+void PanasonicDVD1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PanasonicDVD1::populateProtocol(guiObject);
 
   addKaseikyoKey("channel2up", ChannelUp_Key, 0x00B, 0x34);
   addKaseikyoKey("channel2down", ChannelDown_Key, 0x00B, 0x35);
@@ -493,7 +633,6 @@ PanasonicDVD1a::PanasonicDVD1a(
 
 
 PanasonicAudio1::PanasonicAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
@@ -502,6 +641,17 @@ PanasonicAudio1::PanasonicAudio1(
 {
   addControlledDevice(Panasonic_Make, "RX-DS25", Audio_Device);
   addControlledDevice(Panasonic_Make, "RX-e300", Audio_Device);
+}
+
+
+void PanasonicAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new KaseikyoProtocol(guiObject, index);
 
@@ -574,13 +724,24 @@ PanasonicAudio1::PanasonicAudio1(
 
 
 PanasonicAC1::PanasonicAC1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Air Conditioner 1",
       Panasonic_Make,
       index)
 {
+}
+
+
+void PanasonicAC1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
   setPreData(0x6681, 16);
index 5237836..1933a6a 100644 (file)
@@ -9,120 +9,150 @@ class PanasonicCarAudio: public PIRKeysetMetaData
 {
 public:
   PanasonicCarAudio(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicSat1: public PIRKeysetMetaData
 {
 public:
   PanasonicSat1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicSat1a: public PanasonicSat1
 {
 public:
   PanasonicSat1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicTV1: public PIRKeysetMetaData
 {
 public:
   PanasonicTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicTV1a: public PanasonicTV1
 {
 public:
   PanasonicTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicTV1b: public PanasonicTV1
 {
 public:
   PanasonicTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicVCR1: public PIRKeysetMetaData
 {
 public:
   PanasonicVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicVCR1a: public PanasonicVCR1
 {
 public:
   PanasonicVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicVCR1b: public PanasonicVCR1
 {
 public:
   PanasonicVCR1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicVCR1c: public PanasonicVCR1
 {
 public:
   PanasonicVCR1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicDVD1: public PIRKeysetMetaData
 {
 public:
   PanasonicDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicDVD1a: public PanasonicDVD1
 {
 public:
   PanasonicDVD1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicAudio1: public PIRKeysetMetaData
 {
 public:
   PanasonicAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicAudio1a: public PanasonicAudio1
 {
 public:
   PanasonicAudio1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PanasonicAC1: public PIRKeysetMetaData
 {
 public:
   PanasonicAC1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // PANASONIC_H
index 7c60b80..6ae8921 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/necprotocol.h"
 
 PhilcoTV::PhilcoTV(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Philco_Make,
       index)
 {
+}
+
+
+void PhilcoTV::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x50, 8);
index 8245ac7..d3f85fb 100644 (file)
@@ -9,8 +9,10 @@ class PhilcoTV: public PIRKeysetMetaData
 {
 public:
   PhilcoTV(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // PHILCO_H
index b5bd7df..a2713ea 100644 (file)
@@ -4,7 +4,6 @@
 #include "protocols/necprotocol.h"
 
 PhilipsTV1::PhilipsTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -13,6 +12,17 @@ PhilipsTV1::PhilipsTV1(
 {
   addControlledDevice(Philips_Make, "HV92", TV_Device);
   addControlledDevice(Philips_Make, "15PF4121", TV_Device);
+}
+
+
+void PhilipsTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -114,26 +124,50 @@ PhilipsTV1::PhilipsTV1(
 
 
 PhilipsTV1a::PhilipsTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV1(guiObject, index)
+  : PhilipsTV1(index)
 {
   setKeysetName("TV Keyset 1a");
 
   addControlledDevice(Philips_Make, "17PT1563", TV_Device);
+}
+
+
+void PhilipsTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV1::populateProtocol(guiObject);
 
   addKey("TIMER", Sleep_Key, 0x002D, 13);
 }
 
 
 PhilipsTV1b::PhilipsTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV1(guiObject, index)
+  : PhilipsTV1(index)
 {
   setKeysetName("TV Keyset 1b");
 
   addControlledDevice(Philips_Make, "29PT5507", TV_Device);
+}
+
+
+void PhilipsTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV1::populateProtocol(guiObject);
 
   addKey("radio", Unmapped_Key, 0x00F1, 13);
   addKey("sound", Unmapped_Key, 0x1014, 13);
@@ -146,11 +180,23 @@ PhilipsTV1b::PhilipsTV1b(
 
 
 PhilipsTV1c::PhilipsTV1c(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV1(guiObject, index)
+  : PhilipsTV1(index)
 {
   setKeysetName("TV Keyset 1c");
+}
+
+
+void PhilipsTV1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV1::populateProtocol(guiObject);
 
   addKey("spatial", Surround_Key, 0x1024, 13);
   addKey("stereo", Audio_Key, 0x1023, 13);
@@ -159,15 +205,27 @@ PhilipsTV1c::PhilipsTV1c(
 
 
 PhilipsTV1d::PhilipsTV1d(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV1(guiObject, index)
+  : PhilipsTV1(index)
 {
   setKeysetName("TV Keyset 1d");
 
   addControlledDevice(Philips_Make, "47PFL7603D", TV_Device);
   addControlledDevice(Philips_Make, "14PT1562/00", TV_Device);
   addControlledDevice(Philips_Make, "32PW9528/12", TV_Device);
+}
+
+
+void PhilipsTV1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV1::populateProtocol(guiObject);
 
   addKey("NOTE_BUTTON", Unmapped_Key, 0x1014, 13); // "Tune"
   addKey("RADIO_BUTTON", Unmapped_Key, 0x00F1, 13);
@@ -190,14 +248,26 @@ PhilipsTV1d::PhilipsTV1d(
 
 
 PhilipsTV1e::PhilipsTV1e(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV1(guiObject, index)
+  : PhilipsTV1(index)
 {
   setKeysetName("TV Keyset 1e");
 
   addControlledDevice(Philips_Make, "28PT4455", TV_Device);
   addControlledDevice(Philips_Make, "21PT2265", TV_Device);
+}
+
+
+void PhilipsTV1e::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV1::populateProtocol(guiObject);
 
   addKey("smart_audio", SoundMode_Key, 0x10CB, 13);
   addKey("smart_video", PictureMode_Key, 0x10CA, 13);
@@ -211,13 +281,25 @@ PhilipsTV1e::PhilipsTV1e(
 
 
 PhilipsTV1f::PhilipsTV1f(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV1(guiObject, index)
+  : PhilipsTV1(index)
 {
   setKeysetName("TV Keyset 1f");
 
   addControlledDevice(Philips_Make, "25PT5302", TV_Device);
+}
+
+
+void PhilipsTV1f::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV1::populateProtocol(guiObject);
 
   addKey("SETUP", Menu_Key, 0x003A, 13);
   addKey("VOL-", VolumeDown_Key, 0x0011, 13);
@@ -236,7 +318,6 @@ PhilipsTV1f::PhilipsTV1f(
 
 
 PhilipsTV2::PhilipsTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 2",
@@ -246,6 +327,17 @@ PhilipsTV2::PhilipsTV2(
   addControlledDevice(Philips_Make, "28PW8506/12R", TV_Device);
   addControlledDevice(Philips_Make, "26PFL5604H", TV_Device);
   addControlledDevice(Philips_Make, "32PFL5403D", TV_Device);
+}
+
+
+void PhilipsTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x00);
 
@@ -312,13 +404,25 @@ PhilipsTV2::PhilipsTV2(
 
 
 PhilipsTV2a::PhilipsTV2a(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV2(guiObject, index)
+  : PhilipsTV2(index)
 {
   setKeysetName("TV Keyset 2a");
 
   addControlledDevice(Philips_Make, "29PT8607/12", TV_Device);
+}
+
+
+void PhilipsTV2a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV2::populateProtocol(guiObject);
 
   addKey("tv-display", Info_Key, 0x3C, 8);
   addKey("tv-teletext_submode_(J:12)", Unmapped_Key, 0x5D, 8);
@@ -332,13 +436,25 @@ PhilipsTV2a::PhilipsTV2a(
 
 
 PhilipsTV2b::PhilipsTV2b(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsTV2(guiObject, index)
+  : PhilipsTV2(index)
 {
   setKeysetName("TV Keyset 2b");
 
   addControlledDevice(Philips_Make, "32PFL7532D", TV_Device);
+}
+
+
+void PhilipsTV2b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsTV2::populateProtocol(guiObject);
 
   addKey("KEY_PLAY", Play_Key, 0xC1, 8);
   addKey("KEY_FAVORITES", Favorites_Key, 0xD2, 8);
@@ -346,7 +462,6 @@ PhilipsTV2b::PhilipsTV2b(
 
 
 PhilipsTV3::PhilipsTV3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV (settop-box) keyset 3",
@@ -354,6 +469,17 @@ PhilipsTV3::PhilipsTV3(
       index)
 {
   addControlledDevice(Philips_Make, "DTX6372", TV_Device);
+}
+
+
+void PhilipsTV3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x28);
 
@@ -401,7 +527,6 @@ PhilipsTV3::PhilipsTV3(
 
 
 PhilipsDVD1::PhilipsDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -412,6 +537,17 @@ PhilipsDVD1::PhilipsDVD1(
   addControlledDevice(Philips_Make, "DVD722", DVD_Device);
   addControlledDevice(Philips_Make, "DVD-724", DVD_Device);
   addControlledDevice(Philips_Make, "DVP 3005", DVD_Device);
+}
+
+
+void PhilipsDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x04);
 
@@ -469,13 +605,25 @@ PhilipsDVD1::PhilipsDVD1(
 
 
 PhilipsDVD1a::PhilipsDVD1a(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsDVD1(guiObject, index)
+  : PhilipsDVD1(index)
 {
   setKeysetName("DVD Keyset 1a");
 
   addControlledDevice(Philips_Make, "DVP-5982", DVD_Device);
+}
+
+
+void PhilipsDVD1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsDVD1::populateProtocol(guiObject);
 
   addKey("Play_Pause", Pause_Key, 0x2C, 8);
   addKey("USB", Unmapped_Key, 0x7E, 8);
@@ -484,13 +632,25 @@ PhilipsDVD1a::PhilipsDVD1a(
 
 
 PhilipsDVD1b::PhilipsDVD1b(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsDVD1(guiObject, index)
+  : PhilipsDVD1(index)
 {
   setKeysetName("DVD Keyset 1b");
 
   addControlledDevice(Philips_Make, "DVP-642", DVD_Device);
+}
+
+
+void PhilipsDVD1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsDVD1::populateProtocol(guiObject);
 
   addKey("Forward", FastForward_Key, 0x20, 8);
   addKey("Reverse", Rewind_Key, 0x21, 8);
@@ -499,15 +659,27 @@ PhilipsDVD1b::PhilipsDVD1b(
 
 
 PhilipsDVD1c::PhilipsDVD1c(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsDVD1(guiObject, index)
+  : PhilipsDVD1(index)
 {
   setKeysetName("DVD Keyset 1c");
 
   addControlledDevice(Philips_Make, "HTS3544", DVD_Device);
   addControlledDevice(Philips_Make, "DVP5982", DVD_Device);
   addControlledDevice(Philips_Make, "DVP5160", DVD_Device);
+}
+
+
+void PhilipsDVD1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsDVD1::populateProtocol(guiObject);
 
   addKey("play-pause", Pause_Key, 0x2C, 8);
   addKey("disc-usb", Unmapped_Key, 0x3F, 8);
@@ -520,13 +692,25 @@ PhilipsDVD1c::PhilipsDVD1c(
 
 
 PhilipsDVD1d::PhilipsDVD1d(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsDVD1(guiObject, index)
+  : PhilipsDVD1(index)
 {
   setKeysetName("DVD Keyset 1d");
 
   addControlledDevice(Philips_Make, "DVD 963sa", DVD_Device);
+}
+
+
+void PhilipsDVD1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsDVD1::populateProtocol(guiObject);
 
   addKey("ff-right", FastForward_Key, 0x20, 8);
   addKey("ff-left", Rewind_Key, 0x21, 8);
@@ -535,13 +719,24 @@ PhilipsDVD1d::PhilipsDVD1d(
 
 
 PhilipsDVD2::PhilipsDVD2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD/BD Keyset 2",
       Philips_Make,
       index)
 {
+}
+
+
+void PhilipsDVD2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC6Protocol(guiObject, index, 0x46);
 
   addKey("0", Zero_Key, 0x00, 8);
@@ -593,7 +788,6 @@ PhilipsDVD2::PhilipsDVD2(
 
 
 PhilipsDVD3::PhilipsDVD3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 3",
@@ -601,6 +795,17 @@ PhilipsDVD3::PhilipsDVD3(
       index)
 {
   addControlledDevice(Philips_Make, "DVDR3570H", DVD_Device);
+}
+
+
+void PhilipsDVD3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x32);
 
@@ -671,13 +876,25 @@ PhilipsDVD3::PhilipsDVD3(
 
 
 PhilipsDVD3a::PhilipsDVD3a(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsDVD3(guiObject, index)
+  : PhilipsDVD3(index)
 {
   setKeysetName("DVD Keyset 3a");
 
   addControlledDevice(Philips_Make, "DVDR-3455H", DVD_Device);
+}
+
+
+void PhilipsDVD3a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsDVD3::populateProtocol(guiObject);
 
   addKey("CH+", ChannelUp_Key, 0x1E, 8);
   addKey("CH-", ChannelDown_Key, 0x1F, 8);
@@ -691,7 +908,6 @@ PhilipsDVD3a::PhilipsDVD3a(
 
 
 PhilipsDVD4::PhilipsDVD4(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 4",
@@ -699,6 +915,17 @@ PhilipsDVD4::PhilipsDVD4(
       index)
 {
   addControlledDevice(Philips_Make, "DVDR 1000", DVD_Device);
+}
+
+
+void PhilipsDVD4::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x30);
 
@@ -758,13 +985,24 @@ PhilipsDVD4::PhilipsDVD4(
 
 
 PhilipsVCR1::PhilipsVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       Philips_Make,
       index)
 {
+}
+
+
+void PhilipsVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("Standby", Power_Key, 0x114C, 13);
@@ -820,13 +1058,25 @@ PhilipsVCR1::PhilipsVCR1(
 
 
 PhilipsVCR1a::PhilipsVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsVCR1(guiObject, index)
+  : PhilipsVCR1(index)
 {
   setKeysetName("VCR Keyset 1a");
 
   addControlledDevice(Philips_Make, "VP27/55", VCR_Device);
+}
+
+
+void PhilipsVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsVCR1::populateProtocol(guiObject);
 
   addKey("menu", Menu_Key, 0x115D, 13);
   addKey("eject", Eject_Key, 0x116D, 13);
@@ -840,11 +1090,23 @@ PhilipsVCR1a::PhilipsVCR1a(
 
 
 PhilipsVCR1b::PhilipsVCR1b(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsVCR1(guiObject, index)
+  : PhilipsVCR1(index)
 {
   setKeysetName("VCR Keyset 1b");
+}
+
+
+void PhilipsVCR1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsVCR1::populateProtocol(guiObject);
 
   addKey("Cassette_Eject", Eject_Key, 0x017E, 13);
   addKey("Select", Select_Key, 0x114B, 13);
@@ -859,11 +1121,23 @@ PhilipsVCR1b::PhilipsVCR1b(
 
 
 PhilipsVCR1c::PhilipsVCR1c(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsVCR1(guiObject, index)
+  : PhilipsVCR1(index)
 {
   setKeysetName("VCR Keyset 1c");
+}
+
+
+void PhilipsVCR1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsVCR1::populateProtocol(guiObject);
 
   addKey("TIMER_REVIEW", Unmapped_Key, 0x0168, 13);
   addKey("DATE_UP", Unmapped_Key, 0x125C, 13);
@@ -894,13 +1168,24 @@ PhilipsVCR1c::PhilipsVCR1c(
 
 
 PhilipsSat1::PhilipsSat1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 1",
       Philips_Make,
       index)
 {
+}
+
+
+void PhilipsSat1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("Standby", Power_Key, 0x120C, 13);
@@ -950,7 +1235,6 @@ PhilipsSat1::PhilipsSat1(
 
 
 PhilipsSat2::PhilipsSat2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 2",
@@ -958,6 +1242,17 @@ PhilipsSat2::PhilipsSat2(
       index)
 {
   addControlledDevice(Philips_Make, "DSX-5500", Sat_Device);
+}
+
+
+void PhilipsSat2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x27);
 
@@ -998,13 +1293,25 @@ PhilipsSat2::PhilipsSat2(
 
 
 PhilipsSat2a::PhilipsSat2a(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsSat2(guiObject, index)
+  : PhilipsSat2(index)
 {
   setKeysetName("Sat Keyset 2a");
 
   addControlledDevice(Philips_Make, "DSX 6010/62A", Sat_Device);
+}
+
+
+void PhilipsSat2a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsSat2::populateProtocol(guiObject);
 
   addKey("ch+", ChannelUp_Key, 0x58, 8);
   addKey("ch-", ChannelDown_Key, 0x59, 8);
@@ -1020,7 +1327,6 @@ PhilipsSat2a::PhilipsSat2a(
 
 
 PhilipsSat3::PhilipsSat3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Sat Keyset 3",
@@ -1028,6 +1334,17 @@ PhilipsSat3::PhilipsSat3(
       index)
 {
   addControlledDevice(Philips_Make, "DST5816/33", Sat_Device);
+}
+
+
+void PhilipsSat3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -1065,7 +1382,6 @@ PhilipsSat3::PhilipsSat3(
 
 
 PhilipsAudio1::PhilipsAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
@@ -1080,6 +1396,17 @@ PhilipsAudio1::PhilipsAudio1(
   addControlledDevice(Philips_Make, "AZ2407", Audio_Device);
   addControlledDevice(Philips_Make, "MZ7", Audio_Device);
   addControlledDevice(Philips_Make, "AS680C", Audio_Device);
+}
+
+
+void PhilipsAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -1162,13 +1489,25 @@ PhilipsAudio1::PhilipsAudio1(
 
 
 PhilipsAudio1a::PhilipsAudio1a(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsAudio1(guiObject, index)
+  : PhilipsAudio1(index)
 {
   setKeysetName("Audio Keyset 1a");
 
   addControlledDevice(Philips_Make, "C 380", Audio_Device);
+}
+
+
+void PhilipsAudio1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsAudio1::populateProtocol(guiObject);
 
   addKey("VOL-", VolumeDown_Key, 0x1511, 13);
   addKey("VOL+", VolumeUp_Key, 0x1510, 13);
@@ -1176,13 +1515,25 @@ PhilipsAudio1a::PhilipsAudio1a(
 
 
 PhilipsAudio1b::PhilipsAudio1b(
-  QObject *guiObject,
   unsigned int index)
-  : PhilipsAudio1(guiObject, index)
+  : PhilipsAudio1(index)
 {
   setKeysetName("Audio Keyset 1b");
 
   addControlledDevice(Philips_Make, "FW 362", Audio_Device);
+}
+
+
+void PhilipsAudio1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PhilipsAudio1::populateProtocol(guiObject);
 
   addKey("tv_power", Unmapped_Key, 0x100C, 13);
   addKey("tv_vcr", VCRInput_Key, 0x103F, 13);
@@ -1200,7 +1551,6 @@ PhilipsAudio1b::PhilipsAudio1b(
 
 
 PhilipsAudio2::PhilipsAudio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 2",
@@ -1208,6 +1558,17 @@ PhilipsAudio2::PhilipsAudio2(
       index)
 {
   addControlledDevice(Philips_Make, "FW2104", Audio_Device);
+}
+
+
+void PhilipsAudio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, true, false);
 
@@ -1269,7 +1630,6 @@ PhilipsAudio2::PhilipsAudio2(
 // This CD control is different enough from Audio1 that I figured I should
 // give it an entirely new keyset:
 PhilipsAudio3::PhilipsAudio3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 3",
@@ -1277,6 +1637,17 @@ PhilipsAudio3::PhilipsAudio3(
       index)
 {
   addControlledDevice(Philips_Make, "CD723", Audio_Device);
+}
+
+
+void PhilipsAudio3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index);
 
@@ -1312,13 +1683,24 @@ PhilipsAudio3::PhilipsAudio3(
 
 
 PhilipsAudio4::PhilipsAudio4(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 4",
       Philips_Make,
       index)
 {
+}
+
+
+void PhilipsAudio4::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("EJECT", Eject_Key, 0x16AD, 13);
index 672ca5e..2a02375 100644 (file)
@@ -9,272 +9,340 @@ class PhilipsTV1: public PIRKeysetMetaData
 {
 public:
   PhilipsTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV1a: public PhilipsTV1
 {
 public:
   PhilipsTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV1b: public PhilipsTV1
 {
 public:
   PhilipsTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV1c: public PhilipsTV1
 {
 public:
   PhilipsTV1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV1d: public PhilipsTV1
 {
 public:
   PhilipsTV1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV1e: public PhilipsTV1
 {
 public:
   PhilipsTV1e(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV1f: public PhilipsTV1
 {
 public:
   PhilipsTV1f(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV2: public PIRKeysetMetaData
 {
 public:
   PhilipsTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV2a: public PhilipsTV2
 {
 public:
   PhilipsTV2a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV2b: public PhilipsTV2
 {
 public:
   PhilipsTV2b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsTV3: public PIRKeysetMetaData
 {
 public:
   PhilipsTV3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD1: public PIRKeysetMetaData
 {
 public:
   PhilipsDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD1a: public PhilipsDVD1
 {
 public:
   PhilipsDVD1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD1b: public PhilipsDVD1
 {
 public:
   PhilipsDVD1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD1c: public PhilipsDVD1
 {
 public:
   PhilipsDVD1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD1d: public PhilipsDVD1
 {
 public:
   PhilipsDVD1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD2: public PIRKeysetMetaData
 {
 public:
   PhilipsDVD2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD3: public PIRKeysetMetaData
 {
 public:
   PhilipsDVD3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD3a: public PhilipsDVD3
 {
 public:
   PhilipsDVD3a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsDVD4: public PIRKeysetMetaData
 {
 public:
   PhilipsDVD4(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsVCR1: public PIRKeysetMetaData
 {
 public:
   PhilipsVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsVCR1a: public PhilipsVCR1
 {
 public:
   PhilipsVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsVCR1b: public PhilipsVCR1
 {
 public:
   PhilipsVCR1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsVCR1c: public PhilipsVCR1
 {
 public:
   PhilipsVCR1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsSat1: public PIRKeysetMetaData
 {
 public:
   PhilipsSat1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsSat2: public PIRKeysetMetaData
 {
 public:
   PhilipsSat2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsSat2a: public PhilipsSat2
 {
 public:
   PhilipsSat2a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsSat3: public PIRKeysetMetaData
 {
 public:
   PhilipsSat3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsAudio1: public PIRKeysetMetaData
 {
 public:
   PhilipsAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsAudio1a: public PhilipsAudio1
 {
 public:
   PhilipsAudio1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsAudio1b: public PhilipsAudio1
 {
 public:
   PhilipsAudio1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsAudio2: public PIRKeysetMetaData
 {
 public:
   PhilipsAudio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsAudio3: public PIRKeysetMetaData
 {
 public:
   PhilipsAudio3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PhilipsAudio4: public PIRKeysetMetaData
 {
 public:
   PhilipsAudio4(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // PHILIPS_H
index caaedea..3bad6b5 100644 (file)
@@ -2,7 +2,6 @@
 #include "protocols/rc5protocol.h"
 
 PinnaclePCTV1::PinnaclePCTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "PCTV Keyset 1",
@@ -10,6 +9,17 @@ PinnaclePCTV1::PinnaclePCTV1(
       index)
 {
   addControlledDevice(Pinnacle_Make, "800i", Computer_Device);
+}
+
+
+void PinnaclePCTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index, 0x47);
 
@@ -43,7 +53,6 @@ PinnaclePCTV1::PinnaclePCTV1(
 
 
 PinnaclePCTV2::PinnaclePCTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "PCTV Keyset 2",
@@ -51,6 +60,17 @@ PinnaclePCTV2::PinnaclePCTV2(
       index)
 {
   addControlledDevice(Pinnacle_Make, "USB Stick", Computer_Device);
+}
+
+
+void PinnaclePCTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index, 0x47);
 
@@ -83,7 +103,6 @@ PinnaclePCTV2::PinnaclePCTV2(
 
 
 PinnaclePCTV3::PinnaclePCTV3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "PCTV Keyset 3",
@@ -91,6 +110,17 @@ PinnaclePCTV3::PinnaclePCTV3(
       index)
 {
   addControlledDevice(Pinnacle_Make, "110i", Computer_Device);
+}
+
+
+void PinnaclePCTV3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new RC5Protocol(guiObject, index, 0x47);
 
index 267be22..300b259 100644 (file)
@@ -9,24 +9,30 @@ class PinnaclePCTV1: public PIRKeysetMetaData
 {
 public:
   PinnaclePCTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PinnaclePCTV2: public PIRKeysetMetaData
 {
 public:
   PinnaclePCTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PinnaclePCTV3: public PIRKeysetMetaData
 {
 public:
   PinnaclePCTV3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // PINNACLE_H
index 30adfe1..3ae1695 100644 (file)
@@ -3,13 +3,24 @@
 #include "protocols/lircprotocol.h"
 
 PioneerTV1::PioneerTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Pioneer_Make,
       index)
 {
+}
+
+
+void PioneerTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
   addNECKey("0", Zero_Key, 0xAA, 0x00);
@@ -70,13 +81,24 @@ PioneerTV1::PioneerTV1(
 
 
 PioneerTV2::PioneerTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV (STB) Keyset 2",
       Pioneer_Make,
       index)
 {
+}
+
+
+void PioneerTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
   // I'm not sure this keyset even needs the "0xAA" keys at all...
@@ -130,13 +152,24 @@ PioneerTV2::PioneerTV2(
 
 
 PioneerTV3::PioneerTV3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV (STB) Keyset 3",
       Pioneer_Make,
       index)
 {
+}
+
+
+void PioneerTV3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
   addNECKey("KEY_VOLUMEUP", VolumeUp_Key, 0xAA, 0x0A);
@@ -190,7 +223,6 @@ PioneerTV3::PioneerTV3(
 
 
 PioneerAudio1::PioneerAudio1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 1",
@@ -201,6 +233,17 @@ PioneerAudio1::PioneerAudio1(
   addControlledDevice(Pioneer_Make, "Hi-Fi DU-L7", Audio_Device);
   addControlledDevice(Pioneer_Make, "CU-XR015", Audio_Device);
   addControlledDevice(Pioneer_Make, "A880", Audio_Device);
+}
+
+
+void PioneerAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
@@ -285,11 +328,23 @@ PioneerAudio1::PioneerAudio1(
 
 
 PioneerAudio1a::PioneerAudio1a(
-  QObject *guiObject,
   unsigned int index)
-  : PioneerAudio1(guiObject, index)
+  : PioneerAudio1(index)
 {
   setKeysetName("Audio Keyset 1a");
+}
+
+
+void PioneerAudio1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  PioneerAudio1::populateProtocol(guiObject);
 
   addNECKey("cd", CDInput_Key, 0xA6, 0x0E);
   addNECKey("tape", TapeInput_Key, 0xA6, 0x0F);
@@ -297,13 +352,24 @@ PioneerAudio1a::PioneerAudio1a(
 
 
 PioneerAudio2::PioneerAudio2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 2",
       Pioneer_Make,
       index)
 {
+}
+
+
+void PioneerAudio2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
   addNECKey("VOL+", VolumeUp_Key, 0xA5, 0x0A);
@@ -354,7 +420,6 @@ PioneerAudio2::PioneerAudio2(
 
 
 PioneerAudio3::PioneerAudio3(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 3",
@@ -364,6 +429,17 @@ PioneerAudio3::PioneerAudio3(
   addControlledDevice(Pioneer_Make, "A-207R", Audio_Device);
   addControlledDevice(Pioneer_Make, "SX-302", Audio_Device);
   addControlledDevice(Pioneer_Make, "VSX-9300", Audio_Device);
+}
+
+
+void PioneerAudio3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
@@ -508,13 +584,24 @@ PioneerAudio3::PioneerAudio3(
 
 
 PioneerAudio4::PioneerAudio4(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 4",
       Pioneer_Make,
       index)
 {
+}
+
+
+void PioneerAudio4::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
   addNECKey("tapesel", Unmapped_Key, 0xA1, 0x4C);
@@ -544,7 +631,6 @@ PioneerAudio4::PioneerAudio4(
 
 
 PioneerAudio5::PioneerAudio5(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Audio Keyset 5",
@@ -552,6 +638,17 @@ PioneerAudio5::PioneerAudio5(
       index)
 {
   addControlledDevice(Pioneer_Make, "XR-P240C", Audio_Device);
+}
+
+
+void PioneerAudio5::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
@@ -604,7 +701,6 @@ PioneerAudio5::PioneerAudio5(
 
 
 PioneerCD1::PioneerCD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "CD Keyset 1",
@@ -618,6 +714,17 @@ PioneerCD1::PioneerCD1(
   addControlledDevice(Pioneer_Make, "PD-M107", Audio_Device);
   addControlledDevice(Pioneer_Make, "PD-S503", Audio_Device);
   addControlledDevice(Pioneer_Make, "PD-F1007", Audio_Device);
+}
+
+
+void PioneerCD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
@@ -697,7 +804,6 @@ PioneerCD1::PioneerCD1(
 
 
 PioneerLaserDisc1::PioneerLaserDisc1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "LD Keyset 1",
@@ -705,6 +811,17 @@ PioneerLaserDisc1::PioneerLaserDisc1(
       index)
 {
   addControlledDevice(Pioneer_Make, "CLD-D925", Other_Device);
+}
+
+
+void PioneerLaserDisc1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
@@ -757,7 +874,6 @@ PioneerLaserDisc1::PioneerLaserDisc1(
 
 
 PioneerDVD1::PioneerDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -766,6 +882,17 @@ PioneerDVD1::PioneerDVD1(
 {
   addControlledDevice(Pioneer_Make, "VXX2702", DVD_Device);
   addControlledDevice(Pioneer_Make, "VXX2801", DVD_Device);
+}
+
+
+void PioneerDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new PioneerProtocol(guiObject, index);
 
index 7dfbaa1..656f112 100644 (file)
@@ -9,96 +9,120 @@ class PioneerTV1: public PIRKeysetMetaData
 {
 public:
   PioneerTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerTV2: public PIRKeysetMetaData
 {
 public:
   PioneerTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerTV3: public PIRKeysetMetaData
 {
 public:
   PioneerTV3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerAudio1: public PIRKeysetMetaData
 {
 public:
   PioneerAudio1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerAudio1a: public PioneerAudio1
 {
 public:
   PioneerAudio1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerAudio2: public PIRKeysetMetaData
 {
 public:
   PioneerAudio2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerAudio3: public PIRKeysetMetaData
 {
 public:
   PioneerAudio3(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerAudio4: public PIRKeysetMetaData
 {
 public:
   PioneerAudio4(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerAudio5: public PIRKeysetMetaData
 {
 public:
   PioneerAudio5(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerCD1: public PIRKeysetMetaData
 {
 public:
   PioneerCD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerLaserDisc1: public PIRKeysetMetaData
 {
 public:
   PioneerLaserDisc1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class PioneerDVD1: public PIRKeysetMetaData
 {
 public:
   PioneerDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // PIONEER_H
index 9a882cb..608216c 100644 (file)
@@ -2,7 +2,6 @@
 #include "protocols/necprotocol.h"
 
 RaiteDVD1::RaiteDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -10,6 +9,17 @@ RaiteDVD1::RaiteDVD1(
       index)
 {
   addControlledDevice(Raite_Make, "DVD-703", DVD_Device);
+}
+
+
+void RaiteDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
index 4651342..ba05989 100644 (file)
@@ -9,8 +9,10 @@ class RaiteDVD1: public PIRKeysetMetaData
 {
 public:
   RaiteDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // RAITE_H
index e6ed72b..e2e583b 100644 (file)
@@ -3,13 +3,24 @@
 #include "protocols/rcaprotocol.h"
 
 RCATV1::RCATV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       RCA_Make,
       index)
 {
+}
+
+
+void RCATV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RCAProtocol(guiObject, index);
 
   setPreData(0xF, 4);
@@ -73,22 +84,46 @@ RCATV1::RCATV1(
 
 
 RCATV1a::RCATV1a(
-  QObject *guiObject,
   unsigned int index)
-  : RCATV1(guiObject, index)
+  : RCATV1(index)
 {
   setKeysetName("TV Keyset 1a");
+}
+
+
+void RCATV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  RCATV1::populateProtocol(guiObject);
 
   addKey("repeat", Repeat_Key, 0x05, 8);
 }
 
 
 RCATV1b::RCATV1b(
-  QObject *guiObject,
   unsigned int index)
-  : RCATV1(guiObject, index)
+  : RCATV1(index)
 {
   setKeysetName("TV Keyset 1b");
+}
+
+
+void RCATV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  RCATV1::populateProtocol(guiObject);
 
   addKey("reset", Reset_Key, 0x12, 8);
 }
@@ -237,13 +272,24 @@ RCAAux2a::RCAAux2a(
 
 
 RCAVCR1::RCAVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR Keyset 1",
       RCA_Make,
       index)
 {
+}
+
+
+void RCAVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RCAProtocol(guiObject, index);
 
   setPreData(0xE, 4);
@@ -291,24 +337,47 @@ RCAVCR1::RCAVCR1(
 
 
 RCAVCR1a::RCAVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : RCAVCR1(guiObject, index)
+  : RCAVCR1(index)
 {
   setKeysetName("VCR(alt) Keyset 1a");
+}
+
+
+void RCAVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  RCAVCR1::populateProtocol(guiObject);
 
   setPreData(0xD, 4);
 }
 
 
 RCADVD1::RCADVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       RCA_Make,
       index)
 {
+}
+
+
+void RCADVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RCAProtocol(guiObject, index);
 
   setPreData(0x5, 4);
@@ -357,11 +426,23 @@ RCADVD1::RCADVD1(
 
 
 RCADVD1a::RCADVD1a(
-  QObject *guiObject,
   unsigned int index)
-  : RCADVD1(guiObject, index)
+  : RCADVD1(index)
 {
   setKeysetName("DVD Keyset 1a");
+}
+
+
+void RCADVD1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  RCADVD1::populateProtocol(guiObject);
 
   addKey("dvd_ch+", ChannelUp_Key, 0x20, 8);
   addKey("dvd_ch-", ChannelDown_Key, 0x22, 8);
@@ -369,13 +450,24 @@ RCADVD1a::RCADVD1a(
 
 
 RCASat1::RCASat1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Satellite(DirecTV) Keyset 1",
       RCA_Make,
       index)
 {
+}
+
+
+void RCASat1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RCAProtocol(guiObject, index);
 
   setPreData(0x7, 4);
@@ -424,13 +516,24 @@ RCASat1::RCASat1(
 
 
 RCASat2::RCASat2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Satellite (Dish Network) Keyset 2",
       RCA_Make,
       index)
 {
+}
+
+
+void RCASat2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
index 68b00c0..9d49cbf 100644 (file)
@@ -9,24 +9,30 @@ class RCATV1: public PIRKeysetMetaData
 {
 public:
   RCATV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RCATV1a: public RCATV1
 {
 public:
   RCATV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RCATV1b: public RCATV1
 {
 public:
   RCATV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 /*
@@ -59,48 +65,60 @@ class RCAVCR1: public PIRKeysetMetaData
 {
 public:
   RCAVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RCAVCR1a: public RCAVCR1
 {
 public:
   RCAVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RCADVD1: public PIRKeysetMetaData
 {
 public:
   RCADVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RCADVD1a: public RCADVD1
 {
 public:
   RCADVD1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RCASat1: public PIRKeysetMetaData
 {
 public:
   RCASat1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RCASat2: public PIRKeysetMetaData
 {
 public:
   RCASat2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // RCA_H
index 068a92a..445f051 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/necprotocol.h"
 
 RokuBox1::RokuBox1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Settop Box Keyset 1",
       Roku_Make,
       index)
 {
+}
+
+
+void RokuBox1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, false);
 
   setPreData(0xEFBE, 16);
@@ -27,13 +38,24 @@ RokuBox1::RokuBox1(
 
 
 RokuBox2::RokuBox2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Soundbridge Keyset 1",
       Roku_Make,
       index)
 {
+}
+
+
+void RokuBox2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
   setPreData(0x6F, 8);
index 9e312c9..f1a5b42 100644 (file)
@@ -9,16 +9,20 @@ class RokuBox1: public PIRKeysetMetaData
 {
 public:
   RokuBox1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class RokuBox2: public PIRKeysetMetaData
 {
 public:
   RokuBox2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // ROKU_H
index d0be389..c90e6a7 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/thomsonprotocol.h"
 
 SabaTV1::SabaTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV/VCR Keyset 1",
       Saba_Make,
       index)
 {
+}
+
+
+void SabaTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new ThomsonProtocol(guiObject, index);
 
   setPreData(0x0, 4);
@@ -54,13 +65,24 @@ SabaTV1::SabaTV1(
 
 
 SabaTV2::SabaTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 2",
       Saba_Make,
       index)
 {
+}
+
+
+void SabaTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new ThomsonProtocol(guiObject, index);
 
   setPreData(0x3, 4);
index bea56bc..5bc83cc 100644 (file)
@@ -9,16 +9,20 @@ class SabaTV1: public PIRKeysetMetaData
 {
 public:
   SabaTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SabaTV2: public PIRKeysetMetaData
 {
 public:
   SabaTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // SABA_H
index 270b3cc..8f534a8 100644 (file)
@@ -2,13 +2,24 @@
 #include "protocols/necprotocol.h"
 
 SagemTVBox1::SagemTVBox1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVB-T/Cable Box Keyset 1",
       Sagem_Make,
       index)
 {
+}
+
+
+void SagemTVBox1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
 //  setPreData(0xE17A, 16);
@@ -56,11 +67,23 @@ SagemTVBox1::SagemTVBox1(
 
 
 SagemTVBox1a::SagemTVBox1a(
-  QObject *guiObject,
   unsigned int index)
-  : SagemTVBox1(guiObject, index)
+  : SagemTVBox1(index)
 {
   setKeysetName("DVB-T/Cable Box Keyset 1a");
+}
+
+
+void SagemTVBox1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SagemTVBox1::populateProtocol(guiObject);
 
   addKey("tria2", Unmapped_Key, 0x0F, 8);
   addKey("epg", Guide_Key, 0x11, 8);
index 84142c5..90db9d0 100644 (file)
@@ -9,16 +9,20 @@ class SagemTVBox1: public PIRKeysetMetaData
 {
 public:
   SagemTVBox1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SagemTVBox1a: public SagemTVBox1
 {
 public:
   SagemTVBox1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // SAGEM_H
index 9ae5112..f1ddbb8 100644 (file)
@@ -4,7 +4,6 @@
 #include "protocols/rc5protocol.h"
 
 SamsungTV1::SamsungTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
@@ -15,6 +14,17 @@ SamsungTV1::SamsungTV1(
   addControlledDevice(Samsung_Make, "SyncMaster 225MW", TV_Device);
   addControlledDevice(Samsung_Make, "LN32C530F1FXZA", TV_Device);
   addControlledDevice(Samsung_Make, "UE46B6000VPXZG", TV_Device); // ?
+}
+
+
+void SamsungTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new SamsungProtocol(guiObject, index);
 
@@ -102,11 +112,23 @@ SamsungTV1::SamsungTV1(
 
 
 SamsungTV1a::SamsungTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungTV1(guiObject, index)
+  : SamsungTV1(index)
 {
   setKeysetName("TV Keyset 1a");
+}
+
+
+void SamsungTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungTV1::populateProtocol(guiObject);
 
   addKey("turbo", Unmapped_Key, 0x13, 8);
   addKey("s.menu", SoundMode_Key, 0x14, 8);
@@ -116,13 +138,25 @@ SamsungTV1a::SamsungTV1a(
 
 
 SamsungTV1b::SamsungTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungTV1(guiObject, index)
+  : SamsungTV1(index)
 {
   setKeysetName("TV Keyset 1b");
 
   addControlledDevice(Samsung_Make, "LE46M51B (R)", TV_Device); // ?
+}
+
+
+void SamsungTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungTV1::populateProtocol(guiObject);
 
   addKey("Red", Red_Key, 0x21, 8);
   addKey("Exit", Exit_Key, 0x2C, 8);
@@ -130,11 +164,23 @@ SamsungTV1b::SamsungTV1b(
 
 
 SamsungTV1c::SamsungTV1c(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungTV1(guiObject, index)
+  : SamsungTV1(index)
 {
   setKeysetName("TV Keyset 1c");
+}
+
+
+void SamsungTV1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungTV1::populateProtocol(guiObject);
 
   // Some remotes apparently use channel and volume keys for navigation:
   addKey("right", Right_Key, 0x07, 8);
@@ -146,22 +192,46 @@ SamsungTV1c::SamsungTV1c(
 
 
 SamsungTV1d::SamsungTV1d(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungTV1(guiObject, index)
+  : SamsungTV1(index)
 {
   setKeysetName("TV Keyset 1d");
+}
+
+
+void SamsungTV1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungTV1::populateProtocol(guiObject);
 
   addKey("turbo", Unmapped_Key, 0x64, 8);
 }
 
 
 SamsungTV1e::SamsungTV1e(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungTV1(guiObject, index)
+  : SamsungTV1(index)
 {
   setKeysetName("TV Keyset 1e");
+}
+
+
+void SamsungTV1e::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungTV1::populateProtocol(guiObject);
 
   addKey("p.mode", PictureMode_Key, 0x16, 8);
 }
@@ -169,11 +239,23 @@ SamsungTV1e::SamsungTV1e(
 
 // This one overrides the color keys:
 SamsungTV1f::SamsungTV1f(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungTV1(guiObject, index)
+  : SamsungTV1(index)
 {
   setKeysetName("TV Keyset 1f");
+}
+
+
+void SamsungTV1f::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungTV1::populateProtocol(guiObject);
 
   addKey("p-mode", PictureMode_Key, 0x6C, 8);
   addKey("s-mode", SoundMode_Key, 0x14, 8);
@@ -184,13 +266,24 @@ SamsungTV1f::SamsungTV1f(
 
 // Not sure that this even is a Samsung TV...
 SamsungTV2::SamsungTV2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 2",
       Samsung_Make,
       index)
 {
+}
+
+
+void SamsungTV2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new RC5Protocol(guiObject, index);
 
   addKey("1", One_Key, 0x1001, 13);
@@ -233,11 +326,23 @@ SamsungTV2::SamsungTV2(
 
 
 SamsungTV2a::SamsungTV2a(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungTV2(guiObject, index)
+  : SamsungTV2(index)
 {
   setKeysetName("TV Keyset 2a");
+}
+
+
+void SamsungTV2a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungTV2::populateProtocol(guiObject);
 
   addKey("volume+", VolumeUp_Key, 0x1010, 13);
   addKey("volume-", VolumeDown_Key, 0x1011, 13);
@@ -247,13 +352,24 @@ SamsungTV2a::SamsungTV2a(
 
 
 SamsungVCR1::SamsungVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "VCR(DVD) Keyset 1",
       Samsung_Make,
       index)
 {
+}
+
+
+void SamsungVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new SamsungProtocol(guiObject, index);
 
 //  setPreData(0xA0A0, 16);
@@ -322,11 +438,23 @@ SamsungVCR1::SamsungVCR1(
 
 
 SamsungVCR1a::SamsungVCR1a(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungVCR1(guiObject, index)
+  : SamsungVCR1(index)
 {
   setKeysetName("VCR(DVD) Keyset 1a");
+}
+
+
+void SamsungVCR1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungVCR1::populateProtocol(guiObject);
 
   addKey("right", Right_Key, 0x13, 8);
   addKey("left", Left_Key, 0x17, 8);
@@ -347,11 +475,23 @@ SamsungVCR1a::SamsungVCR1a(
 
 
 SamsungVCR1b::SamsungVCR1b(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungVCR1(guiObject, index)
+  : SamsungVCR1(index)
 {
   setKeysetName("VCR(DVD) Keyset 1b");
+}
+
+
+void SamsungVCR1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungVCR1::populateProtocol(guiObject);
 
   addKey("audio", Audio_Key, 0x22, 8); // "output"
   addKey("+", Unmapped_Key, 0x26, 8);
@@ -368,13 +508,25 @@ SamsungVCR1b::SamsungVCR1b(
 
 
 SamsungVCR1c::SamsungVCR1c(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungVCR1a(guiObject, index)
+  : SamsungVCR1a(index)
 {
+  setKeysetName("VCR(DVD) Keyset 1c");
+
   addControlledDevice(Samsung_Make, "DVD-V1000", DVD_Device);
+}
 
-  setKeysetName("VCR(DVD) Keyset 1c");
+
+void SamsungVCR1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungVCR1a::populateProtocol(guiObject);
 
   addKey("right", Right_Key, 0x00, 8);
   addKey("up", Up_Key, 0x1E, 8);
@@ -391,15 +543,27 @@ SamsungVCR1c::SamsungVCR1c(
 
 
 SamsungVCR1d::SamsungVCR1d(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungVCR1(guiObject, index)
+  : SamsungVCR1(index)
 {
   // Combo VCR/TV:
   addControlledDevice(Samsung_Make, "CXD1342", TV_Device);
   addControlledDevice(Samsung_Make, "CXD1342", VCR_Device);
 
   setKeysetName("VCR/TV Combo Keyset 1d");
+}
+
+
+void SamsungVCR1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungVCR1::populateProtocol(guiObject);
 
   addKey("VOL+", VolumeUp_Key, 0x07, 8);
   addKey("VOL-", VolumeDown_Key, 0x0B, 8);
@@ -413,11 +577,23 @@ SamsungVCR1d::SamsungVCR1d(
 
 
 SamsungVCR1e::SamsungVCR1e(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungVCR1(guiObject, index)
+  : SamsungVCR1(index)
 {
   setKeysetName("VCR(DVD) Keyset 1e");
+}
+
+
+void SamsungVCR1e::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungVCR1::populateProtocol(guiObject);
 
   addKey("DIGEST", Unmapped_Key, 0x00, 8);
   addKey("RIGHT", Right_Key, 0x13, 8);
@@ -445,13 +621,24 @@ SamsungVCR1e::SamsungVCR1e(
 
 
 SamsungDVD1::SamsungDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
       Samsung_Make,
       index)
 {
+}
+
+
+void SamsungDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
@@ -525,22 +712,46 @@ SamsungDVD1::SamsungDVD1(
 
 
 SamsungDVD1a::SamsungDVD1a(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungDVD1(guiObject, index)
+  : SamsungDVD1(index)
 {
   setKeysetName("DVD Keyset 1a");
+}
+
+
+void SamsungDVD1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungDVD1::populateProtocol(guiObject);
 
   addKey("hdmi_sel", Unmapped_Key, 0x15EA, 16);
 }
 
 
 SamsungDVD1b::SamsungDVD1b(
-  QObject *guiObject,
   unsigned int index)
-  : SamsungDVD1(guiObject, index)
+  : SamsungDVD1(index)
 {
   setKeysetName("DVD Keyset 1b");
+}
+
+
+void SamsungDVD1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SamsungDVD1::populateProtocol(guiObject);
 
   addKey("Zoom", Zoom_Key, 0x55AA, 16);
   addKey("i.replay", Replay_Key, 0xB54A, 16);
@@ -549,7 +760,6 @@ SamsungDVD1b::SamsungDVD1b(
 
 
 SamsungDVD2::SamsungDVD2(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 2",
@@ -557,6 +767,17 @@ SamsungDVD2::SamsungDVD2(
       index)
 {
   addControlledDevice(Samsung_Make, "HT-P1200", DVD_Device);
+}
+
+
+void SamsungDVD2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol= new SamsungProtocol(guiObject, index);
 
@@ -621,13 +842,24 @@ SamsungDVD2::SamsungDVD2(
 
 
 SamsungAC1::SamsungAC1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Air Conditioner Keyset 1",
       Samsung_Make,
       index)
 {
+}
+
+
+void SamsungAC1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   LIRCProtocol *lp = new LIRCProtocol(
     guiObject,
     index,
@@ -660,7 +892,6 @@ SamsungAC1::SamsungAC1(
 
 
 SamsungDVBT1::SamsungDVBT1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVB-T Receiver Keyset 1",
@@ -669,6 +900,17 @@ SamsungDVBT1::SamsungDVBT1(
 {
   addControlledDevice(Samsung_Make, "SMT-1000T", TV_Device);
   addControlledDevice(Samsung_Make, "SMT-1100T", TV_Device);
+}
+
+
+void SamsungDVBT1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
index 27d7014..761be7f 100644 (file)
@@ -9,8 +9,10 @@ class SamsungTV1: public PIRKeysetMetaData
 {
 public:
   SamsungTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -18,8 +20,10 @@ class SamsungTV1a: public SamsungTV1
 {
 public:
   SamsungTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -27,8 +31,10 @@ class SamsungTV1b: public SamsungTV1
 {
 public:
   SamsungTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -36,8 +42,10 @@ class SamsungTV1c: public SamsungTV1
 {
 public:
   SamsungTV1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -45,8 +53,10 @@ class SamsungTV1d: public SamsungTV1
 {
 public:
   SamsungTV1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -54,8 +64,10 @@ class SamsungTV1e: public SamsungTV1
 {
 public:
   SamsungTV1e(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -63,8 +75,10 @@ class SamsungTV1f: public SamsungTV1
 {
 public:
   SamsungTV1f(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -72,24 +86,30 @@ class SamsungTV2: public PIRKeysetMetaData
 {
 public:
   SamsungTV2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungTV2a: public SamsungTV2
 {
 public:
   SamsungTV2a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungVCR1: public PIRKeysetMetaData
 {
 public:
   SamsungVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 
@@ -97,88 +117,110 @@ class SamsungVCR1a: public SamsungVCR1
 {
 public:
   SamsungVCR1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungVCR1b: public SamsungVCR1
 {
 public:
   SamsungVCR1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungVCR1c: public SamsungVCR1a
 {
 public:
   SamsungVCR1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungVCR1d: public SamsungVCR1
 {
 public:
   SamsungVCR1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungVCR1e: public SamsungVCR1
 {
 public:
   SamsungVCR1e(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungDVD1: public PIRKeysetMetaData
 {
 public:
   SamsungDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungDVD1a: public SamsungDVD1
 {
 public:
   SamsungDVD1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungDVD1b: public SamsungDVD1
 {
 public:
   SamsungDVD1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungDVD2: public PIRKeysetMetaData
 {
 public:
   SamsungDVD2(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungAC1: public PIRKeysetMetaData
 {
 public:
   SamsungAC1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SamsungDVBT1: public PIRKeysetMetaData
 {
 public:
   SamsungDVBT1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // SAMSUNG_H
index 48c440e..23a5957 100644 (file)
@@ -3,7 +3,6 @@
 #include "protocols/necprotocol.h"
 
 SanyoVCR1::SanyoVCR1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD/VCR Keyset 1",
@@ -12,6 +11,17 @@ SanyoVCR1::SanyoVCR1(
 {
   addControlledDevice(Sanyo_Make, "DVW-5000", VCR_Device);
   addControlledDevice(Sanyo_Make, "DVW-5000", DVD_Device);
+}
+
+
+void SanyoVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
@@ -67,7 +77,6 @@ SanyoVCR1::SanyoVCR1(
 
 
 SanyoDVD1::SanyoDVD1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "DVD Keyset 1",
@@ -75,6 +84,17 @@ SanyoDVD1::SanyoDVD1(
       index)
 {
   addControlledDevice(Sanyo_Make, "DVD-SL25", DVD_Device);
+}
+
+
+void SanyoDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, true, true);
 
@@ -129,13 +149,24 @@ SanyoDVD1::SanyoDVD1(
 
 
 SanyoTV1::SanyoTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Sanyo_Make,
       index)
 {
+}
+
+
+void SanyoTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
 //  setPreData(0x1CE3, 16);
@@ -208,9 +239,8 @@ SanyoTV1::SanyoTV1(
 
 
 SanyoTV1a::SanyoTV1a(
-  QObject *guiObject,
   unsigned int index)
-  : SanyoTV1(guiObject, index)
+  : SanyoTV1(index)
 {
   setKeysetName("TV Keyset 1a");
 
@@ -222,6 +252,19 @@ SanyoTV1a::SanyoTV1a(
 //  addControlledDevice(Sanyo_Make, "CED3011PV", TV_Device);
 //  addControlledDevice(Sanyo_Make, "CEM6011PV", TV_Device);
 //  addControlledDevice(Sanyo_Make, "DP32746", TV_Device);
+}
+
+
+void SanyoTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SanyoTV1::populateProtocol(guiObject);
 
   addKey("-/--", DoubleDigit_Key, 0x0A, 8);
   addKey("CS", Unmapped_Key, 0x0B, 8); // 2-
@@ -255,11 +298,23 @@ SanyoTV1a::SanyoTV1a(
 
 
 SanyoTV1b::SanyoTV1b(
-  QObject *guiObject,
   unsigned int index)
-  : SanyoTV1(guiObject, index)
+  : SanyoTV1(index)
 {
   setKeysetName("TV Keyset 1b");
+}
+
+
+void SanyoTV1b::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SanyoTV1::populateProtocol(guiObject);
 
   addKey("image", PictureMode_Key, 0x11, 8);
   addKey("TV", Unmapped_Key, 0x14, 8); // "tv/video"?
@@ -268,11 +323,23 @@ SanyoTV1b::SanyoTV1b(
 
 
 SanyoTV1c::SanyoTV1c(
-  QObject *guiObject,
   unsigned int index)
-  : SanyoTV1a(guiObject, index)
+  : SanyoTV1a(index)
 {
   setKeysetName("TV Keyset 1c");
+}
+
+
+void SanyoTV1c::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SanyoTV1a::populateProtocol(guiObject);
 
   addKey("contrast_>", ContrastUp_Key, 0x0E, 8);
   addKey("contrast_<", ContrastDown_Key, 0x0F, 8);
@@ -288,13 +355,25 @@ SanyoTV1c::SanyoTV1c(
 
 
 SanyoTV1d::SanyoTV1d(
-  QObject *guiObject,
   unsigned int index)
-  : SanyoTV1(guiObject, index)
+  : SanyoTV1(index)
 {
   setKeysetName("TV Keyset 1d");
 
   addControlledDevice(Sanyo_Make, "CTP-6791P", TV_Device);
+}
+
+
+void SanyoTV1d::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
+
+  SanyoTV1::populateProtocol(guiObject);
 
   addKey("audio_mode", SoundMode_Key, 0x1C, 8); // "auto"
   addKey("Digicon", PictureMode_Key, 0x1D, 8);
@@ -304,7 +383,6 @@ SanyoTV1d::SanyoTV1d(
 
 
 SanyoProjector::SanyoProjector(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "Projector Keyset 1",
@@ -312,6 +390,17 @@ SanyoProjector::SanyoProjector(
       index)
 {
   addControlledDevice(Sanyo_Make, "PLV-Z1", Other_Device);
+}
+
+
+void SanyoProjector::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must already be populated.
+    return;
+  }
 
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
index d155d1c..a609fc5 100644 (file)
@@ -9,64 +9,80 @@ class SanyoVCR1: public PIRKeysetMetaData
 {
 public:
   SanyoVCR1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SanyoDVD1: public PIRKeysetMetaData
 {
 public:
   SanyoDVD1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SanyoTV1: public PIRKeysetMetaData
 {
 public:
   SanyoTV1(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SanyoTV1a: public SanyoTV1
 {
 public:
   SanyoTV1a(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SanyoTV1b: public SanyoTV1
 {
 public:
   SanyoTV1b(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SanyoTV1c: public SanyoTV1a
 {
 public:
   SanyoTV1c(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SanyoTV1d: public SanyoTV1
 {
 public:
   SanyoTV1d(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 class SanyoProjector: public PIRKeysetMetaData
 {
 public:
   SanyoProjector(
-    QObject *guiObject,
     unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
 };
 
 #endif // SANYO_H
index 3c75da1..cdcd61b 100644 (file)
@@ -3,13 +3,24 @@
 #include "protocols/necprotocol.h"
 
 SharpTV1::SharpTV1(
-  QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
       "TV Keyset 1",
       Sharp_Make,
       index)
 {
+}
+
+
+void SharpTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // If the pointer is not null, the keyset must alrea