QML Dialogs for Maemo Fremantle

MeeGo / Harmattan comes with quite nice QML components like Buttons, Dialogs, and the like. Unfortunately these components are not available for Maemo Fremantle (N900). There is a qt-components package in extras-devel but there also seem to be some issues connected with this; besides, using packages from extras-devel prohibits promotion to extras-testing and extras.

Inspired by QmlComponentsButton I decided to also create some “custom” components in order to port my QML based Harmattan application (MeePasswords) to Fremantle. I started by reimplementing the simple dialog. Thereby I tried to give it the look and feel of a MeeGo / Harmattan Dialog. The following picture shows a dialog with customized content in MeePasswords on Fremantle (N900).

import Qt 4.7

Rectangle {
    id: dialog
    anchors.fill: parent

    visible: true

    color: "black"
    opacity: 0

    z: 32

    signal opened()
    signal rejected()

    Behavior on opacity { PropertyAnimation { duration: 200 } }

    MouseArea{
        id: area
        anchors.fill: parent
        visible: dialog.visible

        onClicked: {
            close();
            rejected();
        }
    }

    function close(){
        opacity = 0
    }

    function open(){
        opacity = 0.9
        opened()
    }

    property Item content: Item{}

    onContentChanged: content.parent = dialog
}

Then you can use this dialog like this (assumed you stored the above code in a file called “Dialog.qml” which is located in the same directory as the file containing the following snippet):

import Qt 4.7

...
    Dialog {
        id: myDialog
        content: Text { text: "Foo Dialog"; color: "white" }
        onRejected: console.log("Dialog closed.")
    }
...

Based on this dialog I also created a MessageDialog and a ConfirmationDialog.

import Qt 4.7

Dialog {
    id: messageDialog

    property alias text: message.text

    content: Text{
        id:message
        anchors.centerIn: parent
        width: parent.width
        color: "white"
        font.pointSize: 25
        horizontalAlignment: Text.AlignHCenter
        wrapMode: Text.Wrap
    }
}
Dialog {
    id: confirmationDialog

    property alias titleText: titleText.text
    property alias message: message.text

    signal accepted();

    Text{
        id: titleText
        anchors.bottom: message.top
        anchors.margins: 20
        width: parent.width
        color: "white"
        font.pointSize: 40
        font.bold: true
        horizontalAlignment: Text.AlignHCenter
        wrapMode: Text.Wrap
    }

    Text{
        id:message
        anchors.centerIn: parent
        width: parent.width
        color: "white"
        font.pointSize: 25
        horizontalAlignment: Text.AlignHCenter
        wrapMode: Text.Wrap
    }

    Button{
        id: acceptButton
        text: "OK"
        anchors.top: message.bottom
        anchors.topMargin: 20
        anchors.horizontalCenter: parent.horizontalCenter
        width: parent.width * 0.5
        onClicked: {
            close()
            accepted()
        }
    }

    Button{
        id: rejectButton
        text: "Cancel"
        anchors.top: acceptButton.bottom
        anchors.topMargin: 10
        anchors.horizontalCenter: parent.horizontalCenter
        width: parent.width * 0.5
        onClicked: {
            close()
            rejected()
        }
    }
}

Not that the ConfirmationDialog uses the Button linked above.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Advertisement
This entry was posted in Qt/QML, Snippets and tagged , , , , . Bookmark the permalink.

2 Responses to QML Dialogs for Maemo Fremantle

  1. Pingback: QML Text Input for Maemo Fremantle « ruedigergad

  2. Pingback: Share QML Code among Fremantle and Harmattan « ruedigergad

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.