Latest update at Qt based ZXing wrapper => QZXing V1.2. Supports Windows Mingw compiler, Symbian, Maemo-Harmattan.

By V1.2 support to Aztec codes is added.

It now fully supports Qt Quick. 

Symbian Examples are updated to comply with the changes.

git-svn-id: https://zxing.googlecode.com/svn/trunk@2296 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
ftylitak@gmail.com 2012-05-19 16:14:45 +00:00
parent 212e611dc3
commit f78c18671b
269 changed files with 18808 additions and 18338 deletions

View file

@ -1,7 +1,8 @@
#ifndef QZXING_GLOBAL_H
#define QZXING_GLOBAL_H
#include <QtCore/qglobal.h>
#include <QtCore>
#include <qglobal.h>
#if defined(QZXING_LIBRARY)
# define QZXINGSHARED_EXPORT Q_DECL_EXPORT

View file

@ -32,7 +32,8 @@ public:
DecoderFormat_EAN_13 = 32,
DecoderFormat_CODE_128 = 64,
DecoderFormat_CODE_39 = 128,
DecoderFormat_ITF = 256
DecoderFormat_ITF = 256,
DecoderFormat_Aztec = 512
} ;
typedef unsigned int DecoderFormatType;
@ -49,7 +50,7 @@ public:
#if QT_VERSION >= 0x040700
static void registerQMLTypes()
{
qmlRegisterType<QZXing>("QZXing", 1, 0, "QZXing");
qmlRegisterType<QZXing>("QZXing", 1, 2, "QZXing");
}
#endif
@ -60,6 +61,19 @@ public slots:
*/
QString decodeImage(QImage image);
/**
* The decoding function accessible from QML
*/
QString decodeImageQML(QObject *item);
/**
* The decoding function accessible from QML. Able to set the decoding
* of a portion of the image.
*/
QString decodeSubImageQML(QObject* item,
const double offsetX = 0 , const double offsetY = 0,
const double width = 0, const double height = 0);
signals:
void decodingStarted();
void decodingFinished(bool succeeded);
@ -68,6 +82,7 @@ signals:
private:
void* decoder;
DecoderFormatType supportedFormats;
QObject* imageHandler;
};
#endif // QZXING_H

View file

@ -1 +0,0 @@
libQZXing.rar is compressed to save space. Decompress to use.

View file

@ -32,7 +32,8 @@ public:
DecoderFormat_EAN_13 = 32,
DecoderFormat_CODE_128 = 64,
DecoderFormat_CODE_39 = 128,
DecoderFormat_ITF = 256
DecoderFormat_ITF = 256,
DecoderFormat_Aztec = 512
} ;
typedef unsigned int DecoderFormatType;
@ -49,7 +50,7 @@ public:
#if QT_VERSION >= 0x040700
static void registerQMLTypes()
{
qmlRegisterType<QZXing>("QZXing", 1, 0, "QZXing");
qmlRegisterType<QZXing>("QZXing", 1, 2, "QZXing");
}
#endif
@ -60,6 +61,19 @@ public slots:
*/
QString decodeImage(QImage image);
/**
* The decoding function accessible from QML
*/
QString decodeImageQML(QObject *item);
/**
* The decoding function accessible from QML. Able to set the decoding
* of a portion of the image.
*/
QString decodeSubImageQML(QObject* item,
const double offsetX = 0 , const double offsetY = 0,
const double width = 0, const double height = 0);
signals:
void decodingStarted();
void decodingFinished(bool succeeded);
@ -68,6 +82,7 @@ signals:
private:
void* decoder;
DecoderFormatType supportedFormats;
QObject* imageHandler;
};
#endif // QZXING_H

View file

@ -32,7 +32,8 @@ public:
DecoderFormat_EAN_13 = 32,
DecoderFormat_CODE_128 = 64,
DecoderFormat_CODE_39 = 128,
DecoderFormat_ITF = 256
DecoderFormat_ITF = 256,
DecoderFormat_Aztec = 512
} ;
typedef unsigned int DecoderFormatType;
@ -49,7 +50,7 @@ public:
#if QT_VERSION >= 0x040700
static void registerQMLTypes()
{
qmlRegisterType<QZXing>("QZXing", 1, 0, "QZXing");
qmlRegisterType<QZXing>("QZXing", 1, 2, "QZXing");
}
#endif
@ -60,6 +61,19 @@ public slots:
*/
QString decodeImage(QImage image);
/**
* The decoding function accessible from QML
*/
QString decodeImageQML(QObject *item);
/**
* The decoding function accessible from QML. Able to set the decoding
* of a portion of the image.
*/
QString decodeSubImageQML(QObject* item,
const double offsetX = 0 , const double offsetY = 0,
const double width = 0, const double height = 0);
signals:
void decodingStarted();
void decodingFinished(bool succeeded);
@ -68,6 +82,7 @@ signals:
private:
void* decoder;
DecoderFormatType supportedFormats;
QObject* imageHandler;
};
#endif // QZXING_H

View file

@ -1 +0,0 @@
QZXing1.rar is compressed to save space. Decompress to use.

View file

@ -47,7 +47,7 @@ FocusScope {
property alias whiteBalance : wbModesButton.value
property alias flashMode : flashModesButton.value
property alias exposureCompensation : exposureCompensationButton.value
//property alias exposureCompensation : exposureCompensationButton.value
property int buttonsPanelWidth: buttonPaneShadow.width
@ -84,7 +84,7 @@ FocusScope {
}
CameraButton {
text: "Capture"
text: "Decode"
onClicked: camera.captureImage()
}
@ -147,9 +147,9 @@ FocusScope {
}
}
ExposureCompensationButton {
id : exposureCompensationButton
}
// ExposureCompensationButton {
// id : exposureCompensationButton
// }
CameraButton {
text: "View"

View file

@ -0,0 +1,23 @@
import QtQuick 1.1
import com.nokia.symbian 1.1
CommonDialog {
id: dialog
titleText: "Decoded message"
//titleIcon: "images/QrButton_toolbar.svg"
buttonTexts: ["OK"]
property alias text: messageLabel.text
content: Rectangle {
height: messageLabel.height
width: messageLabel.width
color: "#ff000000"
anchors.horizontalCenter: parent.horizontalCenter
Text{
id: messageLabel
color: "white"
}
}
}

View file

@ -0,0 +1,62 @@
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
import Qt 4.7
import QtMultimediaKit 1.1
Item {
property alias source : preview.source
signal closed
Image {
id: preview
anchors.fill : parent
fillMode: Image.PreserveAspectFit
smooth: true
}
MouseArea {
anchors.fill: parent
onClicked: {
parent.closed();
}
}
}

View file

@ -0,0 +1,38 @@
TEMPLATE=app
VERSION = 1.1.0
QT += declarative network
!maemo5 {
contains(QT_CONFIG, opengl) {
# QT += opengl
}
}
win32 {
#required by Qt SDK to resolve Mobility libraries
CONFIG+=mobility
MOBILITY+=multimedia
}
SOURCES += $$PWD/qmlcamera.cpp
!mac:TARGET = QMLBarcodeReader
else:TARGET = QMLBarcodeReader
RESOURCES += declarative-camera.qrc
symbian {
TARGET.CAPABILITY = UserEnvironment NetworkServices Location ReadUserData WriteUserData
TARGET.EPOCHEAPSIZE = 0x20000 0x3000000
LIBS += -lqzxing
customrules.pkg_prerules = \
";QZXing" \
"@\"$$(EPOCROOT)Epoc32/InstallToDevice/QZXing_selfsigned.sis\",(0xE618743C)"\
" "
DEPLOYMENT += customrules
}
ICON = QMLBarcodeReader.svg

View file

@ -0,0 +1,22 @@
// ============================================================================
// * Generated by qmake (2.01a) (Qt 4.7.4) on: 2012-05-19T19:03:01
// * This file is generated by qmake and should not be modified by the
// * user.
// ============================================================================
CHARACTER_SET UTF8
#include <appinfo.rh>
#include "QMLBarcodeReader.loc"
RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info
{
short_caption = STRING_r_short_caption;
caption_and_icon =
CAPTION_AND_ICON_INFO
{
caption = STRING_r_caption;
number_of_icons = 0;
icon_file = "\\resource\\apps\\QMLBarcodeReader.mif";
};
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -1,52 +0,0 @@
# Add more folders to ship with the application, here
folder_01.source = qml/QMLBarcodeScanner
folder_01.target = qml
DEPLOYMENTFOLDERS = folder_01
# Additional import path used to resolve QML modules in Creator's code model
QML_IMPORT_PATH =
symbian:TARGET.UID3 = 0xE35E8B99
# Smart Installer package's UID
# This UID is from the protected range and therefore the package will
# fail to install if self-signed. By default qmake uses the unprotected
# range value if unprotected UID is defined for the application and
# 0x2002CCCF value if protected UID is given to the application
#symbian:DEPLOYMENT.installer_header = 0x2002CCCF
# Allow network access on Symbian
#symbian:TARGET.CAPABILITY += NetworkServices
# If your application uses the Qt Mobility libraries, uncomment the following
# lines and add the respective components to the MOBILITY variable.
# CONFIG += mobility
# MOBILITY +=
# Speed up launching on MeeGo/Harmattan when using applauncherd daemon
# CONFIG += qdeclarative-boostable
# Add dependency to Symbian components
# CONFIG += qt-components
# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
symbian{
LIBS += -lqzxing
customrules.pkg_prerules = \
";QZXing" \
"@\"$$(EPOCROOT)Epoc32/InstallToDevice/QZXing_selfsigned.sis\",(0xE618743C)"\
" "
DEPLOYMENT += customrules
}
win32{
LIBS += -LC:/QtSDKProjects/QMLBarcodeScanner/Qt_4.7.4_Desktop_Mingw \
-lQZXing
}
# Please do not modify the following two lines. Required for deployment.
include(qmlapplicationviewer/qmlapplicationviewer.pri)
qtcAddDeployment()

View file

@ -1,716 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by Qt Creator 2.3.1, 2011-11-16T18:00:58. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="bool" key="AlignAssignments">false</value>
<value type="QString" key="CurrentFallback">CppGlobal</value>
<value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
<value type="bool" key="IndentAccessSpecifiers">false</value>
<value type="bool" key="IndentBlockBody">true</value>
<value type="bool" key="IndentBlockBraces">false</value>
<value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
<value type="bool" key="IndentClassBraces">false</value>
<value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
<value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
<value type="bool" key="IndentEnumBraces">false</value>
<value type="bool" key="IndentFunctionBody">true</value>
<value type="bool" key="IndentFunctionBraces">false</value>
<value type="bool" key="IndentNamespaceBody">false</value>
<value type="bool" key="IndentNamespaceBraces">false</value>
<value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
<value type="bool" key="IndentSwitchLabels">false</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">1</value>
<value type="QByteArray" key="EditorConfiguration.Codec">System</value>
<value type="QString" key="EditorConfiguration.CurrentFallback">Project</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.SmartBackspace">false</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.Tab.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="bool" key="AutoIndent">true</value>
<value type="bool" key="AutoSpacesForTabs">false</value>
<value type="QString" key="CurrentFallback">CppGlobal</value>
<value type="int" key="IndentSize">4</value>
<value type="int" key="PaddingMode">1</value>
<value type="bool" key="SmartBackspace">false</value>
<value type="bool" key="SpacesForTabs">true</value>
<value type="int" key="TabKeyBehavior">0</value>
<value type="int" key="TabSize">8</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.Tab.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="bool" key="AutoIndent">true</value>
<value type="bool" key="AutoSpacesForTabs">false</value>
<value type="QString" key="CurrentFallback">QmlJSGlobal</value>
<value type="int" key="IndentSize">4</value>
<value type="int" key="PaddingMode">1</value>
<value type="bool" key="SmartBackspace">false</value>
<value type="bool" key="SpacesForTabs">true</value>
<value type="int" key="TabKeyBehavior">0</value>
<value type="int" key="TabSize">8</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.Tab.Count">2</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Symbian Device</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Symbian Device</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Target.S60DeviceTarget</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.7.4 for Symbian Anna (Qt SDK) Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">28</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.7.4 for Symbian Anna (Qt SDK) Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">28</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.7.3 for Symbian^1 (Qt SDK) (2) Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">5</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.7.3 for Symbian^1 (Qt SDK) (2) Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">5</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.7.3 for S60 5th Edition (Qt SDK) Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">30</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.5">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.7.3 for S60 5th Edition (Qt SDK) Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">30</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.6">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.6.3 for Symbian^1 (Qt SDK) (2) Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">15</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.7">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.6.3 for Symbian^1 (Qt SDK) (2) Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">15</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.8">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.6.3 for Symbian^1 (Qt SDK) Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">31</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.9">
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">Qt4ProjectManager.ToolChain.GCCE:C:/QtSDK/Symbian/tools/gcce4/bin/arm-none-symbianelf-g++.exe.arm-symbian-device-elf-32bit.C:/QtSDK/pythongdb/python_2.7based/gdb-arm-none-symbianelf.exe</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.6.3 for Symbian^1 (Qt SDK) Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/QtSDKProjects/QZXing/examples/QMLBarcodeScanner</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">31</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">10</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Create SIS Package</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.S60SignBuildStep</value>
<value type="QString" key="Qt4ProjectManager.S60CreatePackageStep.Certificate"></value>
<value type="QString" key="Qt4ProjectManager.S60CreatePackageStep.Keyfile"></value>
<value type="int" key="Qt4ProjectManager.S60CreatePackageStep.SignMode">0</value>
<value type="bool" key="Qt4ProjectManager.S60CreatorPackageStep.SmartInstaller">false</value>
<value type="bool" key="Qt4ProjectManager.S60CreatorPackageStep.SuppressPatchWarningDialog">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.S60DeployStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy QMLBarcodeScanner to Symbian device</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.S60DeployConfiguration</value>
<value type="int" key="Qt4ProjectManager.S60DeployConfiguration.CommunicationChannel">0</value>
<value type="QString" key="Qt4ProjectManager.S60DeployConfiguration.DeviceAddress"></value>
<value type="QString" key="Qt4ProjectManager.S60DeployConfiguration.DevicePort">65029</value>
<value type="QChar" key="Qt4ProjectManager.S60DeployConfiguration.InstallationDriveLetter">C</value>
<value type="QString" key="Qt4ProjectManager.S60DeployConfiguration.SerialPortName"></value>
<value type="bool" key="Qt4ProjectManager.S60DeployConfiguration.SilentInstall">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">QMLBarcodeScanner on Symbian Device</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.S60DeviceRunConfiguration</value>
<value type="QString" key="Qt4ProjectManager.S60DeviceRunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.S60DeviceRunConfiguration.ProFile">QMLBarcodeScanner.pro</value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
<value type="QString">{167d5df2-461a-41e0-a9f8-c131845c1f19}</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">10</value>
</data>
</qtcreator>

View file

@ -1,345 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="612px" height="792px" viewBox="0 0 612 792" enable-background="new 0 0 612 792" xml:space="preserve">
<image overflow="visible" width="135" height="135" xlink:href="data:image/png;base64,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" transform="matrix(0.9999 0 0 0.9999 239 329)">
</image>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

View file

@ -1,201 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -40,7 +40,7 @@
import Qt 4.7
import QtMultimediaKit 1.1
import QZXing 1.0
import QZXing 1.2
Rectangle {
id : cameraUI
@ -57,88 +57,34 @@ Rectangle {
flashMode: stillControls.flashMode
whiteBalanceMode: stillControls.whiteBalance
exposureCompensation: stillControls.exposureCompensation
// exposureCompensation: stillControls.exposureCompensation
onImageCaptured : {
decoder.decodeImage(preview);
imageToDecode.source = preview
decoder.decodeImageQML(imageToDecode);
}
}
Image{
id: imageToDecode
visible: false
}
CaptureControls {
id: stillControls
anchors.fill: parent
camera: camera
}
MessageDialog{
id:dialog
}
QZXing{
id: decoder
onTagFound: {
messageBox.setText(tag)
messageBox.state = "visible"
}
function enableQrCodeAndEAN()
{
setDecoder(DecoderFormat_QR_CODE | DecoderFormat_EAN_13);
dialog.text = tag
dialog.open();
}
}
Rectangle{
id: messageBox
anchors.left: cameraUI.left
anchors.leftMargin: 10
anchors.right: cameraUI.right
anchors.rightMargin: 10
y: cameraUI.height / 4
height: cameraUI.height/2
state: "hidden"
function setText(str)
{
textArea.text = str;
}
Text{
id: textArea
anchors.centerIn: parent
}
Rectangle{
border.width: 2
width: tagLabel.width
height: tagLabel.height
anchors.bottom: messageBox.bottom
anchors.bottomMargin: 5
anchors.right: messageBox.right
anchors.rightMargin: 5
Text{
id: tagLabel
text: "close"
}
MouseArea{
anchors.fill: parent
onClicked: messageBox.state = "hidden"
}
}
states:[
State{
name: "visible"
PropertyChanges {
target: messageBox
opacity: 1
}
},
State{
name: "hidden"
PropertyChanges {
target: messageBox
opacity: 0
}
}
]
Behavior on opacity{NumberAnimation{duration:100}}
}
}

View file

@ -0,0 +1,18 @@
/* File generated by QtCreator */
import QmlProject 1.0
Project {
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
directory: "."
}
JavaScriptFiles {
directory: "."
}
ImageFiles {
directory: "."
}
/* List of plugin directories passed to QML runtime */
// importPaths: [ "../exampleplugin" ]
}

View file

@ -0,0 +1,27 @@
<RCC>
<qresource prefix="/">
<file>declarative-camera.qml</file>
<file>CameraButton.qml</file>
<file>CameraPropertyPopup.qml</file>
<file>CameraPropertyButton.qml</file>
<file>CaptureControls.qml</file>
<file>ExposureCompensationButton.qml</file>
<file>FlickableList.qml</file>
<file>FocusButton.qml</file>
<file>PhotoPreview.qml</file>
<file>ZoomControl.qml</file>
<file>images/camera_auto_mode.png</file>
<file>images/camera_camera_setting.png</file>
<file>images/camera_flash_auto.png</file>
<file>images/camera_flash_fill.png</file>
<file>images/camera_flash_off.png</file>
<file>images/camera_flash_redeye.png</file>
<file>images/camera_white_balance_cloudy.png</file>
<file>images/camera_white_balance_flourescent.png</file>
<file>images/camera_white_balance_incandescent.png</file>
<file>images/camera_white_balance_sunny.png</file>
<file>images/toolbutton.png</file>
<file>images/toolbutton.sci</file>
<file>MessageDialog.qml</file>
</qresource>
</RCC>

View file

@ -1,17 +0,0 @@
#include <QtGui/QApplication>
#include <QZXing.h>
#include "qmlapplicationviewer.h"
int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
QZXing::registerQMLTypes();
viewer->setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait);
viewer->setMainQmlFile(QLatin1String("qml/QMLBarcodeScanner/declarative-camera.qml"));
viewer->showExpanded();
return app->exec();
}

View file

@ -1,200 +0,0 @@
// checksum 0x78c version 0x60010
/*
This file was generated by the Qt Quick Application wizard of Qt Creator.
QmlApplicationViewer is a convenience class containing mobile device specific
code such as screen orientation handling. Also QML paths and debugging are
handled here.
It is recommended not to modify this file, since newer versions of Qt Creator
may offer an updated version of it.
*/
#include "qmlapplicationviewer.h"
#include <QtCore/QDir>
#include <QtCore/QFileInfo>
#include <QtDeclarative/QDeclarativeComponent>
#include <QtDeclarative/QDeclarativeEngine>
#include <QtDeclarative/QDeclarativeContext>
#include <QtGui/QApplication>
#include <qplatformdefs.h> // MEEGO_EDITION_HARMATTAN
#ifdef HARMATTAN_BOOSTER
#include <MDeclarativeCache>
#endif
#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800
#include <qt_private/qdeclarativedebughelper_p.h>
#if !defined(NO_JSDEBUGGER)
#include <jsdebuggeragent.h>
#endif
#if !defined(NO_QMLOBSERVER)
#include <qdeclarativeviewobserver.h>
#endif
// Enable debugging before any QDeclarativeEngine is created
struct QmlJsDebuggingEnabler
{
QmlJsDebuggingEnabler()
{
QDeclarativeDebugHelper::enableDebugging();
}
};
// Execute code in constructor before first QDeclarativeEngine is instantiated
static QmlJsDebuggingEnabler enableDebuggingHelper;
#endif // QMLJSDEBUGGER
class QmlApplicationViewerPrivate
{
QmlApplicationViewerPrivate(QDeclarativeView *view_) : view(view_) {}
QString mainQmlFile;
QDeclarativeView *view;
friend class QmlApplicationViewer;
QString adjustPath(const QString &path);
};
QString QmlApplicationViewerPrivate::adjustPath(const QString &path)
{
#ifdef Q_OS_UNIX
#ifdef Q_OS_MAC
if (!QDir::isAbsolutePath(path))
return QCoreApplication::applicationDirPath()
+ QLatin1String("/../Resources/") + path;
#else
QString pathInInstallDir;
const QString applicationDirPath = QCoreApplication::applicationDirPath();
pathInInstallDir = QString::fromAscii("%1/../%2").arg(applicationDirPath, path);
if (QFileInfo(pathInInstallDir).exists())
return pathInInstallDir;
#endif
#endif
return path;
}
QmlApplicationViewer::QmlApplicationViewer(QWidget *parent)
: QDeclarativeView(parent)
, d(new QmlApplicationViewerPrivate(this))
{
connect(engine(), SIGNAL(quit()), SLOT(close()));
setResizeMode(QDeclarativeView::SizeRootObjectToView);
// Qt versions prior to 4.8.0 don't have QML/JS debugging services built in
#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800
#if !defined(NO_JSDEBUGGER)
new QmlJSDebugger::JSDebuggerAgent(d->view->engine());
#endif
#if !defined(NO_QMLOBSERVER)
new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view);
#endif
#endif
}
QmlApplicationViewer::QmlApplicationViewer(QDeclarativeView *view, QWidget *parent)
: QDeclarativeView(parent)
, d(new QmlApplicationViewerPrivate(view))
{
connect(view->engine(), SIGNAL(quit()), view, SLOT(close()));
view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
// Qt versions prior to 4.8.0 don't have QML/JS debugging services built in
#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800
#if !defined(NO_JSDEBUGGER)
new QmlJSDebugger::JSDebuggerAgent(d->view->engine());
#endif
#if !defined(NO_QMLOBSERVER)
new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view);
#endif
#endif
}
QmlApplicationViewer::~QmlApplicationViewer()
{
delete d;
}
QmlApplicationViewer *QmlApplicationViewer::create()
{
#ifdef HARMATTAN_BOOSTER
return new QmlApplicationViewer(MDeclarativeCache::qDeclarativeView(), 0);
#else
return new QmlApplicationViewer();
#endif
}
void QmlApplicationViewer::setMainQmlFile(const QString &file)
{
d->mainQmlFile = d->adjustPath(file);
d->view->setSource(QUrl::fromLocalFile(d->mainQmlFile));
}
void QmlApplicationViewer::addImportPath(const QString &path)
{
d->view->engine()->addImportPath(d->adjustPath(path));
}
void QmlApplicationViewer::setOrientation(ScreenOrientation orientation)
{
#if defined(Q_OS_SYMBIAN)
// If the version of Qt on the device is < 4.7.2, that attribute won't work
if (orientation != ScreenOrientationAuto) {
const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.'));
if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) {
qWarning("Screen orientation locking only supported with Qt 4.7.2 and above");
return;
}
}
#endif // Q_OS_SYMBIAN
Qt::WidgetAttribute attribute;
switch (orientation) {
#if QT_VERSION < 0x040702
// Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes
case ScreenOrientationLockPortrait:
attribute = static_cast<Qt::WidgetAttribute>(128);
break;
case ScreenOrientationLockLandscape:
attribute = static_cast<Qt::WidgetAttribute>(129);
break;
default:
case ScreenOrientationAuto:
attribute = static_cast<Qt::WidgetAttribute>(130);
break;
#else // QT_VERSION < 0x040702
case ScreenOrientationLockPortrait:
attribute = Qt::WA_LockPortraitOrientation;
break;
case ScreenOrientationLockLandscape:
attribute = Qt::WA_LockLandscapeOrientation;
break;
default:
case ScreenOrientationAuto:
attribute = Qt::WA_AutoOrientation;
break;
#endif // QT_VERSION < 0x040702
};
setAttribute(attribute, true);
}
void QmlApplicationViewer::showExpanded()
{
#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR)
d->view->showFullScreen();
#elif defined(Q_WS_MAEMO_5)
d->view->showMaximized();
#else
d->view->show();
#endif
}
QApplication *createApplication(int &argc, char **argv)
{
#ifdef HARMATTAN_BOOSTER
return MDeclarativeCache::qApplication(argc, argv);
#else
return new QApplication(argc, argv);
#endif
}

View file

@ -1,47 +0,0 @@
// checksum 0x82ed version 0x60010
/*
This file was generated by the Qt Quick Application wizard of Qt Creator.
QmlApplicationViewer is a convenience class containing mobile device specific
code such as screen orientation handling. Also QML paths and debugging are
handled here.
It is recommended not to modify this file, since newer versions of Qt Creator
may offer an updated version of it.
*/
#ifndef QMLAPPLICATIONVIEWER_H
#define QMLAPPLICATIONVIEWER_H
#include <QtDeclarative/QDeclarativeView>
class QmlApplicationViewer : public QDeclarativeView
{
Q_OBJECT
public:
enum ScreenOrientation {
ScreenOrientationLockPortrait,
ScreenOrientationLockLandscape,
ScreenOrientationAuto
};
explicit QmlApplicationViewer(QWidget *parent = 0);
virtual ~QmlApplicationViewer();
static QmlApplicationViewer *create();
void setMainQmlFile(const QString &file);
void addImportPath(const QString &path);
// Note that this will only have an effect on Symbian and Fremantle.
void setOrientation(ScreenOrientation orientation);
void showExpanded();
private:
explicit QmlApplicationViewer(QDeclarativeView *view, QWidget *parent);
class QmlApplicationViewerPrivate *d;
};
QApplication *createApplication(int &argc, char **argv);
#endif // QMLAPPLICATIONVIEWER_H

View file

@ -1,146 +0,0 @@
# checksum 0x368d version 0x60010
# This file was generated by the Qt Quick Application wizard of Qt Creator.
# The code below adds the QmlApplicationViewer to the project and handles the
# activation of QML debugging.
# It is recommended not to modify this file, since newer versions of Qt Creator
# may offer an updated version of it.
QT += declarative
SOURCES += $$PWD/qmlapplicationviewer.cpp
HEADERS += $$PWD/qmlapplicationviewer.h
INCLUDEPATH += $$PWD
# Include JS debugger library if QMLJSDEBUGGER_PATH is set
!isEmpty(QMLJSDEBUGGER_PATH) {
include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri)
} else {
DEFINES -= QMLJSDEBUGGER
}
contains(CONFIG,qdeclarative-boostable):contains(MEEGO_EDITION,harmattan) {
DEFINES += HARMATTAN_BOOSTER
}
# This file was generated by an application wizard of Qt Creator.
# The code below handles deployment to Symbian and Maemo, aswell as copying
# of the application data to shadow build directories on desktop.
# It is recommended not to modify this file, since newer versions of Qt Creator
# may offer an updated version of it.
defineTest(qtcAddDeployment) {
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
}
MAINPROFILEPWD = $$PWD
symbian {
isEmpty(ICON):exists($${TARGET}.svg):ICON = $${TARGET}.svg
isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
} else:win32 {
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, /, \\)
sourcePathSegments = $$split(source, \\)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)
target = $$replace(target, /, \\)
!isEqual(source,$$target) {
!isEmpty(copyCommand):copyCommand += &&
isEqual(QMAKE_DIR_SEP, \\) {
copyCommand += $(COPY_DIR) \"$$source\" \"$$target\"
} else {
source = $$replace(source, \\\\, /)
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
target = $$replace(target, \\\\, /)
copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\"
}
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
} else:unix {
maemo5 {
desktopfile.files = $${TARGET}.desktop
desktopfile.path = /usr/share/applications/hildon
icon.files = $${TARGET}64.png
icon.path = /usr/share/icons/hicolor/64x64/apps
} else:!isEmpty(MEEGO_VERSION_MAJOR) {
desktopfile.files = $${TARGET}_harmattan.desktop
desktopfile.path = /usr/share/applications
icon.files = $${TARGET}80.png
icon.path = /usr/share/icons/hicolor/80x80/apps
} else { # Assumed to be a Desktop Unix
copyCommand =
for(deploymentfolder, DEPLOYMENTFOLDERS) {
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
source = $$replace(source, \\\\, /)
macx {
target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
} else {
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
}
target = $$replace(target, \\\\, /)
sourcePathSegments = $$split(source, /)
targetFullPath = $$target/$$last(sourcePathSegments)
!isEqual(source,$$targetFullPath) {
!isEmpty(copyCommand):copyCommand += &&
copyCommand += $(MKDIR) \"$$target\"
copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\"
}
}
!isEmpty(copyCommand) {
copyCommand = @echo Copying application data... && $$copyCommand
copydeploymentfolders.commands = $$copyCommand
first.depends = $(first) copydeploymentfolders
export(first.depends)
export(copydeploymentfolders.commands)
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
}
}
installPrefix = /opt/$${TARGET}
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
!isEmpty(desktopfile.path) {
export(icon.files)
export(icon.path)
export(desktopfile.files)
export(desktopfile.path)
INSTALLS += icon desktopfile
}
target.path = $${installPrefix}/bin
export(target.path)
INSTALLS += target
}
export (ICON)
export (INSTALLS)
export (DEPLOYMENT)
export (TARGET.EPOCHEAPSIZE)
export (TARGET.CAPABILITY)
export (LIBS)
export (QMAKE_EXTRA_TARGETS)
}

View file

@ -0,0 +1,92 @@
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtGui/QApplication>
#include <QtGui/QDesktopWidget>
#include <QtDeclarative/QDeclarativeView>
#include <QtDeclarative/QDeclarativeEngine>
#include <QZXing.h>
#if !defined(QT_NO_OPENGL)
#include <QtOpenGL/QGLWidget>
#endif
int main(int argc, char *argv[])
{
QZXing::registerQMLTypes();
#if defined (Q_WS_X11) || defined (Q_WS_MAC) || defined (Q_OS_SYMBIAN)
//### default to using raster graphics backend for now
bool gsSpecified = false;
for (int i = 0; i < argc; ++i) {
QString arg = argv[i];
if (arg == "-graphicssystem") {
gsSpecified = true;
break;
}
}
if (!gsSpecified)
QApplication::setGraphicsSystem("raster");
#endif
QApplication application(argc, argv);
const QString mainQmlApp = QLatin1String("qrc:/declarative-camera.qml");
QDeclarativeView view;
#if !defined(QT_NO_OPENGL) && !defined(Q_WS_MAEMO_5) && !defined(Q_WS_S60)
view.setViewport(new QGLWidget);
#endif
view.setSource(QUrl(mainQmlApp));
view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
// Qt.quit() called in embedded .qml by default only emits
// quit() signal, so do this (optionally use Qt.exit()).
QObject::connect(view.engine(), SIGNAL(quit()), qApp, SLOT(quit()));
#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
view.setGeometry(application.desktop()->screenGeometry());
view.showFullScreen();
#else
view.setGeometry(QRect(100, 100, 800, 480));
view.show();
#endif
return application.exec();
}

View file

@ -0,0 +1,14 @@
moc/
obj/
rcc/
tmp/
ui/
.make.cache
*.BAT
*.inf
Makefile
*.mk
*.loc
*.user
*.mmp
*.pkg

View file

@ -71,6 +71,7 @@ QList<QVideoFrame::PixelFormat> MyVideoSurface::supportedPixelFormats(
{
if (handleType == QAbstractVideoBuffer::NoHandle) {
return QList<QVideoFrame::PixelFormat>()
<< QVideoFrame::Format_UYVY
<< QVideoFrame::Format_RGB32
<< QVideoFrame::Format_ARGB32
<< QVideoFrame::Format_ARGB32_Premultiplied

View file

@ -0,0 +1,39 @@
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the demonstration applications of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/

View file

@ -153,6 +153,8 @@ QCameraControllerWidget::~QCameraControllerWidget()
void QCameraControllerWidget::enableCamera()
{
//QVideoFrame::Format_UYVY;
m_camera = new QCamera();
m_camera->setCaptureMode(QCamera::CaptureStillImage);
connect(m_camera, SIGNAL(error(QCamera::Error)), this, SLOT(error(QCamera::Error)));

View file

@ -44,7 +44,7 @@ QQrDecoder::QQrDecoder(QWidget *parent): QMainWindow(parent), decoder(this)
//by default all decoders available are enabled
//decoder.setDecoder( QZXing::DecoderFormat_DATA_MATRIX);
//decoder.setDecoder( DecoderFormat_QR_CODE | DecoderFormat_EAN_13 );
//decoder.setDecoder( QZXing::DecoderFormat_Aztec );
}
QQrDecoder::~QQrDecoder()

View file

@ -4,7 +4,7 @@ QT += core \
gui \
declarative
VERSION = 1.2.1
VERSION = 1.3.0
CONFIG += mobility
MOBILITY = multimedia #\

View file

@ -0,0 +1,22 @@
// ============================================================================
// * Generated by qmake (2.01a) (Qt 4.7.3) on: 2012-05-14T15:44:30
// * This file is generated by qmake and should not be modified by the
// * user.
// ============================================================================
CHARACTER_SET UTF8
#include <appinfo.rh>
#include "QQrDecoder.loc"
RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info
{
short_caption = STRING_r_short_caption;
caption_and_icon =
CAPTION_AND_ICON_INFO
{
caption = STRING_r_caption;
number_of_icons = 1;
icon_file = "\\resource\\apps\\QQrDecoder.mif";
};
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -0,0 +1,18 @@
// ============================================================================
// * Generated by qmake (2.01a) (Qt 4.7.3) on: 2012-05-14T15:44:30
// * This file is generated by qmake and should not be modified by the
// * user.
// ============================================================================
#include <QQrDecoder.rsg>
#include <appinfo.rh>
UID2 KUidAppRegistrationResourceFile
UID3 0xEF2CE79D
RESOURCE APP_REGISTRATION_INFO
{
app_file="QQrDecoder";
localisable_resource_file="\\resource\\apps\\QQrDecoder";
}

View file

@ -1,55 +0,0 @@
QQrDecoder project is developed entirely in Qt SDK + using the CPP part of the ZXing library.
It supports the latest version of Qt in Symbian (4.7.x) and the camera is controled using the Camera APIs from Qt Mobility project.
Thus we reasure the compatibility with future releases of Qt and the compatibility with newer device with Symbian^3, Belle and Anna (and S60 5th).
The project's folder contains the code as well as the an installation file in case you want try it out without compiling the project.
NOTE: this project, since it uses Camera APIs from Qt Mobility breaks the backward compatibility with non touch-screen devices. So this project
can't be used at device with OS: S60 3rd.
== Prerequisities to compile ==
* Have Qt SDK installed. This will give you all the tools needed such as the Qt SDK, Qt Mobility APIs and the Qt Creator IDE.
http://qt.nokia.com/downloads/
== Prerequisities to install and run to device ==
* Have Qt 4.7.3 (and newer) binaries installed to the device.
* Have Qt Mobility 1.1.0 (and newer) binaries installed to the device.
NOTE: those binaries, if Qt SDK is installed, can be found under the path \QtSDK\Symbian\sis\Symbian^X\
== Importing the project ==
For this step, Qt Creator IDE will be used (contained in Qt SDK). The project can be imported/opened with 2 ways.
NOTE: The project folder must be placed under the same drive letter as the installed Qt SDK. For example "C:\QtSDK" and "C:\QtProjects\QQrDecoder"
# Go the the project's folder and double-click the QQrDecoder.pro file. This will result the Qt Creator to open. (This requires that Qt Creator is
selected as the predefined program to open such files which is automatically set when installing Qt SDK.)
# Alternatively, open Qt Creator manualy, and go under: "File" -> "Open File or Project...", go to the project's folder and select once again the
QQrDecoder.pro.
Whichever step from the above you have followed, now you are led to screen named "Project Setup". Here you select the Target Platform.
You can select "Symbian Device" to target directly for a physical device, or "Qt Simulator" to first test it to the build-in simulator.
== Building the project ==
At this point you have imported the project and you are ready to compile it. At the left toolbar in Qt Creator, above the green arrow you can see the
current target platform selected. Press to select which you want.
Now by pressing Ctrl+B or the "hammer icon" on the left at the bottom. Normaly this should be completed without errors (might be lots of wrning though
which we selectively reject them from our mind :P )
This step compiles the project BUT doesn't produces the .sis file (the installation file). To create the installation file you have to press the "Run button".
It that "Green arrow" on your left, or by simply pressing Ctrl+R. Regardless if you have a device or not, the .sis file will be created.
Now you can install it to your device.
== Additional information ==
For afew more details about the implementation you can see the following page:
http://wiki.forum.nokia.com/index.php/Qr_Decoder_in_Qt
== The same project in Symbian C++ ==
In case you are interested in using this project with only Symbian C++, take a look at ZXingBarcodeReader folder.

14
symbian/QZXing/source/.gitignore vendored Normal file
View file

@ -0,0 +1,14 @@
moc/
obj/
rcc/
tmp/
ui/
.make.cache
*.BAT
*.inf
Makefile
*.mk
*.loc
*.user
*.mmp
*.pkg

View file

@ -6,182 +6,204 @@
QT += core gui
VERSION = 1.1
VERSION = 1.2
greaterThan(QT_VERSION, 4.7): QT += declarative
TARGET = QZXing
TEMPLATE = lib
# CONFIG += staticlib
DEFINES += QZXING_LIBRARY \
ZXING_ICONV_CONST
INCLUDEPATH += ./
HEADERS += zxing/BarcodeFormat.h \
zxing/Binarizer.h \
zxing/BinaryBitmap.h \
zxing/DecodeHints.h \
zxing/Exception.h \
zxing/LuminanceSource.h \
zxing/MultiFormatReader.h \
zxing/Reader.h \
zxing/ReaderException.h \
zxing/Result.h \
zxing/ResultPoint.h \
HEADERS += QZXing_global.h \
CameraImageWrapper.h \
imagehandler.h \
qzxing.h \
zxing/ResultPointCallback.h \
zxing/FormatException.h \
zxing/ResultPoint.h \
zxing/Result.h \
zxing/ReaderException.h \
zxing/Reader.h \
zxing/NotFoundException.h \
zxing/MultiFormatReader.h \
zxing/LuminanceSource.h \
zxing/FormatException.h \
zxing/Exception.h \
zxing/DecodeHints.h \
zxing/BinaryBitmap.h \
zxing/Binarizer.h \
zxing/BarcodeFormat.h \
zxing/aztec/AztecReader.h \
zxing/aztec/AztecDetectorResult.h \
zxing/aztec/decoder/Decoder.h \
zxing/aztec/detector/Detector.h \
zxing/common/StringUtils.h \
zxing/common/CharacterSetECI.h \
zxing/common/ECI.h \
zxing/common/Array.h \
zxing/common/BitArray.h \
zxing/common/BitMatrix.h \
zxing/common/BitSource.h \
zxing/common/Counted.h \
zxing/common/DecoderResult.h \
zxing/common/DetectorResult.h \
zxing/common/EdgeDetector.h \
zxing/common/GlobalHistogramBinarizer.h \
zxing/common/GreyscaleLuminanceSource.h \
zxing/common/GreyscaleRotatedLuminanceSource.h \
zxing/common/GridSampler.h \
zxing/common/HybridBinarizer.h \
zxing/common/IllegalArgumentException.h \
zxing/common/PerspectiveTransform.h \
zxing/common/Point.h \
zxing/common/Str.h \
zxing/common/reedsolomon/GF256.h \
zxing/common/reedsolomon/GF256Poly.h \
zxing/common/reedsolomon/ReedSolomonDecoder.h \
zxing/common/reedsolomon/ReedSolomonException.h \
zxing/common/detector/MonochromeRectangleDetector.h \
zxing/common/Point.h \
zxing/common/PerspectiveTransform.h \
zxing/common/IllegalArgumentException.h \
zxing/common/HybridBinarizer.h \
zxing/common/GridSampler.h \
zxing/common/GreyscaleRotatedLuminanceSource.h \
zxing/common/GreyscaleLuminanceSource.h \
zxing/common/GlobalHistogramBinarizer.h \
zxing/common/EdgeDetector.h \
zxing/common/DetectorResult.h \
zxing/common/DecoderResult.h \
zxing/common/Counted.h \
zxing/common/CharacterSetECI.h \
zxing/common/BitSource.h \
zxing/common/BitMatrix.h \
zxing/common/BitArray.h \
zxing/common/Array.h \
zxing/common/detector/WhiteRectangleDetector.h \
zxing/oned/Code128Reader.h \
zxing/oned/Code39Reader.h \
zxing/common/detector/MonochromeRectangleDetector.h \
zxing/common/reedsolomon/ReedSolomonException.h \
zxing/common/reedsolomon/ReedSolomonDecoder.h \
zxing/common/reedsolomon/GenericGFPoly.h \
zxing/common/reedsolomon/GenericGF.h \
zxing/datamatrix/Version.h \
zxing/datamatrix/DataMatrixReader.h \
zxing/datamatrix/decoder/Decoder.h \
zxing/datamatrix/decoder/DecodedBitStreamParser.h \
zxing/datamatrix/decoder/DataBlock.h \
zxing/datamatrix/decoder/BitMatrixParser.h \
zxing/datamatrix/detector/MonochromeRectangleDetector.h \
zxing/datamatrix/detector/DetectorException.h \
zxing/datamatrix/detector/Detector.h \
zxing/datamatrix/detector/CornerPoint.h \
zxing/oned/UPCEReader.h \
zxing/oned/UPCEANReader.h \
zxing/oned/UPCAReader.h \
zxing/oned/OneDResultPoint.h \
zxing/oned/OneDReader.h \
zxing/oned/MultiFormatUPCEANReader.h \
zxing/oned/MultiFormatOneDReader.h \
zxing/oned/ITFReader.h \
zxing/oned/EAN13Reader.h \
zxing/oned/EAN8Reader.h \
zxing/oned/ITFReader.h \
zxing/oned/MultiFormatOneDReader.h \
zxing/oned/MultiFormatUPCEANReader.h \
zxing/oned/OneDReader.h \
zxing/oned/OneDResultPoint.h \
zxing/oned/UPCAReader.h \
zxing/oned/UPCEANReader.h \
zxing/oned/UPCEReader.h \
zxing/qrcode/ErrorCorrectionLevel.h \
zxing/qrcode/FormatInformation.h \
zxing/qrcode/QRCodeReader.h \
zxing/oned/Code128Reader.h \
zxing/oned/Code39Reader.h \
zxing/qrcode/Version.h \
zxing/qrcode/decoder/BitMatrixParser.h \
zxing/qrcode/decoder/DataBlock.h \
zxing/qrcode/decoder/DataMask.h \
zxing/qrcode/decoder/DecodedBitStreamParser.h \
zxing/qrcode/decoder/Decoder.h \
zxing/qrcode/QRCodeReader.h \
zxing/qrcode/FormatInformation.h \
zxing/qrcode/ErrorCorrectionLevel.h \
zxing/qrcode/decoder/Mode.h \
zxing/qrcode/detector/AlignmentPattern.h \
zxing/qrcode/detector/AlignmentPatternFinder.h \
zxing/qrcode/detector/Detector.h \
zxing/qrcode/detector/FinderPattern.h \
zxing/qrcode/detector/FinderPatternFinder.h \
zxing/qrcode/detector/FinderPatternInfo.h \
zxing/qrcode/decoder/Decoder.h \
zxing/qrcode/decoder/DecodedBitStreamParser.h \
zxing/qrcode/decoder/DataMask.h \
zxing/qrcode/decoder/DataBlock.h \
zxing/qrcode/decoder/BitMatrixParser.h \
zxing/qrcode/detector/QREdgeDetector.h \
zxing/datamatrix/VersionDM.h \
zxing/datamatrix/DataMatrixReader.h \
zxing/datamatrix/decoder/BitMatrixParserDM.h \
zxing/datamatrix/decoder/DataBlockDM.h \
zxing/datamatrix/decoder/DecodedBitStreamParserDM.h \
zxing/datamatrix/decoder/DecoderDM.h \
zxing/datamatrix/detector/CornerPoint.h \
zxing/datamatrix/detector/DetectorDM.h \
zxing/datamatrix/detector/DetectorException.h \
zxing/datamatrix/detector/MonochromeRectangleDetectorDM.h \
QZXing_global.h \
CameraImageWrapper.h \
qzxing.h
zxing/qrcode/detector/FinderPatternInfo.h \
zxing/qrcode/detector/FinderPatternFinder.h \
zxing/qrcode/detector/FinderPattern.h \
zxing/qrcode/detector/Detector.h \
zxing/qrcode/detector/AlignmentPatternFinder.h \
zxing/qrcode/detector/AlignmentPattern.h \
zxing/multi/MultipleBarcodeReader.h \
zxing/multi/GenericMultipleBarcodeReader.h \
zxing/multi/ByQuadrantReader.h \
zxing/multi/qrcode/QRCodeMultiReader.h \
zxing/multi/qrcode/detector/MultiFinderPatternFinder.h \
zxing/multi/qrcode/detector/MultiDetector.h
SOURCES += zxing/BarcodeFormat.cpp \
zxing/Binarizer.cpp \
zxing/BinaryBitmap.cpp \
zxing/DecodeHints.cpp \
zxing/Exception.cpp \
zxing/LuminanceSource.cpp \
zxing/MultiFormatReader.cpp \
zxing/Reader.cpp \
zxing/ReaderException.cpp \
zxing/Result.cpp \
zxing/ResultPoint.cpp \
SOURCES += CameraImageWrapper.cpp \
qzxing.cpp \
imagehandler.cpp \
zxing/ResultPointCallback.cpp \
zxing/FormatException.cpp \
zxing/ResultPoint.cpp \
zxing/Result.cpp \
zxing/ReaderException.cpp \
zxing/Reader.cpp \
zxing/NotFoundException.cpp \
zxing/MultiFormatReader.cpp \
zxing/LuminanceSource.cpp \
zxing/FormatException.cpp \
zxing/Exception.cpp \
zxing/DecodeHints.cpp \
zxing/BinaryBitmap.cpp \
zxing/Binarizer.cpp \
zxing/BarcodeFormat.cpp \
zxing/aztec/AztecReader.cpp \
zxing/aztec/AztecDetectorResult.cpp \
zxing/common/StringUtils.cpp \
zxing/common/CharacterSetECI.cpp \
zxing/common/ECI.cpp \
zxing/common/Array.cpp \
zxing/common/BitArray.cpp \
zxing/common/BitMatrix.cpp \
zxing/common/BitSource.cpp \
zxing/common/Counted.cpp \
zxing/common/DecoderResult.cpp \
zxing/common/DetectorResult.cpp \
zxing/common/EdgeDetector.cpp \
zxing/common/GlobalHistogramBinarizer.cpp \
zxing/common/GreyscaleLuminanceSource.cpp \
zxing/common/GreyscaleRotatedLuminanceSource.cpp \
zxing/common/GridSampler.cpp \
zxing/common/HybridBinarizer.cpp \
zxing/common/IllegalArgumentException.cpp \
zxing/common/PerspectiveTransform.cpp \
zxing/common/Str.cpp \
zxing/common/reedsolomon/GF256.cpp \
zxing/common/reedsolomon/GF256Poly.cpp \
zxing/common/reedsolomon/ReedSolomonDecoder.cpp \
zxing/common/reedsolomon/ReedSolomonException.cpp \
zxing/common/detector/MonochromeRectangleDetector.cpp \
zxing/common/PerspectiveTransform.cpp \
zxing/common/IllegalArgumentException.cpp \
zxing/common/HybridBinarizer.cpp \
zxing/common/GridSampler.cpp \
zxing/common/GreyscaleRotatedLuminanceSource.cpp \
zxing/common/GreyscaleLuminanceSource.cpp \
zxing/common/GlobalHistogramBinarizer.cpp \
zxing/common/EdgeDetector.cpp \
zxing/common/DetectorResult.cpp \
zxing/common/DecoderResult.cpp \
zxing/common/Counted.cpp \
zxing/common/CharacterSetECI.cpp \
zxing/common/BitSource.cpp \
zxing/common/BitMatrix.cpp \
zxing/common/BitArray.cpp \
zxing/common/Array.cpp \
zxing/common/detector/WhiteRectangleDetector.cpp \
zxing/oned/Code128Reader.cpp \
zxing/oned/Code39Reader.cpp \
zxing/common/detector/MonochromeRectangleDetector.cpp \
zxing/common/reedsolomon/ReedSolomonException.cpp \
zxing/common/reedsolomon/ReedSolomonDecoder.cpp \
zxing/common/reedsolomon/GenericGFPoly.cpp \
zxing/common/reedsolomon/GenericGF.cpp \
zxing/datamatrix/DataMatrixReader.cpp \
zxing/oned/UPCEReader.cpp \
zxing/oned/UPCEANReader.cpp \
zxing/oned/UPCAReader.cpp \
zxing/oned/OneDResultPoint.cpp \
zxing/oned/OneDReader.cpp \
zxing/oned/MultiFormatUPCEANReader.cpp \
zxing/oned/MultiFormatOneDReader.cpp \
zxing/oned/ITFReader.cpp \
zxing/oned/EAN13Reader.cpp \
zxing/oned/EAN8Reader.cpp \
zxing/oned/ITFReader.cpp \
zxing/oned/MultiFormatOneDReader.cpp \
zxing/oned/MultiFormatUPCEANReader.cpp \
zxing/oned/OneDReader.cpp \
zxing/oned/OneDResultPoint.cpp \
zxing/oned/UPCAReader.cpp \
zxing/oned/UPCEANReader.cpp \
zxing/oned/UPCEReader.cpp \
zxing/qrcode/ErrorCorrectionLevel.cpp \
zxing/qrcode/FormatInformation.cpp \
zxing/oned/Code128Reader.cpp \
zxing/oned/Code39Reader.cpp \
zxing/qrcode/QRCodeReader.cpp \
zxing/qrcode/Version.cpp \
zxing/qrcode/decoder/BitMatrixParser.cpp \
zxing/qrcode/decoder/DataBlock.cpp \
zxing/qrcode/decoder/DataMask.cpp \
zxing/qrcode/decoder/DecodedBitStreamParser.cpp \
zxing/qrcode/decoder/Decoder.cpp \
zxing/qrcode/decoder/Mode.cpp \
zxing/qrcode/detector/AlignmentPattern.cpp \
zxing/qrcode/detector/AlignmentPatternFinder.cpp \
zxing/qrcode/detector/Detector.cpp \
zxing/qrcode/detector/FinderPattern.cpp \
zxing/qrcode/detector/FinderPatternFinder.cpp \
zxing/qrcode/detector/FinderPatternInfo.cpp \
zxing/qrcode/detector/QREdgeDetector.cpp \
zxing/datamatrix/VersionDM.cpp \
zxing/datamatrix/DataMatrixReader.cpp \
zxing/datamatrix/decoder/BitMatrixParserDM.cpp \
zxing/datamatrix/decoder/DataBlockDM.cpp\
zxing/datamatrix/decoder/DecodedBitStreamParserDM.cpp \
zxing/datamatrix/decoder/DecoderDM.cpp \
zxing/datamatrix/detector/CornerPoint.cpp \
zxing/datamatrix/detector/DetectorDM.cpp \
zxing/datamatrix/detector/DetectorException.cpp \
zxing/datamatrix/detector/MonochromeRectangleDetectorDM.cpp \
CameraImageWrapper.cpp \
qzxing.cpp
zxing/multi/MultipleBarcodeReader.cpp \
zxing/multi/GenericMultipleBarcodeReader.cpp \
zxing/multi/ByQuadrantReader.cpp \
zxing/multi/qrcode/QRCodeMultiReader.cpp \
zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp \
zxing/multi/qrcode/detector/MultiDetector.cpp \
zxing/aztec/decoder/AztecDecoder.cpp \
zxing/aztec/detector/AztecDetector.cpp \
zxing/datamatrix/DataMatrixVersion.cpp \
zxing/datamatrix/decoder/DataMatrixDecoder.cpp \
zxing/datamatrix/decoder/DataMatrixBitMatrixParser.cpp \
zxing/datamatrix/decoder/DataMatrixDataBlock.cpp \
zxing/datamatrix/decoder/DataMatrixDecodedBitStreamParser.cpp \
zxing/datamatrix/detector/DataMatrixCornerPoint.cpp \
zxing/datamatrix/detector/DataMatrixDetector.cpp \
zxing/datamatrix/detector/DataMatrixDetectorException.cpp \
zxing/datamatrix/detector/DataMatrixMonochromeRectangleDetector.cpp \
zxing/qrcode/decoder/QRBitMatrixParser.cpp \
zxing/qrcode/decoder/QRDataBlock.cpp \
zxing/qrcode/decoder/QRDataMask.cpp \
zxing/qrcode/decoder/QRDecodedBitStreamParser.cpp \
zxing/qrcode/decoder/QRDecoder.cpp \
zxing/qrcode/decoder/QRMode.cpp \
zxing/qrcode/detector/QRAlignmentPattern.cpp \
zxing/qrcode/detector/QRAlignmentPatternFinder.cpp \
zxing/qrcode/detector/QRDetector.cpp \
zxing/qrcode/detector/QRFinderPattern.cpp \
zxing/qrcode/detector/QRFinderPatternFinder.cpp \
zxing/qrcode/detector/QRFinderPatternInfo.cpp \
zxing/qrcode/QRVersion.cpp \
zxing/qrcode/QRFormatInformation.cpp \
zxing/qrcode/QRErrorCorrectionLevel.cpp
symbian {
TARGET.UID3 = 0xE618743C
@ -189,13 +211,13 @@ symbian {
addFiles.sources = QZXing.dll
addFiles.path = !:/sys/bin
DEPLOYMENT += addFiles
#TARGET.CAPABILITY = All -TCB -AllFiles -DRM
TARGET.CAPABILITY += NetworkServices \
ReadUserData \
WriteUserData \
LocalServices \
UserEnvironment \
Location
TARGET.CAPABILITY = All -TCB -AllFiles -DRM
# TARGET.CAPABILITY += NetworkServices \
# ReadUserData \
# WriteUserData \
# LocalServices \
# UserEnvironment \
# Location
}
unix:!symbian {
@ -214,18 +236,18 @@ win32{
}
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/debian_harmattan/rules \
qtc_packaging/debian_harmattan/README \
qtc_packaging/debian_harmattan/manifest.aegis \
qtc_packaging/debian_harmattan/copyright \
qtc_packaging/debian_harmattan/control \
qtc_packaging/debian_harmattan/compat \
qtc_packaging/debian_harmattan/changelog \
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/debian_harmattan/changelog

View file

@ -1,7 +1,8 @@
#ifndef QZXING_GLOBAL_H
#define QZXING_GLOBAL_H
#include <QtCore/qglobal.h>
#include <QtCore>
#include <qglobal.h>
#if defined(QZXING_LIBRARY)
# define QZXINGSHARED_EXPORT Q_DECL_EXPORT

Binary file not shown.

View file

@ -3,100 +3,116 @@ EXPORTS
_ZN6QZXing11decodeImageE6QImage @ 2 NONAME
_ZN6QZXing11qt_metacallEN11QMetaObject4CallEiPPv @ 3 NONAME
_ZN6QZXing11qt_metacastEPKc @ 4 NONAME
_ZN6QZXing15decodingStartedEv @ 5 NONAME
_ZN6QZXing16decodingFinishedEb @ 6 NONAME
_ZN6QZXing16staticMetaObjectE @ 7 NONAME DATA 16
_ZN6QZXing19getStaticMetaObjectEv @ 8 NONAME
_ZN6QZXing8tagFoundE7QString @ 9 NONAME
_ZN6QZXingC1EP7QObject @ 10 NONAME
_ZN6QZXingC2EP7QObject @ 11 NONAME
_ZNK6QZXing10metaObjectEv @ 12 NONAME
_ZTI18CameraImageWrapper @ 13 NONAME
_ZTI6QZXing @ 14 NONAME
_ZTIN5zxing10datamatrix16DataMatrixReaderE @ 15 NONAME
_ZTIN5zxing10datamatrix17DetectorExceptionE @ 16 NONAME
_ZTIN5zxing10datamatrix7VersionE @ 17 NONAME
_ZTIN5zxing10datamatrix8DetectorE @ 18 NONAME
_ZTIN5zxing11ResultPointE @ 19 NONAME
_ZTIN5zxing12BinaryBitmapE @ 20 NONAME
_ZTIN5zxing15FormatExceptionE @ 21 NONAME
_ZTIN5zxing15HybridBinarizerE @ 22 NONAME
_ZTIN5zxing15LuminanceSourceE @ 23 NONAME
_ZTIN5zxing15ReaderExceptionE @ 24 NONAME
_ZTIN5zxing17MultiFormatReaderE @ 25 NONAME
_ZTIN5zxing17NotFoundExceptionE @ 26 NONAME
_ZTIN5zxing19ResultPointCallbackE @ 27 NONAME
_ZTIN5zxing20ReedSolomonExceptionE @ 28 NONAME
_ZTIN5zxing24GlobalHistogramBinarizerE @ 29 NONAME
_ZTIN5zxing24GreyscaleLuminanceSourceE @ 30 NONAME
_ZTIN5zxing24IllegalArgumentExceptionE @ 31 NONAME
_ZTIN5zxing31GreyscaleRotatedLuminanceSourceE @ 32 NONAME
_ZTIN5zxing4oned10EAN8ReaderE @ 33 NONAME
_ZTIN5zxing4oned10OneDReaderE @ 34 NONAME
_ZTIN5zxing4oned10UPCAReaderE @ 35 NONAME
_ZTIN5zxing4oned10UPCEReaderE @ 36 NONAME
_ZTIN5zxing4oned11EAN13ReaderE @ 37 NONAME
_ZTIN5zxing4oned12Code39ReaderE @ 38 NONAME
_ZTIN5zxing4oned12UPCEANReaderE @ 39 NONAME
_ZTIN5zxing4oned13Code128ReaderE @ 40 NONAME
_ZTIN5zxing4oned21MultiFormatOneDReaderE @ 41 NONAME
_ZTIN5zxing4oned23MultiFormatUPCEANReaderE @ 42 NONAME
_ZTIN5zxing4oned9ITFReaderE @ 43 NONAME
_ZTIN5zxing6ReaderE @ 44 NONAME
_ZTIN5zxing6ResultE @ 45 NONAME
_ZTIN5zxing6qrcode12QRCodeReaderE @ 46 NONAME
_ZTIN5zxing6qrcode14QREdgeDetectorE @ 47 NONAME
_ZTIN5zxing6qrcode22AlignmentPatternFinderE @ 48 NONAME
_ZTIN5zxing6qrcode7VersionE @ 49 NONAME
_ZTIN5zxing6qrcode8DataMaskE @ 50 NONAME
_ZTIN5zxing6qrcode8DetectorE @ 51 NONAME
_ZTIN5zxing8BitArrayE @ 52 NONAME
_ZTIN5zxing9BinarizerE @ 53 NONAME
_ZTIN5zxing9BitMatrixE @ 54 NONAME
_ZTIN5zxing9ExceptionE @ 55 NONAME
_ZTIN5zxing9GF256PolyE @ 56 NONAME
_ZTV18CameraImageWrapper @ 57 NONAME
_ZTV6QZXing @ 58 NONAME
_ZTVN5zxing10datamatrix16DataMatrixReaderE @ 59 NONAME
_ZTVN5zxing10datamatrix17DetectorExceptionE @ 60 NONAME
_ZTVN5zxing10datamatrix7VersionE @ 61 NONAME
_ZTVN5zxing10datamatrix8DetectorE @ 62 NONAME
_ZTVN5zxing11ResultPointE @ 63 NONAME
_ZTVN5zxing12BinaryBitmapE @ 64 NONAME
_ZTVN5zxing15FormatExceptionE @ 65 NONAME
_ZTVN5zxing15HybridBinarizerE @ 66 NONAME
_ZTVN5zxing15LuminanceSourceE @ 67 NONAME
_ZTVN5zxing15ReaderExceptionE @ 68 NONAME
_ZTVN5zxing17MultiFormatReaderE @ 69 NONAME
_ZTVN5zxing17NotFoundExceptionE @ 70 NONAME
_ZTVN5zxing19ResultPointCallbackE @ 71 NONAME
_ZTVN5zxing20ReedSolomonExceptionE @ 72 NONAME
_ZTVN5zxing24GlobalHistogramBinarizerE @ 73 NONAME
_ZTVN5zxing24GreyscaleLuminanceSourceE @ 74 NONAME
_ZTVN5zxing24IllegalArgumentExceptionE @ 75 NONAME
_ZTVN5zxing31GreyscaleRotatedLuminanceSourceE @ 76 NONAME
_ZTVN5zxing4oned10EAN8ReaderE @ 77 NONAME
_ZTVN5zxing4oned10OneDReaderE @ 78 NONAME
_ZTVN5zxing4oned10UPCAReaderE @ 79 NONAME
_ZTVN5zxing4oned10UPCEReaderE @ 80 NONAME
_ZTVN5zxing4oned11EAN13ReaderE @ 81 NONAME
_ZTVN5zxing4oned12Code39ReaderE @ 82 NONAME
_ZTVN5zxing4oned12UPCEANReaderE @ 83 NONAME
_ZTVN5zxing4oned13Code128ReaderE @ 84 NONAME
_ZTVN5zxing4oned21MultiFormatOneDReaderE @ 85 NONAME
_ZTVN5zxing4oned23MultiFormatUPCEANReaderE @ 86 NONAME
_ZTVN5zxing4oned9ITFReaderE @ 87 NONAME
_ZTVN5zxing6ReaderE @ 88 NONAME
_ZTVN5zxing6ResultE @ 89 NONAME
_ZTVN5zxing6qrcode12QRCodeReaderE @ 90 NONAME
_ZTVN5zxing6qrcode14QREdgeDetectorE @ 91 NONAME
_ZTVN5zxing6qrcode22AlignmentPatternFinderE @ 92 NONAME
_ZTVN5zxing6qrcode7VersionE @ 93 NONAME
_ZTVN5zxing6qrcode8DataMaskE @ 94 NONAME
_ZTVN5zxing6qrcode8DetectorE @ 95 NONAME
_ZTVN5zxing8BitArrayE @ 96 NONAME
_ZTVN5zxing9BinarizerE @ 97 NONAME
_ZTVN5zxing9BitMatrixE @ 98 NONAME
_ZTVN5zxing9ExceptionE @ 99 NONAME
_ZTVN5zxing9GF256PolyE @ 100 NONAME
_ZN6QZXing14decodeImageQMLEP7QObject @ 5 NONAME
_ZN6QZXing15decodingStartedEv @ 6 NONAME
_ZN6QZXing16decodingFinishedEb @ 7 NONAME
_ZN6QZXing16staticMetaObjectE @ 8 NONAME DATA 16
_ZN6QZXing17decodeSubImageQMLEP7QObjectdddd @ 9 NONAME
_ZN6QZXing19getStaticMetaObjectEv @ 10 NONAME
_ZN6QZXing8tagFoundE7QString @ 11 NONAME
_ZN6QZXingC1EP7QObject @ 12 NONAME
_ZN6QZXingC2EP7QObject @ 13 NONAME
_ZNK6QZXing10metaObjectEv @ 14 NONAME
_ZTI12ImageHandler @ 15 NONAME
_ZTI18CameraImageWrapper @ 16 NONAME
_ZTI6QZXing @ 17 NONAME
_ZTIN5zxing10datamatrix16DataMatrixReaderE @ 18 NONAME
_ZTIN5zxing10datamatrix17DetectorExceptionE @ 19 NONAME
_ZTIN5zxing10datamatrix7VersionE @ 20 NONAME
_ZTIN5zxing10datamatrix8DetectorE @ 21 NONAME
_ZTIN5zxing11ResultPointE @ 22 NONAME
_ZTIN5zxing12BinaryBitmapE @ 23 NONAME
_ZTIN5zxing15FormatExceptionE @ 24 NONAME
_ZTIN5zxing15HybridBinarizerE @ 25 NONAME
_ZTIN5zxing15LuminanceSourceE @ 26 NONAME
_ZTIN5zxing15ReaderExceptionE @ 27 NONAME
_ZTIN5zxing17MultiFormatReaderE @ 28 NONAME
_ZTIN5zxing17NotFoundExceptionE @ 29 NONAME
_ZTIN5zxing19ResultPointCallbackE @ 30 NONAME
_ZTIN5zxing20ReedSolomonExceptionE @ 31 NONAME
_ZTIN5zxing24GlobalHistogramBinarizerE @ 32 NONAME
_ZTIN5zxing24GreyscaleLuminanceSourceE @ 33 NONAME
_ZTIN5zxing24IllegalArgumentExceptionE @ 34 NONAME
_ZTIN5zxing31GreyscaleRotatedLuminanceSourceE @ 35 NONAME
_ZTIN5zxing4oned10EAN8ReaderE @ 36 NONAME
_ZTIN5zxing4oned10OneDReaderE @ 37 NONAME
_ZTIN5zxing4oned10UPCAReaderE @ 38 NONAME
_ZTIN5zxing4oned10UPCEReaderE @ 39 NONAME
_ZTIN5zxing4oned11EAN13ReaderE @ 40 NONAME
_ZTIN5zxing4oned12Code39ReaderE @ 41 NONAME
_ZTIN5zxing4oned12UPCEANReaderE @ 42 NONAME
_ZTIN5zxing4oned13Code128ReaderE @ 43 NONAME
_ZTIN5zxing4oned21MultiFormatOneDReaderE @ 44 NONAME
_ZTIN5zxing4oned23MultiFormatUPCEANReaderE @ 45 NONAME
_ZTIN5zxing4oned9ITFReaderE @ 46 NONAME
_ZTIN5zxing5aztec11AztecReaderE @ 47 NONAME
_ZTIN5zxing5multi13MultiDetectorE @ 48 NONAME
_ZTIN5zxing5multi16ByQuadrantReaderE @ 49 NONAME
_ZTIN5zxing5multi17QRCodeMultiReaderE @ 50 NONAME
_ZTIN5zxing5multi21MultipleBarcodeReaderE @ 51 NONAME
_ZTIN5zxing5multi24MultiFinderPatternFinderE @ 52 NONAME
_ZTIN5zxing5multi28GenericMultipleBarcodeReaderE @ 53 NONAME
_ZTIN5zxing6ReaderE @ 54 NONAME
_ZTIN5zxing6ResultE @ 55 NONAME
_ZTIN5zxing6qrcode12QRCodeReaderE @ 56 NONAME
_ZTIN5zxing6qrcode14QREdgeDetectorE @ 57 NONAME
_ZTIN5zxing6qrcode22AlignmentPatternFinderE @ 58 NONAME
_ZTIN5zxing6qrcode7VersionE @ 59 NONAME
_ZTIN5zxing6qrcode8DataMaskE @ 60 NONAME
_ZTIN5zxing6qrcode8DetectorE @ 61 NONAME
_ZTIN5zxing8BitArrayE @ 62 NONAME
_ZTIN5zxing9BinarizerE @ 63 NONAME
_ZTIN5zxing9BitMatrixE @ 64 NONAME
_ZTIN5zxing9ExceptionE @ 65 NONAME
_ZTV12ImageHandler @ 66 NONAME
_ZTV18CameraImageWrapper @ 67 NONAME
_ZTV6QZXing @ 68 NONAME
_ZTVN5zxing10datamatrix16DataMatrixReaderE @ 69 NONAME
_ZTVN5zxing10datamatrix17DetectorExceptionE @ 70 NONAME
_ZTVN5zxing10datamatrix7VersionE @ 71 NONAME
_ZTVN5zxing10datamatrix8DetectorE @ 72 NONAME
_ZTVN5zxing11ResultPointE @ 73 NONAME
_ZTVN5zxing12BinaryBitmapE @ 74 NONAME
_ZTVN5zxing15FormatExceptionE @ 75 NONAME
_ZTVN5zxing15HybridBinarizerE @ 76 NONAME
_ZTVN5zxing15LuminanceSourceE @ 77 NONAME
_ZTVN5zxing15ReaderExceptionE @ 78 NONAME
_ZTVN5zxing17MultiFormatReaderE @ 79 NONAME
_ZTVN5zxing17NotFoundExceptionE @ 80 NONAME
_ZTVN5zxing19ResultPointCallbackE @ 81 NONAME
_ZTVN5zxing20ReedSolomonExceptionE @ 82 NONAME
_ZTVN5zxing24GlobalHistogramBinarizerE @ 83 NONAME
_ZTVN5zxing24GreyscaleLuminanceSourceE @ 84 NONAME
_ZTVN5zxing24IllegalArgumentExceptionE @ 85 NONAME
_ZTVN5zxing31GreyscaleRotatedLuminanceSourceE @ 86 NONAME
_ZTVN5zxing4oned10EAN8ReaderE @ 87 NONAME
_ZTVN5zxing4oned10OneDReaderE @ 88 NONAME
_ZTVN5zxing4oned10UPCAReaderE @ 89 NONAME
_ZTVN5zxing4oned10UPCEReaderE @ 90 NONAME
_ZTVN5zxing4oned11EAN13ReaderE @ 91 NONAME
_ZTVN5zxing4oned12Code39ReaderE @ 92 NONAME
_ZTVN5zxing4oned12UPCEANReaderE @ 93 NONAME
_ZTVN5zxing4oned13Code128ReaderE @ 94 NONAME
_ZTVN5zxing4oned21MultiFormatOneDReaderE @ 95 NONAME
_ZTVN5zxing4oned23MultiFormatUPCEANReaderE @ 96 NONAME
_ZTVN5zxing4oned9ITFReaderE @ 97 NONAME
_ZTVN5zxing5aztec11AztecReaderE @ 98 NONAME
_ZTVN5zxing5multi13MultiDetectorE @ 99 NONAME
_ZTVN5zxing5multi16ByQuadrantReaderE @ 100 NONAME
_ZTVN5zxing5multi17QRCodeMultiReaderE @ 101 NONAME
_ZTVN5zxing5multi21MultipleBarcodeReaderE @ 102 NONAME
_ZTVN5zxing5multi24MultiFinderPatternFinderE @ 103 NONAME
_ZTVN5zxing5multi28GenericMultipleBarcodeReaderE @ 104 NONAME
_ZTVN5zxing6ReaderE @ 105 NONAME
_ZTVN5zxing6ResultE @ 106 NONAME
_ZTVN5zxing6qrcode12QRCodeReaderE @ 107 NONAME
_ZTVN5zxing6qrcode14QREdgeDetectorE @ 108 NONAME
_ZTVN5zxing6qrcode22AlignmentPatternFinderE @ 109 NONAME
_ZTVN5zxing6qrcode7VersionE @ 110 NONAME
_ZTVN5zxing6qrcode8DataMaskE @ 111 NONAME
_ZTVN5zxing6qrcode8DetectorE @ 112 NONAME
_ZTVN5zxing8BitArrayE @ 113 NONAME
_ZTVN5zxing9BinarizerE @ 114 NONAME
_ZTVN5zxing9BitMatrixE @ 115 NONAME
_ZTVN5zxing9ExceptionE @ 116 NONAME

View file

@ -0,0 +1,44 @@
#include "imagehandler.h"
#include <QGraphicsObject>
#include <QImage>
#include <QPainter>
#include <QStyleOptionGraphicsItem>
#include <QDebug>
ImageHandler::ImageHandler(QObject *parent) :
QObject(parent)
{
}
QImage ImageHandler::extractQImage(QObject *imageObj,
const double offsetX, const double offsetY,
const double width, const double height)
{
QGraphicsObject *item = qobject_cast<QGraphicsObject*>(imageObj);
if (!item) {
qDebug() << "Item is NULL";
return QImage();
}
QImage img(item->boundingRect().size().toSize(), QImage::Format_RGB32);
img.fill(QColor(255, 255, 255).rgb());
QPainter painter(&img);
QStyleOptionGraphicsItem styleOption;
item->paint(&painter, &styleOption);
if(offsetX == 0 && offsetY == 0 && width == 0 && height == 0)
return img;
else
{
return img.copy(offsetX, offsetY, width, height);
}
}
void ImageHandler::save(QObject *imageObj, const QString &path,
const double offsetX, const double offsetY,
const double width, const double height)
{
QImage img = extractQImage(imageObj, offsetX, offsetY, width, height);
img.save(path);
}

View file

@ -0,0 +1,23 @@
#ifndef IMAGEHANDLER_H
#define IMAGEHANDLER_H
#include <QObject>
#include <QImage>
class ImageHandler : public QObject
{
Q_OBJECT
public:
explicit ImageHandler(QObject *parent = 0);
QImage extractQImage(QObject *imageObj,
const double offsetX = 0 , const double offsetY = 0,
const double width = 0, const double height = 0);
public slots:
void save(QObject *item, const QString &path,
const double offsetX = 0, const double offsetY = 0,
const double width = 0, const double height = 0);
};
#endif // IMAGEHANDLER_H

View file

@ -3,4 +3,4 @@ The Debian Package qzxing
Comments regarding the Package
-- unknown <> Wed, 16 Nov 2011 18:02:42 +0200
-- unknown <> Mon, 14 May 2012 15:23:23 +0300

View file

@ -2,4 +2,4 @@ qzxing (0.0.1) unstable; urgency=low
* Initial Release.
-- unknown <> Wed, 16 Nov 2011 18:02:42 +0200
-- unknown <> Mon, 14 May 2012 15:23:23 +0300

View file

@ -12,4 +12,3 @@ Depends: ${shlibs:Depends}, ${misc:Depends}
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>
XSBC-Maemo-Display-Name: QZXing
XB-Maemo-Icon-26:

View file

@ -1,5 +1,5 @@
This package was debianized by unknown <> on
Wed, 16 Nov 2011 18:02:42 +0200.
Mon, 14 May 2012 15:23:23 +0300.
It was downloaded from <url://example.com>
@ -32,7 +32,7 @@ License:
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, unknown <> and
The Debian packaging is (C) 2012, unknown <> and
is licensed under the GPL, see above.

View file

@ -0,0 +1,70 @@
AutoGenerateAegisFile
<!-- Aegis manifest declares the security credentials required by an
application to run correctly. By default, a manifest file will be
created or updated automatically as a part of build.
The detection of required credentials is based on static scan of
application binaries. In some cases, the scan may not be able to
detect the correct set of permissions. If this is the case, you must
declare the credentials required by your application in this file.
To create a manifest file automatically as a part of build (DEFAULT):
* Make sure this file starts with the string "AutoGenerateAegisFile" (without quotes).
* Alternatively, it can also be completely empty.
To provide a manifest yourself:
* List the correct credentials for the application in this file.
* Some commented-out examples of often required tokens are provided.
* Ensure the path to your application binary given in
'<for path="/path/to/app" />' is correct.
* Please do not request more credentials than what your application
actually requires.
To disable manifest file:
* Replace this file with a file starting with the string "NoAegisFile" (without quotes).
* Final application package will not contain a manifest.
-->
<aegis>
<request policy="add">
<!-- Make a GSM call, send text messages (SMS). -->
<!--
<credential name="Cellular" />
-->
<!-- Access Facebook social data. -->
<!--
<credential name="FacebookSocial" />
-->
<!-- Read access to data stored in tracker. -->
<!--
<credential name="TrackerReadAccess" />
-->
<!-- Read and write access to data stored in tracker. -->
<!--
<credential name="TrackerWriteAccess" />
-->
<!-- Read Location information. -->
<!--
<credential name="Location" />
-->
<!-- Access to Audio, Multimedia and Camera. -->
<!--
<credential name="GRP::pulse-access" />
<credential name="GRP::video" />
<credential name="GRP::audio" />
-->
</request>
<for path="/opt/QZXing/bin/QZXing" />
<for path="applauncherd-launcher::/usr/bin/applauncherd.bin" id="" />
</aegis>

View file

@ -6,6 +6,7 @@
#include <zxing/MultiFormatReader.h>
#include <zxing/DecodeHints.h>
#include "CameraImageWrapper.h"
#include "imagehandler.h"
using namespace zxing;
@ -20,7 +21,9 @@ QZXing::QZXing(QObject *parent) : QObject(parent)
DecoderFormat_EAN_13 |
DecoderFormat_CODE_128 |
DecoderFormat_CODE_39 |
DecoderFormat_ITF);
DecoderFormat_ITF |
DecoderFormat_Aztec);
imageHandler = new ImageHandler();
}
void QZXing::setDecoder(DecoderFormatType hint)
@ -54,6 +57,9 @@ void QZXing::setDecoder(DecoderFormatType hint)
if(hint & DecoderFormat_ITF)
newHints.addFormat((BarcodeFormat)BarcodeFormat_ITF);
if(hint & DecoderFormat_Aztec)
newHints.addFormat((BarcodeFormat)BarcodeFormat_AZTEC);
supportedFormats = newHints.getCurrentHint();
}
@ -84,3 +90,25 @@ QString QZXing::decodeImage(QImage image)
return "";
}
}
QString QZXing::decodeImageQML(QObject *item)
{
return decodeSubImageQML(item);
}
QString QZXing::decodeSubImageQML(QObject* item,
const double offsetX, const double offsetY,
const double width, const double height)
{
if(item == NULL)
{
emit decodingFinished(false);
return "";
}
QImage img = ((ImageHandler*)imageHandler)->extractQImage(item, offsetX, offsetY, width, height);
return decodeImage(img);
}

