Changeset 214:19fb20505b1a


Ignore:
Timestamp:
05/31/12 18:02:17 (13 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
Phase:
public
Message:

Added support for saving a flight into a file

Location:
src/mlx
Files:
3 edited

Legend:

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

    r208 r214  
    375375        self.setMainWidget(alignment)
    376376
     377        self._saveButton = self.addButton(xstr("flightsel_save"),
     378                                          sensitive = False,
     379                                          clicked = self._saveClicked,
     380                                          tooltip = xstr("flightsel_save_tooltip"))
     381        self._saveDialog = None
     382
    377383        self._refreshButton = self.addButton(xstr("flightsel_refresh"),
    378384                                             sensitive = True,
     
    419425                                flight.arrivalICAO])
    420426
     427    def _saveClicked(self, button):
     428        """Called when the Save flight button is clicked."""
     429        flight = self._getSelectedFlight()
     430        date = flight.departureTime.date()
     431        name = "%04d-%02d-%02d %s %s-%s.vaflight" % \
     432               (date.year, date.month, date.day, flight.callsign,
     433                flight.departureICAO, flight.arrivalICAO)
     434
     435        dialog = self._getSaveDialog()
     436        dialog.set_current_name(name)
     437        dialog.show_all()
     438        response = dialog.run()
     439        dialog.hide()
     440
     441        if response==RESPONSETYPE_OK:
     442            fileName = dialog.get_filename()
     443            print "Saving", fileName
     444            try:
     445                with open(fileName, "wt") as f:
     446                    flight.writeIntoFile(f)
     447            except Exception, e:
     448                print "Failed to save flight:", str(e)
     449                dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow,
     450                                           type = MESSAGETYPE_ERROR,
     451                                           message_format =
     452                                           xstr("flightsel_save_failed"))
     453                dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK)
     454                dialog.set_title(WINDOW_TITLE_BASE)
     455                secondary = xstr("flightsel_save_failed_sec")
     456                dialog.format_secondary_markup(secondary)
     457                dialog.run()
     458                dialog.hide()
     459               
    421460    def _refreshClicked(self, button):
    422461        """Called when the refresh button is clicked."""
     
    430469    def _selectionChanged(self, selection):
    431470        """Called when the selection is changed."""
    432         self._button.set_sensitive(selection.count_selected_rows()==1)
     471        selected = selection.count_selected_rows()==1
     472        self._saveButton.set_sensitive(selected)
     473        self._button.set_sensitive(selected)
    433474
    434475    def _loadButtonClicked(self, loadButton):
     
    465506            self._wizard.jumpPage(self._nextDistance, finalize = False)
    466507        else:
    467             selection = self._flightList.get_selection()
    468             (listStore, iter) = selection.get_selected()
    469             path = listStore.get_path(iter)
    470             [index] = path.get_indices() if pygobject else path
    471 
    472             flight = self._flights[index]
     508            flight = self._getSelectedFlight()
    473509            self._wizard._bookedFlight = flight
    474510            self._wizard.gui.enableFlightInfo()
    475511
    476512            self._updateDepartureGate()
     513
     514    def _getSelectedFlight(self):
     515        """Get the currently selected flight."""
     516        selection = self._flightList.get_selection()
     517        (listStore, iter) = selection.get_selected()
     518        path = listStore.get_path(iter)
     519        [index] = path.get_indices() if pygobject else path
     520       
     521        return self._flights[index]
    477522       
    478523    def _updateDepartureGate(self):
     
    515560        self._wizard.jumpPage(2)
    516561
     562    def _getSaveDialog(self):
     563        """Get the dialog to load a flight file."""
     564        if self._saveDialog is not None:
     565            return self._saveDialog
     566       
     567        gui = self._wizard.gui
     568        dialog = gtk.FileChooserDialog(title = WINDOW_TITLE_BASE + " - " +
     569                                       xstr("flightsel_save_title"),
     570                                       action = FILE_CHOOSER_ACTION_SAVE,
     571                                       buttons = (gtk.STOCK_CANCEL,
     572                                                  RESPONSETYPE_CANCEL,
     573                                                  gtk.STOCK_OK, RESPONSETYPE_OK),
     574                                       parent = gui.mainWindow)
     575        dialog.set_modal(True)           
     576        dialog.set_do_overwrite_confirmation(True)
     577
     578        filter = gtk.FileFilter()
     579        filter.set_name(xstr("flightsel_filter_flights"))
     580        filter.add_pattern("*.vaflight")
     581        dialog.add_filter(filter)
     582           
     583        filter = gtk.FileFilter()
     584        filter.set_name(xstr("file_filter_all"))
     585        filter.add_pattern("*.*")
     586        dialog.add_filter(filter)
     587
     588        self._saveDialog = dialog
     589       
     590        return dialog       
     591   
    517592    def _getLoadDialog(self):
    518593        """Get the dialog to load a flight file."""
  • src/mlx/i18n.py

    r208 r214  
    274274        self.add("flightsel_from", "From")
    275275        self.add("flightsel_to", "To")
     276        self.add("flightsel_save", "_Save flight")
     277        self.add("flightsel_save_tooltip",
     278                 "Click here to save the currently selected flight into "
     279                 "a file that can be loaded later.")
     280        self.add("flightsel_save_title", "Save a flight into a file")
     281        self.add("flightsel_save_failed",
     282                 "Could not save the flight into a file.")
     283        self.add("flightsel_save_failed_sec",
     284                 "Check the debug log for more details.")
    276285        self.add("flightsel_refresh", "_Refresh flights")
    277286        self.add("flightsel_refresh_tooltip",
  • src/mlx/web.py

    r208 r214  
    151151                    elif key=="departure_time": departureTime = value
    152152                    elif key=="arrival_time": arrivalTime = value
    153                     elif key=="foglalas_id": pass
     153                    elif key=="foglalas_id":
     154                        self.id = None if value=="0" else value
    154155                    elif key=="planetype": pass
    155156                    else: lineOK = False
     
    178179                raise Exception("Attribute %s could not be read" % (attribute,))
    179180           
     181    def writeIntoFile(self, f):
     182        """Write the flight into a file."""
     183        print >> f, "callsign=%s" % (self.callsign,)
     184        date = self.departureTime.date()
     185        print >> f, "date=%04d-%02d-%0d" % (date.year, date.month, date.day)
     186        print >> f, "dep_airport=%s" % (self.departureICAO,)
     187        print >> f, "dest_airport=%s" % (self.arrivalICAO,)
     188        print >> f, "planecode=%s" % \
     189              (BookedFlight.TYPE2TYPECODE[self.aircraftType],)
     190        print >> f, "tail_nr=%s" % (self.tailNumber,)
     191        print >> f, "passenger=%d" % (self.numPassengers,)
     192        print >> f, "crew=%d" % (self.numCrew,)
     193        print >> f, "bag=%d" % (self.bagWeight,)
     194        print >> f, "cargo=%d" % (self.cargoWeight,)
     195        print >> f, "mail=%d" % (self.mailWeight,)
     196        print >> f, "flight_route=%s" % (self.route,)
     197        departureTime = self.departureTime
     198        print >> f, "departure_time=%02d\\:%02d\\:%02d" % \
     199              (departureTime.hour, departureTime.minute, departureTime.second)
     200        arrivalTime = self.arrivalTime
     201        print >> f, "arrival_time=%02d\\:%02d\\:%02d" % \
     202              (arrivalTime.hour, arrivalTime.minute, arrivalTime.second)
     203        print >> f, "foglalas_id=%s" % ("0" if self.id is None else self.id,)
     204
    180205    def _readAircraftType(self, f):
    181206        """Read the aircraft type from the given file."""
Note: See TracChangeset for help on using the changeset viewer.