Ignore:
Timestamp:
04/30/12 08:25:14 (13 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
Phase:
public
Message:

Plane position updating works

Location:
src/mlx/gui
Files:
2 edited

Legend:

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

    r126 r130  
    416416            self._wizard.getFleet(self._fleetRetrieved)
    417417        else:
    418             self._nextDistance = 2
    419             self._wizard.jumpPage(2)
    420 
     418            self._wizard.updatePlane(self._planeUpdated,
     419                                     flight.tailNumber,
     420                                     const.PLANE_AWAY)
    421421    def _fleetRetrieved(self, fleet):
    422422        """Called when the fleet has been retrieved."""
     
    437437                self._nextDistance = 1
    438438                self._wizard.nextPage()
     439
     440    def _planeUpdated(self, success):
     441        """Callback for the plane updating."""
     442        self._nextDistance = 2
     443        self._wizard.jumpPage(2)
    439444       
    440445#-----------------------------------------------------------------------------
     
    509514            self._wizard._departureGate = gateNumber
    510515
    511             #self._wizard._updatePlane(self._planeUpdated,
    512             #                          self._wizard._bookedFlight.tailNumber,
    513             #                          const.PLANE_HOME,
    514             #                          gateNumber)
    515        
    516         self._wizard.nextPage()
     516            self._wizard.updatePlane(self._planeUpdated,
     517                                     self._wizard._bookedFlight.tailNumber,
     518                                     const.PLANE_HOME, gateNumber)
     519        else:
     520            self._wizard.nextPage()
    517521
    518522    def _planeUpdated(self, success):
     
    16651669    def _forwardClicked(self, button):
    16661670        """Called when the forward button is clicked."""
     1671        if not self._completed and \
     1672           self._wizard.bookedFlight.arrivalICAO=="LHBP":
     1673            self._wizard.getFleet(callback = self._fleetRetrieved,
     1674                                  force = True)
     1675        else:
     1676            self._wizard.nextPage()
     1677
     1678    def _fleetRetrieved(self, fleet):
     1679        """Callback for the fleet retrieval."""
    16671680        self._wizard.nextPage()
    16681681
     
    16841697                                  xscale = 0.0, yscale = 0.0)
    16851698
    1686         table = gtk.Table(7, 2)
     1699        table = gtk.Table(8, 2)
    16871700        table.set_row_spacings(4)
    16881701        table.set_col_spacings(16)
     
    17861799        table.attach(onlineFlightAlignment, 1, 2, 6, 7)
    17871800
     1801        labelAlignment = gtk.Alignment(xalign = 1.0, xscale = 0.0,
     1802                                       yalign = 0.5, yscale = 0.0)
     1803        self._gateLabel = gtk.Label(xstr("finish_gate"))
     1804        self._gateLabel.set_use_underline(True)
     1805        labelAlignment.add(self._gateLabel)
     1806        table.attach(labelAlignment, 0, 1, 7, 8)
     1807
     1808        self._gatesModel = gtk.ListStore(str)
     1809
     1810        self._gate = gtk.ComboBox(model = self._gatesModel)
     1811        renderer = gtk.CellRendererText()
     1812        self._gate.pack_start(renderer, True)
     1813        self._gate.add_attribute(renderer, "text", 0)
     1814        self._gate.set_tooltip_text(xstr("finish_gate_tooltip"))
     1815        self._gate.connect("changed", self._gateChanged)               
     1816        gateAlignment = gtk.Alignment(xalign=0.0, xscale=1.0)
     1817        gateAlignment.add(self._gate)
     1818        table.attach(gateAlignment, 1, 2, 7, 8)
     1819        self._gateLabel.set_mnemonic_widget(self._gate)
     1820
    17881821        self.addPreviousButton(clicked = self._backClicked)
    17891822
     
    18341867        self._onlineFlight.set_active(True)
    18351868
     1869        self._gatesModel.clear()
     1870        if self._wizard.bookedFlight.arrivalICAO=="LHBP":
     1871            occupiedGates = self._wizard._fleet.getOccupiedGateNumbers()
     1872            for gateNumber in const.lhbpGateNumbers:
     1873                if gateNumber not in occupiedGates:
     1874                    self._gatesModel.append([gateNumber])
     1875            self._gateLabel.set_sensitive(True)
     1876            self._gate.set_sensitive(True)
     1877            self._gate.set_active(-1)
     1878        else:
     1879            self._gateLabel.set_sensitive(False)
     1880            self._gate.set_sensitive(False)
     1881
    18361882    def _backClicked(self, button):
    18371883        """Called when the Back button is pressed."""
    18381884        self.goBack()
    18391885
     1886    def _updateButtons(self):
     1887        """Update the sensitivity state of the buttons."""
     1888        sensitive = self._flightType.get_active()>=0 and \
     1889                    (self._gatesModel.get_iter_first() is None or
     1890                     self._gate.get_active()>=0)
     1891       
     1892        #self._saveButton.set_sensitive(sensitive)
     1893        self._sendButton.set_sensitive(sensitive)       
     1894
    18401895    def _flightTypeChanged(self, comboBox):
    18411896        """Called when the flight type has changed."""
    1842         index = self._flightType.get_active()
    1843         flightTypeIsValid = index>=0
    1844         #self._saveButton.set_sensitive(flightTypeIsValid)
    1845         self._sendButton.set_sensitive(flightTypeIsValid)
     1897        self._updateButtons()
     1898
     1899    def _gateChanged(self, comboBox):
     1900        """Called when the arrival gate has changed."""
     1901        self._updateButtons()
    18461902
    18471903    def _sendClicked(self, button):
     
    18881944        dialog.run()
    18891945        dialog.hide()
     1946
     1947        if returned and result.success:
     1948            bookedFlight = self._wizard.bookedFlight
     1949            if bookedFlight.arrivalICAO=="LHBP":
     1950                iter = self._gate.get_active_iter()               
     1951                gateNumber = None if iter is None \
     1952                             else self._gatesModel.get_value(iter, 0)
     1953               
     1954                status = const.PLANE_PARKING if gateNumber is None \
     1955                         else const.PLANE_HOME
     1956            else:
     1957                gateNumber = None
     1958                status = const.PLANE_AWAY
     1959
     1960            self._wizard.updatePlane(self._planeUpdated,
     1961                                     bookedFlight.tailNumber,
     1962                                     status, gateNumber = gateNumber)
     1963
     1964    def _planeUpdated(self, success):
     1965        """Callback for the plane updating."""
     1966        pass
    18901967       
    18911968#-----------------------------------------------------------------------------
     
    20962173                                              [self._bookedFlight.arrivalICAO])
    20972174           
    2098             self._takeoffPage.allowForward()
    20992175        elif stage==const.STAGE_END:
    21002176            self._landingPage.flightEnded()
     
    21042180        self._fleet = None
    21052181        self._fleetCallback = None
    2106         self._updatePlaneCallback = None
    21072182       
    21082183        self._loginResult = None
     
    21192194        self.setCurrentPage(0)
    21202195
    2121     def getFleet(self, callback):
     2196    def getFleet(self, callback, force = False):
    21222197        """Get the fleet via the GUI and call the given callback."""
    21232198        self._fleetCallback = callback
    2124         self.gui.getFleet(self._fleetRetrieved)
     2199        self.gui.getFleet(callback = self._fleetRetrieved, force = force)
    21252200
    21262201    def _fleetRetrieved(self, fleet):
     
    21312206        self._fleetCallback = None
    21322207       
    2133     def _updatePlane(self, callback, tailNumber, status, gateNumber = None):
     2208    def updatePlane(self, callback, tailNumber, status, gateNumber = None):
    21342209        """Update the given plane's gate information."""
    2135         self.gui.beginBusy(xstr("fleet_update_busy"))
    2136         self._updatePlaneCallback = callback
    2137         self.gui.webHandler.updatePlane(self._updatePlaneResultCallback,
    2138                                         tailNumber, status, gateNumber)
    2139 
    2140     def _updatePlaneResultCallback(self, returned, result):
    2141         """Callback for the plane updating operation."""
    2142         gobject.idle_add(self._handleUpdatePlaneResult, returned, result)
    2143 
    2144     def _handleUpdatePlaneResult(self, returned, result):
    2145         """Handle the result of a plane update operation."""
    2146         self.gui.endBusy()
    2147         if returned:
    2148             success = result.success
    2149         else:
    2150             success = None
    2151 
    2152             dialog = gtk.MessageDialog(parent = self.gui.mainWindow,
    2153                                        type = MESSAGETYPE_ERROR,
    2154                                        message_format =
    2155                                        xstr("fleet_update_failed"))
    2156             dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK)
    2157             dialog.set_title(WINDOW_TITLE_BASE)
    2158             dialog.run()
    2159             dialog.hide()
    2160 
    2161         self._updatePlaneCallback(success)
     2210        self.gui.updatePlane(tailNumber, status, gateNumber = gateNumber,
     2211                             callback = callback)
    21622212
    21632213    def _connectSimulator(self):
  • src/mlx/gui/gui.py

    r128 r130  
    4848        self._simulator = None
    4949        self._monitoring = False
     50
    5051        self._fleet = None
     52
    5153        self._fleetCallback = None
     54
     55        self._updatePlaneCallback = None
     56        self._updatePlaneTailNumber = None
     57        self._updatePlaneStatus = None
     58        self._updatePlaneGateNumber = None
    5259
    5360        self._stdioLock = threading.Lock()
     
    583590                                       type = MESSAGETYPE_ERROR,
    584591                                       message_format = xstr("fleet_failed"))
     592            dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK)
     593            dialog.set_title(WINDOW_TITLE_BASE)
     594            dialog.run()
     595            dialog.hide()
     596
     597        callback = self._fleetCallback
     598        self._fleetCallback = None
     599        if  callback is not None:
     600            callback(self._fleet)
     601        self._fleetGateStatus.handleFleet(self._fleet)
     602
     603    def updatePlane(self, tailNumber, status,
     604                    gateNumber = None, callback = None):
     605        """Update the status of the given plane."""
     606        self.beginBusy(xstr("fleet_update_busy"))
     607
     608        self._updatePlaneCallback = callback
     609
     610        self._updatePlaneTailNumber = tailNumber
     611        self._updatePlaneStatus = status
     612        self._updatePlaneGateNumber = gateNumber
     613       
     614        self.webHandler.updatePlane(self._updatePlaneResultCallback,
     615                                    tailNumber, status, gateNumber)
     616
     617    def _updatePlaneResultCallback(self, returned, result):
     618        """Called when the status of a plane has been updated."""
     619        gobject.idle_add(self._handleUpdatePlaneResult, returned, result)
     620
     621    def _handleUpdatePlaneResult(self, returned, result):
     622        """Handle the plane update result."""
     623        self.endBusy()
     624        if returned:
     625            success = result.success
     626            if success:
     627                if self._fleet is not None:
     628                    self._fleet.updatePlane(self._updatePlaneTailNumber,
     629                                            self._updatePlaneStatus,
     630                                            self._updatePlaneGateNumber)
     631                    self._fleetGateStatus.handleFleet(self._fleet)
     632        else:
     633            dialog = gtk.MessageDialog(parent = self.mainWindow,
     634                                       type = MESSAGETYPE_ERROR,
     635                                       message_format = xstr("fleet_update_failed"))
    585636            dialog.add_button(xstr("button_ok"), RESPONSETYPE_ACCEPT)
    586637            dialog.set_title(WINDOW_TITLE_BASE)
     
    588639            dialog.hide()
    589640
    590         if self._fleetCallback is not None:
    591             self._fleetCallback(self._fleet)
    592             self._fleetCallback = None
    593         self._fleetGateStatus.handleFleet(self._fleet)
     641            success = None
     642
     643        callback = self._updatePlaneCallback
     644        self._updatePlaneCallback = None
     645        if callback is not None:
     646            callback(success)
    594647
    595648    def _writeStdIO(self):
Note: See TracChangeset for help on using the changeset viewer.