├── .gitignore ├── LICENSE.bsd ├── README.md ├── demo-qml.pro ├── demo-qml64.png ├── demo-qml80.png ├── main.cpp ├── preview.gif ├── qml └── demo-qml │ ├── Button.qml │ ├── Cube.js │ ├── Cube.qml │ ├── CubeFace.qml │ ├── CubeView.js │ ├── CubeView.qml │ ├── EditBox.qml │ ├── HorizontalLaser.qml │ ├── ImageView.qml │ ├── Knob.qml │ ├── MarkerDeleteDialog.qml │ ├── MarkerModel.qml │ ├── ScrollArea.qml │ ├── SearchDialog.qml │ ├── Util.js │ ├── VerticalLaser.qml │ └── main.qml ├── qtquick2applicationviewer ├── qtquick2applicationviewer.cpp ├── qtquick2applicationviewer.h └── qtquick2applicationviewer.pri └── resources ├── fonts ├── VodafoneRg.ttf └── VodafoneRg_Bd.ttf ├── icons ├── 001.png ├── 001s.png ├── 002.png ├── 002s.png ├── 003.png ├── 003s.png ├── 004.png ├── 004s.png ├── 005.png ├── 005s.png ├── 006.png ├── 006s.png ├── 007.png ├── 007s.png ├── 008.png ├── 008s.png ├── 009.png ├── 009s.png ├── 010.png ├── 010s.png ├── 011.png ├── 011s.png ├── add.png ├── annulla.png ├── bg.png ├── bg_edit_marker.png ├── bg_edit_name.png ├── bigbox.png ├── bigbox_bg.png ├── box.png ├── box_bg.png ├── btn.png ├── btn_highlighted.png ├── buttons_0.png ├── buttons_d.png ├── buttons_l.png ├── buttons_r.png ├── buttons_u.png ├── conferma.png ├── delete.png ├── descrizione_bg.png ├── dialog_box.png ├── glifo_rotazione.png ├── incavo.png ├── indicatore.png ├── laser_orizontale_off.png ├── laser_orizontale_on.png ├── laser_verticale_d_off.png ├── laser_verticale_d_on.png ├── laser_verticale_u_off.png ├── laser_verticale_u_on.png ├── laser_verticale_xl_bottom_off.png ├── laser_verticale_xl_bottom_on.png ├── laser_verticale_xl_top_off.png ├── laser_verticale_xl_top_on.png ├── logo01.png ├── logo02.png ├── notches_oriz.png ├── notches_vert.png ├── orizzontale.png ├── remove.png ├── s.png ├── search.png ├── search_bar.png ├── separator.png ├── shared │ └── close.png ├── ticks.png └── verticale.png ├── rear ├── rear.mng ├── rear000.png ├── rear001.png ├── rear002.png ├── rear003.png ├── rear004.png ├── rear005.png ├── rear006.png ├── rear007.png ├── rear008.png ├── rear009.png ├── rear010.png ├── rear011.png ├── rear012.png ├── rear013.png ├── rear014.png ├── rear015.png ├── rear016.png ├── rear017.png ├── rear018.png ├── rear019.png ├── rear020.png ├── rear021.png ├── rear022.png ├── rear023.png ├── rear024.png ├── rear025.png ├── rear026.png ├── rear027.png ├── rear028.png ├── rear029.png ├── rear030.png ├── rear031.png ├── rear032.png ├── rear033.png ├── rear034.png ├── rear035.png ├── rear036.png ├── rear037.png ├── rear038.png ├── rear039.png ├── rear040.png ├── rear041.png ├── rear042.png ├── rear043.png ├── rear044.png ├── rear045.png ├── rear046.png ├── rear047.png ├── rear048.png ├── rear049.png ├── rear050.png ├── rear051.png ├── rear052.png ├── rear053.png ├── rear054.png ├── rear055.png ├── rear056.png ├── rear057.png ├── rear058.png ├── rear059.png ├── rear060.png ├── rear061.png ├── rear062.png ├── rear063.png ├── rear064.png ├── rear065.png ├── rear066.png ├── rear067.png ├── rear068.png ├── rear069.png ├── rear070.png ├── rear071.png ├── rear072.png ├── rear073.png ├── rear074.png ├── rear075.png ├── rear076.png ├── rear077.png ├── rear078.png ├── rear079.png ├── rear080.png ├── rear081.png ├── rear082.png ├── rear083.png ├── rear084.png ├── rear085.png ├── rear086.png ├── rear087.png ├── rear088.png ├── rear089.png └── rear090.png ├── side ├── side.mng ├── side000.png ├── side001.png ├── side002.png ├── side003.png ├── side004.png ├── side005.png ├── side006.png ├── side007.png ├── side008.png ├── side009.png ├── side010.png ├── side011.png ├── side012.png ├── side013.png ├── side014.png ├── side015.png ├── side016.png ├── side017.png ├── side018.png ├── side019.png ├── side020.png ├── side021.png ├── side022.png ├── side023.png ├── side024.png ├── side025.png ├── side026.png ├── side027.png ├── side028.png ├── side029.png ├── side030.png ├── side031.png ├── side032.png ├── side033.png ├── side034.png ├── side035.png ├── side036.png ├── side037.png ├── side038.png ├── side039.png ├── side040.png ├── side041.png ├── side042.png ├── side043.png ├── side044.png ├── side045.png ├── side046.png ├── side047.png ├── side048.png ├── side049.png ├── side050.png ├── side051.png ├── side052.png ├── side053.png ├── side054.png ├── side055.png ├── side056.png ├── side057.png ├── side058.png ├── side059.png ├── side060.png ├── side061.png ├── side062.png ├── side063.png ├── side064.png ├── side065.png ├── side066.png ├── side067.png ├── side068.png ├── side069.png ├── side070.png ├── side071.png ├── side072.png ├── side073.png ├── side074.png ├── side075.png ├── side076.png ├── side077.png ├── side078.png ├── side079.png ├── side080.png ├── side081.png ├── side082.png ├── side083.png ├── side084.png ├── side085.png ├── side086.png ├── side087.png ├── side088.png ├── side089.png └── side090.png └── top ├── top.mng ├── top000.png ├── top001.png ├── top002.png ├── top003.png ├── top004.png ├── top005.png ├── top006.png ├── top007.png ├── top008.png ├── top009.png ├── top010.png ├── top011.png ├── top012.png ├── top013.png ├── top014.png ├── top015.png ├── top016.png ├── top017.png ├── top018.png ├── top019.png ├── top020.png ├── top021.png ├── top022.png ├── top023.png ├── top024.png ├── top025.png ├── top026.png ├── top027.png ├── top028.png ├── top029.png ├── top030.png ├── top031.png ├── top032.png ├── top033.png ├── top034.png ├── top035.png ├── top036.png ├── top037.png ├── top038.png ├── top039.png ├── top040.png ├── top041.png ├── top042.png ├── top043.png ├── top044.png ├── top045.png ├── top046.png ├── top047.png ├── top048.png ├── top049.png ├── top050.png ├── top051.png ├── top052.png ├── top053.png ├── top054.png ├── top055.png ├── top056.png ├── top057.png ├── top058.png ├── top059.png ├── top060.png ├── top061.png ├── top062.png ├── top063.png ├── top064.png ├── top065.png ├── top066.png ├── top067.png ├── top068.png ├── top069.png ├── top070.png ├── top071.png ├── top072.png ├── top073.png ├── top074.png ├── top075.png ├── top076.png ├── top077.png ├── top078.png ├── top079.png ├── top080.png ├── top081.png ├── top082.png ├── top083.png ├── top084.png ├── top085.png ├── top086.png ├── top087.png ├── top088.png ├── top089.png └── top090.png /.gitignore: -------------------------------------------------------------------------------- 1 | Makefile 2 | demo-qml.pro.user 3 | *.o 4 | moc_* 5 | *.desktop 6 | -------------------------------------------------------------------------------- /LICENSE.bsd: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Develer S.r.l. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of Develer nor the names of its contributors may be 12 | used to endorse or promote products derived from this software 13 | without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | demo-qml 2 | ======== 3 | This is a demo for the QtQuick/QML framework, part of [Qt by Digia][1]. This demo has been designed to run on an embedded device with multi-touch screen, but it can also be tested on Linux and Mac OSX. 4 | 5 | The demo is released under the New BSD license (see [LICENSE.bsd][2]) by [Develer][3], a consultancy company specialized in R&D software development with Qt (we are Qt Certified partners). We can help you make your QtQuick-based product, both on desktop and embedded platforms, just [write us][4]! 6 | 7 | This is a preview of the demo: 8 | 9 | ![Preview](https://raw.github.com/develersrl/demo-qml/master/preview.gif) 10 | 11 | ### How to run it 12 | demo-qml is a standard QtQuick project, so you can simply load the project through Qt Creator and run it (or use qmake from the command line). 13 | 14 | 15 | [1]: http://qt.digia.com 16 | [2]: https://github.com/develersrl/demo-qml/raw/master/LICENSE.bsd 17 | [3]: http://www.develer.com 18 | [4]: http://www.develer.com/website/en/contacts/contacts/develer 19 | -------------------------------------------------------------------------------- /demo-qml.pro: -------------------------------------------------------------------------------- 1 | # Add more folders to ship with the application, here 2 | folder_01.source = qml/demo-qml 3 | folder_01.target = qml 4 | DEPLOYMENTFOLDERS = folder_01 5 | 6 | # Additional import path used to resolve QML modules in Creator's code model 7 | QML_IMPORT_PATH = 8 | 9 | # If your application uses the Qt Mobility libraries, uncomment the following 10 | # lines and add the respective components to the MOBILITY variable. 11 | # CONFIG += mobility 12 | # MOBILITY += 13 | 14 | maliit { 15 | CONFIG += link_pkgconfig 16 | PKGCONFIG += maliit-framework maliit-plugins 17 | QT += dbus gui-private core-private 18 | 19 | # TODO: make the libmaliit-connection a dynamic-link library (to respect the LGPL license) 20 | # and use the PKG_CONFIG variables to pass the headers path and the linking options to the compiler. 21 | INCLUDEPATH += $${PWD}/maliit-framework/src $${PWD}/maliit-framework/connection 22 | LIBS += $${PWD}/maliit-framework/lib/libmaliit-connection.a 23 | 24 | DEFINES += MALIIT 25 | } 26 | 27 | # The .cpp file which was generated for your project. Feel free to hack it. 28 | SOURCES += main.cpp 29 | 30 | # Installation path 31 | # target.path = 32 | 33 | # Please do not modify the following two lines. Required for deployment. 34 | include(qtquick2applicationviewer/qtquick2applicationviewer.pri) 35 | qtcAddDeployment() 36 | -------------------------------------------------------------------------------- /demo-qml64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/demo-qml64.png -------------------------------------------------------------------------------- /demo-qml80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/demo-qml80.png -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "qtquick2applicationviewer.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #if MALIIT 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | #endif 21 | 22 | #include 23 | 24 | void loadFonts() 25 | { 26 | QFontDatabase database; 27 | bool installed = false; 28 | foreach (const QString &s, QStringList() << "" << "_Bd") 29 | { 30 | QString path = QCoreApplication::applicationDirPath() + "/resources/fonts/VodafoneRg" + s + ".ttf"; 31 | int id = database.addApplicationFont(path); 32 | if (id == -1) { 33 | qWarning() << "Error loading the font:" << path; 34 | continue; 35 | } 36 | 37 | QStringList families = QFontDatabase::applicationFontFamilies(id); 38 | if (families.length() > 0 && !installed) { 39 | qDebug() << "Set default font" << path; 40 | installed = true; 41 | QGuiApplication::setFont(QFont(families.at(0))); 42 | } 43 | } 44 | } 45 | 46 | int main(int argc, char *argv[]) 47 | { 48 | QGuiApplication app(argc, argv); 49 | loadFonts(); 50 | 51 | QtQuick2ApplicationViewer viewer; 52 | viewer.reportContentOrientationChange(Qt::LandscapeOrientation); 53 | 54 | #ifdef MALIIT 55 | MImServer::configureSettings(MImServer::TemporarySettings); 56 | QSharedPointer icConnection(Maliit::DBus::createInputContextConnectionWithDynamicAddress()); 57 | QSharedPointer platform(new Maliit::UnknownPlatform); 58 | MIMPluginManager pm(icConnection, platform); 59 | 60 | QPlatformIntegration *integration = QGuiApplicationPrivate::platformIntegration(); 61 | 62 | integration->setInputContext(QPlatformInputContextFactory::create("maliit")); 63 | qDebug() << "inputContext" << integration->inputContext(); 64 | 65 | viewer.engine()->rootContext()->setContextProperty("hasEmbeddedKeyboard", QVariant(true)); 66 | #else 67 | viewer.engine()->rootContext()->setContextProperty("hasEmbeddedKeyboard", QVariant(false)); 68 | #endif 69 | 70 | viewer.setMainQmlFile(QStringLiteral("qml/demo-qml/main.qml")); 71 | 72 | #ifdef __APPLE__ 73 | // FIXME: explicit resize needed under Mac OS X 74 | viewer.resize(1024, 768); 75 | #endif 76 | viewer.showExpanded(); 77 | 78 | return app.exec(); 79 | } 80 | -------------------------------------------------------------------------------- /preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/preview.gif -------------------------------------------------------------------------------- /qml/demo-qml/Button.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Item { 4 | id: button 5 | 6 | property url image: "../../resources/icons/btn.png" 7 | property url pressedImage: "../../resources/icons/btn_highlighted.png" 8 | property url icon 9 | property real iconScale: 1 10 | 11 | signal clicked 12 | 13 | width: bg.width 14 | height: bg.height 15 | 16 | Image { 17 | id: bg 18 | source: mouseArea.pressed ? button.pressedImage : button.image 19 | } 20 | 21 | Image { 22 | anchors.centerIn: bg 23 | source: button.icon 24 | scale: button.iconScale 25 | } 26 | 27 | MouseArea { 28 | id: mouseArea 29 | anchors.fill: parent 30 | anchors.margins: -10 31 | onClicked: button.clicked() 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /qml/demo-qml/Cube.js: -------------------------------------------------------------------------------- 1 | var FRONT = 0 2 | var LEFT = 1 3 | var TOP = 2 4 | var RIGHT = 3 5 | var BOTTOM = 4 6 | 7 | var DIRECTION_X = 1 8 | var DIRECTION_Y = 2 9 | 10 | var ORIENTATION_NEGATIVE = 1 11 | var ORIENTATION_POSITIVE = 2 12 | 13 | var direction = 0 14 | var orientation = 0 15 | var angle = 0 16 | var origin = undefined 17 | var moving = false 18 | var startTime 19 | var startPoint 20 | var thresholdVelocity = 1000 21 | var selectedFace 22 | var lock = false 23 | 24 | /* Resets the cube's orientation and angle and also restores to default all 25 | rotation vectors */ 26 | function reset() { 27 | orientation = 0 28 | angle = 0 29 | 30 | /*** Y-axis rotation data reset ***/ 31 | frontFaceRot.origin.x = 0 32 | frontFaceRot.origin.y = frontFaceContainer.height / 2 33 | 34 | leftFaceRot.origin.x = leftFaceContainer.width 35 | leftFaceRot.origin.y = leftFaceContainer.height / 2 36 | 37 | rightFaceRot.origin.x = 0 38 | rightFaceRot.origin.y = rightFaceContainer.height / 2 39 | 40 | /*** X-axis rotation data reset ***/ 41 | topFaceRot.origin.x = topFaceContainer.width / 2 42 | topFaceRot.origin.y = topFaceContainer.height 43 | 44 | bottomFaceRot.origin.x = bottomFaceContainer.width / 2 45 | bottomFaceRot.origin.y = 0 46 | 47 | /*** angles reset ***/ 48 | frontFaceRot.angle = 0 49 | leftFaceRot.angle = 270 50 | rightFaceRot.angle = 90 51 | topFaceRot.angle = 90 52 | bottomFaceRot.angle = 270 53 | } 54 | 55 | function getOrientation(delta) { 56 | if (delta < 0) 57 | return ORIENTATION_NEGATIVE 58 | return ORIENTATION_POSITIVE 59 | } 60 | 61 | function setFrontFaceRotation(direction, orientation) { 62 | frontFaceRot.axis.x = direction === DIRECTION_Y 63 | frontFaceRot.axis.y = direction === DIRECTION_X 64 | 65 | if (direction === DIRECTION_X) { 66 | if (orientation === 1) { 67 | frontFaceRot.origin.x = frontFaceContainer.width 68 | frontFaceRot.origin.y = frontFaceContainer.height / 2 69 | } 70 | else { 71 | frontFaceRot.origin.x = 0 72 | frontFaceRot.origin.y = frontFaceContainer.height / 2 73 | } 74 | } 75 | else { 76 | if (orientation === 1) { 77 | frontFaceRot.origin.x = frontFaceContainer.width / 2 78 | frontFaceRot.origin.y = 0 79 | } 80 | else { 81 | frontFaceRot.origin.x = frontFaceContainer.width / 2 82 | frontFaceRot.origin.y = frontFaceContainer.height 83 | } 84 | } 85 | } 86 | 87 | function mapToOrigin(mouse) { 88 | return [mouse.x - container.width / 2, -mouse.y - container.height / 2] 89 | } 90 | 91 | /* Initiates cube rotation */ 92 | function initRotation(mouse) { 93 | if (lock) 94 | return 95 | 96 | origin = mapToOrigin(mouse) 97 | startTime = new Date() 98 | startPoint = origin.slice() 99 | } 100 | 101 | function animate(mouse) { 102 | var fakeMouse = {"y": mouse.y, "x": mouse.x} // mouse properties are read-only 103 | for (var i = 0; i < 20; i++) { 104 | fakeMouse.y -= 1 105 | rotate(fakeMouse, true) 106 | } 107 | } 108 | 109 | /** Rotates the cube based on current mouse position. Once the cube rotation 110 | axis is selected, the cube will rotate only around that given axis. */ 111 | function rotate(mouse, forced) { 112 | if (lock) 113 | return moving 114 | 115 | // first we need to map cursor's (0,0) coordinate, which points to top-left 116 | // corner cube's origin 117 | var coords = mapToOrigin(mouse) 118 | 119 | // now compute the axis along which to rotate 120 | if (!direction) { 121 | var dx = Math.abs(coords[0] - origin[0]) 122 | var dy = Math.abs(coords[1] - origin[1]) 123 | 124 | if (Math.max(dy, dx) < 20 && !forced) 125 | return moving 126 | 127 | if (dy > dx) 128 | direction = DIRECTION_Y 129 | else 130 | direction = DIRECTION_X 131 | 132 | rotationDirection = direction; 133 | } 134 | // the actual rotation is performed in this section 135 | else { 136 | moving = true 137 | var face = frontFaceContainer 138 | var faceRot = frontFaceRot 139 | var nextFace, nextFaceRot, a, o, delta 140 | 141 | rotationDirection = direction; 142 | 143 | // based on the direction and orientation values, the faces to be 144 | // rotated are determined dynamically and the rotation vectors of the 145 | // front face are updated accordingly 146 | if (direction == DIRECTION_X) { 147 | delta = coords[0] - origin[0] 148 | a = 90 * delta / container.width 149 | 150 | if (!orientation) { 151 | orientation = getOrientation(delta) 152 | faceRot.axis.x = 0 153 | faceRot.axis.y = 1 154 | } 155 | 156 | if (orientation == 1) { 157 | faceRot.origin.x = face.width 158 | faceRot.origin.y = face.height / 2 159 | nextFace = rightFaceContainer 160 | nextFaceRot = rightFaceRot 161 | } 162 | else { 163 | faceRot.origin.x = 0 164 | faceRot.origin.y = face.height / 2 165 | nextFace = leftFaceContainer 166 | nextFaceRot = leftFaceRot 167 | } 168 | } 169 | else { 170 | delta = coords[1] - origin[1] 171 | a = 90 * delta / container.height 172 | 173 | if (!orientation) { 174 | orientation = getOrientation(delta) 175 | faceRot.axis.x = 1 176 | faceRot.axis.y = 0 177 | } 178 | 179 | if (orientation == 1) { 180 | faceRot.origin.x = face.width / 2 181 | faceRot.origin.y = 0 182 | nextFace = topFaceContainer 183 | nextFaceRot = topFaceRot 184 | } 185 | else { 186 | faceRot.origin.x = face.width / 2 187 | faceRot.origin.y = face.height 188 | nextFace = bottomFaceContainer 189 | nextFaceRot = bottomFaceRot 190 | } 191 | } 192 | 193 | // update the origin for next delta computations 194 | origin = coords 195 | 196 | // check if we have reached the maximum rotation angle skip any 197 | // processing 198 | if (Math.abs(angle + a) >= 90) 199 | return moving 200 | 201 | angle += a 202 | 203 | // check if we have to switch to another face 204 | if (o != orientation && ((orientation == 1 && angle > 0) || (orientation == 2 && angle < 0))) { 205 | reset() 206 | } 207 | else { 208 | 209 | if (direction == DIRECTION_X) { 210 | face.x += delta 211 | nextFace.x += delta 212 | rotationPosition = face.x; 213 | } 214 | else { 215 | face.y += -delta 216 | nextFace.y += delta 217 | rotationPosition = face.y 218 | } 219 | 220 | faceRot.angle += a 221 | nextFaceRot.angle += a 222 | } 223 | } 224 | return moving 225 | } 226 | 227 | /** Call this function when the rotation is done. Returns the selected face */ 228 | function finishRotation(mouse) { 229 | if (lock) 230 | return 231 | else 232 | lock = true 233 | 234 | var dest = mapToOrigin(mouse) 235 | var elapsedTime = (new Date().getTime() - startTime.getTime()) / 1000 236 | var deltaPos = Math.max(Math.abs(dest[0] - startPoint[0]), Math.abs(dest[1] - startPoint[1])) 237 | 238 | moving = false 239 | 240 | if (Math.abs(angle) > 45 || deltaPos / elapsedTime > thresholdVelocity) { 241 | if (direction == DIRECTION_X) { 242 | if (orientation == 1) 243 | return RIGHT 244 | else 245 | return LEFT 246 | } 247 | else { 248 | if (orientation == 1) 249 | return TOP 250 | else 251 | return BOTTOM 252 | } 253 | } 254 | else 255 | return FRONT 256 | } 257 | -------------------------------------------------------------------------------- /qml/demo-qml/Cube.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import "Cube.js" as Cube 3 | Item { 4 | id: cube 5 | 6 | property alias frontFaceLoader: frontFaceLoader 7 | property alias rightFaceLoader: rightFaceLoader 8 | property alias leftFaceLoader: leftFaceLoader 9 | property alias topFaceLoader: topFaceLoader 10 | property alias bottomFaceLoader: bottomFaceLoader 11 | 12 | property int rotationDirection: 0 13 | property real rotationPosition: 0 14 | 15 | signal faceSelected(int face) 16 | 17 | function initRotation(mousePos) { 18 | Cube.initRotation(mousePos) 19 | } 20 | 21 | function rotate(mousePos) { 22 | return Cube.rotate(mousePos) 23 | } 24 | 25 | function animate(mousePos) { 26 | Cube.animate(mousePos) 27 | } 28 | 29 | function goToFace(cubeFace) { 30 | Cube.selectedFace = cubeFace 31 | var state = "" 32 | var direction = 0 33 | var orientation = 0 34 | 35 | switch(Cube.selectedFace) { 36 | case Cube.LEFT: 37 | direction = Cube.DIRECTION_X 38 | orientation = Cube.ORIENTATION_POSITIVE 39 | state = "showLeftFace" 40 | break 41 | 42 | case Cube.TOP: 43 | direction = Cube.DIRECTION_Y 44 | orientation = Cube.ORIENTATION_NEGATIVE 45 | state = "showTopFace" 46 | break 47 | 48 | case Cube.RIGHT: 49 | direction = Cube.DIRECTION_X 50 | orientation = Cube.ORIENTATION_NEGATIVE 51 | state = "showRightFace" 52 | break 53 | 54 | case Cube.BOTTOM: 55 | direction = Cube.DIRECTION_Y 56 | orientation = Cube.ORIENTATION_POSITIVE 57 | state = "showBottomFace" 58 | break 59 | default: 60 | return 61 | } 62 | 63 | rotationDirection = direction 64 | // make sure we first init the rotation and then change state 65 | Cube.setFrontFaceRotation(direction, orientation) 66 | container.state = state 67 | } 68 | 69 | function finishRotation(mousePos) { 70 | Cube.selectedFace = Cube.finishRotation(mousePos) 71 | 72 | switch(Cube.selectedFace) { 73 | case Cube.FRONT: 74 | container.state = "showFrontFace" 75 | break 76 | 77 | case Cube.LEFT: 78 | container.state = "showLeftFace" 79 | break 80 | 81 | case Cube.TOP: 82 | container.state = "showTopFace" 83 | break 84 | 85 | case Cube.RIGHT: 86 | container.state = "showRightFace" 87 | break 88 | 89 | case Cube.BOTTOM: 90 | container.state = "showBottomFace" 91 | } 92 | } 93 | 94 | Item { 95 | id: container 96 | anchors.fill: parent 97 | 98 | Item { 99 | id: frontFaceContainer 100 | width: parent.width 101 | height: parent.height 102 | 103 | Loader { id: frontFaceLoader; anchors.fill: parent } 104 | 105 | transform: Rotation { id: frontFaceRot; axis.z: 0 } 106 | onXChanged: rotationPosition = x 107 | onYChanged: rotationPosition = y 108 | } 109 | 110 | Item { 111 | id: rightFaceContainer 112 | anchors.left: frontFaceContainer.right 113 | width: parent.width 114 | height: parent.height 115 | 116 | Loader { id: rightFaceLoader; anchors.fill: parent } 117 | 118 | transform: Rotation { 119 | id: rightFaceRot 120 | axis { y: 1; z: 0 } 121 | angle: 90 122 | origin { x: 0; y: height/2 } 123 | } 124 | } 125 | 126 | Item { 127 | id: leftFaceContainer 128 | anchors.right: frontFaceContainer.left 129 | width: parent.width 130 | height: parent.height 131 | 132 | Loader { 133 | id: leftFaceLoader 134 | anchors.fill: parent 135 | } 136 | 137 | transform: Rotation { 138 | id: leftFaceRot 139 | axis { y: 1; z: 0 } 140 | angle: 270 141 | origin { x: width; y: height/2 } 142 | } 143 | } 144 | 145 | Item { 146 | id: topFaceContainer 147 | anchors.bottom: frontFaceContainer.top 148 | width: parent.width 149 | height: parent.height 150 | 151 | Loader { 152 | id: topFaceLoader 153 | anchors.fill: parent 154 | } 155 | 156 | transform: Rotation { 157 | id: topFaceRot 158 | axis { x: 1; y: 0; z: 0 } 159 | angle: 90 160 | origin { x: width / 2; y: height } 161 | } 162 | } 163 | 164 | Item { 165 | id: bottomFaceContainer 166 | anchors.top: frontFaceContainer.bottom 167 | width: parent.width 168 | height: parent.height 169 | 170 | Loader { 171 | id: bottomFaceLoader 172 | anchors.fill: parent 173 | } 174 | 175 | transform: Rotation { 176 | id: bottomFaceRot 177 | axis { x: 1; y: 0; z: 0 } 178 | angle: 270 179 | origin { x: width / 2; y: 0 } 180 | } 181 | } 182 | 183 | states: [ 184 | State { 185 | name: "showFrontFace" 186 | PropertyChanges { target: frontFaceRot; angle: 0 } 187 | PropertyChanges { target: frontFaceContainer; x: 0; y: 0} 188 | 189 | PropertyChanges { target: rightFaceRot; angle: 90 } 190 | PropertyChanges { target: rightFaceContainer; x: 0 } 191 | 192 | PropertyChanges { target: leftFaceRot; angle: 270 } 193 | PropertyChanges { target: leftFaceContainer; x: 0 } 194 | 195 | PropertyChanges { target: topFaceRot; angle: 90 } 196 | PropertyChanges { target: topFaceContainer; y: 0 } 197 | 198 | PropertyChanges { target: bottomFaceRot; angle: 270 } 199 | PropertyChanges { target: bottomFaceContainer; y: 0 } 200 | }, 201 | 202 | State { 203 | name: "showLeftFace" 204 | PropertyChanges { target: frontFaceRot; angle: 90 } 205 | PropertyChanges { target: frontFaceContainer; x: width } 206 | PropertyChanges { target: leftFaceRot; angle: 360 } 207 | PropertyChanges { target: leftFaceContainer; x: 0 } 208 | }, 209 | 210 | State { 211 | name: "showRightFace" 212 | PropertyChanges { target: frontFaceRot; angle: -90 } 213 | PropertyChanges { target: frontFaceContainer; x: -width } 214 | PropertyChanges { target: rightFaceRot; angle: 0 } 215 | PropertyChanges { target: rightFaceContainer; x: -width } 216 | }, 217 | 218 | State { 219 | name: "showTopFace" 220 | PropertyChanges { target: frontFaceRot; angle: -90 } 221 | PropertyChanges { target: frontFaceContainer; y: height } 222 | PropertyChanges { target: topFaceRot; angle: 0 } 223 | PropertyChanges { target: topFaceContainer; y: height} 224 | }, 225 | 226 | State { 227 | name: "showBottomFace" 228 | PropertyChanges { target: frontFaceRot; angle: 90 } 229 | PropertyChanges { target: frontFaceContainer; y: -height } 230 | PropertyChanges { target: bottomFaceRot; angle: 360 } 231 | PropertyChanges { target: bottomFaceContainer; y: -height} 232 | } 233 | 234 | ] 235 | 236 | transitions: [ 237 | Transition { 238 | SequentialAnimation { 239 | PropertyAnimation { properties: "angle,x,y"; duration: 150 } 240 | ScriptAction { 241 | script: { 242 | cube.faceSelected(Cube.selectedFace) 243 | } 244 | } 245 | } 246 | } 247 | ] 248 | } 249 | } 250 | -------------------------------------------------------------------------------- /qml/demo-qml/CubeFace.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import QtGraphicalEffects 1.0 3 | 4 | Image { 5 | id: bg 6 | property alias source: image.source 7 | property int face 8 | property real brightness: 0 9 | property real contrast: 0 10 | property bool active: true 11 | 12 | state: active ? "active" : "" 13 | 14 | source: "../../resources/icons/bigbox.png" 15 | 16 | Image { 17 | id: image 18 | width: 500 19 | height: 500 20 | anchors.centerIn: parent 21 | fillMode: Image.PreserveAspectFit 22 | } 23 | 24 | BrightnessContrast { 25 | source: image 26 | anchors.fill: image 27 | brightness: bg.brightness 28 | contrast: bg.contrast 29 | } 30 | 31 | // left and right ticks 32 | Image { 33 | id: ticksLeft 34 | opacity: 0.3 35 | anchors { left: parent.left; leftMargin: 5; verticalCenter: parent.verticalCenter } 36 | source: "../../resources/icons/ticks.png" 37 | } 38 | 39 | Image { 40 | id: ticksRight 41 | opacity: 0.3 42 | anchors { right: parent.right; rightMargin: 5; verticalCenter: parent.verticalCenter } 43 | source: "../../resources/icons/ticks.png" 44 | } 45 | 46 | // top and bottom ticks 47 | Image { 48 | id: ticksTop 49 | opacity: 0.3 50 | anchors { top: parent.top; topMargin: -6; horizontalCenter: parent.horizontalCenter } 51 | rotation: 90 52 | source: "../../resources/icons/ticks.png" 53 | } 54 | 55 | Image { 56 | id: ticksBottom 57 | opacity: 0.3 58 | anchors { bottom: parent.bottom; bottomMargin: -4; horizontalCenter: parent.horizontalCenter } 59 | rotation: 90 60 | source: "../../resources/icons/ticks.png" 61 | } 62 | 63 | states: State { 64 | name: "active" 65 | PropertyChanges { target: ticksLeft; opacity: 0.8 } 66 | PropertyChanges { target: ticksRight; opacity: 0.8 } 67 | PropertyChanges { target: ticksTop; opacity: 0.8 } 68 | PropertyChanges { target: ticksBottom; opacity: 0.8 } 69 | } 70 | 71 | transitions: Transition { 72 | reversible: true 73 | PropertyAnimation { property: "opacity"; duration: 200 } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /qml/demo-qml/CubeView.js: -------------------------------------------------------------------------------- 1 | var TOP = 0 2 | var FRONT = 1 3 | var SIDE = 2 4 | 5 | var _facesData = {} 6 | _facesData[TOP] = 0.5 7 | _facesData[FRONT] = 0.5 8 | _facesData[SIDE] = 0.5 9 | 10 | 11 | var _imagesData = {} 12 | _imagesData[TOP] = topImagesDir 13 | _imagesData[FRONT] = frontImagesDir 14 | _imagesData[SIDE] = sideImagesDir 15 | -------------------------------------------------------------------------------- /qml/demo-qml/CubeView.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import QtGraphicalEffects 1.0 3 | import "CubeView.js" as CubeView 4 | import "Cube.js" as Cube 5 | import "Util.js" as Util 6 | 7 | Loader { 8 | id: loader 9 | sourceComponent: undefined 10 | 11 | property int currentView 12 | property real currentIndex 13 | signal gotoCurrentIndex(real index) 14 | signal viewUpdateRequest(int prevView, int currView, string image, real newIndex) 15 | signal viewResetRequest(int v1, int v2, string image1, string image2, real index) 16 | 17 | property real brightness: 0 18 | property real contrast: 0 19 | 20 | property variant topImagesDir 21 | property variant sideImagesDir 22 | property variant frontImagesDir 23 | 24 | property url topAnimatedImage 25 | property url sideAnimatedImage 26 | property url frontAnimatedImage 27 | property url animatedImageSrc 28 | 29 | property int rotationPosition: 0 30 | property int rotationDirection: 0 31 | 32 | onCurrentIndexChanged: { 33 | CubeView._facesData[loader.currentView] = currentIndex 34 | changeFrontImage(currentIndex) 35 | } 36 | 37 | Connections { 38 | target: topImagesDir 39 | onCountChanged: updateView(); 40 | } 41 | Connections { 42 | target: sideImagesDir 43 | onCountChanged: updateView(); 44 | } 45 | Connections { 46 | target: frontImagesDir 47 | onCountChanged: updateView(); 48 | } 49 | 50 | property url frontImageSrc 51 | property url leftImageSrc 52 | property url rightImageSrc 53 | property url topImageSrc 54 | property url bottomImageSrc 55 | 56 | property int frontCubeFace: CubeView.FRONT 57 | property int leftCubeFace: CubeView.SIDE 58 | property int rightCubeFace: CubeView.SIDE 59 | property int topCubeFace: CubeView.TOP 60 | property int bottomCubeFace: CubeView.TOP 61 | 62 | 63 | function setConfiguration(view, index) { 64 | // find complementary views 65 | var views = [] 66 | for (var v = 0; v <= 2; v++) { 67 | if (v !== view) 68 | views.push(v) 69 | } 70 | 71 | var img1 = Util.getImgFile(CubeView._imagesData[views[0]], 0.5) 72 | var img2 = Util.getImgFile(CubeView._imagesData[views[1]], 0.5) 73 | 74 | // reset indices 75 | CubeView._facesData = [0.5, 0.5, 0.5] 76 | CubeView._facesData[view] = index 77 | 78 | // update 79 | currentView = view 80 | viewResetRequest(views[0], views[1], img1, img2, index) 81 | updateView() 82 | } 83 | 84 | Component.onCompleted: updateView() 85 | 86 | function updateView() { 87 | changeFrontImage() 88 | switch (loader.currentView) { 89 | case CubeView.TOP: 90 | leftImageSrc = rightImageSrc = Util.getImgFile(loader.sideImagesDir, CubeView._facesData[CubeView.SIDE]) 91 | bottomImageSrc = topImageSrc = Util.getImgFile(loader.frontImagesDir, CubeView._facesData[CubeView.FRONT]) 92 | frontCubeFace = CubeView.TOP 93 | leftCubeFace = rightCubeFace = CubeView.SIDE 94 | bottomCubeFace = topCubeFace = CubeView.FRONT 95 | break 96 | 97 | case CubeView.SIDE: 98 | leftImageSrc = rightImageSrc = Util.getImgFile(loader.frontImagesDir, CubeView._facesData[CubeView.FRONT]) 99 | bottomImageSrc = topImageSrc = Util.getImgFile(loader.topImagesDir, CubeView._facesData[CubeView.TOP]) 100 | frontCubeFace = CubeView.SIDE 101 | leftCubeFace = rightCubeFace = CubeView.FRONT 102 | bottomCubeFace = topCubeFace = CubeView.TOP 103 | break 104 | 105 | case CubeView.FRONT: 106 | leftImageSrc = rightImageSrc = Util.getImgFile(loader.sideImagesDir, CubeView._facesData[CubeView.SIDE]) 107 | bottomImageSrc = topImageSrc = Util.getImgFile(loader.topImagesDir, CubeView._facesData[CubeView.TOP]) 108 | frontCubeFace = CubeView.FRONT 109 | leftCubeFace = rightCubeFace = CubeView.SIDE 110 | bottomCubeFace = topCubeFace = CubeView.TOP 111 | break 112 | } 113 | } 114 | 115 | function changeFrontImage(index) { 116 | var i = index || CubeView._facesData[loader.currentView] 117 | frontImageSrc = Util.getImgFile(CubeView._imagesData[loader.currentView], i) 118 | 119 | if (loader.currentView == CubeView.TOP) 120 | staticFace.state = "" 121 | else if (loader.currentView == CubeView.FRONT) 122 | staticFace.state = "front" 123 | else 124 | staticFace.state = "side" 125 | } 126 | 127 | property alias markerModel: markerModel 128 | 129 | function addMarker() { 130 | var existentMarkers = markerModel.markersInFace(currentView) 131 | var types = [markerModel.type1, markerModel.type2, markerModel.type3, markerModel.type4, 132 | markerModel.type5, markerModel.type6, markerModel.type7, markerModel.type8, 133 | markerModel.type9, markerModel.type10, markerModel.type11] 134 | 135 | // find the marker type which is free to use 136 | var type 137 | for (var i = 0; i < types.length; i++) { 138 | var typeIndex = -1 139 | 140 | for (var j = 0; j < existentMarkers.length; j++) { 141 | if (existentMarkers[j].type == types[i]) 142 | typeIndex = j 143 | } 144 | 145 | if (typeIndex == -1) { 146 | type = types[i] 147 | break 148 | } 149 | } 150 | 151 | if (!type) { 152 | console.warn("No available marker colors") 153 | return -1 154 | } 155 | 156 | // find the greatest marker id 157 | var markerId = 0 158 | for (var k = 0; k < markerModel.count; k++) { 159 | var marker = markerModel.get(k) 160 | if (marker.markerId > markerId) 161 | markerId = marker.markerId 162 | } 163 | markerId += 1 164 | 165 | // 52 is the size of the marker 166 | markerModel.append({"markerId": markerId, "face": loader.currentView, "type": type, 167 | "description": "", "index": loader.currentIndex, 168 | "x": (loader.width - 52) / 2, "y": (loader.height - 52) / 2}) 169 | return markerId 170 | } 171 | 172 | property Item _editMarker 173 | property bool _newMarker: false 174 | 175 | function editMarker(markerId, newMarker) { 176 | _newMarker = (newMarker === true) 177 | 178 | if (!_newMarker) { 179 | for (var i = 0; i < markerModel.count; i++) 180 | if (markerModel.get(i).markerId == markerId) { 181 | loader.gotoCurrentIndex(markerModel.get(i).index) 182 | break 183 | } 184 | } 185 | 186 | for (var k = 0; k < highResolutionFace.children.length; k++) 187 | if (highResolutionFace.children[k].__markerComponent && highResolutionFace.children[k].markerId == markerId) { 188 | _editMarker = highResolutionFace.children[k] 189 | _editMarker.movable = true 190 | break 191 | } 192 | 193 | markerModel.updateMarkersVisibility([highResolutionFace]) 194 | } 195 | 196 | function _editDone() { 197 | if (_editMarker) 198 | _editMarker.movable = false 199 | _editMarker = null 200 | 201 | markerModel.updateMarkersVisibility([highResolutionFace]) 202 | } 203 | 204 | function cancelEditMarker() { 205 | if (_newMarker) { // if the marker is new, cancel == delete 206 | deleteMarker() 207 | return 208 | } 209 | 210 | // Restore the item position 211 | for (var i = 0; i < markerModel.count; i++) { 212 | var model = markerModel.get(i) 213 | if (model.markerId == _editMarker.markerId) { 214 | _editMarker.x = model.x 215 | _editMarker.y = model.y 216 | } 217 | } 218 | 219 | _editDone() 220 | } 221 | 222 | function confirmEditMarker() { 223 | for (var i = 0; i < markerModel.count; i++) 224 | if (markerModel.get(i).markerId == _editMarker.markerId) { 225 | markerModel.setProperty(i, "x", _editMarker.x) 226 | markerModel.setProperty(i, "y", _editMarker.y) 227 | markerModel.setProperty(i, "index", _editMarker.index) 228 | } 229 | 230 | _editDone() 231 | } 232 | 233 | function deleteMarker() { 234 | if (!_editMarker) 235 | return 236 | 237 | for (var i = 0; i < markerModel.count; i++) 238 | if (markerModel.get(i).markerId == _editMarker.markerId) { 239 | markerModel.remove(i) 240 | _editMarker.destroy() 241 | _editDone() 242 | return 243 | } 244 | } 245 | 246 | function markerIsVisible(index) { 247 | return Math.abs((index - loader.currentIndex)) < 0.05 248 | } 249 | 250 | Component { 251 | id: markerComponent 252 | Image { 253 | property bool __markerComponent: true 254 | property int markerId: -1 255 | property bool movable: false 256 | property real index 257 | 258 | MouseArea { 259 | anchors.fill: parent 260 | visible: parent.movable 261 | drag.target: parent 262 | drag.axis: Drag.XAndYAxis 263 | drag.minimumX: 0 264 | drag.minimumY: 0 265 | drag.maximumX: loader.width - parent.width 266 | drag.maximumY: loader.height - parent.height 267 | } 268 | } 269 | } 270 | 271 | MarkerModel { 272 | id: markerModel 273 | 274 | function createMarkers(faces) { 275 | for (var i = 0; i < count; i++) { 276 | var model = get(i) 277 | var markerProperties = {"markerId": model.markerId, "source": typeToImage(model.type), 278 | "x": model.x, "y": model.y, "index": model.index, "opacity": markerIsVisible(model.index) ? 1 : 0} 279 | 280 | for (var j = 0; j < faces.length; j++) 281 | if (model.face == faces[j].face) { 282 | markerComponent.createObject(faces[j], markerProperties) 283 | } 284 | } 285 | } 286 | 287 | function updateMarkersVisibility(faces) { 288 | for (var j = 0; j < faces.length; j++) 289 | for (var k = 0; k < faces[j].children.length; k++) 290 | if (faces[j].children[k].__markerComponent) { 291 | if (_editMarker) { 292 | if (!markerIsVisible(faces[j].children[k].index)) 293 | faces[j].children[k].opacity = 0 294 | else 295 | faces[j].children[k].opacity = (faces[j].children[k].markerId == _editMarker.markerId) ? 1 : .5 296 | } 297 | else 298 | faces[j].children[k].opacity = markerIsVisible(faces[j].children[k].index) ? 1 : 0 299 | } 300 | } 301 | 302 | onCountChanged: { 303 | if (loader.item) 304 | loader.item.loadMarkers() 305 | 306 | staticFace.loadMarkers() 307 | highResolutionFace.loadMarkers() 308 | } 309 | } 310 | 311 | Component { 312 | id: cubeComponent 313 | 314 | Cube { 315 | Component.onCompleted: loadMarkers() 316 | 317 | Connections { 318 | target: loader 319 | onCurrentIndexChanged: { 320 | var faces = [frontFaceLoader.item, leftFaceLoader.item, rightFaceLoader.item, 321 | topFaceLoader.item, bottomFaceLoader.item] 322 | markerModel.updateMarkersVisibility(faces) 323 | } 324 | } 325 | 326 | function loadMarkers() { 327 | var faces = [frontFaceLoader.item, leftFaceLoader.item, rightFaceLoader.item, 328 | topFaceLoader.item, bottomFaceLoader.item] 329 | 330 | for (var j = 0; j < faces.length; j++) 331 | for (var k = 0; k < faces[j].children.length; k++) { 332 | if (faces[j].children[k].__markerComponent) { 333 | //console.log("DESTROY ITEM:", faces[j].children[k]) 334 | faces[j].children[k].destroy() 335 | } 336 | } 337 | 338 | markerModel.createMarkers(faces) 339 | markerModel.updateMarkersVisibility(faces) 340 | } 341 | 342 | frontFaceLoader.sourceComponent: CubeFace { 343 | source: loader.frontImageSrc 344 | face: loader.frontCubeFace 345 | brightness: loader.brightness 346 | contrast: loader.contrast 347 | } 348 | 349 | leftFaceLoader.sourceComponent: CubeFace { 350 | source: loader.leftImageSrc 351 | face: loader.leftCubeFace 352 | brightness: loader.brightness 353 | contrast: loader.contrast 354 | } 355 | 356 | rightFaceLoader.sourceComponent: CubeFace { 357 | source: loader.rightImageSrc 358 | face: loader.rightCubeFace 359 | brightness: loader.brightness 360 | contrast: loader.contrast 361 | } 362 | 363 | topFaceLoader.sourceComponent: CubeFace { 364 | source: loader.topImageSrc 365 | face: loader.topCubeFace 366 | brightness: loader.brightness 367 | contrast: loader.contrast 368 | } 369 | 370 | bottomFaceLoader.sourceComponent: CubeFace { 371 | source: loader.bottomImageSrc 372 | face: loader.bottomCubeFace 373 | brightness: loader.brightness 374 | contrast: loader.contrast 375 | } 376 | 377 | onFaceSelected: { 378 | var prevView = loader.currentView 379 | 380 | switch (face) { 381 | case Cube.LEFT: 382 | case Cube.RIGHT: 383 | switch (loader.currentView) { 384 | case CubeView.FRONT: 385 | case CubeView.TOP: 386 | loader.currentView = CubeView.SIDE 387 | break 388 | 389 | case CubeView.SIDE: 390 | loader.currentView = CubeView.FRONT 391 | break 392 | } 393 | break 394 | 395 | case Cube.TOP: 396 | case Cube.BOTTOM: 397 | switch (loader.currentView) { 398 | case CubeView.TOP: 399 | loader.currentView = CubeView.FRONT 400 | break 401 | 402 | case CubeView.FRONT: 403 | case CubeView.SIDE: 404 | loader.currentView = CubeView.TOP 405 | break 406 | } 407 | break 408 | } 409 | 410 | // always use the middle image for views on the right of the GUI 411 | var newImage = Util.getImgFile(CubeView._imagesData[prevView], 0.5) 412 | var newIndex = CubeView._facesData[loader.currentView] 413 | updateView() 414 | loader.viewUpdateRequest(prevView, loader.currentView, newImage, newIndex) 415 | loader.sourceComponent = undefined 416 | staticFace.visible = true 417 | } 418 | onRotationPositionChanged: loader.rotationPosition = rotationPosition 419 | onRotationDirectionChanged: loader.rotationDirection = rotationDirection 420 | } 421 | } 422 | 423 | Image { 424 | id: staticFaceBg 425 | source: "../../resources/icons/bigbox.png" 426 | visible: staticFace.visible 427 | 428 | anchors.centerIn: parent 429 | } 430 | 431 | Item { 432 | id: staticFace 433 | anchors.fill: staticFaceBg 434 | 435 | function getCurrentItem() { 436 | if (state == "front") 437 | return frontAnimatedItem 438 | else if (state == "side") 439 | return sideAnimatedItem 440 | 441 | return topAnimatedItem 442 | } 443 | 444 | function loadMarkers() { 445 | var item = getCurrentItem() 446 | for (var k = 0; k < item.children.length; k++) 447 | if (item.children[k].__markerComponent) { 448 | item.children[k].destroy() 449 | } 450 | 451 | markerModel.createMarkers([item]) 452 | markerModel.updateMarkersVisibility([item]) 453 | } 454 | 455 | function updateCurrentFrame() { 456 | var item = getCurrentItem() 457 | item.currentFrame = Math.min(Math.round(loader.currentIndex * item.frameCount), item.frameCount - 1) 458 | } 459 | 460 | function updateStaticFace() { 461 | updateCurrentFrame() 462 | loadMarkers() 463 | } 464 | 465 | Connections { 466 | target: loader 467 | onCurrentIndexChanged: { 468 | staticFace.updateCurrentFrame() 469 | markerModel.updateMarkersVisibility([staticFace.getCurrentItem()]) 470 | } 471 | } 472 | 473 | function preLoadFrames(item) { 474 | // load all the frames to avoid lag on the first loading 475 | var oldCurrentFrame = item.currentFrame 476 | for (var i = 0; i < item.frameCount; i++) { 477 | if (item.currentFrame < item.frameCount -1) 478 | item.currentFrame += 1 479 | else 480 | item.currentFrame = 0 481 | } 482 | item.currentFrame = oldCurrentFrame 483 | } 484 | 485 | Item { 486 | id: topAnimatedItem 487 | property int face: CubeView.TOP 488 | property alias currentFrame: topAnimatedImage.currentFrame 489 | // for mng animated images frame count is not correct, so we set manually 490 | property int frameCount: 91 491 | opacity: 1 492 | anchors.fill: parent 493 | 494 | AnimatedImage { 495 | id: topAnimatedImage 496 | source: loader.topAnimatedImage 497 | playing: false 498 | // the sourceSize of the mng animated image is (0,0), so we manual 499 | // align the image to the parent 500 | anchors.verticalCenter: parent.verticalCenter 501 | anchors.verticalCenterOffset: 20 502 | anchors.horizontalCenter: parent.horizontalCenter 503 | anchors.horizontalCenterOffset: -42 504 | scale: 2 505 | } 506 | Component.onCompleted: parent.preLoadFrames(topAnimatedItem) 507 | } 508 | 509 | Item { 510 | id: sideAnimatedItem 511 | property int face: CubeView.SIDE 512 | property alias currentFrame: sideAnimatedImage.currentFrame 513 | property int frameCount: 91 514 | opacity: 0 515 | anchors.fill: parent 516 | 517 | AnimatedImage { 518 | id: sideAnimatedImage 519 | source: loader.sideAnimatedImage 520 | playing: false 521 | anchors.verticalCenter: parent.verticalCenter 522 | anchors.verticalCenterOffset: 20 523 | anchors.horizontalCenter: parent.horizontalCenter 524 | anchors.horizontalCenterOffset: -42 525 | scale: 2 526 | } 527 | Component.onCompleted: parent.preLoadFrames(sideAnimatedItem) 528 | } 529 | 530 | Item { 531 | id: frontAnimatedItem 532 | property int face: CubeView.FRONT 533 | property alias currentFrame: frontAnimatedImage.currentFrame 534 | property int frameCount: 91 535 | opacity: 0 536 | anchors.fill: parent 537 | 538 | AnimatedImage { 539 | id: frontAnimatedImage 540 | source: loader.frontAnimatedImage 541 | playing: false 542 | anchors.verticalCenter: parent.verticalCenter 543 | anchors.verticalCenterOffset: 20 544 | anchors.horizontalCenter: parent.horizontalCenter 545 | anchors.horizontalCenterOffset: -42 546 | scale: 2 547 | } 548 | Component.onCompleted: parent.preLoadFrames(frontAnimatedItem) 549 | } 550 | 551 | states: [ 552 | State { 553 | name: "front" 554 | PropertyChanges { target:frontAnimatedItem; opacity: 1 } 555 | PropertyChanges { target:topAnimatedItem; opacity: 0 } 556 | PropertyChanges { target:sideAnimatedItem; opacity: 0 } 557 | 558 | }, 559 | State { 560 | name: "side" 561 | PropertyChanges { target:sideAnimatedItem; opacity: 1 } 562 | PropertyChanges { target:topAnimatedItem; opacity: 0 } 563 | PropertyChanges { target:frontAnimatedItem; opacity: 0 } 564 | } 565 | ] 566 | 567 | onStateChanged: updateStaticFace() 568 | Component.onCompleted: updateStaticFace() 569 | } 570 | 571 | // clipping container to avoid double shadow 572 | Item { 573 | anchors.fill: staticFace 574 | anchors.margins: 3 575 | z: 1 576 | clip: true 577 | 578 | CubeFace { 579 | id: highResolutionFace 580 | anchors.fill: parent 581 | anchors.margins: -parent.anchors.margins 582 | 583 | active: visible 584 | visible: true 585 | source: visible ? loader.frontImageSrc : "" 586 | face: loader.frontCubeFace 587 | onFaceChanged: loadMarkers() 588 | brightness: loader.brightness 589 | contrast: loader.contrast 590 | 591 | Connections { 592 | target: staticFace 593 | onVisibleChanged: { 594 | highResolutionFace.visible = staticFace.visible 595 | if (highResolutionFace.visible) 596 | markerModel.updateMarkersVisibility([highResolutionFace]) 597 | } 598 | } 599 | 600 | Connections { 601 | target: loader 602 | onCurrentIndexChanged: { 603 | if (highResolutionFace.visible) 604 | highResolutionFace.visible = false 605 | showHighResolutionFaceTimer.restart() 606 | } 607 | } 608 | 609 | Timer { 610 | id: showHighResolutionFaceTimer 611 | interval: 100 612 | onTriggered: { 613 | highResolutionFace.visible = true 614 | markerModel.updateMarkersVisibility([highResolutionFace]) 615 | } 616 | } 617 | 618 | function loadMarkers() { 619 | for (var k = 0; k < highResolutionFace.children.length; k++) 620 | if (highResolutionFace.children[k].__markerComponent) { 621 | highResolutionFace.children[k].destroy() 622 | } 623 | 624 | markerModel.createMarkers([highResolutionFace]) 625 | markerModel.updateMarkersVisibility([highResolutionFace]) 626 | } 627 | 628 | Component.onCompleted: loadMarkers() 629 | } 630 | } 631 | 632 | BrightnessContrast { 633 | source: staticFace 634 | anchors.fill: staticFace 635 | brightness: loader.brightness 636 | contrast: loader.contrast 637 | visible: staticFace.visible 638 | } 639 | 640 | MouseArea { 641 | property bool cubeMoving: false 642 | anchors.fill: parent 643 | visible: !loader._editMarker 644 | 645 | onPressed: { 646 | loader.sourceComponent = cubeComponent 647 | staticFace.visible = false 648 | loader.item.initRotation(mouse) 649 | cubeMoving = false 650 | } 651 | 652 | onPositionChanged: { 653 | cubeMoving = loader.item.rotate(mouse) 654 | } 655 | 656 | onReleased: { 657 | if (loader.item) { 658 | if (!cubeMoving) 659 | loader.item.animate(mouse) 660 | 661 | loader.item.finishRotation(mouse) 662 | } 663 | cubeMoving = false 664 | } 665 | } 666 | } 667 | -------------------------------------------------------------------------------- /qml/demo-qml/EditBox.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Rectangle { 4 | id: editBox 5 | property alias text: textLabel.text 6 | signal editRequest(variant e) 7 | 8 | color: "darkgray" 9 | border.width: 0 10 | 11 | function setFocus() { 12 | state = "focused" 13 | } 14 | 15 | function unsetFocus() { 16 | state = "" 17 | } 18 | 19 | MouseArea { 20 | anchors.fill: parent 21 | onClicked: { 22 | editBox.setFocus() 23 | editBox.editRequest(editBox) 24 | } 25 | } 26 | 27 | Text { 28 | id: textLabel 29 | anchors { fill: parent; leftMargin: 5; rightMargin: 5 } 30 | verticalAlignment: Text.AlignVCenter 31 | clip: true 32 | color: "dimgray" 33 | } 34 | 35 | states: State { 36 | name: "focused" 37 | PropertyChanges { target: editBox; color: "dimgray" } 38 | PropertyChanges { target: textLabel; color: "white" } 39 | } 40 | 41 | transitions: Transition { 42 | to: "focused" 43 | reversible: true 44 | PropertyAnimation { property: "color"; duration: 200 } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /qml/demo-qml/HorizontalLaser.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Image { 4 | id: laser 5 | property real percentage: .5 6 | property bool cursorVisible: true 7 | property bool enabled: true 8 | 9 | // do not use the percentage property to avoid breaking bindings 10 | signal percentageChangedByUser(real newPercentage) 11 | 12 | source: "../../resources/icons/verticale.png" 13 | 14 | QtObject { 15 | id: privateProps 16 | 17 | function recalculateCursorPos(percentage) { 18 | return laser.percentage * (laser.height - cursor.height) 19 | } 20 | 21 | function recalculatePercentage(newY) { 22 | return newY / (laser.height - cursor.height) 23 | } 24 | } 25 | 26 | 27 | BorderImage { 28 | id: cursor 29 | border.left: 14 30 | border.right: 64 31 | 32 | source: mouseArea.pressed ? "../../resources/icons/laser_orizontale_on.png" : "../../resources/icons/laser_orizontale_off.png" 33 | anchors { 34 | right: parent.right 35 | rightMargin: -25 + parent.width / 2 // to align the center of the cursor circle to the center of the laser bar. 36 | } 37 | 38 | state: laser.cursorVisible ? "" : "hidden" 39 | 40 | states: State { 41 | name: "hidden" 42 | PropertyChanges { target: cursor; width: cursor.border.left + cursor.border.right } 43 | PropertyChanges { target: cursor; opacity: 0 } 44 | } 45 | 46 | transitions: [ 47 | Transition { 48 | from: "" 49 | to: "hidden" 50 | reversible: true 51 | SequentialAnimation { 52 | NumberAnimation { property: "width"; duration: 200 } 53 | NumberAnimation { property: "opacity"; duration: 200 } 54 | } 55 | } 56 | ] 57 | 58 | MouseArea { 59 | id: mouseArea 60 | anchors.fill: parent 61 | anchors.margins: -20 // enlarge the mouse area to make it more friendly 62 | enabled: laser.cursorVisible && laser.enabled 63 | 64 | drag.target: parent 65 | drag.axis: Drag.YAxis 66 | drag.minimumY: 0 67 | drag.maximumY: laser.height - cursor.height 68 | 69 | onPositionChanged: { 70 | if (drag.active) 71 | percentageChangedByUser(privateProps.recalculatePercentage(cursor.y)) 72 | } 73 | } 74 | 75 | 76 | } 77 | 78 | onPercentageChanged: cursor.y = privateProps.recalculateCursorPos(laser.percentage) 79 | Component.onCompleted: cursor.y = privateProps.recalculateCursorPos(laser.percentage) 80 | } 81 | -------------------------------------------------------------------------------- /qml/demo-qml/ImageView.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Image { 4 | property int currentView 5 | property alias image: img.source 6 | property bool verticalLaser: false 7 | 8 | source: "../../resources/icons/box.png" 9 | 10 | Image { 11 | id: img 12 | anchors.centerIn: parent 13 | fillMode: Image.PreserveAspectFit 14 | width: 200 15 | height: 200 16 | } 17 | 18 | Image { 19 | source: "../../resources/icons/box_bg.png" 20 | anchors.centerIn: parent 21 | z: parent.z - 1 22 | } 23 | 24 | BorderImage { 25 | border.left: 6 26 | border.right: 6 27 | border.bottom: 6 28 | border.top: 6 29 | width: 208 30 | height: 208 31 | anchors.centerIn: parent 32 | source: verticalLaser ? "../../resources/icons/notches_vert.png" : "../../resources/icons/notches_oriz.png" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /qml/demo-qml/Knob.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Item { 4 | id: knob 5 | property string label: "color" 6 | property real percentage: 0 7 | 8 | width: scaleIndicator.width 9 | height: labelText.y + labelText.height - scaleIndicator.y 10 | 11 | Image { 12 | id: knobBase 13 | source: "../../resources/icons/btn.png" 14 | anchors.centerIn: scaleIndicator 15 | anchors.verticalCenterOffset: 14 16 | rotation: knob.percentage * 90 17 | 18 | Image { 19 | source: "../../resources/icons/incavo.png" 20 | anchors.top: knobBase.top 21 | anchors.topMargin: 2 22 | anchors.horizontalCenter: knobBase.horizontalCenter 23 | rotation: -knobBase.rotation 24 | } 25 | } 26 | 27 | MouseArea { 28 | anchors.fill: parent 29 | onPositionChanged: { 30 | var mouseRelative = mouse.x - knobBase.width / 2 31 | var percentage = Math.min(Math.max(-1, mouseRelative / (knobBase.width / 2)), 1) 32 | knob.percentage = percentage 33 | } 34 | } 35 | 36 | Image { 37 | id: scaleIndicator 38 | source: "../../resources/icons/indicatore.png" 39 | } 40 | 41 | Text { 42 | id: labelText 43 | 44 | anchors { 45 | top: knobBase.bottom 46 | horizontalCenter: knobBase.horizontalCenter 47 | } 48 | 49 | text: knob.label 50 | color: "#939393" 51 | font.pointSize: 14 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /qml/demo-qml/MarkerDeleteDialog.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | BorderImage { 4 | id: root 5 | signal accepted() 6 | signal rejected() 7 | 8 | border { 9 | top: 20 10 | left: 20 11 | right: 20 12 | bottom: 20 13 | } 14 | source: "../../resources/icons/dialog_box.png" 15 | clip: true 16 | 17 | Column { 18 | anchors.verticalCenter: parent.verticalCenter 19 | width: parent.width 20 | spacing: 20 21 | 22 | Text { 23 | anchors.horizontalCenter: parent.horizontalCenter 24 | width: parent.width * 0.8 25 | wrapMode: Text.Wrap 26 | text: "The marker is going to be deleted. Are you sure?" 27 | color: "darkslategray" 28 | font.pointSize: 15 29 | textFormat: Text.PlainText 30 | } 31 | 32 | Row { 33 | anchors.horizontalCenter: parent.horizontalCenter 34 | spacing: 20 35 | 36 | Button { 37 | icon: "../../resources/icons/conferma.png" 38 | onClicked: accepted() 39 | } 40 | 41 | Button { 42 | icon: "../../resources/icons/annulla.png" 43 | onClicked: rejected() 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /qml/demo-qml/MarkerModel.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import "CubeView.js" as CubeView 3 | 4 | 5 | ListModel { 6 | readonly property int type1: 1 7 | readonly property int type2: 2 8 | readonly property int type3: 3 9 | readonly property int type4: 4 10 | readonly property int type5: 5 11 | readonly property int type6: 6 12 | readonly property int type7: 7 13 | readonly property int type8: 8 14 | readonly property int type9: 9 15 | readonly property int type10: 10 16 | readonly property int type11: 11 17 | 18 | function typeToImage(t) { 19 | return "../../resources/icons/0" + (t > 9 ? "" : "0") + t + ".png" 20 | } 21 | 22 | function typeToSmallImage(t) { 23 | return "../../resources/icons/0" + (t > 9 ? "" : "0") + t + "s.png" 24 | } 25 | 26 | function markersInFace(face) { 27 | var a = [] 28 | for (var i = 0; i < count; i++) 29 | if (get(i).face == face) 30 | a.push(get(i)) 31 | return a 32 | } 33 | 34 | function getMarkerDescription(markerId) { 35 | for (var i = 0; i < count; i++) 36 | if (get(i).markerId == markerId) 37 | return get(i).description 38 | 39 | console.warn("Cannot find a marker with id:", markerId) 40 | return "" 41 | } 42 | 43 | function setMarkerDescription(markerId, description) { 44 | for (var i = 0; i < count; i++) 45 | if (get(i).markerId == markerId) { 46 | setProperty(i, "description", description) 47 | return 48 | } 49 | 50 | console.warn("Cannot find a marker with id:", markerId) 51 | } 52 | 53 | Component.onCompleted: { 54 | append({"markerId": 1, "face": CubeView.TOP, "type": type2, 55 | "x": 150, "y": 100, "index": .35, 56 | "description": "There are few focal defects identified in the periventricular white matter bilaterally. These are likely due to some superimposed small vessel ischemic change rather than a demyelinating condition. There is no evidence of focal defects identified within the brainstem at any level. The orbits are unremarkable."}) 57 | append({"markerId": 2, "face": CubeView.TOP, "type": type4, 58 | "x": 330, "y": 300, "index": .5, "description": "The changes in local cerebral activity have two components: a global, region independent change and a local or regional change. As the first step in localizing the regional effects of an activation, global variance must be removed by a normalization procedure."}) 59 | append({"markerId": 3, "face": CubeView.TOP, "type": type8, 60 | "x": 250, "y": 400, "index": .8, "description": "Early in vivo detection and localization of potentially reversible ischemic cerebral edema may have important research and clinical applications."}) 61 | append({"markerId": 4, "face": CubeView.TOP, "type": type10, 62 | "x": 150, "y": 300, "index": .1 , "description": "The specific patterns of preserved metabolic activity identified in these patients do not appear to represent random survivals of a few neuronal islands."}) 63 | 64 | append({"markerId": 5, "face": CubeView.FRONT, "type": type3, 65 | "x": 180, "y": 200, "index": .65, "description": "There are areas of new T2 FLAIR hyperintensity in the left insula and bilateral left greater than the right anterior temporal lobes concerning for new foci of metastatic disease."}) 66 | append({"markerId": 6, "face": CubeView.FRONT, "type": type7, 67 | "x": 280, "y": 260, "index": .25, "description": "The presence of IDH1 mutations was found to carry a very strong prognostic significance for OS but without evidence of a predictive significance for outcome to PCV chemotherapy."}) 68 | 69 | append({"markerId": 7, "face": CubeView.SIDE, "type": type1, 70 | "x": 350, "y": 250, "index": .4 , "description": "The sulci and ventricles are unremarkable. There is no hydrocephalus."}) 71 | append({"markerId": 8, "face": CubeView.SIDE, "type": type3, 72 | "x": 390, "y": 350, "index": .3 , "description": "These activations correlate with isolated behavioural patterns and metabolic activity."}) 73 | 74 | 75 | 76 | 77 | } 78 | } 79 | 80 | -------------------------------------------------------------------------------- /qml/demo-qml/ScrollArea.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Item { 4 | property real index 5 | 6 | id: area 7 | Rectangle { 8 | id: handle 9 | width: parent.width 10 | height: 16 11 | color: "#434343" 12 | 13 | MouseArea { 14 | anchors.fill: parent 15 | drag.target: parent 16 | drag.axis: Drag.YAxis 17 | drag.minimumY: 0 18 | drag.maximumY: area.height - parent.height 19 | 20 | onPositionChanged: { 21 | index = handle.y / (area.height - handle.height) 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qml/demo-qml/SearchDialog.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | BorderImage { 4 | id: root 5 | signal closeRequest() 6 | signal profileChangeRequest(string name, var date, string view, int imageIndex, url image, var geometry) 7 | 8 | property alias searchInputFocused: searchInput.focus 9 | 10 | border { 11 | top: 20 12 | left: 20 13 | right: 20 14 | bottom: 20 15 | } 16 | source: "../../resources/icons/dialog_box.png" 17 | clip: true 18 | 19 | readonly property var staticDataModel: [ 20 | { 21 | name: "Brian Johnson", 22 | text: "Ophthalmoplegic migraine. Unenhanced images reveal smooth 23 | enlargement and homogeneous enhancement of cisternal segment of 24 | left oculomotor.", 25 | view: "rear", 26 | imageIndex: 20, 27 | date: "2013-04-25" 28 | }, 29 | { 30 | name: "Jim Morrison", 31 | text: "Metastatic melanoma and meningeal carcinomatosis. 32 | Contrast-enhanced axial and coronal T1-weighted images show 33 | enhancement and involvement of multiple cranial nerves: oculomotor 34 | nerves, trigeminal nerves, complex of seventh and eighth cranial 35 | nerves, complex of ninth, tenth, and eleventh cranial nerves, 36 | hypoglossal nerves.", 37 | view: "top", 38 | imageIndex: 85, 39 | date: "2009-11-10" 40 | }, 41 | { 42 | name: "Eric Adams", 43 | text: "Patient after resection of adenoid cystic carcinoma of right 44 | hard palate. Axial bone image shows widening of right 45 | pterygopalatine fossa.", 46 | view: "side", 47 | imageIndex: 30, 48 | date: "2012-02-22" 49 | }, 50 | { 51 | name: "James Hetfield", 52 | text: "Acute lymphoblastic leukemia. Axial image reveals leukemic 53 | infiltrate of left pons and brachium pontis. Contrast-enhanced 54 | axial images show antegrade perineural extension along course of 55 | left spinal trigeminal tract and nuclei into preganglionic segment 56 | of left trigeminal nerve.", 57 | view: "rear", 58 | imageIndex: 75, 59 | date: "2013-09-03" 60 | }, 61 | { 62 | name: "Bruce Dickinson", 63 | text: "Tuberculous meningitis. Contrast-enhanced axial and coronal 64 | images show abnormal peripheral enhancement of oculomotor nerves. 65 | In addition, there is leptomeningeal enhancement of anterior 66 | surface of brainstem.", 67 | view: "top", 68 | imageIndex: 40, 69 | date: "2007-08-15" 70 | }, 71 | { 72 | name: "Howard Wolowitz", 73 | text: "Patient with perineural spread of rhinocerebral mucormycosis who 74 | presented for follow-up after right orbital exenteration. Axial images 75 | show recurrence of infection with invasion of right cavernous sinus and 76 | retrograde involvement of trigeminal nerve along cavernous, ganglionic, 77 | and cisternal segments. Abnormal signal within right pons indicates 78 | edema.", 79 | view: "side", 80 | imageIndex: 80, 81 | date: "2005-04-03" 82 | } 83 | ] 84 | 85 | function hideKeyboard() { 86 | root.forceActiveFocus() 87 | 88 | if (hasEmbeddedKeyboard) 89 | MInputMethodQuick.userHide() 90 | } 91 | 92 | function updateDataModel(pattern) { 93 | var result = [] 94 | pattern = pattern.toLowerCase() 95 | 96 | for (var i = 0; i < staticDataModel.length; i++) { 97 | var itemName = staticDataModel[i].name.toLowerCase() 98 | 99 | if (itemName.search(pattern) !== -1) 100 | result.push(staticDataModel[i]) 101 | } 102 | 103 | listView.model = result 104 | } 105 | 106 | Item { 107 | id: titleBar 108 | anchors { 109 | top: parent.top 110 | left: parent.left 111 | right: parent.right 112 | leftMargin: 10 113 | rightMargin: 10 114 | topMargin: 15 115 | } 116 | height: 50 117 | 118 | Text { 119 | anchors { horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter } 120 | text: "Patients" 121 | color: "darkslategray" 122 | font.pointSize: 15 123 | } 124 | 125 | Image { 126 | anchors { right: parent.right; rightMargin: -6; verticalCenter: parent.verticalCenter } 127 | source: "../../resources/icons/annulla.png" 128 | 129 | MouseArea { 130 | anchors.fill: parent 131 | onClicked: { 132 | hideKeyboard() 133 | closeRequest() 134 | } 135 | } 136 | } 137 | 138 | Image { 139 | source: "../../resources/icons/separator.png" 140 | anchors.bottom: parent.bottom 141 | width: parent.width 142 | } 143 | } 144 | 145 | Item { 146 | id: searchBar 147 | anchors { 148 | top: titleBar.bottom 149 | left: parent.left 150 | leftMargin: 10 151 | right: parent.right 152 | rightMargin: 10 153 | } 154 | 155 | height: 50 156 | 157 | Image { 158 | source: "../../resources/icons/search_bar.png" 159 | anchors.centerIn: parent 160 | 161 | Image { 162 | id: magIcon 163 | source: "../../resources/icons/search.png" 164 | anchors { left: parent.left; verticalCenter: parent.verticalCenter; leftMargin: 10 } 165 | } 166 | 167 | Image { 168 | id: delIcon 169 | source: "../../resources/icons/delete.png" 170 | anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 7 } 171 | opacity: searchInput.text.length ? 1 : 0.5 172 | 173 | MouseArea { 174 | enabled: searchInput.text.length 175 | anchors.fill: parent 176 | onClicked: searchInput.text = "" 177 | } 178 | } 179 | 180 | TextInput { 181 | id: searchInput 182 | anchors { 183 | left: magIcon.right 184 | leftMargin: 5 185 | right: delIcon.left 186 | rightMargin: 5 187 | verticalCenter: parent.verticalCenter 188 | } 189 | clip: true 190 | font { pointSize: 14; weight: Font.Bold } 191 | color: "dimgray" 192 | 193 | onTextChanged: updateTimer.restart() 194 | 195 | // when the input box gains focus, close currently opened element (if any) 196 | onFocusChanged: if (focus) listView.setOpened(listView.opened.indexOf(true), false) 197 | 198 | Timer { 199 | id: updateTimer 200 | interval: 100 201 | onTriggered: updateDataModel(searchInput.text) 202 | } 203 | } 204 | } 205 | 206 | Image { 207 | source: "../../resources/icons/separator.png" 208 | anchors.bottom: parent.bottom 209 | width: parent.width 210 | } 211 | } 212 | 213 | ListView { 214 | id: listView 215 | 216 | /* This array contains booleans which indicate the state 217 | (opened/closed) of delegates. Modifying this array (by calling 218 | setOpened()) will fold or expand the delegate at given position. The 219 | setOpened() function also guarantees that there's only one opened 220 | delegate at the moment. */ 221 | property var opened: { 222 | var arr = [] 223 | for (var i = 0; i < count; i++) 224 | arr.push(false) 225 | 226 | return arr 227 | } 228 | 229 | function setOpened(index, state) { 230 | if (opened[index] !== state) { 231 | // close any currently opened element 232 | var idx = opened.indexOf(true) 233 | if (idx !== -1) 234 | opened[idx] = false 235 | 236 | // update 237 | opened[index] = state 238 | openedChanged() 239 | } 240 | } 241 | 242 | anchors { 243 | top: searchBar.bottom 244 | bottom: parent.bottom 245 | left: parent.left 246 | right: parent.right 247 | leftMargin: 10 248 | rightMargin: 10 249 | bottomMargin: 20 250 | } 251 | clip: true 252 | 253 | model: staticDataModel 254 | 255 | delegate: Item { 256 | id: element 257 | width: listView.width; height: header.height + content.height 258 | clip: true 259 | state: listView.opened[index] ? "" : "folded" 260 | 261 | Item { 262 | id: header 263 | width: parent.width; height: 50 264 | 265 | Text { 266 | anchors { 267 | left: parent.left 268 | leftMargin: 20 269 | verticalCenter: parent.verticalCenter 270 | } 271 | width: parent.width 272 | elide: Text.ElideRight 273 | color: element.state == "" ? "#0053cd" : "dimgray" 274 | font.pointSize: 15 275 | textFormat: Text.PlainText 276 | text: modelData.name 277 | } 278 | 279 | Text { 280 | anchors { 281 | right: parent.right 282 | rightMargin: 15 283 | verticalCenter: parent.verticalCenter 284 | } 285 | text: Qt.formatDate(modelData.date, "MMMM d, yyyy") 286 | color: "gray" 287 | font.pointSize: 14 288 | } 289 | 290 | Image { 291 | source: "../../resources/icons/separator.png" 292 | anchors.bottom: parent.bottom 293 | width: parent.width 294 | } 295 | 296 | MouseArea { 297 | anchors.fill: parent 298 | onClicked: { 299 | hideKeyboard() 300 | listView.setOpened(index, !listView.opened[index]) 301 | } 302 | } 303 | } 304 | 305 | Column { 306 | id: content 307 | anchors { 308 | top: header.bottom 309 | left: parent.left 310 | right: parent.right 311 | } 312 | spacing: 5 313 | 314 | Rectangle { 315 | width: parent.width 316 | height: image.height + text.height + sep.height * 2 317 | color: "#fdfdfe" 318 | 319 | Image { 320 | id: image 321 | anchors { 322 | top: parent.top 323 | horizontalCenter: parent.horizontalCenter 324 | } 325 | width: 325; height: 325 326 | source: "../../resources/" + modelData.view + "/" + modelData.view + "0" + modelData.imageIndex + ".png" 327 | } 328 | 329 | Image { 330 | id: sep 331 | source: "../../resources/icons/separator.png" 332 | anchors.top: image.bottom 333 | width: parent.width 334 | } 335 | 336 | Column { 337 | id: text 338 | anchors { 339 | top: sep.bottom 340 | left: parent.left 341 | right: parent.right 342 | leftMargin: 20 343 | rightMargin: 20 344 | } 345 | spacing: 5 346 | 347 | Item { width: parent.width; height: 1 } 348 | 349 | Text { 350 | width: parent.width 351 | text: String(modelData.text).replace(/\s+/g, ' ') 352 | wrapMode: Text.Wrap 353 | font.pointSize: 12 354 | textFormat: Text.PlainText 355 | color: "dimgray" 356 | } 357 | 358 | Item { width: parent.width; height: 3 } 359 | } 360 | 361 | 362 | MouseArea { 363 | anchors.fill: parent 364 | onClicked: { 365 | hideKeyboard() 366 | 367 | var geometry = { 368 | x: parent.mapToItem(null, 0, 0).x, 369 | y: image.mapToItem(null, 0, 0).y, 370 | w: parent.width, 371 | h: image.height 372 | } 373 | 374 | profileChangeRequest( 375 | modelData.name, 376 | modelData.date, 377 | modelData.view, 378 | modelData.imageIndex, 379 | image.source, 380 | geometry 381 | ); 382 | } 383 | } 384 | 385 | Image { 386 | source: "../../resources/icons/separator.png" 387 | anchors.bottom: parent.bottom 388 | width: parent.width 389 | } 390 | } 391 | } 392 | 393 | states: State { 394 | name: "folded" 395 | PropertyChanges { target: element; height: header.height } 396 | PropertyChanges { target: content; opacity: 0 } 397 | } 398 | 399 | transitions: Transition { 400 | reversible: true 401 | PropertyAnimation { properties: "height,opacity"; duration: 200 } 402 | } 403 | } 404 | } 405 | } 406 | -------------------------------------------------------------------------------- /qml/demo-qml/Util.js: -------------------------------------------------------------------------------- 1 | function getImgFile(model, index) { 2 | if (!model) 3 | return "" 4 | 5 | var path = String(model.folder) 6 | var basename = path.split("/") 7 | basename = basename[basename.length-1] 8 | 9 | return path + '/' + basename + padNumber(Math.max(0, Math.min(Math.round(model.count * index), model.count - 1)), 3) + ".png" 10 | } 11 | 12 | function padNumber(number, length) 13 | { 14 | var out = "" + number; 15 | while (out.length < length) { 16 | out = "0" + out; 17 | } 18 | 19 | return out; 20 | } 21 | 22 | -------------------------------------------------------------------------------- /qml/demo-qml/VerticalLaser.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Image { 4 | id: laser 5 | property real percentage: .2 6 | 7 | property bool cursorOnTop: true 8 | property bool cursorVisible: true 9 | property bool enabled: true 10 | property bool doubleCursor: false 11 | 12 | property var cursor: doubleCursor ? doubleCursorImage : cursorImage 13 | 14 | // do not use the percentage property to avoid breaking bindings 15 | signal percentageChangedByUser(real newPercentage) 16 | 17 | source: "../../resources/icons/orizzontale.png" 18 | state: laser.cursorOnTop ? "" : "cursorOnBottom" 19 | 20 | QtObject { 21 | id: privateProps 22 | 23 | function recalculateCursorPos(percentage) { 24 | return laser.percentage * (laser.width - cursor.width) 25 | } 26 | 27 | function recalculatePercentage(newX) { 28 | return newX / (laser.width - cursor.width) 29 | } 30 | } 31 | 32 | BorderImage { 33 | id: cursorImage 34 | 35 | border.top: laser.cursorOnTop ? 64 : 14 36 | border.bottom: laser.cursorOnTop ? 14: 64 37 | 38 | height: sourceSize.height // Why is this required? 39 | source: { 40 | if (laser.cursorOnTop) 41 | return mouseArea.pressed ? "../../resources/icons/laser_verticale_d_on.png" : "../../resources/icons/laser_verticale_d_off.png" 42 | else 43 | return mouseArea.pressed ? "../../resources/icons/laser_verticale_u_on.png" : "../../resources/icons/laser_verticale_u_off.png" 44 | } 45 | 46 | anchors { 47 | top: parent.top 48 | // to align the center of the cursor circle to the center of the laser bar. 49 | topMargin: -25 + parent.height/ 2 50 | } 51 | 52 | state: laser.cursorVisible && !laser.doubleCursor ? "" : "hidden" 53 | states: State { 54 | name: "hidden" 55 | PropertyChanges { target: cursorImage; height: cursorImage.border.top + cursorImage.border.bottom } 56 | PropertyChanges { target: cursorImage; opacity: 0 } 57 | } 58 | 59 | transitions: [ 60 | Transition { 61 | from: "" 62 | to: "hidden" 63 | reversible: true 64 | SequentialAnimation { 65 | NumberAnimation { property: "height"; duration: 200 } 66 | NumberAnimation { property: "opacity"; duration: 200 } 67 | } 68 | } 69 | ] 70 | } 71 | 72 | MouseArea { 73 | id: mouseArea 74 | anchors.fill: cursorImage 75 | anchors.margins: -20 // enlarge the mouse area to make it more friendly 76 | enabled: laser.cursorVisible && !laser.doubleCursor && laser.enabled 77 | 78 | drag.target: cursorImage 79 | drag.axis: Drag.XAxis 80 | drag.minimumX: 0 81 | drag.maximumX: laser.width - cursorImage.width 82 | 83 | onPositionChanged: { 84 | if (drag.active) 85 | percentageChangedByUser(privateProps.recalculatePercentage(cursorImage.x)) 86 | } 87 | } 88 | 89 | Column { 90 | id: doubleCursorImage 91 | anchors.verticalCenter: parent.verticalCenter 92 | x: privateProps.recalculateCursorPos(percentage) 93 | 94 | BorderImage { 95 | id: topImage 96 | border.top: 14 97 | border.bottom: 38 98 | source: mouseAreaDouble.pressed ? "../../resources/icons/laser_verticale_xl_top_on.png" : "../../resources/icons/laser_verticale_xl_top_off.png" 99 | } 100 | 101 | BorderImage { 102 | id: bottomImage 103 | border.top: 36 104 | border.bottom: 14 105 | source: mouseAreaDouble.pressed ? "../../resources/icons/laser_verticale_xl_bottom_on.png" : "../../resources/icons/laser_verticale_xl_bottom_off.png" 106 | } 107 | 108 | state: laser.cursorVisible && laser.doubleCursor ? "" : "hidden" 109 | states: State { 110 | name: "hidden" 111 | PropertyChanges { target: topImage; height: topImage.border.top + topImage.border.bottom } 112 | PropertyChanges { target: topImage; opacity: 0 } 113 | PropertyChanges { target: bottomImage; height: bottomImage.border.top + bottomImage.border.bottom } 114 | PropertyChanges { target: bottomImage; opacity: 0 } 115 | } 116 | 117 | transitions: [ 118 | Transition { 119 | from: "" 120 | to: "hidden" 121 | reversible: true 122 | SequentialAnimation { 123 | NumberAnimation { property: "height"; duration: 200 } 124 | NumberAnimation { property: "opacity"; duration: 200 } 125 | } 126 | } 127 | ] 128 | } 129 | 130 | MouseArea { 131 | id: mouseAreaDouble 132 | anchors.fill: doubleCursorImage 133 | anchors.margins: -20 // enlarge the mouse area to make it more friendly 134 | enabled: laser.cursorVisible && laser.doubleCursor && laser.enabled 135 | 136 | drag.target: doubleCursorImage 137 | drag.axis: Drag.XAxis 138 | drag.minimumX: 0 139 | drag.maximumX: laser.width - doubleCursorImage.width 140 | 141 | onPositionChanged: { 142 | if (drag.active) 143 | percentageChangedByUser(privateProps.recalculatePercentage(doubleCursorImage.x)) 144 | } 145 | } 146 | 147 | states: [ 148 | State { 149 | name: "cursorOnBottom" 150 | AnchorChanges { 151 | target: cursorImage 152 | anchors.top: undefined 153 | anchors.bottom: laser.bottom 154 | } 155 | PropertyChanges { 156 | target: cursorImage 157 | anchors.topMargin: 0 158 | anchors.bottomMargin: -25 + laser.height / 2 159 | } 160 | } 161 | ] 162 | 163 | onPercentageChanged: cursor.x = privateProps.recalculateCursorPos(laser.percentage) 164 | Component.onCompleted: cursor.x = privateProps.recalculateCursorPos(laser.percentage) 165 | } 166 | 167 | -------------------------------------------------------------------------------- /qml/demo-qml/main.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Qt.labs.folderlistmodel 2.0 3 | import QtGraphicalEffects 1.0 4 | import "CubeView.js" as CubeView 5 | import "Cube.js" as Cube 6 | import "Util.js" as Util 7 | 8 | Image { 9 | id: root 10 | 11 | property real currentIndex: 0.55 12 | 13 | property int globalTopMargin: 128 14 | source: "../../resources/icons/bg.png" 15 | 16 | Image { 17 | id: logoDeveler 18 | source: "../../resources/icons/logo01.png" 19 | opacity: 1 20 | anchors { 21 | top: root.top 22 | topMargin: 10 23 | left: root.left 24 | leftMargin: 10 25 | } 26 | 27 | Text { 28 | x: 27 29 | y: 55 30 | text: "Software design" 31 | font.pointSize: 10 32 | color: "#939393" 33 | } 34 | Behavior on opacity { 35 | NumberAnimation { duration: 300 } 36 | } 37 | } 38 | 39 | Image { 40 | id: logoEngicam 41 | source: "../../resources/icons/logo02.png" 42 | opacity: 0 43 | anchors { 44 | top: root.top 45 | topMargin: 10 46 | left: root.left 47 | leftMargin: 10 48 | } 49 | 50 | Text { 51 | x: 40 52 | y: 36 53 | text: "Hardware design" 54 | font.pointSize: 10 55 | color: "#939393" 56 | } 57 | 58 | Behavior on opacity { 59 | NumberAnimation { duration: 300 } 60 | } 61 | } 62 | 63 | Timer { 64 | id: logoAnimationTimer 65 | interval: 10000 66 | running: true 67 | repeat: true 68 | onTriggered: { 69 | if (logoDeveler.opacity == 1) { 70 | logoEngicam.opacity = 1 71 | logoDeveler.opacity = 0 72 | } 73 | else { 74 | logoEngicam.opacity = 0 75 | logoDeveler.opacity = 1 76 | } 77 | } 78 | } 79 | 80 | Image { 81 | anchors { 82 | top: parent.top 83 | topMargin: 8 84 | right: parent.right 85 | rightMargin: 10 86 | } 87 | source: "../../resources/icons/s.png" 88 | 89 | Button { 90 | anchors.centerIn: parent 91 | icon: "../../resources/icons/search.png" 92 | onClicked: { 93 | // ensure keyboard is hidden and reset any states before 94 | // showing the dialog 95 | if (!searchDialog.show) { 96 | Qt.inputMethod.hide() 97 | root.state = "" 98 | } 99 | 100 | // toggle the dialog 101 | searchDialog.show = !searchDialog.show 102 | } 103 | } 104 | } 105 | 106 | 107 | BorderImage { 108 | id: patientInfo 109 | source: "../../resources/icons/s.png" 110 | anchors { 111 | horizontalCenter: parent.horizontalCenter 112 | top: root.top 113 | topMargin: 6 114 | } 115 | 116 | width: 360; height: 78 117 | border.left: 38; border.top: 39 118 | border.right: 38; border.bottom: 39 119 | 120 | Text { 121 | id: text1 122 | anchors.horizontalCenter: patientInfo.horizontalCenter 123 | anchors.top: patientInfo.top 124 | anchors.topMargin: 5 125 | color: "#939393" 126 | text: Qt.formatDate(new Date(2007, 7, 15), "dddd, MMMM d, yyyy") 127 | font.pointSize: 16 128 | } 129 | 130 | TextInput { 131 | id: text2 132 | anchors.horizontalCenter: text1.horizontalCenter 133 | anchors.bottom: patientInfo.bottom 134 | anchors.bottomMargin: 5 135 | color: "#0254cd" 136 | text: "Bruce Dickinson" 137 | font.pixelSize: 28 138 | horizontalAlignment: TextInput.AlignHCenter 139 | width: parent.width - 46 140 | clip: true 141 | readOnly: root.state == "editMarker" 142 | 143 | Connections { 144 | target: Qt.inputMethod 145 | onVisibleChanged: { 146 | // Quick & Dirty solution to hide the cursor when the virtual keyboard disappears. 147 | // I don't know if there is a "right" way to do this. 148 | text2.cursorVisible = Qt.inputMethod.visible 149 | } 150 | } 151 | 152 | onAccepted: { 153 | if (Qt.inputMethod.visible) 154 | Qt.inputMethod.hide() 155 | } 156 | } 157 | } 158 | 159 | FolderListModel { 160 | id: topImagesDir 161 | folder: "../../resources/top" 162 | nameFilters: ["*.png"] 163 | } 164 | FolderListModel { 165 | id: sideImagesDir 166 | folder: "../../resources/side" 167 | nameFilters: ["*.png"] 168 | } 169 | FolderListModel { 170 | id: frontImagesDir 171 | folder: "../../resources/rear" 172 | nameFilters: ["*.png"] 173 | } 174 | 175 | Column { 176 | id: imageControls 177 | anchors { 178 | left: root.left 179 | leftMargin: 10 180 | right: view1.left 181 | rightMargin: 10 182 | top: root.top 183 | topMargin: globalTopMargin 184 | } 185 | spacing: 40 186 | Knob { 187 | id: brightnessKnob 188 | label: "Brigthness" 189 | anchors.horizontalCenter: parent.horizontalCenter 190 | } 191 | 192 | Knob { 193 | id: contrastKnob 194 | label: "Contrast" 195 | anchors.horizontalCenter: parent.horizontalCenter 196 | } 197 | } 198 | 199 | Item { 200 | id: view1 201 | 202 | anchors { 203 | top: root.top 204 | topMargin: globalTopMargin 205 | left: root.left 206 | leftMargin: 150 207 | } 208 | width: 516 209 | height: 516 210 | z: 1 211 | clip: true 212 | 213 | CubeView { 214 | id: cube 215 | anchors.fill: parent 216 | topImagesDir: topImagesDir 217 | sideImagesDir: sideImagesDir 218 | frontImagesDir: frontImagesDir 219 | 220 | topAnimatedImage: "../../resources/top/top.mng" 221 | sideAnimatedImage: "../../resources/side/side.mng" 222 | frontAnimatedImage: "../../resources/rear/rear.mng" 223 | 224 | currentView: CubeView.TOP 225 | currentIndex: 1 - root.currentIndex 226 | 227 | property real strengthFactor: .33 228 | brightness: brightnessKnob.percentage * strengthFactor 229 | contrast: contrastKnob.percentage * strengthFactor 230 | 231 | NumberAnimation { 232 | id: currentIndexAnimation 233 | target: root 234 | property: "currentIndex" 235 | } 236 | 237 | onGotoCurrentIndex: { 238 | currentIndexAnimation.to = 1 - index 239 | currentIndexAnimation.duration = Math.abs(index - (1 - root.currentIndex)) * 400 240 | currentIndexAnimation.start() 241 | } 242 | 243 | onViewUpdateRequest: { 244 | var viewports = [view2, view3] 245 | root.currentIndex = 1 - newIndex 246 | 247 | for (var v = 0; v < 2; v++) { 248 | if (viewports[v].currentView === currView) { 249 | viewports[v].currentView = prevView 250 | viewports[v].image = image 251 | } 252 | } 253 | } 254 | 255 | onViewResetRequest: { 256 | root.currentIndex = 1 - index 257 | 258 | view2.currentView = v1 259 | view2.image = image1 260 | 261 | view3.currentView = v2 262 | view3.image = image2 263 | } 264 | } 265 | } 266 | 267 | Image { 268 | source: "../../resources/icons/bigbox_bg.png" 269 | anchors.centerIn: view1 270 | z: view1.z - 1 271 | } 272 | 273 | Column { 274 | anchors { 275 | top: root.top 276 | right: root.right 277 | topMargin: globalTopMargin 278 | rightMargin: 50 279 | } 280 | spacing: 21 281 | 282 | // Visibility conditions for lasers 283 | // - When TOP is in big box => 2 horizontal lasers 284 | // - when SIDE in big box => double vertical laser 285 | // - when FRONT in big box => horizontal cursor points to SIDE view 286 | Row { 287 | spacing: 20 288 | ImageView { 289 | id: view2 290 | currentView: CubeView.SIDE 291 | image: Util.getImgFile(sideImagesDir, 0.5) 292 | verticalLaser: verticalLaser.cursorVisible && (verticalLaser.doubleCursor || !verticalLaser.cursorOnTop) 293 | } 294 | 295 | HorizontalLaser { 296 | id: topLaser 297 | enabled: root.state == "" 298 | cursorVisible: { 299 | if (cube.currentView === CubeView.TOP || 300 | (verticalLaser.cursorVisible && verticalLaser.cursorOnTop) && 301 | !verticalLaser.doubleCursor) 302 | return true 303 | else 304 | return false 305 | } 306 | 307 | anchors.verticalCenter: view2.verticalCenter 308 | percentage: root.currentIndex 309 | onPercentageChangedByUser: root.currentIndex = newPercentage 310 | } 311 | } 312 | 313 | VerticalLaser { 314 | id: verticalLaser 315 | z:1 316 | enabled: root.state == "" 317 | cursorOnTop: view3.currentView === CubeView.SIDE ? true : false 318 | cursorVisible: cube.currentView === CubeView.SIDE || cube.currentView === CubeView.FRONT 319 | doubleCursor: cube.currentView === CubeView.SIDE 320 | anchors.left: parent.left 321 | anchors.leftMargin: 14.5 322 | percentage: root.currentIndex 323 | onPercentageChangedByUser: root.currentIndex = newPercentage 324 | } 325 | 326 | Row { 327 | spacing: 20 328 | ImageView { 329 | id: view3 330 | currentView: CubeView.FRONT 331 | image: Util.getImgFile(frontImagesDir, 0.5) 332 | verticalLaser: verticalLaser.cursorVisible && (verticalLaser.doubleCursor || verticalLaser.cursorOnTop) 333 | } 334 | 335 | HorizontalLaser { 336 | id: bottomLaser 337 | enabled: root.state == "" 338 | cursorVisible: { 339 | if (cube.currentView === CubeView.TOP || 340 | (verticalLaser.cursorVisible && !verticalLaser.cursorOnTop) && 341 | !verticalLaser.doubleCursor) 342 | return true 343 | else 344 | return false 345 | } 346 | 347 | anchors.verticalCenter: view3.verticalCenter 348 | percentage: root.currentIndex 349 | onPercentageChangedByUser: root.currentIndex = newPercentage 350 | } 351 | } 352 | } 353 | 354 | Item { 355 | id: markersArea 356 | anchors { 357 | bottom: parent.bottom 358 | bottomMargin: 6 359 | left: parent.left 360 | leftMargin: 10 361 | right: parent.right 362 | } 363 | height: 78 364 | 365 | BorderImage { 366 | id: markersInfo 367 | source: "../../resources/icons/s.png" 368 | 369 | width: 874 370 | border.left: 38; border.top: 39 371 | border.right: 38; border.bottom: 39 372 | opacity: 1 373 | 374 | Row { 375 | anchors { 376 | left: parent.left 377 | leftMargin: 10 378 | verticalCenter: parent.verticalCenter 379 | } 380 | spacing: 15 381 | 382 | Repeater { 383 | model: cube.markerModel.markersInFace(cube.currentView) 384 | delegate: Button { 385 | icon: cube.markerModel.typeToSmallImage(modelData.type) 386 | onClicked: { 387 | cube.editMarker(modelData.markerId) 388 | markerDescription.markerId = modelData.markerId 389 | markerDescription.text = cube.markerModel.getMarkerDescription(modelData.markerId) 390 | root.state = "editMarker" 391 | } 392 | } 393 | } 394 | 395 | add: Transition { 396 | id: addTransition 397 | property int duration: 180 398 | 399 | SequentialAnimation { 400 | PropertyAction { property: "scale"; value: addTransition.ViewTransition.index > 0 ? .7 : 1 } 401 | PropertyAction { property: "z"; value: 100 - addTransition.ViewTransition.index } 402 | PauseAnimation { duration: (addTransition.duration + 20)* addTransition.ViewTransition.index } 403 | ParallelAnimation { 404 | NumberAnimation { 405 | property: "x" 406 | from: (Math.max(0, addTransition.ViewTransition.index -1) * 88) 407 | duration: addTransition.duration 408 | } 409 | NumberAnimation { property: "scale"; to: 1; duration: addTransition.duration } 410 | } 411 | } 412 | } 413 | } 414 | } 415 | 416 | Image { 417 | opacity: markersInfo.opacity 418 | source: "../../resources/icons/s.png" 419 | anchors { 420 | verticalCenter: markersInfo.verticalCenter 421 | right: parent.right 422 | rightMargin: 10 423 | } 424 | 425 | Button { 426 | icon: "../../resources/icons/add.png" 427 | anchors.centerIn: parent 428 | onClicked: { 429 | var markerId = cube.addMarker() 430 | if (markerId > 0) { 431 | cube.editMarker(markerId, true) 432 | markerDescription.markerId = markerId 433 | markerDescription.text = "" 434 | root.state = "editMarker" 435 | } 436 | } 437 | } 438 | } 439 | } 440 | 441 | Image { 442 | source: "../../resources/icons/bg_edit_name.png" 443 | opacity: keyboardLoader.visible && root.state !== "editMarker" ? 1 : 0 444 | y: (hasEmbeddedKeyboard ? keyboardLoader.item.keyboardY : 768) - height 445 | z: 3 446 | } 447 | 448 | Image { 449 | id: markerBackground 450 | source: "../../resources/icons/bg_edit_marker.png" 451 | opacity: 0 452 | y: (hasEmbeddedKeyboard ? keyboardLoader.item.keyboardY : 768) - height 453 | z: 3 454 | 455 | Rectangle { 456 | anchors.bottom: parent.bottom 457 | height: 10 458 | width: parent.width 459 | visible: keyboardLoader.visible 460 | color: "#f5f6f8" 461 | } 462 | 463 | Image { 464 | id: markerDescription 465 | property alias text: textInput.text 466 | property int markerId: -1 467 | 468 | anchors.top: parent.top 469 | anchors.topMargin: 8 470 | anchors.left: parent.left 471 | anchors.leftMargin: 10 472 | 473 | source: "../../resources/icons/descrizione_bg.png" 474 | opacity: markerBackground.opacity 475 | clip: true 476 | 477 | TextEdit { 478 | id: textInput 479 | visible: root.state == "editMarker" 480 | anchors.fill: parent 481 | anchors.margins: 8 482 | font.pixelSize: 16 483 | wrapMode: TextInput.WordWrap 484 | color: "#939393" 485 | } 486 | } 487 | 488 | BorderImage { 489 | source: "../../resources/icons/s.png" 490 | 491 | anchors { 492 | left: markerDescription.right 493 | leftMargin: 10 494 | right: parent.right 495 | rightMargin: 10 496 | verticalCenter: markerDescription.verticalCenter 497 | } 498 | 499 | border.left: 38; border.top: 39 500 | border.right: 38; border.bottom: 39 501 | opacity: markerDescription.opacity 502 | 503 | Row { 504 | visible: root.state == "editMarker" 505 | spacing: 17 506 | anchors { 507 | verticalCenter: parent.verticalCenter 508 | left: parent.left 509 | leftMargin: 6 510 | } 511 | 512 | Button { 513 | icon: "../../resources/icons/remove.png" 514 | onClicked: { 515 | deleteDialog.show(mapToItem(null, width / 2, height / 2)) 516 | Qt.inputMethod.hide() 517 | } 518 | 519 | Connections { 520 | target: deleteDialog 521 | onAccepted: { 522 | deleteDialog.hide() 523 | root.state = "" 524 | cube.deleteMarker() 525 | } 526 | } 527 | } 528 | 529 | 530 | Item { 531 | height: 64 532 | width: 64 533 | } 534 | 535 | Button { 536 | icon: "../../resources/icons/annulla.png" 537 | onClicked: { 538 | markerDescription.markerId = -1 539 | cube.cancelEditMarker() 540 | Qt.inputMethod.hide() 541 | root.state = "" 542 | } 543 | } 544 | 545 | Button { 546 | icon: "../../resources/icons/conferma.png" 547 | onClicked: { 548 | cube.markerModel.setMarkerDescription(markerDescription.markerId, markerDescription.text) 549 | markerDescription.markerId = -1 550 | cube.confirmEditMarker() 551 | Qt.inputMethod.hide() 552 | root.state = "" 553 | } 554 | } 555 | } 556 | } 557 | } 558 | 559 | Rectangle { 560 | id: modalBackground 561 | z: 10 562 | anchors.centerIn: parent 563 | width: parent.width - 2 564 | height: parent.height - 2 565 | radius: 10 566 | color: Qt.rgba(1, 1, 1, 0.7) 567 | visible: opacity > 0 568 | state: "hidden" 569 | 570 | MouseArea { 571 | anchors.fill: parent 572 | } 573 | 574 | states: [ 575 | State { 576 | name: "hidden" 577 | PropertyChanges { 578 | target: modalBackground 579 | opacity: 0 580 | } 581 | } 582 | ] 583 | 584 | transitions: [ 585 | Transition { 586 | reversible: true 587 | PropertyAnimation { 588 | property: "opacity" 589 | duration: 300 590 | } 591 | } 592 | ] 593 | } 594 | 595 | Item { 596 | id: floater 597 | property url image 598 | property var updateFunc 599 | 600 | z: 20 601 | 602 | BorderImage { 603 | source: "../../resources/icons/box.png" 604 | border { top: 8; left: 8; right: 8; bottom: 8 } 605 | anchors.fill: parent 606 | } 607 | 608 | Image { 609 | source: floater.image 610 | anchors.fill: parent 611 | fillMode: Image.PreserveAspectFit 612 | } 613 | 614 | states: [ 615 | State { 616 | name: "" 617 | PropertyChanges { 618 | target: floater 619 | opacity: 1 620 | visible: false 621 | } 622 | }, 623 | 624 | State { 625 | name: "attached" 626 | PropertyChanges { 627 | target: floater 628 | visible: true 629 | opacity: 0 630 | x: cube.mapToItem(null, cube.width / 2 - floater.width / 2).x 631 | y: cube.mapToItem(null, cube.height / 2 - floater.height / 2).y 632 | width: 516 633 | height: 516 634 | } 635 | } 636 | ] 637 | 638 | transitions: [ 639 | Transition { 640 | to: "attached" 641 | SequentialAnimation { 642 | PropertyAnimation { 643 | properties: "x,y,width,height" 644 | duration: 300 645 | easing.type: Easing.InExpo 646 | } 647 | 648 | ScriptAction { script: floater.updateFunc() } 649 | 650 | PropertyAnimation { 651 | property: "opacity" 652 | duration: 100 653 | } 654 | } 655 | } 656 | ] 657 | } 658 | 659 | SearchDialog { 660 | id: searchDialog 661 | property bool show 662 | 663 | /*** private ***/ 664 | property string prevState 665 | /***************/ 666 | 667 | anchors { 668 | horizontalCenter: parent.horizontalCenter 669 | top: parent.top 670 | topMargin: 20 671 | } 672 | 673 | z: 11 674 | width: parent.width / 2 675 | height: parent.height * 0.9 676 | transformOrigin: Item.TopRight 677 | visible: opacity > 0 678 | state: "hidden" 679 | 680 | onSearchInputFocusedChanged: { 681 | // it doesn't make sense to resize the dialog if there's no 682 | // keyboard to make room for 683 | if (!hasEmbeddedKeyboard) 684 | return 685 | 686 | if (searchInputFocused) { 687 | prevState = state 688 | state = "resized" 689 | } 690 | else { 691 | state = prevState 692 | prevState = "" 693 | } 694 | } 695 | 696 | onShowChanged: { 697 | modalBackground.state = show ? "" : "hidden" 698 | state = show ? "" : "hidden" 699 | } 700 | 701 | onCloseRequest: show = false 702 | 703 | onProfileChangeRequest: { 704 | floater.updateFunc = function() { 705 | if (view == "top") 706 | cube.setConfiguration(CubeView.TOP, imageIndex / topImagesDir.count) 707 | else if (view == "side") 708 | cube.setConfiguration(CubeView.SIDE, imageIndex / sideImagesDir.count) 709 | else 710 | cube.setConfiguration(CubeView.FRONT, imageIndex / frontImagesDir.count) 711 | 712 | text1.text = Qt.formatDate(date, "dddd, MMMM d, yyyy") 713 | text2.text = name 714 | 715 | show = false 716 | floater.state = "" 717 | } 718 | 719 | // resize and position the floater on top of the selected image 720 | floater.width = geometry.w 721 | floater.height = geometry.h 722 | floater.x = geometry.x 723 | floater.y = geometry.y 724 | floater.visible = true 725 | floater.image = image 726 | 727 | // trigger transitions 728 | state = "fadeOut" 729 | floater.state = "attached" 730 | modalBackground.state = "hidden" 731 | } 732 | 733 | states: [ 734 | State { 735 | name: "hidden" 736 | PropertyChanges { 737 | target: searchDialog 738 | opacity: 0 739 | scale: 0 740 | anchors.horizontalCenterOffset: root.width / 4 741 | } 742 | }, 743 | 744 | State { 745 | name: "fadeOut" 746 | PropertyChanges { target: searchDialog; opacity: 0 } 747 | }, 748 | 749 | State { 750 | name: "resized" 751 | PropertyChanges { target: searchDialog; height: 430 } 752 | } 753 | 754 | ] 755 | 756 | transitions: [ 757 | Transition { 758 | reversible: true 759 | PropertyAnimation { 760 | properties: "height,opacity,scale,anchors.horizontalCenterOffset" 761 | duration: 300 762 | } 763 | } 764 | ] 765 | } 766 | 767 | MarkerDeleteDialog { 768 | id: deleteDialog 769 | 770 | z: 11 771 | transformOrigin: Item.BottomRight 772 | width: 400 773 | height: 200 774 | opacity: 0 775 | scale: 0 776 | 777 | function show(origin) { 778 | x = origin.x 779 | y = origin.y 780 | 781 | state = "visible" 782 | modalBackground.state = "show" 783 | } 784 | 785 | function hide() { 786 | state = "" 787 | modalBackground.state = "hidden" 788 | } 789 | 790 | onRejected: hide() 791 | 792 | states: [ 793 | State { 794 | name: "visible" 795 | PropertyChanges { 796 | target: deleteDialog 797 | opacity: 1 798 | scale: 1 799 | x: root.width / 2 - deleteDialog.width / 2 800 | y: root.height / 2 - deleteDialog.height / 2 801 | } 802 | } 803 | ] 804 | 805 | transitions: Transition { 806 | reversible: true 807 | PropertyAnimation { 808 | duration: 300; 809 | properties: "opacity,scale,x,y" 810 | } 811 | } 812 | } 813 | 814 | states: State { 815 | name: "editMarker" 816 | PropertyChanges { target: markersInfo; opacity: 0 } 817 | PropertyChanges { target: markerBackground; opacity: 1 } 818 | } 819 | 820 | transitions: [ 821 | Transition { 822 | from: "" 823 | to: "editMarker" 824 | SequentialAnimation { 825 | NumberAnimation { target: markersInfo; property: "opacity"; duration: 200 } 826 | NumberAnimation { target: markerBackground; property: "opacity"; duration: 200 } 827 | } 828 | }, 829 | Transition { 830 | from: "editMarker" 831 | to: "" 832 | SequentialAnimation { 833 | NumberAnimation { target: markerBackground; property: "opacity"; duration: 200 } 834 | NumberAnimation { target: markersInfo; property: "opacity"; duration: 200 } 835 | } 836 | } 837 | ] 838 | 839 | Loader { 840 | id: keyboardLoader 841 | visible: false 842 | anchors.fill: parent 843 | z: 101 844 | source: hasEmbeddedKeyboard ? MInputMethodQuick.qmlFileName : "" 845 | 846 | Connections { 847 | id: kbdConn 848 | target: hasEmbeddedKeyboard ? MInputMethodQuick : null 849 | 850 | onActiveChanged: { 851 | if (MInputMethodQuick.active) { 852 | keyboardLoader.visible = true 853 | } 854 | else 855 | hideKeyboardTimer.start() 856 | } 857 | } 858 | 859 | Timer { 860 | id: hideKeyboardTimer 861 | interval: 500 // the time needed by the keyboard to perform the hide animation 862 | onTriggered: keyboardLoader.visible = false 863 | } 864 | } 865 | } 866 | -------------------------------------------------------------------------------- /qtquick2applicationviewer/qtquick2applicationviewer.cpp: -------------------------------------------------------------------------------- 1 | // checksum 0x440d version 0x90003 2 | /* 3 | This file was generated by the Qt Quick 2 Application wizard of Qt Creator. 4 | QtQuick2ApplicationViewer is a convenience class containing mobile device specific 5 | code such as screen orientation handling. Also QML paths and debugging are 6 | handled here. 7 | It is recommended not to modify this file, since newer versions of Qt Creator 8 | may offer an updated version of it. 9 | */ 10 | 11 | #include "qtquick2applicationviewer.h" 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | class QtQuick2ApplicationViewerPrivate 18 | { 19 | QString mainQmlFile; 20 | friend class QtQuick2ApplicationViewer; 21 | static QString adjustPath(const QString &path); 22 | }; 23 | 24 | QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) 25 | { 26 | #if defined(Q_OS_MAC) 27 | if (!QDir::isAbsolutePath(path)) 28 | return QString::fromLatin1("%1/../Resources/%2") 29 | .arg(QCoreApplication::applicationDirPath(), path); 30 | #elif defined(Q_OS_QNX) 31 | if (!QDir::isAbsolutePath(path)) 32 | return QString::fromLatin1("app/native/%1").arg(path); 33 | #elif defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) 34 | const QString pathInInstallDir = 35 | QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); 36 | if (QFileInfo(pathInInstallDir).exists()) 37 | return pathInInstallDir; 38 | #endif 39 | return path; 40 | } 41 | 42 | QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) 43 | : QQuickView(parent) 44 | , d(new QtQuick2ApplicationViewerPrivate()) 45 | { 46 | connect(engine(), SIGNAL(quit()), SLOT(close())); 47 | setResizeMode(QQuickView::SizeRootObjectToView); 48 | } 49 | 50 | QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() 51 | { 52 | delete d; 53 | } 54 | 55 | void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) 56 | { 57 | d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); 58 | #ifdef Q_OS_ANDROID 59 | setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); 60 | #else 61 | setSource(QUrl::fromLocalFile(d->mainQmlFile)); 62 | #endif 63 | } 64 | 65 | void QtQuick2ApplicationViewer::addImportPath(const QString &path) 66 | { 67 | engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); 68 | } 69 | 70 | void QtQuick2ApplicationViewer::showExpanded() 71 | { 72 | #if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) 73 | showFullScreen(); 74 | #else 75 | show(); 76 | #endif 77 | } 78 | -------------------------------------------------------------------------------- /qtquick2applicationviewer/qtquick2applicationviewer.h: -------------------------------------------------------------------------------- 1 | // checksum 0xfde6 version 0x90003 2 | /* 3 | This file was generated by the Qt Quick 2 Application wizard of Qt Creator. 4 | QtQuick2ApplicationViewer is a convenience class containing mobile device specific 5 | code such as screen orientation handling. Also QML paths and debugging are 6 | handled here. 7 | It is recommended not to modify this file, since newer versions of Qt Creator 8 | may offer an updated version of it. 9 | */ 10 | 11 | #ifndef QTQUICK2APPLICATIONVIEWER_H 12 | #define QTQUICK2APPLICATIONVIEWER_H 13 | 14 | #include 15 | 16 | class QtQuick2ApplicationViewer : public QQuickView 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | explicit QtQuick2ApplicationViewer(QWindow *parent = 0); 22 | virtual ~QtQuick2ApplicationViewer(); 23 | 24 | void setMainQmlFile(const QString &file); 25 | void addImportPath(const QString &path); 26 | 27 | void showExpanded(); 28 | 29 | private: 30 | class QtQuick2ApplicationViewerPrivate *d; 31 | }; 32 | 33 | #endif // QTQUICK2APPLICATIONVIEWER_H 34 | -------------------------------------------------------------------------------- /qtquick2applicationviewer/qtquick2applicationviewer.pri: -------------------------------------------------------------------------------- 1 | # checksum 0x7b0d version 0x90003 2 | # This file was generated by the Qt Quick 2 Application wizard of Qt Creator. 3 | # The code below adds the QtQuick2ApplicationViewer to the project and handles 4 | # the activation of QML debugging. 5 | # It is recommended not to modify this file, since newer versions of Qt Creator 6 | # may offer an updated version of it. 7 | 8 | QT += qml quick 9 | 10 | SOURCES += $$PWD/qtquick2applicationviewer.cpp 11 | HEADERS += $$PWD/qtquick2applicationviewer.h 12 | INCLUDEPATH += $$PWD 13 | # This file was generated by an application wizard of Qt Creator. 14 | # The code below handles deployment to Android and Maemo, aswell as copying 15 | # of the application data to shadow build directories on desktop. 16 | # It is recommended not to modify this file, since newer versions of Qt Creator 17 | # may offer an updated version of it. 18 | 19 | defineTest(qtcAddDeployment) { 20 | for(deploymentfolder, DEPLOYMENTFOLDERS) { 21 | item = item$${deploymentfolder} 22 | greaterThan(QT_MAJOR_VERSION, 4) { 23 | itemsources = $${item}.files 24 | } else { 25 | itemsources = $${item}.sources 26 | } 27 | $$itemsources = $$eval($${deploymentfolder}.source) 28 | itempath = $${item}.path 29 | $$itempath= $$eval($${deploymentfolder}.target) 30 | export($$itemsources) 31 | export($$itempath) 32 | DEPLOYMENT += $$item 33 | } 34 | 35 | MAINPROFILEPWD = $$PWD 36 | 37 | android-no-sdk { 38 | for(deploymentfolder, DEPLOYMENTFOLDERS) { 39 | item = item$${deploymentfolder} 40 | itemfiles = $${item}.files 41 | $$itemfiles = $$eval($${deploymentfolder}.source) 42 | itempath = $${item}.path 43 | $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) 44 | export($$itemfiles) 45 | export($$itempath) 46 | INSTALLS += $$item 47 | } 48 | 49 | target.path = /data/user/qt 50 | 51 | export(target.path) 52 | INSTALLS += target 53 | } else:android { 54 | for(deploymentfolder, DEPLOYMENTFOLDERS) { 55 | item = item$${deploymentfolder} 56 | itemfiles = $${item}.files 57 | $$itemfiles = $$eval($${deploymentfolder}.source) 58 | itempath = $${item}.path 59 | $$itempath = /assets/$$eval($${deploymentfolder}.target) 60 | export($$itemfiles) 61 | export($$itempath) 62 | INSTALLS += $$item 63 | } 64 | 65 | x86 { 66 | target.path = /libs/x86 67 | } else: armeabi-v7a { 68 | target.path = /libs/armeabi-v7a 69 | } else { 70 | target.path = /libs/armeabi 71 | } 72 | 73 | export(target.path) 74 | INSTALLS += target 75 | } else:win32 { 76 | copyCommand = 77 | for(deploymentfolder, DEPLOYMENTFOLDERS) { 78 | source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) 79 | source = $$replace(source, /, \\) 80 | sourcePathSegments = $$split(source, \\) 81 | target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) 82 | target = $$replace(target, /, \\) 83 | target ~= s,\\\\\\.?\\\\,\\, 84 | !isEqual(source,$$target) { 85 | !isEmpty(copyCommand):copyCommand += && 86 | isEqual(QMAKE_DIR_SEP, \\) { 87 | copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" 88 | } else { 89 | source = $$replace(source, \\\\, /) 90 | target = $$OUT_PWD/$$eval($${deploymentfolder}.target) 91 | target = $$replace(target, \\\\, /) 92 | copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" 93 | } 94 | } 95 | } 96 | !isEmpty(copyCommand) { 97 | copyCommand = @echo Copying application data... && $$copyCommand 98 | copydeploymentfolders.commands = $$copyCommand 99 | first.depends = $(first) copydeploymentfolders 100 | export(first.depends) 101 | export(copydeploymentfolders.commands) 102 | QMAKE_EXTRA_TARGETS += first copydeploymentfolders 103 | } 104 | } else:unix { 105 | maemo5 { 106 | desktopfile.files = $${TARGET}.desktop 107 | desktopfile.path = /usr/share/applications/hildon 108 | icon.files = $${TARGET}64.png 109 | icon.path = /usr/share/icons/hicolor/64x64/apps 110 | } else:!isEmpty(MEEGO_VERSION_MAJOR) { 111 | desktopfile.files = $${TARGET}_harmattan.desktop 112 | desktopfile.path = /usr/share/applications 113 | icon.files = $${TARGET}80.png 114 | icon.path = /usr/share/icons/hicolor/80x80/apps 115 | } else { # Assumed to be a Desktop Unix 116 | copyCommand = 117 | for(deploymentfolder, DEPLOYMENTFOLDERS) { 118 | source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) 119 | source = $$replace(source, \\\\, /) 120 | macx { 121 | target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) 122 | } else { 123 | target = $$OUT_PWD/$$eval($${deploymentfolder}.target) 124 | } 125 | target = $$replace(target, \\\\, /) 126 | sourcePathSegments = $$split(source, /) 127 | targetFullPath = $$target/$$last(sourcePathSegments) 128 | targetFullPath ~= s,/\\.?/,/, 129 | !isEqual(source,$$targetFullPath) { 130 | !isEmpty(copyCommand):copyCommand += && 131 | copyCommand += $(MKDIR) \"$$target\" 132 | copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" 133 | } 134 | } 135 | !isEmpty(copyCommand) { 136 | copyCommand = @echo Copying application data... && $$copyCommand 137 | copydeploymentfolders.commands = $$copyCommand 138 | first.depends = $(first) copydeploymentfolders 139 | export(first.depends) 140 | export(copydeploymentfolders.commands) 141 | QMAKE_EXTRA_TARGETS += first copydeploymentfolders 142 | } 143 | } 144 | !isEmpty(target.path) { 145 | installPrefix = $${target.path} 146 | } else { 147 | installPrefix = /opt/$${TARGET} 148 | } 149 | for(deploymentfolder, DEPLOYMENTFOLDERS) { 150 | item = item$${deploymentfolder} 151 | itemfiles = $${item}.files 152 | $$itemfiles = $$eval($${deploymentfolder}.source) 153 | itempath = $${item}.path 154 | $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) 155 | export($$itemfiles) 156 | export($$itempath) 157 | INSTALLS += $$item 158 | } 159 | 160 | !isEmpty(desktopfile.path) { 161 | export(icon.files) 162 | export(icon.path) 163 | export(desktopfile.files) 164 | export(desktopfile.path) 165 | INSTALLS += icon desktopfile 166 | } 167 | 168 | isEmpty(target.path) { 169 | target.path = $${installPrefix}/bin 170 | export(target.path) 171 | } 172 | INSTALLS += target 173 | } 174 | 175 | export (ICON) 176 | export (INSTALLS) 177 | export (DEPLOYMENT) 178 | export (LIBS) 179 | export (QMAKE_EXTRA_TARGETS) 180 | } 181 | -------------------------------------------------------------------------------- /resources/fonts/VodafoneRg.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/fonts/VodafoneRg.ttf -------------------------------------------------------------------------------- /resources/fonts/VodafoneRg_Bd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/fonts/VodafoneRg_Bd.ttf -------------------------------------------------------------------------------- /resources/icons/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/001.png -------------------------------------------------------------------------------- /resources/icons/001s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/001s.png -------------------------------------------------------------------------------- /resources/icons/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/002.png -------------------------------------------------------------------------------- /resources/icons/002s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/002s.png -------------------------------------------------------------------------------- /resources/icons/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/003.png -------------------------------------------------------------------------------- /resources/icons/003s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/003s.png -------------------------------------------------------------------------------- /resources/icons/004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/004.png -------------------------------------------------------------------------------- /resources/icons/004s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/004s.png -------------------------------------------------------------------------------- /resources/icons/005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/005.png -------------------------------------------------------------------------------- /resources/icons/005s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/005s.png -------------------------------------------------------------------------------- /resources/icons/006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/006.png -------------------------------------------------------------------------------- /resources/icons/006s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/006s.png -------------------------------------------------------------------------------- /resources/icons/007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/007.png -------------------------------------------------------------------------------- /resources/icons/007s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/007s.png -------------------------------------------------------------------------------- /resources/icons/008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/008.png -------------------------------------------------------------------------------- /resources/icons/008s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/008s.png -------------------------------------------------------------------------------- /resources/icons/009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/009.png -------------------------------------------------------------------------------- /resources/icons/009s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/009s.png -------------------------------------------------------------------------------- /resources/icons/010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/010.png -------------------------------------------------------------------------------- /resources/icons/010s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/010s.png -------------------------------------------------------------------------------- /resources/icons/011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/011.png -------------------------------------------------------------------------------- /resources/icons/011s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/011s.png -------------------------------------------------------------------------------- /resources/icons/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/add.png -------------------------------------------------------------------------------- /resources/icons/annulla.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/annulla.png -------------------------------------------------------------------------------- /resources/icons/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/bg.png -------------------------------------------------------------------------------- /resources/icons/bg_edit_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/bg_edit_marker.png -------------------------------------------------------------------------------- /resources/icons/bg_edit_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/bg_edit_name.png -------------------------------------------------------------------------------- /resources/icons/bigbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/bigbox.png -------------------------------------------------------------------------------- /resources/icons/bigbox_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/bigbox_bg.png -------------------------------------------------------------------------------- /resources/icons/box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/box.png -------------------------------------------------------------------------------- /resources/icons/box_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/box_bg.png -------------------------------------------------------------------------------- /resources/icons/btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/btn.png -------------------------------------------------------------------------------- /resources/icons/btn_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/btn_highlighted.png -------------------------------------------------------------------------------- /resources/icons/buttons_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/buttons_0.png -------------------------------------------------------------------------------- /resources/icons/buttons_d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/buttons_d.png -------------------------------------------------------------------------------- /resources/icons/buttons_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/buttons_l.png -------------------------------------------------------------------------------- /resources/icons/buttons_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/buttons_r.png -------------------------------------------------------------------------------- /resources/icons/buttons_u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/buttons_u.png -------------------------------------------------------------------------------- /resources/icons/conferma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/conferma.png -------------------------------------------------------------------------------- /resources/icons/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/delete.png -------------------------------------------------------------------------------- /resources/icons/descrizione_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/descrizione_bg.png -------------------------------------------------------------------------------- /resources/icons/dialog_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/dialog_box.png -------------------------------------------------------------------------------- /resources/icons/glifo_rotazione.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/glifo_rotazione.png -------------------------------------------------------------------------------- /resources/icons/incavo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/incavo.png -------------------------------------------------------------------------------- /resources/icons/indicatore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/indicatore.png -------------------------------------------------------------------------------- /resources/icons/laser_orizontale_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_orizontale_off.png -------------------------------------------------------------------------------- /resources/icons/laser_orizontale_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_orizontale_on.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_d_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_d_off.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_d_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_d_on.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_u_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_u_off.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_u_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_u_on.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_xl_bottom_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_xl_bottom_off.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_xl_bottom_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_xl_bottom_on.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_xl_top_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_xl_top_off.png -------------------------------------------------------------------------------- /resources/icons/laser_verticale_xl_top_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/laser_verticale_xl_top_on.png -------------------------------------------------------------------------------- /resources/icons/logo01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/logo01.png -------------------------------------------------------------------------------- /resources/icons/logo02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/logo02.png -------------------------------------------------------------------------------- /resources/icons/notches_oriz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/notches_oriz.png -------------------------------------------------------------------------------- /resources/icons/notches_vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/notches_vert.png -------------------------------------------------------------------------------- /resources/icons/orizzontale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/orizzontale.png -------------------------------------------------------------------------------- /resources/icons/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/remove.png -------------------------------------------------------------------------------- /resources/icons/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/s.png -------------------------------------------------------------------------------- /resources/icons/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/search.png -------------------------------------------------------------------------------- /resources/icons/search_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/search_bar.png -------------------------------------------------------------------------------- /resources/icons/separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/separator.png -------------------------------------------------------------------------------- /resources/icons/shared/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/shared/close.png -------------------------------------------------------------------------------- /resources/icons/ticks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/ticks.png -------------------------------------------------------------------------------- /resources/icons/verticale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/icons/verticale.png -------------------------------------------------------------------------------- /resources/rear/rear.mng: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear.mng -------------------------------------------------------------------------------- /resources/rear/rear000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear000.png -------------------------------------------------------------------------------- /resources/rear/rear001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear001.png -------------------------------------------------------------------------------- /resources/rear/rear002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear002.png -------------------------------------------------------------------------------- /resources/rear/rear003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear003.png -------------------------------------------------------------------------------- /resources/rear/rear004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear004.png -------------------------------------------------------------------------------- /resources/rear/rear005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear005.png -------------------------------------------------------------------------------- /resources/rear/rear006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear006.png -------------------------------------------------------------------------------- /resources/rear/rear007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear007.png -------------------------------------------------------------------------------- /resources/rear/rear008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear008.png -------------------------------------------------------------------------------- /resources/rear/rear009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear009.png -------------------------------------------------------------------------------- /resources/rear/rear010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear010.png -------------------------------------------------------------------------------- /resources/rear/rear011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear011.png -------------------------------------------------------------------------------- /resources/rear/rear012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear012.png -------------------------------------------------------------------------------- /resources/rear/rear013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear013.png -------------------------------------------------------------------------------- /resources/rear/rear014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear014.png -------------------------------------------------------------------------------- /resources/rear/rear015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear015.png -------------------------------------------------------------------------------- /resources/rear/rear016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear016.png -------------------------------------------------------------------------------- /resources/rear/rear017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear017.png -------------------------------------------------------------------------------- /resources/rear/rear018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear018.png -------------------------------------------------------------------------------- /resources/rear/rear019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear019.png -------------------------------------------------------------------------------- /resources/rear/rear020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear020.png -------------------------------------------------------------------------------- /resources/rear/rear021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear021.png -------------------------------------------------------------------------------- /resources/rear/rear022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear022.png -------------------------------------------------------------------------------- /resources/rear/rear023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear023.png -------------------------------------------------------------------------------- /resources/rear/rear024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear024.png -------------------------------------------------------------------------------- /resources/rear/rear025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear025.png -------------------------------------------------------------------------------- /resources/rear/rear026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear026.png -------------------------------------------------------------------------------- /resources/rear/rear027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear027.png -------------------------------------------------------------------------------- /resources/rear/rear028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear028.png -------------------------------------------------------------------------------- /resources/rear/rear029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear029.png -------------------------------------------------------------------------------- /resources/rear/rear030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear030.png -------------------------------------------------------------------------------- /resources/rear/rear031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear031.png -------------------------------------------------------------------------------- /resources/rear/rear032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear032.png -------------------------------------------------------------------------------- /resources/rear/rear033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear033.png -------------------------------------------------------------------------------- /resources/rear/rear034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear034.png -------------------------------------------------------------------------------- /resources/rear/rear035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear035.png -------------------------------------------------------------------------------- /resources/rear/rear036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear036.png -------------------------------------------------------------------------------- /resources/rear/rear037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear037.png -------------------------------------------------------------------------------- /resources/rear/rear038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear038.png -------------------------------------------------------------------------------- /resources/rear/rear039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear039.png -------------------------------------------------------------------------------- /resources/rear/rear040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear040.png -------------------------------------------------------------------------------- /resources/rear/rear041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear041.png -------------------------------------------------------------------------------- /resources/rear/rear042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear042.png -------------------------------------------------------------------------------- /resources/rear/rear043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear043.png -------------------------------------------------------------------------------- /resources/rear/rear044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear044.png -------------------------------------------------------------------------------- /resources/rear/rear045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear045.png -------------------------------------------------------------------------------- /resources/rear/rear046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear046.png -------------------------------------------------------------------------------- /resources/rear/rear047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear047.png -------------------------------------------------------------------------------- /resources/rear/rear048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear048.png -------------------------------------------------------------------------------- /resources/rear/rear049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear049.png -------------------------------------------------------------------------------- /resources/rear/rear050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear050.png -------------------------------------------------------------------------------- /resources/rear/rear051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear051.png -------------------------------------------------------------------------------- /resources/rear/rear052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear052.png -------------------------------------------------------------------------------- /resources/rear/rear053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear053.png -------------------------------------------------------------------------------- /resources/rear/rear054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear054.png -------------------------------------------------------------------------------- /resources/rear/rear055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear055.png -------------------------------------------------------------------------------- /resources/rear/rear056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear056.png -------------------------------------------------------------------------------- /resources/rear/rear057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear057.png -------------------------------------------------------------------------------- /resources/rear/rear058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear058.png -------------------------------------------------------------------------------- /resources/rear/rear059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear059.png -------------------------------------------------------------------------------- /resources/rear/rear060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear060.png -------------------------------------------------------------------------------- /resources/rear/rear061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear061.png -------------------------------------------------------------------------------- /resources/rear/rear062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear062.png -------------------------------------------------------------------------------- /resources/rear/rear063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear063.png -------------------------------------------------------------------------------- /resources/rear/rear064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear064.png -------------------------------------------------------------------------------- /resources/rear/rear065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear065.png -------------------------------------------------------------------------------- /resources/rear/rear066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear066.png -------------------------------------------------------------------------------- /resources/rear/rear067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear067.png -------------------------------------------------------------------------------- /resources/rear/rear068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear068.png -------------------------------------------------------------------------------- /resources/rear/rear069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear069.png -------------------------------------------------------------------------------- /resources/rear/rear070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear070.png -------------------------------------------------------------------------------- /resources/rear/rear071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear071.png -------------------------------------------------------------------------------- /resources/rear/rear072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear072.png -------------------------------------------------------------------------------- /resources/rear/rear073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear073.png -------------------------------------------------------------------------------- /resources/rear/rear074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear074.png -------------------------------------------------------------------------------- /resources/rear/rear075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear075.png -------------------------------------------------------------------------------- /resources/rear/rear076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear076.png -------------------------------------------------------------------------------- /resources/rear/rear077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear077.png -------------------------------------------------------------------------------- /resources/rear/rear078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear078.png -------------------------------------------------------------------------------- /resources/rear/rear079.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear079.png -------------------------------------------------------------------------------- /resources/rear/rear080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear080.png -------------------------------------------------------------------------------- /resources/rear/rear081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear081.png -------------------------------------------------------------------------------- /resources/rear/rear082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear082.png -------------------------------------------------------------------------------- /resources/rear/rear083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear083.png -------------------------------------------------------------------------------- /resources/rear/rear084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear084.png -------------------------------------------------------------------------------- /resources/rear/rear085.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear085.png -------------------------------------------------------------------------------- /resources/rear/rear086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear086.png -------------------------------------------------------------------------------- /resources/rear/rear087.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear087.png -------------------------------------------------------------------------------- /resources/rear/rear088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear088.png -------------------------------------------------------------------------------- /resources/rear/rear089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear089.png -------------------------------------------------------------------------------- /resources/rear/rear090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/rear/rear090.png -------------------------------------------------------------------------------- /resources/side/side.mng: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side.mng -------------------------------------------------------------------------------- /resources/side/side000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side000.png -------------------------------------------------------------------------------- /resources/side/side001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side001.png -------------------------------------------------------------------------------- /resources/side/side002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side002.png -------------------------------------------------------------------------------- /resources/side/side003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side003.png -------------------------------------------------------------------------------- /resources/side/side004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side004.png -------------------------------------------------------------------------------- /resources/side/side005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side005.png -------------------------------------------------------------------------------- /resources/side/side006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side006.png -------------------------------------------------------------------------------- /resources/side/side007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side007.png -------------------------------------------------------------------------------- /resources/side/side008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side008.png -------------------------------------------------------------------------------- /resources/side/side009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side009.png -------------------------------------------------------------------------------- /resources/side/side010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side010.png -------------------------------------------------------------------------------- /resources/side/side011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side011.png -------------------------------------------------------------------------------- /resources/side/side012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side012.png -------------------------------------------------------------------------------- /resources/side/side013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side013.png -------------------------------------------------------------------------------- /resources/side/side014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side014.png -------------------------------------------------------------------------------- /resources/side/side015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side015.png -------------------------------------------------------------------------------- /resources/side/side016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side016.png -------------------------------------------------------------------------------- /resources/side/side017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side017.png -------------------------------------------------------------------------------- /resources/side/side018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side018.png -------------------------------------------------------------------------------- /resources/side/side019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side019.png -------------------------------------------------------------------------------- /resources/side/side020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side020.png -------------------------------------------------------------------------------- /resources/side/side021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side021.png -------------------------------------------------------------------------------- /resources/side/side022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side022.png -------------------------------------------------------------------------------- /resources/side/side023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side023.png -------------------------------------------------------------------------------- /resources/side/side024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side024.png -------------------------------------------------------------------------------- /resources/side/side025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side025.png -------------------------------------------------------------------------------- /resources/side/side026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side026.png -------------------------------------------------------------------------------- /resources/side/side027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side027.png -------------------------------------------------------------------------------- /resources/side/side028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side028.png -------------------------------------------------------------------------------- /resources/side/side029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side029.png -------------------------------------------------------------------------------- /resources/side/side030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side030.png -------------------------------------------------------------------------------- /resources/side/side031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side031.png -------------------------------------------------------------------------------- /resources/side/side032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side032.png -------------------------------------------------------------------------------- /resources/side/side033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side033.png -------------------------------------------------------------------------------- /resources/side/side034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side034.png -------------------------------------------------------------------------------- /resources/side/side035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side035.png -------------------------------------------------------------------------------- /resources/side/side036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side036.png -------------------------------------------------------------------------------- /resources/side/side037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side037.png -------------------------------------------------------------------------------- /resources/side/side038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side038.png -------------------------------------------------------------------------------- /resources/side/side039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side039.png -------------------------------------------------------------------------------- /resources/side/side040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side040.png -------------------------------------------------------------------------------- /resources/side/side041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side041.png -------------------------------------------------------------------------------- /resources/side/side042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side042.png -------------------------------------------------------------------------------- /resources/side/side043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side043.png -------------------------------------------------------------------------------- /resources/side/side044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side044.png -------------------------------------------------------------------------------- /resources/side/side045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side045.png -------------------------------------------------------------------------------- /resources/side/side046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side046.png -------------------------------------------------------------------------------- /resources/side/side047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side047.png -------------------------------------------------------------------------------- /resources/side/side048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side048.png -------------------------------------------------------------------------------- /resources/side/side049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side049.png -------------------------------------------------------------------------------- /resources/side/side050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side050.png -------------------------------------------------------------------------------- /resources/side/side051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side051.png -------------------------------------------------------------------------------- /resources/side/side052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side052.png -------------------------------------------------------------------------------- /resources/side/side053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side053.png -------------------------------------------------------------------------------- /resources/side/side054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side054.png -------------------------------------------------------------------------------- /resources/side/side055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side055.png -------------------------------------------------------------------------------- /resources/side/side056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side056.png -------------------------------------------------------------------------------- /resources/side/side057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side057.png -------------------------------------------------------------------------------- /resources/side/side058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side058.png -------------------------------------------------------------------------------- /resources/side/side059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side059.png -------------------------------------------------------------------------------- /resources/side/side060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side060.png -------------------------------------------------------------------------------- /resources/side/side061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side061.png -------------------------------------------------------------------------------- /resources/side/side062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side062.png -------------------------------------------------------------------------------- /resources/side/side063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side063.png -------------------------------------------------------------------------------- /resources/side/side064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side064.png -------------------------------------------------------------------------------- /resources/side/side065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side065.png -------------------------------------------------------------------------------- /resources/side/side066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side066.png -------------------------------------------------------------------------------- /resources/side/side067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side067.png -------------------------------------------------------------------------------- /resources/side/side068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side068.png -------------------------------------------------------------------------------- /resources/side/side069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side069.png -------------------------------------------------------------------------------- /resources/side/side070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side070.png -------------------------------------------------------------------------------- /resources/side/side071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side071.png -------------------------------------------------------------------------------- /resources/side/side072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side072.png -------------------------------------------------------------------------------- /resources/side/side073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side073.png -------------------------------------------------------------------------------- /resources/side/side074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side074.png -------------------------------------------------------------------------------- /resources/side/side075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side075.png -------------------------------------------------------------------------------- /resources/side/side076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side076.png -------------------------------------------------------------------------------- /resources/side/side077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side077.png -------------------------------------------------------------------------------- /resources/side/side078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side078.png -------------------------------------------------------------------------------- /resources/side/side079.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side079.png -------------------------------------------------------------------------------- /resources/side/side080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side080.png -------------------------------------------------------------------------------- /resources/side/side081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side081.png -------------------------------------------------------------------------------- /resources/side/side082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side082.png -------------------------------------------------------------------------------- /resources/side/side083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side083.png -------------------------------------------------------------------------------- /resources/side/side084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side084.png -------------------------------------------------------------------------------- /resources/side/side085.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side085.png -------------------------------------------------------------------------------- /resources/side/side086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side086.png -------------------------------------------------------------------------------- /resources/side/side087.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side087.png -------------------------------------------------------------------------------- /resources/side/side088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side088.png -------------------------------------------------------------------------------- /resources/side/side089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side089.png -------------------------------------------------------------------------------- /resources/side/side090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/side/side090.png -------------------------------------------------------------------------------- /resources/top/top.mng: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top.mng -------------------------------------------------------------------------------- /resources/top/top000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top000.png -------------------------------------------------------------------------------- /resources/top/top001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top001.png -------------------------------------------------------------------------------- /resources/top/top002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top002.png -------------------------------------------------------------------------------- /resources/top/top003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top003.png -------------------------------------------------------------------------------- /resources/top/top004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top004.png -------------------------------------------------------------------------------- /resources/top/top005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top005.png -------------------------------------------------------------------------------- /resources/top/top006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top006.png -------------------------------------------------------------------------------- /resources/top/top007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top007.png -------------------------------------------------------------------------------- /resources/top/top008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top008.png -------------------------------------------------------------------------------- /resources/top/top009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top009.png -------------------------------------------------------------------------------- /resources/top/top010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top010.png -------------------------------------------------------------------------------- /resources/top/top011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top011.png -------------------------------------------------------------------------------- /resources/top/top012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top012.png -------------------------------------------------------------------------------- /resources/top/top013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top013.png -------------------------------------------------------------------------------- /resources/top/top014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top014.png -------------------------------------------------------------------------------- /resources/top/top015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top015.png -------------------------------------------------------------------------------- /resources/top/top016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top016.png -------------------------------------------------------------------------------- /resources/top/top017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top017.png -------------------------------------------------------------------------------- /resources/top/top018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top018.png -------------------------------------------------------------------------------- /resources/top/top019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top019.png -------------------------------------------------------------------------------- /resources/top/top020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top020.png -------------------------------------------------------------------------------- /resources/top/top021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top021.png -------------------------------------------------------------------------------- /resources/top/top022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top022.png -------------------------------------------------------------------------------- /resources/top/top023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top023.png -------------------------------------------------------------------------------- /resources/top/top024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top024.png -------------------------------------------------------------------------------- /resources/top/top025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top025.png -------------------------------------------------------------------------------- /resources/top/top026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top026.png -------------------------------------------------------------------------------- /resources/top/top027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top027.png -------------------------------------------------------------------------------- /resources/top/top028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top028.png -------------------------------------------------------------------------------- /resources/top/top029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top029.png -------------------------------------------------------------------------------- /resources/top/top030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top030.png -------------------------------------------------------------------------------- /resources/top/top031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top031.png -------------------------------------------------------------------------------- /resources/top/top032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top032.png -------------------------------------------------------------------------------- /resources/top/top033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top033.png -------------------------------------------------------------------------------- /resources/top/top034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top034.png -------------------------------------------------------------------------------- /resources/top/top035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top035.png -------------------------------------------------------------------------------- /resources/top/top036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top036.png -------------------------------------------------------------------------------- /resources/top/top037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top037.png -------------------------------------------------------------------------------- /resources/top/top038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top038.png -------------------------------------------------------------------------------- /resources/top/top039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top039.png -------------------------------------------------------------------------------- /resources/top/top040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top040.png -------------------------------------------------------------------------------- /resources/top/top041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top041.png -------------------------------------------------------------------------------- /resources/top/top042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top042.png -------------------------------------------------------------------------------- /resources/top/top043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top043.png -------------------------------------------------------------------------------- /resources/top/top044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top044.png -------------------------------------------------------------------------------- /resources/top/top045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top045.png -------------------------------------------------------------------------------- /resources/top/top046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top046.png -------------------------------------------------------------------------------- /resources/top/top047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top047.png -------------------------------------------------------------------------------- /resources/top/top048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top048.png -------------------------------------------------------------------------------- /resources/top/top049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top049.png -------------------------------------------------------------------------------- /resources/top/top050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top050.png -------------------------------------------------------------------------------- /resources/top/top051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top051.png -------------------------------------------------------------------------------- /resources/top/top052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top052.png -------------------------------------------------------------------------------- /resources/top/top053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top053.png -------------------------------------------------------------------------------- /resources/top/top054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top054.png -------------------------------------------------------------------------------- /resources/top/top055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top055.png -------------------------------------------------------------------------------- /resources/top/top056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top056.png -------------------------------------------------------------------------------- /resources/top/top057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top057.png -------------------------------------------------------------------------------- /resources/top/top058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top058.png -------------------------------------------------------------------------------- /resources/top/top059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top059.png -------------------------------------------------------------------------------- /resources/top/top060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top060.png -------------------------------------------------------------------------------- /resources/top/top061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top061.png -------------------------------------------------------------------------------- /resources/top/top062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top062.png -------------------------------------------------------------------------------- /resources/top/top063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top063.png -------------------------------------------------------------------------------- /resources/top/top064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top064.png -------------------------------------------------------------------------------- /resources/top/top065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top065.png -------------------------------------------------------------------------------- /resources/top/top066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top066.png -------------------------------------------------------------------------------- /resources/top/top067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top067.png -------------------------------------------------------------------------------- /resources/top/top068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top068.png -------------------------------------------------------------------------------- /resources/top/top069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top069.png -------------------------------------------------------------------------------- /resources/top/top070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top070.png -------------------------------------------------------------------------------- /resources/top/top071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top071.png -------------------------------------------------------------------------------- /resources/top/top072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top072.png -------------------------------------------------------------------------------- /resources/top/top073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top073.png -------------------------------------------------------------------------------- /resources/top/top074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top074.png -------------------------------------------------------------------------------- /resources/top/top075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top075.png -------------------------------------------------------------------------------- /resources/top/top076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top076.png -------------------------------------------------------------------------------- /resources/top/top077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top077.png -------------------------------------------------------------------------------- /resources/top/top078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top078.png -------------------------------------------------------------------------------- /resources/top/top079.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top079.png -------------------------------------------------------------------------------- /resources/top/top080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top080.png -------------------------------------------------------------------------------- /resources/top/top081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top081.png -------------------------------------------------------------------------------- /resources/top/top082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top082.png -------------------------------------------------------------------------------- /resources/top/top083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top083.png -------------------------------------------------------------------------------- /resources/top/top084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top084.png -------------------------------------------------------------------------------- /resources/top/top085.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top085.png -------------------------------------------------------------------------------- /resources/top/top086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top086.png -------------------------------------------------------------------------------- /resources/top/top087.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top087.png -------------------------------------------------------------------------------- /resources/top/top088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top088.png -------------------------------------------------------------------------------- /resources/top/top089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top089.png -------------------------------------------------------------------------------- /resources/top/top090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/develer-staff/demo-qml/a3d99377c3148b2a19d70ee6bf1a2a514ad6f0c6/resources/top/top090.png --------------------------------------------------------------------------------