~fredoust/sudoku-app/blueprint-saveGame

« back to all changes in this revision

Viewing changes to sudoku-app.qml

  • Committer: Tarmac
  • Author(s): fredoust
  • Date: 2013-07-21 16:19:58 UTC
  • mfrom: (89.1.1 fix-bug-1202084)
  • Revision ID: tarmac-20130721161958-8b0asec8hae0kfhc
fix for bug 1202084 by changing defaultSheet to dialog with cancel button. Fixes: https://bugs.launchpad.net/bugs/1202084.

Approved by Ubuntu Phone Apps Jenkins Bot, Dinko Osmankovic.

Show diffs side-by-side

added added

removed removed

Lines of Context:
441
441
 
442
442
                    Component {
443
443
                        id: profileSelector
444
 
                        DefaultSheet {
445
 
                            title: i18n.tr("Select profile")
446
 
                            contentsHeight: mainView.height
447
 
 
448
 
                            /*
449
 
                            Column {
450
 
                                anchors {
451
 
                                    top: parent.top
452
 
                                    left: parent.left
453
 
                                    right: parent.right
454
 
                                }
455
 
                                height: mainColumnSettings.height
456
 
 
457
 
                                ListItem.Header {
458
 
                                    id: header
459
 
                                    text: i18n.tr("Select profile")
460
 
                                }
461
 
                                */
462
 
 
463
 
 
464
 
 
465
 
                            ListView {
466
 
                                height: mainColumnSettings.height
467
 
                                id: profileListView
468
 
                                clip: true
469
 
                                width: parent.width
470
 
                                // height: parent.height - header.height
471
 
                                model: profilesModel
472
 
 
473
 
                                delegate:
474
 
                                    ListItem.Standard {
475
 
 
476
 
                                    text: firstname + " " + lastname
477
 
                                    progression: true
478
 
                                    onTriggered: {
479
 
                                        console.log("clicked "+index)
480
 
                                        currentUserId = profileId;
481
 
                                        hide()
482
 
                                    }
483
 
                                }
484
 
 
485
 
                            }
486
 
                        }
487
 
                        // }
488
 
                    }
489
 
 
490
 
                    Component {
491
 
                        id: manageProfileSelector
492
 
                        DefaultSheet {
493
 
                            title: i18n.tr("Select profile")
494
 
                            contentsHeight: mainView.height
495
 
 
496
 
 
497
 
 
498
 
                            ListView {
499
 
                                id: manageProfileListView
500
 
                                clip: true
501
 
                                width: parent.width
502
 
                                height: mainColumnSettings.height
503
 
                                model: profilesModel
504
 
 
505
 
                                delegate:
506
 
 
507
 
                                    ListItem.Standard {
508
 
 
509
 
                                    text: firstname + " " + lastname
510
 
 
511
 
                                    progression: true
512
 
                                    onTriggered: {
513
 
                                        hide()
514
 
                                        editUserId = profileId
515
 
                                        PopupUtils.open(manageProfileDialog, selectorProfile)
516
 
                                    }
517
 
                                }
518
 
 
519
 
 
520
 
 
521
 
                            }
522
 
                        }
523
 
                    }
524
 
 
525
 
                    ListModel{
526
 
                        id: profilesModel
527
 
                    }
528
 
 
529
 
                    id: mainColumnSettings;
530
 
                    //width: settingsTab.width;
531
 
                    //height: settingsTab.height;
532
 
                    anchors.fill: parent
533
 
                    //anchors.horizontalCenter: parent.horizontalCenter;
534
 
                    spacing: units.gu(1)
535
 
 
536
 
                    ListItem.Header {
537
 
                        text: i18n.tr("<b>Sudoku settings</b>")
538
 
                    }
