Added About page.
[openvpnui.git] / qml / pages / ConnectPage.qml
1 /*
2   Copyright (C) 2014 David Llewellyn-Jones
3   Contact: David Llewellyn-Jones <david@flypig.co.uk>
4   All rights reserved.
5
6   You may use this file under the terms of BSD license as follows:
7
8   Redistribution and use in source and binary forms, with or without
9   modification, are permitted provided that the following conditions are met:
10     * Redistributions of source code must retain the above copyright
11       notice, this list of conditions and the following disclaimer.
12     * Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15     * Neither the name of the Jolla Ltd nor the
16       names of its contributors may be used to endorse or promote products
17       derived from this software without specific prior written permission.
18
19   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
23   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30   Built using the standard template from Jolla
31   Copyright (C) 2013 Jolla Ltd.
32   Contact: Thomas Perl <thomas.perl@jollamobile.com>
33 */
34
35 import QtQuick 2.0
36 import Sailfish.Silica 1.0
37
38 Page {
39     id: connectPage
40
41     Connections {
42         target:VpnControl
43         onStatusChanged: {
44             updateStatus(status)
45         }
46     }
47
48     function updateStatus(status) {
49         switch (status) {
50         case 0:
51             statusText.text = "Disconnected"
52             busy.running = false
53             connect.enabled = true
54             disconnect.enabled = false
55             break
56         case 1:
57             statusText.text = "Initialising"
58             busy.running = true
59             connect.enabled = false
60             disconnect.enabled = true
61             break
62         case 2:
63             statusText.text = "Connecting"
64             busy.running = true
65             connect.enabled = false
66             disconnect.enabled = true
67             break
68         case 3:
69             statusText.text = "Connected"
70             busy.running = false
71             connect.enabled = false
72             disconnect.enabled = true
73             break
74         case 4:
75             statusText.text = "Disconnecting"
76             busy.running = true
77             connect.enabled = false
78             disconnect.enabled = false
79             break
80         default:
81             statusText.text = "Invalid"
82             busy.running = false
83             connect.enabled = true
84             disconnect.enabled = false
85             break
86         }
87     }
88
89     // To enable PullDownMenu, place our content in a SilicaFlickable
90     SilicaFlickable {
91         anchors.fill: parent
92
93         // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
94         PullDownMenu {
95             MenuItem {
96                 text: "About"
97                 onClicked: pageStack.push(Qt.resolvedUrl("AboutPage.qml"))
98             }
99             MenuItem {
100                 text: "Configure"
101                 onClicked: pageStack.push(Qt.resolvedUrl("ConfigurePage.qml"))
102             }
103         }
104
105         contentHeight: column.height + Theme.paddingLarge
106
107         // Why is this necessary?
108         contentWidth: parent.width
109
110         VerticalScrollDecorator {}
111         // Place our content in a Column.  The PageHeader is always placed at the top
112         // of the page, followed by our content.
113         Column {
114             id: column
115
116             width: parent.width
117             spacing: Theme.paddingLarge
118
119             PageHeader {
120                 title: "OpenVPN Rig"
121             }
122             Row {
123                 spacing: Theme.paddingLarge
124                 anchors.horizontalCenter: parent.horizontalCenter
125                 Button {
126                     id: connect
127                     text: "Connect"
128                     enabled: true
129                     onClicked: {
130                         VpnControl.logAppend('\n')
131                         VpnControl.vpnConnect()
132                     }
133                 }
134                 Button {
135                     id : disconnect
136                     text: "Disconnect"
137                     enabled: true
138                     onClicked: VpnControl.vpnDisconnect();
139                 }
140             }
141
142             Label {
143                 id: statusText
144                 text: "No status"
145                 color: Theme.highlightColor
146                 anchors.horizontalCenter: parent.horizontalCenter
147                 font.family: Theme.fontFamilyHeading
148             }
149             Row {
150                 spacing: Theme.paddingLarge
151                 anchors.horizontalCenter: parent.horizontalCenter
152                 BusyIndicator {
153                     id: busy
154                     running: false
155                     size: BusyIndicatorSize.Medium
156                     anchors.verticalCenter: parent.verticalCenter
157                 }
158             }
159
160             Rectangle {
161                 color: "transparent"
162                 border {
163                     color: Theme.highlightBackgroundColor
164                     width: 1
165                 }
166                 //radius: Theme.paddingSmall
167                 anchors.horizontalCenter: parent.horizontalCenter
168                 height: (24 * Theme.fontSizeTiny) + (2 * Theme.paddingLarge)
169                 width: parent.width - 2 * Theme.paddingLarge
170                 x: Theme.paddingLarge
171
172                 //TextEdit {
173                 Label {
174                     id: logOutput
175                     textFormat: Text.PlainText
176                     width: parent.width - 2 * Theme.paddingSmall
177                     height: parent.height - 0 * Theme.paddingSmall
178                     wrapMode: Text.WrapAnywhere
179                     font.pixelSize: Theme.fontSizeTiny * 0.6
180                     font.family: "Monospace"
181                     color: Theme.highlightColor
182                     visible: true
183                     text: VpnControl.logText
184                     verticalAlignment: Text.AlignBottom
185                     x: Theme.paddingSmall
186                     y: Theme.paddingSmall
187                     //readOnly: true
188                     clip: true
189                 }
190             }
191         }
192     }
193 }
194
195