Bug fixes, new panel
authorJohn Pietrzak <john@pietrzak.org>
Sat, 3 Mar 2012 01:10:13 +0000 (20:10 -0500)
committerJohn Pietrzak <john@pietrzak.org>
Sat, 3 Mar 2012 01:10:13 +0000 (20:10 -0500)
Several bugs in the Select Keyset by Device form fixed, including the problem
of child classes inheriting their parent's devices.  Also, a new Program/Record
panel, bringing the "Record" button back to Pierogi.  Finally, new keysets for
Compro, Kaon, and QNAP.

52 files changed:
PierogiResources.qrc
forms/piradjustform.ui
forms/pirairconditionerform.ui
forms/pirfavoritesform.ui
forms/pirinputform.ui
forms/pirkeypadform.ui
forms/pirmainform.ui
forms/pirmedia2form.ui
forms/pirmediaform.ui
forms/pirmenuform.ui
forms/pirrecordform.cpp [new file with mode: 0644]
forms/pirrecordform.h [new file with mode: 0644]
forms/pirrecordform.ui [new file with mode: 0644]
forms/pirtvform.ui
forms/pirutilityform.ui
icons/red_pause.png [new file with mode: 0644]
keysets/compro.cpp [new file with mode: 0644]
keysets/compro.h [new file with mode: 0644]
keysets/kaon.cpp [new file with mode: 0644]
keysets/kaon.h [new file with mode: 0644]
keysets/lg.cpp
keysets/qnap.cpp [new file with mode: 0644]
keysets/qnap.h [new file with mode: 0644]
keysets/sky.cpp
keysets/sony.cpp
keysets/wd.cpp
mainwindow.cpp
mainwindow.ui
pierogi.pro
pierogi.pro.user
pirdeviceinfo.cpp [new file with mode: 0644]
pirdeviceinfo.h [new file with mode: 0644]
pirkeysetmanager.cpp
pirkeysetmanager.h
pirkeysetmetadata.cpp
pirkeysetmetadata.h
pirmakenames.cpp
pirmakenames.h
pirpanelmanager.cpp
pirpanelmanager.h
pirpanelnames.h
pirpanelselectionform.cpp
pirpanelselectionform.h
pirpanelselectionform.ui
pirselectdeviceform.cpp
pirselectdeviceform.h
pirselectdeviceform.ui
pirselectkeysetform.cpp
pirselectkeysetform.h
protocols/rc6skyprotocol.cpp
qtc_packaging/debian_fremantle/changelog
qtc_packaging/debian_fremantle/control

index fbbcb26..86b2991 100644 (file)
@@ -32,5 +32,6 @@
         <file>doc/about.html</file>
         <file>doc/documentation.html</file>
         <file>icons/PierogiIcon.png</file>
+        <file>icons/red_pause.png</file>
     </qresource>
 </RCC>
index eee3fbb..a6f0d4a 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="bassUpButton">
      <property name="sizePolicy">
index 2627502..d3197a9 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="oscillateButton">
      <property name="sizePolicy">
index 8aaded9..316e1c3 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="addKeysetButton">
      <property name="text">
index 00fac49..1b493d4 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="cdInputButton">
      <property name="sizePolicy">
index 825519a..6631811 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="oneButton">
      <property name="sizePolicy">
index d27c99b..0852c53 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="mainChannelUpButton">
      <property name="sizePolicy">
index f4a43ef..4f8cf10 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="tunerBandButton">
      <property name="sizePolicy">
index bbbcb85..0cbc95f 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="mediaPreviousButton">
      <property name="sizePolicy">
index 7b2327f..0f8ee79 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="guideButton">
      <property name="sizePolicy">
