Merge lp:~xavi-garcia-mena/unity-scopes-api/utils-qt into lp:unity-scopes-api

Proposed by Xavi Garcia
Status: Merged
Approved by: Michi Henning
Approved revision: 569
Merged at revision: 300
Proposed branch: lp:~xavi-garcia-mena/unity-scopes-api/utils-qt
Merge into: lp:unity-scopes-api
Diff against target: 15841 lines (+14778/-73)
148 files modified
_clang-format (+0/-48)
data/CMakeLists.txt (+4/-0)
data/libunity-scopes-qt.pc.in (+28/-0)
debian/control (+32/-0)
debian/libunity-scopes-dev.install (+4/-2)
debian/libunity-scopes-qt-dev.debhelper.log (+4/-0)
debian/libunity-scopes-qt-dev.install (+3/-0)
debian/libunity-scopes-qt-doc.debhelper.log (+4/-0)
debian/libunity-scopes-qt-doc.install (+1/-0)
debian/libunity-scopes-qt.debhelper.log (+30/-0)
debian/libunity-scopes-qt.install (+1/-0)
debian/libunity-scopes-qt.symbols (+411/-0)
doc/Doxyfile-scopes-qt.in (+1797/-0)
doc/Doxyfile.in (+1/-1)
include/unity/scopes/CMakeLists.txt (+1/-0)
include/unity/scopes/qt/CMakeLists.txt (+3/-0)
include/unity/scopes/qt/HttpAsyncReader.h (+310/-0)
include/unity/scopes/qt/JsonAsyncReader.h (+363/-0)
include/unity/scopes/qt/JsonReader.h (+86/-0)
include/unity/scopes/qt/QActionMetadata.h (+145/-0)
include/unity/scopes/qt/QCannedQuery.h (+155/-0)
include/unity/scopes/qt/QCategorisedResult.h (+92/-0)
include/unity/scopes/qt/QCategory.h (+112/-0)
include/unity/scopes/qt/QColumnLayout.h (+133/-0)
include/unity/scopes/qt/QDepartment.h (+196/-0)
include/unity/scopes/qt/QPreviewQueryBase.h (+136/-0)
include/unity/scopes/qt/QPreviewQueryBaseAPI.h (+127/-0)
include/unity/scopes/qt/QPreviewReply.h (+103/-0)
include/unity/scopes/qt/QPreviewReplyProxy.h (+42/-0)
include/unity/scopes/qt/QPreviewWidget.h (+198/-0)
include/unity/scopes/qt/QResult.h (+264/-0)
include/unity/scopes/qt/QScopeBase.h (+155/-0)
include/unity/scopes/qt/QScopeBaseAPI.h (+116/-0)
include/unity/scopes/qt/QSearchMetadata.h (+168/-0)
include/unity/scopes/qt/QSearchQueryBase.h (+164/-0)
include/unity/scopes/qt/QSearchQueryBaseAPI.h (+126/-0)
include/unity/scopes/qt/QSearchReply.h (+164/-0)
include/unity/scopes/qt/QSearchReplyProxy.h (+42/-0)
include/unity/scopes/qt/QUtils.h (+46/-0)
include/unity/scopes/qt/QVariantBuilder.h (+125/-0)
include/unity/scopes/qt/XmlAsyncReader.h (+311/-0)
include/unity/scopes/qt/XmlReader.h (+86/-0)
include/unity/scopes/qt/internal/QActionMetadataImpl.h (+151/-0)
include/unity/scopes/qt/internal/QCannedQueryImpl.h (+88/-0)
include/unity/scopes/qt/internal/QCategorisedResultImpl.h (+95/-0)
include/unity/scopes/qt/internal/QCategoryImpl.h (+102/-0)
include/unity/scopes/qt/internal/QColumnLayoutImpl.h (+125/-0)
include/unity/scopes/qt/internal/QDepartmentImpl.h (+80/-0)
include/unity/scopes/qt/internal/QPreviewQueryBaseImpl.h (+86/-0)
include/unity/scopes/qt/internal/QPreviewReplyImpl.h (+104/-0)
include/unity/scopes/qt/internal/QPreviewWidgetImpl.h (+196/-0)
include/unity/scopes/qt/internal/QResultImpl.h (+263/-0)
include/unity/scopes/qt/internal/QScopeBaseAPIImpl.h (+121/-0)
include/unity/scopes/qt/internal/QScopeBaseImpl.h (+65/-0)
include/unity/scopes/qt/internal/QScopeVariant.h (+88/-0)
include/unity/scopes/qt/internal/QSearchMetadataImpl.h (+170/-0)
include/unity/scopes/qt/internal/QSearchQueryBaseImpl.h (+120/-0)
include/unity/scopes/qt/internal/QSearchReplyImpl.h (+160/-0)
include/unity/scopes/qt/internal/QVariantBuilderImpl.h (+70/-0)
include/unity/scopes/testing/Benchmark.h (+1/-1)
include/unity/scopes/testing/Category.h (+1/-1)
include/unity/scopes/testing/InProcessBenchmark.h (+1/-1)
include/unity/scopes/testing/MockPreviewReply.h (+1/-1)
include/unity/scopes/testing/MockRegistry.h (+1/-1)
include/unity/scopes/testing/MockSearchReply.h (+1/-1)
include/unity/scopes/testing/OutOfProcessBenchmark.h (+1/-1)
include/unity/scopes/testing/Result.h (+1/-1)
include/unity/scopes/testing/ScopeMetadataBuilder.h (+1/-1)
include/unity/scopes/testing/Statistics.h (+1/-1)
include/unity/scopes/testing/TypedScopeFixture.h (+1/-1)
src/scopes/CMakeLists.txt (+1/-0)
src/scopes/qt/CMakeLists.txt (+176/-0)
src/scopes/qt/HttpAsyncReader.cpp (+93/-0)
src/scopes/qt/JsonAsyncReader.cpp (+61/-0)
src/scopes/qt/JsonReader.cpp (+95/-0)
src/scopes/qt/QActionMetadata.cpp (+93/-0)
src/scopes/qt/QCannedQuery.cpp (+118/-0)
src/scopes/qt/QCategorisedResult.cpp (+66/-0)
src/scopes/qt/QCategory.cpp (+70/-0)
src/scopes/qt/QColumnLayout.cpp (+80/-0)
src/scopes/qt/QDepartment.cpp (+121/-0)
src/scopes/qt/QPreviewQueryBase.cpp (+50/-0)
src/scopes/qt/QPreviewQueryBaseAPI.cpp (+159/-0)
src/scopes/qt/QPreviewReply.cpp (+48/-0)
src/scopes/qt/QPreviewWidget.cpp (+110/-0)
src/scopes/qt/QResult.cpp (+164/-0)
src/scopes/qt/QScopeBase.cpp (+44/-0)
src/scopes/qt/QScopeBaseAPI.cpp (+57/-0)
src/scopes/qt/QSearchMetadata.cpp (+97/-0)
src/scopes/qt/QSearchQueryBase.cpp (+90/-0)
src/scopes/qt/QSearchQueryBaseAPI.cpp (+155/-0)
src/scopes/qt/QSearchReply.cpp (+57/-0)
src/scopes/qt/QUtils.cpp (+145/-0)
src/scopes/qt/QVariantBuilder.cpp (+68/-0)
src/scopes/qt/XmlAsyncReader.cpp (+58/-0)
src/scopes/qt/XmlReader.cpp (+96/-0)
src/scopes/qt/internal/QActionMetadataImpl.cpp (+130/-0)
src/scopes/qt/internal/QCannedQueryImpl.cpp (+108/-0)
src/scopes/qt/internal/QCategorisedResultImpl.cpp (+68/-0)
src/scopes/qt/internal/QCategoryImpl.cpp (+75/-0)
src/scopes/qt/internal/QColumnLayoutImpl.cpp (+108/-0)
src/scopes/qt/internal/QDepartmentImpl.cpp (+126/-0)
src/scopes/qt/internal/QPreviewQueryBaseImpl.cpp (+54/-0)
src/scopes/qt/internal/QPreviewReplyImpl.cpp (+66/-0)
src/scopes/qt/internal/QPreviewWidgetImpl.cpp (+123/-0)
src/scopes/qt/internal/QResultImpl.cpp (+247/-0)
src/scopes/qt/internal/QScopeBaseAPIImpl.cpp (+187/-0)
src/scopes/qt/internal/QScopeBaseImpl.cpp (+31/-0)
src/scopes/qt/internal/QScopeVariant.cpp (+133/-0)
src/scopes/qt/internal/QSearchMetadataImpl.cpp (+140/-0)
src/scopes/qt/internal/QSearchQueryBaseImpl.cpp (+91/-0)
src/scopes/qt/internal/QSearchReplyImpl.cpp (+68/-0)
src/scopes/qt/internal/QVariantBuilderImpl.cpp (+77/-0)
src/scopes/qt/unity-scopes-qt.map (+15/-0)
test/gtest/scopes/CMakeLists.txt (+1/-0)
test/gtest/scopes/qt/CMakeLists.txt (+8/-0)
test/gtest/scopes/qt/JsonAsyncReader/CMakeLists.txt (+15/-0)
test/gtest/scopes/qt/JsonAsyncReader/JsonAsyncReader_test.cpp (+193/-0)
test/gtest/scopes/qt/XmlAsyncReader/CMakeLists.txt (+15/-0)
test/gtest/scopes/qt/XmlAsyncReader/XmlAsyncReader_test.cpp (+214/-0)
test/gtest/scopes/qt/qt-bindings/CMakeLists.txt (+205/-0)
test/gtest/scopes/qt/qt-bindings/FakeScope.h (+79/-0)
test/gtest/scopes/qt/qt-bindings/QActionMetadata_test.cpp (+78/-0)
test/gtest/scopes/qt/qt-bindings/QCannedQuery_test.cpp (+76/-0)
test/gtest/scopes/qt/qt-bindings/QCategorisedResult_test.cpp (+87/-0)
test/gtest/scopes/qt/qt-bindings/QColumnLayout_test.cpp (+72/-0)
test/gtest/scopes/qt/qt-bindings/QDepartment_test.cpp (+79/-0)
test/gtest/scopes/qt/qt-bindings/QEventTypeMatcher.h (+57/-0)
test/gtest/scopes/qt/qt-bindings/QMockScope.h (+58/-0)
test/gtest/scopes/qt/qt-bindings/QPreviewQueryBaseAPI_test.cpp (+117/-0)
test/gtest/scopes/qt/qt-bindings/QScopeBaseAPIImpl_test.cpp (+69/-0)
test/gtest/scopes/qt/qt-bindings/QScopeBaseAPIMock.h (+43/-0)
test/gtest/scopes/qt/qt-bindings/QScopeCreation_test.cpp (+88/-0)
test/gtest/scopes/qt/qt-bindings/QSearchMetadata_test.cpp (+69/-0)
test/gtest/scopes/qt/qt-bindings/QSearchQueryBaseAPI_test.cpp (+108/-0)
test/gtest/scopes/qt/qt-bindings/QVariantBuilder_test.cpp (+53/-0)
test/gtest/scopes/qt/qt-bindings/TestSetup.h (+83/-0)
test/gtest/scopes/qt/server/queries/json_bad_formed.txt (+1/-0)
test/gtest/scopes/qt/server/queries/json_chart_gettoptracks.txt (+1/-0)
test/gtest/scopes/qt/server/queries/not_found.txt (+9/-0)
test/gtest/scopes/qt/server/queries/xml_bad_formed_chart_gettoptracks.txt (+72/-0)
test/gtest/scopes/qt/server/queries/xml_chart_gettoptracks.txt (+105/-0)
test/gtest/scopes/qt/server/server.py (+81/-0)
test/gtest/scopes/testing/IsolatedScope/scope.h (+1/-1)
test/gtest/scopes/testing/IsolatedScopeBenchmark/scope.h (+1/-1)
test/headers/CMakeLists.txt (+19/-4)
test/headers/compile_headers.py (+16/-4)
test/headers/includechecker.py (+2/-1)
To merge this branch: bzr merge lp:~xavi-garcia-mena/unity-scopes-api/utils-qt
Reviewer Review Type Date Requested Status
Michi Henning (community) Approve
Pete Woods Pending
Review via email: mp+244953@code.launchpad.net

Commit message

Added library using Qt.
The library is packed in a separated debian package.

It now cointains a few helpers to retrieve json and xml documents from the web.

Description of the change

Added library using Qt.
The library is packed in a separated debian package.

It now cointains a few helpers to retrieve json and xml documents from the web.

To post a comment you must log in.
Revision history for this message
Michi Henning (michihenning) wrote :

Nice job!

I have a few niggles , but I don't think we should let that stop us. Rather, let's deal with the niggles as separate MRs. Otherwise, it'll get too difficult to coddle this branch along and keep it synced.

Looking at the symbols file, there are tons of symbols in there that aren't ours. I'm not totally sure why that's happening just yet. It will need fixing eventually. For now, it's good enough.

We have a naming discrepancy between the namespaces and the directory hierarchy. They need to be the same. The namespaces are unity::scopes::qt (which is fine), but the directories are "scopes/scopes-qt". It should be "scopes/qt" instead. The idea is that we have consistent naming everywhere, so if I see a symbol, I immediately know where in the file system I'll be able to find the source, headers, and tests, without having to run a grep.

Thanks for adding all the doc! I haven't read it in detail yet, but will :-)

One thing about the doc: doxygen spits out a bunch of warnings about undocumented things. I suspect that most of these are bogus. If you look for @cond and @endcond in the existing code, you'll find examples of what we suppress and why.

In general, I want all builds to be completely free of warnings. That's simply because, if we allow warnings to slip through, eventually, we'll miss a new warning that we really should have paid attention to. (I went through this exercise once in a code base that produced 8,500 warnings for the build. I dealt systematically with all of them. Most were harmless and could be avoided with very minor code changes. But it took two days to work though it all. By the end of it, there were five different warnings left. Each of them an absolutely guaranteed core dump. The bugs were never detected because of way insufficient test coverage...)

review: Approve
570. By Xavi Garcia

directories scopes-qt renamed to qt

571. By Xavi Garcia

Documentation warnings removed

572. By Xavi Garcia

Added Qt-bindings classes

573. By Xavi Garcia

Code formated

574. By Xavi Garcia

Updated symbols file

575. By Xavi Garcia

Changed VariantMap to QVariantMap in QResult class

576. By Xavi Garcia

Changed VariantMap to QVariantMap and removed unnecessary includes

577. By Xavi Garcia

Added unit tests for qt bindings, erased codumentation from pimpl classes

578. By Xavi Garcia

Code style script passed, Added qt headers to the headers test

579. By Xavi Garcia

QScopeVariant moved to internal classes

580. By Xavi Garcia

Changed QScopeBaseAPIImpl to call start and stop methods from the main QThread

581. By Xavi Garcia

Client's scope instance moved to the main Qt Thread

582. By Xavi Garcia

Added test to verify that start and stop methods for the client scope are called from the main Qt thread

583. By Xavi Garcia

Added functor to create the user's scope instance from the Qt Thread

584. By Xavi Garcia

Added unit test to check that the user's scope is created in the Qt thread

585. By Xavi Garcia

Typo fixed

586. By Xavi Garcia

Symbols moved to the unity::scopes::qt namespace

587. By Xavi Garcia

Fixed Reply internal copy and using qt emit to launch query

588. By Xavi Garcia

Version in debian symbols file changed to 0replaceme

589. By Xavi Garcia

Removed symbols file because of lots of conflicts with previous one

590. By Xavi Garcia

Symbols file for qt library re-added

591. By Xavi Garcia

Removing file again, as conflicts are still present

592. By Xavi Garcia

Re-added symbols file after completely rebuild it

593. By Xavi Garcia

Changed Thomas Voss surname to not include non-ascii character. The Beta character generates an error when running compile_headers.py in Jenkins

594. By Xavi Garcia

added UTF-8 encoding when opening header files

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file '_clang-format'
2--- _clang-format 1970-01-01 00:00:00 +0000
3+++ _clang-format 2015-02-05 11:31:47 +0000
4@@ -0,0 +1,48 @@
5+---
6+AccessModifierOffset: -4
7+AlignEscapedNewlinesLeft: true
8+AlignTrailingComments: true
9+AllowAllParametersOfDeclarationOnNextLine: true
10+AllowShortFunctionsOnASingleLine: false
11+AllowShortIfStatementsOnASingleLine: false
12+AllowShortLoopsOnASingleLine: false
13+AlwaysBreakBeforeMultilineStrings: true
14+AlwaysBreakTemplateDeclarations: true
15+BinPackParameters: false
16+BreakBeforeBinaryOperators: false
17+BreakBeforeBraces: Allman
18+BreakBeforeTernaryOperators: false
19+BreakConstructorInitializersBeforeComma: true
20+ColumnLimit: 120
21+ConstructorInitializerAllOnOneLineOrOnePerLine: false
22+ConstructorInitializerIndentWidth: 4
23+ContinuationIndentWidth: 4
24+Cpp11BracedListStyle: true
25+DerivePointerBinding: true
26+ExperimentalAutoDetectBinPacking: false
27+IndentCaseLabels: true
28+IndentFunctionDeclarationAfterType: true
29+IndentWidth: 4
30+Language: Cpp
31+MaxEmptyLinesToKeep: 1
32+NamespaceIndentation: None
33+ObjCSpaceBeforeProtocolList: false
34+PenaltyBreakBeforeFirstCallParameter: 1
35+PenaltyBreakComment: 60
36+PenaltyBreakFirstLessLess: 120
37+PenaltyBreakString: 1000
38+PenaltyExcessCharacter: 1000000
39+PenaltyReturnTypeOnItsOwnLine: 200
40+PointerBindsToType: true
41+SpaceBeforeAssignmentOperators: true
42+SpaceBeforeParens: ControlStatements
43+SpaceInEmptyParentheses: false
44+SpacesBeforeTrailingComments: 2
45+SpacesInAngles: false
46+SpacesInCStyleCastParentheses: false
47+SpacesInParentheses: false
48+Standard: Cpp11
49+TabWidth: 8
50+UseTab: Never
51+...
52+
53
54=== removed file '_clang-format'
55--- _clang-format 2014-01-03 00:30:13 +0000
56+++ _clang-format 1970-01-01 00:00:00 +0000
57@@ -1,48 +0,0 @@
58----
59-AccessModifierOffset: -4
60-AlignEscapedNewlinesLeft: true
61-AlignTrailingComments: true
62-AllowAllParametersOfDeclarationOnNextLine: true
63-AllowShortFunctionsOnASingleLine: false
64-AllowShortIfStatementsOnASingleLine: false
65-AllowShortLoopsOnASingleLine: false
66-AlwaysBreakBeforeMultilineStrings: true
67-AlwaysBreakTemplateDeclarations: true
68-BinPackParameters: false
69-BreakBeforeBinaryOperators: false
70-BreakBeforeBraces: Allman
71-BreakBeforeTernaryOperators: false
72-BreakConstructorInitializersBeforeComma: true
73-ColumnLimit: 120
74-ConstructorInitializerAllOnOneLineOrOnePerLine: false
75-ConstructorInitializerIndentWidth: 4
76-ContinuationIndentWidth: 4
77-Cpp11BracedListStyle: true
78-DerivePointerBinding: true
79-ExperimentalAutoDetectBinPacking: false
80-IndentCaseLabels: true
81-IndentFunctionDeclarationAfterType: true
82-IndentWidth: 4
83-Language: Cpp
84-MaxEmptyLinesToKeep: 1
85-NamespaceIndentation: None
86-ObjCSpaceBeforeProtocolList: false
87-PenaltyBreakBeforeFirstCallParameter: 1
88-PenaltyBreakComment: 60
89-PenaltyBreakFirstLessLess: 120
90-PenaltyBreakString: 1000
91-PenaltyExcessCharacter: 1000000
92-PenaltyReturnTypeOnItsOwnLine: 200
93-PointerBindsToType: true
94-SpaceBeforeAssignmentOperators: true
95-SpaceBeforeParens: ControlStatements
96-SpaceInEmptyParentheses: false
97-SpacesBeforeTrailingComments: 2
98-SpacesInAngles: false
99-SpacesInCStyleCastParentheses: false
100-SpacesInParentheses: false
101-Standard: Cpp11
102-TabWidth: 8
103-UseTab: Never
104-...
105-
106
107=== modified file 'data/CMakeLists.txt'
108--- data/CMakeLists.txt 2014-05-06 09:00:45 +0000
109+++ data/CMakeLists.txt 2015-02-05 11:31:47 +0000
110@@ -2,6 +2,10 @@
111 configure_file(lib${UNITY_SCOPES_LIB}.pc.in lib${UNITY_SCOPES_LIB}.pc @ONLY)
112 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${UNITY_SCOPES_LIB}.pc DESTINATION ${LIB_INSTALL_PREFIX}/pkgconfig)
113
114+# Set up package config.
115+configure_file(lib${LIB_QT}.pc.in lib${LIB_QT}.pc @ONLY)
116+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_QT}.pc DESTINATION ${LIB_INSTALL_PREFIX}/pkgconfig)
117+
118 # upstart job for smart scopes proxy
119 configure_file(smart-scopes-proxy.conf.in smart-scopes-proxy.conf @ONLY)
120 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/smart-scopes-proxy.conf DESTINATION ${CMAKE_INSTALL_DATADIR}/upstart/sessions)
121
122=== added file 'data/libunity-scopes-qt.pc.in'
123--- data/libunity-scopes-qt.pc.in 1970-01-01 00:00:00 +0000
124+++ data/libunity-scopes-qt.pc.in 2015-02-05 11:31:47 +0000
125@@ -0,0 +1,28 @@
126+#
127+# Copyright (C) 2014 Canonical Ltd
128+#
129+# This program is free software: you can redistribute it and/or modify
130+# it under the terms of the GNU Lesser General Public License version 3 as
131+# published by the Free Software Foundation.
132+#
133+# This program is distributed in the hope that it will be useful,
134+# but WITHOUT ANY WARRANTY; without even the implied warranty of
135+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
136+# GNU Lesser General Public License for more details.
137+#
138+# You should have received a copy of the GNU Lesser General Public License
139+# along with this program. If not, see <http://www.gnu.org/licenses/>.
140+#
141+# Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
142+#
143+
144+prefix=@CMAKE_INSTALL_PREFIX@
145+includedir=${prefix}/@HDR_INSTALL_DIR@/unity/scopes/qt
146+libdir=${prefix}/@LIBDIR@
147+
148+Name: lib@LIB_QT@
149+Description: Unity Scopes API QT library
150+Requires: libunity-api, lib@UNITY_SCOPES_LIB@
151+Version: @UNITY_SCOPES_QT_MAJOR@.@UNITY_SCOPES_QT_MINOR@.@UNITY_SCOPES_QT_MICRO@
152+Libs: -L${libdir} -l@LIB_QT@
153+Cflags: -I${includedir}
154
155=== modified file 'debian/control'
156--- debian/control 2015-01-26 08:10:59 +0000
157+++ debian/control 2015-02-05 11:31:47 +0000
158@@ -35,6 +35,8 @@
159 pkg-config,
160 python3:any,
161 valgrind,
162+ libnet-cpp-dev (>=1.1.0),
163+ python-tornado
164 Standards-Version: 3.9.5
165 XS-Testsuite: autopkgtest
166 Section: libs
167@@ -90,3 +92,33 @@
168 Depends: ${misc:Depends},
169 Description: Documentation for Unity scopes API
170 Library to integrate scopes with the Unity shell (documentation)
171+
172+Package: libunity-scopes-qt
173+Architecture: any
174+Multi-Arch: same
175+Pre-Depends: ${misc:Pre-Depends},
176+Depends: ${misc:Depends},
177+ ${shlibs:Depends}
178+Description: Qt library for Unity scopes API
179+ Library that integrates classes based on Qt for convenience
180+
181+Package: libunity-scopes-qt-dev
182+Section: libdevel
183+Architecture: any
184+Multi-Arch: same
185+Pre-Depends: ${misc:Pre-Depends},
186+Depends: libunity-scopes-dev (= ${binary:Version}),
187+ libunity-scopes-qt (= ${binary:Version}),
188+ libnet-cpp-dev (>=1.1.0),
189+ ${misc:Depends},
190+ ${shlibs:Depends}
191+Description: Header files for Qt library for Unity scopes API
192+ Library that integrates classes based on Qt for convenience (dev files)
193+
194+Package: libunity-scopes-qt-doc
195+Section: doc
196+Architecture: all
197+Multi-Arch: foreign
198+Depends: ${misc:Depends},
199+Description: Documentation for Unity Qt library
200+ Library that integrates classes based on Qt for convenience (documentation)
201
202=== modified file 'debian/libunity-scopes-dev.install'
203--- debian/libunity-scopes-dev.install 2014-01-23 14:03:01 +0000
204+++ debian/libunity-scopes-dev.install 2015-02-05 11:31:47 +0000
205@@ -1,4 +1,6 @@
206-usr/include/unity-scopes-0/unity/scopes/*
207+usr/include/unity-scopes-0/unity/scopes/*.h
208+usr/include/unity-scopes-0/unity/scopes/testing
209+usr/include/unity-scopes-0/unity/scopes/utility
210 usr/include/unity-scopes-0/unity-scopes.h
211 usr/lib/*/libunity-scopes.so
212-usr/lib/*/pkgconfig/*.pc
213+usr/lib/*/pkgconfig/libunity-scopes.pc
214
215=== added file 'debian/libunity-scopes-qt-dev.debhelper.log'
216--- debian/libunity-scopes-qt-dev.debhelper.log 1970-01-01 00:00:00 +0000
217+++ debian/libunity-scopes-qt-dev.debhelper.log 2015-02-05 11:31:47 +0000
218@@ -0,0 +1,4 @@
219+override_dh_auto_configure dh_auto_configure
220+dh_auto_configure
221+dh_auto_build
222+dh_auto_test
223
224=== added file 'debian/libunity-scopes-qt-dev.install'
225--- debian/libunity-scopes-qt-dev.install 1970-01-01 00:00:00 +0000
226+++ debian/libunity-scopes-qt-dev.install 2015-02-05 11:31:47 +0000
227@@ -0,0 +1,3 @@
228+usr/include/unity-scopes-0/unity/scopes/qt
229+usr/lib/*/libunity-scopes-qt.so
230+usr/lib/*/pkgconfig/libunity-scopes-qt.pc
231
232=== added file 'debian/libunity-scopes-qt-doc.debhelper.log'
233--- debian/libunity-scopes-qt-doc.debhelper.log 1970-01-01 00:00:00 +0000
234+++ debian/libunity-scopes-qt-doc.debhelper.log 2015-02-05 11:31:47 +0000
235@@ -0,0 +1,4 @@
236+override_dh_auto_configure dh_auto_configure
237+dh_auto_configure
238+dh_auto_build
239+dh_auto_test
240
241=== added file 'debian/libunity-scopes-qt-doc.install'
242--- debian/libunity-scopes-qt-doc.install 1970-01-01 00:00:00 +0000
243+++ debian/libunity-scopes-qt-doc.install 2015-02-05 11:31:47 +0000
244@@ -0,0 +1,1 @@
245+usr/share/doc/unity-scopes-qt/*
246
247=== added file 'debian/libunity-scopes-qt.debhelper.log'
248--- debian/libunity-scopes-qt.debhelper.log 1970-01-01 00:00:00 +0000
249+++ debian/libunity-scopes-qt.debhelper.log 2015-02-05 11:31:47 +0000
250@@ -0,0 +1,30 @@
251+override_dh_auto_configure dh_auto_configure
252+dh_auto_configure
253+dh_auto_build
254+dh_auto_test
255+dh_prep
256+dh_auto_install
257+dh_install
258+override_dh_click dh_click
259+dh_click
260+dh_installdocs
261+dh_installchangelogs
262+dh_perl
263+dh_link
264+dh_compress
265+dh_fixperms
266+dh_strip
267+dh_makeshlibs
268+dh_shlibdeps
269+dh_installdeb
270+dh_gencontrol
271+dh_md5sums
272+dh_builddeb
273+dh_builddeb
274+dh_builddeb
275+dh_builddeb
276+dh_builddeb
277+dh_builddeb
278+dh_builddeb
279+dh_builddeb
280+dh_auto_test
281
282=== added file 'debian/libunity-scopes-qt.install'
283--- debian/libunity-scopes-qt.install 1970-01-01 00:00:00 +0000
284+++ debian/libunity-scopes-qt.install 2015-02-05 11:31:47 +0000
285@@ -0,0 +1,1 @@
286+usr/lib/*/libunity-scopes-qt.so.*
287
288=== added file 'debian/libunity-scopes-qt.symbols'
289--- debian/libunity-scopes-qt.symbols 1970-01-01 00:00:00 +0000
290+++ debian/libunity-scopes-qt.symbols 2015-02-05 11:31:47 +0000
291@@ -0,0 +1,411 @@
292+libunity-scopes-qt.so.01 libunity-scopes-qt #MINVER#
293+ (c++)"unity::scopes::qt::JsonReader::JsonReader()@Base" 0replaceme
294+ (c++)"unity::scopes::qt::JsonReader::JsonReader()@Base" 0replaceme
295+ (c++)"unity::scopes::qt::QScopeBase::qt_metacall(QMetaObject::Call, int, void**)@Base" 0replaceme
296+ (c++)"unity::scopes::qt::QScopeBase::qt_metacast(char const*)@Base" 0replaceme
297+ (c++)"unity::scopes::qt::QScopeBase::staticMetaObject@Base" 0replaceme
298+ (c++)"unity::scopes::qt::QScopeBase::stop()@Base" 0replaceme
299+ (c++)"unity::scopes::qt::QScopeBase::start(QString const&)@Base" 0replaceme
300+ (c++)"unity::scopes::qt::QScopeBase::QScopeBase(QObject*)@Base" 0replaceme
301+ (c++)"unity::scopes::qt::QScopeBase::QScopeBase(QObject*)@Base" 0replaceme
302+ (c++)"unity::scopes::qt::QScopeBase::~QScopeBase()@Base" 0replaceme
303+ (c++)"unity::scopes::qt::QScopeBase::~QScopeBase()@Base" 0replaceme
304+ (c++)"unity::scopes::qt::QScopeBase::~QScopeBase()@Base" 0replaceme
305+ (c++)"unity::scopes::qt::QDepartment::add_subdepartment(std::shared_ptr<unity::scopes::qt::QDepartment const> const&)@Base" 0replaceme
306+ (c++)"unity::scopes::qt::QDepartment::set_subdepartments(QList<QSharedPointer<unity::scopes::qt::QDepartment const> > const&)@Base" 0replaceme
307+ (c++)"unity::scopes::qt::QDepartment::set_alternate_label(QString const&)@Base" 0replaceme
308+ (c++)"unity::scopes::qt::QDepartment::set_has_subdepartments(bool)@Base" 0replaceme
309+ (c++)"unity::scopes::qt::QDepartment::create(QString const&, unity::scopes::qt::QCannedQuery const&, QString const&)@Base" 0replaceme
310+ (c++)"unity::scopes::qt::QDepartment::create(unity::scopes::qt::QCannedQuery const&, QString const&)@Base" 0replaceme
311+ (c++)"unity::scopes::qt::QDepartment::QDepartment(unity::scopes::qt::QDepartment&&)@Base" 0replaceme
312+ (c++)"unity::scopes::qt::QDepartment::QDepartment(unity::scopes::qt::internal::QDepartmentImpl*)@Base" 0replaceme
313+ (c++)"unity::scopes::qt::QDepartment::QDepartment(unity::scopes::qt::QDepartment const&)@Base" 0replaceme
314+ (c++)"unity::scopes::qt::QDepartment::QDepartment(unity::scopes::qt::QDepartment&&)@Base" 0replaceme
315+ (c++)"unity::scopes::qt::QDepartment::QDepartment(unity::scopes::qt::internal::QDepartmentImpl*)@Base" 0replaceme
316+ (c++)"unity::scopes::qt::QDepartment::QDepartment(unity::scopes::qt::QDepartment const&)@Base" 0replaceme
317+ (c++)"unity::scopes::qt::QDepartment::~QDepartment()@Base" 0replaceme
318+ (c++)"unity::scopes::qt::QDepartment::~QDepartment()@Base" 0replaceme
319+ (c++)"unity::scopes::qt::QDepartment::operator=(unity::scopes::qt::QDepartment&&)@Base" 0replaceme
320+ (c++)"unity::scopes::qt::QDepartment::operator=(unity::scopes::qt::QDepartment const&)@Base" 0replaceme
321+ (c++)"unity::scopes::qt::QCannedQuery::set_filter_state(unity::scopes::FilterState const&)@Base" 0replaceme
322+ (c++)"unity::scopes::qt::QCannedQuery::set_query_string(QString const&)@Base" 0replaceme
323+ (c++)"unity::scopes::qt::QCannedQuery::set_department_id(QString const&)@Base" 0replaceme
324+ (c++)"unity::scopes::qt::QCannedQuery::from_uri(QString const&)@Base" 0replaceme
325+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::qt::QCannedQuery&&)@Base" 0replaceme
326+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::qt::internal::QCannedQueryImpl*)@Base" 0replaceme
327+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(QString const&)@Base" 0replaceme
328+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(QString const&, QString const&, QString const&)@Base" 0replaceme
329+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::CannedQuery const&)@Base" 0replaceme
330+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::qt::QCannedQuery const&)@Base" 0replaceme
331+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::qt::QCannedQuery&&)@Base" 0replaceme
332+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::qt::internal::QCannedQueryImpl*)@Base" 0replaceme
333+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(QString const&)@Base" 0replaceme
334+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(QString const&, QString const&, QString const&)@Base" 0replaceme
335+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::CannedQuery const&)@Base" 0replaceme
336+ (c++)"unity::scopes::qt::QCannedQuery::QCannedQuery(unity::scopes::qt::QCannedQuery const&)@Base" 0replaceme
337+ (c++)"unity::scopes::qt::QCannedQuery::~QCannedQuery()@Base" 0replaceme
338+ (c++)"unity::scopes::qt::QCannedQuery::~QCannedQuery()@Base" 0replaceme
339+ (c++)"unity::scopes::qt::QCannedQuery::operator=(unity::scopes::qt::QCannedQuery&&)@Base" 0replaceme
340+ (c++)"unity::scopes::qt::QCannedQuery::operator=(unity::scopes::qt::QCannedQuery const&)@Base" 0replaceme
341+ (c++)"unity::scopes::qt::QSearchReply::qt_metacall(QMetaObject::Call, int, void**)@Base" 0replaceme
342+ (c++)"unity::scopes::qt::QSearchReply::qt_metacast(char const*)@Base" 0replaceme
343+ (c++)"unity::scopes::qt::QSearchReply::staticMetaObject@Base" 0replaceme
344+ (c++)"unity::scopes::qt::QSearchReply::register_category(QString const&, QString const&, QString const&, unity::scopes::CategoryRenderer const&)@Base" 0replaceme
345+ (c++)"unity::scopes::qt::QSearchReply::register_departments(std::shared_ptr<unity::scopes::qt::QDepartment const> const&)@Base" 0replaceme
346+ (c++)"unity::scopes::qt::QSearchReply::push(unity::scopes::qt::QCategorisedResult const&)@Base" 0replaceme
347+ (c++)"unity::scopes::qt::QSearchReply::error(std::__exception_ptr::exception_ptr)@Base" 0replaceme
348+ (c++)"unity::scopes::qt::QSearchReply::QSearchReply(std::shared_ptr<unity::scopes::SearchReply>&, QObject*)@Base" 0replaceme
349+ (c++)"unity::scopes::qt::QSearchReply::QSearchReply(std::shared_ptr<unity::scopes::SearchReply>&, QObject*)@Base" 0replaceme
350+ (c++)"unity::scopes::qt::QSearchReply::~QSearchReply()@Base" 0replaceme
351+ (c++)"unity::scopes::qt::QSearchReply::~QSearchReply()@Base" 0replaceme
352+ (c++)"unity::scopes::qt::QSearchReply::~QSearchReply()@Base" 0replaceme
353+ (c++)"unity::scopes::qt::QColumnLayout::add_column(QVector<QString>)@Base" 0replaceme
354+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(unity::scopes::qt::QColumnLayout&&)@Base" 0replaceme
355+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(unity::scopes::qt::internal::QColumnLayoutImpl*)@Base" 0replaceme
356+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(unity::scopes::qt::QColumnLayout const&)@Base" 0replaceme
357+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(int)@Base" 0replaceme
358+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(unity::scopes::qt::QColumnLayout&&)@Base" 0replaceme
359+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(unity::scopes::qt::internal::QColumnLayoutImpl*)@Base" 0replaceme
360+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(unity::scopes::qt::QColumnLayout const&)@Base" 0replaceme
361+ (c++)"unity::scopes::qt::QColumnLayout::QColumnLayout(int)@Base" 0replaceme
362+ (c++)"unity::scopes::qt::QColumnLayout::~QColumnLayout()@Base" 0replaceme
363+ (c++)"unity::scopes::qt::QColumnLayout::~QColumnLayout()@Base" 0replaceme
364+ (c++)"unity::scopes::qt::QColumnLayout::operator=(unity::scopes::qt::QColumnLayout&&)@Base" 0replaceme
365+ (c++)"unity::scopes::qt::QColumnLayout::operator=(unity::scopes::qt::QColumnLayout const&)@Base" 0replaceme
366+ (c++)"unity::scopes::qt::QPreviewReply::qt_metacall(QMetaObject::Call, int, void**)@Base" 0replaceme
367+ (c++)"unity::scopes::qt::QPreviewReply::qt_metacast(char const*)@Base" 0replaceme
368+ (c++)"unity::scopes::qt::QPreviewReply::register_layout(QList<unity::scopes::qt::QColumnLayout> const&)@Base" 0replaceme
369+ (c++)"unity::scopes::qt::QPreviewReply::staticMetaObject@Base" 0replaceme
370+ (c++)"unity::scopes::qt::QPreviewReply::push(QList<unity::scopes::qt::QPreviewWidget> const&)@Base" 0replaceme
371+ (c++)"unity::scopes::qt::QPreviewReply::push(QString const&, QVariant const&)@Base" 0replaceme
372+ (c++)"unity::scopes::qt::QPreviewReply::QPreviewReply(std::shared_ptr<unity::scopes::PreviewReply>&, QObject*)@Base" 0replaceme
373+ (c++)"unity::scopes::qt::QPreviewReply::QPreviewReply(std::shared_ptr<unity::scopes::PreviewReply>&, QObject*)@Base" 0replaceme
374+ (c++)"unity::scopes::qt::QPreviewReply::~QPreviewReply()@Base" 0replaceme
375+ (c++)"unity::scopes::qt::QPreviewReply::~QPreviewReply()@Base" 0replaceme
376+ (c++)"unity::scopes::qt::QPreviewReply::~QPreviewReply()@Base" 0replaceme
377+ (c++)"unity::scopes::qt::QScopeBaseAPI::stop()@Base" 0replaceme
378+ (c++)"unity::scopes::qt::QScopeBaseAPI::start(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0replaceme
379+ (c++)"unity::scopes::qt::QScopeBaseAPI::search(unity::scopes::CannedQuery const&, unity::scopes::SearchMetadata const&)@Base" 0replaceme
380+ (c++)"unity::scopes::qt::QScopeBaseAPI::preview(unity::scopes::Result const&, unity::scopes::ActionMetadata const&)@Base" 0replaceme
381+ (c++)"unity::scopes::qt::QScopeBaseAPI::QScopeBaseAPI(std::function<unity::scopes::qt::QScopeBase* ()> const&)@Base" 0replaceme
382+ (c++)"unity::scopes::qt::QScopeBaseAPI::QScopeBaseAPI(std::function<unity::scopes::qt::QScopeBase* ()> const&)@Base" 0replaceme
383+ (c++)"unity::scopes::qt::QScopeBaseAPI::~QScopeBaseAPI()@Base" 0replaceme
384+ (c++)"unity::scopes::qt::QScopeBaseAPI::~QScopeBaseAPI()@Base" 0replaceme
385+ (c++)"unity::scopes::qt::QScopeBaseAPI::~QScopeBaseAPI()@Base" 0replaceme
386+ (c++)"unity::scopes::qt::CancelledEvent::~CancelledEvent()@Base" 0replaceme
387+ (c++)"unity::scopes::qt::CancelledEvent::~CancelledEvent()@Base" 0replaceme
388+ (c++)"unity::scopes::qt::CancelledEvent::~CancelledEvent()@Base" 0replaceme
389+ (c++)"unity::scopes::qt::QPreviewWidget::add_widget(unity::scopes::qt::QPreviewWidget const&)@Base" 0replaceme
390+ (c++)"unity::scopes::qt::QPreviewWidget::add_attribute_value(QString const&, QVariant const&)@Base" 0replaceme
391+ (c++)"unity::scopes::qt::QPreviewWidget::add_attribute_mapping(QString const&, QString const&)@Base" 0replaceme
392+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(unity::scopes::qt::QPreviewWidget&&)@Base" 0replaceme
393+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(unity::scopes::qt::internal::QPreviewWidgetImpl*)@Base" 0replaceme
394+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(QString const&)@Base" 0replaceme
395+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(QString const&, QString const&)@Base" 0replaceme
396+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(unity::scopes::qt::QPreviewWidget const&)@Base" 0replaceme
397+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(unity::scopes::qt::QPreviewWidget&&)@Base" 0replaceme
398+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(unity::scopes::qt::internal::QPreviewWidgetImpl*)@Base" 0replaceme
399+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(QString const&)@Base" 0replaceme
400+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(QString const&, QString const&)@Base" 0replaceme
401+ (c++)"unity::scopes::qt::QPreviewWidget::QPreviewWidget(unity::scopes::qt::QPreviewWidget const&)@Base" 0replaceme
402+ (c++)"unity::scopes::qt::QPreviewWidget::~QPreviewWidget()@Base" 0replaceme
403+ (c++)"unity::scopes::qt::QPreviewWidget::~QPreviewWidget()@Base" 0replaceme
404+ (c++)"unity::scopes::qt::QPreviewWidget::~QPreviewWidget()@Base" 0replaceme
405+ (c++)"unity::scopes::qt::QPreviewWidget::operator=(unity::scopes::qt::QPreviewWidget&&)@Base" 0replaceme
406+ (c++)"unity::scopes::qt::QPreviewWidget::operator=(unity::scopes::qt::QPreviewWidget const&)@Base" 0replaceme
407+ (c++)"unity::scopes::qt::XmlAsyncReader::create_parser_with_data(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0replaceme
408+ (c++)"unity::scopes::qt::XmlAsyncReader::XmlAsyncReader()@Base" 0replaceme
409+ (c++)"unity::scopes::qt::XmlAsyncReader::XmlAsyncReader()@Base" 0replaceme
410+ (c++)"unity::scopes::qt::XmlAsyncReader::~XmlAsyncReader()@Base" 0replaceme
411+ (c++)"unity::scopes::qt::XmlAsyncReader::~XmlAsyncReader()@Base" 0replaceme
412+ (c++)"unity::scopes::qt::XmlAsyncReader::~XmlAsyncReader()@Base" 0replaceme
413+ (c++)"unity::scopes::qt::HttpAsyncReader::Priv::~Priv()@Base" 0replaceme
414+ (c++)"unity::scopes::qt::HttpAsyncReader::Priv::~Priv()@Base" 0replaceme
415+ (c++)"unity::scopes::qt::HttpAsyncReader::HttpAsyncReader()@Base" 0replaceme
416+ (c++)"unity::scopes::qt::HttpAsyncReader::HttpAsyncReader()@Base" 0replaceme
417+ (c++)"unity::scopes::qt::HttpAsyncReader::~HttpAsyncReader()@Base" 0replaceme
418+ (c++)"unity::scopes::qt::HttpAsyncReader::~HttpAsyncReader()@Base" 0replaceme
419+ (c++)"unity::scopes::qt::HttpAsyncReader::~HttpAsyncReader()@Base" 0replaceme
420+ (c++)"unity::scopes::qt::InitializeEvent::~InitializeEvent()@Base" 0replaceme
421+ (c++)"unity::scopes::qt::InitializeEvent::~InitializeEvent()@Base" 0replaceme
422+ (c++)"unity::scopes::qt::InitializeEvent::~InitializeEvent()@Base" 0replaceme
423+ (c++)"unity::scopes::qt::JsonAsyncReader::create_parser_with_data(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0replaceme
424+ (c++)"unity::scopes::qt::JsonAsyncReader::JsonAsyncReader()@Base" 0replaceme
425+ (c++)"unity::scopes::qt::JsonAsyncReader::JsonAsyncReader()@Base" 0replaceme
426+ (c++)"unity::scopes::qt::JsonAsyncReader::~JsonAsyncReader()@Base" 0replaceme
427+ (c++)"unity::scopes::qt::JsonAsyncReader::~JsonAsyncReader()@Base" 0replaceme
428+ (c++)"unity::scopes::qt::JsonAsyncReader::~JsonAsyncReader()@Base" 0replaceme
429+ (c++)"unity::scopes::qt::QActionMetadata::set_scope_data(QVariant const&)@Base" 0replaceme
430+ (c++)"unity::scopes::qt::QActionMetadata::set_hint(QString const&, QVariant const&)@Base" 0replaceme
431+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(unity::scopes::qt::QActionMetadata&&)@Base" 0replaceme
432+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(unity::scopes::qt::internal::QActionMetadataImpl*)@Base" 0replaceme
433+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(QString const&, QString const&)@Base" 0replaceme
434+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(unity::scopes::qt::QActionMetadata const&)@Base" 0replaceme
435+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(unity::scopes::qt::QActionMetadata&&)@Base" 0replaceme
436+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(unity::scopes::qt::internal::QActionMetadataImpl*)@Base" 0replaceme
437+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(QString const&, QString const&)@Base" 0replaceme
438+ (c++)"unity::scopes::qt::QActionMetadata::QActionMetadata(unity::scopes::qt::QActionMetadata const&)@Base" 0replaceme
439+ (c++)"unity::scopes::qt::QActionMetadata::~QActionMetadata()@Base" 0replaceme
440+ (c++)"unity::scopes::qt::QActionMetadata::~QActionMetadata()@Base" 0replaceme
441+ (c++)"unity::scopes::qt::QActionMetadata::operator=(unity::scopes::qt::QActionMetadata&&)@Base" 0replaceme
442+ (c++)"unity::scopes::qt::QActionMetadata::operator=(unity::scopes::qt::QActionMetadata const&)@Base" 0replaceme
443+ (c++)"unity::scopes::qt::QActionMetadata::operator[](QString const&)@Base" 0replaceme
444+ (c++)"unity::scopes::qt::QSearchMetadata::set_location(unity::scopes::Location const&)@Base" 0replaceme
445+ (c++)"unity::scopes::qt::QSearchMetadata::set_cardinality(int)@Base" 0replaceme
446+ (c++)"unity::scopes::qt::QSearchMetadata::set_hint(QString const&, QVariant const&)@Base" 0replaceme
447+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(unity::scopes::qt::QSearchMetadata&&)@Base" 0replaceme
448+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(QString const&, QString const&)@Base" 0replaceme
449+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(unity::scopes::qt::QSearchMetadata const&)@Base" 0replaceme
450+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(int, QString const&, QString const&)@Base" 0replaceme
451+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(unity::scopes::qt::QSearchMetadata&&)@Base" 0replaceme
452+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(QString const&, QString const&)@Base" 0replaceme
453+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(unity::scopes::qt::QSearchMetadata const&)@Base" 0replaceme
454+ (c++)"unity::scopes::qt::QSearchMetadata::QSearchMetadata(int, QString const&, QString const&)@Base" 0replaceme
455+ (c++)"unity::scopes::qt::QSearchMetadata::~QSearchMetadata()@Base" 0replaceme
456+ (c++)"unity::scopes::qt::QSearchMetadata::~QSearchMetadata()@Base" 0replaceme
457+ (c++)"unity::scopes::qt::QSearchMetadata::operator[](QString const&)@Base" 0replaceme
458+ (c++)"unity::scopes::qt::QVariantBuilder::end()@Base" 0replaceme
459+ (c++)"unity::scopes::qt::QVariantBuilder::add_tuple(QVector<QPair<QString, QVariant> > const&)@Base" 0replaceme
460+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder(unity::scopes::qt::QVariantBuilder&&)@Base" 0replaceme
461+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder(unity::scopes::qt::internal::QVariantBuilderImpl*)@Base" 0replaceme
462+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder(unity::scopes::qt::QVariantBuilder const&)@Base" 0replaceme
463+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder()@Base" 0replaceme
464+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder(unity::scopes::qt::QVariantBuilder&&)@Base" 0replaceme
465+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder(unity::scopes::qt::internal::QVariantBuilderImpl*)@Base" 0replaceme
466+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder(unity::scopes::qt::QVariantBuilder const&)@Base" 0replaceme
467+ (c++)"unity::scopes::qt::QVariantBuilder::QVariantBuilder()@Base" 0replaceme
468+ (c++)"unity::scopes::qt::QVariantBuilder::~QVariantBuilder()@Base" 0replaceme
469+ (c++)"unity::scopes::qt::QVariantBuilder::~QVariantBuilder()@Base" 0replaceme
470+ (c++)"unity::scopes::qt::QVariantBuilder::~QVariantBuilder()@Base" 0replaceme
471+ (c++)"unity::scopes::qt::QVariantBuilder::operator=(unity::scopes::qt::QVariantBuilder&&)@Base" 0replaceme
472+ (c++)"unity::scopes::qt::QVariantBuilder::operator=(unity::scopes::qt::QVariantBuilder const&)@Base" 0replaceme
473+ (c++)"unity::scopes::qt::QSearchQueryBase::qt_metacall(QMetaObject::Call, int, void**)@Base" 0replaceme
474+ (c++)"unity::scopes::qt::QSearchQueryBase::qt_metacast(char const*)@Base" 0replaceme
475+ (c++)"unity::scopes::qt::QSearchQueryBase::staticMetaObject@Base" 0replaceme
476+ (c++)"unity::scopes::qt::QSearchQueryBase::init(unity::scopes::qt::QSearchQueryBaseAPI*)@Base" 0replaceme
477+ (c++)"unity::scopes::qt::QSearchQueryBase::subsearch(std::shared_ptr<unity::scopes::Scope> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unity::scopes::FilterState const&, std::shared_ptr<unity::scopes::SearchListenerBase> const&)@Base" 0replaceme
478+ (c++)"unity::scopes::qt::QSearchQueryBase::subsearch(std::shared_ptr<unity::scopes::Scope> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<unity::scopes::SearchListenerBase> const&)@Base" 0replaceme
479+ (c++)"unity::scopes::qt::QSearchQueryBase::subsearch(std::shared_ptr<unity::scopes::Scope> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unity::scopes::FilterState const&, unity::scopes::SearchMetadata const&, std::shared_ptr<unity::scopes::SearchListenerBase> const&)@Base" 0replaceme
480+ (c++)"unity::scopes::qt::QSearchQueryBase::subsearch(std::shared_ptr<unity::scopes::Scope> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unity::scopes::FilterState const&, std::shared_ptr<unity::scopes::SearchListenerBase> const&)@Base" 0replaceme
481+ (c++)"unity::scopes::qt::QSearchQueryBase::QSearchQueryBase(QObject*)@Base" 0replaceme
482+ (c++)"unity::scopes::qt::QSearchQueryBase::QSearchQueryBase(QObject*)@Base" 0replaceme
483+ (c++)"unity::scopes::qt::QSearchQueryBase::~QSearchQueryBase()@Base" 0replaceme
484+ (c++)"unity::scopes::qt::QSearchQueryBase::~QSearchQueryBase()@Base" 0replaceme
485+ (c++)"unity::scopes::qt::QSearchQueryBase::~QSearchQueryBase()@Base" 0replaceme
486+ (c++)"unity::scopes::qt::QPreviewQueryBase::qt_metacall(QMetaObject::Call, int, void**)@Base" 0replaceme
487+ (c++)"unity::scopes::qt::QPreviewQueryBase::qt_metacast(char const*)@Base" 0replaceme
488+ (c++)"unity::scopes::qt::QPreviewQueryBase::staticMetaObject@Base" 0replaceme
489+ (c++)"unity::scopes::qt::QPreviewQueryBase::init(unity::scopes::qt::QPreviewQueryBaseAPI*)@Base" 0replaceme
490+ (c++)"unity::scopes::qt::QPreviewQueryBase::QPreviewQueryBase(QObject*)@Base" 0replaceme
491+ (c++)"unity::scopes::qt::QPreviewQueryBase::QPreviewQueryBase(QObject*)@Base" 0replaceme
492+ (c++)"unity::scopes::qt::QPreviewQueryBase::~QPreviewQueryBase()@Base" 0replaceme
493+ (c++)"unity::scopes::qt::QPreviewQueryBase::~QPreviewQueryBase()@Base" 0replaceme
494+ (c++)"unity::scopes::qt::QPreviewQueryBase::~QPreviewQueryBase()@Base" 0replaceme
495+ (c++)"unity::scopes::qt::QCategorisedResult::set_category(std::shared_ptr<unity::scopes::qt::QCategory const>)@Base" 0replaceme
496+ (c++)"unity::scopes::qt::QCategorisedResult::QCategorisedResult(unity::scopes::qt::QCategorisedResult&&)@Base" 0replaceme
497+ (c++)"unity::scopes::qt::QCategorisedResult::QCategorisedResult(unity::scopes::qt::QCategorisedResult const&)@Base" 0replaceme
498+ (c++)"unity::scopes::qt::QCategorisedResult::QCategorisedResult(std::shared_ptr<unity::scopes::qt::QCategory const>)@Base" 0replaceme
499+ (c++)"unity::scopes::qt::QCategorisedResult::QCategorisedResult(unity::scopes::qt::QCategorisedResult&&)@Base" 0replaceme
500+ (c++)"unity::scopes::qt::QCategorisedResult::QCategorisedResult(unity::scopes::qt::QCategorisedResult const&)@Base" 0replaceme
501+ (c++)"unity::scopes::qt::QCategorisedResult::QCategorisedResult(std::shared_ptr<unity::scopes::qt::QCategory const>)@Base" 0replaceme
502+ (c++)"unity::scopes::qt::QCategorisedResult::~QCategorisedResult()@Base" 0replaceme
503+ (c++)"unity::scopes::qt::QCategorisedResult::~QCategorisedResult()@Base" 0replaceme
504+ (c++)"unity::scopes::qt::QCategorisedResult::~QCategorisedResult()@Base" 0replaceme
505+ (c++)"unity::scopes::qt::QCategorisedResult::operator=(unity::scopes::qt::QCategorisedResult&&)@Base" 0replaceme
506+ (c++)"unity::scopes::qt::QCategorisedResult::operator=(unity::scopes::qt::QCategorisedResult const&)@Base" 0replaceme
507+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::run_signal(std::shared_ptr<unity::scopes::qt::QSearchReply> const&)@Base" 0replaceme
508+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::qt_metacall(QMetaObject::Call, int, void**)@Base" 0replaceme
509+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::qt_metacast(char const*)@Base" 0replaceme
510+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::staticMetaObject@Base" 0replaceme
511+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::run(std::shared_ptr<unity::scopes::SearchReply> const&)@Base" 0replaceme
512+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::event(QEvent*)@Base" 0replaceme
513+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::cancelled()@Base" 0replaceme
514+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::QSearchQueryBaseAPI(std::shared_ptr<QCoreApplication>, unity::scopes::qt::QScopeBase&, unity::scopes::CannedQuery const&, unity::scopes::SearchMetadata const&, QObject*)@Base" 0replaceme
515+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::QSearchQueryBaseAPI(std::shared_ptr<QCoreApplication>, unity::scopes::qt::QScopeBase&, unity::scopes::CannedQuery const&, unity::scopes::SearchMetadata const&, QObject*)@Base" 0replaceme
516+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::~QSearchQueryBaseAPI()@Base" 0replaceme
517+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::~QSearchQueryBaseAPI()@Base" 0replaceme
518+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::~QSearchQueryBaseAPI()@Base" 0replaceme
519+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::qt_metacall(QMetaObject::Call, int, void**)@Base" 0replaceme
520+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::qt_metacast(char const*)@Base" 0replaceme
521+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::staticMetaObject@Base" 0replaceme
522+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::run(std::shared_ptr<unity::scopes::PreviewReply> const&)@Base" 0replaceme
523+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::event(QEvent*)@Base" 0replaceme
524+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::cancelled()@Base" 0replaceme
525+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::QPreviewQueryBaseAPI(std::shared_ptr<QCoreApplication>, unity::scopes::qt::QScopeBase&, unity::scopes::Result const&, unity::scopes::ActionMetadata const&, QObject*)@Base" 0replaceme
526+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::QPreviewQueryBaseAPI(std::shared_ptr<QCoreApplication>, unity::scopes::qt::QScopeBase&, unity::scopes::Result const&, unity::scopes::ActionMetadata const&, QObject*)@Base" 0replaceme
527+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::~QPreviewQueryBaseAPI()@Base" 0replaceme
528+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::~QPreviewQueryBaseAPI()@Base" 0replaceme
529+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::~QPreviewQueryBaseAPI()@Base" 0replaceme
530+ (c++)"unity::scopes::qt::qVariantToScopeVariant(QVariant const&)@Base" 0replaceme
531+ (c++)"unity::scopes::qt::scopeVariantToQVariant(unity::scopes::Variant const&)@Base" 0replaceme
532+ (c++)"unity::scopes::qt::qVariantMapToScopeVariantMap(QMap<QString, QVariant> const&)@Base" 0replaceme
533+ (c++)"unity::scopes::qt::scopeVariantMapToQVariantMap(std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unity::scopes::Variant, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unity::scopes::Variant> > > const&)@Base" 0replaceme
534+ (c++)"unity::scopes::qt::QResult::set_dnd_uri(QString const&)@Base" 0replaceme
535+ (c++)"unity::scopes::qt::QResult::set_intercept_activation()@Base" 0replaceme
536+ (c++)"unity::scopes::qt::QResult::store(unity::scopes::qt::QResult const&, bool)@Base" 0replaceme
537+ (c++)"unity::scopes::qt::QResult::set_art(QString const&)@Base" 0replaceme
538+ (c++)"unity::scopes::qt::QResult::set_uri(QString const&)@Base" 0replaceme
539+ (c++)"unity::scopes::qt::QResult::set_title(QString const&)@Base" 0replaceme
540+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::qt::QResult&&)@Base" 0replaceme
541+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::qt::internal::QResultImpl*)@Base" 0replaceme
542+ (c++)"unity::scopes::qt::QResult::QResult(QMap<QString, QVariant> const&)@Base" 0replaceme
543+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::Result const&)@Base" 0replaceme
544+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::qt::QResult const&)@Base" 0replaceme
545+ (c++)"unity::scopes::qt::QResult::QResult()@Base" 0replaceme
546+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::qt::QResult&&)@Base" 0replaceme
547+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::qt::internal::QResultImpl*)@Base" 0replaceme
548+ (c++)"unity::scopes::qt::QResult::QResult(QMap<QString, QVariant> const&)@Base" 0replaceme
549+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::Result const&)@Base" 0replaceme
550+ (c++)"unity::scopes::qt::QResult::QResult(unity::scopes::qt::QResult const&)@Base" 0replaceme
551+ (c++)"unity::scopes::qt::QResult::QResult()@Base" 0replaceme
552+ (c++)"unity::scopes::qt::QResult::~QResult()@Base" 0replaceme
553+ (c++)"unity::scopes::qt::QResult::~QResult()@Base" 0replaceme
554+ (c++)"unity::scopes::qt::QResult::~QResult()@Base" 0replaceme
555+ (c++)"unity::scopes::qt::QResult::operator=(unity::scopes::qt::QResult&&)@Base" 0replaceme
556+ (c++)"unity::scopes::qt::QResult::operator=(unity::scopes::qt::QResult const&)@Base" 0replaceme
557+ (c++)"unity::scopes::qt::QResult::operator[](QString const&)@Base" 0replaceme
558+ (c++)"unity::scopes::qt::RunEvent::~RunEvent()@Base" 0replaceme
559+ (c++)"unity::scopes::qt::RunEvent::~RunEvent()@Base" 0replaceme
560+ (c++)"unity::scopes::qt::RunEvent::~RunEvent()@Base" 0replaceme
561+ (c++)"unity::scopes::qt::QCategory::QCategory(unity::scopes::qt::internal::QCategoryImpl*)@Base" 0replaceme
562+ (c++)"unity::scopes::qt::QCategory::QCategory(std::shared_ptr<unity::scopes::Category const>)@Base" 0replaceme
563+ (c++)"unity::scopes::qt::QCategory::QCategory(unity::scopes::qt::internal::QCategoryImpl*)@Base" 0replaceme
564+ (c++)"unity::scopes::qt::QCategory::QCategory(std::shared_ptr<unity::scopes::Category const>)@Base" 0replaceme
565+ (c++)"unity::scopes::qt::QCategory::~QCategory()@Base" 0replaceme
566+ (c++)"unity::scopes::qt::QCategory::~QCategory()@Base" 0replaceme
567+ (c++)"unity::scopes::qt::QCategory::~QCategory()@Base" 0replaceme
568+ (c++)"unity::scopes::qt::XmlReader::XmlReader()@Base" 0replaceme
569+ (c++)"unity::scopes::qt::XmlReader::XmlReader()@Base" 0replaceme
570+ (c++)"unity::scopes::qt::JsonReader::read(QUrl const&) const@Base" 0replaceme
571+ (c++)"unity::scopes::qt::JsonReader::read(QString const&, QVector<QPair<QString, QString> > const&) const@Base" 0replaceme
572+ (c++)"unity::scopes::qt::QScopeBase::metaObject() const@Base" 0replaceme
573+ (c++)"unity::scopes::qt::QDepartment::subdepartments() const@Base" 0replaceme
574+ (c++)"unity::scopes::qt::QDepartment::alternate_label() const@Base" 0replaceme
575+ (c++)"unity::scopes::qt::QDepartment::has_subdepartments() const@Base" 0replaceme
576+ (c++)"unity::scopes::qt::QDepartment::id() const@Base" 0replaceme
577+ (c++)"unity::scopes::qt::QDepartment::label() const@Base" 0replaceme
578+ (c++)"unity::scopes::qt::QDepartment::query() const@Base" 0replaceme
579+ (c++)"unity::scopes::qt::QDepartment::serialize() const@Base" 0replaceme
580+ (c++)"unity::scopes::qt::QCannedQuery::filter_state() const@Base" 0replaceme
581+ (c++)"unity::scopes::qt::QCannedQuery::query_string() const@Base" 0replaceme
582+ (c++)"unity::scopes::qt::QCannedQuery::department_id() const@Base" 0replaceme
583+ (c++)"unity::scopes::qt::QCannedQuery::to_uri() const@Base" 0replaceme
584+ (c++)"unity::scopes::qt::QCannedQuery::scope_id() const@Base" 0replaceme
585+ (c++)"unity::scopes::qt::QCannedQuery::serialize() const@Base" 0replaceme
586+ (c++)"unity::scopes::qt::QSearchReply::metaObject() const@Base" 0replaceme
587+ (c++)"unity::scopes::qt::QColumnLayout::number_of_columns() const@Base" 0replaceme
588+ (c++)"unity::scopes::qt::QColumnLayout::size() const@Base" 0replaceme
589+ (c++)"unity::scopes::qt::QColumnLayout::column(int) const@Base" 0replaceme
590+ (c++)"unity::scopes::qt::QColumnLayout::serialize() const@Base" 0replaceme
591+ (c++)"unity::scopes::qt::QPreviewReply::metaObject() const@Base" 0replaceme
592+ (c++)"unity::scopes::qt::QPreviewWidget::widget_type() const@Base" 0replaceme
593+ (c++)"unity::scopes::qt::QPreviewWidget::attribute_values() const@Base" 0replaceme
594+ (c++)"unity::scopes::qt::QPreviewWidget::attribute_mappings() const@Base" 0replaceme
595+ (c++)"unity::scopes::qt::QPreviewWidget::id() const@Base" 0replaceme
596+ (c++)"unity::scopes::qt::QPreviewWidget::data() const@Base" 0replaceme
597+ (c++)"unity::scopes::qt::QPreviewWidget::widgets() const@Base" 0replaceme
598+ (c++)"unity::scopes::qt::QPreviewWidget::serialize() const@Base" 0replaceme
599+ (c++)"unity::scopes::qt::XmlAsyncReader::async_get_parser(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0replaceme
600+ (c++)"unity::scopes::qt::XmlAsyncReader::async_get_parser(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0replaceme
601+ (c++)"unity::scopes::qt::HttpAsyncReader::async_execute(core::net::http::Request::Handler const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0replaceme
602+ (c++)"unity::scopes::qt::HttpAsyncReader::progress_report(core::net::http::Request::Progress const&) const@Base" 0replaceme
603+ (c++)"unity::scopes::qt::HttpAsyncReader::get_uri(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0replaceme
604+ (c++)"unity::scopes::qt::JsonAsyncReader::async_get_parser(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0replaceme
605+ (c++)"unity::scopes::qt::JsonAsyncReader::async_get_parser(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0replaceme
606+ (c++)"unity::scopes::qt::QActionMetadata::scope_data() const@Base" 0replaceme
607+ (c++)"unity::scopes::qt::QActionMetadata::contains_hint(QString const&) const@Base" 0replaceme
608+ (c++)"unity::scopes::qt::QActionMetadata::hints() const@Base" 0replaceme
609+ (c++)"unity::scopes::qt::QActionMetadata::operator[](QString const&) const@Base" 0replaceme
610+ (c++)"unity::scopes::qt::QSearchMetadata::cardinality() const@Base" 0replaceme
611+ (c++)"unity::scopes::qt::QSearchMetadata::has_location() const@Base" 0replaceme
612+ (c++)"unity::scopes::qt::QSearchMetadata::contains_hint(QString const&) const@Base" 0replaceme
613+ (c++)"unity::scopes::qt::QSearchMetadata::hints() const@Base" 0replaceme
614+ (c++)"unity::scopes::qt::QSearchMetadata::location() const@Base" 0replaceme
615+ (c++)"unity::scopes::qt::QSearchMetadata::operator[](QString const&) const@Base" 0replaceme
616+ (c++)"unity::scopes::qt::QSearchQueryBase::metaObject() const@Base" 0replaceme
617+ (c++)"unity::scopes::qt::QSearchQueryBase::search_metadata() const@Base" 0replaceme
618+ (c++)"unity::scopes::qt::QSearchQueryBase::query() const@Base" 0replaceme
619+ (c++)"unity::scopes::qt::QPreviewQueryBase::metaObject() const@Base" 0replaceme
620+ (c++)"unity::scopes::qt::QPreviewQueryBase::action_metadata() const@Base" 0replaceme
621+ (c++)"unity::scopes::qt::QPreviewQueryBase::result() const@Base" 0replaceme
622+ (c++)"unity::scopes::qt::QCategorisedResult::fwd() const@Base" 0replaceme
623+ (c++)"unity::scopes::qt::QCategorisedResult::category() const@Base" 0replaceme
624+ (c++)"unity::scopes::qt::QSearchQueryBaseAPI::metaObject() const@Base" 0replaceme
625+ (c++)"unity::scopes::qt::QPreviewQueryBaseAPI::metaObject() const@Base" 0replaceme
626+ (c++)"unity::scopes::qt::QResult::direct_activation() const@Base" 0replaceme
627+ (c++)"unity::scopes::qt::QResult::has_stored_result() const@Base" 0replaceme
628+ (c++)"unity::scopes::qt::QResult::target_scope_proxy() const@Base" 0replaceme
629+ (c++)"unity::scopes::qt::QResult::art() const@Base" 0replaceme
630+ (c++)"unity::scopes::qt::QResult::uri() const@Base" 0replaceme
631+ (c++)"unity::scopes::qt::QResult::title() const@Base" 0replaceme
632+ (c++)"unity::scopes::qt::QResult::value(QString const&) const@Base" 0replaceme
633+ (c++)"unity::scopes::qt::QResult::dnd_uri() const@Base" 0replaceme
634+ (c++)"unity::scopes::qt::QResult::contains(QString const&) const@Base" 0replaceme
635+ (c++)"unity::scopes::qt::QResult::retrieve() const@Base" 0replaceme
636+ (c++)"unity::scopes::qt::QResult::serialize() const@Base" 0replaceme
637+ (c++)"unity::scopes::qt::QResult::operator[](QString const&) const@Base" 0replaceme
638+ (c++)"unity::scopes::qt::QCategory::renderer_template() const@Base" 0replaceme
639+ (c++)"unity::scopes::qt::QCategory::id() const@Base" 0replaceme
640+ (c++)"unity::scopes::qt::QCategory::icon() const@Base" 0replaceme
641+ (c++)"unity::scopes::qt::QCategory::query() const@Base" 0replaceme
642+ (c++)"unity::scopes::qt::QCategory::title() const@Base" 0replaceme
643+ (c++)"unity::scopes::qt::QCategory::serialize() const@Base" 0replaceme
644+ (c++)"unity::scopes::qt::XmlReader::read(QUrl const&) const@Base" 0replaceme
645+ (c++)"unity::scopes::qt::XmlReader::read(QString const&, QVector<QPair<QString, QString> > const&) const@Base" 0replaceme
646+ (c++)"typeinfo for unity::scopes::qt::QScopeBase@Base" 0replaceme
647+ (c++)"typeinfo for unity::scopes::qt::QSearchReply@Base" 0replaceme
648+ (c++)"typeinfo for unity::scopes::qt::QPreviewReply@Base" 0replaceme
649+ (c++)"typeinfo for unity::scopes::qt::QScopeBaseAPI@Base" 0replaceme
650+ (c++)"typeinfo for unity::scopes::qt::CancelledEvent@Base" 0replaceme
651+ (c++)"typeinfo for unity::scopes::qt::QPreviewWidget@Base" 0replaceme
652+ (c++)"typeinfo for unity::scopes::qt::XmlAsyncReader@Base" 0replaceme
653+ (c++)"typeinfo for unity::scopes::qt::HttpAsyncReader@Base" 0replaceme
654+ (c++)"typeinfo for unity::scopes::qt::InitializeEvent@Base" 0replaceme
655+ (c++)"typeinfo for unity::scopes::qt::JsonAsyncReader@Base" 0replaceme
656+ (c++)"typeinfo for unity::scopes::qt::QVariantBuilder@Base" 0replaceme
657+ (c++)"typeinfo for unity::scopes::qt::QSearchQueryBase@Base" 0replaceme
658+ (c++)"typeinfo for unity::scopes::qt::QPreviewQueryBase@Base" 0replaceme
659+ (c++)"typeinfo for unity::scopes::qt::QCategorisedResult@Base" 0replaceme
660+ (c++)"typeinfo for unity::scopes::qt::QSearchQueryBaseAPI@Base" 0replaceme
661+ (c++)"typeinfo for unity::scopes::qt::QPreviewQueryBaseAPI@Base" 0replaceme
662+ (c++)"typeinfo for unity::scopes::qt::QResult@Base" 0replaceme
663+ (c++)"typeinfo for unity::scopes::qt::RunEvent@Base" 0replaceme
664+ (c++)"typeinfo for unity::scopes::qt::QCategory@Base" 0replaceme
665+ (c++)"typeinfo name for unity::scopes::qt::QScopeBase@Base" 0replaceme
666+ (c++)"typeinfo name for unity::scopes::qt::QSearchReply@Base" 0replaceme
667+ (c++)"typeinfo name for unity::scopes::qt::QPreviewReply@Base" 0replaceme
668+ (c++)"typeinfo name for unity::scopes::qt::QScopeBaseAPI@Base" 0replaceme
669+ (c++)"typeinfo name for unity::scopes::qt::CancelledEvent@Base" 0replaceme
670+ (c++)"typeinfo name for unity::scopes::qt::QPreviewWidget@Base" 0replaceme
671+ (c++)"typeinfo name for unity::scopes::qt::XmlAsyncReader@Base" 0replaceme
672+ (c++)"typeinfo name for unity::scopes::qt::HttpAsyncReader@Base" 0replaceme
673+ (c++)"typeinfo name for unity::scopes::qt::InitializeEvent@Base" 0replaceme
674+ (c++)"typeinfo name for unity::scopes::qt::JsonAsyncReader@Base" 0replaceme
675+ (c++)"typeinfo name for unity::scopes::qt::QVariantBuilder@Base" 0replaceme
676+ (c++)"typeinfo name for unity::scopes::qt::QSearchQueryBase@Base" 0replaceme
677+ (c++)"typeinfo name for unity::scopes::qt::QPreviewQueryBase@Base" 0replaceme
678+ (c++)"typeinfo name for unity::scopes::qt::QCategorisedResult@Base" 0replaceme
679+ (c++)"typeinfo name for unity::scopes::qt::QSearchQueryBaseAPI@Base" 0replaceme
680+ (c++)"typeinfo name for unity::scopes::qt::QPreviewQueryBaseAPI@Base" 0replaceme
681+ (c++)"typeinfo name for unity::scopes::qt::QResult@Base" 0replaceme
682+ (c++)"typeinfo name for unity::scopes::qt::RunEvent@Base" 0replaceme
683+ (c++)"typeinfo name for unity::scopes::qt::QCategory@Base" 0replaceme
684+ (c++)"vtable for unity::scopes::qt::QScopeBase@Base" 0replaceme
685+ (c++)"vtable for unity::scopes::qt::QSearchReply@Base" 0replaceme
686+ (c++)"vtable for unity::scopes::qt::QPreviewReply@Base" 0replaceme
687+ (c++)"vtable for unity::scopes::qt::QScopeBaseAPI@Base" 0replaceme
688+ (c++)"vtable for unity::scopes::qt::CancelledEvent@Base" 0replaceme
689+ (c++)"vtable for unity::scopes::qt::QPreviewWidget@Base" 0replaceme
690+ (c++)"vtable for unity::scopes::qt::XmlAsyncReader@Base" 0replaceme
691+ (c++)"vtable for unity::scopes::qt::HttpAsyncReader@Base" 0replaceme
692+ (c++)"vtable for unity::scopes::qt::InitializeEvent@Base" 0replaceme
693+ (c++)"vtable for unity::scopes::qt::JsonAsyncReader@Base" 0replaceme
694+ (c++)"vtable for unity::scopes::qt::QVariantBuilder@Base" 0replaceme
695+ (c++)"vtable for unity::scopes::qt::QSearchQueryBase@Base" 0replaceme
696+ (c++)"vtable for unity::scopes::qt::QPreviewQueryBase@Base" 0replaceme
697+ (c++)"vtable for unity::scopes::qt::QCategorisedResult@Base" 0replaceme
698+ (c++)"vtable for unity::scopes::qt::QSearchQueryBaseAPI@Base" 0replaceme
699+ (c++)"vtable for unity::scopes::qt::QPreviewQueryBaseAPI@Base" 0replaceme
700+ (c++)"vtable for unity::scopes::qt::QResult@Base" 0replaceme
701+ (c++)"vtable for unity::scopes::qt::RunEvent@Base" 0replaceme
702+ (c++)"vtable for unity::scopes::qt::QCategory@Base" 0replaceme
703
704=== added file 'doc/Doxyfile-scopes-qt.in'
705--- doc/Doxyfile-scopes-qt.in 1970-01-01 00:00:00 +0000
706+++ doc/Doxyfile-scopes-qt.in 2015-02-05 11:31:47 +0000
707@@ -0,0 +1,1797 @@
708+# Doxyfile 1.8.1.2
709+
710+# This file describes the settings to be used by the documentation system
711+# doxygen (www.doxygen.org) for a project
712+#
713+# All text after a hash (#) is considered a comment and will be ignored
714+# The format is:
715+# TAG = value [value, ...]
716+# For lists items can also be appended using:
717+# TAG += value [value, ...]
718+# Values that contain spaces should be placed between quotes (" ")
719+
720+#---------------------------------------------------------------------------
721+# Project related configuration options
722+#---------------------------------------------------------------------------
723+
724+# This tag specifies the encoding used for all characters in the config file
725+# that follow. The default is UTF-8 which is also the encoding used for all
726+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
727+# iconv built into libc) for the transcoding. See
728+# http://www.gnu.org/software/libiconv for the list of possible encodings.
729+
730+DOXYFILE_ENCODING = UTF-8
731+
732+# The PROJECT_NAME tag is a single word (or sequence of words) that should
733+# identify the project. Note that if you do not use Doxywizard you need
734+# to put quotes around the project name if it contains spaces.
735+
736+PROJECT_NAME = "Unity Scopes Qt library"
737+
738+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
739+# This could be handy for archiving the generated documentation or
740+# if some version control system is used.
741+
742+PROJECT_NUMBER =
743+
744+# Using the PROJECT_BRIEF tag one can provide an optional one line description
745+# for a project that appears at the top of each page and should give viewer
746+# a quick idea about the purpose of the project. Keep the description short.
747+
748+PROJECT_BRIEF =
749+
750+# With the PROJECT_LOGO tag one can specify an logo or icon that is
751+# included in the documentation. The maximum height of the logo should not
752+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
753+# Doxygen will copy the logo to the output directory.
754+
755+PROJECT_LOGO =
756+
757+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
758+# base path where the generated documentation will be put.
759+# If a relative path is entered, it will be relative to the location
760+# where doxygen was started. If left blank the current directory will be used.
761+
762+OUTPUT_DIRECTORY = @PROJECT_BINARY_DIR@/doc-scopes-qt
763+
764+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
765+# 4096 sub-directories (in 2 levels) under the output directory of each output
766+# format and will distribute the generated files over these directories.
767+# Enabling this option can be useful when feeding doxygen a huge amount of
768+# source files, where putting all generated files in the same directory would
769+# otherwise cause performance problems for the file system.
770+
771+CREATE_SUBDIRS = NO
772+
773+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
774+# documentation generated by doxygen is written. Doxygen will use this
775+# information to generate all constant output in the proper language.
776+# The default language is English, other supported languages are:
777+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
778+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
779+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
780+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
781+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
782+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
783+
784+OUTPUT_LANGUAGE = English
785+
786+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
787+# include brief member descriptions after the members that are listed in
788+# the file and class documentation (similar to JavaDoc).
789+# Set to NO to disable this.
790+
791+BRIEF_MEMBER_DESC = YES
792+
793+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
794+# the brief description of a member or function before the detailed description.
795+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
796+# brief descriptions will be completely suppressed.
797+
798+REPEAT_BRIEF = YES
799+
800+# This tag implements a quasi-intelligent brief description abbreviator
801+# that is used to form the text in various listings. Each string
802+# in this list, if found as the leading text of the brief description, will be
803+# stripped from the text and the result after processing the whole list, is
804+# used as the annotated text. Otherwise, the brief description is used as-is.
805+# If left blank, the following values are used ("$name" is automatically
806+# replaced with the name of the entity): "The $name class" "The $name widget"
807+# "The $name file" "is" "provides" "specifies" "contains"
808+# "represents" "a" "an" "the"
809+
810+ABBREVIATE_BRIEF = "The $name class" \
811+ "The $name widget" \
812+ "The $name file" \
813+ is \
814+ provides \
815+ specifies \
816+ contains \
817+ represents \
818+ a \
819+ an \
820+ the
821+
822+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
823+# Doxygen will generate a detailed section even if there is only a brief
824+# description.
825+
826+ALWAYS_DETAILED_SEC = NO
827+
828+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
829+# inherited members of a class in the documentation of that class as if those
830+# members were ordinary class members. Constructors, destructors and assignment
831+# operators of the base classes will not be shown.
832+
833+INLINE_INHERITED_MEMB = NO
834+
835+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
836+# path before files name in the file list and in the header files. If set
837+# to NO the shortest path that makes the file name unique will be used.
838+
839+FULL_PATH_NAMES = YES
840+
841+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
842+# can be used to strip a user-defined part of the path. Stripping is
843+# only done if one of the specified strings matches the left-hand part of
844+# the path. The tag can be used to show relative paths in the file list.
845+# If left blank the directory from which doxygen is run is used as the
846+# path to strip.
847+
848+STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@ @PROJECT_BINARY_DIR@
849+
850+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
851+# the path mentioned in the documentation of a class, which tells
852+# the reader which header file to include in order to use a class.
853+# If left blank only the name of the header file containing the class
854+# definition is used. Otherwise one should specify the include paths that
855+# are normally passed to the compiler using the -I flag.
856+
857+STRIP_FROM_INC_PATH = @PROJECT_SOURCE_DIR@/include @PROJECT_BINARY_DIR@/include
858+
859+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
860+# (but less readable) file names. This can be useful if your file system
861+# doesn't support long names like on DOS, Mac, or CD-ROM.
862+
863+SHORT_NAMES = NO
864+
865+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
866+# will interpret the first line (until the first dot) of a JavaDoc-style
867+# comment as the brief description. If set to NO, the JavaDoc
868+# comments will behave just like regular Qt-style comments
869+# (thus requiring an explicit @brief command for a brief description.)
870+
871+JAVADOC_AUTOBRIEF = NO
872+
873+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
874+# interpret the first line (until the first dot) of a Qt-style
875+# comment as the brief description. If set to NO, the comments
876+# will behave just like regular Qt-style comments (thus requiring
877+# an explicit \brief command for a brief description.)
878+
879+QT_AUTOBRIEF = NO
880+
881+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
882+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
883+# comments) as a brief description. This used to be the default behaviour.
884+# The new default is to treat a multi-line C++ comment block as a detailed
885+# description. Set this tag to YES if you prefer the old behaviour instead.
886+
887+MULTILINE_CPP_IS_BRIEF = NO
888+
889+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
890+# member inherits the documentation from any documented member that it
891+# re-implements.
892+
893+INHERIT_DOCS = YES
894+
895+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
896+# a new page for each member. If set to NO, the documentation of a member will
897+# be part of the file/class/namespace that contains it.
898+
899+SEPARATE_MEMBER_PAGES = NO
900+
901+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
902+# Doxygen uses this value to replace tabs by spaces in code fragments.
903+
904+TAB_SIZE = 8
905+
906+# This tag can be used to specify a number of aliases that acts
907+# as commands in the documentation. An alias has the form "name=value".
908+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
909+# put the command \sideeffect (or @sideeffect) in the documentation, which
910+# will result in a user-defined paragraph with heading "Side Effects:".
911+# You can put \n's in the value part of an alias to insert newlines.
912+
913+ALIASES =
914+
915+# This tag can be used to specify a number of word-keyword mappings (TCL only).
916+# A mapping has the form "name=value". For example adding
917+# "class=itcl::class" will allow you to use the command class in the
918+# itcl::class meaning.
919+
920+TCL_SUBST =
921+
922+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
923+# sources only. Doxygen will then generate output that is more tailored for C.
924+# For instance, some of the names that are used will be different. The list
925+# of all members will be omitted, etc.
926+
927+OPTIMIZE_OUTPUT_FOR_C = NO
928+
929+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
930+# sources only. Doxygen will then generate output that is more tailored for
931+# Java. For instance, namespaces will be presented as packages, qualified
932+# scopes will look different, etc.
933+
934+OPTIMIZE_OUTPUT_JAVA = NO
935+
936+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
937+# sources only. Doxygen will then generate output that is more tailored for
938+# Fortran.
939+
940+OPTIMIZE_FOR_FORTRAN = NO
941+
942+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
943+# sources. Doxygen will then generate output that is tailored for
944+# VHDL.
945+
946+OPTIMIZE_OUTPUT_VHDL = NO
947+
948+# Doxygen selects the parser to use depending on the extension of the files it
949+# parses. With this tag you can assign which parser to use for a given extension.
950+# Doxygen has a built-in mapping, but you can override or extend it using this
951+# tag. The format is ext=language, where ext is a file extension, and language
952+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
953+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
954+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
955+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
956+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
957+
958+EXTENSION_MAPPING =
959+
960+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
961+# comments according to the Markdown format, which allows for more readable
962+# documentation. See http://daringfireball.net/projects/markdown/ for details.
963+# The output of markdown processing is further processed by doxygen, so you
964+# can mix doxygen, HTML, and XML commands with Markdown formatting.
965+# Disable only in case of backward compatibilities issues.
966+
967+MARKDOWN_SUPPORT = YES
968+
969+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
970+# to include (a tag file for) the STL sources as input, then you should
971+# set this tag to YES in order to let doxygen match functions declarations and
972+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
973+# func(std::string) {}). This also makes the inheritance and collaboration
974+# diagrams that involve STL classes more complete and accurate.
975+
976+BUILTIN_STL_SUPPORT = YES
977+
978+# If you use Microsoft's C++/CLI language, you should set this option to YES to
979+# enable parsing support.
980+
981+CPP_CLI_SUPPORT = NO
982+
983+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
984+# Doxygen will parse them like normal C++ but will assume all classes use public
985+# instead of private inheritance when no explicit protection keyword is present.
986+
987+SIP_SUPPORT = NO
988+
989+# For Microsoft's IDL there are propget and propput attributes to indicate getter
990+# and setter methods for a property. Setting this option to YES (the default)
991+# will make doxygen replace the get and set methods by a property in the
992+# documentation. This will only work if the methods are indeed getting or
993+# setting a simple type. If this is not the case, or you want to show the
994+# methods anyway, you should set this option to NO.
995+
996+IDL_PROPERTY_SUPPORT = YES
997+
998+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
999+# tag is set to YES, then doxygen will reuse the documentation of the first
1000+# member in the group (if any) for the other members of the group. By default
1001+# all members of a group must be documented explicitly.
1002+
1003+DISTRIBUTE_GROUP_DOC = NO
1004+
1005+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
1006+# the same type (for instance a group of public functions) to be put as a
1007+# subgroup of that type (e.g. under the Public Functions section). Set it to
1008+# NO to prevent subgrouping. Alternatively, this can be done per class using
1009+# the \nosubgrouping command.
1010+
1011+SUBGROUPING = YES
1012+
1013+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
1014+# unions are shown inside the group in which they are included (e.g. using
1015+# @ingroup) instead of on a separate page (for HTML and Man pages) or
1016+# section (for LaTeX and RTF).
1017+
1018+INLINE_GROUPED_CLASSES = NO
1019+
1020+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
1021+# unions with only public data fields will be shown inline in the documentation
1022+# of the scope in which they are defined (i.e. file, namespace, or group
1023+# documentation), provided this scope is documented. If set to NO (the default),
1024+# structs, classes, and unions are shown on a separate page (for HTML and Man
1025+# pages) or section (for LaTeX and RTF).
1026+
1027+INLINE_SIMPLE_STRUCTS = NO
1028+
1029+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
1030+# is documented as struct, union, or enum with the name of the typedef. So
1031+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
1032+# with name TypeT. When disabled the typedef will appear as a member of a file,
1033+# namespace, or class. And the struct will be named TypeS. This can typically
1034+# be useful for C code in case the coding convention dictates that all compound
1035+# types are typedef'ed and only the typedef is referenced, never the tag name.
1036+
1037+TYPEDEF_HIDES_STRUCT = NO
1038+
1039+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
1040+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
1041+# their name and scope. Since this can be an expensive process and often the
1042+# same symbol appear multiple times in the code, doxygen keeps a cache of
1043+# pre-resolved symbols. If the cache is too small doxygen will become slower.
1044+# If the cache is too large, memory is wasted. The cache size is given by this
1045+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
1046+# corresponding to a cache size of 2^16 = 65536 symbols.
1047+
1048+LOOKUP_CACHE_SIZE = 0
1049+
1050+#---------------------------------------------------------------------------
1051+# Build related configuration options
1052+#---------------------------------------------------------------------------
1053+
1054+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
1055+# documentation are documented, even if no documentation was available.
1056+# Private class members and static file members will be hidden unless
1057+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
1058+
1059+EXTRACT_ALL = NO
1060+
1061+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
1062+# will be included in the documentation.
1063+
1064+EXTRACT_PRIVATE = NO
1065+
1066+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
1067+# scope will be included in the documentation.
1068+
1069+EXTRACT_PACKAGE = NO
1070+
1071+# If the EXTRACT_STATIC tag is set to YES all static members of a file
1072+# will be included in the documentation.
1073+
1074+EXTRACT_STATIC = NO
1075+
1076+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
1077+# defined locally in source files will be included in the documentation.
1078+# If set to NO only classes defined in header files are included.
1079+
1080+EXTRACT_LOCAL_CLASSES = YES
1081+
1082+# This flag is only useful for Objective-C code. When set to YES local
1083+# methods, which are defined in the implementation section but not in
1084+# the interface are included in the documentation.
1085+# If set to NO (the default) only methods in the interface are included.
1086+
1087+EXTRACT_LOCAL_METHODS = NO
1088+
1089+# If this flag is set to YES, the members of anonymous namespaces will be
1090+# extracted and appear in the documentation as a namespace called
1091+# 'anonymous_namespace{file}', where file will be replaced with the base
1092+# name of the file that contains the anonymous namespace. By default
1093+# anonymous namespaces are hidden.
1094+
1095+EXTRACT_ANON_NSPACES = NO
1096+
1097+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
1098+# undocumented members of documented classes, files or namespaces.
1099+# If set to NO (the default) these members will be included in the
1100+# various overviews, but no documentation section is generated.
1101+# This option has no effect if EXTRACT_ALL is enabled.
1102+
1103+HIDE_UNDOC_MEMBERS = NO
1104+
1105+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
1106+# undocumented classes that are normally visible in the class hierarchy.
1107+# If set to NO (the default) these classes will be included in the various
1108+# overviews. This option has no effect if EXTRACT_ALL is enabled.
1109+
1110+HIDE_UNDOC_CLASSES = NO
1111+
1112+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
1113+# friend (class|struct|union) declarations.
1114+# If set to NO (the default) these declarations will be included in the
1115+# documentation.
1116+
1117+HIDE_FRIEND_COMPOUNDS = YES
1118+
1119+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
1120+# documentation blocks found inside the body of a function.
1121+# If set to NO (the default) these blocks will be appended to the
1122+# function's detailed documentation block.
1123+
1124+HIDE_IN_BODY_DOCS = NO
1125+
1126+# The INTERNAL_DOCS tag determines if documentation
1127+# that is typed after a \internal command is included. If the tag is set
1128+# to NO (the default) then the documentation will be excluded.
1129+# Set it to YES to include the internal documentation.
1130+
1131+INTERNAL_DOCS = NO
1132+
1133+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
1134+# file names in lower-case letters. If set to YES upper-case letters are also
1135+# allowed. This is useful if you have classes or files whose names only differ
1136+# in case and if your file system supports case sensitive file names. Windows
1137+# and Mac users are advised to set this option to NO.
1138+
1139+CASE_SENSE_NAMES = NO
1140+
1141+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
1142+# will show members with their full class and namespace scopes in the
1143+# documentation. If set to YES the scope will be hidden.
1144+
1145+HIDE_SCOPE_NAMES = NO
1146+
1147+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
1148+# will put a list of the files that are included by a file in the documentation
1149+# of that file.
1150+
1151+SHOW_INCLUDE_FILES = YES
1152+
1153+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
1154+# will list include files with double quotes in the documentation
1155+# rather than with sharp brackets.
1156+
1157+FORCE_LOCAL_INCLUDES = NO
1158+
1159+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
1160+# is inserted in the documentation for inline members.
1161+
1162+INLINE_INFO = YES
1163+
1164+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
1165+# will sort the (detailed) documentation of file and class members
1166+# alphabetically by member name. If set to NO the members will appear in
1167+# declaration order.
1168+
1169+SORT_MEMBER_DOCS = YES
1170+
1171+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
1172+# brief documentation of file, namespace and class members alphabetically
1173+# by member name. If set to NO (the default) the members will appear in
1174+# declaration order.
1175+
1176+SORT_BRIEF_DOCS = NO
1177+
1178+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
1179+# will sort the (brief and detailed) documentation of class members so that
1180+# constructors and destructors are listed first. If set to NO (the default)
1181+# the constructors will appear in the respective orders defined by
1182+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
1183+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
1184+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
1185+
1186+SORT_MEMBERS_CTORS_1ST = NO
1187+
1188+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
1189+# hierarchy of group names into alphabetical order. If set to NO (the default)
1190+# the group names will appear in their defined order.
1191+
1192+SORT_GROUP_NAMES = NO
1193+
1194+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
1195+# sorted by fully-qualified names, including namespaces. If set to
1196+# NO (the default), the class list will be sorted only by class name,
1197+# not including the namespace part.
1198+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
1199+# Note: This option applies only to the class list, not to the
1200+# alphabetical list.
1201+
1202+SORT_BY_SCOPE_NAME = NO
1203+
1204+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
1205+# do proper type resolution of all parameters of a function it will reject a
1206+# match between the prototype and the implementation of a member function even
1207+# if there is only one candidate or it is obvious which candidate to choose
1208+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
1209+# will still accept a match between prototype and implementation in such cases.
1210+
1211+STRICT_PROTO_MATCHING = NO
1212+
1213+# The GENERATE_TODOLIST tag can be used to enable (YES) or
1214+# disable (NO) the todo list. This list is created by putting \todo
1215+# commands in the documentation.
1216+
1217+GENERATE_TODOLIST = YES
1218+
1219+# The GENERATE_TESTLIST tag can be used to enable (YES) or
1220+# disable (NO) the test list. This list is created by putting \test
1221+# commands in the documentation.
1222+
1223+GENERATE_TESTLIST = YES
1224+
1225+# The GENERATE_BUGLIST tag can be used to enable (YES) or
1226+# disable (NO) the bug list. This list is created by putting \bug
1227+# commands in the documentation.
1228+
1229+GENERATE_BUGLIST = YES
1230+
1231+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
1232+# disable (NO) the deprecated list. This list is created by putting
1233+# \deprecated commands in the documentation.
1234+
1235+GENERATE_DEPRECATEDLIST= YES
1236+
1237+# The ENABLED_SECTIONS tag can be used to enable conditional
1238+# documentation sections, marked by \if sectionname ... \endif.
1239+
1240+ENABLED_SECTIONS =
1241+
1242+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
1243+# the initial value of a variable or macro consists of for it to appear in
1244+# the documentation. If the initializer consists of more lines than specified
1245+# here it will be hidden. Use a value of 0 to hide initializers completely.
1246+# The appearance of the initializer of individual variables and macros in the
1247+# documentation can be controlled using \showinitializer or \hideinitializer
1248+# command in the documentation regardless of this setting.
1249+
1250+MAX_INITIALIZER_LINES = 30
1251+
1252+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
1253+# at the bottom of the documentation of classes and structs. If set to YES the
1254+# list will mention the files that were used to generate the documentation.
1255+
1256+SHOW_USED_FILES = YES
1257+
1258+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
1259+# This will remove the Files entry from the Quick Index and from the
1260+# Folder Tree View (if specified). The default is YES.
1261+
1262+SHOW_FILES = YES
1263+
1264+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
1265+# Namespaces page. This will remove the Namespaces entry from the Quick Index
1266+# and from the Folder Tree View (if specified). The default is YES.
1267+
1268+SHOW_NAMESPACES = YES
1269+
1270+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
1271+# doxygen should invoke to get the current version for each file (typically from
1272+# the version control system). Doxygen will invoke the program by executing (via
1273+# popen()) the command <command> <input-file>, where <command> is the value of
1274+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
1275+# provided by doxygen. Whatever the program writes to standard output
1276+# is used as the file version. See the manual for examples.
1277+
1278+FILE_VERSION_FILTER =
1279+
1280+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
1281+# by doxygen. The layout file controls the global structure of the generated
1282+# output files in an output format independent way. To create the layout file
1283+# that represents doxygen's defaults, run doxygen with the -l option.
1284+# You can optionally specify a file name after the option, if omitted
1285+# DoxygenLayout.xml will be used as the name of the layout file.
1286+
1287+LAYOUT_FILE =
1288+
1289+# The CITE_BIB_FILES tag can be used to specify one or more bib files
1290+# containing the references data. This must be a list of .bib files. The
1291+# .bib extension is automatically appended if omitted. Using this command
1292+# requires the bibtex tool to be installed. See also
1293+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
1294+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
1295+# feature you need bibtex and perl available in the search path.
1296+
1297+CITE_BIB_FILES =
1298+
1299+#---------------------------------------------------------------------------
1300+# configuration options related to warning and progress messages
1301+#---------------------------------------------------------------------------
1302+
1303+# The QUIET tag can be used to turn on/off the messages that are generated
1304+# by doxygen. Possible values are YES and NO. If left blank NO is used.
1305+
1306+QUIET = YES
1307+
1308+# The WARNINGS tag can be used to turn on/off the warning messages that are
1309+# generated by doxygen. Possible values are YES and NO. If left blank
1310+# NO is used.
1311+
1312+WARNINGS = YES
1313+
1314+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
1315+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
1316+# automatically be disabled.
1317+
1318+WARN_IF_UNDOCUMENTED = YES
1319+
1320+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
1321+# potential errors in the documentation, such as not documenting some
1322+# parameters in a documented function, or documenting parameters that
1323+# don't exist or using markup commands wrongly.
1324+
1325+WARN_IF_DOC_ERROR = YES
1326+
1327+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
1328+# functions that are documented, but have no documentation for their parameters
1329+# or return value. If set to NO (the default) doxygen will only warn about
1330+# wrong or incomplete parameter documentation, but not about the absence of
1331+# documentation.
1332+
1333+WARN_NO_PARAMDOC = NO
1334+
1335+# The WARN_FORMAT tag determines the format of the warning messages that
1336+# doxygen can produce. The string should contain the $file, $line, and $text
1337+# tags, which will be replaced by the file and line number from which the
1338+# warning originated and the warning text. Optionally the format may contain
1339+# $version, which will be replaced by the version of the file (if it could
1340+# be obtained via FILE_VERSION_FILTER)
1341+
1342+WARN_FORMAT = "$file:$line: $text"
1343+
1344+# The WARN_LOGFILE tag can be used to specify a file to which warning
1345+# and error messages should be written. If left blank the output is written
1346+# to stderr.
1347+
1348+#WARN_LOGFILE = @CMAKE_BINARY_DIR@/doxygen-warnings.txt
1349+
1350+#---------------------------------------------------------------------------
1351+# configuration options related to the input files
1352+#---------------------------------------------------------------------------
1353+
1354+# The INPUT tag can be used to specify the files and/or directories that contain
1355+# documented source files. You may enter file names like "myfile.cpp" or
1356+# directories like "/usr/src/myproject". Separate the files or directories
1357+# with spaces.
1358+INPUT = @PROJECT_SOURCE_DIR@/include/unity/scopes/qt
1359+
1360+# This tag can be used to specify the character encoding of the source files
1361+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
1362+# also the default input encoding. Doxygen uses libiconv (or the iconv built
1363+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
1364+# the list of possible encodings.
1365+
1366+INPUT_ENCODING = UTF-8
1367+
1368+# If the value of the INPUT tag contains directories, you can use the
1369+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
1370+# and *.h) to filter out the source-files in the directories. If left
1371+# blank the following patterns are tested:
1372+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
1373+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
1374+# *.f90 *.f *.for *.vhd *.vhdl
1375+
1376+FILE_PATTERNS = *.c \
1377+ *.cc \
1378+ *.cxx \
1379+ *.cpp \
1380+ *.c++ \
1381+ *.d \
1382+ *.java \
1383+ *.ii \
1384+ *.ixx \
1385+ *.ipp \
1386+ *.i++ \
1387+ *.inl \
1388+ *.h \
1389+ *.hh \
1390+ *.hxx \
1391+ *.hpp \
1392+ *.h++ \
1393+ *.idl \
1394+ *.odl \
1395+ *.cs \
1396+ *.php \
1397+ *.php3 \
1398+ *.inc \
1399+ *.m \
1400+ *.markdown \
1401+ *.md \
1402+ *.mm \
1403+ *.dox \
1404+ *.py \
1405+ *.f90 \
1406+ *.f \
1407+ *.for \
1408+ *.vhd \
1409+ *.vhdl
1410+
1411+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
1412+# should be searched for input files as well. Possible values are YES and NO.
1413+# If left blank NO is used.
1414+
1415+RECURSIVE = YES
1416+
1417+# The EXCLUDE tag can be used to specify files and/or directories that should be
1418+# excluded from the INPUT source files. This way you can easily exclude a
1419+# subdirectory from a directory tree whose root is specified with the INPUT tag.
1420+# Note that relative paths are relative to the directory from which doxygen is
1421+# run.
1422+
1423+EXCLUDE =
1424+
1425+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
1426+# directories that are symbolic links (a Unix file system feature) are excluded
1427+# from the input.
1428+
1429+EXCLUDE_SYMLINKS = NO
1430+
1431+# If the value of the INPUT tag contains directories, you can use the
1432+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
1433+# certain files from those directories. Note that the wildcards are matched
1434+# against the file with absolute path, so to exclude all test directories
1435+# for example use the pattern */test/*
1436+
1437+EXCLUDE_PATTERNS = */internal/*
1438+
1439+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
1440+# (namespaces, classes, functions, etc.) that should be excluded from the
1441+# output. The symbol name can be a fully qualified name, a word, or if the
1442+# wildcard * is used, a substring. Examples: ANamespace, AClass,
1443+# AClass::ANamespace, ANamespace::*Test
1444+
1445+EXCLUDE_SYMBOLS = *::internal::* *::experimental::*
1446+
1447+# The EXAMPLE_PATH tag can be used to specify one or more files or
1448+# directories that contain example code fragments that are included (see
1449+# the \include command).
1450+
1451+EXAMPLE_PATH =
1452+
1453+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
1454+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
1455+# and *.h) to filter out the source-files in the directories. If left
1456+# blank all files are included.
1457+
1458+EXAMPLE_PATTERNS = *
1459+
1460+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
1461+# searched for input files to be used with the \include or \dontinclude
1462+# commands irrespective of the value of the RECURSIVE tag.
1463+# Possible values are YES and NO. If left blank NO is used.
1464+
1465+EXAMPLE_RECURSIVE = NO
1466+
1467+# The IMAGE_PATH tag can be used to specify one or more files or
1468+# directories that contain image that are included in the documentation (see
1469+# the \image command).
1470+
1471+IMAGE_PATH =
1472+
1473+# The INPUT_FILTER tag can be used to specify a program that doxygen should
1474+# invoke to filter for each input file. Doxygen will invoke the filter program
1475+# by executing (via popen()) the command <filter> <input-file>, where <filter>
1476+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
1477+# input file. Doxygen will then use the output that the filter program writes
1478+# to standard output. If FILTER_PATTERNS is specified, this tag will be
1479+# ignored.
1480+
1481+INPUT_FILTER =
1482+
1483+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
1484+# basis. Doxygen will compare the file name with each pattern and apply the
1485+# filter if there is a match. The filters are a list of the form:
1486+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
1487+# info on how filters are used. If FILTER_PATTERNS is empty or if
1488+# non of the patterns match the file name, INPUT_FILTER is applied.
1489+
1490+FILTER_PATTERNS =
1491+
1492+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
1493+# INPUT_FILTER) will be used to filter the input files when producing source
1494+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
1495+
1496+FILTER_SOURCE_FILES = NO
1497+
1498+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
1499+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
1500+# and it is also possible to disable source filtering for a specific pattern
1501+# using *.ext= (so without naming a filter). This option only has effect when
1502+# FILTER_SOURCE_FILES is enabled.
1503+
1504+FILTER_SOURCE_PATTERNS =
1505+
1506+#---------------------------------------------------------------------------
1507+# configuration options related to source browsing
1508+#---------------------------------------------------------------------------
1509+
1510+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
1511+# be generated. Documented entities will be cross-referenced with these sources.
1512+# Note: To get rid of all source code in the generated output, make sure also
1513+# VERBATIM_HEADERS is set to NO.
1514+
1515+SOURCE_BROWSER = NO
1516+
1517+# Setting the INLINE_SOURCES tag to YES will include the body
1518+# of functions and classes directly in the documentation.
1519+
1520+INLINE_SOURCES = NO
1521+
1522+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
1523+# doxygen to hide any special comment blocks from generated source code
1524+# fragments. Normal C, C++ and Fortran comments will always remain visible.
1525+
1526+STRIP_CODE_COMMENTS = YES
1527+
1528+# If the REFERENCED_BY_RELATION tag is set to YES
1529+# then for each documented function all documented
1530+# functions referencing it will be listed.
1531+
1532+REFERENCED_BY_RELATION = NO
1533+
1534+# If the REFERENCES_RELATION tag is set to YES
1535+# then for each documented function all documented entities
1536+# called/used by that function will be listed.
1537+
1538+REFERENCES_RELATION = NO
1539+
1540+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
1541+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
1542+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
1543+# link to the source code. Otherwise they will link to the documentation.
1544+
1545+REFERENCES_LINK_SOURCE = YES
1546+
1547+# If the USE_HTAGS tag is set to YES then the references to source code
1548+# will point to the HTML generated by the htags(1) tool instead of doxygen
1549+# built-in source browser. The htags tool is part of GNU's global source
1550+# tagging system (see http://www.gnu.org/software/global/global.html). You
1551+# will need version 4.8.6 or higher.
1552+
1553+USE_HTAGS = NO
1554+
1555+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
1556+# will generate a verbatim copy of the header file for each class for
1557+# which an include is specified. Set to NO to disable this.
1558+
1559+VERBATIM_HEADERS = YES
1560+
1561+#---------------------------------------------------------------------------
1562+# configuration options related to the alphabetical class index
1563+#---------------------------------------------------------------------------
1564+
1565+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
1566+# of all compounds will be generated. Enable this if the project
1567+# contains a lot of classes, structs, unions or interfaces.
1568+
1569+ALPHABETICAL_INDEX = YES
1570+
1571+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
1572+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
1573+# in which this list will be split (can be a number in the range [1..20])
1574+
1575+COLS_IN_ALPHA_INDEX = 5
1576+
1577+# In case all classes in a project start with a common prefix, all
1578+# classes will be put under the same header in the alphabetical index.
1579+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
1580+# should be ignored while generating the index headers.
1581+
1582+IGNORE_PREFIX =
1583+
1584+#---------------------------------------------------------------------------
1585+# configuration options related to the HTML output
1586+#---------------------------------------------------------------------------
1587+
1588+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
1589+# generate HTML output.
1590+
1591+GENERATE_HTML = YES
1592+
1593+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
1594+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
1595+# put in front of it. If left blank `html' will be used as the default path.
1596+
1597+HTML_OUTPUT = unity-scopes-qt
1598+
1599+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
1600+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
1601+# doxygen will generate files with .html extension.
1602+
1603+HTML_FILE_EXTENSION = .html
1604+
1605+# The HTML_HEADER tag can be used to specify a personal HTML header for
1606+# each generated HTML page. If it is left blank doxygen will generate a
1607+# standard header. Note that when using a custom header you are responsible
1608+# for the proper inclusion of any scripts and style sheets that doxygen
1609+# needs, which is dependent on the configuration options used.
1610+# It is advised to generate a default header using "doxygen -w html
1611+# header.html footer.html stylesheet.css YourConfigFile" and then modify
1612+# that header. Note that the header is subject to change so you typically
1613+# have to redo this when upgrading to a newer version of doxygen or when
1614+# changing the value of configuration settings such as GENERATE_TREEVIEW!
1615+
1616+HTML_HEADER =
1617+
1618+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
1619+# each generated HTML page. If it is left blank doxygen will generate a
1620+# standard footer.
1621+
1622+HTML_FOOTER =
1623+
1624+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
1625+# style sheet that is used by each HTML page. It can be used to
1626+# fine-tune the look of the HTML output. If the tag is left blank doxygen
1627+# will generate a default style sheet. Note that doxygen will try to copy
1628+# the style sheet file to the HTML output directory, so don't put your own
1629+# style sheet in the HTML output directory as well, or it will be erased!
1630+
1631+HTML_STYLESHEET =
1632+
1633+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1634+# other source files which should be copied to the HTML output directory. Note
1635+# that these files will be copied to the base HTML output directory. Use the
1636+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1637+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
1638+# the files will be copied as-is; there are no commands or markers available.
1639+
1640+HTML_EXTRA_FILES =
1641+
1642+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
1643+# Doxygen will adjust the colors in the style sheet and background images
1644+# according to this color. Hue is specified as an angle on a colorwheel,
1645+# see http://en.wikipedia.org/wiki/Hue for more information.
1646+# For instance the value 0 represents red, 60 is yellow, 120 is green,
1647+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
1648+# The allowed range is 0 to 359.
1649+
1650+HTML_COLORSTYLE_HUE = 220
1651+
1652+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
1653+# the colors in the HTML output. For a value of 0 the output will use
1654+# grayscales only. A value of 255 will produce the most vivid colors.
1655+
1656+HTML_COLORSTYLE_SAT = 100
1657+
1658+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
1659+# the luminance component of the colors in the HTML output. Values below
1660+# 100 gradually make the output lighter, whereas values above 100 make
1661+# the output darker. The value divided by 100 is the actual gamma applied,
1662+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
1663+# and 100 does not change the gamma.
1664+
1665+HTML_COLORSTYLE_GAMMA = 80
1666+
1667+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1668+# page will contain the date and time when the page was generated. Setting
1669+# this to NO can help when comparing the output of multiple runs.
1670+
1671+HTML_TIMESTAMP = YES
1672+
1673+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1674+# documentation will contain sections that can be hidden and shown after the
1675+# page has loaded.
1676+
1677+HTML_DYNAMIC_SECTIONS = NO
1678+
1679+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
1680+# entries shown in the various tree structured indices initially; the user
1681+# can expand and collapse entries dynamically later on. Doxygen will expand
1682+# the tree to such a level that at most the specified number of entries are
1683+# visible (unless a fully collapsed tree already exceeds this amount).
1684+# So setting the number of entries 1 will produce a full collapsed tree by
1685+# default. 0 is a special value representing an infinite number of entries
1686+# and will result in a full expanded tree by default.
1687+
1688+HTML_INDEX_NUM_ENTRIES = 100
1689+
1690+# If the GENERATE_DOCSET tag is set to YES, additional index files
1691+# will be generated that can be used as input for Apple's Xcode 3
1692+# integrated development environment, introduced with OSX 10.5 (Leopard).
1693+# To create a documentation set, doxygen will generate a Makefile in the
1694+# HTML output directory. Running make will produce the docset in that
1695+# directory and running "make install" will install the docset in
1696+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
1697+# it at startup.
1698+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
1699+# for more information.
1700+
1701+GENERATE_DOCSET = NO
1702+
1703+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
1704+# feed. A documentation feed provides an umbrella under which multiple
1705+# documentation sets from a single provider (such as a company or product suite)
1706+# can be grouped.
1707+
1708+DOCSET_FEEDNAME = "Doxygen generated docs"
1709+
1710+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
1711+# should uniquely identify the documentation set bundle. This should be a
1712+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
1713+# will append .docset to the name.
1714+
1715+DOCSET_BUNDLE_ID = org.doxygen.Project
1716+
1717+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
1718+# the documentation publisher. This should be a reverse domain-name style
1719+# string, e.g. com.mycompany.MyDocSet.documentation.
1720+
1721+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1722+
1723+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
1724+
1725+DOCSET_PUBLISHER_NAME = Publisher
1726+
1727+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
1728+# will be generated that can be used as input for tools like the
1729+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
1730+# of the generated HTML documentation.
1731+
1732+GENERATE_HTMLHELP = NO
1733+
1734+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
1735+# be used to specify the file name of the resulting .chm file. You
1736+# can add a path in front of the file if the result should not be
1737+# written to the html output directory.
1738+
1739+CHM_FILE =
1740+
1741+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
1742+# be used to specify the location (absolute path including file name) of
1743+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
1744+# the HTML help compiler on the generated index.hhp.
1745+
1746+HHC_LOCATION =
1747+
1748+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
1749+# controls if a separate .chi index file is generated (YES) or that
1750+# it should be included in the master .chm file (NO).
1751+
1752+GENERATE_CHI = NO
1753+
1754+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
1755+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
1756+# content.
1757+
1758+CHM_INDEX_ENCODING =
1759+
1760+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
1761+# controls whether a binary table of contents is generated (YES) or a
1762+# normal table of contents (NO) in the .chm file.
1763+
1764+BINARY_TOC = NO
1765+
1766+# The TOC_EXPAND flag can be set to YES to add extra items for group members
1767+# to the contents of the HTML help documentation and to the tree view.
1768+
1769+TOC_EXPAND = NO
1770+
1771+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1772+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
1773+# that can be used as input for Qt's qhelpgenerator to generate a
1774+# Qt Compressed Help (.qch) of the generated HTML documentation.
1775+
1776+GENERATE_QHP = NO
1777+
1778+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
1779+# be used to specify the file name of the resulting .qch file.
1780+# The path specified is relative to the HTML output folder.
1781+
1782+QCH_FILE =
1783+
1784+# The QHP_NAMESPACE tag specifies the namespace to use when generating
1785+# Qt Help Project output. For more information please see
1786+# http://doc.trolltech.com/qthelpproject.html#namespace
1787+
1788+QHP_NAMESPACE = org.doxygen.Project
1789+
1790+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
1791+# Qt Help Project output. For more information please see
1792+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
1793+
1794+QHP_VIRTUAL_FOLDER = doc
1795+
1796+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
1797+# add. For more information please see
1798+# http://doc.trolltech.com/qthelpproject.html#custom-filters
1799+
1800+QHP_CUST_FILTER_NAME =
1801+
1802+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
1803+# custom filter to add. For more information please see
1804+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
1805+# Qt Help Project / Custom Filters</a>.
1806+
1807+QHP_CUST_FILTER_ATTRS =
1808+
1809+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1810+# project's
1811+# filter section matches.
1812+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
1813+# Qt Help Project / Filter Attributes</a>.
1814+
1815+QHP_SECT_FILTER_ATTRS =
1816+
1817+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
1818+# be used to specify the location of Qt's qhelpgenerator.
1819+# If non-empty doxygen will try to run qhelpgenerator on the generated
1820+# .qhp file.
1821+
1822+QHG_LOCATION =
1823+
1824+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
1825+# will be generated, which together with the HTML files, form an Eclipse help
1826+# plugin. To install this plugin and make it available under the help contents
1827+# menu in Eclipse, the contents of the directory containing the HTML and XML
1828+# files needs to be copied into the plugins directory of eclipse. The name of
1829+# the directory within the plugins directory should be the same as
1830+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
1831+# the help appears.
1832+
1833+GENERATE_ECLIPSEHELP = NO
1834+
1835+# A unique identifier for the eclipse help plugin. When installing the plugin
1836+# the directory name containing the HTML and XML files should also have
1837+# this name.
1838+
1839+ECLIPSE_DOC_ID = org.doxygen.Project
1840+
1841+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
1842+# at top of each HTML page. The value NO (the default) enables the index and
1843+# the value YES disables it. Since the tabs have the same information as the
1844+# navigation tree you can set this option to NO if you already set
1845+# GENERATE_TREEVIEW to YES.
1846+
1847+DISABLE_INDEX = NO
1848+
1849+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1850+# structure should be generated to display hierarchical information.
1851+# If the tag value is set to YES, a side panel will be generated
1852+# containing a tree-like index structure (just like the one that
1853+# is generated for HTML Help). For this to work a browser that supports
1854+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
1855+# Windows users are probably better off using the HTML help feature.
1856+# Since the tree basically has the same information as the tab index you
1857+# could consider to set DISABLE_INDEX to NO when enabling this option.
1858+
1859+GENERATE_TREEVIEW = YES
1860+
1861+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
1862+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
1863+# documentation. Note that a value of 0 will completely suppress the enum
1864+# values from appearing in the overview section.
1865+
1866+ENUM_VALUES_PER_LINE = 4
1867+
1868+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
1869+# used to set the initial width (in pixels) of the frame in which the tree
1870+# is shown.
1871+
1872+TREEVIEW_WIDTH = 250
1873+
1874+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
1875+# links to external symbols imported via tag files in a separate window.
1876+
1877+EXT_LINKS_IN_WINDOW = NO
1878+
1879+# Use this tag to change the font size of Latex formulas included
1880+# as images in the HTML documentation. The default is 10. Note that
1881+# when you change the font size after a successful doxygen run you need
1882+# to manually remove any form_*.png images from the HTML output directory
1883+# to force them to be regenerated.
1884+
1885+FORMULA_FONTSIZE = 10
1886+
1887+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
1888+# generated for formulas are transparent PNGs. Transparent PNGs are
1889+# not supported properly for IE 6.0, but are supported on all modern browsers.
1890+# Note that when changing this option you need to delete any form_*.png files
1891+# in the HTML output before the changes have effect.
1892+
1893+FORMULA_TRANSPARENT = YES
1894+
1895+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
1896+# (see http://www.mathjax.org) which uses client side Javascript for the
1897+# rendering instead of using prerendered bitmaps. Use this if you do not
1898+# have LaTeX installed or if you want to formulas look prettier in the HTML
1899+# output. When enabled you may also need to install MathJax separately and
1900+# configure the path to it using the MATHJAX_RELPATH option.
1901+
1902+USE_MATHJAX = NO
1903+
1904+# When MathJax is enabled you need to specify the location relative to the
1905+# HTML output directory using the MATHJAX_RELPATH option. The destination
1906+# directory should contain the MathJax.js script. For instance, if the mathjax
1907+# directory is located at the same level as the HTML output directory, then
1908+# MATHJAX_RELPATH should be ../mathjax. The default value points to
1909+# the MathJax Content Delivery Network so you can quickly see the result without
1910+# installing MathJax. However, it is strongly recommended to install a local
1911+# copy of MathJax from http://www.mathjax.org before deployment.
1912+
1913+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
1914+
1915+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
1916+# names that should be enabled during MathJax rendering.
1917+
1918+MATHJAX_EXTENSIONS =
1919+
1920+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
1921+# for the HTML output. The underlying search engine uses javascript
1922+# and DHTML and should work on any modern browser. Note that when using
1923+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
1924+# (GENERATE_DOCSET) there is already a search function so this one should
1925+# typically be disabled. For large projects the javascript based search engine
1926+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
1927+
1928+SEARCHENGINE = YES
1929+
1930+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1931+# implemented using a PHP enabled web server instead of at the web client
1932+# using Javascript. Doxygen will generate the search PHP script and index
1933+# file to put on the web server. The advantage of the server
1934+# based approach is that it scales better to large projects and allows
1935+# full text search. The disadvantages are that it is more difficult to setup
1936+# and does not have live searching capabilities.
1937+
1938+SERVER_BASED_SEARCH = NO
1939+
1940+#---------------------------------------------------------------------------
1941+# configuration options related to the LaTeX output
1942+#---------------------------------------------------------------------------
1943+
1944+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
1945+# generate Latex output.
1946+
1947+GENERATE_LATEX = NO
1948+
1949+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
1950+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
1951+# put in front of it. If left blank `latex' will be used as the default path.
1952+
1953+LATEX_OUTPUT = latex
1954+
1955+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1956+# invoked. If left blank `latex' will be used as the default command name.
1957+# Note that when enabling USE_PDFLATEX this option is only used for
1958+# generating bitmaps for formulas in the HTML output, but not in the
1959+# Makefile that is written to the output directory.
1960+
1961+LATEX_CMD_NAME = latex
1962+
1963+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
1964+# generate index for LaTeX. If left blank `makeindex' will be used as the
1965+# default command name.
1966+
1967+MAKEINDEX_CMD_NAME = makeindex
1968+
1969+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
1970+# LaTeX documents. This may be useful for small projects and may help to
1971+# save some trees in general.
1972+
1973+COMPACT_LATEX = NO
1974+
1975+# The PAPER_TYPE tag can be used to set the paper type that is used
1976+# by the printer. Possible values are: a4, letter, legal and
1977+# executive. If left blank a4wide will be used.
1978+
1979+PAPER_TYPE = a4
1980+
1981+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
1982+# packages that should be included in the LaTeX output.
1983+
1984+EXTRA_PACKAGES =
1985+
1986+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
1987+# the generated latex document. The header should contain everything until
1988+# the first chapter. If it is left blank doxygen will generate a
1989+# standard header. Notice: only use this tag if you know what you are doing!
1990+
1991+LATEX_HEADER =
1992+
1993+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
1994+# the generated latex document. The footer should contain everything after
1995+# the last chapter. If it is left blank doxygen will generate a
1996+# standard footer. Notice: only use this tag if you know what you are doing!
1997+
1998+LATEX_FOOTER =
1999+
2000+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
2001+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
2002+# contain links (just like the HTML output) instead of page references
2003+# This makes the output suitable for online browsing using a pdf viewer.
2004+
2005+PDF_HYPERLINKS = YES
2006+
2007+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
2008+# plain latex in the generated Makefile. Set this option to YES to get a
2009+# higher quality PDF documentation.
2010+
2011+USE_PDFLATEX = YES
2012+
2013+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
2014+# command to the generated LaTeX files. This will instruct LaTeX to keep
2015+# running if errors occur, instead of asking the user for help.
2016+# This option is also used when generating formulas in HTML.
2017+
2018+LATEX_BATCHMODE = NO
2019+
2020+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
2021+# include the index chapters (such as File Index, Compound Index, etc.)
2022+# in the output.
2023+
2024+LATEX_HIDE_INDICES = NO
2025+
2026+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
2027+# source code with syntax highlighting in the LaTeX output.
2028+# Note that which sources are shown also depends on other settings
2029+# such as SOURCE_BROWSER.
2030+
2031+LATEX_SOURCE_CODE = NO
2032+
2033+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
2034+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
2035+# http://en.wikipedia.org/wiki/BibTeX for more info.
2036+
2037+LATEX_BIB_STYLE = plain
2038+
2039+#---------------------------------------------------------------------------
2040+# configuration options related to the RTF output
2041+#---------------------------------------------------------------------------
2042+
2043+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
2044+# The RTF output is optimized for Word 97 and may not look very pretty with
2045+# other RTF readers or editors.
2046+
2047+GENERATE_RTF = NO
2048+
2049+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
2050+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
2051+# put in front of it. If left blank `rtf' will be used as the default path.
2052+
2053+RTF_OUTPUT = rtf
2054+
2055+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
2056+# RTF documents. This may be useful for small projects and may help to
2057+# save some trees in general.
2058+
2059+COMPACT_RTF = NO
2060+
2061+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
2062+# will contain hyperlink fields. The RTF file will
2063+# contain links (just like the HTML output) instead of page references.
2064+# This makes the output suitable for online browsing using WORD or other
2065+# programs which support those fields.
2066+# Note: wordpad (write) and others do not support links.
2067+
2068+RTF_HYPERLINKS = NO
2069+
2070+# Load style sheet definitions from file. Syntax is similar to doxygen's
2071+# config file, i.e. a series of assignments. You only have to provide
2072+# replacements, missing definitions are set to their default value.
2073+
2074+RTF_STYLESHEET_FILE =
2075+
2076+# Set optional variables used in the generation of an rtf document.
2077+# Syntax is similar to doxygen's config file.
2078+
2079+RTF_EXTENSIONS_FILE =
2080+
2081+#---------------------------------------------------------------------------
2082+# configuration options related to the man page output
2083+#---------------------------------------------------------------------------
2084+
2085+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
2086+# generate man pages
2087+
2088+GENERATE_MAN = NO
2089+
2090+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
2091+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
2092+# put in front of it. If left blank `man' will be used as the default path.
2093+
2094+MAN_OUTPUT = man
2095+
2096+# The MAN_EXTENSION tag determines the extension that is added to
2097+# the generated man pages (default is the subroutine's section .3)
2098+
2099+MAN_EXTENSION = .3
2100+
2101+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
2102+# then it will generate one additional man file for each entity
2103+# documented in the real man page(s). These additional files
2104+# only source the real man page, but without them the man command
2105+# would be unable to find the correct page. The default is NO.
2106+
2107+MAN_LINKS = NO
2108+
2109+#---------------------------------------------------------------------------
2110+# configuration options related to the XML output
2111+#---------------------------------------------------------------------------
2112+
2113+# If the GENERATE_XML tag is set to YES Doxygen will
2114+# generate an XML file that captures the structure of
2115+# the code including all documentation.
2116+
2117+GENERATE_XML = NO
2118+
2119+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
2120+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
2121+# put in front of it. If left blank `xml' will be used as the default path.
2122+
2123+XML_OUTPUT = xml
2124+
2125+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
2126+# dump the program listings (including syntax highlighting
2127+# and cross-referencing information) to the XML output. Note that
2128+# enabling this will significantly increase the size of the XML output.
2129+
2130+XML_PROGRAMLISTING = YES
2131+
2132+#---------------------------------------------------------------------------
2133+# configuration options for the AutoGen Definitions output
2134+#---------------------------------------------------------------------------
2135+
2136+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
2137+# generate an AutoGen Definitions (see autogen.sf.net) file
2138+# that captures the structure of the code including all
2139+# documentation. Note that this feature is still experimental
2140+# and incomplete at the moment.
2141+
2142+GENERATE_AUTOGEN_DEF = NO
2143+
2144+#---------------------------------------------------------------------------
2145+# configuration options related to the Perl module output
2146+#---------------------------------------------------------------------------
2147+
2148+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
2149+# generate a Perl module file that captures the structure of
2150+# the code including all documentation. Note that this
2151+# feature is still experimental and incomplete at the
2152+# moment.
2153+
2154+GENERATE_PERLMOD = NO
2155+
2156+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
2157+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
2158+# to generate PDF and DVI output from the Perl module output.
2159+
2160+PERLMOD_LATEX = NO
2161+
2162+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
2163+# nicely formatted so it can be parsed by a human reader. This is useful
2164+# if you want to understand what is going on. On the other hand, if this
2165+# tag is set to NO the size of the Perl module output will be much smaller
2166+# and Perl will parse it just the same.
2167+
2168+PERLMOD_PRETTY = YES
2169+
2170+# The names of the make variables in the generated doxyrules.make file
2171+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
2172+# This is useful so different doxyrules.make files included by the same
2173+# Makefile don't overwrite each other's variables.
2174+
2175+PERLMOD_MAKEVAR_PREFIX =
2176+
2177+#---------------------------------------------------------------------------
2178+# Configuration options related to the preprocessor
2179+#---------------------------------------------------------------------------
2180+
2181+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
2182+# evaluate all C-preprocessor directives found in the sources and include
2183+# files.
2184+
2185+ENABLE_PREPROCESSING = YES
2186+
2187+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
2188+# names in the source code. If set to NO (the default) only conditional
2189+# compilation will be performed. Macro expansion can be done in a controlled
2190+# way by setting EXPAND_ONLY_PREDEF to YES.
2191+
2192+MACRO_EXPANSION = NO
2193+
2194+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
2195+# then the macro expansion is limited to the macros specified with the
2196+# PREDEFINED and EXPAND_AS_DEFINED tags.
2197+
2198+EXPAND_ONLY_PREDEF = NO
2199+
2200+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
2201+# pointed to by INCLUDE_PATH will be searched when a #include is found.
2202+
2203+SEARCH_INCLUDES = YES
2204+
2205+# The INCLUDE_PATH tag can be used to specify one or more directories that
2206+# contain include files that are not input files but should be processed by
2207+# the preprocessor.
2208+
2209+INCLUDE_PATH =
2210+
2211+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
2212+# patterns (like *.h and *.hpp) to filter out the header-files in the
2213+# directories. If left blank, the patterns specified with FILE_PATTERNS will
2214+# be used.
2215+
2216+INCLUDE_FILE_PATTERNS =
2217+
2218+# The PREDEFINED tag can be used to specify one or more macro names that
2219+# are defined before the preprocessor is started (similar to the -D option of
2220+# gcc). The argument of the tag is a list of macros of the form: name
2221+# or name=definition (no spaces). If the definition and the = are
2222+# omitted =1 is assumed. To prevent a macro definition from being
2223+# undefined via #undef or recursively expanded use the := operator
2224+# instead of the = operator.
2225+
2226+PREDEFINED = DOXYGEN_SKIP
2227+
2228+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
2229+# this tag can be used to specify a list of macro names that should be expanded.
2230+# The macro definition that is found in the sources will be used.
2231+# Use the PREDEFINED tag if you want to use a different macro definition that
2232+# overrules the definition found in the source code.
2233+
2234+EXPAND_AS_DEFINED =
2235+
2236+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
2237+# doxygen's preprocessor will remove all references to function-like macros
2238+# that are alone on a line, have an all uppercase name, and do not end with a
2239+# semicolon, because these will confuse the parser if not removed.
2240+
2241+SKIP_FUNCTION_MACROS = YES
2242+
2243+#---------------------------------------------------------------------------
2244+# Configuration::additions related to external references
2245+#---------------------------------------------------------------------------
2246+
2247+# The TAGFILES option can be used to specify one or more tagfiles. For each
2248+# tag file the location of the external documentation should be added. The
2249+# format of a tag file without this location is as follows:
2250+# TAGFILES = file1 file2 ...
2251+# Adding location for the tag files is done as follows:
2252+# TAGFILES = file1=loc1 "file2 = loc2" ...
2253+# where "loc1" and "loc2" can be relative or absolute paths
2254+# or URLs. Note that each tag file must have a unique name (where the name does
2255+# NOT include the path). If a tag file is not located in the directory in which
2256+# doxygen is run, you must also specify the path to the tagfile here.
2257+
2258+TAGFILES =
2259+
2260+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
2261+# a tag file that is based on the input files it reads.
2262+
2263+GENERATE_TAGFILE =
2264+
2265+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
2266+# in the class index. If set to NO only the inherited external classes
2267+# will be listed.
2268+
2269+ALLEXTERNALS = NO
2270+
2271+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
2272+# in the modules index. If set to NO, only the current project's groups will
2273+# be listed.
2274+
2275+EXTERNAL_GROUPS = YES
2276+
2277+# The PERL_PATH should be the absolute path and name of the perl script
2278+# interpreter (i.e. the result of `which perl').
2279+
2280+PERL_PATH = /usr/bin/perl
2281+
2282+#---------------------------------------------------------------------------
2283+# Configuration options related to the dot tool
2284+#---------------------------------------------------------------------------
2285+
2286+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
2287+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
2288+# or super classes. Setting the tag to NO turns the diagrams off. Note that
2289+# this option also works with HAVE_DOT disabled, but it is recommended to
2290+# install and use dot, since it yields more powerful graphs.
2291+
2292+CLASS_DIAGRAMS = YES
2293+
2294+# You can define message sequence charts within doxygen comments using the \msc
2295+# command. Doxygen will then run the mscgen tool (see
2296+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
2297+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
2298+# the mscgen tool resides. If left empty the tool is assumed to be found in the
2299+# default search path.
2300+
2301+DOT_PATH = @DOXYGEN_DOT_PATH@
2302+
2303+# If set to YES, the inheritance and collaboration graphs will hide
2304+# inheritance and usage relations if the target is undocumented
2305+# or is not a class.
2306+
2307+HIDE_UNDOC_RELATIONS = YES
2308+
2309+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
2310+# available from the path. This tool is part of Graphviz, a graph visualization
2311+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
2312+# have no effect if this option is set to NO (the default)
2313+
2314+HAVE_DOT = YES
2315+
2316+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
2317+# allowed to run in parallel. When set to 0 (the default) doxygen will
2318+# base this on the number of processors available in the system. You can set it
2319+# explicitly to a value larger than 0 to get control over the balance
2320+# between CPU load and processing speed.
2321+
2322+DOT_NUM_THREADS = 0
2323+
2324+# By default doxygen will use the Helvetica font for all dot files that
2325+# doxygen generates. When you want a differently looking font you can specify
2326+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
2327+# the font, which can be done by putting it in a standard location or by setting
2328+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
2329+# directory containing the font.
2330+
2331+DOT_FONTNAME = Helvetica
2332+
2333+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
2334+# The default size is 10pt.
2335+
2336+DOT_FONTSIZE = 10
2337+
2338+# By default doxygen will tell dot to use the Helvetica font.
2339+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
2340+# set the path where dot can find it.
2341+
2342+DOT_FONTPATH =
2343+
2344+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
2345+# will generate a graph for each documented class showing the direct and
2346+# indirect inheritance relations. Setting this tag to YES will force the
2347+# CLASS_DIAGRAMS tag to NO.
2348+
2349+CLASS_GRAPH = YES
2350+
2351+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
2352+# will generate a graph for each documented class showing the direct and
2353+# indirect implementation dependencies (inheritance, containment, and
2354+# class references variables) of the class with other documented classes.
2355+
2356+COLLABORATION_GRAPH = NO
2357+
2358+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
2359+# will generate a graph for groups, showing the direct groups dependencies
2360+
2361+GROUP_GRAPHS = YES
2362+
2363+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
2364+# collaboration diagrams in a style similar to the OMG's Unified Modeling
2365+# Language.
2366+
2367+UML_LOOK = NO
2368+
2369+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
2370+# the class node. If there are many fields or methods and many nodes the
2371+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
2372+# threshold limits the number of items for each type to make the size more
2373+# managable. Set this to 0 for no limit. Note that the threshold may be
2374+# exceeded by 50% before the limit is enforced.
2375+
2376+UML_LIMIT_NUM_FIELDS = 10
2377+
2378+# If set to YES, the inheritance and collaboration graphs will show the
2379+# relations between templates and their instances.
2380+
2381+TEMPLATE_RELATIONS = NO
2382+
2383+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
2384+# tags are set to YES then doxygen will generate a graph for each documented
2385+# file showing the direct and indirect include dependencies of the file with
2386+# other documented files.
2387+
2388+INCLUDE_GRAPH = YES
2389+
2390+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
2391+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
2392+# documented header file showing the documented files that directly or
2393+# indirectly include this file.
2394+
2395+INCLUDED_BY_GRAPH = YES
2396+
2397+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
2398+# doxygen will generate a call dependency graph for every global function
2399+# or class method. Note that enabling this option will significantly increase
2400+# the time of a run. So in most cases it will be better to enable call graphs
2401+# for selected functions only using the \callgraph command.
2402+
2403+CALL_GRAPH = NO
2404+
2405+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
2406+# doxygen will generate a caller dependency graph for every global function
2407+# or class method. Note that enabling this option will significantly increase
2408+# the time of a run. So in most cases it will be better to enable caller
2409+# graphs for selected functions only using the \callergraph command.
2410+
2411+CALLER_GRAPH = NO
2412+
2413+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
2414+# will generate a graphical hierarchy of all classes instead of a textual one.
2415+
2416+GRAPHICAL_HIERARCHY = YES
2417+
2418+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
2419+# then doxygen will show the dependencies a directory has on other directories
2420+# in a graphical way. The dependency relations are determined by the #include
2421+# relations between the files in the directories.
2422+
2423+DIRECTORY_GRAPH = YES
2424+
2425+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
2426+# generated by dot. Possible values are svg, png, jpg, or gif.
2427+# If left blank png will be used. If you choose svg you need to set
2428+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
2429+# visible in IE 9+ (other browsers do not have this requirement).
2430+
2431+DOT_IMAGE_FORMAT = png
2432+
2433+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
2434+# enable generation of interactive SVG images that allow zooming and panning.
2435+# Note that this requires a modern browser other than Internet Explorer.
2436+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
2437+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
2438+# visible. Older versions of IE do not have SVG support.
2439+
2440+INTERACTIVE_SVG = NO
2441+
2442+# The tag DOT_PATH can be used to specify the path where the dot tool can be
2443+# found. If left blank, it is assumed the dot tool can be found in the path.
2444+
2445+DOT_PATH =
2446+
2447+# The DOTFILE_DIRS tag can be used to specify one or more directories that
2448+# contain dot files that are included in the documentation (see the
2449+# \dotfile command).
2450+
2451+DOTFILE_DIRS =
2452+
2453+# The MSCFILE_DIRS tag can be used to specify one or more directories that
2454+# contain msc files that are included in the documentation (see the
2455+# \mscfile command).
2456+
2457+MSCFILE_DIRS =
2458+
2459+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
2460+# nodes that will be shown in the graph. If the number of nodes in a graph
2461+# becomes larger than this value, doxygen will truncate the graph, which is
2462+# visualized by representing a node as a red box. Note that doxygen if the
2463+# number of direct children of the root node in a graph is already larger than
2464+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
2465+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
2466+
2467+DOT_GRAPH_MAX_NODES = 50
2468+
2469+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
2470+# graphs generated by dot. A depth value of 3 means that only nodes reachable
2471+# from the root by following a path via at most 3 edges will be shown. Nodes
2472+# that lay further from the root node will be omitted. Note that setting this
2473+# option to 1 or 2 may greatly reduce the computation time needed for large
2474+# code bases. Also note that the size of a graph can be further restricted by
2475+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
2476+
2477+MAX_DOT_GRAPH_DEPTH = 0
2478+
2479+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
2480+# background. This is disabled by default, because dot on Windows does not
2481+# seem to support this out of the box. Warning: Depending on the platform used,
2482+# enabling this option may lead to badly anti-aliased labels on the edges of
2483+# a graph (i.e. they become hard to read).
2484+
2485+DOT_TRANSPARENT = NO
2486+
2487+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
2488+# files in one run (i.e. multiple -o and -T options on the command line). This
2489+# makes dot run faster, but since only newer versions of dot (>1.8.10)
2490+# support this, this feature is disabled by default.
2491+
2492+DOT_MULTI_TARGETS = NO
2493+
2494+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
2495+# generate a legend page explaining the meaning of the various boxes and
2496+# arrows in the dot generated graphs.
2497+
2498+GENERATE_LEGEND = YES
2499+
2500+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
2501+# remove the intermediate dot files that are used to generate
2502+# the various graphs.
2503+
2504+DOT_CLEANUP = YES
2505
2506=== modified file 'doc/Doxyfile.in'
2507--- doc/Doxyfile.in 2014-06-17 10:30:03 +0000
2508+++ doc/Doxyfile.in 2015-02-05 11:31:47 +0000
2509@@ -713,7 +713,7 @@
2510 # Note that relative paths are relative to the directory from which doxygen is
2511 # run.
2512
2513-EXCLUDE =
2514+EXCLUDE = @PROJECT_SOURCE_DIR@/include/unity/scopes/scopes-qt
2515
2516 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
2517 # directories that are symbolic links (a Unix file system feature) are excluded
2518
2519=== modified file 'include/unity/scopes/CMakeLists.txt'
2520--- include/unity/scopes/CMakeLists.txt 2014-11-24 16:44:13 +0000
2521+++ include/unity/scopes/CMakeLists.txt 2015-02-05 11:31:47 +0000
2522@@ -1,6 +1,7 @@
2523 add_subdirectory(internal)
2524 add_subdirectory(testing)
2525 add_subdirectory(utility)
2526+add_subdirectory(qt)
2527
2528 file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
2529
2530
2531=== added directory 'include/unity/scopes/qt'
2532=== added file 'include/unity/scopes/qt/CMakeLists.txt'
2533--- include/unity/scopes/qt/CMakeLists.txt 1970-01-01 00:00:00 +0000
2534+++ include/unity/scopes/qt/CMakeLists.txt 2015-02-05 11:31:47 +0000
2535@@ -0,0 +1,3 @@
2536+file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
2537+
2538+install(FILES ${headers} DESTINATION ${HDR_INSTALL_DIR}/unity/scopes/qt)
2539
2540=== added file 'include/unity/scopes/qt/HttpAsyncReader.h'
2541--- include/unity/scopes/qt/HttpAsyncReader.h 1970-01-01 00:00:00 +0000
2542+++ include/unity/scopes/qt/HttpAsyncReader.h 2015-02-05 11:31:47 +0000
2543@@ -0,0 +1,310 @@
2544+/*
2545+* Copyright (C) 2014 Canonical, Ltd.
2546+*
2547+* This library is free software; you can redistribute it and/or modify it under
2548+* the terms of version 3 of the GNU Lesser General Public License as published
2549+* by the Free Software Foundation.
2550+*
2551+* This library is distributed in the hope that it will be useful, but WITHOUT
2552+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2553+* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
2554+* details.
2555+*
2556+* You should have received a copy of the GNU Lesser General Public License
2557+* along with this program. If not, see <http://www.gnu.org/licenses/>.
2558+*
2559+* Author: Xavi Garcia <xavi.garcia.mena@canonical.com>
2560+*/
2561+#pragma once
2562+
2563+#ifndef _ENABLE_QT_EXPERIMENTAL_
2564+#error You should define _ENABLE_QT_EXPERIMENTAL_ in order to use this experimental header file.
2565+#endif
2566+
2567+#include <unity/util/DefinesPtrs.h>
2568+#include <unity/util/NonCopyable.h>
2569+#include <unity/UnityExceptions.h>
2570+
2571+#include <unity/scopes/ScopeExceptions.h>
2572+
2573+#include <core/net/http/client.h>
2574+#include <core/net/http/request.h>
2575+#include <core/net/http/response.h>
2576+
2577+#include <deque>
2578+#include <future>
2579+#include <memory>
2580+#include <vector>
2581+
2582+namespace unity
2583+{
2584+
2585+namespace scopes
2586+{
2587+
2588+namespace qt
2589+{
2590+
2591+/**
2592+\brief Class that downloads http files asynchronously.
2593+
2594+Executes a remote HTTP query asynchronously to return different futures about results or a parser.
2595+The user should define which parser wants to use, and offer a method that given a char* containing the
2596+data downloaded by this class contructs the parser.
2597+*/
2598+class HttpAsyncReader
2599+{
2600+public:
2601+ /// @cond
2602+ NONCOPYABLE(HttpAsyncReader);
2603+ UNITY_DEFINES_PTRS(HttpAsyncReader);
2604+
2605+ // aliases
2606+ template <typename PARSER>
2607+ using FactoryFunc = std::function<std::shared_ptr<PARSER>(const std::string&, std::string&)>;
2608+
2609+ template <typename TYPE, typename PARSER>
2610+ using ParseFunc =
2611+ std::function<bool(PARSER& root, const std::string&, std::deque<std::shared_ptr<TYPE>>&, std::string&)>;
2612+
2613+ template <typename TYPE>
2614+ using ResultsList = std::deque<std::shared_ptr<TYPE>>;
2615+
2616+ template <typename TYPE>
2617+ using ResultsFuture = std::future<ResultsList<TYPE>>;
2618+
2619+ template <typename PARSER>
2620+ using ParserFuture = std::future<std::shared_ptr<PARSER>>;
2621+
2622+ HttpAsyncReader();
2623+
2624+ virtual ~HttpAsyncReader();
2625+ /// @endcond
2626+
2627+ /**
2628+ * \brief Downloads a HTTP remote file asynchronously and returns a future to a list of results
2629+ * This method downloads in a separated thread a http document identified by the given URI.
2630+ * It returns a future of list of results based on a given object name.
2631+ * If, for example, the document contains a list of objects identified by the tag "ITEM" it
2632+ * parses the document and returns a list of those objects.
2633+ * The user must provide a function to create the parser for the downloaded data and a parse function
2634+ * that retrieves the data.
2635+ *
2636+ * The method has 3 template parameters: the type of results returned, the type of objects when intantiating
2637+ * and the parser type.
2638+ * The type of instantiation has to be a derived class of the return type. This is offered for convenience
2639+ * to return more generic types and get advantage of polymorphism.
2640+ *
2641+ * The method checks at compile time that the instantiation type is effectively a derived class of the type
2642+ * returned.
2643+ *
2644+ * \param uri URI to download
2645+ * \param object_name name of the kind of object we are looking for in the http document
2646+ * \param create Function that returns a valid parser filled with the data contained in the http document
2647+ * \param parse Function that parses the data downloaded
2648+ *
2649+ * \return Future of list of results
2650+ */
2651+ template <typename BASE, typename TYPE, typename PARSER>
2652+ ResultsFuture<BASE> async_get(std::string const& uri,
2653+ std::string const& object_name,
2654+ FactoryFunc<PARSER> const& create,
2655+ ParseFunc<BASE, PARSER> const& parse) const;
2656+
2657+ /**
2658+ * \brief Downloads a HTTP remote file asynchronously and returns a future to a list of results
2659+ * This method downloads in a separated thread a http document identified by the given URI.
2660+ * It returns a future of list of results based on a given object name.
2661+ * If, for example, the document contains a list of objects identified by the tag "ITEM" it
2662+ * parses the document and returns a list of those objects.
2663+ * The user must provide a function to create the parser for the downloaded data and a parse function
2664+ * that retrieves the data.
2665+ *
2666+ * The method has 2 template parameters: the type of objects returned and the parser type.
2667+ *
2668+ * \param uri URI to download
2669+ * \param object_name name of the kind of object we are looking for in the http document
2670+ * \param create Function that returns a valid parser filled with the data contained in the http document
2671+ * \param parse Function that parses the data downloaded
2672+ *
2673+ * \return Future of list of results
2674+ */
2675+ template <typename TYPE, typename PARSER>
2676+ ResultsFuture<TYPE> async_get(std::string const& uri,
2677+ std::string const& object_name,
2678+ FactoryFunc<PARSER> const& create,
2679+ ParseFunc<TYPE, PARSER> const& parse) const;
2680+
2681+ /**
2682+ * \brief Downloads a HTTP remote file asynchronously and returns a future to a valid parser containing the data.
2683+ *
2684+ * This method downloads a remote http document, fills a valid parser with the downloaded data and
2685+ * returns a future to the parser.
2686+ * \param uri URI to download
2687+ * \param create Function that returns a valid parser filled with the data contained in the http document
2688+ *
2689+ * \return Future of valid parser filled with the data downloaded
2690+ */
2691+ template <typename PARSER>
2692+ ParserFuture<PARSER> async_get_parser(std::string const& uri, FactoryFunc<PARSER> const& create) const;
2693+
2694+ /**
2695+ * \brief Gets the data of the given future in the gived timeout.
2696+ * If the time given expires and the data in the future is not ready throws a unity::scopes::TimeoutException
2697+ *exception
2698+ *
2699+ * \param f Future
2700+ * \param seconds Maximum time to wait for the result
2701+ *
2702+ * \return Result of the given future.
2703+ */
2704+ template <typename T>
2705+ static T get_or_throw(std::future<T>& f, int64_t seconds = 10);
2706+
2707+ /**
2708+ * \brief Constructs a URI with the given host and parameters.
2709+ * This is a convenience method that constructs a uri with a given host and parameterss
2710+ */
2711+ std::string get_uri(std::string const& host,
2712+ std::vector<std::pair<std::string, std::string>> const& parameters) const;
2713+
2714+protected:
2715+ /// @cond
2716+ core::net::http::Request::Progress::Next progress_report(core::net::http::Request::Progress const& progress) const;
2717+
2718+ void async_execute(core::net::http::Request::Handler const& handler, std::string const& uri) const;
2719+
2720+ class Priv;
2721+ std::shared_ptr<Priv> p_;
2722+ /// @endcond
2723+};
2724+
2725+template <typename BASE, typename TYPE, typename PARSER>
2726+HttpAsyncReader::ResultsFuture<BASE> HttpAsyncReader::async_get(std::string const& uri,
2727+ std::string const& object_name,
2728+ FactoryFunc<PARSER> const& create,
2729+ ParseFunc<BASE, PARSER> const& parse) const
2730+{
2731+ static_assert(std::is_base_of<BASE, TYPE>::value,
2732+ "Second template parameter type must be a valid base class of the first one.");
2733+
2734+ auto prom = std::make_shared<std::promise<std::deque<std::shared_ptr<BASE>>>>();
2735+ core::net::http::Request::Handler handler;
2736+
2737+ handler.on_progress(bind(&HttpAsyncReader::progress_report, this, std::placeholders::_1));
2738+
2739+ handler.on_error([prom, uri](core::net::Error const& e)
2740+ {
2741+ unity::LogicException logic_exception("AsyncReader::async_get: " + std::string(e.what()) +
2742+ "( uri = " + uri + " )");
2743+ prom->set_exception(logic_exception.self());
2744+ });
2745+
2746+ handler.on_response(
2747+ [prom, object_name, parse, create, uri](core::net::http::Response const& response)
2748+ {
2749+ if (response.status != core::net::http::Status::ok)
2750+ {
2751+ unity::LogicException e("AsyncReader::async_get: " + response.body + "( uri = " + uri + " )");
2752+ prom->set_exception(e.self());
2753+ }
2754+ else
2755+ {
2756+ std::string error_string;
2757+ std::shared_ptr<PARSER> reader = create(response.body, error_string);
2758+ if (!reader)
2759+ {
2760+ unity::LogicException e("AsyncReader::async_get: error obtaining parser: " + error_string);
2761+ prom->set_exception(e.self());
2762+ }
2763+ else
2764+ {
2765+ std::deque<std::shared_ptr<BASE>> results;
2766+ std::string error_message;
2767+ if (!parse(*reader, object_name, results, error_message))
2768+ {
2769+ unity::LogicException e("AsyncReader::async_get: error parsing data: " + error_message);
2770+ prom->set_exception(e.self());
2771+ }
2772+ else
2773+ {
2774+ prom->set_value(results);
2775+ }
2776+ }
2777+ }
2778+ });
2779+
2780+ async_execute(handler, uri);
2781+
2782+ return prom->get_future();
2783+}
2784+
2785+template <typename TYPE, typename PARSER>
2786+HttpAsyncReader::ResultsFuture<TYPE> HttpAsyncReader::async_get(std::string const& uri,
2787+ std::string const& object_name,
2788+ FactoryFunc<PARSER> const& create,
2789+ ParseFunc<TYPE, PARSER> const& parse) const
2790+{
2791+ return async_get<TYPE, TYPE, PARSER>(uri, object_name, create, parse);
2792+}
2793+
2794+template <typename PARSER>
2795+HttpAsyncReader::ParserFuture<PARSER> HttpAsyncReader::async_get_parser(std::string const& uri,
2796+ FactoryFunc<PARSER> const& create) const
2797+{
2798+ auto prom = std::make_shared<std::promise<std::shared_ptr<PARSER>>>();
2799+ core::net::http::Request::Handler handler;
2800+ handler.on_progress(bind(&HttpAsyncReader::progress_report, this, std::placeholders::_1));
2801+
2802+ handler.on_error([prom, uri](core::net::Error const& e)
2803+ {
2804+ unity::LogicException logic_exception("AsyncReader::async_get: " + std::string(e.what()) +
2805+ "( uri = " + uri + " )");
2806+ prom->set_exception(logic_exception.self());
2807+ });
2808+
2809+ handler.on_response(
2810+ [this, prom, create, uri](core::net::http::Response const& response)
2811+ {
2812+ if (response.status != core::net::http::Status::ok)
2813+ {
2814+ unity::LogicException e("AsyncReader::async_get_parser: " + response.body + "( uri = " + uri + " )");
2815+ prom->set_exception(e.self());
2816+ }
2817+ else
2818+ {
2819+ std::string error_string;
2820+ std::shared_ptr<PARSER> reader = create(response.body, error_string);
2821+ if (!reader)
2822+ {
2823+ unity::LogicException e("AsyncReader::async_get: error obtaining parser: " + error_string);
2824+ prom->set_exception(e.self());
2825+ }
2826+ else
2827+ {
2828+ prom->set_value(reader);
2829+ }
2830+ }
2831+ });
2832+
2833+ async_execute(handler, uri);
2834+
2835+ return prom->get_future();
2836+}
2837+
2838+template <typename T>
2839+T HttpAsyncReader::get_or_throw(std::future<T>& f, int64_t seconds)
2840+{
2841+ if (f.wait_for(std::chrono::seconds(seconds)) != std::future_status::ready)
2842+ {
2843+ throw unity::scopes::TimeoutException("AsyncReader::get_or_throw: Wait for future timeout after " +
2844+ std::to_string(seconds) + " seconds");
2845+ }
2846+ return f.get();
2847+}
2848+
2849+} // namespace qt
2850+
2851+} // namespace scopes
2852+
2853+} // namespace unity
2854
2855=== added file 'include/unity/scopes/qt/JsonAsyncReader.h'
2856--- include/unity/scopes/qt/JsonAsyncReader.h 1970-01-01 00:00:00 +0000
2857+++ include/unity/scopes/qt/JsonAsyncReader.h 2015-02-05 11:31:47 +0000
2858@@ -0,0 +1,363 @@
2859+/*
2860+* Copyright (C) 2014 Canonical, Ltd.
2861+*
2862+* This library is free software; you can redistribute it and/or modify it under
2863+* the terms of version 3 of the GNU Lesser General Public License as published
2864+* by the Free Software Foundation.
2865+*
2866+* This library is distributed in the hope that it will be useful, but WITHOUT
2867+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2868+* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
2869+* details.
2870+*
2871+* You should have received a copy of the GNU Lesser General Public License
2872+* along with this program. If not, see <http://www.gnu.org/licenses/>.
2873+*
2874+* Author: Xavi Garcia <xavi.garcia.mena@canonical.com>
2875+*/
2876+#pragma once
2877+
2878+#ifndef _ENABLE_QT_EXPERIMENTAL_
2879+#error You should define _ENABLE_QT_EXPERIMENTAL_ in order to use this experimental header file.
2880+#endif
2881+
2882+#include <unity/scopes/qt/HttpAsyncReader.h>
2883+#include <unity/util/DefinesPtrs.h>
2884+#include <unity/util/NonCopyable.h>
2885+
2886+#include <QtCore/QJsonArray>
2887+#include <QtCore/QJsonDocument>
2888+#include <QtCore/QJsonObject>
2889+#include <QtCore/QStringList>
2890+#include <QtCore/QVector>
2891+
2892+#include <memory>
2893+#include <future>
2894+
2895+namespace unity
2896+{
2897+
2898+namespace scopes
2899+{
2900+
2901+namespace qt
2902+{
2903+
2904+/// @cond
2905+template <typename TYPE>
2906+using ResultsList = std::deque<std::shared_ptr<TYPE>>;
2907+
2908+template <typename B, typename T>
2909+static bool get_results_json(QJsonDocument& json,
2910+ std::string const& object_name,
2911+ ResultsList<B>& results,
2912+ std::string&);
2913+/// @endcond
2914+
2915+/**
2916+\brief Class that downloads http JSON files asynchronously.
2917+
2918+Executes a remote HTTP query asynchronously to return different futures about JSON results or a JSON parser.
2919+The class implements and defines a function that returns a JSON parser filled with the data
2920+downloaded.
2921+The class also offers a default function to obtain all objects of a given name in the results.
2922+The user may define his own parsing function to parse data at he desires.
2923+*/
2924+class JsonAsyncReader
2925+{
2926+public:
2927+ /// @cond
2928+ NONCOPYABLE(JsonAsyncReader);
2929+ UNITY_DEFINES_PTRS(JsonAsyncReader);
2930+
2931+ /**
2932+ * \brief Parse function alias
2933+ */
2934+ template <typename B>
2935+ using ParseFunc =
2936+ std::function<bool(QJsonDocument& root, const std::string&, std::deque<std::shared_ptr<B>>&, std::string&)>;
2937+
2938+ /**
2939+ * \brief Results future alias
2940+ */
2941+ template <typename T>
2942+ using ResultsFuture = std::future<std::deque<std::shared_ptr<T>>>;
2943+
2944+ /**
2945+ * \brief Results list alias
2946+ */
2947+ template <typename TYPE>
2948+ using ResultsList = std::deque<std::shared_ptr<TYPE>>;
2949+
2950+ /**
2951+ * \brief Future of QJsonDocument
2952+ */
2953+ typedef std::future<std::shared_ptr<QJsonDocument>> JsonDocumentFuture;
2954+
2955+ /**
2956+ * \brief Shared pointer of QJsonDocument
2957+ */
2958+ typedef std::shared_ptr<QJsonDocument> QJsonDocumentSptr;
2959+
2960+ /**
2961+ * \brief Vector of pair of parameters
2962+ */
2963+ typedef std::vector<std::pair<std::string, std::string>> JsonParameters;
2964+
2965+ JsonAsyncReader();
2966+ virtual ~JsonAsyncReader() = default;
2967+ /// @encond
2968+
2969+ /**
2970+ * \brief Downloads a HTTP JSON remote file asynchronously and returns a future to a list of results
2971+ * This method downloads in a separated thread a http document identified by the given URI.
2972+ * It returns a future of list of results based on a given object name.
2973+ * If, for example, the document contains a list of objects identified by the tag "ITEM" it
2974+ * parses the document and returns a list of those objects.
2975+ *
2976+ * The user may provide his own function to parse the downloaded data.
2977+ *
2978+ * The method has 2 template parameters: the type of results returned and the type of objects when instantiating.
2979+ * The type of instantiation has to be a derived class of the return type. This is offered for convenience
2980+ * to return more generic types and get advantage of polymorphism.
2981+ *
2982+ * The method checks at compile time that the instantiation type is effectively a derived class of the type
2983+ * returned.
2984+ *
2985+ * \param uri URI to download
2986+ * \param object_name name of the kind of object we are looking for in the http document
2987+ * \param parse Function that parses the data downloaded
2988+ *
2989+ * \return Future of list of results
2990+ */
2991+ template <typename BASE, typename TYPE>
2992+ ResultsFuture<BASE> async_get(std::string const& uri,
2993+ std::string const& object_name,
2994+ ParseFunc<BASE> const& parse = get_results_json<BASE, TYPE>) const;
2995+
2996+ /**
2997+ * \brief Downloads a JSON HTTP remote file asynchronously and returns a future to a list of results
2998+ * This method downloads in a separated thread a http document identified by the given URI.
2999+ * It returns a future of list of results based on a given object name.
3000+ * If, for example, the document contains a list of objects identified by the tag "ITEM" it
3001+ * parses the document and returns a list of those objects.
3002+ * The user must provide a function to create the parser for the downloaded data and a parse function
3003+ * that retrieves the data.
3004+ *
3005+ * The method has 1 template parameter: the type of objects returned and the parser type.
3006+ *
3007+ * \param uri URI to download
3008+ * \param object_name name of the kind of object we are looking for in the http document
3009+ * \param parse Function that parses the data downloaded
3010+ *
3011+ * \return Future of list of results
3012+ */
3013+ template <typename T>
3014+ ResultsFuture<T> async_get(std::string const& uri,
3015+ std::string const& object_name,
3016+ ParseFunc<T> const& parse = get_results_json<T, T>) const;
3017+
3018+ /**
3019+ * \brief Downloads a HTTP JSON remote file asynchronously and returns a future to a list of results
3020+ * This method downloads in a separated thread a http document identified by the given URI.
3021+ * It returns a future of list of results based on a given object name.
3022+ * If, for example, the document contains a list of objects identified by the tag "ITEM" it
3023+ * parses the document and returns a list of those objects.
3024+ *
3025+ * The user may provide his own function to parse the downloaded data.
3026+ *
3027+ * The method has 2 template parameters: the type of results returned and the type of objects when intantiating.
3028+ * The type of instantiation has to be a derived class of the return type. This is offered for convenience
3029+ * to return more generic types and get advantage of polymorphism.
3030+ *
3031+ * The method checks at compile time that the instantiation type is effectively a derived class of the type
3032+ * returned.
3033+ *
3034+ * \param host the remote host name
3035+ * \param params The parameters that wlll build the final query, defined by a list of pairs of key and value
3036+ * \param object_name name of the kind of object we are looking for in the http document
3037+ * \param parse Function that parses the data downloaded
3038+ *
3039+ * \return Future of list of results
3040+ */
3041+ template <typename BASE, typename TYPE>
3042+ ResultsFuture<BASE> async_get(std::string const& host,
3043+ JsonParameters const& params,
3044+ std::string const& object_name,
3045+ ParseFunc<BASE> const& parse = get_results_json<BASE, TYPE>) const;
3046+
3047+ /**
3048+ * \brief Downloads a HTTP JSON remote file asynchronously and returns a future to a list of results
3049+ * This method downloads in a separated thread a http document identified by the given URI.
3050+ * It returns a future of list of results based on a given object name.
3051+ * If, for example, the document contains a list of objects identified by the tag "ITEM" it
3052+ * parses the document and returns a list of those objects.
3053+ *
3054+ * The user may provide his own function to parse the downloaded data.
3055+ *
3056+ * The method has 1 template parameters: the type of results returned.
3057+ *
3058+ * The method checks at compile time that the instantiation type is effectively a derived class of the type
3059+ * returned.
3060+ *
3061+ * \param host the remote host name
3062+ * \param params The parameters that wlll build the final query, defined by a list of pairs of key and value
3063+ * \param object_name name of the kind of object we are looking for in the http document
3064+ * \param parse Function that parses the data downloaded
3065+ *
3066+ * \return Future of list of results
3067+ */
3068+ template <typename T>
3069+ ResultsFuture<T> async_get(std::string const& host,
3070+ JsonParameters const& params,
3071+ std::string const& object_name,
3072+ ParseFunc<T> const& parse = get_results_json<T, T>) const;
3073+
3074+ /**
3075+ * \brief Downloads a HTTP remote file asynchronously and returns a future to a valid JSON parser containing the
3076+ *data.
3077+ *
3078+ * This method downloads a remote http document, fills a valid QJsonDocument parser with the downloaded data and
3079+ * returns a future to the parser.
3080+ * \param uri URI to download
3081+ *
3082+ * \return Future of valid parser filled with the data downloaded
3083+ */
3084+ JsonDocumentFuture async_get_parser(std::string const& uri) const;
3085+
3086+ /**
3087+ * \brief Downloads a HTTP remote file asynchronously and returns a future to a valid JSON parser containing the
3088+ *data.
3089+ *
3090+ * This method downloads a remote http document, fills a valid QJsonDocument parser with the downloaded data and
3091+ * returns a future to the parser.
3092+ * \param host host name
3093+ * \param params The parameters that will build the final query, defined by a list of pairs of key and value
3094+ *
3095+ * \return Future of valid parser filled with the data downloaded
3096+ */
3097+ JsonDocumentFuture async_get_parser(std::string const& host, JsonParameters const& params) const;
3098+
3099+protected:
3100+ /**
3101+ * \brief Creates a QJsonDocument filled with the given data.
3102+ * \param data The data that contains the JSON document
3103+ * \param error Returned by the method, contains any possible error string obtained during the creation of the
3104+ *parser.
3105+ *
3106+ * \return shared pointer to the QJsonDocument created
3107+ */
3108+ static QJsonDocumentSptr create_parser_with_data(std::string const& data, std::string& error);
3109+
3110+ /// @cond
3111+ std::shared_ptr<HttpAsyncReader> p_;
3112+ /// @endcond
3113+};
3114+
3115+/// @cond
3116+template <typename BASE, typename TYPE>
3117+JsonAsyncReader::ResultsFuture<BASE> JsonAsyncReader::async_get(std::string const& uri,
3118+ std::string const& object_name,
3119+ ParseFunc<BASE> const& parse) const
3120+{
3121+ return p_->async_get<BASE, TYPE, QJsonDocument>(uri, object_name, JsonAsyncReader::create_parser_with_data, parse);
3122+}
3123+
3124+template <typename T>
3125+JsonAsyncReader::ResultsFuture<T> JsonAsyncReader::async_get(std::string const& uri,
3126+ std::string const& object_name,
3127+ ParseFunc<T> const& parse) const
3128+{
3129+ return p_->async_get<T, T, QJsonDocument>(uri, object_name, JsonAsyncReader::create_parser_with_data, parse);
3130+}
3131+
3132+template <typename BASE, typename TYPE>
3133+JsonAsyncReader::ResultsFuture<BASE> JsonAsyncReader::async_get(std::string const& host,
3134+ JsonParameters const& params,
3135+ std::string const& object_name,
3136+ ParseFunc<BASE> const& parse) const
3137+{
3138+ std::string uri = p_->get_uri(host, params);
3139+ return p_->async_get<BASE, TYPE, QJsonDocument>(uri, object_name, JsonAsyncReader::create_parser_with_data, parse);
3140+}
3141+
3142+template <typename T>
3143+JsonAsyncReader::ResultsFuture<T> JsonAsyncReader::async_get(std::string const& host,
3144+ JsonParameters const& params,
3145+ std::string const& object_name,
3146+ ParseFunc<T> const& parse) const
3147+{
3148+ std::string uri = p_->get_uri(host, params);
3149+ return p_->async_get<T, T, QJsonDocument>(uri, object_name, JsonAsyncReader::create_parser_with_data, parse);
3150+}
3151+
3152+template <typename B, typename T>
3153+static bool get_results_json_object(QJsonObject& root,
3154+ const std::string& object_name,
3155+ JsonAsyncReader::ResultsList<B>& results,
3156+ std::string& error_string)
3157+{
3158+ QString qobject_name(object_name.c_str());
3159+ if (root.contains(qobject_name))
3160+ {
3161+ if (root[qobject_name].isArray())
3162+ {
3163+ auto sub_root = root[qobject_name];
3164+ QJsonArray levelArray = sub_root.toArray();
3165+ for (int levelIndex = 0; levelIndex < levelArray.size(); ++levelIndex)
3166+ {
3167+ QJsonObject levelObject = levelArray[levelIndex].toObject();
3168+ results.emplace_back(std::make_shared<T>(levelObject));
3169+ }
3170+ }
3171+ else if (root[qobject_name].isObject())
3172+ {
3173+ auto sub_root = root[qobject_name].toObject();
3174+ results.emplace_back(std::make_shared<T>(sub_root));
3175+ }
3176+ }
3177+ else
3178+ {
3179+ // iterate thow the existing members
3180+ for (auto member : root.keys())
3181+ {
3182+ auto item = root[member];
3183+ if (item.isObject())
3184+ {
3185+ QJsonObject obj = item.toObject();
3186+ get_results_json_object<B, T>(obj, object_name, results, error_string);
3187+ }
3188+ }
3189+ }
3190+ return true;
3191+}
3192+
3193+template <typename B, typename T>
3194+static bool get_results_json(QJsonDocument& doc,
3195+ const std::string& object_name,
3196+ JsonAsyncReader::ResultsList<B>& results,
3197+ std::string& error_string)
3198+{
3199+ if (doc.isArray())
3200+ {
3201+ QJsonArray levelArray = doc.array();
3202+ for (int levelIndex = 0; levelIndex < levelArray.size(); ++levelIndex)
3203+ {
3204+ QJsonObject levelObject = levelArray[levelIndex].toObject();
3205+ get_results_json_object<B, T>(levelObject, object_name, results, error_string);
3206+ }
3207+ }
3208+ else if (doc.isObject())
3209+ {
3210+ QJsonObject levelObject = doc.object();
3211+ get_results_json_object<B, T>(levelObject, object_name, results, error_string);
3212+ }
3213+ return true;
3214+}
3215+/// @endcond
3216+
3217+} // namespace qt
3218+
3219+} // namespace scopes
3220+
3221+} // namespace unity
3222
3223=== added file 'include/unity/scopes/qt/JsonReader.h'
3224--- include/unity/scopes/qt/JsonReader.h 1970-01-01 00:00:00 +0000
3225+++ include/unity/scopes/qt/JsonReader.h 2015-02-05 11:31:47 +0000
3226@@ -0,0 +1,86 @@
3227+/*
3228+ * Copyright (C) 2014 Canonical, Ltd.
3229+ *
3230+ * This library is free software; you can redistribute it and/or modify it under
3231+ * the terms of version 3 of the GNU Lesser General Public License as published
3232+ * by the Free Software Foundation.
3233+ *
3234+ * This library is distributed in the hope that it will be useful, but WITHOUT
3235+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
3236+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
3237+ * details.
3238+ *
3239+ * You should have received a copy of the GNU Lesser General Public License
3240+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3241+ *
3242+ * Author: Xavi Garcia <xavi.garcia.mena@canonical.com>
3243+ */
3244+#pragma once
3245+
3246+#ifndef _ENABLE_QT_EXPERIMENTAL_
3247+#error You should define _ENABLE_QT_EXPERIMENTAL_ in order to use this experimental header file.
3248+#endif
3249+
3250+#include <QtCore/QJsonDocument>
3251+#include <QtCore/QUrl>
3252+
3253+#include <memory>
3254+#include <vector>
3255+
3256+namespace unity
3257+{
3258+
3259+namespace scopes
3260+{
3261+
3262+namespace qt
3263+{
3264+
3265+class JsonAsyncReader;
3266+
3267+/**
3268+\brief Class that downloads http JSON files synchronously.
3269+
3270+Executes a remote HTTP query synchronously to return a JSON parser filled with the downloaded data.
3271+*/
3272+class JsonReader final
3273+{
3274+public:
3275+ /// @cond
3276+ JsonReader();
3277+ ~JsonReader() = default;
3278+
3279+ typedef std::shared_ptr<QJsonDocument> QJsonDocumentSptr;
3280+
3281+ typedef QVector<QPair<QString, QString>> QJsonParameters;
3282+ /// @endcond
3283+
3284+ /**
3285+ * \brief Downloads a remote JSON document and returns a parser containing the data.
3286+ * \param uri URI to download
3287+ *
3288+ * \return shared pointer of a QJsonDocument containing the downloaded data.
3289+ */
3290+ QJsonDocumentSptr read(QUrl const& uri) const;
3291+
3292+ /**
3293+ * \brief Downloads a remote JSON document and returns a parser containing the data.
3294+ * \param host the remote host name
3295+ * \param parameters The parameters that will build the final query, defined by a list of pairs of key and value
3296+ *
3297+ * \return shared pointer of a QJsonDocument containing the downloaded data.
3298+ */
3299+ QJsonDocumentSptr read(QString const& host, QJsonParameters const& parameters) const;
3300+
3301+private:
3302+ JsonReader(JsonReader const&) = delete; /** Deleted */
3303+ JsonReader& operator=(JsonReader const&) = delete;
3304+
3305+ std::shared_ptr<JsonAsyncReader> p_;
3306+};
3307+
3308+} // namespace qt
3309+
3310+} // namespace scopes
3311+
3312+} // namespace unity
3313
3314=== added file 'include/unity/scopes/qt/QActionMetadata.h'
3315--- include/unity/scopes/qt/QActionMetadata.h 1970-01-01 00:00:00 +0000
3316+++ include/unity/scopes/qt/QActionMetadata.h 2015-02-05 11:31:47 +0000
3317@@ -0,0 +1,145 @@
3318+/*
3319+ * Copyright (C) 2015 Canonical Ltd
3320+ *
3321+ * This program is free software: you can redistribute it and/or modify
3322+ * it under the terms of the GNU Lesser General Public License version 3 as
3323+ * published by the Free Software Foundation.
3324+ *
3325+ * This program is distributed in the hope that it will be useful,
3326+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3327+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3328+ * GNU Lesser General Public License for more details.
3329+ *
3330+ * You should have received a copy of the GNU Lesser General Public License
3331+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3332+ *
3333+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
3334+ */
3335+#pragma once
3336+
3337+#include <unity/util/DefinesPtrs.h>
3338+
3339+#include <QtCore/QVariantMap>
3340+
3341+namespace unity
3342+{
3343+
3344+namespace scopes
3345+{
3346+
3347+namespace qt
3348+{
3349+
3350+class QPreviewQueryBaseAPI;
3351+
3352+namespace internal
3353+{
3354+class QActionMetadataImpl;
3355+class QPreviewQueryBaseImpl;
3356+}
3357+
3358+/**
3359+\brief Metadata passed to scopes for preview and activation.
3360+\see unity::scopes::qt::QScopeBase::preview, unity::scopes::ScopeBase::activate,
3361+unity::scopes::ScopeBase::perform_action
3362+*/
3363+class QActionMetadata final
3364+{
3365+public:
3366+ /// @cond
3367+ UNITY_DEFINES_PTRS(QActionMetadata);
3368+
3369+ ~QActionMetadata();
3370+ /// @endcond
3371+
3372+ /**
3373+ \brief Create ActionMetadata with the given locale and form factor.
3374+ \param locale locale string, eg. en_EN
3375+ \param form_factor form factor name, e.g. phone, desktop, phone-version etc.
3376+ */
3377+ QActionMetadata(QString const& locale, QString const& form_factor);
3378+
3379+ /**
3380+ \brief Attach arbitrary data to this ActionMetadata.
3381+ \param data The data value to attach.
3382+ */
3383+ void set_scope_data(QVariant const& data);
3384+
3385+ /**
3386+ \brief Get data attached to this ActionMetadata.
3387+ \return The attached data, or QVariant::null.
3388+ */
3389+ QVariant scope_data() const;
3390+
3391+ /**@name Copy and assignment
3392+ Copy and assignment operators (move and non-move versions) have the usual value semantics.
3393+ */
3394+ //{@
3395+ QActionMetadata(QActionMetadata const& other);
3396+ QActionMetadata(QActionMetadata&&);
3397+
3398+ QActionMetadata& operator=(QActionMetadata const& other);
3399+ QActionMetadata& operator=(QActionMetadata&&);
3400+ //@}
3401+
3402+ /**
3403+ \brief Sets a hint.
3404+
3405+ \param key The name of the hint.
3406+ \param value Hint value
3407+ */
3408+ void set_hint(QString const& key, QVariant const& value);
3409+
3410+ /**
3411+ \brief Get all hints.
3412+
3413+ \return Hints dictionary.
3414+ \throws unity::NotFoundException if no hints are available.
3415+ */
3416+ QVariantMap hints() const;
3417+
3418+ /**
3419+ \brief Check if this SearchMetadata has a hint.
3420+ \param key The hint name.
3421+ \return True if the hint is set.
3422+ */
3423+ bool contains_hint(QString const& key) const;
3424+
3425+ /**
3426+ \brief Returns a reference to a hint.
3427+
3428+ This method can be used to read or set hints. Setting a value of an existing hint overwrites
3429+ its previous value.
3430+ Referencing a non-existing hint automatically creates it with a default value of QVariant::Type::Null.
3431+ \param key The name of the hint.
3432+ \return A reference to the hint.
3433+ */
3434+ QVariant& operator[](QString const& key);
3435+
3436+ /**
3437+ \brief Returns a const reference to a hint.
3438+
3439+ This method can be used for read-only access to hints.
3440+ Referencing a non-existing hint throws unity::InvalidArgumentException.
3441+ \param key The name of the hint.
3442+ \return A const reference to the hint.
3443+ \throws unity::NotFoundException if no hint with the given name exists.
3444+ */
3445+ QVariant const& operator[](QString const& key) const;
3446+
3447+private:
3448+ /// @cond
3449+ QActionMetadata(internal::QActionMetadataImpl* impl);
3450+
3451+ std::unique_ptr<internal::QActionMetadataImpl> p;
3452+ friend class internal::QActionMetadataImpl;
3453+ friend class internal::QPreviewQueryBaseImpl;
3454+ friend class QPreviewQueryBaseAPI;
3455+ /// @endcond
3456+};
3457+
3458+} // namespace qt
3459+
3460+} // namespace scopes
3461+
3462+} // namespace unity
3463
3464=== added file 'include/unity/scopes/qt/QCannedQuery.h'
3465--- include/unity/scopes/qt/QCannedQuery.h 1970-01-01 00:00:00 +0000
3466+++ include/unity/scopes/qt/QCannedQuery.h 2015-02-05 11:31:47 +0000
3467@@ -0,0 +1,155 @@
3468+/*
3469+ * Copyright (C) 2015 Canonical Ltd
3470+ *
3471+ * This program is free software: you can redistribute it and/or modify
3472+ * it under the terms of the GNU Lesser General Public License version 3 as
3473+ * published by the Free Software Foundation.
3474+ *
3475+ * This program is distributed in the hope that it will be useful,
3476+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3477+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3478+ * GNU Lesser General Public License for more details.
3479+ *
3480+ * You should have received a copy of the GNU Lesser General Public License
3481+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3482+ *
3483+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
3484+ */
3485+
3486+#pragma once
3487+
3488+#include <unity/util/DefinesPtrs.h>
3489+#include <unity/scopes/FilterState.h>
3490+
3491+#include <QtCore/QString>
3492+#include <QtCore/QVariantMap>
3493+
3494+namespace unity
3495+{
3496+
3497+namespace scopes
3498+{
3499+
3500+class CannedQuery;
3501+
3502+namespace qt
3503+{
3504+
3505+namespace internal
3506+{
3507+class QCannedQueryImpl;
3508+class QSearchQueryBaseImpl;
3509+class QDepartmentImpl;
3510+}
3511+
3512+/**
3513+\brief Parameters of a search query.
3514+
3515+Holds all parameters of a search query: the target scope id, query string, department id, and
3516+state of the filters. Can be converted to/from scope:// uri schema string.
3517+*/
3518+class QCannedQuery final
3519+{
3520+public:
3521+ /// @cond
3522+ UNITY_DEFINES_PTRS(QCannedQuery);
3523+ /// @endcond
3524+
3525+ /**
3526+ \brief Creates a query for given scope with empty query string.
3527+ */
3528+ explicit QCannedQuery(QString const& scope_id);
3529+
3530+ /**
3531+ \brief Creates a query for given scope with specific query string and in given department.
3532+ */
3533+ QCannedQuery(QString const& scope_id, QString const& query_str, QString const& department_id);
3534+
3535+ /**@name Copy and assignment
3536+ Copy and assignment operators (move and non-move versions) have the usual value semantics.
3537+ */
3538+ //{@
3539+ QCannedQuery(QCannedQuery const& other);
3540+ QCannedQuery(QCannedQuery&&);
3541+ QCannedQuery& operator=(QCannedQuery const& other);
3542+ QCannedQuery& operator=(QCannedQuery&&);
3543+ //@}
3544+
3545+ /// @cond
3546+ ~QCannedQuery();
3547+ /// @endcond
3548+
3549+ /**
3550+ \brief Sets or updates the department.
3551+ */
3552+ void set_department_id(QString const& dep_id);
3553+
3554+ /**
3555+ \brief Sets or updates the query string.
3556+ */
3557+ void set_query_string(QString const& query_str);
3558+
3559+ /**
3560+ \brief Sets filter state.
3561+ */
3562+ void set_filter_state(FilterState const& filter_state);
3563+
3564+ /**
3565+ \brief Returns the scope identifier of this CannedQuery.
3566+ \return The scope identifier.
3567+ */
3568+ QString scope_id() const;
3569+
3570+ /**
3571+ \brief Returns the department id of this CannedQuery.
3572+ \return The department id.
3573+ */
3574+ QString department_id() const;
3575+
3576+ /**
3577+ \brief Returns the query string of this CannedQuery.
3578+ \return The query string.
3579+ */
3580+ QString query_string() const;
3581+
3582+ /// @cond
3583+ QVariantMap serialize() const;
3584+ /// @endcond
3585+
3586+ /**
3587+ \brief Returns a string representation of this CannedQuery object as a URI using scope:// schema.
3588+ \return The URI for the query.
3589+ */
3590+ QString to_uri() const;
3591+
3592+ /**
3593+ \brief Get state of the filters for this CannedQuery.
3594+
3595+ Pass this state to methods of specific filter instances (such as
3596+ unity::scopes::OptionSelectorFilter::active_options())to examine filter state.
3597+ \return The state of the filters.
3598+ */
3599+ FilterState filter_state() const;
3600+
3601+ /**
3602+ \brief Recreates a CannedQuery object from a scope:// URI.
3603+
3604+ \return a CannedQuery instance
3605+ \throws InvalidArgumentException if the URI cannot be parsed.
3606+ */
3607+ static QCannedQuery from_uri(QString const& uri);
3608+
3609+private:
3610+ QCannedQuery(internal::QCannedQueryImpl* impl);
3611+ QCannedQuery(CannedQuery const& api_query);
3612+ std::unique_ptr<internal::QCannedQueryImpl> p;
3613+ friend class internal::QCannedQueryImpl;
3614+ friend class internal::QSearchQueryBaseImpl;
3615+ friend class internal::QDepartmentImpl;
3616+};
3617+
3618+} // namespace qt
3619+
3620+} // namespace scopes
3621+
3622+} // namespace unity
3623
3624=== added file 'include/unity/scopes/qt/QCategorisedResult.h'
3625--- include/unity/scopes/qt/QCategorisedResult.h 1970-01-01 00:00:00 +0000
3626+++ include/unity/scopes/qt/QCategorisedResult.h 2015-02-05 11:31:47 +0000
3627@@ -0,0 +1,92 @@
3628+/*
3629+ * Copyright (C) 2015 Canonical Ltd
3630+ *
3631+ * This program is free software: you can redistribute it and/or modify
3632+ * it under the terms of the GNU Lesser General Public License version 3 as
3633+ * published by the Free Software Foundation.
3634+ *
3635+ * This program is distributed in the hope that it will be useful,
3636+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3637+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3638+ * GNU Lesser General Public License for more details.
3639+ *
3640+ * You should have received a copy of the GNU Lesser General Public License
3641+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3642+ *
3643+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
3644+ */
3645+
3646+#pragma once
3647+
3648+#include <unity/scopes/qt/QResult.h>
3649+#include <unity/scopes/qt/QCategory.h>
3650+
3651+namespace unity
3652+{
3653+
3654+namespace scopes
3655+{
3656+
3657+namespace qt
3658+{
3659+
3660+namespace internal
3661+{
3662+class QSearchReplyImpl;
3663+class QCategorisedResultImpl;
3664+}
3665+
3666+/**
3667+\brief A result, including the category it belongs to.
3668+*/
3669+
3670+class QCategorisedResult final : public QResult
3671+{
3672+public:
3673+ /// @cond
3674+ UNITY_DEFINES_PTRS(QCategorisedResult);
3675+ /// @endcond
3676+
3677+ /**
3678+ \brief Creates a CategorisedResult with given category,
3679+ with all base attributes initially empty.
3680+ \param category The category for the result.
3681+ */
3682+ explicit QCategorisedResult(QCategory::SCPtr category);
3683+
3684+ /**@name Copy and assignment
3685+ Copy and assignment operators (move and non-move versions) have the usual value semantics.
3686+ */
3687+ //{@
3688+ QCategorisedResult(QCategorisedResult const& other);
3689+ QCategorisedResult& operator=(QCategorisedResult const& other);
3690+ QCategorisedResult(QCategorisedResult&&);
3691+ QCategorisedResult& operator=(QCategorisedResult&&);
3692+ //@}
3693+
3694+ /**
3695+ \brief Updates the category of this result.
3696+ \param category The category for the result.
3697+ */
3698+ void set_category(QCategory::SCPtr category);
3699+
3700+ /**
3701+ \brief Return category of this result.
3702+ Get the category instance this result belongs to.
3703+ \return The category instance.
3704+ */
3705+ QCategory::SCPtr category() const;
3706+
3707+private:
3708+ /// @cond
3709+ internal::QCategorisedResultImpl* fwd() const;
3710+ /// @endcond
3711+
3712+ friend class internal::QSearchReplyImpl;
3713+};
3714+
3715+} // namespace qt
3716+
3717+} // namespace scopes
3718+
3719+} // namespace unity
3720
3721=== added file 'include/unity/scopes/qt/QCategory.h'
3722--- include/unity/scopes/qt/QCategory.h 1970-01-01 00:00:00 +0000
3723+++ include/unity/scopes/qt/QCategory.h 2015-02-05 11:31:47 +0000
3724@@ -0,0 +1,112 @@
3725+/*
3726+ * Copyright (C) 2015 Canonical Ltd
3727+ *
3728+ * This program is free software: you can redistribute it and/or modify
3729+ * it under the terms of the GNU Lesser General Public License version 3 as
3730+ * published by the Free Software Foundation.
3731+ *
3732+ * This program is distributed in the hope that it will be useful,
3733+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3734+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3735+ * GNU Lesser General Public License for more details.
3736+ *
3737+ * You should have received a copy of the GNU Lesser General Public License
3738+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3739+ *
3740+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
3741+ */
3742+
3743+#pragma once
3744+
3745+#include <unity/util/NonCopyable.h>
3746+#include <unity/util/DefinesPtrs.h>
3747+
3748+#include <unity/scopes/Category.h>
3749+
3750+#include <QtCore/QString>
3751+#include <QtCore/QVariantMap>
3752+
3753+class QCategorisedResult_test;
3754+
3755+namespace unity
3756+{
3757+
3758+namespace scopes
3759+{
3760+
3761+namespace qt
3762+{
3763+
3764+namespace internal
3765+{
3766+class QSearchReplyImpl;
3767+class QCategoryImpl;
3768+class QCategorisedResultImpl;
3769+}
3770+
3771+/**
3772+ \brief A set of related results returned by a scope
3773+ and displayed within a single pane in the Unity dash.
3774+
3775+ To create a QCategory, use QReplyProxy::register_category.
3776+*/
3777+class QCategory
3778+{
3779+public:
3780+ /// @cond
3781+ NONCOPYABLE(QCategory);
3782+ UNITY_DEFINES_PTRS(QCategory);
3783+
3784+ virtual ~QCategory();
3785+ /// @endcond
3786+
3787+ /**
3788+ \brief Get identifier of this Category
3789+ \return The category identifier.
3790+ */
3791+ QString id() const;
3792+
3793+ /**
3794+ \brief Get title of this Category
3795+ \return The category title.
3796+ */
3797+ QString title() const;
3798+
3799+ /**
3800+ \brief Get icon of this Category
3801+ \return The category icon.
3802+ */
3803+ QString icon() const;
3804+
3805+ /**
3806+ \brief Query to perform when this category is expanded
3807+ \return The expansion query or nullptr.
3808+ */
3809+ CannedQuery::SCPtr query() const;
3810+
3811+ /**
3812+ \brief Get renderer template of this Category
3813+ \return The category renderer template.
3814+ */
3815+ CategoryRenderer const& renderer_template() const;
3816+
3817+ // @cond
3818+ QVariantMap serialize() const;
3819+
3820+private:
3821+ /// @cond
3822+ QCategory(unity::scopes::Category::SCPtr category);
3823+ QCategory(internal::QCategoryImpl* impl);
3824+ friend class unity::scopes::qt::internal::QSearchReplyImpl;
3825+
3826+ std::unique_ptr<internal::QCategoryImpl> p;
3827+ friend class internal::QCategoryImpl;
3828+ friend class internal::QCategorisedResultImpl;
3829+ /// @endcond
3830+};
3831+
3832+} // namespace qt
3833+
3834+} // namespace scopes
3835+
3836+} // namespace unity
3837
3838=== added file 'include/unity/scopes/qt/QColumnLayout.h'
3839--- include/unity/scopes/qt/QColumnLayout.h 1970-01-01 00:00:00 +0000
3840+++ include/unity/scopes/qt/QColumnLayout.h 2015-02-05 11:31:47 +0000
3841@@ -0,0 +1,133 @@
3842+/*
3843+ * Copyright (C) 2015 Canonical Ltd
3844+ *
3845+ * This program is free software: you can redistribute it and/or modify
3846+ * it under the terms of the GNU Lesser General Public License version 3 as
3847+ * published by the Free Software Foundation.
3848+ *
3849+ * This program is distributed in the hope that it will be useful,
3850+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3851+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3852+ * GNU Lesser General Public License for more details.
3853+ *
3854+ * You should have received a copy of the GNU Lesser General Public License
3855+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3856+ *
3857+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
3858+ */
3859+
3860+#pragma once
3861+
3862+#include <unity/util/DefinesPtrs.h>
3863+
3864+#include <QtCore/QVariant>
3865+#include <QtCore/QVector>
3866+
3867+namespace unity
3868+{
3869+
3870+namespace scopes
3871+{
3872+
3873+namespace qt
3874+{
3875+
3876+namespace internal
3877+{
3878+class QColumnLayoutImpl;
3879+class QPreviewReplyImpl;
3880+}
3881+
3882+/**
3883+\brief Represents a column layout.
3884+
3885+Column layouts are used to represent the view in different ways depending on
3886+the device we are running our application.
3887+
3888+If, for example, you run the application in a tablet that has more screen the
3889+application could use more columns than running in a phone.
3890+
3891+*/
3892+class QColumnLayout final
3893+{
3894+public:
3895+ /// @cond
3896+ UNITY_DEFINES_PTRS(QColumnLayout);
3897+ /// @endcond
3898+
3899+ /**
3900+ \brief Creates a layout definition that expects num_of_columns columns to be added with ColumnLayout::add_column.
3901+ \param num_of_columns The number of columns for the layout.
3902+ \throws unity::InvalidArgumentException for an invalid number of columns.
3903+ */
3904+ explicit QColumnLayout(int num_of_columns);
3905+
3906+ /**@name Copy and assignment
3907+ Copy and assignment operators (move and non-move versions) have the usual value semantics.
3908+ */
3909+ //{@
3910+ QColumnLayout(QColumnLayout const& other);
3911+ QColumnLayout(QColumnLayout&&);
3912+ QColumnLayout& operator=(QColumnLayout const& other);
3913+ QColumnLayout& operator=(QColumnLayout&&);
3914+ //@}
3915+
3916+ /// @cond
3917+ ~QColumnLayout();
3918+ /// @endcond
3919+
3920+ /**
3921+ \brief Adds a new column and assigns widgets to it.
3922+
3923+ ColumnLayout expects exactly the number of columns passed to the constructor to be created with the
3924+ add_column method.
3925+ \throws unity::LogicException if an attempt is made to add more columns than specified in the constructor.
3926+ \throws unity::LogicException from \link unity::scopes::qt::QPreviewReply::register_layout\endlink if a layout
3927+ has fewer columns than specified in the constructor.
3928+ */
3929+ void add_column(QVector<QString> widget_ids);
3930+
3931+ /**
3932+ \brief Get the current number of columns in this layout.
3933+ \return The number of columns added with add_column().
3934+ */
3935+ int size() const noexcept;
3936+
3937+ /**
3938+ \brief Get the number of columns expected by this layout as specified in the constructor.
3939+ \return The number of columns expected by this layout.
3940+ */
3941+ int number_of_columns() const noexcept;
3942+
3943+ /**
3944+ \brief Retrieve the list of widgets for given column.
3945+ \param index The index of a column.
3946+ \return The widget identifiers for the given column index.
3947+ \throws unity::InvalidArgumentException if the index is invalid.
3948+ */
3949+ QVector<QString> column(int index) const;
3950+
3951+ /// @cond
3952+ QVariantMap serialize() const;
3953+ /// @endcond
3954+
3955+private:
3956+ QColumnLayout(internal::QColumnLayoutImpl* impl);
3957+ /// @cond
3958+ std::unique_ptr<internal::QColumnLayoutImpl> p;
3959+ friend class internal::QColumnLayoutImpl;
3960+ friend class internal::QPreviewReplyImpl;
3961+ /// @endcond
3962+};
3963+
3964+/*! \typedef QColumnLayoutList
3965+\brief List of column layouts (see unity::scopes::qt::QColumnLayout)
3966+*/
3967+
3968+typedef QList<QColumnLayout> QColumnLayoutList;
3969+
3970+} // namespace qt
3971+
3972+} // namespace scopes
3973+
3974+} // namespace unity
3975
3976=== added file 'include/unity/scopes/qt/QDepartment.h'
3977--- include/unity/scopes/qt/QDepartment.h 1970-01-01 00:00:00 +0000
3978+++ include/unity/scopes/qt/QDepartment.h 2015-02-05 11:31:47 +0000
3979@@ -0,0 +1,196 @@
3980+/*
3981+ * Copyright (C) 2015 Canonical Ltd
3982+ *
3983+ * This program is free software: you can redistribute it and/or modify
3984+ * it under the terms of the GNU Lesser General Public License version 3 as
3985+ * published by the Free Software Foundation.
3986+ *
3987+ * This program is distributed in the hope that it will be useful,
3988+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3989+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3990+ * GNU Lesser General Public License for more details.
3991+ *
3992+ * You should have received a copy of the GNU Lesser General Public License
3993+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3994+ *
3995+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
3996+ */
3997+
3998+#pragma once
3999+
4000+#include <unity/util/DefinesPtrs.h>
4001+
4002+#include <QtCore/QVariantMap>
4003+#include <QtCore/QString>
4004+#include <QtCore/QSharedPointer>
4005+#include <QtCore/QScopedPointer>
4006+
4007+#include <memory>
4008+
4009+namespace unity
4010+{
4011+
4012+namespace scopes
4013+{
4014+
4015+namespace qt
4016+{
4017+
4018+class QDepartment;
4019+class QCannedQuery;
4020+
4021+namespace internal
4022+{
4023+class QDepartmentImpl;
4024+class QSearchReplyImpl;
4025+}
4026+
4027+/*! \typedef QDepartmentList
4028+\brief List of departments (see unity::scopes::qt::QDepartment)
4029+*/
4030+typedef QList<QSharedPointer<QDepartment const>> QDepartmentList;
4031+
4032+/**
4033+\brief A department with optional sub-departments.
4034+*/
4035+class QDepartment final
4036+{
4037+public:
4038+ /// @cond
4039+ UNITY_DEFINES_PTRS(QDepartment);
4040+ /// @endcond
4041+
4042+ /**
4043+ \brief Create a department with the given canned query and name.
4044+
4045+ The identifier of this department instance is that of the `query` instance (\link
4046+ QCannedQuery::department_id()\endlink).
4047+ \param query The query (and associated parameters, such as filter state) to be executed when the user
4048+ selects this department.
4049+ \param label The display name of this department.
4050+ */
4051+ static QDepartment::UPtr create(QCannedQuery const& query, QString const& label);
4052+
4053+ /**
4054+ \brief Create a department with the given department identifier, canned query, and name.
4055+
4056+ The canned query's target department identifier is updated with department_id.
4057+ This constructor is convenient for creating multiple departments that use the same query and only
4058+ need a different department identifier.
4059+ \param department_id The department identifier.
4060+ \param query The canned query (and associated parameters, such as filter state) to be executed when the user
4061+ selects this department.
4062+ \param label The display name of this department.
4063+ */
4064+ static QDepartment::UPtr create(QString const& department_id, QCannedQuery const& query, QString const& label);
4065+
4066+ /**@name Copy and assignment
4067+ Copy and assignment operators (move and non-move versions) have the usual value semantics.
4068+ */
4069+ //{@
4070+ QDepartment(QDepartment const& other);
4071+ QDepartment(QDepartment&&);
4072+ QDepartment& operator=(QDepartment const& other);
4073+ QDepartment& operator=(QDepartment&&);
4074+ //@}
4075+
4076+ /// @cond
4077+ ~QDepartment();
4078+ /// @endcond
4079+
4080+ /**
4081+ \brief Set sub-departments of this department.
4082+ \param departments The list of sub-departments.
4083+ */
4084+ void set_subdepartments(QDepartmentList const& departments);
4085+
4086+ /**
4087+ \brief Add sub-department to this department.
4088+ \param department The subdepartment instance.
4089+ */
4090+ void add_subdepartment(QDepartment::SCPtr const& department);
4091+
4092+ /**
4093+ \brief Set the alternate label (plural of the normal label) of this department.
4094+
4095+ The alternate label should express the plural "all" form of the normal label. For example,
4096+ if the normal label is "Books", then the alternate label should be "All Books". The alternate label
4097+ needs to be provided for the current department only.
4098+ \param label The alternate label to display when showing plural form of this department's name.
4099+ */
4100+ void set_alternate_label(QString const& label);
4101+
4102+ /**
4103+ \brief Sets has_subdepartments flag of this department.
4104+
4105+ This flag is a display hint for the Shell that indicates if this department has sub-departments and as such should
4106+ be displayed
4107+ in a way that suggests further navigation to the user.
4108+ Setting this flag is not needed when sub-departments have been added with set_subdepartments() method.
4109+ Setting this flag to false after adding sub-departments with set_subdepartments() throws unity::LogicException.
4110+
4111+ \throws unity::LogicException if called with false after adding sub-departments with
4112+ unity::scopes::Department::set_subdepartments()
4113+ */
4114+ void set_has_subdepartments(bool subdepartments = true);
4115+
4116+ /**
4117+ \brief Get the identifier of this department.
4118+ \return The department identifier.
4119+ */
4120+ QString id() const;
4121+
4122+ /**
4123+ \brief Get the label of this department.
4124+ \return The department label.
4125+ */
4126+ QString label() const;
4127+
4128+ /**
4129+ \brief Get the alternate label of this department.
4130+
4131+ Return the alternate label of this department. The alternate label expresses the plural "all" form of the normal
4132+ label.
4133+ For example, if the normal label is "Books", then the alternate label is "All Books". Note that alternate label
4134+ and can be empty - in that case the normal label should be displayed instead.
4135+
4136+ \return The alternate label.
4137+ */
4138+ QString alternate_label() const;
4139+
4140+ /**
4141+ \brief Get the canned query associated with this department.
4142+ \return The canned query for this department.
4143+ */
4144+ QCannedQuery query() const;
4145+
4146+ /**
4147+ \brief Get list of sub-departments of this department.
4148+ \return The list of sub-departments.
4149+ */
4150+ QDepartmentList subdepartments() const;
4151+
4152+ /**
4153+ \brief Check if this department has subdepartments or has_subdepartments flag is set
4154+ \return true if this deparment has subdepartments or has_subdepartments flag is set
4155+ */
4156+ bool has_subdepartments() const;
4157+
4158+ /// @cond
4159+ QVariantMap serialize() const;
4160+ /// @endcond
4161+
4162+private:
4163+ /// @cond
4164+ QDepartment(internal::QDepartmentImpl* impl);
4165+ std::unique_ptr<internal::QDepartmentImpl> p;
4166+ friend class internal::QDepartmentImpl;
4167+ friend class internal::QSearchReplyImpl;
4168+ /// @endcond
4169+};
4170+
4171+} // namespace qt
4172+
4173+} // namespace scopes
4174+
4175+} // namespace unity
4176
4177=== added file 'include/unity/scopes/qt/QPreviewQueryBase.h'
4178--- include/unity/scopes/qt/QPreviewQueryBase.h 1970-01-01 00:00:00 +0000
4179+++ include/unity/scopes/qt/QPreviewQueryBase.h 2015-02-05 11:31:47 +0000
4180@@ -0,0 +1,136 @@
4181+/*
4182+ * Copyright (C) 2015 Canonical Ltd
4183+ *
4184+ * This program is free software: you can redistribute it and/or modify
4185+ * it under the terms of the GNU Lesser General Public License version 3 as
4186+ * published by the Free Software Foundation.
4187+ *
4188+ * This program is distributed in the hope that it will be useful,
4189+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4190+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4191+ * GNU Lesser General Public License for more details.
4192+ *
4193+ * You should have received a copy of the GNU Lesser General Public License
4194+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4195+ *
4196+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
4197+ */
4198+
4199+#pragma once
4200+
4201+#include <unity/util/DefinesPtrs.h>
4202+#include <unity/util/NonCopyable.h>
4203+
4204+#include <unity/scopes/PreviewReplyProxyFwd.h>
4205+
4206+#include <unity/scopes/qt/QActionMetadata.h>
4207+#include <unity/scopes/qt/QCannedQuery.h>
4208+#include <unity/scopes/qt/QPreviewReplyProxy.h>
4209+#include <unity/scopes/qt/QResult.h>
4210+
4211+#include <QtCore/QObject>
4212+
4213+namespace unity
4214+{
4215+
4216+namespace scopes
4217+{
4218+
4219+class SearchMetadata;
4220+class CannedQuery;
4221+class ActionMetadata;
4222+
4223+namespace qt
4224+{
4225+
4226+class QResult;
4227+
4228+namespace internal
4229+{
4230+class QPreviewQueryBaseImpl;
4231+}
4232+
4233+class QPreviewQueryBaseAPI;
4234+
4235+/**
4236+\brief Abstract base class to represent a particular preview.
4237+
4238+A scope must return an instance of this class from its implementation of ScopeBase::preview().
4239+
4240+\note The constructor of the instance must complete in a timely manner. Do not perform anything in the
4241+constructor that might block.
4242+*/
4243+class QPreviewQueryBase : public QObject
4244+{
4245+ Q_OBJECT
4246+public:
4247+ /// @cond
4248+ NONCOPYABLE(QPreviewQueryBase);
4249+ UNITY_DEFINES_PTRS(QPreviewQueryBase);
4250+ /// @endcond
4251+
4252+ virtual ~QPreviewQueryBase();
4253+
4254+ /**
4255+ \brief Called by scopes run time to start the query.
4256+
4257+ Your implementation of run() can use the reply proxy to push results
4258+ for the query. You can push results from within run(), in which case
4259+ the query implicitly completes when run() returns. Alternatively,
4260+ run() can store the reply proxy and return immediately. In this
4261+ case, you can use the stored proxy to push results from another
4262+ thread. It is safe to call `push()` from multiple threads without
4263+ synchronization.
4264+
4265+ The query completes either when run() returns, or when the
4266+ last stored reply proxy goes out of scope (whichever happens
4267+ last).
4268+
4269+ \param reply The proxy on which to push results for the query.
4270+ */
4271+ virtual void run(unity::scopes::qt::QPreviewReplyProxy const& reply) = 0;
4272+
4273+ /**
4274+ \brief Called by the scopes run time when the query originator
4275+ cancels a query.
4276+
4277+ Your implementation of this method should ensure that the scope stops
4278+ processing the current query as soon as possible. Any calls to a `push()` method
4279+ once a query is cancelled are ignored, so continuing to push after cancellation
4280+ only wastes CPU cycles. (`push()` returns `false` once a query is cancelled or
4281+ exceeds its cardinality limit.)
4282+ */
4283+ virtual void cancelled() = 0; // Originator cancelled the query
4284+
4285+ /**
4286+ \brief Get result for this preview request.
4287+ \throws unity::LogicException if result was not initialized (the default ctor was used).
4288+ \return result
4289+ */
4290+ QResult result() const;
4291+
4292+ /**
4293+ \brief Get metadata for this preview request.
4294+ \return search metadata
4295+ \throws unity::LogicException if preview metadata was not initialized (the default ctor was used).
4296+ */
4297+ QActionMetadata action_metadata() const;
4298+
4299+protected:
4300+ /// @cond
4301+ QPreviewQueryBase(QObject* parent = 0);
4302+
4303+private:
4304+ void init(QPreviewQueryBaseAPI* query_api);
4305+
4306+ std::unique_ptr<internal::QPreviewQueryBaseImpl> p;
4307+ friend class internal::QPreviewQueryBaseImpl;
4308+ friend class QPreviewQueryBaseAPI;
4309+ /// @endcond
4310+};
4311+
4312+} // namespace qt
4313+
4314+} // namespace scopes
4315+
4316+} // namespace unity
4317
4318=== added file 'include/unity/scopes/qt/QPreviewQueryBaseAPI.h'
4319--- include/unity/scopes/qt/QPreviewQueryBaseAPI.h 1970-01-01 00:00:00 +0000
4320+++ include/unity/scopes/qt/QPreviewQueryBaseAPI.h 2015-02-05 11:31:47 +0000
4321@@ -0,0 +1,127 @@
4322+/*
4323+ * Copyright (C) 2015 Canonical Ltd
4324+ *
4325+ * This program is free software: you can redistribute it and/or modify
4326+ * it under the terms of the GNU Lesser General Public License version 3 as
4327+ * published by the Free Software Foundation.
4328+ *
4329+ * This program is distributed in the hope that it will be useful,
4330+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4331+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4332+ * GNU Lesser General Public License for more details.
4333+ *
4334+ * You should have received a copy of the GNU Lesser General Public License
4335+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4336+ *
4337+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
4338+ */
4339+
4340+#pragma once
4341+
4342+#include <unity/util/DefinesPtrs.h>
4343+#include <unity/util/NonCopyable.h>
4344+
4345+#include <unity/scopes/PreviewQueryBase.h>
4346+#include <unity/scopes/PreviewReplyProxyFwd.h>
4347+#include <unity/scopes/qt/QPreviewQueryBase.h>
4348+
4349+#include <QtCore/QObject>
4350+
4351+class QCoreApplication;
4352+
4353+namespace unity
4354+{
4355+
4356+namespace scopes
4357+{
4358+
4359+class Result;
4360+class ActionMetadata;
4361+
4362+namespace qt
4363+{
4364+
4365+namespace internal
4366+{
4367+class QScopeBaseAPIImpl;
4368+}
4369+
4370+class QScopeBase;
4371+class QScopeBaseAPI;
4372+
4373+/**
4374+\brief Abstract base class to represent a particular preview.
4375+
4376+A scope must return an instance of this class from its implementation of ScopeBase::preview().
4377+
4378+This is the class that links scope API calls with the main QThread.
4379+The instance of this class is moved to the main QThread and pushes events to the Qt event loop.
4380+
4381+\note The constructor of the instance must complete in a timely manner. Do not perform anything in the
4382+constructor that might block.
4383+*/
4384+class QPreviewQueryBaseAPI : public QObject, public unity::scopes::PreviewQueryBase
4385+{
4386+ Q_OBJECT
4387+public:
4388+ /// @cond
4389+ NONCOPYABLE(QPreviewQueryBaseAPI);
4390+ UNITY_DEFINES_PTRS(QPreviewQueryBaseAPI);
4391+
4392+ virtual ~QPreviewQueryBaseAPI();
4393+
4394+protected:
4395+ QPreviewQueryBaseAPI(std::shared_ptr<QCoreApplication> qtapp,
4396+ QScopeBase& qtscope,
4397+ unity::scopes::Result const& result,
4398+ unity::scopes::ActionMetadata const& metadata,
4399+ QObject* parent = 0);
4400+
4401+ bool event(QEvent* e) override;
4402+ /// @endcond
4403+
4404+ /**
4405+ \brief Called by scopes run time to start the query.
4406+
4407+ Your implementation of run() can use the reply proxy to push results
4408+ for the query. You can push results from within run(), in which case
4409+ the query implicitly completes when run() returns. Alternatively,
4410+ run() can store the reply proxy and return immediately. In this
4411+ case, you can use the stored proxy to push results from another
4412+ thread. It is safe to call `push()` from multiple threads without
4413+ synchronization.
4414+
4415+ The query completes either when run() returns, or when the
4416+ last stored reply proxy goes out of scope (whichever happens
4417+ last).
4418+
4419+ \param reply The proxy on which to push results for the query.
4420+ */
4421+ virtual void run(unity::scopes::PreviewReplyProxy const& reply) final;
4422+
4423+ /**
4424+ \brief Called by the scopes run time when the query originator
4425+ cancels a query.
4426+
4427+ Your implementation of this method should ensure that the scope stops
4428+ processing the current query as soon as possible. Any calls to a `push()` method
4429+ once a query is cancelled are ignored, so continuing to push after cancellation
4430+ only wastes CPU cycles. (`push()` returns `false` once a query is cancelled or
4431+ exceeds its cardinality limit.)
4432+ */
4433+ virtual void cancelled() final; // Originator cancelled the query
4434+
4435+ /// @cond
4436+ std::shared_ptr<QCoreApplication> qtapp_;
4437+ std::unique_ptr<QPreviewQueryBase> qtquery_;
4438+ QScopeBase& qtscope_;
4439+
4440+ friend internal::QScopeBaseAPIImpl;
4441+ /// @endcond
4442+};
4443+
4444+} // namespace qt
4445+
4446+} // namespace scopes
4447+
4448+} // namespace unity
4449
4450=== added file 'include/unity/scopes/qt/QPreviewReply.h'
4451--- include/unity/scopes/qt/QPreviewReply.h 1970-01-01 00:00:00 +0000
4452+++ include/unity/scopes/qt/QPreviewReply.h 2015-02-05 11:31:47 +0000
4453@@ -0,0 +1,103 @@
4454+/*
4455+ * Copyright (C) 2015 Canonical Ltd
4456+ *
4457+ * This program is free software: you can redistribute it and/or modify
4458+ * it under the terms of the GNU Lesser General Public License version 3 as
4459+ * published by the Free Software Foundation.
4460+ *
4461+ * This program is distributed in the hope that it will be useful,
4462+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4463+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4464+ * GNU Lesser General Public License for more details.
4465+ *
4466+ * You should have received a copy of the GNU Lesser General Public License
4467+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4468+ *
4469+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
4470+ */
4471+
4472+#pragma once
4473+
4474+#include <unity/util/DefinesPtrs.h>
4475+#include <unity/util/NonCopyable.h>
4476+
4477+#include <unity/scopes/PreviewReplyProxyFwd.h>
4478+
4479+#include <unity/scopes/qt/QColumnLayout.h>
4480+#include <unity/scopes/qt/QPreviewWidget.h>
4481+
4482+#include <QtCore/QVariant>
4483+#include <QtCore/QObject>
4484+
4485+namespace unity
4486+{
4487+
4488+namespace scopes
4489+{
4490+
4491+namespace qt
4492+{
4493+
4494+class QPreviewQueryBaseAPI;
4495+
4496+namespace internal
4497+{
4498+class QPreviewReplyImpl;
4499+}
4500+
4501+/**
4502+\brief Allows the results of a preview to be sent to the preview requester.
4503+*/
4504+
4505+class QPreviewReply : public QObject
4506+{
4507+ Q_OBJECT
4508+public:
4509+ /// @cond
4510+ NONCOPYABLE(QPreviewReply);
4511+ UNITY_DEFINES_PTRS(QPreviewReply);
4512+ /// @endcond
4513+ /**
4514+ \brief Registers a list of column layouts for the current preview.
4515+
4516+ Layouts must be registered before pushing a unity::scopes::PreviewWidgetList, and must be
4517+ registered only once.
4518+ \return True if the query is still alive, false if the query failed or was cancelled.
4519+ \throws unity::LogicException register_layout() is called more than once.
4520+ */
4521+ bool register_layout(QColumnLayoutList const& layouts);
4522+
4523+ /**
4524+ \brief Sends widget definitions to the sender of the preview query.
4525+
4526+ This method can be called mutiple times to send widgets in stages.
4527+ \return True if the query is still alive, false if the query failed or was cancelled.
4528+ */
4529+ bool push(QPreviewWidgetList const& widget_list);
4530+
4531+ /**
4532+ \brief Sends data for a preview widget attribute.
4533+ \return True if the query is still alive, false if the query failed or was cancelled.
4534+ */
4535+ bool push(QString const& key, QVariant const& value);
4536+
4537+ /// @cond
4538+ virtual ~QPreviewReply();
4539+ /// @endcond
4540+
4541+protected:
4542+ /// @cond
4543+ QPreviewReply(unity::scopes::PreviewReplyProxy& reply, QObject* parent = 0);
4544+
4545+private:
4546+ std::unique_ptr<internal::QPreviewReplyImpl> p;
4547+ friend class internal::QPreviewReplyImpl;
4548+ friend class QPreviewQueryBaseAPI;
4549+ /// @endcond
4550+};
4551+
4552+} // namespace qt
4553+
4554+} // namespace scopes
4555+
4556+} // namespace unity
4557
4558=== added file 'include/unity/scopes/qt/QPreviewReplyProxy.h'
4559--- include/unity/scopes/qt/QPreviewReplyProxy.h 1970-01-01 00:00:00 +0000
4560+++ include/unity/scopes/qt/QPreviewReplyProxy.h 2015-02-05 11:31:47 +0000
4561@@ -0,0 +1,42 @@
4562+/*
4563+ * Copyright (C) 2015 Canonical Ltd
4564+ *
4565+ * This program is free software: you can redistribute it and/or modify
4566+ * it under the terms of the GNU Lesser General Public License version 3 as
4567+ * published by the Free Software Foundation.
4568+ *
4569+ * This program is distributed in the hope that it will be useful,
4570+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4571+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4572+ * GNU Lesser General Public License for more details.
4573+ *
4574+ * You should have received a copy of the GNU Lesser General Public License
4575+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4576+ *
4577+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
4578+ */
4579+
4580+#pragma once
4581+
4582+#include <unity/scopes/qt/QPreviewReply.h>
4583+#include <memory>
4584+
4585+namespace unity
4586+{
4587+
4588+namespace scopes
4589+{
4590+
4591+namespace qt
4592+{
4593+
4594+/** \typedef QPreviewReplyProxy
4595+\brief Convenience type definition.
4596+*/
4597+typedef std::shared_ptr<QPreviewReply> QPreviewReplyProxy;
4598+
4599+} // namespace qt
4600+
4601+} // namespace scopes
4602+
4603+} // namespace unity
4604
4605=== added file 'include/unity/scopes/qt/QPreviewWidget.h'
4606--- include/unity/scopes/qt/QPreviewWidget.h 1970-01-01 00:00:00 +0000
4607+++ include/unity/scopes/qt/QPreviewWidget.h 2015-02-05 11:31:47 +0000
4608@@ -0,0 +1,198 @@
4609+/*
4610+ * Copyright (C) 2015 Canonical Ltd
4611+ *
4612+ * This program is free software: you can redistribute it and/or modify
4613+ * it under the terms of the GNU Lesser General Public License version 3 as
4614+ * published by the Free Software Foundation.
4615+ *
4616+ * This program is distributed in the hope that it will be useful,
4617+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4618+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4619+ * GNU Lesser General Public License for more details.
4620+ *
4621+ * You should have received a copy of the GNU Lesser General Public License
4622+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4623+ *
4624+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
4625+ */
4626+
4627+#pragma once
4628+
4629+#include <unity/util/NonCopyable.h>
4630+#include <unity/util/DefinesPtrs.h>
4631+
4632+#include <QtCore/QVariant>
4633+
4634+namespace unity
4635+{
4636+
4637+namespace scopes
4638+{
4639+
4640+class PreviewWidget;
4641+
4642+namespace qt
4643+{
4644+
4645+namespace internal
4646+{
4647+class QPreviewWidgetImpl;
4648+class QPreviewReplyImpl;
4649+}
4650+
4651+class QPreviewWidget;
4652+
4653+/*! \typedef QPreviewWidgetList
4654+\brief List of preview widgets (see unity::scopes::qt::QPreviewWidget)
4655+*/
4656+typedef QList<QPreviewWidget> QPreviewWidgetList;
4657+
4658+/**
4659+ \brief Widget used in Preview.
4660+*/
4661+class QPreviewWidget final
4662+{
4663+public:
4664+ /// @cond
4665+ UNITY_DEFINES_PTRS(QPreviewWidget);
4666+ /// @endcond
4667+
4668+ /**
4669+ \brief Create an empty widget definition with a specific id and type.
4670+ \param id The unique widget identifier.
4671+ \param widget_type The type of the widget.
4672+ */
4673+ QPreviewWidget(QString const& id, QString const& widget_type);
4674+
4675+ /**
4676+ \brief Create a widget from a JSON definition.
4677+
4678+ The JSON definition must be a dictionary that includes widget "id" and all the values of attributes required by
4679+ desired
4680+ \link QPreviewWidget widget type\endlink. For example, a definition of image widget may look as follows:
4681+ \code{.cpp}
4682+ PreviewWidget img(R"({"id": "img", "type": "image", "source": "http://imageuri"})");
4683+ \endcode
4684+
4685+ For cases where attribute mappings are to be used instead of direct values, they need to be enclosed in the
4686+ "components" dictionary, e.g.
4687+ \code{.cpp}
4688+ PreviewWidget img(R"({"id": "img", "type": "image", "components": { "source": "screenshot-url" } })");
4689+ \endcode
4690+ (this example assumes "screenshot-url" value is either available in the result object that's being previewed, or it
4691+ will be pushed with
4692+ unity::scopes::PreviewReply::push() method)
4693+
4694+ \note It is recommended to create widgets via unity::scopes::PreviewWidget(QString const&, QString const&)
4695+ constructor
4696+ and unity::scopes::PreviewWidget::add_attribute_value() / unity::scopes::PreviewWidget::add_attribute_mapping()
4697+ methods,
4698+ rather than via JSON definition.
4699+
4700+ \param definition The JSON definition.
4701+ */
4702+ QPreviewWidget(QString const& definition);
4703+
4704+ /**@name Copy and assignment
4705+ Copy and assignment operators (move and non-move versions) have the usual value semantics.
4706+ */
4707+ //{@
4708+ QPreviewWidget(QPreviewWidget const& other);
4709+ QPreviewWidget(QPreviewWidget&& other);
4710+ virtual ~QPreviewWidget();
4711+
4712+ QPreviewWidget& operator=(QPreviewWidget const& other);
4713+ QPreviewWidget& operator=(QPreviewWidget&& other);
4714+ //@}
4715+
4716+ /**
4717+ \brief Adds an attribute definition and its value.
4718+ \param key The name of the attribute.
4719+ \param value The value of the attribute.
4720+ */
4721+ void add_attribute_value(QString const& key, QVariant const& value);
4722+
4723+ /**
4724+ \brief Adds an attribute definition using a component mapping.
4725+
4726+ If an attribute value is either not known, or the value is already present
4727+ in a result field, this method creates a mapping between the attribute
4728+ name and given the field name.
4729+
4730+ If an attribute value is not known, the scope is expected to push the attribute value using
4731+ unity::scopes::PreviewReply::push(); otherwise, the value is automatically
4732+ mapped from the result.
4733+ */
4734+ void add_attribute_mapping(QString const& key, QString const& field_name);
4735+
4736+ /**
4737+ \brief Adds a widget into expandable widget.
4738+
4739+ Adds a widget into this widget, which needs to be of 'expandable' type. This method throws
4740+ if adding a widget into any other widget type. Also, adding an 'expandable' widget into
4741+ another 'expandable' is not allowed.
4742+
4743+ \throws unity::LogicException if type of this widget is other than 'expandable', or when
4744+ adding 'expandable' to 'expandable'.
4745+ */
4746+ void add_widget(QPreviewWidget const& widget);
4747+
4748+ /**
4749+ \brief Get the identifier of this widget.
4750+ \return The widget identifier.
4751+ */
4752+ QString id() const;
4753+
4754+ /**
4755+ \brief Get type name of this widget.
4756+ \return The widget type.
4757+ */
4758+ QString widget_type() const;
4759+
4760+ /**
4761+ \brief Get the components of this widget.
4762+
4763+ The returned map is a dictionary of (key, field name) pairs, as defined by calls to add_attribute_mapping().
4764+ \return The components map.
4765+ */
4766+ QMap<QString, QString> attribute_mappings() const;
4767+
4768+ /**
4769+ \brief Get the attributes of this widget.
4770+
4771+ The returned map is a dictionary of (key, value) pairs, as defined by calls to add_attribute_value().
4772+ \return The attribute map.
4773+ */
4774+ QVariantMap attribute_values() const;
4775+
4776+ /**
4777+ \brief Get widgets of 'expandable' widget.
4778+
4779+ Returns the list of widget attached to this widget, which must be of 'expandable' type. This list is
4780+ always empty for other widget types.
4781+ */
4782+ QPreviewWidgetList widgets() const;
4783+
4784+ /**
4785+ \brief Get a JSON representation of this widget.
4786+ \return The JSON string.
4787+ */
4788+ QString data() const;
4789+
4790+ /// @cond
4791+ QVariantMap serialize() const;
4792+
4793+private:
4794+ std::unique_ptr<internal::QPreviewWidgetImpl> p;
4795+ QPreviewWidget(internal::QPreviewWidgetImpl* widget);
4796+
4797+ friend class internal::QPreviewWidgetImpl;
4798+ friend class internal::QPreviewReplyImpl;
4799+ /// @endcond
4800+};
4801+
4802+} // namespace qt
4803+
4804+} // namespace scopes
4805+
4806+} // namespace unity
4807
4808=== added file 'include/unity/scopes/qt/QResult.h'
4809--- include/unity/scopes/qt/QResult.h 1970-01-01 00:00:00 +0000
4810+++ include/unity/scopes/qt/QResult.h 2015-02-05 11:31:47 +0000
4811@@ -0,0 +1,264 @@
4812+/*
4813+ * Copyright (C) 2015 Canonical Ltd
4814+ *
4815+ * This program is free software: you can redistribute it and/or modify
4816+ * it under the terms of the GNU Lesser General Public License version 3 as
4817+ * published by the Free Software Foundation.
4818+ *
4819+ * This program is distributed in the hope that it will be useful,
4820+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4821+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4822+ * GNU Lesser General Public License for more details.
4823+ *
4824+ * You should have received a copy of the GNU Lesser General Public License
4825+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4826+ *
4827+ * Authored by: Xavi Garcia <xavi.garcia.mena@canonical.com>
4828+ */
4829+
4830+#pragma once
4831+
4832+#include <unity/util/DefinesPtrs.h>
4833+
4834+#include <unity/scopes/ScopeProxyFwd.h>
4835+
4836+#include <QtCore/QString>
4837+#include <QtCore/QVariant>
4838+
4839+namespace unity
4840+{
4841+
4842+namespace scopes
4843+{
4844+
4845+class Variant;
4846+class Result;
4847+
4848+namespace qt
4849+{
4850+
4851+class QCategorisedResult;
4852+
4853+namespace internal
4854+{
4855+class QResultImpl;
4856+class QPreviewQueryBaseImpl;
4857+}
4858+
4859+/**
4860+ \brief The attributes of a result returned by a Scope.
4861+
4862+ The Result API provides convenience methods for some typical attributes (title,
4863+ art), but scopes are free to add and use any custom attributes with `operator[]`.
4864+ The only required attribute is 'uri' and it must not be empty before
4865+ calling Reply::push().
4866+*/
4867+class QResult
4868+{
4869+public:
4870+ /// @cond
4871+ UNITY_DEFINES_PTRS(QResult);
4872+ /// @endcond
4873+
4874+ QResult();
4875+ /**@name Copy and assignment
4876+ Copy and assignment (move and non-move versions) have the usual value semantics.
4877+ */
4878+ //{@
4879+ QResult(QResult const& other);
4880+ QResult(QResult&&);
4881+
4882+ QResult& operator=(QResult const& other);
4883+ QResult& operator=(QResult&&);
4884+ //@}
4885+
4886+ /**
4887+ Destructor.
4888+ */
4889+ virtual ~QResult();
4890+
4891+ /**
4892+ \brief Stores a Result inside this Result instance.
4893+
4894+ This method is meant to be used by aggregator scopes which want to modify results they receive, but want
4895+ to keep a copy of the original result so that they can be correctly handled by the original scopes
4896+ who created them when it comes to activation or previews.
4897+ Scopes middleware will automatically pass the correct inner stored result to the activation or preview request
4898+ handler
4899+ of a scope which created it.
4900+ \param other The original result to store within this result.
4901+ \param intercept_activation True if this scope should receive activation and preview requests.
4902+ */
4903+ void store(QResult const& other, bool intercept_activation = false);
4904+
4905+ /**
4906+ \brief Check if this Result instance has a stored result.
4907+ \return True if there is a stored result
4908+ */
4909+ bool has_stored_result() const;
4910+
4911+ /**
4912+ \brief Get a stored result.
4913+ \return stored result
4914+ \throws unity::InvalidArgumentException if no result was stored in this Result instance.
4915+ */
4916+ QResult retrieve() const;
4917+
4918+ /**
4919+ \brief Set the "uri" attribute of this result.
4920+ */
4921+ void set_uri(QString const& uri);
4922+
4923+ /**
4924+ \brief Set the "title" attribute of this result.
4925+
4926+ Equivalent to calling `result["title"] = title;`
4927+ */
4928+ void set_title(QString const& title);
4929+ /**
4930+ \brief Set the "art" attribute of this result.
4931+
4932+ Equivalent to calling `result["art"] = image;`
4933+ */
4934+ void set_art(QString const& image);
4935+
4936+ /**
4937+ \brief Set the "dnd_uri" attribute of this result.
4938+
4939+ Equivalent to calling `result["dnd_uri"] = dnd_uri;`
4940+ */
4941+ void set_dnd_uri(QString const& dnd_uri);
4942+
4943+ /**
4944+ \brief Indicates to the receiver that this scope should intercept activation requests for this result.
4945+
4946+ By default, a scope receives preview requests for the results it creates, but does not receive activation
4947+ requests (they are handled directly by the shell).
4948+ Intercepting activation implies intercepting preview requests as well; this is important for scopes that
4949+ forward results from other scopes and call set_intercept_activation() on these scopes.
4950+ A scope that sets intercept activation flag for a result should re-implement ScopeBase::activate()
4951+ and provide an implementation of ActivationQueryBase that handles the actual activation.
4952+ If not called, the result will be activated directly by the Unity shell whithout involving the scope,
4953+ assuming an appropriate URI schema handler is present on the system.
4954+ */
4955+ void set_intercept_activation();
4956+
4957+ /**
4958+ \brief Check if this result should be activated directly by the shell
4959+ because the scope doesn't handle activation of this result.
4960+ \return True if this result needs to be activated directly.
4961+ */
4962+ bool direct_activation() const;
4963+
4964+ /**
4965+ \brief Get the proxy of a scope that handles activation and preview of this result.
4966+
4967+ The proxy is available only when receiving this result from a scope, otherwise
4968+ this method throws LogicException. Activation requests should be sent to a scope
4969+ returned by this method only if direct_activation() is false.
4970+ \return The scope proxy.
4971+ */
4972+ ScopeProxy target_scope_proxy() const;
4973+
4974+ /**
4975+ \brief Returns reference of a Result attribute.
4976+
4977+ This method can be used to read or initialize both standard ("uri", "title", "art", "dnd_uri")
4978+ and custom metadata attributes. Referencing a non-existing attribute automatically creates
4979+ it with a default value of Variant::Type::Null.
4980+ \param key The name of the attribute.
4981+ \return A reference to the attribute.
4982+ \throws unity::Invalidargument if no attribute with the given name exists.
4983+ */
4984+ QVariant& operator[](QString const& key);
4985+
4986+ /**
4987+ \brief Returns a const reference to a Result attribute.
4988+
4989+ This method can be used for read-only access to both standard ("uri", "title", "art", "dnd_uri")
4990+ and custom metadata attributes. Referencing a non-existing attribute throws unity::InvalidArgumentException.
4991+ \param key The name of the attribute.
4992+ \return A const reference to the attribute.
4993+ \throws unity::Invalidargument if no attribute with the given name exists.
4994+ */
4995+ QVariant const& operator[](QString const& key) const;
4996+
4997+ /**
4998+ \brief Get the "uri" property of this Result.
4999+
5000+ This method returns an empty string if this attribute is not of type Variant::Type::String (e.g. it was set with
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: