Merge lp:~nataliabidart/ubuntu-sso-client/stable-3-0-update-2.99.90 into lp:ubuntu-sso-client/stable-3-0

Proposed by Natalia Bidart
Status: Merged
Approved by: Natalia Bidart
Approved revision: 829
Merged at revision: 828
Proposed branch: lp:~nataliabidart/ubuntu-sso-client/stable-3-0-update-2.99.90
Merge into: lp:ubuntu-sso-client/stable-3-0
Diff against target: 9631 lines (+3846/-3620)
64 files modified
bin/ubuntu-sso-proxy-creds-qt (+0/-4)
bin/ubuntu-sso-ssl-certificate-qt (+25/-0)
data/qt/choose_sign_in.ui (+0/-165)
data/qt/current_user_sign_in.ui (+163/-184)
data/qt/email_verification.ui (+105/-116)
data/qt/error_message.ui (+28/-31)
data/qt/forgotten_password.ui (+111/-188)
data/qt/loadingoverlay.ui (+3/-6)
data/qt/network_detection.ui (+139/-142)
data/qt/proxy_credentials_dialog.ui (+12/-15)
data/qt/reset_password.ui (+348/-357)
data/qt/setup_account.ui (+661/-700)
data/qt/ssl_dialog.ui (+205/-0)
data/qt/stylesheet.qss (+22/-30)
data/qt/success_message.ui (+32/-35)
run-tests.bat (+1/-1)
setup.py (+1/-0)
ubuntu_sso/credentials.py (+7/-0)
ubuntu_sso/main/glib.py (+4/-2)
ubuntu_sso/main/qt.py (+5/-3)
ubuntu_sso/networkstate/linux.py (+3/-1)
ubuntu_sso/networkstate/tests/test_linux.py (+3/-3)
ubuntu_sso/qt/__init__.py (+5/-0)
ubuntu_sso/qt/arrow.py (+68/-0)
ubuntu_sso/qt/current_user_sign_in_page.py (+32/-49)
ubuntu_sso/qt/email_verification_page.py (+39/-39)
ubuntu_sso/qt/enhanced_check_box.py (+1/-1)
ubuntu_sso/qt/error_page.py (+11/-4)
ubuntu_sso/qt/expander.py (+115/-0)
ubuntu_sso/qt/forgotten_password_page.py (+43/-113)
ubuntu_sso/qt/loadingoverlay.py (+7/-11)
ubuntu_sso/qt/main.py (+5/-0)
ubuntu_sso/qt/network_detection_page.py (+20/-9)
ubuntu_sso/qt/proxy_dialog.py (+6/-6)
ubuntu_sso/qt/reset_password_page.py (+31/-52)
ubuntu_sso/qt/setup_account_page.py (+95/-106)
ubuntu_sso/qt/sign_in_page.py (+0/-97)
ubuntu_sso/qt/ssl_dialog.py (+161/-0)
ubuntu_sso/qt/sso_wizard_page.py (+111/-33)
ubuntu_sso/qt/success_page.py (+13/-4)
ubuntu_sso/qt/tests/__init__.py (+160/-45)
ubuntu_sso/qt/tests/test_arrow.py (+90/-0)
ubuntu_sso/qt/tests/test_current_user_sign_in_page.py (+53/-143)
ubuntu_sso/qt/tests/test_email_verification.py (+34/-90)
ubuntu_sso/qt/tests/test_enchanced_line_edit.py (+2/-5)
ubuntu_sso/qt/tests/test_error_page.py (+26/-0)
ubuntu_sso/qt/tests/test_expander.py (+119/-0)
ubuntu_sso/qt/tests/test_forgotten_password.py (+38/-181)
ubuntu_sso/qt/tests/test_loadingoverlay.py (+8/-8)
ubuntu_sso/qt/tests/test_network_detection.py (+14/-34)
ubuntu_sso/qt/tests/test_reset_password.py (+25/-52)
ubuntu_sso/qt/tests/test_setup_account.py (+55/-105)
ubuntu_sso/qt/tests/test_sign_in_page.py (+0/-69)
ubuntu_sso/qt/tests/test_ssl_dialog.py (+199/-0)
ubuntu_sso/qt/tests/test_sso_wizard_page.py (+61/-97)
ubuntu_sso/qt/tests/test_success_page.py (+26/-0)
ubuntu_sso/qt/tests/test_ubuntu_sso_wizard.py (+91/-37)
ubuntu_sso/qt/ubuntu_sso_wizard.py (+95/-191)
ubuntu_sso/tests/test_credentials.py (+35/-6)
ubuntu_sso/utils/runner/__init__.py (+7/-9)
ubuntu_sso/utils/runner/tests/test_glib.py (+0/-1)
ubuntu_sso/utils/runner/tests/test_qt.py (+0/-1)
ubuntu_sso/utils/runner/tests/test_runner.py (+3/-2)
ubuntu_sso/utils/ui.py (+64/-37)
To merge this branch: bzr merge lp:~nataliabidart/ubuntu-sso-client/stable-3-0-update-2.99.90
Reviewer Review Type Date Requested Status
Roberto Alsina (community) Approve
Review via email: mp+96154@code.launchpad.net

Commit message

- Updating from trunk up to revno 901:

[ Diego Sarmentero <email address hidden> ]
  - Hide the errors label on refresh captcha (LP: #947202).
  - Changed the name of the function assigned to the lambda that is called
    on passwordChanged signal from reset_password_page (LP: #945080).
  - Made on_user_validated also emit stopProcessing so callers can hide
    any processing overlay they are showing (LP: #945094).
  - Fixed: Qt UI: there is a Back button in the "Enter verification page"
    (LP: #944769).
  - Fixed: Qt UI: there is not loading overvaly while validating an
    email address (LP: #944767).
  - Fixed: Qt UI: clicking on the "Set Up Account" button takes me
    instantly to the verification page, even if there are form errors
    (LP: #934502).
  - Fix: [UIFe] Improve the display of errors in the Qt UI (LP: #938604).
  - Fix: Qt UI: center when first opening (LP: #934173).
  - Fixed: The header in the pages is above the overlay (LP: #934523).
  - Fixed: [UIFE] The padding of the wizard pages in the Qt UI is not
    correct (LP: #934519).

[ Manuel de la Pena <email address hidden> ]
  - Ensure that the strings used in sso do not have "ubuntu one" in them
    (LP: #933729).
  - Ensure that the strings used are the ones provided by design
    (LP: #937905).
  - Added the dialog that will be used to show that a certificate has issues
    (LP: #933729).

[ Natalia B. Bidart <email address hidden> ]
  - Add proper titles and subtitles for the Login and Forgot password
    pages (LP: #945061).
  - Made UI modules to setup the gui logging logger (LP: #947469).
  - Fallback to the GTK+ UI when the specified ui_executable does
    not exist (LP: #939821).
  - Move the 'choose sign in page' to client code (U1 control panel
    in this case) (LP: #933576).
  - Make use of the 'login_only' parameter that is being passed to the
    UbuntuSSOWizard (LP: #939558).
  - Stop using is_reactor_installed since is buggy (LP: #933644).
  - Do not mask ImportError by importing inside a function (LP: #939173).
  - No more strings coming up from the Designer ui files (LP: #938626).

[ Roberto Alsina <email address hidden> ]
  - Made the network detection code return ONLINE if NM is not available
    (but still UNKNOWN if it's available and fails) (LP: #939703).

To post a comment you must log in.
Revision history for this message
Roberto Alsina (ralsina) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/ubuntu-sso-proxy-creds-qt'
--- bin/ubuntu-sso-proxy-creds-qt 2012-02-14 10:09:40 +0000
+++ bin/ubuntu-sso-proxy-creds-qt 2012-03-06 15:41:36 +0000
@@ -19,10 +19,6 @@
1919
20# Invalid name, pylint: disable=C010320# Invalid name, pylint: disable=C0103
2121
22import os
23# HACK: At the moment we need to do that until sso is refactored
24os.environ['USE_QT_MAINLOOP'] = '1'
25
26# set the dbus main loop to be used22# set the dbus main loop to be used
27from dbus.mainloop.qt import DBusQtMainLoop23from dbus.mainloop.qt import DBusQtMainLoop
28DBusQtMainLoop(set_as_default=True)24DBusQtMainLoop(set_as_default=True)
2925
=== added file 'bin/ubuntu-sso-ssl-certificate-qt'
--- bin/ubuntu-sso-ssl-certificate-qt 1970-01-01 00:00:00 +0000
+++ bin/ubuntu-sso-ssl-certificate-qt 2012-03-06 15:41:36 +0000
@@ -0,0 +1,25 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# Copyright 2012 Canonical Ltd.
5#
6# This program is free software: you can redistribute it and/or modify it
7# under the terms of the GNU General Public License version 3, as published
8# by the Free Software Foundation.
9#
10# This program is distributed in the hope that it will be useful, but
11# WITHOUT ANY WARRANTY; without even the implied warranties of
12# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
13# PURPOSE. See the GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License along
16# with this program. If not, see <http://www.gnu.org/licenses/>.
17
18"""Start the QT proxy creds dialog."""
19
20# Invalid name, pylint: disable=C0103
21
22from ubuntu_sso.qt.ssl_dialog import main
23
24if __name__ == "__main__":
25 main()
026
=== removed file 'data/qt/choose_sign_in.ui'
--- data/qt/choose_sign_in.ui 2012-02-09 18:28:40 +0000
+++ data/qt/choose_sign_in.ui 1970-01-01 00:00:00 +0000
@@ -1,165 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>ChooseSignInPage</class>
4 <widget class="QWizardPage" name="ChooseSignInPage">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>432</width>
10 <height>387</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>WizardPage</string>
15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout_2">
17 <property name="leftMargin">
18 <number>0</number>
19 </property>
20 <property name="topMargin">
21 <number>0</number>
22 </property>
23 <property name="rightMargin">
24 <number>0</number>
25 </property>
26 <item>
27 <layout class="QHBoxLayout" name="horizontalLayout_2">
28 <item>
29 <widget class="QLabel" name="image_label">
30 <property name="sizePolicy">
31 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
32 <horstretch>0</horstretch>
33 <verstretch>0</verstretch>
34 </sizepolicy>
35 </property>
36 <property name="minimumSize">
37 <size>
38 <width>400</width>
39 <height>150</height>
40 </size>
41 </property>
42 <property name="text">
43 <string/>
44 </property>
45 <property name="textFormat">
46 <enum>Qt::PlainText</enum>
47 </property>
48 <property name="alignment">
49 <set>Qt::AlignCenter</set>
50 </property>
51 <property name="wordWrap">
52 <bool>true</bool>
53 </property>
54 </widget>
55 </item>
56 </layout>
57 </item>
58 <item>
59 <widget class="QLabel" name="message_label">
60 <property name="font">
61 <font>
62 <pointsize>11</pointsize>
63 <weight>50</weight>
64 <bold>false</bold>
65 </font>
66 </property>
67 <property name="text">
68 <string>Congratulations, app_name is installed!</string>
69 </property>
70 <property name="alignment">
71 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
72 </property>
73 </widget>
74 </item>
75 <item>
76 <spacer name="verticalSpacer_3">
77 <property name="orientation">
78 <enum>Qt::Vertical</enum>
79 </property>
80 <property name="sizeType">
81 <enum>QSizePolicy::Fixed</enum>
82 </property>
83 <property name="sizeHint" stdset="0">
84 <size>
85 <width>20</width>
86 <height>30</height>
87 </size>
88 </property>
89 </spacer>
90 </item>
91 <item>
92 <layout class="QHBoxLayout" name="horizontalLayout">
93 <item>
94 <spacer name="horizontalSpacer_2">
95 <property name="orientation">
96 <enum>Qt::Horizontal</enum>
97 </property>
98 <property name="sizeHint" stdset="0">
99 <size>
100 <width>20</width>
101 <height>20</height>
102 </size>
103 </property>
104 </spacer>
105 </item>
106 <item>
107 <layout class="QVBoxLayout" name="verticalLayout">
108 <item>
109 <widget class="QPushButton" name="existing_account_button">
110 <property name="text">
111 <string/>
112 </property>
113 </widget>
114 </item>
115 <item>
116 <widget class="QPushButton" name="setup_account_button">
117 <property name="text">
118 <string/>
119 </property>
120 </widget>
121 </item>
122 <item>
123 <widget class="QPushButton" name="cancel_button">
124 <property name="text">
125 <string/>
126 </property>
127 </widget>
128 </item>
129 </layout>
130 </item>
131 <item>
132 <spacer name="horizontalSpacer">
133 <property name="orientation">
134 <enum>Qt::Horizontal</enum>
135 </property>
136 <property name="sizeType">
137 <enum>QSizePolicy::Expanding</enum>
138 </property>
139 <property name="sizeHint" stdset="0">
140 <size>
141 <width>20</width>
142 <height>20</height>
143 </size>
144 </property>
145 </spacer>
146 </item>
147 </layout>
148 </item>
149 <item>
150 <spacer name="verticalSpacer_2">
151 <property name="orientation">
152 <enum>Qt::Vertical</enum>
153 </property>
154 <property name="sizeHint" stdset="0">
155 <size>
156 <width>20</width>
157 <height>50</height>
158 </size>
159 </property>
160 </spacer>
161 </item>
162 </layout>
163 </widget>
164 <connections/>
165</ui>
1660
=== modified file 'data/qt/current_user_sign_in.ui'
--- data/qt/current_user_sign_in.ui 2011-09-08 16:43:39 +0000
+++ data/qt/current_user_sign_in.ui 2012-03-06 15:41:36 +0000
@@ -1,184 +1,163 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>CurrentUserSignInPage</class>3 <class>CurrentUserSignInPage</class>
4 <widget class="QWizardPage" name="CurrentUserSignInPage">4 <widget class="QWizardPage" name="CurrentUserSignInPage">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>399</width>9 <width>302</width>
10 <height>309</height>10 <height>244</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <layout class="QVBoxLayout" name="verticalLayout_2">
14 <string>WizardPage</string>14 <property name="spacing">
15 </property>15 <number>15</number>
16 <layout class="QVBoxLayout" name="verticalLayout_4">16 </property>
17 <property name="topMargin">17 <property name="margin">
18 <number>0</number>18 <number>0</number>
19 </property>19 </property>
20 <item>20 <item>
21 <layout class="QHBoxLayout" name="horizontalLayout_3">21 <layout class="QVBoxLayout" name="verticalLayout">
22 <item>22 <property name="spacing">
23 <layout class="QVBoxLayout" name="verticalLayout">23 <number>3</number>
24 <item>24 </property>
25 <spacer name="verticalSpacer_3">25 <item>
26 <property name="orientation">26 <widget class="QLabel" name="email_label">
27 <enum>Qt::Vertical</enum>27 <property name="text">
28 </property>28 <string notr="true">&amp;Email</string>
29 <property name="sizeHint" stdset="0">29 </property>
30 <size>30 <property name="buddy">
31 <width>20</width>31 <cstring>email_edit</cstring>
32 <height>40</height>32 </property>
33 </size>33 </widget>
34 </property>34 </item>
35 </spacer>35 <item>
36 </item>36 <widget class="QLineEdit" name="email_edit">
37 <item>37 <property name="minimumSize">
38 <widget class="QFrame" name="_signInFrame">38 <size>
39 <property name="frameShape">39 <width>300</width>
40 <enum>QFrame::NoFrame</enum>40 <height>0</height>
41 </property>41 </size>
42 <layout class="QVBoxLayout" name="verticalLayout_3">42 </property>
43 <item>43 <property name="placeholderText">
44 <layout class="QVBoxLayout" name="verticalLayout_2">44 <string/>
45 <item>45 </property>
46 <widget class="QLabel" name="email_label">46 </widget>
47 <property name="text">47 </item>
48 <string>&amp;Email</string>48 </layout>
49 </property>49 </item>
50 <property name="buddy">50 <item>
51 <cstring>email_edit</cstring>51 <layout class="QVBoxLayout" name="verticalLayout_3">
52 </property>52 <property name="spacing">
53 </widget>53 <number>3</number>
54 </item>54 </property>
55 <item>55 <item>
56 <widget class="QLineEdit" name="email_edit">56 <widget class="QLabel" name="password_label">
57 <property name="placeholderText">57 <property name="text">
58 <string/>58 <string notr="true">&amp;Password</string>
59 </property>59 </property>
60 </widget>60 <property name="buddy">
61 </item>61 <cstring>password_edit</cstring>
62 <item>62 </property>
63 <widget class="QLabel" name="password_label">63 </widget>
64 <property name="text">64 </item>
65 <string>&amp;Password</string>65 <item>
66 </property>66 <widget class="QLineEdit" name="password_edit">
67 <property name="buddy">67 <property name="minimumSize">
68 <cstring>password_edit</cstring>68 <size>
69 </property>69 <width>300</width>
70 </widget>70 <height>0</height>
71 </item>71 </size>
72 <item>72 </property>
73 <widget class="QLineEdit" name="password_edit">73 <property name="echoMode">
74 <property name="echoMode">74 <enum>QLineEdit::Password</enum>
75 <enum>QLineEdit::Password</enum>75 </property>
76 </property>76 <property name="placeholderText">
77 <property name="placeholderText">77 <string/>
78 <string/>78 </property>
79 </property>79 </widget>
80 </widget>80 </item>
81 </item>81 </layout>
82 <item>82 </item>
83 <widget class="QLabel" name="forgot_password_label">83 <item>
84 <property name="sizePolicy">84 <widget class="QLabel" name="forgot_password_label">
85 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">85 <property name="sizePolicy">
86 <horstretch>0</horstretch>86 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
87 <verstretch>0</verstretch>87 <horstretch>0</horstretch>
88 </sizepolicy>88 <verstretch>0</verstretch>
89 </property>89 </sizepolicy>
90 <property name="text">90 </property>
91 <string>Forgot password?</string>91 <property name="text">
92 </property>92 <string notr="true">Forgot password?</string>
93 </widget>93 </property>
94 </item>94 </widget>
95 <item>95 </item>
96 <layout class="QHBoxLayout" name="horizontalLayout_4">96 <item>
97 <item>97 <layout class="QHBoxLayout" name="horizontalLayout_4">
98 <spacer name="horizontalSpacer_3">98 <item>
99 <property name="orientation">99 <spacer name="horizontalSpacer_3">
100 <enum>Qt::Horizontal</enum>100 <property name="orientation">
101 </property>101 <enum>Qt::Horizontal</enum>
102 <property name="sizeHint" stdset="0">102 </property>
103 <size>103 <property name="sizeHint" stdset="0">
104 <width>40</width>104 <size>
105 <height>20</height>105 <width>40</width>
106 </size>106 <height>20</height>
107 </property>107 </size>
108 </spacer>108 </property>
109 </item>109 </spacer>
110 <item>110 </item>
111 <widget class="QPushButton" name="sign_in_button">111 <item>
112 <property name="enabled">112 <widget class="QPushButton" name="sign_in_button">
113 <bool>false</bool>113 <property name="enabled">
114 </property>114 <bool>false</bool>
115 <property name="text">115 </property>
116 <string>Sign In</string>116 <property name="text">
117 </property>117 <string notr="true">Sign In</string>
118 <property name="default">118 </property>
119 <bool>true</bool>119 <property name="default">
120 </property>120 <bool>true</bool>
121 </widget>121 </property>
122 </item>122 </widget>
123 </layout>123 </item>
124 </item>124 </layout>
125 </layout>125 </item>
126 </item>126 <item>
127 </layout>127 <spacer name="verticalSpacer">
128 </widget>128 <property name="orientation">
129 </item>129 <enum>Qt::Vertical</enum>
130 <item>130 </property>
131 <spacer name="verticalSpacer_2">131 <property name="sizeHint" stdset="0">
132 <property name="orientation">132 <size>
133 <enum>Qt::Vertical</enum>133 <width>20</width>
134 </property>134 <height>40</height>
135 <property name="sizeHint" stdset="0">135 </size>
136 <size>136 </property>
137 <width>20</width>137 </spacer>
138 <height>40</height>138 </item>
139 </size>139 </layout>
140 </property>140 <zorder>verticalSpacer</zorder>
141 </spacer>141 <zorder>forgot_password_label</zorder>
142 </item>142 <zorder></zorder>
143 </layout>143 </widget>
144 </item>144 <resources/>
145 <item>145 <connections>
146 <spacer name="horizontalSpacer">146 <connection>
147 <property name="orientation">147 <sender>password_edit</sender>
148 <enum>Qt::Horizontal</enum>148 <signal>returnPressed()</signal>
149 </property>149 <receiver>sign_in_button</receiver>
150 <property name="sizeType">150 <slot>click()</slot>
151 <enum>QSizePolicy::Fixed</enum>151 <hints>
152 </property>152 <hint type="sourcelabel">
153 <property name="sizeHint" stdset="0">153 <x>199</x>
154 <size>154 <y>160</y>
155 <width>40</width>155 </hint>
156 <height>20</height>156 <hint type="destinationlabel">
157 </size>157 <x>288</x>
158 </property>158 <y>217</y>
159 </spacer>159 </hint>
160 </item>160 </hints>
161 </layout>161 </connection>
162 </item>162 </connections>
163 </layout>163</ui>
164 </widget>
165 <resources/>
166 <connections>
167 <connection>
168 <sender>password_edit</sender>
169 <signal>returnPressed()</signal>
170 <receiver>sign_in_button</receiver>
171 <slot>click()</slot>
172 <hints>
173 <hint type="sourcelabel">
174 <x>199</x>
175 <y>160</y>
176 </hint>
177 <hint type="destinationlabel">
178 <x>288</x>
179 <y>217</y>
180 </hint>
181 </hints>
182 </connection>
183 </connections>
184</ui>
185164
=== modified file 'data/qt/email_verification.ui'
--- data/qt/email_verification.ui 2011-09-08 16:43:39 +0000
+++ data/qt/email_verification.ui 2012-03-06 15:41:36 +0000
@@ -1,116 +1,105 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>EmailVerificationPage</class>3 <class>EmailVerificationPage</class>
4 <widget class="QWizardPage" name="EmailVerificationPage">4 <widget class="QWizardPage" name="EmailVerificationPage">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>400</width>9 <width>300</width>
10 <height>300</height>10 <height>148</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <property name="minimumSize">
14 <string>WizardPage</string>14 <size>
15 </property>15 <width>300</width>
16 <layout class="QVBoxLayout" name="verticalLayout_2">16 <height>0</height>
17 <property name="topMargin">17 </size>
18 <number>0</number>18 </property>
19 </property>19 <layout class="QVBoxLayout" name="verticalLayout_2">
20 <item>20 <property name="spacing">
21 <layout class="QHBoxLayout" name="horizontalLayout_3">21 <number>15</number>
22 <item>22 </property>
23 <layout class="QVBoxLayout" name="verticalLayout">23 <property name="margin">
24 <item>24 <number>0</number>
25 <widget class="QLabel" name="label">25 </property>
26 <property name="text">26 <item>
27 <string>Verification code</string>27 <layout class="QVBoxLayout" name="verticalLayout">
28 </property>28 <property name="spacing">
29 </widget>29 <number>3</number>
30 </item>30 </property>
31 <item>31 <item>
32 <widget class="QLineEdit" name="verification_code_edit">32 <widget class="QLabel" name="label">
33 <property name="placeholderText">33 <property name="text">
34 <string/>34 <string notr="true">Verification code</string>
35 </property>35 </property>
36 </widget>36 </widget>
37 </item>37 </item>
38 <item>38 <item>
39 <layout class="QHBoxLayout" name="horizontalLayout_2">39 <widget class="QLineEdit" name="verification_code_edit">
40 <item>40 <property name="placeholderText">
41 <spacer name="horizontalSpacer_3">41 <string/>
42 <property name="orientation">42 </property>
43 <enum>Qt::Horizontal</enum>43 </widget>
44 </property>44 </item>
45 <property name="sizeHint" stdset="0">45 </layout>
46 <size>46 </item>
47 <width>40</width>47 <item>
48 <height>20</height>48 <layout class="QHBoxLayout" name="horizontalLayout_2">
49 </size>49 <item>
50 </property>50 <spacer name="horizontalSpacer_3">
51 </spacer>51 <property name="orientation">
52 </item>52 <enum>Qt::Horizontal</enum>
53 <item>53 </property>
54 <widget class="QPushButton" name="next_button">54 <property name="sizeHint" stdset="0">
55 <property name="text">55 <size>
56 <string>Next</string>56 <width>40</width>
57 </property>57 <height>20</height>
58 </widget>58 </size>
59 </item>59 </property>
60 </layout>60 </spacer>
61 </item>61 </item>
62 <item>62 <item>
63 <spacer name="verticalSpacer_2">63 <widget class="QPushButton" name="next_button">
64 <property name="orientation">64 <property name="text">
65 <enum>Qt::Vertical</enum>65 <string notr="true">Next</string>
66 </property>66 </property>
67 <property name="sizeHint" stdset="0">67 </widget>
68 <size>68 </item>
69 <width>20</width>69 </layout>
70 <height>40</height>70 </item>
71 </size>71 <item>
72 </property>72 <spacer name="verticalSpacer_2">
73 </spacer>73 <property name="orientation">
74 </item>74 <enum>Qt::Vertical</enum>
75 </layout>75 </property>
76 </item>76 <property name="sizeHint" stdset="0">
77 <item>77 <size>
78 <spacer name="horizontalSpacer">78 <width>20</width>
79 <property name="orientation">79 <height>40</height>
80 <enum>Qt::Horizontal</enum>80 </size>
81 </property>81 </property>
82 <property name="sizeType">82 </spacer>
83 <enum>QSizePolicy::Fixed</enum>83 </item>
84 </property>84 </layout>
85 <property name="sizeHint" stdset="0">85 </widget>
86 <size>86 <resources/>
87 <width>40</width>87 <connections>
88 <height>20</height>88 <connection>
89 </size>89 <sender>verification_code_edit</sender>
90 </property>90 <signal>returnPressed()</signal>
91 </spacer>91 <receiver>next_button</receiver>
92 </item>92 <slot>click()</slot>
93 </layout>93 <hints>
94 </item>94 <hint type="sourcelabel">
95 </layout>95 <x>199</x>
96 </widget>96 <y>15</y>
97 <resources/>97 </hint>
98 <connections>98 <hint type="destinationlabel">
99 <connection>99 <x>299</x>
100 <sender>verification_code_edit</sender>100 <y>49</y>
101 <signal>returnPressed()</signal>101 </hint>
102 <receiver>next_button</receiver>102 </hints>
103 <slot>click()</slot>103 </connection>
104 <hints>104 </connections>
105 <hint type="sourcelabel">105</ui>
106 <x>199</x>
107 <y>15</y>
108 </hint>
109 <hint type="destinationlabel">
110 <x>299</x>
111 <y>49</y>
112 </hint>
113 </hints>
114 </connection>
115 </connections>
116</ui>
117106
=== modified file 'data/qt/error_message.ui'
--- data/qt/error_message.ui 2011-08-04 15:25:42 +0000
+++ data/qt/error_message.ui 2012-03-06 15:41:36 +0000
@@ -1,31 +1,28 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>ErrorPage</class>3 <class>ErrorPage</class>
4 <widget class="QWizardPage" name="ErrorPage">4 <widget class="QWizardPage" name="ErrorPage">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>400</width>9 <width>400</width>
10 <height>300</height>10 <height>300</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <layout class="QVBoxLayout" name="verticalLayout">
14 <string>WizardPage</string>14 <item>
15 </property>15 <widget class="QLabel" name="error_message_label">
16 <layout class="QVBoxLayout" name="verticalLayout">16 <property name="text">
17 <item>17 <string notr="true">TextLabel</string>
18 <widget class="QLabel" name="error_message_label">18 </property>
19 <property name="text">19 <property name="alignment">
20 <string>TextLabel</string>20 <set>Qt::AlignCenter</set>
21 </property>21 </property>
22 <property name="alignment">22 </widget>
23 <set>Qt::AlignCenter</set>23 </item>
24 </property>24 </layout>
25 </widget>25 </widget>
26 </item>26 <resources/>
27 </layout>27 <connections/>
28 </widget>28</ui>
29 <resources/>
30 <connections/>
31</ui>
3229
=== modified file 'data/qt/forgotten_password.ui'
--- data/qt/forgotten_password.ui 2011-09-21 16:59:40 +0000
+++ data/qt/forgotten_password.ui 2012-03-06 15:41:36 +0000
@@ -1,188 +1,111 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>ForgottenPasswordPage</class>3 <class>ForgottenPasswordPage</class>
4 <widget class="QWizardPage" name="ForgottenPasswordPage">4 <widget class="QWizardPage" name="ForgottenPasswordPage">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>446</width>9 <width>148</width>
10 <height>317</height>10 <height>148</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <layout class="QVBoxLayout" name="verticalLayout_2">
14 <string>WizardPage</string>14 <property name="spacing">
15 </property>15 <number>15</number>
16 <layout class="QVBoxLayout" name="verticalLayout_2">16 </property>
17 <property name="topMargin">17 <property name="margin">
18 <number>0</number>18 <number>0</number>
19 </property>19 </property>
20 <item>20 <item>
21 <widget class="QLabel" name="forgotted_password_intro_label">21 <layout class="QVBoxLayout" name="verticalLayout">
22 <property name="text">22 <property name="spacing">
23 <string/>23 <number>3</number>
24 </property>24 </property>
25 <property name="wordWrap">25 <item>
26 <bool>true</bool>26 <widget class="QLabel" name="email_address_label">
27 </property>27 <property name="sizePolicy">
28 </widget>28 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
29 </item>29 <horstretch>0</horstretch>
30 <item>30 <verstretch>0</verstretch>
31 <widget class="QWidget" name="email_widget" native="true">31 </sizepolicy>
32 <layout class="QHBoxLayout" name="horizontalLayout_2">32 </property>
33 <item>33 <property name="text">
34 <layout class="QVBoxLayout" name="verticalLayout">34 <string notr="true"/>
35 <item>35 </property>
36 <widget class="QLabel" name="email_address_label">36 </widget>
37 <property name="sizePolicy">37 </item>
38 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">38 <item>
39 <horstretch>0</horstretch>39 <widget class="QLineEdit" name="email_line_edit">
40 <verstretch>0</verstretch>40 <property name="minimumSize">
41 </sizepolicy>41 <size>
42 </property>42 <width>300</width>
43 <property name="text">43 <height>0</height>
44 <string/>44 </size>
45 </property>45 </property>
46 </widget>46 </widget>
47 </item>47 </item>
48 <item>48 </layout>
49 <widget class="QLineEdit" name="email_line_edit"/>49 </item>
50 </item>50 <item>
51 </layout>51 <layout class="QHBoxLayout" name="horizontalLayout">
52 </item>52 <item>
53 <item>53 <spacer name="horizontalSpacer">
54 <spacer name="horizontalSpacer_3">54 <property name="orientation">
55 <property name="orientation">55 <enum>Qt::Horizontal</enum>
56 <enum>Qt::Horizontal</enum>56 </property>
57 </property>57 <property name="sizeHint" stdset="0">
58 <property name="sizeType">58 <size>
59 <enum>QSizePolicy::Fixed</enum>59 <width>40</width>
60 </property>60 <height>20</height>
61 <property name="sizeHint" stdset="0">61 </size>
62 <size>62 </property>
63 <width>40</width>63 </spacer>
64 <height>20</height>64 </item>
65 </size>65 <item>
66 </property>66 <widget class="QPushButton" name="send_button">
67 </spacer>67 <property name="enabled">
68 </item>68 <bool>false</bool>
69 </layout>69 </property>
70 </widget>70 <property name="text">
71 </item>71 <string notr="true"/>
72 <item>72 </property>
73 <layout class="QHBoxLayout" name="horizontalLayout">73 </widget>
74 <item>74 </item>
75 <spacer name="horizontalSpacer">75 </layout>
76 <property name="orientation">76 </item>
77 <enum>Qt::Horizontal</enum>77 <item>
78 </property>78 <spacer name="verticalSpacer">
79 <property name="sizeHint" stdset="0">79 <property name="orientation">
80 <size>80 <enum>Qt::Vertical</enum>
81 <width>40</width>81 </property>
82 <height>20</height>82 <property name="sizeHint" stdset="0">
83 </size>83 <size>
84 </property>84 <width>20</width>
85 </spacer>85 <height>40</height>
86 </item>86 </size>
87 <item>87 </property>
88 <widget class="QPushButton" name="send_button">88 </spacer>
89 <property name="enabled">89 </item>
90 <bool>false</bool>90 </layout>
91 </property>91 </widget>
92 <property name="text">92 <resources/>
93 <string/>93 <connections>
94 </property>94 <connection>
95 </widget>95 <sender>email_line_edit</sender>
96 </item>96 <signal>returnPressed()</signal>
97 <item>97 <receiver>send_button</receiver>
98 <spacer name="horizontalSpacer_4">98 <slot>click()</slot>
99 <property name="orientation">99 <hints>
100 <enum>Qt::Horizontal</enum>100 <hint type="sourcelabel">
101 </property>101 <x>222</x>
102 <property name="sizeType">102 <y>92</y>
103 <enum>QSizePolicy::Fixed</enum>103 </hint>
104 </property>104 <hint type="destinationlabel">
105 <property name="sizeHint" stdset="0">105 <x>362</x>
106 <size>106 <y>136</y>
107 <width>40</width>107 </hint>
108 <height>20</height>108 </hints>
109 </size>109 </connection>
110 </property>110 </connections>
111 </spacer>111</ui>
112 </item>
113 </layout>
114 </item>
115 <item>
116 <widget class="QWidget" name="try_again_widget" native="true">
117 <layout class="QHBoxLayout" name="horizontalLayout_3">
118 <item>
119 <spacer name="horizontalSpacer_5">
120 <property name="orientation">
121 <enum>Qt::Horizontal</enum>
122 </property>
123 <property name="sizeHint" stdset="0">
124 <size>
125 <width>40</width>
126 <height>20</height>
127 </size>
128 </property>
129 </spacer>
130 </item>
131 <item>
132 <widget class="QPushButton" name="try_again_button">
133 <property name="text">
134 <string/>
135 </property>
136 </widget>
137 </item>
138 <item>
139 <spacer name="horizontalSpacer_6">
140 <property name="orientation">
141 <enum>Qt::Horizontal</enum>
142 </property>
143 <property name="sizeHint" stdset="0">
144 <size>
145 <width>40</width>
146 <height>20</height>
147 </size>
148 </property>
149 </spacer>
150 </item>
151 </layout>
152 </widget>
153 </item>
154 <item>
155 <spacer name="verticalSpacer">
156 <property name="orientation">
157 <enum>Qt::Vertical</enum>
158 </property>
159 <property name="sizeHint" stdset="0">
160 <size>
161 <width>20</width>
162 <height>40</height>
163 </size>
164 </property>
165 </spacer>
166 </item>
167 </layout>
168 </widget>
169 <resources/>
170 <connections>
171 <connection>
172 <sender>email_line_edit</sender>
173 <signal>returnPressed()</signal>
174 <receiver>send_button</receiver>
175 <slot>click()</slot>
176 <hints>
177 <hint type="sourcelabel">
178 <x>222</x>
179 <y>92</y>
180 </hint>
181 <hint type="destinationlabel">
182 <x>362</x>
183 <y>136</y>
184 </hint>
185 </hints>
186 </connection>
187 </connections>
188</ui>
189112
=== modified file 'data/qt/loadingoverlay.ui'
--- data/qt/loadingoverlay.ui 2012-02-03 13:54:29 +0000
+++ data/qt/loadingoverlay.ui 2012-03-06 15:41:36 +0000
@@ -6,13 +6,10 @@
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>702</width>9 <width>433</width>
10 <height>230</height>10 <height>169</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">
14 <string>Frame</string>
15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout">13 <layout class="QVBoxLayout" name="verticalLayout">
17 <property name="topMargin">14 <property name="topMargin">
18 <number>30</number>15 <number>30</number>
@@ -61,7 +58,7 @@
61 </font>58 </font>
62 </property>59 </property>
63 <property name="text">60 <property name="text">
64 <string>Getting information, please wait...</string>61 <string notr="true">Getting information, please wait...</string>
65 </property>62 </property>
66 </widget>63 </widget>
67 </item>64 </item>
6865
=== modified file 'data/qt/network_detection.ui'
--- data/qt/network_detection.ui 2012-02-13 20:27:48 +0000
+++ data/qt/network_detection.ui 2012-03-06 15:41:36 +0000
@@ -1,142 +1,139 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>Form</class>3 <class>Form</class>
4 <widget class="QWizardPage" name="Form">4 <widget class="QWizardPage" name="Form">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>541</width>9 <width>512</width>
10 <height>365</height>10 <height>334</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <layout class="QVBoxLayout" name="verticalLayout">
14 <string>WizardPage</string>14 <item>
15 </property>15 <layout class="QHBoxLayout" name="horizontalLayout_2">
16 <layout class="QVBoxLayout" name="verticalLayout">16 <item>
17 <item>17 <spacer name="horizontalSpacer_3">
18 <layout class="QHBoxLayout" name="horizontalLayout_2">18 <property name="orientation">
19 <item>19 <enum>Qt::Horizontal</enum>
20 <spacer name="horizontalSpacer_3">20 </property>
21 <property name="orientation">21 <property name="sizeHint" stdset="0">
22 <enum>Qt::Horizontal</enum>22 <size>
23 </property>23 <width>40</width>
24 <property name="sizeHint" stdset="0">24 <height>20</height>
25 <size>25 </size>
26 <width>40</width>26 </property>
27 <height>20</height>27 </spacer>
28 </size>28 </item>
29 </property>29 <item>
30 </spacer>30 <widget class="QLabel" name="image_label">
31 </item>31 <property name="sizePolicy">
32 <item>32 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
33 <widget class="QLabel" name="image_label">33 <horstretch>0</horstretch>
34 <property name="sizePolicy">34 <verstretch>0</verstretch>
35 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">35 </sizepolicy>
36 <horstretch>0</horstretch>36 </property>
37 <verstretch>0</verstretch>37 <property name="minimumSize">
38 </sizepolicy>38 <size>
39 </property>39 <width>400</width>
40 <property name="minimumSize">40 <height>150</height>
41 <size>41 </size>
42 <width>400</width>42 </property>
43 <height>150</height>43 <property name="text">
44 </size>44 <string/>
45 </property>45 </property>
46 <property name="text">46 <property name="textFormat">
47 <string/>47 <enum>Qt::PlainText</enum>
48 </property>48 </property>
49 <property name="textFormat">49 <property name="alignment">
50 <enum>Qt::PlainText</enum>50 <set>Qt::AlignCenter</set>
51 </property>51 </property>
52 <property name="alignment">52 <property name="wordWrap">
53 <set>Qt::AlignCenter</set>53 <bool>true</bool>
54 </property>54 </property>
55 <property name="wordWrap">55 </widget>
56 <bool>true</bool>56 </item>
57 </property>57 <item>
58 </widget>58 <spacer name="horizontalSpacer_4">
59 </item>59 <property name="orientation">
60 <item>60 <enum>Qt::Horizontal</enum>
61 <spacer name="horizontalSpacer_4">61 </property>
62 <property name="orientation">62 <property name="sizeHint" stdset="0">
63 <enum>Qt::Horizontal</enum>63 <size>
64 </property>64 <width>40</width>
65 <property name="sizeHint" stdset="0">65 <height>20</height>
66 <size>66 </size>
67 <width>40</width>67 </property>
68 <height>20</height>68 </spacer>
69 </size>69 </item>
70 </property>70 </layout>
71 </spacer>71 </item>
72 </item>72 <item>
73 </layout>73 <widget class="QLabel" name="message_label">
74 </item>74 <property name="alignment">
75 <item>75 <set>Qt::AlignCenter</set>
76 <widget class="QLabel" name="message_label">76 </property>
77 <property name="alignment">77 </widget>
78 <set>Qt::AlignCenter</set>78 </item>
79 </property>79 <item>
80 </widget>80 <layout class="QHBoxLayout" name="horizontalLayout">
81 </item>81 <item>
82 <item>82 <spacer name="horizontalSpacer">
83 <layout class="QHBoxLayout" name="horizontalLayout">83 <property name="orientation">
84 <item>84 <enum>Qt::Horizontal</enum>
85 <spacer name="horizontalSpacer">85 </property>
86 <property name="orientation">86 <property name="sizeHint" stdset="0">
87 <enum>Qt::Horizontal</enum>87 <size>
88 </property>88 <width>40</width>
89 <property name="sizeHint" stdset="0">89 <height>20</height>
90 <size>90 </size>
91 <width>40</width>91 </property>
92 <height>20</height>92 </spacer>
93 </size>93 </item>
94 </property>94 <item>
95 </spacer>95 <widget class="QLabel" name="label">
96 </item>96 <property name="text">
97 <item>97 <string notr="true">Are you online? We can't detect an internet connection - you will need to be connected to set up Ubuntu Single Sign On</string>
98 <widget class="QLabel" name="label">98 </property>
99 <property name="text">99 <property name="textFormat">
100 <string>Are you online? We can't detect an internet connection - you will need to be connected to set up Ubuntu Single Sign On</string>100 <enum>Qt::PlainText</enum>
101 </property>101 </property>
102 <property name="textFormat">102 <property name="wordWrap">
103 <enum>Qt::PlainText</enum>103 <bool>true</bool>
104 </property>104 </property>
105 <property name="wordWrap">105 </widget>
106 <bool>true</bool>106 </item>
107 </property>107 <item>
108 </widget>108 <spacer name="horizontalSpacer_2">
109 </item>109 <property name="orientation">
110 <item>110 <enum>Qt::Horizontal</enum>
111 <spacer name="horizontalSpacer_2">111 </property>
112 <property name="orientation">112 <property name="sizeHint" stdset="0">
113 <enum>Qt::Horizontal</enum>113 <size>
114 </property>114 <width>40</width>
115 <property name="sizeHint" stdset="0">115 <height>20</height>
116 <size>116 </size>
117 <width>40</width>117 </property>
118 <height>20</height>118 </spacer>
119 </size>119 </item>
120 </property>120 </layout>
121 </spacer>121 </item>
122 </item>122 <item>
123 </layout>123 <spacer name="verticalSpacer">
124 </item>124 <property name="orientation">
125 <item>125 <enum>Qt::Vertical</enum>
126 <spacer name="verticalSpacer">126 </property>
127 <property name="orientation">127 <property name="sizeHint" stdset="0">
128 <enum>Qt::Vertical</enum>128 <size>
129 </property>129 <width>20</width>
130 <property name="sizeHint" stdset="0">130 <height>76</height>
131 <size>131 </size>
132 <width>20</width>132 </property>
133 <height>76</height>133 </spacer>
134 </size>134 </item>
135 </property>135 </layout>
136 </spacer>136 </widget>
137 </item>137 <resources/>
138 </layout>138 <connections/>
139 </widget>139</ui>
140 <resources/>
141 <connections/>
142</ui>
143140
=== modified file 'data/qt/proxy_credentials_dialog.ui'
--- data/qt/proxy_credentials_dialog.ui 2012-02-08 20:28:04 +0000
+++ data/qt/proxy_credentials_dialog.ui 2012-03-06 15:41:36 +0000
@@ -10,7 +10,7 @@
10 <x>0</x>10 <x>0</x>
11 <y>0</y>11 <y>0</y>
12 <width>550</width>12 <width>550</width>
13 <height>364</height>13 <height>373</height>
14 </rect>14 </rect>
15 </property>15 </property>
16 <property name="sizePolicy">16 <property name="sizePolicy">
@@ -21,13 +21,10 @@
21 </property>21 </property>
22 <property name="minimumSize">22 <property name="minimumSize">
23 <size>23 <size>
24 <width>502</width>24 <width>550</width>
25 <height>0</height>25 <height>0</height>
26 </size>26 </size>
27 </property>27 </property>
28 <property name="windowTitle">
29 <string>Add proxy settings</string>
30 </property>
31 <property name="sizeGripEnabled">28 <property name="sizeGripEnabled">
32 <bool>false</bool>29 <bool>false</bool>
33 </property>30 </property>
@@ -74,7 +71,7 @@
74 </size>71 </size>
75 </property>72 </property>
76 <property name="text">73 <property name="text">
77 <string>TextLabel</string>74 <string notr="true">TextLabel</string>
78 </property>75 </property>
79 </widget>76 </widget>
80 </item>77 </item>
@@ -122,7 +119,7 @@
122 </font>119 </font>
123 </property>120 </property>
124 <property name="text">121 <property name="text">
125 <string>You are connection through a proxy.</string>122 <string notr="true">You are connection through a proxy.</string>
126 </property>123 </property>
127 <property name="wordWrap">124 <property name="wordWrap">
128 <bool>true</bool>125 <bool>true</bool>
@@ -132,7 +129,7 @@
132 <item>129 <item>
133 <widget class="QLabel" name="explanation_label">130 <widget class="QLabel" name="explanation_label">
134 <property name="text">131 <property name="text">
135 <string>Please provide the login details below, or check your system settings</string>132 <string notr="true">Please provide the login details below, or check your system settings</string>
136 </property>133 </property>
137 <property name="wordWrap">134 <property name="wordWrap">
138 <bool>true</bool>135 <bool>true</bool>
@@ -162,7 +159,7 @@
162 </sizepolicy>159 </sizepolicy>
163 </property>160 </property>
164 <property name="text">161 <property name="text">
165 <string>Connecting to:</string>162 <string notr="true">Connecting to:</string>
166 </property>163 </property>
167 <property name="alignment">164 <property name="alignment">
168 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>165 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -179,7 +176,7 @@
179 <item row="4" column="0">176 <item row="4" column="0">
180 <widget class="QLabel" name="username_label">177 <widget class="QLabel" name="username_label">
181 <property name="text">178 <property name="text">
182 <string>Proxy username:</string>179 <string notr="true">Proxy username:</string>
183 </property>180 </property>
184 <property name="alignment">181 <property name="alignment">
185 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>182 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -196,7 +193,7 @@
196 <item row="5" column="0">193 <item row="5" column="0">
197 <widget class="QLabel" name="password_label">194 <widget class="QLabel" name="password_label">
198 <property name="text">195 <property name="text">
199 <string>Proxy password:</string>196 <string notr="true">Proxy password:</string>
200 </property>197 </property>
201 <property name="alignment">198 <property name="alignment">
202 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>199 <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -229,7 +226,7 @@
229 <item row="2" column="0" colspan="2">226 <item row="2" column="0" colspan="2">
230 <widget class="QLabel" name="error_label">227 <widget class="QLabel" name="error_label">
231 <property name="text">228 <property name="text">
232 <string>TextLabel</string>229 <string notr="true">TextLabel</string>
233 </property>230 </property>
234 <property name="wordWrap">231 <property name="wordWrap">
235 <bool>false</bool>232 <bool>false</bool>
@@ -264,7 +261,7 @@
264 <item>261 <item>
265 <widget class="QPushButton" name="help_button">262 <widget class="QPushButton" name="help_button">
266 <property name="text">263 <property name="text">
267 <string>Get Help With Proxies</string>264 <string notr="true">Get Help With Proxies</string>
268 </property>265 </property>
269 </widget>266 </widget>
270 </item>267 </item>
@@ -284,14 +281,14 @@
284 <item>281 <item>
285 <widget class="QPushButton" name="cancel_button">282 <widget class="QPushButton" name="cancel_button">
286 <property name="text">283 <property name="text">
287 <string>Cancel and Close</string>284 <string notr="true">Cancel and Close</string>
288 </property>285 </property>
289 </widget>286 </widget>
290 </item>287 </item>
291 <item>288 <item>
292 <widget class="QPushButton" name="save_button">289 <widget class="QPushButton" name="save_button">
293 <property name="text">290 <property name="text">
294 <string>Save</string>291 <string notr="true">Save</string>
295 </property>292 </property>
296 <property name="default">293 <property name="default">
297 <bool>true</bool>294 <bool>true</bool>
298295
=== modified file 'data/qt/reset_password.ui'
--- data/qt/reset_password.ui 2011-09-08 20:30:39 +0000
+++ data/qt/reset_password.ui 2012-03-06 15:41:36 +0000
@@ -1,357 +1,348 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>ResetPasswordPage</class>3 <class>ResetPasswordPage</class>
4 <widget class="QWizardPage" name="ResetPasswordPage">4 <widget class="QWizardPage" name="ResetPasswordPage">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>543</width>9 <width>544</width>
10 <height>262</height>10 <height>280</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <property name="layoutDirection">
14 <string>WizardPage</string>14 <enum>Qt::LeftToRight</enum>
15 </property>15 </property>
16 <property name="layoutDirection">16 <layout class="QVBoxLayout" name="verticalLayout_6">
17 <enum>Qt::LeftToRight</enum>17 <property name="spacing">
18 </property>18 <number>15</number>
19 <layout class="QVBoxLayout" name="verticalLayout">19 </property>
20 <property name="spacing">20 <property name="margin">
21 <number>6</number>21 <number>0</number>
22 </property>22 </property>
23 <property name="margin">23 <item>
24 <number>0</number>24 <layout class="QHBoxLayout" name="horizontalLayout">
25 </property>25 <property name="spacing">
26 <item>26 <number>0</number>
27 <layout class="QHBoxLayout" name="horizontalLayout">27 </property>
28 <item>28 <item>
29 <layout class="QVBoxLayout" name="verticalLayout_2">29 <layout class="QVBoxLayout" name="verticalLayout_5">
30 <item>30 <property name="spacing">
31 <widget class="QLabel" name="reset_code">31 <number>15</number>
32 <property name="sizePolicy">32 </property>
33 <sizepolicy hsizetype="Minimum" vsizetype="Preferred">33 <item>
34 <horstretch>0</horstretch>34 <layout class="QVBoxLayout" name="verticalLayout_4">
35 <verstretch>0</verstretch>35 <property name="spacing">
36 </sizepolicy>36 <number>3</number>
37 </property>37 </property>
38 <property name="minimumSize">38 <item>
39 <size>39 <widget class="QLabel" name="reset_code">
40 <width>310</width>40 <property name="sizePolicy">
41 <height>0</height>41 <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
42 </size>42 <horstretch>0</horstretch>
43 </property>43 <verstretch>0</verstretch>
44 <property name="maximumSize">44 </sizepolicy>
45 <size>45 </property>
46 <width>16777215</width>46 <property name="minimumSize">
47 <height>16777215</height>47 <size>
48 </size>48 <width>310</width>
49 </property>49 <height>0</height>
50 <property name="font">50 </size>
51 <font>51 </property>
52 <weight>75</weight>52 <property name="maximumSize">
53 <bold>true</bold>53 <size>
54 </font>54 <width>16777215</width>
55 </property>55 <height>16777215</height>
56 <property name="text">56 </size>
57 <string>reset_code</string>57 </property>
58 </property>58 <property name="font">
59 </widget>59 <font>
60 </item>60 <weight>75</weight>
61 <item>61 <bold>true</bold>
62 <widget class="QLineEdit" name="reset_code_line_edit">62 </font>
63 <property name="sizePolicy">63 </property>
64 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">64 <property name="text">
65 <horstretch>0</horstretch>65 <string notr="true">reset_code</string>
66 <verstretch>0</verstretch>66 </property>
67 </sizepolicy>67 </widget>
68 </property>68 </item>
69 <property name="minimumSize">69 <item>
70 <size>70 <widget class="QLineEdit" name="reset_code_line_edit">
71 <width>300</width>71 <property name="sizePolicy">
72 <height>0</height>72 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
73 </size>73 <horstretch>0</horstretch>
74 </property>74 <verstretch>0</verstretch>
75 <property name="maximumSize">75 </sizepolicy>
76 <size>76 </property>
77 <width>300</width>77 <property name="minimumSize">
78 <height>16777215</height>78 <size>
79 </size>79 <width>300</width>
80 </property>80 <height>0</height>
81 </widget>81 </size>
82 </item>82 </property>
83 <item>83 <property name="maximumSize">
84 <widget class="QLabel" name="password_label">84 <size>
85 <property name="sizePolicy">85 <width>300</width>
86 <sizepolicy hsizetype="Minimum" vsizetype="Preferred">86 <height>16777215</height>
87 <horstretch>0</horstretch>87 </size>
88 <verstretch>0</verstretch>88 </property>
89 </sizepolicy>89 </widget>
90 </property>90 </item>
91 <property name="minimumSize">91 </layout>
92 <size>92 </item>
93 <width>310</width>93 <item>
94 <height>0</height>94 <layout class="QVBoxLayout" name="verticalLayout">
95 </size>95 <property name="spacing">
96 </property>96 <number>3</number>
97 <property name="maximumSize">97 </property>
98 <size>98 <item>
99 <width>16777215</width>99 <widget class="QLabel" name="password_label">
100 <height>16777215</height>100 <property name="sizePolicy">
101 </size>101 <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
102 </property>102 <horstretch>0</horstretch>
103 <property name="font">103 <verstretch>0</verstretch>
104 <font>104 </sizepolicy>
105 <weight>75</weight>105 </property>
106 <bold>true</bold>106 <property name="minimumSize">
107 </font>107 <size>
108 </property>108 <width>310</width>
109 <property name="text">109 <height>0</height>
110 <string>password_label</string>110 </size>
111 </property>111 </property>
112 </widget>112 <property name="maximumSize">
113 </item>113 <size>
114 <item>114 <width>16777215</width>
115 <widget class="QLineEdit" name="password_line_edit">115 <height>16777215</height>
116 <property name="sizePolicy">116 </size>
117 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">117 </property>
118 <horstretch>0</horstretch>118 <property name="font">
119 <verstretch>0</verstretch>119 <font>
120 </sizepolicy>120 <weight>75</weight>
121 </property>121 <bold>true</bold>
122 <property name="minimumSize">122 </font>
123 <size>123 </property>
124 <width>300</width>124 <property name="text">
125 <height>0</height>125 <string notr="true">password_label</string>
126 </size>126 </property>
127 </property>127 </widget>
128 <property name="maximumSize">128 </item>
129 <size>129 <item>
130 <width>300</width>130 <widget class="QLineEdit" name="password_line_edit">
131 <height>16777215</height>131 <property name="sizePolicy">
132 </size>132 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
133 </property>133 <horstretch>0</horstretch>
134 <property name="echoMode">134 <verstretch>0</verstretch>
135 <enum>QLineEdit::Password</enum>135 </sizepolicy>
136 </property>136 </property>
137 </widget>137 <property name="minimumSize">
138 </item>138 <size>
139 <item>139 <width>300</width>
140 <widget class="QLabel" name="confirm_password_label">140 <height>0</height>
141 <property name="sizePolicy">141 </size>
142 <sizepolicy hsizetype="Minimum" vsizetype="Preferred">142 </property>
143 <horstretch>0</horstretch>143 <property name="maximumSize">
144 <verstretch>0</verstretch>144 <size>
145 </sizepolicy>145 <width>300</width>
146 </property>146 <height>16777215</height>
147 <property name="minimumSize">147 </size>
148 <size>148 </property>
149 <width>310</width>149 <property name="echoMode">
150 <height>0</height>150 <enum>QLineEdit::Password</enum>
151 </size>151 </property>
152 </property>152 </widget>
153 <property name="font">153 </item>
154 <font>154 </layout>
155 <weight>75</weight>155 </item>
156 <bold>true</bold>156 <item>
157 </font>157 <layout class="QVBoxLayout" name="verticalLayout_2">
158 </property>158 <property name="spacing">
159 <property name="text">159 <number>3</number>
160 <string>confirm_password_label</string>160 </property>
161 </property>161 <item>
162 </widget>162 <widget class="QLabel" name="confirm_password_label">
163 </item>163 <property name="sizePolicy">
164 <item>164 <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
165 <widget class="QLineEdit" name="confirm_password_line_edit">165 <horstretch>0</horstretch>
166 <property name="sizePolicy">166 <verstretch>0</verstretch>
167 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">167 </sizepolicy>
168 <horstretch>0</horstretch>168 </property>
169 <verstretch>0</verstretch>169 <property name="minimumSize">
170 </sizepolicy>170 <size>
171 </property>171 <width>310</width>
172 <property name="minimumSize">172 <height>0</height>
173 <size>173 </size>
174 <width>300</width>174 </property>
175 <height>0</height>175 <property name="font">
176 </size>176 <font>
177 </property>177 <weight>75</weight>
178 <property name="maximumSize">178 <bold>true</bold>
179 <size>179 </font>
180 <width>300</width>180 </property>
181 <height>16777215</height>181 <property name="text">
182 </size>182 <string notr="true">confirm_password_label</string>
183 </property>183 </property>
184 <property name="echoMode">184 </widget>
185 <enum>QLineEdit::Password</enum>185 </item>
186 </property>186 <item>
187 </widget>187 <widget class="QLineEdit" name="confirm_password_line_edit">
188 </item>188 <property name="sizePolicy">
189 <item>189 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
190 <spacer name="verticalSpacer">190 <horstretch>0</horstretch>
191 <property name="orientation">191 <verstretch>0</verstretch>
192 <enum>Qt::Vertical</enum>192 </sizepolicy>
193 </property>193 </property>
194 <property name="sizeHint" stdset="0">194 <property name="minimumSize">
195 <size>195 <size>
196 <width>300</width>196 <width>300</width>
197 <height>222</height>197 <height>0</height>
198 </size>198 </size>
199 </property>199 </property>
200 </spacer>200 <property name="maximumSize">
201 </item>201 <size>
202 <item>202 <width>300</width>
203 <spacer name="horizontalSpacer_2">203 <height>16777215</height>
204 <property name="orientation">204 </size>
205 <enum>Qt::Horizontal</enum>205 </property>
206 </property>206 <property name="echoMode">
207 <property name="sizeType">207 <enum>QLineEdit::Password</enum>
208 <enum>QSizePolicy::Fixed</enum>208 </property>
209 </property>209 </widget>
210 <property name="sizeHint" stdset="0">210 </item>
211 <size>211 </layout>
212 <width>300</width>212 </item>
213 <height>0</height>213 </layout>
214 </size>214 </item>
215 </property>215 <item>
216 </spacer>216 <layout class="QVBoxLayout" name="verticalLayout_3">
217 </item>217 <property name="spacing">
218 </layout>218 <number>0</number>
219 </item>219 </property>
220 <item>220 <item>
221 <layout class="QVBoxLayout" name="verticalLayout_3">221 <widget class="QLabel" name="password_assistance">
222 <item>222 <property name="sizePolicy">
223 <spacer name="verticalSpacer_3">223 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
224 <property name="orientation">224 <horstretch>0</horstretch>
225 <enum>Qt::Vertical</enum>225 <verstretch>0</verstretch>
226 </property>226 </sizepolicy>
227 <property name="sizeType">227 </property>
228 <enum>QSizePolicy::Fixed</enum>228 <property name="minimumSize">
229 </property>229 <size>
230 <property name="sizeHint" stdset="0">230 <width>220</width>
231 <size>231 <height>100</height>
232 <width>20</width>232 </size>
233 <height>55</height>233 </property>
234 </size>234 <property name="maximumSize">
235 </property>235 <size>
236 </spacer>236 <width>220</width>
237 </item>237 <height>16777215</height>
238 <item>238 </size>
239 <widget class="QLabel" name="password_assistance">239 </property>
240 <property name="sizePolicy">240 <property name="text">
241 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">241 <string notr="true">password_assistance</string>
242 <horstretch>0</horstretch>242 </property>
243 <verstretch>0</verstretch>243 <property name="indent">
244 </sizepolicy>244 <number>20</number>
245 </property>245 </property>
246 <property name="minimumSize">246 </widget>
247 <size>247 </item>
248 <width>220</width>248 <item>
249 <height>100</height>249 <spacer name="verticalSpacer_2">
250 </size>250 <property name="orientation">
251 </property>251 <enum>Qt::Vertical</enum>
252 <property name="maximumSize">252 </property>
253 <size>253 <property name="sizeHint" stdset="0">
254 <width>220</width>254 <size>
255 <height>16777215</height>255 <width>20</width>
256 </size>256 <height>40</height>
257 </property>257 </size>
258 <property name="text">258 </property>
259 <string>password_assistance</string>259 </spacer>
260 </property>260 </item>
261 <property name="indent">261 <item>
262 <number>20</number>262 <spacer name="horizontalSpacer">
263 </property>263 <property name="orientation">
264 </widget>264 <enum>Qt::Horizontal</enum>
265 </item>265 </property>
266 <item>266 <property name="sizeType">
267 <spacer name="verticalSpacer_2">267 <enum>QSizePolicy::Ignored</enum>
268 <property name="orientation">268 </property>
269 <enum>Qt::Vertical</enum>269 <property name="sizeHint" stdset="0">
270 </property>270 <size>
271 <property name="sizeHint" stdset="0">271 <width>220</width>
272 <size>272 <height>0</height>
273 <width>20</width>273 </size>
274 <height>40</height>274 </property>
275 </size>275 </spacer>
276 </property>276 </item>
277 </spacer>277 </layout>
278 </item>278 </item>
279 <item>279 </layout>
280 <spacer name="horizontalSpacer">280 </item>
281 <property name="orientation">281 <item>
282 <enum>Qt::Horizontal</enum>282 <layout class="QHBoxLayout" name="horizontalLayout_3">
283 </property>283 <property name="rightMargin">
284 <property name="sizeType">284 <number>0</number>
285 <enum>QSizePolicy::Ignored</enum>285 </property>
286 </property>286 <item>
287 <property name="sizeHint" stdset="0">287 <spacer name="horizontalSpacer_4">
288 <size>288 <property name="orientation">
289 <width>220</width>289 <enum>Qt::Horizontal</enum>
290 <height>0</height>290 </property>
291 </size>291 <property name="sizeType">
292 </property>292 <enum>QSizePolicy::Expanding</enum>
293 </spacer>293 </property>
294 </item>294 <property name="sizeHint" stdset="0">
295 </layout>295 <size>
296 </item>296 <width>40</width>
297 </layout>297 <height>20</height>
298 </item>298 </size>
299 <item>299 </property>
300 <layout class="QHBoxLayout" name="horizontalLayout_2">300 </spacer>
301 <item>301 </item>
302 <layout class="QHBoxLayout" name="horizontalLayout_3">302 <item>
303 <property name="rightMargin">303 <widget class="QPushButton" name="reset_password_button">
304 <number>0</number>304 <property name="enabled">
305 </property>305 <bool>false</bool>
306 <item>306 </property>
307 <spacer name="horizontalSpacer_4">307 <property name="text">
308 <property name="orientation">308 <string notr="true"/>
309 <enum>Qt::Horizontal</enum>309 </property>
310 </property>310 </widget>
311 <property name="sizeType">311 </item>
312 <enum>QSizePolicy::Expanding</enum>312 </layout>
313 </property>313 </item>
314 <property name="sizeHint" stdset="0">314 <item>
315 <size>315 <spacer name="verticalSpacer">
316 <width>40</width>316 <property name="orientation">
317 <height>20</height>317 <enum>Qt::Vertical</enum>
318 </size>318 </property>
319 </property>319 <property name="sizeHint" stdset="0">
320 </spacer>320 <size>
321 </item>321 <width>20</width>
322 <item>322 <height>40</height>
323 <widget class="QPushButton" name="reset_password_button">323 </size>
324 <property name="enabled">324 </property>
325 <bool>false</bool>325 </spacer>
326 </property>326 </item>
327 <property name="text">327 </layout>
328 <string/>328 </widget>
329 </property>329 <resources/>
330 </widget>330 <connections>
331 </item>331 <connection>
332 </layout>332 <sender>confirm_password_line_edit</sender>
333 </item>333 <signal>returnPressed()</signal>
334 </layout>334 <receiver>reset_password_button</receiver>
335 </item>335 <slot>click()</slot>
336 </layout>336 <hints>
337 </widget>337 <hint type="sourcelabel">
338 <resources/>338 <x>160</x>
339 <connections>339 <y>81</y>
340 <connection>340 </hint>
341 <sender>confirm_password_line_edit</sender>341 <hint type="destinationlabel">
342 <signal>returnPressed()</signal>342 <x>541</x>
343 <receiver>reset_password_button</receiver>343 <y>237</y>
344 <slot>click()</slot>344 </hint>
345 <hints>345 </hints>
346 <hint type="sourcelabel">346 </connection>
347 <x>160</x>347 </connections>
348 <y>81</y>348</ui>
349 </hint>
350 <hint type="destinationlabel">
351 <x>541</x>
352 <y>237</y>
353 </hint>
354 </hints>
355 </connection>
356 </connections>
357</ui>
358349
=== modified file 'data/qt/setup_account.ui'
--- data/qt/setup_account.ui 2012-02-17 21:16:38 +0000
+++ data/qt/setup_account.ui 2012-03-06 15:41:36 +0000
@@ -1,700 +1,661 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>SetUpAccountPage</class>3 <class>SetUpAccountPage</class>
4 <widget class="QWizardPage" name="SetUpAccountPage">4 <widget class="QWizardPage" name="SetUpAccountPage">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>543</width>9 <width>532</width>
10 <height>523</height>10 <height>438</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="sizePolicy">13 <property name="sizePolicy">
14 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">14 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
15 <horstretch>0</horstretch>15 <horstretch>0</horstretch>
16 <verstretch>0</verstretch>16 <verstretch>0</verstretch>
17 </sizepolicy>17 </sizepolicy>
18 </property>18 </property>
19 <property name="maximumSize">19 <property name="maximumSize">
20 <size>20 <size>
21 <width>16777215</width>21 <width>16777215</width>
22 <height>16777215</height>22 <height>16777215</height>
23 </size>23 </size>
24 </property>24 </property>
25 <property name="windowTitle">25 <layout class="QVBoxLayout" name="verticalLayout">
26 <string>WizardPage</string>26 <property name="spacing">
27 </property>27 <number>0</number>
28 <layout class="QVBoxLayout" name="verticalLayout">28 </property>
29 <property name="spacing">29 <property name="margin">
30 <number>0</number>30 <number>0</number>
31 </property>31 </property>
32 <property name="leftMargin">32 <item>
33 <number>0</number>33 <layout class="QGridLayout" name="gridLayout" columnminimumwidth="310,0">
34 </property>34 <property name="sizeConstraint">
35 <property name="topMargin">35 <enum>QLayout::SetDefaultConstraint</enum>
36 <number>0</number>36 </property>
37 </property>37 <property name="verticalSpacing">
38 <property name="rightMargin">38 <number>6</number>
39 <number>3</number>39 </property>
40 </property>40 <item row="4" column="0" colspan="2">
41 <property name="bottomMargin">41 <spacer name="verticalSpacer_2">
42 <number>0</number>42 <property name="orientation">
43 </property>43 <enum>Qt::Vertical</enum>
44 <item>44 </property>
45 <layout class="QGridLayout" name="gridLayout" columnminimumwidth="310,220">45 <property name="sizeHint" stdset="0">
46 <item row="0" column="0">46 <size>
47 <widget class="QLabel" name="password_info_label">47 <width>20</width>
48 <property name="sizePolicy">48 <height>10</height>
49 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">49 </size>
50 <horstretch>0</horstretch>50 </property>
51 <verstretch>0</verstretch>51 </spacer>
52 </sizepolicy>52 </item>
53 </property>53 <item row="10" column="0" colspan="2">
54 <property name="text">54 <spacer name="verticalSpacer_3">
55 <string>If you can't read this then &lt;a href=&quot;example.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#dd4814;&quot;&gt;refresh&lt;/span&gt;&lt;/a&gt; this page&lt;/span&gt;</string>55 <property name="orientation">
56 </property>56 <enum>Qt::Vertical</enum>
57 <property name="wordWrap">57 </property>
58 <bool>true</bool>58 <property name="sizeHint" stdset="0">
59 </property>59 <size>
60 </widget>60 <width>20</width>
61 </item>61 <height>10</height>
62 <item row="1" column="0">62 </size>
63 <layout class="QVBoxLayout" name="verticalLayout">63 </property>
64 <property name="spacing">64 </spacer>
65 <number>3</number>65 </item>
66 </property>66 <item row="7" column="0" colspan="2">
67 <item>67 <spacer name="verticalSpacer_4">
68 <widget class="QLabel" name="name_label">68 <property name="orientation">
69 <property name="font">69 <enum>Qt::Vertical</enum>
70 <font>70 </property>
71 <weight>75</weight>71 <property name="sizeHint" stdset="0">
72 <bold>true</bold>72 <size>
73 </font>73 <width>20</width>
74 </property>74 <height>10</height>
75 <property name="text">75 </size>
76 <string>name_label</string>76 </property>
77 </property>77 </spacer>
78 </widget>78 </item>
79 </item>79 <item row="0" column="0">
80 <item>80 <layout class="QVBoxLayout" name="verticalLayout_5">
81 <widget class="QLineEdit" name="name_edit">81 <property name="spacing">
82 <property name="sizePolicy">82 <number>3</number>
83 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">83 </property>
84 <horstretch>0</horstretch>84 <item>
85 <verstretch>0</verstretch>85 <widget class="QLabel" name="name_label">
86 </sizepolicy>86 <property name="font">
87 </property>87 <font>
88 <property name="minimumSize">88 <weight>75</weight>
89 <size>89 <bold>true</bold>
90 <width>300</width>90 </font>
91 <height>0</height>91 </property>
92 </size>92 <property name="text">
93 </property>93 <string notr="true">name_label</string>
94 <property name="maximumSize">94 </property>
95 <size>95 </widget>
96 <width>300</width>96 </item>
97 <height>16777215</height>97 <item>
98 </size>98 <widget class="QLineEdit" name="name_edit">
99 </property>99 <property name="sizePolicy">
100 <property name="font">100 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
101 <font>101 <horstretch>0</horstretch>
102 <pointsize>11</pointsize>102 <verstretch>0</verstretch>
103 </font>103 </sizepolicy>
104 </property>104 </property>
105 <property name="formError" stdset="0">105 <property name="minimumSize">
106 <bool>false</bool>106 <size>
107 </property>107 <width>300</width>
108 </widget>108 <height>0</height>
109 </item>109 </size>
110 </layout>110 </property>
111 </item>111 <property name="maximumSize">
112 <item row="3" column="0">112 <size>
113 <layout class="QVBoxLayout" name="verticalLayout">113 <width>300</width>
114 <property name="spacing">114 <height>16777215</height>
115 <number>3</number>115 </size>
116 </property>116 </property>
117 <item>117 <property name="font">
118 <widget class="QLabel" name="email_label">118 <font>
119 <property name="font">119 <pointsize>11</pointsize>
120 <font>120 </font>
121 <weight>75</weight>121 </property>
122 <bold>true</bold>122 <property name="formError" stdset="0">
123 </font>123 <bool>false</bool>
124 </property>124 </property>
125 <property name="text">125 </widget>
126 <string>email_label</string>126 </item>
127 </property>127 </layout>
128 </widget>128 </item>
129 </item>129 <item row="2" column="0">
130 <item>130 <layout class="QVBoxLayout" name="verticalLayout_6">
131 <widget class="QLineEdit" name="email_edit">131 <property name="spacing">
132 <property name="sizePolicy">132 <number>3</number>
133 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">133 </property>
134 <horstretch>0</horstretch>134 <item>
135 <verstretch>0</verstretch>135 <widget class="QLabel" name="email_label">
136 </sizepolicy>136 <property name="font">
137 </property>137 <font>
138 <property name="minimumSize">138 <weight>75</weight>
139 <size>139 <bold>true</bold>
140 <width>300</width>140 </font>
141 <height>0</height>141 </property>
142 </size>142 <property name="text">
143 </property>143 <string notr="true">email_label</string>
144 <property name="maximumSize">144 </property>
145 <size>145 </widget>
146 <width>300</width>146 </item>
147 <height>16777215</height>147 <item>
148 </size>148 <widget class="QLineEdit" name="email_edit">
149 </property>149 <property name="sizePolicy">
150 <property name="font">150 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
151 <font>151 <horstretch>0</horstretch>
152 <pointsize>11</pointsize>152 <verstretch>0</verstretch>
153 </font>153 </sizepolicy>
154 </property>154 </property>
155 <property name="placeholderText">155 <property name="minimumSize">
156 <string/>156 <size>
157 </property>157 <width>300</width>
158 <property name="formError" stdset="0">158 <height>0</height>
159 <bool>false</bool>159 </size>
160 </property>160 </property>
161 </widget>161 <property name="maximumSize">
162 </item>162 <size>
163 </layout>163 <width>300</width>
164 </item>164 <height>16777215</height>
165 <item row="4" column="0">165 </size>
166 <layout class="QVBoxLayout" name="verticalLayout">166 </property>
167 <property name="spacing">167 <property name="font">
168 <number>3</number>168 <font>
169 </property>169 <pointsize>11</pointsize>
170 <item>170 </font>
171 <widget class="QLabel" name="confirm_email_label">171 </property>
172 <property name="font">172 <property name="placeholderText">
173 <font>173 <string/>
174 <weight>75</weight>174 </property>
175 <bold>true</bold>175 <property name="formError" stdset="0">
176 </font>176 <bool>false</bool>
177 </property>177 </property>
178 <property name="text">178 </widget>
179 <string>confirm_email_label</string>179 </item>
180 </property>180 </layout>
181 </widget>181 </item>
182 </item>182 <item row="2" column="1">
183 <item>183 <layout class="QVBoxLayout" name="verticalLayout_8">
184 <widget class="QLineEdit" name="confirm_email_edit">184 <property name="spacing">
185 <property name="sizePolicy">185 <number>0</number>
186 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">186 </property>
187 <horstretch>0</horstretch>187 <property name="leftMargin">
188 <verstretch>0</verstretch>188 <number>0</number>
189 </sizepolicy>189 </property>
190 </property>190 <item>
191 <property name="minimumSize">191 <widget class="QLabel" name="email_assistance">
192 <size>192 <property name="sizePolicy">
193 <width>300</width>193 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
194 <height>0</height>194 <horstretch>0</horstretch>
195 </size>195 <verstretch>0</verstretch>
196 </property>196 </sizepolicy>
197 <property name="maximumSize">197 </property>
198 <size>198 <property name="minimumSize">
199 <width>300</width>199 <size>
200 <height>16777215</height>200 <width>220</width>
201 </size>201 <height>0</height>
202 </property>202 </size>
203 <property name="font">203 </property>
204 <font>204 <property name="maximumSize">
205 <pointsize>11</pointsize>205 <size>
206 </font>206 <width>220</width>
207 </property>207 <height>16777215</height>
208 <property name="placeholderText">208 </size>
209 <string/>209 </property>
210 </property>210 <property name="text">
211 <property name="formError" stdset="0">211 <string notr="true">email_assistance</string>
212 <bool>false</bool>212 </property>
213 </property>213 <property name="alignment">
214 </widget>214 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
215 </item>215 </property>
216 </layout>216 <property name="wordWrap">
217 </item>217 <bool>true</bool>
218 <item row="6" column="0">218 </property>
219 <layout class="QVBoxLayout" name="verticalLayout">219 </widget>
220 <property name="spacing">220 </item>
221 <number>3</number>221 </layout>
222 </property>222 </item>
223 <item>223 <item row="3" column="0">
224 <spacer name="verticalSpacer_4">224 <layout class="QVBoxLayout" name="verticalLayout_10">
225 <property name="orientation">225 <property name="spacing">
226 <enum>Qt::Vertical</enum>226 <number>3</number>
227 </property>227 </property>
228 <property name="sizeType">228 <item>
229 <enum>QSizePolicy::Fixed</enum>229 <widget class="QLabel" name="confirm_email_label">
230 </property>230 <property name="font">
231 <property name="sizeHint" stdset="0">231 <font>
232 <size>232 <weight>75</weight>
233 <width>20</width>233 <bold>true</bold>
234 <height>10</height>234 </font>
235 </size>235 </property>
236 </property>236 <property name="text">
237 </spacer>237 <string notr="true">confirm_email_label</string>
238 </item>238 </property>
239 <item>239 </widget>
240 <widget class="QLabel" name="password_label">240 </item>
241 <property name="font">241 <item>
242 <font>242 <widget class="QLineEdit" name="confirm_email_edit">
243 <weight>75</weight>243 <property name="sizePolicy">
244 <bold>true</bold>244 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
245 </font>245 <horstretch>0</horstretch>
246 </property>246 <verstretch>0</verstretch>
247 <property name="text">247 </sizepolicy>
248 <string>password_label</string>248 </property>
249 </property>249 <property name="minimumSize">
250 </widget>250 <size>
251 </item>251 <width>300</width>
252 <item>252 <height>0</height>
253 <widget class="QLineEdit" name="password_edit">253 </size>
254 <property name="sizePolicy">254 </property>
255 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">255 <property name="maximumSize">
256 <horstretch>0</horstretch>256 <size>
257 <verstretch>0</verstretch>257 <width>300</width>
258 </sizepolicy>258 <height>16777215</height>
259 </property>259 </size>
260 <property name="minimumSize">260 </property>
261 <size>261 <property name="font">
262 <width>300</width>262 <font>
263 <height>0</height>263 <pointsize>11</pointsize>
264 </size>264 </font>
265 </property>265 </property>
266 <property name="maximumSize">266 <property name="placeholderText">
267 <size>267 <string/>
268 <width>300</width>268 </property>
269 <height>16777215</height>269 <property name="formError" stdset="0">
270 </size>270 <bool>false</bool>
271 </property>271 </property>
272 <property name="font">272 </widget>
273 <font>273 </item>
274 <pointsize>11</pointsize>274 </layout>
275 </font>275 </item>
276 </property>276 <item row="3" column="1">
277 <property name="toolTip">277 <layout class="QVBoxLayout" name="verticalLayout_9">
278 <string>Your password must be at least 8 characters long and at least contain one number and one upper later.</string>278 <property name="spacing">
279 </property>279 <number>0</number>
280 <property name="statusTip">280 </property>
281 <string/>281 <property name="leftMargin">
282 </property>282 <number>0</number>
283 <property name="echoMode">283 </property>
284 <enum>QLineEdit::Password</enum>284 <item>
285 </property>285 <widget class="QLabel" name="confirm_email_assistance">
286 <property name="placeholderText">286 <property name="sizePolicy">
287 <string/>287 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
288 </property>288 <horstretch>0</horstretch>
289 <property name="formError" stdset="0">289 <verstretch>0</verstretch>
290 <bool>false</bool>290 </sizepolicy>
291 </property>291 </property>
292 </widget>292 <property name="minimumSize">
293 </item>293 <size>
294 </layout>294 <width>220</width>
295 </item>295 <height>0</height>
296 <item row="7" column="0">296 </size>
297 <layout class="QVBoxLayout" name="verticalLayout">297 </property>
298 <property name="spacing">298 <property name="maximumSize">
299 <number>3</number>299 <size>
300 </property>300 <width>220</width>
301 <item>301 <height>16777215</height>
302 <spacer name="verticalSpacer_5">302 </size>
303 <property name="orientation">303 </property>
304 <enum>Qt::Vertical</enum>304 <property name="text">
305 </property>305 <string notr="true">confirm_email_assistance</string>
306 <property name="sizeType">306 </property>
307 <enum>QSizePolicy::Fixed</enum>307 <property name="alignment">
308 </property>308 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
309 <property name="sizeHint" stdset="0">309 </property>
310 <size>310 <property name="wordWrap">
311 <width>20</width>311 <bool>true</bool>
312 <height>10</height>312 </property>
313 </size>313 <property name="indent">
314 </property>314 <number>0</number>
315 </spacer>315 </property>
316 </item>316 </widget>
317 <item>317 </item>
318 <widget class="QLabel" name="confirm_password_label">318 </layout>
319 <property name="font">319 </item>
320 <font>320 <item row="11" column="0" colspan="2">
321 <weight>75</weight>321 <layout class="QHBoxLayout" name="hlayout_check">
322 <bold>true</bold>322 <property name="spacing">
323 </font>323 <number>6</number>
324 </property>324 </property>
325 <property name="text">325 <property name="topMargin">
326 <string>confirm_password_label</string>326 <number>0</number>
327 </property>327 </property>
328 </widget>328 </layout>
329 </item>329 </item>
330 <item>330 <item row="0" column="1">
331 <widget class="QLineEdit" name="confirm_password_edit">331 <layout class="QVBoxLayout" name="verticalLayout_7">
332 <property name="sizePolicy">332 <property name="spacing">
333 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">333 <number>0</number>
334 <horstretch>0</horstretch>334 </property>
335 <verstretch>0</verstretch>335 <property name="leftMargin">
336 </sizepolicy>336 <number>0</number>
337 </property>337 </property>
338 <property name="minimumSize">338 <item>
339 <size>339 <widget class="QLabel" name="name_assistance">
340 <width>300</width>340 <property name="sizePolicy">
341 <height>0</height>341 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
342 </size>342 <horstretch>0</horstretch>
343 </property>343 <verstretch>0</verstretch>
344 <property name="maximumSize">344 </sizepolicy>
345 <size>345 </property>
346 <width>300</width>346 <property name="minimumSize">
347 <height>16777215</height>347 <size>
348 </size>348 <width>220</width>
349 </property>349 <height>0</height>
350 <property name="font">350 </size>
351 <font>351 </property>
352 <pointsize>11</pointsize>352 <property name="maximumSize">
353 </font>353 <size>
354 </property>354 <width>220</width>
355 <property name="echoMode">355 <height>16777215</height>
356 <enum>QLineEdit::Password</enum>356 </size>
357 </property>357 </property>
358 <property name="placeholderText">358 <property name="text">
359 <string/>359 <string notr="true">name_assistance</string>
360 </property>360 </property>
361 <property name="formError" stdset="0">361 <property name="alignment">
362 <bool>false</bool>362 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
363 </property>363 </property>
364 </widget>364 <property name="wordWrap">
365 </item>365 <bool>true</bool>
366 </layout>366 </property>
367 </item>367 </widget>
368 <item row="9" column="0">368 </item>
369 <layout class="QVBoxLayout" name="verticalLayout">369 </layout>
370 <property name="spacing">370 </item>
371 <number>3</number>371 <item row="5" column="0">
372 </property>372 <layout class="QVBoxLayout" name="verticalLayout_3">
373 <item>373 <property name="spacing">
374 <widget class="QLabel" name="captcha_view">374 <number>3</number>
375 <property name="sizePolicy">375 </property>
376 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">376 <item>
377 <horstretch>0</horstretch>377 <widget class="QLabel" name="password_label">
378 <verstretch>0</verstretch>378 <property name="font">
379 </sizepolicy>379 <font>
380 </property>380 <weight>75</weight>
381 <property name="minimumSize">381 <bold>true</bold>
382 <size>382 </font>
383 <width>300</width>383 </property>
384 <height>57</height>384 <property name="text">
385 </size>385 <string notr="true">password_label</string>
386 </property>386 </property>
387 <property name="maximumSize">387 </widget>
388 <size>388 </item>
389 <width>300</width>389 <item>
390 <height>16777215</height>390 <widget class="QLineEdit" name="password_edit">
391 </size>391 <property name="sizePolicy">
392 </property>392 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
393 <property name="styleSheet">393 <horstretch>0</horstretch>
394 <string notr="true">background-color: white</string>394 <verstretch>0</verstretch>
395 </property>395 </sizepolicy>
396 <property name="frameShape">396 </property>
397 <enum>QFrame::Box</enum>397 <property name="minimumSize">
398 </property>398 <size>
399 <property name="text">399 <width>300</width>
400 <string>If you can't read this then &lt;a href=&quot;example.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#dd4814;&quot;&gt;refresh&lt;/span&gt;&lt;/a&gt; this page&lt;/span&gt;</string>400 <height>0</height>
401 </property>401 </size>
402 </widget>402 </property>
403 </item>403 <property name="maximumSize">
404 <item>404 <size>
405 <widget class="QLineEdit" name="captcha_solution_edit">405 <width>300</width>
406 <property name="sizePolicy">406 <height>16777215</height>
407 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">407 </size>
408 <horstretch>0</horstretch>408 </property>
409 <verstretch>0</verstretch>409 <property name="font">
410 </sizepolicy>410 <font>
411 </property>411 <pointsize>11</pointsize>
412 <property name="minimumSize">412 </font>
413 <size>413 </property>
414 <width>300</width>414 <property name="toolTip">
415 <height>0</height>415 <string notr="true">Your password must be at least 8 characters long and at least contain one number and one upper later.</string>
416 </size>416 </property>
417 </property>417 <property name="statusTip">
418 <property name="maximumSize">418 <string/>
419 <size>419 </property>
420 <width>300</width>420 <property name="echoMode">
421 <height>16777215</height>421 <enum>QLineEdit::Password</enum>
422 </size>422 </property>
423 </property>423 <property name="placeholderText">
424 <property name="font">424 <string/>
425 <font>425 </property>
426 <pointsize>11</pointsize>426 <property name="formError" stdset="0">
427 </font>427 <bool>false</bool>
428 </property>428 </property>
429 <property name="locale">429 </widget>
430 <locale language="English" country="UnitedStates"/>430 </item>
431 </property>431 </layout>
432 <property name="inputMask">432 </item>
433 <string/>433 <item row="5" column="1" rowspan="2">
434 </property>434 <layout class="QHBoxLayout" name="horizontalLayout_3">
435 <property name="text">435 <property name="spacing">
436 <string/>436 <number>0</number>
437 </property>437 </property>
438 <property name="placeholderText">438 <item>
439 <string/>439 <widget class="QLabel" name="password_assistance">
440 </property>440 <property name="sizePolicy">
441 <property name="formError" stdset="0">441 <sizepolicy hsizetype="Maximum" vsizetype="Minimum">
442 <bool>false</bool>442 <horstretch>0</horstretch>
443 </property>443 <verstretch>0</verstretch>
444 </widget>444 </sizepolicy>
445 </item>445 </property>
446 </layout>446 <property name="minimumSize">
447 </item>447 <size>
448 <item row="9" column="1">448 <width>220</width>
449 <widget class="QLabel" name="refresh_label">449 <height>80</height>
450 <property name="sizePolicy">450 </size>
451 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">451 </property>
452 <horstretch>0</horstretch>452 <property name="maximumSize">
453 <verstretch>0</verstretch>453 <size>
454 </sizepolicy>454 <width>220</width>
455 </property>455 <height>16777215</height>
456 <property name="minimumSize">456 </size>
457 <size>457 </property>
458 <width>220</width>458 <property name="text">
459 <height>0</height>459 <string notr="true">password_assistance</string>
460 </size>460 </property>
461 </property>461 <property name="wordWrap">
462 <property name="maximumSize">462 <bool>true</bool>
463 <size>463 </property>
464 <width>220</width>464 <property name="indent">
465 <height>16777215</height>465 <number>17</number>
466 </size>466 </property>
467 </property>467 </widget>
468 <property name="locale">468 </item>
469 <locale language="English" country="UnitedStates"/>469 </layout>
470 </property>470 </item>
471 <property name="text">471 <item row="6" column="0">
472 <string>If you can't read this then &lt;a href=&quot;example.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#dd4814;&quot;&gt;refresh&lt;/span&gt;&lt;/a&gt; this page&lt;/span&gt;</string>472 <layout class="QVBoxLayout" name="verticalLayout_2">
473 </property>473 <property name="spacing">
474 <property name="wordWrap">474 <number>3</number>
475 <bool>true</bool>475 </property>
476 </property>476 <item>
477 <property name="indent">477 <widget class="QLabel" name="confirm_password_label">
478 <number>0</number>478 <property name="font">
479 </property>479 <font>
480 </widget>480 <weight>75</weight>
481 </item>481 <bold>true</bold>
482 <item row="1" column="1">482 </font>
483 <layout class="QVBoxLayout" name="verticalLayout_7">483 </property>
484 <property name="spacing">484 <property name="text">
485 <number>0</number>485 <string notr="true">confirm_password_label</string>
486 </property>486 </property>
487 <property name="leftMargin">487 </widget>
488 <number>0</number>488 </item>
489 </property>489 <item>
490 <item>490 <widget class="QLineEdit" name="confirm_password_edit">
491 <widget class="QLabel" name="name_assistance">491 <property name="sizePolicy">
492 <property name="sizePolicy">492 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
493 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">493 <horstretch>0</horstretch>
494 <horstretch>0</horstretch>494 <verstretch>0</verstretch>
495 <verstretch>0</verstretch>495 </sizepolicy>
496 </sizepolicy>496 </property>
497 </property>497 <property name="minimumSize">
498 <property name="minimumSize">498 <size>
499 <size>499 <width>300</width>
500 <width>220</width>500 <height>0</height>
501 <height>0</height>501 </size>
502 </size>502 </property>
503 </property>503 <property name="maximumSize">
504 <property name="maximumSize">504 <size>
505 <size>505 <width>300</width>
506 <width>220</width>506 <height>16777215</height>
507 <height>16777215</height>507 </size>
508 </size>508 </property>
509 </property>509 <property name="font">
510 <property name="text">510 <font>
511 <string>name_assistance</string>511 <pointsize>11</pointsize>
512 </property>512 </font>
513 <property name="alignment">513 </property>
514 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>514 <property name="echoMode">
515 </property>515 <enum>QLineEdit::Password</enum>
516 <property name="wordWrap">516 </property>
517 <bool>true</bool>517 <property name="placeholderText">
518 </property>518 <string/>
519 </widget>519 </property>
520 </item>520 <property name="formError" stdset="0">
521 </layout>521 <bool>false</bool>
522 </item>522 </property>
523 <item row="3" column="1">523 </widget>
524 <layout class="QVBoxLayout" name="verticalLayout_8">524 </item>
525 <property name="spacing">525 </layout>
526 <number>0</number>526 </item>
527 </property>527 <item row="8" column="0">
528 <property name="leftMargin">528 <layout class="QVBoxLayout" name="verticalLayout_4">
529 <number>0</number>529 <property name="spacing">
530 </property>530 <number>3</number>
531 <item>531 </property>
532 <widget class="QLabel" name="email_assistance">532 <item>
533 <property name="sizePolicy">533 <widget class="QLabel" name="captcha_view">
534 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">534 <property name="sizePolicy">
535 <horstretch>0</horstretch>535 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
536 <verstretch>0</verstretch>536 <horstretch>0</horstretch>
537 </sizepolicy>537 <verstretch>0</verstretch>
538 </property>538 </sizepolicy>
539 <property name="minimumSize">539 </property>
540 <size>540 <property name="minimumSize">
541 <width>220</width>541 <size>
542 <height>0</height>542 <width>300</width>
543 </size>543 <height>57</height>
544 </property>544 </size>
545 <property name="maximumSize">545 </property>
546 <size>546 <property name="maximumSize">
547 <width>220</width>547 <size>
548 <height>16777215</height>548 <width>300</width>
549 </size>549 <height>57</height>
550 </property>550 </size>
551 <property name="text">551 </property>
552 <string>email_assistance</string>552 <property name="styleSheet">
553 </property>553 <string notr="true">background-color: white</string>
554 <property name="alignment">554 </property>
555 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>555 <property name="frameShape">
556 </property>556 <enum>QFrame::Box</enum>
557 <property name="wordWrap">557 </property>
558 <bool>true</bool>558 <property name="text">
559 </property>559 <string notr="true"/>
560 </widget>560 </property>
561 </item>561 </widget>
562 </layout>562 </item>
563 </item>563 <item>
564 <item row="4" column="1">564 <widget class="QLineEdit" name="captcha_solution_edit">
565 <layout class="QVBoxLayout" name="verticalLayout_9">565 <property name="sizePolicy">
566 <property name="spacing">566 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
567 <number>0</number>567 <horstretch>0</horstretch>
568 </property>568 <verstretch>0</verstretch>
569 <property name="leftMargin">569 </sizepolicy>
570 <number>0</number>570 </property>
571 </property>571 <property name="minimumSize">
572 <item>572 <size>
573 <widget class="QLabel" name="confirm_email_assistance">573 <width>300</width>
574 <property name="sizePolicy">574 <height>0</height>
575 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">575 </size>
576 <horstretch>0</horstretch>576 </property>
577 <verstretch>0</verstretch>577 <property name="maximumSize">
578 </sizepolicy>578 <size>
579 </property>579 <width>300</width>
580 <property name="minimumSize">580 <height>16777215</height>
581 <size>581 </size>
582 <width>220</width>582 </property>
583 <height>0</height>583 <property name="font">
584 </size>584 <font>
585 </property>585 <pointsize>11</pointsize>
586 <property name="maximumSize">586 </font>
587 <size>587 </property>
588 <width>220</width>588 <property name="locale">
589 <height>16777215</height>589 <locale language="English" country="UnitedStates"/>
590 </size>590 </property>
591 </property>591 <property name="inputMask">
592 <property name="text">592 <string/>
593 <string>confirm_email_assistance</string>593 </property>
594 </property>594 <property name="text">
595 <property name="alignment">595 <string/>
596 <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>596 </property>
597 </property>597 <property name="placeholderText">
598 <property name="wordWrap">598 <string/>
599 <bool>true</bool>599 </property>
600 </property>600 <property name="formError" stdset="0">
601 <property name="indent">601 <bool>false</bool>
602 <number>0</number>602 </property>
603 </property>603 </widget>
604 </widget>604 </item>
605 </item>605 </layout>
606 </layout>606 </item>
607 </item>607 <item row="1" column="0" colspan="2">
608 <item row="6" column="1" rowspan="2">608 <spacer name="verticalSpacer">
609 <widget class="QLabel" name="password_assistance">609 <property name="orientation">
610 <property name="sizePolicy">610 <enum>Qt::Vertical</enum>
611 <sizepolicy hsizetype="Maximum" vsizetype="Minimum">611 </property>
612 <horstretch>0</horstretch>612 <property name="sizeHint" stdset="0">
613 <verstretch>0</verstretch>613 <size>
614 </sizepolicy>614 <width>20</width>
615 </property>615 <height>10</height>
616 <property name="minimumSize">616 </size>
617 <size>617 </property>
618 <width>220</width>618 </spacer>
619 <height>100</height>619 </item>
620 </size>620 <item row="8" column="1">
621 </property>621 <layout class="QVBoxLayout" name="verticalLayout_13">
622 <property name="maximumSize">622 <property name="rightMargin">
623 <size>623 <number>0</number>
624 <width>220</width>624 </property>
625 <height>16777215</height>625 <item>
626 </size>626 <widget class="QLabel" name="refresh_label">
627 </property>627 <property name="minimumSize">
628 <property name="text">628 <size>
629 <string>password_assistance</string>629 <width>220</width>
630 </property>630 <height>0</height>
631 <property name="wordWrap">631 </size>
632 <bool>true</bool>632 </property>
633 </property>633 <property name="maximumSize">
634 <property name="indent">634 <size>
635 <number>17</number>635 <width>220</width>
636 </property>636 <height>16777215</height>
637 </widget>637 </size>
638 </item>638 </property>
639 <item row="2" column="1">639 <property name="locale">
640 <spacer name="verticalSpacer">640 <locale language="English" country="UnitedStates"/>
641 <property name="orientation">641 </property>
642 <enum>Qt::Vertical</enum>642 <property name="text">
643 </property>643 <string notr="true">If you can't read this then refresh this page</string>
644 <property name="sizeType">644 </property>
645 <enum>QSizePolicy::Fixed</enum>645 <property name="wordWrap">
646 </property>646 <bool>true</bool>
647 <property name="sizeHint" stdset="0">647 </property>
648 <size>648 <property name="indent">
649 <width>20</width>649 <number>0</number>
650 <height>15</height>650 </property>
651 </size>651 </widget>
652 </property>652 </item>
653 </spacer>653 </layout>
654 </item>654 </item>
655 <item row="5" column="1">655 </layout>
656 <spacer name="verticalSpacer_2">656 </item>
657 <property name="orientation">657 </layout>
658 <enum>Qt::Vertical</enum>658 </widget>
659 </property>659 <resources/>
660 <property name="sizeType">660 <connections/>
661 <enum>QSizePolicy::Fixed</enum>661</ui>
662 </property>
663 <property name="sizeHint" stdset="0">
664 <size>
665 <width>20</width>
666 <height>15</height>
667 </size>
668 </property>
669 </spacer>
670 </item>
671 <item row="8" column="1">
672 <spacer name="verticalSpacer_3">
673 <property name="orientation">
674 <enum>Qt::Vertical</enum>
675 </property>
676 <property name="sizeType">
677 <enum>QSizePolicy::Fixed</enum>
678 </property>
679 <property name="sizeHint" stdset="0">
680 <size>
681 <width>20</width>
682 <height>15</height>
683 </size>
684 </property>
685 </spacer>
686 </item>
687 </layout>
688 </item>
689 <item>
690 <layout class="QHBoxLayout" name="hlayout_check">
691 <property name="spacing">
692 <number>0</number>
693 </property>
694 </layout>
695 </item>
696 </layout>
697 </widget>
698 <resources/>
699 <connections/>
700</ui>
701662
=== added file 'data/qt/ssl_dialog.ui'
--- data/qt/ssl_dialog.ui 1970-01-01 00:00:00 +0000
+++ data/qt/ssl_dialog.ui 2012-03-06 15:41:36 +0000
@@ -0,0 +1,205 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>SSLDialog</class>
4 <widget class="QDialog" name="SSLDialog">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>550</width>
10 <height>402</height>
11 </rect>
12 </property>
13 <property name="sizePolicy">
14 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
15 <horstretch>0</horstretch>
16 <verstretch>0</verstretch>
17 </sizepolicy>
18 </property>
19 <property name="minimumSize">
20 <size>
21 <width>550</width>
22 <height>0</height>
23 </size>
24 </property>
25 <property name="windowTitle">
26 <string notr="true">Dialog</string>
27 </property>
28 <layout class="QVBoxLayout" name="verticalLayout_2">
29 <property name="spacing">
30 <number>24</number>
31 </property>
32 <property name="sizeConstraint">
33 <enum>QLayout::SetFixedSize</enum>
34 </property>
35 <item>
36 <layout class="QHBoxLayout" name="horizontalLayout_3">
37 <property name="spacing">
38 <number>12</number>
39 </property>
40 <item>
41 <layout class="QVBoxLayout" name="verticalLayout_7">
42 <property name="spacing">
43 <number>0</number>
44 </property>
45 <property name="sizeConstraint">
46 <enum>QLayout::SetDefaultConstraint</enum>
47 </property>
48 <item>
49 <widget class="QLabel" name="logo_label">
50 <property name="sizePolicy">
51 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
52 <horstretch>0</horstretch>
53 <verstretch>0</verstretch>
54 </sizepolicy>
55 </property>
56 <property name="minimumSize">
57 <size>
58 <width>48</width>
59 <height>48</height>
60 </size>
61 </property>
62 <property name="maximumSize">
63 <size>
64 <width>48</width>
65 <height>48</height>
66 </size>
67 </property>
68 <property name="text">
69 <string notr="true">TextLabel</string>
70 </property>
71 </widget>
72 </item>
73 <item>
74 <spacer name="verticalSpacer_4">
75 <property name="orientation">
76 <enum>Qt::Vertical</enum>
77 </property>
78 <property name="sizeType">
79 <enum>QSizePolicy::Expanding</enum>
80 </property>
81 <property name="sizeHint" stdset="0">
82 <size>
83 <width>0</width>
84 <height>20</height>
85 </size>
86 </property>
87 </spacer>
88 </item>
89 </layout>
90 </item>
91 <item>
92 <layout class="QVBoxLayout" name="expander_layout">
93 <property name="spacing">
94 <number>24</number>
95 </property>
96 <item>
97 <widget class="QLabel" name="title_label">
98 <property name="font">
99 <font>
100 <pointsize>14</pointsize>
101 </font>
102 </property>
103 <property name="text">
104 <string notr="true">Do you want to connect to this server</string>
105 </property>
106 </widget>
107 </item>
108 <item>
109 <widget class="QLabel" name="intro_label">
110 <property name="text">
111 <string notr="true">&lt;style type=&quot;text/css&quot; media=&quot;all&quot;&gt;
112ul {margin-left: -10px;}
113li {padding-top: 2px;}
114&lt;/style&gt;
115&lt;p&gt;You are trying to connect to a proxy server on 192.168.1.111. This server uses a secure connection, but the SSL certificate is not valid because:&lt;/p&gt;
116&lt;ul&gt;
117&lt;li&gt;The certificate has not been verified.&lt;/li&gt;
118&lt;li&gt;The name on the certificate isn't valid or doesn't match the name of the site.&lt;/li&gt;
119&lt;li&gt;The certificate has expired.&lt;/li&gt;
120&lt;/ul&gt;</string>
121 </property>
122 <property name="wordWrap">
123 <bool>true</bool>
124 </property>
125 <property name="indent">
126 <number>-1</number>
127 </property>
128 </widget>
129 </item>
130 <item>
131 <widget class="QLabel" name="not_sure_label">
132 <property name="text">
133 <string notr="true">&lt;p&gt;If you are not sure about this server, do not use it to connect to Ubuntu One. &lt;a href='#'&gt;Review your proxy settings.&lt;/a&gt;</string>
134 </property>
135 <property name="wordWrap">
136 <bool>true</bool>
137 </property>
138 </widget>
139 </item>
140 <item>
141 <widget class="QCheckBox" name="remember_checkbox">
142 <property name="text">
143 <string notr="true">Remember my settings for this certificate.</string>
144 </property>
145 <property name="checked">
146 <bool>false</bool>
147 </property>
148 </widget>
149 </item>
150 </layout>
151 </item>
152 </layout>
153 </item>
154 <item>
155 <layout class="QHBoxLayout" name="horizontalLayout_2">
156 <item>
157 <widget class="QPushButton" name="help_button">
158 <property name="text">
159 <string notr="true">Get Help With SSL</string>
160 </property>
161 </widget>
162 </item>
163 <item>
164 <spacer name="horizontalSpacer">
165 <property name="orientation">
166 <enum>Qt::Horizontal</enum>
167 </property>
168 <property name="sizeHint" stdset="0">
169 <size>
170 <width>40</width>
171 <height>20</height>
172 </size>
173 </property>
174 </spacer>
175 </item>
176 <item>
177 <widget class="QPushButton" name="cancel_button">
178 <property name="text">
179 <string notr="true">Cancel and Close</string>
180 </property>
181 </widget>
182 </item>
183 <item>
184 <widget class="QPushButton" name="connect_button">
185 <property name="text">
186 <string notr="true">Connect</string>
187 </property>
188 <property name="default">
189 <bool>true</bool>
190 </property>
191 </widget>
192 </item>
193 </layout>
194 </item>
195 </layout>
196 </widget>
197 <tabstops>
198 <tabstop>connect_button</tabstop>
199 <tabstop>cancel_button</tabstop>
200 <tabstop>help_button</tabstop>
201 <tabstop>remember_checkbox</tabstop>
202 </tabstops>
203 <resources/>
204 <connections/>
205</ui>
0206
=== modified file 'data/qt/stylesheet.qss'
--- data/qt/stylesheet.qss 2012-02-17 21:16:38 +0000
+++ data/qt/stylesheet.qss 2012-03-06 15:41:36 +0000
@@ -3,6 +3,12 @@
3 color: #333333;3 color: #333333;
4}4}
55
6QFrame#ubuntussoframe {
7 background-color: white;
8 padding-left: 30px;
9 padding-right: 30px;
10}
11
6QWizard,12QWizard,
7QDialog {13QDialog {
8 background-color: white;14 background-color: white;
@@ -10,6 +16,7 @@
1016
11QLabel#password_assistance {17QLabel#password_assistance {
12 border-image: url(":/balloon_shape.png");18 border-image: url(":/balloon_shape.png");
19 font-size: 12px;
13}20}
1421
15QLineEdit {22QLineEdit {
@@ -23,79 +30,57 @@
23 padding-left: 20px;30 padding-left: 20px;
24 padding-right: 20px;31 padding-right: 20px;
25 border-width: 1px;32 border-width: 1px;
26 height: 14px;
27}33}
2834
29QPushButton[default="true"] {35QPushButton:default:enabled {
30 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,36 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
31 stop: 0 #fe9e84,stop: 1.0 #dd4814);37 stop: 0 #fe9e84,stop: 1.0 #dd4814);
32 color: white;38 color: white;
33 border-color: #999999;39 border-color: #999999;
34}40}
3541
36QPushButton:hover[default="true"] {42QPushButton:hover:default:enabled {
37 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,43 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
38 stop: 0 #ffb19c,stop: 1.0 #dd4814);44 stop: 0 #ffb19c,stop: 1.0 #dd4814);
39 color: white;45 color: white;
40 border-color: #999999;46 border-color: #999999;
41}47}
4248
43QPushButton:pressed[default="true"] {49QPushButton:pressed:default:enabled {
44 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,50 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
45 stop: 0 #b93f14,stop: 1.0 #dd4814);51 stop: 0 #b93f14,stop: 1.0 #dd4814);
46 color: white;52 color: white;
47 border-color: #999999;53 border-color: #999999;
48}54}
4955
50QPushButton[default="false"] {56QPushButton:enabled {
51 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,57 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
52 stop: 0 #ffffff,stop: 1.0 #e6e6e6);58 stop: 0 #ffffff,stop: 1.0 #e6e6e6);
53 color: #333333;59 color: #333333;
54 border-color: #999999;60 border-color: #999999;
55}61}
5662
57QPushButton:hover[default="false"] {63QPushButton:hover:enabled {
58 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,64 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
59 stop: 0 #ffffff,stop: 1.0 #ededed);65 stop: 0 #ffffff,stop: 1.0 #ededed);
60 color: #333333;66 color: #333333;
61 border-color: #999999;67 border-color: #999999;
62}68}
6369
64QPushButton:pressed[default="false"] {70QPushButton:pressed:enabled {
65 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,71 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
66 stop: 0 #d9d9d9,stop: 1.0 #fefefe);72 stop: 0 #d9d9d9,stop: 1.0 #fefefe);
67 color: #333333;73 color: #333333;
68 border-color: #999999;74 border-color: #999999;
69}75}
7076
71QPushButton[DisabledState="true"] {77QPushButton:disabled {
72 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,78 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
73 stop: 0 #eaeaea, stop: 1.0 #cacaca);79 stop: 0 #eaeaea, stop: 1.0 #cacaca);
74 color: #595959;80 color: #595959;
75 border-color: #939389;81 border-color: #939389;
76}82}
7783
78QPushButton[DisabledState="false"] {
79 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
80 stop: 0 #fe9e84,stop: 1.0 #dd4814);
81 color: white;
82 border-color: #999999;
83}
84
85QPushButton:hover[DisabledState="false"] {
86 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
87 stop: 0 #ffb19c,stop: 1.0 #dd4814);
88 color: white;
89 border-color: #999999;
90}
91
92QPushButton:pressed[DisabledState="false"] {
93 background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
94 stop: 0 #b93f14,stop: 1.0 #dd4814);
95 color: white;
96 border-color: #999999;
97}
98
99QFrame#frm_box {84QFrame#frm_box {
100 background: #ffffff;85 background: #ffffff;
101 border-radius: 5px;86 border-radius: 5px;
@@ -115,5 +100,12 @@
115}100}
116101
117QFrame#header {102QFrame#header {
118 padding: 10px;103 padding-top: 1px;
104 padding-bottom: 1px;
105}
106
107QLabel#form_errors {
108 font: bold 14px;
109 color: #df2d1f;
110 padding-bottom: 1px;
119}111}
120112
=== modified file 'data/qt/success_message.ui'
--- data/qt/success_message.ui 2011-11-14 12:16:13 +0000
+++ data/qt/success_message.ui 2012-03-06 15:41:36 +0000
@@ -1,35 +1,32 @@
1<?xml version="1.0" encoding="UTF-8"?>1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">2<ui version="4.0">
3 <class>SuccessPage</class>3 <class>SuccessPage</class>
4 <widget class="QWizardPage" name="SuccessPage">4 <widget class="QWizardPage" name="SuccessPage">
5 <property name="geometry">5 <property name="geometry">
6 <rect>6 <rect>
7 <x>0</x>7 <x>0</x>
8 <y>0</y>8 <y>0</y>
9 <width>400</width>9 <width>94</width>
10 <height>300</height>10 <height>58</height>
11 </rect>11 </rect>
12 </property>12 </property>
13 <property name="windowTitle">13 <layout class="QVBoxLayout" name="verticalLayout">
14 <string>WizardPage</string>14 <item>
15 </property>15 <widget class="QLabel" name="image_label">
16 <layout class="QVBoxLayout" name="verticalLayout">16 <property name="text">
17 <item>17 <string notr="true">TextLabel</string>
18 <widget class="QLabel" name="image_label">18 </property>
19 <property name="text">19 </widget>
20 <string>TextLabel</string>20 </item>
21 </property>21 <item>
22 </widget>22 <widget class="QLabel" name="success_message_body">
23 </item>23 <property name="text">
24 <item>24 <string notr="true">TextLabel</string>
25 <widget class="QLabel" name="success_message_body">25 </property>
26 <property name="text">26 </widget>
27 <string>TextLabel</string>27 </item>
28 </property>28 </layout>
29 </widget>29 </widget>
30 </item>30 <resources/>
31 </layout>31 <connections/>
32 </widget>32</ui>
33 <resources/>
34 <connections/>
35</ui>
3633
=== modified file 'run-tests.bat'
--- run-tests.bat 2012-01-31 19:02:36 +0000
+++ run-tests.bat 2012-03-06 15:41:36 +0000
@@ -99,7 +99,7 @@
99"%PYTHONEXEPATH%\python.exe" setup.py build99"%PYTHONEXEPATH%\python.exe" setup.py build
100ECHO Running tests100ECHO Running tests
101:: execute the tests with a number of ignored linux only modules101:: execute the tests with a number of ignored linux only modules
102"%PYTHONEXEPATH%\python.exe" "%PYTHONEXEPATH%\Scripts\u1trial" -i "test_linux.py, test_txsecrets.py" -p "ubuntu_sso\gtk" --reactor=qt4 --gui %PARAMS% ubuntu_sso 102"%PYTHONEXEPATH%\python.exe" "%PYTHONEXEPATH%\Scripts\u1trial" -i "test_linux.py, test_txsecrets.py, test_qt.py, test_glib.py" -p "ubuntu_sso\gtk" --reactor=qt4 --gui %PARAMS% ubuntu_sso
103:: Clean the build from the setupt.py103:: Clean the build from the setupt.py
104ECHO Cleaning the generated code104ECHO Cleaning the generated code
105"%PYTHONEXEPATH%\python.exe" setup.py clean105"%PYTHONEXEPATH%\python.exe" setup.py clean
106106
=== modified file 'setup.py'
--- setup.py 2012-02-22 12:24:22 +0000
+++ setup.py 2012-03-06 15:41:36 +0000
@@ -277,6 +277,7 @@
277 'bin/ubuntu-sso-login-gtk',277 'bin/ubuntu-sso-login-gtk',
278 'bin/ubuntu-sso-login-qt',278 'bin/ubuntu-sso-login-qt',
279 'bin/ubuntu-sso-proxy-creds-qt',279 'bin/ubuntu-sso-proxy-creds-qt',
280 'bin/ubuntu-sso-ssl-certificate-qt',
280]281]
281282
282283
283284
=== modified file 'ubuntu_sso/credentials.py'
--- ubuntu_sso/credentials.py 2012-02-17 18:43:17 +0000
+++ ubuntu_sso/credentials.py 2012-03-06 15:41:36 +0000
@@ -142,6 +142,13 @@
142 def _show_ui(self, login_only):142 def _show_ui(self, login_only):
143 """Shows the UI, connect outcome signals."""143 """Shows the UI, connect outcome signals."""
144 ui_exe_path = os.path.join(get_bin_dir(), self.ui_executable)144 ui_exe_path = os.path.join(get_bin_dir(), self.ui_executable)
145 if not os.path.exists(ui_exe_path):
146 logger.debug('Falling back to the GTK+ UI since the given %r '
147 'does not exist', ui_exe_path)
148 ui_exe_path = os.path.join(get_bin_dir(), UI_EXECUTABLE_GTK)
149
150 assert os.path.exists(ui_exe_path)
151
145 args = [ui_exe_path]152 args = [ui_exe_path]
146 for arg in ('app_name', 'help_text', 'ping_url', 'policy_url',153 for arg in ('app_name', 'help_text', 'ping_url', 'policy_url',
147 'tc_url', 'window_id'):154 'tc_url', 'window_id'):
148155
=== modified file 'ubuntu_sso/main/glib.py'
--- ubuntu_sso/main/glib.py 2012-01-26 14:54:13 +0000
+++ ubuntu_sso/main/glib.py 2012-03-06 15:41:36 +0000
@@ -18,6 +18,10 @@
1818
19# pylint: disable=E0611,F040119# pylint: disable=E0611,F0401
2020
21# pylint: disable=W0621
22import dbus.mainloop.glib
23# pylint: enable=W0621
24
21from gi.repository import GLib, Gdk, Gtk25from gi.repository import GLib, Gdk, Gtk
2226
2327
@@ -38,8 +42,6 @@
3842
39def start_setup():43def start_setup():
40 """Setup the env to run the service."""44 """Setup the env to run the service."""
41 import dbus.mainloop.glib # pylint: disable=W0621
42
43 dbus.mainloop.glib.threads_init()45 dbus.mainloop.glib.threads_init()
44 Gdk.threads_init()46 Gdk.threads_init()
45 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)47 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
4648
=== modified file 'ubuntu_sso/main/qt.py'
--- ubuntu_sso/main/qt.py 2012-02-17 19:43:31 +0000
+++ ubuntu_sso/main/qt.py 2012-03-06 15:41:36 +0000
@@ -20,8 +20,13 @@
2020
21import sys21import sys
2222
23# pylint: disable=W0621
24import dbus.mainloop.qt
25# pylint: enable=W0621
26
23from PyQt4 import QtCore27from PyQt4 import QtCore
2428
29
25TIMERS = set()30TIMERS = set()
2631
2732
@@ -55,12 +60,9 @@
5560
56def start_setup():61def start_setup():
57 """Setup the env to run the service."""62 """Setup the env to run the service."""
58 import dbus.mainloop.qt # pylint: disable=W0621
59
60 # this has to be created before calling dbus.mainloop.qt.DBusQtMainLoop63 # this has to be created before calling dbus.mainloop.qt.DBusQtMainLoop
61 loop = QtCore.QCoreApplication(sys.argv)64 loop = QtCore.QCoreApplication(sys.argv)
62 dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True)65 dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True)
63
64 return loop66 return loop
6567
6668
6769
=== modified file 'ubuntu_sso/networkstate/linux.py'
--- ubuntu_sso/networkstate/linux.py 2012-01-31 20:12:49 +0000
+++ ubuntu_sso/networkstate/linux.py 2012-03-06 15:41:36 +0000
@@ -94,7 +94,9 @@
94 if isinstance(error, self.dbus.exceptions.DBusException) and \94 if isinstance(error, self.dbus.exceptions.DBusException) and \
95 error.get_dbus_name() == DBUS_UNKNOWN_SERVICE:95 error.get_dbus_name() == DBUS_UNKNOWN_SERVICE:
96 logger.debug("Network Manager not present")96 logger.debug("Network Manager not present")
97 self.call_result_cb(UNKNOWN)97 # Assuming since Network Manager is not installed,
98 # the user has connected in some other way
99 self.call_result_cb(ONLINE)
98 else:100 else:
99 logger.error("Error contacting NetworkManager: %s" % \101 logger.error("Error contacting NetworkManager: %s" % \
100 str(error))102 str(error))
101103
=== modified file 'ubuntu_sso/networkstate/tests/test_linux.py'
--- ubuntu_sso/networkstate/tests/test_linux.py 2012-01-31 20:12:49 +0000
+++ ubuntu_sso/networkstate/tests/test_linux.py 2012-03-06 15:41:36 +0000
@@ -407,10 +407,10 @@
407 self.mocker.result(exc)407 self.mocker.result(exc)
408 self.mocker.replay()408 self.mocker.replay()
409409
410 def test_nm_not_running(self):410 def test_nm_not_installed(self):
411 """Check the case when NM is not running."""411 """Check the case when NM is not installed."""
412 self.connect_proxy(TestNmNotAvailableException)412 self.connect_proxy(TestNmNotAvailableException)
413 self.check_nm_error(self.assertUnknown, TestNmNotAvailableException())413 self.check_nm_error(self.assertOnline, TestNmNotAvailableException())
414414
415 def test_dbus_problem(self):415 def test_dbus_problem(self):
416 """Check the case when DBus throws some other exception."""416 """Check the case when DBus throws some other exception."""
417417
=== modified file 'ubuntu_sso/qt/__init__.py'
--- ubuntu_sso/qt/__init__.py 2012-02-17 18:43:17 +0000
+++ ubuntu_sso/qt/__init__.py 2012-03-06 15:41:36 +0000
@@ -19,8 +19,13 @@
19import collections19import collections
2020
2121
22LINK_STYLE = ('<a href="{link_url}">'
23 '<span style="color:#df2d1f;">{link_text}</span></a>')
22ERROR_ALL = '__all__'24ERROR_ALL = '__all__'
25ERROR_STYLE = u'<font color="#df2d1f"><b>%s</b></font>'
23ERROR_MESSAGE = 'message'26ERROR_MESSAGE = 'message'
27PREFERED_UI_SIZE = {'width': 550, 'height': 525}
28TITLE_STYLE = u'<span style="font-size:24px">%s</span>'
2429
2530
26# Based on the gtk implementation31# Based on the gtk implementation
2732
=== added file 'ubuntu_sso/qt/arrow.py'
--- ubuntu_sso/qt/arrow.py 1970-01-01 00:00:00 +0000
+++ ubuntu_sso/qt/arrow.py 2012-03-06 15:41:36 +0000
@@ -0,0 +1,68 @@
1# -*- coding: utf-8 -*-
2#
3# Copyright 2012 Canonical Ltd.
4#
5# This program is free software: you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 3, as published
7# by the Free Software Foundation.
8#
9# This program is distributed in the hope that it will be useful, but
10# WITHOUT ANY WARRANTY; without even the implied warranties of
11# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
12# PURPOSE. See the GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License along
15# with this program. If not, see <http://www.gnu.org/licenses/>.
16"""Widget written in Qt that works as a GtkArrow."""
17
18from PyQt4.QtGui import QPainter, QStyle, QStyleOption, QWidget
19
20
21class QArrow(QWidget):
22 """Custom widget."""
23
24 UP = 0
25 DOWN = 1
26 LEFT = 2
27 RIGHT = 3
28
29 def __init__(self, direction, parent=None):
30 """Create a new instance."""
31 super(QArrow, self).__init__(parent)
32 self._set_direction(direction)
33 self.setFixedWidth(16)
34
35 # pylint: disable=C0103
36 def paintEvent(self, event):
37 """Paint the widget."""
38 opt = QStyleOption()
39 opt.initFrom(self)
40 painter = QPainter(self)
41 if self._direction == QArrow.UP:
42 primitive = QStyle.PE_IndicatorArrowUp
43 elif self._direction == QArrow.DOWN:
44 primitive = QStyle.PE_IndicatorArrowDown
45 elif self._direction == QArrow.LEFT:
46 primitive = QStyle.PE_IndicatorArrowLeft
47 else:
48 primitive = QStyle.PE_IndicatorArrowRight
49 painter.translate(-5, 0)
50 painter.setViewTransformEnabled(True)
51 self.style().drawPrimitive(primitive, opt, painter, self)
52 # pylint: enable=C0103
53
54 def _get_direction(self):
55 """Return the direction used."""
56 return self._direction
57
58 # pylint: disable=W0201
59 def _set_direction(self, direction):
60 """Set the direction."""
61 if direction not in (QArrow.UP, QArrow.DOWN,
62 QArrow.LEFT, QArrow.RIGHT):
63 raise ValueError('Wrong arrow direction.')
64 self._direction = direction
65 self.repaint()
66 # pylint: enable=W0201
67
68 direction = property(_get_direction, _set_direction)
069
=== modified file 'ubuntu_sso/qt/current_user_sign_in_page.py'
--- ubuntu_sso/qt/current_user_sign_in_page.py 2012-02-18 15:02:49 +0000
+++ ubuntu_sso/qt/current_user_sign_in_page.py 2012-03-06 15:41:36 +0000
@@ -19,41 +19,39 @@
19from functools import partial19from functools import partial
2020
21from PyQt4 import QtGui, QtCore21from PyQt4 import QtGui, QtCore
22from twisted.internet import defer
2322
24from ubuntu_sso import NO_OP23from ubuntu_sso import NO_OP
25from ubuntu_sso.qt import build_general_error_message24from ubuntu_sso.logger import setup_gui_logging
26from ubuntu_sso.qt.gui import SSOWizardPage25from ubuntu_sso.qt import LINK_STYLE, build_general_error_message
27from ubuntu_sso.logger import setup_logging26from ubuntu_sso.qt.sso_wizard_page import SSOWizardPage
27from ubuntu_sso.qt.ui.current_user_sign_in_ui import Ui_CurrentUserSignInPage
28from ubuntu_sso.utils.ui import (28from ubuntu_sso.utils.ui import (
29 CANCEL_BUTTON,29 CANCEL_BUTTON,
30 EMAIL_LABEL,30 EMAIL_LABEL,
31 FORGOTTEN_PASSWORD_BUTTON,31 FORGOTTEN_PASSWORD_BUTTON,
32 is_correct_email,32 is_correct_email,
33 LOGIN_PASSWORD_LABEL,33 LOGIN_PASSWORD_LABEL,
34 LOGIN_TITLE,
35 LOGIN_SUBTITLE,
34 SIGN_IN_BUTTON,36 SIGN_IN_BUTTON,
35)37)
3638
3739
38FORGOTTEN_PASSWORD_LINK_STYLE = ('<a href="#" style="color:#dd4814;">'40logger = setup_gui_logging('ubuntu_sso.current_user_sign_in_page')
39 '{forgotten_text}</a>')
40
41
42logger = setup_logging('ubuntu_sso.current_user_sign_in_page')
4341
4442
45class CurrentUserSignInPage(SSOWizardPage):43class CurrentUserSignInPage(SSOWizardPage):
46 """Wizard Page that lets a current user Sign into Ubuntu Single Sign On."""44 """Wizard Page that lets a current user Sign into Ubuntu Single Sign On."""
4745
48 userLoggedIn = QtCore.pyqtSignal('QString', 'QString')46 ui_class = Ui_CurrentUserSignInPage
47 userLoggedIn = QtCore.pyqtSignal(unicode)
49 passwordForgotten = QtCore.pyqtSignal()48 passwordForgotten = QtCore.pyqtSignal()
50 userNotValidated = QtCore.pyqtSignal('QString', 'QString')49 userNotValidated = QtCore.pyqtSignal(unicode)
5150
52 def __init__(self, ui, ping_url, *args, **kwargs):51 @property
53 super(CurrentUserSignInPage, self).__init__(ui, *args, **kwargs)52 def _signals(self):
54 self.ping_url = ping_url53 """The signals to connect to the backend."""
5554 result = {
56 self._signals = {
57 'LoggedIn':55 'LoggedIn':
58 self._filter_by_app_name(self.on_logged_in),56 self._filter_by_app_name(self.on_logged_in),
59 'LoginError':57 'LoginError':
@@ -61,22 +59,13 @@
61 'UserNotValidated':59 'UserNotValidated':
62 self._filter_by_app_name(self.on_user_not_validated),60 self._filter_by_app_name(self.on_user_not_validated),
63 }61 }
64 self.setup_page()62 return result
6563
66 def on_user_not_validated(self, *args):64 def on_user_not_validated(self, app_name, email):
67 """Show the validate email page."""65 """Show the validate email page."""
66 self.hide_overlay()
68 email = unicode(self.ui.email_edit.text())67 email = unicode(self.ui.email_edit.text())
69 password = unicode(self.ui.password_edit.text())68 self.userNotValidated.emit(email)
70 self.userNotValidated.emit(email, password)
71
72 @defer.inlineCallbacks
73 def setup_page(self):
74 """Setup the widget components."""
75 self.backend = yield self.get_backend()
76 self._set_translated_strings()
77 # lets add call backs to be execute for the calls we are interested
78 self._setup_signals()
79 self._connect_ui()
8069
81 # Invalid names of Qt-inherited methods70 # Invalid names of Qt-inherited methods
82 # pylint: disable=C010371 # pylint: disable=C0103
@@ -97,24 +86,22 @@
97 # Set sign_in_button as default when the page is shown.86 # Set sign_in_button as default when the page is shown.
98 self.ui.sign_in_button.setDefault(True)87 self.ui.sign_in_button.setDefault(True)
99 self.ui.sign_in_button.setEnabled(False)88 self.ui.sign_in_button.setEnabled(False)
100 self.ui.sign_in_button.setProperty("DisabledState",
101 not self.ui.sign_in_button.isEnabled())
102 self.ui.sign_in_button.style().unpolish(
103 self.ui.sign_in_button)
104 self.ui.sign_in_button.style().polish(
105 self.ui.sign_in_button)
10689
107 def cleanupPage(self):90 def cleanupPage(self):
108 """Reset the wizard buttons."""91 """Reset the wizard buttons."""
92 super(CurrentUserSignInPage, self).cleanupPage()
109 self.wizard().setButtonLayout([QtGui.QWizard.Stretch])93 self.wizard().setButtonLayout([QtGui.QWizard.Stretch])
11094
111 def _set_translated_strings(self):95 def _set_translated_strings(self):
112 """Set the translated strings."""96 """Set the translated strings."""
113 logger.debug('CurrentUserSignInPage._set_translated_strings')97 logger.debug('CurrentUserSignInPage._set_translated_strings')
98 self.setTitle(LOGIN_TITLE.format(app_name=self.app_name))
99 self.setSubTitle(LOGIN_SUBTITLE % {'app_name': self.app_name})
100
114 self.ui.email_label.setText(EMAIL_LABEL)101 self.ui.email_label.setText(EMAIL_LABEL)
115 self.ui.password_label.setText(LOGIN_PASSWORD_LABEL)102 self.ui.password_label.setText(LOGIN_PASSWORD_LABEL)
116 forgotten_text = FORGOTTEN_PASSWORD_LINK_STYLE.format(103 forgotten_text = LINK_STYLE.format(link_url='#',
117 forgotten_text=FORGOTTEN_PASSWORD_BUTTON)104 link_text=FORGOTTEN_PASSWORD_BUTTON)
118 self.ui.forgot_password_label.setText(forgotten_text)105 self.ui.forgot_password_label.setText(forgotten_text)
119 self.ui.sign_in_button.setText(SIGN_IN_BUTTON)106 self.ui.sign_in_button.setText(SIGN_IN_BUTTON)
120107
@@ -135,10 +122,6 @@
135 if not correct_mail or not password:122 if not correct_mail or not password:
136 valid = False123 valid = False
137 self.ui.sign_in_button.setEnabled(valid)124 self.ui.sign_in_button.setEnabled(valid)
138 self.ui.sign_in_button.setProperty("DisabledState",
139 not self.ui.sign_in_button.isEnabled())
140 self.ui.sign_in_button.style().unpolish(self.ui.sign_in_button)
141 self.ui.sign_in_button.style().polish(self.ui.sign_in_button)
142125
143 def login(self):126 def login(self):
144 """Perform the login using the self.backend."""127 """Perform the login using the self.backend."""
@@ -153,7 +136,8 @@
153 else:136 else:
154 f = self.backend.login137 f = self.backend.login
155138
156 self.overlay.show()139 self.hide_error()
140 self.show_overlay()
157 error_handler = partial(self._handle_error, f, self.on_login_error)141 error_handler = partial(self._handle_error, f, self.on_login_error)
158 f(*args, reply_handler=NO_OP, error_handler=error_handler)142 f(*args, reply_handler=NO_OP, error_handler=error_handler)
159143
@@ -162,19 +146,18 @@
162 # let the user know146 # let the user know
163 logger.error('Got error when login %s, error: %s',147 logger.error('Got error when login %s, error: %s',
164 self.app_name, error)148 self.app_name, error)
165 self.overlay.hide()149 self.show_error(self.app_name, build_general_error_message(error))
166 self.message_box.critical(self, self.app_name,
167 build_general_error_message(error))
168150
169 def on_logged_in(self, app_name, result):151 def on_logged_in(self, app_name, result):
170 """We managed to log in."""152 """We managed to log in."""
171 logger.info('Logged in for %s', app_name)153 logger.info('Logged in for %s', app_name)
172 self.overlay.hide()154 self.hide_overlay()
173 email = unicode(self.ui.email_edit.text())155 email = unicode(self.ui.email_edit.text())
174 self.userLoggedIn.emit(app_name, email)156 self.userLoggedIn.emit(email)
175 logger.debug('Wizard.loginSuccess emitted.')157 logger.debug('Wizard.loginSuccess emitted.')
176158
177 def on_forgotten_password(self):159 def on_forgotten_password(self, link=None):
178 """Show the user the forgotten password page."""160 """Show the user the forgotten password page."""
179 logger.info('Forgotten password')161 logger.info('Forgotten password')
162 self.hide_overlay()
180 self.passwordForgotten.emit()163 self.passwordForgotten.emit()
181164
=== modified file 'ubuntu_sso/qt/email_verification_page.py'
--- ubuntu_sso/qt/email_verification_page.py 2012-02-14 14:38:23 +0000
+++ ubuntu_sso/qt/email_verification_page.py 2012-03-06 15:41:36 +0000
@@ -18,47 +18,46 @@
1818
19from functools import partial19from functools import partial
2020
21from PyQt4 import QtCore21from PyQt4 import QtGui, QtCore
22from twisted.internet import defer
2322
24from ubuntu_sso import NO_OP23from ubuntu_sso import NO_OP
24from ubuntu_sso.logger import setup_gui_logging
25from ubuntu_sso.qt import build_general_error_message25from ubuntu_sso.qt import build_general_error_message
26from ubuntu_sso.qt.gui import SSOWizardPage26from ubuntu_sso.qt.sso_wizard_page import SSOWizardPage
27from ubuntu_sso.logger import setup_logging27from ubuntu_sso.qt.ui.email_verification_ui import Ui_EmailVerificationPage
28from ubuntu_sso.utils.ui import (28from ubuntu_sso.utils.ui import (
29 ERROR_EMAIL_TOKEN,
30 NEXT,
31 VERIFICATION_CODE,
29 VERIFY_EMAIL_TITLE,32 VERIFY_EMAIL_TITLE,
30 VERIFY_EMAIL_CONTENT,33 VERIFY_EMAIL_CONTENT,
31)34)
32from ubuntu_sso.utils.ui import ERROR_EMAIL_TOKEN35
3336
3437logger = setup_gui_logging('ubuntu_sso.email_verification_page')
35logger = setup_logging('ubuntu_sso.email_verification_page')
3638
3739
38class EmailVerificationPage(SSOWizardPage):40class EmailVerificationPage(SSOWizardPage):
39 """Widget used to input the email verification code."""41 """Widget used to input the email verification code."""
4042
41 registrationSuccess = QtCore.pyqtSignal('QString', 'QString')43 ui_class = Ui_EmailVerificationPage
44 registrationSuccess = QtCore.pyqtSignal(unicode)
4245
43 def __init__(self, ui, ping_url, *args, **kwargs):46 def __init__(self, *args, **kwargs):
44 super(EmailVerificationPage, self).__init__(ui, *args, **kwargs)
45 self.ping_url = ping_url
46 self.email = ''47 self.email = ''
47 self.password = ''48 self.password = ''
48 self._signals = {49 super(EmailVerificationPage, self).__init__(*args, **kwargs)
50
51 @property
52 def _signals(self):
53 """The signals to connect to the backend."""
54 result = {
49 'EmailValidated':55 'EmailValidated':
50 self._filter_by_app_name(self.on_email_validated),56 self._filter_by_app_name(self.on_email_validated),
51 'EmailValidationError':57 'EmailValidationError':
52 self._filter_by_app_name(self.on_email_validation_error),58 self._filter_by_app_name(self.on_email_validation_error),
53 }59 }
54 self.setup_page()60 return result
55
56 @defer.inlineCallbacks
57 def setup_page(self):
58 """Setup the ui components."""
59 self.backend = yield self.get_backend()
60 self._setup_signals()
61 self._connect_ui_elements()
6261
63 @property62 @property
64 def verification_code(self):63 def verification_code(self):
@@ -70,9 +69,9 @@
70 """Return the button that move to the next stage."""69 """Return the button that move to the next stage."""
71 return self.ui.next_button70 return self.ui.next_button
7271
73 def _connect_ui_elements(self):72 def _connect_ui(self):
74 """Set the connection of signals."""73 """Set the connection of signals."""
75 logger.debug('EmailVerificationController._connect_ui_elements')74 logger.debug('EmailVerificationController._connect_ui')
76 self.ui.verification_code_edit.textChanged.connect(75 self.ui.verification_code_edit.textChanged.connect(
77 self.validate_form)76 self.validate_form)
78 self.next_button.clicked.connect(self.validate_email)77 self.next_button.clicked.connect(self.validate_email)
@@ -82,12 +81,8 @@
82 code = self.verification_code.strip()81 code = self.verification_code.strip()
83 enabled = len(code) > 082 enabled = len(code) > 0
84 self.next_button.setEnabled(enabled)83 self.next_button.setEnabled(enabled)
85 self.next_button.setProperty('DisabledState',
86 not self.next_button.isEnabled())
87 self.next_button.style().unpolish(self.next_button)
88 self.next_button.style().polish(self.next_button)
8984
90 def _set_titles(self):85 def _set_translated_strings(self):
91 """Set the different titles."""86 """Set the different titles."""
92 logger.debug('EmailVerificationController._set_titles')87 logger.debug('EmailVerificationController._set_titles')
93 self.header.set_title(VERIFY_EMAIL_TITLE)88 self.header.set_title(VERIFY_EMAIL_TITLE)
@@ -95,20 +90,24 @@
95 "app_name": self.app_name,90 "app_name": self.app_name,
96 "email": self.email,91 "email": self.email,
97 })92 })
93 self.ui.label.setText(VERIFICATION_CODE)
94 self.ui.next_button.setText(NEXT)
9895
99 def set_titles(self, email):96 def set_titles(self, email):
100 """This class needs to have a public set_titles.97 """This class needs to have a public set_titles.
10198
102 Since the subtitle contains data that is only known after SetupAccount99 Since the subtitle contains data that is only known after SetupAccount
103 and _set_titles is only called on initialization.100 and _set_translated_strings is only called on initialization.
104 """101 """
105 self._set_titles()102 self._set_translated_strings()
106103
107 def validate_email(self):104 def validate_email(self):
108 """Call the next action."""105 """Call the next action."""
109 logger.debug('EmailVerificationController.validate_email')106 logger.debug('EmailVerificationController.validate_email')
110 code = unicode(self.ui.verification_code_edit.text())107 code = unicode(self.ui.verification_code_edit.text())
111 args = (self.app_name, self.email, self.password, code)108 args = (self.app_name, self.email, self.password, code)
109 self.hide_error()
110 self.show_overlay()
112 if self.ping_url:111 if self.ping_url:
113 f = self.backend.validate_email_and_ping112 f = self.backend.validate_email_and_ping
114 args = args + (self.ping_url,)113 args = args + (self.ping_url,)
@@ -122,24 +121,25 @@
122 self.on_email_validation_error)121 self.on_email_validation_error)
123 f(*args, reply_handler=NO_OP, error_handler=error_handler)122 f(*args, reply_handler=NO_OP, error_handler=error_handler)
124123
125 def on_email_validated(self, app_name, *args, **kwargs):124 def on_email_validated(self, app_name, email):
126 """Signal thrown after the email is validated."""125 """Signal thrown after the email is validated."""
127 logger.info('EmailVerificationController.on_email_validated')126 logger.info('EmailVerificationController.on_email_validated')
128 self.registrationSuccess.emit(app_name, self.email)127 self.hide_overlay()
128 self.registrationSuccess.emit(self.email)
129129
130 def on_email_validation_error(self, app_name, error):130 def on_email_validation_error(self, app_name, error):
131 """Signal thrown when there's a problem validating the email."""131 """Signal thrown when there's a problem validating the email."""
132 self.hide_overlay()
132 msg = error.pop(ERROR_EMAIL_TOKEN, '')133 msg = error.pop(ERROR_EMAIL_TOKEN, '')
133 msg += build_general_error_message(error)134 msg += build_general_error_message(error)
134 self.message_box.critical(self, self.app_name, msg)135 self.show_error(self.app_name, msg)
135136
136 #pylint: disable=C0103137 # pylint: disable=C0103
138
137 def initializePage(self):139 def initializePage(self):
138 """Called to prepare the page just before it is shown."""140 """Called to prepare the page just before it is shown."""
139 self.next_button.setDefault(True)141 self.next_button.setDefault(True)
140 self.next_button.setEnabled(False)142 self.next_button.setEnabled(False)
141 self.next_button.setProperty('DisabledState',143 self.wizard().setButtonLayout([QtGui.QWizard.Stretch])
142 not self.next_button.isEnabled())144
143 self.next_button.style().unpolish(self.next_button)
144 self.next_button.style().polish(self.next_button)
145 #pylint: enable=C0103145 #pylint: enable=C0103
146146
=== modified file 'ubuntu_sso/qt/enhanced_check_box.py'
--- ubuntu_sso/qt/enhanced_check_box.py 2012-02-16 18:40:41 +0000
+++ ubuntu_sso/qt/enhanced_check_box.py 2012-03-06 15:41:36 +0000
@@ -32,7 +32,7 @@
32 self.text_label.setOpenExternalLinks(True)32 self.text_label.setOpenExternalLinks(True)
33 padding = self.iconSize().width()33 padding = self.iconSize().width()
34 self.text_label.setStyleSheet("margin-top: -3px;"34 self.text_label.setStyleSheet("margin-top: -3px;"
35 "padding-left: {0}px;".format(padding))35 "padding-left: 2px;")
36 hbox.setContentsMargins(padding, 0, 0, 0)36 hbox.setContentsMargins(padding, 0, 0, 0)
37 hbox.addWidget(self.text_label)37 hbox.addWidget(self.text_label)
38 self.setLayout(hbox)38 self.setLayout(hbox)
3939
=== modified file 'ubuntu_sso/qt/error_page.py'
--- ubuntu_sso/qt/error_page.py 2012-02-07 18:59:36 +0000
+++ ubuntu_sso/qt/error_page.py 2012-03-06 15:41:36 +0000
@@ -16,14 +16,21 @@
1616
17"""Email Verification page UI."""17"""Email Verification page UI."""
1818
19from ubuntu_sso.qt.gui import SSOWizardPage19from ubuntu_sso.qt.sso_wizard_page import SSOWizardPage
20from ubuntu_sso.qt.ui.error_message_ui import Ui_ErrorPage
20from ubuntu_sso.utils.ui import ERROR21from ubuntu_sso.utils.ui import ERROR
2122
2223
23class ErrorPage(SSOWizardPage):24class ErrorPage(SSOWizardPage):
24 """Widget used to show the diff errors."""25 """Widget used to show the diff errors."""
2526
26 def __init__(self, ui, *args, **kwargs):27 ui_class = Ui_ErrorPage
27 super(ErrorPage, self).__init__(ui, *args, **kwargs)28 next = None
29
30 def _set_translated_strings(self):
31 """Set the translated strings."""
32 self.ui.error_message_label.setText(ERROR)
33
34 def _connect_ui(self):
35 """Connect the buttons to perform actions."""
28 self.next = -136 self.next = -1
29 self.ui.error_message_label.setText(ERROR)
3037
=== added file 'ubuntu_sso/qt/expander.py'
--- ubuntu_sso/qt/expander.py 1970-01-01 00:00:00 +0000
+++ ubuntu_sso/qt/expander.py 2012-03-06 15:41:36 +0000
@@ -0,0 +1,115 @@
1# -*- coding: utf-8 -*-
2#
3# Copyright 2012 Canonical Ltd.
4#
5# This program is free software: you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 3, as published
7# by the Free Software Foundation.
8#
9# This program is distributed in the hope that it will be useful, but
10# WITHOUT ANY WARRANTY; without even the implied warranties of
11# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
12# PURPOSE. See the GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License along
15# with this program. If not, see <http://www.gnu.org/licenses/>.
16"""A Expander widget similar to the GtkExpander."""
17
18from PyQt4.QtCore import pyqtSignal
19from PyQt4.QtGui import QHBoxLayout, QLabel, QSizePolicy, QVBoxLayout, QWidget
20
21from ubuntu_sso.qt.arrow import QArrow
22
23# we are following the Qt style, lets tell pylint to ignore it
24# pylint: disable=C0103
25
26
27class QExpanderLabel(QWidget):
28 """Widget used to show the label of a QExpander."""
29
30 clicked = pyqtSignal()
31
32 def __init__(self, label, parent=None):
33 """Create a new instance."""
34 super(QExpanderLabel, self).__init__(parent)
35 self.arrow = QArrow(QArrow.RIGHT)
36 self.label = QLabel(label)
37 layout = QHBoxLayout()
38 layout.setContentsMargins(0, 0, 0, 0)
39 self.setLayout(layout)
40 layout.addWidget(self.arrow)
41 layout.addWidget(self.label)
42
43 def mousePressEvent(self, event):
44 """Mouse clicked."""
45 if self.arrow.direction == QArrow.DOWN:
46 self.arrow.direction = QArrow.RIGHT
47 else:
48 self.arrow.direction = QArrow.DOWN
49 self.clicked.emit()
50
51 def text(self):
52 """Return the text of the label."""
53 return self.label.text()
54
55 def setText(self, text):
56 """Set the text of the label."""
57 self.label.setText(text)
58
59
60class QExpander(QWidget):
61 """A Qt implementation similar to GtkExpander."""
62
63 def __init__(self, label, expanded=False, parent=None):
64 """Create a new instance."""
65 super(QExpander, self).__init__(parent)
66 self.label = QExpanderLabel(label)
67 self.label.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
68 self.content = None
69 self.layout = QVBoxLayout()
70 self.layout.setContentsMargins(0, 0, 0, 0)
71 self.setLayout(self.layout)
72 self.layout.addWidget(self.label)
73 self.layout.addStretch()
74 self.label.clicked.connect(self._on_label_clicked)
75 self.setExpanded(expanded)
76
77 def _on_label_clicked(self):
78 """The expander widget was clicked."""
79 self._expanded = not self._expanded
80 self.setExpanded(self._expanded)
81
82 def addWidget(self, widget):
83 """Add a widget to the expander.
84
85 The previous widget will be removed.
86 """
87 if self.content is not None:
88 self.layout.removeWidget(self.content)
89 self.content = widget
90 self.content.setVisible(self._expanded)
91 self.layout.insertWidget(1, self.content)
92
93 def text(self):
94 """Return the text of the label."""
95 return self.label.text()
96
97 def setText(self, text):
98 """Set the text of the label."""
99 self.label.setText(text)
100
101 def expanded(self):
102 """Return if widget is expanded."""
103 return self._expanded
104
105 # pylint: disable=W0201
106 def setExpanded(self, is_expanded):
107 """Expand the widget or not."""
108 self._expanded = is_expanded
109 if self._expanded:
110 self.label.arrow.direction = QArrow.DOWN
111 else:
112 self.label.arrow.direction = QArrow.RIGHT
113 if self.content is not None:
114 self.content.setVisible(self._expanded)
115 # pylint: enable=W0201
0116
=== modified file 'ubuntu_sso/qt/forgotten_password_page.py'
--- ubuntu_sso/qt/forgotten_password_page.py 2012-02-16 14:13:36 +0000
+++ ubuntu_sso/qt/forgotten_password_page.py 2012-03-06 15:41:36 +0000
@@ -19,178 +19,108 @@
19from functools import partial19from functools import partial
2020
21from PyQt4 import QtCore21from PyQt4 import QtCore
22from twisted.internet import defer
2322
24from ubuntu_sso import NO_OP23from ubuntu_sso import NO_OP
25from ubuntu_sso.qt.gui import SSOWizardEnhancedEditPage24from ubuntu_sso.logger import setup_gui_logging, log_call
25from ubuntu_sso.qt.sso_wizard_page import SSOWizardEnhancedEditPage
26from ubuntu_sso.qt.ui.forgotten_password_ui import Ui_ForgottenPasswordPage
26from ubuntu_sso.utils.ui import (27from ubuntu_sso.utils.ui import (
27 EMAIL_LABEL,28 EMAIL_LABEL,
29 FORGOTTEN_PASSWORD_TITLE,
30 FORGOTTEN_PASSWORD_SUBTITLE,
28 is_correct_email,31 is_correct_email,
29 RESET_PASSWORD,32 RESET_PASSWORD,
30 REQUEST_PASSWORD_TOKEN_LABEL,
31 REQUEST_PASSWORD_TOKEN_WRONG_EMAIL,33 REQUEST_PASSWORD_TOKEN_WRONG_EMAIL,
32 REQUEST_PASSWORD_TOKEN_TECH_ERROR,
33 TRY_AGAIN_BUTTON,
34)34)
3535
3636
37logger = setup_gui_logging('ubuntu_sso.forgotten_password_page')
38
39
37class ForgottenPasswordPage(SSOWizardEnhancedEditPage):40class ForgottenPasswordPage(SSOWizardEnhancedEditPage):
38 """Widget used to deal with users that forgot the password."""41 """Widget used to deal with users that forgot the password."""
3942
40 passwordResetTokenSent = QtCore.pyqtSignal()43 ui_class = Ui_ForgottenPasswordPage
44 passwordResetTokenSent = QtCore.pyqtSignal(unicode)
4145
42 def __init__(self, ui, *args, **kwargs):46 @property
43 super(ForgottenPasswordPage, self).__init__(ui, *args, **kwargs)47 def _signals(self):
44 self._signals = {48 """The signals to connect to the backend."""
49 result = {
45 'PasswordResetTokenSent':50 'PasswordResetTokenSent':
46 self._filter_by_app_name(self.on_password_reset_token_sent),51 self._filter_by_app_name(self.on_password_reset_token_sent),
47 'PasswordResetError':52 'PasswordResetError':
48 self._filter_by_app_name(self.on_password_reset_error),53 self._filter_by_app_name(self.on_password_reset_error),
49 }54 }
50 self.setup_page()55 return result
51
52 @defer.inlineCallbacks
53 def setup_page(self):
54 """Setup the widget components."""
55 self.backend = yield self.get_backend()
56 self._setup_signals()
57 # hide the error label
58 self.try_again_widget.setVisible(False)
59 self._set_translated_strings()
60 self._connect_ui()
61 self._set_enhanced_line_edit()
62 self._register_fields()
63
64 @property
65 def email_widget(self):
66 """Return the widget used to show the email information."""
67 return self.ui.email_widget
68
69 @property
70 def forgotted_password_intro_label(self):
71 """Return the intro label that lets the user know the issue."""
72 return self.ui.forgotted_password_intro_label
73
74 @property
75 def error_label(self):
76 """Return the label used to show error."""
77 return self.ui.error_label
78
79 @property
80 def email_address_label(self):
81 """Return the lable used to state the use of the line edit."""
82 return self.ui.email_address_label
8356
84 @property57 @property
85 def email_address(self):58 def email_address(self):
86 """Return the email address provided by the user."""59 """Return the email address provided by the user."""
87 return str(self.ui.email_line_edit.text())60 return unicode(self.ui.email_line_edit.text())
88
89 @property
90 def email_address_line_edit(self):
91 """Return the line edit with the content."""
92 return self.ui.email_line_edit
93
94 @property
95 def send_button(self):
96 """Return the button used to request the new password."""
97 return self.ui.send_button
98
99 @property
100 def try_again_widget(self):
101 """Return the widget used to display the try again button."""
102 return self.ui.try_again_widget
103
104 @property
105 def try_again_button(self):
106 """Return the button used to try again the reset password."""
107 return self.ui.try_again_button
10861
109 #pylint: disable=C010362 #pylint: disable=C0103
63
110 def initializePage(self):64 def initializePage(self):
111 """Set the initial state of ForgottenPassword page."""65 """Set the initial state of ForgottenPassword page."""
112 self.send_button.setDefault(True)66 self.ui.send_button.setDefault(True)
113 enabled = not self.ui.email_line_edit.text().isEmpty()67 enabled = not self.ui.email_line_edit.text().isEmpty()
114 self.send_button.setEnabled(enabled)68 self.ui.send_button.setEnabled(enabled)
115 # The style from this property come from the Wizard69
116 self.send_button.setProperty("DisabledState",
117 not self.send_button.isEnabled())
118 self.send_button.style().unpolish(self.send_button)
119 self.send_button.style().polish(self.send_button)
120 #pylint: enable=C010370 #pylint: enable=C0103
12171
122 def _register_fields(self):72 def _register_fields(self):
123 """Register the fields of the wizard page."""73 """Register the fields of the wizard page."""
124 self.registerField('email_address',74 self.registerField('email_address',
125 self.email_address_line_edit)75 self.ui.email_line_edit)
12676
127 def _set_translated_strings(self):77 def _set_translated_strings(self):
128 """Set the translated strings in the view."""78 """Set the translated strings in the view."""
129 self.forgotted_password_intro_label.setText(79 self.setTitle(FORGOTTEN_PASSWORD_TITLE)
130 REQUEST_PASSWORD_TOKEN_LABEL % {'app_name':80 subtitle = FORGOTTEN_PASSWORD_SUBTITLE.format(app_name=self.app_name)
131 self.app_name})81 self.setSubTitle(subtitle)
132 self.email_address_label.setText(EMAIL_LABEL)82 self.ui.email_address_label.setText(EMAIL_LABEL)
133 self.send_button.setText(RESET_PASSWORD)83 self.ui.send_button.setText(RESET_PASSWORD)
134 self.try_again_button.setText(TRY_AGAIN_BUTTON)
13584
136 def _set_enhanced_line_edit(self):85 def _set_enhanced_line_edit(self):
137 """Set the extra logic to the line edits."""86 """Set the extra logic to the line edits."""
138 self.set_line_edit_validation_rule(87 self.set_line_edit_validation_rule(self.ui.email_line_edit,
139 self.email_address_line_edit,
140 is_correct_email)88 is_correct_email)
14189
142 def _connect_ui(self):90 def _connect_ui(self):
143 """Connect the diff signals from the Ui."""91 """Connect the diff signals from the Ui."""
144 self.email_address_line_edit.textChanged.connect(self._validate)92 self.ui.email_line_edit.textChanged.connect(self._validate)
14593 self.ui.send_button.clicked.connect(self.request_new_password)
146 self.send_button.clicked.connect(self.request_new_password)94 self._set_enhanced_line_edit()
147 self.try_again_button.clicked.connect(self.on_try_again)95 self._register_fields()
14896
149 def request_new_password(self):97 def request_new_password(self):
150 """Send the request password operation."""98 """Send the request password operation."""
99 self.hide_error()
151 args = (self.app_name, self.email_address)100 args = (self.app_name, self.email_address)
152 f = self.backend.request_password_reset_token101 f = self.backend.request_password_reset_token
153102
154 error_handler = partial(self._handle_error, f,103 error_handler = partial(self._handle_error, f,
155 self.on_password_reset_error)104 self.on_password_reset_error)
156105
157 self.overlay.show()106 self.show_overlay()
158 f(*args, reply_handler=NO_OP, error_handler=error_handler)107 f(*args, reply_handler=NO_OP, error_handler=error_handler)
159108
160 def _validate(self):109 def _validate(self):
161 """Validate that we have an email."""110 """Validate that we have an email."""
162 email = unicode(self.email_address_line_edit.text())111 email = unicode(self.ui.email_line_edit.text())
163 self.send_button.setEnabled(is_correct_email(email))112 self.ui.send_button.setEnabled(is_correct_email(email))
164 self.send_button.setProperty("DisabledState",113
165 not self.send_button.isEnabled())114 def on_password_reset_token_sent(self, app_name, email):
166 self.send_button.style().unpolish(self.send_button)
167 self.send_button.style().polish(self.send_button)
168
169 def on_try_again(self):
170 """Set back the widget to the initial state."""
171 self.try_again_widget.setVisible(False)
172 self.email_widget.setVisible(True)
173
174 # pylint: disable=W0212
175 def on_password_reset_token_sent(self, app_name, result):
176 """Action taken when we managed to get the password reset done."""115 """Action taken when we managed to get the password reset done."""
177 # ignore the result and move to the reset page116 # ignore the result and move to the reset page
178 self.overlay.hide()117 self.hide_overlay()
179 self.passwordResetTokenSent.emit()118 self.passwordResetTokenSent.emit(email)
180 # pylint: enable=W0212
181119
120 @log_call(logger.error)
182 def on_password_reset_error(self, app_name, error):121 def on_password_reset_error(self, app_name, error):
183 """Action taken when there was an error requesting the reset."""122 """Action taken when there was an error requesting the reset."""
184 # set the error message123 # set the error message
185 self.overlay.hide()
186 msg = REQUEST_PASSWORD_TOKEN_TECH_ERROR
187 if error['errtype'] == 'ResetPasswordTokenError':
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches