Initial commit from SigLAB codebase

This commit is contained in:
Alex Spataru 2020-10-18 06:50:26 -05:00
commit d92d567bc7
244 changed files with 19114 additions and 0 deletions

94
.clang-format Normal file
View File

@ -0,0 +1,94 @@
# Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.com>
#
# You may use this file under the terms of the 3-clause BSD license.
# See the file LICENSE from this package for details.
# This is the clang-format configuration style to be used by Qt,
# based on the rules from https://wiki.qt.io/Qt_Coding_Style and
# https://wiki.qt.io/Coding_Conventions
---
# Webkit style was loosely based on the Qt style
BasedOnStyle: WebKit
Standard: Cpp11
# Leave the line breaks up to the user.
# Note that this may be changed at some point in the future.
ColumnLimit: 0
# How much weight do extra characters after the line length limit have.
# PenaltyExcessCharacter: 4
# Disable reflow of qdoc comments: indentation rules are different.
# Translation comments are also excluded.
CommentPragmas: "^!|^:"
# We want a space between the type and the star for pointer types.
PointerBindsToType: false
# We use template< without space.
SpaceAfterTemplateKeyword: false
# We want to break before the operators, but not before a '='.
BreakBeforeBinaryOperators: All
# Braces are usually attached, but not after functions or class declarations.
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
# Indent initializers by 3 spaces
ConstructorInitializerIndentWidth: 3
# No indentation for namespaces.
NamespaceIndentation: None
# Horizontally align arguments after an open bracket.
# The coding style does not specify the following, but this is what gives
# results closest to the existing code.
AlignAfterOpenBracket: true
AlwaysBreakTemplateDeclarations: true
# Ideally we should also allow less short function in a single line, but
# clang-format does not handle that.
AllowShortFunctionsOnASingleLine: Inline
# The coding style specifies some include order categories, but also tells to
# separate categories with an empty line. It does not specify the order within
# the categories. Since the SortInclude feature of clang-format does not
# re-order includes separated by empty lines, the feature is not used.
SortIncludes: false
# macros for which the opening brace stays attached.
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ]
IndentCaseLabels: true
IndentPPDirectives: AfterHash
AlignAfterOpenBracket: Align
AccessModifierOffset: -3
IndentWidth: 3
#StatementMacros ['Q_OBJECT', 'Q_UNUSED']
ColumnLimit: 120

30
.gitignore vendored Normal file
View File

@ -0,0 +1,30 @@
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Qt project file
*.pro.user

17
.travis.yml Normal file
View File

@ -0,0 +1,17 @@
language: cpp
git:
depth: 1
root: required
dist: xenial
env:
- VERSION="1.2.0"
install:
- bash ci-scripts/$TRAVIS_OS_NAME/install.sh
script:
- bash ci-scripts/$TRAVIS_OS_NAME/build.sh
jobs:
include:
- os: osx
osx_image: xcode10.1
#- os: linux
# compiler: gcc

21
LICENSE.md Normal file
View File

