Fix for volume rocker bug
[pierogi] / mainwindow.cpp
index 25a348a..1b5ee5e 100644 (file)
@@ -1,17 +1,18 @@
 #include "mainwindow.h"
 #include "ui_mainwindow.h"
-#include "pirkeysetwidgetitem.h"
-
-//#include "pirexception.h"
 
 #include <QtCore/QCoreApplication>
 #include <QMutex>
 #include <QtGui/QMessageBox>
 #include <QSettings>
-//#include <QDesktopServices>
-//#include <QUrl>
+#include <QMaemo5InformationBox>
 
-//#include <iostream>
+#include "pirkeysetwidgetitem.h"
+#include "pirselectkeysetform.h"
+#include "pirsecondaryform.h"
+#include "pirdocumentationform.h"
+#include "piraboutform.h"
+#include "pirkeysetmanager.h"
 
 //#define DEBUGGING
 
@@ -26,6 +27,7 @@ QMutex commandIFMutex;
 bool stopRepeatingFlag = false;
 QMutex stopRepeatingMutex;
 
+
 extern PIRMakeMgr makeManager;
 
 
@@ -44,7 +46,7 @@ MainWindow::MainWindow(QWidget *parent)
   setAttribute(Qt::WA_Maemo5StackedWindow);
 
   // Collect the keysets:
-  myKeysets = new PIRKeysetManager(this);
+  myKeysets = new PIRKeysetManager();
 
   // Set up the keyset selection window:
   selectKeysetForm = new PIRSelectKeysetForm(this);
@@ -68,12 +70,10 @@ MainWindow::MainWindow(QWidget *parent)
   }
 
   enableButtons();
-  secondaryForm->enableButtons(myKeysets, currentKeyset);
 
   connect(
     ui->favoriteKeysetsWidget,
-//    SIGNAL(itemActivated(QListWidgetItem *)),
-    SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
+    SIGNAL(itemActivated(QListWidgetItem *)),
     this,
     SLOT(keysetSelectionChanged(QListWidgetItem *)),
     Qt::QueuedConnection);
@@ -178,6 +178,9 @@ void MainWindow::showExpanded()
 
 void MainWindow::enableButtons()
 {
+  // Just to be sure, check to see if the keyset has been populated:
+  myKeysets->populateKeyset(this, currentKeyset);
+
   // This is going to be a little painful...
   // Main keys
   emit powerEnabled(myKeysets->hasKey(currentKeyset, Power_Key));
@@ -185,6 +188,7 @@ void MainWindow::enableButtons()
   emit volumeDownEnabled(myKeysets->hasKey(currentKeyset, VolumeDown_Key));
   emit channelUpEnabled(myKeysets->hasKey(currentKeyset, ChannelUp_Key));
   emit channelDownEnabled(myKeysets->hasKey(currentKeyset, ChannelDown_Key));
+  emit muteEnabled(myKeysets->hasKey(currentKeyset, Mute_Key));
 
   // Main tab labels:
   emit keysetMakeChanged(
@@ -196,14 +200,15 @@ void MainWindow::enableButtons()
   emit greenEnabled(myKeysets->hasKey(currentKeyset, Green_Key));
   emit yellowEnabled(myKeysets->hasKey(currentKeyset, Yellow_Key));
   emit blueEnabled(myKeysets->hasKey(currentKeyset, Blue_Key));
+  emit pictureModeEnabled(myKeysets->hasKey(currentKeyset, PictureMode_Key));
+  emit soundModeEnabled(myKeysets->hasKey(currentKeyset, SoundMode_Key));
   emit aspectRatioEnabled(myKeysets->hasKey(currentKeyset, AspectRatio_Key));
-  emit surroundEnabled(myKeysets->hasKey(currentKeyset, Surround_Key));
+//  emit surroundEnabled(myKeysets->hasKey(currentKeyset, Surround_Key));
   emit audioEnabled(myKeysets->hasKey(currentKeyset, Audio_Key));
   emit infoEnabled(myKeysets->hasKey(currentKeyset, Info_Key));
   emit captionsEnabled(myKeysets->hasKey(currentKeyset, Captions_Key));
   emit sleepEnabled(myKeysets->hasKey(currentKeyset, Sleep_Key));
   emit inputEnabled(myKeysets->hasKey(currentKeyset, Input_Key));
-  emit muteEnabled(myKeysets->hasKey(currentKeyset, Mute_Key));
 
   // Keypad keys
   emit zeroEnabled(myKeysets->hasKey(currentKeyset, Zero_Key));
@@ -248,43 +253,8 @@ void MainWindow::enableButtons()
   emit stopEnabled(myKeysets->hasKey(currentKeyset, Stop_Key));
   emit ejectEnabled(myKeysets->hasKey(currentKeyset, Eject_Key));
 
-/*
-  // Media2 keys:
-  emit discTitleEnabled(myKeysets->hasKey(currentKeyset, DiscTitle_Key));
-  emit discSelectEnabled(myKeysets->hasKey(currentKeyset, NextDisc_Key));
-  emit vhsSpeedEnabled(myKeysets->hasKey(currentKeyset, VHSSpeed_Key));
-  emit trackingMinusEnabled(myKeysets->hasKey(currentKeyset, TrackingMinus_Key));
-  emit trackingPlusEnabled(myKeysets->hasKey(currentKeyset, TrackingPlus_Key));
-  emit autoTrackingEnabled(myKeysets->hasKey(currentKeyset, AutoTracking_Key));
-  emit pageUpEnabled(myKeysets->hasKey(currentKeyset, PageUp_Key));
-  emit pageDownEnabled(myKeysets->hasKey(currentKeyset, PageDown_Key));
-  emit slowEnabled(myKeysets->hasKey(currentKeyset, Slow_Key));
-  emit slowMinusEnabled(myKeysets->hasKey(currentKeyset, SlowMinus_Key));
-  emit slowPlusEnabled(myKeysets->hasKey(currentKeyset, SlowPlus_Key));
-  emit programEnabled(myKeysets->hasKey(currentKeyset, Program_Key));
-  emit tunerBandEnabled(myKeysets->hasKey(currentKeyset, TunerBand_Key));
-  emit repeatEnabled(myKeysets->hasKey(currentKeyset, Repeat_Key));
-  emit repeatABEnabled(myKeysets->hasKey(currentKeyset, RepeatAB_Key));
-  emit randomEnabled(myKeysets->hasKey(currentKeyset, Random_Key));
-
-  // TV Keys:
-  emit pictureModeEnabled(myKeysets->hasKey(currentKeyset, PictureMode_Key));
-  emit soundModeEnabled(myKeysets->hasKey(currentKeyset, SoundMode_Key));
-  emit liveTVEnabled(myKeysets->hasKey(currentKeyset, LiveTV_Key));
-  emit favoritesEnabled(myKeysets->hasKey(currentKeyset, Favorites_Key));
-  emit teletextEnabled(myKeysets->hasKey(currentKeyset, Teletext_Key));
-  emit teletextHoldEnabled(myKeysets->hasKey(currentKeyset, TeletextHold_Key));
-  emit teletextRevealEnabled(myKeysets->hasKey(currentKeyset, TeletextReveal_Key));
-  emit teletextSizeEnabled(myKeysets->hasKey(currentKeyset, TeletextSize_Key));
-  emit pipEnabled(myKeysets->hasKey(currentKeyset, PIP_Key));
-  emit pipSwapEnabled(myKeysets->hasKey(currentKeyset, PIPSwap_Key));
-  emit pipMoveEnabled(myKeysets->hasKey(currentKeyset, PIPMove_Key));
-  emit pipSourceEnabled(myKeysets->hasKey(currentKeyset, PIPSource_Key));
-  emit pipChannelUpEnabled(myKeysets->hasKey(currentKeyset, PIPChannelUp_Key));
-  emit pipChannelDownEnabled(myKeysets->hasKey(currentKeyset, PIPChannelDown_Key));
-  emit pipPauseEnabled(myKeysets->hasKey(currentKeyset, PIPPause_Key));
-  emit pipSizeEnabled(myKeysets->hasKey(currentKeyset, PIPSize_Key));
-*/
+  // Also enable the buttons on the secondary form:
+  secondaryForm->enableButtons(myKeysets, currentKeyset);
 }
 
 
@@ -350,6 +320,16 @@ void MainWindow::on_mainVolumeDownButton_released()
   stopRepeating();
 }
 
+void MainWindow::on_muteButton_pressed()
+{
+  startRepeating(Mute_Key);
+}
+
+void MainWindow::on_muteButton_released()
+{
+  stopRepeating();
+}
+
 
 // Utility tab buttons:
 
@@ -393,6 +373,26 @@ void MainWindow::on_blueButton_released()
   stopRepeating();
 }
 
+void MainWindow::on_pictureModeButton_pressed()
+{
+  startRepeating(PictureMode_Key);
+}
+
+void MainWindow::on_pictureModeButton_released()
+{
+  stopRepeating();
+}
+
+void MainWindow::on_soundModeButton_pressed()
+{
+  startRepeating(SoundMode_Key);
+}
+
+void MainWindow::on_soundModeButton_released()
+{
+  stopRepeating();
+}
+
 void MainWindow::on_aspectRatioButton_pressed()
 {
   startRepeating(AspectRatio_Key);
@@ -403,6 +403,7 @@ void MainWindow::on_aspectRatioButton_released()
   stopRepeating();
 }
 
+/*
 void MainWindow::on_surroundButton_pressed()
 {
   startRepeating(Surround_Key);
@@ -412,6 +413,7 @@ void MainWindow::on_surroundButton_released()
 {
   stopRepeating();
 }
+*/
 
 void MainWindow::on_audioButton_pressed()
 {
@@ -463,16 +465,6 @@ void MainWindow::on_sleepButton_released()
   stopRepeating();
 }
 
-void MainWindow::on_muteButton_pressed()
-{
-  startRepeating(Mute_Key);
-}
-
-void MainWindow::on_muteButton_released()
-{
-  stopRepeating();
-}
-
 
 // Keypad tab buttons:
 
@@ -853,335 +845,6 @@ void MainWindow::on_ejectButton_released()
 }
 
 
-/*
-// Media2 tab slots:
-
-void MainWindow::on_discTitleButton_pressed()
-{
-  startRepeating(DiscTitle_Key);
-}
-
-void MainWindow::on_discTitleButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_discSelectButton_pressed()
-{
-  startRepeating(NextDisc_Key);
-}
-
-void MainWindow::on_discSelectButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_vhsSpeedButton_pressed()
-{
-  startRepeating(VHSSpeed_Key);
-}
-
-void MainWindow::on_vhsSpeedButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_trackingPlusButton_pressed()
-{
-  startRepeating(TrackingPlus_Key);
-}
-
-void MainWindow::on_trackingPlusButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_trackingMinusButton_pressed()
-{
-  startRepeating(TrackingMinus_Key);
-}
-
-void MainWindow::on_trackingMinusButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_autoTrackingButton_pressed()
-{
-  startRepeating(AutoTracking_Key);
-}
-
-void MainWindow::on_autoTrackingButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pageUpButton_pressed()
-{
-  startRepeating(PageUp_Key);
-}
-
-void MainWindow::on_pageUpButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pageDownButton_pressed()
-{
-  startRepeating(PageDown_Key);
-}
-
-void MainWindow::on_pageDownButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_slowButton_pressed()
-{
-  startRepeating(Slow_Key);
-}
-
-void MainWindow::on_slowButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_slowMinusButton_pressed()
-{
-  startRepeating(SlowMinus_Key);
-}
-
-void MainWindow::on_slowMinusButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_slowPlusButton_pressed()
-{
-  startRepeating(SlowPlus_Key);
-}
-
-void MainWindow::on_slowPlusButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_programButton_pressed()
-{
-  startRepeating(Program_Key);
-}
-
-void MainWindow::on_programButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_tunerBandButton_pressed()
-{
-  startRepeating(TunerBand_Key);
-}
-
-void MainWindow::on_tunerBandButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_repeatButton_pressed()
-{
-  startRepeating(Repeat_Key);
-}
-
-void MainWindow::on_repeatButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_repeatABButton_pressed()
-{
-  startRepeating(RepeatAB_Key);
-}
-
-void MainWindow::on_repeatABButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_randomButton_pressed()
-{
-  startRepeating(Random_Key);
-}
-
-void MainWindow::on_randomButton_released()
-{
-  stopRepeating();
-}
-
-
-// TV Slots:
-
-void MainWindow::on_pictureModeButton_pressed()
-{
-  startRepeating(PictureMode_Key);
-}
-
-void MainWindow::on_pictureModeButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_soundModeButton_pressed()
-{
-  startRepeating(SoundMode_Key);
-}
-
-void MainWindow::on_soundModeButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_liveTVButton_pressed()
-{
-  startRepeating(LiveTV_Key);
-}
-
-void MainWindow::on_liveTVButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_favoritesButton_pressed()
-{
-  startRepeating(Favorites_Key);
-}
-
-void MainWindow::on_favoritesButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_teletextButton_pressed()
-{
-  startRepeating(Teletext_Key);
-}
-
-void MainWindow::on_teletextButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_teletextHoldButton_pressed()
-{
-  startRepeating(TeletextHold_Key);
-}
-
-void MainWindow::on_teletextHoldButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_teletextRevealButton_pressed()
-{
-  startRepeating(TeletextReveal_Key);
-}
-
-void MainWindow::on_teletextRevealButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_teletextSizeButton_pressed()
-{
-  startRepeating(TeletextSize_Key);
-}
-
-void MainWindow::on_teletextSizeButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipOnOffButton_pressed()
-{
-  startRepeating(PIP_Key);
-}
-
-void MainWindow::on_pipOnOffButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipSwapButton_pressed()
-{
-  startRepeating(PIPSwap_Key);
-}
-
-void MainWindow::on_pipSwapButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipPositionButton_pressed()
-{
-  startRepeating(PIPMove_Key);
-}
-
-void MainWindow::on_pipPositionButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipSourceButton_pressed()
-{
-  startRepeating(PIPSource_Key);
-}
-
-void MainWindow::on_pipSourceButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipChannelUpButton_pressed()
-{
-  startRepeating(PIPChannelUp_Key);
-}
-
-void MainWindow::on_pipChannelUpButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipChannelDownButton_pressed()
-{
-  startRepeating(PIPChannelDown_Key);
-}
-
-void MainWindow::on_pipChannelDownButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipPauseButton_pressed()
-{
-  startRepeating(PIPPause_Key);
-}
-
-void MainWindow::on_pipPauseButton_released()
-{
-  stopRepeating();
-}
-
-void MainWindow::on_pipSizeButton_pressed()
-{
-  startRepeating(PIPSize_Key);
-}
-
-void MainWindow::on_pipSizeButton_released()
-{
-  stopRepeating();
-}
-*/
-
-
-
 // Menu actions:
 
 void MainWindow::on_actionSelectKeyset_triggered()
