code:
<?xml version="1.0" encoding="UTF-8"?>
 <widget xmlns="http://www.w3.org/ns/widgets" height="320" id="http://Tab_Control" version="1.0.1" viewmodes="windowed fullscreen" width="240">

    <name short="Tab_Control">Tab_Control</name>

    <description>
        An tab control example.
    </description>

    <author email="webapps@nokia.com" href="http://www.nokia.com/">
        Nokia
    </author>

    <icon src="icon.png"/>

    <content src="index.html"/>

    <license>
	   Copyright © 2011 Nokia Corporation. All rights reserved.
	Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other product and company names mentioned herein may be
	trademarks or trade names of their respective owners.

	Subject to the conditions below, you may, without charge:

	-  Use, copy, modify and/or merge copies of this software and
	   associated documentation files (the “Software”)

	-  Publish, distribute, sub-licence and/or sell new software
	   derived from or incorporating the Software.

	This licence text, unmodified, shall be included with all copies or substantial portions
	of the Software that are distributed in source code form.

	The Software cannot constitute the primary value of any new software derived
	from or incorporating the Software.

	Any person dealing with the Software shall not misrepresent the source of the Software.

	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
	INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
	PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
	HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
	OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
	SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    </license>

   	<feature name="nokia://s40.nokia.com/SAWRT/1.0 " required="true" />
</widget>


code:
body {
  background-color: #F7F6F7;
  margin: 0px;
}

.show {
  display: block;
}

.hide {
  display: none;
}

.header {
  height: 40px;
  background-image:url('../img/header_background.png');
}

.app_name {
  color: white;
  font-weight: bold;
  padding-top: 10px;
  padding-bottom: 10px;
  padding-left: 30px;
  padding-right: 0px;
}

.app_logo {
  padding-left: 30px;
  padding-right: 0px;
}

.header_search {
  text-align: right;
}

.header_table {
  height: 40px;
  width: 100%;
  margin: 0px;
  padding: 0px;
}

.header_background {
  background-image:url('../img/header_background.png');
}

.app_logo {
  width: 43px;
}

.header_search_box_td {
  width:50%;
  padding-left:30px;
}

.header_search_box {
  width: 100px;
}

.header_transition_window {
  overflow: hidden;
  width: 197px;
}

.strip {
  width:394px;
  -webkit-transition: margin-left 1.0s linear;
  margin-right: 10px;
}

.show_app_name {
  margin-left:0px;
}

.show_search_box {
  margin-left:-197px;
}

.category {
  border-bottom-style: solid;
  border-bottom-color: #FFFFFF;
  border-bottom-width: 2px;
}

.category_header {
  width: 100%;
  height: 40px;
  color: black;
  background-color: #CED3C6;
  font-weight: bold;
}

.category_table {
  height: 40px;
  width: 100%;
  margin: 0px;
  padding: 0px;
}

.category_arrow {
  text-align: right;
}

.category_name {
  color: black;
  font-weight: bold;
  padding-top: 10px;
  padding-bottom: 10px;
  padding-left: 10px;
  padding-right: 0px;
}

.item_container {
  background-color: #CED3C6;
  padding-top: 5px;
  padding-bottom: 5px;
  border-top-style: solid;
  border-top-color: #B5B2B5;
  border-top-width: 2px;
}

.list_item {
  height: 30px;
  background-color: white;
  margin-left: 5px;
  margin-right: 5px;
  padding-left: 15px;
  padding-top: 10px;
  font-weight: bold;
  border-bottom-style: solid;
  border-bottom-color: #e7e7e7;
  border-bottom-width: 2px;
}

.list_item_picture {

}

.text_entry {
  width: 100%;
  height: 40px;
  color: black;
  background-color: #C6CBCE;
  margin-top: 10px;
  margin-bottom: 10px;
  padding-left: 10px;
  padding-right: 10px;
}

.text_entry_with_label {
  color: white;
  width: 100%;
  height: 60px;
  background-color: #C6CBCE;
  margin-top: 10px;
  margin-bottom: 10px;
  padding-left: 10px;
  padding-right: 10px;
}

.button {
  height: 40px;
  background-image:url('../img/button_background.png');
  color: white;
}

.image_list_item {
  height: 30px;
  background-color: white;
  margin-left: 5px;
  margin-right: 5px;
  padding-left: 15px;
  padding-top: 10px;
  font-weight: bold;
  border-bottom-style: solid;
  border-bottom-color: #e7e7e7;
  border-bottom-width: 2px;
}

.image_list_item_text {
  padding-left: 10px;
}

.featured_list_item {
  height: 30px;
  margin: 5px;
  background-color: white;
  padding-left: 15px;
  padding-top: 10px;
  vertical-align: middle;
  font-weight: bold;
}

.list_item_title_bar {
  height: 20px;
  background-color: #8FBC84;
  color: black;
  padding-left: 5px;
  font-weight: bold;
  width: 100%;
}

.tab_table {
  width: 100%;
}

.tab {
  height: 40px;
  width: 33%;
  text-align: center;
  border-right: 1px solid grey;
}

.tab_not_selected {
  color: grey;
  background-image:url('../img/tab_background.png');
}

.tab_selected {
  background-color: white;
  color: green;
}

license: unknown


code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <title>Tab Control</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="css/base_s40.css" type="text/css"/>
    <meta name="Generator" content="Nokia WDE 3.2.0" />

Tab Control

                    <input type="text" class="header_search_box"/>

        Tab 1
        Tab 2
        Tab 3

        Tab 1 Content

        Tab 2 Content

        Tab 3 Content


code:
*.user
*.sis
*.cer
*.key

repo_name: snapshot/qtinfo


code:
TEMPLATE = subdirs

CONFIG += ordered

# The actual projects
SUBDIRS = \
          sqlinfolib \
          glinfolib \
          webkitinfolib \
          mobilityinfolib \
          multimediainfolib \
          qtquickinfolib \
          declarativeui \
          qtinfo

qtinfo.depends = qtquickinfolib glinfolib webkitinfolib mobilityinfolib sqlinfolib multimediainfolib qtquickinfolib declarativeui

# Qt prior to 4.7 has no declarative module
contains(QT_VERSION, ^4\\.[0-6]\\..*) {
    SUBDIRS -= qtquickinfolib declarativeui
    qtinfo.depends -= qtquickinfolib declarativeui
}
message($$CONFIG)
contains(QT_MAJOR_VERSION,5) {
    SUBDIRS += qtquick2infolib
    qtinfo.depends += qtquick2infolib
    SUBDIRS -= mobilityinfolib # multimediainfolib
    qtinfo.depends -= mobilityinfolib # multimediainfolib
}

# Symbian doesn't do the GL module
symbian: {
    SUBDIRS -= glinfolib
    qtinfo.depends -= glinfolibs
}

# BB10 uses cascades, has no webkit, gl or the sysinfo from mobility libs
qnx {
    SUBDIRS += cascadesui bb10infolib
    qtinfo.depends += cascadesui bb10infolib
    SUBDIRS -= webkitinfolib
#glinfolib
    qtinfo.depends -= webkitinfolib
#glinfolib
}

OTHER_FILES += \
    qtc_packaging/debian_fremantle/rules \
    qtc_packaging/debian_fremantle/README \
    qtc_packaging/debian_fremantle/copyright \
    qtc_packaging/debian_fremantle/control \
    qtc_packaging/debian_fremantle/compat \
    qtc_packaging/debian_fremantle/changelog \
    qtc_packaging/meego.spec \
    qtc_packaging/debian_harmattan/rules \
    qtc_packaging/debian_harmattan/README \
    qtc_packaging/debian_harmattan/copyright \
    qtc_packaging/debian_harmattan/control \
    qtc_packaging/debian_harmattan/compat \
    qtc_packaging/debian_harmattan/changelog

unix:!symbian { # not funny
    target.path = /opt/qtinfo/bin
    INSTALLS += target
}

symbian:OTHER_FILES += magic.pkg


code:
/*
============================================================================
 Name		: QtInfo_launcher.mmp
 Author	  : Lucian Tomuta
 Copyright   : 2011 Forum Nokia
 Description : Localised registration resource file for QtInfo Launcher.
============================================================================
*/

#include <appinfo.rh>
#include "qtinfo_launcher.loc"

RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info
	{
	short_caption = STRING_r_caption_short;
	caption_and_icon =
	CAPTION_AND_ICON_INFO
		{
		caption = STRING_r_caption;
		number_of_icons = 1;
		icon_file = "\\resource\\apps\\QtInfo_launcher.mif";
		};
	}


code:
/*
============================================================================
 Name		: QtInfo_launcher.mmp
 Author	  : Lucian Tomuta
 Copyright   : 2011 Forum Nokia
 Description : Registration resource file for QtInfo Launcher.
============================================================================
*/

#include <appinfo.rh>

UID2 KUidAppRegistrationResourceFile
UID3 0xA00002D7

RESOURCE APP_REGISTRATION_INFO
	{
	app_file="QtInfo_launcher";
	localisable_resource_file="\\resource\\apps\\qtinfo_launcher";
	}


code:
# ============================================================================
#  Name	 : Icons_scalable_dc.mk
#  Part of  : QtInfo_Launcher
#
#  Description: This is file for creating .mif file (scalable icon)
#
# ============================================================================

ifeq (WINS,$(findstring WINS, $(PLATFORM)))
ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
else
ZDIR=$(EPOCROOT)epoc32\data\z
endif

TARGETDIR=$(ZDIR)\resource\apps
ICONTARGETFILENAME=$(TARGETDIR)\QtInfo_launcher.mif

ICONDIR=..\gfx

do_nothing :
	@rem do_nothing

MAKMAKE : do_nothing

BLD : do_nothing

CLEAN :
	@echo ...Deleting $(ICONTARGETFILENAME)
	del /q /f $(ICONTARGETFILENAME)

LIB : do_nothing

CLEANLIB : do_nothing

# ----------------------------------------------------------------------------
# NOTE: if you have JUSTINTIME enabled for your S60 3rd FP1 or newer SDK
# and this command crashes, consider adding "/X" to the command line.
# See <http://forum.nokia.com/document/Forum_Nokia_Technical_Library_v1_35/contents/FNTL/Build_process_fails_at_mif_file_creation_in_S60_3rd_Ed_FP1_SDK.htm>
# ----------------------------------------------------------------------------

RESOURCE : $(ICONTARGETFILENAME)

$(ICONTARGETFILENAME) : $(ICONDIR)\qgn_menu_QtInfo_launcher.svg
	mifconv $(ICONTARGETFILENAME) \
		/c32 $(ICONDIR)\qgn_menu_QtInfo_launcher.svg

FREEZE : do_nothing

SAVESPACE : do_nothing

RELEASABLES :
	@echo $(ICONTARGETFILENAME)

FINAL : do_nothing


code:
/*
============================================================================
 Name		: QtInfo_launcher.mmp
 Author	  : Lucian Tomuta
 Copyright   : 2011 Forum Nokia
 Description : This is the project specification file for QtInfo_launcher.
============================================================================
*/

TARGET		  QtInfo_launcher.exe
TARGETTYPE	  exe
UID			 0 0xA00002D7

USERINCLUDE	 ..\inc
SYSTEMINCLUDE   \epoc32\include

SOURCEPATH	  ..\src
SOURCE		  QtInfo_launcher.cpp

SOURCEPATH			..\data
START RESOURCE		qtinfo_launcher.rss
TARGETPATH		/resource/apps
END

SOURCEPATH			..\data
START RESOURCE		qtinfo_launcher_reg.rss
TARGETPATH		/private/10003a3f/import/apps
END

LIBRARY		 euser.lib apparc.lib apgrfx.lib
LIBRARY  aknnotify.lib eiksrv.lib

#ifdef ENABLE_ABIV2_MODE
  DEBUGGABLE_UDEBONLY
#endif


code:
/*
============================================================================
 Name		: QtInfo_launcher.h
 Author	  : Lucian Tomuta
 Copyright   : Your copyright notice
 Description : This file provides the information required for building the
				whole of a QtInfo_launcher.
============================================================================
*/

PRJ_PLATFORMS
DEFAULT

PRJ_MMPFILES
gnumakefile Icons_scalable_dc.mk
QtInfo_launcher.mmp


code:
; Installation file for Symbian OS 9.x for generic console application
; Installation file for QtInfo_launcher EXE
;
; This is an auto-generated PKG file by Carbide.
; This file uses variables specific to Carbide builds that will not work
; on command-line builds. If you want to use this generated PKG file from the
; command-line tools you will need to modify the variables with the appropriate
; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
;

;
; UID is the exe's UID
;
#{"QtInfo_launcher EXE"},(0xA00002D7),1,0,0

;Localised Vendor name
%{"Forum Nokia"}

;Unique Vendor name
:"Forum Nokia"

"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\QtInfo_launcher.exe"		  -"!:\sys\bin\QtInfo_launcher.exe"
"$(EPOCROOT)epoc32/data/z/resource/apps/QtInfo_launcher.rsc"    - "!:\resource\apps\QtInfo_launcher.rsc"
"$(EPOCROOT)epoc32/data/z/private/10003a3f/import/apps/QtInfo_launcher_reg.rsc"    - "!:\private\10003a3f\import\apps\QtInfo_launcher_reg.rsc"
"$(EPOCROOT)epoc32/data/z/resource/apps/QtInfo_launcher.mif"    - "!:\resource\apps\QtInfo_launcher.mif"


code:
/*
 ============================================================================
 Name		: QtInfo_launcher.cpp
 Author	  : Lucian Tomuta
 Copyright   : 2011 Forum Nokia
 Description : Exe source file
 ============================================================================
 */

//  Include Files

#include "QtInfo_launcher.h"
#include <e32base.h>
#include <e32std.h>

#include <apgcli.h> // for RApaLsSession
#include <apacmdln.h> // for CApaCommandLine
#include <aknglobalnote.h>

//  Constants
const TUid KQtInfoAppUid = {0xA00002D6};
_LIT(KMessage, "Failed to start QtInfo (%d).\nDo you have Qt installed?");

//  Local Functions

void ShowNoteL(const TDesC& aMessage)
{
	CAknGlobalNote* note = CAknGlobalNote::NewL();
	TInt noteId = note->ShowNoteL(EAknGlobalInformationNote ,aMessage);
	User::After(3000000);
	note->CancelNoteL(noteId);
}

void LaunchAppL(const TUid aAppUid)
{
	RApaLsSession apaLsSession;
	User::LeaveIfError(apaLsSession.Connect());
	CleanupClosePushL(apaLsSession);
	TApaAppInfo appInfo;

	User::LeaveIfError(apaLsSession.GetAppInfo(appInfo, aAppUid));

	CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
	cmdLine->SetExecutableNameL(appInfo.iFullName);
	cmdLine->SetCommandL(EApaCommandRun);

	User::LeaveIfError( apaLsSession.StartApp(*cmdLine) );

	CleanupStack::PopAndDestroy(cmdLine);
	CleanupStack::PopAndDestroy(&apaLsSession);
}

LOCAL_C void MainL()
	{
	//
	// add your program code here, example code below
	//
	TRAPD(error, LaunchAppL(KQtInfoAppUid));
	if(error != KErrNone)
		{
			TBuf <100> message;
			message.Format(KMessage, error);
			ShowNoteL(message);
		}
	}

LOCAL_C void DoStartL()
	{
	// Create active scheduler (to run active objects)
//	CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
//	CleanupStack::PushL(scheduler);
//	CActiveScheduler::Install(scheduler);

	TRAPD(ignore, MainL());

	// Delete active scheduler
//	CleanupStack::PopAndDestroy(scheduler);
	}

//  Global Functions

GLDEF_C TInt E32Main()
	{
	// Create cleanup stack
	__UHEAP_MARK;
	CTrapCleanup* cleanup = CTrapCleanup::New();

	// Run application code inside TRAP harness
	TRAPD(mainError, DoStartL());

	delete cleanup;
	__UHEAP_MARKEND;
	return KErrNone;
	}


code:
#include "bb10infolib.h"

#include <bb/platform/PlatformInfo>
#include <bb/device/HardwareInfo>
#include <bb/MemoryInfo>
#include <bb/device/DisplayInfo>
#include <bb/device/CellularNetworkInfo>
#include <bb/device/CellularRadioInfo>
#include <bb/device/SimCardInfo>
#include <QStringList>

QList<QPair<QString, QString> > bb10Info()
{
    QList<QPair<QString, QString> > info;
    QStringList valuelist;
    QString value;

//    hmm, segfaults on my desktop 1.2
//    QSystemDeviceInfo qsdei;
//    info.append(QPair<QString,QString>("Device", QString("%0 %1 (%2)").arg(qsdei.manufacturer()).arg(qsdei.model()).arg(qsdei.productName())));

//    QSystemInfo si;
//    value = si.version(QSystemInfo::Os) + " / "  + si.version(QSystemInfo::Firmware);
//    info.append(QPair<QString,QString>("OS / Firmware", value));

    bb::platform::PlatformInfo pi;
    info.append(QPair<QString,QString>("OS / Firmware", "BlackBerry10 " + pi.osVersion()));

    info.append(QPair<QString,QString>("section", "BB10 Device Info"));

    bb::MemoryInfo mi;
    info.append(QPair<QString,QString>("Total memory", QString::number(mi.totalDeviceMemory() / 1024 / 1024) + " MB"));

    bb::device::HardwareInfo hi;

    if (!hi.pin().isEmpty()) info.append(QPair<QString,QString>("PIN", hi.pin()));
    if (!hi.serialNumber().isEmpty()) info.append(QPair<QString,QString>("Serial Number", hi.serialNumber()));
    if (!hi.imei().isEmpty()) info.append(QPair<QString,QString>("IMEI", hi.imei()));
    if (!hi.meid().isEmpty()) info.append(QPair<QString,QString>("MEID", hi.meid()));
    if (!hi.hardwareId().isEmpty()) info.append(QPair<QString,QString>("Hardware ID", hi.hardwareId()));
    if (!hi.deviceName().isEmpty()) info.append(QPair<QString,QString>("Device Name", hi.deviceName()));
    if (!hi.property("modelName").toString().isEmpty()) info.append(QPair<QString,QString>("Model Name", hi.property("modelName").toString()));
    if (!hi.property("modelNumber").toString().isEmpty()) info.append(QPair<QString,QString>("Model Number", hi.property("modelNumber").toString()));
//    info.append(QPair<QString,QString>("Keyboard", hi.isPhysicalKeyboardDevice() ? "Yes" : "No" ));

    QList<int> dids;
    dids << bb::device::DisplayInfo::primaryDisplayId() << bb::device::DisplayInfo::secondaryDisplayId();
    foreach (int displayId, dids ) {
        bb::device::DisplayInfo *di = new bb::device::DisplayInfo(displayId,0);
        if (di->isValid())
            info.append(QPair<QString,QString>(QString("Screen (%0)").arg(di->displayName()), QString("%0x%1, %2").arg(di->pixelSize().width()).arg(di->pixelSize().height()).arg(di->isDetachable() ? (di->isAttached() ? "Attached" : "Off") : "")));
    }

    bb::device::CellularNetworkInfo cni;
    bb::device::SimCardInfo sci;
    info.append(QPair<QString,QString>("SIM country", QString("Home: %0, Current: %1").arg(sci.mobileCountryCode()).arg(cni.mobileCountryCode())));
    info.append(QPair<QString,QString>("SIM network", QString("Home: %0, Current: %1").arg(sci.mobileNetworkCode()).arg(cni.mobileNetworkCode())));

    bb::device::CellularRadioInfo cri;
    valuelist.clear();
    if (cri.technologies() & 0x01) valuelist << "GSM";
    if (cri.technologies() & 0x02) valuelist << "UMTS";
    if (cri.technologies() & 0x04) valuelist << "CDMA2000 1xRTT";
    if (cri.technologies() & 0x08) valuelist << "CDMA2000 1xEV-DO";
    if (cri.technologies() & 0x10) valuelist << "LTE";
    info.append(QPair<QString,QString>("Cellular technologies", valuelist.join(", ")));

    valuelist.clear();
    if (cri.services() & 0x01) valuelist << "Emergency calls";
    if (cri.services() & 0x02) valuelist << "Voice";
    if (cri.services() & 0x04) valuelist << "911 callback/locator";
    if (cri.services() & 0x100) valuelist << "Data transfer";
    if (cri.services() & 0x400) valuelist << "Simultaneous Voice+Data";
    if (cri.services() & 0x1000) valuelist << "GPRS data";
    if (cri.services() & 0x2000) valuelist << "EDGE data";
    if (cri.services() & 0x4000) valuelist << "UMTS data";
    if (cri.services() & 0x8000) valuelist << "HSPA data";
    if (cri.services() & 0x10000) valuelist << "HSPA+ data";
    if (cri.services() & 0x20000) valuelist << "CDMA 1x data";
    if (cri.services() & 0x40000) valuelist << "EV-DO release 0 data";
    if (cri.services() & 0x80000) valuelist << "EV-DO revision A data";
    if (cri.services() & 0x100000) valuelist << "eHRPD data";
    if (cri.services() & 0x200000) valuelist << "LTE data";
    info.append(QPair<QString,QString>("Cellular services", valuelist.join(", ")));

    return info;
}


code:
#ifndef BB10INFO_H
#define BB10INFO_H

#include <QList>
#include <QPair>
#include <QString>

extern "C" {
QList<QPair<QString, QString> > bb10Info();
}
#endif


code:
######################################################################
# Automatically generated by qmake (2.01a) to 24. maalis 09:24:08 2011
######################################################################

include (../multipass.pri)

TEMPLATE = lib
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

QT += core

TARGET = bb10infolib

LIBS += -lbbplatform -lbbdevice

# Input
HEADERS += bb10infolib.h
SOURCES += bb10infolib.cpp

OTHER_FILES += \
    assets/qtinfo.svg \
    assets/qtinfo.png


code:
/* JSONListModel - a QML ListModel with JSON and JSONPath support
 *
 * Copyright (c) 2012 Romain Pokrzywka (KDAB) (romain@kdab.com)
 * Licensed under the MIT licence (http://opensource.org/licenses/mit-license.php)
 */

//import QtQuick 1.1
import bb.cascades 1.0
import "jsonpath.js" as JSONPath

Container {
    visible: false

    property string source: ""
    property string json: ""
    property string query: ""

//    property alias count: jsonModel.count
    property int count: 0
    property ArrayDataModel model : ArrayDataModel { id: jsonModel }

    onSourceChanged: {
        var xhr = new XMLHttpRequest;
        xhr.open("GET", source);
        xhr.onreadystatechange = function() {
            if (xhr.readyState == XMLHttpRequest.DONE)
                json = xhr.responseText;
        }
        xhr.send();
    }

    onJsonChanged: { updateJSONModel(); count = jsonModel.size(); console.log("JSON parsed: " + count); }
    onQueryChanged: updateJSONModel()

    function updateJSONModel() {
        jsonModel.clear();

        if ( json === "" )
            return;

        var objectArray = parseJSONString(json, query);
        for ( var key in objectArray ) {
            var jo = objectArray[key];
            jsonModel.append( jo );
        }
    }

    function parseJSONString(jsonString, jsonPathQuery) {
        var objectArray = JSON.parse(jsonString);
        if ( jsonPathQuery !== "" )
            objectArray = JSONPath.jsonPath(objectArray, jsonPathQuery);

        return objectArray;
    }
}


code:
/* JSONPath 0.8.5 - XPath for JSON
 *
 * Copyright (c) 2007 Stefan Goessner (goessner.net)
 * Licensed under the MIT (MIT-LICENSE.txt) licence.
 *
 */