539
 
 
540
 
                    ListItem.ValueSelector {
541
 
                        objectName: "difficultySelector"
542
 
                        id: difficultySelector
543
 
                        text: i18n.tr("Difficulty")
544
 
                        values: [i18n.tr("Easy"), i18n.tr("Moderate"), i18n.tr("Hard"), i18n.tr("Ultra Hard")]
545
 
                        onSelectedIndexChanged: {
546
 
                            //print(difficultySelector.selectedIndex)
547
 
                            switch(difficultySelector.selectedIndex) {
548
 
                            case 0:
549
 
                                var randomnumber = Math.floor(Math.random()*9);
550
 
                                randomnumber += 31;
551
 
                                sudokuBlocksGrid.createNewGame(81 - randomnumber);
552
 
                                Settings.setSetting("Difficulty", selectedIndex)
553
 
                                break;
554
 
                            case 1:
555
 
                                var randomnumber = Math.floor(Math.random()*4);
556
 
                                randomnumber += 26;
557
 
                                sudokuBlocksGrid.createNewGame(81 - randomnumber);
558
 
                                Settings.setSetting("Difficulty", selectedIndex)
559
 
                                break;
560
 
                            case 2:
561
 
                                var randomnumber = Math.floor(Math.random()*4);
562
 
                                randomnumber += 21;
563
 
                                sudokuBlocksGrid.createNewGame(81 - randomnumber);
564
 
                                Settings.setSetting("Difficulty", selectedIndex)
565
 
                                break;
566
 
                            case 3:
567
 
                                var randomnumber = Math.floor(Math.random()*3);
568
 
                                randomnumber += 17;
569
 
                                sudokuBlocksGrid.createNewGame(81 - randomnumber);
570
 
                                Settings.setSetting("Difficulty", selectedIndex)
571
 
                                break;
572
 
                            }
573
 
                        }
574
 
 
575
 
                    }
576
 
                    ListItem.ValueSelector {
577
 
                        id: themeSelector
578
 
                        text: i18n.tr("Theme")
579
 
                        values: ["UbuntuColours", "Simple"]
580
 
                        onSelectedIndexChanged: {
581
 
                            var newColorScheme = null;
582
 
                            if (selectedIndex == 0)
583
 
                            {
584
 
                                //print("Ubuntu")
585
 
                                var result = Settings.setSetting("ColorTheme", selectedIndex);
586
 
                                //print(result);
587
 
                                sudokuBlocksGrid.changeColorScheme("ColorSchemeUbuntu.qml");
588
 
                            }
589
 
                            if (selectedIndex == 1)
590
 
                            {
591
 
                                //print("Simple")
592
 
                                var result = Settings.setSetting("ColorTheme", selectedIndex);
593
 
                                //print(result);
594
 
                                sudokuBlocksGrid.changeColorScheme("ColorSchemeSimple.qml");
595
 
                            }
596
 
                        }
597
 
                    }
