Changeset 345:a62373a28d90 for src/mlx/gui
- Timestamp:
- 12/08/12 15:02:57 (12 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- src/mlx/gui
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/mlx/gui/common.py
r302 r345 297 297 faultTag.set_property("foreground", "red") 298 298 faultTag.set_property("weight", WEIGHT_BOLD) 299 buffer.get_tag_table().add(faultTag) 299 buffer.get_tag_table().add(faultTag) 300 300 301 301 #------------------------------------------------------------------------------ … … 305 305 306 306 If isFault is set, use the tag named 'fault'.""" 307 insertTextBuffer(buffer, buffer.get_end_iter(), text, isFault) 308 309 #------------------------------------------------------------------------------ 310 311 def insertTextBuffer(buffer, iter, text, isFault = False): 312 """Insert the given line into the given text buffer at the given iterator. 313 314 If isFault is set, use the tag named 'fault'.""" 307 315 if isFault: 308 buffer.insert_with_tags_by_name(buffer.get_end_iter(), text, 309 "fault") 316 buffer.insert_with_tags_by_name(iter, text, "fault") 310 317 else: 311 buffer.insert( buffer.get_end_iter(), text)312 313 #------------------------------------------------------------------------------ 318 buffer.insert(iter, text) 319 320 #------------------------------------------------------------------------------ -
src/mlx/gui/gui.py
r304 r345 90 90 def build(self, iconDirectory): 91 91 """Build the GUI.""" 92 92 93 93 self._mainWindow = window = gtk.Window() 94 94 window.set_title(WINDOW_TITLE_BASE) … … 112 112 self._notebook = gtk.Notebook() 113 113 mainVBox.pack_start(self._notebook, True, True, 4) 114 114 115 115 self._wizard = Wizard(self) 116 116 label = gtk.Label(xstr("tab_flight")) … … 131 131 label.set_tooltip_text(xstr("tab_weight_help_tooltip")) 132 132 self._notebook.append_page(self._weightHelp, label) 133 133 134 134 (logWidget, self._logView) = self._buildLogWidget() 135 addFaultTag(self._logView.get_buffer()) 135 addFaultTag(self._logView.get_buffer()) 136 136 label = gtk.Label(xstr("tab_log")) 137 137 label.set_use_underline(True) … … 144 144 label.set_tooltip_text(xstr("tab_gates_tooltip")) 145 145 self._notebook.append_page(self._fleetGateStatus, label) 146 146 147 147 (self._debugLogWidget, self._debugLogView) = self._buildLogWidget() 148 148 self._debugLogWidget.show_all() … … 186 186 """Get the main window of the GUI.""" 187 187 return self._mainWindow 188 188 189 189 @property 190 190 def logger(self): 191 191 """Get the logger used by us.""" 192 192 return self._logger 193 193 194 194 @property 195 195 def simulator(self): 196 196 """Get the simulator used by us.""" 197 197 return self._simulator 198 198 199 199 @property 200 200 def flight(self): … … 211 211 """Indicate if the user has logged in properly.""" 212 212 return self._wizard.loggedIn 213 213 214 214 @property 215 215 def loginResult(self): … … 251 251 """Get Zero-Fuel Weight calculated for the current flight.""" 252 252 return self._wizard.zfw 253 253 254 254 @property 255 255 def filedCruiseAltitude(self): 256 256 """Get cruise altitude filed for the current flight.""" 257 257 return self._wizard.filedCruiseAltitude 258 258 259 259 @property 260 260 def cruiseAltitude(self): … … 271 271 """Get the METAR of the deprature airport.""" 272 272 return self._wizard.departureMETAR 273 273 274 274 @property 275 275 def arrivalMETAR(self): … … 281 281 """Get the name of the departure runway.""" 282 282 return self._wizard.departureRunway 283 283 284 284 @property 285 285 def sid(self): … … 291 291 """Get the V1 speed calculated for the flight.""" 292 292 return self._wizard.v1 293 293 294 294 @property 295 295 def vr(self): 296 296 """Get the Vr speed calculated for the flight.""" 297 297 return self._wizard.vr 298 298 299 299 @property 300 300 def v2(self): 301 301 """Get the V2 speed calculated for the flight.""" 302 302 return self._wizard.v2 303 303 304 304 @property 305 305 def arrivalRunway(self): … … 326 326 """Get the Vref speed calculated for the flight.""" 327 327 return self._wizard.vref 328 328 329 329 @property 330 330 def flightType(self): … … 360 360 self._mainWindow) 361 361 self._updater.start() 362 362 363 363 singleton.raiseCallback = self.raiseCallback 364 364 gtk.main() … … 398 398 type = MESSAGETYPE_ERROR, 399 399 message_format = xstr("conn_failed")) 400 400 401 401 dialog.set_title(WINDOW_TITLE_BASE) 402 402 dialog.format_secondary_markup(xstr("conn_failed_sec")) 403 403 404 404 dialog.add_button(xstr("button_cancel"), 0) 405 405 dialog.add_button(xstr("button_tryagain"), 1) 406 406 dialog.set_default_response(1) 407 407 408 408 result = dialog.run() 409 409 dialog.hide() … … 413 413 else: 414 414 self.reset() 415 415 416 416 def disconnected(self): 417 417 """Called when we have disconnected from the simulator.""" … … 422 422 423 423 def _disconnected(self): 424 """Called when we have disconnected from the simulator unexpectedly.""" 424 """Called when we have disconnected from the simulator unexpectedly.""" 425 425 self._statusbar.updateConnection(self._connecting, self._connected) 426 426 … … 460 460 result = dialog.run() 461 461 dialog.hide() 462 462 463 463 if result==RESPONSETYPE_YES: 464 464 self.reset() … … 507 507 508 508 return True 509 510 def addFlightLogLine(self, timeStr, line, isFault = False): 511 """Write the given message line to the log.""" 512 gobject.idle_add(self._writeLog, 513 formatFlightLogLine(timeStr, line), 514 self._logView, isFault) 515 516 def updateFlightLogLine(self, index, timeStr, line): 517 """Update the line with the given index.""" 518 gobject.idle_add(self._updateFlightLogLine, index, 519 formatFlightLogLine(timeStr, line)) 520 521 def _updateFlightLogLine(self, index, line): 522 """Replace the contents of the given line in the log.""" 509 510 def insertFlightLogLine(self, index, timestampString, text, isFault): 511 """Insert the flight log line with the given data.""" 512 gobject.idle_add(self._insertFlightLogLine, index, 513 formatFlightLogLine(timestampString, text), 514 isFault) 515 516 def _insertFlightLogLine(self, index, line, isFault): 517 """Perform the real insertion. 518 519 To be called from the event loop.""" 520 buffer = self._logView.get_buffer() 521 lineIter = buffer.get_iter_at_line(index) 522 insertTextBuffer(buffer, lineIter, line, isFault = isFault) 523 self._logView.scroll_mark_onscreen(buffer.get_insert()) 524 525 def removeFlightLogLine(self, index): 526 """Remove the flight log line with the given index.""" 527 gobject.idle_add(self._removeFlightLogLine, index) 528 529 def _removeFlightLogLine(self, index): 530 """Perform the real removal.""" 523 531 buffer = self._logView.get_buffer() 524 532 startIter = buffer.get_iter_at_line(index) 525 endIter = buffer.get_iter_at_line(index +1)533 endIter = buffer.get_iter_at_line(index+1) 526 534 buffer.delete(startIter, endIter) 527 buffer.insert(startIter, line)528 535 self._logView.scroll_mark_onscreen(buffer.get_insert()) 529 536 … … 591 598 (event.new_window_state&WINDOW_STATE_ICONIFIED)==0: 592 599 self._mainWindow.present() 593 600 594 601 def raiseCallback(self): 595 602 """Callback for the singleton handling code.""" … … 630 637 self._mainWindow.present() 631 638 self._mainWindow.deiconify() 632 639 633 640 def toggleMainWindow(self): 634 641 """Toggle the main window.""" … … 679 686 if self._stdioText: 680 687 sys.__stderr__.write(self._stdioText) 681 688 682 689 def writeStdIO(self, text): 683 690 """Write the given text into standard I/O log.""" … … 758 765 self._updatePlaneStatus = status 759 766 self._updatePlaneGateNumber = gateNumber 760 767 761 768 self.webHandler.updatePlane(self._updatePlaneResultCallback, 762 769 tailNumber, status, gateNumber) … … 799 806 self._stdioText = "" 800 807 if not text: return 801 808 802 809 lines = text.splitlines() 803 810 if text[-1]=="\n": … … 809 816 now = datetime.datetime.now() 810 817 timeStr = "%02d:%02d:%02d: " % (now.hour, now.minute, now.second) 811 818 812 819 for line in lines: 813 820 #print >> sys.__stdout__, line … … 833 840 self._flight.aircraft = acft.Aircraft.create(self._flight) 834 841 self._flight.aircraft._checkers.append(self) 835 842 836 843 if self._simulator is None: 837 844 self._simulator = fs.createSimulator(const.SIM_MSFS9, self) 838 845 fs.setupMessageSending(self.config, self._simulator) 839 846 self._setupTimeSync() 840 847 841 848 self._flight.simulator = self._simulator 842 849 … … 845 852 846 853 self._connecting = True 847 self._simulator.connect(self._flight.aircraft) 854 self._simulator.connect(self._flight.aircraft) 848 855 849 856 def startMonitoring(self): … … 867 874 """Build the main menu bar.""" 868 875 menuBar = gtk.MenuBar() 869 876 870 877 fileMenuItem = gtk.MenuItem(xstr("menu_file")) 871 878 fileMenu = gtk.Menu() … … 965 972 966 973 helpMenu.append(gtk.SeparatorMenuItem()) 967 974 968 975 aboutMenuItem = gtk.ImageMenuItem(gtk.STOCK_ABOUT) 969 976 aboutMenuItem.set_use_stock(True) … … 982 989 label = gtk.Label(xstr("tab_debug_log")) 983 990 label.set_use_underline(True) 984 label.set_tooltip_text(xstr("tab_debug_log_tooltip")) 991 label.set_tooltip_text(xstr("tab_debug_log_tooltip")) 985 992 self._debugLogPage = self._notebook.append_page(self._debugLogWidget, label) 986 993 self._notebook.set_current_page(self._debugLogPage) … … 1037 1044 result = dialog.run() 1038 1045 dialog.hide() 1039 1046 1040 1047 if result==RESPONSETYPE_YES: 1041 1048 self._statusIcon.destroy() … … 1052 1059 """Callback for editing the checklists.""" 1053 1060 self._checklistEditor.run() 1054 1061 1055 1062 def _editApproachCallouts(self, menuItem): 1056 1063 """Callback for editing the approach callouts.""" 1057 1064 self._approachCalloutsEditor.run() 1058 1065 1059 1066 def _editPreferences(self, menuItem): 1060 1067 """Callback for editing the preferences.""" … … 1084 1091 if pirepDirectory is not None: 1085 1092 dialog.set_current_folder(pirepDirectory) 1086 1093 1087 1094 result = dialog.run() 1088 1095 dialog.hide() … … 1132 1139 parent = self._mainWindow) 1133 1140 dialog.set_modal(True) 1134 1141 1135 1142 1136 1143 filter = gtk.FileFilter() … … 1138 1145 filter.add_pattern("*.pirep") 1139 1146 dialog.add_filter(filter) 1140 1147 1141 1148 filter = gtk.FileFilter() 1142 1149 filter.set_name(xstr("file_filter_all")) … … 1184 1191 labelAlignment.add(label) 1185 1192 table.attach(labelAlignment, 0, 1, 0, 1) 1186 1193 1187 1194 label = gtk.Label(bookedFlight.callsign) 1188 1195 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, … … 1197 1204 labelAlignment.add(label) 1198 1205 table.attach(labelAlignment, 0, 1, 1, 2) 1199 1206 1200 1207 label = gtk.Label(str(bookedFlight.departureTime.date())) 1201 1208 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, … … 1210 1217 labelAlignment.add(label) 1211 1218 table.attach(labelAlignment, 0, 1, 2, 3) 1212 1219 1213 1220 label = gtk.Label(bookedFlight.departureICAO) 1214 1221 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, … … 1223 1230 labelAlignment.add(label) 1224 1231 table.attach(labelAlignment, 0, 1, 3, 4) 1225 1232 1226 1233 label = gtk.Label(bookedFlight.arrivalICAO) 1227 1234 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, … … 1243 1250 else: 1244 1251 label.set_text("%.1f %%" % (rating,)) 1245 1252 1246 1253 labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5, 1247 1254 xscale = 0.0, yscale = 0.0) … … 1252 1259 dialog.add_button(xstr("viewPIREP"), 1) 1253 1260 dialog.add_button(xstr("sendPIREP"), RESPONSETYPE_OK) 1254 1261 1255 1262 return dialog 1256 1263 1257 1264 def sendPIREP(self, pirep, callback = None): 1258 1265 """Send the given PIREP.""" … … 1287 1294 messageFormat = xstr("sendPIREP_failed") 1288 1295 secondaryMarkup = xstr("sendPIREP_failed_sec") 1289 1296 1290 1297 dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow, 1291 1298 type = type, message_format = messageFormat) … … 1365 1372 dialog.set_transient_for(self._mainWindow) 1366 1373 dialog.set_modal(True) 1367 1374 1368 1375 logoPath = os.path.join(self._programDirectory, "logo.png") 1369 1376 logo = pixbuf_new_from_file(logoPath) 1370 1377 dialog.set_logo(logo) 1371 1378 1372 1379 dialog.set_program_name(PROGRAM_NAME) 1373 1380 dialog.set_version(const.VERSION) … … 1396 1403 1397 1404 def _showAboutURL(self, dialog, link, user_data): 1398 """Show the about URL.""" 1405 """Show the about URL.""" 1399 1406 webbrowser.open(url = link, new = 1)
Note:
See TracChangeset
for help on using the changeset viewer.