function jsonPath(obj, expr, arg) {
   var P = {
      resultType: arg && arg.resultType || "VALUE",
      result: [],
      normalize: function(expr) {
         var subx = [];
         return expr.replace(/[\['](\??\(.*?\))[\]']|\['(.*?)'\]/g, function($0,$1,$2){return "[#"+(subx.push($1||$2)-1)+"]";})  /* http://code.google.com/p/jsonpath/issues/detail?id=4 */
                    .replace(/'?\.'?|\['?/g, ";")
                    .replace(/;;;|;;/g, ";..;")
                    .replace(/;$|'?\]|'$/g, "")
                    .replace(/#([0-9]+)/g, function($0,$1){return subx[$1];});
      },
      asPath: function(path) {
         var x = path.split(";"), p = "$";
         for (var i=1,n=x.length; i<n; i++)
            p += /^[0-9*]+$/.test(x[i]) ? ("["+x[i]+"]") : ("['"+x[i]+"']");
         return p;
      },
      store: function(p, v) {
         if (p) P.result[P.result.length] = P.resultType == "PATH" ? P.asPath(p) : v;
         return !!p;
      },
      trace: function(expr, val, path) {
         if (expr !== "") {
            var x = expr.split(";"), loc = x.shift();
            x = x.join(";");
            if (val && val.hasOwnProperty(loc))
               P.trace(x, val[loc], path + ";" + loc);
            else if (loc === "*")
               P.walk(loc, x, val, path, function(m,l,x,v,p) { P.trace(m+";"+x,v,p); });
            else if (loc === "..") {
               P.trace(x, val, path);
               P.walk(loc, x, val, path, function(m,l,x,v,p) { typeof v[m] === "object" && P.trace("..;"+x,v[m],p+";"+m); });
            }
            else if (/^\(.*?\)$/.test(loc)) // [(expr)]
               P.trace(P.eval(loc, val, path.substr(path.lastIndexOf(";")+1))+";"+x, val, path);
            else if (/^\?\(.*?\)$/.test(loc)) // [?(expr)]
               P.walk(loc, x, val, path, function(m,l,x,v,p) { if (P.eval(l.replace(/^\?\((.*?)\)$/,"$1"), v instanceof Array ? v[m] : v, m)) P.trace(m+";"+x,v,p); }); // issue 5 resolved
            else if (/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)) // [start:end:step]  phyton slice syntax
               P.slice(loc, x, val, path);
            else if (/,/.test(loc)) { // [name1,name2,...]
               for (var s=loc.split(/'?,'?/),i=0,n=s.length; i<n; i++)
                  P.trace(s[i]+";"+x, val, path);
            }
         }
         else
            P.store(path, val);
      },
      walk: function(loc, expr, val, path, f) {
         if (val instanceof Array) {
            for (var i=0,n=val.length; i<n; i++)
               if (i in val)
                  f(i,loc,expr,val,path);
         }
         else if (typeof val === "object") {
            for (var m in val)
               if (val.hasOwnProperty(m))
                  f(m,loc,expr,val,path);
         }
      },
      slice: function(loc, expr, val, path) {
         if (val instanceof Array) {
            var len=val.length, start=0, end=len, step=1;
            loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g, function($0,$1,$2,$3){start=parseInt($1||start);end=parseInt($2||end);step=parseInt($3||step);});
            start = (start < 0) ? Math.max(0,start+len) : Math.min(len,start);
            end   = (end < 0)   ? Math.max(0,end+len)   : Math.min(len,end);
            for (var i=start; i<end; i+=step)
               P.trace(i+";"+expr, val, path);
         }
      },
      eval: function(x, _v, _vname) {
         try { return $ && _v && eval(x.replace(/(^|[^\\])@/g, "$1_v").replace(/\\@/g, "@")); }  // issue 7 : resolved ..
         catch(e) { throw new SyntaxError("jsonPath: " + e.message + ": " + x.replace(/(^|[^\\])@/g, "$1_v").replace(/\\@/g, "@")); }  // issue 7 : resolved ..
      }
   };

   var $ = obj;
   if (expr && obj && (P.resultType == "VALUE" || P.resultType == "PATH")) {
      P.trace(P.normalize(expr).replace(/^\$;?/,""), obj, "$");  // issue 6 resolved
      return P.result.length ? P.result : false;
   }
}


code:
// List with a context menu project template
import bb.cascades 1.0
//import com.rim.example.custom 1.0

Page {
    content: Container {
        layout: DockLayout {
        }
        TextArea {
            id: loadTicker
            objectName: "loadTicker"
            editable: false
            text: "Starting QtInfo"
            verticalAlignment: VerticalAlignment.Top
            horizontalAlignment: HorizontalAlignment.Center
        }
        ImageView {
            id: logo
            imageSource: "qtinfo.png"
//            preferredWidth: 256
//            preferredHeight: 256
            scaleX: 2.0
            scaleY: 2.0
            verticalAlignment: VerticalAlignment.Center
            horizontalAlignment: HorizontalAlignment.Center
        }
        ProgressIndicator {
            id: progress
            objectName: "progress"
            fromValue: 0
            toValue: 100
            verticalAlignment: VerticalAlignment.Bottom
            horizontalAlignment: HorizontalAlignment.Center
        }
    }

    onCreationCompleted: {
        // this slot is called when declarative scene is created
        // write post creation initialization here
        console.log("Page loading - onCreationCompleted()")

        // enable layout to adapt to the device rotation
        // don't forget to enable screen rotation in bar-bescriptor.xml (Application->Orientation->Auto-orient)
        OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.All;
    }
}


code:
// List with a context menu project template
import bb.cascades 1.0
//import com.rim.example.custom 1.0

Page {
    content: Container {
        layout: DockLayout {
        }
        ListView {
            id: listView
            objectName: "listView"
            horizontalAlignment: HorizontalAlignment.Center
            dataModel: GroupDataModel {
                id: myListModel
                objectName: "dm"
            }
            leadingVisual: Container {
                        Label {
                            text: "QtInfo"
                            textStyle
                            {
                                base: SystemDefaults.TextStyles.BigText
                            }
                        }
            }
            function itemType(data, indexPath) {
//                    return (indexPath.length == 1 ? 'header' : 'item');
                return data.type
            }
            property int activeItem: -1
            contextActions: [
            ActionSet {
                // put context menu actions here
                title: qsTr("Picture actions")
                subtitle: qsTr("Set of the useful things to do ...")
                ActionItem {
                    title: qsTr("Break")
                    onTriggered: {
                        // define action handler here
                        console.log ("action triggered: " + title + " active item: " + listView.activeItem)
                        var flags = myListModel.value(listView.activeItem, "flags");
                        if(!flags) flags = {};
                        flags.broken = !flags.broken;
                        title = flags.broken? qsTr("Unbreak"): qsTr("Break");
                        myListModel.setValue(listView.activeItem, "flags", flags)
                        myListModel.setValue(listView.activeItem, "image", assetForFlags(flags));
                        myListModel.setValue(listView.activeItem, "status", statusForFlags(flags));
                    }
                }
                ActionItem {
                    title: qsTr("Hide")
                    onTriggered: {
                        console.log ("action triggered: " + title)
                        var flags = myListModel.value(listView.activeItem, "flags");
                        if(!flags) flags = {};
                        flags.hidden = !flags.hidden;
                        title = flags.hidden? qsTr("Show"): qsTr("Hide");
                        myListModel.setValue(listView.activeItem, "flags", flags)
                        myListModel.setValue(listView.activeItem, "image", assetForFlags(flags));
                        myListModel.setValue(listView.activeItem, "status", statusForFlags(flags));
                    }
                }
            }
            ]
            // Override default GroupDataModel::itemType() behaviour, which is to return item type "header"
            listItemComponents: [
            // define delegates for different item types here
                ListItemComponent {
                    type: "header"
                    Header {
                        title: ListItemData.first
//                        subtitle: "subtitle"
                    }
                },
                ListItemComponent {
                    type: "item"
                    // StandardListItem is a convivience component for lists with default cascades look and feel

                    Container {
                        layout: StackLayout {
                            orientation: Orientation.TopToBottom
                        }
                        StandardListItem {
                            title: ListItemData.first
                        }
                        Label {
                            text: ListItemData.second + "\n"
                            multiline: true
                            textStyle
                            {
//                              base: SystemDefaults.TextStyles.BodyText
                                base: SystemDefaults.TextStyles.SubtitleText
                            }
                        }
                    }
                }
            ]
            onSelectionChanged: {
                // slot called when ListView emits selectionChanged signal
                // A slot naming convention is used for automatic connection of list view signals to slots
                console.log ("onSelectionChanged, selected: " + selected)
            }
            onActivationChanged: {
                console.log ("onActivationChanged, active: " + active)
                if(active) listView.activeItem = indexPath[0]
            }
        }
    }
    function assetForFlags(flags) {
        var ret = "asset:///images/picture1.png";
        if(flags.hidden) ret = null;
        else if(flags.broken) ret = "asset:///images/picture2.png";
        return ret;
    }
    function statusForFlags(flags) {
        var ret = "";
        if(flags.hidden) ret = qsTr("hidden");
        if(flags.broken) {
            if(ret) ret += ", ";
            ret += qsTr("broken");
        }
        return ret;
    }
    onCreationCompleted: {
        // this slot is called when declarative scene is created
        // write post creation initialization here
        console.log("Page - onCreationCompleted()")

        // enable layout to adapt to the device rotation
        // don't forget to enable screen rotation in bar-bescriptor.xml (Application->Orientation->Auto-orient)
        OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.All;

        // populate list view model with the sample data
//        myListModel.load("app/native/assets/mydata.json")
    }
}


code:
#include "cascadesui.h"
#include "mylistmodel.hpp"

#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/cascades/AbstractPane>
#include <QtGui/QFontDatabase>

using namespace bb::cascades;

QtInfo::QtInfo(bb::cascades::Application *app)
: QObject(app)
{
    // register the MyListModel C++ type to be visible in QML
    QmlDocument *qml = QmlDocument::create("app/native/assets/main.qml").parent(this);
    qmlRegisterType<MyListModel>("com.rim.example.custom", 1, 0, "MyListModel");

//    QFontDatabase database;

    // create scene document from main.qml asset
    // set parent to created document to ensure it exists for the whole application lifetime
//    QDeclarativeContext *derivedContext1 =
//                new QDeclarativeContext(qml->documentContext());
//        derivedContext1->setContextProperty("fontModel", QVariant::fromValue(database.families()));
//    qml->documentContext()->setContextProperty("fontModel", QVariant::fromValue(database.families()));
        qml->documentContext()->setContextProperty("fontModel", QVariant::fromValue(QStringList()));

    // create root object for the UI

    AbstractPane *root = qml->createRootObject<AbstractPane>();

    // set created root object as a scene
    app->setScene(root);
}


code:
// List with context menu project template
#ifndef QtInfo_HPP_
#define QtInfo_HPP_

#include <QObject>

namespace bb { namespace cascades { class Application; }}

/*!
 * @brief Application pane object
 *
 *Use this object to create and init app UI, to create context objects, to register the new meta types etc.
 */
class QtInfo : public QObject
{
    Q_OBJECT
public:
    QtInfo(bb::cascades::Application *app);
    virtual ~QtInfo() {}
};

#endif /* QtInfo_HPP_ */


code:
######################################################################
# Automatically generated by qmake (2.01a) to 24. maalis 09:24:08 2011
######################################################################

TEMPLATE = lib
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

QT += core gui declarative

CONFIG += qt cascades

LIBS   += -lbbdata

# Input
HEADERS += cascadesui.h
SOURCES += cascadesui.cpp

unix:!symbian: {
    !maemo5: {
	    # Add more folders to ship with the application, here
        folder_01.files = qml_meegoharmattan/*
        folder_01.path = /opt/qtinfo/qml
    }
    target.path = /opt/qtinfo/bin
    INSTALLS += target folder_01
}

OTHER_FILES += \
    main.qml \
    qml_cascades/main.qml \
    assets/qtinfo.svg \
    assets/qtinfo.png \
    assets/loading.qml \
    assets/main.qml \
    assets/JSONListModel.qml \
    assets/jsonpath.js

RESOURCES +=

for(deploymentfolder, DEPLOYMENTFOLDERS) {
    item = item$${deploymentfolder}
    itemsources = $${item}.sources
    $$itemsources = $$eval($${deploymentfolder}.source)
    itempath = $${item}.path
    $$itempath= $$eval($${deploymentfolder}.target)
    export($$itemsources)
    export($$itempath)
    DEPLOYMENT += $$item
}


code:
// List with context menu project template
#include "mylistmodel.hpp"

#include <bb/data/JsonDataAccess>

using namespace bb::cascades;

MyListModel::MyListModel(QObject* parent)
: bb::cascades::QVariantListDataModel()
{
    qDebug() << "Creating MyListModel object:" << this;
    setParent(parent);
}

MyListModel::~MyListModel()
{
    qDebug() << "Destroying MyListModel object:" << this;
}

void MyListModel::load(const QString& file_name)
{
    bb::data::JsonDataAccess jda;
    QVariantList lst = jda.load(file_name).value<QVariantList>();
    if (jda.hasError()) {
        bb::data::DataAccessError error = jda.error();
        qDebug() << file_name << "JSON loading error: " << error.errorType() << ": " << error.errorMessage();
    }
    else {
        qDebug() << file_name << "JSON data loaded OK!";
        append(lst);
    }
}

QVariant MyListModel::value(int ix, const QString &fld_name)
{
    QVariant ret;
    // model data are organized in a list of dictionaries
    if(ix >= 0 && ix < size()) {
        // get dictionary on index
        QVariantMap curr_val = QVariantListDataModel::value(ix).toMap();
        ret = curr_val.value(fld_name);
    }
    return ret;
}

void MyListModel::setValue(int ix, const QString& fld_name, const QVariant& val)
{
    // model data are organized in a list of dictionaries
    if(ix >= 0 && ix < size()) {
        // get dictionary on index
        QVariantMap curr_val = QVariantListDataModel::value(ix).value<QVariantMap>();
        // set dictionary value for key fld_name
        curr_val[fld_name] = val;
        // replace updated dictionary in array
        replace(ix, curr_val);
    }
}


code:
// List with context menu project template
/*
 * ListModel.h
 *
 *  Created on: 17 Apr 2012
 *      Author: fvacek@rim.com
 */

#ifndef MyListModel_HPP_
#define MyListModel_HPP_

#include <QObject>
#include <QString>
#include <QVariant>
#include <QMetaType>
#include <bb/cascades/QListDataModel>

/*!
 * @brief Mutable list model implementation
 */
class MyListModel : public bb::cascades::QVariantListDataModel
{
    Q_OBJECT
public:
    /*!
     * @brief Convenience method for loading data from JSON file.
     *
     * @param file_name  file to load
     */
    Q_INVOKABLE void load(const QString& file_name);
    /*!
     * @brief Convenience method to read the model data.
     *
     * @param ix  index of the list item
     * @param fld_name  name of data field
     */
    Q_INVOKABLE QVariant value(int ix, const QString &fld_name);
    /*!
     * @brief Convenience method to set the model data.
     *
     * @param ix  index of the list item
     * @param fld_name  name of data field
     * @param val  new value
     */
    Q_INVOKABLE void setValue(int ix, const QString &fld_name, const QVariant &val);
public:
    MyListModel(QObject* parent = 0);
    virtual ~MyListModel();
};

#endif /* MyListModel_HPP_ */


text: Highland

text: Highland

text: Highland

text: Highland

text: Highland

text: Highland

text: Highland

text: Highland

text: Highland

text: Highland


code:
#include "declarativeui.h"
#include <QtDeclarative>
#include <QStringList>
#include <QVariant>
#include <QDebug>

QStringList keys;
QStringList values;
/* QList<QObject*> dataList;

class QataObject : public QObject {
    Q_OBJECT

    Q_PROPERTY(QString key READ key WRITE setKey)
    Q_PROPERTY(QString value READ value WRITE setValue)
    Q_PROPERTY(QString section READ section WRITE setSection)
public:
    QataObject () {}
    QataObject (QString k, QString v, QString s) : m_key(k), m_value(v), m_section(s) {}
    ~QataObject () {}
    QString key() { return m_key; }
    QString value() { return m_value; }
    QString section() { return m_section; }
public slots:
    void setKey(QString k) { m_key = k; }
    void setValue(QString k) { m_value = k; }
    void setSection(QString k) { m_section = k; }
private:
    QString m_key, m_value, m_section;
};
*/
QWidget* declarativeUI(QList<QPair<QString, QString> > infoPairs, QObject* mainWindow)
{
    QDeclarativeView* view = new QDeclarativeView();
    QString section;
    view->setResizeMode(QDeclarativeView::SizeRootObjectToView);

    keys.clear();
    values.clear();

    for (int i = 0; i < infoPairs.length(); i++)
    {
        QPair<QString, QString> infoPair = infoPairs.at(i);

        if (infoPair.first == "Section") {
            section = infoPair.second;
        } else {
//            dataList.append(new QataObject(infoPair.first, infoPair.second, section));
        }
        keys.append(infoPair.first);
        values.append(infoPair.second);
    }

    view->rootContext()->setContextProperty("MainWindow", mainWindow);
    view->rootContext()->setContextProperty("keyModel", QVariant::fromValue(keys));
    view->rootContext()->setContextProperty("valueModel", QVariant::fromValue(values));
//    view->rootContext()->setContextProperty("sectionModel", QVariant::fromValue(dataList));

#ifdef Q_OS_SYMBIAN
    view->setSource(QUrl::fromLocalFile("qml_symbian/main.qml"));
#else
    view->setSource(QUrl::fromLocalFile(qApp->applicationDirPath() + "/../qml/main.qml"));
#endif

    return view;
}

bool checkQml(QLatin1String qml)
{

    QDeclarativeEngine engine;
    QDeclarativeComponent component(&engine);
    component.setData(qml.latin1(), QUrl());
    QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(component.create());

    if (item) {
        // Components plugin seems to be available
        return true;
    }
    else {
        // Something is wrong, at least output errors
        qDebug() << component.errors();
    }
    return false;
}

bool isQmlUiAvailable()
{
    if (checkQml(QLatin1String("import QtQuick 1.0\nimport com.nokia.symbian 1.0\nimport com.nokia.extras 1.0\nWindow {}")))
            return true;
    if (checkQml(QLatin1String("import QtQuick 1.0\nimport com.nokia.meego 1.0\nWindow {}")))
            return true;
    if (checkQml(QLatin1String("import QtQuick 1.0\nimport com.nokia.meego 1.1\nWindow {}")))
            return true;
    if (checkQml(QLatin1String("import QtQuick 1.1\nimport Sailfish.Silica 1.0\nApplicationWindow {}")))
            return true;
    return false;
}


code:
#ifndef DECLARATIVEUI_H
#define DECLARATIVEUI_H

#include <QList>
#include <QPair>
#include <QString>
#include <QWidget>

extern "C" {
QWidget* declarativeUI(QList<QPair<QString, QString> >, QObject* mainWindow );
bool isQmlUiAvailable();
bool checkQml(QLatin1String qml);
}
#endif


code:
######################################################################
# Automatically generated by qmake (2.01a) to 24. maalis 09:24:08 2011
######################################################################

TEMPLATE = lib
#TARGET =
DEPENDPATH += .
INCLUDEPATH += .

QT += core gui declarative

# Input
HEADERS += declarativeui.h
SOURCES += declarativeui.cpp

symbian {
    DESTDIR=test1

    #Build STDDLL
    CONFIG += stdbinary

    TARGET = declarativeui

    #Symbian specific definitions
    MMP_RULES += EXPORTUNFROZEN

    TARGET.EPOCALLOWDLLDATA = 1

    addFiles.sources = $${TARGET}.dll
    addFiles.path = !:/sys/bin

    # Add more folders to ship with the application, here
    folder_01.source = qml_symbian
    folder_01.target = .
    DEPLOYMENTFOLDERS = folder_01

    DEPLOYMENT += addFiles
}

exists($$QMAKE_INCDIR_QT"/../qmsystem2/qmkeys.h"):!contains(MEEGO_EDITION,harmattan): {
  MEEGO_VERSION_MAJOR     = 1
  MEEGO_VERSION_MINOR     = 2
  MEEGO_VERSION_PATCH     = 0
  MEEGO_EDITION           = harmattan
  DEFINES += MEEGO_EDITION_HARMATTAN
}

load(sailfishsilicabackground)

unix:!symbian: {
    contains(MEEGO_EDITION,harmattan): {
	    # Add more folders to ship with the application, here
        folder_01.files = qml_meegoharmattan/*
    }
    contains(LIBS,-lsailfishsilicabackground): {
        folder_01.files = qml_sailfish/*
    }

    folder_01.path = /opt/qtinfo/qml
    target.path = /opt/qtinfo/bin
    INSTALLS += target folder_01
}

OTHER_FILES += \
    main.qml \
    qml_symbian/main.qml \
    qml_symbian/MainPage.qml \
    qml_symbian/InfoView.qml \
    qml_meegoharmattan/main.qml \
    qml_meegoharmattan/MainPage.qml \
    qml_meegoharmattan/InfoView.qml \
    qml_sailfish/main.qml \
    qml_sailfish/MainPage.qml \
    qml_sailfish/InfoView.qml \
    qml_desktop/main.qml \
    qml_meegoux/main.qml

RESOURCES += \
    qtquickqmls.qrc

for(deploymentfolder, DEPLOYMENTFOLDERS) {
    item = item$${deploymentfolder}
    itemsources = $${item}.sources
    $$itemsources = $$eval($${deploymentfolder}.source)
    itempath = $${item}.path
    $$itempath= $$eval($${deploymentfolder}.target)
    export($$itemsources)
    export($$itempath)
    DEPLOYMENT += $$item
}

include(../qtinfo_symbianplatsec.pri)


code:
import Qt 4.7

Rectangle {
    Component.onCompleted: console.log("BOING")
    width: 800
    height: 480

    property int itemHeight: 50

    color: "#ffffff"

    Component {
        id: itemDelegate

        Grid {
            columns: 2
            rows: 1
            height: Math.max(itemHeight, Math.max(key.height, value.height))
            width: infoList.width

            property bool section: modelData == "section"

            Rectangle {
                id: key
                height: Math.max(itemHeight, Math.max(keyText.paintedHeight, valueText.paintedHeight))
                width: section ? 0 : 100
                color: "#44a51c"

                Text {
                    id: keyText
                    anchors {
                        verticalCenter: parent.verticalCenter
                        left: parent.left
                        right: parent.right
                        leftMargin: 5
                        rightMargin: 5
                    }
                    text: section ? "": modelData
                    clip: true
                    wrapMode: Text.Wrap
                    font.pixelSize: 16
                    font.family: "Helvetica"
                }
            }

            Rectangle {
                id: value
                height: Math.max(itemHeight, valueText.paintedHeight)
                width: parent.width - key.width
                color: "#ffffff"

                Text{
                    id: valueText
                    anchors {
                        verticalCenter: parent.verticalCenter
                        left: parent.left
                        right: parent.right
                        leftMargin: 5
                        rightMargin: 5
                    }
                    text: valueModel[index]
                    clip: true
                    wrapMode: Text.Wrap
                    font.pixelSize: 16
                    font.family: "Helvetica"
                    font.bold: section ? true : false
                }
            }

        }
    }

    ListView {
        id: infoList

        focus: true
        anchors.fill: parent
        delegate: itemDelegate
        model: keyModel
    }
}


code:
import Qt 4.7

Rectangle {
}


code:
import QtQuick 1.1
import com.nokia.meego 1.1

Rectangle {
    id: container
    anchors.fill: parent

    Component.onCompleted: {
//        console.log(keyModel.length);
        console.log(keyModel);
        var lastSection = "General";
        for (var i=0; i<keyModel.length; i++) {
            if (keyModel[i] == "section") {
                console.log("Z: " + keyModel[i] + " - " + valueModel[i]);
                lastSection = valueModel[i];
            } else {
                dataModel.append({ "key": keyModel[i], "value": valueModel[i], "section": lastSection })
            }
//            console.log("Z: " + keyModel[i]);
        }
        console.log(dataModel);
        console.log(dataModel.count);
        console.log(dataModel.get(20).key);
        console.log(dataModel.get(20).value);
        console.log(dataModel.get(20).section);
    }

    ListModel {  id: dataModel   }

    Component {
            id: sectionHeading

            Rectangle {
                width: container.width
                height: childrenRect.height * 2
                color: "dodgerblue"

                Text {
                    anchors.margins: 5
                    text: section
                    font.family: "Nokia Pure Text"
                    font.weight: Font.Bold
                    font.pixelSize: 48
                    color: "white"
                }
            }
        }

    ListView {
        id: infoList
        anchors.fill: parent
        model: dataModel
        clip: true

        section.property: "section"
        section.criteria: ViewSection.FullString
        section.delegate: sectionHeading

        delegate: Item {
            height: childrenRect.height
            Rectangle {
                id: titleRect
                width: infoList.width
                height: childrenRect.height * 1.4
                color: "darkorange"
                Label {
                  id: titleText
                  y: 10
                  x: 5
    //            anchors {
    //                top: titleText.bottom
    //                bottom: listItem.paddingItem.bottom
    //                left: listItem.paddingItem.left
    //                right: listItem.paddingItem.right
    //            }

    //            opacity: section ? 0 : 1
    //            color: "gray"
    //            text: valueModel[index]
                  text: key
                  anchors.margins: 5
                  platformStyle: LabelStyle { fontPixelSize: 32; textColor: "white" }
    //            text: "ASDF"
    //              wrapMode: Text.WrapAnywhere
                }
            }
            Text {
                id: subtitleText
                width: infoList.width - 2*x
                anchors {
                    top: titleRect.bottom; margins: 10
                }
                x: 10
                color: "dimgray"
                font.family: "Nokia Pure Text"
//                font.weight: Font.Bold
                font.pixelSize: 22

                text: value + "<BR>"
                wrapMode: Text.Wrap
            }

        }

            /*
          ListItem {
            id: listItem
            property bool section: modelData == "section"

            height: section ? titleText.height + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin
                            : titleText.height + subtitleText.paintedHeight + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin

            Rectangle {
                anchors.fill: parent
                color: "gray"
                opacity: section ? 1 : 0
            }

            ListItemText {
                id: titleText
                anchors {
                    left: listItem.paddingItem.left
                    right: listItem.paddingItem.right
                    top: listItem.paddingItem.top
                }

                mode: listItem.mode
                role: section ? "Heading" : "Title"
                text: section ? valueModel[index] : modelData
            }
            Text {
                id: subtitleText
                anchors {
                    top: titleText.bottom
                    bottom: listItem.paddingItem.bottom
                    left: listItem.paddingItem.left
                    right: listItem.paddingItem.right
                }

                opacity: section ? 0 : 1
                color: "gray"
                text: section ? "" : valueModel[index]
                wrapMode: Text.WrapAnywhere
            }
        }
*/
        ScrollDecorator {
            id: scrolldecorator
            flickableItem: infoList
        }
    }
}

/*
ListView {
    id: infoList
    model: sectionModel
//    model: keyModel
    clip: true
    cacheBuffer: 2000
    delegate: valueDelegate
    section.delegate: sectionDelegate
    section.property: "section"
//    section.property: modelData
Component {
    id: sectionDelegate
    Rectangle {
        id: sectionRect
        color: "#2e84e5"
        width: listItem.width
        height: sectionText.height * 2

        Label {
            anchors.top: parent
            anchors.topMargin: sectionText.height
            id: sectionText
            text: section
//            text: valueModel[index]
//                            font.family: "Nokia Pure Text"
//                            font.weight: Font.Bold
            font.pixelSize: 48
            color: "#ffffff"
        }
    }
}

Component {
    id: valueDelegate
//        anchors.fill: parent
//        anchors.margins: 4
    Flow {
//            Row {
//                id: row
        spacing: 2
//                height: sectionrect.height + mainText.height + subText.height

//                Column {
//                    anchors.verticalCenter: parent.verticalCenter

        Label {
//            width: listItem.width
            id: mainText
            text: key
//            text: modelData
            font.weight: Font.Bold
            font.pixelSize: 26
        }

        Label {
            anchors.top: mainText.bottom
//            width: listItem.width
            id: subText
            text: value
//            text: valueModel[index]
            font.weight: Font.Light
            font.pixelSize: 22
            color: "#cc6633"
            wrapMode: "WordWrap"

        }
//                }
    }
}
//        Item {
//            id: listItem
//            property bool section: modelData == "section"
////            height: 88
//            width: parent.width

//            BorderImage {
//                id: background
//                anchors.fill: parent
//                // Fill page borders
////                anchors.leftMargin: -listPage.anchors.leftMargin
////                anchors.rightMargin: -listPage.anchors.rightMargin
//                visible: mouseArea.pressed
//                source: "image://theme/meegotouch-list-background-pressed-center"
//            }

////             Image {
////                 source: "image://theme/icon-m-common-drilldown-arrow" + (theme.inverted ? "-inverse" : "")
////                 anchors.right: parent.right;
////                 anchors.verticalCenter: parent.verticalCenter
////             }

//            MouseArea {
//                id: mouseArea
//                anchors.fill: background
//                onClicked: {
////                    listPage.openFile(page)
//                }
//            }
//        }
//        ListItem {
//        id: listItem
//        property bool section: modelData == "section"

//        height: section ? titleText.height + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin
//                        : titleText.height + subtitleText.paintedHeight + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin

//        Rectangle {
//            anchors.fill: parent
//            color: "gray"
//            opacity: section ? 1 : 0
//        }

//        ListItemText {
//            id: titleText
//            anchors {
//                left: listItem.paddingItem.left
//                right: listItem.paddingItem.right
//                top: listItem.paddingItem.top
//            }

//            mode: listItem.mode
//            role: section ? "Heading" : "Title"
//            text: section ? valueModel[index] : modelData
//        }
//        Text {
//            id: subtitleText
//            anchors {
//                top: titleText.bottom
//                bottom: listItem.paddingItem.bottom
//                left: listItem.paddingItem.left
//                right: listItem.paddingItem.right
//            }

//            opacity: section ? 0 : 1
//            color: "gray"
//            text: section ? "" : valueModel[index]
//            wrapMode: Text.WrapAnywhere
//        }
//    }

    ScrollDecorator {
        id: scrolldecorator
        flickableItem: infoList
    }
    SectionScroller {
        listView: infoList
    }
}

*/


code:
import QtQuick 1.0
import com.nokia.meego 1.0
import com.nokia.extras 1.0

Page {
    id: mainPage
    anchors {
        fill: parent
    }

    InfoView {
        anchors.fill: parent
    }

    tools: ToolBarLayout {
            id: toolBarLayout
//            ToolButton {
//                flat: true
//                iconSource: "toolbar-back"
//                onClicked: Qt.quit()
//            }
            ToolButton {
                text: "Share"
                onClicked: shareDialog.open()
            }
            ToolButton {
                text: "Copy"
                onClicked: copyDialog.open()
            }
//            ToolButton {
//                flat: true
//                iconSource: "toolbar-menu"
//                onClicked: menu.open()
//            }
    }

    SelectionDialog {
         id: shareDialog
         titleText: "Share"
         model: ["to Pastebin", "to e-mail"]
         onAccepted: {
             if (selectedIndex == 0) {
                 MainWindow.on_jsbinButton_clicked(true)
                 banner.text = "Opening pastebin"
                 banner.open()
             } else if (selectedIndex == 1) {
                 MainWindow.on_emailButton_clicked(true)
                 banner.text = "Opening e-mail"
                 banner.open()
             }
         }
    }

    SelectionDialog {
         id: copyDialog
         titleText: "Copy"
         model: ["to Clipboard", "to File"]
         onAccepted: {
             if (selectedIndex == 0) {
                 MainWindow.on_clipboardButton_clicked(true)
                 banner.text = "Copied to clipboard"
                 banner.open()
             } else if (selectedIndex == 1) {
                 MainWindow.on_saveButton_clicked(true)
                 banner.text = "Saved to file"
                 banner.open()
             }
         }
    }

//    InfoBanner {
//        id: banner
//    }

    Menu {
         id: menu

         content: MenuLayout {
             MenuItem {
                 text: "Exit"
                 onClicked: Qt.quit()
             }
         }
    }
}


code:
import QtQuick 1.0
import com.nokia.meego 1.0

PageStackWindow {
    id: window
    showStatusBar: true
    showToolBar: true

//    StatusBar {
//        id: statusBar
//        anchors.top: window.top
//    }

//    PageStack {
//        id: pageStack
//        anchors { left: parent.left; right: parent.right; top: statusBar.bottom; bottom: toolBar.top }

//        toolBar: toolBar
//    }

//    ToolBar {
//        id: toolBar
//        anchors.bottom: window.bottom
//        tools: ToolBarLayout {
//            id: toolBarLayout
//            ToolButton {
//                flat: true
//                iconSource: "toolbar-back"
//                onClicked: pageStack.depth <= 1 ? Qt.quit() : pageStack.pop()
//            }
//        }
//    }

    Component.onCompleted: {
        pageStack.push(Qt.resolvedUrl("MainPage.qml"))
    }
}


code:
import Qt 4.7
import MeeGo.Components 0.1

Window {
    id: window

    toolBarTitle: "QtInfo"

}


code:
import QtQuick 1.1
import Sailfish.Silica 1.0

BackgroundItem {
    id: container
    anchors.fill: parent

    Component.onCompleted: {
//        console.log(keyModel.length);
        console.log(keyModel);
        var lastSection = "General";
        for (var i=0; i<keyModel.length; i++) {
            if (keyModel[i] == "section") {
                console.log("Z: " + keyModel[i] + " - " + valueModel[i]);
                lastSection = valueModel[i];
            } else {
                dataModel.append({ "key": keyModel[i], "value": valueModel[i], "section": lastSection })
            }
//            console.log("Z: " + keyModel[i]);
        }
        console.log(dataModel);
        console.log(dataModel.count);
        console.log(dataModel.get(20).key);
        console.log(dataModel.get(20).value);
        console.log(dataModel.get(20).section);
    }

    ListModel {  id: dataModel   }

    Component {
            id: sectionHeading

            BackgroundItem {
                width: container.width
//                height: childrenRect.height * 2
//                color: "dodgerblue"

                Label {
                    anchors.margins: 5
                    text: section
                    color: theme.highlightColor
                    font.family: theme.fontFamilyHeading
                    font.pixelSize: theme.fontSizeLarge
//                    font.family: "Nokia Pure Text"
                    font.weight: Font.Bold
//                    font.pixelSize: 48
//                    color: "white"
                }
            }
        }

    SilicaListView {
        id: infoList
        anchors.fill: parent
        model: dataModel
        clip: true

        section.property: "section"
        section.criteria: ViewSection.FullString
        section.delegate: sectionHeading

        delegate: Item {
            height: childrenRect.height
            BackgroundItem {
//            Item {
                id: titleRect
                width: infoList.width
//                height: childrenRect.height * 1.4
//                color: "darkorange"
                Label {
                  id: titleText
                  y: 10
                  x: 5
    //            anchors {
    //                top: titleText.bottom
    //                bottom: listItem.paddingItem.bottom
    //                left: listItem.paddingItem.left
    //                right: listItem.paddingItem.right
    //            }

    //            opacity: section ? 0 : 1
    //            color: "gray"
    //            text: valueModel[index]
                  text: key
                  anchors.margins: 5
                  color: theme.highlightColor
                  font.family: theme.fontFamilyHeading
                  font.pixelSize: theme.fontSizeMedium
////////                  platformStyle: LabelStyle { fontPixelSize: 32; textColor: "white" }
    //            text: "ASDF"
    //              wrapMode: Text.WrapAnywhere
                }
            }
            Label {
                id: subtitleText
                width: infoList.width - 2*x
                anchors {
                    top: titleRect.bottom; margins: 10
                }
                x: 10
//                color: "dimgray"
//                font.family: "Nokia Pure Text"
//                font.weight: Font.Bold
//                font.pixelSize: 22

                color: theme.secondaryColor
                font.family: theme.fontFamily
                font.pixelSize: theme.fontSizeMedium

                text: value + "<BR>"
                wrapMode: Text.Wrap
            }

        }

            /*
          ListItem {
            id: listItem
            property bool section: modelData == "section"

            height: section ? titleText.height + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin
                            : titleText.height + subtitleText.paintedHeight + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin

            Rectangle {
                anchors.fill: parent
                color: "gray"
                opacity: section ? 1 : 0
            }

            ListItemText {
                id: titleText
                anchors {
                    left: listItem.paddingItem.left
                    right: listItem.paddingItem.right
                    top: listItem.paddingItem.top
                }

                mode: listItem.mode
                role: section ? "Heading" : "Title"
                text: section ? valueModel[index] : modelData
            }
            Text {
                id: subtitleText
                anchors {
                    top: titleText.bottom
                    bottom: listItem.paddingItem.bottom
                    left: listItem.paddingItem.left
                    right: listItem.paddingItem.right
                }

                opacity: section ? 0 : 1
                color: "gray"
                text: section ? "" : valueModel[index]
                wrapMode: Text.WrapAnywhere
            }
        }
*/
        VerticalScrollDecorator {
            id: scrolldecorator
            flickable: infoList
        }
    }
}


code:
import QtQuick 1.1
import Sailfish.Silica 1.0

Page {
    id: mainPage
    anchors {
        fill: parent
    }
    PageHeader {
        title: "QtInfo"
    }

    InfoView {
        anchors.fill: parent
    }

}


code:
import QtQuick 1.1
import Sailfish.Silica 1.0

ApplicationWindow {
    id: window
//    initialPage: MainPage {}

//    showStatusBar: true
//    showToolBar: true

//    StatusBar {
//        id: statusBar
//        anchors.top: window.top
//    }

//    PageStack {
//        id: pageStack
//        anchors { left: parent.left; right: parent.right; top: statusBar.bottom; bottom: toolBar.top }

//        toolBar: toolBar
//    }

//    ToolBar {
//        id: toolBar
//        anchors.bottom: window.bottom
//        tools: ToolBarLayout {
//            id: toolBarLayout
//            ToolButton {
//                flat: true
//                iconSource: "toolbar-back"
//                onClicked: pageStack.depth <= 1 ? Qt.quit() : pageStack.pop()
//            }
//        }
//    }

    Component.onCompleted: {
        pageStack.push(Qt.resolvedUrl("MainPage.qml"))
    }

}


code:
import QtQuick 1.0
import com.nokia.symbian 1.0

ListView {
    id: infoList
    model: keyModel
    clip: true
    delegate: ListItem {
        id: listItem
        property bool section: modelData == "section"

        height: section ? titleText.height + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin
                        : titleText.height + subtitleText.paintedHeight + listItem.paddingItem.anchors.topMargin + listItem.paddingItem.anchors.bottomMargin

        Rectangle {
            anchors.fill: parent
            color: "gray"
            opacity: section ? 1 : 0
        }

        ListItemText {
            id: titleText
            anchors {
                left: listItem.paddingItem.left
                right: listItem.paddingItem.right
                top: listItem.paddingItem.top
            }

            mode: listItem.mode
            role: section ? "Heading" : "Title"
            text: section ? valueModel[index] : modelData
        }
        Text {
            id: subtitleText
            anchors {
                top: titleText.bottom
                bottom: listItem.paddingItem.bottom
                left: listItem.paddingItem.left
                right: listItem.paddingItem.right
            }

            opacity: section ? 0 : 1
            color: "gray"
            text: section ? "" : valueModel[index]
            wrapMode: Text.WrapAnywhere
        }
    }

    ScrollDecorator {
        id: scrolldecorator
        flickableItem: infoList
    }
}


code:
import QtQuick 1.0
import com.nokia.symbian 1.0
import com.nokia.extras 1.0

Page {
    id: mainPage
    anchors {
        fill: parent
    }

    InfoView {
        anchors.fill: parent
    }

    tools: ToolBarLayout {
            id: toolBarLayout
            ToolButton {
                flat: true
                iconSource: "toolbar-back"
                onClicked: Qt.quit()
            }
            ToolButton {
                text: "Share"
                onClicked: shareDialog.open()
            }
            ToolButton {
                text: "Copy"
                onClicked: copyDialog.open()
            }
            ToolButton {
                flat: true
                iconSource: "toolbar-menu"
                onClicked: menu.open()
            }
    }

    SelectionDialog {
         id: shareDialog
         titleText: "Share"
         model: ["to Pastebin", "to e-mail"]
         onAccepted: {
             if (selectedIndex == 0) {
                 MainWindow.on_jsbinButton_clicked(true)
                 banner.text = "Opening pastebin"
                 banner.open()
             } else if (selectedIndex == 1) {
                 MainWindow.on_emailButton_clicked(true)
                 banner.text = "Opening e-mail"
                 banner.open()
             }
         }
    }

    SelectionDialog {
         id: copyDialog
         titleText: "Copy"
         model: ["to Clipboard", "to File"]
         onAccepted: {
             if (selectedIndex == 0) {
                 MainWindow.on_clipboardButton_clicked(true)
                 banner.text = "Copied to clipboard"
                 banner.open()
             } else if (selectedIndex == 1) {
                 MainWindow.on_saveButton_clicked(true)
                 banner.text = "Saved to file"
                 banner.open()
             }
         }
    }

    InfoBanner {
        id: banner
    }

    Menu {
         id: menu

         content: MenuLayout {
             MenuItem {
                 text: "Exit"
                 onClicked: Qt.quit()
             }
         }
    }
}


code:
import QtQuick 1.0
import com.nokia.symbian 1.0

Window {
    id: window

    StatusBar {
        id: statusBar
        anchors.top: window.top
    }

    PageStack {
        id: pageStack
        anchors { left: parent.left; right: parent.right; top: statusBar.bottom; bottom: toolBar.top }

        toolBar: toolBar
    }

    ToolBar {
        id: toolBar
        anchors.bottom: window.bottom
        tools: ToolBarLayout {
            id: toolBarLayout
            ToolButton {
                flat: true
                iconSource: "toolbar-back"
                onClicked: pageStack.depth <= 1 ? Qt.quit() : pageStack.pop()
            }
        }
    }

    Component.onCompleted: {
        pageStack.push(Qt.resolvedUrl("MainPage.qml"))
    }
}


code:
<RCC>
    <qresource prefix="/qml">
        <file>main.qml</file>
        <file>qml_symbian/main.qml</file>
        <file>qml_symbian/MainPage.qml</file>
        <file>qml_symbian/InfoView.qml</file>
        <file>qml_meegoharmattan/InfoView.qml</file>
        <file>qml_meegoharmattan/main.qml</file>
        <file>qml_meegoharmattan/MainPage.qml</file>
    </qresource>
</RCC>


code:
#include "glinfo.h"
#include <QStringList>

#ifdef QT_OPENGL_LIB
#include <QGLFormat>
#endif

#include <QApplication>

QList<QPair<QString, QString> > GLInfo()
{
    QList<QPair<QString, QString> > info;
    info.append(QPair<QString,QString>("section", "OpenGL"));
    QString value = "";
#ifdef QT_OPENGL_LIB
#ifdef Q_OS_BLACKBERRY
    info.append(QPair<QString,QString>("OpenGL support", "N/A (Cascades is incompatible with QtOpenGL)"));
    // ... and this shouldn't be hardcoded, except the BB10 Qt SIGSEGVs if we call hasOpenGL
#else
    if (QGLFormat::hasOpenGL()) {
        int flags = QGLFormat::openGLVersionFlags ();
        if (flags & QGLFormat::OpenGL_Version_4_0) value += "OpenGL 4.0";
        else if (flags & QGLFormat::OpenGL_Version_3_3) value += "OpenGL 3.3";
        else if (flags & QGLFormat::OpenGL_Version_3_2) value += "OpenGL 3.2";
        else if (flags & QGLFormat::OpenGL_Version_3_1) value += "OpenGL 3.1";
        else if (flags & QGLFormat::OpenGL_Version_3_0) value += "OpenGL 3.0";
        else if (flags & QGLFormat::OpenGL_Version_2_1) value += "OpenGL 2.1";
        else if (flags & QGLFormat::OpenGL_Version_2_0) value += "OpenGL 2.0";
        else if (flags & QGLFormat::OpenGL_Version_1_5) value += "OpenGL 1.5";
        else if (flags & QGLFormat::OpenGL_Version_1_4) value += "OpenGL 1.4";
        else if (flags & QGLFormat::OpenGL_Version_1_3) value += "OpenGL 1.3";
        else if (flags & QGLFormat::OpenGL_Version_1_2) value += "OpenGL 1.2";
        else if (flags & QGLFormat::OpenGL_Version_1_1) value += "OpenGL 1.1";
        if (flags & QGLFormat::OpenGL_ES_CommonLite_Version_1_0) value += " OpenGL ES 1.0 Common Lite";
        else if (flags & QGLFormat::OpenGL_ES_Common_Version_1_0) value += " OpenGL ES 1.0 Common";
        else if (flags & QGLFormat::OpenGL_ES_CommonLite_Version_1_1) value += " OpenGL ES 1.1 Common Lite";
        else if (flags & QGLFormat::OpenGL_ES_Common_Version_1_1) value += " OpenGL ES 1.1 Common";
        else if (flags & QGLFormat::OpenGL_ES_Version_2_0) value += " OpenGL ES 2.0";
    } else {
        value = "No";
    }
    info.append(QPair<QString,QString>("OpenGL support", "YES"));
    info.append(QPair<QString,QString>("OpenGL version", value));
#endif
#endif

    return info;
}

#ifdef _MSC_VER
QString GLInfoQString()
{
    QStringList qsl;
    typedef QPair<QString, QString> StringPair;
    QList<StringPair> info = GLInfo();
    foreach (StringPair pair, info)
    {
       qsl << pair.first + "##PAIRSEPARATOR##" + pair.second;
    }
    return qsl.join("##LINESEPARATOR##");
}
#endif


code:
#ifndef GLINFO_H
#define GLINFO_H

#include <QList>
#include <QPair>
#include <QString>

#ifdef Q_OS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif

extern "C" MY_EXPORT QString GLInfoQString();
#ifndef _MSC_VER
extern "C" {
QList<QPair<QString, QString> > GLInfo();
}
#endif

#endif GLINFO_H


code:
######################################################################
# Automatically generated by qmake (2.01a) to 24. maalis 09:24:08 2011
######################################################################

TEMPLATE = lib
#TARGET =
DEPENDPATH += .
INCLUDEPATH += .

QT += core gui opengl

# Input
HEADERS += glinfo.h
SOURCES += glinfo.cpp

symbian {
    #Build STDDLL
    CONFIG += stdbinary

    TARGET = glinfolib

    #Symbian specific definitions
    MMP_RULES += EXPORTUNFROZEN

    TARGET.EPOCALLOWDLLDATA = 1

    addFiles.sources = $${TARGET}.dll
    addFiles.path = !:/sys/bin
    DEPLOYMENT += addFiles
}

unix:!symbian { # not funny
    target.path = /opt/qtinfo/bin
    INSTALLS += target
}

include(../qtinfo_symbianplatsec.pri)


code:
; Language
&EN

; SIS header: name, package uid, version
; using qtinfo's UID
#{"QtInfo - R&D release"},(0xA00002D6),3,0,0

%{"The crazy bunch."}
:"Forum Nokia"

; Manual PKG pre-rules from PRO files
; Default dependency to Qt libraries
; Commented out when laucher is used
;(0x2001E61C), 4, 6, 3, {"Qt"}

; Default HW/platform dependencies
[0x20022E6D],0,0,0,{"S60ProductID"}
[0x1028315F],0,0,0,{"S60ProductID"}
[0x102752AE],0,0,0,{"S60ProductID"}
[0x102032BE],0,0,0,{"S60ProductID"}

;Native launcher
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/Epoc32/release/gcce/urel/QtInfo_launcher.exe" - "!:\sys\bin\QtInfo_launcher.exe"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/data/z/resource/apps/QtInfo_launcher.rsc"    - "!:\resource\apps\QtInfo_launcher.rsc"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/data/z/private/10003a3f/import/apps/QtInfo_launcher_reg.rsc"    - "!:\private\10003a3f\import\apps\QtInfo_launcher_reg.rsc"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/data/z/resource/apps/QtInfo_launcher.mif"    - "!:\resource\apps\QtInfo_launcher.mif"

; Base Qt 4.6.3 build - gui
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/release/gcce/urel/qtinfo.exe" - "!:\sys\bin\qtinfo.exe"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/data/z/resource/apps/qtinfo.rsc" - "!:\resource\apps\qtinfo.rsc"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/data/z/private/10003a3f/import/apps/qtinfo_reg.rsc" - "!:\private\10003a3f\import\apps\qtinfo_reg.rsc"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/data/z/resource/apps/qtinfo.mif"    - "!:\resource\apps\qtinfo.mif"

; Qt Quick UI, S^3 Qt 4.7 build
"c:/QtSDK/Symbian/SDKs/Symbian3Qt473/epoc32/release/armv5/urel/declarativeui.dll" - "!:\sys\bin\declarativeui.dll"
"c:/QtSDK/Symbian/SDKs/Symbian3Qt473/epoc32/data/z/private/a00002d6/qml_symbian/InfoView.qml" - "!:\private\a00002d6\qml_symbian\InfoView.qml"
"c:/QtSDK/Symbian/SDKs/Symbian3Qt473/epoc32/data/z/private/a00002d6/qml_symbian/main.qml" - "!:\private\a00002d6\qml_symbian\main.qml"
"c:/QtSDK/Symbian/SDKs/Symbian3Qt473/epoc32/data/z/private/a00002d6/qml_symbian/MainPage.qml" - "!:\private\a00002d6\qml_symbian\MainPage.qml"

; Base Qt 4.6.3 build - libs
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/release/gcce/urel/sqlinfolib.dll" - "!:\sys\bin\sqlinfolib.dll"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/release/gcce/urel/webkitinfolib.dll" - "!:\sys\bin\webkitinfolib.dll"

; Qt 4.7 build - libs
"c:/QtSDK/Symbian/SDKs/Symbian1Qt473/epoc32/release/gcce/urel/qtquickinfolib.dll" - "!:\sys\bin\qtquickinfolib.dll"
"c:/QtSDK/Symbian/SDKs/Symbian3Qt473/epoc32/release/armv5/urel/glinfolib.dll" - "!:\sys\bin\glinfolib.dll"

; Qt Mobility 1.0 - libs
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/release/gcce/urel/multimediainfolib10.dll" - "!:\sys\bin\multimediainfolib10.dll"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt463/epoc32/release/gcce/urel/mobilityinfolib10.dll" - "!:\sys\bin\mobilityinfolib10.dll"

; Qt Mobility 1.1 - libs
"c:/QtSDK/Symbian/SDKs/Symbian1Qt473/epoc32/release/gcce/urel/multimediainfolib11.dll" - "!:\sys\bin\multimediainfolib11.dll"
"c:/QtSDK/Symbian/SDKs/Symbian1Qt473/epoc32/release/gcce/urel/mobilityinfolib11.dll" - "!:\sys\bin\mobilityinfolib11.dll"

; Qt Mobility 1.2 (beta) - libs
"c:/QtSDK/Symbian/SDKs/Symbian3Qt473_12b/epoc32/release/armv5/urel/mobilityinfolib12.dll" - "!:\sys\bin\mobilityinfolib12.dll"
"c:/QtSDK/Symbian/SDKs/Symbian3Qt473_12b/epoc32/release/armv5/urel/multimediainfolib12.dll" - "!:\sys\bin\multimediainfolib12.dll"


code:
; qtinfo_installer.pkg generated by qmake at 2011-05-10T19:30:49
; This file is generated by qmake and should not be modified by the user
;

; Language
&EN

; SIS header: name, uid, version
#{"QtInfo Installer"},(0xA000D7CE),1,0,0

; Localised Vendor name
%{"Forum Nokia"}

; Unique Vendor name
:"Forum Nokia"

; Manual PKG pre-rules from PRO files
; Default HW/platform dependencies
[0x20022E6D],0,0,0,{"S60ProductID"}
[0x1028315F],0,0,0,{"S60ProductID"}
[0x102752AE],0,0,0,{"S60ProductID"}
[0x102032BE],0,0,0,{"S60ProductID"}

"magic_selfsigned.sis" - "c:\private\2002CCCE\import\qtinfo.sis"
@"C:/QtSDK/Symbian/SDKs/Symbian1Qt463//smartinstaller.sis",(0x2002CCCD)


code:
#include "mobilityinfo.h"
#include <QStringList>

#ifndef Q_OS_BLACKBERRY
#include <qmobilityglobal.h>
#else
#include <QtMobility/qmobilityglobal.h>
#endif

#ifdef QTM_SYSTEMINFO
#include <QSystemInfo>
#include <QSystemDisplayInfo>
#include <QSystemStorageInfo>
#include <QSystemNetworkInfo>
#include <QSystemDeviceInfo>
#include <QDesktopWidget>
#endif

#ifdef QTM_SENSORS
#include <QSensor>
#endif

// #include <QtServiceFramework/QServiceManager>

QTM_USE_NAMESPACE

QList<QPair<QString, QString> > mobilityInfo()
{
    QList<QPair<QString, QString> > info;
    QString value;
    QStringList valuelist;

    info.append(QPair<QString,QString>("section", "Mobility"));

//    hmm, segfaults on my desktop 1.2
//    QSystemDeviceInfo qsdei;
//    info.append(QPair<QString,QString>("Device", QString("%0 %1 (%2)").arg(qsdei.manufacturer()).arg(qsdei.model()).arg(qsdei.productName())));

#ifdef QTM_SYSTEMINFO
    QSystemInfo si;
    value = si.version(QSystemInfo::Os) + " / "  + si.version(QSystemInfo::Firmware);
    info.append(QPair<QString,QString>("OS / Firmware", value));

    QDesktopWidget qdw;
    QSystemDisplayInfo qsdi;
    for (int i=0; i<qdw.screenCount() ; i++) {
        QRect sg = qdw.screenGeometry(i);
// DPI info needs mobility 1.2
//        info.append(QPair<QString,QString>(QString("Screen (%0)").arg(i), QString("%0x%1, %2 DPI, %3b").arg(sg.width()).arg(sg.height()).arg(qsdi.getDPIWidth(i)).arg(qsdi.colorDepth(i))));
        info.append(QPair<QString,QString>(QString("Screen (%0)").arg(i), QString("%0x%1, %2b").arg(sg.width()).arg(sg.height()).arg(qsdi.colorDepth(i))));
    }
//    info.append(QPair<QString,QString>("section", "Mobility"));

    QString mobilityver = si.version((QSystemInfo::Version)4);
    if (mobilityver.isEmpty() || mobilityver == "Not Available")
        value = "1.0.x";
    else
        value = si.version((QSystemInfo::Version)4);
    info.append(QPair<QString,QString>("Version", value));

    QSystemInfo qsi;
    if (qsi.hasFeatureSupported(QSystemInfo::BluetoothFeature)) valuelist << "Bluetooth";
    if (qsi.hasFeatureSupported(QSystemInfo::CameraFeature)) valuelist << "Camera";
    if (qsi.hasFeatureSupported(QSystemInfo::FmradioFeature)) valuelist << "FM Radio";
    if (qsi.hasFeatureSupported(QSystemInfo::IrFeature)) valuelist << "Infrared";
    if (qsi.hasFeatureSupported(QSystemInfo::LedFeature)) valuelist << "LED";
    if (qsi.hasFeatureSupported(QSystemInfo::MemcardFeature)) valuelist << "Memory card";
    if (qsi.hasFeatureSupported(QSystemInfo::UsbFeature)) valuelist << "USB";
    if (qsi.hasFeatureSupported(QSystemInfo::VibFeature)) valuelist << "Vibra";
    if (qsi.hasFeatureSupported(QSystemInfo::WlanFeature)) valuelist << "WiFi";
    if (qsi.hasFeatureSupported(QSystemInfo::SimFeature)) valuelist << "SIM";
    if (qsi.hasFeatureSupported(QSystemInfo::LocationFeature)) valuelist << "GPS";
    if (qsi.hasFeatureSupported(QSystemInfo::VideoOutFeature)) valuelist << "Video out";
    if (qsi.hasFeatureSupported(QSystemInfo::HapticsFeature)) valuelist << "Haptics";
    if (qsi.hasFeatureSupported((QSystemInfo::Feature)13)) valuelist << "FM Transmitter"; // added in 1.2 so no enum

//    QServiceManager qsm;
//    info.append(QPair<QString,QString>("Services", qsm.findServices().join(", ")));

    // 1.2 API, though exists in undocumented (and segfaulting) form in 1.1, too
//    foreach (QString drive, QSystemStorageInfo::logicalDrives()) {
//        QSystemStorageInfo qssi;
//        info.append(QPair<QString,QString>(QString("Storage (%0)").arg(drive), QString("%0MB (%1 free)").arg(qssi.totalDiskSpace(drive) / (1 << 20) ).arg(qssi.availableDiskSpace(drive) / (1 << 20) )));
//    }

    QSystemNetworkInfo qsni;
    if (!qsni.homeMobileCountryCode().isEmpty()) {
        info.append(QPair<QString,QString>("SIM country", QString("Home: %0, Current: %1").arg(qsni.homeMobileCountryCode()).arg(qsni.currentMobileCountryCode())));
        info.append(QPair<QString,QString>("SIM network", QString("Home: %0, Current: %1").arg(qsni.homeMobileNetworkCode()).arg(qsni.currentMobileNetworkCode())));
    }

#else // No one in their right mind would link us against the wrong version, right?
    info.append(QPair<QString,QString>("Version", QString("Compiled with ") + QTM_VERSION_STR ));
#endif

#ifdef QTM_SENSORS
    info.append(QPair<QString,QString>("Hardware features", valuelist.join(", ")));

    valuelist.clear();
    foreach (QByteArray sensorname, QSensor::sensorTypes()) {
        valuelist << QString(sensorname);
    }
    if (!valuelist.isEmpty())  info.append(QPair<QString,QString>("Sensors", valuelist.join(", ")));
#endif

    return info;
}


code:
#ifndef MOBILITYINFO_H
#define MOBILITYINFO_H

#include <QList>
#include <QPair>
#include <QString>

extern "C" {
QList<QPair<QString, QString> > mobilityInfo();
}
#endif


code:
######################################################################
# Automatically generated by qmake (2.01a) to 24. maalis 09:24:08 2011
######################################################################

include (../multipass.pri)

TEMPLATE = lib
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

QT += core gui
maemo5 {
    CONFIG += $$MOBCONFIG
    !isEmpty(MOBLOAD) load($$MOBLOAD)
} else {
    CONFIG += mobility
    load(mobilityconfig)
}

isEmpty(MOBILITY_VERSION) {
    MOBILITY_CONFIG=location contacts multimedia publishsubscribe versit messaging systeminfo serviceframework sensors
    MOBILITY_VERSION=1.0.2
    MOBILITY_MAJOR_VERSION=1
    MOBILITY_MINOR_VERSION=0
    MOBILITY_PATCH_VERSION=2
}

contains(MOBILITY_CONFIG,sensors): {
    MOBILITY += sensors
    DEFINES += QTM_SENSORS
}
contains(MOBILITY_CONFIG,systeminfo): {
    MOBILITY += systeminfo
    DEFINES += QTM_SYSTEMINFO
}

TARGET = mobilityinfolib$$MOBILITY_MAJOR_VERSION$$MOBILITY_MINOR_VERSION

symbian {
    #Build STDDLL
    CONFIG += stdbinary

    #Symbian specific definitions
    MMP_RULES += EXPORTUNFROZEN

    TARGET.EPOCALLOWDLLDATA = 1

    addFiles.sources = $${TARGET}.dll
    addFiles.path = !:/sys/bin
    DEPLOYMENT += addFiles
}

# Input
HEADERS += mobilityinfo.h
SOURCES += mobilityinfo.cpp

unix:!symbian { # not funny
    target.path = /opt/qtinfo/bin
    INSTALLS = target

    # don't do this in your projects, we're trained professionals

    maemo5 {
        ! contains(MOBILITY_MINOR_VERSION,2): ! contains(MOBILITY_MINOR_VERSION,1) { # the last pass is with mobility 1.0, so we need to add to the package 1.1 and 1.2 that have been compiled in the previous passes
             extratarget.files = libmobilityinfolib11.so libmobilityinfolib12.so
             extratarget.path=/opt/qtinfo/bin
             INSTALLS += extratarget
        }
    }
}

include(../qtinfo_symbianplatsec.pri)


code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Qt info</title>

Qt info

Below you can see the details of your current Qt installation.

    Qt version
    %1

    Mobility version
    %2

    OS/FW
    %3

    Webkit
    %4

    Country
    %5

    Language
    %6

    Qt modules
    %7

    Lib path
    %8

    Plugin path
    %9

    Import path
    %10

    Image formats
    %11

    OpenGL
    %12


code:
#include "multimediainfo.h"
#ifdef QTM_VERSION
#include <qmobilityglobal.h>
#endif
#include <QStringList>
#if (QT_VERSION >= 0x050000)
#include <QAudio>
#include <QAudiodeviceInfo>
#else
#include <qaudio.h>
#include <qaudiodeviceinfo.h>
#endif
//#include <QAudioCaptureSource>
#if (QTM_VERSION >= 0x010100) || (QT_VERSION >= 0x050000)
#include <QCamera>
#endif
#include <qmediarecorder.h>
#include <QDebug>

//QT_USE_NAMESPACE

QList<QPair<QString, QString> > multimediaInfo()
{
    QList<QPair<QString, QString> > info;
    info.append(QPair<QString,QString>("section", "MultimediaKit Audio"));

    QStringList devices;
    if (!QAudioDeviceInfo::availableDevices(QAudio::AudioInput).isEmpty()) {
        foreach(QAudioDeviceInfo adi, QAudioDeviceInfo::availableDevices(QAudio::AudioInput)) {
            devices << adi.deviceName();
//            less useful as it initially seems as the codec for an audio device will always be pcm ?
//            info.append(QPair<QString,QString>(QString("Supported codecs (%0)").arg(adi.deviceName()), adi.supportedCodecs().join(",")));
        }
        info.append(QPair<QString,QString>("Input devices", devices.join(",")));
    }

    devices.clear();
    if (!QAudioDeviceInfo::availableDevices(QAudio::AudioOutput).isEmpty())
    {
        foreach(QAudioDeviceInfo adi, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
            devices << adi.deviceName();
//            info.append(QPair<QString,QString>(QString("Supported codecs (%0)").arg(adi.deviceName()), adi.supportedCodecs().join(",")));
        }
        info.append(QPair<QString,QString>("Output devices", devices.join(",")));
    }

#if (QTM_VERSION >= 0x010100) || (QT_VERSION >= 0x050000)

    // "real" audio codecs are actually visible under the QMediaRecorder, so we'll check that under the video section

//    if (1) {
//        QAudioCaptureSource* audioSource = new QAudioCaptureSource;
//        QMediaRecorder audiomediarec(audioSource);
//        info.append(QPair<QString,QString>("Supported inputs", QStringList(audioSource->audioInputs()).join(",").replace("audio/","")));
//        info.append(QPair<QString,QString>("Default input codecs", audioSource->defaultAudioInput()));

    if (!QCamera::availableDevices().isEmpty()) {
//        info.append(QPair<QString,QString>("Supported codecs", audiomediarec.supportedAudioCodecs().join(",").replace("audio/","")));
        QCamera audiocam(QCamera::availableDevices().at(0));
        QMediaRecorder audiomediarec(&audiocam);

        info.append(QPair<QString,QString>("Supported codecs", audiomediarec.supportedAudioCodecs().join(",").replace("audio/","")));
        info.append(QPair<QString,QString>("section", "MultimediaKit Video"));
        foreach(QByteArray camname, QCamera::availableDevices()) {
            devices <<  QCamera::deviceDescription(camname);
            QCamera cam(camname);
            QMediaRecorder mediarec(&cam);
            QStringList values;

            foreach(QString container, mediarec.supportedContainers()){
                values << container;
            }
            if (!values.isEmpty())
                info.append(QPair<QString,QString>(QString("Containers (%0)").arg(QString(camname)), values.join(", ")));
            values.clear();

            if (!mediarec.supportedVideoCodecs().isEmpty()) {
                info.append(QPair<QString,QString>(QString("Supported codecs (%0)").arg(QString(camname)), mediarec.supportedVideoCodecs().join(",").replace("video/","")));
                foreach (QString codecstr, mediarec.supportedVideoCodecs()) {
                    QVideoEncoderSettings ves;
                    ves.setCodec(codecstr);
                    mediarec.setEncodingSettings(QAudioEncoderSettings(), ves); //, "avi"); // cludge. How to pick the "best" container ?
                    qDebug() << codecstr << mediarec.supportedFrameRates().length() << mediarec.supportedResolutions().length() ;

                    foreach(double rate, mediarec.supportedFrameRates()){
                        values << QString::number(rate);
                    }
                    if (!values.isEmpty())
                        info.append(QPair<QString,QString>(QString("Frame rates (%0)").arg(codecstr), values.join(", ")));
                    values.clear();

                    foreach(QSize s, mediarec.supportedResolutions()){
                        values << QString("%0 x %1").arg(s.width()).arg(s.height());
                    }
                    if (!values.isEmpty())
                        info.append(QPair<QString,QString>(QString("Resolutions (%0)").arg(codecstr), values.join(", ")));

                }
            }
        }
    } else {
        // add empty section just for completeness' sake
        info.append(QPair<QString,QString>("Supported codecs", "N/A")); // for the audio block we started above
        info.append(QPair<QString,QString>("section", "MultimediaKit Video"));
        info.append(QPair<QString,QString>("Supported codecs", "N/A"));
    }
    devices.clear();
#endif

    return info;
}

#ifdef _MSC_VER
QString multimediaInfoQString()
{
    QStringList qsl;
    typedef QPair<QString, QString> StringPair;
    QList<StringPair> info = multimediaInfo();
    foreach (StringPair pair, info)
    {
       qsl << pair.first + "##PAIRSEPARATOR##" + pair.second;
    }
    return qsl.join("##LINESEPARATOR##");
}
#endif


code:
#ifndef MULTIMEDIAINFO_H
#define MULTIMEDIAINFO_H

#include <QList>
#include <QPair>
#include <QString>

#ifdef Q_OS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif

extern "C" MY_EXPORT QString multimediaInfoQString();
#ifndef _MSC_VER
extern "C" {
QList<QPair<QString, QString> > multimediaInfo();
}
#endif

#endif // MULTIMEDIAINFO_H


code:
######################################################################
# Automatically generated by qmake (2.01a) to 24. maalis 09:24:08 2011
######################################################################

include (../multipass.pri)

TEMPLATE = lib
#TARGET =
DEPENDPATH += .
INCLUDEPATH += .

#QT += core gui
# Input
HEADERS += multimediainfo.h
SOURCES += multimediainfo.cpp

contains(QT_MAJOR_VERSION,5) {
    QT += multimedia

} else {
    maemo5 {
        CONFIG += $$MOBCONFIG
        !isEmpty(MOBLOAD) load($$MOBLOAD)
    } else {
        CONFIG += mobility
        load(mobilityconfig)
        contains(MOBILITY_MAJOR_VERSION,1) : message(Mobility $$MOBILITY_VERSION detected with modules: $$MOBILITY_CONFIG)
    }

    isEmpty(MOBILITY_VERSION): isEmpty(MOBILITY_MAJOR_VERSION) {
        MOBILITY_CONFIG=location contacts multimedia publishsubscribe versit messaging systeminfo serviceframework sensors
        MOBILITY_VERSION=1.0.2
        MOBILITY_MAJOR_VERSION=1
        MOBILITY_MINOR_VERSION=0
        MOBILITY_PATCH_VERSION=2
    }

    MOBILITY += multimedia

    TARGET = multimediainfolib$$MOBILITY_MAJOR_VERSION$$MOBILITY_MINOR_VERSION

    symbian {
        #Build STDDLL
        CONFIG += stdbinary

        #Symbian specific definitions
        MMP_RULES += EXPORTUNFROZEN

        TARGET.EPOCALLOWDLLDATA = 1

        addFiles.sources = $${TARGET}.dll
        addFiles.path = !:/sys/bin
        DEPLOYMENT += addFiles
    }

    unix:!symbian { # not funny
        target.path = /opt/qtinfo/bin
        INSTALLS += target

        # don't do this in your projects, we're trained professionals

        maemo5 {
            ! contains(MOBILITY_MINOR_VERSION,2): ! contains(MOBILITY_MINOR_VERSION,1) { # the last pass is with mobility 1.0, so we need to add to the package 1.1 and 1.2 that have been compiled in the previous passes
                 extratarget.files = libmultimediainfolib11.so libmultimediainfolib12.so
                 extratarget.path=/opt/qtinfo/bin
                 INSTALLS += extratarget
            }
        }
    }

    include(../qtinfo_symbianplatsec.pri)
}


code:
# Do not do this in your projects - we're trained professionals

symbian:TARGET.UID3=0xA1234567

PASS=2

contains(PASS,1) {
	maemo5 {
		MOBCONFIG=mobility12
		MOBLOAD=mobilityconfig12
	}
}

contains(PASS,2) {
	maemo5 {
		MOBCONFIG=mobility11
		MOBLOAD=mobilityconfig11
	}
}

contains(PASS,3) {
	maemo5 {
		MOBCONFIG=mobility
#		MOBLOAD=mobilityconfig10 # mobility 1.0 has no config
	}
}


code:
The Debian Package qtinfo
----------------------------

Comments regarding the Package

 -- Attila Csipa <attila.csipa@nokia.com>  Thu, 24 Mar 2011 21:20:43 +0200


code:
qtinfo (0.0.1) unstable; urgency=low

  * Initial Release.

 -- Attila Csipa <attila.csipa@nokia.com>  Thu, 24 Mar 2011 21:20:43 +0200


code:
This package was debianized by Attila Csipa <attila@unknown> on
Thu, 24 Mar 2011 21:20:43 +0200.

It was downloaded from <url://example.com>

Upstream Author(s):

    <put author's name and email here>
    <likewise for another author>

Copyright:

    <Copyright (C) YYYY Name OfAuthor>
    <likewise for another author>

License:

    This package is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This package is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this package; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

The Debian packaging is (C) 2011, Attila Csipa <attila@unknown> and
is licensed under the GPL, see above.

# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.


code:
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

configure: configure-stamp
configure-stamp:
	dh_testdir
	# qmake PREFIX=/usr# Uncomment this line for use without Qt Creator

	touch configure-stamp

build: build-stamp

build-stamp: configure-stamp
	dh_testdir

	# Add here commands to compile the package.
	# $(MAKE) # Uncomment this line for use without Qt Creator
	#docbook-to-man debian/qtinfo.sgml > qtinfo.1

	touch $@

clean:
	dh_testdir
	dh_testroot
	rm -f build-stamp configure-stamp

	# Add here commands to clean up after the build process.
	$(MAKE) clean

	dh_clean

install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

	# Add here commands to install the package into debian/qtinfo.
	$(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/qtinfo install

# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.

# Build architecture-dependent files here.
binary-arch: build install
	dh_testdir
	dh_testroot
	dh_installchangelogs
	dh_installdocs
	dh_installexamples
#	dh_install
#	dh_installmenu
#	dh_installdebconf
#	dh_installlogrotate
#	dh_installemacsen
#	dh_installpam
#	dh_installmime
#	dh_python
#	dh_installinit
#	dh_installcron
#	dh_installinfo
	dh_installman
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
#	dh_perl
#	dh_makeshlibs
	dh_installdeb
	# dh_shlibdeps # Uncomment this line for use without Qt Creator
	dh_gencontrol
	dh_md5sums
	dh_builddeb

binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure


code:
The Debian Package qtinfo
----------------------------

Comments regarding the Package

 -- Attila Csipa <attila@unknown>  Tue, 05 Apr 2011 22:05:05 +0300


code:
qtinfo (0.0.1) unstable; urgency=low

  * Initial Release.

 -- Attila Csipa <attila@unknown>  Tue, 05 Apr 2011 22:05:05 +0300


code:
This package was debianized by Attila Csipa <attila@unknown> on
Tue, 05 Apr 2011 22:05:05 +0300.

It was downloaded from <url://example.com>

Upstream Author(s):

    <put author's name and email here>
    <likewise for another author>

Copyright:

    <Copyright (C) YYYY Name OfAuthor>
    <likewise for another author>

License:

    This package is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This package is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this package; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

The Debian packaging is (C) 2011, Attila Csipa <attila@unknown> and
is licensed under the GPL, see above.

# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.