Changeset 687:bb05f0618b5b for src
- Timestamp:
- 10/18/15 14:53:02 (9 years ago)
- Branch:
- cef
- Phase:
- public
- Location:
- src/mlx/gui
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/mlx/gui/flight.py
r675 r687 1 1 2 2 from mlx.gui.common import * 3 import mlx.gui.cef as cef 3 4 4 5 import mlx.const as const … … 17 18 import time 18 19 import os 20 import tempfile 19 21 20 22 #----------------------------------------------------------------------------- … … 1425 1427 #----------------------------------------------------------------------------- 1426 1428 1429 class RoutePage(Page): 1430 """The page containing the route and the flight level.""" 1431 def __init__(self, wizard): 1432 """Construct the page.""" 1433 super(RoutePage, self).__init__(wizard, xstr("route_title"), 1434 xstr("route_help"), 1435 completedHelp = xstr("route_chelp")) 1436 1437 alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5, 1438 xscale = 0.0, yscale = 0.0) 1439 1440 mainBox = gtk.VBox() 1441 alignment.add(mainBox) 1442 self.setMainWidget(alignment) 1443 1444 levelBox = gtk.HBox() 1445 1446 label = gtk.Label(xstr("route_level")) 1447 label.set_use_underline(True) 1448 levelBox.pack_start(label, True, True, 0) 1449 1450 self._cruiseLevel = gtk.SpinButton() 1451 self._cruiseLevel.set_increments(step = 10, page = 100) 1452 self._cruiseLevel.set_range(min = 0, max = 500) 1453 self._cruiseLevel.set_tooltip_text(xstr("route_level_tooltip")) 1454 self._cruiseLevel.set_numeric(True) 1455 self._cruiseLevel.connect("changed", self._cruiseLevelChanged) 1456 self._cruiseLevel.connect("value-changed", self._cruiseLevelChanged) 1457 label.set_mnemonic_widget(self._cruiseLevel) 1458 1459 levelBox.pack_start(self._cruiseLevel, False, False, 8) 1460 1461 alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1462 xscale = 0.0, yscale = 0.0) 1463 alignment.add(levelBox) 1464 1465 mainBox.pack_start(alignment, False, False, 0) 1466 1467 1468 routeBox = gtk.VBox() 1469 1470 alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1471 xscale = 0.0, yscale = 0.0) 1472 label = gtk.Label(xstr("route_route")) 1473 label.set_use_underline(True) 1474 alignment.add(label) 1475 routeBox.pack_start(alignment, True, True, 0) 1476 1477 routeWindow = gtk.ScrolledWindow() 1478 routeWindow.set_size_request(400, 80) 1479 routeWindow.set_shadow_type(gtk.ShadowType.IN if pygobject 1480 else gtk.SHADOW_IN) 1481 routeWindow.set_policy(gtk.PolicyType.AUTOMATIC if pygobject 1482 else gtk.POLICY_AUTOMATIC, 1483 gtk.PolicyType.AUTOMATIC if pygobject 1484 else gtk.POLICY_AUTOMATIC) 1485 1486 self._uppercasingRoute = False 1487 1488 self._route = gtk.TextView() 1489 self._route.set_tooltip_text(xstr("route_route_tooltip")) 1490 self._route.set_wrap_mode(WRAP_WORD) 1491 self._route.get_buffer().connect("changed", self._routeChanged) 1492 self._route.get_buffer().connect_after("insert-text", self._routeInserted) 1493 routeWindow.add(self._route) 1494 1495 label.set_mnemonic_widget(self._route) 1496 routeBox.pack_start(routeWindow, True, True, 0) 1497 1498 mainBox.pack_start(routeBox, True, True, 8) 1499 1500 alternateBox = gtk.HBox() 1501 1502 label = gtk.Label(xstr("route_altn")) 1503 label.set_use_underline(True) 1504 alternateBox.pack_start(label, True, True, 0) 1505 1506 self._alternate = gtk.Entry() 1507 self._alternate.set_width_chars(6) 1508 self._alternate.connect("changed", self._alternateChanged) 1509 self._alternate.set_tooltip_text(xstr("route_altn_tooltip")) 1510 label.set_mnemonic_widget(self._alternate) 1511 1512 alternateBox.pack_start(self._alternate, False, False, 8) 1513 1514 alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1515 xscale = 0.0, yscale = 0.0) 1516 alignment.add(alternateBox) 1517 1518 mainBox.pack_start(alignment, False, False, 0) 1519 1520 self.addCancelFlightButton() 1521 1522 self._backButton = self.addPreviousButton(clicked = self._backClicked) 1523 self._button = self.addNextButton(clicked = self._forwardClicked) 1524 1525 @property 1526 def filedCruiseLevel(self): 1527 """Get the filed cruise level.""" 1528 return self._cruiseLevel.get_value_as_int() 1529 1530 @property 1531 def route(self): 1532 """Get the route.""" 1533 return self._getRoute() 1534 1535 @property 1536 def alternate(self): 1537 """Get the ICAO code of the alternate airport.""" 1538 return self._alternate.get_text() 1539 1540 def activate(self): 1541 """Setup the route from the booked flight.""" 1542 self._cruiseLevel.set_value(0) 1543 self._cruiseLevel.set_text("") 1544 self._route.get_buffer().set_text(self._wizard._bookedFlight.route) 1545 self._updateForwardButton() 1546 1547 def _getRoute(self): 1548 """Get the text of the route.""" 1549 buffer = self._route.get_buffer() 1550 return buffer.get_text(buffer.get_start_iter(), 1551 buffer.get_end_iter(), True) 1552 1553 def _updateForwardButton(self): 1554 """Update the sensitivity of the forward button.""" 1555 cruiseLevelText = self._cruiseLevel.get_text() 1556 cruiseLevel = int(cruiseLevelText) if cruiseLevelText else 0 1557 alternate = self._alternate.get_text() 1558 self._button.set_sensitive(cruiseLevel>=50 and self._getRoute()!="" and 1559 len(alternate)==4) 1560 1561 def _cruiseLevelChanged(self, *arg): 1562 """Called when the cruise level has changed.""" 1563 self._updateForwardButton() 1564 1565 def _routeChanged(self, textBuffer): 1566 """Called when the route has changed.""" 1567 if not self._uppercasingRoute: 1568 self._updateForwardButton() 1569 1570 def _routeInserted(self, textBuffer, iter, text, length): 1571 """Called when new characters are inserted into the route. 1572 1573 It uppercases all characters.""" 1574 if not self._uppercasingRoute: 1575 self._uppercasingRoute = True 1576 1577 iter1 = iter.copy() 1578 iter1.backward_chars(length) 1579 textBuffer.delete(iter, iter1) 1580 1581 textBuffer.insert(iter, text.upper()) 1582 1583 self._uppercasingRoute = False 1584 1585 def _alternateChanged(self, entry): 1586 """Called when the alternate airport has changed.""" 1587 entry.set_text(entry.get_text().upper()) 1588 self._updateForwardButton() 1589 1590 def _backClicked(self, button): 1591 """Called when the Back button is pressed.""" 1592 self.goBack() 1593 1594 def _forwardClicked(self, button): 1595 """Called when the Forward button is clicked.""" 1596 if self._wizard.gui.config.useSimBrief: 1597 self._wizard.nextPage() 1598 else: 1599 self._wizard.jumpPage(3) 1600 1601 #----------------------------------------------------------------------------- 1602 1603 class SimBriefSetupPage(Page): 1604 """Page for setting up some parameters for SimBrief.""" 1605 monthNum2Name = [ 1606 "JAN", 1607 "FEB", 1608 "MAR", 1609 "APR", 1610 "MAY", 1611 "JUN", 1612 "JUL", 1613 "AUG", 1614 "SEP", 1615 "OCT", 1616 "NOV", 1617 "DEC" 1618 ] 1619 1620 @staticmethod 1621 def getHTMLFilePath(): 1622 """Get the path of the HTML file to contain the generated flight 1623 plan.""" 1624 if os.name=="nt": 1625 return os.path.join(tempfile.gettempdir(), 1626 "mlx_simbrief" + 1627 (".secondary" if secondaryInstallation else "") + 1628 ".html") 1629 else: 1630 import pwd 1631 return os.path.join(tempfile.gettempdir(), 1632 "mlx_simbrief." + pwd.getpwuid(os.getuid())[0] + "" + 1633 (".secondary" if secondaryInstallation else "") + 1634 ".html") 1635 1636 def __init__(self, wizard): 1637 """Construct the setup page.""" 1638 1639 super(SimBriefSetupPage, self).__init__(wizard, 1640 "SimBrief setup", 1641 "Complete the following data to " 1642 "start generating your " 1643 "SimBrief briefing.", 1644 "Your SimBrief briefing was " 1645 "generated with the following " 1646 "data.") 1647 1648 alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5, 1649 xscale = 0.0, yscale = 0.0) 1650 1651 table = gtk.Table(7, 3) 1652 table.set_row_spacings(4) 1653 table.set_col_spacings(16) 1654 table.set_homogeneous(False) 1655 alignment.add(table) 1656 self.setMainWidget(alignment) 1657 1658 label = gtk.Label("_Username:") 1659 label.set_use_underline(True) 1660 label.set_alignment(0.0, 0.5) 1661 table.attach(label, 0, 1, 0, 1) 1662 1663 self._userName = gtk.Entry() 1664 self._userName.set_width_chars(16) 1665 self._userName.connect("changed", 1666 lambda button: self._updateForwardButton()) 1667 self._userName.set_tooltip_text("Your SimBrief username") 1668 table.attach(self._userName, 1, 2, 0, 1) 1669 label.set_mnemonic_widget(self._userName) 1670 1671 label = gtk.Label("_Password:") 1672 label.set_use_underline(True) 1673 label.set_alignment(0.0, 0.5) 1674 table.attach(label, 0, 1, 1, 2) 1675 1676 self._password = gtk.Entry() 1677 self._password.set_visibility(False) 1678 self._password.connect("changed", 1679 lambda button: self._updateForwardButton()) 1680 self._password.set_tooltip_text("Your SimBrief password") 1681 table.attach(self._password, 1, 2, 1, 2) 1682 label.set_mnemonic_widget(self._password) 1683 1684 self.addCancelFlightButton() 1685 1686 self._backButton = self.addPreviousButton(clicked = self._backClicked) 1687 self._button = self.addNextButton(clicked = self._forwardClicked) 1688 1689 def activate(self): 1690 """Activate the SimBrief setup page""" 1691 self._updateForwardButton() 1692 1693 def _updateForwardButton(self): 1694 """Update the sensitivity of the forward button.""" 1695 self._button.set_sensitive(len(self._userName.get_text())>0 and 1696 len(self._password.get_text())>0) 1697 1698 def _backClicked(self, button): 1699 """Called when the Back button is pressed.""" 1700 self.goBack() 1701 1702 def _forwardClicked(self, button): 1703 if self._completed: 1704 self._wizard.nextPage() 1705 else: 1706 plan = self._getPlan() 1707 print "plan:", plan 1708 1709 userName = self._userName.get_text() 1710 password = self._password.get_text() 1711 1712 self._wizard.gui.beginBusy("Calling SimBrief...") 1713 1714 cef.callSimBrief(plan, 1715 lambda count: (userName, password), 1716 self._simBriefProgressCallback, 1717 SimBriefSetupPage.getHTMLFilePath()) 1718 1719 startSound(const.SOUND_NOTAM) 1720 1721 def _simBriefProgressCallback(self, message, done): 1722 """Called by the SimBrief handling thread.""" 1723 gobject.idle_add(self._simBriefProgress, message, done) 1724 1725 def _simBriefProgress(self, message, done): 1726 """The real SimBrief progress handler.""" 1727 if done: 1728 self._wizard.gui.endBusy() 1729 self._wizard.nextPage() 1730 else: 1731 self._wizard.gui.updateBusyState(message) 1732 1733 def _getPlan(self): 1734 """Get the flight plan data for SimBrief.""" 1735 plan = { 1736 "airline": "MAH", 1737 "selcal": "XXXX", 1738 "fuelfactor": "P000", 1739 "contpct": "0.05", 1740 "resvrule": "45", 1741 "taxiout": "10", 1742 "taxiin": "10", 1743 "civalue": "AUTO" 1744 } 1745 1746 wizard = self._wizard 1747 gui = wizard.gui 1748 1749 loginResult = wizard.loginResult 1750 plan["cpt"] = loginResult.pilotName 1751 plan["pid"] = loginResult.pilotID 1752 1753 bookedFlight = wizard.bookedFlight 1754 plan["fltnum"] = wizard.bookedFlight.callsign[2:] 1755 plan["type"] = const.icaoCodes[bookedFlight.aircraftType] 1756 plan["orig"] = bookedFlight.departureICAO 1757 plan["dest"] = bookedFlight.arrivalICAO 1758 plan["reg"] = bookedFlight.tailNumber 1759 plan["fin"] = bookedFlight.tailNumber[3:] 1760 plan["pax"] = str(bookedFlight.numPassengers) 1761 1762 departureTime = bookedFlight.departureTime 1763 plan["date"] = "%d%s%d" % (departureTime.day, 1764 SimBriefSetupPage.monthNum2Name[departureTime.month-1], 1765 departureTime.year%100) 1766 plan["deph"] = str(departureTime.hour) 1767 plan["depm"] = str(departureTime.minute) 1768 1769 arrivalTime = bookedFlight.arrivalTime 1770 plan["steh"] = str(arrivalTime.hour) 1771 plan["stem"] = str(arrivalTime.minute) 1772 1773 plan["manualzfw"] = str(wizard.zfw) 1774 plan["cargo"] = str(wizard.bagWeight + wizard.cargoWeight + wizard.mailWeight) 1775 1776 plan["route"] = wizard.route 1777 plan["fl"] = str(wizard.filedCruiseAltitude) 1778 plan["altn"] = wizard.alternate 1779 1780 plan["addedfuel"] = "2.5" # FIXME: query 1781 plan["origrwy"] = "" # FIXME: query 1782 plan["destrwy"] = "" # FIXME: query 1783 plan["climb"] = "250/300/78" # FIXME: query 1784 plan["descent"] = "80/280/250" # FIXME: query 1785 plan["cruise"] = "LRC" # FIXME: query 1786 1787 return plan 1788 1789 #----------------------------------------------------------------------------- 1790 1791 class SimBriefingPage(Page): 1792 """Page to display the SimBrief HTML briefing.""" 1793 def __init__(self, wizard): 1794 """Construct the setup page.""" 1795 1796 super(SimBriefingPage, self).__init__(wizard, 1797 "SimBrief flight plan", "") 1798 1799 self._alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5, 1800 xscale = 1.0, yscale = 1.0) 1801 1802 self.setMainWidget(self._alignment) 1803 1804 self.addCancelFlightButton() 1805 1806 self.addPreviousButton(clicked = self._backClicked) 1807 1808 self._button = self.addNextButton(clicked = self._forwardClicked) 1809 self._button.set_label(xstr("briefing_button")) 1810 self._button.set_has_tooltip(False) 1811 self._button.set_use_stock(False) 1812 1813 def activate(self): 1814 """Activate the SimBrief flight plan page""" 1815 container = cef.getContainer() 1816 self._alignment.add(container) 1817 1818 self._browser = \ 1819 cef.startInContainer(container, 1820 "file://" + SimBriefSetupPage.getHTMLFilePath()) 1821 1822 def _backClicked(self, button): 1823 """Called when the Back button has been pressed.""" 1824 self.goBack() 1825 1826 def _forwardClicked(self, button): 1827 """Called when the Forward button has been pressed.""" 1828 if not self._completed: 1829 self._button.set_label(xstr("button_next")) 1830 self._button.set_tooltip_text(xstr("button_next_tooltip")) 1831 self._wizard.usingSimBrief = True 1832 self.complete() 1833 1834 self._wizard.nextPage() 1835 1836 #----------------------------------------------------------------------------- 1837 1427 1838 class FuelTank(gtk.VBox): 1428 1839 """Widget for the fuel tank.""" … … 1660 2071 self._wizard.gui.beginBusy(xstr("fuel_pump_busy")) 1661 2072 self._pump() 2073 elif self._wizard.usingSimBrief: 2074 self._wizard.jumpPage(3) 1662 2075 else: 1663 2076 self._wizard.nextPage() … … 1705 2118 if fuelTank is None: 1706 2119 self._wizard.gui.endBusy() 1707 self._wizard.nextPage() 2120 if self._wizard.usingSimBrief: 2121 self._wizard.gui.startMonitoring() 2122 self._wizard.jumpPage(3) 2123 else: 2124 bookedFlight = self._wizard._bookedFlight 2125 self._wizard.gui.beginBusy(xstr("route_down_notams")) 2126 self._wizard.gui.webHandler.getNOTAMs(self._notamsCallback, 2127 bookedFlight.departureICAO, 2128 bookedFlight.arrivalICAO) 2129 startSound(const.SOUND_NOTAM) 1708 2130 else: 1709 2131 currentLevel = fuelTank.currentWeight / fuelTank.capacity … … 1719 2141 currentLevel)]) 1720 2142 gobject.timeout_add(50, self._pump) 1721 1722 #-----------------------------------------------------------------------------1723 1724 class RoutePage(Page):1725 """The page containing the route and the flight level."""1726 def __init__(self, wizard):1727 """Construct the page."""1728 super(RoutePage, self).__init__(wizard, xstr("route_title"),1729 xstr("route_help"),1730 completedHelp = xstr("route_chelp"))1731 1732 alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,1733 xscale = 0.0, yscale = 0.0)1734 1735 mainBox = gtk.VBox()1736 alignment.add(mainBox)1737 self.setMainWidget(alignment)1738 1739 levelBox = gtk.HBox()1740 1741 label = gtk.Label(xstr("route_level"))1742 label.set_use_underline(True)1743 levelBox.pack_start(label, True, True, 0)1744 1745 self._cruiseLevel = gtk.SpinButton()1746 self._cruiseLevel.set_increments(step = 10, page = 100)1747 self._cruiseLevel.set_range(min = 0, max = 500)1748 self._cruiseLevel.set_tooltip_text(xstr("route_level_tooltip"))1749 self._cruiseLevel.set_numeric(True)1750 self._cruiseLevel.connect("changed", self._cruiseLevelChanged)1751 self._cruiseLevel.connect("value-changed", self._cruiseLevelChanged)1752 label.set_mnemonic_widget(self._cruiseLevel)1753 1754 levelBox.pack_start(self._cruiseLevel, False, False, 8)1755 1756 alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,1757 xscale = 0.0, yscale = 0.0)1758 alignment.add(levelBox)1759 1760 mainBox.pack_start(alignment, False, False, 0)1761 1762 1763 routeBox = gtk.VBox()1764 1765 alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,1766 xscale = 0.0, yscale = 0.0)1767 label = gtk.Label(xstr("route_route"))1768 label.set_use_underline(True)1769 alignment.add(label)1770 routeBox.pack_start(alignment, True, True, 0)1771 1772 routeWindow = gtk.ScrolledWindow()1773 routeWindow.set_size_request(400, 80)1774 routeWindow.set_shadow_type(gtk.ShadowType.IN if pygobject1775 else gtk.SHADOW_IN)1776 routeWindow.set_policy(gtk.PolicyType.AUTOMATIC if pygobject1777 else gtk.POLICY_AUTOMATIC,1778 gtk.PolicyType.AUTOMATIC if pygobject1779 else gtk.POLICY_AUTOMATIC)1780 1781 self._uppercasingRoute = False1782 1783 self._route = gtk.TextView()1784 self._route.set_tooltip_text(xstr("route_route_tooltip"))1785 self._route.set_wrap_mode(WRAP_WORD)1786 self._route.get_buffer().connect("changed", self._routeChanged)1787 self._route.get_buffer().connect_after("insert-text", self._routeInserted)1788 routeWindow.add(self._route)1789 1790 label.set_mnemonic_widget(self._route)1791 routeBox.pack_start(routeWindow, True, True, 0)1792 1793 mainBox.pack_start(routeBox, True, True, 8)1794 1795 self.addCancelFlightButton()1796 1797 self._backButton = self.addPreviousButton(clicked = self._backClicked)1798 self._button = self.addNextButton(clicked = self._forwardClicked)1799 1800 @property1801 def filedCruiseLevel(self):1802 """Get the filed cruise level."""1803 return self._cruiseLevel.get_value_as_int()1804 1805 @property1806 def route(self):1807 """Get the route."""1808 return self._getRoute()1809 1810 def activate(self):1811 """Setup the route from the booked flight."""1812 self._cruiseLevel.set_value(0)1813 self._cruiseLevel.set_text("")1814 self._route.get_buffer().set_text(self._wizard._bookedFlight.route)1815 self._updateForwardButton()1816 1817 def _getRoute(self):1818 """Get the text of the route."""1819 buffer = self._route.get_buffer()1820 return buffer.get_text(buffer.get_start_iter(),1821 buffer.get_end_iter(), True)1822 1823 def _updateForwardButton(self):1824 """Update the sensitivity of the forward button."""1825 cruiseLevelText = self._cruiseLevel.get_text()1826 cruiseLevel = int(cruiseLevelText) if cruiseLevelText else 01827 self._button.set_sensitive(cruiseLevel>=50 and self._getRoute()!="")1828 1829 def _cruiseLevelChanged(self, *arg):1830 """Called when the cruise level has changed."""1831 self._updateForwardButton()1832 1833 def _routeChanged(self, textBuffer):1834 """Called when the route has changed."""1835 if not self._uppercasingRoute:1836 self._updateForwardButton()1837 1838 def _routeInserted(self, textBuffer, iter, text, length):1839 """Called when new characters are inserted into the route.1840 1841 It uppercases all characters."""1842 if not self._uppercasingRoute:1843 self._uppercasingRoute = True1844 1845 iter1 = iter.copy()1846 iter1.backward_chars(length)1847 textBuffer.delete(iter, iter1)1848 1849 textBuffer.insert(iter, text.upper())1850 1851 self._uppercasingRoute = False1852 1853 def _backClicked(self, button):1854 """Called when the Back button is pressed."""1855 self.goBack()1856 1857 def _forwardClicked(self, button):1858 """Called when the Forward button is clicked."""1859 if self._completed:1860 self._wizard.nextPage()1861 else:1862 bookedFlight = self._wizard._bookedFlight1863 self._wizard.gui.beginBusy(xstr("route_down_notams"))1864 self._wizard.gui.webHandler.getNOTAMs(self._notamsCallback,1865 bookedFlight.departureICAO,1866 bookedFlight.arrivalICAO)1867 startSound(const.SOUND_NOTAM)1868 2143 1869 2144 def _notamsCallback(self, returned, result): … … 3578 3853 self._payloadIndex = len(self._pages) 3579 3854 self._pages.append(TimePage(self)) 3580 self._pages.append(FuelPage(self))3581 3855 self._routePage = RoutePage(self) 3582 3856 self._pages.append(self._routePage) 3857 self._simBriefSetupPage = SimBriefSetupPage(self) 3858 self._pages.append(self._simBriefSetupPage) 3859 self._simBriefingPage = SimBriefingPage(self) 3860 self._pages.append(self._simBriefingPage) 3861 self._pages.append(FuelPage(self)) 3583 3862 self._departureBriefingPage = BriefingPage(self, True) 3584 3863 self._pages.append(self._departureBriefingPage) … … 3741 4020 3742 4021 @property 4022 def alternate(self): 4023 """Get the ICAO code of the alternate airport.""" 4024 return self._routePage.alternate 4025 4026 @property 3743 4027 def departureMETAR(self): 3744 4028 """Get the METAR of the departure airport.""" … … 3839 4123 """Get whether the flight was online or not.""" 3840 4124 return self._finishPage.online 4125 4126 @property 4127 def usingSimBrief(self): 4128 """Indicate if we are using a SimBrief briefing or not.""" 4129 return self._usingSimBrief 4130 4131 @usingSimBrief.setter 4132 def usingSimBrief(self, x): 4133 """Set whether we are using a SimBrief briefing or not.""" 4134 self._usingSimBrief = x 3841 4135 3842 4136 def nextPage(self, finalize = True): … … 3895 4189 self._arrivalNOTAMs = None 3896 4190 self._arrivalMETAR = None 4191 self._usingSimBrief = False 3897 4192 3898 4193 firstPage = 0 if self._loginResult is None else 1 -
src/mlx/gui/gui.py
r686 r687 1494 1494 """Called when CEF has been initialized.""" 1495 1495 self._acars.start() 1496 cef.initializeSimBrief() 1496 1497 1497 1498 def _bugReportSentCallback(self, returned, result):
Note:
See TracChangeset
for help on using the changeset viewer.