View file

@ -32,7 +32,8 @@ public:
DecoderFormat_EAN_13 = 32,
DecoderFormat_CODE_128 = 64,
DecoderFormat_CODE_39 = 128,
DecoderFormat_ITF = 256
DecoderFormat_ITF = 256,
DecoderFormat_Aztec = 512
} ;
typedef unsigned int DecoderFormatType;
@ -49,7 +50,7 @@ public:
#if QT_VERSION >= 0x040700
static void registerQMLTypes()
{
qmlRegisterType<QZXing>("QZXing", 1, 0, "QZXing");
qmlRegisterType<QZXing>("QZXing", 1, 2, "QZXing");
}
#endif
@ -60,6 +61,19 @@ public slots:
*/
QString decodeImage(QImage image);
/**
* The decoding function accessible from QML
*/
QString decodeImageQML(QObject *item);
/**
* The decoding function accessible from QML. Able to set the decoding
* of a portion of the image.
*/
QString decodeSubImageQML(QObject* item,
const double offsetX = 0 , const double offsetY = 0,
const double width = 0, const double height = 0);
signals:
void decodingStarted();
void decodingFinished(bool succeeded);
@ -68,6 +82,7 @@ signals:
private:
void* decoder;
DecoderFormatType supportedFormats;
QObject* imageHandler;
};
#endif // QZXING_H

