Home · All Classes · All Functions ·

dialog.cpp Example File
sysinfo/dialog.cpp

    /****************************************************************************
    **
    ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    ** All rights reserved.
    ** Contact: Nokia Corporation (qt-info@nokia.com)
    **
    ** This file is part of the Qt Mobility Components.
    **
    ** $QT_BEGIN_LICENSE:LGPL$
    ** No Commercial Usage
    ** This file contains pre-release code and may not be distributed.
    ** You may use this file in accordance with the terms and conditions
    ** contained in the Technology Preview License Agreement accompanying
    ** this package.
    **
    ** GNU Lesser General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU Lesser
    ** General Public License version 2.1 as published by the Free Software
    ** Foundation and appearing in the file LICENSE.LGPL included in the
    ** packaging of this file.  Please review the following information to
    ** ensure the GNU Lesser General Public License version 2.1 requirements
    ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    **
    ** In addition, as a special exception, Nokia gives you certain additional
    ** rights.  These rights are described in the Nokia Qt LGPL Exception
    ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    **
    ** If you have questions regarding the use of this file, please contact
    ** Nokia at qt-info@nokia.com.
    **
    **
    **
    **
    **
    **
    **
    **
    ** $QT_END_LICENSE$
    **
    ****************************************************************************/

    #include "dialog.h"
    #include <QMessageBox>
    #include <QTimer>

    Dialog::Dialog() :
        QWidget(),
        saver(NULL), systemInfo(NULL), di(NULL), ni(NULL)
    {
        setupUi(this);
        setupGeneral();

        connect(tabWidget,SIGNAL(currentChanged(int)),this,SLOT(tabChanged(int)));
        connect(versionComboBox,SIGNAL(activated(int)), this,SLOT(getVersion(int)));
        connect(featureComboBox,SIGNAL(activated(int)), this,SLOT(getFeature(int)));
        QTimer *timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(updateDeviceLockedState()));
        timer->start(1000);
    }

    Dialog::~Dialog()
    {
        delete systemInfo;
        delete di;
        delete saver;
    }

    void Dialog::changeEvent(QEvent *e)
    {
        QWidget::changeEvent(e);
        switch (e->type()) {
        case QEvent::LanguageChange:
            retranslateUi(this);
            break;
        default:
            break;
        }
    }

    void Dialog::tabChanged(int index)
    {
    #ifdef Q_OS_SYMBIAN
        switch(index) {
        case 0:
            setupGeneral();
            break;
        case 1:
            setupGeneral();
            break;
        case 2:
            setupDevice();
            break;
        case 3:
            setupDevice();
            break;
        case 4:
            setupDevice();
            break;
        case 5:
            setupDisplay();
            break;
        case 6:
            setupStorage();
            break;
        case 7:
            setupNetwork();
            break;
        case 8:
            setupNetwork();
            break;
        case 9:
            setupNetwork();
            break;
        case 10:
            setupSaver();
            break;
        };
    #else
        switch(index) {
        case 0:
            setupGeneral();
            break;
        case 1:
            setupDevice();
            break;
        case 2:
            setupDisplay();
            break;
        case 3:
            setupStorage();
            break;
        case 4:
            setupNetwork();
            break;
        case 5:
            setupSaver();
            break;
        };
    #endif
    }

    void Dialog::setupGeneral()
    {
        delete systemInfo;
        systemInfo = new QSystemInfo(this);
        curLanguageLineEdit->setText( systemInfo->currentLanguage());
        languagesComboBox->clear();
        languagesComboBox->insertItems(0,systemInfo->availableLanguages());
        countryCodeLabel->setText(systemInfo->currentCountryCode());
    }

    void Dialog::setupDevice()
    {
        delete di;
        di = new QSystemDeviceInfo(this);
        batteryLevelBar->setValue(di->batteryLevel());

        connect(di,SIGNAL(batteryLevelChanged(int)),
                this,SLOT(updateBatteryStatus(int)));

        connect(di,SIGNAL(batteryStatusChanged(QSystemDeviceInfo::BatteryStatus)),
                this,SLOT(displayBatteryStatus(QSystemDeviceInfo::BatteryStatus)));

        connect(di,SIGNAL(powerStateChanged(QSystemDeviceInfo::PowerState)),
                this,SLOT(updatePowerState(QSystemDeviceInfo::PowerState)));

        ImeiLabel->setText(di->imei());
        imsiLabel->setText(di->imsi());
        manufacturerLabel->setText(di->manufacturer());
        modelLabel->setText(di->model());
        productLabel->setText(di->productName());

        deviceLockCheckBox->setChecked(di->isDeviceLocked());

    #if !defined(QT_NO_DBUS)
        simComboBox->setCurrentIndex(di->simStatus());
    #endif
        profileComboBox->setCurrentIndex(di->currentProfile());
        connect(di, SIGNAL(currentProfileChanged(QSystemDeviceInfo::Profile)),
            this, SLOT(updateProfile(QSystemDeviceInfo::Profile)));

        if(di->currentPowerState() == QSystemDeviceInfo::BatteryPower) {
            radioButton_2->setChecked(true);
        } else  if(di->currentPowerState() == QSystemDeviceInfo::WallPower) {
            radioButton_3->setChecked(true);
        } else if(di->currentPowerState() == QSystemDeviceInfo::WallPowerChargingBattery) {
            radioButton_4->setChecked(true);
        } else {
            radioButton->setChecked(true);
        }

        QSystemDeviceInfo::InputMethodFlags methods = di->inputMethodType();
        QStringList inputs;
        if((methods & QSystemDeviceInfo::Keys)){
            inputs << "Keys";
        }
        if((methods & QSystemDeviceInfo::Keypad)) {
            inputs << "Keypad";
        }
        if((methods & QSystemDeviceInfo::Keyboard)) {
            inputs << "Keyboard";
        }
        if((methods & QSystemDeviceInfo::SingleTouch)) {
            inputs << "Touch Screen";
        }
        if((methods & QSystemDeviceInfo::MultiTouch)) {
            inputs << "Multi touch";
        }
        if((methods & QSystemDeviceInfo::Mouse)){
            inputs << "Mouse";
        }

        inputMethodLabel->setText(inputs.join(" "));
    }

    void Dialog::updateDeviceLockedState()
    {
        if (di)
            deviceLockCheckBox->setChecked(di->isDeviceLocked());
    }

    void Dialog::updateProfile(QSystemDeviceInfo::Profile profile)
    {
        profileComboBox->setCurrentIndex(profile);
    }

    void Dialog::setupDisplay()
    {
        QSystemDisplayInfo di;
        brightnessLineEdit->setText(QString::number(di.displayBrightness(0)));
        colorDepthLineEdit->setText(QString::number(di.colorDepth((0))));

    }

    void Dialog::setupStorage()
    {
        QSystemStorageInfo mi;
        storageTreeWidget->clear();
        storageTreeWidget->header()->setResizeMode(QHeaderView::ResizeToContents);

        QStringList vols = mi.logicalDrives();
        foreach(QString volName, vols) {
            QString type;
            QSystemStorageInfo::DriveType volType;
            volType = mi.typeForDrive(volName);
            if(volType == QSystemStorageInfo::InternalDrive) {
                type =  "Internal";
            }

            if(volType == QSystemStorageInfo::RemovableDrive) {
                type = "Removable";
            }
            if(volType == QSystemStorageInfo::CdromDrive) {
                type =  "Cdrom";
            }
            if(volType == QSystemStorageInfo::RemoteDrive) {
                type =  "Network";
            }
            QStringList items;
            items << volName;
            items << type;
            items << QString::number(mi.totalDiskSpace(volName));
            items << QString::number(mi.availableDiskSpace(volName));
            QTreeWidgetItem *item = new QTreeWidgetItem(items);
            storageTreeWidget->addTopLevelItem(item);
        }
    }

    void Dialog::setupNetwork()
    {
        delete ni;
        ni = new QSystemNetworkInfo(this);

        connect(netStatusComboBox,SIGNAL(activated(int)),
                this, SLOT(netStatusComboActivated(int)));

        connect(ni,SIGNAL(networkSignalStrengthChanged(QSystemNetworkInfo::NetworkMode, int)),
                this,SLOT(networkSignalStrengthChanged(QSystemNetworkInfo::NetworkMode,int)));

        connect(ni,SIGNAL(networkNameChanged(QSystemNetworkInfo::NetworkMode,QString)),
                this,SLOT(networkNameChanged(QSystemNetworkInfo::NetworkMode,QString)));

        connect(ni,SIGNAL(networkStatusChanged(QSystemNetworkInfo::NetworkMode,QSystemNetworkInfo::NetworkStatus)),
                this,SLOT(networkStatusChanged(QSystemNetworkInfo::NetworkMode,QSystemNetworkInfo::NetworkStatus)));

        cellIdLabel->setText(QString::number(ni->cellId()));
        locationAreaCodeLabel->setText(QString::number(ni->locationAreaCode()));
        currentMMCLabel->setText(ni->currentMobileCountryCode());
        currentMNCLabel->setText(ni->currentMobileNetworkCode());

        homeMMCLabel->setText(ni->homeMobileCountryCode());
        homeMNCLabel->setText(ni->homeMobileNetworkCode());
    }
    void Dialog::netStatusComboActivated(int index)
    {
        QString status;
        int reIndex = index +1;

        displayNetworkStatus(ni->networkStatus((QSystemNetworkInfo::NetworkMode)reIndex));

        macAddressLabel->setText(ni->macAddress((QSystemNetworkInfo::NetworkMode)reIndex));

        int strength = ni->networkSignalStrength((QSystemNetworkInfo::NetworkMode)reIndex);
        if(strength < 0)
            strength = 0;
        signalLevelProgressBar->setValue(strength);

        InterfaceLabel->setText(ni->interfaceForMode((QSystemNetworkInfo::NetworkMode)reIndex).humanReadableName());

        operatorNameLabel->setText(ni->networkName((QSystemNetworkInfo::NetworkMode)reIndex));
    }

    void Dialog::getVersion(int index)
    {
        QSystemInfo::Version version;
        switch(index) {
        case 0:
            version = QSystemInfo::Os;
            break;
        case 1:
            version = QSystemInfo::QtCore;
            break;
        case 2:
            version = QSystemInfo::Firmware;
            break;
        };

        QSystemInfo si;
        versionLineEdit->setText(si.version(version));
    }

    void Dialog::getFeature(int index)
    {
        QSystemInfo::Feature feature;
        switch(index) {
        case 0:
            feature = QSystemInfo::BluetoothFeature;
            break;
        case 1:
            feature = QSystemInfo::CameraFeature;
            break;
        case 2:
            feature = QSystemInfo::FmradioFeature;
            break;
        case 3:
            feature = QSystemInfo::IrFeature;
            break;
        case 4:
            feature = QSystemInfo::LedFeature;
            break;
        case 5:
            feature = QSystemInfo::MemcardFeature;
            break;
        case 6:
            feature = QSystemInfo::UsbFeature;
            break;
        case 7:
            feature = QSystemInfo::VibFeature;
            break;
        case 8:
            feature = QSystemInfo::WlanFeature;
            break;
        case 9:
            feature = QSystemInfo::SimFeature;
            break;
        case 10:
            feature = QSystemInfo::LocationFeature;
            break;
        case 11:
            feature = QSystemInfo::VideoOutFeature;
            break;
        case 12:
            feature = QSystemInfo::HapticsFeature;
            break;
        };
        QSystemInfo si;
        featuresLineEdit->setText((si.hasFeatureSupported(feature) ? "true":"false" ));
    }

    //void Dialog::doVolumes(int /*index*/)
    //{
    //    QSystemStorageInfo mi;
    //    QString vol = volumesComboBox->currentText();
    //    int index2 = diskComboBox->currentIndex();
    //    switch(index2) {
    //    case 0:
    //        //total
    //        diskSpaceLineEdit->setText( QString::number(mi.totalDiskSpace(vol)));
    //        break;
    //        case 1:
    //        //available
    //        diskSpaceLineEdit->setText( QString::number(mi.availableDiskSpace(vol)));
    //        break;
    //        case 2:
    //        //type
    //        QSystemStorageInfo::VolumeType volType;
    //        volType = mi.getVolumeType(vol);
    //        if(volType == QSystemStorageInfo::Internal) {
    //                diskSpaceLineEdit->setText( "Internal");
    //        } else
    //        if(volType == QSystemStorageInfo::Removable) {
    //                diskSpaceLineEdit->setText( "Removable");
    //        }
    //        if(volType == QSystemStorageInfo::Cdrom) {
    //                diskSpaceLineEdit->setText( "Cdrom");
    //        }
    //        break;
    //    };
    //
    //}

    void Dialog::setupSaver()
    {
        if (!saver) {
            saver = new QSystemScreenSaver(this);
        }

        bool saverEnabled = saver->screenSaverInhibited();

        connect( saverInhibitedCheckBox, SIGNAL(clicked(bool)),
                 this,SLOT(setSaverEnabled(bool)));

        saverInhibitedCheckBox->setChecked(saverEnabled);
    }

    void Dialog::setSaverEnabled(bool b)
    {
        if (b) {
            if (!saver) {
                saver = new QSystemScreenSaver(this);
            }
           if(saver->setScreenSaverInhibit()) {
            }
        } else {
            delete saver;
            saver = NULL;
        }
    }

    void Dialog::updateBatteryStatus(int level)
    {
        batteryLevelBar->setValue(level);
    }

    void Dialog::updatePowerState(QSystemDeviceInfo::PowerState newState)
    {

        switch (newState) {
        case QSystemDeviceInfo::BatteryPower:
            {
                radioButton_2->setChecked(true);
            }
            break;
        case QSystemDeviceInfo::WallPower:
            {
                radioButton_3->setChecked(true);
            }
            break;
        case QSystemDeviceInfo::WallPowerChargingBattery:
            radioButton_4->setChecked(true);
            break;
        };
    }

    void Dialog::displayBatteryStatus(QSystemDeviceInfo::BatteryStatus status)
    {
        // this wont annoy users will it?
        QString msg;
    //    if(di->isBatteryCharging()) {
            switch(status) {
            case QSystemDeviceInfo::BatteryCritical:
                {
                    msg = " Battery is Critical (4% or less), please save your work or plug in the charger.";
                    QMessageBox::critical(this,"QSystemInfo",msg);
                }
                break;
            case QSystemDeviceInfo::BatteryVeryLow:
                {
                    msg = "Battery is Very Low (10%), please plug in the charger soon";
                    QMessageBox::warning(this,"QSystemInfo",msg);
                }
                break;
            case QSystemDeviceInfo::BatteryLow:
                {
                    msg = "Battery is Low (40% or less)";
                    QMessageBox::information(this,"QSystemInfo",msg);

                }
                break;
            case QSystemDeviceInfo::BatteryNormal:
                {
                    msg = "Battery is Normal (greater than 40%)";
                    QMessageBox::information(this,"QSystemInfo",msg);
                }
                break;
            };
      //  }

    }

    void Dialog::networkSignalStrengthChanged(QSystemNetworkInfo::NetworkMode mode , int strength)
    {
        if(mode == QSystemNetworkInfo::WlanMode) {
            if(netStatusComboBox->currentText() == "Wlan") {
                signalLevelProgressBar->setValue(strength);
            }
        }

        if(mode == QSystemNetworkInfo::EthernetMode) {
            if(netStatusComboBox->currentText() == "Ethernet") {
                signalLevelProgressBar->setValue(strength);
            }
        }

        if(mode == QSystemNetworkInfo::GsmMode) {
            if(netStatusComboBox->currentText() == "Gsm") {
                signalLevelProgressBar->setValue(strength);
            }
        }

        if(mode == QSystemNetworkInfo::CdmaMode) {
            if(netStatusComboBox->currentText() == "Cdma") {
                signalLevelProgressBar->setValue(strength);
            }
        }

        if(mode == QSystemNetworkInfo::WcdmaMode) {
            if(netStatusComboBox->currentText() == "Wcdma") {
                signalLevelProgressBar->setValue(strength);
            }
        }

    }

    void Dialog::networkNameChanged(QSystemNetworkInfo::NetworkMode mode,const QString &text)
    {
        if(mode == QSystemNetworkInfo::WlanMode) {
            if(netStatusComboBox->currentText() == "Wlan") {
                operatorNameLabel->setText(text);
            }
        }

        if(mode == QSystemNetworkInfo::EthernetMode) {
            if(netStatusComboBox->currentText() == "Ethernet") {
                operatorNameLabel->setText(text);
            }
        }

        if(mode == QSystemNetworkInfo::GsmMode) {
            if(netStatusComboBox->currentText() == "Gsm") {
                operatorNameLabel->setText(text);
            }
        }

        if(mode == QSystemNetworkInfo::CdmaMode) {
            if(netStatusComboBox->currentText() == "Cdma") {
                operatorNameLabel->setText(text);
            }
        }

        if(mode == QSystemNetworkInfo::WcdmaMode) {
            if(netStatusComboBox->currentText() == "Wcdma") {
                operatorNameLabel->setText(text);
            }
        }

    }

    void Dialog::networkStatusChanged(QSystemNetworkInfo::NetworkMode mode , QSystemNetworkInfo::NetworkStatus status)
    {
        if(mode == QSystemNetworkInfo::WlanMode) {
            if(netStatusComboBox->currentText() == "Wlan") {
               displayNetworkStatus(status);
            }
        }

        if(mode == QSystemNetworkInfo::EthernetMode) {
            if(netStatusComboBox->currentText() == "Ethernet") {
               displayNetworkStatus(status);
            }
        }

        if(mode == QSystemNetworkInfo::GsmMode) {
            if(netStatusComboBox->currentText() == "Gsm") {
                displayNetworkStatus(status);
            }
        }

        if(mode == QSystemNetworkInfo::CdmaMode) {
            if(netStatusComboBox->currentText() == "Cdma") {
                displayNetworkStatus(status);
            }
        }

        if(mode == QSystemNetworkInfo::WcdmaMode) {
            if(netStatusComboBox->currentText() == "Wcdma") {
                displayNetworkStatus(status);
            }
        }

    }

    void Dialog::displayNetworkStatus(QSystemNetworkInfo::NetworkStatus status)
    {
        QString stat;
        switch(status) {
        case QSystemNetworkInfo::UndefinedStatus:
            stat = "Undefined";
            break;
        case QSystemNetworkInfo::NoNetworkAvailable:
            stat = "No Network Available";
            break;
        case QSystemNetworkInfo::EmergencyOnly:
            stat = "Emergency Only";
            break;
        case QSystemNetworkInfo::Searching:
            stat = "Searching or Connecting";
            break;
        case QSystemNetworkInfo::Busy:
            stat = "Busy";
            break;
        case QSystemNetworkInfo::Connected:
            stat = "Connected";
            break;
        case QSystemNetworkInfo::HomeNetwork:
            stat = "Home Network";
            break;
        case QSystemNetworkInfo::Denied:
            stat = "Denied";
            break;
        case QSystemNetworkInfo::Roaming:
            stat = "Roaming";
            break;
        };
        cellNetworkStatusLabel->setText(stat);
    }


Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) Trademarks
Qt Mobility Project 1.0.0