ubuntu-touch-coreapps-reviewers team mailing list archive
-
ubuntu-touch-coreapps-reviewers team
-
Mailing list archive
-
Message #03625
[Merge] lp:~dinko-metalac/sudoku-app/bottom-edge into lp:sudoku-app
Dinko Osmankovic has proposed merging lp:~dinko-metalac/sudoku-app/bottom-edge into lp:sudoku-app.
Commit message:
Some bottom edge love and theme work.
Requested reviews:
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot): continuous-integration
For more details, see:
https://code.launchpad.net/~dinko-metalac/sudoku-app/bottom-edge/+merge/265113
Some bottom edge love and theme work.
--
Your team Sudoku Touch developers is subscribed to branch lp:sudoku-app.
=== modified file 'click/manifest.json.in'
--- click/manifest.json.in 2014-10-08 14:58:56 +0000
+++ click/manifest.json.in 2015-07-17 11:50:08 +0000
@@ -1,7 +1,7 @@
{
"architecture": "all",
"description": "Sudoku game for Ubuntu devices.",
- "framework": "ubuntu-sdk-14.10-qml-dev3",
+ "framework": "ubuntu-sdk-15.04",
"hooks": {
"sudoku": {
"apparmor": "sudoku.apparmor",
=== modified file 'click/sudoku.apparmor'
--- click/sudoku.apparmor 2014-09-08 09:52:14 +0000
+++ click/sudoku.apparmor 2015-07-17 11:50:08 +0000
@@ -3,5 +3,5 @@
"networking",
"usermetrics"
],
- "policy_version": 1.2
+ "policy_version": 1.3
}
\ No newline at end of file
=== modified file 'components/AboutTab.qml'
--- components/AboutTab.qml 2014-10-06 12:41:09 +0000
+++ components/AboutTab.qml 2015-07-17 11:50:08 +0000
@@ -76,17 +76,18 @@
//anchors.horizontalCenter: parent.horizontalCenter;
width: parent.width
y: units.gu(6);
- UbuntuShape {
+ Rectangle {
Layouts.item: "icon"
property real maxWidth: units.gu(45)
anchors.horizontalCenter: parent.horizontalCenter
width: Math.min(parent.width, maxWidth)/2
height: Math.min(parent.width, maxWidth)/2
- image: Image {
+ Image {
objectName: "aboutImage"
//height: width
source: "../icons/about.png"
smooth: true
+ anchors.fill: parent
fillMode: Image.PreserveAspectFit
}
=== modified file 'components/BigBlock.qml'
--- components/BigBlock.qml 2014-10-06 12:41:09 +0000
+++ components/BigBlock.qml 2015-07-17 11:50:08 +0000
@@ -4,31 +4,35 @@
import "../js/SudokuCU.js" as SudokuCU
import QtFeedback 5.0
-UbuntuShape {
+Rectangle {
width: 3*blockSize + 5*blockDistance
height: 3*blockSize + 5*blockDistance
id: block
Rectangle {
+ color: UbuntuColors.warmGrey
height: parent.height - units.dp(6)
- width: units.dp(1)
+ width: units.dp(2)
x: block.width*1/3;
y: units.dp(3)
}
Rectangle {
+ color: UbuntuColors.warmGrey
height: parent.height - units.dp(6)
- width: units.dp(1)
+ width: units.dp(2)
x: block.width*2/3;
y: units.dp(3)
}
Rectangle {
+ color: UbuntuColors.warmGrey
width: parent.height - units.dp(6)
- height: units.dp(1)
+ height: units.dp(2)
y: block.width*1/3;
x: units.dp(3)
}
Rectangle {
+ color: UbuntuColors.warmGrey
width: parent.height - units.dp(6)
- height: units.dp(1)
+ height: units.dp(2)
y: block.width*2/3;
x: units.dp(3)
}
=== added file 'components/BottomEdge.qml'
--- components/BottomEdge.qml 1970-01-01 00:00:00 +0000
+++ components/BottomEdge.qml 2015-07-17 11:50:08 +0000
@@ -0,0 +1,237 @@
+import QtQuick 2.2
+import QtFeedback 5.0
+import Ubuntu.Components 1.1
+
+Item {
+ id: bottomEdge
+
+ property int hintSize: units.gu(8)
+ property color hintColor: Theme.palette.normal.overlay
+ property string hintIconName: "view-grid-symbolic"
+ property alias hintIconSource: hintIcon.source
+ property color hintIconColor: UbuntuColors.coolGrey
+ property bool bottomEdgeEnabled: true
+
+ property int expandAngle: 360
+ property real expandedPosition: (0.85 - 0.25 * expandAngle/360) * height
+ property real collapsedPosition: height - hintSize/2
+
+ property list<RadialAction> actions
+ property real actionButtonSize: units.gu(7)
+ property real actionButtonDistance: 1.5* hintSize
+
+ anchors.fill: parent
+
+ HapticsEffect {
+ id: clickEffect
+ attackIntensity: 0.0
+ attackTime: 50
+ intensity: 1.0
+ duration: 10
+ fadeTime: 50
+ fadeIntensity: 0.0
+ }
+
+ Rectangle {
+ id: bgVisual
+
+ z: 1
+ color: "black"
+ anchors.fill: parent
+ opacity: 1.0 * ((bottomEdge.height - bottomEdgeHint.y) / bottomEdge.height)
+ }
+
+ Rectangle {
+ id: bottomEdgeHint
+
+ color: hintColor
+ width: hintSize
+ height: width
+ radius: units.gu(2)//width/2
+ visible: bottomEdgeEnabled
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ y: collapsedPosition
+ z: parent.z + 1
+
+ Label {
+ text: i18n.tr("Delete scores")
+ visible: bottomEdgeHint.state == "expanded"
+ fontSize: "large"
+ color: "white"
+ font.bold: true
+ anchors.top: parent.bottom
+ anchors.bottomMargin: units.gu(5)
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Rectangle {
+ id: dropShadow
+ width: parent.width
+ height: parent.height
+ border.color: "#B3B3B3"
+ color: "Transparent"
+ radius: parent.radius
+ z: -1
+ anchors {
+ centerIn: parent
+ verticalCenterOffset: units.gu(-0.3)
+ }
+ }
+
+ Icon {
+ id: hintIcon
+ width: hintSize/4
+ height: width
+ name: hintIconName
+ color: hintIconColor
+ anchors {
+ centerIn: parent
+ verticalCenterOffset: width * ((bottomEdgeHint.y - expandedPosition)
+ /(expandedPosition - collapsedPosition))
+ }
+ }
+
+ property real actionListDistance: -actionButtonDistance * ((bottomEdgeHint.y - collapsedPosition)
+ /(collapsedPosition - expandedPosition))
+
+ Repeater {
+ id: actionList
+ readonly property real itemSpace: bottomEdge.expandAngle/actionList.count;
+ readonly property real substractAngle: (bottomEdge.expandAngle == 360 || !actionList.count) ?
+ 0 : (actionList.count-1)/2 * itemSpace
+ model: actions
+ delegate: Rectangle {
+ id: actionDelegate
+ readonly property real radAngle: (index % actionList.count * actionList.itemSpace - actionList.substractAngle) * Math.PI / 180
+ property real distance: bottomEdgeHint.actionListDistance
+ z: -1
+ width: actionButtonSize
+ height: width
+ radius: width/2
+ anchors.centerIn: parent
+ color: modelData.backgroundColor
+ opacity: modelData.enabled ? 1.0 : 0.7
+ transform: Translate {
+ x: distance * Math.sin(radAngle + Math.PI/2)
+ y: -distance * Math.cos(radAngle + Math.PI/2)
+ }
+
+ Icon {
+ anchors.centerIn: parent
+ width: parent.width/2
+ height: width
+ name: modelData.iconName
+ color: modelData.iconColor
+ }
+
+ MouseArea {
+ enabled: modelData.enabled
+ anchors.fill: parent
+ onClicked: {
+ clickEffect.start()
+ bottomEdgeHint.state = "collapsed"
+ modelData.triggered(null)
+ }
+ }
+ }
+ }
+
+ MouseArea {
+ id: mouseArea
+
+ property real previousY: -1
+ property string dragDirection: "None"
+
+ z: 1
+ anchors.fill: parent
+ visible: bottomEdgeEnabled
+
+ preventStealing: true
+ drag {
+ axis: Drag.YAxis
+ target: bottomEdgeHint
+ minimumY: expandedPosition
+ maximumY: collapsedPosition
+ }
+
+ onReleased: {
+ if ((dragDirection === "BottomToTop") &&
+ bottomEdgeHint.y < collapsedPosition) {
+ bottomEdgeHint.state = "expanded"
+ } else {
+ if (bottomEdgeHint.state === "collapsed") {
+ bottomEdgeHint.y = collapsedPosition
+ }
+ bottomEdgeHint.state = "collapsed"
+ }
+ previousY = -1
+ dragDirection = "None"
+ }
+
+ onClicked: {
+ if (bottomEdgeHint.y === collapsedPosition)
+ bottomEdgeHint.state = "expanded"
+ else
+ bottomEdgeHint.state = "collapsed"
+ }
+
+ onPressed: {
+ previousY = bottomEdgeHint.y
+ }
+
+ onMouseYChanged: {
+ var yOffset = previousY - bottomEdgeHint.y
+ if (Math.abs(yOffset) <= units.gu(2)) {
+ return
+ }
+ previousY = bottomEdgeHint.y
+ dragDirection = yOffset > 0 ? "BottomToTop" : "TopToBottom"
+ }
+ }
+
+ state: "collapsed"
+ states: [
+ State {
+ name: "collapsed"
+ PropertyChanges {
+ target: bottomEdgeHint
+ y: collapsedPosition
+ }
+ },
+ State {
+ name: "expanded"
+ PropertyChanges {
+ target: bottomEdgeHint
+ y: expandedPosition
+ }
+ },
+
+ State {
+ name: "floating"
+ when: mouseArea.drag.active
+ }
+ ]
+
+ transitions: [
+ Transition {
+ to: "expanded"
+ SpringAnimation {
+ target: bottomEdgeHint
+ property: "y"
+ spring: 2
+ damping: 0.2
+ }
+ },
+
+ Transition {
+ to: "collapsed"
+ SmoothedAnimation {
+ target: bottomEdgeHint
+ property: "y"
+ duration: UbuntuAnimation.BriskDuration
+ }
+ }
+ ]
+ }
+}
=== added file 'components/BottomEdgeSlide.qml'
--- components/BottomEdgeSlide.qml 1970-01-01 00:00:00 +0000
+++ components/BottomEdgeSlide.qml 2015-07-17 11:50:08 +0000
@@ -0,0 +1,331 @@
+import QtQuick 2.2
+import QtFeedback 5.0
+import Ubuntu.Components 1.1
+
+Item {
+ id: bottomEdge
+
+ property int hintSize: units.gu(8)
+ property color hintColor: Theme.palette.normal.overlay
+ property string hintIconName: "view-grid-symbolic"
+ property alias hintIconSource: hintIcon.source
+ property color hintIconColor: UbuntuColors.coolGrey
+ property bool bottomEdgeEnabled: true
+
+ property int expandAngle: 360
+ property real expandedPosition: (0.85 - 0.45 * expandAngle/360) * height
+ property real collapsedPosition: height - hintSize/2
+
+ property real actionButtonSize: units.gu(7)
+ property real actionButtonDistance: 1.5* hintSize
+
+ anchors.fill: parent
+
+ HapticsEffect {
+ id: clickEffect
+ attackIntensity: 0.0
+ attackTime: 50
+ intensity: 1.0
+ duration: 10
+ fadeTime: 50
+ fadeIntensity: 0.0
+ }
+
+ /*Rectangle {
+ id: bgVisual
+
+ z: 10
+ color: "black"
+ //anchors.fill: parent
+ width: parent.width
+ height: parent.height/2*3
+ y: bottomEdgeHint.y
+ opacity: 0.0
+ }*/
+ Rectangle {
+ width: parent.width
+ height: parent.height/2*3
+ color: Theme.palette.normal.background
+ y: bottomEdgeHint.y + bottomEdgeHint.height/2
+ Rectangle {
+ id: dropShadowSlide
+ width: parent.width
+ height: parent.height
+ border.color: "#B3B3B3"
+ color: Theme.palette.normal.background
+ radius: parent.radius
+ z: -1
+ anchors {
+ centerIn: parent
+ verticalCenterOffset: units.gu(-0.3)
+ }
+ }
+
+ Flow {
+ id: informationRow;
+ //y: 7*mainView.pageHeight/10;
+ //width: mainView.pageWidth - units.dp(8);
+ //anchors.horizontalCenter: parent.horizontalCenter
+ /*x: !mainView.wideAspect() ? 0.5*(mainView.width - width) :
+ 0.25*(mainView.width-9*sudokuBlocksGrid.blockSize-
+ 22*sudokuBlocksGrid.blockDistance)+9*sudokuBlocksGrid.blockSize + 35*sudokuBlocksGrid.blockDistance + units.gu(2)
+
+ */
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.topMargin: units.gu(6)
+ anchors.leftMargin: units.gu(4)
+ /*anchors.topMargin: !mainView.wideAspect() ?
+ 9*sudokuBlocksGrid.blockSize + 35*sudokuBlocksGrid.blockDistance :
+ mainView.height*0.15
+*/
+ //columns: !wideAspect ? 3 : 1
+ flow: mainView.wideAspect() ? Flow.LeftToRight : Flow.TopToBottom
+ spacing: mainView.width/mainView.height < mainView.resizeFactor ? units.gu(4) : units.gu(50)/6
+ Row {
+ spacing: units.gu(4)
+ Rectangle {
+ id: redFlag
+ color: sudokuBlocksGrid.defaultNotAllowedColor
+ width: units.gu(5)
+ height: width
+ //border.color: defaultBorderColor
+ //radius: "medium"
+ Label {
+ id: redFlagText
+ text: i18n.tr("4")
+ fontSize: "large"
+ font.bold: true
+ color: "white"
+ width:units.gu(5);
+ wrapMode: TextEdit.WordWrap;
+ horizontalAlignment: Text.AlignHCenter
+ anchors.centerIn: parent
+ // anchors.left: redFlag.right;
+ // anchors.leftMargin: units.dp(2);
+ // anchors.verticalCenter: redFlag.verticalCenter;
+ }
+ }
+ Label {
+ text: i18n.tr("Not allowed")
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+
+ Row {
+ spacing: units.gu(4)
+ Rectangle {
+ id: blueFlag
+ color: "#dcdcd5"
+ //border.color: defaultBorderColor
+ width: units.gu(5)
+ height: width
+ //radius: "medium";
+ Label {
+ id: blueFlagText
+ text: i18n.tr("4")
+ fontSize: "large"
+ color: sudokuBlocksGrid.defaultStartingColor
+ font.bold: true
+ width:units.gu(5);
+ wrapMode: TextEdit.WordWrap;
+ horizontalAlignment: Text.AlignHCenter
+ anchors.centerIn: parent
+ // anchors.left: blueFlag.right;
+ // anchors.leftMargin: units.dp(2);
+ // anchors.verticalCenter: blueFlag.verticalCenter;
+ }
+ }
+ Label {
+ text: i18n.tr("Start blocks")
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+
+ Row {
+ spacing: units.gu(4)
+ Rectangle {
+ id: orangeFlag
+ color: "#dcdcd5"
+ //border.color: defaultBorderColor
+ width: units.gu(5)
+ height: width
+ //radius: "medium";
+ Label {
+ text: i18n.tr("4")
+ fontSize: "large"
+ color: sudokuBlocksGrid.defaultHintColor
+ font.bold: true
+ width:units.gu(5);
+ wrapMode: TextEdit.WordWrap;
+ horizontalAlignment: Text.AlignHCenter
+ anchors.centerIn: parent
+ // anchors.left: orangeFlag.right;
+ // anchors.leftMargin: units.dp(2);
+ // anchors.verticalCenter: orangeFlag.verticalCenter;
+ }
+ }
+ Label {
+ text: i18n.tr("Hinted blocks")
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+ }
+
+ }
+
+ Rectangle {
+ id: bottomEdgeHint
+
+ color: hintColor
+ width: hintSize
+ height: width
+ radius: units.gu(2)//width/2
+ visible: bottomEdgeEnabled
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ y: collapsedPosition
+ z: parent.z + 1
+
+ Rectangle {
+ id: dropShadow
+ width: parent.width
+ height: parent.height
+ border.color: "#B3B3B3"
+ color: Theme.palette.normal.background
+ radius: parent.radius
+ z: -1
+ anchors {
+ centerIn: parent
+ verticalCenterOffset: units.gu(-0.3)
+ }
+ }
+
+ Icon {
+ id: hintIcon
+ width: hintSize/4
+ height: width
+ name: hintIconName
+ color: hintIconColor
+ anchors {
+ centerIn: parent
+ verticalCenterOffset: width * ((bottomEdgeHint.y - expandedPosition)
+ /(expandedPosition - collapsedPosition))
+ }
+ }
+
+ property real actionListDistance: -actionButtonDistance * ((bottomEdgeHint.y - collapsedPosition)
+ /(collapsedPosition - expandedPosition))
+
+ MouseArea {
+ id: mouseArea
+
+ property real previousY: -1
+ property string dragDirection: "None"
+
+ z: 1
+ anchors.fill: parent
+ visible: bottomEdgeEnabled
+
+ preventStealing: true
+ drag {
+ axis: Drag.YAxis
+ target: bottomEdgeHint
+ minimumY: expandedPosition
+ maximumY: collapsedPosition
+ }
+
+ onReleased: {
+ if ((dragDirection === "BottomToTop") &&
+ bottomEdgeHint.y < collapsedPosition) {
+ bottomEdgeHint.state = "expanded"
+ } else {
+ if (bottomEdgeHint.state === "collapsed") {
+ bottomEdgeHint.y = collapsedPosition
+ }
+ bottomEdgeHint.state = "collapsed"
+ }
+ previousY = -1
+ dragDirection = "None"
+ }
+
+ onClicked: {
+ if (bottomEdgeHint.y === collapsedPosition)
+ bottomEdgeHint.state = "expanded"
+ else
+ bottomEdgeHint.state = "collapsed"
+ }
+
+ onPressed: {
+ previousY = bottomEdgeHint.y
+ }
+
+ onMouseYChanged: {
+ var yOffset = previousY - bottomEdgeHint.y
+ if (Math.abs(yOffset) <= units.gu(2)) {
+ return
+ }
+ previousY = bottomEdgeHint.y
+ dragDirection = yOffset > 0 ? "BottomToTop" : "TopToBottom"
+ }
+ }
+
+ state: "collapsed"
+ states: [
+ State {
+ name: "collapsed"
+ PropertyChanges {
+ target: bottomEdgeHint
+ y: collapsedPosition
+ }
+ PropertyChanges {
+ target: hintIcon
+ width: hintSize/4
+ }
+ },
+ State {
+ name: "expanded"
+ PropertyChanges {
+ target: bottomEdgeHint
+ y: expandedPosition
+ }
+ PropertyChanges {
+ target: hintIcon
+ width: hintSize/2
+ }
+ },
+
+ State {
+ name: "floating"
+ when: mouseArea.drag.active
+ }
+ ]
+
+ transitions: [
+ Transition {
+ to: "expanded"
+ SpringAnimation {
+ target: bottomEdgeHint
+ property: "y"
+ spring: 2
+ damping: 0.2
+ }
+ SpringAnimation {
+ target: hintIcon
+ property: "width"
+ spring: 2
+ damping: 0.2
+ }
+ },
+
+ Transition {
+ to: "collapsed"
+ SmoothedAnimation {
+ target: bottomEdgeHint
+ property: "y"
+ duration: UbuntuAnimation.BriskDuration
+ }
+ }
+ ]
+ }
+}
=== modified file 'components/HighscoresTab.qml'
--- components/HighscoresTab.qml 2014-10-06 12:41:09 +0000
+++ components/HighscoresTab.qml 2015-07-17 11:50:08 +0000
@@ -1,6 +1,6 @@
import QtQuick 2.3
-import Ubuntu.Components 1.1
-import Ubuntu.Components.ListItems 1.0 as ListItem
+import Ubuntu.Components 1.2
+//import Ubuntu.Components.ListItems 1.0 as ListItem
import QtQuick.LocalStorage 2.0
import Ubuntu.Components.Popups 1.0
import Ubuntu.Layouts 1.0
@@ -20,56 +20,88 @@
{
highscoresModel.clear()
}
-
- tools: ToolbarItems {
- ToolbarButton {
- action: Action {
- objectName: "allusersbutton"
- text: "All\nusers"
- iconSource: Qt.resolvedUrl("../icons/all-users.svg")
- onTriggered: {
- var allScores = Settings.getAllScores()
- highscoresModel.clear();
- highscoresHeaderText = i18n.tr("<b>Best scores for all players</b>");
- for(var i = 0; i < allScores.length; i++) {
- var rowItem = allScores[i];
- //print("ROW ",rowItem)
- var firstName = Settings.getUserFirstName(rowItem[0]);
- var lastName = Settings.getUserLastName(rowItem[0]);
- //res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
- highscoresModel.append({'firstname': firstName,
- 'lastname': lastName,
- 'score': rowItem[1] });
- }
- }
- }
- }
- ToolbarButton {
- action: Action {
- text: "Current\nuser"
- objectName: "currentuserbutton"
- iconSource: Qt.resolvedUrl("../icons/single-user.svg")
- onTriggered: {
- var firstName = Settings.getUserFirstName(currentUserId);
- var lastName = Settings.getUserLastName(currentUserId);
- //print(firstName, lastName)
- // TRANSLATORS: %1 is user's first name and %2 is last name
- highscoresHeaderText = "<b>" + i18n.tr("Best scores for %1 %2").arg(firstName).arg(lastName) + "</b>"
- var allScores = Settings.getAllScoresForUser(currentUserId)
- highscoresModel.clear();
- for(var i = 0; i < allScores.length; i++) {
- var rowItem = allScores[i];
- //res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
- highscoresModel.append({'firstname': firstName,
- 'lastname': lastName,
- 'score': rowItem[1] });
- }
- }
- }
- }
+ function clearModelProfileId(id)
+ {
+ var firstName = Settings.getUserFirstName(currentUserId);
+ var lastName = Settings.getUserLastName(currentUserId);
+ for (var i = 0; i < highscoresModel.count; i++)
+ {
+ if (highscoresModel.get(i).firstname === firstName &&
+ highscoresModel.get(i).lastname === lastName )
+ highscoresModel.remove(i);
+ }
+ }
+
+ BottomEdge {
+ z:2
+ hintIconName: "delete"
+ actions: [
+ RadialAction {
+ iconName: "contact"
+ iconColor: UbuntuColors.orange
+ onTriggered: {
+ Settings.deleteScoresWithProfileId(currentUserId)
+ highscoresModel.clearModelProfileId(currentUserId);
+ }
+ },
+ RadialAction {
+ iconName: "contact-group"
+ iconColor: UbuntuColors.orange
+ onTriggered: {
+ Settings.deleteAllScores();
+ highscoresModel.clear();
+ }
+ }
+ ]
+ }
+
+ head.actions: [
+ Action {
+ objectName: "allusersbutton"
+ text: "All\nusers"
+ iconSource: Qt.resolvedUrl("../icons/all-users.svg")
+ onTriggered: {
+ var allScores = Settings.getAllScores()
+ highscoresModel.clear();
+ highscoresHeaderText = i18n.tr("<b>Best scores for all players</b>");
+ for(var i = 0; i < allScores.length; i++) {
+ var rowItem = allScores[i];
+ //print("ROW ",rowItem)
+ var firstName = Settings.getUserFirstName(rowItem[1]);
+ var lastName = Settings.getUserLastName(rowItem[1]);
+ //res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
+ highscoresModel.append({ 'id': rowItem[0],
+ 'firstname': firstName,
+ 'lastname': lastName,
+ 'score': rowItem[2] });
+ }
+ }
+ },
+ Action {
+ text: "Current\nuser"
+ objectName: "currentuserbutton"
+ iconSource: Qt.resolvedUrl("../icons/single-user.svg")
+ onTriggered: {
+ var firstName = Settings.getUserFirstName(currentUserId);
+ var lastName = Settings.getUserLastName(currentUserId);
+ //print(firstName, lastName)
+ // TRANSLATORS: %1 is user's first name and %2 is last name
+ highscoresHeaderText = "<b>" + i18n.tr("Best scores for %1 %2").arg(firstName).arg(lastName) + "</b>"
+ var allScores = Settings.getAllScoresForUser(currentUserId)
+ highscoresModel.clear();
+ for(var i = 0; i < allScores.length; i++) {
+ var rowItem = allScores[i];
+ //res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
+ highscoresModel.append({'firstname': firstName,
+ 'lastname': lastName,
+ 'score': rowItem[1] });
+ }
+ }
+ }
+
//locked: true
//opened: true
- }
+ ]
ListModel {
@@ -82,12 +114,13 @@
for(var i = 0; i < allScores.length; i++) {
var rowItem = allScores[i];
//print("ROW ",rowItem)
- var firstName = Settings.getUserFirstName(rowItem[0]);
- var lastName = Settings.getUserLastName(rowItem[0]);
+ var firstName = Settings.getUserFirstName(rowItem[1]);
+ var lastName = Settings.getUserLastName(rowItem[1]);
//res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
- highscoresModel.append({'firstname': firstName,
+ highscoresModel.append({ 'id': rowItem[0],
+ 'firstname': firstName,
'lastname': lastName,
- 'score': rowItem[1] });
+ 'score': rowItem[2] });
}
}
@@ -105,20 +138,44 @@
Column {
anchors.fill: parent
clip: true
- ListView {
+ UbuntuListView {
id: highScoresListView
model: highscoresModel
width: parent.width
height:parent.height
- header: ListItem.Header {
+ header: Label {
id: highscoresHeader
objectName: "highscoreslabel"
text: highscoresHeaderText
+ height: units.gu(5)
}
- delegate: ListItem.SingleValue {
- text: (index+1) + ". " + firstname + " " + lastname
- value: score
+
+ delegate: ListItem {
+ Label {
+ anchors.left: parent.left
+ anchors.leftMargin: units.gu(1)
+ text: (index+1) + ". " + firstname + " " + lastname
+ }
+ Label {
+ anchors.right: parent.right
+ anchors.rightMargin: units.gu(1)
+ text: score
+ }
+
+ leadingActions: ListItemActions {
+ actions: [
+ Action {
+ iconName: "delete"
+ onTriggered: {
+ //print(index, id, firstname);
+ Settings.deleteScoreWithId(id);
+ highscoresModel.remove(index,1);
+ }
+ }
+ ]
+ }
+ //value: score
}
}
}
=== added file 'components/RadialAction.qml'
--- components/RadialAction.qml 1970-01-01 00:00:00 +0000
+++ components/RadialAction.qml 2015-07-17 11:50:08 +0000
@@ -0,0 +1,9 @@
+import QtQuick 2.0
+import Ubuntu.Components 1.1
+
+Action {
+ property string iconName: "add"
+ property color iconColor: "Black"
+ property color backgroundColor: "White"
+ property bool enabled: true
+}
=== modified file 'components/SudokuBlocksGrid.qml'
--- components/SudokuBlocksGrid.qml 2015-02-23 07:44:43 +0000
+++ components/SudokuBlocksGrid.qml 2015-07-17 11:50:08 +0000
@@ -511,15 +511,34 @@
-
SudokuButtonsGrid {
id:buttonsGrid;
+ }
+ Rectangle {
+ id: backRectangle
+ color: UbuntuColors.coolGrey
+ //anchors.fill: parent
+ z:-2
+ width: bigBlocksGrid.width
+ height: bigBlocksGrid.height
+ x: bigBlocksGrid.x
+ y: bigBlocksGrid.y
+ PropertyAnimation {
+ target: backRectangle;
+ property: "scale";
+ from: 0.0;
+ to: 1.0;
+ duration: UbuntuAnimation.SlowDuration;
+ running: true;
+ loops: 1;
+ }
}
Grid {
- rowSpacing: blockDistance
- columnSpacing: blockDistance
+ id: bigBlocksGrid
+ rowSpacing: units.dp(2)
+ columnSpacing: units.dp(2)
columns: 3
z: -1
x: units.gu(1) - units.dp(4)
@@ -529,22 +548,20 @@
id: blocks
delegate: BigBlock {
id: block
- color: index % 2 == 0 ? UbuntuColors.warmGrey : Qt.lighter(UbuntuColors.warmGrey, 1.15)
+ color: index % 2 == 0 ? "#dcdcd5" : "#ecece5"
PropertyAnimation {
+ id: blocksAnimation
target: block;
property: "scale";
from: 0.0;
to: 1.0;
- duration: UbuntuAnimation.SlowDuration;
+ duration: UbuntuAnimation.FastDuration;
running: true;
loops: 1;
}
}
}
}
-
-
-
}
}
}
=== modified file 'components/SudokuButtonsGrid.qml'
--- components/SudokuButtonsGrid.qml 2015-02-23 07:44:43 +0000
+++ components/SudokuButtonsGrid.qml 2015-07-17 11:50:08 +0000
@@ -54,7 +54,8 @@
buttonText: "0";
//width: units.gu(5);
//height: units.gu(5);
- size: mainView.width/mainView.height < mainView.resizeFactor ? mainView.width/10: units.gu(50)/10;
+ size: mainView.width/mainView.height < mainView.resizeFactor ?
+ mainView.width/10: units.gu(50)/10;
//color: defaultColor;
//border.width: 0
//border.color: defaultBorderColor
@@ -129,6 +130,7 @@
buttonColor: defaultColor;
textColor: defaultTextColor
}
+
Component.onCompleted: {
switch(difficultySelector.selectedIndex) {
case 0:
=== modified file 'icons/about.png'
Binary files icons/about.png 2014-03-18 12:16:55 +0000 and icons/about.png 2015-07-17 11:50:08 +0000 differ
=== modified file 'js/localStorage.js'
--- js/localStorage.js 2014-08-19 10:48:30 +0000
+++ js/localStorage.js 2015-07-17 11:50:08 +0000
@@ -105,6 +105,60 @@
return res;
}
+function deleteScoreWithId(id)
+{
+ var db = getDatabase();
+ var res="";
+ db.transaction(function(tx) {
+ var rs = tx.executeSql('DELETE FROM scores WHERE id=?;', [id]);
+ //console.log(id, rs.rowsAffected)
+ if (rs.rowsAffected > 0) {
+ res = "OK";
+ } else {
+ res = "Error";
+ }
+ }
+ );
+ // The function returns “OK” if it was successful, or “Error” if it wasn't
+ return res;
+}
+
+function deleteAllScores()
+{
+ var db = getDatabase();
+ var res="";
+ db.transaction(function(tx) {
+ var rs = tx.executeSql('DELETE FROM scores;');
+ //console.log(id, rs.rowsAffected)
+ if (rs.rowsAffected > 0) {
+ res = "OK";
+ } else {
+ res = "Error";
+ }
+ }
+ );
+ // The function returns “OK” if it was successful, or “Error” if it wasn't
+ return res;
+}
+
+function deleteScoresWithProfileId(profile_id)
+{
+ var db = getDatabase();
+ var res="";
+ db.transaction(function(tx) {
+ var rs = tx.executeSql('DELETE FROM scores WHERE profile_id=?;', profile_id);
+ //console.log(id, rs.rowsAffected)
+ if (rs.rowsAffected > 0) {
+ res = "OK";
+ } else {
+ res = "Error";
+ }
+ }
+ );
+ // The function returns “OK” if it was successful, or “Error” if it wasn't
+ return res;
+}
+
function getAllScores()
{
var db = getDatabase();
@@ -112,10 +166,10 @@
//print("GETTING ALL SCORES")
db.transaction( function(tx) {
- var rs = tx.executeSql("SELECT profile_id, score FROM scores order by score desc limit 10;");
+ var rs = tx.executeSql("SELECT id, profile_id, score FROM scores order by score desc limit 10;");
for(var i = 0; i < rs.rows.length; i++) {
var dbItem = rs.rows.item(i);
- res.push([dbItem.profile_id, dbItem.score])
+ res.push([dbItem.id, dbItem.profile_id, dbItem.score])
}
});
//print(res);
=== modified file 'po/com.ubuntu.sudoku.pot'
--- po/com.ubuntu.sudoku.pot 2015-02-23 07:44:43 +0000
+++ po/com.ubuntu.sudoku.pot 2015-07-17 11:50:08 +0000
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: sudoku-app\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-02-23 08:42+0100\n"
+"POT-Creation-Date: 2015-07-17 13:47+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@xxxxxx>\n"
@@ -18,15 +18,15 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: ../components/AboutTab.qml:102
+#: ../components/AboutTab.qml:103
msgid "Author(s): "
msgstr ""
-#: ../components/AboutTab.qml:112
+#: ../components/AboutTab.qml:113
msgid "Contact: "
msgstr ""
-#: ../components/AboutTab.qml:138
+#: ../components/AboutTab.qml:139
msgid "Version: "
msgstr ""
@@ -43,7 +43,7 @@
msgstr ""
#: ../components/AddProfileDialog.qml:53
-#: ../components/ManageProfileDialog.qml:69 ../sudoku-app.qml:351
+#: ../components/ManageProfileDialog.qml:69 ../sudoku-app.qml:354
msgid "OK"
msgstr ""
@@ -63,19 +63,40 @@
#: ../components/AddProfileDialog.qml:85
#: ../components/ManageProfileDialog.qml:127
-#: ../components/SudokuBlocksGrid.qml:492 ../sudoku-app.qml:504
-#: ../sudoku-app.qml:965 ../sudoku-app.qml:1017
+#: ../components/SudokuBlocksGrid.qml:492 ../sudoku-app.qml:507
+#: ../sudoku-app.qml:881 ../sudoku-app.qml:933
msgid "Cancel"
msgstr ""
-#: ../components/HighscoresTab.qml:33 ../components/HighscoresTab.qml:81
-#: ../sudoku-app.qml:24 ../sudoku-app.qml:153 ../sudoku-app.qml:206
-#: ../sudoku-app.qml:242
+#: ../components/BottomEdge.qml:58
+msgid "Delete scores"
+msgstr ""
+
+#: ../components/BottomEdgeSlide.qml:96 ../components/BottomEdgeSlide.qml:126
+#: ../components/BottomEdgeSlide.qml:155
+msgid "4"
+msgstr ""
+
+#: ../components/BottomEdgeSlide.qml:110
+msgid "Not allowed"
+msgstr ""
+
+#: ../components/BottomEdgeSlide.qml:140
+msgid "Start blocks"
+msgstr ""
+
+#: ../components/BottomEdgeSlide.qml:169
+msgid "Hinted blocks"
+msgstr ""
+
+#: ../components/HighscoresTab.qml:66 ../components/HighscoresTab.qml:113
+#: ../sudoku-app.qml:24 ../sudoku-app.qml:153 ../sudoku-app.qml:207
+#: ../sudoku-app.qml:244
msgid "<b>Best scores for all players</b>"
msgstr ""
#. TRANSLATORS: %1 is user's first name and %2 is last name
-#: ../components/HighscoresTab.qml:57 ../sudoku-app.qml:175
+#: ../components/HighscoresTab.qml:89 ../sudoku-app.qml:176
#, qt-format
msgid "Best scores for %1 %2"
msgstr ""
@@ -122,7 +143,7 @@
msgstr[0] ""
msgstr[1] ""
-#: ../js/localStorage.js:11 ../sudoku-app.qml:684
+#: ../js/localStorage.js:11 ../sudoku-app.qml:688
#: com.ubuntu.sudoku_sudoku.desktop.in.in.h:1
msgid "Sudoku"
msgstr ""
@@ -131,7 +152,7 @@
msgid "User"
msgstr ""
-#: ../sudoku-app.qml:50 ../sudoku-app.qml:51 ../sudoku-app.qml:756
+#: ../sudoku-app.qml:50 ../sudoku-app.qml:51 ../sudoku-app.qml:763
msgid "New game"
msgstr ""
@@ -171,141 +192,129 @@
msgid "Show scores for all users"
msgstr ""
-#: ../sudoku-app.qml:167 ../sudoku-app.qml:168
+#: ../sudoku-app.qml:168 ../sudoku-app.qml:169
msgid "Show scores for current user"
msgstr ""
-#: ../sudoku-app.qml:231
+#: ../sudoku-app.qml:233
msgid ""
"You are a cheat... \n"
"But we give you\n"
msgstr ""
-#: ../sudoku-app.qml:233
+#: ../sudoku-app.qml:235
msgid "point."
msgid_plural "points."
msgstr[0] ""
msgstr[1] ""
-#: ../sudoku-app.qml:338
+#: ../sudoku-app.qml:341
msgid "Sudoku games played today"
msgstr ""
-#: ../sudoku-app.qml:339
+#: ../sudoku-app.qml:342
msgid "No Sudoku games played today"
msgstr ""
-#: ../sudoku-app.qml:368
+#: ../sudoku-app.qml:371
msgid "New Game"
msgstr ""
-#: ../sudoku-app.qml:369
+#: ../sudoku-app.qml:372
msgid "Select difficulty level"
msgstr ""
-#: ../sudoku-app.qml:433 ../sudoku-app.qml:1064
+#: ../sudoku-app.qml:436 ../sudoku-app.qml:982
msgid "Easy"
msgstr ""
-#: ../sudoku-app.qml:452 ../sudoku-app.qml:1064
+#: ../sudoku-app.qml:455 ../sudoku-app.qml:982
msgid "Moderate"
msgstr ""
-#: ../sudoku-app.qml:469 ../sudoku-app.qml:1064
+#: ../sudoku-app.qml:472 ../sudoku-app.qml:982
msgid "Hard"
msgstr ""
-#: ../sudoku-app.qml:486
+#: ../sudoku-app.qml:489
msgid ""
"Ultra\n"
"Hard"
msgstr ""
-#: ../sudoku-app.qml:740
+#: ../sudoku-app.qml:744
msgid "You are a cheat..."
msgstr ""
-#: ../sudoku-app.qml:740
+#: ../sudoku-app.qml:744
msgid "Congratulations!"
msgstr ""
-#: ../sudoku-app.qml:775
+#: ../sudoku-app.qml:780
msgid "Show hint"
msgstr ""
-#: ../sudoku-app.qml:838
-msgid "Not allowed"
-msgstr ""
-
-#: ../sudoku-app.qml:859
-msgid "Start blocks"
-msgstr ""
-
-#: ../sudoku-app.qml:880
-msgid "Hinted blocks"
-msgstr ""
-
-#: ../sudoku-app.qml:904
+#: ../sudoku-app.qml:820
msgid "Scores"
msgstr ""
-#: ../sudoku-app.qml:914
+#: ../sudoku-app.qml:830
msgid "Settings"
msgstr ""
-#: ../sudoku-app.qml:936 ../sudoku-app.qml:984
+#: ../sudoku-app.qml:852 ../sudoku-app.qml:900
msgid "Select profile"
msgstr ""
-#: ../sudoku-app.qml:1057
+#: ../sudoku-app.qml:973
msgid "<b>Sudoku settings</b>"
msgstr ""
-#: ../sudoku-app.qml:1063
+#: ../sudoku-app.qml:979
msgid "Default Difficulty"
msgstr ""
-#: ../sudoku-app.qml:1064
+#: ../sudoku-app.qml:982
msgid "Ultra Hard"
msgstr ""
-#: ../sudoku-app.qml:1064
+#: ../sudoku-app.qml:982
msgid "Always ask"
msgstr ""
-#: ../sudoku-app.qml:1106
+#: ../sudoku-app.qml:1024
msgid "Theme"
msgstr ""
-#: ../sudoku-app.qml:1130
+#: ../sudoku-app.qml:1050
msgid "Hints"
msgstr ""
-#: ../sudoku-app.qml:1146
+#: ../sudoku-app.qml:1066
msgid "Vibration Alerts"
msgstr ""
-#: ../sudoku-app.qml:1161
+#: ../sudoku-app.qml:1083
msgid "<b>Profiles settings</b>"
msgstr ""
-#: ../sudoku-app.qml:1165
+#: ../sudoku-app.qml:1087
msgid "Current profile"
msgstr ""
-#: ../sudoku-app.qml:1169
+#: ../sudoku-app.qml:1091
msgid "None"
msgstr ""
-#: ../sudoku-app.qml:1205
+#: ../sudoku-app.qml:1127
msgid "Add profile"
msgstr ""
-#: ../sudoku-app.qml:1214
+#: ../sudoku-app.qml:1136
msgid "Manage profiles"
msgstr ""
-#: ../sudoku-app.qml:1246
+#: ../sudoku-app.qml:1168
msgid "About"
msgstr ""
=== modified file 'sudoku-app.qml'
--- sudoku-app.qml 2015-02-23 07:44:43 +0000
+++ sudoku-app.qml 2015-07-17 11:50:08 +0000
@@ -154,12 +154,13 @@
for(var i = 0; i < allScores.length; i++) {
var rowItem = allScores[i];
//print("ROW ",rowItem)
- var firstName = Settings.getUserFirstName(rowItem[0]);
- var lastName = Settings.getUserLastName(rowItem[0]);
+ var firstName = Settings.getUserFirstName(rowItem[1]);
+ var lastName = Settings.getUserLastName(rowItem[1]);
//res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
- highscoresModel.append({'firstname': firstName,
+ highscoresModel.append({ 'id': rowItem[0],
+ 'firstname': firstName,
'lastname': lastName,
- 'score': rowItem[1] });
+ 'score': rowItem[2] });
}
}
},
@@ -207,15 +208,16 @@
for(var i = 0; i < allScores.length; i++) {
var rowItem = allScores[i];
//print("ROW ",rowItem)
- var firstName = Settings.getUserFirstName(rowItem[0]);
- var lastName = Settings.getUserLastName(rowItem[0]);
+ var firstName = Settings.getUserFirstName(rowItem[1]);
+ var lastName = Settings.getUserLastName(rowItem[1]);
//res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
/*highscoresModel.append({'firstname': firstName,
'lastname': lastName,
'score': rowItem[1] });*/
- hsPage.appendModel({'firstname': firstName,
- 'lastname': lastName,
- 'score': rowItem[1] })
+ hsPage.appendModel({ 'id': rowItem[0],
+ 'firstname': firstName,
+ 'lastname': lastName,
+ 'score': rowItem[2] });
}
}
@@ -243,15 +245,16 @@
for(var i = 0; i < allScores.length; i++) {
var rowItem = allScores[i];
//(print("ROW ",rowItem)
- var firstName = Settings.getUserFirstName(rowItem[0]);
- var lastName = Settings.getUserLastName(rowItem[0]);
+ var firstName = Settings.getUserFirstName(rowItem[1]);
+ var lastName = Settings.getUserLastName(rowItem[1]);
//res.push([dbItem.first_name, dbItem.last_name, dbItem.score])
/*highscoresModel.append({'firstname': firstName,
'lastname': lastName,
'score': rowItem[1] });*/
- hsPage.appendModel({'firstname': firstName,
- 'lastname': lastName,
- 'score': rowItem[1] })
+ hsPage.appendModel({ 'id': rowItem[0],
+ 'firstname': firstName,
+ 'lastname': lastName,
+ 'score': rowItem[2] });
}
winTimer.restart();
@@ -649,15 +652,16 @@
var rowItem = allScores[i];
//res.push[dbItem.first_name, dbItem.last_name, dbItem.score])
//print("ROW ",rowItem[0])
- var firstName = Settings.getUserFirstName(rowItem[0])
- var lastName = Settings.getUserLastName(rowItem[0])
+ var firstName = Settings.getUserFirstName(rowItem[1])
+ var lastName = Settings.getUserLastName(rowItem[1])
//print(firstName, lastName)
/*highscoresModel.append({'firstname': firstName,
'lastname': lastName,
'score': rowItem[1] });*/
- hsPage.appendModel({'firstname': firstName,
+ hsPage.appendModel({ 'id': rowItem[0],
+ 'firstname': firstName,
'lastname': lastName,
- 'score': rowItem[1] })
+ 'score': rowItem[2] })
}
if(Settings.getSetting("currentUserId")=="Unknown")
@@ -748,46 +752,39 @@
page: Page {
- tools: ToolbarItems {
- opened: true
- ToolbarButton {
- action: Action {
- objectName: "newgamebutton"
- text: i18n.tr("New game");
- iconSource: Qt.resolvedUrl("icons/new_game_ubuntu.svg")
- onTriggered: {
- if(gameFinishedRectangle.visible) gameFinishedRectangle.visible = false;
- //print("new block distance:", blockDistance);
- //createNewGame()
- if (settingsTab.difficultyIndex == 4)
- PopupUtils.open(newGameComponent)
- else {
- createNewGame()
- }
- }
- }
- }
- ToolbarButton {
- action: Action {
- objectName: "hintbutton"
- id: revealHintAction
- iconSource: Qt.resolvedUrl("icons/hint.svg")
- text: i18n.tr("Show hint");
- enabled: disableHints.checked;
- onTriggered: {
- revealHint()
- }
- }
- }
- /*
- Action {
- iconSource: Qt.resolvedUrl("icons/close.svg")
- text: i18n.tr("Close");
- onTriggered: Qt.quit()
- }
- */
+ BottomEdgeSlide {
+ z:2
+ hintIconName: "help-contents"
}
+ head.actions: [
+ Action {
+ objectName: "newgamebutton"
+ text: i18n.tr("New game");
+ iconSource: Qt.resolvedUrl("icons/new_game_ubuntu.svg")
+ onTriggered: {
+ if(gameFinishedRectangle.visible) gameFinishedRectangle.visible = false;
+ //print("new block distance:", blockDistance);
+ //createNewGame()
+ if (settingsTab.difficultyIndex == 4)
+ PopupUtils.open(newGameComponent)
+ else {
+ createNewGame()
+ }
+ }
+ },
+ Action {
+ objectName: "hintbutton"
+ id: revealHintAction
+ iconSource: Qt.resolvedUrl("icons/hint.svg")
+ text: i18n.tr("Show hint");
+ enabled: disableHints.checked;
+ onTriggered: {
+ revealHint()
+ }
+ }
+ ]
+
//Column {
// id: mainColumn;
//width: mainView.width;
@@ -810,87 +807,6 @@
}
- Flow {
- id: informationRow;
- //y: 7*mainView.pageHeight/10;
- //width: mainView.pageWidth - units.dp(8);
- //anchors.horizontalCenter: parent.horizontalCenter
- x: !mainView.wideAspect() ? 0.5*(mainView.width - width) :
- 0.25*(mainView.width-9*sudokuBlocksGrid.blockSize-
- 22*sudokuBlocksGrid.blockDistance)+9*sudokuBlocksGrid.blockSize + 35*sudokuBlocksGrid.blockDistance + units.gu(2)
- anchors.top: parent.top
- anchors.topMargin: !mainView.wideAspect() ?
- 9*sudokuBlocksGrid.blockSize + 35*sudokuBlocksGrid.blockDistance :
- mainView.height*0.15
-
- //columns: !wideAspect ? 3 : 1
- flow: !mainView.wideAspect() ? Flow.LeftToRight : Flow.TopToBottom
- spacing: mainView.width/mainView.height < mainView.resizeFactor ? mainView.width/6 : units.gu(50)/6
- UbuntuShape {
- id: redFlag
- color: sudokuBlocksGrid.defaultNotAllowedColor
- width: mainView.width/mainView.height < mainView.resizeFactor ? 2*mainView.width/10: 2*units.gu(50)/10
- height: mainView.width/mainView.height < mainView.resizeFactor ? mainView.width/10: units.gu(50)/10
- //border.color: defaultBorderColor
- //radius: "medium"
- Label {
- id: redFlagText
- text: i18n.tr("Not allowed")
- fontSize: "x-small"
- color: settingsTab.themeIndex != 1 ? "white" : "black"
- width:units.gu(5);
- wrapMode: TextEdit.WordWrap;
- horizontalAlignment: Text.AlignHCenter
- anchors.centerIn: parent
- // anchors.left: redFlag.right;
- // anchors.leftMargin: units.dp(2);
- // anchors.verticalCenter: redFlag.verticalCenter;
- }
- }
- UbuntuShape {
- id: blueFlag
- color: settingsTab.themeIndex === 1 ? "white" : sudokuBlocksGrid.defaultStartingColor
- //border.color: defaultBorderColor
- width: mainView.width/mainView.height < mainView.resizeFactor ? 2*mainView.width/10: 2*units.gu(50)/10
- height: mainView.width/mainView.height < mainView.resizeFactor ? mainView.width/10: units.gu(50)/10
- //radius: "medium";
- Label {
- id: blueFlagText
- text: i18n.tr("Start blocks")
- fontSize: "x-small"
- color: settingsTab.themeIndex != 1 ? "white" : "black"
- width:units.gu(5);
- wrapMode: TextEdit.WordWrap;
- horizontalAlignment: Text.AlignHCenter
- anchors.centerIn: parent
- // anchors.left: blueFlag.right;
- // anchors.leftMargin: units.dp(2);
- // anchors.verticalCenter: blueFlag.verticalCenter;
- }
- }
-
- UbuntuShape {
- id: orangeFlag
- color: sudokuBlocksGrid.defaultHintColor
- //border.color: defaultBorderColor
- width: mainView.width/mainView.height < mainView.resizeFactor ? 2*mainView.width/10: 2*units.gu(50)/10
- height: mainView.width/mainView.height < mainView.resizeFactor ? mainView.width/10: units.gu(50)/10
- //radius: "medium";
- Label {
- text: i18n.tr("Hinted blocks")
- fontSize: "x-small"
- color: settingsTab.themeIndex != 1 ? "white" : "black"
- width:units.gu(5);
- wrapMode: TextEdit.WordWrap;
- horizontalAlignment: Text.AlignHCenter
- anchors.centerIn: parent
- // anchors.left: orangeFlag.right;
- // anchors.leftMargin: units.dp(2);
- // anchors.verticalCenter: orangeFlag.verticalCenter;
- }
- }
- }
-
//}
}
@@ -1061,6 +977,8 @@
objectName: "difficultySelector"
id: difficultySelector
text: i18n.tr("Default Difficulty")
+ width: parent.width - units.gu(4)
+ anchors.horizontalCenter: parent.horizontalCenter
model: [i18n.tr("Easy"), i18n.tr("Moderate"), i18n.tr("Hard"), i18n.tr("Ultra Hard"), i18n.tr("Always ask")]
onSelectedIndexChanged: {
//print(difficultySelector.selectedIndex)
@@ -1105,6 +1023,8 @@
id: themeSelector
text: i18n.tr("Theme")
model: ["UbuntuColours", "Simple"]
+ width: parent.width - units.gu(4)
+ anchors.horizontalCenter: parent.horizontalCenter
onSelectedIndexChanged: {
var newColorScheme = null;
if (selectedIndex == 0)
@@ -1157,6 +1077,8 @@
}
}
}
+ ListItem.Divider {}
+
ListItem.Header {
text: i18n.tr("<b>Profiles settings</b>")
}
Follow ups