Ignore:
Timestamp:
10/25/15 08:02:04 (9 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
cef
Phase:
public
Message:

Added a dialog to query the credentials if login fails (re #279).[H

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/mlx/gui/flight.py

    r698 r700  
    1919import os
    2020import tempfile
     21import threading
    2122
    2223#-----------------------------------------------------------------------------
     
    16031604#-----------------------------------------------------------------------------
    16041605
     1606class SimBriefCredentialsDialog(gtk.Dialog):
     1607    """A dialog window to ask for SimBrief credentials."""
     1608    def __init__(self, gui, userName, password, rememberPassword):
     1609        """Construct the dialog."""
     1610        super(SimBriefCredentialsDialog, self).__init__(WINDOW_TITLE_BASE + " - " +
     1611                                                        xstr("simbrief_credentials_title"),
     1612                                                        gui.mainWindow,
     1613                                                        DIALOG_MODAL)
     1614        self.add_button(xstr("button_cancel"), RESPONSETYPE_CANCEL)
     1615        self.add_button(xstr("button_ok"), RESPONSETYPE_OK)
     1616
     1617        contentArea = self.get_content_area()
     1618
     1619        contentAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
     1620                                         xscale = 0.0, yscale = 0.0)
     1621        contentAlignment.set_padding(padding_top = 4, padding_bottom = 16,
     1622                                     padding_left = 8, padding_right = 8)
     1623
     1624        contentArea.pack_start(contentAlignment, False, False, 0)
     1625
     1626        contentVBox = gtk.VBox()
     1627        contentAlignment.add(contentVBox)
     1628
     1629        label = gtk.Label(xstr("simbrief_login_failed"))
     1630        label.set_alignment(0.0, 0.0)
     1631
     1632        contentVBox.pack_start(label, False, False, 0)
     1633
     1634        tableAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
     1635                                       xscale = 0.0, yscale = 0.0)
     1636        tableAlignment.set_padding(padding_top = 24, padding_bottom = 0,
     1637                                   padding_left = 0, padding_right = 0)
     1638
     1639        table = gtk.Table(3, 2)
     1640        table.set_row_spacings(4)
     1641        table.set_col_spacings(16)
     1642        table.set_homogeneous(False)
     1643
     1644        tableAlignment.add(table)
     1645        contentVBox.pack_start(tableAlignment, True, True, 0)
     1646
     1647        label = gtk.Label(xstr("simbrief_username"))
     1648        label.set_use_underline(True)
     1649        label.set_alignment(0.0, 0.5)
     1650        table.attach(label, 0, 1, 0, 1)
     1651
     1652        self._userName = gtk.Entry()
     1653        self._userName.set_width_chars(16)
     1654        #self._userName.connect("changed",
     1655        #                       lambda button: self._updateForwardButton())
     1656        self._userName.set_tooltip_text(xstr("simbrief_username_tooltip"))
     1657        self._userName.set_text(userName)
     1658        table.attach(self._userName, 1, 2, 0, 1)
     1659        label.set_mnemonic_widget(self._userName)
     1660
     1661        label = gtk.Label(xstr("simbrief_password"))
     1662        label.set_use_underline(True)
     1663        label.set_alignment(0.0, 0.5)
     1664        table.attach(label, 0, 1, 1, 2)
     1665
     1666        self._password = gtk.Entry()
     1667        self._password.set_visibility(False)
     1668        #self._password.connect("changed",
     1669        #                       lambda button: self._updateForwardButton())
     1670        self._password.set_tooltip_text(xstr("simbrief_password_tooltip"))
     1671        self._password.set_text(password)
     1672        table.attach(self._password, 1, 2, 1, 2)
     1673        label.set_mnemonic_widget(self._password)
     1674
     1675        self._rememberButton = gtk.CheckButton(xstr("simbrief_remember_password"))
     1676        self._rememberButton.set_use_underline(True)
     1677        self._rememberButton.set_tooltip_text(xstr("simbrief_remember_tooltip"))
     1678        self._rememberButton.set_active(rememberPassword)
     1679        table.attach(self._rememberButton, 1, 2, 2, 3, ypadding = 8)
     1680
     1681    @property
     1682    def userName(self):
     1683        """Get the user name entered."""
     1684        return self._userName.get_text()
     1685
     1686    @property
     1687    def password(self):
     1688        """Get the password entered."""
     1689        return self._password.get_text()
     1690
     1691    @property
     1692    def rememberPassword(self):
     1693        """Get whether the password is to be remembered."""
     1694        return self._rememberButton.get_active()
     1695
     1696    def run(self):
     1697        """Run the dialog."""
     1698        self.show_all()
     1699
     1700        response = super(SimBriefCredentialsDialog, self).run()
     1701
     1702        self.hide()
     1703
     1704        return response
     1705
     1706#-----------------------------------------------------------------------------
     1707
    16051708class SimBriefSetupPage(Page):
    16061709    """Page for setting up some parameters for SimBrief."""
     
    17021805        table.attach(self._rememberButton, 1, 2, 2, 3, ypadding = 8)
    17031806
     1807        self._credentialsCondition = threading.Condition()
     1808        self._credentialsAvailable = False
     1809        self._credentialsUserName = None
     1810        self._credentialsPassword = None
     1811
    17041812        self.addCancelFlightButton()
    17051813
     
    17161824
    17171825        self._updateForwardButton()
    1718 
    17191826
    17201827    def _updateForwardButton(self):
     
    17451852            print "plan:", plan
    17461853
    1747             userName = self._userName.get_text()
    1748             password = self._password.get_text()
    1749 
    17501854            self._wizard.gui.beginBusy("Calling SimBrief...")
    17511855
    17521856            cef.callSimBrief(plan,
    1753                              lambda count: (userName, password),
     1857                             self._getCredentialsCallback,
    17541858                             self._simBriefProgressCallback,
    17551859                             SimBriefSetupPage.getHTMLFilePath())
    17561860
    17571861            startSound(const.SOUND_NOTAM)
     1862
     1863    def _getCredentialsCallback(self, count):
     1864        """Called when the SimBrief home page requests the credentials."""
     1865        with self._credentialsCondition:
     1866            self._credentialsAvailable = False
     1867
     1868            gobject.idle_add(self._getCredentials, count)
     1869
     1870            while not self._credentialsAvailable:
     1871                self._credentialsCondition.wait()
     1872
     1873            return (self._credentialsUserName, self._credentialsPassword)
     1874
     1875    def _getCredentials(self, count):
     1876        """Get the credentials.
     1877
     1878        If count is 0, the user name and password entered into the setup page
     1879        are returned. Otherwise a dialog box is displayed informing the user of
     1880        invalid credentials and requesting another set of them."""
     1881        with self._credentialsCondition:
     1882            if count==0:
     1883                self._credentialsUserName = self._userName.get_text()
     1884                self._credentialsPassword = self._password.get_text()
     1885            else:
     1886                gui = self._wizard.gui
     1887                config = gui.config
     1888
     1889                dialog = SimBriefCredentialsDialog(gui,
     1890                                                   config.simBriefUserName,
     1891                                                   config.simBriefPassword,
     1892                                                   config.rememberSimBriefPassword)
     1893                response = dialog.run()
     1894
     1895                if response==RESPONSETYPE_OK:
     1896                    self._credentialsUserName = dialog.userName
     1897                    self._userName.set_text(self._credentialsUserName)
     1898                    self._credentialsPassword = dialog.password
     1899                    self._password.set_text(self._credentialsPassword)
     1900                    rememberPassword = dialog.rememberPassword
     1901
     1902                    config.simBriefUserName = self._credentialsUserName
     1903
     1904                    config.simBriefPassword = \
     1905                        self._credentialsPassword if rememberPassword else ""
     1906                    config.rememberSimBriefPassword = rememberPassword
     1907
     1908                    config.save()
     1909                else:
     1910                    self._credentialsUserName = None
     1911                    self._credentialsPassword = None
     1912
     1913            self._credentialsAvailable = True
     1914            self._credentialsCondition.notify()
    17581915
    17591916    def _simBriefProgressCallback(self, progress, result, flightInfo):
Note: See TracChangeset for help on using the changeset viewer.