perfmon/ui/hb/app/inc/enginewrapper.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:15:20 +0300
branchRCL_3
changeset 21 b3cee849fa46
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

#ifndef ENGINEWRAPPER_H
#define ENGINEWRAPPER_H

#include "perfmon_engine.h"

#include <QObject>
#include <QColor>
#include <QList>
#include <QVariant>

struct SampleData
{
    qint64 mFree;
    qint64 mSize;
    qint64 mTimeFromStart;
};

class SampleEntry
{
public:
    SampleEntry(const TSampleEntry& sampleEntry) : mEntry(&sampleEntry) {}

    QString description() const { return QString((QChar*)mEntry->iDescription.Ptr(), mEntry->iDescription.Length()); }
    QString unitShort() const { return QString((QChar*)mEntry->iUnitTypeShort.Ptr(), mEntry->iUnitTypeShort.Length()); }
    QString unitLong() const { return QString((QChar*)mEntry->iUnitTypeLong.Ptr(), mEntry->iUnitTypeLong.Length()); }
    int driveNumber() const { return mEntry->iDriveNumber; }
    QColor graphColor() const { return QColor(mEntry->iGraphColor.Red(), mEntry->iGraphColor.Green(), mEntry->iGraphColor.Blue()); }

    int sampleCount() const { return mEntry->iSampleDataArray->Count(); }
    inline const SampleData& sample(int index) const { return reinterpret_cast<SampleData&>(mEntry->iSampleDataArray->At(index)); }
private:
    const TSampleEntry *mEntry;

friend class EngineWrapper;
};

class PerfMonSources
{
public:
    int count() const { return ESourcesLength; }
    int isEnabled (int index) const { return mSources.iSrcEnabled[index]; }
    void setEnabled(int index, bool enabled) { mSources.iSrcEnabled[index] = enabled; }
    QList<QVariant> enabledIndexes() const {
        QList<QVariant> indexes;
        for(int i=0; i<count(); i++) {
            if (isEnabled(i))
                indexes.append(i);
        }
        return indexes;
    }
    void setEnabledIndexes(const QList<QVariant> &indexes)
    {
        for (int i=0; i<count(); i++) {
            setEnabled(i, false);
        }
        foreach (const QVariant& index, indexes) {
        	setEnabled(index.toInt(), true);
        }
    }

private:
    PerfMonSources(TPerfMonSources &sources) : mSources(sources) {}
    friend class PerfMonSettings;

private:
    TPerfMonSources &mSources;
};

class PerfMonSettings
{
public:
    int heartBeat() const { return mSettings.iHeartBeat; }
    int maxSamples() const { return mSettings.iMaxSamples; }
    int priority() const { return mSettings.iPriority; }
    int cpuMode() const { return mSettings.iCPUMode; }
    bool keepBacklightOn() const { return mSettings.iKeepBacklightOn; }

    int dataPopupVisibility() const { return mSettings.iDataPopupVisibility; }
    int dataPopupLocation() const { return mSettings.iDataPopupLocation; }
    PerfMonSources &dataPopupSources() { return mDataPopupSources; }
    const PerfMonSources &dataPopupSources() const { return mDataPopupSources; }

    int graphVerticalBarPeriod() const { return mSettings.iGraphsVerticalBarPeriod; }
    PerfMonSources &graphSources() { return mGraphSources; }
    const PerfMonSources &graphSources() const { return mGraphSources; }

    int loggingMode() const { return mSettings.iLoggingMode; }
    QString loggingFilePath() const {
        return QString((QChar*)mSettings.iLoggingFilePath.Ptr(),
                       mSettings.iLoggingFilePath.Length());
    }
    PerfMonSources &loggingSources() { return mLogSources; }
    const PerfMonSources &loggingSources() const { return mLogSources; }

    bool loggingEnabled() { return mSettings.iLoggingEnabled; }


    void setHeartBeat(int heartBeat) { mSettings.iHeartBeat = heartBeat; }
    void setMaxSamples(int maxSamples) { mSettings.iMaxSamples = maxSamples; }
    void setPriority(int priority) { mSettings.iPriority = priority; }
    void setCpuMode(int cpuMode) { mSettings.iCPUMode = cpuMode; }
    void setKeepBacklightOn(bool backlightOn) const { mSettings.iKeepBacklightOn = backlightOn; }

    void setDataPopupVisibility(int visibility) { mSettings.iDataPopupVisibility = visibility; }
    void setDataPopupLocation(int location) { mSettings.iDataPopupLocation = location; }

    void setGraphVerticalBarPeriod(int period) { mSettings.iGraphsVerticalBarPeriod = period; }

    void setLoggingMode(int mode) { mSettings.iLoggingMode = mode; }
    void setLoggingFilePath(const QString& filePath) { mSettings.iLoggingFilePath = filePath.utf16(); }

private:
    // only EngineWrapper can create Settings instance
    PerfMonSettings(TPerfMonSettings &settings) :
            mSettings(settings),
            mDataPopupSources(settings.iDataPopupSources),
            mGraphSources(settings.iGraphsSources),
            mLogSources(settings.iLoggingSources)
    {}
    friend class EngineWrapper;

private:
    TPerfMonSettings &mSettings;
    PerfMonSources mDataPopupSources;
    PerfMonSources mGraphSources;
    PerfMonSources mLogSources;
};

/**
 * class that is used for communicating between Symbian and Qt code.
 */
class EngineWrapper : public QObject, public CPerfMonEngine
 {
    Q_OBJECT

public:

    /**
     * Constructor
     */
    EngineWrapper();

    /**
     * Destructor
     */
    ~EngineWrapper();

public:
    const QList<SampleEntry>& sampleEntries() const { return mEntries; }

    PerfMonSettings &settings() { return mSettings; }
    const PerfMonSettings &settings() const { return mSettings; }

public slots:

    bool updateSettings();
    bool initialize();
    void finalize();
    void setLoggingEnabled(bool enabled);

signals:

    void samplesUpdated();
    void settingsUpdated();

protected:
    void SendDrawEventToContainersL();

private:
    QList<SampleEntry> mEntries;

    void createSampleEntriesArray();

    PerfMonSettings mSettings;
};

#endif //ENGINEWRAPPER_H