Initial help window support, show sudo errors.
[qcpufreq] / src / mainwindow.cpp
index b2f34b2..dcc6f7a 100755 (executable)
@@ -22,7 +22,6 @@
 #include <QFile>
 #include <QMessageBox>
 #include <QTextStream>
-#include <QProcess>
 #include <QDesktopWidget>
 #if defined(Q_WS_MAEMO_5)
     #include <QMaemo5InformationBox>
@@ -36,12 +35,17 @@ MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
     ui(new Ui::MainWindow)
 {
+    //this is a stacked window on Maemo 5
+    #if defined(Q_WS_MAEMO_5)
+       setAttribute(Qt::WA_Maemo5StackedWindow);
+    #endif
+
     ui->setupUi(this);
 
     refresh();
 
     // enable auto rotation
-    setAutoRotaion();
+    setAutoRotation();
 
     //create a QGraphicsScene for the little chip icon
     scene = new QGraphicsScene();
@@ -52,20 +56,34 @@ MainWindow::MainWindow(QWidget *parent) :
     //refresh UI every 10 seconds
     refreshTimer->start( 10000 );
 
+    //create helper process
+    helperProcess = new QProcess;
+
+    //create a new, stackable help window
+    helpWindow = new HelpWindow( this );
+    #if defined(Q_WS_MAEMO_5)
+       helpWindow->setAttribute(Qt::WA_Maemo5StackedWindow);
+    #endif
+    helpWindow->setWindowFlags( windowFlags() | Qt::Window );
+
+    //show errors about the sudo setup only once
+    showSudoError = true;
+
     //connect signals and slots
+    connect(ui->actionHelp, SIGNAL(triggered()), this, SLOT(showHelp()));
     connect( ui->actionAbout, SIGNAL(triggered()), this, SLOT(about()) );
     connect( ui->freq_adjust, SIGNAL(valueChanged(int)), this, SLOT(adjustFreq()) );
     connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(orientationChanged()));
-    connect( ui->sr_btn, SIGNAL(clicked()), this, SLOT(setSmartReflex()) );
+    connect(ui->sr_box, SIGNAL(clicked()), this, SLOT(setSmartReflex()));
     connect(refreshTimer, SIGNAL(timeout()), this, SLOT(refresh()));
-
 }
 
 MainWindow::~MainWindow()
 {
-    delete ui;
+    delete helpWindow;
     delete refreshTimer;
     delete scene;
+    delete ui;
 }
 
 
@@ -103,10 +121,7 @@ void MainWindow::adjustFreq()
   */
 int MainWindow::callHelper(QString action, QString param)
 {
-    QProcess helper;
     QStringList arguments;
-    //run sudo in non-interactive mode
-    arguments.append( "-n" );
 
     #if defined(Q_WS_MAEMO_5)
        //On Maemo 5 the helper script resides in /opt/usr/bin, which us usually not in $PATH
@@ -118,9 +133,15 @@ int MainWindow::callHelper(QString action, QString param)
     arguments.append( action );
     arguments.append( param );
 
-    helper.execute( "sudo", arguments );
+    helperProcess->start( "sudo", arguments, QIODevice::NotOpen );
+
+    if ( showSudoError && !helperProcess->waitForFinished( 200 )) {
+       //do not show this error again
+       showSudoError = false;
+       QMessageBox::critical(this, tr("QCPUFreq"), tr("There seems to be a problem with your sudo setup!"));
+    }
 
-    return helper.exitCode();
+    return helperProcess->exitCode();
 }
 
 
@@ -226,6 +247,9 @@ int MainWindow::getSmartReflexState()
     else
        return 0;
 #else
+    //disable UI checkbox
+    ui->sr_box->setDisabled( true );
+
     return 0;
 #endif
 }
@@ -243,8 +267,8 @@ QString MainWindow::readSysFile(QString sys_file)
 
     //open the file
     if ( !file.exists() || !file.open( QIODevice::ReadOnly ) ) {
-        QMessageBox::critical(this, tr("QCPUFreq"), tr("Could not get information from /sys!"));
-        return "";
+       QMessageBox::critical(this, tr("QCPUFreq"), tr("Could not get information from /sys!"));
+       return "";
     }
 
     //read the file
@@ -281,9 +305,9 @@ void MainWindow::refresh()
 
     //smart reflex button
     if ( getSmartReflexState() == 1 )
-       ui->sr_btn->setText( tr( "Enabled" ) );
+       ui->sr_box->setCheckState( Qt::Checked );
     else
-       ui->sr_btn->setText( tr( "Disabled" ) );
+       ui->sr_box->setCheckState( Qt::Unchecked );
 
 
     //display frequency slider
@@ -328,7 +352,7 @@ void MainWindow::orientationChanged()
 /**
   * Enables the auto-rotation feature of Maemo5 devices
   */
-void MainWindow::setAutoRotaion()
+void MainWindow::setAutoRotation()
 {
 #if defined(Q_WS_MAEMO_5)
     setAttribute(Qt::WA_Maemo5AutoOrientation, true);
@@ -357,6 +381,15 @@ void MainWindow::setSmartReflex()
 
 
 /**
+  * SLOT: display the help window
+  */
+void MainWindow::showHelp()
+{
+    helpWindow->show();
+}
+
+
+/**
   * Returns true when the device is in portrait mode
   */
 bool MainWindow::usePortrait()