import "UIConstants.js" as UIConstants
import "ExtrasConstants.js" as ExtrasConstants
-Page {
- tools: commonTools
-
- property string gline : ""
- property string gstation : ""
- property bool busy : true
+Item {
+ id: resultRealtime
+
+ property string gline: ''
+ property string gstation: ''
+ property string gdirection: ''
+
+ property string sourceUrl: ''
+ property bool busy: true
+ property bool isStation: false
+
+ function refresh() {
+ busy = true
+ console.debug('refreshing')
+
+ if (isStation) {
+ console.debug('station based')
+ itip.load_station_departures(gstation)
+ } else {
+ console.debug('one line')
+ itip.load_departures(sourceUrl)
+ }
+ }
+
+ function isCorrectInput () {
+ return resultRealtime.sourceUrl != '' || (resultRealtime.isStation && resultRealtime.gstation != '')
+ }
+
+ onGstationChanged: {
+ console.debug('gstation changed')
+ refresh()
+ }
+
+ Connections {
+ target: itip
+
+ onDeparturesLoaded: {
+ busy = false
+ }
+ }
Component {
- id: departureDelegate
-
- Item {
- width: parent.width
- height: 80
-
- BorderImage {
- anchors.fill: parent
- visible: mouseArea.pressed
- source: theme.inverted ? 'image://theme/meegotouch-list-inverted-background-pressed-vertical-center': 'image://theme/meegotouch-list-background-pressed-vertical-center'
- }
-
- Item {
- anchors.fill: parent
- anchors.margins: UIConstants.DEFAULT_MARGIN
-
- Row {
- Text {
- id: l
- text: line // <----
- anchors.verticalCenter: parent.verticalCenter
- width: 70
- font.pixelSize: UIConstants.FONT_XLARGE
- font.bold: true
- font.family: ExtrasConstants.FONT_FAMILY_LIGHT
- color: !theme.inverted ? UIConstants.COLOR_FOREGROUND : UIConstants.COLOR_INVERTED_FOREGROUND
- }
-
- Column {
- anchors.verticalCenter: parent.verticalCenter
-
- Text {
- id: s
- text: station // <----
- width: 75
- font.pixelSize: UIConstants.FONT_LARGE
- font.family: ExtrasConstants.FONT_FAMILY_LIGHT
- color: !theme.inverted ? UIConstants.COLOR_FOREGROUND : UIConstants.COLOR_INVERTED_FOREGROUND
- }
-
- Text {
- id: d
- text: destination // <----
- color: !theme.inverted ? UIConstants.COLOR_SECONDARY_FOREGROUND : UIConstants.COLOR_INVERTED_SECONDARY_FOREGROUND
- font.family: ExtrasConstants.FONT_FAMILY_LIGHT
- font.pixelSize: UIConstants.FONT_LSMALL
- }
- }
- }
- }
-
- Column {
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- Text {
- id: dep
- // FIXME strange int float transformation appears
- text: departure
- anchors.right: parent.right
- anchors.rightMargin: UIConstants.DEFAULT_MARGIN
- font.bold: true
- font.pixelSize: UIConstants.FONT_XLARGE
- font.family: ExtrasConstants.FONT_FAMILY_LIGHT
- color: !theme.inverted ? UIConstants.COLOR_FOREGROUND : UIConstants.COLOR_INVERTED_FOREGROUND
- }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- onClicked: {
- console.debug("clicked: " + l.text)
- }
- }
- }
- }
+ id: departureDelegate
- Component {
- id: heading
- Rectangle {
- width: parent.width
- height: childrenRect.height + 2*UIConstants.DEFAULT_MARGIN
- color: "lightsteelblue"
-
- Text {
- anchors {
- top: parent.top
- left: parent.left
- margins: UIConstants.DEFAULT_MARGIN
- }
-
- text: gstation + " [" + gline + "]"
- font.bold: true
- font.family: ExtrasConstants.FONT_FAMILY_LIGHT
- font.pixelSize: UIConstants.FONT_LSMALL
- }
- }
- }
-
- ListView {
- id: list
- width: parent.width; height: parent.height
-
- header: heading
-
- model: ListModel {
- ListElement {
- line: "N60"
- station: "Schottentor"
- destination: "Maurer Hauptplatz"
- departure: 5
- }
- ListElement {
- line: "N38"
- station: "Schottentor"
- destination: "Grinzing"
- departure: 7
- }
- ListElement {
- line: "N25"
- station: "Schottentor"
- destination: "Großfeldsiedlung"
- departure: 8
- }
- ListElement {
- line: "N41"
- station: "Schottentor"
- destination: "Pötzleinsdorf"
- departure: 12
- }
- ListElement {
- line: "N43"
- station: "Schottentor"
- destination: "Neuwaldegg"
- departure: 12
- }
- ListElement {
- line: "N66"
- station: "Schottentor"
- destination: "Liesing S"
- departure: 20
- }
- ListElement {
- line: "N38"
- station: "Schottentor"
- destination: "Grinzing"
- departure: 22
- }
- ListElement {
- line: "N25"
- station: "Schottentor"
- destination: "Großfeldsiedlung"
- departure: 35
- }
- ListElement {
- line: "N60"
- station: "Schottentor"
- destination: "Maurer Hauptplatz"
- departure: 35
- }
- ListElement {
- line: "N38"
- station: "Schottentor"
- destination: "Grinzing"
- departure: 37
+ Item {
+ width: parent.width
+ height: 80
+
+ BorderImage {
+ anchors.fill: parent
+ visible: mouseArea.pressed
+ source: theme.inverted ? 'image://theme/meegotouch-list-inverted-background-pressed-vertical-center': 'image://theme/meegotouch-list-background-pressed-vertical-center'
}
- ListElement {
- line: "N41"
- station: "Schottentor"
- destination: "Pötzleinsdorf"
- departure: "03:12"
+
+ Item {
+ anchors.fill: parent
+ anchors.margins: UIConstants.DEFAULT_MARGIN
+
+ Row {
+ spacing: 10
+ Text {
+ id: l
+ text: model.line // <----
+ anchors.verticalCenter: parent.verticalCenter
+ //width: 70
+ font.pixelSize: UIConstants.FONT_XLARGE
+ font.bold: true
+ font.family: ExtrasConstants.FONT_FAMILY_LIGHT
+ color: !theme.inverted ? UIConstants.COLOR_FOREGROUND : UIConstants.COLOR_INVERTED_FOREGROUND
+ }
+
+ Column {
+ anchors.verticalCenter: parent.verticalCenter
+
+ Text {
+ id: s
+ text: model.station // <----
+ width: parent.parent.parent.width - l.width - dep.width - 15
+ elide: Text.ElideRight
+ font.pixelSize: UIConstants.FONT_LARGE
+ font.family: ExtrasConstants.FONT_FAMILY_LIGHT
+ color: !theme.inverted ? UIConstants.COLOR_FOREGROUND : UIConstants.COLOR_INVERTED_FOREGROUND
+ }
+
+ Text {
+ id: d
+ text: model.direction // <--- -
+ width: parent.parent.parent.width - l.width - dep.width - 15
+ elide: Text.ElideRight
+ color: !theme.inverted ? UIConstants.COLOR_SECONDARY_FOREGROUND : UIConstants.COLOR_INVERTED_SECONDARY_FOREGROUND
+ font.family: ExtrasConstants.FONT_FAMILY_LIGHT
+ font.pixelSize: UIConstants.FONT_LSMALL
+ }
+ }
+ }
}
- ListElement {
- line: "N43"
- station: "Schottentor"
- destination: "Neuwaldegg"
- departure: 42
+
+ Column {
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ Text {
+ id: dep
+ // FIXME strange int float transformation appears
+ text: model.time
+ anchors.right: parent.right
+ anchors.rightMargin: UIConstants.DEFAULT_MARGIN
+ font.italic: lowfloor
+ font.bold: true
+ font.pixelSize: UIConstants.FONT_XLARGE
+ font.family: ExtrasConstants.FONT_FAMILY_LIGHT
+ color: !theme.inverted ? UIConstants.COLOR_FOREGROUND : UIConstants.COLOR_INVERTED_FOREGROUND
+ }
}
- ListElement {
- line: "N66"
- station: "Schottentor"
- destination: "Liesing S"
- departure: 50
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ onClicked: {
+ console.debug("clicked: " + l.text)
+ }
}
- ListElement {
- line: "N38"
- station: "Schottentor"
- destination: "Grinzing"
- departure: 52
+ }
+ }
+
+ ListView {
+ id: list
+ width: parent.width; height: parent.height
+
+ header: Rectangle {
+ width: parent.width
+ height: childrenRect.height + 2*UIConstants.DEFAULT_MARGIN
+ color: "lightsteelblue"
+ radius: 5.0
+ smooth: true
+
+ Text {
+ id: header
+
+ anchors {
+ top: parent.top
+ left: parent.left
+ right: parent.right
+ margins: UIConstants.DEFAULT_MARGIN
+ }
+
+ text: 'Richtung ' + gdirection
+ elide: Text.ElideRight
+ font.bold: true
+ font.family: ExtrasConstants.FONT_FAMILY_LIGHT
+ font.pixelSize: UIConstants.FONT_LSMALL
}
- }
- delegate: departureDelegate
- }
-
- ScrollDecorator {
- id: scrolldecorator
- flickableItem: list
- platformStyle: ScrollDecoratorStyle {}
- }
-
- BusyIndicator {
- id: busyIndicator
- visible: busy
- running: true
- platformStyle: BusyIndicatorStyle { size: 'large' }
- anchors.centerIn: parent
- }
+ }
+
+ model: resultModel
+ delegate: departureDelegate
+
+ visible: !resultRealtime.busy && isCorrectInput()
+ }
+
+ ScrollDecorator {
+ id: scrolldecorator
+ flickableItem: list
+ platformStyle: ScrollDecoratorStyle {}
+ }
+
+ BusyIndicator {
+ id: busyIndicator
+ visible: resultRealtime.busy && isCorrectInput()
+ running: visible
+ platformStyle: BusyIndicatorStyle { size: 'large' }
+ anchors.centerIn: parent
+ }
}