View file

@ -1,7 +1,5 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* BarcodeFormat.cpp
* zxing
*
* Created by Christian Brunschen on 13/05/2008.
* Copyright 2008 ZXing authors All rights reserved.
*
@ -32,7 +30,8 @@ const char *barcodeFormatNames[] = {
"EAN_13",
"CODE_128",
"CODE_39",
"ITF"
"ITF",
"AZTEC"
};
}

View file

@ -1,3 +1,4 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
#ifndef __BARCODE_FORMAT_H__
#define __BARCODE_FORMAT_H__
@ -32,7 +33,8 @@ namespace zxing {
BarcodeFormat_EAN_13,
BarcodeFormat_CODE_128,
BarcodeFormat_CODE_39,
BarcodeFormat_ITF
BarcodeFormat_ITF,
BarcodeFormat_AZTEC
} BarcodeFormat;
/* if you update the enum, please update the name in BarcodeFormat.cpp */

View file

@ -47,6 +47,7 @@ const DecodeHints DecodeHints::DEFAULT_HINT(
BARCODEFORMAT_CODE_39_HINT |
BARCODEFORMAT_ITF_HINT |
BARCODEFORMAT_DATA_MATRIX_HINT |
BARCODEFORMAT_AZTEC_HINT |
BARCODEFORMAT_QR_CODE_HINT);
DecodeHints::DecodeHints() {
@ -59,6 +60,7 @@ DecodeHints::DecodeHints(DecodeHintType init) {
void DecodeHints::addFormat(BarcodeFormat toadd) {
switch (toadd) {
case BarcodeFormat_AZTEC: hints |= BARCODEFORMAT_AZTEC_HINT; break;
case BarcodeFormat_QR_CODE: hints |= BARCODEFORMAT_QR_CODE_HINT; break;
case BarcodeFormat_DATA_MATRIX: hints |= BARCODEFORMAT_DATA_MATRIX_HINT; break;
case BarcodeFormat_UPC_E: hints |= BARCODEFORMAT_UPC_E_HINT; break;
@ -75,6 +77,7 @@ void DecodeHints::addFormat(BarcodeFormat toadd) {
bool DecodeHints::containsFormat(BarcodeFormat tocheck) const {
DecodeHintType checkAgainst;
switch (tocheck) {
case BarcodeFormat_AZTEC: checkAgainst = BARCODEFORMAT_AZTEC_HINT; break;
case BarcodeFormat_QR_CODE: checkAgainst = BARCODEFORMAT_QR_CODE_HINT; break;
case BarcodeFormat_DATA_MATRIX: checkAgainst = BARCODEFORMAT_DATA_MATRIX_HINT; break;
case BarcodeFormat_UPC_E: checkAgainst = BARCODEFORMAT_UPC_E_HINT; break;

View file

@ -45,6 +45,7 @@ class DecodeHints {
static const DecodeHintType BARCODEFORMAT_CODE_128_HINT = 1 << BarcodeFormat_CODE_128;
static const DecodeHintType BARCODEFORMAT_CODE_39_HINT = 1 << BarcodeFormat_CODE_39;
static const DecodeHintType BARCODEFORMAT_ITF_HINT = 1 << BarcodeFormat_ITF;
static const DecodeHintType BARCODEFORMAT_AZTEC_HINT = 1 << BarcodeFormat_AZTEC;
static const DecodeHintType CHARACTER_SET = 1 << 30;
static const DecodeHintType TRYHARDER_HINT = 1 << 31;

View file

@ -35,6 +35,10 @@ bool LuminanceSource::isCropSupported() const {
}
Ref<LuminanceSource> LuminanceSource::crop(int left, int top, int width, int height) {
(void)left;
(void)top;
(void)width;
(void)height;
throw IllegalArgumentException("This luminance source does not support cropping.");
}

View file

@ -22,6 +22,7 @@
#include <zxing/MultiFormatReader.h>
#include <zxing/qrcode/QRCodeReader.h>
#include <zxing/datamatrix/DataMatrixReader.h>
#include <zxing/aztec/AztecReader.h>
#include <zxing/oned/MultiFormatUPCEANReader.h>
#include <zxing/oned/MultiFormatOneDReader.h>
#include <zxing/ReaderException.h>
@ -70,6 +71,9 @@ namespace zxing {
if (hints.containsFormat(BarcodeFormat_DATA_MATRIX)) {
readers_.push_back(Ref<Reader>(new zxing::datamatrix::DataMatrixReader()));
}
if (hints.containsFormat(BarcodeFormat_AZTEC)) {
readers_.push_back(Ref<Reader>(new zxing::aztec::AztecReader()));
}
//TODO: add PDF417 here once PDF417 reader is implemented
if (addOneDReader && tryHarder) {
readers_.push_back(Ref<Reader>(new zxing::oned::MultiFormatOneDReader(hints)));

View file

@ -0,0 +1,45 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* AtztecDetecorResult.cpp
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zxing/aztec/AztecDetectorResult.h>
namespace zxing {
namespace aztec {
AztecDetectorResult::AztecDetectorResult(Ref<BitMatrix> bits, std::vector<Ref<ResultPoint> > points, bool compact, int nbDatablocks, int nbLayers)
: DetectorResult(bits, points),
compact_(compact),
nbDatablocks_(nbDatablocks),
nbLayers_(nbLayers) {
}
bool AztecDetectorResult::isCompact() {
return compact_;
}
int AztecDetectorResult::getNBDatablocks() {
return nbDatablocks_;
}
int AztecDetectorResult::getNBLayers() {
return nbLayers_;
}
}
}

View file

@ -0,0 +1,42 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* AtztecDetecorResult.h
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zxing/common/DetectorResult.h>
#ifndef ZXingWidget_AtztecDetecorResult_h
#define ZXingWidget_AtztecDetecorResult_h
namespace zxing {
namespace aztec {
class AztecDetectorResult : public DetectorResult {
private:
bool compact_;
int nbDatablocks_, nbLayers_;
public:
AztecDetectorResult(Ref<BitMatrix> bits, std::vector<Ref<ResultPoint> > points, bool compact, int nbDatablocks, int nbLayers);
bool isCompact();
int getNBDatablocks();
int getNBLayers();
};
}
}
#endif

View file

@ -0,0 +1,64 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* AztecReader.cpp
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zxing/aztec/AztecReader.h>
#include <zxing/aztec/detector/Detector.h>
#include <iostream>
namespace zxing {
namespace aztec {
AztecReader::AztecReader() : decoder_() {
// nothing
}
Ref<Result> AztecReader::decode(Ref<zxing::BinaryBitmap> image) {
Detector detector(image->getBlackMatrix());
Ref<AztecDetectorResult> detectorResult(detector.detect());
std::vector<Ref<ResultPoint> > points(detectorResult->getPoints());
Ref<DecoderResult> decoderResult(decoder_.decode(detectorResult));
Ref<Result> result(new Result(decoderResult->getText(),
decoderResult->getRawBytes(),
points,
BarcodeFormat_AZTEC));
return result;
}
Ref<Result> AztecReader::decode(Ref<BinaryBitmap> image, DecodeHints) {
//cout << "decoding with hints not supported for aztec" << "\n" << flush;
return this->decode(image);
}
AztecReader::~AztecReader() {
// nothing
}
Decoder& AztecReader::getDecoder() {
return decoder_;
}
}
}

View file

@ -0,0 +1,49 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* AztecReader.h
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zxing/Reader.h>
#include <zxing/aztec/decoder/Decoder.h>
#include <zxing/DecodeHints.h>
#ifndef ZXingWidget_AztecReader_h
#define ZXingWidget_AztecReader_h
namespace zxing {
namespace aztec {
class AztecReader : public Reader {
private:
Decoder decoder_;
protected:
Decoder &getDecoder();
public:
AztecReader();
virtual Ref<Result> decode(Ref<BinaryBitmap> image);
virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
virtual ~AztecReader();
};
}
}
#endif

View file

@ -0,0 +1,496 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* Decoder.cpp
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zxing/aztec/decoder/Decoder.h>
#ifndef NO_ICONV
#include <iconv.h>
#endif
#include <iostream>
#include <zxing/FormatException.h>
#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
#include <zxing/common/reedsolomon/ReedSolomonException.h>
#include <zxing/common/reedsolomon/GenericGF.h>
#include <zxing/common/IllegalArgumentException.h>
#include <qglobal.h>
using zxing::aztec::Decoder;
using zxing::DecoderResult;
using zxing::String;
using zxing::BitArray;
using zxing::BitMatrix;
using zxing::Ref;
using std::string;
namespace {
void add(string& result, unsigned char character) {
#ifndef NO_ICONV
char s[] = { character & 0xff };
char* ss = s;
size_t sl = sizeof(s);
char d[4];
char* ds = d;
size_t dl = sizeof(d);
iconv_t ic = iconv_open("UTF-8", "ISO-8859-1");
#if defined(Q_OS_SYMBIAN)
iconv(ic, (const char**)&ss, &sl, &ds, &dl); // for Symbian and Mingw
#else
iconv(ic, (char**)&ss, &sl, &ds, &dl); // for Harmattan
#endif
iconv_close(ic);
d[sizeof(d)-dl] = 0;
result.append(d);
#else
result.push_back(character);
#endif
}
const int NB_BITS_COMPACT[] = {
0, 104, 240, 408, 608
};
const int NB_BITS[] = {
0, 128, 288, 480, 704, 960, 1248, 1568, 1920, 2304, 2720, 3168, 3648, 4160, 4704, 5280, 5888, 6528,
7200, 7904, 8640, 9408, 10208, 11040, 11904, 12800, 13728, 14688, 15680, 16704, 17760, 18848, 19968
};
const int NB_DATABLOCK_COMPACT[] = {
0, 17, 40, 51, 76
};
const int NB_DATABLOCK[] = {
0, 21, 48, 60, 88, 120, 156, 196, 240, 230, 272, 316, 364, 416, 470, 528, 588, 652, 720, 790, 864,
940, 1020, 920, 992, 1066, 1144, 1224, 1306, 1392, 1480, 1570, 1664
};
const char* UPPER_TABLE[] = {
"CTRL_PS", " ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "CTRL_LL", "CTRL_ML", "CTRL_DL", "CTRL_BS"
};
const char* LOWER_TABLE[] = {
"CTRL_PS", " ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
"q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "CTRL_US", "CTRL_ML", "CTRL_DL", "CTRL_BS"
};
const char* MIXED_TABLE[] = {
"CTRL_PS", " ", "\1", "\2", "\3", "\4", "\5", "\6", "\7", "\b", "\t", "\n",
"\13", "\f", "\r", "\33", "\34", "\35", "\36", "\37", "@", "\\", "^", "_",
"`", "|", "~", "\177", "CTRL_LL", "CTRL_UL", "CTRL_PL", "CTRL_BS"
};
const char* PUNCT_TABLE[] = {
"", "\r", "\r\n", ". ", ", ", ": ", "!", "\"", "#", "$", "%", "&", "'", "(", ")",
"*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "[", "]", "{", "}", "CTRL_UL"
};
const char* DIGIT_TABLE[] = {
"CTRL_PS", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", ".", "CTRL_UL", "CTRL_US"
};
}
Decoder::Table Decoder::getTable(char t) {
switch (t) {
case 'L':
return LOWER;
case 'P':
return PUNCT;
case 'M':
return MIXED;
case 'D':
return DIGIT;
case 'B':
return BINARY;
case 'U':
default:
return UPPER;
}
}
const char* Decoder::getCharacter(zxing::aztec::Decoder::Table table, int code) {
switch (table) {
case UPPER:
return UPPER_TABLE[code];
case LOWER:
return LOWER_TABLE[code];
case MIXED:
return MIXED_TABLE[code];
case PUNCT:
return PUNCT_TABLE[code];
case DIGIT:
return DIGIT_TABLE[code];
default:
return "";
}
}
Decoder::Decoder() {
// nothing
}
Ref<DecoderResult> Decoder::decode(Ref<zxing::aztec::AztecDetectorResult> detectorResult) {
ddata_ = detectorResult;
// std::printf("getting bits\n");
Ref<BitMatrix> matrix = detectorResult->getBits();
if (!ddata_->isCompact()) {
// std::printf("removing lines\n");
matrix = removeDashedLines(ddata_->getBits());
}
// std::printf("extracting bits\n");
Ref<BitArray> rawbits = extractBits(matrix);
// std::printf("correcting bits\n");
Ref<BitArray> aCorrectedBits = correctBits(rawbits);
// std::printf("decoding bits\n");
Ref<String> result = getEncodedData(aCorrectedBits);
// std::printf("constructing array\n");
ArrayRef<unsigned char> arrayOut(aCorrectedBits->getSize());
for (int i = 0; i < aCorrectedBits->count(); i++) {
arrayOut[i] = (unsigned char)aCorrectedBits->get(i);
}
// std::printf("returning\n");
return Ref<DecoderResult>(new DecoderResult(arrayOut, result));
}
Ref<String> Decoder::getEncodedData(Ref<zxing::BitArray> correctedBits) {
int endIndex = codewordSize_ * ddata_->getNBDatablocks() - invertedBitCount_;
if (endIndex > (int)correctedBits->getSize()) {
// std::printf("invalid input\n");
throw FormatException("invalid input data");
}
Table lastTable = UPPER;
Table table = UPPER;
int startIndex = 0;
std::string result;
bool end = false;
bool shift = false;
bool switchShift = false;
bool binaryShift = false;
while (!end) {
// std::printf("decoooooding\n");
if (shift) {
switchShift = true;
} else {
lastTable = table;
}
int code;
if (binaryShift) {
if (endIndex - startIndex < 5) {
break;
}
int length = readCode(correctedBits, startIndex, 5);
startIndex += 5;
if (length == 0) {
if (endIndex - startIndex < 11) {
break;
}
length = readCode(correctedBits, startIndex, 11) + 31;
startIndex += 11;
}
for (int charCount = 0; charCount < length; charCount++) {
if (endIndex - startIndex < 8) {
end = true;
break;
}
code = readCode(correctedBits, startIndex, 8);
add(result, code);
startIndex += 8;
}
binaryShift = false;
} else {
if (table == BINARY) {
if (endIndex - startIndex < 8) {
end = true;
break;
}
code = readCode(correctedBits, startIndex, 8);
startIndex += 8;
add(result, code);
} else {
int size = 5;
if (table == DIGIT) {
size = 4;
}
if (endIndex - startIndex < size) {
end = true;
break;
}
code = readCode(correctedBits, startIndex, size);
startIndex += size;
const char *str = getCharacter(table, code);
std::string string(str);
if ((int)string.find("CTRL_") != -1) {
table = getTable(str[5]);
if (str[6] == 'S') {
shift = true;
if (str[5] == 'B') {
binaryShift = true;
}
}
} else {
result.append(string);
}
}
}
if (switchShift) {
table = lastTable;
shift = false;
switchShift = false;
}
}
return Ref<String>(new String(result));
}
Ref<zxing::BitArray> Decoder::correctBits(Ref<zxing::BitArray> rawbits) {
//return rawbits;
// std::printf("decoding stuff:%d datablocks in %d layers\n", ddata_->getNBDatablocks(), ddata_->getNBLayers());
Ref<GenericGF> gf = GenericGF::AZTEC_DATA_6;
if (ddata_->getNBLayers() <= 2) {
codewordSize_ = 6;
gf = GenericGF::AZTEC_DATA_6;
} else if (ddata_->getNBLayers() <= 8) {
codewordSize_ = 8;
gf = GenericGF::AZTEC_DATA_8;
} else if (ddata_->getNBLayers() <= 22) {
codewordSize_ = 10;
gf = GenericGF::AZTEC_DATA_10;
} else {
codewordSize_ = 12;
gf = GenericGF::AZTEC_DATA_12;
}
int numDataCodewords = ddata_->getNBDatablocks();
int numECCodewords;
int offset;
if (ddata_->isCompact()) {
offset = NB_BITS_COMPACT[ddata_->getNBLayers()] - numCodewords_ * codewordSize_;
numECCodewords = NB_DATABLOCK_COMPACT[ddata_->getNBLayers()] - numDataCodewords;
} else {
offset = NB_BITS[ddata_->getNBLayers()] - numCodewords_ * codewordSize_;
numECCodewords = NB_DATABLOCK[ddata_->getNBLayers()] - numDataCodewords;
}
ArrayRef<int> dataWords(numCodewords_);
for (int i = 0; i < numCodewords_; i++) {
int flag = 1;
for (int j = 1; j <= codewordSize_; j++) {
if (rawbits->get(codewordSize_ * i + codewordSize_ - j + offset)) {
dataWords[i] += flag;
}
flag <<= 1;
}
//
//
//
}
try {
// std::printf("trying reed solomon, numECCodewords:%d\n", numECCodewords);
ReedSolomonDecoder rsDecoder(gf);
rsDecoder.decode(dataWords, numECCodewords);
} catch (ReedSolomonException& rse) {
// std::printf("got reed solomon exception:%s, throwing formatexception\n", rse.what());
throw FormatException("rs decoding failed");
} catch (IllegalArgumentException& iae) {
// std::printf("illegal argument exception: %s", iae.what());
}
offset = 0;
invertedBitCount_ = 0;
Ref<BitArray> correctedBits(new BitArray(numDataCodewords * codewordSize_));
for (int i = 0; i < numDataCodewords; i++) {
bool seriesColor = false;
int seriesCount = 0;
int flag = 1 << (codewordSize_ - 1);
for (int j = 0; j < codewordSize_; j++) {
bool color = (dataWords[i] & flag) == flag;
if (seriesCount == codewordSize_ - 1) {
if (color == seriesColor) {
throw FormatException("bit was not inverted");
}
seriesColor = false;
seriesCount = 0;
offset++;
invertedBitCount_++;
} else {
if (seriesColor == color) {
seriesCount++;
} else {
seriesCount = 1;
seriesColor = color;
}
if (color) correctedBits->set(i * codewordSize_ + j - offset);
}
flag = (unsigned int)flag >> 1;
}
}
return correctedBits;
}
Ref<BitArray> Decoder::extractBits(Ref<zxing::BitMatrix> matrix) {
std::vector<bool> rawbits;
if (ddata_->isCompact()) {
if (ddata_->getNBLayers() > 5) { //NB_BITS_COMPACT length
throw FormatException("data is too long");
}
rawbits = std::vector<bool>(NB_BITS_COMPACT[ddata_->getNBLayers()]);
numCodewords_ = NB_DATABLOCK_COMPACT[ddata_->getNBLayers()];
} else {
if (ddata_->getNBLayers() > 33) { //NB_BITS length
throw FormatException("data is too long");
}
rawbits = std::vector<bool>(NB_BITS[ddata_->getNBLayers()]);
numCodewords_ = NB_DATABLOCK[ddata_->getNBLayers()];
}
int layer = ddata_->getNBLayers();
int size = matrix->getHeight();
int rawbitsOffset = 0;
int matrixOffset = 0;
while (layer != 0) {
int flip = 0;
for (int i = 0; i < 2 * size - 4; i++) {
rawbits[rawbitsOffset + i] = matrix->get(matrixOffset + flip, matrixOffset + i / 2);
rawbits[rawbitsOffset + 2 * size - 4 + i] = matrix->get(matrixOffset + i / 2, matrixOffset + size - 1 - flip);
flip = (flip + 1) % 2;
}
flip = 0;
for (int i = 2 * size + 1; i > 5; i--) {
rawbits[rawbitsOffset + 4 * size - 8 + (2 * size - i) + 1] =
matrix->get(matrixOffset + size - 1 - flip, matrixOffset + i / 2 - 1);
rawbits[rawbitsOffset + 6 * size - 12 + (2 * size - i) + 1] =
matrix->get(matrixOffset + i / 2 - 1, matrixOffset + flip);
flip = (flip + 1) % 2;
}
matrixOffset += 2;
rawbitsOffset += 8 * size - 16;
layer--;
size -= 4;
}
Ref<BitArray> returnValue(new BitArray(rawbits.size()));
for (int i = 0; i < (int)rawbits.size(); i++) {
if (rawbits[i]) returnValue->set(i);
}
return returnValue;
}
Ref<BitMatrix> Decoder::removeDashedLines(Ref<zxing::BitMatrix> matrix) {
int nbDashed = 1 + 2 * ((matrix->getWidth() - 1) / 2 / 16);
Ref<BitMatrix> newMatrix(new BitMatrix(matrix->getWidth() - nbDashed, matrix->getHeight() - nbDashed));
int nx = 0;
for (int x = 0; x < (int)matrix->getWidth(); x++) {
if ((matrix->getWidth() / 2 - x) % 16 == 0) {
continue;
}
int ny = 0;
for (int y = 0; y < (int)matrix->getHeight(); y++) {
if ((matrix->getWidth() / 2 - y) % 16 == 0) {
continue;
}
if (matrix->get(x, y)) {
newMatrix->set(nx, ny);
}
ny++;
}
nx++;
}
return newMatrix;
}
int Decoder::readCode(Ref<zxing::BitArray> rawbits, int startIndex, int length) {
int res = 0;
for (int i = startIndex; i < startIndex + length; i++) {
res <<= 1;
if (rawbits->get(i)) {
res ++;
}
}
return res;
}

View file

@ -0,0 +1,63 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* Decoder.h
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zxing/common/DecoderResult.h>
#include <zxing/common/BitMatrix.h>
#include <zxing/common/Str.h>
#include <zxing/aztec/AztecDetectorResult.h>
namespace zxing {
namespace aztec {
class Decoder : public Counted {
private:
enum Table {
UPPER,
LOWER,
MIXED,
DIGIT,
PUNCT,
BINARY
};
static Table getTable(char t);
static const char* getCharacter(Table table, int code);
int numCodewords_;
int codewordSize_;
Ref<AztecDetectorResult> ddata_;
int invertedBitCount_;
Ref<String> getEncodedData(Ref<BitArray> correctedBits);
Ref<BitArray> correctBits(Ref<BitArray> rawbits);
Ref<BitArray> extractBits(Ref<BitMatrix> matrix);
static Ref<BitMatrix> removeDashedLines(Ref<BitMatrix> matrix);
static int readCode(Ref<BitArray> rawbits, int startIndex, int length);
public:
Decoder();
Ref<DecoderResult> decode(Ref<AztecDetectorResult> detectorResult);
};
}
}

View file

@ -0,0 +1,541 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* Detector.cpp
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <zxing/aztec/detector/Detector.h>
#include <zxing/common/GridSampler.h>
#include <zxing/common/detector/WhiteRectangleDetector.h>
#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
#include <zxing/common/reedsolomon/ReedSolomonException.h>
#include <zxing/common/reedsolomon/GenericGF.h>
#include <iostream>
#include <cmath>
#include <zxing/NotFoundException.h>
using zxing::aztec::Detector;
using zxing::aztec::Point;
using zxing::aztec::AztecDetectorResult;
using zxing::Ref;
using zxing::ResultPoint;
using zxing::BitArray;
using zxing::BitMatrix;
Detector::Detector(Ref<BitMatrix> image):
image_(image),
nbLayers_(0),
nbDataBlocks_(0),
nbCenterLayers_(0) {
}
// using namespace std;
Ref<AztecDetectorResult> Detector::detect() {
Ref<Point> pCenter = getMatrixCenter();
std::vector<Ref<Point> > bullEyeCornerPoints = getBullEyeCornerPoints(pCenter);
extractParameters(bullEyeCornerPoints);
std::vector<Ref<ResultPoint> > corners = getMatrixCornerPoints(bullEyeCornerPoints);
Ref<BitMatrix> bits = sampleGrid(image_, corners[shift_%4], corners[(shift_+3)%4], corners[(shift_+2)%4], corners[(shift_+1)%4]);
// std::printf("------------\ndetected: compact:%s, nbDataBlocks:%d, nbLayers:%d\n------------\n",compact_?"YES":"NO", nbDataBlocks_, nbLayers_);
return Ref<AztecDetectorResult>(new AztecDetectorResult(bits, corners, compact_, nbDataBlocks_, nbLayers_));
}
void Detector::extractParameters(std::vector<Ref<Point> > bullEyeCornerPoints) {
// get the bits around the bull's eye
Ref<BitArray> resab = sampleLine(bullEyeCornerPoints[0], bullEyeCornerPoints[1], 2*nbCenterLayers_+1);
Ref<BitArray> resbc = sampleLine(bullEyeCornerPoints[1], bullEyeCornerPoints[2], 2*nbCenterLayers_+1);
Ref<BitArray> rescd = sampleLine(bullEyeCornerPoints[2], bullEyeCornerPoints[3], 2*nbCenterLayers_+1);
Ref<BitArray> resda = sampleLine(bullEyeCornerPoints[3], bullEyeCornerPoints[0], 2*nbCenterLayers_+1);
// determin the orientation of the matrix
if (resab->get(0) && resab->get(2 * nbCenterLayers_)) {
shift_ = 0;
} else if (resbc->get(0) && resbc->get(2 * nbCenterLayers_)) {
shift_ = 1;
} else if (rescd->get(0) && rescd->get(2 * nbCenterLayers_)) {
shift_ = 2;
} else if (resda->get(0) && resda->get(2 * nbCenterLayers_)) {
shift_ = 3;
} else {
// std::printf("could not detemine orientation\n");
throw ReaderException("could not determine orientation");
}
//d a
//
//c b
//flatten the bits in a single array
Ref<BitArray> parameterData(new BitArray(compact_?28:40));
Ref<BitArray> shiftedParameterData(new BitArray(compact_?28:40));
if (compact_) {
for (int i = 0; i < 7; i++) {
if (resab->get(2+i)) shiftedParameterData->set(i);
if (resbc->get(2+i)) shiftedParameterData->set(i+7);
if (rescd->get(2+i)) shiftedParameterData->set(i+14);
if (resda->get(2+i)) shiftedParameterData->set(i+21);
}
for (int i = 0; i < 28; i++) {
if (shiftedParameterData->get((i+shift_*7)%28)) parameterData->set(i);
}
} else {
for (int i = 0; i < 11; i++) {
if (i < 5) {
if (resab->get(2+i)) shiftedParameterData->set(i);
if (resbc->get(2+i)) shiftedParameterData->set(i+10);
if (rescd->get(2+i)) shiftedParameterData->set(i+20);
if (resda->get(2+i)) shiftedParameterData->set(i+30);
}
if (i > 5) {
if (resab->get(2+i)) shiftedParameterData->set(i-1);
if (resbc->get(2+i)) shiftedParameterData->set(i+10-1);
if (rescd->get(2+i)) shiftedParameterData->set(i+20-1);
if (resda->get(2+i)) shiftedParameterData->set(i+30-1);
}
}
for (int i = 0; i < 40; i++) {
if (shiftedParameterData->get((i+shift_*10)%40)) parameterData->set(i);
}
}
correctParameterData(parameterData, compact_);
getParameters(parameterData);
}
std::vector<Ref<ResultPoint> > Detector::getMatrixCornerPoints(std::vector<Ref<Point> > bullEyeCornerPoints) {
float ratio = (2 * nbLayers_ + (nbLayers_ > 4 ? 1 : 0) + (nbLayers_ - 4) / 8) / (2.0f * nbCenterLayers_);
int dx = bullEyeCornerPoints[0]->x - bullEyeCornerPoints[2]->x;
dx += dx > 0 ? 1 : -1;
int dy = bullEyeCornerPoints[0]->y - bullEyeCornerPoints[2]->y;
dy += dy > 0 ? 1 : -1;
int targetcx = ROUND(bullEyeCornerPoints[2]->x - ratio * dx);
int targetcy = ROUND(bullEyeCornerPoints[2]->y - ratio * dy);
int targetax = ROUND(bullEyeCornerPoints[0]->x + ratio * dx);
int targetay = ROUND(bullEyeCornerPoints[0]->y + ratio * dy);
dx = bullEyeCornerPoints[1]->x - bullEyeCornerPoints[3]->x;
dx += dx > 0 ? 1 : -1;
dy = bullEyeCornerPoints[1]->y - bullEyeCornerPoints[3]->y;
dy += dy > 0 ? 1 : -1;
int targetdx = ROUND(bullEyeCornerPoints[3]->x - ratio * dx);
int targetdy = ROUND(bullEyeCornerPoints[3]->y - ratio * dy);
int targetbx = ROUND(bullEyeCornerPoints[1]->x + ratio * dx);
int targetby = ROUND(bullEyeCornerPoints[1]->y + ratio * dy);
if (!isValid(targetax, targetay) ||
!isValid(targetbx, targetby) ||
!isValid(targetcx, targetcy) ||
!isValid(targetdx, targetdy)) {
throw ReaderException("matrix extends over image bounds");
}
std::vector<Ref<ResultPoint> > returnValue;
returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetax, targetay)));
returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetbx, targetby)));
returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetcx, targetcy)));
returnValue.push_back(Ref<ResultPoint>(new ResultPoint(targetdx, targetdy)));
return returnValue;
}
void Detector::correctParameterData(Ref<zxing::BitArray> parameterData, bool compact) {
int numCodewords;
int numDataCodewords;
if (compact) {
numCodewords = 7;
numDataCodewords = 2;
} else {
numCodewords = 10;
numDataCodewords = 4;
}
int numECCodewords = numCodewords - numDataCodewords;
ArrayRef<int> parameterWords(new Array<int>(numCodewords));
int codewordSize = 4;
for (int i = 0; i < numCodewords; i++) {
int flag = 1;
for (int j = 1; j <= codewordSize; j++) {
if (parameterData->get(codewordSize*i + codewordSize - j)) {
parameterWords[i] += flag;
}
flag <<= 1;
}
}
try {
// std::printf("parameter data reed solomon\n");
ReedSolomonDecoder rsDecoder(GenericGF::AZTEC_PARAM);
rsDecoder.decode(parameterWords, numECCodewords);
} catch (ReedSolomonException& e) {
// std::printf("reed solomon decoding failed\n");
throw ReaderException("failed to decode parameter data");
}
parameterData->clear();
for (int i = 0; i < numDataCodewords; i++) {
int flag = 1;
for (int j = 1; j <= codewordSize; j++) {
if ((parameterWords[i] & flag) == flag) {
parameterData->set(i*codewordSize+codewordSize-j);
}
flag <<= 1;
}
}
}
std::vector<Ref<Point> > Detector::getBullEyeCornerPoints(Ref<zxing::aztec::Point> pCenter) {
Ref<Point> pina = pCenter;
Ref<Point> pinb = pCenter;
Ref<Point> pinc = pCenter;
Ref<Point> pind = pCenter;
bool color = true;
for (nbCenterLayers_ = 1; nbCenterLayers_ < 9; nbCenterLayers_++) {
Ref<Point> pouta = getFirstDifferent(pina, color, 1, -1);
Ref<Point> poutb = getFirstDifferent(pinb, color, 1, 1);
Ref<Point> poutc = getFirstDifferent(pinc, color, -1, 1);
Ref<Point> poutd = getFirstDifferent(pind, color, -1, -1);
//d a
//
//c b
if (nbCenterLayers_ > 2) {
float q = distance(poutd, pouta) * nbCenterLayers_ / (distance(pind, pina) * (nbCenterLayers_ + 2));
if (q < 0.75 || q > 1.25 || !isWhiteOrBlackRectangle(pouta, poutb, poutc, poutd)) {
break;
}
}
pina = pouta;
pinb = poutb;
pinc = poutc;
pind = poutd;
color = !color;
}
if (nbCenterLayers_ != 5 && nbCenterLayers_ != 7) {
throw ReaderException("encountered wrong bullseye ring count");
}
compact_ = nbCenterLayers_ == 5;
float ratio = 0.75f*2 / (2*nbCenterLayers_-3);
int dx = pina->x - pind->x;
int dy = pina->y - pinc->y;
int targetcx = ROUND(pinc->x - ratio * dx);
int targetcy = ROUND(pinc->y - ratio * dy);
int targetax = ROUND(pina->x + ratio * dx);
int targetay = ROUND(pina->y + ratio * dy);
dx = pinb->x - pind->x;
dy = pinb->y - pind->y;
int targetdx = ROUND(pind->x - ratio * dx);
int targetdy = ROUND(pind->y - ratio * dy);
int targetbx = ROUND(pinb->x + ratio * dx);
int targetby = ROUND(pinb->y + ratio * dy);
if (!isValid(targetax, targetay) ||
!isValid(targetbx, targetby) ||
!isValid(targetcx, targetcy) ||
!isValid(targetdx, targetdy)) {
throw ReaderException("bullseye extends over image bounds");
}
std::vector<Ref<Point> > returnValue;
returnValue.push_back(Ref<Point>(new Point(targetax, targetay)));
returnValue.push_back(Ref<Point>(new Point(targetbx, targetby)));
returnValue.push_back(Ref<Point>(new Point(targetcx, targetcy)));
returnValue.push_back(Ref<Point>(new Point(targetdx, targetdy)));
return returnValue;
}
Ref<Point> Detector::getMatrixCenter() {
Ref<ResultPoint> pointA, pointB, pointC, pointD;
try {
std::vector<Ref<ResultPoint> > cornerPoints = WhiteRectangleDetector(image_).detect();
pointA = cornerPoints[0];
pointB = cornerPoints[1];
pointC = cornerPoints[2];
pointD = cornerPoints[3];
} catch (NotFoundException& e) {
int cx = image_->getWidth() / 2;
int cy = image_->getHeight() / 2;
pointA = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy-15/2)), false, 1, -1)->toResultPoint();
pointB = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy+15/2)), false, 1, 1)->toResultPoint();
pointC = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy+15/2)), false, -1, -1)->toResultPoint();
pointD = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy-15/2)), false, -1, -1)->toResultPoint();
}
int cx = ROUND((pointA->getX() + pointD->getX() + pointB->getX() + pointC->getX()) / 4);
int cy = ROUND((pointA->getY() + pointD->getY() + pointB->getY() + pointC->getY()) / 4);
try {
std::vector<Ref<ResultPoint> > cornerPoints = WhiteRectangleDetector(image_, 15, cx, cy).detect();
pointA = cornerPoints[0];
pointB = cornerPoints[1];
pointC = cornerPoints[2];
pointD = cornerPoints[3];
} catch (NotFoundException& e) {
pointA = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy-15/2)), false, 1, -1)->toResultPoint();
pointB = getFirstDifferent(Ref<Point>(new Point(cx+15/2, cy+15/2)), false, 1, 1)->toResultPoint();
pointC = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy+15/2)), false, -1, -1)->toResultPoint();
pointD = getFirstDifferent(Ref<Point>(new Point(cx-15/2, cy-15/2)), false, -1, -1)->toResultPoint();
}
cx = ROUND((pointA->getX() + pointD->getX() + pointB->getX() + pointC->getX()) / 4);
cy = ROUND((pointA->getY() + pointD->getY() + pointB->getY() + pointC->getY()) / 4);
return Ref<Point>(new Point(cx, cy));
}
Ref<BitMatrix> Detector::sampleGrid(Ref<zxing::BitMatrix> image,
Ref<zxing::ResultPoint> topLeft,
Ref<zxing::ResultPoint> bottomLeft,
Ref<zxing::ResultPoint> bottomRight,
Ref<zxing::ResultPoint> topRight) {
int dimension;
if (compact_) {
dimension = 4 * nbLayers_+11;
} else {
if (nbLayers_ <= 4) {
dimension = 4 * nbLayers_ + 15;
} else {
dimension = 4 * nbLayers_ + 2 * ((nbLayers_-4)/8 + 1) + 15;
}
}
GridSampler sampler = GridSampler::getInstance();
return sampler.sampleGrid(image,
dimension,
0.5f,
0.5f,
dimension - 0.5f,
0.5f,
dimension - 0.5f,
dimension - 0.5f,
0.5f,
dimension - 0.5f,
topLeft->getX(),
topLeft->getY(),
topRight->getX(),
topRight->getY(),
bottomRight->getX(),
bottomRight->getY(),
bottomLeft->getX(),
bottomLeft->getY());
}
void Detector::getParameters(Ref<zxing::BitArray> parameterData) {
nbLayers_ = 0;
nbDataBlocks_ = 0;
int nbBitsForNbLayers;
int nbBitsForNbDatablocks;
if (compact_) {
nbBitsForNbLayers = 2;
nbBitsForNbDatablocks = 6;
} else {
nbBitsForNbLayers = 5;
nbBitsForNbDatablocks = 11;
}
for (int i = 0; i < nbBitsForNbLayers; i++) {
nbLayers_ <<= 1;
if (parameterData->get(i)) {
nbLayers_ += 1;
}
}
for (int i = nbBitsForNbLayers; i < nbBitsForNbLayers + nbBitsForNbDatablocks; i++) {
nbDataBlocks_ <<= 1;
if (parameterData->get(i)) {
nbDataBlocks_ += 1;
}
}
nbLayers_ ++;
nbDataBlocks_ ++;
}
Ref<BitArray> Detector::sampleLine(Ref<zxing::aztec::Point> p1, Ref<zxing::aztec::Point> p2, int size) {
Ref<BitArray> res(new BitArray(size));
float d = distance(p1, p2);
float moduleSize = d / (size-1);
float dx = moduleSize * (p2->x - p1->x)/d;
float dy = moduleSize * (p2->y - p1->y)/d;
float px = p1->x;
float py = p1->y;
for (int i = 0; i < size; i++) {
if (image_->get(ROUND(px), ROUND(py))) res->set(i);
px += dx;
py += dy;
}
return res;
}
bool Detector::isWhiteOrBlackRectangle(Ref<zxing::aztec::Point> p1,
Ref<zxing::aztec::Point> p2,
Ref<zxing::aztec::Point> p3,
Ref<zxing::aztec::Point> p4) {
int corr = 3;
p1 = new Point(p1->x - corr, p1->y + corr);
p2 = new Point(p2->x - corr, p2->y - corr);
p3 = new Point(p3->x + corr, p3->y - corr);
p4 = new Point(p4->x + corr, p4->y + corr);
int cInit = getColor(p4, p1);
if (cInit == 0) {
return false;
}
int c = getColor(p1, p2);
if (c != cInit) {
return false;
}
c = getColor(p2, p3);
if (c != cInit) {
return false;
}
c = getColor(p3, p4);
if (c != cInit) {
return false;
}
return true;
}
int Detector::getColor(Ref<zxing::aztec::Point> p1, Ref<zxing::aztec::Point> p2) {
float d = distance(p1, p2);
float dx = (p2->x - p1->x) / d;
float dy = (p2->y - p1->y) / d;
int error = 0;
float px = p1->x;
float py = p1->y;
bool colorModel = image_->get(p1->x, p1->y);
for (int i = 0; i < d; i++) {
px += dx;
py += dy;
if (image_->get(ROUND(px), ROUND(py)) != colorModel) {
error ++;
}
}
float errRatio = (float)error/d;
if (errRatio > 0.1 && errRatio < 0.9) {
return 0;
}
if (errRatio <= 0.1) {
return colorModel?1:-1;
} else {
return colorModel?-1:1;
}
}
Ref<Point> Detector::getFirstDifferent(Ref<zxing::aztec::Point> init, bool color, int dx, int dy) {
int x = init->x + dx;
int y = init->y + dy;
while (isValid(x, y) && image_->get(x, y) == color) {
x += dx;
y += dy;
}
x -= dx;
y -= dy;
while (isValid(x, y) && image_->get(x, y) == color) {
x += dx;
}
x -= dx;
while (isValid(x, y) && image_->get(x, y) == color) {
y += dy;
}
y -= dy;
return Ref<Point>(new Point(x, y));
}
bool Detector::isValid(int x, int y) {
return x >= 0 && x < (int)image_->getWidth() && y > 0 && y < (int)image_->getHeight();
}
float Detector::distance(Ref<zxing::aztec::Point> a, Ref<zxing::aztec::Point> b) {
return sqrtf((float)((a->x - b->x) * (a->x - b->x) + (a->y - b->y) * (a->y - b->y)));
}