@@ -1225,11 +888,17 @@ void MainWindow::on_actionDocumentation_triggered()
 void MainWindow::keysetSelectionChanged(
   QListWidgetItem *item)
 {
-  if (!item) return;  // Should probably say something here!
+  if (!item) return;  // Should probably display error message here!
 
   PIRKeysetWidgetItem *kwi = dynamic_cast<PIRKeysetWidgetItem *>(item);
 
   if (!kwi) return; // Also need to say something here
+
+  if (currentKeyset == kwi->getID())
+  {
+    // We're already on that keyset, so nothing to do:
+    return;
+  }
   
   currentKeyset = kwi->getID();
 
@@ -1245,7 +914,6 @@ void MainWindow::keysetSelectionChanged(
     myKeysets->getDisplayName(currentKeyset));
 
   enableButtons();
-  secondaryForm->enableButtons(myKeysets, currentKeyset);
 }
 
 
@@ -1360,30 +1028,20 @@ void MainWindow::populateFavorites()
   int index = 0;
   QString make;
   QString name;
-//  unsigned int id;
   PIRKeysetWidgetItem *kwi;
 
   while (index < size)
   {
     settings.setArrayIndex(index);
-//    id = settings.value("keysetID").toInt();
     make = settings.value("keysetMake").toString();
     name = settings.value("keysetName").toString();
 
     kwi = myKeysets->makeKeysetItem(make, name);
 
     // Did the item creation work?
-//    if (myKeysets->keysetExists(id))
     if (kwi)
     {
       // Keyset does exist, so continue:
-//      make = myKeysets->getMake(id);
-//      name = makeManager.getMakeString(make);
-//      name.append(" ");
-//      name.append(myKeysets->getDisplayName(id));
-//    kwi = new PIRKeysetWidgetItem(name, id, make);
-//    myKeysets->populateDeviceTypes(kwi, id);
-//      ui->favoriteKeysetsWidget->addItem(new PIRKeysetWidgetItem(name, id, make));
       ui->favoriteKeysetsWidget->addItem(kwi);
     }
 
@@ -1412,3 +1070,70 @@ void MainWindow::stopRepeating()
   stopRepeatingFlag = true;
 }
 
+
+QWidget *MainWindow::getSecondaryWindow()
+{
+  return secondaryForm;
+}
+
+
+void MainWindow::selectPrevFavKeyset()
+{
+  int size = ui->favoriteKeysetsWidget->count();
+
+  if (size == 0)
+  {
+    // No favorites, so nothing to do!
+    return;
+  }
+
+  int position = ui->favoriteKeysetsWidget->currentRow();
+
+  --position;
+  if (position < 0)
+  {
+    position = size - 1;
+  }
+
+  ui->favoriteKeysetsWidget->setCurrentRow(
+    position,
+    QItemSelectionModel::ClearAndSelect);
+
+  keysetSelectionChanged(ui->favoriteKeysetsWidget->currentItem());
+
+  // Tell the user about the change:
+  QMaemo5InformationBox::information(
+    0,
+    ui->favoriteKeysetsWidget->item(position)->text());
+}
+
+
+void MainWindow::selectNextFavKeyset()
+{
+  int size = ui->favoriteKeysetsWidget->count();
+
+  if (size == 0)
+  {
+    // No favorites, so just return:
+    return;
+  }
+
+  int position = ui->favoriteKeysetsWidget->currentRow();
+
+  ++position;
+  if (position == size)
+  {
+    position = 0;
+  }
+
+  ui->favoriteKeysetsWidget->setCurrentRow(
+    position,
+    QItemSelectionModel::ClearAndSelect);
+
+  keysetSelectionChanged(ui->favoriteKeysetsWidget->currentItem());
+
+  // Tell the user about the change:
+  QMaemo5InformationBox::information(
+    0,
+    ui->favoriteKeysetsWidget->item(position)->text());
+}