def __init__(self, parent, rack_name): QDialog.__init__(self, parent) self.setupUi(self) self.deleteRack_info.clear() self.installEventFilter(RadioKeyEventFilter(self)) self.initial_rack_name = rack_name self.flagged_for_deletion = False self.rackName_edit.setText(self.initial_rack_name) self.privateRack_tickBox.setChecked( self.initial_rack_name in settings.private_racks) self.pickColour_button.setChoice( settings.rack_colours.get(rack_name, None)) if rack_name == default_rack_name: self.rackName_edit.setEnabled(False) self.collectedStrips_box.setVisible(False) self.deleteRack_button.setEnabled(False) self.deleteRack_info.setText('Default rack cannot be deleted') else: self.collectsFrom_edit.setPlainText('\n'.join( atc for atc, rack in settings.ATC_collecting_racks.items() if rack == rack_name)) self.collectAutoPrintedStrips_tickBox.setChecked( settings.auto_print_collecting_rack == self.initial_rack_name) self.rackName_edit.selectAll() self.deleteRack_button.toggled.connect(self.flagRackForDeletion) self.buttonBox.rejected.connect(self.reject) self.buttonBox.accepted.connect(self.doOK)
def __init__(self, route, speedHint=None, acftHint=None, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.installEventFilter(RadioKeyEventFilter(self)) self.depICAO_info.setText(route.dep.code) self.depAD_info.setText(route.dep.long_name) self.arrICAO_info.setText(route.arr.code) self.arrAD_info.setText(route.arr.long_name) self.route_length = route.totalDistance() self.totalRouteDistance_info.setText(dist_str(self.route_length)) self.route_scene = RouteScene(route, parent=self) self.route_view.setScene(self.route_scene) self.route_table.setModel(RouteTableModel(route, self)) for col in [0, 1, 3, 4, 6]: self.route_table.resizeColumnToContents(col) speedHint_OK = speedHint != None and self.speed_edit.minimum( ) <= speedHint.kt <= self.speed_edit.maximum() if speedHint_OK: self.speed_edit.setValue(speedHint.kt) if acftHint != None: self.acftType_select.setEditText(acftHint) if not speedHint_OK: self.EETfromACFT_radioButton.setChecked(True) self.updateEET() self.route_table.selectionModel().selectionChanged.connect( self.legSelectionChanged) self.OK_button.clicked.connect(self.accept) self.EETfromSpeed_radioButton.toggled.connect(self.updateEET) self.EETfromACFT_radioButton.toggled.connect(self.updateEET) self.speed_edit.valueChanged.connect(self.updateEET) self.acftType_select.editTextChanged.connect(self.updateEET)
def __init__(self, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.setWindowTitle('%s location settings - %s' % (('CTR' if env.airport_data == None else 'AD'), settings.location_code)) self.range_group_boxes = [ self.range1_groupBox, self.range2_groupBox, self.range3_groupBox, self.range4_groupBox ] self.range_name_edits = [ self.range1_name_edit, self.range2_name_edit, self.range3_name_edit, self.range4_name_edit ] self.range_lo_edits = [ self.range1_lo_edit, self.range2_lo_edit, self.range3_lo_edit, self.range4_lo_edit ] self.range_hi_edits = [ self.range1_hi_edit, self.range2_hi_edit, self.range3_hi_edit, self.range4_hi_edit ] self.range_col_edits = [ self.range1_colourPicker, self.range2_colourPicker, self.range3_colourPicker, self.range4_colourPicker ] if env.airport_data == None: # CTR session self.stripPrinter_groupBox.setEnabled(False) self.settings_tabs.removeTab( self.settings_tabs.indexOf(self.AD_tab)) self.spawnCTR_minFL_edit.valueChanged.connect( self.spawnCTR_minFL_valueChanged) self.spawnCTR_maxFL_edit.valueChanged.connect( self.spawnCTR_maxFL_valueChanged) else: # AD session self.runway_tabs = QTabWidget(self) self.runway_tabs.setTabShape(QTabWidget.Triangular) self.runway_tabs.setTabPosition(QTabWidget.South) for rwy in env.airport_data.allRunways(sortByName=True): self.runway_tabs.addTab(RunwayParametersWidget(self, rwy), rwy.name) if env.airport_data.transition_altitude != None: self.transitionAltitude_edit.setEnabled(False) self.transitionAltitude_edit.setToolTip( 'Fixed by airport data') self.settings_tabs.insertTab(0, self.runway_tabs, 'Runways') self.settings_tabs.removeTab( self.settings_tabs.indexOf(self.CTR_tab)) self.spawnAPP_minFL_edit.valueChanged.connect( self.spawnAPP_minFL_valueChanged) self.spawnAPP_maxFL_edit.valueChanged.connect( self.spawnAPP_maxFL_valueChanged) self.TWRrangeCeiling_edit.valueChanged.connect( self.TWRrangeCeiling_valueChanged) self.installEventFilter(RadioKeyEventFilter(self)) self.fillFromSettings() self.settings_tabs.setCurrentIndex(GeneralSettingsDialog.last_tab_used) self.buttonBox.accepted.connect(self.storeSettings)
def __init__(self, parent, view_model, dialog_title): QDialog.__init__(self, parent) self.setupUi(self) self.clear_button.setIcon(QIcon(IconFile.button_clear)) self.installEventFilter(RadioKeyEventFilter(self)) self.setWindowTitle(dialog_title) self.model = view_model self.strip_view.setModel(view_model) self.clear_button.clicked.connect(self.model.forgetStrips) self.recall_button.clicked.connect(self.recallSelectedStrips) self.close_button.clicked.connect(self.accept)
def openDataLinkWindow(self, data_link_model): try: window = next(w for w in self.child_windows if w.model() is data_link_model and not w.closed()) except StopIteration: window = CpdlcConnectionWidget(self, data_link_model) window.setWindowIcon(QIcon(IconFile.panel_CPDLC)) window.setWindowFlags(Qt.Window) window.installEventFilter(RadioKeyEventFilter(self)) self.child_windows.append(window) window.show() window.raise_()
def __init__(self, visible_racks, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.installEventFilter(RadioKeyEventFilter(self)) self.table_model = RackVisibilityTableModel(self, visible_racks) self.tableView.setModel(self.table_model) self.selectAll_button.clicked.connect( lambda: self.table_model.globalSelect(True)) self.selectNone_button.clicked.connect( lambda: self.table_model.globalSelect(False)) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject)
def __init__(self, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.CPDLC_tab.setEnabled(settings.controller_pilot_data_link) self.positionHistoryTraceTime_edit.setMaximum( snapshot_history_size) # limit is one snapshot per second self.autoLinkStrip_off_radioButton.setChecked( True) # sets a defult; auto-excludes if different selection below self.installEventFilter(RadioKeyEventFilter(self)) self.fillFromSettings() self.settings_tabs.setCurrentIndex(GeneralSettingsDialog.last_tab_used) self.addMsgPreset_button.clicked.connect(self.addPresetMessage) self.rmMsgPreset_button.clicked.connect(self.removePresetMessage) self.buttonBox.accepted.connect(self.storeSettings)
def __init__(self, parent=None): QWidget.__init__(self, parent) self.setupUi(self) self.whoHas_window = WhoHasWidget(self) self.whoHas_window.setWindowFlags(Qt.Window) self.whoHas_window.installEventFilter(RadioKeyEventFilter(self)) self.callsign_suggestion = '' self.ATC_view.setModel(env.ATCs) self.publicFrequency_edit.addFrequencies([(f, d) for f, d, t in env.frequencies if t != 'recorded']) self.whoHas_button.clicked.connect(self.whoHasRequest) self.publiciseFrequency_tickBox.toggled.connect(self.publiciseFrequency) self.publicFrequency_edit.frequencyChanged.connect(self.setPublicisedFrequency) signals.incomingContactClaim.connect(self.whoHas_window.processClaim) signals.selectionChanged.connect(self.updateSuggestionFromSelection) signals.sessionEnded.connect(env.ATCs.clear)
def __init__(self, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.installEventFilter(RadioKeyEventFilter(self)) self.setWindowIcon(QIcon(IconFile.action_runwayUse)) self.table_model = RunwayUseTableModel( self, (env.airport_data.allRunways( sortByName=True) if env.airport_data != None else [])) self.tableView.setModel(self.table_model) for i in range(self.table_model.columnCount()): self.tableView.resizeColumnToContents(i) self.avoidOppositeRunways_tickBox.toggled.connect( self.table_model.setAvoidOppositeRunwayUse) self.buttonBox.accepted.connect(self.ok) self.buttonBox.rejected.connect(self.reject)
def __init__(self, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.cpdlcConnections_label.setEnabled( settings.controller_pilot_data_link) self.cpdlcConnections_widget.setEnabled( settings.controller_pilot_data_link) self.airportMode_groupBox.setEnabled(env.airport_data != None) self.voiceInstr_off_radioButton.setChecked( True) # sets a defult; auto-excludes if voice instr selected below self.readBack_off_radioButton.setChecked( True) # sets a defult; auto-excludes if other selection below self.voiceInstr_on_radioButton.setEnabled(speech_recognition_available) self.readBack_voice_radioButton.setEnabled(speech_synthesis_available) self.installEventFilter(RadioKeyEventFilter(self)) self.fillFromSettings() self.buttonBox.accepted.connect(self.storeSettings)
def __init__(self, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.installEventFilter(RadioKeyEventFilter(self)) self.magneticDeclination_infoLabel.setText( some(env.readDeclination(), 'N/A')) self.radarPosition_infoLabel.setText(str(env.radarPos())) if env.airport_data == None: self.airport_tab.setEnabled(False) else: self.airportName_infoLabel.setText(env.locationName()) self.airportElevation_infoLabel.setText( '%.1f ft' % env.airport_data.field_elevation) table_model = RwyInfoTableModel(self) self.runway_tableView.setModel(table_model) for i in range(table_model.columnCount()): self.runway_tableView.resizeColumnToContents(i)
def __init__(self, gui, strip): QDialog.__init__(self, gui) self.setupUi(self) self.installEventFilter(RadioKeyEventFilter(self)) self.setWindowIcon(QIcon(IconFile.pixmap_strip)) self.linkFPL_reset_button.setIcon(QIcon(IconFile.button_clear)) self.strip = strip self.FPL_link_on_save = None # None to link a new FPL self.FPL_matches = [] # Flight plans matching the last callsign edit if self.strip.lookup(rack_detail) == None: # unracked strip self.rack_select.addItem(unracked_strip_str) self.rack_select.setEnabled(False) else: self.rack_select.addItems(env.strips.rackNames()) ro_tod = strip.lookup(FPL.TIME_OF_DEP) ro_eet = strip.lookup(FPL.EET) ro_altAD = strip.lookup(FPL.ICAO_ALT) ro_souls = strip.lookup(FPL.SOULS) self.depAirportPicker_widget.recognised.connect( lambda ad: self.depAirportName_info.setText(ad.long_name)) self.arrAirportPicker_widget.recognised.connect( lambda ad: self.arrAirportName_info.setText(ad.long_name)) self.depAirportPicker_widget.unrecognised.connect( self.depAirportName_info.clear) self.arrAirportPicker_widget.unrecognised.connect( self.arrAirportName_info.clear) self.cruiseAlt_edit.textChanged.connect(self.updateCruiseButton) self.assignCruiseAlt_button.clicked.connect(self.assignCruiseLevel) linkedFPL = self.strip.linkedFPL() if linkedFPL == None: self.fplLink_stackedWidget.setCurrentWidget(self.noFplLink_page) self.updateFplToLinkInfo() self.matchingFPLs_button.clicked.connect( self.matchingFPLsButtonClicked) self.callsign_edit.textChanged.connect(self.updateMatchingFPLs) self.linkFPL_tickBox.toggled.connect(self.updateFplToLinkInfo) self.linkFPL_reset_button.clicked.connect(self.fplToLinkReset) else: # a flight plan is already linked self.matchingFPLs_button.setVisible(False) self.fplLink_stackedWidget.setCurrentWidget(self.gotFplLink_page) self.linkedFPL_info.setText(linkedFPL.shortDescr()) SharedDetailSheet.__init__(self) if self.strip.linkedFPL() == None: self.updateMatchingFPLs(self.callsign_edit.text())
def __init__(self, gui, fpl): QDialog.__init__(self, gui) self.setupUi(self) self.installEventFilter(RadioKeyEventFilter(self)) self.setWindowIcon(QIcon(IconFile.panel_FPLs)) self.fpl = fpl self.updateOnlineStatusBox() self.stripLinked_info.setText( 'yes' if env.linkedStrip(self.fpl) != None else 'no') SharedDetailSheet.__init__(self) self.viewOnlineComments_button.clicked.connect(self.viewOnlineComments) self.openFPL_button.clicked.connect( lambda: self.changeFplOnlineStatus(FPL.OPEN)) self.closeFPL_button.clicked.connect( lambda: self.changeFplOnlineStatus(FPL.CLOSED)) # FUTURE[tabOrder]: remove tab order corrections below? current Qt focus behaviour is currently bad wthout them self.setTabOrder(self.cruiseAlt_edit, self.altAirportPicker_widget) self.setTabOrder(self.altAirportPicker_widget.focusProxy(), self.flightRules_select)
def __init__(self, spawn_coords, spawn_hdg, parent=None): QDialog.__init__(self, parent) self.setupUi(self) self.createCallsign_edit.setClearButtonEnabled(True) self.installEventFilter(RadioKeyEventFilter(self)) self.createAircraftType_edit.setAircraftFilter(lambda t: cruise_speed(t) != None) self.airline_codes = known_airline_codes() self.createAircraftType_edit.setEditText(CreateTrafficDialog.last_known_acft_type_used) self.startFrozen_tickBox.setChecked(CreateTrafficDialog.last_start_frozen) self.createStripLink_tickBox.setChecked(CreateTrafficDialog.last_strip_link) self.suggestCallsign() if env.airport_data == None: self.allow_taxi = False self.closest_PKG = None self.nearby_THRs = [] else: self.allow_taxi = env.airport_data.ground_net.closestNode(spawn_coords, maxdist=max_spawn_GND_dist) != None self.closest_PKG = env.airport_data.ground_net.closestParkingPosition(spawn_coords, maxdist=max_spawn_PKG_dist) self.nearby_THRs = [r.name for r in env.airport_data.allRunways() if r.threshold().distanceTo(spawn_coords) <= max_spawn_THR_dist] self.closestParkingPosition_info.setText(some(self.closest_PKG, '')) self.depRWY_select.addItems(sorted(self.nearby_THRs)) self.spawn_coords = spawn_coords self.spawn_hdg = spawn_hdg self.updateButtons() if self.allow_taxi: self.ground_status_radioButton.toggled.connect(self.toggleGroundStatus) self.ground_status_radioButton.setChecked(True) if self.closest_PKG != None: self.parked_tickBox.setChecked(True) else: self.ground_status_radioButton.setEnabled(False) self.toggleGroundStatus(False) self.depRWY_select.setEnabled(False) if self.nearby_THRs == []: self.ready_status_radioButton.setEnabled(False) elif self.closest_PKG == None: self.ready_status_radioButton.setChecked(True) self.accepted.connect(self.rememberOptions) self.createAircraftType_edit.editTextChanged.connect(self.updateButtons) self.createAircraftType_edit.editTextChanged.connect(self.suggestCallsign) self.createCallsign_edit.textChanged.connect(self.updateButtons)
def openWidgetPopOut(self, widget): widget.installEventFilter(RadioKeyEventFilter(widget)) widget.setWindowFlags(Qt.Window) self.popped_out_widgets[widget._workspace_widget_index] = widget widget.show()
def __init__(self, launcher, parent=None): QMainWindow.__init__(self, parent) self.setupUi(self) self.central_workspace = WorkspaceWidget(self) self.setCentralWidget(self.central_workspace) self.installEventFilter(RadioKeyEventFilter(self)) self.setAttribute(Qt.WA_DeleteOnClose) self.launcher = launcher settings.controlled_tower_viewer = FlightGearTowerViewer(self) settings.session_manager = SessionManager(self) self.setWindowTitle('%s - %s (%s)' % (self.windowTitle(), env.locationName(), settings.location_code)) self.session_start_sound_lock_timer = QTimer(self) self.session_start_sound_lock_timer.setSingleShot(True) self.session_start_sound_lock_timer.timeout.connect(self.unlockSounds) ## Restore saved dock layout try: with open(dock_layout_file, 'rb') as f: # Restore saved dock arrangement self.restoreState(f.read()) except FileNotFoundError: # Fallback on default dock arrangement # left docks, top zone self.tabifyDockWidget(self.selection_info_dock, self.weather_dock) self.tabifyDockWidget(self.selection_info_dock, self.towerView_dock) self.tabifyDockWidget(self.selection_info_dock, self.navigator_dock) self.selection_info_dock.hide() # left docks, bottom zone self.tabifyDockWidget(self.instructions_dock, self.notepads_dock) self.tabifyDockWidget(self.instructions_dock, self.radio_dock) self.tabifyDockWidget(self.instructions_dock, self.FPLlist_dock) self.tabifyDockWidget(self.instructions_dock, self.CPDLC_dock) self.instructions_dock.hide() self.notepads_dock.hide() self.radio_dock.hide() self.CPDLC_dock.hide() # right docks self.rwyBoxes_dock.hide() # hiding this because bad position (user will drag 1st thing after raise) # bottom docks self.atcTextChat_dock.hide() ## Permanent tool/status bar widgets self.selectionInfo_toolbar.addWidget(SelectionInfoToolbarWidget(self)) self.METAR_statusBarLabel = QLabel() self.PTT_statusBarLabel = QLabel() self.RDF_statusBarLabel = QLabel() self.RDF_statusBarLabel.setToolTip('Current signal / last QDM') self.wind_statusBarLabel = QLabel() self.QNH_statusBarLabel = QLabel() self.QNH_statusBarLabel.setToolTip('hPa / inHg') self.clock_statusBarLabel = QLabel() self.alarmClock_statusBarButtons = [AlarmClockButton('1', self), AlarmClockButton('2', self)] self.statusbar.addWidget(self.METAR_statusBarLabel) self.statusbar.addPermanentWidget(self.PTT_statusBarLabel) self.statusbar.addPermanentWidget(self.RDF_statusBarLabel) self.statusbar.addPermanentWidget(self.wind_statusBarLabel) self.statusbar.addPermanentWidget(self.QNH_statusBarLabel) for b in self.alarmClock_statusBarButtons: self.statusbar.addPermanentWidget(b) b.alarm.connect(self.notification_pane.notifyAlarmClockTimedOut) self.statusbar.addPermanentWidget(self.clock_statusBarLabel) # Populate menus (toolbar visibility and airport viewpoints) toolbar_menu = QMenu() self.general_viewToolbar_action = self.general_toolbar.toggleViewAction() self.stripActions_viewToolbar_action = self.stripActions_toolbar.toggleViewAction() self.docks_viewToolbar_action = self.docks_toolbar.toggleViewAction() self.selectionInfo_viewToolbar_action = self.selectionInfo_toolbar.toggleViewAction() self.radarAssistance_viewToolbar_action = self.radarAssistance_toolbar.toggleViewAction() self.workspace_viewToolbar_action = self.workspace_toolbar.toggleViewAction() toolbar_menu.addAction(self.general_viewToolbar_action) toolbar_menu.addAction(self.stripActions_viewToolbar_action) toolbar_menu.addAction(self.docks_viewToolbar_action) toolbar_menu.addAction(self.selectionInfo_viewToolbar_action) toolbar_menu.addAction(self.radarAssistance_viewToolbar_action) toolbar_menu.addAction(self.workspace_viewToolbar_action) self.toolbars_view_menuAction.setMenu(toolbar_menu) if env.airport_data == None or len(env.airport_data.viewpoints) == 0: self.viewpointSelection_view_menuAction.setEnabled(False) else: viewPointSelection_menu = QMenu() viewPointSelection_actionGroup = QActionGroup(self) for vp_i, (vp_pos, vp_h, vp_name) in enumerate(env.airport_data.viewpoints): action = QAction('%s - %d ft ASFC' % (vp_name, vp_h + .5), self) action.setCheckable(True) action.triggered.connect(lambda ignore_checked, i=vp_i: self.selectIndicateViewpoint(i)) viewPointSelection_actionGroup.addAction(action) actions = viewPointSelection_actionGroup.actions() viewPointSelection_menu.addActions(actions) self.viewpointSelection_view_menuAction.setMenu(viewPointSelection_menu) try: actions[settings.selected_viewpoint].setChecked(True) except IndexError: actions[0].setChecked(True) ## Memory-persistent windows and dialogs self.solo_connect_dialog_AD = StartSoloDialog_AD(self) self.MP_connect_dialog = StartFlightGearMPdialog(self) self.start_student_session_dialog = StartStudentSessionDialog(self) self.recall_cheat_dialog = DiscardedStripsDialog(self, ShelfFilterModel(self, env.discarded_strips, False), 'Sent and deleted strips') self.shelf_dialog = DiscardedStripsDialog(self, ShelfFilterModel(self, env.discarded_strips, True), 'Strip shelf') self.environment_info_dialog = EnvironmentInfoDialog(self) self.about_dialog = AboutDialog(self) self.teaching_console = TeachingConsole(parent=self) self.unit_converter = UnitConversionWindow(parent=self) self.world_airport_navigator = WorldAirportNavigator(parent=self) self.quick_reference = QuickReference(parent=self) for w in self.teaching_console, self.unit_converter, self.world_airport_navigator, self.quick_reference: w.setWindowFlags(Qt.Window) w.installEventFilter(RadioKeyEventFilter(w)) # Make a few actions always visible self.addAction(self.newStrip_action) self.addAction(self.newLinkedStrip_action) self.addAction(self.newFPL_action) self.addAction(self.newLinkedFPL_action) self.addAction(self.startTimer1_action) self.addAction(self.forceStartTimer1_action) self.addAction(self.startTimer2_action) self.addAction(self.forceStartTimer2_action) self.addAction(self.notificationSounds_options_action) self.addAction(self.quickReference_help_action) self.addAction(self.saveDockLayout_view_action) self.addAction(self.recallWindowState_view_action) # Populate icons self.newStrip_action.setIcon(QIcon(IconFile.action_newStrip)) self.newLinkedStrip_action.setIcon(QIcon(IconFile.action_newLinkedStrip)) self.newFPL_action.setIcon(QIcon(IconFile.action_newFPL)) self.newLinkedFPL_action.setIcon(QIcon(IconFile.action_newLinkedFPL)) self.teachingConsole_view_action.setIcon(QIcon(IconFile.panel_teaching)) self.unitConversionTool_view_action.setIcon(QIcon(IconFile.panel_unitConv)) self.worldAirportNavigator_view_action.setIcon(QIcon(IconFile.panel_airportList)) self.environmentInfo_view_action.setIcon(QIcon(IconFile.panel_envInfo)) self.generalSettings_options_action.setIcon(QIcon(IconFile.action_generalSettings)) self.soloSessionSettings_system_action.setIcon(QIcon(IconFile.action_sessionSettings)) self.runwaysInUse_options_action.setIcon(QIcon(IconFile.action_runwayUse)) self.newLooseStripBay_view_action.setIcon(QIcon(IconFile.action_newLooseStripBay)) self.newRadarScreen_view_action.setIcon(QIcon(IconFile.action_newRadarScreen)) self.newStripRackPanel_view_action.setIcon(QIcon(IconFile.action_newRackPanel)) self.popOutCurrentWindow_view_action.setIcon(QIcon(IconFile.action_popOutWindow)) self.reclaimPoppedOutWindows_view_action.setIcon(QIcon(IconFile.action_reclaimWindows)) self.primaryRadar_options_action.setIcon(QIcon(IconFile.option_primaryRadar)) self.approachSpacingHints_options_action.setIcon(QIcon(IconFile.option_approachSpacingHints)) self.runwayOccupationWarnings_options_action.setIcon(QIcon(IconFile.option_runwayOccupationMonitor)) self.routeConflictWarnings_options_action.setIcon(QIcon(IconFile.option_routeConflictWarnings)) self.trafficIdentification_options_action.setIcon(QIcon(IconFile.option_identificationAssistant)) setDockAndActionIcon(IconFile.panel_ATCs, self.handovers_dockView_action, self.handover_dock) setDockAndActionIcon(IconFile.panel_atcChat, self.atcTextChat_dockView_action, self.atcTextChat_dock) setDockAndActionIcon(IconFile.panel_CPDLC, self.cpdlc_dockView_action, self.CPDLC_dock) setDockAndActionIcon(IconFile.panel_FPLs, self.FPLs_dockView_action, self.FPLlist_dock) setDockAndActionIcon(IconFile.panel_instructions, self.instructions_dockView_action, self.instructions_dock) setDockAndActionIcon(IconFile.panel_navigator, self.navpoints_dockView_action, self.navigator_dock) setDockAndActionIcon(IconFile.panel_notepads, self.notepads_dockView_action, self.notepads_dock) setDockAndActionIcon(IconFile.panel_notifications, self.notificationArea_dockView_action, self.notification_dock) setDockAndActionIcon(IconFile.panel_radios, self.fgcom_dockView_action, self.radio_dock) setDockAndActionIcon(IconFile.panel_runwayBox, self.runwayBoxes_dockView_action, self.rwyBoxes_dock) setDockAndActionIcon(IconFile.panel_selInfo, self.radarContactDetails_dockView_action, self.selection_info_dock) setDockAndActionIcon(IconFile.panel_racks, self.strips_dockView_action, self.strip_dock) setDockAndActionIcon(IconFile.panel_txtChat, self.radioTextChat_dockView_action, self.radioTextChat_dock) setDockAndActionIcon(IconFile.panel_twrView, self.towerView_dockView_action, self.towerView_dock) setDockAndActionIcon(IconFile.panel_weather, self.weather_dockView_action, self.weather_dock) # action TICKED STATES (set here before connections) self.windowedWorkspace_view_action.setChecked(settings.saved_workspace_windowed_view) self.verticalRwyBoxLayout_view_action.setChecked(settings.vertical_runway_box_layout) self.notificationSounds_options_action.setChecked(settings.notification_sounds_enabled) self.primaryRadar_options_action.setChecked(settings.primary_radar_active) self.routeConflictWarnings_options_action.setChecked(settings.route_conflict_warnings) self.trafficIdentification_options_action.setChecked(settings.traffic_identification_assistant) self.runwayOccupationWarnings_options_action.setChecked(settings.monitor_runway_occupation) self.approachSpacingHints_options_action.setChecked(settings.APP_spacing_hints) # action CONNECTIONS # non-menu actions self.newStrip_action.triggered.connect(lambda: new_strip_dialog(self, default_rack_name, linkToSelection=False)) self.newLinkedStrip_action.triggered.connect(lambda: new_strip_dialog(self, default_rack_name, linkToSelection=True)) self.newFPL_action.triggered.connect(lambda: self.FPLlist_pane.createLocalFPL(link=None)) self.newLinkedFPL_action.triggered.connect(lambda: self.FPLlist_pane.createLocalFPL(link=selection.strip)) self.startTimer1_action.triggered.connect(lambda: self.startTimer(0, False)) self.forceStartTimer1_action.triggered.connect(lambda: self.startTimer(0, True)) self.startTimer2_action.triggered.connect(lambda: self.startTimer(1, False)) self.forceStartTimer2_action.triggered.connect(lambda: self.startTimer(1, True)) # system menu self.soloSession_system_action.triggered.connect(lambda: self.startStopSession(self.start_solo)) self.connectFlightGearMP_system_action.triggered.connect(lambda: self.startStopSession(self.start_FlightGearMP)) self.teacherSession_system_action.triggered.connect(lambda: self.startStopSession(self.start_teaching)) self.studentSession_system_action.triggered.connect(lambda: self.startStopSession(self.start_learning)) self.reloadAdditionalViewers_system_action.triggered.connect(self.reloadAdditionalViewers) self.reloadBgImages_system_action.triggered.connect(self.reloadBackgroundImages) self.reloadColourConfig_system_action.triggered.connect(self.reloadColourConfig) self.reloadRoutePresets_system_action.triggered.connect(self.reloadRoutePresets) self.reloadEntryExitPoints_system_action.triggered.connect(self.reloadEntryExitPoints) self.announceFgSession_system_action.triggered.connect(self.announceFgSession) self.fgcomEchoTest_system_action.triggered.connect(self.radio_pane.performEchoTest) self.extractSectorFile_system_action.triggered.connect(self.extractSectorFile) self.repositionBgImages_system_action.triggered.connect(self.repositionRadarBgImages) self.measuringLogsCoordinates_system_action.toggled.connect(self.switchMeasuringCoordsLog) self.airportGateway_system_action.triggered.connect(lambda: self.goToURL(airport_gateway_URL)) self.openStreetMap_system_action.triggered.connect(lambda: self.goToURL(mk_OSM_URL(env.radarPos()))) self.soloSessionSettings_system_action.triggered.connect(self.openSoloSessionSettings) self.locationSettings_system_action.triggered.connect(self.openLocalSettings) self.systemSettings_system_action.triggered.connect(self.openSystemSettings) self.changeLocation_system_action.triggered.connect(self.changeLocation) self.quit_system_action.triggered.connect(self.close) # view menu self.saveDockLayout_view_action.triggered.connect(self.saveDockLayout) self.recallWindowState_view_action.triggered.connect(self.recallWindowState) self.handovers_dockView_action.triggered.connect(lambda: self.raiseDock(self.handover_dock)) self.atcTextChat_dockView_action.triggered.connect(lambda: self.raiseDock(self.atcTextChat_dock)) self.cpdlc_dockView_action.triggered.connect(lambda: self.raiseDock(self.CPDLC_dock)) self.FPLs_dockView_action.triggered.connect(lambda: self.raiseDock(self.FPLlist_dock)) self.instructions_dockView_action.triggered.connect(lambda: self.raiseDock(self.instructions_dock)) self.navpoints_dockView_action.triggered.connect(lambda: self.raiseDock(self.navigator_dock)) self.notepads_dockView_action.triggered.connect(lambda: self.raiseDock(self.notepads_dock)) self.notificationArea_dockView_action.triggered.connect(lambda: self.raiseDock(self.notification_dock)) self.fgcom_dockView_action.triggered.connect(lambda: self.raiseDock(self.radio_dock)) self.runwayBoxes_dockView_action.triggered.connect(lambda: self.raiseDock(self.rwyBoxes_dock)) self.radarContactDetails_dockView_action.triggered.connect(lambda: self.raiseDock(self.selection_info_dock)) self.strips_dockView_action.triggered.connect(lambda: self.raiseDock(self.strip_dock)) self.radioTextChat_dockView_action.triggered.connect(lambda: self.raiseDock(self.radioTextChat_dock)) self.towerView_dockView_action.triggered.connect(lambda: self.raiseDock(self.towerView_dock)) self.weather_dockView_action.triggered.connect(lambda: self.raiseDock(self.weather_dock)) self.windowedWorkspace_view_action.toggled.connect(self.central_workspace.switchWindowedView) self.popOutCurrentWindow_view_action.triggered.connect(self.central_workspace.popOutCurrentWindow) self.reclaimPoppedOutWindows_view_action.triggered.connect(self.central_workspace.reclaimPoppedOutWidgets) self.newLooseStripBay_view_action.triggered.connect(lambda: self.central_workspace.addWorkspaceWidget(WorkspaceWidget.LOOSE_BAY)) self.newRadarScreen_view_action.triggered.connect(lambda: self.central_workspace.addWorkspaceWidget(WorkspaceWidget.RADAR_SCREEN)) self.newStripRackPanel_view_action.triggered.connect(lambda: self.central_workspace.addWorkspaceWidget(WorkspaceWidget.STRIP_PANEL)) self.verticalRwyBoxLayout_view_action.toggled.connect(self.switchVerticalRwyBoxLayout) self.towerView_view_action.triggered.connect(self.toggleTowerWindow) self.addViewer_view_action.triggered.connect(self.addView) self.listViewers_view_action.triggered.connect(self.listAdditionalViews) self.activateAdditionalViewers_view_action.toggled.connect(self.activateAdditionalViews) self.removeViewer_view_action.triggered.connect(self.removeView) self.teachingConsole_view_action.triggered.connect(self.teaching_console.show) self.unitConversionTool_view_action.triggered.connect(self.unit_converter.show) self.worldAirportNavigator_view_action.triggered.connect(self.world_airport_navigator.show) self.environmentInfo_view_action.triggered.connect(self.environment_info_dialog.exec) # options menu self.runwaysInUse_options_action.triggered.connect(self.configureRunwayUse) self.notificationSounds_options_action.toggled.connect(self.switchNotificationSounds) self.primaryRadar_options_action.toggled.connect(self.switchPrimaryRadar) self.routeConflictWarnings_options_action.toggled.connect(self.switchConflictWarnings) self.trafficIdentification_options_action.toggled.connect(self.switchTrafficIdentification) self.runwayOccupationWarnings_options_action.toggled.connect(self.switchRwyOccupationIndications) self.approachSpacingHints_options_action.toggled.connect(self.switchApproachSpacingHints) self.generalSettings_options_action.triggered.connect(self.openGeneralSettings) # cheat menu self.pauseSimulation_cheat_action.toggled.connect(self.pauseSession) self.spawnAircraft_cheat_action.triggered.connect(self.spawnAircraft) self.killSelectedAircraft_cheat_action.triggered.connect(self.killSelectedAircraft) self.popUpMsgOnRejectedInstr_cheat_action.toggled.connect(self.setRejectedInstrPopUp) self.showRecognisedVoiceStrings_cheat_action.toggled.connect(self.setShowRecognisedVoiceStrings) self.ensureClearWeather_cheat_action.toggled.connect(self.ensureClearWeather) self.ensureDayLight_cheat_action.triggered.connect(self.towerView_pane.ensureDayLight) self.changeTowerHeight_cheat_action.triggered.connect(self.changeTowerHeight) self.recallDiscardedStrip_cheat_action.triggered.connect(self.recall_cheat_dialog.exec) self.radarCheatMode_cheat_action.toggled.connect(self.setRadarCheatMode) # help menu self.quickReference_help_action.triggered.connect(self.quick_reference.show) self.videoTutorial_help_action.triggered.connect(lambda: self.goToURL(video_tutorial_URL)) self.FAQ_help_action.triggered.connect(lambda: self.goToURL(FAQ_URL)) self.about_help_action.triggered.connect(self.about_dialog.exec) ## More signal connections signals.openShelfRequest.connect(self.shelf_dialog.exec) signals.privateAtcChatRequest.connect(lambda: self.raiseDock(self.atcTextChat_dock)) signals.stripRecall.connect(recover_strip) env.radar.blip.connect(env.strips.refreshViews) env.radar.lostContact.connect(self.aircraftHasDisappeared) signals.aircraftKilled.connect(self.aircraftHasDisappeared) env.strips.rwyBoxFreed.connect(lambda box, strip: env.airport_data.physicalRunway_restartWtcTimer(box, strip.lookup(FPL.WTC))) env.rdf.signalChanged.connect(self.updateRDF) signals.statusBarMsg.connect(lambda msg: self.statusbar.showMessage(msg, status_bar_message_timeout)) signals.newWeather.connect(self.updateWeatherIfPrimary) signals.kbdPTT.connect(self.updatePTT) signals.sessionStarted.connect(self.sessionHasStarted) signals.sessionEnded.connect(self.sessionHasEnded) signals.towerViewProcessToggled.connect(self.towerView_view_action.setChecked) signals.towerViewProcessToggled.connect(self.towerView_cheat_menu.setEnabled) signals.stripInfoChanged.connect(env.strips.refreshViews) signals.fastClockTick.connect(self.updateClock) signals.fastClockTick.connect(env.cpdlc.updateAckStatuses) signals.slowClockTick.connect(strip_auto_print_check) signals.stripEditRequest.connect(lambda strip: edit_strip(self, strip)) signals.selectionChanged.connect(self.updateStripFplActions) signals.receiveStrip.connect(receive_strip) signals.handoverFailure.connect(self.recoverFailedHandover) signals.sessionPaused.connect(env.radar.stopSweeping) signals.sessionResumed.connect(env.radar.startSweeping) signals.aircraftKilled.connect(env.radar.silentlyForgetContact) signals.rackVisibilityLost.connect(self.collectClosedRacks) signals.localSettingsChanged.connect(env.rdf.clearAllSignals) signals.localSettingsChanged.connect(self.updateRDF) ## MISC GUI setup self.strip_pane.setViewRacks([default_rack_name]) # will be moved out if a rack panel's saved "visible_racks" claims it [*1] self.strip_pane.restoreState(settings.saved_strip_dock_state) # [*1] self.central_workspace.restoreWorkspaceWindows(settings.saved_workspace_windows) self.central_workspace.switchWindowedView(settings.saved_workspace_windowed_view) # keep this after restoring windows! self.subsecond_ticker = Ticker(signals.fastClockTick.emit, parent=self) self.subminute_ticker = Ticker(signals.slowClockTick.emit, parent=self) self.subsecond_ticker.start_stopOnZero(subsecond_tick_interval) self.subminute_ticker.start_stopOnZero(subminute_tick_interval) self.towerView_cheat_menu.setEnabled(False) self.solo_cheat_menu.setEnabled(False) self.updateClock() self.updateWeatherIfPrimary(settings.primary_METAR_station, None) self.updateStripFplActions() self.last_RDF_qdm = None self.updateRDF() self.updatePTT(0, False) # Disable some base airport stuff if doing CTR if env.airport_data == None: self.towerView_view_action.setEnabled(False) self.runwaysInUse_options_action.setEnabled(False) self.runwayOccupationWarnings_options_action.setEnabled(False) # Finish self.atcTextChat_pane.switchAtcChatFilter(None) # Show GUI on general chat room at start if speech_recognition_available: prepare_SR_language_files()
def __init__(self, parent, title, lost_specs_text): QDialog.__init__(self, parent) self.setupUi(self) self.installEventFilter(RadioKeyEventFilter(self)) self.setWindowTitle(title) self.lostSpecs_box.setText(lost_specs_text)