Adding Macros!
[pierogi] / pirkeysetmanager.cpp
index 403318b..5730ce2 100644 (file)
@@ -1,25 +1,35 @@
 #include "pirkeysetmanager.h"
 
+#include <QSettings>
+
 #include "pirkeysetmetadata.h"
 #include "pirselectkeysetform.h"
 #include "pirkeysetwidgetitem.h"
+#include "dialogs/pirfavoritesdialog.h"
 
 #include "keysets/acer.h"
+#include "keysets/adb.h"
 #include "keysets/admiral.h"
 #include "keysets/aiwa.h"
+#include "keysets/anitech.h"
 #include "keysets/aoc.h"
 #include "keysets/apple.h"
 #include "keysets/arcam.h"
 #include "keysets/beko.h"
 #include "keysets/benq.h"
+#include "keysets/blaupunkt.h"
 #include "keysets/bose.h"
 #include "keysets/bush.h"
 #include "keysets/cambridge.h"
 #include "keysets/canon.h"
+#include "keysets/cisco.h"
 #include "keysets/compro.h"
+#include "keysets/creative.h"
+#include "keysets/crown.h"
 #include "keysets/daewoo.h"
 #include "keysets/dell.h"
 #include "keysets/denon.h"
+#include "keysets/deutschetelekom.h"
 #include "keysets/digitalstream.h"
 #include "keysets/directv.h"
 #include "keysets/dish.h"
 #include "keysets/ei.h"
 #include "keysets/elgato.h"
 #include "keysets/emerson.h"
+#include "keysets/emtec.h"
 #include "keysets/epson.h"
 #include "keysets/fortec.h"
 #include "keysets/foxtel.h"
+#include "keysets/gadmei.h"
 #include "keysets/genius.h"
 #include "keysets/goldstar.h"
+#include "keysets/goodmans.h"
 #include "keysets/grundig.h"
 #include "keysets/haier.h"
 #include "keysets/harmankardon.h"
 #include "keysets/huawei.h"
 #include "keysets/humax.h"
 #include "keysets/hyundai.h"
+#include "keysets/irobot.h"
 #include "keysets/jvc.h"
 #include "keysets/kaon.h"
 #include "keysets/kathrein.h"
 #include "keysets/kenwood.h"
 #include "keysets/lexuz.h"
 #include "keysets/lg.h"
+#include "keysets/lifetec.h"
+#include "keysets/loewe.h"
 #include "keysets/logitech.h"
 #include "keysets/magnavox.h"
 #include "keysets/magnum.h"
 #include "keysets/mce.h"
+#include "keysets/medion.h"
 #include "keysets/mitsubishi.h"
 #include "keysets/motorola.h"
 #include "keysets/nad.h"
+#include "keysets/nikon.h"
 #include "keysets/nokia.h"
 #include "keysets/octagon.h"
+#include "keysets/olympus.h"
 #include "keysets/onida.h"
+#include "keysets/onkyo.h"
+#include "keysets/orion.h"
 #include "keysets/panasonic.h"
+#include "keysets/pentax.h"
 #include "keysets/philco.h"
 #include "keysets/philips.h"
 #include "keysets/pinnacle.h"
 #include "keysets/pioneer.h"
+#include "keysets/proview.h"
 #include "keysets/qnap.h"
 #include "keysets/raite.h"
 #include "keysets/rca.h"
 #include "keysets/sky.h"
 #include "keysets/sony.h"
 #include "keysets/starsat.h"
+#include "keysets/strong.h"
+#include "keysets/sylvania.h"
 #include "keysets/technics.h"
+#include "keysets/technisat.h"
+#include "keysets/telefunken.h"
 #include "keysets/telenet.h"
 #include "keysets/thomson.h"
 #include "keysets/tivo.h"
 #include "keysets/topfield.h"
 #include "keysets/toshiba.h"
+#include "keysets/triax.h"
 #include "keysets/united.h"
 #include "keysets/universum.h"
 #include "keysets/vestel.h"
 #include "keysets/viewsat.h"
+#include "keysets/viewsonic.h"
 #include "keysets/virgin.h"
 #include "keysets/vizio.h"
 #include "keysets/wd.h"
 
 #include "pirexception.h"
 