View file

@ -0,0 +1,87 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* Detector.h
* zxing
*
* Created by Lukas Stabe on 08/02/2012.
* Copyright 2012 ZXing authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <vector>
#include <zxing/common/BitArray.h>
#include <zxing/ResultPoint.h>
#include <zxing/common/BitMatrix.h>
#include <zxing/DecodeHints.h>
#include <zxing/aztec/AztecDetectorResult.h>
#define ROUND(a) ((int)(a + 0.5f))
namespace zxing {
namespace aztec {
class Point : public Counted {
public:
int x;
int y;
Ref<ResultPoint> toResultPoint() {
return Ref<ResultPoint>(new ResultPoint(x, y));
}
Point(int ax, int ay):x(ax),y(ay) {};
};
class Detector : public Counted {
private:
Ref<BitMatrix> image_;
bool compact_;
int nbLayers_;
int nbDataBlocks_;
int nbCenterLayers_;
int shift_;
void extractParameters(std::vector<Ref<Point> > bullEyeCornerPoints);
std::vector<Ref<ResultPoint> > getMatrixCornerPoints(std::vector<Ref<Point> > bullEyeCornerPoints);
static void correctParameterData(Ref<BitArray> parameterData, bool compact);
std::vector<Ref<Point> > getBullEyeCornerPoints(Ref<Point> pCenter);
Ref<Point> getMatrixCenter();
Ref<BitMatrix> sampleGrid(Ref<BitMatrix> image,
Ref<ResultPoint> topLeft,
Ref<ResultPoint> bottomLeft,
Ref<ResultPoint> bottomRight,
Ref<ResultPoint> topRight);
void getParameters(Ref<BitArray> parameterData);
Ref<BitArray> sampleLine(Ref<Point> p1, Ref<Point> p2, int size);
bool isWhiteOrBlackRectangle(Ref<Point> p1,
Ref<Point> p2,
Ref<Point> p3,
Ref<Point> p4);
int getColor(Ref<Point> p1, Ref<Point> p2);
Ref<Point> getFirstDifferent(Ref<Point> init, bool color, int dx, int dy);
bool isValid(int x, int y);
static float distance(Ref<Point> a, Ref<Point> b);
public:
Detector(Ref<BitMatrix> image);
Ref<AztecDetectorResult> detect();
};
}
}

