Favorites implementation #27

Merged
dorian merged 5 commits from favorites_implementation into master 2024-10-17 17:52:37 +02:00
47 changed files with 326 additions and 38 deletions

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<manifest package="com.itsblue.blueROCK" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.02.1" android:versionCode="9" android:installLocation="auto"> <manifest package="com.itsblue.blueROCK" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.03" android:versionCode="12" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="blueROCK" android:icon="@drawable/icon"> <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="blueROCK" android:icon="@drawable/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="blueROCK" android:screenOrientation="unspecified" android:launchMode="singleTop"> <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="blueROCK" android:screenOrientation="unspecified" android:launchMode="singleTop">
<intent-filter> <intent-filter>
@ -65,7 +65,7 @@
</application> </application>
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28"/> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28"/>
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application. <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,4 @@
QT += quick qml quickcontrols2 purchasing QT += quick qml quickcontrols2 purchasing widgets
CONFIG += c++11 CONFIG += c++11
android { android {

View file

@ -0,0 +1,36 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
Item {
id: control
property var images: []
SwipeView {
id: view
clip: true
anchors.fill: parent
anchors.margins: 1
anchors.bottomMargin: indicator.height
Repeater {
model: control.images.length
delegate: Image {
source: control.images[index]
fillMode: Image.PreserveAspectFit
}
}
}
PageIndicator {
id: indicator
anchors.bottom: control.bottom
anchors.horizontalCenter: parent.horizontalCenter
count: view.count
currentIndex: view.currentIndex
}
}

View file

@ -61,6 +61,8 @@ DataListView {
} }
} }
compCats.push( {"text": qsTr("Pinned"), "data": {"sort_rank":0, "cat_id":[-1]}} )
compCats.sort(function(a, b) { compCats.sort(function(a, b) {
return a['data']['sort_rank'] - b['data']['sort_rank']; return a['data']['sort_rank'] - b['data']['sort_rank'];
}); });
@ -87,6 +89,7 @@ DataListView {
property int year: new Date().getFullYear() property int year: new Date().getFullYear()
property var displayedCompCats: [] property var displayedCompCats: []
property var compFavorites: []
anchors.fill: parent anchors.fill: parent
@ -101,6 +104,7 @@ DataListView {
Component.onCompleted: { Component.onCompleted: {
initFilters() initFilters()
initFavorites()
if(model){ if(model){
control.status = 200 control.status = 200
@ -304,7 +308,6 @@ DataListView {
} }
function initFilters() { function initFilters() {
if(appSettings.read("displayedCompCats"+params.nation) !== "false"){ if(appSettings.read("displayedCompCats"+params.nation) !== "false"){
//console.log(appSettings.read("displayedCompCats"+params.nation)) //console.log(appSettings.read("displayedCompCats"+params.nation))
control.displayedCompCats = JSON.parse(appSettings.read("displayedCompCats"+params.nation)) control.displayedCompCats = JSON.parse(appSettings.read("displayedCompCats"+params.nation))
@ -326,6 +329,34 @@ DataListView {
//console.log(control.displayedCompCats) //console.log(control.displayedCompCats)
} }
function editFavorites(favorite, compId) {
if(control.compFavorites.indexOf(compId) >= 0 && !favorite) {
control.compFavorites.splice( control.compFavorites.indexOf(compId), 1)
}
else if(control.compFavorites.indexOf(compId) < 0 && favorite) {
control.compFavorites.push(compId)
}
appSettings.write("compFavorites", JSON.stringify(control.compFavorites))
// trigger 'changed' signal
control.compFavorites = control.compFavorites
}
function initFavorites() {
if(appSettings.read("compFavorites") !== "false"){
//console.log(appSettings.read("displayedCompCats"+params.nation))
control.compFavorites = JSON.parse(appSettings.read("compFavorites"))
}
else {
control.compFavorites = []
appSettings.write("compFavorites", JSON.stringify(control.compFavorites))
}
// trigger 'changed' signal
control.compFavorites = control.compFavorites
console.log(control.compFavorites)
}
Connections { Connections {
target: parent.selector target: parent.selector
onSelectionFinished: { onSelectionFinished: {
@ -369,12 +400,21 @@ DataListView {
property var cats: thisData["cats"] property var cats: thisData["cats"]
property int catId: thisData["cat_id"] === undefined ? 0:thisData["cat_id"] property int catId: thisData["cat_id"] === undefined ? 0:thisData["cat_id"]
property bool thisIsFavored: control.compFavorites.indexOf(parseInt(thisData['WetId'])) >= 0
property bool includedByFavorites: control.displayedCompCats.indexOf(-1) >= 0 && thisIsFavored
property bool includedByFilter: control.displayedCompCats.indexOf(parseInt(thisData['cat_id'])) >= 0 property bool includedByFilter: control.displayedCompCats.indexOf(parseInt(thisData['cat_id'])) >= 0
property bool thisIsVisible: includedByFavorites || includedByFilter
function updateVisibility() {
competitionDel.includedByFilter = control.displayedCompCats.indexOf(parseInt(competitionDel.thisData['cat_id'])) >= 0
competitionDel.thisIsFavored = control.compFavorites.indexOf(parseInt(thisData['WetId'])) >= 0
competitionDel.includedByFavorites = control.displayedCompCats.indexOf(-1) >= 0 && thisIsFavored
}
width: parent.width width: parent.width
height: includedByFilter ? compDelCol.height + 10 : 0 height: thisIsVisible ? compDelCol.height + 10 : 0
enabled: (thisData["cats"] !== undefined && thisData["cats"].length > 0) || competitionDel.thisData["homepage"] !== undefined || getCompInfoUrl(index) !== undefined enabled: ((thisData["cats"] !== undefined && thisData["cats"].length > 0) || competitionDel.thisData["homepage"] !== undefined || getCompInfoUrl(index) !== undefined) && height > 0
//visible: includedByFilter //visible: includedByFilter
opacity: 0 opacity: 0
@ -383,18 +423,22 @@ DataListView {
Connections { Connections {
target: control target: control
onDisplayedCompCatsChanged: { onDisplayedCompCatsChanged: {
competitionDel.includedByFilter = control.displayedCompCats.indexOf(parseInt(competitionDel.thisData['cat_id'])) >= 0 competitionDel.updateVisibility()
}
onCompFavoritesChanged: {
competitionDel.updateVisibility()
} }
} }
onThisDataChanged: { onThisDataChanged: {
if(includedByFilter){ if(thisIsVisible){
fadeInPa.start() fadeInPa.start()
} }
} }
onIncludedByFilterChanged: { onThisIsVisibleChanged: {
if(includedByFilter){ if(thisIsVisible){
fadeInPa.start() fadeInPa.start()
} }
else { else {
@ -443,20 +487,48 @@ DataListView {
spacing: 10 spacing: 10
Label { RowLayout {
id: nameLa
width: parent.width width: parent.width
Label {
id: nameLa
font.bold: true width: parent.width
wrapMode: Text.WordWrap font.bold: true
text: name wrapMode: Text.WordWrap
}
Label { text: name
//text: model.month
Layout.fillWidth: true
}
ToolButton {
id: bookmarkTb
icon.name: competitionDel.thisIsFavored ? "pinFilled":"pin"
onClicked: {
control.editFavorites(!competitionDel.thisIsFavored, parseInt(thisData['WetId']))
}
Layout.alignment: Layout.Right
Behavior on icon.name {
SequentialAnimation {
NumberAnimation {
property: "scale"
target: bookmarkTb
duration: 75
to: 0.8
}
NumberAnimation {
property: "scale"
target: bookmarkTb
duration: 75
to: 1
}
}
}
}
} }
Label { Label {

View file

@ -17,10 +17,13 @@
*/ */
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.4 import QtQuick.Controls 2.5
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import QtQuick.Controls.Material 2.3 import QtQuick.Controls.Material 2.3
import QtLocation 5.13
import QtPurchasing 1.13
import "../Components" import "../Components"
@ -101,7 +104,7 @@ DataListView {
onWidgetDataChanged: { onWidgetDataChanged: {
console.log("widget data changed") console.log("widget data changed")
if(control.widgetData['discipline'] === 'speed'){ if(control.widgetData['discipline'] === 'speed' && control.widgetData['route_order'] === "-1" && Object.keys(control.widgetData['route_names']).length > 2){
speedFlowChart.flowchartData = ({}) speedFlowChart.flowchartData = ({})
speedFlowChart.enabled = true speedFlowChart.enabled = true
speedFlowChart.flowchartData = control.widgetData speedFlowChart.flowchartData = control.widgetData
@ -734,6 +737,131 @@ DataListView {
speedFlowChartBackgroundRect.state = 'hidden' speedFlowChartBackgroundRect.state = 'hidden'
} }
} }
Rectangle {
id: speedFlowChartLockedOverlay
state: appSettings.read("speedBackendPurchase") === "1" ? "unlocked":"locked"
anchors.fill: parent
anchors.margins: -20
color: "white"
Connections {
target: speedFlowChartProduct
onPurchaseRestored: {
speedFlowChartLockedOverlay.state = appSettings.read("speedBackendPurchase") === "1" ? "unlocked":"locked"
}
onPurchaseSucceeded: {
speedFlowChartLockedOverlay.state = appSettings.read("speedBackendPurchase") === "1" ? "unlocked":"locked"
}
onPurchaseFailed: {
purchaseBt.text = qsTr("Purchase failed")
purchaseBt.enabled = false
buttonTextResetTimer.start()
}
}
Timer {
id: buttonTextResetTimer
interval: 2000
running: false
repeat: false
onTriggered: {
purchaseBt.text = (speedFlowChartProduct.status === Product.Registered
? "Buy now for " + speedFlowChartProduct.price
: qsTr("this item is currently unavailable"))
purchaseBt.enabled = true
}
}
ColumnLayout {
id: lockedLayout
anchors {
fill: parent
topMargin: parent.height * 0.05
bottomMargin: parent.height * 0.1
rightMargin: parent.width * 0.1 + 20
leftMargin: parent.width * 0.1 + 20
}
//spacing: parent.height * 0.05
Image {
id: name
Layout.alignment: Layout.Center
Layout.preferredHeight: height
Layout.preferredWidth: width
width: lockedLayout.height * 0.1
height: width
mipmap: true
source: "qrc:/icons/lock.png"
}
Text {
Layout.fillWidth: true
height: parent.height * 0.05
text: qsTr("This is a premium feature.")
font.bold: true
font.pixelSize: parent.height * 0.05
fontSizeMode: Text.Fit
minimumPixelSize: 1
horizontalAlignment: Text.AlignHCenter
}
SwipeGallery {
Layout.fillHeight: true
Layout.fillWidth: true
images: ["qrc:/screenshots/SpeedFlowchartDemo/1.png","qrc:/screenshots/SpeedFlowchartDemo/2.png","qrc:/screenshots/SpeedFlowchartDemo/3.png"]
}
Button {
id: purchaseBt
Layout.alignment: Layout.Center
enabled: speedFlowChartProduct.status === Product.Registered
text: speedFlowChartProduct.status === Product.Registered
? "Buy now for " + speedFlowChartProduct.price
: qsTr("this item is currently unavailable")
icon.name: "buy"
//display: AbstractButton.TextBesideIcon
onClicked: speedFlowChartProduct.purchase()
}
}
states: [
State {
name: "unlocked"
PropertyChanges {
target: speedFlowChartLockedOverlay
visible: false
}
},
State {
name: "locked"
PropertyChanges {
target: speedFlowChartLockedOverlay
visible: true
}
}
]
}
} }
states: [ states: [

View file

@ -20,7 +20,7 @@ import QtQuick 2.9
import QtQuick.Window 2.2 import QtQuick.Window 2.2
import QtQuick.Controls 2.4 import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtPurchasing 1.0 import QtPurchasing 1.13
import com.itsblue.digitalRockRanking 1.0 import com.itsblue.digitalRockRanking 1.0
@ -61,7 +61,7 @@ Window {
'label' : 'World Cups', 'label' : 'World Cups',
'nation' : 'ICC', 'nation' : 'ICC',
'bgcolor' : '#B8C8FF', 'bgcolor' : '#B8C8FF',
'sort_rank': 0, 'sort_rank': 1,
'cat_id' : [69] 'cat_id' : [69]
}, },
'youth' : { 'youth' : {
@ -71,14 +71,14 @@ Window {
'serie_reg' : '^[0-9]{2,2}_EYC', 'serie_reg' : '^[0-9]{2,2}_EYC',
'rang_title': '', 'rang_title': '',
'bgcolor' : '#D8E8FF', 'bgcolor' : '#D8E8FF',
'sort_rank': 1, 'sort_rank': 2,
'cat_id' : [71,258] 'cat_id' : [71,258]
}, },
'cont': { 'cont': {
'label' : 'Continental Events', 'label' : 'Continental Events',
'nation' : 'ICC', 'nation' : 'ICC',
'bgcolor' : '#B8C8FF', 'bgcolor' : '#B8C8FF',
'sort_rank': 2, 'sort_rank': 3,
'cat_id' : [262] 'cat_id' : [262]
}, },
'masters' : { 'masters' : {
@ -88,7 +88,7 @@ Window {
// 'serie_reg' : '^[0-9]{2,2}_(WC|TR){1,1}.*', // 'serie_reg' : '^[0-9]{2,2}_(WC|TR){1,1}.*',
// 'rang_title': 'CUWR continuously updated WORLDRANKING', // 'rang_title': 'CUWR continuously updated WORLDRANKING',
'bgcolor' : '#F0F0F0', 'bgcolor' : '#F0F0F0',
'sort_rank': 3, 'sort_rank': 4,
'cat_id' : [70] 'cat_id' : [70]
}, },
'para' : { 'para' : {
@ -96,14 +96,14 @@ Window {
'nation' : 'ICC', 'nation' : 'ICC',
'wettk_reg' : '^[0-9]{2,2}_PE.*', 'wettk_reg' : '^[0-9]{2,2}_PE.*',
'bgcolor' : '#F0F0F0', 'bgcolor' : '#F0F0F0',
'sort_rank': 4, 'sort_rank': 5,
'cat_id' : [256,259] 'cat_id' : [256,259]
}, },
'games': { 'games': {
'label': 'Games', 'label': 'Games',
'nation': 'ICC', 'nation': 'ICC',
'bgcolor' : '#B8C8FF', 'bgcolor' : '#B8C8FF',
'sort_rank': 5, 'sort_rank': 6,
'cat_id': [68,86] 'cat_id': [68,86]
}, },
@ -139,7 +139,7 @@ Window {
'label' : 'Deutsche Meisterschaft', 'label' : 'Deutsche Meisterschaft',
'nation' : 'GER', 'nation' : 'GER',
'bgcolor' : '#A8F0A8', 'bgcolor' : '#A8F0A8',
'sort_rank': 0, 'sort_rank': 1,
'cat_id' : [57, 59, 60] 'cat_id' : [57, 59, 60]
}, },
@ -150,7 +150,7 @@ Window {
'serie_reg' : '^[0-9]{2,2}_JC', 'serie_reg' : '^[0-9]{2,2}_JC',
// 'rang_title': 'Deutsche Jugend RANGLISTE', // 'rang_title': 'Deutsche Jugend RANGLISTE',
'bgcolor' : '#D8FFD8', 'bgcolor' : '#D8FFD8',
'sort_rank': 1, 'sort_rank': 2,
'cat_id' : [58] 'cat_id' : [58]
}, },
'ger_state' : { 'ger_state' : {
@ -160,7 +160,7 @@ Window {
'serie_reg' : '^[0-9]{2,2}[_J]{1,1}LM.*', 'serie_reg' : '^[0-9]{2,2}[_J]{1,1}LM.*',
'rang_title': '', 'rang_title': '',
'bgcolor' : '#F0F0F0', 'bgcolor' : '#F0F0F0',
'sort_rank': 2, 'sort_rank': 3,
'cat_id' : [61,56] 'cat_id' : [61,56]
}, },
@ -173,7 +173,7 @@ Window {
'serie_reg' : '.*', 'serie_reg' : '.*',
'rang_title': 'SWISS RANKING', 'rang_title': 'SWISS RANKING',
'bgcolor' : '#A8F0A8', 'bgcolor' : '#A8F0A8',
'sort_rank': 0, 'sort_rank': 1,
'cat_id' : [62,63] 'cat_id' : [62,63]
}, },
'sui_jugend' : { 'sui_jugend' : {
@ -183,7 +183,7 @@ Window {
'serie_reg' : '.*', 'serie_reg' : '.*',
'rang_title': 'SWISS RANKING', 'rang_title': 'SWISS RANKING',
'bgcolor' : '#D8FFD8', 'bgcolor' : '#D8FFD8',
'sort_rank': 1, 'sort_rank': 2,
'cat_id' : [65] 'cat_id' : [65]
}, },
'sui_local' : { 'sui_local' : {
@ -192,7 +192,7 @@ Window {
'wettk_reg' : '^[0-9]{2,2}_RG_.*', 'wettk_reg' : '^[0-9]{2,2}_RG_.*',
'rang_title': '', 'rang_title': '',
'bgcolor' : '#F0F0F0', 'bgcolor' : '#F0F0F0',
'sort_rank': 2, 'sort_rank': 3,
'cat_id' : [64] 'cat_id' : [64]
}, },
'sui_ice' : { 'sui_ice' : {
@ -201,7 +201,7 @@ Window {
'wettk_reg' : '^[0-9]{2,2}_RC_.*', 'wettk_reg' : '^[0-9]{2,2}_RC_.*',
'rang_title': '', 'rang_title': '',
'bgcolor' : '#F0F0F0', 'bgcolor' : '#F0F0F0',
'sort_rank': 3, 'sort_rank': 4,
'cat_id' : [84] 'cat_id' : [84]
} }
} }
@ -566,7 +566,26 @@ Window {
text: "loading..." text: "loading..."
} }
} }
}
Store {
Product {
id: speedFlowChartProduct
identifier: "speed_flowchart"
type: Product.Unlockable
onPurchaseRestored: {
appSettings.write("speedBackendPurchase", 1)
}
onPurchaseSucceeded: {
appSettings.write("speedBackendPurchase", 1)
}
onPurchaseFailed: {
appSettings.write("speedBackendPurchase", 0)
}
}
} }
function landscape(){ function landscape(){

View file

@ -18,5 +18,6 @@
<file>Widgets/RankingWidget.qml</file> <file>Widgets/RankingWidget.qml</file>
<file>Pages/AthleteSearchPage.qml</file> <file>Pages/AthleteSearchPage.qml</file>
<file>Components/SpeedFlowChart.qml</file> <file>Components/SpeedFlowChart.qml</file>
<file>Components/SwipeGallery.qml</file>
</qresource> </qresource>
</RCC> </RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 981 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

View file

@ -29,7 +29,6 @@
<file>icons/dig_rock.klein.jpg</file> <file>icons/dig_rock.klein.jpg</file>
<file>icons/dig_rock.klein.png</file> <file>icons/dig_rock.klein.png</file>
<file>icons/favicon.png</file> <file>icons/favicon.png</file>
<file>icons/json.php.json</file>
<file>icons/bluerock/20x20/calendar.png</file> <file>icons/bluerock/20x20/calendar.png</file>
<file>icons/bluerock/20x20@2/calendar.png</file> <file>icons/bluerock/20x20@2/calendar.png</file>
<file>icons/bluerock/20x20@3/calendar.png</file> <file>icons/bluerock/20x20@3/calendar.png</file>
@ -46,5 +45,37 @@
<file>icons/bluerock/20x20@2/flowchart.png</file> <file>icons/bluerock/20x20@2/flowchart.png</file>
<file>icons/bluerock/20x20@3/flowchart.png</file> <file>icons/bluerock/20x20@3/flowchart.png</file>
<file>icons/bluerock/20x20@4/flowchart.png</file> <file>icons/bluerock/20x20@4/flowchart.png</file>
<file>icons/bluerock/20x20/bookmark.png</file>
<file>icons/bluerock/20x20/bookmarkFilled.png</file>
<file>icons/bluerock/20x20@2/bookmark.png</file>
<file>icons/bluerock/20x20@2/bookmarkFilled.png</file>
<file>icons/bluerock/20x20@3/bookmark.png</file>
<file>icons/bluerock/20x20@3/bookmarkFilled.png</file>
<file>icons/bluerock/20x20@4/bookmark.png</file>
<file>icons/bluerock/20x20@4/bookmarkFilled.png</file>
<file>icons/bluerock/20x20/buy.png</file>
<file>icons/bluerock/20x20@2/buy.png</file>
<file>icons/bluerock/20x20@3/buy.png</file>
<file>icons/bluerock/20x20@4/buy.png</file>
<file>icons/lock.png</file>
<file>icons/bluerock/20x20/star.png</file>
<file>icons/bluerock/20x20/starFilled.png</file>
<file>icons/bluerock/20x20@2/star.png</file>
<file>icons/bluerock/20x20@2/starFilled.png</file>
<file>icons/bluerock/20x20@3/star.png</file>
<file>icons/bluerock/20x20@3/starFilled.png</file>
<file>icons/bluerock/20x20@4/star.png</file>
<file>icons/bluerock/20x20@4/starFilled.png</file>
<file>icons/bluerock/20x20/pin.png</file>
<file>icons/bluerock/20x20/pinFilled.png</file>
<file>icons/bluerock/20x20@2/pin.png</file>
<file>icons/bluerock/20x20@2/pinFilled.png</file>
<file>icons/bluerock/20x20@3/pin.png</file>
<file>icons/bluerock/20x20@3/pinFilled.png</file>
<file>icons/bluerock/20x20@4/pin.png</file>
<file>icons/bluerock/20x20@4/pinFilled.png</file>
<file>screenshots/SpeedFlowchartDemo/1.png</file>
<file>screenshots/SpeedFlowchartDemo/2.png</file>
<file>screenshots/SpeedFlowchartDemo/3.png</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -21,6 +21,7 @@
#include <QtQml/QQmlContext> #include <QtQml/QQmlContext>
#include <QQmlApplicationEngine> #include <QQmlApplicationEngine>
#include <QIcon> #include <QIcon>
#include <QStyleFactory>
#include "headers/serverconn.h" #include "headers/serverconn.h"
#include "headers/appsettings.h" #include "headers/appsettings.h"
@ -32,6 +33,7 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv); QGuiApplication app(argc, argv);
qDebug() << QStyleFactory::keys();
QQuickStyle::setStyle("Material"); QQuickStyle::setStyle("Material");
QIcon::setFallbackSearchPaths(QIcon::fallbackSearchPaths() << ":/resources/shared/icons"); QIcon::setFallbackSearchPaths(QIcon::fallbackSearchPaths() << ":/resources/shared/icons");
QIcon::setThemeName("bluerock"); QIcon::setThemeName("bluerock");

View file

@ -43,7 +43,7 @@ QVariant ServerConn::getWidgetData(QVariantMap params){
requestUrl += iter.key() + "=" + iter.value().toString() + "&"; requestUrl += iter.key() + "=" + iter.value().toString() + "&";
} }
requestUrl = requestUrl.left(requestUrl.length() - 1); // remove last & requestUrl = requestUrl.left(requestUrl.length() - 1); // remove last '&'
qDebug() << requestUrl; qDebug() << requestUrl;