598
 
 
599
 
                    ListItem.Standard {
600
 
                        objectName: "hintsSwitchClickable"
601
 
                        text: i18n.tr("Hints")
602
 
                        width: parent.width
603
 
                        control: Switch {
604
 
                            objectName: "hintsSwitch"
605
 
                            id: disableHints
 
444
                        Dialog  {
 
445
                            title: i18n.tr("Select profile")
 
446
 
 
447
 
 
448
 
 
449
                            Column{
 
450
                                height: mainColumnSettings.height
 
451
                                ListView {
 
452
 
 
453
                                    id: profileListView
 
454
                                    clip: true
 
455
                                    width: parent.width
 
456
                                     height: parent.height - units.gu(12)
 
457
                                    model: profilesModel
 
458
 
 
459
                                    delegate:
 
460
                                        ListItem.Standard {
 
461
 
 
462
                                        text: firstname + " " + lastname
 
463
                                        progression: true
 
464
                                        onTriggered: {
 
465
                                            console.log("clicked "+index)
 
466
                                            currentUserId = profileId;
 
467
                                            hide()
 
468
                                        }
 
469
                                    }
 
470
 
 
471
                                }
 
472
 
 
473
                                SudokuDialogButton{
 
474
 
 
475
                                    anchors.horizontalCenter: parent.horizontalCenter
 
476
                                    id:cancelButton
 
477
                                    buttonText: i18n.tr("Cancel")
 
478
                                    width: parent.width/2;
 
479
                                    size: units.gu(5)
 
480
                                    buttonColor: sudokuBlocksGrid.dialogButtonColor1
 
481
                                    textColor: sudokuBlocksGrid.dialogButtonTextColor
 
482
                                    //border.color: "transparent"
 
483
                                    onTriggered: {
 
484
                                        hide()
 
485
                                    }
 
486
                                }
 
487
 
 
488
                            }
 
489
                            }
 
490
                        }
 
491
 
 
492
                        Component {
 
493
                            id: manageProfileSelector
 
494
                            Dialog {
 
495
                                title: i18n.tr("Select profile")
 
496
 
 
497
                                Column{
 
498
                                    height: mainColumnSettings.height
 
499
                                    ListView {
 
500
                                        id: manageProfileListView
 
501
                                        clip: true
 
502
                                        width: parent.width
 
503
                                        height: parent.height - units.gu(12)
 
504
                                        model: profilesModel
 
505
 
 
506
                                        delegate:
 
507
 
 
508
                                            ListItem.Standard {
 
509
 
 
510
                                            text: firstname + " " + lastname
 
511
 
 
512
                                            progression: true
 
513
                                            onTriggered: {
 
514
                                                hide()
 
515
                                                editUserId = profileId
 
516
                                                PopupUtils.open(manageProfileDialog, selectorProfile)
 
517
                                            }
 
518
                                        }
 
519
 
 
520
 
 
521
 
 
522
                                    }
 
523
                                    SudokuDialogButton{
 
524
 
 
525
                                        anchors.horizontalCenter: parent.horizontalCenter
 
526
                                        id:cancelButton
 
527
                                        buttonText: i18n.tr("Cancel")
 
528
                                        width: parent.width/2;
 
529
                                        size: units.gu(5)
 
530
                                        buttonColor: sudokuBlocksGrid.dialogButtonColor1
 
531
                                        textColor: sudokuBlocksGrid.dialogButtonTextColor
 
532
                                        //border.color: "transparent"
 
533
                                        onTriggered: {
 
534
                                            hide()
 
535
                                        }
 
536
                                    }
 
537
                                }
 
538
                            }
 
539
                        }
 
540
 
 
541
                        ListModel{
 
542
                            id: profilesModel
 
543
                        }
 
544
 
 
545
                        id: mainColumnSettings;
 
546
                        //width: settingsTab.width;
 
547
                        //height: settingsTab.height;
 
548
                        anchors.fill: parent
 
549
                        //anchors.horizontalCenter: parent.horizontalCenter;
 
550
                        spacing: units.gu(1)
 
551
 
 
552
                        ListItem.Header {
 
553
                            text: i18n.tr("<b>Sudoku settings</b>")
 
554
                        }
 
555
 
 
556
                        ListItem.ValueSelector {
 
557
                            objectName: "difficultySelector"
 
558
                            id: difficultySelector
 
559
                            text: i18n.tr("Difficulty")
 
560
                            values: [i18n.tr("Easy"), i18n.tr("Moderate"), i18n.tr("Hard"), i18n.tr("Ultra Hard")]
 
561
                            onSelectedIndexChanged: {
 
562
                                //print(difficultySelector.selectedIndex)
 
563
                                switch(difficultySelector.selectedIndex) {
 
564
                                case 0:
 
565
                                    var randomnumber = Math.floor(Math.random()*9);
 
566
                                    randomnumber += 31;
 
567
                                    sudokuBlocksGrid.createNewGame(81 - randomnumber);
 
568
                                    Settings.setSetting("Difficulty", selectedIndex)
 
569
                                    break;
 
570
                                case 1:
 
571
                                    var randomnumber = Math.floor(Math.random()*4);
 
572
                                    randomnumber += 26;
 
573
                                    sudokuBlocksGrid.createNewGame(81 - randomnumber);
 
574
                                    Settings.setSetting("Difficulty", selectedIndex)
 
575
                                    break;
 
576
                                case 2:
 
577
                                    var randomnumber = Math.floor(Math.random()*4);
 
578
                                    randomnumber += 21;
 
579
                                    sudokuBlocksGrid.createNewGame(81 - randomnumber);
 
580
                                    Settings.setSetting("Difficulty", selectedIndex)
 
581
                                    break;
 
582
                                case 3:
 
583
                                    var randomnumber = Math.floor(Math.random()*3);
 
584
                                    randomnumber += 17;
 
585
                                    sudokuBlocksGrid.createNewGame(81 - randomnumber);
 
586
                                    Settings.setSetting("Difficulty", selectedIndex)
 
587
                                    break;
 
588
                                }
 
589
                            }
 
590
 
 
591
                        }
 
592
                        ListItem.ValueSelector {
 
593
                            id: themeSelector
 
594
                            text: i18n.tr("Theme")
 
595
                            values: ["UbuntuColours", "Simple"]
 
596
                            onSelectedIndexChanged: {
 
597
                                var newColorScheme = null;
 
598
                                if (selectedIndex == 0)
 
599
                                {
 
600
                                    //print("Ubuntu")
 
601
                                    var result = Settings.setSetting("ColorTheme", selectedIndex);
 
602
                                    //print(result);
 
603
                                    sudokuBlocksGrid.changeColorScheme("ColorSchemeUbuntu.qml");
 
604
                                }
 
605
                                if (selectedIndex == 1)
 
606
                                {
 
607
                                    //print("Simple")
 
608
                                    var result = Settings.setSetting("ColorTheme", selectedIndex);
 
609
                                    //print(result);
 
610
                                    sudokuBlocksGrid.changeColorScheme("ColorSchemeSimple.qml");
 
611
                                }
 
612
                            }
 
613
                        }
 
614
 
 
615
                        ListItem.Standard {
 
616
                            objectName: "hintsSwitchClickable"
 
617
                            text: i18n.tr("Hints")
 
618
                            width: parent.width
 
619
                            control: Switch {
 
620
                                objectName: "hintsSwitch"
 
621
                                id: disableHints
 
622
                                anchors.horizontalCenter: parent.horizontalCenter
 
623
                                anchors.verticalCenter: parent.verticalCenter
 
624
                                checked: disableHintsChecked
 
625
                                onCheckedChanged: {
 
626
                                    var result = Settings.setSetting("DisableHints", checked ? "true":"false");
 
627
                                    //print(result);
 
628
                                }
 
629
                            }
 
630
                        }
 
631
                        ListItem.Header {
 
632
                            text: i18n.tr("<b>Profiles settings</b>")
 
633
                        }
 
634
                        ListItem.SingleValue {
 
635
                            text: "Current profile"
 
636
                            id: selectorProfile
 
637
                            value: {
 
638
                                if(currentUserId==-1)
 
639
                                    return i18n.tr("None")
 
640
                                else
 
641
                                    return Settings.getUserFirstName(currentUserId)+" "+Settings.getUserLastName(currentUserId);
 
642
 
 
643
                            }
 
644
 
 
645
                            onClicked: {
 
646
 
 
647
                                var allProfiles = new Array();
 
648
                                allProfiles = Settings.getAllProfiles()
 
649
 
 
650
                                profilesModel.clear()
 
651
 
 
652
                                for(var i = 0; i < allProfiles.length; i++)
 
653
                                {
 
654
                                    profilesModel.append({"profileId":allProfiles[i].id,"lastname":allProfiles[i].lastname, "firstname":allProfiles[i].firstname})
 
655
                                }
 
656
                                PopupUtils.open(profileSelector, selectorProfile)
 
657
                            }
 
658
                        }
 
659
 
 
660
                        AddProfileDialog{
 
661
                            id:addProfileDialog
 
662
                        }
 
663
 
 
664
                        ManageProfileDialog{
 
665
                            id:manageProfileDialog
 
666
                        }
 
667
 
 
668
 
 
669
                        ListItem.SingleValue {
 
670
                            id:addSingleValue
 
671
                            text: i18n.tr("Add profile")
 
672
                            onClicked: {
 
673
                                PopupUtils.open(addProfileDialog, addSingleValue);
 
674
                            }
 
675
                        }
 
676
 
 
677
                        ListItem.SingleValue {
 
678
                            id:manageProfileSingleValue
 
679
                            text: i18n.tr("Manage profiles")
 
680
                            onClicked: {
 
681
 
 
682
                                var allProfiles = new Array();
 
683
                                allProfiles = Settings.getAllProfiles()
 
684
 
 
685
                                profilesModel.clear()
 
686
 
 
687
                                for(var i = 0; i < allProfiles.length; i++)
 
688
                                {
 
689
                                    profilesModel.append({"profileId":allProfiles[i].id,"lastname":allProfiles[i].lastname, "firstname":allProfiles[i].firstname})
 
690
                                }
 
691
 
 
692
                                PopupUtils.open(manageProfileSelector, manageProfileSingleValue)
 
693
                            }
 
694
                        }
 
695
 
 
696
 
 
697
                    }
 