View file

@ -1,8 +1,5 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* BitArray.cpp
* zxing
*
* Copyright 2010 ZXing authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -19,32 +16,14 @@
*/
#include <zxing/common/BitArray.h>
#include <iostream>
#include <limits>
using namespace std;
namespace zxing {
static unsigned int logDigits(unsigned digits) {
unsigned log = 0;
unsigned val = 1;
while (val < digits) {
log++;
val <<= 1;
}
return log;
}
const unsigned int BitArray::bitsPerWord_ = numeric_limits<unsigned int>::digits;
const unsigned int BitArray::logBits_ = logDigits(bitsPerWord_);
const unsigned int BitArray::bitsMask_ = (1 << logBits_) - 1;
size_t BitArray::wordsForBits(size_t bits) {
int arraySize = bits >> logBits_;
if (bits - (arraySize << logBits_) != 0) {
arraySize++;
}
int arraySize = (bits + bitsPerWord_ - 1) >> logBits_;
return arraySize;
}

View file

@ -3,9 +3,6 @@
#define __BIT_ARRAY_H__
/*
* BitArray.h
* zxing
*
* Copyright 2010 ZXing authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -24,17 +21,26 @@
#include <zxing/common/Counted.h>
#include <zxing/common/IllegalArgumentException.h>
#include <vector>
#include <iostream>
#include <limits>
namespace zxing {
#define ZX_LOG_DIGITS(digits) \
((digits == 8) ? 3 : \
((digits == 16) ? 4 : \
((digits == 32) ? 5 : \
((digits == 64) ? 6 : \
((digits == 128) ? 7 : \
(-1))))))
class BitArray : public Counted {
private:
size_t size_;
std::vector<unsigned int> bits_;
static const unsigned int bitsPerWord_;
static const unsigned int logBits_;
static const unsigned int bitsMask_;
static const unsigned int bitsPerWord_ =
std::numeric_limits<unsigned int>::digits;
static const unsigned int logBits_ = ZX_LOG_DIGITS(bitsPerWord_);
static const unsigned int bitsMask_ = (1 << logBits_) - 1;
static size_t wordsForBits(size_t bits);
explicit BitArray();

View file

@ -1,8 +1,5 @@
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
* BitMatrix.cpp
* zxing
*
* Copyright 2010 ZXing authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -35,26 +32,24 @@ using zxing::Ref;
namespace {
size_t wordsForSize(size_t width,
size_t height,
unsigned int bitsPerWord,
unsigned int logBits) {
size_t bits = width * height;
int arraySize = bits >> logBits;
if (bits - (arraySize << logBits) != 0) {
arraySize++;
}
int arraySize = (bits + bitsPerWord - 1) >> logBits;
return arraySize;
}
}
BitMatrix::BitMatrix(size_t dimension) :
width_(dimension), height_(dimension), words_(0), bits_(NULL) {
words_ = wordsForSize(width_, height_, logBits);
words_ = wordsForSize(width_, height_, bitsPerWord, logBits);
bits_ = new unsigned int[words_];
clear();
}
BitMatrix::BitMatrix(size_t width, size_t height) :
width_(width), height_(height), words_(0), bits_(NULL) {
words_ = wordsForSize(width_, height_, logBits);
words_ = wordsForSize(width_, height_, bitsPerWord, logBits);
bits_ = new unsigned int[words_];
clear();
}

View file

@ -17,6 +17,7 @@
#include <zxing/common/CharacterSetECI.h>
#include <zxing/common/IllegalArgumentException.h>
#include <zxing/FormatException.h>
using std::string;
@ -28,56 +29,72 @@ std::map<std::string, CharacterSetECI*> CharacterSetECI::NAME_TO_ECI;
const bool CharacterSetECI::inited = CharacterSetECI::init_tables();
#define ADD_CHARACTER_SET(VALUES, STRINGS) \
{ static int values[] = {VALUES, -1}; \
static char const* strings[] = {STRINGS, 0}; \
addCharacterSet(values, strings); }
#define XC ,
bool CharacterSetECI::init_tables() {
addCharacterSet(0, "Cp437");
{ char const* s[] = {"ISO8859_1", "ISO-8859-1", 0};
addCharacterSet(1, s); }
addCharacterSet(2, "Cp437");
{ char const* s[] = {"ISO8859_1", "ISO-8859-1", 0};
addCharacterSet(3, s); }
addCharacterSet(4, "ISO8859_2");
addCharacterSet(5, "ISO8859_3");
addCharacterSet(6, "ISO8859_4");
addCharacterSet(7, "ISO8859_5");
addCharacterSet(8, "ISO8859_6");
addCharacterSet(9, "ISO8859_7");
addCharacterSet(10, "ISO8859_8");
addCharacterSet(11, "ISO8859_9");
addCharacterSet(12, "ISO8859_10");
addCharacterSet(13, "ISO8859_11");
addCharacterSet(15, "ISO8859_13");
addCharacterSet(16, "ISO8859_14");
addCharacterSet(17, "ISO8859_15");
addCharacterSet(18, "ISO8859_16");
{ char const* s[] = {"SJIS", "Shift_JIS", 0};
addCharacterSet(20, s ); }
ADD_CHARACTER_SET(0 XC 2, "Cp437");
ADD_CHARACTER_SET(1 XC 3, "ISO8859_1" XC "ISO-8859-1");
ADD_CHARACTER_SET(4, "ISO8859_2" XC "ISO-8859-2");
ADD_CHARACTER_SET(5, "ISO8859_3" XC "ISO-8859-3");
ADD_CHARACTER_SET(6, "ISO8859_4" XC "ISO-8859-4");
ADD_CHARACTER_SET(7, "ISO8859_5" XC "ISO-8859-5");
ADD_CHARACTER_SET(8, "ISO8859_6" XC "ISO-8859-6");
ADD_CHARACTER_SET(9, "ISO8859_7" XC "ISO-8859-7");
ADD_CHARACTER_SET(10, "ISO8859_8" XC "ISO-8859-8");
ADD_CHARACTER_SET(11, "ISO8859_9" XC "ISO-8859-9");
ADD_CHARACTER_SET(12, "ISO8859_10" XC "ISO-8859-10");
ADD_CHARACTER_SET(13, "ISO8859_11" XC "ISO-8859-11");
ADD_CHARACTER_SET(15, "ISO8859_13" XC "ISO-8859-13");
ADD_CHARACTER_SET(16, "ISO8859_14" XC "ISO-8859-14");
ADD_CHARACTER_SET(17, "ISO8859_15" XC "ISO-8859-15");
ADD_CHARACTER_SET(18, "ISO8859_16" XC "ISO-8859-16");
ADD_CHARACTER_SET(20, "SJIS" XC "Shift_JIS");
ADD_CHARACTER_SET(21, "Cp1250" XC "windows-1250");
ADD_CHARACTER_SET(22, "Cp1251" XC "windows-1251");
ADD_CHARACTER_SET(23, "Cp1252" XC "windows-1252");
ADD_CHARACTER_SET(24, "Cp1256" XC "windows-1256");
ADD_CHARACTER_SET(25, "UnicodeBigUnmarked" XC "UTF-16BE" XC "UnicodeBig");
ADD_CHARACTER_SET(26, "UTF8" XC "UTF-8");
ADD_CHARACTER_SET(27 XC 170, "ASCII" XC "US-ASCII");
ADD_CHARACTER_SET(28, "Big5");
ADD_CHARACTER_SET(29, "GB18030" XC "GB2312" XC "EUC_CN" XC "GBK");
ADD_CHARACTER_SET(30, "EUC_KR" XC "EUC-KR");
return true;
}
CharacterSetECI::CharacterSetECI(int value, char const* encodingName_)
: ECI(value), encodingName(encodingName_) {}
#undef XC
char const* CharacterSetECI::getEncodingName() {
return encodingName;
CharacterSetECI::CharacterSetECI(int const* values,
char const* const* names)
: values_(values), names_(names) {
for(int const* values = values_; *values != -1; values++) {
VALUE_TO_ECI[*values] = this;
}
for(char const* const* names = names_; *names; names++) {
NAME_TO_ECI[string(*names)] = this;
}
}
void CharacterSetECI::addCharacterSet(int value, char const* encodingName) {
CharacterSetECI* eci = new CharacterSetECI(value, encodingName);
VALUE_TO_ECI[value] = eci; // can't use valueOf
NAME_TO_ECI[string(encodingName)] = eci;
char const* CharacterSetECI::name() const {
return names_[0];
}
void CharacterSetECI::addCharacterSet(int value, char const* const* encodingNames) {
CharacterSetECI* eci = new CharacterSetECI(value, encodingNames[0]);
VALUE_TO_ECI[value] = eci;
for (int i = 0; encodingNames[i]; i++) {
NAME_TO_ECI[string(encodingNames[i])] = eci;
int CharacterSetECI::getValue() const {
return values_[0];
}
void CharacterSetECI::addCharacterSet(int const* values, char const* const* names) {
new CharacterSetECI(values, names);
}
CharacterSetECI* CharacterSetECI::getCharacterSetECIByValue(int value) {
if (value < 0 || value >= 900) {
throw IllegalArgumentException("Bad ECI value: " + value);
throw FormatException();
}
return VALUE_TO_ECI[value];
}

View file

@ -20,7 +20,6 @@
*/
#include <map>
#include <zxing/common/ECI.h>
#include <zxing/DecodeHints.h>
namespace zxing {
@ -29,22 +28,23 @@ namespace zxing {
}
}
class zxing::common::CharacterSetECI : public ECI {
class zxing::common::CharacterSetECI {
private:
static std::map<int, CharacterSetECI*> VALUE_TO_ECI;
static std::map<std::string, CharacterSetECI*> NAME_TO_ECI;
static const bool inited;
static bool init_tables();
char const* const encodingName;
int const* const values_;
char const* const* const names_;
CharacterSetECI(int value, char const* encodingName);
CharacterSetECI(int const* values, char const* const* names);
static void addCharacterSet(int value, char const* encodingName);
static void addCharacterSet(int value, char const* const* encodingNames);
static void addCharacterSet(int const* value, char const* const* encodingNames);
public:
char const* getEncodingName();
char const* name() const;
int getValue() const;
static CharacterSetECI* getCharacterSetECIByValue(int value);
static CharacterSetECI* getCharacterSetECIByName(std::string const& name);

Some files were not shown because too many files have changed in this diff Show more