def __init__(self): super().__init__() self.setupUi(self) self.formation_library = OffenseLibrary() self.selected_personnel_key = "default" self.modifying_formation = Formation() self.composite_formation = Formation() self.formation_frame = FormationFrame( self.modifying_formation, self.formation_library.label_mappers['default']) self.scrollArea_2.setWidget(self.formation_frame) self.show() self.rb_editing.setChecked(True) self.rb_editing.clicked.connect(self.handle_editing_view_change) self.rb_composite.clicked.connect(self.handle_composite_view_change) self.edit_composite.returnPressed.connect(self.handle_get_composite) self.btn_load_composite.clicked.connect(self.handle_get_composite) self.list_formations.itemClicked.connect(self.handle_formation_clicked) self.edit_formation_name.returnPressed.connect( self.handle_save_formation) self.btn_save_formation.clicked.connect(self.handle_save_formation) self.btn_delete_selected_formation.clicked.connect( self.handle_delete_formation) self.actionSave_Library.triggered.connect(self.handle_save_library) self.init_label_mappers() self.combo_personnel_grouping.currentIndexChanged[str].connect( self.handle_personnel_change) self.set_personnel_cb_text( self.formation_library.label_mappers['default'].mappings)
def __init__(self): super().__init__() self.setupUi(self) self.formation_library = OffenseLibrary() self.defense_library = DefenseLibrary() self.current_hash = 'MOF' starting_formation = Formation() self.lh_subformation = starting_formation.subformations['LT_RT'] self.rh_subformation = starting_formation.subformations['RT_RT'] self.mof_subformation = starting_formation.subformations['MOF_RT'] self.current_subformation = self.mof_subformation self.current_defense = Defense() self.defense_visual_frame = DefenseVisualFrame( self.current_subformation, self.current_defense, self.defense_library.label_mappers['default']) self.scroll_field.setWidget(self.defense_visual_frame) self.edit_formation_name.returnPressed.connect( self.handle_get_composite) self.btn_load_composite.clicked.connect(self.handle_get_composite) self.edit_defense_name.returnPressed.connect(self.handle_get_defense) self.btn_load_defense.clicked.connect(self.handle_get_composite) self.rb_lh.clicked.connect(lambda: self.handle_hash_change('LT')) self.rb_mof.clicked.connect(lambda: self.handle_hash_change('MOF')) self.rb_rh.clicked.connect(lambda: self.handle_hash_change('RT')) self.show()
def __init__(self): super().__init__() self.setupUi(self) self.formation_library = OffenseLibrary() self.defense_library = DefenseLibrary() self.current_hash = 'MOF' starting_formation = Formation() self.lh_subformation = starting_formation.subformations['LT_RT'] self.rh_subformation = starting_formation.subformations['RT_RT'] self.mof_subformation = starting_formation.subformations['MOF_RT'] self.current_subformation = self.mof_subformation self.modifying_defense = Defense() self.defense_visual_frame = DefenseVisualFrame(self.current_subformation, self.modifying_defense, self.defense_library.label_mappers['default']) self.scroll_field.setWidget(self.defense_visual_frame) self.defender_editor = DefenderEditor(self.statusBar(), self.defense_visual_frame) self.scroll_defender_edit.setWidget(self.defender_editor) self.defender_editor.create_and_layout_condition_set_editors(self.modifying_defense.players['D1']) self.init_label_mappers() self.init_defender_combo(self.defense_library.label_mappers['default'].mappings) self.combo_personnel_grouping.currentIndexChanged[str].connect(self.handle_personnel_change) self.combo_defender_to_edit.currentIndexChanged[str].connect(self.handle_defender_change) self.set_personnel_cb_text(self.defense_library.label_mappers['default'].mappings) self.btn_save_defense.clicked.connect(self.handle_save_defense) self.btn_delete_selected_defense.clicked.connect(self.handle_delete_defense) self.edit_defense_name.returnPressed.connect(self.handle_save_defense) self.list_defenses.itemClicked.connect(self.handle_defense_clicked) self.rb_mof.setChecked(True) self.rb_mof.clicked.connect(lambda: self.handle_hash_change('MOF')) self.rb_lh.clicked.connect(lambda: self.handle_hash_change('LT')) self.rb_rh.clicked.connect(lambda: self.handle_hash_change('RT')) self.edit_formation_name.returnPressed.connect(self.handle_get_composite) self.btn_load_composite.clicked.connect(self.handle_get_composite) self.cb_d1.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d2.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d3.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d4.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d5.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d6.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d7.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d8.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d9.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d10.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d11.clicked.connect(self.handle_cb_affected_tag_clicked) self.actionSave_Library.triggered.connect(self.handle_save_library) self.show()
def __init__(self, last_load_location, last_save_location, update_directory_location_callback): super().__init__() self.setupUi(self) self.last_load_location = last_load_location self.last_save_location = last_save_location self.formation_library = OffenseLibrary() self.defense_libary = DefenseLibrary() self.update_directory_location_callback = update_directory_location_callback self.actionCreate_Scout_Cards.triggered.connect( lambda: self.handle_create_scout_cards(False, False)) self.actionCreate_Scout_Cards_Alternating.triggered.connect( lambda: self.handle_create_scout_cards(True, False)) self.action_Off_Create_Scout_Cards.triggered.connect( lambda: self.handle_create_scout_cards(False, True)) self.action_Off_Create_Scout_Cards_Alternating.triggered.connect( lambda: self.handle_create_scout_cards(True, True)) self.actionCreate_Football_Trainer_Script.triggered.connect( self.handle_create_football_trainer_script) self.cb_college_hash_marks.stateChanged.connect( self.handle_cb_college_hash_marks_changed) self.show()
def load_offense_library_from_dict(self, library_dict): self.formation_library = OffenseLibrary.from_dict(library_dict) self.defense_visual_frame.offense_personnel_mapper = self.formation_library.label_mappers['default']
class DefensiveLibraryEditor(QMainWindow, Ui_DefensiveEditor): def __init__(self): super().__init__() self.setupUi(self) self.formation_library = OffenseLibrary() self.defense_library = DefenseLibrary() self.current_hash = 'MOF' starting_formation = Formation() self.lh_subformation = starting_formation.subformations['LT_RT'] self.rh_subformation = starting_formation.subformations['RT_RT'] self.mof_subformation = starting_formation.subformations['MOF_RT'] self.current_subformation = self.mof_subformation self.modifying_defense = Defense() self.defense_visual_frame = DefenseVisualFrame(self.current_subformation, self.modifying_defense, self.defense_library.label_mappers['default']) self.scroll_field.setWidget(self.defense_visual_frame) self.defender_editor = DefenderEditor(self.statusBar(), self.defense_visual_frame) self.scroll_defender_edit.setWidget(self.defender_editor) self.defender_editor.create_and_layout_condition_set_editors(self.modifying_defense.players['D1']) self.init_label_mappers() self.init_defender_combo(self.defense_library.label_mappers['default'].mappings) self.combo_personnel_grouping.currentIndexChanged[str].connect(self.handle_personnel_change) self.combo_defender_to_edit.currentIndexChanged[str].connect(self.handle_defender_change) self.set_personnel_cb_text(self.defense_library.label_mappers['default'].mappings) self.btn_save_defense.clicked.connect(self.handle_save_defense) self.btn_delete_selected_defense.clicked.connect(self.handle_delete_defense) self.edit_defense_name.returnPressed.connect(self.handle_save_defense) self.list_defenses.itemClicked.connect(self.handle_defense_clicked) self.rb_mof.setChecked(True) self.rb_mof.clicked.connect(lambda: self.handle_hash_change('MOF')) self.rb_lh.clicked.connect(lambda: self.handle_hash_change('LT')) self.rb_rh.clicked.connect(lambda: self.handle_hash_change('RT')) self.edit_formation_name.returnPressed.connect(self.handle_get_composite) self.btn_load_composite.clicked.connect(self.handle_get_composite) self.cb_d1.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d2.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d3.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d4.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d5.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d6.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d7.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d8.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d9.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d10.clicked.connect(self.handle_cb_affected_tag_clicked) self.cb_d11.clicked.connect(self.handle_cb_affected_tag_clicked) self.actionSave_Library.triggered.connect(self.handle_save_library) self.show() def load_offense_library_from_dict(self, library_dict): self.formation_library = OffenseLibrary.from_dict(library_dict) self.defense_visual_frame.offense_personnel_mapper = self.formation_library.label_mappers['default'] def load_defense_library_from_dict(self, library_dict): self.defense_library = DefenseLibrary.from_dict(library_dict) self.init_label_mappers() self.load_defense_names_into_list() self.defense_visual_frame.defense_personnel_mapper = self.defense_library.label_mappers['default'] self.init_defender_combo(self.defense_library.label_mappers['default'].mappings) def handle_save_library(self): with open('defense_library.json', 'w') as file: json.dump(self.defense_library.to_dict(), file, indent=3) def handle_hash_change(self, hash_mark): try: self.current_hash = hash_mark if hash_mark == 'MOF': self.current_subformation = self.mof_subformation else: self.current_subformation = self.lh_subformation if hash_mark == 'LT' else self.rh_subformation self.defense_visual_frame.offensive_subformation = self.current_subformation self.defense_visual_frame.update() except Exception as e: from traceback import format_exc print(format_exc()) def handle_get_composite(self): formation_name = self.edit_formation_name.text() try: if len(formation_name) > 0: mof_composite = self.formation_library.get_composite_subformation('MOF', formation_name)[0] lh_composite = self.formation_library.get_composite_subformation('LT', formation_name)[0] rh_composite = self.formation_library.get_composite_subformation('RT', formation_name)[0] if mof_composite is not None: self.mof_subformation = mof_composite self.lh_subformation = lh_composite self.rh_subformation = rh_composite if self.current_hash == 'MOF': self.current_subformation = self.mof_subformation else: self.current_subformation = self.lh_subformation if self.current_hash == 'LT' else self.rh_subformation self.defense_visual_frame.offensive_subformation = self.current_subformation self.defense_visual_frame.update() except Exception as e: from traceback import format_exc print(format_exc()) def init_label_mappers(self): # Must block signals because clear sends index changed signal which then references the now empty(null) combo box self.combo_personnel_grouping.blockSignals(True) self.combo_personnel_grouping.clear() self.combo_personnel_grouping.blockSignals(False) for personnel_grouping_key in self.defense_library.label_mappers.keys(): self.combo_personnel_grouping.addItem(personnel_grouping_key) def handle_personnel_change(self, new_personnel): self.defense_visual_frame.defense_personnel_mapper = self.defense_library.label_mappers[new_personnel] self.set_personnel_cb_text(self.defense_library.label_mappers[new_personnel].mappings) self.init_defender_combo(self.defense_library.label_mappers[new_personnel].mappings) self.defense_visual_frame.update() def set_personnel_cb_text(self, personnel_mapping): self.cb_d1.setText(f'D1 ( {personnel_mapping["D1"]} )') self.cb_d2.setText(f'D2 ( {personnel_mapping["D2"]} )') self.cb_d3.setText(f'D3 ( {personnel_mapping["D3"]} )') self.cb_d4.setText(f'D4 ( {personnel_mapping["D4"]} )') self.cb_d5.setText(f'D5 ( {personnel_mapping["D5"]} )') self.cb_d6.setText(f'D6 ( {personnel_mapping["D6"]} )') self.cb_d7.setText(f'D7 ( {personnel_mapping["D7"]} )') self.cb_d8.setText(f'D8 ( {personnel_mapping["D8"]} )') self.cb_d9.setText(f'D9 ( {personnel_mapping["D9"]} )') self.cb_d10.setText(f'D10 ( {personnel_mapping["D10"]} )') self.cb_d11.setText(f'D11 ( {personnel_mapping["D11"]} )') def init_defender_combo(self, personnel_mapping): # Must block signals because clear sends index changed signal which then references the now empty(null) combo box self.combo_defender_to_edit.blockSignals(True) self.combo_defender_to_edit.clear() self.combo_defender_to_edit.blockSignals(False) for defender_tag in ['D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11']: self.combo_defender_to_edit.addItem(f'{defender_tag} ( {personnel_mapping[defender_tag]} )') def handle_defender_change(self, new_defender): new_defender_tag = new_defender.split()[0] current_defender = self.modifying_defense.players[new_defender_tag] self.defender_editor.create_and_layout_condition_set_editors(current_defender) def handle_cb_affected_tag_clicked(self, ): affected_tags = [] if self.cb_d1.isChecked(): affected_tags.append('D1') if self.cb_d2.isChecked(): affected_tags.append('D2') if self.cb_d3.isChecked(): affected_tags.append('D3') if self.cb_d4.isChecked(): affected_tags.append('D4') if self.cb_d5.isChecked(): affected_tags.append('D5') if self.cb_d6.isChecked(): affected_tags.append('D6') if self.cb_d7.isChecked(): affected_tags.append('D7') if self.cb_d8.isChecked(): affected_tags.append('D8') if self.cb_d9.isChecked(): affected_tags.append('D9') if self.cb_d10.isChecked(): affected_tags.append('D10') if self.cb_d11.isChecked(): affected_tags.append('D11') self.modifying_defense.affected_tags = affected_tags self.defense_visual_frame.update() def handle_save_defense(self): defense_name = self.edit_defense_name.text() if len(defense_name) == 0: msg_box = QMessageBox() msg_box.setText('Defense needs name') msg_box.setWindowTitle('Error') msg_box.setStandardButtons(QMessageBox.Ok) msg_box.exec_() return self.defense_library.save_defense(self.modifying_defense, defense_name) self.load_defense_names_into_list() def handle_delete_defense(self): if self.list_defenses.currentItem(): defense_name = self.list_defenses.currentItem().text() del self.defense_library.defenses[defense_name] self.load_defense_names_into_list() def load_defense_names_into_list(self): defense_names = [name for name in self.defense_library.defenses.keys()] defense_names.sort() self.list_defenses.clear() for defense_name in defense_names: self.list_defenses.addItem(defense_name) def handle_defense_clicked(self, defense_clicked): defense_name = defense_clicked.data(0) self.edit_defense_name.setText(defense_name) self.modifying_defense.copy_from(self.defense_library.defenses[defense_name]) self.cb_d1.setChecked(True if 'D1' in self.modifying_defense.affected_tags else False) self.cb_d2.setChecked(True if 'D2' in self.modifying_defense.affected_tags else False) self.cb_d3.setChecked(True if 'D3' in self.modifying_defense.affected_tags else False) self.cb_d4.setChecked(True if 'D4' in self.modifying_defense.affected_tags else False) self.cb_d5.setChecked(True if 'D5' in self.modifying_defense.affected_tags else False) self.cb_d6.setChecked(True if 'D6' in self.modifying_defense.affected_tags else False) self.cb_d7.setChecked(True if 'D7' in self.modifying_defense.affected_tags else False) self.cb_d8.setChecked(True if 'D8' in self.modifying_defense.affected_tags else False) self.cb_d9.setChecked(True if 'D9' in self.modifying_defense.affected_tags else False) self.cb_d10.setChecked(True if 'D10' in self.modifying_defense.affected_tags else False) self.cb_d11.setChecked(True if 'D11' in self.modifying_defense.affected_tags else False) self.combo_defender_to_edit.setCurrentIndex(0) self.handle_defender_change('D1') self.defense_visual_frame.update() def handle_save_defense_library(self): with open('defense_library.json', 'w') as file: json.dump(self.defense_library.to_dict(), file, indent=3)
def load_library_from_dict(self, library_dict): self.formation_library = OffenseLibrary.from_dict(library_dict) self.load_formation_names_into_list() self.init_label_mappers()
class OffensiveLibraryEditor(QMainWindow, Ui_OffensiveEditor): def __init__(self): super().__init__() self.setupUi(self) self.formation_library = OffenseLibrary() self.selected_personnel_key = "default" self.modifying_formation = Formation() self.composite_formation = Formation() self.formation_frame = FormationFrame( self.modifying_formation, self.formation_library.label_mappers['default']) self.scrollArea_2.setWidget(self.formation_frame) self.show() self.rb_editing.setChecked(True) self.rb_editing.clicked.connect(self.handle_editing_view_change) self.rb_composite.clicked.connect(self.handle_composite_view_change) self.edit_composite.returnPressed.connect(self.handle_get_composite) self.btn_load_composite.clicked.connect(self.handle_get_composite) self.list_formations.itemClicked.connect(self.handle_formation_clicked) self.edit_formation_name.returnPressed.connect( self.handle_save_formation) self.btn_save_formation.clicked.connect(self.handle_save_formation) self.btn_delete_selected_formation.clicked.connect( self.handle_delete_formation) self.actionSave_Library.triggered.connect(self.handle_save_library) self.init_label_mappers() self.combo_personnel_grouping.currentIndexChanged[str].connect( self.handle_personnel_change) self.set_personnel_cb_text( self.formation_library.label_mappers['default'].mappings) def handle_editing_view_change(self): self.formation_frame.can_edit = True self.formation_frame.formation = self.modifying_formation self.formation_frame.update() def handle_composite_view_change(self): self.formation_frame.can_edit = False self.formation_frame.formation = self.composite_formation self.formation_frame.update() def handle_get_composite(self): formation_name = self.edit_composite.text() #self.composite_formation = Formation() try: if len(formation_name) > 0: mof_composite = self.formation_library.get_composite_subformation( 'MOF', formation_name)[0] lh_composite = self.formation_library.get_composite_subformation( 'LH', formation_name)[0] rh_composite = self.formation_library.get_composite_subformation( 'RH', formation_name)[0] if not mof_composite is None: self.composite_formation.subformations['MOF_RT'].copy_from( mof_composite) self.composite_formation.subformations['LT_RT'].copy_from( lh_composite) self.composite_formation.subformations['RT_RT'].copy_from( rh_composite) self.formation_frame.update() except Exception as e: from traceback import format_exc print(format_exc()) def handle_personnel_change(self, new_personnel): self.formation_frame.personnel_mapper = self.formation_library.label_mappers[ new_personnel] self.set_personnel_cb_text( self.formation_library.label_mappers[new_personnel].mappings) self.formation_frame.update() def handle_save_formation(self): formation_name = self.edit_formation_name.text() if len(formation_name) == 0: msg_box = QMessageBox() msg_box.setText('Formation needs name') msg_box.setWindowTitle('Error') msg_box.setStandardButtons(QMessageBox.Ok) msg_box.exec_() return affected_tags = [] if self.cb_l1.isChecked(): affected_tags.append('L1') if self.cb_l2.isChecked(): affected_tags.append('L2') if self.cb_l3.isChecked(): affected_tags.append('L3') if self.cb_l4.isChecked(): affected_tags.append('L4') if self.cb_s1.isChecked(): affected_tags.append('S1') if self.cb_s2.isChecked(): affected_tags.append('S2') if self.cb_s3.isChecked(): affected_tags.append('S3') if self.cb_s4.isChecked(): affected_tags.append('S4') if self.cb_s5.isChecked(): affected_tags.append('S5') if self.cb_s6.isChecked(): affected_tags.append('S6') self.modifying_formation.affected_tags = affected_tags self.formation_library.save_formation_from_going_rt( self.modifying_formation, formation_name) self.load_formation_names_into_list() def handle_delete_formation(self): if self.list_formations.currentItem(): formation_name = self.list_formations.currentItem().text() del self.formation_library.formations[formation_name] self.load_formation_names_into_list() def load_formation_names_into_list(self): formation_names = [ name for name in self.formation_library.formations.keys() ] formation_names.sort() self.list_formations.clear() for formation_name in formation_names: self.list_formations.addItem(formation_name) def handle_formation_clicked(self, formation_clicked): formation_name = formation_clicked.data(0) self.rb_editing.setChecked(True) self.edit_formation_name.setText(formation_name) self.modifying_formation.copy_from( self.formation_library.formations[formation_name]) self.formation_frame.formation = self.modifying_formation self.formation_frame.can_edit = True self.formation_frame.update() self.cb_l1.setChecked( True if 'L1' in self.modifying_formation.affected_tags else False) self.cb_l2.setChecked( True if 'L2' in self.modifying_formation.affected_tags else False) self.cb_l3.setChecked( True if 'L3' in self.modifying_formation.affected_tags else False) self.cb_l4.setChecked( True if 'L4' in self.modifying_formation.affected_tags else False) self.cb_s1.setChecked( True if 'S1' in self.modifying_formation.affected_tags else False) self.cb_s2.setChecked( True if 'S2' in self.modifying_formation.affected_tags else False) self.cb_s3.setChecked( True if 'S3' in self.modifying_formation.affected_tags else False) self.cb_s4.setChecked( True if 'S4' in self.modifying_formation.affected_tags else False) self.cb_s5.setChecked( True if 'S5' in self.modifying_formation.affected_tags else False) self.cb_s6.setChecked( True if 'S6' in self.modifying_formation.affected_tags else False) def handle_save_library(self): with open('offense_library.json', 'w') as file: json.dump(self.formation_library.to_dict(), file, indent=3) def load_library_from_dict(self, library_dict): self.formation_library = OffenseLibrary.from_dict(library_dict) self.load_formation_names_into_list() self.init_label_mappers() def init_label_mappers(self): # Must block signals because clear sends index changed signal which then references the now empty(null) combo box self.combo_personnel_grouping.blockSignals(True) self.combo_personnel_grouping.clear() self.combo_personnel_grouping.blockSignals(False) for personnel_grouping_key in self.formation_library.label_mappers.keys( ): self.combo_personnel_grouping.addItem(personnel_grouping_key) def set_personnel_cb_text(self, personnel_mapping): self.cb_l1.setText(f'L1 ( {personnel_mapping["L1"]} )') self.cb_l2.setText(f'L2 ( {personnel_mapping["L2"]} )') self.cb_l3.setText(f'L3 ( {personnel_mapping["L3"]} )') self.cb_l4.setText(f'L4 ( {personnel_mapping["L4"]} )') self.cb_s1.setText(f'S1 ( {personnel_mapping["S1"]} )') self.cb_s2.setText(f'S2 ( {personnel_mapping["S2"]} )') self.cb_s3.setText(f'S3 ( {personnel_mapping["S3"]} )') self.cb_s4.setText(f'S4 ( {personnel_mapping["S4"]} )') self.cb_s5.setText(f'S5 ( {personnel_mapping["S5"]} )') self.cb_s6.setText(f'S6 ( {personnel_mapping["S6"]} )')
def load_offense_library_from_dict(self, library_dict): self.formation_library = OffenseLibrary.from_dict(library_dict)
class CompositeViewer(QMainWindow, Ui_CompositeViewer): def __init__(self): super().__init__() self.setupUi(self) self.formation_library = OffenseLibrary() self.defense_library = DefenseLibrary() self.current_hash = 'MOF' starting_formation = Formation() self.lh_subformation = starting_formation.subformations['LT_RT'] self.rh_subformation = starting_formation.subformations['RT_RT'] self.mof_subformation = starting_formation.subformations['MOF_RT'] self.current_subformation = self.mof_subformation self.current_defense = Defense() self.defense_visual_frame = DefenseVisualFrame( self.current_subformation, self.current_defense, self.defense_library.label_mappers['default']) self.scroll_field.setWidget(self.defense_visual_frame) self.edit_formation_name.returnPressed.connect( self.handle_get_composite) self.btn_load_composite.clicked.connect(self.handle_get_composite) self.edit_defense_name.returnPressed.connect(self.handle_get_defense) self.btn_load_defense.clicked.connect(self.handle_get_composite) self.rb_lh.clicked.connect(lambda: self.handle_hash_change('LT')) self.rb_mof.clicked.connect(lambda: self.handle_hash_change('MOF')) self.rb_rh.clicked.connect(lambda: self.handle_hash_change('RT')) self.show() def load_offense_library_from_dict(self, library_dict): self.formation_library = OffenseLibrary.from_dict(library_dict) self.defense_visual_frame.offense_personnel_mapper = self.formation_library.label_mappers[ 'default'] def load_defense_library_from_dict(self, library_dict): self.defense_library = DefenseLibrary.from_dict(library_dict) self.defense_visual_frame.defense_personnel_mapper = self.defense_library.label_mappers[ 'default'] def handle_hash_change(self, hash_mark): try: self.current_hash = hash_mark if hash_mark == 'MOF': self.current_subformation = self.mof_subformation else: self.current_subformation = self.lh_subformation if hash_mark == 'LT' else self.rh_subformation self.defense_visual_frame.offensive_subformation = self.current_subformation self.defense_visual_frame.update() except Exception as e: from traceback import format_exc print(format_exc()) def handle_get_composite(self): formation_name = self.edit_formation_name.text() try: if len(formation_name) > 0: mof_composite = self.formation_library.get_composite_subformation( 'MOF', formation_name)[0] lh_composite = self.formation_library.get_composite_subformation( 'LT', formation_name)[0] rh_composite = self.formation_library.get_composite_subformation( 'RT', formation_name)[0] if mof_composite is not None: self.mof_subformation = mof_composite self.lh_subformation = lh_composite self.rh_subformation = rh_composite if self.current_hash == 'MOF': self.current_subformation = self.mof_subformation else: self.current_subformation = self.lh_subformation if self.current_hash == 'LT' else self.rh_subformation self.defense_visual_frame.offensive_subformation = self.current_subformation self.defense_visual_frame.update() except Exception as e: from traceback import format_exc print(format_exc()) def handle_get_defense(self): defense_name = self.edit_defense_name.text() try: if len(defense_name) > 0: self.current_defense = self.defense_library.get_composite_defense( defense_name) self.defense_visual_frame.defense = self.current_defense self.defense_visual_frame.update() except Exception as e: from traceback import format_exc print(format_exc())