698
                }
 
699
 
 
700
 
 
701
            }
 
702
 
 
703
            Tab {
 
704
                id: aboutTab;
 
705
                objectName: "aboutTab"
 
706
                title: i18n.tr("About")
 
707
                page: Page {
 
708
 
 
709
                    Column {
 
710
                        id: aboutColumn;
 
711
                        spacing: 5;
 
712
                        //anchors.fill: parent
 
713
                        anchors.horizontalCenter: parent.horizontalCenter;
 
714
                        y: units.gu(8);
 
715
                        Image {
 
716
                            objectName: "aboutImage"
 
717
                            property real maxWidth: units.gu(100)
606
718
                            anchors.horizontalCenter: parent.horizontalCenter
607
 
                            anchors.verticalCenter: parent.verticalCenter
608
 
                            checked: disableHintsChecked
609
 
                            onCheckedChanged: {
610
 
                                var result = Settings.setSetting("DisableHints", checked ? "true":"false");
611
 
                                //print(result);
612
 
                            }
613
 
                        }
614
 
                    }
615
 
                    ListItem.Header {
616
 
                        text: i18n.tr("<b>Profiles settings</b>")
617
 
                    }
618
 
                    ListItem.SingleValue {
619
 
                        text: "Current profile"
620
 
                        id: selectorProfile
621
 
                        value: {
622
 
                            if(currentUserId==-1)
623
 
                                return i18n.tr("None")
624
 
                            else
625
 
                                return Settings.getUserFirstName(currentUserId)+" "+Settings.getUserLastName(currentUserId);
626
 
 
627
 
                        }
628
 
 
629
 
                        onClicked: {
630
 
 
631
 
                            var allProfiles = new Array();
632
 
                            allProfiles = Settings.getAllProfiles()
633
 
 
634
 
                            profilesModel.clear()
635
 
 
636
 
                            for(var i = 0; i < allProfiles.length; i++)
637
 
                            {
638
 
                                profilesModel.append({"profileId":allProfiles[i].id,"lastname":allProfiles[i].lastname, "firstname":allProfiles[i].firstname})
639
 
                            }
640
 
                            PopupUtils.open(profileSelector, selectorProfile)
641
 
                        }
642
 
                    }
643
 
 
644
 
                    AddProfileDialog{
645
 
                        id:addProfileDialog
646
 
                    }
647
 
 
648
 
                    ManageProfileDialog{
649
 
                        id:manageProfileDialog
650
 
                    }
651
 
 
652
 
 
653
 
                    ListItem.SingleValue {
654
 
                        id:addSingleValue
655
 
                        text: i18n.tr("Add profile")
656
 
                        onClicked: {
657
 
                            PopupUtils.open(addProfileDialog, addSingleValue);
658
 
                        }
659
 
                    }
660
 
 
661
 
                    ListItem.SingleValue {
662
 
                        id:manageProfileSingleValue
663
 
                        text: i18n.tr("Manage profiles")
664
 
                        onClicked: {
665
 
 
666
 
                            var allProfiles = new Array();
667
 
                            allProfiles = Settings.getAllProfiles()
668
 
 
669
 
                            profilesModel.clear()
670
 
 
671
 
                            for(var i = 0; i < allProfiles.length; i++)
672
 
                            {
673
 
                                profilesModel.append({"profileId":allProfiles[i].id,"lastname":allProfiles[i].lastname, "firstname":allProfiles[i].firstname})
674
 
                            }
675
 
 
676
 
                            PopupUtils.open(manageProfileSelector, manageProfileSingleValue)
677
 
                        }
678
 
                    }
679
 
 
680
 
 
681
 
                }
682
 
            }