diff --git a/forms/pirrecordform.cpp b/forms/pirrecordform.cpp
new file mode 100644 (file)
index 0000000..8d36881
--- /dev/null
@@ -0,0 +1,157 @@
+#include "pirrecordform.h"
+#include "ui_pirrecordform.h"
+
+#include "mainwindow.h"
+#include "pirkeysetmanager.h"
+
+PIRRecordForm::PIRRecordForm(
+  MainWindow *mw)
+  : QWidget(0),
+    ui(new Ui::PIRRecordForm),
+    mainWindow(mw)
+{
+  ui->setupUi(this);
+}
+
+PIRRecordForm::~PIRRecordForm()
+{
+  delete ui;
+}
+
+void PIRRecordForm::enableButtons(
+  const PIRKeysetManager *keyset,
+  unsigned int id)
+{
+  emit timerEnabled(keyset->hasKey(id, Timer_Key));
+  emit programEnabled(keyset->hasKey(id, Program_Key));
+  emit memoryEnabled(keyset->hasKey(id, Memory_Key));
+  emit callEnabled(keyset->hasKey(id, Call_Key));
+  emit favoritesEnabled(keyset->hasKey(id, Favorites_Key));
+  emit scanEnabled(keyset->hasKey(id, Scan_Key));
+  emit prevPresetEnabled(keyset->hasKey(id, PrevPreset_Key));
+  emit nextPresetEnabled(keyset->hasKey(id, NextPreset_Key));
+  emit recordEnabled(keyset->hasKey(id, Record_Key));
+  emit recordPauseEnabled(keyset->hasKey(id, RecordPause_Key));
+  emit recordStopEnabled(keyset->hasKey(id, RecordStop_Key));
+  emit recordMuteEnabled(keyset->hasKey(id, RecordMute_Key));
+}
+
+void PIRRecordForm::on_timerButton_pressed()
+{
+  mainWindow->startRepeating(Timer_Key);
+}
+
+void PIRRecordForm::on_timerButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_programButton_pressed()
+{
+  mainWindow->startRepeating(Program_Key);
+}
+
+void PIRRecordForm::on_programButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_memoryButton_pressed()
+{
+  mainWindow->startRepeating(Memory_Key);
+}
+
+void PIRRecordForm::on_memoryButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_callButton_pressed()
+{
+  mainWindow->startRepeating(Call_Key);
+}
+
+void PIRRecordForm::on_callButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_favoritesButton_pressed()
+{
+  mainWindow->startRepeating(Favorites_Key);
+}
+
+void PIRRecordForm::on_favoritesButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_scanButton_pressed()
+{
+  mainWindow->startRepeating(Scan_Key);
+}
+
+void PIRRecordForm::on_scanButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_prevPresetButton_pressed()
+{
+  mainWindow->startRepeating(PrevPreset_Key);
+}
+
+void PIRRecordForm::on_prevPresetButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_nextPresetButton_pressed()
+{
+  mainWindow->startRepeating(NextPreset_Key);
+}
+
+void PIRRecordForm::on_nextPresetButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_recordButton_pressed()
+{
+  mainWindow->startRepeating(Record_Key);
+}
+
+void PIRRecordForm::on_recordButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_recordPauseButton_pressed()
+{
+  mainWindow->startRepeating(RecordPause_Key);
+}
+
+void PIRRecordForm::on_recordPauseButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_recordStopButton_pressed()
+{
+  mainWindow->startRepeating(RecordStop_Key);
+}
+
+void PIRRecordForm::on_recordStopButton_released()
+{
+  mainWindow->stopRepeating();
+}
+
+void PIRRecordForm::on_recordMuteButton_pressed()
+{
+  mainWindow->startRepeating(RecordMute_Key);
+}
+
+void PIRRecordForm::on_recordMuteButton_released()
+{
+  mainWindow->stopRepeating();
+}
diff --git a/forms/pirrecordform.h b/forms/pirrecordform.h
new file mode 100644 (file)
index 0000000..71820b7
--- /dev/null
@@ -0,0 +1,73 @@
+#ifndef PIRRECORDFORM_H
+#define PIRRECORDFORM_H
+
+#include <QWidget>
+
+class MainWindow;
+class PIRKeysetManager;
+
+namespace Ui {
+class PIRRecordForm;
+}
+
+class PIRRecordForm : public QWidget
+{
+  Q_OBJECT
+
+public:
+  PIRRecordForm(
+    MainWindow *mw);
+
+  ~PIRRecordForm();
+
+  void enableButtons(
+    const PIRKeysetManager *keyset,
+    unsigned int id);
+
+signals:
+  void timerEnabled(bool);
+  void programEnabled(bool);
+  void memoryEnabled(bool);
+  void callEnabled(bool);
+  void favoritesEnabled(bool);
+  void scanEnabled(bool);
+  void prevPresetEnabled(bool);
+  void nextPresetEnabled(bool);
+  void recordEnabled(bool);
+  void recordPauseEnabled(bool);
+  void recordStopEnabled(bool);
+  void recordMuteEnabled(bool);
+
+private slots:
+  void on_timerButton_pressed();
+  void on_timerButton_released();
+  void on_programButton_pressed();
+  void on_programButton_released();
+  void on_memoryButton_pressed();
+  void on_memoryButton_released();
+  void on_callButton_pressed();
+  void on_callButton_released();
+  void on_favoritesButton_pressed();
+  void on_favoritesButton_released();
+  void on_scanButton_pressed();
+  void on_scanButton_released();
+  void on_prevPresetButton_pressed();
+  void on_prevPresetButton_released();
+  void on_nextPresetButton_pressed();
+  void on_nextPresetButton_released();
+  void on_recordButton_pressed();
+  void on_recordButton_released();
+  void on_recordPauseButton_pressed();
+  void on_recordPauseButton_released();
+  void on_recordStopButton_pressed();
+  void on_recordStopButton_released();
+  void on_recordMuteButton_pressed();
+  void on_recordMuteButton_released();
+
+private:
+  Ui::PIRRecordForm *ui;
+
+  MainWindow *mainWindow;
+};
+
+#endif // PIRRECORDFORM_H
diff --git a/forms/pirrecordform.ui b/forms/pirrecordform.ui
new file mode 100644 (file)
index 0000000..d9b1544
--- /dev/null
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PIRRecordForm</class>
+ <widget class="QWidget" name="PIRRecordForm">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="margin">
+    <number>0</number>
+   </property>
+   <item row="0" column="0">
+    <widget class="QPushButton" name="timerButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Timer</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../PierogiResources.qrc">
+       <normaloff>:/icons/clock_icon&amp;48.png</normaloff>:/icons/clock_icon&amp;48.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QPushButton" name="programButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Program</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="2">
+    <widget class="QPushButton" name="memoryButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Memory</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="3">
+    <widget class="QPushButton" name="callButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Call</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QPushButton" name="favoritesButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Favorites</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QPushButton" name="scanButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Scan</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="2">
+    <widget class="QPushButton" name="prevPresetButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Prev Preset</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../PierogiResources.qrc">
+       <normaloff>:/icons/arrow_left_icon&amp;48.png</normaloff>:/icons/arrow_left_icon&amp;48.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="3">
+    <widget class="QPushButton" name="nextPresetButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Next Preset</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../PierogiResources.qrc">
+       <normaloff>:/icons/arrow_right_icon&amp;48.png</normaloff>:/icons/arrow_right_icon&amp;48.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QPushButton" name="recordButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Record</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../PierogiResources.qrc">
+       <normaloff>:/icons/red_record_icon.png</normaloff>:/icons/red_record_icon.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QPushButton" name="recordPauseButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Rec Pause</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../PierogiResources.qrc">
+       <normaloff>:/icons/red_pause.png</normaloff>:/icons/red_pause.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2">
+    <widget class="QPushButton" name="recordStopButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Rec Stop</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../PierogiResources.qrc">
+       <normaloff>:/icons/red_square.png</normaloff>:/icons/red_square.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="3">
+    <widget class="QPushButton" name="recordMuteButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Rec Mute</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../PierogiResources.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>timerEnabled(bool)</signal>
+   <receiver>timerButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>99</x>
+     <y>79</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>programEnabled(bool)</signal>
+   <receiver>programButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>299</x>
+     <y>79</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>memoryEnabled(bool)</signal>
+   <receiver>memoryButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>500</x>
+     <y>79</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>callEnabled(bool)</signal>
+   <receiver>callButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>700</x>
+     <y>79</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>favoritesEnabled(bool)</signal>
+   <receiver>favoritesButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>99</x>
+     <y>239</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>scanEnabled(bool)</signal>
+   <receiver>scanButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>299</x>
+     <y>239</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>prevPresetEnabled(bool)</signal>
+   <receiver>prevPresetButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>500</x>
+     <y>239</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>nextPresetEnabled(bool)</signal>
+   <receiver>nextPresetButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>700</x>
+     <y>239</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>recordEnabled(bool)</signal>
+   <receiver>recordButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>99</x>
+     <y>400</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>recordPauseEnabled(bool)</signal>
+   <receiver>recordPauseButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>299</x>
+     <y>400</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>recordStopEnabled(bool)</signal>
+   <receiver>recordStopButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>500</x>
+     <y>400</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>PIRRecordForm</sender>
+   <signal>recordMuteEnabled(bool)</signal>
+   <receiver>recordMuteButton</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>239</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>700</x>
+     <y>400</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+ <slots>
+  <signal>timerEnabled(bool)</signal>
+  <signal>programEnabled(bool)</signal>
+  <signal>memoryEnabled(bool)</signal>
+  <signal>callEnabled(bool)</signal>
+  <signal>favoritesEnabled(bool)</signal>
+  <signal>scanEnabled(bool)</signal>
+  <signal>prevPresetEnabled(bool)</signal>
+  <signal>nextPresetEnabled(bool)</signal>
+  <signal>recordEnabled(bool)</signal>
+  <signal>recordPauseEnabled(bool)</signal>
+  <signal>recordStopEnabled(bool)</signal>
+  <signal>recordMuteEnabled(bool)</signal>
+ </slots>
+</ui>
index 51ae510..b7783e7 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="teletextButton">
      <property name="sizePolicy">
index ad53ba1..b6df1fc 100644 (file)
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="leftMargin">
-    <number>8</number>
-   </property>
-   <property name="topMargin">
+   <property name="margin">
     <number>0</number>
    </property>
