diff options
| -rw-r--r-- | changes/feature-3995_add-drop-down-for-known-providers | 1 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/ui/wizard.ui | 183 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/wizard.py | 42 | 
3 files changed, 195 insertions, 31 deletions
diff --git a/changes/feature-3995_add-drop-down-for-known-providers b/changes/feature-3995_add-drop-down-for-known-providers new file mode 100644 index 00000000..f05c3b58 --- /dev/null +++ b/changes/feature-3995_add-drop-down-for-known-providers @@ -0,0 +1 @@ +  o Add a dropdown for known providers in the wizard. Closes #3995. diff --git a/src/leap/bitmask/gui/ui/wizard.ui b/src/leap/bitmask/gui/ui/wizard.ui index 2a412784..b796b795 100644 --- a/src/leap/bitmask/gui/ui/wizard.ui +++ b/src/leap/bitmask/gui/ui/wizard.ui @@ -134,17 +134,7 @@        </property>       </spacer>      </item> -    <item row="1" column="1"> -     <widget class="QLineEdit" name="lnProvider"/> -    </item> -    <item row="1" column="2"> -     <widget class="QPushButton" name="btnCheck"> -      <property name="text"> -       <string>Check</string> -      </property> -     </widget> -    </item> -    <item row="3" column="1"> +    <item row="5" column="1">       <spacer name="verticalSpacer_2">        <property name="orientation">         <enum>Qt::Vertical</enum> @@ -157,17 +147,7 @@        </property>       </spacer>      </item> -    <item row="1" column="0"> -     <widget class="QLabel" name="label"> -      <property name="text"> -       <string>https://</string> -      </property> -      <property name="alignment"> -       <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -      </property> -     </widget> -    </item> -    <item row="4" column="0" colspan="3"> +    <item row="6" column="0" colspan="3">       <widget class="QGroupBox" name="grpCheckProvider">        <property name="title">         <string>Checking for a valid provider</string> @@ -276,13 +256,73 @@        </layout>       </widget>      </item> -    <item row="2" column="1" colspan="2"> +    <item row="4" column="1" colspan="2">       <widget class="QLabel" name="lblProviderSelectStatus">        <property name="text">         <string/>        </property>       </widget>      </item> +    <item row="1" column="0" colspan="3"> +     <widget class="QGroupBox" name="groupBox"> +      <property name="title"> +       <string>Configure or select a provider</string> +      </property> +      <layout class="QGridLayout" name="gridLayout_5"> +       <item row="0" column="1"> +        <widget class="QLabel" name="label"> +         <property name="text"> +          <string>https://</string> +         </property> +         <property name="alignment"> +          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +         </property> +        </widget> +       </item> +       <item row="0" column="2"> +        <widget class="QLineEdit" name="lnProvider"/> +       </item> +       <item row="1" column="2"> +        <widget class="QComboBox" name="cbProviders"> +         <property name="enabled"> +          <bool>false</bool> +         </property> +        </widget> +       </item> +       <item row="0" column="3"> +        <widget class="QPushButton" name="btnCheck"> +         <property name="text"> +          <string>Check</string> +         </property> +        </widget> +       </item> +       <item row="0" column="0"> +        <widget class="QRadioButton" name="rbNewProvider"> +         <property name="text"> +          <string>Configure new provider</string> +         </property> +         <property name="checked"> +          <bool>true</bool> +         </property> +        </widget> +       </item> +       <item row="1" column="0"> +        <widget class="QRadioButton" name="rbExistingProvider"> +         <property name="text"> +          <string>Use existing one</string> +         </property> +        </widget> +       </item> +       <item row="1" column="1"> +        <widget class="QLabel" name="label_8"> +         <property name="text"> +          <string>https://</string> +         </property> +        </widget> +       </item> +      </layout> +     </widget> +    </item>     </layout>    </widget>    <widget class="QWizardPage" name="provider_info_page"> @@ -626,10 +666,18 @@       </widget>      </item>      <item row="3" column="1" colspan="2"> -     <widget class="QLineEdit" name="lblPassword"/> +     <widget class="QLineEdit" name="lblPassword"> +      <property name="echoMode"> +       <enum>QLineEdit::Password</enum> +      </property> +     </widget>      </item>      <item row="4" column="1" colspan="2"> -     <widget class="QLineEdit" name="lblPassword2"/> +     <widget class="QLineEdit" name="lblPassword2"> +      <property name="echoMode"> +       <enum>QLineEdit::Password</enum> +      </property> +     </widget>      </item>      <item row="2" column="1" colspan="2">       <widget class="QLineEdit" name="lblUser"/> @@ -756,12 +804,91 @@    <tabstop>btnRegister</tabstop>    <tabstop>rdoRegister</tabstop>    <tabstop>rdoLogin</tabstop> -  <tabstop>lnProvider</tabstop> -  <tabstop>btnCheck</tabstop>   </tabstops>   <resources>    <include location="../../../../../data/resources/mainwindow.qrc"/>    <include location="../../../../../data/resources/locale.qrc"/>   </resources> - <connections/> + <connections> +  <connection> +   <sender>rbExistingProvider</sender> +   <signal>toggled(bool)</signal> +   <receiver>cbProviders</receiver> +   <slot>setFocus()</slot> +   <hints> +    <hint type="sourcelabel"> +     <x>167</x> +     <y>192</y> +    </hint> +    <hint type="destinationlabel"> +     <x>265</x> +     <y>191</y> +    </hint> +   </hints> +  </connection> +  <connection> +   <sender>rbNewProvider</sender> +   <signal>toggled(bool)</signal> +   <receiver>lnProvider</receiver> +   <slot>setFocus()</slot> +   <hints> +    <hint type="sourcelabel"> +     <x>171</x> +     <y>164</y> +    </hint> +    <hint type="destinationlabel"> +     <x>246</x> +     <y>164</y> +    </hint> +   </hints> +  </connection> +  <connection> +   <sender>rbExistingProvider</sender> +   <signal>toggled(bool)</signal> +   <receiver>lnProvider</receiver> +   <slot>setDisabled(bool)</slot> +   <hints> +    <hint type="sourcelabel"> +     <x>169</x> +     <y>196</y> +    </hint> +    <hint type="destinationlabel"> +     <x>327</x> +     <y>163</y> +    </hint> +   </hints> +  </connection> +  <connection> +   <sender>rbNewProvider</sender> +   <signal>toggled(bool)</signal> +   <receiver>cbProviders</receiver> +   <slot>setDisabled(bool)</slot> +   <hints> +    <hint type="sourcelabel"> +     <x>169</x> +     <y>162</y> +    </hint> +    <hint type="destinationlabel"> +     <x>269</x> +     <y>193</y> +    </hint> +   </hints> +  </connection> +  <connection> +   <sender>rbExistingProvider</sender> +   <signal>toggled(bool)</signal> +   <receiver>btnCheck</receiver> +   <slot>setDisabled(bool)</slot> +   <hints> +    <hint type="sourcelabel"> +     <x>154</x> +     <y>193</y> +    </hint> +    <hint type="destinationlabel"> +     <x>498</x> +     <y>170</y> +    </hint> +   </hints> +  </connection> + </connections>  </ui> diff --git a/src/leap/bitmask/gui/wizard.py b/src/leap/bitmask/gui/wizard.py index bb38b136..7cff742e 100644 --- a/src/leap/bitmask/gui/wizard.py +++ b/src/leap/bitmask/gui/wizard.py @@ -26,6 +26,7 @@ from functools import partial  from PySide import QtCore, QtGui  from twisted.internet import threads +from leap.bitmask.config.leapsettings import LeapSettings  from leap.bitmask.config.providerconfig import ProviderConfig  from leap.bitmask.crypto.srpregister import SRPRegister  from leap.bitmask.provider.providerbootstrapper import ProviderBootstrapper @@ -81,6 +82,8 @@ class Wizard(QtGui.QWizard):          self._show_register = False +        self._use_existing_provider = False +          self.ui.grpCheckProvider.setVisible(False)          self.ui.btnCheck.clicked.connect(self._check_provider)          self.ui.lnProvider.returnPressed.connect(self._check_provider) @@ -110,9 +113,6 @@ class Wizard(QtGui.QWizard):          self.currentIdChanged.connect(self._current_id_changed) -        self.ui.lblPassword.setEchoMode(QtGui.QLineEdit.Password) -        self.ui.lblPassword2.setEchoMode(QtGui.QLineEdit.Password) -          self.ui.lnProvider.textChanged.connect(              self._enable_check) @@ -125,6 +125,8 @@ class Wizard(QtGui.QWizard):          self.ui.btnRegister.clicked.connect(              self._register) +        self.ui.rbExistingProvider.toggled.connect(self._skip_provider_checks) +          usernameRe = QtCore.QRegExp(self.BARE_USERNAME_REGEX)          self.ui.lblUser.setValidator(              QtGui.QRegExpValidator(usernameRe, self)) @@ -144,6 +146,11 @@ class Wizard(QtGui.QWizard):          self.ui.label_12.setVisible(False)          self.ui.lblProviderPolicy.setVisible(False) +        # Load configured providers into wizard +        ls = LeapSettings() +        providers = ls.get_configured_providers() +        self.ui.cbProviders.addItems(providers) +      def get_domain(self):          return self._domain @@ -315,6 +322,25 @@ class Wizard(QtGui.QWizard):          self._provider_select_defer = self._provider_bootstrapper.\              run_provider_select_checks(self._domain) +    def _skip_provider_checks(self, skip): +        """ +        SLOT +        Triggered: +            self.ui.rbExistingProvider.toggled + +        Allows the user to move to the next page without make any checks, +        used when we are selecting an already configured provider. + +        :param skip: if we should skip checks or not +        :type skip: bool +        """ +        if skip: +            self._reset_provider_check() + +        self.page(self.SELECT_PROVIDER_PAGE).set_completed(skip) +        self.button(QtGui.QWizard.NextButton).setEnabled(skip) +        self._use_existing_provider = skip +      def _complete_task(self, data, label, complete=False, complete_page=-1):          """          Checks a task and completes a page if specified @@ -561,4 +587,14 @@ class Wizard(QtGui.QWizard):              else:                  return self.SERVICES_PAGE +        if self.currentPage() == self.page(self.SELECT_PROVIDER_PAGE): +            if self._use_existing_provider: +                self._domain = self.ui.cbProviders.currentText() +                self._provider_config = ProviderConfig.get_provider_config( +                    self._domain) +                if self._show_register: +                    return self.REGISTER_USER_PAGE +                else: +                    return self.SERVICES_PAGE +          return QtGui.QWizard.nextId(self)  | 
