X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmainwindow.cpp;h=8ea4a2416a492fd35f3e13bbe551bd50f99d794b;hb=e298ebf8d53811d331770526b8c3625e881f7ca5;hp=e904561df800edc2f935dbe4c52e7d7e50045553;hpb=012c01c85995ff647215a9816e1efe6ae50f777d;p=qcpufreq diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e904561..8ea4a24 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,6 +1,6 @@ /* * QCPUFreq - a simple cpufreq GUI - * Copyright (C) 2010 Daniel Klaffenbach + * Copyright (C) 2010 Daniel Klaffenbach * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ #endif #define APPNAME "QCPUFreq" -#define APPVERSION "0.3.2" +#define APPVERSION "0.3.4" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -39,12 +39,12 @@ MainWindow::MainWindow(QWidget *parent) : helperProcess( this ), //create a new, stackable help window helpWindow( this ), - //set minFreq to 0 - minFreq(0), //create UI refresh timer refreshTimer( this ), //create a QGraphicsScene for the little chip icon scene( this ), + //the settings widget + settings(this), //show errors about the sudo setup only once showSudoError( true ) { @@ -55,9 +55,10 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); + init(); refresh(); - // enable auto rotation + // setup auto rotation setAutoRotation(); //initialize orientation @@ -72,6 +73,9 @@ MainWindow::MainWindow(QWidget *parent) : #endif helpWindow.setWindowFlags( windowFlags() | Qt::Window ); + //Settings widget + settings.hide(); + //connect signals and slots connect(ui->actionHelp, SIGNAL(triggered()), this, SLOT(showHelp())); connect( ui->actionAbout, SIGNAL(triggered()), this, SLOT(about()) ); @@ -80,6 +84,13 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->sr_box, SIGNAL(clicked()), this, SLOT(setSmartReflex())); connect(&refreshTimer, SIGNAL(timeout()), this, SLOT(refresh())); connect(ui->actionOverclocking, SIGNAL(toggled(bool)), this, SLOT(setOverclocking())); + connect(ui->actionSettings, SIGNAL(triggered()), this, SLOT(showSettings())); + + + //disable overclocking button on vanilla kernels + if (!powerKernel) { + ui->actionOverclocking->setDisabled(true); + } } @@ -105,6 +116,12 @@ void MainWindow::about() void MainWindow::adjustFreq() { int newmax = getScalingFreq( ui->freq_adjust->sliderPosition() ); + + if (newmax == getMaxFreq() ) { + //we do not need to change anything in this case + return; + } + QString max; //maxfreq should not be smaller than minfreq, because we do not want to decrease minfreq @@ -116,7 +133,7 @@ void MainWindow::adjustFreq() //check for overclocking #if defined(Q_WS_MAEMO_5) if (this->allowOverclocking == false && newmax > 600000) { - QMaemo5InformationBox::information(this, tr( "You need to enable overclocking for setting frequencies above 600MHz!"), 0); + QMaemo5InformationBox::information(this, tr( "You need to enable overclocking in QCPUFreq's menu for setting frequencies above 600MHz!"), 0); refresh(); return; } @@ -210,32 +227,7 @@ int MainWindow::getMaxFreq() */ int MainWindow::getMinFreq() { - if (this->minFreq == 0) { - QString min = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_min_freq" ); - //check if avoid file exists (only on power kernel) - QFile file( "/sys/devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); - if (file.exists()) { - QString avoid = readSysFile( "devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); - QStringList avoidList = avoid.split( " " ); - - //check if min is in avoid_frequencies - for (int i = getScalingStep( min.toInt() ); i>0; --i) { - if (!avoidList.contains(min.setNum( getScalingFreq(i) ))) { - this->minFreq = min.toInt(); - return this->minFreq; - } - } - - //should not happen at all - this->minFreq = 125000; - return this->minFreq; - } else { - this->minFreq = min.toInt(); - return this->minFreq; - } - } else { - return this->minFreq; - } + return this->minFreq; } @@ -244,23 +236,20 @@ int MainWindow::getMinFreq() */ int MainWindow::getScalingFreq(int step) { - QString tmp = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies" ); - QStringList freqs = tmp.split( " " ); step = step - 1; if ( step < 0 ) step = 0; - if ( step > getScalingSteps() ) - step = getScalingSteps(); + if ( step > getScalingSteps() - 1 ) + step = getScalingSteps() - 1; - tmp = freqs[ step ]; - return tmp.toInt(); + return this->scalingFrequencies[ step ].toInt(); } /** * Returns the name of the current CPU frequency scaling governor * - * \return name of governor + * @return QString - name of governor */ QString MainWindow::getScalingGovernor() { @@ -270,26 +259,25 @@ QString MainWindow::getScalingGovernor() /** * Returns the amount of available scaling steps. + * + * @return int */ int MainWindow::getScalingSteps() { - QString tmp = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies" ); - QStringList freqs = tmp.split( " " ); - return (freqs.size() - 1); + return this->scalingSteps; } /** * Returns the scaling step for the specified frequency. + * + * @return int */ int MainWindow::getScalingStep( int freq ) { - for( int i = 1; i <= getScalingSteps(); ++i ) { - if ( getScalingFreq(i) == freq ) - return i; - } - - return 1; + QString tmp; + tmp.setNum(freq); + return this->scalingFrequencies.indexOf(tmp) + 1; } @@ -304,10 +292,11 @@ int MainWindow::getSmartReflexState() #if defined(Q_WS_MAEMO_5) QString tmp = readSysFile( "power/sr_vdd1_autocomp" ); - if ( tmp == "1" ) - return 1; - else - return 0; + if ( tmp == "1" ) { + return 1; + } else { + return 0; + } #else //disable UI checkbox ui->sr_box->setDisabled( true ); @@ -318,6 +307,54 @@ int MainWindow::getSmartReflexState() /** + * Initializes internal variables, such as: + * - scalingSteps + * - scalingFrequencies + * - minFreq + * - powerKernel + */ +void MainWindow::init() +{ + this->minFreq = 0; + QString freqs = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies" ); + QStringList freqList = freqs.split( " " ); + //change the order of the QStringList - last element becomes first + for (int i=freqList.size() - 1; i>=0; --i) { + if (freqList.at(i) != "") + this->scalingFrequencies << freqList.at(i); + } + this->scalingSteps = (this->scalingFrequencies.size()); + + //set minFreq and check avoid_frequencies + QString min = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_min_freq" ); + //check if avoid file exists (only on power kernel) + QFile file( "/sys/devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); + if (file.exists()) { + QString avoid = readSysFile( "devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); + QStringList avoidList = avoid.split( " " ); + + //check if min is in avoid_frequencies + for (int i = getScalingStep( min.toInt() ); i <= this->scalingSteps; ++i) { + min.setNum( getScalingFreq(i) ); + if (!avoidList.contains(min)) { + this->minFreq = min.toInt(); + break; + } + } + } else { + this->minFreq = min.toInt(); + } + + //check if we are using a power kernel + if ( getScalingFreq(getScalingSteps()) > 600000 ) { + this->powerKernel = true; + } else { + this->powerKernel = false; + } +} + + +/** * Reads any file in /sys/ * * \param sys_file : full path to sys file - omit "/sys/" @@ -370,15 +407,14 @@ void MainWindow::refresh() //smart reflex button if ( getSmartReflexState() == 1 ) - ui->sr_box->setCheckState( Qt::Checked ); + ui->sr_box->setCheckState( Qt::Checked ); else - ui->sr_box->setCheckState( Qt::Unchecked ); + ui->sr_box->setCheckState( Qt::Unchecked ); //display frequency slider ui->freq_adjust->setMinimum( 1 ); ui->freq_adjust->setMaximum( getScalingSteps() ); - ui->freq_adjust->setInvertedAppearance( true ); ui->freq_adjust->setSliderPosition( getScalingStep(getMaxFreq()) ); //ui->retranslateUi(this); @@ -394,33 +430,33 @@ void MainWindow::orientationChanged() //check whether we are using portrait or landscape mode if ( usePortrait() ) { - //in portrait mode we want to display the large image - image.load( ":/img/chip256" ); - scene.clear(); - scene.addPixmap( image ); - - ui->graphicsPortrait->setScene( &scene ); - ui->graphicsPortrait->setMaximumSize( 256, 256 ); - ui->graphicsLandscape->setMaximumSize( 0, 0 ); + //in portrait mode we want to display the large image + image.load( ":/img/chip256" ); + scene.clear(); + scene.addPixmap( image ); + + ui->graphicsPortrait->setScene( &scene ); + ui->graphicsPortrait->setMaximumSize( 256, 256 ); + ui->graphicsLandscape->setMaximumSize( 0, 0 ); } else { - image.load( ":/img/chip128" ); - scene.clear(); - scene.addPixmap( image ); + image.load( ":/img/chip128" ); + scene.clear(); + scene.addPixmap( image ); - ui->graphicsLandscape->setScene( &scene ); - ui->graphicsLandscape->setMaximumSize( 128, 128 ); - ui->graphicsPortrait->setMaximumSize( 0, 0 ); + ui->graphicsLandscape->setScene( &scene ); + ui->graphicsLandscape->setMaximumSize( 128, 128 ); + ui->graphicsPortrait->setMaximumSize( 0, 0 ); } } /** - * Enables the auto-rotation feature of Maemo5 devices + * Enables or disables the auto-rotation feature of Maemo5 devices. */ void MainWindow::setAutoRotation() { #if defined(Q_WS_MAEMO_5) - setAttribute(Qt::WA_Maemo5AutoOrientation, true); + setAttribute(Qt::WA_Maemo5AutoOrientation, settings.useAutoRotate()); #endif } @@ -451,7 +487,7 @@ void MainWindow::setSmartReflex() if ( getSmartReflexState() == 1 ) callHelper( "set_sr", "off"); else { - QMaemo5InformationBox::information(this, tr( "SmartReflex support is known to be unstable on some devices and may cause random reboots." ), QMaemo5InformationBox::DefaultTimeout); + QMaemo5InformationBox::information(this, tr( "SmartReflex support is known to be unstable on some devices and may cause random reboots." ), 0); callHelper( "set_sr", "on"); } @@ -471,6 +507,16 @@ void MainWindow::showHelp() /** + * SLOT: displays the settings widget + */ +void MainWindow::showSettings() +{ + settings.reset(); + settings.show(); +} + + +/** * Returns true when the device is in portrait mode */ bool MainWindow::usePortrait()