From 04d45dab5c6b32e9214fa21b7ade432da95c8a98 Mon Sep 17 00:00:00 2001 From: John Pietrzak Date: Mon, 12 Mar 2012 20:03:36 -0400 Subject: [PATCH] A couple of UI additions This update includes support for searching the Keyset and Device lists using the keyboard. Also, a new preferences item added to choose a "default keyset"; currently, the only thing the default can do is override the volume controls. A Digital Stream keyset bug was fixed, a new Grundig satellite keyset and Daewoo TV keyset added, and a new keyset created for Lexuz. --- PierogiResources.qrc | 1 + dialogs/pirtextentrydialog.cpp | 14 + dialogs/pirtextentrydialog.h | 22 + dialogs/pirtextentrydialog.ui | 74 ++ forms/piraltmainform.cpp | 52 +- forms/piraltmainform.h | 6 + forms/pirmacroform.cpp | 39 ++ forms/pirmacroform.h | 33 + forms/pirmacroform.ui | 136 ++++ forms/pirmainform.cpp | 52 +- forms/pirmainform.h | 6 + icons/delete_icon&48.png | Bin 0 -> 3848 bytes keysets/daewoo.cpp | 54 ++ keysets/daewoo.h | 10 + keysets/digitalstream.cpp | 7 +- keysets/grundig.cpp | 63 ++ keysets/grundig.h | 10 + keysets/jvc.cpp | 1 + keysets/lexuz.cpp | 62 ++ keysets/lexuz.h | 18 + keysets/logitech.cpp | 2 + keysets/qnap.cpp | 2 + mainwindow.cpp | 59 +- mainwindow.h | 12 + pierogi.pro | 19 +- pierogi.pro.user | 10 +- pirkeysetmanager.cpp | 1115 +++++++++++++++--------------- pirmakenames.cpp | 1 + pirmakenames.h | 1 + pirpanelmanager.cpp | 27 + pirpanelmanager.h | 9 + pirpreferencesform.cpp | 94 ++- pirpreferencesform.h | 22 +- pirpreferencesform.ui | 80 ++- pirselectdeviceform.cpp | 60 +- pirselectdeviceform.h | 14 +- pirselectdeviceform.ui | 37 +- pirselectkeysetform.cpp | 64 +- pirselectkeysetform.h | 16 +- pirselectkeysetform.ui | 36 +- protocols/protonprotocol.cpp | 128 ++++ protocols/protonprotocol.h | 30 + qtc_packaging/debian_fremantle/changelog | 9 + qtc_packaging/debian_fremantle/control | 4 +- 44 files changed, 1907 insertions(+), 604 deletions(-) create mode 100644 dialogs/pirtextentrydialog.cpp create mode 100644 dialogs/pirtextentrydialog.h create mode 100644 dialogs/pirtextentrydialog.ui create mode 100644 forms/pirmacroform.cpp create mode 100644 forms/pirmacroform.h create mode 100644 forms/pirmacroform.ui create mode 100755 icons/delete_icon&48.png create mode 100644 keysets/lexuz.cpp create mode 100644 keysets/lexuz.h create mode 100644 protocols/protonprotocol.cpp create mode 100644 protocols/protonprotocol.h diff --git a/PierogiResources.qrc b/PierogiResources.qrc index 86b2991..a301d56 100644 --- a/PierogiResources.qrc +++ b/PierogiResources.qrc @@ -33,5 +33,6 @@ doc/documentation.html icons/PierogiIcon.png icons/red_pause.png + icons/delete_icon&48.png diff --git a/dialogs/pirtextentrydialog.cpp b/dialogs/pirtextentrydialog.cpp new file mode 100644 index 0000000..e5730a6 --- /dev/null +++ b/dialogs/pirtextentrydialog.cpp @@ -0,0 +1,14 @@ +#include "pirtextentrydialog.h" +#include "ui_pirtextentrydialog.h" + +PIRTextEntryDialog::PIRTextEntryDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::PIRTextEntryDialog) +{ + ui->setupUi(this); +} + +PIRTextEntryDialog::~PIRTextEntryDialog() +{ + delete ui; +} diff --git a/dialogs/pirtextentrydialog.h b/dialogs/pirtextentrydialog.h new file mode 100644 index 0000000..684b6fc --- /dev/null +++ b/dialogs/pirtextentrydialog.h @@ -0,0 +1,22 @@ +#ifndef PIRTEXTENTRYDIALOG_H +#define PIRTEXTENTRYDIALOG_H + +#include + +namespace Ui { +class PIRTextEntryDialog; +} + +class PIRTextEntryDialog : public QDialog +{ + Q_OBJECT + +public: + explicit PIRTextEntryDialog(QWidget *parent = 0); + ~PIRTextEntryDialog(); + +private: + Ui::PIRTextEntryDialog *ui; +}; + +#endif // PIRTEXTENTRYDIALOG_H diff --git a/dialogs/pirtextentrydialog.ui b/dialogs/pirtextentrydialog.ui new file mode 100644 index 0000000..c885837 --- /dev/null +++ b/dialogs/pirtextentrydialog.ui @@ -0,0 +1,74 @@ + + + PIRTextEntryDialog + + + + 0 + 0 + 800 + 480 + + + + Dialog + + + + 8 + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + PIRTextEntryDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + PIRTextEntryDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/forms/piraltmainform.cpp b/forms/piraltmainform.cpp index 9bf566b..54fc6d3 100644 --- a/forms/piraltmainform.cpp +++ b/forms/piraltmainform.cpp @@ -12,11 +12,13 @@ PIRAltMainForm::PIRAltMainForm( MainWindow *mw) : QWidget(0), ui(new Ui::PIRAltMainForm), - mainWindow(mw) + mainWindow(mw), + defaultID(0) { ui->setupUi(this); } + PIRAltMainForm::~PIRAltMainForm() { delete ui; @@ -27,6 +29,9 @@ void PIRAltMainForm::enableButtons( const PIRKeysetManager *keyset, unsigned int id) { + // No default id: + defaultID = 0; + emit powerEnabled(keyset->hasKey(id, Power_Key)); emit volumeUpEnabled(keyset->hasKey(id, VolumeUp_Key)); emit volumeDownEnabled(keyset->hasKey(id, VolumeDown_Key)); @@ -39,9 +44,34 @@ void PIRAltMainForm::enableButtons( } +void PIRAltMainForm::enableButtons( + const PIRKeysetManager *keyset, + unsigned int cID, + unsigned int dID) +{ + defaultID = dID; + emit powerEnabled(keyset->hasKey(cID, Power_Key)); + emit volumeUpEnabled(keyset->hasKey(dID, VolumeUp_Key)); + emit volumeDownEnabled(keyset->hasKey(dID, VolumeDown_Key)); + emit channelUpEnabled(keyset->hasKey(cID, ChannelUp_Key)); + emit channelDownEnabled(keyset->hasKey(cID, ChannelDown_Key)); + emit muteEnabled(keyset->hasKey(dID, Mute_Key)); + + emit keysetMakeChanged(makeManager.getMakeString(keyset->getMake(cID))); + emit keysetNameChanged(keyset->getDisplayName(cID)); +} + + void PIRAltMainForm::on_volumeUpButton_pressed() { - mainWindow->startRepeating(VolumeUp_Key); + if (defaultID) + { + mainWindow->startRepeating(VolumeUp_Key, defaultID); + } + else + { + mainWindow->startRepeating(VolumeUp_Key); + } } void PIRAltMainForm::on_volumeUpButton_released() @@ -51,7 +81,14 @@ void PIRAltMainForm::on_volumeUpButton_released() void PIRAltMainForm::on_volumeDownButton_pressed() { - mainWindow->startRepeating(VolumeDown_Key); + if (defaultID) + { + mainWindow->startRepeating(VolumeDown_Key, defaultID); + } + else + { + mainWindow->startRepeating(VolumeDown_Key); + } } void PIRAltMainForm::on_volumeDownButton_released() @@ -61,7 +98,14 @@ void PIRAltMainForm::on_volumeDownButton_released() void PIRAltMainForm::on_muteButton_pressed() { - mainWindow->startRepeating(Mute_Key); + if (defaultID) + { + mainWindow->startRepeating(Mute_Key, defaultID); + } + else + { + mainWindow->startRepeating(Mute_Key); + } } void PIRAltMainForm::on_muteButton_released() diff --git a/forms/piraltmainform.h b/forms/piraltmainform.h index cfd7a48..57d6e92 100644 --- a/forms/piraltmainform.h +++ b/forms/piraltmainform.h @@ -25,6 +25,11 @@ public: const PIRKeysetManager *keyset, unsigned int id); + void enableButtons( + const PIRKeysetManager *keyset, + unsigned int currentID, + unsigned int defaultID); + signals: void powerEnabled(bool); void volumeUpEnabled(bool); @@ -54,6 +59,7 @@ private: Ui::PIRAltMainForm *ui; MainWindow *mainWindow; + unsigned int defaultID; }; #endif // PIRALTMAINFORM_H diff --git a/forms/pirmacroform.cpp b/forms/pirmacroform.cpp new file mode 100644 index 0000000..b62f0b4 --- /dev/null +++ b/forms/pirmacroform.cpp @@ -0,0 +1,39 @@ +#include "pirmacroform.h" +#include "ui_pirmacroform.h" + +PIRMacroForm::PIRMacroForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::PIRMacroForm) +{ + ui->setupUi(this); +} + +PIRMacroForm::~PIRMacroForm() +{ + delete ui; +} + +void PIRMacroForm::on_cycleCheckBox_stateChanged(int arg1) +{ + +} + +void PIRMacroForm::on_spinBox_valueChanged(int arg1) +{ + +} + +void PIRMacroForm::on_prevMacroButton_clicked() +{ + +} + +void PIRMacroForm::on_nextMacroButton_clicked() +{ + +} + +void PIRMacroForm::on_newMacroButton_clicked() +{ + +} diff --git a/forms/pirmacroform.h b/forms/pirmacroform.h new file mode 100644 index 0000000..af76338 --- /dev/null +++ b/forms/pirmacroform.h @@ -0,0 +1,33 @@ +#ifndef PIRMACROFORM_H +#define PIRMACROFORM_H + +#include + +namespace Ui { +class PIRMacroForm; +} + +class PIRMacroForm : public QWidget +{ + Q_OBJECT + +public: + explicit PIRMacroForm(QWidget *parent = 0); + ~PIRMacroForm(); + +private slots: + void on_cycleCheckBox_stateChanged(int arg1); + + void on_spinBox_valueChanged(int arg1); + + void on_prevMacroButton_clicked(); + + void on_nextMacroButton_clicked(); + + void on_newMacroButton_clicked(); + +private: + Ui::PIRMacroForm *ui; +}; + +#endif // PIRMACROFORM_H diff --git a/forms/pirmacroform.ui b/forms/pirmacroform.ui new file mode 100644 index 0000000..9b5d68a --- /dev/null +++ b/forms/pirmacroform.ui @@ -0,0 +1,136 @@ + + + PIRMacroForm + + + + 0 + 0 + 800 + 480 + + + + Macro Processor + + + + + + + + Continuously Cycle Macros + + + + + + + + + Cycle Delay in Seconds: + + + + + + + 5 + + + 60 + + + 5 + + + + + + + + + + 0 + 0 + + + + Prev Macro + + + + :/icons/br_up_icon&48.png:/icons/br_up_icon&48.png + + + + 48 + 48 + + + + + + + + + 0 + 0 + + + + Next Macro + + + + :/icons/br_down_icon&48.png:/icons/br_down_icon&48.png + + + + 48 + 48 + + + + + + + + + + true + + + + + 0 + 0 + 529 + 420 + + + + + 0 + + + + + + + + + + + + New Macro + + + + + + + + + + diff --git a/forms/pirmainform.cpp b/forms/pirmainform.cpp index 6fcc2ea..c77ae67 100644 --- a/forms/pirmainform.cpp +++ b/forms/pirmainform.cpp @@ -12,7 +12,8 @@ PIRMainForm::PIRMainForm( MainWindow *mw) : QWidget(0), ui(new Ui::PIRMainForm), - mainWindow(mw) + mainWindow(mw), + defaultID(0) { ui->setupUi(this); } @@ -27,6 +28,9 @@ void PIRMainForm::enableButtons( const PIRKeysetManager *keyset, unsigned int id) { + // No default id: + defaultID = 0; + emit powerEnabled(keyset->hasKey(id, Power_Key)); emit volumeUpEnabled(keyset->hasKey(id, VolumeUp_Key)); emit volumeDownEnabled(keyset->hasKey(id, VolumeDown_Key)); @@ -39,6 +43,25 @@ void PIRMainForm::enableButtons( } +void PIRMainForm::enableButtons( + const PIRKeysetManager *keyset, + unsigned int cID, + unsigned int dID) +{ + defaultID = dID; + + emit powerEnabled(keyset->hasKey(cID, Power_Key)); + emit volumeUpEnabled(keyset->hasKey(dID, VolumeUp_Key)); + emit volumeDownEnabled(keyset->hasKey(dID, VolumeDown_Key)); + emit channelUpEnabled(keyset->hasKey(cID, ChannelUp_Key)); + emit channelDownEnabled(keyset->hasKey(cID, ChannelDown_Key)); + emit muteEnabled(keyset->hasKey(dID, Mute_Key)); + + emit keysetMakeChanged(makeManager.getMakeString(keyset->getMake(cID))); + emit keysetNameChanged(keyset->getDisplayName(cID)); +} + + void PIRMainForm::on_powerButton_pressed() { mainWindow->startRepeating(Power_Key); @@ -71,7 +94,14 @@ void PIRMainForm::on_mainChannelDownButton_released() void PIRMainForm::on_mainVolumeUp_pressed() { - mainWindow->startRepeating(VolumeUp_Key); + if (defaultID) + { + mainWindow->startRepeating(VolumeUp_Key, defaultID); + } + else + { + mainWindow->startRepeating(VolumeUp_Key); + } } void PIRMainForm::on_mainVolumeUp_released() @@ -81,7 +111,14 @@ void PIRMainForm::on_mainVolumeUp_released() void PIRMainForm::on_mainVolumeDownButton_pressed() { - mainWindow->startRepeating(VolumeDown_Key); + if (defaultID) + { + mainWindow->startRepeating(VolumeDown_Key, defaultID); + } + else + { + mainWindow->startRepeating(VolumeDown_Key); + } } void PIRMainForm::on_mainVolumeDownButton_released() @@ -91,7 +128,14 @@ void PIRMainForm::on_mainVolumeDownButton_released() void PIRMainForm::on_muteButton_pressed() { - mainWindow->startRepeating(Mute_Key); + if (defaultID) + { + mainWindow->startRepeating(Mute_Key, defaultID); + } + else + { + mainWindow->startRepeating(Mute_Key); + } } void PIRMainForm::on_muteButton_released() diff --git a/forms/pirmainform.h b/forms/pirmainform.h index 125ed17..d1049ab 100644 --- a/forms/pirmainform.h +++ b/forms/pirmainform.h @@ -23,6 +23,11 @@ public: const PIRKeysetManager *keyset, unsigned int id); + void enableButtons( + const PIRKeysetManager *keyset, + unsigned int currentID, + unsigned int defaultID); + signals: void powerEnabled(bool); void volumeUpEnabled(bool); @@ -52,6 +57,7 @@ private: Ui::PIRMainForm *ui; MainWindow *mainWindow; + unsigned int defaultID; }; #endif // PIRMAINFORM_H diff --git a/icons/delete_icon&48.png b/icons/delete_icon&48.png new file mode 100755 index 0000000000000000000000000000000000000000..793caf6ec6201c7dca05a083076e806cb4d433f0 GIT binary patch literal 3848 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 ZVPj-$QI#sAK7$kws?lK9zps0#`ak9OOlbfB literal 0 HcmV?d00001 diff --git a/keysets/daewoo.cpp b/keysets/daewoo.cpp index ea3dbf4..607b305 100644 --- a/keysets/daewoo.cpp +++ b/keysets/daewoo.cpp @@ -2,6 +2,7 @@ #include "protocols/rc5protocol.h" #include "protocols/daewooprotocol.h" #include "protocols/necprotocol.h" +#include "protocols/protonprotocol.h" DaewooTV1::DaewooTV1( unsigned int index) @@ -286,6 +287,59 @@ void DaewooTV4::populateProtocol( } +DaewooTV5::DaewooTV5( + unsigned int index) + : PIRKeysetMetaData( + "TV Keyset 5", + Daewoo_Make, + index) +{ +} + + +void DaewooTV5::populateProtocol( + QObject *guiObject) +{ + if (threadableProtocol) + { + // Keyset already populated. + return; + } + + threadableProtocol = new ProtonProtocol(guiObject, index); + + setPreData(0x14, 8); + + addKey("0", Zero_Key, 0x00, 8); + addKey("1", One_Key, 0x01, 8); + addKey("2", Two_Key, 0x02, 8); + addKey("3", Three_Key, 0x03, 8); + addKey("4", Four_Key, 0x04, 8); + addKey("5", Five_Key, 0x05, 8); + addKey("6", Six_Key, 0x06, 8); + addKey("7", Seven_Key, 0x07, 8); + addKey("8", Eight_Key, 0x08, 8); + addKey("9", Nine_Key, 0x09, 8); + addKey("Sleep", Sleep_Key, 0x0D, 8); + addKey("INFO", Info_Key, 0x11, 8); + addKey("MUTE", Mute_Key, 0x12, 8); + addKey("VOL+", VolumeUp_Key, 0x13, 8); + addKey("right", Right_Key, 0x13, 8); + addKey("VOL-", VolumeDown_Key, 0x14, 8); + addKey("left", Left_Key, 0x14, 8); + addKey("POWER", Power_Key, 0x15, 8); + addKey("INPUT", Input_Key, 0x16, 8); + addKey("CH+", ChannelUp_Key, 0x17, 8); + addKey("up", Up_Key, 0x17, 8); + addKey("CH-", ChannelDown_Key, 0x18, 8); + addKey("down", Down_Key, 0x18, 8); + addKey("Picture", PictureMode_Key, 0x1A, 8); + addKey("PREV", PrevChannel_Key, 0x20, 8); + addKey("MENU", Menu_Key, 0x22, 8); + addKey("CC", Captions_Key, 0x25, 8); +} + + DaewooDVD1::DaewooDVD1( unsigned int index) : PIRKeysetMetaData( diff --git a/keysets/daewoo.h b/keysets/daewoo.h index 7571663..009af6a 100644 --- a/keysets/daewoo.h +++ b/keysets/daewoo.h @@ -45,6 +45,16 @@ public: QObject *guiObject); }; +class DaewooTV5: public PIRKeysetMetaData +{ +public: + DaewooTV5( + unsigned int index); + + virtual void populateProtocol( + QObject *guiObject); +}; + class DaewooDVD1: public PIRKeysetMetaData { public: diff --git a/keysets/digitalstream.cpp b/keysets/digitalstream.cpp index 9769bc2..51e0705 100644 --- a/keysets/digitalstream.cpp +++ b/keysets/digitalstream.cpp @@ -23,7 +23,8 @@ void DigitalStreamReceiver::populateProtocol( threadableProtocol = new NECProtocol(guiObject, index, true, true); - setPreData(0x482C, 16); +// setPreData(0x482C, 16); + setPreData(0x3412, 16); addKey("Power", Power_Key, 0x00, 8); addKey("Ok", Select_Key, 0x01, 8); @@ -52,11 +53,11 @@ void DigitalStreamReceiver::populateProtocol( addKey("EPG", Guide_Key, 0x1E, 8); addKey("FAV", Favorites_Key, 0x1F, 8); - addKey("Prev", PrevChannel_Key, 0x20, 8); // ? + addKey("Prev", PrevChannel_Key, 0x20, 8); addKey("Mute", Mute_Key, 0x22, 8); addKey("Audio", Audio_Key, 0x23, 8); addKey("Zoom", Zoom_Key, 0x24, 8); addKey("CC", Captions_Key, 0x25, 8); - addKey("Info", Info_Key, 0x28, 8); + addKey("Info", Info_Key, 0x28, 8); // "A/D" addKey("Meter", Unmapped_Key, 0x2C, 8); } diff --git a/keysets/grundig.cpp b/keysets/grundig.cpp index 13352ea..0081b8a 100644 --- a/keysets/grundig.cpp +++ b/keysets/grundig.cpp @@ -116,6 +116,69 @@ void GrundigSat2::populateProtocol( } +GrundigSat3::GrundigSat3( + unsigned int index) + : PIRKeysetMetaData( + "Satellite Keyset 3", + Grundig_Make, + index) +{ +} + + +void GrundigSat3::populateProtocol( + QObject *guiObject) +{ + if (threadableProtocol) + { + // Keyset already populated. + return; + } + + threadableProtocol = new NECProtocol(guiObject, index, false, true); + + setPreData(0x80, 8); + + addKey("menu", Menu_Key, 0x12, 8); + addKey("Ch-", ChannelDown_Key, 0x16, 8); + addKey("3", Three_Key, 0x40, 8); + addKey("2", Two_Key, 0x41, 8); + addKey("1", One_Key, 0x42, 8); + addKey("6", Six_Key, 0x44, 8); + addKey("5", Five_Key, 0x45, 8); + addKey("4", Four_Key, 0x46, 8); + addKey("0", Zero_Key, 0x47, 8); + addKey("9", Nine_Key, 0x48, 8); + addKey("8", Eight_Key, 0x49, 8); + addKey("7", Seven_Key, 0x4A, 8); + addKey("mute", Mute_Key, 0x4C, 8); + addKey("up", Up_Key, 0x4E, 8); + addKey("sub", Captions_Key, 0x73, 8); + addKey("OK", Select_Key, 0x75, 8); + addKey("Yellow", Yellow_Key, 0x78, 8); + addKey("text", Teletext_Key, 0x7B, 8); + addKey("Vol-", VolumeDown_Key, 0x7D, 8); + addKey("exit", Exit_Key, 0x7E, 8); + addKey("AD", Unmapped_Key, 0x7F, 8); + addKey("power", Power_Key, 0xB2, 8); + addKey("TV/DTV", TunerInput_Key, 0xB7, 8); + addKey("Guide", Guide_Key, 0xB8, 8); + addKey("Info", Info_Key, 0xB9, 8); + addKey("Green", Green_Key, 0xBA, 8); + addKey("Red", Red_Key, 0xBB, 8); + addKey("down", Down_Key, 0xBE, 8); + addKey("right", Right_Key, 0xC4, 8); + addKey("left", Left_Key, 0xC8, 8); + addKey("Blue", Blue_Key, 0xCC, 8); + addKey("wide", AspectRatio_Key, 0xCF, 8); + addKey("back", PrevChannel_Key, 0xD2, 8); + addKey("Vol+", VolumeUp_Key, 0xD4, 8); + addKey("Ch List", Unmapped_Key, 0xD5, 8); + addKey("Ch+", ChannelUp_Key, 0xD6, 8); + addKey("Swap", Unmapped_Key, 0xD8, 8); +} + + GrundigAmp1::GrundigAmp1( unsigned int index) : PIRKeysetMetaData( diff --git a/keysets/grundig.h b/keysets/grundig.h index 2b4bb4e..567330c 100644 --- a/keysets/grundig.h +++ b/keysets/grundig.h @@ -25,6 +25,16 @@ public: QObject *guiObject); }; +class GrundigSat3: public PIRKeysetMetaData +{ +public: + GrundigSat3( + unsigned int index); + + virtual void populateProtocol( + QObject *guiObject); +}; + class GrundigAmp1: public PIRKeysetMetaData { public: diff --git a/keysets/jvc.cpp b/keysets/jvc.cpp index 4c125a4..ca01639 100644 --- a/keysets/jvc.cpp +++ b/keysets/jvc.cpp @@ -644,6 +644,7 @@ JVCAudio1::JVCAudio1( JVC_Make, index) { + addControlledDevice(JVC_Make, "RX-5062", Audio_Device); } diff --git a/keysets/lexuz.cpp b/keysets/lexuz.cpp new file mode 100644 index 0000000..3eb53ac --- /dev/null +++ b/keysets/lexuz.cpp @@ -0,0 +1,62 @@ +#include "lexuz.h" +#include "protocols/necprotocol.h" + + +LexuzDVB1::LexuzDVB1( + unsigned int index) + : PIRKeysetMetaData( + "DVB Keyset 1", + Lexuz_Make, + index) +{ +} + + +void LexuzDVB1::populateProtocol( + QObject *guiObject) +{ + if (threadableProtocol) + { + // Keyset already populated. + return; + } + + threadableProtocol = new NECProtocol(guiObject, index, true, true); + + setPreData(0xF902, 0x16); + + addKey("CH+", ChannelUp_Key, 0x00, 8); + addKey("up_arrow", Up_Key, 0x00, 8); + addKey("CH-", ChannelDown_Key, 0x01, 8); + addKey("down_arrow", Down_Key, 0x01, 8); + addKey("left_arrow", Left_Key, 0x02, 8); + addKey("right_arrow", Right_Key, 0x03, 8); + addKey("Menu", Menu_Key, 0x04, 8); + addKey("sat", SatInput_Key, 0x05, 8); + addKey("Info", Info_Key, 0x06, 8); + addKey("Guide", Guide_Key, 0x08, 8); + addKey("Power", Power_Key, 0x0A, 8); + addKey("Mute", Mute_Key, 0x0C, 8); + addKey("num_0", Zero_Key, 0x10, 8); + addKey("num_1", One_Key, 0x11, 8); + addKey("num_2", Two_Key, 0x12, 8); + addKey("num_3", Three_Key, 0x13, 8); + addKey("num_4", Four_Key, 0x14, 8); + addKey("num_5", Five_Key, 0x15, 8); + addKey("num_6", Six_Key, 0x16, 8); + addKey("num_7", Seven_Key, 0x17, 8); + addKey("num_8", Eight_Key, 0x18, 8); + addKey("num_9", Nine_Key, 0x19, 8); + addKey("TV/Radio", Input_Key, 0x1A, 8); + addKey("exit", Exit_Key, 0x1C, 8); + addKey("sleep", Sleep_Key, 0x1E, 8); + addKey("Select", Select_Key, 0x1F, 8); + addKey("Enter", Enter_Key, 0x1F, 8); + addKey("favourite", Favorites_Key, 0x41, 8); + addKey("Page-", PageDown_Key, 0x43, 8); + addKey("Page+", PageUp_Key, 0x44, 8); + addKey("blue", Blue_Key, 0x48, 8); + addKey("yellow", Yellow_Key, 0x49, 8); + addKey("green", Green_Key, 0x4A, 8); + addKey("red", Red_Key, 0x4B, 8); +} diff --git a/keysets/lexuz.h b/keysets/lexuz.h new file mode 100644 index 0000000..02c42f2 --- /dev/null +++ b/keysets/lexuz.h @@ -0,0 +1,18 @@ +#ifndef LEXUZ_H +#define LEXUZ_H + +#include "pirkeysetmetadata.h" + +class QObject; + +class LexuzDVB1: public PIRKeysetMetaData +{ +public: + LexuzDVB1( + unsigned int index); + + virtual void populateProtocol( + QObject *guiObject); +}; + +#endif // LEXUZ_H diff --git a/keysets/logitech.cpp b/keysets/logitech.cpp index 5c7792a..22ae2d1 100644 --- a/keysets/logitech.cpp +++ b/keysets/logitech.cpp @@ -53,6 +53,8 @@ LogitechSqueezebox::LogitechSqueezebox( Logitech_Make, index) { + addControlledDevice(Logitech_Make, "Squeezebox 2", Audio_Device); + addControlledDevice(Logitech_Make, "Squeezebox Radio", Audio_Device); } diff --git a/keysets/qnap.cpp b/keysets/qnap.cpp index 93b9377..94fa3d5 100644 --- a/keysets/qnap.cpp +++ b/keysets/qnap.cpp @@ -9,6 +9,8 @@ QNAPPlayer1::QNAPPlayer1( QNAP_Make, index) { + addControlledDevice(QNAP_Make, "NMP-1000", Other_Device); + addControlledDevice(QNAP_Make, "NMP-1000P", Other_Device); } diff --git a/mainwindow.cpp b/mainwindow.cpp index ade853a..d7e9921 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -19,6 +19,7 @@ #include "pirpanelmanager.h" //#define DEBUGGING +//#include // Some ugly globals used for thread communications: @@ -44,7 +45,7 @@ MainWindow::MainWindow(QWidget *parent) preferencesForm(0), documentationForm(0), aboutForm(0), - currentKeyset(0) + currentKeyset(1) // Zero is not a valid keyset any more { ui->setupUi(this); @@ -55,20 +56,17 @@ MainWindow::MainWindow(QWidget *parent) myKeysets = new PIRKeysetManager(); myPanels = new PIRPanelManager(this); - // Set up the keyset selection window: + // Construct the forms: + panelSelectionForm = new PIRPanelSelectionForm(this); + myPanels->setupPanels(panelSelectionForm); + 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); - myPanels->setupPanels(panelSelectionForm); - - // Set up the preferences window: - preferencesForm = new PIRPreferencesForm(this); + preferencesForm = new PIRPreferencesForm(this, myKeysets); // Remember any favorites the user has already set: populateFavorites(); @@ -235,7 +233,23 @@ void MainWindow::enableButtons() // Just to be sure, check to see if the keyset has been populated: myKeysets->populateKeyset(this, currentKeyset); - myPanels->enableButtons(myKeysets, currentKeyset); + if (preferencesForm) + { + unsigned int dk = preferencesForm->getDefaultKeyset(); + if (preferencesForm->defaultControlsVolume() && dk) + { + myKeysets->populateKeyset(this, dk); + myPanels->enableButtons(myKeysets, currentKeyset, dk); + } + else + { + myPanels->enableButtons(myKeysets, currentKeyset); + } + } + else + { + myPanels->enableButtons(myKeysets, currentKeyset); + } } @@ -251,6 +265,18 @@ void MainWindow::useAltMainPanel() } +QString MainWindow::getCurrentMake() +{ + return makeManager.getMakeString(myKeysets->getMake(currentKeyset)); +} + + +QString MainWindow::getCurrentName() +{ + return myKeysets->getDisplayName(currentKeyset); +} + + void MainWindow::receivedExternalWarning( const char *warning) { @@ -486,6 +512,19 @@ void MainWindow::startRepeating( } +void MainWindow::startRepeating( + PIRKeyName name, + unsigned int keysetID) +{ + QMutexLocker locker(&commandIFMutex); + if (!commandInFlight) + { + commandInFlight = true; + emit buttonPressed(keysetID, name); + } +} + + void MainWindow::stopRepeating() { QMutexLocker locker(&stopRepeatingMutex); diff --git a/mainwindow.h b/mainwindow.h index 9cd342c..2be48d2 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -44,6 +44,10 @@ public: void startRepeating( PIRKeyName name); + void startRepeating( + PIRKeyName name, + unsigned int keysetID); + void stopRepeating(); void selectPanel( @@ -75,6 +79,14 @@ public: void useMainPanel(); void useAltMainPanel(); + QString getCurrentMake(); + QString getCurrentName(); + + unsigned int getCurrentKeyset() + { + return currentKeyset; + } + signals: void buttonPressed( unsigned int keysetID, diff --git a/pierogi.pro b/pierogi.pro index 2bb1547..b7b0bcd 100644 --- a/pierogi.pro +++ b/pierogi.pro @@ -173,7 +173,11 @@ SOURCES += main.cpp mainwindow.cpp \ pirpreferencesform.cpp \ keysets/xcruiser.cpp \ keysets/benq.cpp \ - keysets/octagon.cpp + keysets/octagon.cpp \ + forms/pirmacroform.cpp \ + dialogs/pirtextentrydialog.cpp \ + keysets/lexuz.cpp \ + protocols/protonprotocol.cpp HEADERS += mainwindow.h \ pirkeynames.h \ pirmakenames.h \ @@ -322,7 +326,11 @@ HEADERS += mainwindow.h \ pirpreferencesform.h \ keysets/xcruiser.h \ keysets/benq.h \ - keysets/octagon.h + keysets/octagon.h \ + forms/pirmacroform.h \ + dialogs/pirtextentrydialog.h \ + keysets/lexuz.h \ + protocols/protonprotocol.h FORMS += mainwindow.ui \ pirdocumentationform.ui \ piraboutform.ui \ @@ -343,7 +351,9 @@ FORMS += mainwindow.ui \ pirpanelselectionform.ui \ forms/pirrecordform.ui \ forms/piraltmainform.ui \ - pirpreferencesform.ui + pirpreferencesform.ui \ + forms/pirmacroform.ui \ + dialogs/pirtextentrydialog.ui # Please do not modify the following two lines. Required for deployment. include(deployment.pri) @@ -410,7 +420,8 @@ OTHER_FILES += \ www/AdjustTab.png \ www/InputTab.png \ qtc_packaging/debian_fremantle/postrm \ - icons/red_pause.png + icons/red_pause.png \ + icons/delete_icon&48.png RESOURCES += \ PierogiResources.qrc diff --git a/pierogi.pro.user b/pierogi.pro.user index e44ed2f..c2fbf4d 100644 --- a/pierogi.pro.user +++ b/pierogi.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget @@ -79,7 +79,7 @@ dpkg-buildpackage -sa -S -uc -us /Users/john/QtSDK/Maemo/4.6.2/bin/mad false - /Users/john/Develop/n900/pierogi-1.1.2 + /Users/john/Develop/n900/pierogi-1.1.3 Custom Process Step ProjectExplorer.ProcessStep @@ -200,6 +200,7 @@ /Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_5_0_armel.deb /Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_1_1_2_armel.deb /Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_0_1_armel.deb + /Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_1_1_4_armel.deb /Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_6_0_armel.deb /Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_5_2_armel.deb /Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_6_6_armel.deb @@ -246,6 +247,7 @@ 192.168.0.15 192.168.0.15 192.168.0.15 + 192.168.0.15 @@ -279,12 +281,13 @@ + 2012-01-19T22:18:07 2012-02-29T10:48:05 2012-02-06T17:22:16 - 2012-03-08T15:45:17 + 2012-03-08T23:20:27 2012-02-12T23:10:44 2012-02-09T18:12:21 2012-02-19T10:29:22 @@ -299,6 +302,7 @@ 2012-02-03T10:04:34 2012-03-04T19:56:48 2012-01-01T15:35:35 + 2012-03-12T18:26:07 2012-02-11T18:03:15 2012-02-08T20:29:28 2012-02-16T22:03:28 diff --git a/pirkeysetmanager.cpp b/pirkeysetmanager.cpp index 6178890..403318b 100644 --- a/pirkeysetmanager.cpp +++ b/pirkeysetmanager.cpp @@ -48,6 +48,7 @@ #include "keysets/kaon.h" #include "keysets/kathrein.h" #include "keysets/kenwood.h" +#include "keysets/lexuz.h" #include "keysets/lg.h" #include "keysets/logitech.h" #include "keysets/magnavox.h" @@ -109,563 +110,567 @@ PIRMakeMgr makeManager; // Now, on to the actual method definitions: PIRKeysetManager::PIRKeysetManager() - : counter(0) + : counter(0) // Note: Zero is now a sentinel value, no keysets can use it! { // Create the keysets. Ugly! This needs to be worked on! - setupKeyset(new AcerTV1(counter++)); - setupKeyset(new AcerPC1(counter++)); - - setupKeyset(new AdmiralTV1(counter++)); - setupKeyset(new AdmiralTV2(counter++)); - setupKeyset(new AdmiralVCR1(counter++)); - - setupKeyset(new AiwaVCR1(counter++)); - setupKeyset(new AiwaVCR2(counter++)); - setupKeyset(new AiwaVCR3(counter++)); - setupKeyset(new AiwaAudio1(counter++)); - setupKeyset(new AiwaAudio1a(counter++)); - setupKeyset(new AiwaAudio2(counter++)); - setupKeyset(new AiwaAudio2a(counter++)); - setupKeyset(new AiwaAudio2b(counter++)); - setupKeyset(new AiwaAudio2c(counter++)); - setupKeyset(new AiwaAudio3(counter++)); - setupKeyset(new AiwaAudio4(counter++)); - setupKeyset(new AiwaAudio5(counter++)); - setupKeyset(new AiwaAudio6(counter++)); - setupKeyset(new AiwaCarStereo1(counter++)); - setupKeyset(new AiwaDVD1(counter++)); - - setupKeyset(new AOCTV1(counter++)); - - setupKeyset(new AppleWhiteRemote(counter++)); - - setupKeyset(new ArcamReceiver1(counter++)); - - setupKeyset(new BekoTV1(counter++)); - - setupKeyset(new BenQTV1(counter++)); - - setupKeyset(new BoseRadio1(counter++)); - setupKeyset(new BoseRadio2(counter++)); - setupKeyset(new BoseRadio3(counter++)); - setupKeyset(new BoseHomeTheater1(counter++)); - - setupKeyset(new BushTV1(counter++)); - setupKeyset(new BushTV2(counter++)); - setupKeyset(new BushSTB1(counter++)); - - setupKeyset(new CambridgeCD1(counter++)); - setupKeyset(new CambridgeAudio1(counter++)); - setupKeyset(new CambridgeAudio2(counter++)); - setupKeyset(new CambridgeAudio3(counter++)); - setupKeyset(new CambridgeDVD1(counter++)); - - setupKeyset(new CanonDSLR1(counter++)); - setupKeyset(new CanonCamcorder1(counter++)); - setupKeyset(new CanonPowershot1(counter++)); - - setupKeyset(new ComproTVCard1(counter++)); - - setupKeyset(new DaewooTV1(counter++)); - setupKeyset(new DaewooTV2(counter++)); - setupKeyset(new DaewooTV3(counter++)); - setupKeyset(new DaewooTV4(counter++)); - setupKeyset(new DaewooDVD1(counter++)); - setupKeyset(new DaewooVCR1(counter++)); - setupKeyset(new DaewooVCR2(counter++)); - - setupKeyset(new DenonDVD1(counter++)); - setupKeyset(new DenonDVD2(counter++)); - setupKeyset(new DenonDVD3(counter++)); - setupKeyset(new DenonReceiver1(counter++)); - setupKeyset(new DenonReceiver1a(counter++)); - setupKeyset(new DenonReceiver1b(counter++)); - setupKeyset(new DenonReceiver1c(counter++)); - setupKeyset(new DenonReceiver1d(counter++)); - setupKeyset(new DenonReceiver1e(counter++)); - setupKeyset(new DenonReceiver1f(counter++)); - setupKeyset(new DenonReceiver2(counter++)); - setupKeyset(new DenonReceiver2a(counter++)); - setupKeyset(new DenonReceiver3(counter++)); - setupKeyset(new DenonAudio1(counter++)); - setupKeyset(new DenonAudio1a(counter++)); - setupKeyset(new DenonAudio1b(counter++)); - setupKeyset(new DenonAudio1c(counter++)); - setupKeyset(new DenonAudio1d(counter++)); - setupKeyset(new DenonAudio2(counter++)); - setupKeyset(new DenonAudio3(counter++)); - setupKeyset(new DenonAudio4(counter++)); - - setupKeyset(new DellRemote1(counter++)); - - setupKeyset(new DigitalStreamReceiver(counter++)); - - setupKeyset(new DirectvReceiver1(counter++)); - setupKeyset(new DirectvReceiver1a(counter++)); - setupKeyset(new DirectvReceiver1b(counter++)); - setupKeyset(new DirectvReceiver1c(counter++)); - setupKeyset(new DirectvReceiver1d(counter++)); - setupKeyset(new DirectvReceiver1e(counter++)); - - setupKeyset(new DishReceiver1(counter++)); - setupKeyset(new DishReceiver1a(counter++)); - setupKeyset(new DishReceiver1b(counter++)); - setupKeyset(new DishReceiver1c(counter++)); - setupKeyset(new DishReceiver1d(counter++)); - setupKeyset(new DishReceiver1e(counter++)); - setupKeyset(new DishReceiver1f(counter++)); - setupKeyset(new DishReceiver1g(counter++)); - setupKeyset(new DishReceiver1h(counter++)); - setupKeyset(new DishReceiver1i(counter++)); - setupKeyset(new DishReceiver1j(counter++)); - setupKeyset(new DishReceiver1k(counter++)); - setupKeyset(new DishReceiver1l(counter++)); - setupKeyset(new DishReceiver1m(counter++)); - setupKeyset(new DishReceiver1n(counter++)); - setupKeyset(new DishReceiver1o(counter++)); - - setupKeyset(new DreamboxSat1(counter++)); - setupKeyset(new DreamboxSat1a(counter++)); - setupKeyset(new DreamboxSat1b(counter++)); - setupKeyset(new DreamboxSat1c(counter++)); - setupKeyset(new DreamboxSat2(counter++)); - setupKeyset(new DreamboxSat3(counter++)); - setupKeyset(new DreamboxSat4(counter++)); - setupKeyset(new DreamboxSat5(counter++)); - - setupKeyset(new DSEDVD1(counter++)); - setupKeyset(new DSESat1(counter++)); - - setupKeyset(new DynexTV1(counter++)); - - setupKeyset(new EiTV1(counter++)); - - setupKeyset(new ElgatoEyeTV1(counter++)); - - setupKeyset(new EmersonTV1(counter++)); - setupKeyset(new EmersonDVD1(counter++)); - - setupKeyset(new EpsonProjector1(counter++)); - setupKeyset(new EpsonProjector2(counter++)); - - setupKeyset(new FortecReceiver1(counter++)); - setupKeyset(new FortecReceiver2(counter++)); - - setupKeyset(new FoxtelSTB1(counter++)); - setupKeyset(new FoxtelSTB2(counter++)); - - setupKeyset(new GeniusSpeakers1(counter++)); - - setupKeyset(new GoldStarTV1(counter++)); - setupKeyset(new GoldStarTV2(counter++)); - setupKeyset(new GoldStarVCR1(counter++)); - setupKeyset(new GoldStarVCR1a(counter++)); - setupKeyset(new GoldStarVCR1b(counter++)); - setupKeyset(new GoldStarVCR1c(counter++)); - setupKeyset(new GoldStarCD1(counter++)); - - setupKeyset(new GrundigSat1(counter++)); - setupKeyset(new GrundigSat2(counter++)); - setupKeyset(new GrundigAmp1(counter++)); - setupKeyset(new GrundigAudio1(counter++)); - setupKeyset(new GrundigAudio2(counter++)); - setupKeyset(new GrundigVCR1(counter++)); - setupKeyset(new GrundigVCR1a(counter++)); - setupKeyset(new GrundigTV1(counter++)); - setupKeyset(new GrundigTV2(counter++)); - setupKeyset(new GrundigTV3(counter++)); - setupKeyset(new GrundigDVD1(counter++)); - - setupKeyset(new HaierTV1(counter++)); - - setupKeyset(new HarmanKardonAmp1(counter++)); - setupKeyset(new HarmanKardonAmp2(counter++)); - setupKeyset(new HarmanKardonReceiver2(counter++)); - setupKeyset(new HarmanKardonTape1(counter++)); - setupKeyset(new HarmanKardonDVD1(counter++)); - setupKeyset(new HarmanKardonDVD1a(counter++)); - setupKeyset(new HarmanKardonCD1(counter++)); - setupKeyset(new HarmanKardonCD2(counter++)); - - setupKeyset(new HauppaugePCTV1(counter++)); - setupKeyset(new HauppaugePCTV1a(counter++)); - setupKeyset(new HauppaugePCTV1b(counter++)); - setupKeyset(new HauppaugePCTV1c(counter++)); - setupKeyset(new HauppaugePCTV2(counter++)); - - setupKeyset(new HitachiTV1(counter++)); - setupKeyset(new HitachiTV1a(counter++)); - setupKeyset(new HitachiTV1b(counter++)); - setupKeyset(new HitachiTV1c(counter++)); - setupKeyset(new HitachiTV2(counter++)); - setupKeyset(new HitachiTV3(counter++)); - setupKeyset(new HitachiProjector(counter++)); - setupKeyset(new HitachiDVD1(counter++)); - setupKeyset(new HitachiAudio1(counter++)); - setupKeyset(new HitachiVCR1(counter++)); - - setupKeyset(new HomecastReceiver1(counter++)); - setupKeyset(new HomecastReceiver2(counter++)); - - setupKeyset(new HPRemote1(counter++)); - - setupKeyset(new HuaweiSTB1(counter++)); - setupKeyset(new HuaweiSTB2(counter++)); - - setupKeyset(new HumaxReceiver1(counter++)); - setupKeyset(new HumaxReceiver2(counter++)); - setupKeyset(new HumaxReceiver3(counter++)); - - setupKeyset(new HyundaiDVD1(counter++)); - setupKeyset(new HyundaiAudio1(counter++)); - setupKeyset(new HyundaiTV1(counter++)); - - setupKeyset(new JVCSat1(counter++)); - setupKeyset(new JVCSat2(counter++)); - setupKeyset(new JVCVCR1(counter++)); - setupKeyset(new JVCVCR1a(counter++)); - setupKeyset(new JVCVCRBmode1(counter++)); - setupKeyset(new JVCVCRBmode1a(counter++)); - setupKeyset(new JVCTV1(counter++)); - setupKeyset(new JVCTV1a(counter++)); - setupKeyset(new JVCTV1b(counter++)); - setupKeyset(new JVCTV1c(counter++)); - setupKeyset(new JVCTV1d(counter++)); - setupKeyset(new JVCDAT1(counter++)); - setupKeyset(new JVCCarDeck1(counter++)); - setupKeyset(new JVCAudio1(counter++)); - setupKeyset(new JVCAudio1a(counter++)); - setupKeyset(new JVCAudio1b(counter++)); - setupKeyset(new JVCAudio2(counter++)); - setupKeyset(new JVCDVD1(counter++)); - - setupKeyset(new KaonSat1(counter++)); - - setupKeyset(new KathreinSat1(counter++)); - setupKeyset(new KathreinSat2(counter++)); - setupKeyset(new KathreinSat3(counter++)); - - setupKeyset(new KenwoodAudio1(counter++)); - setupKeyset(new KenwoodComponent1(counter++)); - setupKeyset(new KenwoodComponent2(counter++)); - setupKeyset(new KenwoodComponent3(counter++)); - setupKeyset(new KenwoodCD1(counter++)); - setupKeyset(new KenwoodDVD1(counter++)); - setupKeyset(new KenwoodTV1(counter++)); - - setupKeyset(new LGTV1(counter++)); - setupKeyset(new LGTV1a(counter++)); - setupKeyset(new LGTV1b(counter++)); - setupKeyset(new LGTV1c(counter++)); - setupKeyset(new LGTV2(counter++)); - setupKeyset(new LGTV2a(counter++)); - setupKeyset(new LGTV2b(counter++)); - setupKeyset(new LGDisc1(counter++)); - setupKeyset(new LGDisc2(counter++)); - setupKeyset(new LGDisc2a(counter++)); - setupKeyset(new LGVCR1(counter++)); - setupKeyset(new LGVCR1a(counter++)); - setupKeyset(new LGVCR1b(counter++)); - setupKeyset(new LGAC1(counter++)); - - setupKeyset(new LogitechSpeakers(counter++)); - setupKeyset(new LogitechSqueezebox(counter++)); - - setupKeyset(new MagnavoxDVD1(counter++)); - setupKeyset(new MagnavoxVCR1(counter++)); - setupKeyset(new MagnavoxConverterBox1(counter++)); - setupKeyset(new MagnavoxTV1(counter++)); - - setupKeyset(new MagnumTV1(counter++)); - - setupKeyset(new MCERemote1(counter++)); - setupKeyset(new MCERemote1a(counter++)); - setupKeyset(new MCERemote1b(counter++)); - setupKeyset(new MCERemote1c(counter++)); - setupKeyset(new MCERemote1d(counter++)); - setupKeyset(new MCERemote1e(counter++)); - setupKeyset(new MCERemote1f(counter++)); - setupKeyset(new MCERemote1g(counter++)); - - setupKeyset(new MitsubishiTV1(counter++)); - setupKeyset(new MitsubishiTV1a(counter++)); - setupKeyset(new MitsubishiVCR1(counter++)); - setupKeyset(new MitsubishiVCR1a(counter++)); - - setupKeyset(new Motorola4DTV(counter++)); - setupKeyset(new MotorolaSTB1(counter++)); - setupKeyset(new MotorolaSTB1a(counter++)); - setupKeyset(new MotorolaSTB1b(counter++)); - setupKeyset(new MotorolaSkyDigital(counter++)); - - setupKeyset(new NADAudio1(counter++)); - setupKeyset(new NADTuner1(counter++)); - setupKeyset(new NADDVD1(counter++)); - setupKeyset(new NADCD1(counter++)); - setupKeyset(new NADCD2(counter++)); - setupKeyset(new NADTape1(counter++)); - - setupKeyset(new NokiaGenericVCR(counter++)); - - setupKeyset(new OctagonSat1(counter++)); - setupKeyset(new OctagonSat1a(counter++)); - setupKeyset(new OctagonSat2(counter++)); - - setupKeyset(new OnidaTV1(counter++)); - setupKeyset(new OnidaDVD1(counter++)); - - setupKeyset(new PanasonicCarAudio(counter++)); - setupKeyset(new PanasonicSat1(counter++)); - setupKeyset(new PanasonicSat1a(counter++)); - setupKeyset(new PanasonicTV1(counter++)); - setupKeyset(new PanasonicTV1a(counter++)); - setupKeyset(new PanasonicTV1b(counter++)); - setupKeyset(new PanasonicVCR1(counter++)); - setupKeyset(new PanasonicVCR1a(counter++)); - setupKeyset(new PanasonicVCR1b(counter++)); - setupKeyset(new PanasonicVCR1c(counter++)); - setupKeyset(new PanasonicDVD1(counter++)); - setupKeyset(new PanasonicDVD1a(counter++)); - setupKeyset(new PanasonicAudio1(counter++)); - setupKeyset(new PanasonicAudio2(counter++)); - setupKeyset(new PanasonicAudio2a(counter++)); - setupKeyset(new PanasonicAC1(counter++)); - - setupKeyset(new PhilcoTV(counter++)); - - setupKeyset(new PhilipsTV1(counter++)); - setupKeyset(new PhilipsTV1a(counter++)); - setupKeyset(new PhilipsTV1b(counter++)); - setupKeyset(new PhilipsTV1c(counter++)); - setupKeyset(new PhilipsTV1d(counter++)); - setupKeyset(new PhilipsTV1e(counter++)); - setupKeyset(new PhilipsTV1f(counter++)); - setupKeyset(new PhilipsTV2(counter++)); - setupKeyset(new PhilipsTV2a(counter++)); - setupKeyset(new PhilipsTV2b(counter++)); - setupKeyset(new PhilipsTV3(counter++)); - setupKeyset(new PhilipsDVD1(counter++)); - setupKeyset(new PhilipsDVD1a(counter++)); - setupKeyset(new PhilipsDVD1b(counter++)); - setupKeyset(new PhilipsDVD1c(counter++)); - setupKeyset(new PhilipsDVD1d(counter++)); - setupKeyset(new PhilipsDVD2(counter++)); - setupKeyset(new PhilipsDVD3(counter++)); - setupKeyset(new PhilipsDVD3a(counter++)); - setupKeyset(new PhilipsDVD4(counter++)); - setupKeyset(new PhilipsVCR1(counter++)); - setupKeyset(new PhilipsVCR1a(counter++)); - setupKeyset(new PhilipsVCR1b(counter++)); - setupKeyset(new PhilipsVCR1c(counter++)); - setupKeyset(new PhilipsSat1(counter++)); - setupKeyset(new PhilipsSat2(counter++)); - setupKeyset(new PhilipsSat2a(counter++)); - setupKeyset(new PhilipsSat3(counter++)); - setupKeyset(new PhilipsAudio1(counter++)); - setupKeyset(new PhilipsAudio1a(counter++)); - setupKeyset(new PhilipsAudio1b(counter++)); - setupKeyset(new PhilipsAudio2(counter++)); - setupKeyset(new PhilipsAudio3(counter++)); - setupKeyset(new PhilipsAudio4(counter++)); - - setupKeyset(new PinnaclePCTV1(counter++)); - setupKeyset(new PinnaclePCTV2(counter++)); - setupKeyset(new PinnaclePCTV3(counter++)); - - setupKeyset(new PioneerTV1(counter++)); - setupKeyset(new PioneerTV2(counter++)); - setupKeyset(new PioneerTV3(counter++)); - setupKeyset(new PioneerAudio1(counter++)); - setupKeyset(new PioneerAudio1a(counter++)); - setupKeyset(new PioneerAudio2(counter++)); - setupKeyset(new PioneerAudio3(counter++)); - setupKeyset(new PioneerAudio4(counter++)); - setupKeyset(new PioneerAudio5(counter++)); - setupKeyset(new PioneerCD1(counter++)); - setupKeyset(new PioneerLaserDisc1(counter++)); - setupKeyset(new PioneerDVD1(counter++)); - - setupKeyset(new QNAPPlayer1(counter++)); - - setupKeyset(new RaiteDVD1(counter++)); - - setupKeyset(new RCATV1(counter++)); - setupKeyset(new RCATV1a(counter++)); - setupKeyset(new RCATV1b(counter++)); -// setupKeyset(new RCAAux1(counter++)); -// setupKeyset(new RCAAux2(counter++)); -// setupKeyset(new RCAAux2a(counter++)); - setupKeyset(new RCAVCR1(counter++)); - setupKeyset(new RCAVCR1a(counter++)); - setupKeyset(new RCADVD1(counter++)); - setupKeyset(new RCADVD1a(counter++)); - setupKeyset(new RCASat1(counter++)); - setupKeyset(new RCASat2(counter++)); - - setupKeyset(new RokuBox1(counter++)); - setupKeyset(new RokuBox2(counter++)); - - setupKeyset(new SabaTV1(counter++)); - setupKeyset(new SabaTV2(counter++)); - - setupKeyset(new SagemTVBox1(counter++)); - setupKeyset(new SagemTVBox1a(counter++)); - - setupKeyset(new SamsungTV1(counter++)); - setupKeyset(new SamsungTV1a(counter++)); - setupKeyset(new SamsungTV1b(counter++)); - setupKeyset(new SamsungTV1c(counter++)); - setupKeyset(new SamsungTV1d(counter++)); - setupKeyset(new SamsungTV1e(counter++)); - setupKeyset(new SamsungTV1f(counter++)); - setupKeyset(new SamsungTV2(counter++)); - setupKeyset(new SamsungTV2a(counter++)); - setupKeyset(new SamsungVCR1(counter++)); - setupKeyset(new SamsungVCR1a(counter++)); - setupKeyset(new SamsungVCR1b(counter++)); - setupKeyset(new SamsungVCR1c(counter++)); - setupKeyset(new SamsungVCR1d(counter++)); - setupKeyset(new SamsungVCR1e(counter++)); - setupKeyset(new SamsungDVD1(counter++)); - setupKeyset(new SamsungDVD1a(counter++)); - setupKeyset(new SamsungDVD1b(counter++)); - setupKeyset(new SamsungDVD2(counter++)); - setupKeyset(new SamsungAC1(counter++)); - setupKeyset(new SamsungDVBT1(counter++)); - - setupKeyset(new SanyoVCR1(counter++)); - setupKeyset(new SanyoDVD1(counter++)); - setupKeyset(new SanyoTV1(counter++)); - setupKeyset(new SanyoTV1a(counter++)); - setupKeyset(new SanyoTV1b(counter++)); - setupKeyset(new SanyoTV1c(counter++)); - setupKeyset(new SanyoTV1d(counter++)); - setupKeyset(new SanyoProjector(counter++)); - - setupKeyset(new SharpTV1(counter++)); - setupKeyset(new SharpTV1a(counter++)); - setupKeyset(new SharpTV1b(counter++)); - setupKeyset(new SharpTV1c(counter++)); - setupKeyset(new SharpTV1d(counter++)); - setupKeyset(new SharpTV1e(counter++)); - setupKeyset(new SharpVCR1(counter++)); - setupKeyset(new SharpReceiver1(counter++)); - setupKeyset(new SharpAC1(counter++)); - - setupKeyset(new SkyReceiver1(counter++)); - setupKeyset(new SkyReceiver1a(counter++)); - - setupKeyset(new SonyTV1(counter++)); - setupKeyset(new SonyTV1a(counter++)); - setupKeyset(new SonyTV1b(counter++)); - setupKeyset(new SonyTV1c(counter++)); - setupKeyset(new SonyAmp1(counter++)); - setupKeyset(new SonyAmp2(counter++)); - setupKeyset(new SonyAudio1(counter++)); - setupKeyset(new SonyAudio1a(counter++)); - setupKeyset(new SonyDAT1(counter++)); - setupKeyset(new SonyDVD1(counter++)); - setupKeyset(new SonyDVD1a(counter++)); - setupKeyset(new SonyDVD1b(counter++)); - setupKeyset(new SonyDVD1c(counter++)); - setupKeyset(new SonyVCR1(counter++)); - setupKeyset(new SonyVCR1a(counter++)); - setupKeyset(new SonyVCR1b(counter++)); - setupKeyset(new SonyReceiver1(counter++)); - setupKeyset(new SonyCD1(counter++)); - setupKeyset(new SonyCD1a(counter++)); - setupKeyset(new SonyCD1b(counter++)); - - setupKeyset(new StarsatSat1(counter++)); - - setupKeyset(new TechnicsAudio1(counter++)); - setupKeyset(new TechnicsAudio1a(counter++)); - setupKeyset(new TechnicsAudio2(counter++)); - setupKeyset(new TechnicsAudio3(counter++)); - setupKeyset(new TechnicsAudio3a(counter++)); - setupKeyset(new TechnicsDVD1(counter++)); - - setupKeyset(new TelenetSTB1(counter++)); - - setupKeyset(new ThomsonConverter1(counter++)); - setupKeyset(new ThomsonTV1(counter++)); - setupKeyset(new ThomsonVCR1(counter++)); - setupKeyset(new ThomsonVCR1a(counter++)); - setupKeyset(new ThomsonDVD1(counter++)); - setupKeyset(new ThomsonSat1(counter++)); - setupKeyset(new ThomsonAudio1(counter++)); - - setupKeyset(new Tivo1(counter++)); - setupKeyset(new Tivo1a(counter++)); - setupKeyset(new Tivo1b(counter++)); - setupKeyset(new Tivo1c(counter++)); - setupKeyset(new Tivo1d(counter++)); - - setupKeyset(new TopfieldPVR1(counter++)); - setupKeyset(new TopfieldSat1(counter++)); - - setupKeyset(new ToshibaTV1(counter++)); - setupKeyset(new ToshibaTV1a(counter++)); - setupKeyset(new ToshibaTV1b(counter++)); - setupKeyset(new ToshibaTV1c(counter++)); - setupKeyset(new ToshibaTV1d(counter++)); - setupKeyset(new ToshibaTV1e(counter++)); - setupKeyset(new ToshibaTV1f(counter++)); - setupKeyset(new ToshibaTV1g(counter++)); - setupKeyset(new ToshibaTV1h(counter++)); - setupKeyset(new ToshibaVCR1(counter++)); - setupKeyset(new ToshibaVCR1a(counter++)); - setupKeyset(new ToshibaDisc1(counter++)); - setupKeyset(new ToshibaDisc1a(counter++)); - setupKeyset(new ToshibaDisc1b(counter++)); - setupKeyset(new ToshibaDisc1c(counter++)); - setupKeyset(new ToshibaDisc1d(counter++)); - - setupKeyset(new UnitedDVD1(counter++)); - setupKeyset(new UnitedDVBT1(counter++)); - - setupKeyset(new UniversumVCR1(counter++)); - setupKeyset(new UniversumVCR2(counter++)); - setupKeyset(new UniversumVCR3(counter++)); - setupKeyset(new UniversumTV1(counter++)); - setupKeyset(new UniversumTV1a(counter++)); - setupKeyset(new UniversumSat1(counter++)); - setupKeyset(new UniversumAudio1(counter++)); - - setupKeyset(new VestelTV1(counter++)); - setupKeyset(new VestelTV2(counter++)); - - setupKeyset(new ViewsatSat1(counter++)); - setupKeyset(new ViewsatSat1a(counter++)); - - setupKeyset(new VirginSTB1(counter++)); - - setupKeyset(new VizioTV1(counter++)); - - setupKeyset(new WDMediaPlayer1(counter++)); - setupKeyset(new WDMediaPlayer1a(counter++)); - setupKeyset(new WDMediaPlayer1b(counter++)); - - setupKeyset(new WestinghouseTV1(counter++)); - setupKeyset(new WestinghouseTV2(counter++)); - - setupKeyset(new XcruiserSat1(counter++)); - - setupKeyset(new YamahaDVD1(counter++)); - setupKeyset(new YamahaDVD1a(counter++)); - setupKeyset(new YamahaAudio1(counter++)); - setupKeyset(new YamahaAudio1a(counter++)); - setupKeyset(new YamahaAudio2(counter++)); - setupKeyset(new YamahaAudio2a(counter++)); - setupKeyset(new YamahaAudio2b(counter++)); - setupKeyset(new YamahaAudio2c(counter++)); - setupKeyset(new YamahaAudio2d(counter++)); - setupKeyset(new YamahaAudio3(counter++)); - setupKeyset(new YamahaAudio4(counter++)); - setupKeyset(new YamahaTV1(counter++)); - setupKeyset(new YamahaKaraoke1(counter++)); - - setupKeyset(new ZenithC32V37(counter++)); + setupKeyset(new AcerTV1(++counter)); + setupKeyset(new AcerPC1(++counter)); + + setupKeyset(new AdmiralTV1(++counter)); + setupKeyset(new AdmiralTV2(++counter)); + setupKeyset(new AdmiralVCR1(++counter)); + + setupKeyset(new AiwaVCR1(++counter)); + setupKeyset(new AiwaVCR2(++counter)); + setupKeyset(new AiwaVCR3(++counter)); + setupKeyset(new AiwaAudio1(++counter)); + setupKeyset(new AiwaAudio1a(++counter)); + setupKeyset(new AiwaAudio2(++counter)); + setupKeyset(new AiwaAudio2a(++counter)); + setupKeyset(new AiwaAudio2b(++counter)); + setupKeyset(new AiwaAudio2c(++counter)); + setupKeyset(new AiwaAudio3(++counter)); + setupKeyset(new AiwaAudio4(++counter)); + setupKeyset(new AiwaAudio5(++counter)); + setupKeyset(new AiwaAudio6(++counter)); + setupKeyset(new AiwaCarStereo1(++counter)); + setupKeyset(new AiwaDVD1(++counter)); + + setupKeyset(new AOCTV1(++counter)); + + setupKeyset(new AppleWhiteRemote(++counter)); + + setupKeyset(new ArcamReceiver1(++counter)); + + setupKeyset(new BekoTV1(++counter)); + + setupKeyset(new BenQTV1(++counter)); + + setupKeyset(new BoseRadio1(++counter)); + setupKeyset(new BoseRadio2(++counter)); + setupKeyset(new BoseRadio3(++counter)); + setupKeyset(new BoseHomeTheater1(++counter)); + + setupKeyset(new BushTV1(++counter)); + setupKeyset(new BushTV2(++counter)); + setupKeyset(new BushSTB1(++counter)); + + setupKeyset(new CambridgeCD1(++counter)); + setupKeyset(new CambridgeAudio1(++counter)); + setupKeyset(new CambridgeAudio2(++counter)); + setupKeyset(new CambridgeAudio3(++counter)); + setupKeyset(new CambridgeDVD1(++counter)); + + setupKeyset(new CanonDSLR1(++counter)); + setupKeyset(new CanonCamcorder1(++counter)); + setupKeyset(new CanonPowershot1(++counter)); + + setupKeyset(new ComproTVCard1(++counter)); + + setupKeyset(new DaewooTV1(++counter)); + setupKeyset(new DaewooTV2(++counter)); + setupKeyset(new DaewooTV3(++counter)); + setupKeyset(new DaewooTV4(++counter)); + setupKeyset(new DaewooTV5(++counter)); + setupKeyset(new DaewooDVD1(++counter)); + setupKeyset(new DaewooVCR1(++counter)); + setupKeyset(new DaewooVCR2(++counter)); + + setupKeyset(new DenonDVD1(++counter)); + setupKeyset(new DenonDVD2(++counter)); + setupKeyset(new DenonDVD3(++counter)); + setupKeyset(new DenonReceiver1(++counter)); + setupKeyset(new DenonReceiver1a(++counter)); + setupKeyset(new DenonReceiver1b(++counter)); + setupKeyset(new DenonReceiver1c(++counter)); + setupKeyset(new DenonReceiver1d(++counter)); + setupKeyset(new DenonReceiver1e(++counter)); + setupKeyset(new DenonReceiver1f(++counter)); + setupKeyset(new DenonReceiver2(++counter)); + setupKeyset(new DenonReceiver2a(++counter)); + setupKeyset(new DenonReceiver3(++counter)); + setupKeyset(new DenonAudio1(++counter)); + setupKeyset(new DenonAudio1a(++counter)); + setupKeyset(new DenonAudio1b(++counter)); + setupKeyset(new DenonAudio1c(++counter)); + setupKeyset(new DenonAudio1d(++counter)); + setupKeyset(new DenonAudio2(++counter)); + setupKeyset(new DenonAudio3(++counter)); + setupKeyset(new DenonAudio4(++counter)); + + setupKeyset(new DellRemote1(++counter)); + + setupKeyset(new DigitalStreamReceiver(++counter)); + + setupKeyset(new DirectvReceiver1(++counter)); + setupKeyset(new DirectvReceiver1a(++counter)); + setupKeyset(new DirectvReceiver1b(++counter)); + setupKeyset(new DirectvReceiver1c(++counter)); + setupKeyset(new DirectvReceiver1d(++counter)); + setupKeyset(new DirectvReceiver1e(++counter)); + + setupKeyset(new DishReceiver1(++counter)); + setupKeyset(new DishReceiver1a(++counter)); + setupKeyset(new DishReceiver1b(++counter)); + setupKeyset(new DishReceiver1c(++counter)); + setupKeyset(new DishReceiver1d(++counter)); + setupKeyset(new DishReceiver1e(++counter)); + setupKeyset(new DishReceiver1f(++counter)); + setupKeyset(new DishReceiver1g(++counter)); + setupKeyset(new DishReceiver1h(++counter)); + setupKeyset(new DishReceiver1i(++counter)); + setupKeyset(new DishReceiver1j(++counter)); + setupKeyset(new DishReceiver1k(++counter)); + setupKeyset(new DishReceiver1l(++counter)); + setupKeyset(new DishReceiver1m(++counter)); + setupKeyset(new DishReceiver1n(++counter)); + setupKeyset(new DishReceiver1o(++counter)); + + setupKeyset(new DreamboxSat1(++counter)); + setupKeyset(new DreamboxSat1a(++counter)); + setupKeyset(new DreamboxSat1b(++counter)); + setupKeyset(new DreamboxSat1c(++counter)); + setupKeyset(new DreamboxSat2(++counter)); + setupKeyset(new DreamboxSat3(++counter)); + setupKeyset(new DreamboxSat4(++counter)); + setupKeyset(new DreamboxSat5(++counter)); + + setupKeyset(new DSEDVD1(++counter)); + setupKeyset(new DSESat1(++counter)); + + setupKeyset(new DynexTV1(++counter)); + + setupKeyset(new EiTV1(++counter)); + + setupKeyset(new ElgatoEyeTV1(++counter)); + + setupKeyset(new EmersonTV1(++counter)); + setupKeyset(new EmersonDVD1(++counter)); + + setupKeyset(new EpsonProjector1(++counter)); + setupKeyset(new EpsonProjector2(++counter)); + + setupKeyset(new FortecReceiver1(++counter)); + setupKeyset(new FortecReceiver2(++counter)); + + setupKeyset(new FoxtelSTB1(++counter)); + setupKeyset(new FoxtelSTB2(++counter)); + + setupKeyset(new GeniusSpeakers1(++counter)); + + setupKeyset(new GoldStarTV1(++counter)); + setupKeyset(new GoldStarTV2(++counter)); + setupKeyset(new GoldStarVCR1(++counter)); + setupKeyset(new GoldStarVCR1a(++counter)); + setupKeyset(new GoldStarVCR1b(++counter)); + setupKeyset(new GoldStarVCR1c(++counter)); + setupKeyset(new GoldStarCD1(++counter)); + + setupKeyset(new GrundigSat1(++counter)); + setupKeyset(new GrundigSat2(++counter)); + setupKeyset(new GrundigSat3(++counter)); + setupKeyset(new GrundigAmp1(++counter)); + setupKeyset(new GrundigAudio1(++counter)); + setupKeyset(new GrundigAudio2(++counter)); + setupKeyset(new GrundigVCR1(++counter)); + setupKeyset(new GrundigVCR1a(++counter)); + setupKeyset(new GrundigTV1(++counter)); + setupKeyset(new GrundigTV2(++counter)); + setupKeyset(new GrundigTV3(++counter)); + setupKeyset(new GrundigDVD1(++counter)); + + setupKeyset(new HaierTV1(++counter)); + + setupKeyset(new HarmanKardonAmp1(++counter)); + setupKeyset(new HarmanKardonAmp2(++counter)); + setupKeyset(new HarmanKardonReceiver2(++counter)); + setupKeyset(new HarmanKardonTape1(++counter)); + setupKeyset(new HarmanKardonDVD1(++counter)); + setupKeyset(new HarmanKardonDVD1a(++counter)); + setupKeyset(new HarmanKardonCD1(++counter)); + setupKeyset(new HarmanKardonCD2(++counter)); + + setupKeyset(new HauppaugePCTV1(++counter)); + setupKeyset(new HauppaugePCTV1a(++counter)); + setupKeyset(new HauppaugePCTV1b(++counter)); + setupKeyset(new HauppaugePCTV1c(++counter)); + setupKeyset(new HauppaugePCTV2(++counter)); + + setupKeyset(new HitachiTV1(++counter)); + setupKeyset(new HitachiTV1a(++counter)); + setupKeyset(new HitachiTV1b(++counter)); + setupKeyset(new HitachiTV1c(++counter)); + setupKeyset(new HitachiTV2(++counter)); + setupKeyset(new HitachiTV3(++counter)); + setupKeyset(new HitachiProjector(++counter)); + setupKeyset(new HitachiDVD1(++counter)); + setupKeyset(new HitachiAudio1(++counter)); + setupKeyset(new HitachiVCR1(++counter)); + + setupKeyset(new HomecastReceiver1(++counter)); + setupKeyset(new HomecastReceiver2(++counter)); + + setupKeyset(new HPRemote1(++counter)); + + setupKeyset(new HuaweiSTB1(++counter)); + setupKeyset(new HuaweiSTB2(++counter)); + + setupKeyset(new HumaxReceiver1(++counter)); + setupKeyset(new HumaxReceiver2(++counter)); + setupKeyset(new HumaxReceiver3(++counter)); + + setupKeyset(new HyundaiDVD1(++counter)); + setupKeyset(new HyundaiAudio1(++counter)); + setupKeyset(new HyundaiTV1(++counter)); + + setupKeyset(new JVCSat1(++counter)); + setupKeyset(new JVCSat2(++counter)); + setupKeyset(new JVCVCR1(++counter)); + setupKeyset(new JVCVCR1a(++counter)); + setupKeyset(new JVCVCRBmode1(++counter)); + setupKeyset(new JVCVCRBmode1a(++counter)); + setupKeyset(new JVCTV1(++counter)); + setupKeyset(new JVCTV1a(++counter)); + setupKeyset(new JVCTV1b(++counter)); + setupKeyset(new JVCTV1c(++counter)); + setupKeyset(new JVCTV1d(++counter)); + setupKeyset(new JVCDAT1(++counter)); + setupKeyset(new JVCCarDeck1(++counter)); + setupKeyset(new JVCAudio1(++counter)); + setupKeyset(new JVCAudio1a(++counter)); + setupKeyset(new JVCAudio1b(++counter)); + setupKeyset(new JVCAudio2(++counter)); + setupKeyset(new JVCDVD1(++counter)); + + setupKeyset(new KaonSat1(++counter)); + + setupKeyset(new KathreinSat1(++counter)); + setupKeyset(new KathreinSat2(++counter)); + setupKeyset(new KathreinSat3(++counter)); + + setupKeyset(new KenwoodAudio1(++counter)); + setupKeyset(new KenwoodComponent1(++counter)); + setupKeyset(new KenwoodComponent2(++counter)); + setupKeyset(new KenwoodComponent3(++counter)); + setupKeyset(new KenwoodCD1(++counter)); + setupKeyset(new KenwoodDVD1(++counter)); + setupKeyset(new KenwoodTV1(++counter)); + + setupKeyset(new LexuzDVB1(++counter)); + + setupKeyset(new LGTV1(++counter)); + setupKeyset(new LGTV1a(++counter)); + setupKeyset(new LGTV1b(++counter)); + setupKeyset(new LGTV1c(++counter)); + setupKeyset(new LGTV2(++counter)); + setupKeyset(new LGTV2a(++counter)); + setupKeyset(new LGTV2b(++counter)); + setupKeyset(new LGDisc1(++counter)); + setupKeyset(new LGDisc2(++counter)); + setupKeyset(new LGDisc2a(++counter)); + setupKeyset(new LGVCR1(++counter)); + setupKeyset(new LGVCR1a(++counter)); + setupKeyset(new LGVCR1b(++counter)); + setupKeyset(new LGAC1(++counter)); + + setupKeyset(new LogitechSpeakers(++counter)); + setupKeyset(new LogitechSqueezebox(++counter)); + + setupKeyset(new MagnavoxDVD1(++counter)); + setupKeyset(new MagnavoxVCR1(++counter)); + setupKeyset(new MagnavoxConverterBox1(++counter)); + setupKeyset(new MagnavoxTV1(++counter)); + + setupKeyset(new MagnumTV1(++counter)); + + setupKeyset(new MCERemote1(++counter)); + setupKeyset(new MCERemote1a(++counter)); + setupKeyset(new MCERemote1b(++counter)); + setupKeyset(new MCERemote1c(++counter)); + setupKeyset(new MCERemote1d(++counter)); + setupKeyset(new MCERemote1e(++counter)); + setupKeyset(new MCERemote1f(++counter)); + setupKeyset(new MCERemote1g(++counter)); + + setupKeyset(new MitsubishiTV1(++counter)); + setupKeyset(new MitsubishiTV1a(++counter)); + setupKeyset(new MitsubishiVCR1(++counter)); + setupKeyset(new MitsubishiVCR1a(++counter)); + + setupKeyset(new Motorola4DTV(++counter)); + setupKeyset(new MotorolaSTB1(++counter)); + setupKeyset(new MotorolaSTB1a(++counter)); + setupKeyset(new MotorolaSTB1b(++counter)); + setupKeyset(new MotorolaSkyDigital(++counter)); + + setupKeyset(new NADAudio1(++counter)); + setupKeyset(new NADTuner1(++counter)); + setupKeyset(new NADDVD1(++counter)); + setupKeyset(new NADCD1(++counter)); + setupKeyset(new NADCD2(++counter)); + setupKeyset(new NADTape1(++counter)); + + setupKeyset(new NokiaGenericVCR(++counter)); + + setupKeyset(new OctagonSat1(++counter)); + setupKeyset(new OctagonSat1a(++counter)); + setupKeyset(new OctagonSat2(++counter)); + + setupKeyset(new OnidaTV1(++counter)); + setupKeyset(new OnidaDVD1(++counter)); + + setupKeyset(new PanasonicCarAudio(++counter)); + setupKeyset(new PanasonicSat1(++counter)); + setupKeyset(new PanasonicSat1a(++counter)); + setupKeyset(new PanasonicTV1(++counter)); + setupKeyset(new PanasonicTV1a(++counter)); + setupKeyset(new PanasonicTV1b(++counter)); + setupKeyset(new PanasonicVCR1(++counter)); + setupKeyset(new PanasonicVCR1a(++counter)); + setupKeyset(new PanasonicVCR1b(++counter)); + setupKeyset(new PanasonicVCR1c(++counter)); + setupKeyset(new PanasonicDVD1(++counter)); + setupKeyset(new PanasonicDVD1a(++counter)); + setupKeyset(new PanasonicAudio1(++counter)); + setupKeyset(new PanasonicAudio2(++counter)); + setupKeyset(new PanasonicAudio2a(++counter)); + setupKeyset(new PanasonicAC1(++counter)); + + setupKeyset(new PhilcoTV(++counter)); + + setupKeyset(new PhilipsTV1(++counter)); + setupKeyset(new PhilipsTV1a(++counter)); + setupKeyset(new PhilipsTV1b(++counter)); + setupKeyset(new PhilipsTV1c(++counter)); + setupKeyset(new PhilipsTV1d(++counter)); + setupKeyset(new PhilipsTV1e(++counter)); + setupKeyset(new PhilipsTV1f(++counter)); + setupKeyset(new PhilipsTV2(++counter)); + setupKeyset(new PhilipsTV2a(++counter)); + setupKeyset(new PhilipsTV2b(++counter)); + setupKeyset(new PhilipsTV3(++counter)); + setupKeyset(new PhilipsDVD1(++counter)); + setupKeyset(new PhilipsDVD1a(++counter)); + setupKeyset(new PhilipsDVD1b(++counter)); + setupKeyset(new PhilipsDVD1c(++counter)); + setupKeyset(new PhilipsDVD1d(++counter)); + setupKeyset(new PhilipsDVD2(++counter)); + setupKeyset(new PhilipsDVD3(++counter)); + setupKeyset(new PhilipsDVD3a(++counter)); + setupKeyset(new PhilipsDVD4(++counter)); + setupKeyset(new PhilipsVCR1(++counter)); + setupKeyset(new PhilipsVCR1a(++counter)); + setupKeyset(new PhilipsVCR1b(++counter)); + setupKeyset(new PhilipsVCR1c(++counter)); + setupKeyset(new PhilipsSat1(++counter)); + setupKeyset(new PhilipsSat2(++counter)); + setupKeyset(new PhilipsSat2a(++counter)); + setupKeyset(new PhilipsSat3(++counter)); + setupKeyset(new PhilipsAudio1(++counter)); + setupKeyset(new PhilipsAudio1a(++counter)); + setupKeyset(new PhilipsAudio1b(++counter)); + setupKeyset(new PhilipsAudio2(++counter)); + setupKeyset(new PhilipsAudio3(++counter)); + setupKeyset(new PhilipsAudio4(++counter)); + + setupKeyset(new PinnaclePCTV1(++counter)); + setupKeyset(new PinnaclePCTV2(++counter)); + setupKeyset(new PinnaclePCTV3(++counter)); + + setupKeyset(new PioneerTV1(++counter)); + setupKeyset(new PioneerTV2(++counter)); + setupKeyset(new PioneerTV3(++counter)); + setupKeyset(new PioneerAudio1(++counter)); + setupKeyset(new PioneerAudio1a(++counter)); + setupKeyset(new PioneerAudio2(++counter)); + setupKeyset(new PioneerAudio3(++counter)); + setupKeyset(new PioneerAudio4(++counter)); + setupKeyset(new PioneerAudio5(++counter)); + setupKeyset(new PioneerCD1(++counter)); + setupKeyset(new PioneerLaserDisc1(++counter)); + setupKeyset(new PioneerDVD1(++counter)); + + setupKeyset(new QNAPPlayer1(++counter)); + + setupKeyset(new RaiteDVD1(++counter)); + + setupKeyset(new RCATV1(++counter)); + setupKeyset(new RCATV1a(++counter)); + setupKeyset(new RCATV1b(++counter)); +// setupKeyset(new RCAAux1(++counter)); +// setupKeyset(new RCAAux2(++counter)); +// setupKeyset(new RCAAux2a(++counter)); + setupKeyset(new RCAVCR1(++counter)); + setupKeyset(new RCAVCR1a(++counter)); + setupKeyset(new RCADVD1(++counter)); + setupKeyset(new RCADVD1a(++counter)); + setupKeyset(new RCASat1(++counter)); + setupKeyset(new RCASat2(++counter)); + + setupKeyset(new RokuBox1(++counter)); + setupKeyset(new RokuBox2(++counter)); + + setupKeyset(new SabaTV1(++counter)); + setupKeyset(new SabaTV2(++counter)); + + setupKeyset(new SagemTVBox1(++counter)); + setupKeyset(new SagemTVBox1a(++counter)); + + setupKeyset(new SamsungTV1(++counter)); + setupKeyset(new SamsungTV1a(++counter)); + setupKeyset(new SamsungTV1b(++counter)); + setupKeyset(new SamsungTV1c(++counter)); + setupKeyset(new SamsungTV1d(++counter)); + setupKeyset(new SamsungTV1e(++counter)); + setupKeyset(new SamsungTV1f(++counter)); + setupKeyset(new SamsungTV2(++counter)); + setupKeyset(new SamsungTV2a(++counter)); + setupKeyset(new SamsungVCR1(++counter)); + setupKeyset(new SamsungVCR1a(++counter)); + setupKeyset(new SamsungVCR1b(++counter)); + setupKeyset(new SamsungVCR1c(++counter)); + setupKeyset(new SamsungVCR1d(++counter)); + setupKeyset(new SamsungVCR1e(++counter)); + setupKeyset(new SamsungDVD1(++counter)); + setupKeyset(new SamsungDVD1a(++counter)); + setupKeyset(new SamsungDVD1b(++counter)); + setupKeyset(new SamsungDVD2(++counter)); + setupKeyset(new SamsungAC1(++counter)); + setupKeyset(new SamsungDVBT1(++counter)); + + setupKeyset(new SanyoVCR1(++counter)); + setupKeyset(new SanyoDVD1(++counter)); + setupKeyset(new SanyoTV1(++counter)); + setupKeyset(new SanyoTV1a(++counter)); + setupKeyset(new SanyoTV1b(++counter)); + setupKeyset(new SanyoTV1c(++counter)); + setupKeyset(new SanyoTV1d(++counter)); + setupKeyset(new SanyoProjector(++counter)); + + setupKeyset(new SharpTV1(++counter)); + setupKeyset(new SharpTV1a(++counter)); + setupKeyset(new SharpTV1b(++counter)); + setupKeyset(new SharpTV1c(++counter)); + setupKeyset(new SharpTV1d(++counter)); + setupKeyset(new SharpTV1e(++counter)); + setupKeyset(new SharpVCR1(++counter)); + setupKeyset(new SharpReceiver1(++counter)); + setupKeyset(new SharpAC1(++counter)); + + setupKeyset(new SkyReceiver1(++counter)); + setupKeyset(new SkyReceiver1a(++counter)); + + setupKeyset(new SonyTV1(++counter)); + setupKeyset(new SonyTV1a(++counter)); + setupKeyset(new SonyTV1b(++counter)); + setupKeyset(new SonyTV1c(++counter)); + setupKeyset(new SonyAmp1(++counter)); + setupKeyset(new SonyAmp2(++counter)); + setupKeyset(new SonyAudio1(++counter)); + setupKeyset(new SonyAudio1a(++counter)); + setupKeyset(new SonyDAT1(++counter)); + setupKeyset(new SonyDVD1(++counter)); + setupKeyset(new SonyDVD1a(++counter)); + setupKeyset(new SonyDVD1b(++counter)); + setupKeyset(new SonyDVD1c(++counter)); + setupKeyset(new SonyVCR1(++counter)); + setupKeyset(new SonyVCR1a(++counter)); + setupKeyset(new SonyVCR1b(++counter)); + setupKeyset(new SonyReceiver1(++counter)); + setupKeyset(new SonyCD1(++counter)); + setupKeyset(new SonyCD1a(++counter)); + setupKeyset(new SonyCD1b(++counter)); + + setupKeyset(new StarsatSat1(++counter)); + + setupKeyset(new TechnicsAudio1(++counter)); + setupKeyset(new TechnicsAudio1a(++counter)); + setupKeyset(new TechnicsAudio2(++counter)); + setupKeyset(new TechnicsAudio3(++counter)); + setupKeyset(new TechnicsAudio3a(++counter)); + setupKeyset(new TechnicsDVD1(++counter)); + + setupKeyset(new TelenetSTB1(++counter)); + + setupKeyset(new ThomsonConverter1(++counter)); + setupKeyset(new ThomsonTV1(++counter)); + setupKeyset(new ThomsonVCR1(++counter)); + setupKeyset(new ThomsonVCR1a(++counter)); + setupKeyset(new ThomsonDVD1(++counter)); + setupKeyset(new ThomsonSat1(++counter)); + setupKeyset(new ThomsonAudio1(++counter)); + + setupKeyset(new Tivo1(++counter)); + setupKeyset(new Tivo1a(++counter)); + setupKeyset(new Tivo1b(++counter)); + setupKeyset(new Tivo1c(++counter)); + setupKeyset(new Tivo1d(++counter)); + + setupKeyset(new TopfieldPVR1(++counter)); + setupKeyset(new TopfieldSat1(++counter)); + + setupKeyset(new ToshibaTV1(++counter)); + setupKeyset(new ToshibaTV1a(++counter)); + setupKeyset(new ToshibaTV1b(++counter)); + setupKeyset(new ToshibaTV1c(++counter)); + setupKeyset(new ToshibaTV1d(++counter)); + setupKeyset(new ToshibaTV1e(++counter)); + setupKeyset(new ToshibaTV1f(++counter)); + setupKeyset(new ToshibaTV1g(++counter)); + setupKeyset(new ToshibaTV1h(++counter)); + setupKeyset(new ToshibaVCR1(++counter)); + setupKeyset(new ToshibaVCR1a(++counter)); + setupKeyset(new ToshibaDisc1(++counter)); + setupKeyset(new ToshibaDisc1a(++counter)); + setupKeyset(new ToshibaDisc1b(++counter)); + setupKeyset(new ToshibaDisc1c(++counter)); + setupKeyset(new ToshibaDisc1d(++counter)); + + setupKeyset(new UnitedDVD1(++counter)); + setupKeyset(new UnitedDVBT1(++counter)); + + setupKeyset(new UniversumVCR1(++counter)); + setupKeyset(new UniversumVCR2(++counter)); + setupKeyset(new UniversumVCR3(++counter)); + setupKeyset(new UniversumTV1(++counter)); + setupKeyset(new UniversumTV1a(++counter)); + setupKeyset(new UniversumSat1(++counter)); + setupKeyset(new UniversumAudio1(++counter)); + + setupKeyset(new VestelTV1(++counter)); + setupKeyset(new VestelTV2(++counter)); + + setupKeyset(new ViewsatSat1(++counter)); + setupKeyset(new ViewsatSat1a(++counter)); + + setupKeyset(new VirginSTB1(++counter)); + + setupKeyset(new VizioTV1(++counter)); + + setupKeyset(new WDMediaPlayer1(++counter)); + setupKeyset(new WDMediaPlayer1a(++counter)); + setupKeyset(new WDMediaPlayer1b(++counter)); + + setupKeyset(new WestinghouseTV1(++counter)); + setupKeyset(new WestinghouseTV2(++counter)); + + setupKeyset(new XcruiserSat1(++counter)); + + setupKeyset(new YamahaDVD1(++counter)); + setupKeyset(new YamahaDVD1a(++counter)); + setupKeyset(new YamahaAudio1(++counter)); + setupKeyset(new YamahaAudio1a(++counter)); + setupKeyset(new YamahaAudio2(++counter)); + setupKeyset(new YamahaAudio2a(++counter)); + setupKeyset(new YamahaAudio2b(++counter)); + setupKeyset(new YamahaAudio2c(++counter)); + setupKeyset(new YamahaAudio2d(++counter)); + setupKeyset(new YamahaAudio3(++counter)); + setupKeyset(new YamahaAudio4(++counter)); + setupKeyset(new YamahaTV1(++counter)); + setupKeyset(new YamahaKaraoke1(++counter)); + + setupKeyset(new ZenithC32V37(++counter)); // Start the thread running: commandThread.start(); diff --git a/pirmakenames.cpp b/pirmakenames.cpp index 77f1e52..93fecd0 100644 --- a/pirmakenames.cpp +++ b/pirmakenames.cpp @@ -49,6 +49,7 @@ PIRMakeMgr::PIRMakeMgr() makes[Kaon_Make] = "Kaon"; makes[Kathrein_Make] = "Kathrein"; makes[Kenwood_Make] = "Kenwood"; + makes[Lexuz_Make] = "Lexuz"; makes[LG_Make] = "LG"; makes[Logitech_Make] = "Logitech"; makes[Magnavox_Make] = "Magnavox"; diff --git a/pirmakenames.h b/pirmakenames.h index 9dee3d3..0a4011b 100644 --- a/pirmakenames.h +++ b/pirmakenames.h @@ -50,6 +50,7 @@ enum PIRMakeName{ Kaon_Make, Kathrein_Make, Kenwood_Make, + Lexuz_Make, LG_Make, Logitech_Make, Magnavox_Make, diff --git a/pirpanelmanager.cpp b/pirpanelmanager.cpp index 7b340bc..ff947d0 100644 --- a/pirpanelmanager.cpp +++ b/pirpanelmanager.cpp @@ -222,6 +222,33 @@ void PIRPanelManager::enableButtons( { if (mainForm) mainForm->enableButtons(keyset, id); } + + commonEnableButtons(keyset, id); +} + + +void PIRPanelManager::enableButtons( + const PIRKeysetManager *keyset, + unsigned int currentID, + unsigned int defaultID) +{ + if (altMainPanelFlag) + { + if (altMainForm) altMainForm->enableButtons(keyset, currentID, defaultID); + } + else + { + if (mainForm) mainForm->enableButtons(keyset, currentID, defaultID); + } + + commonEnableButtons(keyset, currentID); +} + + +void PIRPanelManager::commonEnableButtons( + const PIRKeysetManager *keyset, + unsigned int id) +{ if (utilityForm) utilityForm->enableButtons(keyset, id); if (keypadForm) keypadForm->enableButtons(keyset, id); if (menuForm) menuForm->enableButtons(keyset, id); diff --git a/pirpanelmanager.h b/pirpanelmanager.h index 910117e..c06c7f2 100644 --- a/pirpanelmanager.h +++ b/pirpanelmanager.h @@ -44,6 +44,11 @@ public: const PIRKeysetManager *keyset, unsigned int id); + void enableButtons( + const PIRKeysetManager *keyset, + unsigned int currentID, + unsigned int defaultID); + void managePanel( PIRPanelName name, int state); @@ -61,6 +66,10 @@ public: QListWidget *getFavoritesListWidget(); private: + void commonEnableButtons( + const PIRKeysetManager *keyset, + unsigned int id); + void hidePanel( PIRPanelName name, int index); diff --git a/pirpreferencesform.cpp b/pirpreferencesform.cpp index a1b6197..36544bc 100644 --- a/pirpreferencesform.cpp +++ b/pirpreferencesform.cpp @@ -1,14 +1,20 @@ #include "pirpreferencesform.h" #include "ui_pirpreferencesform.h" +#include "pirkeysetmanager.h" #include "mainwindow.h" #include +#include + PIRPreferencesForm::PIRPreferencesForm( - QWidget *parent) + QWidget *parent, + const PIRKeysetManager *keysetManager) : QWidget(parent), - ui(new Ui::PIRPreferencesForm) + ui(new Ui::PIRPreferencesForm), + defaultKeyset(0), + useDefaultForVolume(false) { ui->setupUi(this); @@ -21,6 +27,31 @@ PIRPreferencesForm::PIRPreferencesForm( settings.beginGroup("Preferences"); + if (settings.contains("defaultKeysetName")) + { + keysetManager->findKeysetID( + settings.value("defaultKeysetMake").toString(), + settings.value("defaultKeysetName").toString(), + defaultKeyset); + + QString displayName = settings.value("defaultKeysetMake").toString(); + displayName.append(" "); + displayName.append(settings.value("defaultKeysetName").toString()); + + ui->defaultKeysetNameLabel->setText(displayName); + ui->useDefaultCheckBox->setEnabled(true); + } + + if (settings.contains("useDefaultForVolume")) + { + useDefaultForVolume = settings.value("useDefaultForVolume").toBool(); + + if (useDefaultForVolume) + { + ui->useDefaultCheckBox->setChecked(true); + } + } + if (settings.contains("useAltMain")) { if (settings.value("useAltMain").toBool()) @@ -40,6 +71,65 @@ PIRPreferencesForm::~PIRPreferencesForm() } +void PIRPreferencesForm::on_setDefaultButton_clicked() +{ + QString make = mainWindow->getCurrentMake(); + QString name = mainWindow->getCurrentName(); + defaultKeyset = mainWindow->getCurrentKeyset(); + ui->useDefaultCheckBox->setEnabled(true); + + QString displayName = make; + displayName.append(" "); + displayName.append(name); + ui->defaultKeysetNameLabel->setText(displayName); + + QSettings settings("pietrzak.org", "Pierogi"); + settings.beginGroup("Preferences"); + settings.setValue("defaultKeysetMake", make); + settings.setValue("defaultKeysetName", name); + settings.endGroup(); + + mainWindow->enableButtons(); +} + +void PIRPreferencesForm::on_clearDefaultButton_clicked() +{ + defaultKeyset = 0; + ui->defaultKeysetNameLabel->setText("None"); + ui->useDefaultCheckBox->setEnabled(false); + + QSettings settings("pietrzak.org", "Pierogi"); + settings.beginGroup("Preferences"); + settings.remove("defaultKeysetMake"); + settings.remove("defaultKeysetName"); + settings.endGroup(); + + mainWindow->enableButtons(); +} + + +void PIRPreferencesForm::on_useDefaultCheckBox_stateChanged(int arg1) +{ + QSettings settings("pietrzak.org", "Pierogi"); + settings.beginGroup("Preferences"); + + if (arg1 == Qt::Checked) + { + useDefaultForVolume = true; + settings.setValue("useDefaultForVolume", true); + } + else + { + useDefaultForVolume = false; + settings.setValue("useDefaultForVolume", false); + } + + settings.endGroup(); + + mainWindow->enableButtons(); +} + + void PIRPreferencesForm::on_altMainCheckBox_stateChanged( int arg1) { diff --git a/pirpreferencesform.h b/pirpreferencesform.h index b3089ea..322bbf4 100644 --- a/pirpreferencesform.h +++ b/pirpreferencesform.h @@ -4,6 +4,7 @@ #include class MainWindow; +class PIRKeysetManager; namespace Ui { class PIRPreferencesForm; @@ -14,16 +15,35 @@ class PIRPreferencesForm : public QWidget Q_OBJECT public: - explicit PIRPreferencesForm(QWidget *parent = 0); + PIRPreferencesForm( + QWidget *parent, + const PIRKeysetManager *keysetManager); + ~PIRPreferencesForm(); + + unsigned int getDefaultKeyset() + { + return defaultKeyset; + } + + bool defaultControlsVolume() + { + return useDefaultForVolume; + } private slots: + void on_setDefaultButton_clicked(); + void on_clearDefaultButton_clicked(); + void on_useDefaultCheckBox_stateChanged(int arg1); void on_altMainCheckBox_stateChanged(int arg1); private: Ui::PIRPreferencesForm *ui; MainWindow *mainWindow; + + unsigned int defaultKeyset; + bool useDefaultForVolume; }; #endif // PIRPREFERENCESFORM_H diff --git a/pirpreferencesform.ui b/pirpreferencesform.ui index b2bf590..1038063 100644 --- a/pirpreferencesform.ui +++ b/pirpreferencesform.ui @@ -32,10 +32,85 @@ + + 8 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 8 + + + + + QLayout::SetDefaultConstraint + + + + + + 0 + 0 + + + + Default Keyset: + + + + + + + + 0 + 0 + + + + None + + + + + + + + + Make current keyset default + + + + + + + Clear default keyset + + + + + + + false + + + Always use default keyset for volume controls + + + + + + - Reverse orientation of volume and control buttons + Reverse orientation of volume and channel controls @@ -47,4 +122,7 @@ + + defaultKeysetChanged(QString) + diff --git a/pirselectdeviceform.cpp b/pirselectdeviceform.cpp index 4eb5ed3..021cc07 100644 --- a/pirselectdeviceform.cpp +++ b/pirselectdeviceform.cpp @@ -1,6 +1,7 @@ #include "pirselectdeviceform.h" #include "ui_pirselectdeviceform.h" #include "pirkeysetwidgetitem.h" +#include PIRDeviceTypeMgr deviceTypeManager; @@ -15,6 +16,12 @@ PIRSelectDeviceForm::PIRSelectDeviceForm( { ui->setupUi(this); + // Don't want to start with the line editor visible: + ui->searchStringLineEdit->hide(); + ui->searchStringLineEdit->lower(); + ui->ssClosePushButton->hide(); + + // Set some initial flags: setAttribute(Qt::WA_Maemo5StackedWindow); setWindowFlags(windowFlags() | Qt::Window); @@ -61,17 +68,47 @@ void PIRSelectDeviceForm::addNameToList( } */ + void PIRSelectDeviceForm::addWidgetItem( PIRKeysetWidgetItem *kwi) { ui->deviceListWidget->addItem(kwi); } + QListWidget *PIRSelectDeviceForm::getDeviceListWidget() { return ui->deviceListWidget; } + +void PIRSelectDeviceForm::keyPressEvent( + QKeyEvent *event) +{ + ui->searchStringLineEdit->show(); + ui->searchStringLineEdit->raise(); + ui->ssClosePushButton->show(); + + ui->searchStringLineEdit->setText(event->text()); + ui->searchStringLineEdit->setFocus(); +} + + +void PIRSelectDeviceForm::on_searchStringLineEdit_textChanged(const QString &arg1) +{ + filterListByString(arg1); +} + + +void PIRSelectDeviceForm::on_ssClosePushButton_clicked() +{ + ui->searchStringLineEdit->hide(); + ui->searchStringLineEdit->lower(); + ui->ssClosePushButton->hide(); + ui->searchStringLineEdit->clear(); +} + + void PIRSelectDeviceForm::filterListByMake( int make) { @@ -79,6 +116,7 @@ void PIRSelectDeviceForm::filterListByMake( refilterList(); } + void PIRSelectDeviceForm::filterListByDeviceType( int deviceType) { @@ -86,6 +124,15 @@ void PIRSelectDeviceForm::filterListByDeviceType( refilterList(); } + +void PIRSelectDeviceForm::filterListByString( + QString string) +{ + searchString = string; + refilterList(); +} + + void PIRSelectDeviceForm::refilterList() { int index = 0; @@ -103,8 +150,17 @@ void PIRSelectDeviceForm::refilterList() if ( (currentDevice == Any_Device) || (item->getDeviceType() == currentDevice)) { - // Yes, we can show this keylist: - item->setHidden(false); + // Does it match the search string? + if ( searchString.isEmpty() + || item->text().contains(searchString, Qt::CaseInsensitive)) + { + // Yes, we can show this keylist: + item->setHidden(false); + } + else + { + item->setHidden(true); + } } else { diff --git a/pirselectdeviceform.h b/pirselectdeviceform.h index 63b05fe..8c3bebb 100644 --- a/pirselectdeviceform.h +++ b/pirselectdeviceform.h @@ -9,6 +9,7 @@ class PIRKeysetWidgetItem; class QListWidget; +class QKeyEvent; namespace Ui { class PIRSelectDeviceForm; @@ -37,13 +38,23 @@ public: // This is a bit of a hack, but not sure how to create a connection otherwise. QListWidget *getDeviceListWidget(); +protected: + void keyPressEvent( + QKeyEvent *event); + private slots: void filterListByMake( int make); void filterListByDeviceType( int deviceType); - + + void filterListByString( + QString string); + + void on_searchStringLineEdit_textChanged(const QString &arg1); + void on_ssClosePushButton_clicked(); + private: void refilterList(); @@ -51,6 +62,7 @@ private: PIRMakeName currentMake; PIRDeviceTypeName currentDevice; + QString searchString; }; #endif // PIRSELECTDEVICEFORM_H diff --git a/pirselectdeviceform.ui b/pirselectdeviceform.ui index 06d4d9b..75f4dc7 100644 --- a/pirselectdeviceform.ui +++ b/pirselectdeviceform.ui @@ -10,6 +10,9 @@ 480 + + Qt::WheelFocus + Select Device @@ -32,6 +35,9 @@ 0 + + Qt::NoFocus + @@ -49,13 +55,40 @@ 0 + + Qt::NoFocus + - + + + Qt::NoFocus + + + + + + + + + + + + + + + + :/icons/delete_icon&48.png:/icons/delete_icon&48.png + + + + - + + + diff --git a/pirselectkeysetform.cpp b/pirselectkeysetform.cpp index 67c9e61..39ac645 100644 --- a/pirselectkeysetform.cpp +++ b/pirselectkeysetform.cpp @@ -1,7 +1,8 @@ #include "pirselectkeysetform.h" #include "ui_pirselectkeysetform.h" #include "pirkeysetwidgetitem.h" -#include +//#include +#include extern PIRMakeMgr makeManager; @@ -13,6 +14,12 @@ PIRSelectKeysetForm::PIRSelectKeysetForm( { ui->setupUi(this); + // Don't want to start with the line editor visible: + ui->searchStringLineEdit->hide(); + ui->searchStringLineEdit->lower(); + ui->ssClosePushButton->hide(); + + // Set some initial flags: setAttribute(Qt::WA_Maemo5StackedWindow); setWindowFlags(windowFlags() | Qt::Window); @@ -36,11 +43,13 @@ PIRSelectKeysetForm::PIRSelectKeysetForm( Qt::QueuedConnection); } + PIRSelectKeysetForm::~PIRSelectKeysetForm() { delete ui; } + /* void PIRSelectKeysetForm::addNameToList( QString name, @@ -51,17 +60,48 @@ void PIRSelectKeysetForm::addNameToList( } */ + void PIRSelectKeysetForm::addWidgetItem( PIRKeysetWidgetItem *kwi) { ui->keysetListWidget->addItem(kwi); } + QListWidget *PIRSelectKeysetForm::getKeysetListWidget() { return ui->keysetListWidget; } + +void PIRSelectKeysetForm::keyPressEvent( + QKeyEvent *event) +{ + ui->searchStringLineEdit->show(); + ui->searchStringLineEdit->raise(); + ui->ssClosePushButton->show(); + + ui->searchStringLineEdit->setText(event->text()); + ui->searchStringLineEdit->setFocus(); +} + + +void PIRSelectKeysetForm::on_searchStringLineEdit_textChanged( + const QString &arg1) +{ + filterListByString(arg1); +} + + +void PIRSelectKeysetForm::on_ssClosePushButton_clicked() +{ + ui->searchStringLineEdit->hide(); + ui->searchStringLineEdit->lower(); + ui->ssClosePushButton->hide(); + ui->searchStringLineEdit->clear(); +} + + void PIRSelectKeysetForm::filterListByMake( int make) { @@ -69,6 +109,15 @@ void PIRSelectKeysetForm::filterListByMake( refilterList(); } + +void PIRSelectKeysetForm::filterListByString( + QString string) +{ + searchString = string; + refilterList(); +} + + void PIRSelectKeysetForm::refilterList() { int index = 0; @@ -82,8 +131,17 @@ void PIRSelectKeysetForm::refilterList() // Does the keylist have the required make? if ((currentMake == Any_Make) || (item->getMake() == currentMake)) { - // Yes, we can show this keylist: - item->setHidden(false); + // Does this keylist match the search string? + if ( searchString.isEmpty() + || item->text().contains(searchString, Qt::CaseInsensitive)) + { + // Yes, we can show this keylist: + item->setHidden(false); + } + else + { + item->setHidden(true); + } } else { diff --git a/pirselectkeysetform.h b/pirselectkeysetform.h index 45706aa..bb0ed2b 100644 --- a/pirselectkeysetform.h +++ b/pirselectkeysetform.h @@ -8,6 +8,8 @@ class QListWidget; class PIRKeysetWidgetItem; +class QKeyEvent; +//class PIRSearchStringDialog; namespace Ui { class PIRSelectKeysetForm; @@ -34,21 +36,27 @@ public: // This is a bit of a hack, but not sure how to create a connection otherwise. QListWidget *getKeysetListWidget(); +protected: + void keyPressEvent( + QKeyEvent *event); + private slots: void filterListByMake( int make); -/* - void filterListByDeviceType( - int deviceType); -*/ + void filterListByString( + QString string); + void on_searchStringLineEdit_textChanged(const QString &arg1); + void on_ssClosePushButton_clicked(); + private: void refilterList(); Ui::PIRSelectKeysetForm *ui; PIRMakeName currentMake; + QString searchString; }; #endif // PIRSELECTKEYSETFORM_H diff --git a/pirselectkeysetform.ui b/pirselectkeysetform.ui index c075ddc..d901de2 100644 --- a/pirselectkeysetform.ui +++ b/pirselectkeysetform.ui @@ -10,6 +10,9 @@ 480 + + Qt::WheelFocus + Select Keyset @@ -17,6 +20,13 @@ 8 + + + + Qt::NoFocus + + + @@ -40,15 +50,35 @@ 0 + + Qt::NoFocus + - - + + + + + + + + + + + + + :/icons/delete_icon&48.png:/icons/delete_icon&48.png + + + + - + + + diff --git a/protocols/protonprotocol.cpp b/protocols/protonprotocol.cpp new file mode 100644 index 0000000..c1f956b --- /dev/null +++ b/protocols/protonprotocol.cpp @@ -0,0 +1,128 @@ +#include "protonprotocol.h" + +#include "pirrx51hardware.h" + +#include "pirexception.h" + +// Some global communications stuff: +#include +extern bool commandInFlight; +extern QMutex commandIFMutex; + +// The proton protocol seems fairly similar to the NEC protocol, although +// somewhat simplified. +// A "zero" is encoded with a 500 usec pulse, 500 usec space. +// A "one" is encoded with a 500 usec pulse, and 3*500 (1500) usec space. +// The header is a 8000 usec pulse, 4000 usec space. +// Commands end with a trailing 500 usec pulse. +// When repeating, the entire pulse-train is retransmitted. +// The duration of each full frame is 63000 usec. +// The normal carrier frequency is 38 kHz. + +ProtonProtocol::ProtonProtocol( + QObject *guiObject, + unsigned int index) + : SpaceProtocol( + guiObject, index, + 500, 500, + 500, 1500, + 8000, 4000, + 500, + 63000, true) +{ +} + + +void ProtonProtocol::startSendingCommand( + unsigned int threadableID, + PIRKeyName command) +{ + // Exceptions here are problematic; I'll try to weed them out by putting the + // whole thing in a try/catch block: + try + { + // First, check if we are meant to be the recipient of this command: + if (threadableID != id) return; + + clearRepeatFlag(); + + KeycodeCollection::const_iterator i = keycodes.find(command); + + // Do we even have this key defined? + if (i == keycodes.end()) + { + std::string s = "Tried to send a non-existent command.\n"; + throw PIRException(s); + } + + // construct the device: + PIRRX51Hardware rx51device(carrierFrequency, dutyCycle); + + int repeatCount = 0; + int commandDuration = 0; + while (repeatCount < MAX_REPEAT_COUNT) + { + commandDuration = generateStandardCommand((*i).second, rx51device); + + // Now, tell the device to send the whole command: + rx51device.sendCommandToDevice(); + + // sleep until the next repetition of command: + sleepUntilRepeat(commandDuration); + + // Check whether we've reached the minimum required number of repetitons: + if (repeatCount >= minimumRepetitions) + { + // Check whether we've been asked to stop: + if (checkRepeatFlag()) + { + QMutexLocker cifLocker(&commandIFMutex); + commandInFlight = false; + return; + } + } + + ++repeatCount; + } + } + catch (PIRException e) + { + // inform the gui: + emit commandFailed(e.getError().c_str()); + } + + QMutexLocker cifLocker(&commandIFMutex); + commandInFlight = false; +} + + +int ProtonProtocol::generateStandardCommand( + const PIRKeyBits &pkb, + PIRRX51Hardware &rx51device) +{ + int duration = 0; + + // First, the "header" pulse: + rx51device.addPair(headerPulse, headerSpace); + duration += (headerPulse + headerSpace); + + // The Proton protocol contains an 8 bit address and an 8 bit command, + // in LSB order. Between these two is a gap made up of a 500 usec pulse + // and a 4000 usec space. + // - "preData" should contain the address. + // - "firstCode" should contain the command. + + duration += pushReverseBits(preData, rx51device); + + rx51device.addPair(500, 4000); + duration += 4500; + + duration += pushReverseBits(pkb.firstCode, rx51device); + + // Finally add the "trail": + rx51device.addSingle(trailerPulse); + duration += trailerPulse; + + return duration; +} + diff --git a/protocols/protonprotocol.h b/protocols/protonprotocol.h new file mode 100644 index 0000000..849f5ac --- /dev/null +++ b/protocols/protonprotocol.h @@ -0,0 +1,30 @@ +#ifndef PROTONPROTOCOL_H +#define PROTONPROTOCOL_H + +#include "spaceprotocol.h" + +class PIRRX51Hardware; + +// +// The Proton protocol looks a bit like a stripped-down NEC protocol. +// + +class ProtonProtocol: public SpaceProtocol +{ +public: + ProtonProtocol( + QObject *guiObject, + unsigned int index); + +public slots: + void startSendingCommand( + unsigned int threadableID, + PIRKeyName command); + +private: + int generateStandardCommand( + const PIRKeyBits &bits, + PIRRX51Hardware &device); +}; + +#endif // PROTONPROTOCOL_H diff --git a/qtc_packaging/debian_fremantle/changelog b/qtc_packaging/debian_fremantle/changelog index c48bb9a..63b6109 100644 --- a/qtc_packaging/debian_fremantle/changelog +++ b/qtc_packaging/debian_fremantle/changelog @@ -1,3 +1,12 @@ +pierogi (1.1.4) unstable; urgency=low + * Finally added the ability to search the keyset and device lists using the keyboard. + * Added a "default keyset" to the preferences page; so far, the only thing you can do with the default is use it for the volume control keys. + * Fixed a bug in the Digital Stream keyset. + * Added a Grundig satellite receiver keyset and a Daewoo TV keyset. + * First pass at keyset for Lexuz. + + -- John Pietrzak Fri, 09 Mar 2012 19:38:14 -0500 + pierogi (1.1.3) unstable; urgency=low * Started work on an actual preferences window! * Pierogi now remembers your panel selections from your previous session. diff --git a/qtc_packaging/debian_fremantle/control b/qtc_packaging/debian_fremantle/control index f0f3492..21b3a82 100644 --- a/qtc_packaging/debian_fremantle/control +++ b/qtc_packaging/debian_fremantle/control @@ -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: Interim Update - I'm continuing to mess around with the Pierogi infrastructure. Not much to show yet, though. A very early Preferences window now exists, but so far only adds the option to swap the channel and volume controls on the main panel. In other news, Pierogi should now remember your panel choices (crossing my fingers). Also, all 6 DirecTV keysets are now available, and a first pass has been made at keysets for BenQ, Octagon, and Xcruiser. +XB-Maemo-Upgrade-Description: Lists now searchable + I've finally set up the keyset and device selection lists to be searchable using the keyboard. Turns out that it was easier than I expected... Also in this update, the ability to select a "default keyset", although you can't do much with it yet. In keysets, a fix to the Digital Stream keyset was made, a new Grundig satellite receiver and Daewoo TV were added, and a new keyset created for Lexuz. 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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 -- 1.7.9.5