Changeset 151:a2584357ff6c for src/mlx/gui/gui.py
- Timestamp:
- 05/05/12 11:02:52 (12 years ago)
- Branch:
- default
- hg-Phase:
- (<MercurialRepository 1 'hg:/home/ivaradi/mlx/hg' '/'>, 'public')
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/mlx/gui/gui.py
r148 r151 19 19 import mlx.web as web 20 20 from mlx.i18n import xstr 21 from mlx.pirep import PIREP 21 22 22 23 import time … … 61 62 self._stdioText = "" 62 63 64 self._sendPIREPCallback = None 65 63 66 self.webHandler = web.Handler() 64 67 self.webHandler.start() … … 145 148 self._busyCursor = gdk.Cursor(gdk.CursorType.WATCH if pygobject 146 149 else gdk.WATCH) 150 151 self._loadPIREPDialog = None 152 self._lastLoadedPIREP = None 147 153 148 154 @property … … 730 736 menuBar.append(fileMenuItem) 731 737 738 loadPIREPMenuItem = gtk.ImageMenuItem(gtk.STOCK_OPEN) 739 loadPIREPMenuItem.set_use_stock(True) 740 loadPIREPMenuItem.set_label(xstr("menu_file_loadPIREP")) 741 loadPIREPMenuItem.add_accelerator("activate", accelGroup, 742 ord(xstr("menu_file_loadPIREP_key")), 743 CONTROL_MASK, ACCEL_VISIBLE) 744 loadPIREPMenuItem.connect("activate", self._loadPIREP) 745 fileMenu.append(loadPIREPMenuItem) 746 747 fileMenu.append(gtk.SeparatorMenuItem()) 748 732 749 quitMenuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT) 733 750 quitMenuItem.set_use_stock(True) … … 865 882 else: 866 883 simulator.disableTimeSync() 884 885 def _loadPIREP(self, menuItem): 886 """Load a PIREP for sending.""" 887 dialog = self._getLoadPirepDialog() 888 889 if self._lastLoadedPIREP: 890 dialog.set_current_folder(os.path.dirname(self._lastLoadedPIREP)) 891 else: 892 pirepDirectory = self.config.pirepDirectory 893 if pirepDirectory is not None: 894 dialog.set_current_folder(pirepDirectory) 895 896 result = dialog.run() 897 dialog.hide() 898 899 if result==RESPONSETYPE_OK: 900 self._lastLoadedPIREP = dialog.get_filename() 901 902 pirep = PIREP.load(self._lastLoadedPIREP) 903 if pirep is None: 904 dialog = gtk.MessageDialog(parent = self._mainWindow, 905 type = MESSAGETYPE_ERROR, 906 message_format = xstr("loadPIREP_failed")) 907 dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK) 908 dialog.set_title(WINDOW_TITLE_BASE) 909 dialog.format_secondary_markup(xstr("loadPIREP_failed_sec")) 910 dialog.run() 911 dialog.hide() 912 else: 913 dialog = self._getSendLoadedDialog(pirep) 914 dialog.show_all() 915 result = dialog.run() 916 dialog.hide() 917 918 if result==RESPONSETYPE_OK: 919 self.sendPIREP(pirep) 920 921 def _getLoadPirepDialog(self): 922 """Get the PIREP loading file chooser dialog. 923 924 If it is not created yet, it will be created.""" 925 if self._loadPIREPDialog is None: 926 dialog = gtk.FileChooserDialog(title = WINDOW_TITLE_BASE + " - " + 927 xstr("loadPIREP_browser_title"), 928 action = FILE_CHOOSER_ACTION_OPEN, 929 buttons = (gtk.STOCK_CANCEL, 930 RESPONSETYPE_CANCEL, 931 gtk.STOCK_OK, RESPONSETYPE_OK), 932 parent = self._mainWindow) 933 dialog.set_modal(True) 934 935 936 filter = gtk.FileFilter() 937 filter.set_name(xstr("loadPIREP_filter_pireps")) 938 filter.add_pattern("*.pirep") 939 dialog.add_filter(filter) 940 941 filter = gtk.FileFilter() 942 filter.set_name(xstr("loadPIREP_filter_all")) 943 filter.add_pattern("*.*") 944 dialog.add_filter(filter) 945 946 self._loadPIREPDialog = dialog 947 948 return self._loadPIREPDialog 949 950 def _getSendLoadedDialog(self, pirep): 951 """Get a dialog displaying the main information of the flight from the 952 PIREP and providing Cancel and Send buttons.""" 953 dialog = gtk.Dialog(title = WINDOW_TITLE_BASE + " - " + 954 xstr("loadPIREP_send_title"), 955 parent = self._mainWindow, 956 flags = DIALOG_MODAL) 957 958 contentArea = dialog.get_content_area() 959 960 label = gtk.Label(xstr("loadPIREP_send_help")) 961 alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5, 962 xscale = 0.0, yscale = 0.0) 963 alignment.set_padding(padding_top = 16, padding_bottom = 0, 964 padding_left = 48, padding_right = 48) 965 alignment.add(label) 966 contentArea.pack_start(alignment, False, False, 8) 967 968 table = gtk.Table(5, 2) 969 tableAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5, 970 xscale = 0.0, yscale = 0.0) 971 tableAlignment.set_padding(padding_top = 0, padding_bottom = 32, 972 padding_left = 48, padding_right = 48) 973 table.set_row_spacings(4) 974 table.set_col_spacings(16) 975 tableAlignment.add(table) 976 contentArea.pack_start(tableAlignment, True, True, 8) 977 978 bookedFlight = pirep.bookedFlight 979 980 label = gtk.Label("<b>" + xstr("loadPIREP_send_flightno") + "</b>") 981 label.set_use_markup(True) 982 labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5, 983 xscale = 0.0, yscale = 0.0) 984 labelAlignment.add(label) 985 table.attach(labelAlignment, 0, 1, 0, 1) 986 987 label = gtk.Label(bookedFlight.callsign) 988 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 989 xscale = 0.0, yscale = 0.0) 990 labelAlignment.add(label) 991 table.attach(labelAlignment, 1, 2, 0, 1) 992 993 label = gtk.Label("<b>" + xstr("loadPIREP_send_date") + "</b>") 994 label.set_use_markup(True) 995 labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5, 996 xscale = 0.0, yscale = 0.0) 997 labelAlignment.add(label) 998 table.attach(labelAlignment, 0, 1, 1, 2) 999 1000 label = gtk.Label(str(bookedFlight.departureTime.date())) 1001 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1002 xscale = 0.0, yscale = 0.0) 1003 labelAlignment.add(label) 1004 table.attach(labelAlignment, 1, 2, 1, 2) 1005 1006 label = gtk.Label("<b>" + xstr("loadPIREP_send_from") + "</b>") 1007 label.set_use_markup(True) 1008 labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5, 1009 xscale = 0.0, yscale = 0.0) 1010 labelAlignment.add(label) 1011 table.attach(labelAlignment, 0, 1, 2, 3) 1012 1013 label = gtk.Label(bookedFlight.departureICAO) 1014 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1015 xscale = 0.0, yscale = 0.0) 1016 labelAlignment.add(label) 1017 table.attach(labelAlignment, 1, 2, 2, 3) 1018 1019 label = gtk.Label("<b>" + xstr("loadPIREP_send_to") + "</b>") 1020 label.set_use_markup(True) 1021 labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5, 1022 xscale = 0.0, yscale = 0.0) 1023 labelAlignment.add(label) 1024 table.attach(labelAlignment, 0, 1, 3, 4) 1025 1026 label = gtk.Label(bookedFlight.arrivalICAO) 1027 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1028 xscale = 0.0, yscale = 0.0) 1029 labelAlignment.add(label) 1030 table.attach(labelAlignment, 1, 2, 3, 4) 1031 1032 label = gtk.Label("<b>" + xstr("loadPIREP_send_rating") + "</b>") 1033 label.set_use_markup(True) 1034 labelAlignment = gtk.Alignment(xalign = 1.0, yalign = 0.5, 1035 xscale = 0.0, yscale = 0.0) 1036 labelAlignment.add(label) 1037 table.attach(labelAlignment, 0, 1, 4, 5) 1038 1039 rating = pirep.rating 1040 label = gtk.Label() 1041 if rating<0: 1042 label.set_markup('<b><span foreground="red">NO GO</span></b>') 1043 else: 1044 label.set_text("%.1f %%" % (rating,)) 1045 1046 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1047 xscale = 0.0, yscale = 0.0) 1048 labelAlignment.add(label) 1049 table.attach(labelAlignment, 1, 2, 4, 5) 1050 1051 dialog.add_button(xstr("button_cancel"), RESPONSETYPE_REJECT) 1052 dialog.add_button(xstr("sendPIREP"), RESPONSETYPE_OK) 1053 1054 return dialog 1055 1056 def sendPIREP(self, pirep, callback = None): 1057 """Send the given PIREP.""" 1058 self.beginBusy(xstr("sendPIREP_busy")) 1059 self._sendPIREPCallback = callback 1060 self.webHandler.sendPIREP(self._pirepSentCallback, pirep) 1061 1062 def _pirepSentCallback(self, returned, result): 1063 """Callback for the PIREP sending result.""" 1064 gobject.idle_add(self._handlePIREPSent, returned, result) 1065 1066 def _handlePIREPSent(self, returned, result): 1067 """Callback for the PIREP sending result.""" 1068 self.endBusy() 1069 secondaryMarkup = None 1070 type = MESSAGETYPE_ERROR 1071 if returned: 1072 if result.success: 1073 type = MESSAGETYPE_INFO 1074 messageFormat = xstr("sendPIREP_success") 1075 secondaryMarkup = xstr("sendPIREP_success_sec") 1076 elif result.alreadyFlown: 1077 messageFormat = xstr("sendPIREP_already") 1078 secondaryMarkup = xstr("sendPIREP_already_sec") 1079 elif result.notAvailable: 1080 messageFormat = xstr("sendPIREP_notavail") 1081 else: 1082 messageFormat = xstr("sendPIREP_unknown") 1083 secondaryMarkup = xstr("sendPIREP_unknown_sec") 1084 else: 1085 print "PIREP sending failed", result 1086 messageFormat = xstr("sendPIREP_failed") 1087 secondaryMarkup = xstr("sendPIREP_failed_sec") 1088 1089 dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow, 1090 type = type, message_format = messageFormat) 1091 dialog.add_button(xstr("button_ok"), RESPONSETYPE_OK) 1092 dialog.set_title(WINDOW_TITLE_BASE) 1093 if secondaryMarkup is not None: 1094 dialog.format_secondary_markup(secondaryMarkup) 1095 1096 dialog.run() 1097 dialog.hide() 1098 1099 callback = self._sendPIREPCallback 1100 self._sendPIREPCallback = None 1101 if callback is not None: 1102 callback(returned, result)
Note:
See TracChangeset
for help on using the changeset viewer.