-   <property name="rightMargin">
-    <number>8</number>
-   </property>
-   <property name="bottomMargin">
-    <number>8</number>
-   </property>
    <item row="0" column="0">
     <widget class="QPushButton" name="redButton">
      <property name="sizePolicy">
diff --git a/icons/red_pause.png b/icons/red_pause.png
new file mode 100644 (file)
index 0000000..07ed3f3
Binary files /dev/null and b/icons/red_pause.png differ
diff --git a/keysets/compro.cpp b/keysets/compro.cpp
new file mode 100644 (file)
index 0000000..725fd8c
--- /dev/null
@@ -0,0 +1,66 @@
+#include "compro.h"
+#include "protocols/necprotocol.h"
+
+
+ComproTVCard1::ComproTVCard1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "PC TV Tuner Card 1",
+      Compro_Make,
+      index)
+{
+}
+
+
+void ComproTVCard1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x7E80, 16);
+
+  addKey("MUTE", Mute_Key, 0x14, 8);
+  addKey("ZOOM", Zoom_Key, 0x44, 8);
+  addKey("DVD_VCD", DVDInput_Key, 0x01, 8);
+  addKey("FM", TunerInput_Key, 0x43, 8);
+  addKey("PVR_TV", HDDInput_Key, 0x00, 8);
+  addKey("REWIND", Rewind_Key, 0x0A, 8);
+  addKey("PLAY_PAUSE", Play_Key, 0x08, 8);
+  addKey("PLAY_PAUSE", Pause_Key, 0x08, 8);
+  addKey("FORWARD", FastForward_Key, 0x0F, 8);
+  addKey("PREVIOUS", Previous_Key, 0x02, 8);
+  addKey("STOP", Stop_Key, 0x07, 8);
+  addKey("NEXT", Next_Key, 0x06, 8);
+  addKey("GUIDE", Guide_Key, 0x03, 8);
+  addKey("SETUP", Menu_Key, 0x09, 8);
+  addKey("UP", Up_Key, 0x0C, 8);
+  addKey("DOWN", Down_Key, 0x0E, 8);
+  addKey("LEFT", Left_Key, 0x0B, 8);
+  addKey("RIGHT", Right_Key, 0x0D, 8);
+  addKey("TV_VIDEO", Input_Key, 0x05, 8);
+  addKey("CH_SURF", Unmapped_Key, 0x42, 8);
+  addKey("VOL+", VolumeUp_Key, 0x12, 8);
+  addKey("VOL-", VolumeDown_Key, 0x15, 8);
+  addKey("OK", Select_Key, 0x11, 8);
+  addKey("ANGLE", Angle_Key, 0x10, 8);
+  addKey("SUBTITLE", Captions_Key, 0x13, 8);
+  addKey("REC", Record_Key, 0x04, 8);
+  addKey("1", One_Key, 0x16, 8);
+  addKey("2", Two_Key, 0x17, 8);
+  addKey("3", Three_Key, 0x18, 8);
+  addKey("4", Four_Key, 0x19, 8);
+  addKey("5", Five_Key, 0x1A, 8);
+  addKey("6", Six_Key, 0x1B, 8);
+  addKey("7", Seven_Key, 0x1C, 8);
+  addKey("8", Eight_Key, 0x1D, 8);
+  addKey("9", Nine_Key, 0x1E, 8);
+  addKey("LANGUAGE", Audio_Key, 0x40, 8);
+  addKey("0", Zero_Key, 0x1F, 8);
+  addKey("SLEEP", Sleep_Key, 0x41, 8);
+}
diff --git a/keysets/compro.h b/keysets/compro.h
new file mode 100644 (file)
index 0000000..0c84ddf
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef COMPRO_H
+#define COMPRO_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class ComproTVCard1: public PIRKeysetMetaData
+{
+public:
+  ComproTVCard1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // COMPRO_H
diff --git a/keysets/kaon.cpp b/keysets/kaon.cpp
new file mode 100644 (file)
index 0000000..2cfff4f
--- /dev/null
@@ -0,0 +1,68 @@
+#include "kaon.h"
+#include "protocols/necprotocol.h"
+
+
+KaonSat1::KaonSat1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Sat Keyset 1",
+      Kaon_Make,
+      index)
+{
+}
+
+
+void KaonSat1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x0820, 16);
+
+  addKey("POWER", Power_Key, 0x00, 8);
+  addKey("PSIZE", AspectRatio_Key, 0x01, 8);
+  addKey("VOLUP", VolumeUp_Key, 0x02, 8);
+  addKey("VOLDOWN", VolumeDown_Key, 0x03, 8);
+  addKey("MUTE", Mute_Key, 0x04, 8);
+  addKey("TV/RADIO", TunerInput_Key, 0x05, 8);
+  addKey("CHUP", ChannelUp_Key, 0x06, 8);
+  addKey("CHDOWN", ChannelDown_Key, 0x07, 8);
+  addKey("TV/STB", Input_Key, 0x08, 8);
+  addKey("ACOUNT", Unmapped_Key, 0x09, 8); // "VFormat"
+  addKey("ALR", Unmapped_Key, 0x0A, 8);
+  addKey("ALANG", Audio_Key, 0x0B, 8);
+  addKey("RECALL", PrevChannel_Key, 0x0C, 8);
+  addKey("EPG", Guide_Key, 0x0D, 8);
+  addKey("TEXT", Teletext_Key, 0x0E, 8);
+
+  addKey("EXIT", Exit_Key, 0x10, 8);
+  addKey("MENU", Menu_Key, 0x11, 8);
+  addKey("UP", Up_Key, 0x12, 8);
+  addKey("DOWN", Down_Key, 0x13, 8);
+  addKey("LEFT", Left_Key, 0x14, 8);
+  addKey("OK", Select_Key, 0x15, 8);
+  addKey("RIGHT", Right_Key, 0x16, 8);
+  addKey("RED", Red_Key, 0x18, 8);
+  addKey("GREEN", Green_Key, 0x19, 8);
+  addKey("YELLOW", Yellow_Key, 0x1A, 8);
+  addKey("BLUE", Blue_Key, 0x1B, 8);
+  addKey("1", One_Key, 0x1C, 8);
+  addKey("2", Two_Key, 0x1D, 8);
+  addKey("3", Three_Key, 0x1E, 8);
+  addKey("SLEEP", Sleep_Key, 0x1F, 8);
+
+  addKey("4", Four_Key, 0x40, 8);
+  addKey("5", Five_Key, 0x41, 8);
+  addKey("6", Six_Key, 0x42, 8);
+  addKey("FAV", Favorites_Key, 0x43, 8);
+  addKey("7", Seven_Key, 0x44, 8);
+  addKey("8", Eight_Key, 0x45, 8);
+  addKey("9", Nine_Key, 0x46, 8);
+  addKey("0", Zero_Key, 0x47, 8);
+}
diff --git a/keysets/kaon.h b/keysets/kaon.h
new file mode 100644 (file)
index 0000000..026f223
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef KAON_H
+#define KAON_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class KaonSat1: public PIRKeysetMetaData
+{
+public:
+  KaonSat1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // KAON_H
index 60df8d3..a69daf1 100644 (file)
@@ -448,6 +448,7 @@ LGDisc2::LGDisc2(
       LG_Make,
       index)
 {
+  addControlledDevice(LG_Make, "DV552", DVD_Device);
 }
 
 
diff --git a/keysets/qnap.cpp b/keysets/qnap.cpp
new file mode 100644 (file)
index 0000000..93b9377
--- /dev/null
@@ -0,0 +1,68 @@
+#include "qnap.h"
+#include "protocols/necprotocol.h"
+
+
+QNAPPlayer1::QNAPPlayer1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Media Player Keyset 1",
+      QNAP_Make,
+      index)
+{
+}
+
+
+void QNAPPlayer1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x4523, 16);
+
+  addKey("Mute", Mute_Key, 0x02, 8);
+  addKey("Audio", Audio_Key, 0x03, 8);
+  addKey("Menu", DiscMenu_Key, 0x04, 8);
+  addKey("Zoom", Zoom_Key, 0x06, 8);
+  addKey("Title", DiscTitle_Key, 0x07, 8);
+  addKey("Angle", Angle_Key, 0x08, 8);
+  addKey("Slow", Slow_Key, 0x09, 8);
+  addKey("Seek", Unmapped_Key, 0x0B, 8);
+  addKey("rewind", Rewind_Key, 0x0C, 8);
+  addKey("Stop", Stop_Key, 0x0D, 8);
+  addKey("ffwd", FastForward_Key, 0x0E, 8);
+  addKey("Home", Guide_Key, 0x0F, 8);
+  addKey("Option", Unmapped_Key, 0x11, 8);
+  addKey("Resume", Exit_Key, 0x12, 8);
+  addKey("up_arrow", Up_Key, 0x13, 8);
+  addKey("left_arrow", Left_Key, 0x14, 8);
+  addKey("right_arrow", Right_Key, 0x16, 8);
+  addKey("down_arrow", Down_Key, 0x17, 8);
+  addKey("Skip-", Previous_Key, 0x18, 8);
+  addKey("Skip+", Next_Key, 0x19, 8);
+  addKey("VOL+", VolumeUp_Key, 0x1B, 8);
+  addKey("num_1", One_Key, 0x1C, 8);
+  addKey("num_2", Two_Key, 0x1D, 8);
+  addKey("num_3", Three_Key, 0x1E, 8);
+  addKey("Info", Info_Key, 0x1F, 8);
+  addKey("Power", Power_Key, 0x20, 8);
+  addKey("num_5", Five_Key, 0x21, 8);
+  addKey("Subtitle", Captions_Key, 0x25, 8);
+  addKey("num_9", Nine_Key, 0x26, 8);
+  addKey("Pause", Pause_Key, 0x2A, 8);
+  addKey("Settings", Menu_Key, 0x30, 8);
+  addKey("Select", Select_Key, 0x35, 8);
+  addKey("Play", Play_Key, 0x35, 8);
+  addKey("VOL-", VolumeDown_Key, 0x3A, 8);
+  addKey("num_4", Four_Key, 0x40, 8);
+  addKey("num_6", Six_Key, 0x42, 8);
+  addKey("TV", Input_Key, 0x43, 8);
+  addKey("num_7", Seven_Key, 0x44, 8);
+  addKey("num_8", Eight_Key, 0x45, 8);
+  addKey("num_0", Zero_Key, 0x47, 8);
+}
diff --git a/keysets/qnap.h b/keysets/qnap.h
new file mode 100644 (file)
index 0000000..d501f5b
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef QNAP_H
+#define QNAP_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class QNAPPlayer1: public PIRKeysetMetaData
+{
+public:
+  QNAPPlayer1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // QNAP_H
index 8ac4017..87e70e1 100644 (file)
@@ -46,6 +46,7 @@ void SkyReceiver1::populateProtocol(
   addKey("PLAY", Play_Key, 0x3E, 8);
   addKey("STOP", Stop_Key, 0x3F, 8);
   addKey("REC", Record_Key, 0x40, 8);
+  addKey("Remote Battery Message", Unmapped_Key, 0x48, 8);
 
   addKey("UP", Up_Key, 0x58, 8);
   addKey("DOWN", Down_Key, 0x59, 8);
@@ -59,7 +60,7 @@ void SkyReceiver1::populateProtocol(
   addKey("BLUE", Blue_Key, 0x70, 8);
 
   addKey("BOX_OFFICE", Unmapped_Key, 0x7D, 8);
-  addKey("SERVICES", Menu_Key, 0x7E, 8); // ?
+  addKey("SERVICES", Unmapped_Key, 0x7E, 8); // ?
 
   addKey("SKY", Unmapped_Key, 0x80, 8);
   addKey("HELP", Unmapped_Key, 0x81, 8); // menu?
@@ -69,7 +70,7 @@ void SkyReceiver1::populateProtocol(
   addKey("INFO", Info_Key, 0xCB, 8);
   addKey("TV_GUIDE", Guide_Key, 0xCC, 8);
 
-  addKey("INTERACTIVE", Unmapped_Key, 0xF5, 8);
+  addKey("INTERACTIVE", Menu_Key, 0xF5, 8);
 }
 
 
index 132db18..f05f44b 100644 (file)
@@ -19,6 +19,7 @@ SonyTV1::SonyTV1(
   addControlledDevice(Sony_Make, "KV-36FS13", TV_Device);
   addControlledDevice(Sony_Make, "KDL-23B4030", TV_Device);
   addControlledDevice(Sony_Make, "KDL-40EX403", TV_Device);
+  addControlledDevice(Sony_Make, "KDL-40EX520", TV_Device);
   addControlledDevice(Sony_Make, "KDL-40X2000", TV_Device);
   addControlledDevice(Sony_Make, "KDL-52X2000", TV_Device);
   addControlledDevice(Sony_Make, "KDL-46X2000", TV_Device);
index abc0a87..6156dcd 100644 (file)
@@ -8,6 +8,8 @@ WDMediaPlayer1::WDMediaPlayer1(
       WD_Make,
       index)
 {
+  addControlledDevice(WD_Make, "WDTV", Other_Device);
+  addControlledDevice(WD_Make, "WDTV Live PLUS", Other_Device);
 }
 
 
index 692b64c..afad5e4 100644 (file)
@@ -7,6 +7,7 @@
 //#include <QtGui>
 #include <QSettings>
 
+#include "pirkeysetmetadata.h"
 #include "pirkeysetwidgetitem.h"
 #include "pirselectkeysetform.h"
 #include "pirselectdeviceform.h"
@@ -54,14 +55,15 @@ MainWindow::MainWindow(QWidget *parent)
 
   // Set up the keyset selection window:
   selectKeysetForm = new PIRSelectKeysetForm(this);
+  myKeysets->populateSelectionWidget(selectKeysetForm);
 
   // Set up the device selection window:
   selectDeviceForm = new PIRSelectDeviceForm(this);
+  PIRKeysetMetaData::populateDevices(selectDeviceForm);
 
   // Set up the panel selection window:
   panelSelectionForm = new PIRPanelSelectionForm(this);
 
-  myKeysets->populateSelectionWidgets(selectKeysetForm, selectDeviceForm);
 //  myPanels->setupPanels(panelSelectionForm);
 
   // Remember any favorites the user has already set:
index 4e30f06..08af423 100644 (file)
     </sizepolicy>
    </property>
    <layout class="QGridLayout" name="gridLayout">
-    <property name="leftMargin">
-     <number>0</number>
-    </property>
-    <property name="topMargin">
+    <property name="margin">
      <number>8</number>
     </property>
-    <property name="rightMargin">
-     <number>0</number>
-    </property>
-    <property name="bottomMargin">
-     <number>0</number>
-    </property>
     <item row="0" column="0">
      <widget class="QPushButton" name="prevPanelButton">
       <property name="icon">
index f2f5c2a..85aabaa 100644 (file)
@@ -157,7 +157,12 @@ SOURCES += main.cpp mainwindow.cpp \
     keysets/dynex.cpp \
     keysets/kathrein.cpp \
     keysets/starsat.cpp \
-    keysets/viewsat.cpp
+    keysets/viewsat.cpp \
+    pirdeviceinfo.cpp \
+    keysets/kaon.cpp \
+    forms/pirrecordform.cpp \
+    keysets/qnap.cpp \
+    keysets/compro.cpp
 HEADERS += mainwindow.h \
     pirkeynames.h \
     pirmakenames.h \
@@ -290,7 +295,12 @@ HEADERS += mainwindow.h \
     keysets/dynex.h \
     keysets/kathrein.h \
     keysets/starsat.h \
-    keysets/viewsat.h
+    keysets/viewsat.h \
+    keysets/kaon.h \
+    pirdeviceinfo.h \
+    forms/pirrecordform.h \
+    keysets/qnap.h \
+    keysets/compro.h
 FORMS += mainwindow.ui \
     pirdocumentationform.ui \
     piraboutform.ui \
@@ -308,7 +318,8 @@ FORMS += mainwindow.ui \
     forms/pirmenuform.ui \
     forms/pirmediaform.ui \
     forms/pirfavoritesform.ui \
-    pirpanelselectionform.ui
+    pirpanelselectionform.ui \
+    forms/pirrecordform.ui
 
 # Please do not modify the following two lines. Required for deployment.
 include(deployment.pri)
@@ -374,7 +385,8 @@ OTHER_FILES += \
     www/PierogiIcon.png \
     www/AdjustTab.png \
     www/InputTab.png \
-    qtc_packaging/debian_fremantle/postrm
+    qtc_packaging/debian_fremantle/postrm \
+    icons/red_pause.png
 
 RESOURCES += \
     PierogiResources.qrc
index 71e8824..fa90698 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by Qt Creator 2.4.1, 2012-02-29T19:50:16. -->
+<!-- Written by Qt Creator 2.4.1, 2012-03-02T20:08:31. -->
 <qtcreator>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -79,7 +79,7 @@
       <value type="QString" key="ProjectExplorer.ProcessStep.Arguments">dpkg-buildpackage -sa -S -uc -us</value>
       <value type="QString" key="ProjectExplorer.ProcessStep.Command">/Users/john/QtSDK/Maemo/4.6.2/bin/mad</value>
       <value type="bool" key="ProjectExplorer.ProcessStep.Enabled">false</value>
-      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">/Users/john/Develop/n900/pierogi-1.0.0</value>
+      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">/Users/john/Develop/n900/pierogi-1.1.0</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Process Step</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.ProcessStep</value>
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_1_6_armel.deb</value>
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_6_10_armel.deb</value>
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_1_2_armel.deb</value>
+       <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_1_1_1_armel.deb</value>
       </valuelist>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedHosts">
        <value type="QString">192.168.0.15</value>
        <value type="QString">192.168.0.15</value>
        <value type="QString">192.168.0.15</value>
        <value type="QString">192.168.0.15</value>
+       <value type="QString">192.168.0.15</value>
       </valuelist>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedRemotePaths">
        <value type="QString"></value>
        <value type="QString"></value>
        <value type="QString"></value>
        <value type="QString"></value>
+       <value type="QString"></value>
       </valuelist>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedTimes">
        <value type="QDateTime">2012-01-19T22:18:07</value>
        <value type="QDateTime">2012-02-16T21:50:07</value>
        <value type="QDateTime">2012-01-17T00:15:23</value>
        <value type="QDateTime">2012-01-30T20:23:06</value>
-       <value type="QDateTime">2012-02-29T19:26:06</value>
+       <value type="QDateTime">2012-02-29T20:01:12</value>
        <value type="QDateTime">2012-01-17T13:21:05</value>
        <value type="QDateTime">2012-01-23T09:47:37</value>
        <value type="QDateTime">2012-02-03T10:04:34</value>
        <value type="QDateTime">2012-01-25T13:42:55</value>
        <value type="QDateTime">2012-02-22T09:37:53</value>
        <value type="QDateTime">2012-01-17T12:19:28</value>
+       <value type="QDateTime">2012-03-02T20:06:33</value>
       </valuelist>
      </valuemap>
      <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">3</value>
diff --git a/pirdeviceinfo.cpp b/pirdeviceinfo.cpp
new file mode 100644 (file)
index 0000000..1dd93f5
--- /dev/null
@@ -0,0 +1,14 @@
+#include "pirdeviceinfo.h"
+
+#include <string.h>
+
+bool operator< (
+  const DeviceInfo &a,
+  const DeviceInfo &b)
+{
+  if (a.make < b.make) return true;
+
+  if ((a.make == b.make) && (strcmp(a.model, b.model) < 0)) return true;
+
+  return false;
+}
diff --git a/pirdeviceinfo.h b/pirdeviceinfo.h
new file mode 100644 (file)
index 0000000..1337ec0
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef PIRDEVICEINFO_H
+#define PIRDEVICEINFO_H
+
+#include "pirmakenames.h"
+#include "pirdevicetypenames.h"
+
+#include <map>
+
+class DeviceInfo
+{
+public:
+  DeviceInfo(
+    PIRMakeName ma,
+    const char *mo,
+    PIRDeviceTypeName t)
+  : make(ma),
+    model(mo),
+    type(t)
+  {}
+
+  PIRMakeName make;
+  const char *model;
+  PIRDeviceTypeName type;
+};
+
+bool operator< (
+  const DeviceInfo &a,
+  const DeviceInfo &b);
+
+typedef std::map<DeviceInfo, unsigned int> PIRDeviceCollection;
+
+typedef std::pair<DeviceInfo, unsigned int> PIRDCPair;
+
+#endif // PIRDEVICEINFO_H
index e0f6f15..611d78b 100644 (file)
@@ -15,6 +15,7 @@
 #include "keysets/bush.h"
 #include "keysets/cambridge.h"
 #include "keysets/canon.h"
+#include "keysets/compro.h"
 #include "keysets/daewoo.h"
 #include "keysets/dell.h"
 #include "keysets/denon.h"
@@ -41,6 +42,7 @@
 #include "keysets/humax.h"
 #include "keysets/hyundai.h"
 #include "keysets/jvc.h"
+#include "keysets/kaon.h"
 #include "keysets/kathrein.h"
 #include "keysets/kenwood.h"
 #include "keysets/lg.h"
@@ -57,6 +59,7 @@
 #include "keysets/philips.h"
 #include "keysets/pinnacle.h"
 #include "keysets/pioneer.h"
+#include "keysets/qnap.h"
 #include "keysets/raite.h"
 #include "keysets/rca.h"
 #include "keysets/roku.h"
@@ -94,7 +97,6 @@ extern QMutex stopRepeatingMutex;
 
 // Global helper objects:
 PIRMakeMgr makeManager;
-PIRDeviceTypeMgr deviceManager;
 
 // Now, on to the actual method definitions:
 
@@ -152,6 +154,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new CanonCamcorder1(counter++));
   setupKeyset(new CanonPowershot1(counter++));
 
+  setupKeyset(new ComproTVCard1(counter++));
+
   setupKeyset(new DaewooTV1(counter++));
   setupKeyset(new DaewooTV2(counter++));
   setupKeyset(new DaewooTV3(counter++));
@@ -309,6 +313,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new JVCAudio2(counter++));
   setupKeyset(new JVCDVD1(counter++));
 
+  setupKeyset(new KaonSat1(counter++));
+
   setupKeyset(new KathreinSat1(counter++));
   setupKeyset(new KathreinSat2(counter++));
   setupKeyset(new KathreinSat3(counter++));
@@ -447,6 +453,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new PioneerLaserDisc1(counter++));
   setupKeyset(new PioneerDVD1(counter++));
 
+  setupKeyset(new QNAPPlayer1(counter++));
+
   setupKeyset(new RaiteDVD1(counter++));
 
   setupKeyset(new RCATV1(counter++));
@@ -763,9 +771,8 @@ void PIRKeysetManager::setupKeyset(
 }
 
 
-void PIRKeysetManager::populateSelectionWidgets(
-  PIRSelectKeysetForm *skf,
-  PIRSelectDeviceForm *sdf) const
+void PIRKeysetManager::populateSelectionWidget(
+  PIRSelectKeysetForm *skf) const
 {
   PIRMakeName make;
   PIRKeysetWidgetItem *kwi;
@@ -782,9 +789,6 @@ void PIRKeysetManager::populateSelectionWidgets(
     kwi = new PIRKeysetWidgetItem(tempString, i->first, make);
     skf->addWidgetItem(kwi);
 
-    // Create widgets for the devices:
-    i->second->populateDevices(i->first, sdf);
-
     ++i;
   }
 }
index 4cc5f42..af95199 100644 (file)
@@ -28,9 +28,8 @@ public:
 
   ~PIRKeysetManager();
 
-  void populateSelectionWidgets(
-    PIRSelectKeysetForm *skf,
-    PIRSelectDeviceForm *sdf) const;
+  void populateSelectionWidget(
+    PIRSelectKeysetForm *skf) const;
 
   bool keysetExists(
     unsigned int keysetID) const;
index f7076a6..b0e5bed 100644 (file)
@@ -5,9 +5,11 @@
 
 #include <iostream>
 
-// Global helper objects:
+// Global helper object:
 extern PIRMakeMgr makeManager;
-//extern PIRDeviceTypeMgr deviceManager;
+
+// Static member definition:
+PIRDeviceCollection PIRKeysetMetaData::controlledDevices;
 
 PIRKeysetMetaData::PIRKeysetMetaData(
   const char *r,
@@ -39,8 +41,7 @@ void PIRKeysetMetaData::moveToThread(
 
 
 void PIRKeysetMetaData::populateDevices(
-  unsigned int id,
-  PIRSelectDeviceForm *sdf) const
+  PIRSelectDeviceForm *sdf)
 {
   PIRKeysetWidgetItem *kwi;
 
@@ -49,10 +50,13 @@ void PIRKeysetMetaData::populateDevices(
   while (i != controlledDevices.end())
   {
     // Create a widget for the keyset:
-    QString tempString = makeManager.getMakeString(i->make);
+    QString tempString = makeManager.getMakeString(i->first.make);
     tempString.append(" ");
-    tempString.append(i->model);
-    kwi = new PIRKeysetWidgetItem(tempString, id, i->make, i->type);
+    tempString.append(i->first.model);
+
+    kwi = new PIRKeysetWidgetItem(
+      tempString, i->second, i->first.make, i->first.type);
+
     sdf->addWidgetItem(kwi);
 
     ++i;
@@ -82,9 +86,10 @@ void PIRKeysetMetaData::addControlledDevice(
   const char *model,
   PIRDeviceTypeName type)
 {
-  controlledDevices.push_back(DeviceInfo(make, model, type));
-
-  deviceTypes.insert(type);
+  controlledDevices.insert(
+    PIRDCPair(
+      DeviceInfo(make, model, type),
+      index));
 }
 
 
index c70b040..b3bfb55 100644 (file)
@@ -3,10 +3,12 @@
 
 #include "pirkeynames.h"
 #include "pirmakenames.h"
-#include "pirdevicetypenames.h"
+//#include "pirdevicetypenames.h"
+
+#include "pirdeviceinfo.h"
 
 #include <map>
-#include <list>
+//#include <list>
 
 class QThread;
 class QObject;
@@ -16,24 +18,6 @@ class PIRProtocol;
 
 typedef std::map<PIRKeyName, const char *> KeyCollection;
 
-class DeviceInfo
-{
-public:
-  DeviceInfo(
-    PIRMakeName ma,
-    const char *mo,
-    PIRDeviceTypeName t)
-  : make(ma),
-    model(mo),
-    type(t)
-  {}
-
-  PIRMakeName make;
-  const char *model;
-  PIRDeviceTypeName type;
-};
-
-typedef std::list<DeviceInfo> PIRDeviceCollection;
 
 class PIRKeysetMetaData
 {
@@ -58,9 +42,8 @@ public:
   void moveToThread(
     QThread *thread);
 
-  void populateDevices(
-    unsigned int id,
-    PIRSelectDeviceForm *sdf) const;
+  static void populateDevices(
+    PIRSelectDeviceForm *sdf);
 
 protected:
   void addControlledDevice(
@@ -151,15 +134,14 @@ protected:
 
   KeyCollection keys;
 
-  PIRDeviceCollection controlledDevices;
-
   PIRProtocol *threadableProtocol;
   unsigned int index;
 
 private:
   const char *keysetName;
   PIRMakeName make;
-  PIRDeviceTypeCollection deviceTypes;
+  static PIRDeviceCollection controlledDevices;
+//  PIRDeviceTypeCollection deviceTypes;
 };
 
 
index 716e155..8c7cfa7 100644 (file)
@@ -16,6 +16,7 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Bush_Make] = "Bush";
   makes[Cambridge_Make] = "Cambridge Audio";
   makes[Canon_Make] = "Canon";
+  makes[Compro_Make] = "Compro";
   makes[Daewoo_Make] = "Daewoo";
   makes[Dell_Make] = "Dell";
   makes[Denon_Make] = "Denon";
@@ -42,6 +43,7 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Humax_Make] = "Humax";
   makes[Hyundai_Make] = "Hyundai";
   makes[JVC_Make] = "JVC";
+  makes[Kaon_Make] = "Kaon";
   makes[Kathrein_Make] = "Kathrein";
   makes[Kenwood_Make] = "Kenwood";
   makes[LG_Make] = "LG";
@@ -58,6 +60,7 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Philips_Make] = "Philips";
   makes[Pinnacle_Make] = "Pinnacle Systems";
   makes[Pioneer_Make] = "Pioneer";
+  makes[QNAP_Make] = "QNAP";
   makes[Raite_Make] = "Raite";
   makes[RCA_Make] = "RCA";
   makes[Roku_Make] = "Roku";
index 13430a9..4083269 100644 (file)
@@ -17,6 +17,7 @@ enum PIRMakeName{
   Bush_Make,
   Cambridge_Make,
   Canon_Make,
+  Compro_Make,
   Daewoo_Make,
   Dell_Make,
   Denon_Make,
@@ -43,6 +44,7 @@ enum PIRMakeName{
   Humax_Make,
   Hyundai_Make,
   JVC_Make,
+  Kaon_Make,
   Kathrein_Make,
   Kenwood_Make,
   LG_Make,
@@ -59,6 +61,7 @@ enum PIRMakeName{
   Philips_Make,
   Pinnacle_Make,
   Pioneer_Make,
+  QNAP_Make,
   Raite_Make,
   RCA_Make,
   Roku_Make,
index 66dc178..23eca10 100644 (file)
@@ -5,12 +5,13 @@
 #include "forms/pirkeypadform.h"
 #include "forms/pirmenuform.h"
 #include "forms/pirmediaform.h"
-#include "forms/pirfavoritesform.h"
-#include "forms/pirtvform.h"
 #include "forms/pirmedia2form.h"
+#include "forms/pirrecordform.h"
+#include "forms/pirtvform.h"
 #include "forms/pirinputform.h"
 #include "forms/piradjustform.h"
 #include "forms/pirairconditionerform.h"
+#include "forms/pirfavoritesform.h"
 
 #include "mainwindow.h"
 
@@ -21,6 +22,7 @@ PIRPanelManager::PIRPanelManager(MainWindow *mw)
     menuForm(0),
     mediaForm(0),
     media2Form(0),
+    recordForm(0),
     tvForm(0),
     inputForm(0),
     adjustForm(0),
@@ -34,6 +36,7 @@ PIRPanelManager::PIRPanelManager(MainWindow *mw)
   panelList.push_back(PIRPanelPair(Menu_Panel, false));
   panelList.push_back(PIRPanelPair(Media_Panel, false));
   panelList.push_back(PIRPanelPair(Media2_Panel, false));
+  panelList.push_back(PIRPanelPair(Record_Panel, false));
   panelList.push_back(PIRPanelPair(TV_Panel, false));
   panelList.push_back(PIRPanelPair(Input_Panel, false));
   panelList.push_back(PIRPanelPair(Adjust_Panel, false));
@@ -70,6 +73,7 @@ void PIRPanelManager::enableButtons(
   if (menuForm) menuForm->enableButtons(keyset, id);
   if (mediaForm) mediaForm->enableButtons(keyset, id);
   if (media2Form) media2Form->enableButtons(keyset, id);
+  if (recordForm) recordForm->enableButtons(keyset, id);
   if (tvForm) tvForm->enableButtons(keyset, id);
   if (inputForm) inputForm->enableButtons(keyset, id);
   if (adjustForm) adjustForm->enableButtons(keyset, id);
@@ -142,14 +146,18 @@ void PIRPanelManager::hidePanel(
       if (mediaForm) mainWindow->removePanel(index, mediaForm);
       break;
 
-    case TV_Panel:
-      if (tvForm) mainWindow->removePanel(index, tvForm);
-      break;
-
     case Media2_Panel:
       if (media2Form) mainWindow->removePanel(index, media2Form);
       break;
 
+    case Record_Panel:
+      if (recordForm) mainWindow->removePanel(index, recordForm);
+      break;
+
+    case TV_Panel:
+      if (tvForm) mainWindow->removePanel(index, tvForm);
+      break;
+
     case Input_Panel:
       if (inputForm) mainWindow->removePanel(index, inputForm);
       break;
@@ -263,6 +271,20 @@ void PIRPanelManager::showPanel(
 
       break;
 
+    case Record_Panel:
+      if (!recordForm)
+      {
+        recordForm = new PIRRecordForm(mainWindow);
+        mainWindow->enableButtons();
+      }
+
+      mainWindow->insertPanel(
+        index,
+        recordForm,
+        QString("Program/Record Panel - control over memory and storage"));
+
+      break;
+
     case TV_Panel:
       if (!tvForm)
       {
index 025a904..631f310 100644 (file)
@@ -8,12 +8,13 @@ class PIRUtilityForm;
 class PIRKeypadForm;
 class PIRMenuForm;
 class PIRMediaForm;
-class PIRFavoritesForm;
-class PIRTVForm;
 class PIRMedia2Form;
+class PIRRecordForm;
+class PIRTVForm;
 class PIRInputForm;
 class PIRAdjustForm;
 class PIRAirConditionerForm;
+class PIRFavoritesForm;
 
 class PIRKeysetWidgetItem;
 class PIRPanelSelectionForm;
@@ -84,6 +85,7 @@ private:
   PIRMenuForm *menuForm;
   PIRMediaForm *mediaForm;
   PIRMedia2Form *media2Form;
+  PIRRecordForm *recordForm;
   PIRTVForm *tvForm;
   PIRInputForm *inputForm;
   PIRAdjustForm *adjustForm;
index 27289a4..ea65a0b 100644 (file)
@@ -8,8 +8,9 @@ enum PIRPanelName
   Keypad_Panel,
   Menu_Panel,
   Media_Panel,
-  TV_Panel,
   Media2_Panel,
+  Record_Panel,
+  TV_Panel,
   Input_Panel,
   Adjust_Panel,
   AC_Panel,
index 67e87f0..9fa23b1 100644 (file)
@@ -53,14 +53,19 @@ void PIRPanelSelectionForm::on_mediaCheckBox_stateChanged(int arg1)
   mainWindow->managePanel(Media_Panel, arg1);
 }
 
-void PIRPanelSelectionForm::on_tvCheckBox_stateChanged(int arg1)
+void PIRPanelSelectionForm::on_media2CheckBox_stateChanged(int arg1)
 {
-  mainWindow->managePanel(TV_Panel, arg1);
+  mainWindow->managePanel(Media2_Panel, arg1);
 }
 
-void PIRPanelSelectionForm::on_media2CheckBox_stateChanged(int arg1)
+void PIRPanelSelectionForm::on_recordCheckBox_stateChanged(int arg1)
 {
-  mainWindow->managePanel(Media2_Panel, arg1);
+  mainWindow->managePanel(Record_Panel, arg1);
+}
+
+void PIRPanelSelectionForm::on_tvCheckBox_stateChanged(int arg1)
+{
+  mainWindow->managePanel(TV_Panel, arg1);
 }
 
 void PIRPanelSelectionForm::on_inputCheckBox_stateChanged(int arg1)
index 9a81565..e8dd33b 100644 (file)
@@ -25,8 +25,9 @@ private slots:
   void on_keypadCheckBox_stateChanged(int arg1);
   void on_menuCheckBox_stateChanged(int arg1);
   void on_mediaCheckBox_stateChanged(int arg1);
-  void on_tvCheckBox_stateChanged(int arg1);
   void on_media2CheckBox_stateChanged(int arg1);
+  void on_recordCheckBox_stateChanged(int arg1);
+  void on_tvCheckBox_stateChanged(int arg1);
   void on_inputCheckBox_stateChanged(int arg1);
   void on_adjustCheckBox_stateChanged(int arg1);
   void on_acCheckBox_stateChanged(int arg1);
index aa2d76f..86690aa 100644 (file)
         </widget>
        </item>
        <item>
+        <widget class="QCheckBox" name="recordCheckBox">
+         <property name="text">
+          <string>Program/Record Panel - control over memory and storage</string>
+         </property>
+        </widget>
+       </item>
+       <item>
         <widget class="QCheckBox" name="tvCheckBox">
          <property name="text">
           <string>TV Panel - Teletext and Picture-in-Picture</string>
index 5ea463e..4eb5ed3 100644 (file)
@@ -2,8 +2,9 @@
 #include "ui_pirselectdeviceform.h"
 #include "pirkeysetwidgetitem.h"
 
+PIRDeviceTypeMgr deviceTypeManager;
+
 extern PIRMakeMgr makeManager;
-extern PIRDeviceTypeMgr deviceManager;
 
 PIRSelectDeviceForm::PIRSelectDeviceForm(
   QWidget *parent)
@@ -19,7 +20,7 @@ PIRSelectDeviceForm::PIRSelectDeviceForm(
 
   // push the list of makers into the make combo box:
   makeManager.populateComboBox(ui->makeComboBox);
-  deviceManager.populateComboBox(ui->deviceComboBox);
+  deviceTypeManager.populateComboBox(ui->deviceComboBox);
 
   // Connection telling main window that keyset has been selected:
   connect(
@@ -50,6 +51,7 @@ PIRSelectDeviceForm::~PIRSelectDeviceForm()
   delete ui;
 }
 
+/*
 void PIRSelectDeviceForm::addNameToList(
   QString name,
   unsigned int index,
@@ -57,6 +59,7 @@ void PIRSelectDeviceForm::addNameToList(
 {
   ui->deviceListWidget->addItem(new PIRKeysetWidgetItem(name, index, make));
 }
+*/
 
 void PIRSelectDeviceForm::addWidgetItem(
   PIRKeysetWidgetItem *kwi)
index ed30206..63b05fe 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "pirmakenames.h"
 #include "pirdevicetypenames.h"
+#include "pirdeviceinfo.h"
 
 class PIRKeysetWidgetItem;
 class QListWidget;
@@ -18,13 +19,17 @@ class PIRSelectDeviceForm : public QWidget
   Q_OBJECT
   
 public:
-  explicit PIRSelectDeviceForm(QWidget *parent = 0);
+  explicit PIRSelectDeviceForm(
+    QWidget *parent = 0);
+
   ~PIRSelectDeviceForm();
 
+/*
   void addNameToList(
     QString name,
     unsigned int index,
     PIRMakeName make);
+*/
 
   void addWidgetItem(
     PIRKeysetWidgetItem *kwi);
index ede45f0..06d4d9b 100644 (file)
@@ -11,7 +11,7 @@
    </rect>
   </property>
   <property name="windowTitle">
-   <string>Form</string>
+   <string>Select Device</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
    <property name="margin">
index 072f361..67c9e61 100644 (file)
@@ -41,6 +41,7 @@ PIRSelectKeysetForm::~PIRSelectKeysetForm()
   delete ui;
 }
 
+/*
 void PIRSelectKeysetForm::addNameToList(
   QString name,
   unsigned int index,
@@ -48,6 +49,7 @@ void PIRSelectKeysetForm::addNameToList(
 {
   ui->keysetListWidget->addItem(new PIRKeysetWidgetItem(name, index, make));
 }
+*/
 
 void PIRSelectKeysetForm::addWidgetItem(
   PIRKeysetWidgetItem *kwi)
index 2d88ac8..45706aa 100644 (file)
@@ -21,10 +21,12 @@ public:
   explicit PIRSelectKeysetForm(QWidget *parent = 0);
   ~PIRSelectKeysetForm();
 
+/*
   void addNameToList(
     QString name,
     unsigned int index,
     PIRMakeName make);
+*/
 
   void addWidgetItem(
     PIRKeysetWidgetItem *kwi);
index d6e469b..9b376af 100644 (file)
@@ -73,6 +73,7 @@ void RC6SkyProtocol::startSendingCommand(
       // b) a "start bit", value 1 (so 444 us pulse, 444 us space)
       // c) three control bits, set to "110" (i.e., mode "6")
       // d) the double-sized "trailer" bit, set based on the keypress count:
+      // d2) I'm trying out setting the toggle bit to always be 0.
 
       rx51device.addSingle(HEADER_PULSE); // lead pulse
       duration += HEADER_PULSE;
index 311bbd9..4d089f8 100644 (file)
@@ -1,3 +1,10 @@
+pierogi (1.1.1) unstable; urgency=low
+  * The Record button returns to Pierogi via a new "Program/Record" panel
+  * Several fixes for Select Keyset by Device window (thanks sixwheeledbeast!)
+  * First pass at keysets for Compro, Kaon, and QNAP
+
+ -- John Pietrzak <jpietrzak8@gmail.com>  Fri, 02 Mar 2012 08:42:07 -0500
+
 pierogi (1.1.0) unstable; urgency=low
   * GUI changed - "panels" instead of "tabs", new navigation controls.
   * New window added for selecting keysets by device. "Device" filter removed from select keyset by name window.
index 7b554f5..47784f0 100644 (file)
@@ -11,8 +11,8 @@ Architecture: armel
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: Universal Infrared (IR) Remote Control for N900
  Pierogi is a Universal Infrared Remote Control app for the Nokia N900.  It is independent from the LIRC server, and stores all configuration info internally.
-XB-Maemo-Upgrade-Description: New GUI
- In order to provide more flexibility to Pierogi, I've revamped the GUI.  Mostly, I've replaced the tab-bar with a construct of my own.  We'll have to see how well this works.  Also, many new keysets in this update, as well as better A/C support.
+XB-Maemo-Upgrade-Description: Record button is back
+ The "Record" button makes its triumphant return to Pierogi through a new "Program/Record" control panel.  Also several bug-fixes to the Select Keyset by Device window (thanks to sixwheeledbeast for pointing them out), and a first pass at keysets for Compro, Kaon, and QNAP
 XSBC-Bugtracker: https://garage.maemo.org/tracker/?func=add&group_id=2286&atid=7641
 XB-Maemo-Display-Name: Pierogi
 XB-Maemo-Icon-26: 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