diff options
| author | Tomás Touceda <chiiph@leap.se> | 2013-06-13 15:14:15 -0300 | 
|---|---|---|
| committer | Tomás Touceda <chiiph@leap.se> | 2013-06-13 16:01:49 -0300 | 
| commit | cfd60d6e47a351e1ce52709a497e5a0b03319dcf (patch) | |
| tree | 203a1fbef5673cd1343f84974e90f7b5fa038573 /src | |
| parent | 93db3e9da1347f239eba937120c6f7fb05eaab0a (diff) | |
Refactor the status bits out of the MainWindow to StatusPanelWidget
Diffstat (limited to 'src')
| -rw-r--r-- | src/leap/gui/mainwindow.py | 238 | ||||
| -rw-r--r-- | src/leap/gui/statuspanel.py | 216 | ||||
| -rw-r--r-- | src/leap/gui/ui/mainwindow.ui | 304 | ||||
| -rw-r--r-- | src/leap/gui/ui/statuspanel.ui | 248 | 
4 files changed, 646 insertions, 360 deletions
| diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py index e135c798..67fe34e3 100644 --- a/src/leap/gui/mainwindow.py +++ b/src/leap/gui/mainwindow.py @@ -38,14 +38,15 @@ from leap.crypto.srpauth import SRPAuth  from leap.gui.loggerwindow import LoggerWindow  from leap.gui.wizard import Wizard  from leap.gui.login import LoginWidget +from leap.gui.statuspanel import StatusPanelWidget  from leap.services.eip.eipbootstrapper import EIPBootstrapper  from leap.services.eip.eipconfig import EIPConfig  from leap.services.eip.providerbootstrapper import ProviderBootstrapper  from leap.services.soledad.soledadbootstrapper import SoledadBootstrapper  from leap.services.mail.smtpbootstrapper import SMTPBootstrapper -from leap.platform_init import IS_MAC, IS_WIN +from leap.platform_init import IS_WIN  from leap.platform_init.initializers import init_platform -from leap.services.eip.vpnprocess import VPN, VPNManager +from leap.services.eip.vpnprocess import VPN  from leap.services.eip.vpnlaunchers import (VPNLauncherException,                                              OpenVPNNotFoundException, @@ -115,24 +116,6 @@ class MainWindow(QtGui.QMainWindow):          self._updates_content = "" -        if IS_MAC: -            EIP_ICONS = ( -                ":/images/conn_connecting-light.png", -                ":/images/conn_connected-light.png", -                ":/images/conn_error-light.png") -        else: -            EIP_ICONS = ( -                ":/images/conn_connecting.png", -                ":/images/conn_connected.png", -                ":/images/conn_error.png") - -        self.CONNECTING_ICON = QtGui.QPixmap(EIP_ICONS[0]) -        self.CONNECTED_ICON = QtGui.QPixmap(EIP_ICONS[1]) -        self.ERROR_ICON = QtGui.QPixmap(EIP_ICONS[2]) - -        self.LOGGED_OUT_ICON = QtGui.QPixmap(":/images/leap-gray-big.png") -        self.LOGGED_IN_ICON = QtGui.QPixmap(":/images/leap-color-big.png") -          self.ui = Ui_MainWindow()          self.ui.setupUi(self) @@ -149,11 +132,14 @@ class MainWindow(QtGui.QMainWindow):          self.ui.btnShowLog.clicked.connect(self._show_logger_window) +        self._status_panel = StatusPanelWidget( +            self.ui.stackedWidget.widget(self.EIP_STATUS_INDEX)) +        self.ui.statusLayout.addWidget(self._status_panel) +          self.ui.stackedWidget.setCurrentIndex(self.LOGIN_INDEX) -        self.ui.btnEipStartStop.setEnabled(False) -        self.ui.btnEipStartStop.clicked.connect( -            self._start_eip) +        self._status_panel.start_eip.connect(self._start_eip) +        self._status_panel.stop_eip.connect(self._stop_eip)          # This is loaded only once, there's a bug when doing that more          # than once @@ -169,6 +155,7 @@ class MainWindow(QtGui.QMainWindow):          # This is created once we have a valid provider config          self._srp_auth = None +        self._logged_user = None          # This thread is always running, although it's quite          # lightweight when it's done setting up provider @@ -209,8 +196,10 @@ class MainWindow(QtGui.QMainWindow):              self._smtp_bootstrapped_stage)          self._vpn = VPN() -        self._vpn.qtsigs.state_changed.connect(self._update_vpn_state) -        self._vpn.qtsigs.status_changed.connect(self._update_vpn_status) +        self._vpn.qtsigs.state_changed.connect( +            self._status_panel.update_vpn_state) +        self._vpn.qtsigs.status_changed.connect( +            self._status_panel.update_vpn_status)          self._vpn.qtsigs.process_finished.connect(              self._eip_finished) @@ -234,18 +223,14 @@ class MainWindow(QtGui.QMainWindow):              self.tr("Encrypted internet is OFF"),              self)          self._action_eip_status.setEnabled(False) + +        self._status_panel.set_action_eip_status( +            self._action_eip_status) +          self._action_eip_startstop = QtGui.QAction( -            self.tr("Turn encryption ON"), self) +            self.tr("Turn ON"), self)          self._action_eip_startstop.triggered.connect(              self._stop_eip) -        self._action_eip_write = QtGui.QAction( -            QtGui.QIcon(":/images/Arrow-Up-32.png"), -            "%12.2f Kb" % (0.0,), self) -        self._action_eip_write.setEnabled(False) -        self._action_eip_read = QtGui.QAction( -            QtGui.QIcon(":/images/Arrow-Down-32.png"), -            "%12.2f Kb" % (0.0,), self) -        self._action_eip_read.setEnabled(False)          self._action_visible = QtGui.QAction(self.tr("Hide Main Window"), self)          self._action_visible.triggered.connect(self._toggle_visible) @@ -527,10 +512,12 @@ class MainWindow(QtGui.QMainWindow):          systrayMenu.addAction(self._action_eip_startstop)          self._systray = QtGui.QSystemTrayIcon(self)          self._systray.setContextMenu(systrayMenu) -        self._systray.setIcon(QtGui.QIcon(self.ERROR_ICON)) +        self._systray.setIcon(self._status_panel.ERROR_ICON)          self._systray.setVisible(True)          self._systray.activated.connect(self._tray_activated) +        self._status_panel.set_systray(self._systray) +      def _tray_activated(self, reason=None):          """          SLOT @@ -662,18 +649,6 @@ class MainWindow(QtGui.QMainWindow):          is_proper_provider = self._settings.get_properprovider()          return not (has_provider_on_disk and is_proper_provider) -    def _set_eip_status(self, status, error=False): -        """ -        Sets the status label at the VPN stage to status - -        :param status: status message -        :type status: str -        """ -        self._systray.setToolTip(status) -        if error: -            status = "<font color='red'><b>%s</b></font>" % (status,) -        self.ui.lblEIPStatus.setText(status) -      def _download_provider_config(self):          """          Starts the bootstrapping sequence. It will download the @@ -812,6 +787,7 @@ class MainWindow(QtGui.QMainWindow):          """          self._login_widget.set_status(message, error=not ok)          if ok: +            self._logged_user = self._login_widget.get_user()              self.ui.action_sign_out.setEnabled(True)              # We leave a bit of room for the user to see the              # "Succeeded" message and then we switch to the EIP status @@ -826,6 +802,11 @@ class MainWindow(QtGui.QMainWindow):          Changes the stackedWidget index to the EIP status one and          triggers the eip bootstrapping          """ +        if not self._already_started_eip: +            self._status_panel.set_provider( +                "%s@%s" % (self._login_widget.get_user(), +                           self._provider_config.get_domain())) +          self.ui.stackedWidget.setCurrentIndex(self.EIP_STATUS_INDEX)          self._soledad_bootstrapper.run_soledad_setup_checks( @@ -883,13 +864,14 @@ class MainWindow(QtGui.QMainWindow):              else:                  if self._enabled_services.count(self.MX_SERVICE) > 0:                      pass  # TODO: show MX status -                    #self._set_eip_status( +                    #self._status_panel.set_eip_status(                      #    self.tr("%s does not support MX") %                      #    (self._provider_config.get_domain(),),                      #                     error=True)                  else:                      pass  # TODO: show MX status -                    #self._set_eip_status(self.tr("MX is disabled")) +                    #self._status_panel.set_eip_status( +                    #    self.tr("MX is disabled"))      def _smtp_bootstrapped_stage(self, data):          """ @@ -969,45 +951,55 @@ class MainWindow(QtGui.QMainWindow):              self._settings.set_defaultprovider(                  provider_config.get_domain()) + +            provider = self._provider_config.get_domain() +            if self._logged_user is not None: +                provider = "%s@%s" % (self._logged_user, provider) + +            self._status_panel.set_provider(provider) +              self._action_eip_provider.setText(provider_config.get_domain()) -            self.ui.btnEipStartStop.setText(self.tr("Turn Encryption OFF")) -            self.ui.btnEipStartStop.disconnect(self) -            self.ui.btnEipStartStop.clicked.connect( -                self._stop_eip) -            self._action_eip_startstop.setText(self.tr("Turn Encryption OFF")) + +            self._status_panel.eip_started() + +            self._action_eip_startstop.setText(self.tr("Turn OFF"))              self._action_eip_startstop.disconnect(self)              self._action_eip_startstop.triggered.connect(                  self._stop_eip)          except EIPNoPolkitAuthAgentAvailable: -            self._set_eip_status(self.tr("We could not find any " -                                         "authentication " -                                         "agent in your system.<br/>" -                                         "Make sure you have " -                                         "<b>polkit-gnome-authentication-" -                                         "agent-1</b> " -                                         "running and try again."), -                                 error=True) +            self._status_panel.set_eip_status( +                self.tr("We could not find any " +                        "authentication " +                        "agent in your system.<br/>" +                        "Make sure you have " +                        "<b>polkit-gnome-authentication-" +                        "agent-1</b> " +                        "running and try again."), +                error=True)          except EIPNoPkexecAvailable: -            self._set_eip_status(self.tr("We could not find <b>pkexec</b> " -                                         "in your system."), -                                 error=True) +            self._status_panel.set_eip_status( +                self.tr("We could not find <b>pkexec</b> " +                        "in your system."), +                error=True)          except OpenVPNNotFoundException: -            self._set_eip_status(self.tr("We couldn't find openvpn"), -                                 error=True) +            self._status_panel.set_eip_status( +                self.tr("We couldn't find openvpn"), +                error=True)          except VPNLauncherException as e: -            self._set_eip_status("%s" % (e,), error=True) +            self._status_panel.set_eip_status("%s" % (e,), error=True) +        else: +            self._already_started_eip = True -        self.ui.btnEipStartStop.setEnabled(True) +        self._status_panel.set_startstop_enabled(True)      def _stop_eip(self):          self._vpn.terminate() -        self._set_eip_status(self.tr("EIP has stopped")) -        self._set_eip_status_icon("error") -        self.ui.btnEipStartStop.setText(self.tr("Turn Encryption ON")) -        self.ui.btnEipStartStop.disconnect(self) -        self.ui.btnEipStartStop.clicked.connect( -            self._start_eip) -        self._action_eip_startstop.setText(self.tr("Turn Encryption ON")) +        self._status_panel.set_eip_status(self.tr("Off")) +        self._status_panel.set_eip_status_icon("error") + +        self._status_panel.eip_stopped() + +        self._action_eip_startstop.setText(self.tr("Turn ON"))          self._action_eip_startstop.disconnect(self)          self._action_eip_startstop.triggered.connect(              self._start_eip) @@ -1048,92 +1040,21 @@ class MainWindow(QtGui.QMainWindow):                  self._enabled_services.count(self.OPENVPN_SERVICE) > 0 and \                  not self._already_started_eip: -            self._set_eip_status( -                self.tr("Checking configuration, please wait...")) +            self._status_panel.set_eip_status( +                self.tr("Starting..."))              self._eip_bootstrapper.run_eip_setup_checks(                  provider_config,                  download_if_needed=True)              self._already_started_eip = True          elif not self._already_started_eip:              if self._enabled_services.count(self.OPENVPN_SERVICE) > 0: -                self._set_eip_status(self.tr("%s does not support EIP") % -                                     (provider_config.get_domain(),), -                                     error=True) +                self._status_panel.set_eip_status( +                    self.tr("Not supported"), +                    error=True)              else: -                self._set_eip_status(self.tr("EIP is disabled")) +                self._status_panel.set_eip_status(self.tr("Disabled"))              self.ui.btnEipStartStop.setEnabled(False) -    def _set_eip_status_icon(self, status): -        """ -        Given a status step from the VPN thread, set the icon properly - -        :param status: status step -        :type status: str -        """ -        selected_pixmap = self.ERROR_ICON -        tray_message = self.tr("Encryption is OFF") -        if status in ("WAIT", "AUTH", "GET_CONFIG", -                      "RECONNECTING", "ASSIGN_IP"): -            selected_pixmap = self.CONNECTING_ICON -            tray_message = self.tr("Turning Encryption ON") -        elif status in ("CONNECTED"): -            tray_message = self.tr("Encryption is ON") -            selected_pixmap = self.CONNECTED_ICON - -        self.ui.lblVPNStatusIcon.setPixmap(selected_pixmap) -        self._systray.setIcon(QtGui.QIcon(selected_pixmap)) -        self._action_eip_status.setText(tray_message) - -    def _update_vpn_state(self, data): -        """ -        SLOT -        TRIGGER: self._vpn.state_changed - -        Updates the displayed VPN state based on the data provided by -        the VPN thread -        """ -        status = data[VPNManager.STATUS_STEP_KEY] -        self._set_eip_status_icon(status) -        if status == "AUTH": -            self._set_eip_status(self.tr("VPN: Authenticating...")) -        elif status == "GET_CONFIG": -            self._set_eip_status(self.tr("VPN: Retrieving configuration...")) -        elif status == "CONNECTED": -            self._set_eip_status(self.tr("VPN: Connected!")) -        elif status == "WAIT": -            self._set_eip_status(self.tr("VPN: Waiting to start...")) -        elif status == "ASSIGN_IP": -            self._set_eip_status(self.tr("VPN: Assigning IP")) -        elif status == "ALREADYRUNNING": -            # Put the following calls in Qt's event queue, otherwise -            # the UI won't update properly -            QtCore.QTimer.singleShot(0, self._stop_eip) -            QtCore.QTimer.singleShot(0, partial(self._set_eip_status, -                                                self.tr("Unable to start VPN, " -                                                        "it's already " -                                                        "running."))) -        else: -            self._set_eip_status(status) - -    def _update_vpn_status(self, data): -        """ -        SLOT -        TRIGGER: self._vpn.status_changed - -        Updates the download/upload labels based on the data provided -        by the VPN thread -        """ -        upload = float(data[VPNManager.TUNTAP_WRITE_KEY]) -        upload = upload / 1000.0 -        upload_str = "%12.2f Kb" % (upload,) -        self.ui.lblUpload.setText(upload_str) -        self._action_eip_write.setText(upload_str) -        download = float(data[VPNManager.TUNTAP_READ_KEY]) -        download = download / 1000.0 -        download_str = "%12.2f Kb" % (download,) -        self.ui.lblDownload.setText(download_str) -        self._action_eip_read.setText(download_str) -      def _finish_eip_bootstrap(self, data):          """          SLOT @@ -1157,11 +1078,13 @@ class MainWindow(QtGui.QMainWindow):                  self._start_eip()          else:              if data[self._eip_bootstrapper.PASSED_KEY]: -                self._set_eip_status(self.tr("Could not load EIP " -                                             "Configuration"), error=True) +                self._status_panel.set_eip_status( +                    self.tr("Could not load EIP Configuration"), +                    error=True)              else: -                self._set_eip_status(data[self._eip_bootstrapper.ERROR_KEY], -                                     error=True) +                self._status_panel.set_eip_status( +                    data[self._eip_bootstrapper.ERROR_KEY], +                    error=True)              self._already_started_eip = False      def _logout(self): @@ -1183,6 +1106,7 @@ class MainWindow(QtGui.QMainWindow):          Switches the stackedWidget back to the login stage after          logging out          """ +        self._logged_user = None          self.ui.action_sign_out.setEnabled(False)          self.ui.stackedWidget.setCurrentIndex(self.LOGIN_INDEX)          self._login_widget.set_password("") diff --git a/src/leap/gui/statuspanel.py b/src/leap/gui/statuspanel.py new file mode 100644 index 00000000..53c19e86 --- /dev/null +++ b/src/leap/gui/statuspanel.py @@ -0,0 +1,216 @@ +# -*- coding: utf-8 -*- +# statuspanel.py +# Copyright (C) 2013 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + +""" +Status Panel widget implementation +""" +import logging + +from functools import partial +from PySide import QtCore, QtGui + +from ui_statuspanel import Ui_StatusPanel +from leap.services.eip.vpnprocess import VPNManager +from leap.platform_init import IS_MAC +from leap.common.check import leap_assert_type + +logger = logging.getLogger(__name__) + + +class StatusPanelWidget(QtGui.QWidget): +    """ +    Status widget that displays the current state of the LEAP services +    """ + +    start_eip = QtCore.Signal() +    stop_eip = QtCore.Signal() + +    def __init__(self, parent=None): +        QtGui.QWidget.__init__(self, parent) + +        self._systray = None +        self._action_eip_status = None + +        self.ui = Ui_StatusPanel() +        self.ui.setupUi(self) + +        self.ui.btnEipStartStop.setEnabled(False) +        self.ui.btnEipStartStop.clicked.connect( +            self.start_eip) + +        if IS_MAC: +            EIP_ICONS = ( +                ":/images/conn_connecting-light.png", +                ":/images/conn_connected-light.png", +                ":/images/conn_error-light.png") +        else: +            EIP_ICONS = ( +                ":/images/conn_connecting.png", +                ":/images/conn_connected.png", +                ":/images/conn_error.png") + +        self.CONNECTING_ICON = QtGui.QPixmap(EIP_ICONS[0]) +        self.CONNECTED_ICON = QtGui.QPixmap(EIP_ICONS[1]) +        self.ERROR_ICON = QtGui.QPixmap(EIP_ICONS[2]) + +    def set_systray(self, systray): +        """ +        Sets the systray object to use + +        :param systray: Systray object +        :type systray: QtGui.QSystemTrayIcon +        """ +        leap_assert_type(systray, QtGui.QSystemTrayIcon) +        self._systray = systray + +    def set_action_eip_status(self, action_eip_status): +        """ +        Sets the action_eip_status to use + +        :param action_eip_status: action_eip_status to be used +        :type action_eip_status: QtGui.QAction +        """ +        leap_assert_type(action_eip_status, QtGui.QAction) +        self._action_eip_status = action_eip_status + +    def set_eip_status(self, status, error=False): +        """ +        Sets the status label at the VPN stage to status + +        :param status: status message +        :type status: str or unicode +        :param error: if the status is an erroneous one, then set this +                      to True +        :type error: bool +        """ +        leap_assert_type(error, bool) + +        self._systray.setToolTip(status) +        if error: +            status = "<font color='red'>%s</font>" % (status,) +        self.ui.lblEIPStatus.setText(status) + +    def set_startstop_enabled(self, value): +        """ +        Enable or disable btnEipStartStop based on value + +        :param value: True for enabled, False otherwise +        :type value: bool +        """ +        leap_assert_type(value, bool) +        self.ui.btnEipStartStop.setEnabled(value) + +    def eip_started(self): +        """ +        Sets the state of the widget to how it should look after EIP +        has started +        """ +        self.ui.btnEipStartStop.setText(self.tr("Turn OFF")) +        self.ui.btnEipStartStop.disconnect(self) +        self.ui.btnEipStartStop.clicked.connect( +            self.stop_eip) + +    def eip_stopped(self): +        """ +        Sets the state of the widget to how it should look after EIP +        has stopped +        """ +        self.ui.btnEipStartStop.setText(self.tr("Turn ON")) +        self.ui.btnEipStartStop.disconnect(self) +        self.ui.btnEipStartStop.clicked.connect( +            self.start_eip) + +    def set_icon(self, icon): +        """ +        Sets the icon to display for EIP + +        :param icon: icon to display +        :type icon: QPixmap +        """ +        self.ui.lblVPNStatusIcon.setPixmap(icon) + +    def update_vpn_status(self, data): +        """ +        SLOT +        TRIGGER: VPN.status_changed + +        Updates the download/upload labels based on the data provided +        by the VPN thread +        """ +        upload = float(data[VPNManager.TUNTAP_WRITE_KEY]) +        upload = upload / 1000.0 +        upload_str = "%12.2f Kb" % (upload,) +        self.ui.lblUpload.setText(upload_str) +        download = float(data[VPNManager.TUNTAP_READ_KEY]) +        download = download / 1000.0 +        download_str = "%12.2f Kb" % (download,) +        self.ui.lblDownload.setText(download_str) + +    def update_vpn_state(self, data): +        """ +        SLOT +        TRIGGER: VPN.state_changed + +        Updates the displayed VPN state based on the data provided by +        the VPN thread +        """ +        status = data[VPNManager.STATUS_STEP_KEY] +        self.set_eip_status_icon(status) +        if status == "AUTH": +            self.set_eip_status(self.tr("Authenticating...")) +        elif status == "GET_CONFIG": +            self.set_eip_status(self.tr("Retrieving configuration...")) +        elif status == "CONNECTED": +            self.set_eip_status(self.tr("On")) +        elif status == "WAIT": +            self.set_eip_status(self.tr("Waiting to start...")) +        elif status == "ASSIGN_IP": +            self.set_eip_status(self.tr("Assigning IP")) +        elif status == "ALREADYRUNNING": +            # Put the following calls in Qt's event queue, otherwise +            # the UI won't update properly +            QtCore.QTimer.singleShot(0, self.stop_eip) +            QtCore.QTimer.singleShot(0, partial(self.set_eip_status, +                                                self.tr("Unable to start VPN, " +                                                        "it's already " +                                                        "running."))) +        else: +            self._set_eip_status(status) + +    def set_eip_status_icon(self, status): +        """ +        Given a status step from the VPN thread, set the icon properly + +        :param status: status step +        :type status: str +        """ +        selected_pixmap = self.ERROR_ICON +        tray_message = self.tr("Encryption is OFF") +        if status in ("WAIT", "AUTH", "GET_CONFIG", +                      "RECONNECTING", "ASSIGN_IP"): +            selected_pixmap = self.CONNECTING_ICON +            tray_message = self.tr("Turning ON") +        elif status in ("CONNECTED"): +            tray_message = self.tr("Encryption is ON") +            selected_pixmap = self.CONNECTED_ICON + +        self.set_icon(selected_pixmap) +        self._systray.setIcon(QtGui.QIcon(selected_pixmap)) +        self._action_eip_status.setText(tray_message) + +    def set_provider(self, provider): +        self.ui.lblProvider.setText(provider) diff --git a/src/leap/gui/ui/mainwindow.ui b/src/leap/gui/ui/mainwindow.ui index 4874a324..58827fe0 100644 --- a/src/leap/gui/ui/mainwindow.ui +++ b/src/leap/gui/ui/mainwindow.ui @@ -28,6 +28,75 @@    </property>    <widget class="QWidget" name="centralwidget">     <layout class="QGridLayout" name="gridLayout"> +    <item row="0" column="0" colspan="5"> +     <layout class="QGridLayout" name="gridLayout_4"> +      <item row="2" column="0"> +       <spacer name="horizontalSpacer_8"> +        <property name="orientation"> +         <enum>Qt::Horizontal</enum> +        </property> +        <property name="sizeHint" stdset="0"> +         <size> +          <width>40</width> +          <height>20</height> +         </size> +        </property> +       </spacer> +      </item> +      <item row="1" column="1"> +       <spacer name="horizontalSpacer_7"> +        <property name="orientation"> +         <enum>Qt::Horizontal</enum> +        </property> +        <property name="sizeHint" stdset="0"> +         <size> +          <width>40</width> +          <height>0</height> +         </size> +        </property> +       </spacer> +      </item> +      <item row="2" column="1"> +       <widget class="QLabel" name="lblNewUpdates"> +        <property name="text"> +         <string>There are new updates available, please restart.</string> +        </property> +        <property name="alignment"> +         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +        </property> +       </widget> +      </item> +      <item row="2" column="2"> +       <widget class="QPushButton" name="btnMore"> +        <property name="sizePolicy"> +         <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +          <horstretch>0</horstretch> +          <verstretch>0</verstretch> +         </sizepolicy> +        </property> +        <property name="text"> +         <string>More...</string> +        </property> +        <property name="flat"> +         <bool>true</bool> +        </property> +       </widget> +      </item> +      <item row="2" column="3"> +       <spacer name="horizontalSpacer_9"> +        <property name="orientation"> +         <enum>Qt::Horizontal</enum> +        </property> +        <property name="sizeHint" stdset="0"> +         <size> +          <width>40</width> +          <height>20</height> +         </size> +        </property> +       </spacer> +      </item> +     </layout> +    </item>      <item row="6" column="2">       <spacer name="verticalSpacer">        <property name="orientation"> @@ -41,39 +110,10 @@        </property>       </spacer>      </item> -    <item row="7" column="2"> -     <widget class="QLabel" name="label"> -      <property name="autoFillBackground"> -       <bool>false</bool> -      </property> -      <property name="text"> -       <string/> -      </property> -      <property name="pixmap"> -       <pixmap resource="../../../../data/resources/mainwindow.qrc">:/images/leap-color-big.png</pixmap> -      </property> -      <property name="alignment"> -       <set>Qt::AlignCenter</set> -      </property> -     </widget> -    </item> -    <item row="7" column="0" colspan="2"> -     <spacer name="horizontalSpacer"> -      <property name="orientation"> -       <enum>Qt::Horizontal</enum> -      </property> -      <property name="sizeHint" stdset="0"> -       <size> -        <width>40</width> -        <height>20</height> -       </size> -      </property> -     </spacer> -    </item>      <item row="10" column="0" colspan="5">       <widget class="QStackedWidget" name="stackedWidget">        <property name="currentIndex"> -       <number>0</number> +       <number>1</number>        </property>        <widget class="QWidget" name="loginPage">         <layout class="QGridLayout" name="gridLayout_2"> @@ -110,115 +150,29 @@        </widget>        <widget class="QWidget" name="page_2">         <layout class="QGridLayout" name="gridLayout_3"> -        <item row="0" column="0" colspan="6"> -         <widget class="QLabel" name="lblVPNStatusIcon"> -          <property name="text"> -           <string/> -          </property> -          <property name="pixmap"> -           <pixmap resource="../../../../data/resources/mainwindow.qrc">:/images/conn_error.png</pixmap> -          </property> -          <property name="alignment"> -           <set>Qt::AlignCenter</set> -          </property> -         </widget> -        </item> -        <item row="3" column="2"> -         <widget class="QLabel" name="lblUpload"> -          <property name="minimumSize"> -           <size> -            <width>70</width> -            <height>0</height> -           </size> -          </property> -          <property name="text"> -           <string>0.0 Kb</string> -          </property> -         </widget> -        </item> -        <item row="3" column="4"> -         <widget class="QLabel" name="lblDownload"> -          <property name="minimumSize"> -           <size> -            <width>70</width> -            <height>0</height> -           </size> -          </property> -          <property name="text"> -           <string>0.0 Kb</string> -          </property> -         </widget> -        </item> -        <item row="3" column="5"> -         <spacer name="horizontalSpacer_6"> -          <property name="orientation"> -           <enum>Qt::Horizontal</enum> -          </property> -          <property name="sizeHint" stdset="0"> -           <size> -            <width>40</width> -            <height>20</height> -           </size> -          </property> -         </spacer> -        </item> -        <item row="3" column="3"> -         <widget class="QLabel" name="label_7"> -          <property name="text"> -           <string/> -          </property> -          <property name="pixmap"> -           <pixmap resource="../../../../data/resources/mainwindow.qrc">:/images/Arrow-Up-32.png</pixmap> -          </property> -         </widget> -        </item> -        <item row="3" column="1"> -         <widget class="QLabel" name="label_5"> -          <property name="text"> -           <string/> -          </property> -          <property name="pixmap"> -           <pixmap resource="../../../../data/resources/mainwindow.qrc">:/images/Arrow-Down-32.png</pixmap> -          </property> -         </widget> -        </item> -        <item row="3" column="0"> -         <spacer name="horizontalSpacer_5"> -          <property name="orientation"> -           <enum>Qt::Horizontal</enum> -          </property> -          <property name="sizeHint" stdset="0"> -           <size> -            <width>40</width> -            <height>20</height> -           </size> -          </property> -         </spacer> -        </item> -        <item row="1" column="0" colspan="6"> -         <widget class="QLabel" name="lblEIPStatus"> -          <property name="text"> -           <string>Disconnected</string> -          </property> -          <property name="alignment"> -           <set>Qt::AlignCenter</set> -          </property> -          <property name="wordWrap"> -           <bool>true</bool> -          </property> -         </widget> -        </item> -        <item row="2" column="1" colspan="4"> -         <widget class="QPushButton" name="btnEipStartStop"> -          <property name="text"> -           <string>Turn Encryption ON</string> -          </property> -         </widget> +        <item row="0" column="0"> +         <layout class="QVBoxLayout" name="statusLayout"/>          </item>         </layout>        </widget>       </widget>      </item> +    <item row="7" column="2"> +     <widget class="QLabel" name="label"> +      <property name="autoFillBackground"> +       <bool>false</bool> +      </property> +      <property name="text"> +       <string/> +      </property> +      <property name="pixmap"> +       <pixmap resource="../../../../data/resources/mainwindow.qrc">:/images/leap-color-big.png</pixmap> +      </property> +      <property name="alignment"> +       <set>Qt::AlignCenter</set> +      </property> +     </widget> +    </item>      <item row="7" column="3" colspan="2">       <spacer name="horizontalSpacer_2">        <property name="orientation"> @@ -245,76 +199,20 @@        </property>       </spacer>      </item> -    <item row="0" column="0" colspan="5"> -     <layout class="QGridLayout" name="gridLayout_4"> -      <item row="2" column="0"> -       <spacer name="horizontalSpacer_8"> -        <property name="orientation"> -         <enum>Qt::Horizontal</enum> -        </property> -        <property name="sizeHint" stdset="0"> -         <size> -          <width>40</width> -          <height>20</height> -         </size> -        </property> -       </spacer> -      </item> -      <item row="1" column="1"> -       <spacer name="horizontalSpacer_7"> -        <property name="orientation"> -         <enum>Qt::Horizontal</enum> -        </property> -        <property name="sizeHint" stdset="0"> -         <size> -          <width>40</width> -          <height>0</height> -         </size> -        </property> -       </spacer> -      </item> -      <item row="2" column="1"> -       <widget class="QLabel" name="lblNewUpdates"> -        <property name="text"> -         <string>There are new updates available, please restart.</string> -        </property> -        <property name="alignment"> -         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -        </property> -       </widget> -      </item> -      <item row="2" column="2"> -       <widget class="QPushButton" name="btnMore"> -        <property name="sizePolicy"> -         <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> -          <horstretch>0</horstretch> -          <verstretch>0</verstretch> -         </sizepolicy> -        </property> -        <property name="text"> -         <string>More...</string> -        </property> -        <property name="flat"> -         <bool>true</bool> -        </property> -       </widget> -      </item> -      <item row="2" column="3"> -       <spacer name="horizontalSpacer_9"> -        <property name="orientation"> -         <enum>Qt::Horizontal</enum> -        </property> -        <property name="sizeHint" stdset="0"> -         <size> -          <width>40</width> -          <height>20</height> -         </size> -        </property> -       </spacer> -      </item> -     </layout> +    <item row="7" column="0" colspan="2"> +     <spacer name="horizontalSpacer"> +      <property name="orientation"> +       <enum>Qt::Horizontal</enum> +      </property> +      <property name="sizeHint" stdset="0"> +       <size> +        <width>40</width> +        <height>20</height> +       </size> +      </property> +     </spacer>      </item> -    <item row="9" column="2" colspan="3"> +    <item row="18" column="2">       <layout class="QHBoxLayout" name="horizontalLayout">        <item>         <spacer name="horizontalSpacer_10"> diff --git a/src/leap/gui/ui/statuspanel.ui b/src/leap/gui/ui/statuspanel.ui new file mode 100644 index 00000000..67f5f669 --- /dev/null +++ b/src/leap/gui/ui/statuspanel.ui @@ -0,0 +1,248 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>StatusPanel</class> + <widget class="QWidget" name="StatusPanel"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>506</width> +    <height>403</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Form</string> +  </property> +  <layout class="QVBoxLayout" name="verticalLayout"> +   <item> +    <widget class="QLabel" name="lblProvider"> +     <property name="styleSheet"> +      <string notr="true">font: bold;</string> +     </property> +     <property name="text"> +      <string>user@domain.org</string> +     </property> +     <property name="wordWrap"> +      <bool>true</bool> +     </property> +    </widget> +   </item> +   <item> +    <widget class="QWidget" name="status_rows" native="true"> +     <property name="styleSheet"> +      <string notr="true"/> +     </property> +     <layout class="QVBoxLayout" name="verticalLayout_3"> +      <property name="spacing"> +       <number>12</number> +      </property> +      <property name="leftMargin"> +       <number>16</number> +      </property> +      <property name="topMargin"> +       <number>0</number> +      </property> +      <property name="rightMargin"> +       <number>0</number> +      </property> +      <property name="bottomMargin"> +       <number>0</number> +      </property> +      <item> +       <layout class="QHBoxLayout" name="eip_status_row"> +        <property name="leftMargin"> +         <number>0</number> +        </property> +        <property name="topMargin"> +         <number>0</number> +        </property> +        <item> +         <widget class="QLabel" name="lblVPNStatusIcon"> +          <property name="maximumSize"> +           <size> +            <width>64</width> +            <height>64</height> +           </size> +          </property> +          <property name="text"> +           <string/> +          </property> +          <property name="pixmap"> +           <pixmap resource="../../../../data/resources/icons.qrc">:/images/light/64/network-eip-down.png</pixmap> +          </property> +          <property name="alignment"> +           <set>Qt::AlignCenter</set> +          </property> +         </widget> +        </item> +        <item> +         <layout class="QVBoxLayout" name="eip_split_row"> +          <property name="spacing"> +           <number>0</number> +          </property> +          <item> +           <layout class="QHBoxLayout" name="eip_controls"> +            <item> +             <widget class="QLabel" name="label"> +              <property name="text"> +               <string>Encrypted Internet: </string> +              </property> +             </widget> +            </item> +            <item> +             <widget class="QLabel" name="lblEIPStatus"> +              <property name="styleSheet"> +               <string notr="true">font: bold;</string> +              </property> +              <property name="text"> +               <string>Off</string> +              </property> +              <property name="textFormat"> +               <enum>Qt::AutoText</enum> +              </property> +              <property name="alignment"> +               <set>Qt::AlignCenter</set> +              </property> +              <property name="wordWrap"> +               <bool>false</bool> +              </property> +             </widget> +            </item> +            <item> +             <spacer name="horizontalSpacer"> +              <property name="orientation"> +               <enum>Qt::Horizontal</enum> +              </property> +              <property name="sizeHint" stdset="0"> +               <size> +                <width>40</width> +                <height>20</height> +               </size> +              </property> +             </spacer> +            </item> +            <item> +             <widget class="QPushButton" name="btnEipStartStop"> +              <property name="text"> +               <string>Turn On</string> +              </property> +             </widget> +            </item> +           </layout> +          </item> +          <item> +           <layout class="QHBoxLayout" name="eip_bandwidth"> +            <property name="spacing"> +             <number>4</number> +            </property> +            <property name="sizeConstraint"> +             <enum>QLayout::SetDefaultConstraint</enum> +            </property> +            <item> +             <widget class="QLabel" name="label_5"> +              <property name="text"> +               <string/> +              </property> +              <property name="pixmap"> +               <pixmap resource="../../../../data/resources/icons.qrc">:/images/light/16/down-arrow.png</pixmap> +              </property> +             </widget> +            </item> +            <item> +             <widget class="QLabel" name="lblUpload"> +              <property name="text"> +               <string>0.0 Kb</string> +              </property> +             </widget> +            </item> +            <item> +             <spacer name="horizontalSpacer_3"> +              <property name="orientation"> +               <enum>Qt::Horizontal</enum> +              </property> +              <property name="sizeType"> +               <enum>QSizePolicy::Fixed</enum> +              </property> +              <property name="sizeHint" stdset="0"> +               <size> +                <width>20</width> +                <height>20</height> +               </size> +              </property> +             </spacer> +            </item> +            <item> +             <widget class="QLabel" name="label_7"> +              <property name="text"> +               <string/> +              </property> +              <property name="pixmap"> +               <pixmap resource="../../../../data/resources/icons.qrc">:/images/light/16/up-arrow.png</pixmap> +              </property> +             </widget> +            </item> +            <item> +             <widget class="QLabel" name="lblDownload"> +              <property name="text"> +               <string>0.0 Kb</string> +              </property> +             </widget> +            </item> +            <item> +             <spacer name="horizontalSpacer_2"> +              <property name="orientation"> +               <enum>Qt::Horizontal</enum> +              </property> +              <property name="sizeHint" stdset="0"> +               <size> +                <width>40</width> +                <height>20</height> +               </size> +              </property> +             </spacer> +            </item> +           </layout> +          </item> +          <item> +           <spacer name="verticalSpacer_2"> +            <property name="orientation"> +             <enum>Qt::Vertical</enum> +            </property> +            <property name="sizeType"> +             <enum>QSizePolicy::Preferred</enum> +            </property> +            <property name="sizeHint" stdset="0"> +             <size> +              <width>0</width> +              <height>11</height> +             </size> +            </property> +           </spacer> +          </item> +         </layout> +        </item> +       </layout> +      </item> +     </layout> +    </widget> +   </item> +   <item> +    <spacer name="verticalSpacer"> +     <property name="orientation"> +      <enum>Qt::Vertical</enum> +     </property> +     <property name="sizeHint" stdset="0"> +      <size> +       <width>20</width> +       <height>40</height> +      </size> +     </property> +    </spacer> +   </item> +  </layout> + </widget> + <resources> +  <include location="../../../../data/resources/icons.qrc"/> + </resources> + <connections/> +</ui> | 