@ -0,0 +1,21 @@
# License
Copyright (c) 2020 [Alex Spataru](https://github.com/alex-spataru).
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

147
README.md Normal file
View File

@ -0,0 +1,147 @@
<a href="#">
<img width="192px" height="192px" src="doc/icon.png" align="right" />
</a>
# Serial Studio
[![Build Status](https://api.travis-ci.org/serial-studio/Serial-Studio.svg?branch=master)](https://travis-ci.org/serial-studio/Serial-Studio)
Serial Studio is a multi-platform, multi-purpose serial data visualization program. The goal of this project is to allow embedded developers & makers to easily visualize, present & analyze the data generated by their projects and devices, without the need of writing specialized computer software for each project.
The need for this project arose during the development of the Ground Station Software for several CanSat-based competitions in which I participate. It's simply not sustainable to develop and maintain different GSS programs for each competition & project. The smart solution is to have one common Ground Station software and let each CanSat define how the data is presented to the end user by using an extensible communication protocol.
Furthermore, this approach can be extended to almost any type of project that involves some kind of data acquisition & measurement.
![Screenshot](doc/screenshot.png)
## Communication Protocol
The communication protocol is implemented through a JSON document. For example, my CanSat team uses the following template:
```
{
"t":"CanSat 2020", /* Project title */
"g":[ /* Project data group array */
{
"t":"Mission Status", /* Group title */
"d":[ /* Group dataset array */
{
"t":"Mission Time", /* Dataset title */
"v":"%s" /* Dataset value */
},
{
"t":"Packet Count", /* Dataset title */
"v":"%s" /* Dataset value */
},
{
"t":"Software State", /* Dataset title */
"v":"%s" /* Dataset value */
},
{
"t":"Battery Voltage", /* Dataset title */
"v":"%s", /* Dataset value */
"g":true, /* Graph dataset */
"u":"mV" /* Dataset units */
}
]
},
{
"t":"Sensor Readings", /* Group title */
"d":[ /* Group dataset array */
{
"t":"Altitude", /* Dataset title */
"v":"%s", /* Dataset value */
"u":"m" /* Dataset units */
},
{
"t":"Pressure", /* Dataset title */
"v":"%s", /* Dataset value */
"g":true, /* Graph dataset */
"u":"KPa" /* Dataset units */
},
{
"t":"Temperature", /* Dataset title */
"v":"%s", /* Dataset value */
"g":true, /* Graph dataset */
"u":"ºC" /* Dataset units */
}
]
},
{
"t":"GPS", /* GPS Group title */
"d":[ /* Group dataset array */
{
"t":"UTC Time", /* Dataset title */
"v":"%s" /* Dataset value */
},
{
"t":"Longitude", /* Dataset title */
"v":"%s" /* Dataset value */
},
{
"t":"Latitude", /* Dataset title */
"v":"%s" /* Dataset value */
},
{
"t":"Altitude", /* Dataset title */
"v":"%s" /* Dataset value */
},
{
"t":"Num. Sats", /* Dataset title */
"v":"%s" /* Dataset value */
}
]
}
]
}
```
The `%s` values are replaced with real-time data from each sensor and subsystem. As you can see, the data frame contains the following information:
- Project title
- Groups
- Group title
- Group data
- Dataset title
- Dataset value
- Dataset unit
- Dataset graph (or not)
This information is processed by Serial Studio, which builds the user interface according to the information contained in each frame. This information is also used to generate a CSV file with all the readings received from the serial device, the CSV file can be used for analysis and data-processing within MATLAB.
## Build instructions
##### Requirements
The only requirement to compile the application is to have [Qt](http://www.qt.io/download-open-source/) installed in your system. The desktop application will compile with Qt 5.15 or greater.
### Cloning this repository
This repository makes use of [`git submodule`](https://git-scm.com/docs/git-submodule). In order to clone it, you have two options:
One-liner:
git clone --recursive https://github.com/Serial-Studio/Serial-Studio
Normal procedure:
git clone https://github.com/Serial-Studio/Serial-Studio
cd Serial-Studio
git submodule init
git submodule update
###### Compiling the application
Once you have Qt installed, open *Serial-Studio.pro* in Qt Creator and click the "Run" button.
Alternatively, you can also use the following commands:
qmake
make -j4
## Licence
This project is released under the MIT license, for more information, check the [LICENSE](LICENSE.md) file.

153
Serial-Studio.pro Normal file
View File

@ -0,0 +1,153 @@
#
# Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
#-------------------------------------------------------------------------------
# Make options
#-------------------------------------------------------------------------------
UI_DIR = uic
MOC_DIR = moc
RCC_DIR = qrc
OBJECTS_DIR = obj
CONFIG += c++11
#-------------------------------------------------------------------------------
# Qt configuration
#-------------------------------------------------------------------------------
TEMPLATE = app
TARGET = serial-studio
CONFIG += qtc_runnable
CONFIG += resources_big
CONFIG += qtquickcompiler
QT += xml
QT += svg
QT += core
QT += quick
QT += charts
QT += widgets
QT += serialport
QT += quickcontrols2
QTPLUGIN += qsvg
#-------------------------------------------------------------------------------
# Libraries
#-------------------------------------------------------------------------------
include(libs/QSimpleUpdater/QSimpleUpdater.pri)
#-------------------------------------------------------------------------------
# Deploy options
#-------------------------------------------------------------------------------
win32* {
TARGET = SerialStudio
RC_FILE = deploy/windows/resources/info.rc
}
macx* {
TARGET = SerialStudio
ICON = deploy/macOS/icon.icns
RC_FILE = deploy/macOS/icon.icns
QMAKE_INFO_PLIST = deploy/macOS/info.plist
# DMG generation constants
BUNDLE_FILENAME = $${TARGET}.app
DMG_FILENAME = "SerialStudio.dmg"
# Target for pretty DMG generation
dmg.commands += echo "Generate DMG";
dmg.commands += macdeployqt $$BUNDLE_FILENAME -qmldir=$$PWD/assets/qml &&
dmg.commands += create-dmg \
--volname $${TARGET} \
--background $${PWD}/deploy/macOS/dmg_bg.png \
--icon $${BUNDLE_FILENAME} 150 218 \
--window-pos 200 120 \
--window-size 600 450 \
--icon-size 100 \
--hdiutil-quiet \
--app-drop-link 450 218 \
$${DMG_FILENAME} \
$${BUNDLE_FILENAME}
QMAKE_EXTRA_TARGETS += dmg
}
linux:!android {
target.path = /usr/bin
icon.path = /usr/share/pixmaps
desktop.path = /usr/share/applications
icon.files += deploy/linux/serial-studio.png
desktop.files += deploy/linux/serial-studio.desktop
INSTALLS += target desktop icon
}
#-------------------------------------------------------------------------------
# Import source code
#-------------------------------------------------------------------------------
RESOURCES += \
assets/assets.qrc
HEADERS += \
src/AppInfo.h \
src/Dataset.h \
src/Export.h \
src/GraphProvider.h \
src/Group.h \
src/JsonParser.h \
src/ModuleManager.h \
src/QmlBridge.h \
src/SerialManager.h
SOURCES += \
src/Dataset.cpp \
src/Export.cpp \
src/GraphProvider.cpp \
src/Group.cpp \
src/JsonParser.cpp \
src/ModuleManager.cpp \
src/QmlBridge.cpp \
src/SerialManager.cpp \
src/main.cpp
DISTFILES += \
assets/qml/Components/Console.qml \
assets/qml/Components/DataGrid.qml \
assets/qml/Components/DeviceManager.qml \
assets/qml/Components/GraphGrid.qml \
assets/qml/Components/ToolBar.qml \
assets/qml/UI.qml \
assets/qml/Widgets/DataDelegate.qml \
assets/qml/Widgets/GraphDelegate.qml \
assets/qml/Widgets/GroupDelegate.qml \
assets/qml/Widgets/LED.qml \
assets/qml/Widgets/MapDelegate.qml \
assets/qml/Widgets/Window.qml \
assets/qml/main.qml \
assets/qml/About.qml

56
assets/assets.qrc Normal file
View File

@ -0,0 +1,56 @@
<RCC>
<qresource prefix="/">
<file>icons/ac-power.svg</file>
<file>icons/arrow-right.svg</file>
<file>icons/backspace.svg</file>
<file>icons/battery.svg</file>
<file>icons/bug.svg</file>
<file>icons/code.svg</file>
<file>icons/copy.svg</file>
<file>icons/delete.svg</file>
<file>icons/developer-board.svg</file>
<file>icons/device-hub.svg</file>
<file>icons/equalizer.svg</file>
<file>icons/error.svg</file>
<file>icons/ethernet.svg</file>
<file>icons/fullscreen-exit.svg</file>
<file>icons/fullscreen.svg</file>
<file>icons/group.svg</file>
<file>icons/help.svg</file>
<file>icons/info.svg</file>
<file>icons/link.svg</file>
<file>icons/location-off.svg</file>
<file>icons/location-on.svg</file>
<file>icons/open.svg</file>
<file>icons/power.svg</file>
<file>icons/ram.svg</file>
<file>icons/refresh.svg</file>
<file>icons/right.svg</file>
<file>icons/save.svg</file>
<file>icons/scatter-plot.svg</file>
<file>icons/schedule.svg</file>
<file>icons/send.svg</file>
<file>icons/settings.svg</file>
<file>icons/tab.svg</file>
<file>icons/terminal.svg</file>
<file>icons/update.svg</file>
<file>icons/usb.svg</file>
<file>icons/warning.svg</file>
<file>images/logo.svg</file>
<file>qml/Components/Console.qml</file>
<file>qml/Components/DataGrid.qml</file>
<file>qml/Components/DeviceManager.qml</file>
<file>qml/Components/ToolBar.qml</file>
<file>qml/main.qml</file>
<file>qml/UI.qml</file>
<file>qml/Widgets/DataDelegate.qml</file>
<file>qml/Widgets/GraphDelegate.qml</file>
<file>qml/Widgets/GroupDelegate.qml</file>
<file>qml/Widgets/LED.qml</file>
<file>qml/Widgets/MapDelegate.qml</file>
<file>qml/Widgets/Window.qml</file>
<file>icons/chart.svg</file>
<file>icons/visibility.svg</file>
<file>qml/About.qml</file>
</qresource>
</RCC>

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M16.01 7L16 3h-2v4h-4V3H8v4h-.01C7 6.99 6 7.99 6 8.99v5.49L9.5 18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z"/><path d="M0 0h24v24H0z" fill="none"/></svg>

After

Width:  |  Height:  |  Size: 243 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z"/></svg>

After

Width:  |  Height:  |  Size: 194 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z"/></svg>

After

Width:  |  Height:  |  Size: 351 B

1
assets/icons/battery.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4z"/></svg>

After

Width:  |  Height:  |  Size: 265 B

1
assets/icons/bug.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z"/></svg>

After

Width:  |  Height:  |  Size: 512 B

1
assets/icons/chart.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M5 9.2h3V19H5zM10.6 5h2.8v14h-2.8zm5.6 8H19v6h-2.8z"/></svg>

After

Width:  |  Height:  |  Size: 189 B

1
assets/icons/code.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>

After

Width:  |  Height:  |  Size: 230 B

1
assets/icons/copy.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"/></svg>

After

Width:  |  Height:  |  Size: 274 B

1
assets/icons/delete.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M15 16h4v2h-4zm0-8h7v2h-7zm0 4h6v2h-6zM3 18c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V8H3v10zM14 5h-3l-1-1H6L5 5H2v2h12z"/><path d="M0 0h24v24H0z" fill="none"/></svg>

After

Width:  |  Height:  |  Size: 247 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M22 9V7h-2V5c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-2h2v-2h-2v-2h2v-2h-2V9h2zm-4 10H4V5h14v14zM6 13h5v4H6zm6-6h4v3h-4zM6 7h5v5H6zm6 4h4v6h-4z"/><path d="M0 0h24v24H0zm0 0h24v24H0z" fill="none"/></svg>

After

Width:  |  Height:  |  Size: 322 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"/><path d="M0 0h24v24H0z" fill="none"/></svg>

After

Width:  |  Height:  |  Size: 308 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M7 18h2V6H7v12zm4 4h2V2h-2v20zm-8-8h2v-4H3v4zm12 4h2V6h-2v12zm4-8v4h2v-4h-2z"/></svg>

After

Width:  |  Height:  |  Size: 214 B

1
assets/icons/error.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 11c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1 4h-2v-2h2v2z"/></svg>

After

Width:  |  Height:  |  Size: 250 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.28L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1.54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z"/></svg>

After

Width:  |  Height:  |  Size: 322 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/></svg>

After

Width:  |  Height:  |  Size: 215 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>

After

Width:  |  Height:  |  Size: 216 B

1
assets/icons/group.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM8 17.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5zM9.5 8c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5S9.5 9.38 9.5 8zm6.5 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></svg>

After

Width:  |  Height:  |  Size: 453 B

1
assets/icons/help.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"/></svg>

After

Width:  |  Height:  |  Size: 381 B

1
assets/icons/info.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1-8h-2V7h2v2z"/></svg>

After

Width:  |  Height:  |  Size: 289 B

1
assets/icons/link.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>

After

Width:  |  Height:  |  Size: 349 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.94 11c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06c-1.13.12-2.19.46-3.16.97l1.5 1.5C10.16 5.19 11.06 5 12 5c3.87 0 7 3.13 7 7 0 .94-.19 1.84-.52 2.65l1.5 1.5c.5-.96.84-2.02.97-3.15H23v-2h-2.06zM3 4.27l2.04 2.04C3.97 7.62 3.25 9.23 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c1.77-.2 3.38-.91 4.69-1.98L19.73 21 21 19.73 4.27 3 3 4.27zm13.27 13.27C15.09 18.45 13.61 19 12 19c-3.87 0-7-3.13-7-7 0-1.61.55-3.09 1.46-4.27l9.81 9.81z"/></svg>

After

Width:  |  Height:  |  Size: 578 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.94 11c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></svg>

After

Width:  |  Height:  |  Size: 365 B

1
assets/icons/open.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></svg>

After

Width:  |  Height:  |  Size: 268 B

1
assets/icons/power.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"/></svg>

After

Width:  |  Height:  |  Size: 346 B

1
assets/icons/ram.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15 9H9v6h6V9zm-2 4h-2v-2h2v2zm8-2V9h-2V7c0-1.1-.9-2-2-2h-2V3h-2v2h-2V3H9v2H7c-1.1 0-2 .9-2 2v2H3v2h2v2H3v2h2v2c0 1.1.9 2 2 2h2v2h2v-2h2v2h2v-2h2c1.1 0 2-.9 2-2v-2h2v-2h-2v-2h2zm-4 6H7V7h10v10z"/></svg>

After

Width:  |  Height:  |  Size: 331 B

1
assets/icons/refresh.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1.46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6 6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l4 4 4-4H6z"/><path d="M0 0h24v24H0z" fill="none"/></svg>

After

Width:  |  Height:  |  Size: 364 B

1
assets/icons/right.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M16.01 11H4v2h12.01v3L20 12l-3.99-4z"/></svg>

After

Width:  |  Height:  |  Size: 174 B

1
assets/icons/save.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"/></svg>

After

Width:  |  Height:  |  Size: 280 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><g><circle cx="7" cy="14" r="3"/><circle cx="11" cy="6" r="3"/><circle cx="16.6" cy="17.6" r="3"/></g></svg>

After

Width:  |  Height:  |  Size: 230 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/><path d="M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></svg>

After

Width:  |  Height:  |  Size: 333 B

1
assets/icons/send.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/><path d="M0 0h24v24H0z" fill="none"/></svg>

After

Width:  |  Height:  |  Size: 175 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

1
assets/icons/tab.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M11.59 7.41L15.17 11H1v2h14.17l-3.59 3.59L13 18l6-6-6-6-1.41 1.41zM20 6v12h2V6h-2z"/></svg>

After

Width:  |  Height:  |  Size: 220 B

74
assets/icons/terminal.svg Normal file
View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 31.586 31.586" style="enable-background:new 0 0 31.586 31.586;" xml:space="preserve">
<g>
<path d="M29.328,2.255H2.256C1.01,2.255,0,3.264,0,4.51v22.564c0,1.245,1.01,2.256,2.256,2.256h27.072
c1.244,0,2.258-1.012,2.258-2.256V4.51C31.586,3.264,30.572,2.255,29.328,2.255z M7.333,3.949c0.622,0,1.128,0.502,1.128,1.128
c0,0.623-0.506,1.125-1.128,1.125c-0.626,0-1.131-0.502-1.131-1.125C6.202,4.451,6.707,3.949,7.333,3.949z M3.947,3.949
c0.623,0,1.127,0.502,1.127,1.128c0,0.623-0.504,1.125-1.127,1.125c-0.624,0-1.129-0.502-1.129-1.125
C2.818,4.451,3.323,3.949,3.947,3.949z M29.328,27.075H2.256V7.92h27.072C29.328,7.92,29.328,27.075,29.328,27.075z"/>
<polygon points="12.645,12.556 5.4,9.243 5.4,10.84 11.003,13.235 11.003,13.266 5.4,15.66 5.4,17.256 12.645,13.943 "/>
<rect x="16.056" y="12.488" width="3.946" height="1.522"/>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

1
assets/icons/update.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><g><rect fill="none" height="24" width="24" x="0"/></g><g><g><g><path d="M21,10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-0.1c-2.73,2.71-2.73,7.08,0,9.79s7.15,2.71,9.88,0 C18.32,15.65,19,14.08,19,12.1h2c0,1.98-0.88,4.55-2.64,6.29c-3.51,3.48-9.21,3.48-12.72,0c-3.5-3.47-3.53-9.11-0.02-12.58 s9.14-3.47,12.65,0L21,3V10.12z M12.5,8v4.25l3.5,2.08l-0.72,1.21L11,13V8H12.5z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 506 B

1
assets/icons/usb.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M15 7v4h1v2h-3V5h2l-3-4-3 4h2v8H8v-2.07c.7-.37 1.2-1.08 1.2-1.93 0-1.21-.99-2.2-2.2-2.2-1.21 0-2.2.99-2.2 2.2 0 .85.5 1.56 1.2 1.93V13c0 1.11.89 2 2 2h3v3.05c-.71.37-1.2 1.1-1.2 1.95 0 1.22.99 2.2 2.2 2.2 1.21 0 2.2-.98 2.2-2.2 0-.85-.49-1.58-1.2-1.95V15h3c1.11 0 2-.89 2-2v-2h1V7h-4z"/></svg>

After

Width:  |  Height:  |  Size: 422 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>

After

Width:  |  Height:  |  Size: 347 B

1
assets/icons/warning.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M2.73 21h18.53c.77 0 1.25-.83.87-1.5l-9.27-16c-.39-.67-1.35-.67-1.73 0l-9.27 16c-.38.67.1 1.5.87 1.5zM13 18h-2v-2h2v2zm-1-4c-.55 0-1-.45-1-1v-2c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1z"/></svg>

After

Width:  |  Height:  |  Size: 327 B

122
assets/images/logo.svg Normal file
View File

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="914.25946"
height="251.09822"
viewBox="0 0 9142.5946 2510.9822"
preserveAspectRatio="xMidYMid meet"
id="svg48"
sodipodi:docname="logo_transparent.svg"
inkscape:version="1.0.1 (c497b03c, 2020-09-10)">
<metadata
id="metadata54">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs52" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1074"
inkscape:window-height="744"
id="namedview50"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="0.67833333"
inkscape:cx="503.41024"
inkscape:cy="163"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="0"
inkscape:current-layer="svg48" />
<g
id="layer101"
fill="#5da0a2"
stroke="none"
transform="translate(-965.89759,-4370)">
<path
d="m 1975,6855 c -51,-50 -21,-147 49,-161 97,-18 160,107 85,169 -33,27 -104,23 -134,-8 z"
id="path10" />
<path
d="m 2555,6826 c -67,-67 -22,-166 75,-166 39,0 90,47 90,84 0,88 -106,141 -165,82 z"
id="path12" />
<path
d="m 1455,6626 c -13,-13 -27,-36 -31,-50 -15,-62 46,-124 111,-112 77,15 109,113 52,162 -39,33 -99,33 -132,0 z"
id="path14" />
<path
d="m 3045,6535 c -60,-59 -12,-165 73,-165 33,0 45,6 66,31 30,35 33,67 11,109 -19,36 -43,50 -90,50 -25,0 -43,-8 -60,-25 z"
id="path16" />
<path
d="m 1096,6179 c -36,-43 -35,-91 3,-130 22,-21 39,-29 66,-29 27,0 44,8 66,29 38,39 39,87 3,130 -21,26 -33,31 -69,31 -36,0 -48,-5 -69,-31 z"
id="path18" />
<path
d="m 1003,5645 c -34,-24 -47,-76 -29,-118 17,-41 41,-57 88,-57 67,0 110,60 88,124 -14,45 -44,66 -90,66 -20,0 -45,-7 -57,-15 z"
id="path20" />
<path
d="m 1173,5106 c -37,-31 -46,-69 -28,-113 13,-31 59,-63 90,-63 30,0 72,29 85,59 25,61 -12,123 -81,136 -29,5 -41,2 -66,-19 z"
id="path22" />
<path
d="m 3163,4998 c -33,-16 -57,-74 -46,-111 24,-86 152,-92 184,-9 31,82 -57,159 -138,120 z"
id="path24" />
<path
d="m 1592,4720 c -30,-13 -57,-70 -48,-105 19,-77 111,-101 168,-45 26,27 30,36 25,67 -11,67 -84,109 -145,83 z"
id="path26" />
<path
d="m 2689,4631 c -56,-57 -27,-145 53,-158 46,-7 84,15 102,59 41,96 -80,174 -155,99 z"
id="path28" />
<path
d="m 2127,4540 c -69,-55 -25,-170 65,-170 39,0 85,35 93,70 19,88 -88,155 -158,100 z"
id="path30" />
</g>
<g
id="layer102"
fill="#f4f7f7"
stroke="none"
transform="translate(-965.89759,-4370)">
<path
d="m 6085,6579 c -78,-11 -176,-60 -215,-107 -29,-35 -59,-107 -48,-117 2,-3 40,-9 84,-15 43,-6 90,-12 104,-14 21,-4 28,2 43,34 24,52 71,80 133,80 63,0 106,-26 136,-82 19,-37 23,-62 26,-173 l 4,-130 -30,40 c -62,85 -129,118 -241,118 -151,0 -241,-79 -286,-250 -21,-78 -21,-288 -1,-366 35,-129 110,-221 203,-248 109,-32 249,-1 301,67 13,16 32,40 42,54 l 19,25 1,-62 c 0,-96 -3,-93 116,-93 h 104 v 428 c -1,444 -7,544 -38,616 -24,52 -74,111 -123,142 -74,46 -219,70 -334,53 z m 173,-539 c 22,-14 43,-40 60,-78 25,-53 27,-66 27,-192 0,-128 -1,-138 -28,-187 -71,-137 -222,-130 -283,12 -40,93 -26,326 23,401 41,63 136,84 201,44 z"
id="path33" />
<path
d="m 3765,6239 c -163,-17 -281,-95 -341,-223 -28,-61 -30,-86 -6,-86 9,-1 59,-7 110,-14 l 93,-13 16,39 c 19,47 79,101 132,116 49,15 149,15 207,1 63,-16 104,-65 104,-125 0,-89 -51,-126 -249,-179 -74,-19 -163,-49 -199,-66 -129,-62 -189,-158 -180,-288 6,-82 33,-136 92,-188 149,-132 501,-133 635,-3 53,52 120,188 94,191 -5,0 -55,6 -112,12 l -105,12 -26,-49 c -34,-67 -89,-96 -177,-96 -113,0 -173,44 -173,127 0,67 41,104 156,138 250,75 289,90 348,130 49,33 68,54 94,106 32,60 34,69 30,144 -5,96 -39,168 -103,221 -95,77 -262,113 -440,93 z"
id="path35" />
<path
d="m 4620,6155 v -75 h 160 160 v -295 -295 h -115 -115 v -75 -75 h 230 230 v 370 370 h 145 145 v 75 75 h -420 -420 z"
id="path37" />
<path
d="m 7010,5675 v -555 h 115 115 l 2,463 3,462 253,3 252,2 v 90 90 h -370 -370 z"
id="path39" />
<path
d="m 8002,6211 c 2,-11 82,-261 178,-555 l 175,-536 140,3 139,2 178,545 c 98,300 178,548 178,553 0,4 -52,7 -115,7 h -114 l -21,-72 c -12,-40 -29,-100 -38,-133 l -18,-60 -190,-3 -190,-2 -38,135 -39,135 h -114 c -108,0 -114,-1 -111,-19 z m 628,-438 c 0,-3 -25,-94 -54,-202 -30,-108 -60,-218 -67,-244 -6,-26 -13,-46 -15,-44 -6,5 -134,473 -134,486 0,7 46,11 135,11 74,0 135,-3 135,-7 z"
id="path41" />
<path
d="m 9260,5674 v -556 l 268,4 c 219,4 277,8 321,22 72,23 119,56 153,107 33,50 42,90 36,169 -7,104 -72,177 -193,216 -15,5 -5,10 37,20 162,38 242,142 224,292 -19,157 -124,251 -308,272 -45,6 -185,10 -310,10 h -228 z m 539,358 c 66,-35 92,-140 55,-218 -28,-59 -76,-76 -231,-82 l -133,-5 v 162 161 h 138 c 114,0 143,-3 171,-18 z m -39,-499 c 36,-33 51,-87 39,-140 -4,-22 -21,-50 -39,-65 -29,-27 -34,-28 -150,-28 h -120 v 130 130 h 120 c 116,0 121,-1 150,-27 z"
id="path43" />
<path
d="m 4940,5095 v -85 h 115 115 v 85 85 h -115 -115 z"
id="path45" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

128
assets/qml/About.qml Normal file
View File

@ -0,0 +1,128 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Window 2.0
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import "Widgets" as Widgets
import "Components" as Components
ApplicationWindow {
id: window
flags: Qt.Dialog
title: qsTr("About")
minimumWidth: 320
maximumWidth: 320
minimumHeight: 480
maximumHeight: 480
background: Rectangle {
color: Qt.darker(palette.base)
}
ColumnLayout {
anchors.fill: parent
spacing: app.spacing
anchors.margins: 2 * app.spacing
Image {
width: sourceSize.width
height: sourceSize.height
sourceSize.width: parent.width
source: "qrc:/images/logo.svg"
Layout.alignment: Qt.AlignHCenter
}
Label {
opacity: 0.5
font.pixelSize: 18
Layout.fillWidth: true
font.family: app.monoFont
horizontalAlignment: Text.AlignRight
text: qsTr("Version %1").arg(CppAppVersion)
}
Item {
height: app.spacing
}
Label {
opacity: 0.8
Layout.fillWidth: true
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
text: qsTr("Copyright © 2020 %1, released under the MIT License.").arg(CppAppOrganization)
}
Label {
opacity: 0.8
font.pixelSize: 12
Layout.fillWidth: true
color: palette.highlightedText
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
text: "The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE."
}
Item {
height: app.spacing
}
Button {
Layout.fillWidth: true
text: qsTr("Contact author")
onClicked: Qt.openUrlExternally("mailto:alex_spataru@outlook.com")
}
Button {
Layout.fillWidth: true
text: qsTr("Report bug")
onClicked: Qt.openUrlExternally("https://github.com/Serial-Studio/Serial-Studio/issues")
}
Button {
Layout.fillWidth: true
text: qsTr("Latest releases")
onClicked: Qt.openUrlExternally("https://github.com/Serial-Studio/Serial-Studio/releases/latest")
}
Button {
Layout.fillWidth: true
text: qsTr("SigLAB/MCU communication tutorial")
onClicked: Qt.openUrlExternally("https://github.com/Serial-Studio/Serial-Studio/wiki")
}
Item {
Layout.fillHeight: true
}
Button {
Layout.fillWidth: true
text: qsTr("Close")
onClicked: window.close()
}
Item {
height: app.spacing
}
}
}

View File

@ -0,0 +1,123 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.3
import "../Widgets" as Widgets
Widgets.Window {
id: window
//
// Window properties
//
implicitHeight: 256
title: qsTr("Console")
icon.source: "qrc:/icons/code.svg"
//
// Set the CppSerialManager's text document pointer so that the console
// ouput is handled automatically by the CppSerialManager
//
Component.onCompleted: CppSerialManager.setTextDocument(_console.textDocument)
//
// Controls
//
ColumnLayout {
anchors.fill: parent
spacing: app.spacing
anchors.margins: app.spacing * 1.5
//
// Console display
//
TextField {
id: _cont
readOnly: true
Layout.fillWidth: true
Layout.fillHeight: true
palette.base: Qt.rgba(8/255, 22/255, 18/255, 1)
ScrollView {
id: _scrollView
clip: true
anchors.fill: parent
contentWidth: parent.width
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
TextArea {
id: _console
readOnly: true
font.pixelSize: 12
color: app.consoleColor
wrapMode: TextEdit.Wrap
textFormat: Text.RichText
font.family: app.monoFont
width: _scrollView.contentWidth
placeholderText: qsTr("No data received so far...")
}
}
}
//
// Data-write controls
//
RowLayout {
Layout.fillWidth: true
TextField {
id: _tf
height: 24
font.pixelSize: 12
Layout.fillWidth: true
color: app.consoleColor
font.family: app.monoFont
enabled: CppSerialManager.readWrite
palette.base: Qt.rgba(8/255, 22/255, 18/255, 1)
placeholderText: qsTr("Send data to device") + "..."
Keys.onReturnPressed: {
CppSerialManager.sendData(_tf.text)
_tf.clear()
}
Behavior on opacity {NumberAnimation{}}
}
Button {
height: 24
icon.color: palette.text
opacity: enabled ? 1 : 0.5
icon.source: "qrc:/icons/send.svg"
enabled: CppSerialManager.readWrite
onClicked: {
CppSerialManager.sendData(_tf.text)
_tf.clear()
}
Behavior on opacity {NumberAnimation{}}
}
}
}
}

View File

@ -0,0 +1,470 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import Group 1.0
import Dataset 1.0
import "../Widgets"
Item {
id: dataGrid
property string title: ""
//
// Group/dataset updating
//
Connections {
target: CppQmlBridge
function onUpdated() {
dataGrid.title = CppQmlBridge.projectTitle
if (groupGenerator.model !== CppQmlBridge.groupCount) {
var list = []
for (var i = 0; i < CppQmlBridge.groupCount; ++i)
list.push(true)
groupGenerator.model = 0
viewOptions.groups = list
groupGenerator.model = CppQmlBridge.groupCount
}
}
}
//
// Graph data updating
//
Connections {
target: CppGraphProvider
function onDataUpdated() {
if (graphGenerator.model !== CppGraphProvider.graphCount) {
var list = []
for (var i = 0; i < CppGraphProvider.graphCount; ++i)
list.push(true)
graphGenerator.model = 0
viewOptions.graphs = list
graphGenerator.model = CppGraphProvider.graphCount
}
}
}
//
// Main layout
//
ColumnLayout {
x: 2 * app.spacing
anchors.fill: parent
spacing: app.spacing * 2
anchors.margins: app.spacing * 2
//
// Group data & graphs
//
RowLayout {
spacing: app.spacing
Layout.fillWidth: true
Layout.fillHeight: true
//
// View options
//
Window {
id: viewOptions
title: qsTr("View")
Layout.fillHeight: true
Layout.minimumWidth: 240
icon.source: "qrc:/icons/visibility.svg"
borderColor: Qt.rgba(45/255, 96/255, 115/255, 1)
backgroundColor: Qt.rgba(18 / 255, 18 / 255, 24 / 255, 1)
property var groups: []
property var graphs: []
ScrollView {
clip: true
contentWidth: -1
anchors.fill: parent
anchors.margins: app.spacing
ColumnLayout {
x: app.spacing
width: parent.width - 10 - 2 * app.spacing
Item {
height: app.spacing
}
//
// Horizontal range title
//
RowLayout {
spacing: app.spacing
visible: graphGenerator.count > 0
Image {
width: sourceSize.width
height: sourceSize.height
sourceSize: Qt.size(18, 18)
source: "qrc:/icons/scatter-plot.svg"
ColorOverlay {
source: parent
color: palette.text
anchors.fill: parent
}
}
Label {
font.bold: true
text: qsTr("Horizontal Range") + ":"
}
Item {
Layout.fillWidth: true
}
}
//
// Horizontal range slider
//
RowLayout {
spacing: app.spacing
visible: graphGenerator.count > 0
Slider {
id: slider
to: 100
from: 1
live: false
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
value: CppGraphProvider.displayedPoints
onValueChanged: CppGraphProvider.displayedPoints = value
}
Label {
font.family: app.monoFont
Layout.alignment: Qt.AlignVCenter
text: Math.ceil(slider.position * (slider.to))
}
}
//
// Spacer
//
Item {
height: app.spacing
}
//
// Group title
//
RowLayout {
spacing: app.spacing
visible: groupGenerator.count > 0
Image {
width: sourceSize.width
height: sourceSize.height
sourceSize: Qt.size(18, 18)
source: "qrc:/icons/group.svg"
ColorOverlay {
source: parent
color: palette.text
anchors.fill: parent
}
}
Label {
font.bold: true
text: qsTr("Data Groups") + ":"
}
Item {
Layout.fillWidth: true
}
}
//
// Semi-spacer
//
Item {
height: app.spacing / 2
}
//
// Group switches
//
Repeater {
model: groupGenerator.model
delegate: Switch {
Layout.fillWidth: true
Component.onCompleted: checked = true
text: CppQmlBridge.getGroup(index).title
palette.highlight: Qt.rgba(215/255, 45/255, 96/255, 1)
onCheckedChanged: {
viewOptions.groups[index] = checked
viewOptions.groupsChanged()
}
}
}
//
// Spacer
//
Item {
height: app.spacing
}
//
// Graphs title
//
RowLayout {
spacing: app.spacing
visible: groupGenerator.count > 0
Image {
width: sourceSize.width
height: sourceSize.height
sourceSize: Qt.size(18, 18)
source: "qrc:/icons/chart.svg"
ColorOverlay {
source: parent
color: palette.text
anchors.fill: parent
}
}
Label {
font.bold: true
text: qsTr("Data Plots") + ":"
}
Item {
Layout.fillWidth: true
}
}
//
// Semi-spacer
//
Item {
height: app.spacing / 2
}
//
// Graph switches
//
Repeater {
model: graphGenerator.model
delegate: Switch {
Layout.fillWidth: true
Component.onCompleted: checked = true
text: CppGraphProvider.getDataset(index).title
palette.highlight: Qt.rgba(215/255, 45/255, 96/255, 1)
onCheckedChanged: {
viewOptions.graphs[index] = checked
viewOptions.graphsChanged()
}
}
}
}
}
}
//
// Data grid
//
Window {
id: dataWin
title: qsTr("Data")
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumWidth: 240
icon.source: "qrc:/icons/scatter-plot.svg"
borderColor: Qt.rgba(45/255, 96/255, 115/255, 1)
backgroundColor: Qt.rgba(18 / 255, 18 / 255, 24 / 255, 1)
Rectangle {
z: 1
color: dataWin.borderColor
height: dataWin.borderWidth
anchors {
leftMargin: 5
rightMargin: 5
left: parent.left
right: parent.right
bottom: parent.bottom
}
}
ScrollView {
z: 0
id: _sv
clip: false
contentWidth: -1
anchors.fill: parent
anchors.rightMargin: 10
anchors.margins: app.spacing * 2
anchors.leftMargin: app.spacing * 2 + 10
ColumnLayout {
width: _sv.width - 2 * app.spacing
Item {
Layout.minimumHeight: 10
}
GridLayout {
rowSpacing: 0
columnSpacing: 0
Layout.fillHeight: true
Layout.fillWidth: true
columns: Math.floor(width / 224)
Repeater {
id: groupGenerator
delegate: Item {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumHeight: groupDelegate.visible ? 196 : 0
Behavior on Layout.minimumHeight {NumberAnimation{}}
GroupDelegate {
id: groupDelegate
groupIndex: index
anchors.fill: parent
anchors.margins: app.spacing
group: CppQmlBridge.getGroup(index)
enabled: viewOptions.groups[groupIndex]
Connections {
target: viewOptions
function onGroupsChanged() {
groupDelegate.enabled = viewOptions.groups[groupDelegate.groupIndex]
}
}
}
}
}
Repeater {
id: graphGenerator
delegate: Item {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumHeight: graphDelegate.visible ? 196 : 0
Behavior on Layout.minimumHeight {NumberAnimation{}}
GraphDelegate {
id: graphDelegate
graphId: index
anchors.fill: parent
anchors.margins: app.spacing
enabled: viewOptions.graphs[graphId]
Connections {
target: viewOptions
function onGraphsChanged() {
graphDelegate.enabled = viewOptions.graphs[graphDelegate.graphId]
}
}
}
}
}
}
Item {
Layout.minimumHeight: 10
}
}
}
}
}
//
// Title
//
Rectangle {
radius: 5
height: 32
Layout.fillWidth: true
color: Qt.rgba(45/255, 96/255, 115/255, 1)
RowLayout {
spacing: app.spacing
anchors {
left: parent.left
leftMargin: app.spacing
verticalCenter: parent.verticalCenter
}
Image {
width: sourceSize.width
height: sourceSize.height
sourceSize: Qt.size(24, 24)
source: "qrc:/icons/arrow-right.svg"
Layout.alignment: Qt.AlignVCenter
ColorOverlay {
source: parent
anchors.fill: parent
color: palette.brightText
}
}
Label {
font.bold: true
font.pixelSize: 16
text: dataGrid.title
color: palette.brightText
font.family: app.monoFont
}
}
Label {
font.family: app.monoFont
color: palette.brightText
text: CppSerialManager.receivedBytes
anchors {
right: parent.right
rightMargin: app.spacing
verticalCenter: parent.verticalCenter
}
}
}
}
}

View File

@ -0,0 +1,243 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import Qt.labs.settings 1.0
import "../Widgets" as Widgets
Widgets.Window {
//
// Window properties
//
implicitWidth: 256
title: qsTr("Device Manager")
icon.source: "qrc:/icons/usb.svg"
//
// Save settings
//
Settings {
category: "Device Manager"
property alias dmParity: parity.currentIndex
property alias dmStopBits: stopBits.currentIndex
property alias dmBaudRate: baudRate.currentIndex
property alias dmDataBits: dataBits.currentIndex
property alias dmFlowControl: flowControl.currentIndex
}
//
// Control arrangement
//
ColumnLayout {
anchors.fill: parent
anchors.margins: app.spacing * 1.5
spacing: app.spacing / 2
//
// COM port selector
//
Label {
text: qsTr("COM Port") + ":"
} ComboBox {
Layout.fillWidth: true
model: CppSerialManager.portList
currentIndex: CppSerialManager.portIndex
onCurrentIndexChanged: {
if (CppSerialManager.portIndex !== currentIndex)
CppSerialManager.portIndex = currentIndex
}
}
//
// Baud rate selector
//
Label {
text: qsTr("Baud Rate") + ":"
} ComboBox {
id: baudRate
Layout.fillWidth: true
model: CppSerialManager.baudRateList
currentIndex: CppSerialManager.baudRateIndex
onCurrentIndexChanged: {
if (CppSerialManager.baudRateIndex !== currentIndex)
CppSerialManager.baudRateIndex = currentIndex
}
}
//
// Spacer
//
Item {
height: app.spacing * 2
}
//
// Data bits selector
//
Label {
text: qsTr("Data Bits") + ":"
} ComboBox {
id: dataBits
Layout.fillWidth: true
model: CppSerialManager.dataBitsList
currentIndex: CppSerialManager.dataBitsIndex
onCurrentIndexChanged: {
if (CppSerialManager.dataBitsIndex !== currentIndex)
CppSerialManager.dataBitsIndex = currentIndex
}
}
//
// Parity selector
//
Label {
text: qsTr("Parity") + ":"
} ComboBox {
id: parity
Layout.fillWidth: true
model: CppSerialManager.parityList
currentIndex: CppSerialManager.parityIndex
onCurrentIndexChanged: {
if (CppSerialManager.parityIndex !== currentIndex)
CppSerialManager.parityIndex = currentIndex
}
}
//
// Stop bits selector
//
Label {
text: qsTr("Stop Bits") + ":"
} ComboBox {
id: stopBits
Layout.fillWidth: true
model: CppSerialManager.stopBitsList
currentIndex: CppSerialManager.stopBitsIndex
onCurrentIndexChanged: {
if (CppSerialManager.stopBitsIndex !== currentIndex)
CppSerialManager.stopBitsIndex = currentIndex
}
}
//
// Flow control selector
//
Label {
text: qsTr("Flow Control") + ":"
} ComboBox {
id: flowControl
Layout.fillWidth: true
model: CppSerialManager.flowControlList
currentIndex: CppSerialManager.flowControlIndex
onCurrentIndexChanged: {
if (CppSerialManager.flowControlIndex !== currentIndex)
CppSerialManager.flowControlIndex = currentIndex
}
}
//
// Spacer
//
Item {
Layout.fillHeight: true
}
//
// RX/TX LEDs
//
RowLayout {
spacing: app.spacing
Layout.alignment: Qt.AlignHCenter
Widgets.LED {
id: _rx
enabled: false
Layout.alignment: Qt.AlignVCenter
Connections {
target: CppSerialManager
function onRx() {
_rx.flash()
}
}
}
Label {
text: "RX"
font.bold: true
font.pixelSize: 18
font.family: app.monoFont
Layout.alignment: Qt.AlignVCenter
color: _rx.enabled ? palette.highlight : _rx.offColor
}
Image {
width: sourceSize.width
height: sourceSize.height
sourceSize: Qt.size(32, 32)
source: "qrc:/icons/ethernet.svg"
Layout.alignment: Qt.AlignVCenter
ColorOverlay {
source: parent
anchors.fill: parent
color: _rx.offColor
}
}
Label {
text: "TX"
font.bold: true
font.pixelSize: 18
font.family: app.monoFont
Layout.alignment: Qt.AlignVCenter
color: _tx.enabled ? palette.highlight : _tx.offColor
}
Widgets.LED {
id: _tx
enabled: false
layoutDirection: Qt.RightToLeft
Layout.alignment: Qt.AlignVCenter
Connections {
target: CppSerialManager
function onTx() {
_tx.flash()
}
}
}
}
//
// Spacer
//
Item {
Layout.fillHeight: true
}
}
}

View File

@ -0,0 +1,170 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import Qt.labs.settings 1.0
ToolBar {
id: toolbar
height: 48
//
// Custom properties
//
property alias devicesChecked: _devices.checked
property alias consoleChecked: _console.checked
property alias dataDisChecked: _dataDis.checked
property alias fullscrChecked: _fullScr.checked
//
// Dummy string to increase width of buttons
//
readonly property string _btSpacer: " "
//
// Custom signals
//
signal aboutClicked()
//
// Settings handler
//
Settings {
category: "Toolbar"
property alias devices: toolbar.devicesChecked
property alias console: toolbar.consoleChecked
property alias dataDis: toolbar.dataDisChecked
}
//
// Background gradient
//
Rectangle {
border.width: 1
color: Qt.rgba(33/255, 55/255, 63/255, 1)
border.color: Qt.darker(color)
anchors {
fill: parent
topMargin: -border.width
leftMargin: -border.width * 10
rightMargin: -border.width * 10
}
}
//
// Toolbar icons
//
RowLayout {
spacing: app.spacing
anchors.fill: parent
anchors.margins: app.spacing
Button {
id: _devices
flat: true
checked: true
icon.width: 24
icon.height: 24
checkable: true
Layout.fillHeight: true
icon.color: palette.text
icon.source: "qrc:/icons/usb.svg"
text: qsTr("Device Manager") + _btSpacer
}
Button {
id: _console
flat: true
checked: true
icon.width: 24
icon.height: 24
checkable: true
Layout.fillHeight: true
icon.color: palette.text
icon.source: "qrc:/icons/code.svg"
text: qsTr("Console") + _btSpacer
}
Button {
id: _dataDis
flat: true
checked: true
icon.width: 24
icon.height: 24
checkable: true
Layout.fillHeight: true
icon.color: palette.text
icon.source: "qrc:/icons/equalizer.svg"
text: qsTr("Data Display") + _btSpacer
}
Button {
id: _fullScr
flat: true
checkable: true
icon.width: 24
icon.height: 24
Layout.fillHeight: true
icon.color: palette.text
onCheckedChanged: checked ? app.showFullScreen() : app.showNormal()
text: (checked ? qsTr("Exit Fullscreen") : qsTr("Enter Fullscreen")) + _btSpacer
icon.source: checked ? "qrc:/icons/fullscreen-exit.svg" :
"qrc:/icons/fullscreen.svg"
}
Button {
flat: true
icon.width: 24
icon.height: 24
text: qsTr("About")
Layout.fillHeight: true
icon.color: palette.text
onClicked: toolbar.aboutClicked()
icon.source: "qrc:/icons/info.svg"
}
Item {
Layout.fillWidth: true
}
Button {
id: _openCsv
flat: true
icon.width: 24
icon.height: 24
Layout.fillHeight: true
icon.color: palette.text
enabled: CppExport.isOpen
opacity: enabled ? 1 : 0.5
onClicked: CppExport.openCsv()
icon.source: "qrc:/icons/open.svg"
text: qsTr("Open CSV File") + _btSpacer
Behavior on opacity {NumberAnimation{}}
}
}
}

216
assets/qml/UI.qml Normal file
View File

@ -0,0 +1,216 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import "Widgets" as Widgets
import "Components" as Components
Page {
id: page
//
// Toolbar
//
header: Components.ToolBar {
id: toolbar
onAboutClicked: about.show()
}
//
// Widgets
//
RowLayout {
spacing: app.spacing
anchors.fill: parent
anchors.margins: app.spacing
//
// Data display & console
//
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
//
// Data display widget
//
Widgets.Window {
id: dataDis
gradient: true
Layout.fillWidth: true
Layout.fillHeight: true
opacity: enabled ? 1 : 0
title: qsTr("Data Display")
enabled: toolbar.dataDisChecked
TabBar {
id: tabBar
contentHeight: 32
palette.button: Qt.rgba(45/255, 96/255, 115/255, 1)
visible: CppQmlBridge.gpsSupported
enabled: CppQmlBridge.groupCount > 0
opacity: CppQmlBridge.groupCount > 0 ? 1 : 0
Behavior on opacity {NumberAnimation{}}
onVisibleChanged: dataButton.clicked()
anchors {
leftMargin: 3
rightMargin: 3
topMargin: -2
top: parent.top
left: parent.left
right: parent.right
}
TabButton {
id: dataButton
text: qsTr("Data")
}
TabButton {
text: qsTr("GPS Map")
enabled: CppQmlBridge.gpsSupported
}
}
Rectangle {
height: 1
color: palette.base
anchors {
top: parent.top
left: parent.left
right: parent.right
leftMargin: dataDis.borderWidth
rightMargin: dataDis.borderWidth
}
}
SwipeView {
clip: true
interactive: false
anchors.fill: parent
anchors.margins: dataDis.borderWidth
anchors.topMargin: tabBar.visible ? tabBar.height : dataDis.borderWidth
currentIndex: tabBar.currentIndex
enabled: CppQmlBridge.groupCount > 0
opacity: CppQmlBridge.groupCount > 0 ? 1 : 0
Behavior on opacity {NumberAnimation{}}
Components.DataGrid {
id: dataGrid
Layout.fillWidth: true
Layout.fillHeight: true
}
Item {
Layout.fillWidth: true
Layout.fillHeight: true
Widgets.MapDelegate {
id: gpsMap
anchors.fill: parent
anchors.margins: app.spacing * 2
}
}
}
ColumnLayout {
anchors.centerIn: parent
enabled: CppQmlBridge.groupCount == 0
opacity: CppQmlBridge.groupCount == 0 ? 1 : 0
Behavior on opacity {NumberAnimation{}}
Image {
width: sourceSize.width
height: sourceSize.height
sourceSize: Qt.size(128, 128)
source: "qrc:/icons/warning.svg"
Layout.alignment: Qt.AlignHCenter
ColorOverlay {
source: parent
color: "#ffaa44"
anchors.fill: parent
}
}
Label {
font.pixelSize: 18
text: qsTr("No data available")
Layout.alignment: Qt.AlignHCenter
}
Label {
opacity: 0.5
font.pixelSize: 14
Layout.alignment: Qt.AlignHCenter
text: CppSerialManager.connected ?
qsTr("Check the serial console to troubleshoot the problem") :
qsTr("No device connected, please select a COM port in the device manager pane")
}
}
}
//
// Console
//
Components.Console {
id: consoleWindow
gradient: true
Layout.fillWidth: true
Layout.fillHeight: true
opacity: enabled ? 1 : 0
enabled: toolbar.consoleChecked
Layout.maximumHeight: !dataDis.enabled ? page.height : implicitHeight
Behavior on Layout.maximumHeight {NumberAnimation{}}
}
}
//
// Devices hub
//
Components.DeviceManager {
id: devMan
gradient: true
Layout.fillHeight: true
opacity: enabled ? 1 : 0
enabled: toolbar.devicesChecked
}
}
//
// About window
//
About {
id: about
visible: false
palette: app.palette
}
}

View File

@ -0,0 +1,98 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import Dataset 1.0
Item {
height: 14
property Dataset dataset: null
Label {
text: dataset.title
elide: Label.ElideRight
font.family: app.monoFont
horizontalAlignment: Text.AlignLeft
color: Qt.rgba(230/255, 224/255, 178/255, 0.6)
anchors {
leftMargin: 0
left: parent.left
right: center.left
margins: app.spacing / 2
verticalCenter: parent.verticalCenter
}
}
Image {
id: center
width: sourceSize.width
height: sourceSize.height
sourceSize: Qt.size(18, 18)
source: "qrc:/icons/ethernet.svg"
anchors {
centerIn: parent
}
ColorOverlay {
source: parent
anchors.fill: parent
color: Qt.rgba(81/255, 116/255, 151/255, 1)
}
}
Label {
text: dataset.value
elide: Label.ElideRight
font.family: app.monoFont
horizontalAlignment: Text.AlignLeft
color: Qt.rgba(230/255, 224/255, 178/255, 1)
anchors {
left: center.right
right: units.left
margins: app.spacing / 2
verticalCenter: parent.verticalCenter
}
}
Label {
id: units
font.family: app.monoFont
text: "[" + dataset.units + "]"
visible: dataset.units.length > 0
horizontalAlignment: Text.AlignRight
color: Qt.rgba(81/255, 116/255, 151/255, 1)
anchors {
rightMargin: 0
right: parent.right
margins: app.spacing / 2
verticalCenter: parent.verticalCenter
}
}
}

View File

@ -0,0 +1,127 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtCharts 2.3
import Dataset 1.0
Window {
id: graphWindow
property int graphId: -1
property real maximumValue: -Infinity
property real minimumValue: +Infinity
spacing: -1
showIcon: false
visible: opacity > 0
opacity: enabled ? 1 : 0
Behavior on opacity {NumberAnimation{}}
borderColor: Qt.rgba(81/255, 116/255, 151/255, 1)
title: CppGraphProvider.getDataset(graphId).title +
" (" + CppGraphProvider.getDataset(graphId).units + ")"
Connections {
target: CppGraphProvider
function onDataUpdated() {
// Cancel if window is not enabled
if (!graphWindow.enabled)
return
// Update maximum value (if required)
maximumValue = CppGraphProvider.maximumValue(graphId)
minimumValue = CppGraphProvider.minimumValue(graphId)
// Get central value
var medianValue = Math.max(1, (maximumValue + minimumValue)) / 2
if (maximumValue == minimumValue)
medianValue = maximumValue
// Center graph verticaly
var mostDiff = Math.max(Math.abs(minimumValue), Math.abs(maximumValue))
var min = medianValue * (1 - 0.5) - Math.abs(medianValue - mostDiff)
var max = medianValue * (1 + 0.5) + Math.abs(medianValue - mostDiff)
if (minimumValue < 0)
min = max * -1
// Update axes only if needed
if (positionAxis.min !== min)
positionAxis.min = min
if (positionAxis.max !== max)
positionAxis.max = max
// Draw graph
CppGraphProvider.updateGraph(series, graphId)
}
}
ChartView {
antialiasing: false
anchors.fill: parent
legend.visible: false
backgroundRoundness: 0
enabled: graphWindow.enabled
visible: graphWindow.enabled
backgroundColor: graphWindow.backgroundColor
margins {
top: 0
bottom: 0
left: 0
right: 0
}
ValueAxis {
id: timeAxis
min: 0
labelFormat: " "
lineVisible: false
labelsVisible: false
tickType: ValueAxis.TicksFixed
labelsFont.family: app.monoFont
max: CppGraphProvider.displayedPoints
gridLineColor: Qt.rgba(81/255, 116/255, 151/255, 1)
}
ValueAxis {
id: positionAxis
min: 0
max: 1
lineVisible: false
tickType: ValueAxis.TicksFixed
labelsFont.family: app.monoFont
labelsColor: Qt.rgba(81/255, 116/255, 151/255, 1)
gridLineColor: Qt.rgba(81/255, 116/255, 151/255, 1)
}
LineSeries {
id: series
width: 2
axisX: timeAxis
useOpenGL: true
capStyle: Qt.RoundCap
axisYRight: positionAxis
color: Qt.rgba(230/255, 224/255, 178/255, 1)
}
}
}

View File

@ -0,0 +1,80 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import Group 1.0
import Dataset 1.0
Window {
id: groupWindow
spacing: -1
showIcon: false
title: group.title
visible: opacity > 0
opacity: enabled ? 1 : 0
Behavior on opacity {NumberAnimation{}}
borderColor: Qt.rgba(81/255, 116/255, 151/255, 1)
property int groupIndex: 0
property Group group: null
Connections {
target: CppQmlBridge
function onUpdated() {
if (groupWindow.enabled)
group = CppQmlBridge.getGroup(groupIndex)
}
}
ScrollView {
id: _sv
clip: true
contentWidth: -1
anchors.fill: parent
anchors.margins: app.spacing
ScrollBar.vertical.z: 5
enabled: contentHeight > parent.width
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
ScrollBar.vertical.visible: ScrollBar.vertical.size < 1
ColumnLayout {
x: 0
spacing: app.spacing
width: _sv.width - (_sv.ScrollBar.vertical.visible ? 10 : 0)
Repeater {
model: group.datasetCount
delegate: DataDelegate {
Layout.fillWidth: true
dataset: group.getDataset(index)
}
}
}
}
}

View File

@ -0,0 +1,83 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
RowLayout {
id: _led
spacing: app.spacing
//
// Custom properties
//
property alias label: _label
property alias indicator: _dot
property alias text: _label.text
property alias font: _label.font
property alias flashDuration: _timer.interval
property color onColor: Qt.rgba(215/255, 45/255, 96/255, 1)
property color offColor: Qt.rgba(45/255, 96/255, 115/255, 1)
//
// Turns on the LED for a short period of time
//
function flash() {
_led.enabled = true
if (_timer.running)
_timer.restart()
else
_timer.start()
}
//
// Used to allow the flash behavior
//
Timer {
id: _timer
interval: 50
onTriggered: _led.enabled = false
}
//
// LED indicator
//
Rectangle {
id: _dot
width: 18
height: 18
radius: width / 2
Layout.alignment: Qt.AlignVCenter
color: _led.enabled ? _led.onColor : _led.offColor
}
//
// LED text
//
Label {
id: _label
font.family: app.monoFont
color: palette.highlightedText
Layout.alignment: Qt.AlignVCenter
}
}

View File

@ -0,0 +1,190 @@
/*
* Copyright (c) 2018 Kaan-Sat <https://kaansat.com.mx/>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.0
import QtLocation 5.11
import QtPositioning 5.11
import QtQuick.Layouts 1.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Universal 2.0
import Qt.labs.settings 1.0
ColumnLayout {
id: gps
spacing: app.spacing
Component.onCompleted: centerMap()
//
// Real-time GPS coordinates components
//
property real latitude: CppQmlBridge.gpsLatitude
property real longitude: CppQmlBridge.gpsLongitude
//
// Will be true if GPS coordinates are different from (0,0)
//
readonly property bool gpsWorking: latitude != 0 || longitude != 0
//
// Location of Queretaro
//
readonly property var qroCoordinates: QtPositioning.coordinate(20.5846129, -100.385372)
//
// Used to know if we need to center the map
//
property var oldCoordinates: QtPositioning.coordinate(0,0)
//
// Real-time position
//
readonly property var gpsCoordinates: QtPositioning.coordinate(latitude, longitude)
//
// Center map when connecting with CanSat
//
Connections {
target: CppQmlBridge
function onUpdated() {
if (oldCoordinates === QtPositioning.coordinate(0,0)) {
map.center = gpsCoordinates
oldCoordinates = gpsCoordinates
}
gps.latitude = CppQmlBridge.gpsLatitude
gps.longitude = CppQmlBridge.gpsLongitude
}
} Connections {
target: CppSerialManager
function onPortChanged() {
oldCoordinates = QtPositioning.coordinate(0,0)
}
}
//
// Centers the map to Queretaro if the GPS is not working,
// otherwise, centers the map to the CanSat's position
//
function centerMap() {
// GPS not responding, go to QRO
if (!gpsWorking)
map.center = qroCoordinates
// Show GPS position
else
map.center = gpsCoordinates
}
//
// Save settings between runs
//
Settings {
property alias mapType: mapTypeSelector.currentIndex
}
//
// Controls
//
RowLayout {
spacing: app.spacing
Layout.fillWidth: true
ComboBox {
id: mapTypeSelector
textRole: "description"
Layout.fillWidth: true
model: map.supportedMapTypes
onCurrentIndexChanged: map.activeMapType = map.supportedMapTypes[currentIndex]
}
Button {
text: qsTr("Re-center")
icon.color: palette.buttonText
icon.source: "qrc:/icons/location-on.svg"
onClicked: centerMap()
}
}
//
// Map
//
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
border {
width: 2
color: "#646464"
}
Map {
id: map
anchors.fill: parent
copyrightsVisible: false
color: Universal.background
anchors.margins: parent.border.width
zoomLevel: (map.minimumZoomLevel + map.maximumZoomLevel) * 0.8
MapQuickItem {
sourceItem: Rectangle {
id: dot
width: 20
height: 20
opacity: 0.1
color: "#f00"
border.width: 2
radius: width / 2
border.color: "#fff"
Connections {
target: CppSerialManager
function onPacketReceived() {
timer.restart()
dot.opacity = 0.8
}
}
Behavior on opacity { NumberAnimation { duration: 500 } }
Timer {
id: timer
repeat: true
interval: 500
Component.onCompleted: start()
onTriggered: dot.opacity = CppSerialManager.connected ? 0.25 : 0.1
}
}
coordinate: gpsWorking ? gpsCoordinates : qroCoordinates
anchorPoint: Qt.point(sourceItem.width / 2,
sourceItem.height/ 2)
}
plugin: Plugin {
name: "mapboxgl"
}
}
}
}

View File

@ -0,0 +1,129 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
Page {
clip: true
id: window
//
// Custom properties
//
property int borderWidth: 3
property alias icon: _bt.icon
property bool gradient: false
property alias showIcon: _bt.visible
property color titleColor: palette.brightText
property color borderColor: palette.highlight
property color backgroundColor: Qt.darker(palette.base)
property color gradientColor: window.gradient ? Qt.rgba(5/255, 139/255, 167/255, 1) : window.borderColor
//
// Animations
//
Behavior on opacity {NumberAnimation{}}
Behavior on Layout.preferredWidth {NumberAnimation{}}
Behavior on Layout.preferredHeight {NumberAnimation{}}
//
// Layout properties
//
visible: opacity > 0
Layout.preferredWidth: enabled ? implicitWidth : 0
Layout.preferredHeight: enabled ? implicitHeight : 0
//
// Background widget
//
background: Rectangle {
color: window.backgroundColor
radius: window.borderWidth + 2
border.width: window.borderWidth
border.color: window.gradientColor
}
//
// Window title & controls
//
header: Rectangle {
height: 32
color: window.borderColor
radius: window.borderWidth + 2
gradient: Gradient {
GradientStop {
position: 0
color: window.borderColor
}
GradientStop {
position: 1
color: window.gradientColor
}
}
Rectangle {
z: 5
color: window.gradientColor
height: window.gradient ? 1 : parent.radius
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
}
}
RowLayout {
spacing: 0
anchors.fill: parent
ToolButton {
id: _bt
flat: true
enabled: false
icon.width: 24
icon.height: 24
Layout.minimumWidth: 32
Layout.maximumWidth: 32
icon.color: window.titleColor
Layout.alignment: Qt.AlignVCenter
Layout.maximumHeight: parent.height
Layout.minimumHeight: parent.height
icon.source: "qrc:/icons/equalizer.svg"
}
Label {
font.bold: true
text: window.title
Layout.fillWidth: true
color: window.titleColor
Layout.alignment: Qt.AlignVCenter
horizontalAlignment: window.showIcon ? Label.AlignLeft : Label.AlignHCenter
}
}
}
}

111
assets/qml/main.qml Normal file
View File

@ -0,0 +1,111 @@
/*
* Copyright (c) 2020 Alex Spataru <https://github.com/alex-spataru>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import QtQuick 2.12
import QtQuick.Window 2.0
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import Qt.labs.settings 1.0
import "Widgets" as Widgets
ApplicationWindow {
id: app
//
// Global properties
//
readonly property int spacing: 8
readonly property color consoleColor: Qt.rgba(142/255, 205/255, 157/255, 1)
readonly property string monoFont: {
switch (Qt.platform.os) {
case "osx":
return "Menlo"
case "windows":
return "Consolas"
default:
return "Monospace"
}
}
//
// Window geometry
//
minimumWidth: 960
minimumHeight: 640
title: CppAppName + " " + CppAppVersion
//
// Save/load settings
//
Settings {
property alias mwX: app.x
property alias mwY: app.y
property alias mwWidth: app.width
property alias mwHeight: app.height
}
//
// Set fusion palette
//
palette.base: Qt.rgba(33/255, 55/255, 63/255, 1)
palette.text: Qt.rgba(255/255, 255/255, 255/255, 1)
palette.link: Qt.rgba(64/255, 157/255, 160/255, 1)
palette.button: Qt.rgba(33/255, 55/255, 63/255, 1)
palette.window: Qt.rgba(33/255, 55/255, 63/255, 1)
palette.highlight: Qt.rgba(64/255, 157/255, 160/255, 1)
palette.buttonText: Qt.rgba(255/255, 255/255, 255/255, 1)
palette.windowText: Qt.rgba(255/255, 255/255, 255/255, 1)
palette.toolTipBase: Qt.rgba(230/255, 224/255, 178/255, 1)
palette.toolTipText: Qt.rgba(230/255, 224/255, 178/255, 1)
palette.brightText: Qt.rgba(255/255, 255/255, 255/255, 1)
palette.highlightedText: Qt.rgba(230/255, 224/255, 178/255, 1)
//
// User interface loader
//
Loader {
anchors.fill: parent
onStatusChanged: {
if (status == Loader.Ready)
timer.start()
}
sourceComponent: UI {
anchors.fill: parent
background: Rectangle {
color: "#111"
}
}
}
//
// Window loader timer
//
Timer {
id: timer
interval: 500
onTriggered: app.visible = true
}
}

6
ci-scripts/linux/build.sh Executable file
View File

@ -0,0 +1,6 @@
mkdir build
cd build
g++ --version
qmake --version
qmake ../*.pro
make -j 4

12
ci-scripts/linux/install.sh Executable file
View File

@ -0,0 +1,12 @@
sudo apt-get -qq update
sudo apt-get -qq install libgl1-mesa-dev libxkbcommon-x11-0
sudo apt-add-repository -y ppa:ubuntu-toolchain-r/test
sudo add-apt-repository -y ppa:jonathonf/gcc-9
sudo apt-get update
sudo apt-get -qq install libc6-i386 build-essential libgl1-mesa-dev mesa-common-dev libgles2-mesa-dev libxkbcommon-x11-0 libxcb-icccm4-dev libxcb-xinerama0 libxcb-image0 libxcb-keysyms1
sudo apt-get -qq install libxcb-*
sudo apt-get -qq qtbase5-dev qt5-qmake qt5-default libqt5opengl5 qml-module-qtquick-controls2 libqt5charts5 libqt5charts5-dev
sudo apt-get -qq remove gcc g++
sudo apt-get install gcc-9 g++-9
sudo ln -s /usr/bin/g++-9 /usr/bin/g++
sudo ln -s /usr/bin/gcc-9 /usr/bin/gcc

9
ci-scripts/osx/build.sh Executable file
View File

@ -0,0 +1,9 @@
export PATH="/usr/local/opt/qt/bin:$PATH"
source ~/.bash_profile
export LDFLAGS="-L/usr/local/opt/qt/lib"
export CPPFLAGS="-I/usr/local/opt/qt/include"
mkdir build
cd build
qmake ../*.pro
make
make dmg

4
ci-scripts/osx/install.sh Executable file
View File

@ -0,0 +1,4 @@
brew install glew
brew install clang-format
brew install qt
brew install create-dmg

View File

@ -0,0 +1,9 @@
[Desktop Entry]
Name=SigLAB
Comment=Serial data processing & visualization software
Exec=siglab
Terminal=false
Type=Application
StartupNotify=true
Categories=Electronics;Engineering;Science;
Icon=siglab

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
deploy/macOS/dmg_bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
deploy/macOS/icon.icns Normal file

Binary file not shown.

30
deploy/macOS/info.plist Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>SerialStudio</string>
<key>CFBundleGetInfoString</key>
<string>Copyright © 2020 Alex Spataru</string>
<key>CFBundleIconFile</key>
<string>icon</string>
<key>CFBundleIdentifier</key>
<string>org.alexspataru.serial-studio</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Serial Studio</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>LSHasLocalizedDisplayName</key>
<true/>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSSupportsSuddenTermination</key>
<false/>
</dict>
</plist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -0,0 +1 @@
IDI_ICON1 ICON DISCARDABLE "icon.ico"

BIN
doc/Logo.xcf Normal file

Binary file not shown.

BIN
doc/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
doc/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

1
libs/QSimpleUpdater/.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
doc/* linguist-documentation

30
libs/QSimpleUpdater/.gitignore vendored Normal file
View File

@ -0,0 +1,30 @@
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Qt project file
*.pro.user

View File

@ -0,0 +1,19 @@
language: cpp
compiler: gcc
dist: trusty
sudo: required
before_install:
- sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
- sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa
- sudo apt-get update -qq
install:
- sudo apt-get install -y --force-yes build-essential g++-4.8 -y
- sudo apt-get install -y --force-yes libudev-dev libts-dev libgl1-mesa-dev libglu1-mesa-dev libasound2-dev libpulse-dev -y
- sudo apt-get install -y --force-yes qtbase5-dev qtdeclarative5-dev libqt5gui5 qttools5-dev-tools qttools5-dev qtmultimedia5-dev
script:
- qmake -qt=qt5 QSimpleUpdater.pro
- make -j4

View File

@ -0,0 +1,27 @@
# DON'T BE A DICK PUBLIC LICENSE
> Version 1, December 2009
> Copyright (C) 2009 Philip Sturgeon <me@philsturgeon.uk>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
> DON'T BE A DICK PUBLIC LICENSE
> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1. Do whatever you like with the original work, just don't be a dick.
Being a dick includes - but is not limited to - the following instances:
1a. Outright copyright infringement - Don't just copy this and change the name.
1b. Selling the unmodified original with no work done what-so-ever, that's REALLY being a dick.
1c. Modifying the original work to contain hidden harmful content. That would make you a PROPER dick.
2. If you become rich through modifications, related works/services, or supporting the original work,
share the love. Only a dick would make loads off this work and not buy the original work's
creator(s) a pint.
3. Code is provided with no warranty. Using somebody else's code and bitching when it goes wrong makes
you a DONKEY dick. Fix the problem yourself. A non-dick would submit the fix back.

View File

@ -0,0 +1,47 @@
#
# Copyright (c) 2014-2016 Alex Spataru <alex_spataru@outlook.com>
#
# This file is part of the QSimpleUpdater library, which is released under
# the DBAD license, you can read a copy of it below:
#
# DON'T BE A DICK PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION
# AND MODIFICATION:
#
# Do whatever you like with the original work, just don't be a dick.
# Being a dick includes - but is not limited to - the following instances:
#
# 1a. Outright copyright infringement - Don't just copy this and change the
# name.
# 1b. Selling the unmodified original with no work done what-so-ever, that's
# REALLY being a dick.
# 1c. Modifying the original work to contain hidden harmful content.
# That would make you a PROPER dick.
#
# If you become rich through modifications, related works/services, or
# supporting the original work, share the love.
# Only a dick would make loads off this work and not buy the original works
# creator(s) a pint.
#
# Code is provided with no warranty. Using somebody else's code and bitching
# when it goes wrong makes you a DONKEY dick.
# Fix the problem yourself. A non-dick would submit the fix back.
QT += gui
QT += core
QT += network
QT += widgets
INCLUDEPATH += $$PWD/include
SOURCES += \
$$PWD/src/Updater.cpp \
$$PWD/src/Downloader.cpp \
$$PWD/src/QSimpleUpdater.cpp
HEADERS += \
$$PWD/include/QSimpleUpdater.h \
$$PWD/src/Updater.h \
$$PWD/src/Downloader.h
FORMS += $$PWD/src/Downloader.ui
RESOURCES += $$PWD/etc/resources/qsimpleupdater.qrc

View File

@ -0,0 +1,31 @@
#
# Copyright (c) 2014-2016 Alex Spataru <alex_spataru@outlook.com>
#
# This file is part of the QSimpleUpdater library, which is released under
# the DBAD license, you can read a copy of it below:
#
# DON'T BE A DICK PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION
# AND MODIFICATION:
#
# Do whatever you like with the original work, just don't be a dick.
# Being a dick includes - but is not limited to - the following instances:
#
# 1a. Outright copyright infringement - Don't just copy this and change the
# name.
# 1b. Selling the unmodified original with no work done what-so-ever, that's
# REALLY being a dick.
# 1c. Modifying the original work to contain hidden harmful content.
# That would make you a PROPER dick.
#
# If you become rich through modifications, related works/services, or
# supporting the original work, share the love.
# Only a dick would make loads off this work and not buy the original works
# creator(s) a pint.
#
# Code is provided with no warranty. Using somebody else's code and bitching
# when it goes wrong makes you a DONKEY dick.
# Fix the problem yourself. A non-dick would submit the fix back.
TEMPLATE = lib
DEFINES += QSU_SHARED
include ($$PWD/QSimpleUpdater.pri)

View File

@ -0,0 +1,74 @@
# QSimpleUpdater
[![Build Status](https://img.shields.io/travis/alex-spataru/QSimpleUpdater.svg?style=flat-square)](https://travis-ci.org/alex-spataru/QSimpleUpdater)
QSimpleUpdater is an implementation of an auto-updating system to be used with Qt projects. It allows you to easily check for updates, download them and install them. Additionally, the QSimpleUpdater allows you to check for updates for different "modules" of your application. Check the [WTFs Section](#wtfs-section) for more information.
Online documentation can be found [here](http://frc-utilities.github.io/documentation/qsimpleupdater/).
[![Downloading](etc/screenshots/downloading.png)](etc/screenshots/)
## Integrating QSimpleUpdater with your projects
1. Copy the QSimpleUpdater folder in your "3rd-party" folder.
2. Include the QSimpleUpdater project include (*pri*) file using the include() function.
3. That's all! Check the [tutorial project](/tutorial) as a reference for your project.
## WTFs Section
### 1. How does the QSimpleUpdater check for updates?
The QSimpleUpdater downloads an update definition file stored in JSON format. This file specifies the latest version, the download links and changelogs for each platform (you can also register your own platform easily if needed).
After downloading this file, the library analyzes the local version and the remote version. If the remote version is greater than the local version, then the library infers that there is an update available and notifies the user.
An example update definition file can be found [here](https://github.com/alex-spataru/QSimpleUpdater/blob/master/tutorial/definitions/updates.json).
### 2. Can I customize the update notifications shown to the user?
Yes! You can "toggle" which notifications to show using the library's functions or re-implement by yourself the notifications by "reacting" to the signals emitted by the QSimpleUpdater.
```c++
QString url = "https://MyBadassApplication.com/updates.json";
QSimpleUpdater::getInstance()->setNotifyOnUpdate (url, true);
QSimpleUpdater::getInstance()->setNotifyOnFinish (url, false);
QSimpleUpdater::getInstance()->checkForUpdates (url);
```
### 3. Is the application able to download the updates directly?
Yes. If there is an update available, the library will prompt the user if he/she wants to download the update. You can enable or disable the integrated downloader with the following code:
```c++
QString url = "https://MyBadassApplication.com/updates.json";
QSimpleUpdater::getInstance()->setDownloaderEnabled (url, true);
```
### 4. Why do I need to specify an URL for each function of the library?
The QSimpleUpdater allows you to use different updater instances, which can be accessed with the URL of the update definitions.
While it is not obligatory to use multiple updater instances, this can be useful for applications that make use of plugins or different modules.
Say that you are developing a game, in this case, you could use the following code:
```c++
// Update the game textures
QString textures_url = "https://MyBadassGame.com/textures.json"
QSimpleUpdater::getInstance()->setModuleName (textures_url, "textures");
QSimpleUpdater::getInstance()->setModuleVersion (textures_url, "0.4");
QSimpleUpdater::getInstance()->checkForUpdates (textures_url);
// Update the game sounds
QString sounds_url = "https://MyBadassGame.com/sounds.json"
QSimpleUpdater::getInstance()->setModuleName (sounds_url, "sounds");
QSimpleUpdater::getInstance()->setModuleVersion (sounds_url, "0.6");
QSimpleUpdater::getInstance()->checkForUpdates (sounds_url);
// Update the client (name & versions are already stored in qApp)
QString client_url = "https://MyBadassGame.com/client.json"
QSimpleUpdater::getInstance()->checkForUpdates (client_url);
```
## License
QSimpleUpdater is free and open-source software, it is released under the [DBAD](COPYING.md) license.

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,66 @@
# Introduction
QSimpleUpdater is an implementation of an auto-updating system to be used with Qt projects. It allows you to easily check for updates, download them and install them. Additionally, the QSimpleUpdater allows you to check for updates for different "modules" of your application. Check the WTFs for more information.
## Integrating QSimpleUpdater with your projects
1. Copy the QSimpleUpdater folder in your "3rd-party" folder.
2. Include the QSimpleUpdater project include (*pri*) file using the include() function.
3. That's all! Check the tutorial project as a reference for your project.
## WTFs Section
### 1. How does the QSimpleUpdater check for updates?
The QSimpleUpdater downloads an update definition file stored in JSON format. This file specifies the latest version, the download links and changelogs for each platform (you can also register your own platform easily if needed).
After downloading this file, the library analyzes the local version and the remote version. If the remote version is greater than the local version, then the library infers that there is an update available and notifies the user.
### 2. Can I customize the update notifications shown to the user?
Yes! You can "toggle" which notifications to show using the library's functions or re-implement by yourself the notifications by "reacting" to the signals emitted by the QSimpleUpdater.
```
QString url = "https://MyBadassApplication.com/updates.json";
QSimpleUpdater::getInstance()->setNotifyOnUpdate (url, true);
QSimpleUpdater::getInstance()->setNotifyOnFinish (url, false);
QSimpleUpdater::getInstance()->checkForUpdates (url);
```
### 3. Is the application able to download the updates directly?
Yes. If there is an update available, the library will prompt the user if he/she wants to download the update. You can enable or disable the integrated downloader with the following code:
```
QString url = "https://MyBadassApplication.com/updates.json";
QSimpleUpdater::getInstance()->setDownloaderEnabled (url, true);
```
### 4. Why do I need to specify an URL for each function of the library?
The QSimpleUpdater allows you to use different updater instances, which can be accessed with the URL of the update definitions.
While it is not obligatory to use multiple updater instances, this can be useful for applications that make use of plugins or different modules.
Say that you are developing a game, in this case, you could use the following code:
```
// Update the game textures
QString textures_url = "https://MyBadassGame.com/textures.json"
QSimpleUpdater::getInstance()->setModuleName (textures_url, "textures");
QSimpleUpdater::getInstance()->setModuleVersion (textures_url, "0.4");
QSimpleUpdater::getInstance()->checkForUpdates (textures_url);
// Update the game sounds
QString sounds_url = "https://MyBadassGame.com/sounds.json"
QSimpleUpdater::getInstance()->setModuleName (sounds_url, "sounds");
QSimpleUpdater::getInstance()->setModuleVersion (sounds_url, "0.6");
QSimpleUpdater::getInstance()->checkForUpdates (sounds_url);
// Update the client (name & versions are already stored in qApp)
QString client_url = "https://MyBadassGame.com/client.json"
QSimpleUpdater::getInstance()->checkForUpdates (client_url);
```
## License
QSimpleUpdater is free and open-source software, it is released under the Don't Be A Dick License.

View File

@ -0,0 +1,9 @@
<html>
<head>
<meta http-equiv="refresh" content="0; url=output/html/index.html"/>
</head>
<body>
<h2>You are being redirected...</h2>
<p>If this piece of crap does not work, please click <a href="output/html/index.html">here</a>.</p>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,106 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QSimpleUpdater: Class List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QSimpleUpdater
</div>
<div id="projectbrief">A simple auto-updater system for Qt applications</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li class="current"><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Class List</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_downloader.html" target="_self">Downloader</a></td><td class="desc">Implements an integrated file downloader with a nice UI </td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_q_simple_updater.html" target="_self">QSimpleUpdater</a></td><td class="desc">Manages the updater instances </td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_updater.html" target="_self">Updater</a></td><td class="desc">Downloads and interprests the update definition file </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

View File

@ -0,0 +1,122 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QSimpleUpdater: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QSimpleUpdater
</div>
<div id="projectbrief">A simple auto-updater system for Qt applications</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Downloader Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="class_downloader.html">Downloader</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="class_downloader.html#a2909b4a7cfb35f2709849ee2c95dae0e">calculateSizes</a>(qint64 received, qint64 total)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_downloader.html#a662cc753f90f25c91721f8edeaac9b57">calculateTimeRemaining</a>(qint64 received, qint64 total)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_downloader.html#a17209ffbd584af1a3e836e46e70d18d9">cancelDownload</a>()</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>Downloader</b>(QWidget *parent=0) (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>downloadFinished</b>(const QString &amp;url, const QString &amp;filepath) (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
<tr><td class="entry"><a class="el" href="class_downloader.html#abd39884d0586459bdd09b490913223fe">installUpdate</a>()</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_filePath</b> (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_manager</b> (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_reply</b> (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_startTime</b> (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_ui</b> (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_useCustomProcedures</b> (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_downloader.html#acfd827dd6b36e82a4cc8bfbb284056e9">onDownloadFinished</a>()</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_downloader.html#a0117b0dd837b46ca5cdd8b4f2ea5a552">openDownload</a>()</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_downloader.html#ae4285290c22361353a36f25e742fc829">round</a>(const qreal &amp;input)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr><td class="entry"><a class="el" href="class_downloader.html#a26a4f889029c63c11f679284397a3285">setUseCustomInstallProcedures</a>(const bool &amp;custom)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_downloader.html#a7f81027436d44ca52168b30a6eb0d379">startDownload</a>(const QUrl &amp;url)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_downloader.html#a097bee5b7d904da53427c5a5cb47ce83">updateProgress</a>(qint64 received, qint64 total)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_downloader.html#a3e7a91a3cdfa68e3bc59db0af1377f9c">useCustomInstallProcedures</a>() const </td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>~Downloader</b>() (defined in <a class="el" href="class_downloader.html">Downloader</a>)</td><td class="entry"><a class="el" href="class_downloader.html">Downloader</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>

View File

@ -0,0 +1,517 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QSimpleUpdater: Downloader Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QSimpleUpdater
</div>
<div id="projectbrief">A simple auto-updater system for Qt applications</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-slots">Public Slots</a> &#124;
<a href="#signals">Signals</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-slots">Private Slots</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="class_downloader-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">Downloader Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Implements an integrated file downloader with a nice UI.
<a href="class_downloader.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_downloader_8h_source.html">Downloader.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for Downloader:</div>
<div class="dyncontent">
<div class="center">
<img src="class_downloader.png" usemap="#Downloader_map" alt=""/>
<map id="Downloader_map" name="Downloader_map">
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-slots"></a>
Public Slots</h2></td></tr>
<tr class="memitem:a7f81027436d44ca52168b30a6eb0d379"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a7f81027436d44ca52168b30a6eb0d379">startDownload</a> (const QUrl &amp;url)</td></tr>
<tr class="separator:a7f81027436d44ca52168b30a6eb0d379"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26a4f889029c63c11f679284397a3285"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a26a4f889029c63c11f679284397a3285">setUseCustomInstallProcedures</a> (const bool &amp;custom)</td></tr>
<tr class="separator:a26a4f889029c63c11f679284397a3285"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="signals"></a>
Signals</h2></td></tr>
<tr class="memitem:a7374214627efe871ac19af293f702f9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7374214627efe871ac19af293f702f9a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>downloadFinished</b> (const QString &amp;url, const QString &amp;filepath)</td></tr>
<tr class="separator:a7374214627efe871ac19af293f702f9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a4c89702786810ca23a9816dd3c762283"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c89702786810ca23a9816dd3c762283"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Downloader</b> (QWidget *parent=0)</td></tr>
<tr class="separator:a4c89702786810ca23a9816dd3c762283"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e7a91a3cdfa68e3bc59db0af1377f9c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a3e7a91a3cdfa68e3bc59db0af1377f9c">useCustomInstallProcedures</a> () const </td></tr>
<tr class="separator:a3e7a91a3cdfa68e3bc59db0af1377f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-slots"></a>
Private Slots</h2></td></tr>
<tr class="memitem:a0117b0dd837b46ca5cdd8b4f2ea5a552"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a0117b0dd837b46ca5cdd8b4f2ea5a552">openDownload</a> ()</td></tr>
<tr class="separator:a0117b0dd837b46ca5cdd8b4f2ea5a552"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd39884d0586459bdd09b490913223fe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#abd39884d0586459bdd09b490913223fe">installUpdate</a> ()</td></tr>
<tr class="separator:abd39884d0586459bdd09b490913223fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a17209ffbd584af1a3e836e46e70d18d9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a17209ffbd584af1a3e836e46e70d18d9">cancelDownload</a> ()</td></tr>
<tr class="separator:a17209ffbd584af1a3e836e46e70d18d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfd827dd6b36e82a4cc8bfbb284056e9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#acfd827dd6b36e82a4cc8bfbb284056e9">onDownloadFinished</a> ()</td></tr>
<tr class="separator:acfd827dd6b36e82a4cc8bfbb284056e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2909b4a7cfb35f2709849ee2c95dae0e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a2909b4a7cfb35f2709849ee2c95dae0e">calculateSizes</a> (qint64 received, qint64 total)</td></tr>
<tr class="separator:a2909b4a7cfb35f2709849ee2c95dae0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a097bee5b7d904da53427c5a5cb47ce83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a097bee5b7d904da53427c5a5cb47ce83">updateProgress</a> (qint64 received, qint64 total)</td></tr>
<tr class="separator:a097bee5b7d904da53427c5a5cb47ce83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a662cc753f90f25c91721f8edeaac9b57"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#a662cc753f90f25c91721f8edeaac9b57">calculateTimeRemaining</a> (qint64 received, qint64 total)</td></tr>
<tr class="separator:a662cc753f90f25c91721f8edeaac9b57"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:ae4285290c22361353a36f25e742fc829"><td class="memItemLeft" align="right" valign="top">qreal&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_downloader.html#ae4285290c22361353a36f25e742fc829">round</a> (const qreal &amp;input)</td></tr>
<tr class="separator:ae4285290c22361353a36f25e742fc829"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:afa212578c447d8d5a2af85562f53385d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa212578c447d8d5a2af85562f53385d"></a>
uint&#160;</td><td class="memItemRight" valign="bottom"><b>m_startTime</b></td></tr>
<tr class="separator:afa212578c447d8d5a2af85562f53385d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8fc9c6fda1015b5398300e2eb1432fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8fc9c6fda1015b5398300e2eb1432fd"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_filePath</b></td></tr>
<tr class="separator:ad8fc9c6fda1015b5398300e2eb1432fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afed75d920ca2440bf53ebb85ba6d528c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afed75d920ca2440bf53ebb85ba6d528c"></a>
Ui::Downloader *&#160;</td><td class="memItemRight" valign="bottom"><b>m_ui</b></td></tr>
<tr class="separator:afed75d920ca2440bf53ebb85ba6d528c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54326eccac53a0727e57727a26ce87ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54326eccac53a0727e57727a26ce87ab"></a>
QNetworkReply *&#160;</td><td class="memItemRight" valign="bottom"><b>m_reply</b></td></tr>
<tr class="separator:a54326eccac53a0727e57727a26ce87ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14e5f9a42801bc219e69f01439b98581"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14e5f9a42801bc219e69f01439b98581"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>m_useCustomProcedures</b></td></tr>
<tr class="separator:a14e5f9a42801bc219e69f01439b98581"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29d51b83f23e81ab8a1c66847643e52f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29d51b83f23e81ab8a1c66847643e52f"></a>
QNetworkAccessManager *&#160;</td><td class="memItemRight" valign="bottom"><b>m_manager</b></td></tr>
<tr class="separator:a29d51b83f23e81ab8a1c66847643e52f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Implements an integrated file downloader with a nice UI. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a2909b4a7cfb35f2709849ee2c95dae0e"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::calculateSizes </td>
<td>(</td>
<td class="paramtype">qint64&#160;</td>
<td class="paramname"><em>received</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">qint64&#160;</td>
<td class="paramname"><em>total</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Calculates the appropiate size units (bytes, KB or MB) for the received data and the total download size. Then, this function proceeds to update the dialog controls/UI. </p>
<p>References <a class="el" href="class_downloader.html#ae4285290c22361353a36f25e742fc829">round()</a>.</p>
<p>Referenced by <a class="el" href="class_downloader.html#a097bee5b7d904da53427c5a5cb47ce83">updateProgress()</a>.</p>
</div>
</div>
<a class="anchor" id="a662cc753f90f25c91721f8edeaac9b57"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::calculateTimeRemaining </td>
<td>(</td>
<td class="paramtype">qint64&#160;</td>
<td class="paramname"><em>received</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">qint64&#160;</td>
<td class="paramname"><em>total</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Uses two time samples (from the current time and a previous sample) to calculate how many bytes have been downloaded.</p>
<p>Then, this function proceeds to calculate the appropiate units of time (hours, minutes or seconds) and constructs a user-friendly string, which is displayed in the dialog. </p>
<p>Referenced by <a class="el" href="class_downloader.html#a097bee5b7d904da53427c5a5cb47ce83">updateProgress()</a>.</p>
</div>
</div>
<a class="anchor" id="a17209ffbd584af1a3e836e46e70d18d9"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::cancelDownload </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Prompts the user if he/she wants to cancel the download and cancels the download if the user agrees to do that. </p>
</div>
</div>
<a class="anchor" id="abd39884d0586459bdd09b490913223fe"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::installUpdate </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Instructs the OS to open the downloaded file.</p>
<dl class="section note"><dt>Note</dt><dd>If <code><a class="el" href="class_downloader.html#a3e7a91a3cdfa68e3bc59db0af1377f9c">useCustomInstallProcedures()</a></code> returns <code>true</code>, the function will not instruct the OS to open the downloaded file. You can use the signals fired by the <code><a class="el" href="class_q_simple_updater.html" title="Manages the updater instances. ">QSimpleUpdater</a></code> to install the update with your own implementations/code. </dd></dl>
<p>References <a class="el" href="class_downloader.html#a0117b0dd837b46ca5cdd8b4f2ea5a552">openDownload()</a>, and <a class="el" href="class_downloader.html#a3e7a91a3cdfa68e3bc59db0af1377f9c">useCustomInstallProcedures()</a>.</p>
<p>Referenced by <a class="el" href="class_downloader.html#acfd827dd6b36e82a4cc8bfbb284056e9">onDownloadFinished()</a>.</p>
</div>
</div>
<a class="anchor" id="acfd827dd6b36e82a4cc8bfbb284056e9"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::onDownloadFinished </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes the downloaded data to a temp. directory and updates the UI controls. </p><dl class="section note"><dt>Note</dt><dd>If the function detects that the downloaded data is an HTML file (e.g. a redirection notice from the server), the function will add the *.html extension to the downloaded file. This ensures that the download will be resumed when the OS opens a web-browser with the redirection notice. </dd></dl>
<p>References <a class="el" href="class_downloader.html#abd39884d0586459bdd09b490913223fe">installUpdate()</a>.</p>
<p>Referenced by <a class="el" href="class_downloader.html#a7f81027436d44ca52168b30a6eb0d379">startDownload()</a>.</p>
</div>
</div>
<a class="anchor" id="a0117b0dd837b46ca5cdd8b4f2ea5a552"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::openDownload </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Opens the downloaded file. </p><dl class="section note"><dt>Note</dt><dd>If the downloaded file is not found, then the function will alert the user about the error. </dd></dl>
<p>Referenced by <a class="el" href="class_downloader.html#abd39884d0586459bdd09b490913223fe">installUpdate()</a>.</p>
</div>
</div>
<a class="anchor" id="ae4285290c22361353a36f25e742fc829"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">qreal Downloader::round </td>
<td>(</td>
<td class="paramtype">const qreal &amp;&#160;</td>
<td class="paramname"><em>input</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Rounds the given <em>input</em> to two decimal places </p>
<p>Referenced by <a class="el" href="class_downloader.html#a2909b4a7cfb35f2709849ee2c95dae0e">calculateSizes()</a>.</p>
</div>
</div>
<a class="anchor" id="a26a4f889029c63c11f679284397a3285"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::setUseCustomInstallProcedures </td>
<td>(</td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>custom</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If the <em>custom</em> parameter is set to <code>true</code>, then the <code><a class="el" href="class_downloader.html" title="Implements an integrated file downloader with a nice UI. ">Downloader</a></code> will not attempt to open the downloaded file.</p>
<p>Use the signals fired by the <code><a class="el" href="class_q_simple_updater.html" title="Manages the updater instances. ">QSimpleUpdater</a></code> to implement your own install procedures. </p>
<p>Referenced by <a class="el" href="class_updater.html#ac3f35326fb62b9cf8a2421d91651ad60">Updater::setUseCustomInstallProcedures()</a>.</p>
</div>
</div>
<a class="anchor" id="a7f81027436d44ca52168b30a6eb0d379"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::startDownload </td>
<td>(</td>
<td class="paramtype">const QUrl &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Begins downloading the file at the given <em>url</em> </p>
<p>References <a class="el" href="class_downloader.html#acfd827dd6b36e82a4cc8bfbb284056e9">onDownloadFinished()</a>, and <a class="el" href="class_downloader.html#a097bee5b7d904da53427c5a5cb47ce83">updateProgress()</a>.</p>
<p>Referenced by <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">Updater::setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="a097bee5b7d904da53427c5a5cb47ce83"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Downloader::updateProgress </td>
<td>(</td>
<td class="paramtype">qint64&#160;</td>
<td class="paramname"><em>received</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">qint64&#160;</td>
<td class="paramname"><em>total</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Uses the <em>received</em> and <em>total</em> parameters to get the download progress and update the progressbar value on the dialog. </p>
<p>References <a class="el" href="class_downloader.html#a2909b4a7cfb35f2709849ee2c95dae0e">calculateSizes()</a>, and <a class="el" href="class_downloader.html#a662cc753f90f25c91721f8edeaac9b57">calculateTimeRemaining()</a>.</p>
<p>Referenced by <a class="el" href="class_downloader.html#a7f81027436d44ca52168b30a6eb0d379">startDownload()</a>.</p>
</div>
</div>
<a class="anchor" id="a3e7a91a3cdfa68e3bc59db0af1377f9c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool Downloader::useCustomInstallProcedures </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the updater shall not intervene when the download has finished (you can use the <code><a class="el" href="class_q_simple_updater.html" title="Manages the updater instances. ">QSimpleUpdater</a></code> signals to know when the download is completed). </p>
<p>Referenced by <a class="el" href="class_downloader.html#abd39884d0586459bdd09b490913223fe">installUpdate()</a>, and <a class="el" href="class_updater.html#a7860e1643f426dc4d62cec2cdf207cd5">Updater::useCustomInstallProcedures()</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="_downloader_8h_source.html">Downloader.h</a></li>
<li>Downloader.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

View File

@ -0,0 +1,126 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QSimpleUpdater: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QSimpleUpdater
</div>
<div id="projectbrief">A simple auto-updater system for Qt applications</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">QSimpleUpdater Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">checkForUpdates</a>(const QString &amp;url)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>checkingFinished</b>(const QString &amp;url) (defined in <a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a>)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>downloadFinished</b>(const QString &amp;url, const QString &amp;filepath) (defined in <a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a>)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#a1bbffc681514ca5393450b8664c137bb">getChangelog</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#a10f421d41b30134583ee1f5e8cfbc59d">getDownloaderEnabled</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#a2c660cca487b092fd8e1b366a964a10b">getDownloadUrl</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#adea7d414a9430fc2b653231a87eaacc6">getInstance</a>()</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#aefb5ac20bec6e8509e2b55ed14926a70">getLatestVersion</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#a30c3bccb5c6f06c1a243fa2629f441a3">getModuleName</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#ad7391bb43acbcbf1627cc51262c2ec60">getModuleVersion</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#acc540358f0d887e4945ac061667a596d">getNotifyOnFinish</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#acdc00558a979df664910b07cb82f9b36">getNotifyOnUpdate</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#a0f061c6945b58664c2c9f9ec26f0d87c">getPlatformKey</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#a6557bff5a8a255291f12d2613879981b">getUpdateAvailable</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#a0ff15deef5af536150911353df0c44b2">setDownloaderEnabled</a>(const QString &amp;url, const bool &amp;enabled)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#a4b5e2bb2b88ab10a3c6c3a83661a2ebe">setModuleName</a>(const QString &amp;url, const QString &amp;name)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#a1a2a03f01c7ba081637268910fc50919">setModuleVersion</a>(const QString &amp;url, const QString &amp;version)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#ad9e53f893874d54bff8c787c2f560bd2">setNotifyOnFinish</a>(const QString &amp;url, const bool &amp;notify)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#a4789b616743189642a023fa7704e9c00">setNotifyOnUpdate</a>(const QString &amp;url, const bool &amp;notify)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#af6b2713b7468a69ce3ff46074e642df8">setPlatformKey</a>(const QString &amp;url, const QString &amp;platform)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_q_simple_updater.html#a6c30dd784023264dd6ec885ec755f515">setUseCustomInstallProcedures</a>(const QString &amp;url, const bool &amp;custom)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_q_simple_updater.html#af8f4cca002e820499d1fbca127095c87">usesCustomInstallProcedures</a>(const QString &amp;url) const </td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>~QSimpleUpdater</b>() (defined in <a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a>)</td><td class="entry"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>

View File

@ -0,0 +1,787 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QSimpleUpdater: QSimpleUpdater Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QSimpleUpdater
</div>
<div id="projectbrief">A simple auto-updater system for Qt applications</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-slots">Public Slots</a> &#124;
<a href="#signals">Signals</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="class_q_simple_updater-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">QSimpleUpdater Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Manages the updater instances.
<a href="class_q_simple_updater.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_q_simple_updater_8h_source.html">QSimpleUpdater.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for QSimpleUpdater:</div>
<div class="dyncontent">
<div class="center">
<img src="class_q_simple_updater.png" usemap="#QSimpleUpdater_map" alt=""/>
<map id="QSimpleUpdater_map" name="QSimpleUpdater_map">
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-slots"></a>
Public Slots</h2></td></tr>
<tr class="memitem:a791c89568adb171a62ccd0704570b68d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">checkForUpdates</a> (const QString &amp;url)</td></tr>
<tr class="separator:a791c89568adb171a62ccd0704570b68d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b5e2bb2b88ab10a3c6c3a83661a2ebe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a4b5e2bb2b88ab10a3c6c3a83661a2ebe">setModuleName</a> (const QString &amp;url, const QString &amp;name)</td></tr>
<tr class="separator:a4b5e2bb2b88ab10a3c6c3a83661a2ebe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4789b616743189642a023fa7704e9c00"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a4789b616743189642a023fa7704e9c00">setNotifyOnUpdate</a> (const QString &amp;url, const bool &amp;notify)</td></tr>
<tr class="separator:a4789b616743189642a023fa7704e9c00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad9e53f893874d54bff8c787c2f560bd2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#ad9e53f893874d54bff8c787c2f560bd2">setNotifyOnFinish</a> (const QString &amp;url, const bool &amp;notify)</td></tr>
<tr class="separator:ad9e53f893874d54bff8c787c2f560bd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6b2713b7468a69ce3ff46074e642df8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#af6b2713b7468a69ce3ff46074e642df8">setPlatformKey</a> (const QString &amp;url, const QString &amp;platform)</td></tr>
<tr class="separator:af6b2713b7468a69ce3ff46074e642df8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a2a03f01c7ba081637268910fc50919"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a1a2a03f01c7ba081637268910fc50919">setModuleVersion</a> (const QString &amp;url, const QString &amp;version)</td></tr>
<tr class="separator:a1a2a03f01c7ba081637268910fc50919"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ff15deef5af536150911353df0c44b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a0ff15deef5af536150911353df0c44b2">setDownloaderEnabled</a> (const QString &amp;url, const bool &amp;enabled)</td></tr>
<tr class="separator:a0ff15deef5af536150911353df0c44b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c30dd784023264dd6ec885ec755f515"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a6c30dd784023264dd6ec885ec755f515">setUseCustomInstallProcedures</a> (const QString &amp;url, const bool &amp;custom)</td></tr>
<tr class="separator:a6c30dd784023264dd6ec885ec755f515"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="signals"></a>
Signals</h2></td></tr>
<tr class="memitem:a4d848457bbda4cf981b0539d6b8d6c1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d848457bbda4cf981b0539d6b8d6c1a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>checkingFinished</b> (const QString &amp;url)</td></tr>
<tr class="separator:a4d848457bbda4cf981b0539d6b8d6c1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab76ecf1731d58d5f809379efd238f236"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab76ecf1731d58d5f809379efd238f236"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>downloadFinished</b> (const QString &amp;url, const QString &amp;filepath)</td></tr>
<tr class="separator:ab76ecf1731d58d5f809379efd238f236"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:acdc00558a979df664910b07cb82f9b36"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#acdc00558a979df664910b07cb82f9b36">getNotifyOnUpdate</a> (const QString &amp;url) const </td></tr>
<tr class="separator:acdc00558a979df664910b07cb82f9b36"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc540358f0d887e4945ac061667a596d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#acc540358f0d887e4945ac061667a596d">getNotifyOnFinish</a> (const QString &amp;url) const </td></tr>
<tr class="separator:acc540358f0d887e4945ac061667a596d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6557bff5a8a255291f12d2613879981b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a6557bff5a8a255291f12d2613879981b">getUpdateAvailable</a> (const QString &amp;url) const </td></tr>
<tr class="separator:a6557bff5a8a255291f12d2613879981b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a10f421d41b30134583ee1f5e8cfbc59d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a10f421d41b30134583ee1f5e8cfbc59d">getDownloaderEnabled</a> (const QString &amp;url) const </td></tr>
<tr class="separator:a10f421d41b30134583ee1f5e8cfbc59d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8f4cca002e820499d1fbca127095c87"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#af8f4cca002e820499d1fbca127095c87">usesCustomInstallProcedures</a> (const QString &amp;url) const </td></tr>
<tr class="separator:af8f4cca002e820499d1fbca127095c87"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1bbffc681514ca5393450b8664c137bb"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a1bbffc681514ca5393450b8664c137bb">getChangelog</a> (const QString &amp;url) const </td></tr>
<tr class="separator:a1bbffc681514ca5393450b8664c137bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30c3bccb5c6f06c1a243fa2629f441a3"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a30c3bccb5c6f06c1a243fa2629f441a3">getModuleName</a> (const QString &amp;url) const </td></tr>
<tr class="separator:a30c3bccb5c6f06c1a243fa2629f441a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c660cca487b092fd8e1b366a964a10b"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a2c660cca487b092fd8e1b366a964a10b">getDownloadUrl</a> (const QString &amp;url) const </td></tr>
<tr class="separator:a2c660cca487b092fd8e1b366a964a10b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f061c6945b58664c2c9f9ec26f0d87c"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a0f061c6945b58664c2c9f9ec26f0d87c">getPlatformKey</a> (const QString &amp;url) const </td></tr>
<tr class="separator:a0f061c6945b58664c2c9f9ec26f0d87c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefb5ac20bec6e8509e2b55ed14926a70"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#aefb5ac20bec6e8509e2b55ed14926a70">getLatestVersion</a> (const QString &amp;url) const </td></tr>
<tr class="separator:aefb5ac20bec6e8509e2b55ed14926a70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7391bb43acbcbf1627cc51262c2ec60"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#ad7391bb43acbcbf1627cc51262c2ec60">getModuleVersion</a> (const QString &amp;url) const </td></tr>
<tr class="separator:ad7391bb43acbcbf1627cc51262c2ec60"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:adea7d414a9430fc2b653231a87eaacc6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#adea7d414a9430fc2b653231a87eaacc6">getInstance</a> ()</td></tr>
<tr class="separator:adea7d414a9430fc2b653231a87eaacc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:a0305a6c8eb9d0bf213736d1c1beb4149"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_updater.html">Updater</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater</a> (const QString &amp;url) const </td></tr>
<tr class="separator:a0305a6c8eb9d0bf213736d1c1beb4149"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Manages the updater instances. </p>
<p>The <code><a class="el" href="class_q_simple_updater.html" title="Manages the updater instances. ">QSimpleUpdater</a></code> class manages the updater system and allows for parallel application modules to check for updates and download them.</p>
<p>The behavior of each updater can be regulated by specifying the update definitions URL (from where we download the individual update definitions) and defining the desired options by calling the individual "setter" functions (e.g. <code><a class="el" href="class_q_simple_updater.html#a4789b616743189642a023fa7704e9c00">setNotifyOnUpdate()</a></code>).</p>
<p>The <code><a class="el" href="class_q_simple_updater.html" title="Manages the updater instances. ">QSimpleUpdater</a></code> also implements an integrated downloader. If you need to use a custom install procedure/code, just create a function that is called when the <code>downloadFinished()</code> signal is emitted to implement your own install procedures.</p>
<p>By default, the downloader will try to open the file as if you opened it from a file manager or a web browser (with the "file:*" url). </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a791c89568adb171a62ccd0704570b68d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::checkForUpdates </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Instructs the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance with the registered <code>url</code> to download and interpret the update definitions file.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">Updater::checkForUpdates()</a>, and <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>.</p>
</div>
</div>
<a class="anchor" id="a1bbffc681514ca5393450b8664c137bb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString QSimpleUpdater::getChangelog </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the changelog of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em>.</p>
<dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">checkForUpdates()</a></code> before using this function </dd></dl>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_updater.html#af6a266ddbf0b855bcee1e9f77dfe9efb">Updater::changelog()</a>, and <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>.</p>
</div>
</div>
<a class="anchor" id="a10f421d41b30134583ee1f5e8cfbc59d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool QSimpleUpdater::getDownloaderEnabled </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> has the integrated downloader enabled.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_updater.html#a4f526325b92c344244303b877d990cd3">Updater::downloaderEnabled()</a>, and <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>.</p>
</div>
</div>
<a class="anchor" id="a2c660cca487b092fd8e1b366a964a10b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString QSimpleUpdater::getDownloadUrl </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the download URL of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em>.</p>
<dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">checkForUpdates()</a></code> before using this function </dd></dl>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_updater.html#a5690e5ab3dde19098caf77c22f8bf075">Updater::downloadUrl()</a>, and <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>.</p>
</div>
</div>
<a class="anchor" id="adea7d414a9430fc2b653231a87eaacc6"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="class_q_simple_updater.html">QSimpleUpdater</a> * QSimpleUpdater::getInstance </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the only instance of the class </p>
</div>
</div>
<a class="anchor" id="aefb5ac20bec6e8509e2b55ed14926a70"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString QSimpleUpdater::getLatestVersion </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the remote module version of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em>.</p>
<dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">checkForUpdates()</a></code> before using this function </dd></dl>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a25e7f289753c6d7b4439ee3728866a48">Updater::latestVersion()</a>.</p>
</div>
</div>
<a class="anchor" id="a30c3bccb5c6f06c1a243fa2629f441a3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString QSimpleUpdater::getModuleName </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the module name of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em>.</p>
<dl class="section note"><dt>Note</dt><dd>If the module name is empty, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will use the application name as its module name. </dd>
<dd>
If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a7d8369115126e41cdefd30004cefc46d">Updater::moduleName()</a>.</p>
</div>
</div>
<a class="anchor" id="ad7391bb43acbcbf1627cc51262c2ec60"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString QSimpleUpdater::getModuleVersion </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the module version of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em>.</p>
<dl class="section note"><dt>Note</dt><dd>If the module version is empty, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will use the application version as its module version. </dd>
<dd>
If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#af32daac9bff9cb3e79798fc9a825648e">Updater::moduleVersion()</a>.</p>
</div>
</div>
<a class="anchor" id="acc540358f0d887e4945ac061667a596d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool QSimpleUpdater::getNotifyOnFinish </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> shall notify the user when it finishes checking for updates.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#ad9fd2c8c3782c04289a76b1bf0b23ca0">Updater::notifyOnFinish()</a>.</p>
</div>
</div>
<a class="anchor" id="acdc00558a979df664910b07cb82f9b36"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool QSimpleUpdater::getNotifyOnUpdate </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> shall notify the user when an update is available.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#abefc7aae1333458ab03d50aec9b58581">Updater::notifyOnUpdate()</a>.</p>
</div>
</div>
<a class="anchor" id="a0f061c6945b58664c2c9f9ec26f0d87c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString QSimpleUpdater::getPlatformKey </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the platform key of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> registered with the given <em>url</em>. If you do not define a platform key, the system will assign the following platform key:</p><ul>
<li>On iOS: <code>ios</code> </li>
<li>On Mac OSX: <code>osx</code> </li>
<li>On Android: <code>android</code> </li>
<li>On GNU/Linux: <code>linux</code> </li>
<li>On Microsoft Windows: <code>windows</code> </li>
</ul>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#ad6d8a5d7b8fd9bdfde738d72c50f8bee">Updater::platformKey()</a>.</p>
</div>
</div>
<a class="anchor" id="a6557bff5a8a255291f12d2613879981b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool QSimpleUpdater::getUpdateAvailable </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> has an update available.</p>
<dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">checkForUpdates()</a></code> before using this function </dd></dl>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#aec889d582692cb41875ea803db3feb35">Updater::updateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="a0305a6c8eb9d0bf213736d1c1beb4149"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="class_updater.html">Updater</a> * QSimpleUpdater::getUpdater </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em>.</p>
<p>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with teh given <em>url</em> does not exist, this function will create it and configure it automatically. </p>
<p>References <a class="el" href="class_updater.html#a1219e9bb1c1fb0a68d757fbc0d9b76aa">Updater::setUrl()</a>.</p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">checkForUpdates()</a>, <a class="el" href="class_q_simple_updater.html#a1bbffc681514ca5393450b8664c137bb">getChangelog()</a>, <a class="el" href="class_q_simple_updater.html#a10f421d41b30134583ee1f5e8cfbc59d">getDownloaderEnabled()</a>, <a class="el" href="class_q_simple_updater.html#a2c660cca487b092fd8e1b366a964a10b">getDownloadUrl()</a>, <a class="el" href="class_q_simple_updater.html#aefb5ac20bec6e8509e2b55ed14926a70">getLatestVersion()</a>, <a class="el" href="class_q_simple_updater.html#a30c3bccb5c6f06c1a243fa2629f441a3">getModuleName()</a>, <a class="el" href="class_q_simple_updater.html#ad7391bb43acbcbf1627cc51262c2ec60">getModuleVersion()</a>, <a class="el" href="class_q_simple_updater.html#acc540358f0d887e4945ac061667a596d">getNotifyOnFinish()</a>, <a class="el" href="class_q_simple_updater.html#acdc00558a979df664910b07cb82f9b36">getNotifyOnUpdate()</a>, <a class="el" href="class_q_simple_updater.html#a0f061c6945b58664c2c9f9ec26f0d87c">getPlatformKey()</a>, <a class="el" href="class_q_simple_updater.html#a6557bff5a8a255291f12d2613879981b">getUpdateAvailable()</a>, <a class="el" href="class_q_simple_updater.html#a0ff15deef5af536150911353df0c44b2">setDownloaderEnabled()</a>, <a class="el" href="class_q_simple_updater.html#a4b5e2bb2b88ab10a3c6c3a83661a2ebe">setModuleName()</a>, <a class="el" href="class_q_simple_updater.html#a1a2a03f01c7ba081637268910fc50919">setModuleVersion()</a>, <a class="el" href="class_q_simple_updater.html#ad9e53f893874d54bff8c787c2f560bd2">setNotifyOnFinish()</a>, <a class="el" href="class_q_simple_updater.html#a4789b616743189642a023fa7704e9c00">setNotifyOnUpdate()</a>, <a class="el" href="class_q_simple_updater.html#af6b2713b7468a69ce3ff46074e642df8">setPlatformKey()</a>, <a class="el" href="class_q_simple_updater.html#a6c30dd784023264dd6ec885ec755f515">setUseCustomInstallProcedures()</a>, and <a class="el" href="class_q_simple_updater.html#af8f4cca002e820499d1fbca127095c87">usesCustomInstallProcedures()</a>.</p>
</div>
</div>
<a class="anchor" id="a0ff15deef5af536150911353df0c44b2"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::setDownloaderEnabled </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>enabled</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If the <em>enabled</em> parameter is set to <code>true</code>, the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> will open the integrated downloader if the user agrees to install the update (if any).</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a46d6db0d853ed8400a1725df436812ee">Updater::setDownloaderEnabled()</a>.</p>
</div>
</div>
<a class="anchor" id="a4b5e2bb2b88ab10a3c6c3a83661a2ebe"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::setModuleName </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>name</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Changes the module <em>name</em> of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered at the given <em>url</em>.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd>
<dd>
The module name is used on the user prompts. If the module name is empty, then the prompts will show the name of the application. </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a5ac7e1a2bd65353a5fdec22689f1adf3">Updater::setModuleName()</a>.</p>
</div>
</div>
<a class="anchor" id="a1a2a03f01c7ba081637268910fc50919"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::setModuleVersion </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>version</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Changes the module </p><dl class="section version"><dt>Version</dt><dd>of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered at the given <em>url</em>.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The module version is used to compare it with the remove version. If the module name is empty, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will use the application version. </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a8da70f39cc193b94c64769fc6f40dc2c">Updater::setModuleVersion()</a>.</p>
</div>
</div>
<a class="anchor" id="ad9e53f893874d54bff8c787c2f560bd2"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::setNotifyOnFinish </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>notify</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If <em>notify</em> is set to <code>true</code>, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> will notify the user when it has finished interpreting the update definitions file.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a949e507fd72ec4b2565bb49ebe98a2dc">Updater::setNotifyOnFinish()</a>.</p>
</div>
</div>
<a class="anchor" id="a4789b616743189642a023fa7704e9c00"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::setNotifyOnUpdate </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>notify</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If <em>notify</em> is set to <code>true</code>, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> will notify the user when an update is available.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#ad88b597bf4ae11a65a9c87171239ed00">Updater::setNotifyOnUpdate()</a>.</p>
</div>
</div>
<a class="anchor" id="af6b2713b7468a69ce3ff46074e642df8"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::setPlatformKey </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>platform</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Changes the platform key of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> isntance registered at the given <em>url</em>.</p>
<p>If the platform key is empty, then the system will use the following keys:</p><ul>
<li>On iOS: <code>ios</code> </li>
<li>On Mac OSX: <code>osx</code> </li>
<li>On Android: <code>android</code> </li>
<li>On GNU/Linux: <code>linux</code> </li>
<li>On Microsoft Windows: <code>windows</code> </li>
</ul>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a840a6b061590901eae3255ba74ff7ad8">Updater::setPlatformKey()</a>.</p>
</div>
</div>
<a class="anchor" id="a6c30dd784023264dd6ec885ec755f515"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void QSimpleUpdater::setUseCustomInstallProcedures </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>custom</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If the <em>custom</em> parameter is set to <code>true</code>, the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> will not try to open the downloaded file.</p>
<p>If you want to implement your own way to handle the downloaded file, just bind to the <code>downloadFinished()</code> signal and disable the integrated downloader with the <code><a class="el" href="class_q_simple_updater.html#a6c30dd784023264dd6ec885ec755f515">setUseCustomInstallProcedures()</a></code> function.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#ac3f35326fb62b9cf8a2421d91651ad60">Updater::setUseCustomInstallProcedures()</a>.</p>
</div>
</div>
<a class="anchor" id="af8f4cca002e820499d1fbca127095c87"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool QSimpleUpdater::usesCustomInstallProcedures </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> shall try to open the downloaded file.</p>
<p>If you want to implement your own way to handle the downloaded file, just bind to the <code>downloadFinished()</code> signal and disable the integrated downloader with the <code><a class="el" href="class_q_simple_updater.html#a6c30dd784023264dd6ec885ec755f515">setUseCustomInstallProcedures()</a></code> function.</p>
<dl class="section note"><dt>Note</dt><dd>If an <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance registered with the given <em>url</em> is not found, that <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> instance will be initialized automatically </dd></dl>
<p>References <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">getUpdater()</a>, and <a class="el" href="class_updater.html#a7860e1643f426dc4d62cec2cdf207cd5">Updater::useCustomInstallProcedures()</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="_q_simple_updater_8h_source.html">QSimpleUpdater.h</a></li>
<li>QSimpleUpdater.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

View File

@ -0,0 +1,144 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QSimpleUpdater: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QSimpleUpdater
</div>
<div id="projectbrief">A simple auto-updater system for Qt applications</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Updater Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="class_updater.html">Updater</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#af6a266ddbf0b855bcee1e9f77dfe9efb">changelog</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">checkForUpdates</a>()</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>checkingFinished</b>(const QString &amp;url) (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a247145d494c38d15f6569bbd209380e3">compare</a>(const QString &amp;x, const QString &amp;y)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#a4f526325b92c344244303b877d990cd3">downloaderEnabled</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>downloadFinished</b>(const QString &amp;url, const QString &amp;filepath) (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">signal</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#a5690e5ab3dde19098caf77c22f8bf075">downloadUrl</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a25e7f289753c6d7b4439ee3728866a48">latestVersion</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_changelog</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_downloader</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_downloaderEnabled</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_downloadUrl</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_latestVersion</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_manager</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_moduleName</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_moduleVersion</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_notifyOnFinish</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_notifyOnUpdate</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_openUrl</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_platform</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>m_updateAvailable</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>m_url</b> (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#a7d8369115126e41cdefd30004cefc46d">moduleName</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#af32daac9bff9cb3e79798fc9a825648e">moduleVersion</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#ad9fd2c8c3782c04289a76b1bf0b23ca0">notifyOnFinish</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#abefc7aae1333458ab03d50aec9b58581">notifyOnUpdate</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply</a>(QNetworkReply *reply)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#ad6d8a5d7b8fd9bdfde738d72c50f8bee">platformKey</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#a46d6db0d853ed8400a1725df436812ee">setDownloaderEnabled</a>(const bool &amp;enabled)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a5ac7e1a2bd65353a5fdec22689f1adf3">setModuleName</a>(const QString &amp;name)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#a8da70f39cc193b94c64769fc6f40dc2c">setModuleVersion</a>(const QString &amp;version)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a949e507fd72ec4b2565bb49ebe98a2dc">setNotifyOnFinish</a>(const bool &amp;notify)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#ad88b597bf4ae11a65a9c87171239ed00">setNotifyOnUpdate</a>(const bool &amp;notify)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a840a6b061590901eae3255ba74ff7ad8">setPlatformKey</a>(const QString &amp;platformKey)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable</a>(const bool &amp;available)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">private</span><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a1219e9bb1c1fb0a68d757fbc0d9b76aa">setUrl</a>(const QString &amp;url)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#ac3f35326fb62b9cf8a2421d91651ad60">setUseCustomInstallProcedures</a>(const bool &amp;custom)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"><span class="mlabel">slot</span></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#aec889d582692cb41875ea803db3feb35">updateAvailable</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Updater</b>() (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_updater.html#a7860e1643f426dc4d62cec2cdf207cd5">useCustomInstallProcedures</a>() const </td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>~Updater</b>() (defined in <a class="el" href="class_updater.html">Updater</a>)</td><td class="entry"><a class="el" href="class_updater.html">Updater</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>

View File

@ -0,0 +1,820 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QSimpleUpdater: Updater Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QSimpleUpdater
</div>
<div id="projectbrief">A simple auto-updater system for Qt applications</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-slots">Public Slots</a> &#124;
<a href="#signals">Signals</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-slots">Private Slots</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="class_updater-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">Updater Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Downloads and interprests the update definition file.
<a href="class_updater.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_updater_8h_source.html">Updater.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for Updater:</div>
<div class="dyncontent">
<div class="center">
<img src="class_updater.png" usemap="#Updater_map" alt=""/>
<map id="Updater_map" name="Updater_map">
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-slots"></a>
Public Slots</h2></td></tr>
<tr class="memitem:a4af41658f974f72c71a9463be7bba1b5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">checkForUpdates</a> ()</td></tr>
<tr class="separator:a4af41658f974f72c71a9463be7bba1b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1219e9bb1c1fb0a68d757fbc0d9b76aa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a1219e9bb1c1fb0a68d757fbc0d9b76aa">setUrl</a> (const QString &amp;<a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url</a>)</td></tr>
<tr class="separator:a1219e9bb1c1fb0a68d757fbc0d9b76aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ac7e1a2bd65353a5fdec22689f1adf3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a5ac7e1a2bd65353a5fdec22689f1adf3">setModuleName</a> (const QString &amp;name)</td></tr>
<tr class="separator:a5ac7e1a2bd65353a5fdec22689f1adf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad88b597bf4ae11a65a9c87171239ed00"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#ad88b597bf4ae11a65a9c87171239ed00">setNotifyOnUpdate</a> (const bool &amp;notify)</td></tr>
<tr class="separator:ad88b597bf4ae11a65a9c87171239ed00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a949e507fd72ec4b2565bb49ebe98a2dc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a949e507fd72ec4b2565bb49ebe98a2dc">setNotifyOnFinish</a> (const bool &amp;notify)</td></tr>
<tr class="separator:a949e507fd72ec4b2565bb49ebe98a2dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8da70f39cc193b94c64769fc6f40dc2c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a8da70f39cc193b94c64769fc6f40dc2c">setModuleVersion</a> (const QString &amp;version)</td></tr>
<tr class="separator:a8da70f39cc193b94c64769fc6f40dc2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46d6db0d853ed8400a1725df436812ee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a46d6db0d853ed8400a1725df436812ee">setDownloaderEnabled</a> (const bool &amp;enabled)</td></tr>
<tr class="separator:a46d6db0d853ed8400a1725df436812ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a840a6b061590901eae3255ba74ff7ad8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a840a6b061590901eae3255ba74ff7ad8">setPlatformKey</a> (const QString &amp;<a class="el" href="class_updater.html#ad6d8a5d7b8fd9bdfde738d72c50f8bee">platformKey</a>)</td></tr>
<tr class="separator:a840a6b061590901eae3255ba74ff7ad8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac3f35326fb62b9cf8a2421d91651ad60"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#ac3f35326fb62b9cf8a2421d91651ad60">setUseCustomInstallProcedures</a> (const bool &amp;custom)</td></tr>
<tr class="separator:ac3f35326fb62b9cf8a2421d91651ad60"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="signals"></a>
Signals</h2></td></tr>
<tr class="memitem:a82debd6b1ad627d6d40c0f2a9996e0c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82debd6b1ad627d6d40c0f2a9996e0c1"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>checkingFinished</b> (const QString &amp;<a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url</a>)</td></tr>
<tr class="separator:a82debd6b1ad627d6d40c0f2a9996e0c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a274a08240ad2bbea8cda6c52787510d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a274a08240ad2bbea8cda6c52787510d3"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>downloadFinished</b> (const QString &amp;<a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url</a>, const QString &amp;filepath)</td></tr>
<tr class="separator:a274a08240ad2bbea8cda6c52787510d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a7ebf698a86619ebaadd2eb6e772f2a3d"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url</a> () const </td></tr>
<tr class="separator:a7ebf698a86619ebaadd2eb6e772f2a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6a266ddbf0b855bcee1e9f77dfe9efb"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#af6a266ddbf0b855bcee1e9f77dfe9efb">changelog</a> () const </td></tr>
<tr class="separator:af6a266ddbf0b855bcee1e9f77dfe9efb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d8369115126e41cdefd30004cefc46d"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a7d8369115126e41cdefd30004cefc46d">moduleName</a> () const </td></tr>
<tr class="separator:a7d8369115126e41cdefd30004cefc46d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5690e5ab3dde19098caf77c22f8bf075"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a5690e5ab3dde19098caf77c22f8bf075">downloadUrl</a> () const </td></tr>
<tr class="separator:a5690e5ab3dde19098caf77c22f8bf075"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6d8a5d7b8fd9bdfde738d72c50f8bee"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#ad6d8a5d7b8fd9bdfde738d72c50f8bee">platformKey</a> () const </td></tr>
<tr class="separator:ad6d8a5d7b8fd9bdfde738d72c50f8bee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af32daac9bff9cb3e79798fc9a825648e"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#af32daac9bff9cb3e79798fc9a825648e">moduleVersion</a> () const </td></tr>
<tr class="separator:af32daac9bff9cb3e79798fc9a825648e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25e7f289753c6d7b4439ee3728866a48"><td class="memItemLeft" align="right" valign="top">QString&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a25e7f289753c6d7b4439ee3728866a48">latestVersion</a> () const </td></tr>
<tr class="separator:a25e7f289753c6d7b4439ee3728866a48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abefc7aae1333458ab03d50aec9b58581"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#abefc7aae1333458ab03d50aec9b58581">notifyOnUpdate</a> () const </td></tr>
<tr class="separator:abefc7aae1333458ab03d50aec9b58581"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad9fd2c8c3782c04289a76b1bf0b23ca0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#ad9fd2c8c3782c04289a76b1bf0b23ca0">notifyOnFinish</a> () const </td></tr>
<tr class="separator:ad9fd2c8c3782c04289a76b1bf0b23ca0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec889d582692cb41875ea803db3feb35"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#aec889d582692cb41875ea803db3feb35">updateAvailable</a> () const </td></tr>
<tr class="separator:aec889d582692cb41875ea803db3feb35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f526325b92c344244303b877d990cd3"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a4f526325b92c344244303b877d990cd3">downloaderEnabled</a> () const </td></tr>
<tr class="separator:a4f526325b92c344244303b877d990cd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7860e1643f426dc4d62cec2cdf207cd5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a7860e1643f426dc4d62cec2cdf207cd5">useCustomInstallProcedures</a> () const </td></tr>
<tr class="separator:a7860e1643f426dc4d62cec2cdf207cd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-slots"></a>
Private Slots</h2></td></tr>
<tr class="memitem:ae6e6597cd5b3ee32a12fad9c6c5a64ac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply</a> (QNetworkReply *reply)</td></tr>
<tr class="separator:ae6e6597cd5b3ee32a12fad9c6c5a64ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a38e54201eb876d14eb26fab40a7dc7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable</a> (const bool &amp;available)</td></tr>
<tr class="separator:a1a38e54201eb876d14eb26fab40a7dc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:a247145d494c38d15f6569bbd209380e3"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_updater.html#a247145d494c38d15f6569bbd209380e3">compare</a> (const QString &amp;x, const QString &amp;y)</td></tr>
<tr class="separator:a247145d494c38d15f6569bbd209380e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a51580c8199714afd10078d24dbc3514f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51580c8199714afd10078d24dbc3514f"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_url</b></td></tr>
<tr class="separator:a51580c8199714afd10078d24dbc3514f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afdfb2e8d597c45ea309de8948e2de282"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdfb2e8d597c45ea309de8948e2de282"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>m_notifyOnUpdate</b></td></tr>
<tr class="separator:afdfb2e8d597c45ea309de8948e2de282"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ca544f6c75c009469e236f9e5c4da15"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ca544f6c75c009469e236f9e5c4da15"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>m_notifyOnFinish</b></td></tr>
<tr class="separator:a5ca544f6c75c009469e236f9e5c4da15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b8f2c57972915d033710d9d44debcef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b8f2c57972915d033710d9d44debcef"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>m_updateAvailable</b></td></tr>
<tr class="separator:a5b8f2c57972915d033710d9d44debcef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad49b3d2b70630247739ab2b1f0706a7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad49b3d2b70630247739ab2b1f0706a7f"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>m_downloaderEnabled</b></td></tr>
<tr class="separator:ad49b3d2b70630247739ab2b1f0706a7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a229fb1904163af697d0b54ab9297bb3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a229fb1904163af697d0b54ab9297bb3f"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_openUrl</b></td></tr>
<tr class="separator:a229fb1904163af697d0b54ab9297bb3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af932fab28132a01f245d23ba7c5fbf70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af932fab28132a01f245d23ba7c5fbf70"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_platform</b></td></tr>
<tr class="separator:af932fab28132a01f245d23ba7c5fbf70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6267c084984d0163f16af987f56a1a95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6267c084984d0163f16af987f56a1a95"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_changelog</b></td></tr>
<tr class="separator:a6267c084984d0163f16af987f56a1a95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4aada318219e232a6f1be3b964262fb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4aada318219e232a6f1be3b964262fb8"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_moduleName</b></td></tr>
<tr class="separator:a4aada318219e232a6f1be3b964262fb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50efac338e702ea6f8ba31a3a8376c25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50efac338e702ea6f8ba31a3a8376c25"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_downloadUrl</b></td></tr>
<tr class="separator:a50efac338e702ea6f8ba31a3a8376c25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a55625e7bce2646912aa0a8299869bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a55625e7bce2646912aa0a8299869bc"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_moduleVersion</b></td></tr>
<tr class="separator:a4a55625e7bce2646912aa0a8299869bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af79a469656f846a69989827441f6199a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af79a469656f846a69989827441f6199a"></a>
QString&#160;</td><td class="memItemRight" valign="bottom"><b>m_latestVersion</b></td></tr>
<tr class="separator:af79a469656f846a69989827441f6199a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2354986fcdad345ca39914f13065d1b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2354986fcdad345ca39914f13065d1b0"></a>
<a class="el" href="class_downloader.html">Downloader</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_downloader</b></td></tr>
<tr class="separator:a2354986fcdad345ca39914f13065d1b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a21af5ff7e447e251e46f18a39fa34966"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21af5ff7e447e251e46f18a39fa34966"></a>
QNetworkAccessManager *&#160;</td><td class="memItemRight" valign="bottom"><b>m_manager</b></td></tr>
<tr class="separator:a21af5ff7e447e251e46f18a39fa34966"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Downloads and interprests the update definition file. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="af6a266ddbf0b855bcee1e9f77dfe9efb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString Updater::changelog </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the changelog defined by the update definitions file. </p><dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">checkForUpdates()</a></code> before using this function </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a1bbffc681514ca5393450b8664c137bb">QSimpleUpdater::getChangelog()</a>.</p>
</div>
</div>
<a class="anchor" id="a4af41658f974f72c71a9463be7bba1b5"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::checkForUpdates </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Downloads and interpets the update definitions file referenced by the <code><a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url()</a></code> function. </p>
<p>References <a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url()</a>.</p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a791c89568adb171a62ccd0704570b68d">QSimpleUpdater::checkForUpdates()</a>.</p>
</div>
</div>
<a class="anchor" id="a247145d494c38d15f6569bbd209380e3"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool Updater::compare </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>y</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Compares the two version strings (<em>x</em> and <em>y</em>).</p><ul>
<li>If <em>x</em> is greater than , this function returns <code>true</code>.</li>
<li>If <em>y</em> is greater than , this function returns <code>false</code>.</li>
<li>If both versions are the same, this function returns <code>false</code>. </li>
</ul>
<p>Referenced by <a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply()</a>.</p>
</div>
</div>
<a class="anchor" id="a4f526325b92c344244303b877d990cd3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool Updater::downloaderEnabled </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the integrated downloader is enabled. </p><dl class="section note"><dt>Note</dt><dd>If set to <code>true</code>, the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will open the downloader dialog if the user agrees to download the update. </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a10f421d41b30134583ee1f5e8cfbc59d">QSimpleUpdater::getDownloaderEnabled()</a>, and <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="a5690e5ab3dde19098caf77c22f8bf075"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString Updater::downloadUrl </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the download URL defined by the update definitions file. </p><dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">checkForUpdates()</a></code> before using this function </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a2c660cca487b092fd8e1b366a964a10b">QSimpleUpdater::getDownloadUrl()</a>, and <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="a25e7f289753c6d7b4439ee3728866a48"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString Updater::latestVersion </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the latest version defined by the update definitions file. </p><dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">checkForUpdates()</a></code> before using this function </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#aefb5ac20bec6e8509e2b55ed14926a70">QSimpleUpdater::getLatestVersion()</a>, <a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply()</a>, and <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="a7d8369115126e41cdefd30004cefc46d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString Updater::moduleName </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the name of the module (if defined) </p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a30c3bccb5c6f06c1a243fa2629f441a3">QSimpleUpdater::getModuleName()</a>, and <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="af32daac9bff9cb3e79798fc9a825648e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString Updater::moduleVersion </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the "local" version of the installed module </p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#ad7391bb43acbcbf1627cc51262c2ec60">QSimpleUpdater::getModuleVersion()</a>, and <a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply()</a>.</p>
</div>
</div>
<a class="anchor" id="ad9fd2c8c3782c04289a76b1bf0b23ca0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool Updater::notifyOnFinish </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the updater should notify the user when it finishes checking for updates.</p>
<dl class="section note"><dt>Note</dt><dd>If set to <code>true</code>, the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will notify the user even when there are no updates available (by congratulating him/her about being smart) </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#acc540358f0d887e4945ac061667a596d">QSimpleUpdater::getNotifyOnFinish()</a>, and <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="abefc7aae1333458ab03d50aec9b58581"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool Updater::notifyOnUpdate </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the updater should notify the user when an update is available. </p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#acdc00558a979df664910b07cb82f9b36">QSimpleUpdater::getNotifyOnUpdate()</a>, and <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="ae6e6597cd5b3ee32a12fad9c6c5a64ac"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::onReply </td>
<td>(</td>
<td class="paramtype">QNetworkReply *&#160;</td>
<td class="paramname"><em>reply</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Called when the download of the update definitions file is finished. </p>
<p>References <a class="el" href="class_updater.html#a247145d494c38d15f6569bbd209380e3">compare()</a>, <a class="el" href="class_updater.html#a25e7f289753c6d7b4439ee3728866a48">latestVersion()</a>, <a class="el" href="class_updater.html#af32daac9bff9cb3e79798fc9a825648e">moduleVersion()</a>, <a class="el" href="class_updater.html#ad6d8a5d7b8fd9bdfde738d72c50f8bee">platformKey()</a>, <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>, and <a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url()</a>.</p>
</div>
</div>
<a class="anchor" id="ad6d8a5d7b8fd9bdfde738d72c50f8bee"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString Updater::platformKey </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the platform key (be it system-set or user-set). If you do not define a platform key, the system will assign the following platform key:</p><ul>
<li>On iOS: <code>ios</code> </li>
<li>On Mac OSX: <code>osx</code> </li>
<li>On Android: <code>android</code> </li>
<li>On GNU/Linux: <code>linux</code> </li>
<li>On Microsoft Windows: <code>windows</code> </li>
</ul>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a0f061c6945b58664c2c9f9ec26f0d87c">QSimpleUpdater::getPlatformKey()</a>, <a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply()</a>, and <a class="el" href="class_updater.html#a840a6b061590901eae3255ba74ff7ad8">setPlatformKey()</a>.</p>
</div>
</div>
<a class="anchor" id="a46d6db0d853ed8400a1725df436812ee"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setDownloaderEnabled </td>
<td>(</td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>enabled</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If the <em>enabled</em> parameter is set to <code>true</code>, the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will open the integrated downloader if the user agrees to install the update (if any) </p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a0ff15deef5af536150911353df0c44b2">QSimpleUpdater::setDownloaderEnabled()</a>.</p>
</div>
</div>
<a class="anchor" id="a5ac7e1a2bd65353a5fdec22689f1adf3"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setModuleName </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>name</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Changes the module <em>name</em>. </p><dl class="section note"><dt>Note</dt><dd>The module name is used on the user prompts. If the module name is empty, then the prompts will show the name of the application. </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a4b5e2bb2b88ab10a3c6c3a83661a2ebe">QSimpleUpdater::setModuleName()</a>.</p>
</div>
</div>
<a class="anchor" id="a8da70f39cc193b94c64769fc6f40dc2c"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setModuleVersion </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>version</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Changes the module <em>version</em> </p><dl class="section note"><dt>Note</dt><dd>The module version is used to compare the local and remote versions. If the <em>version</em> parameter is empty, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will use the application version (referenced by <code>qApp</code>) </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a1a2a03f01c7ba081637268910fc50919">QSimpleUpdater::setModuleVersion()</a>.</p>
</div>
</div>
<a class="anchor" id="a949e507fd72ec4b2565bb49ebe98a2dc"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setNotifyOnFinish </td>
<td>(</td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>notify</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If <em>notify</em> is set to <code>true</code>, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will notify the user when it has finished interpreting the update definitions file. </p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#ad9e53f893874d54bff8c787c2f560bd2">QSimpleUpdater::setNotifyOnFinish()</a>.</p>
</div>
</div>
<a class="anchor" id="ad88b597bf4ae11a65a9c87171239ed00"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setNotifyOnUpdate </td>
<td>(</td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>notify</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If <em>notify</em> is set to <code>true</code>, then the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will notify the user when an update is available. </p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a4789b616743189642a023fa7704e9c00">QSimpleUpdater::setNotifyOnUpdate()</a>.</p>
</div>
</div>
<a class="anchor" id="a840a6b061590901eae3255ba74ff7ad8"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setPlatformKey </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>platformKey</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Changes the platform key. If the platform key is empty, then the system will use the following keys:</p><ul>
<li>On iOS: <code>ios</code> </li>
<li>On Mac OSX: <code>osx</code> </li>
<li>On Android: <code>android</code> </li>
<li>On GNU/Linux: <code>linux</code> </li>
<li>On Microsoft Windows: <code>windows</code> </li>
</ul>
<p>References <a class="el" href="class_updater.html#ad6d8a5d7b8fd9bdfde738d72c50f8bee">platformKey()</a>.</p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#af6b2713b7468a69ce3ff46074e642df8">QSimpleUpdater::setPlatformKey()</a>.</p>
</div>
</div>
<a class="anchor" id="a1a38e54201eb876d14eb26fab40a7dc7"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setUpdateAvailable </td>
<td>(</td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>available</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Prompts the user based on the value of the <em>available</em> parameter and the settings of this instance of the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> class. </p>
<p>References <a class="el" href="class_updater.html#a4f526325b92c344244303b877d990cd3">downloaderEnabled()</a>, <a class="el" href="class_updater.html#a5690e5ab3dde19098caf77c22f8bf075">downloadUrl()</a>, <a class="el" href="class_updater.html#a25e7f289753c6d7b4439ee3728866a48">latestVersion()</a>, <a class="el" href="class_updater.html#a7d8369115126e41cdefd30004cefc46d">moduleName()</a>, <a class="el" href="class_updater.html#ad9fd2c8c3782c04289a76b1bf0b23ca0">notifyOnFinish()</a>, <a class="el" href="class_updater.html#abefc7aae1333458ab03d50aec9b58581">notifyOnUpdate()</a>, <a class="el" href="class_downloader.html#a7f81027436d44ca52168b30a6eb0d379">Downloader::startDownload()</a>, and <a class="el" href="class_updater.html#aec889d582692cb41875ea803db3feb35">updateAvailable()</a>.</p>
<p>Referenced by <a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply()</a>.</p>
</div>
</div>
<a class="anchor" id="a1219e9bb1c1fb0a68d757fbc0d9b76aa"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setUrl </td>
<td>(</td>
<td class="paramtype">const QString &amp;&#160;</td>
<td class="paramname"><em>url</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Changes the <code>url</code> in which the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> can find the update definitions file. </p>
<p>References <a class="el" href="class_updater.html#a7ebf698a86619ebaadd2eb6e772f2a3d">url()</a>.</p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a0305a6c8eb9d0bf213736d1c1beb4149">QSimpleUpdater::getUpdater()</a>.</p>
</div>
</div>
<a class="anchor" id="ac3f35326fb62b9cf8a2421d91651ad60"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void Updater::setUseCustomInstallProcedures </td>
<td>(</td>
<td class="paramtype">const bool &amp;&#160;</td>
<td class="paramname"><em>custom</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">slot</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>If the <em>custom</em> parameter is set to <code>true</code>, the <code><a class="el" href="class_updater.html" title="Downloads and interprests the update definition file. ">Updater</a></code> will not try to open the downloaded file. Use the signals fired by the <code><a class="el" href="class_q_simple_updater.html" title="Manages the updater instances. ">QSimpleUpdater</a></code> to install the update from the downloaded file by yourself. </p>
<p>References <a class="el" href="class_downloader.html#a26a4f889029c63c11f679284397a3285">Downloader::setUseCustomInstallProcedures()</a>.</p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a6c30dd784023264dd6ec885ec755f515">QSimpleUpdater::setUseCustomInstallProcedures()</a>.</p>
</div>
</div>
<a class="anchor" id="aec889d582692cb41875ea803db3feb35"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool Updater::updateAvailable </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if there is an update available. </p><dl class="section warning"><dt>Warning</dt><dd>You should call <code><a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">checkForUpdates()</a></code> before using this function </dd></dl>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#a6557bff5a8a255291f12d2613879981b">QSimpleUpdater::getUpdateAvailable()</a>, and <a class="el" href="class_updater.html#a1a38e54201eb876d14eb26fab40a7dc7">setUpdateAvailable()</a>.</p>
</div>
</div>
<a class="anchor" id="a7ebf698a86619ebaadd2eb6e772f2a3d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">QString Updater::url </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns the URL of the update definitions file </p>
<p>Referenced by <a class="el" href="class_updater.html#a4af41658f974f72c71a9463be7bba1b5">checkForUpdates()</a>, <a class="el" href="class_updater.html#ae6e6597cd5b3ee32a12fad9c6c5a64ac">onReply()</a>, and <a class="el" href="class_updater.html#a1219e9bb1c1fb0a68d757fbc0d9b76aa">setUrl()</a>.</p>
</div>
</div>
<a class="anchor" id="a7860e1643f426dc4d62cec2cdf207cd5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool Updater::useCustomInstallProcedures </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns <code>true</code> if the updater shall not intervene when the download has finished (you can use the <code><a class="el" href="class_q_simple_updater.html" title="Manages the updater instances. ">QSimpleUpdater</a></code> signals to know when the download is completed). </p>
<p>References <a class="el" href="class_downloader.html#a3e7a91a3cdfa68e3bc59db0af1377f9c">Downloader::useCustomInstallProcedures()</a>.</p>
<p>Referenced by <a class="el" href="class_q_simple_updater.html#af8f4cca002e820499d1fbca127095c87">QSimpleUpdater::usesCustomInstallProcedures()</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="_updater_8h_source.html">Updater.h</a></li>
<li>Updater.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>

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