-// I'll be handling the threading of the keyset commands in this object:
+// Need mutex for thread support:
 #include <QMutex>
 
+// Debugging includes:
+#include <iostream>
+
 // Global communications mechanism:
 extern bool stopRepeatingFlag;
 extern QMutex stopRepeatingMutex;
@@ -116,6 +148,11 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new AcerTV1(++counter));
   setupKeyset(new AcerPC1(++counter));
 
+  setupKeyset(new ADBSTB1(++counter));
+  setupKeyset(new ADBSTB2(++counter));
+  setupKeyset(new ADBSTB3(++counter));
+  setupKeyset(new ADBSTB4(++counter));
+
   setupKeyset(new AdmiralTV1(++counter));
   setupKeyset(new AdmiralTV2(++counter));
   setupKeyset(new AdmiralVCR1(++counter));
@@ -136,6 +173,9 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new AiwaCarStereo1(++counter));
   setupKeyset(new AiwaDVD1(++counter));
 
+  setupKeyset(new AnitechTV1(++counter));
+  setupKeyset(new AnitechVCR1(++counter));
+
   setupKeyset(new AOCTV1(++counter));
 
   setupKeyset(new AppleWhiteRemote(++counter));
@@ -146,6 +186,8 @@ PIRKeysetManager::PIRKeysetManager()
 
   setupKeyset(new BenQTV1(++counter));
 
+  setupKeyset(new BlaupunktVCR1(++counter));
+
   setupKeyset(new BoseRadio1(++counter));
   setupKeyset(new BoseRadio2(++counter));
   setupKeyset(new BoseRadio3(++counter));
@@ -165,8 +207,20 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new CanonCamcorder1(++counter));
   setupKeyset(new CanonPowershot1(++counter));
 
+  setupKeyset(new CiscoSTB1(++counter));
+  setupKeyset(new CiscoSTB2(++counter));
+  setupKeyset(new CiscoSTB3(++counter));
+
   setupKeyset(new ComproTVCard1(++counter));
 
+  setupKeyset(new CreativeAudio1(++counter));
+  setupKeyset(new CreativeAudio2(++counter));
+  setupKeyset(new CreativeAudio3(++counter));
+  setupKeyset(new CreativeAudio4(++counter));
+
+  setupKeyset(new CrownTV1(++counter));
+  setupKeyset(new CrownAudio1(++counter));
+
   setupKeyset(new DaewooTV1(++counter));
   setupKeyset(new DaewooTV2(++counter));
   setupKeyset(new DaewooTV3(++counter));
@@ -200,6 +254,8 @@ PIRKeysetManager::PIRKeysetManager()
 
   setupKeyset(new DellRemote1(++counter));
 
+//  setupKeyset(new DeutscheTelekomSTB1(++counter));
+
   setupKeyset(new DigitalStreamReceiver(++counter));
 
   setupKeyset(new DirectvReceiver1(++counter));
@@ -247,6 +303,9 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new EmersonTV1(++counter));
   setupKeyset(new EmersonDVD1(++counter));
 
+  setupKeyset(new EmtecSTB1(++counter));
+  setupKeyset(new EmtecSTB2(++counter));
+
   setupKeyset(new EpsonProjector1(++counter));
   setupKeyset(new EpsonProjector2(++counter));
 
@@ -256,6 +315,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new FoxtelSTB1(++counter));
   setupKeyset(new FoxtelSTB2(++counter));
 
+  setupKeyset(new GadmeiTuner1(++counter));
+
   setupKeyset(new GeniusSpeakers1(++counter));
 
   setupKeyset(new GoldStarTV1(++counter));
@@ -266,6 +327,11 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new GoldStarVCR1c(++counter));
   setupKeyset(new GoldStarCD1(++counter));
 
+  setupKeyset(new GoodmansSTB1(++counter));
+  setupKeyset(new GoodmansVCR1(++counter));
+  setupKeyset(new GoodmansDVD1(++counter));
+  setupKeyset(new GoodmansAudio1(++counter));
+
   setupKeyset(new GrundigSat1(++counter));
   setupKeyset(new GrundigSat2(++counter));
   setupKeyset(new GrundigSat3(++counter));
@@ -277,6 +343,7 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new GrundigTV1(++counter));
   setupKeyset(new GrundigTV2(++counter));
   setupKeyset(new GrundigTV3(++counter));
+  setupKeyset(new GrundigTV4(++counter));
   setupKeyset(new GrundigDVD1(++counter));
 
   setupKeyset(new HaierTV1(++counter));
@@ -323,6 +390,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new HyundaiAudio1(++counter));
   setupKeyset(new HyundaiTV1(++counter));
 
+  setupKeyset(new IRobotRoomba1(++counter));
+
   setupKeyset(new JVCSat1(++counter));
   setupKeyset(new JVCSat2(++counter));
   setupKeyset(new JVCVCR1(++counter));
@@ -373,6 +442,15 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new LGVCR1b(++counter));
   setupKeyset(new LGAC1(++counter));
 
+  setupKeyset(new LifetecTV1(++counter));
+  setupKeyset(new LifetecTV2(++counter));
+  setupKeyset(new LifetecVCR1(++counter));
+  setupKeyset(new LifetecAudio1(++counter));
+
+  setupKeyset(new LoeweTV1(++counter));
+  setupKeyset(new LoeweVCR1(++counter));
+  setupKeyset(new LoeweDVD1(++counter));
+
   setupKeyset(new LogitechSpeakers(++counter));
   setupKeyset(new LogitechSqueezebox(++counter));
 
@@ -392,6 +470,11 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new MCERemote1f(++counter));
   setupKeyset(new MCERemote1g(++counter));
 
+  setupKeyset(new MedionSTB1(++counter));
+  setupKeyset(new MedionDVD1(++counter));
+  setupKeyset(new MedionDVD2(++counter));
+  setupKeyset(new MedionVCR1(++counter));
+
   setupKeyset(new MitsubishiTV1(++counter));
   setupKeyset(new MitsubishiTV1a(++counter));
   setupKeyset(new MitsubishiVCR1(++counter));
@@ -410,15 +493,35 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new NADCD2(++counter));
   setupKeyset(new NADTape1(++counter));
 
+  setupKeyset(new NikonDSLR1(++counter));
+
   setupKeyset(new NokiaGenericVCR(++counter));
 
   setupKeyset(new OctagonSat1(++counter));
   setupKeyset(new OctagonSat1a(++counter));
   setupKeyset(new OctagonSat2(++counter));
 
+  setupKeyset(new OlympusCamera1(++counter));
+
   setupKeyset(new OnidaTV1(++counter));
   setupKeyset(new OnidaDVD1(++counter));
 
+  setupKeyset(new OnkyoAudio1(++counter));
+  setupKeyset(new OnkyoAudio2(++counter));
+  setupKeyset(new OnkyoAudio2a(++counter));
+  setupKeyset(new OnkyoAudio3(++counter));
+  setupKeyset(new OnkyoAudio4(++counter));
+  setupKeyset(new OnkyoAudio5(++counter));
+  setupKeyset(new OnkyoDVD1(++counter));
+  setupKeyset(new OnkyoDVD2(++counter));
+
+  setupKeyset(new OrionTV1(++counter));
+  setupKeyset(new OrionTV2(++counter));
+  setupKeyset(new OrionTV3(++counter));
+  setupKeyset(new OrionVCR1(++counter));
+  setupKeyset(new OrionVCR2(++counter));
+  setupKeyset(new OrionDVD1(++counter));
+
   setupKeyset(new PanasonicCarAudio(++counter));
   setupKeyset(new PanasonicSat1(++counter));
   setupKeyset(new PanasonicSat1a(++counter));
@@ -436,6 +539,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new PanasonicAudio2a(++counter));
   setupKeyset(new PanasonicAC1(++counter));
 
+  setupKeyset(new PentaxCamera1(++counter));
+
   setupKeyset(new PhilcoTV(++counter));
 
   setupKeyset(new PhilipsTV1(++counter));
@@ -490,6 +595,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new PioneerLaserDisc1(++counter));
   setupKeyset(new PioneerDVD1(++counter));
 
+  setupKeyset(new ProviewDVD1(++counter));
+
   setupKeyset(new QNAPPlayer1(++counter));
 
   setupKeyset(new RaiteDVD1(++counter));
@@ -573,6 +680,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new SonyDVD1a(++counter));
   setupKeyset(new SonyDVD1b(++counter));
   setupKeyset(new SonyDVD1c(++counter));
+  setupKeyset(new SonyDVD2(++counter));
+  setupKeyset(new SonyDVD2a(++counter));
   setupKeyset(new SonyVCR1(++counter));
   setupKeyset(new SonyVCR1a(++counter));
   setupKeyset(new SonyVCR1b(++counter));
@@ -580,9 +689,18 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new SonyCD1(++counter));
   setupKeyset(new SonyCD1a(++counter));
   setupKeyset(new SonyCD1b(++counter));
+  setupKeyset(new SonyProjector1(++counter));
+  setupKeyset(new SonyProjector1a(++counter));
 
   setupKeyset(new StarsatSat1(++counter));
 
+  setupKeyset(new StrongSat1(++counter));
+  setupKeyset(new StrongSat2(++counter));
+  setupKeyset(new StrongSat3(++counter));
+  setupKeyset(new StrongSat4(++counter));
+
+  setupKeyset(new SylvaniaTV1(++counter));
+
   setupKeyset(new TechnicsAudio1(++counter));
   setupKeyset(new TechnicsAudio1a(++counter));
   setupKeyset(new TechnicsAudio2(++counter));
@@ -590,6 +708,16 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new TechnicsAudio3a(++counter));
   setupKeyset(new TechnicsDVD1(++counter));
 
+  setupKeyset(new TechnisatSTB1(++counter));
+  setupKeyset(new TechnisatSTB1a(++counter));
+  setupKeyset(new TechnisatSTB2(++counter));
+  setupKeyset(new TechnisatSTB2a(++counter));
+  setupKeyset(new TechnisatSTB3(++counter));
+  setupKeyset(new TechnisatSTB3a(++counter));
+
+  setupKeyset(new TelefunkenTV1(++counter));
+  setupKeyset(new TelefunkenTV1a(++counter));
+
   setupKeyset(new TelenetSTB1(++counter));
 
   setupKeyset(new ThomsonConverter1(++counter));
@@ -618,6 +746,7 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new ToshibaTV1f(++counter));
   setupKeyset(new ToshibaTV1g(++counter));
   setupKeyset(new ToshibaTV1h(++counter));
+  setupKeyset(new ToshibaTV1i(++counter));
   setupKeyset(new ToshibaVCR1(++counter));
   setupKeyset(new ToshibaVCR1a(++counter));
   setupKeyset(new ToshibaDisc1(++counter));
@@ -626,6 +755,11 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new ToshibaDisc1c(++counter));
   setupKeyset(new ToshibaDisc1d(++counter));
 
+  setupKeyset(new TriaxSTB1(++counter));
+  setupKeyset(new TriaxSTB2(++counter));
+  setupKeyset(new TriaxSTB2a(++counter));
+//  setupKeyset(new TriaxSTB2b(++counter));
+
   setupKeyset(new UnitedDVD1(++counter));
   setupKeyset(new UnitedDVBT1(++counter));
 
@@ -643,6 +777,9 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new ViewsatSat1(++counter));
   setupKeyset(new ViewsatSat1a(++counter));
 
+  setupKeyset(new ViewsonicProjector1(++counter));
+  setupKeyset(new ViewsonicProjector2(++counter));
+
   setupKeyset(new VirginSTB1(++counter));
 
   setupKeyset(new VizioTV1(++counter));
@@ -670,7 +807,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new YamahaTV1(++counter));
   setupKeyset(new YamahaKaraoke1(++counter));
 
-  setupKeyset(new ZenithC32V37(++counter));
+  setupKeyset(new ZenithTV1(++counter));
+  setupKeyset(new ZenithConverterBox1(++counter));
 
   // Start the thread running:
   commandThread.start();
@@ -750,7 +888,7 @@ PIRKeysetWidgetItem *PIRKeysetManager::makeKeysetItem(
   fullname.append(" ");
   fullname.append(name);
 
-  return new PIRKeysetWidgetItem(fullname, id, getMake(id));
+  return new PIRKeysetWidgetItem(fullname, name, id, getMake(id));
 }
 
 
@@ -806,6 +944,20 @@ void PIRKeysetManager::populateKeyset(
 }
 
 
+void PIRKeysetManager::clearKeyset(
+  unsigned int keysetID)
+{
+  PIRKeysetCollection::iterator i = keysetsInfo.find(keysetID);
+
+  if (i == keysetsInfo.end())
+  {
+    return; // should throw error or something
+  }
+
+  i->second->clearProtocol();
+}
+
+
 void PIRKeysetManager::setupKeyset(
   PIRKeysetMetaData *keyset)
 {
@@ -820,22 +972,111 @@ void PIRKeysetManager::setupKeyset(
 }
 
 
-void PIRKeysetManager::populateSelectionWidget(
-  PIRSelectKeysetForm *skf) const
+struct PIRUserData
 {
-  PIRMakeName make;
+  bool favorite;
+  QString nickname;
+};
+typedef std::map<QString, PIRUserData> PIRUDInnerMap;
+typedef std::map<int, PIRUDInnerMap> PIRUDOuterMap;
+
+void PIRKeysetManager::populateListWidgets(
+  PIRSelectKeysetForm *skf,
+  PIRFavoritesDialog *fd) const
+{
+  // First, pull out the user's keyset metadata:
+  QSettings settings("pietrzak.org", "Pierogi");
+
+  // Part 1 - The user's keyset nicknames:
+  int size = settings.beginReadArray("userNames");
+  int index = 0;
+  QString makeStr;
+  QString name;
+  PIRMakeName makeID;
+  QString userName;
+  PIRUDOuterMap userData;
+
+  while (index < size)
+  {
+    settings.setArrayIndex(index);
+    name = settings.value("keysetName").toString();
+    makeStr = settings.value("keysetMake").toString();
+    makeID = makeManager.getMakeID(makeStr);
+    userName = settings.value("keysetNickname").toString();
+
+    // Insert an entry into the map.  We initialize the favorites bool to
+    // false here, it'll be changed to true below if needed:
+    userData[makeID][name].nickname = userName;
+    userData[makeID][name].favorite = false;
+    ++index;
+  }
+  settings.endArray();
+
+  // Part 2 - The user's favorites:
+  size = settings.beginReadArray("favorites");
+  index = 0;
+
+  while (index < size)
+  {
+    settings.setArrayIndex(index);
+    name = settings.value("keysetName").toString();
+    makeStr = settings.value("keysetMake").toString();
+    makeID = makeManager.getMakeID(makeStr);
+
+    // Insert an entry into the map:
+    userData[makeID][name].favorite = true;
+
+    ++index;
+  }
+  settings.endArray();
+
+  // Now, we load the data into their respective QLists.
   PIRKeysetWidgetItem *kwi;
+  QString displayString;
+  PIRUDOuterMap::const_iterator outerIter;
+  PIRUDInnerMap::const_iterator innerIter;
 
   PIRKeysetCollection::const_iterator i = keysetsInfo.begin();
 
   while (i != keysetsInfo.end())
   {
     // Create a widget for the keyset:
-    make = i->second->getMake();
-    QString tempString = makeManager.getMakeString(make);
-    tempString.append(" ");
-    tempString.append(i->second->getKeysetName());
-    kwi = new PIRKeysetWidgetItem(tempString, i->first, make);
+    makeID = i->second->getMake();
+    name = i->second->getKeysetName();
+    displayString = makeManager.getMakeString(makeID);
+    displayString.append(" ");
+    displayString.append(name);
+
+    kwi = new PIRKeysetWidgetItem(displayString, name, i->first, makeID);
+
+    outerIter = userData.find(makeID);
+    if (outerIter != userData.end())
+    {
+      innerIter = outerIter->second.find(name);
+      if (innerIter != outerIter->second.end())
+      {
+        // We have user data for this keyset!
+        QString nick = innerIter->second.nickname;
+        if (!nick.isEmpty())
+        {
+          kwi->setNickname(nick);
+
+          displayString = nick;
+          displayString.append(" (");
+          displayString.append(kwi->text());
+          displayString.append(")");
+          kwi->setText(displayString);
+        }
+
+        // If this is a favorite, add it to favorites list:
+        if (innerIter->second.favorite)
+        {
+          kwi->setFavorite(true);
+          fd->addItem(kwi);
+        }
+      }
+    }
+
     skf->addWidgetItem(kwi);
 
     ++i;
@@ -855,3 +1096,4 @@ void PIRKeysetManager::populateDeviceTypes(
   }
 }
 */
+