683
 
 
684
 
 
685
 
        }
686
 
 
687
 
        Tab {
688
 
            id: aboutTab;
689
 
            objectName: "aboutTab"
690
 
            title: i18n.tr("About")
691
 
            page: Page {
692
 
 
693
 
                Column {
694
 
                    id: aboutColumn;
695
 
                    spacing: 5;
696
 
                    //anchors.fill: parent
697
 
                    anchors.horizontalCenter: parent.horizontalCenter;
698
 
                    y: units.gu(8);
699
 
                    Image {
700
 
                        objectName: "aboutImage"
701
 
                        property real maxWidth: units.gu(100)
702
 
                        anchors.horizontalCenter: parent.horizontalCenter
703
 
                        width: Math.min(mainView.width, maxWidth)/1.75
704
 
                        //height: width
705
 
                        source: "icons/sudoko-vector-about.svg"
706
 
                        smooth: true
707
 
                        fillMode: Image.PreserveAspectFit
708
 
 
709
 
                    }
710
 
                    Row {
711
 
                        //anchors.horizontalCenter: parent.horizontalCenter;
712
 
                        anchors.left: aboutColumn.left
713
 
                        Label {
714
 
                            objectName: "authorLabel"
715
 
                            text: i18n.tr("Author(s): ")
716
 
 
717
 
                        }
718
 
                        Label {
719
 
                            objectName: "authors"
720
 
                            font.bold: true;
721
 
                            text: "Dinko Osmankovic\nFr\u00e9d\u00e9ric Delgado\nGeorgi Karavasilev"
722
 
                        }
723
 
                    }
724
 
                    Row {
725
 
                        anchors.horizontalCenter: parent.horizontalCenter;
726
 
                        Label {
727
 
                            objectName: "contactLabel"
728
 
                            text: i18n.tr("Contact: ")
729
 
                        }
730
 
                        Label {
731
 
                            objectName: "contacts"
732
 
                            font.bold: true;
733
 
                            text: "Dinko Osmankovic\nFrédéric Delgado\nGeorgi Karavasilev"
734
 
                        }
735
 
                    }
736
 
                    Row {
737
 
                        id: homepage;
738
 
                        anchors.horizontalCenter: parent.horizontalCenter;
739
 
                        Label {
740
 
                            objectName: "urlLabel"
741
 
                            font.bold: true;
742
 
                            text: "<a href=\"https://launchpad.net/sudoku-app\">https://launchpad.net/sudoku-app</a>"
743
 
                            onLinkActivated: Qt.openUrlExternally(link)
744
 
                        }
745
 
                    }
746
 
                }
747
 
                Row {
748
 
                    anchors.horizontalCenter: parent.horizontalCenter;
749
 
                    anchors.top: aboutColumn.bottom;
750
 
                    anchors.topMargin: units.gu(5);
751
 
                    Label {
752
 
                        objectName: "versionLabel"
753
 
                        text: i18n.tr("Version: ")
754
 
                    }
755
 
                    Label {
756
 
                        objectName: "version"
757
 
                        font.bold: true;
758
 
                        text: "0.4"
759
 
                    }
760
 
                }
761
 
                Row {
762
 
                    anchors.horizontalCenter: parent.horizontalCenter;
763
 
                    anchors.top: aboutColumn.bottom;
764
 
                    anchors.topMargin: units.gu(8);
765
 
                    Label {
766
 
                        objectName: "yearLabel"
767
 
                        font.bold: true;
768
 
                        text: "2013"
 
719
                            width: Math.min(mainView.width, maxWidth)/1.75
 
720
                            //height: width
 
721
                            source: "icons/sudoko-vector-about.svg"
 
722
                            smooth: true
 
723
                            fillMode: Image.PreserveAspectFit
 
724
 
 
725
                        }
 
726
                        Row {
 
727
                            //anchors.horizontalCenter: parent.horizontalCenter;
 
728
                            anchors.left: aboutColumn.left
 
729
                            Label {
 
730
                                objectName: "authorLabel"
 
731
                                text: i18n.tr("Author(s): ")
 
732
 
 
733
                            }
 
734
                            Label {
 
735
                                objectName: "authors"
 
736
                                font.bold: true;
 
737
                                text: "Dinko Osmankovic\nFr\u00e9d\u00e9ric Delgado\nGeorgi Karavasilev"
 
738
                            }
 
739
                        }
 
740
                        Row {
 
741
                            anchors.horizontalCenter: parent.horizontalCenter;
 
742
                            Label {
 
743
                                objectName: "contactLabel"
 
744
                                text: i18n.tr("Contact: ")
 
745
                            }
 
746
                            Label {
 
747
                                objectName: "contacts"
 
748
                                font.bold: true;
 
749
                                text: "Dinko Osmankovic\nFrédéric Delgado\nGeorgi Karavasilev"
 
750
                            }
 
751
                        }
 
752
                        Row {
 
753
                            id: homepage;
 
754
                            anchors.horizontalCenter: parent.horizontalCenter;
 
755
                            Label {
 
756
                                objectName: "urlLabel"
 
757
                                font.bold: true;
 
758
                                text: "<a href=\"https://launchpad.net/sudoku-app\">https://launchpad.net/sudoku-app</a>"
 
759
                                onLinkActivated: Qt.openUrlExternally(link)
 
760
                            }
 
761
                        }
 
762
                    }
 
763
                    Row {
 
764
                        anchors.horizontalCenter: parent.horizontalCenter;
 
765
                        anchors.top: aboutColumn.bottom;
 
766
                        anchors.topMargin: units.gu(5);
 
767
                        Label {
 
768
                            objectName: "versionLabel"
 
769
                            text: i18n.tr("Version: ")
 
770
                        }
 
771
                        Label {
 
772
                            objectName: "version"
 
773
                            font.bold: true;
 
774
                            text: "0.4"
 
775
                        }
 
776
                    }
 
777
                    Row {
 
778
                        anchors.horizontalCenter: parent.horizontalCenter;
 
779
                        anchors.top: aboutColumn.bottom;
 
780
                        anchors.topMargin: units.gu(8);
 
781
                        Label {
 
782
                            objectName: "yearLabel"
 
783
                            font.bold: true;
 
784
                            text: "2013"
 
785
                        }
769
786
                    }
770
787
                }
771
788
            }
772
789
        }
773
790
    }
774
 
}