def load_tree_items(self, item_store: TreeStore, root_node): # -> Script [main] root = item_store.append(root_node, [ 'skytemple-e-ground-symbolic', SCRIPT_SCENES, self, MainController, 0, False, '', True ]) self._tree_model = item_store # -> Common [common] item_store.append(root, [ 'skytemple-e-script-symbolic', SCRIPT_SCRIPTS, self, SsbController, 0, False, '', True ]) sub_nodes = { 'S': item_store.append(root, [ 'skytemple-folder-symbolic', _('S - System'), self, FolderController, _('S - System'), False, '', True ]), 'T': item_store.append(root, [ 'skytemple-folder-symbolic', _('T - Town'), self, FolderController, _('T - Town'), False, '', True ]), 'D': item_store.append(root, [ 'skytemple-folder-symbolic', _('D - Dungeon'), self, FolderController, _('D - Dungeon'), False, '', True ]), 'G': item_store.append(root, [ 'skytemple-folder-symbolic', _('G - Guild'), self, FolderController, _('G - Guild'), False, '', True ]), 'H': item_store.append(root, [ 'skytemple-folder-symbolic', _('H - Habitat'), self, FolderController, _('H - Habitat'), False, '', True ]), 'P': item_store.append(root, [ 'skytemple-folder-symbolic', _('P - Places'), self, FolderController, _('P - Places'), False, '', True ]), 'V': item_store.append(root, [ 'skytemple-folder-symbolic', _('V - Visual'), self, FolderController, _('V - Visual'), False, '', True ]) } # Other other = item_store.append(root, [ 'skytemple-folder-symbolic', _('Others'), self, FolderController, None, False, '', True ]) for i, map_obj in enumerate( self.script_engine_file_tree['maps'].values()): parent = other if map_obj['name'][0] in sub_nodes.keys(): parent = sub_nodes[map_obj['name'][0]] self._map_ssas[map_obj['name']] = {} self._map_ssss[map_obj['name']] = {} # -> (Map Name) [map] map_root = item_store.append(parent, [ 'skytemple-folder-symbolic', map_obj['name'], self, MapController, map_obj['name'], False, '', True ]) self._map_scene_root[map_obj['name']] = map_root if map_obj['enter_sse'] is not None: # -> Enter [sse] self._map_sse[map_obj['name']] = item_store.append( map_root, [ 'skytemple-e-ground-symbolic', _('Enter (sse)'), self, SsaController, { 'map': map_obj['name'], 'file': f"{SCRIPT_DIR}/{map_obj['name']}/{map_obj['enter_sse']}", 'type': 'sse', 'scripts': map_obj['enter_ssbs'].copy() }, False, '', True ]) # -> Acting Scripts [lsd] acting_root = item_store.append(map_root, [ 'skytemple-folder-open-symbolic', _('Acting (ssa)'), self, LsdController, map_obj['name'], False, '', True ]) for ssa, ssb in map_obj['ssas']: stem = ssa[:-len(SSA_EXT)] # -> Scene [ssa] filename = f"{SCRIPT_DIR}/{map_obj['name']}/{ssa}" self._map_ssas[map_obj['name']][filename] = item_store.append( acting_root, [ 'skytemple-e-ground-symbolic', stem, self, SsaController, { 'map': map_obj['name'], 'file': filename, 'type': 'ssa', 'scripts': [ssb] }, False, '', True ]) # -> Sub Scripts [sub] sub_root = item_store.append(map_root, [ 'skytemple-folder-open-symbolic', _('Sub (sss)'), self, SubController, map_obj['name'], False, '', True ]) for sss, ssbs in map_obj['subscripts'].items(): stem = sss[:-len(SSS_EXT)] # -> Scene [sss] filename = f"{SCRIPT_DIR}/{map_obj['name']}/{sss}" self._map_ssss[map_obj['name']][filename] = item_store.append( sub_root, [ 'skytemple-e-ground-symbolic', stem, self, SsaController, { 'map': map_obj['name'], 'file': filename, 'type': 'sss', 'scripts': ssbs.copy() }, False, '', True ]) recursive_generate_item_store_row_label(self._tree_model[root])
def load_tree_items(self, item_store: TreeStore, root_node): self.dungeon_bin_context = self.project.open_file_in_rom( DUNGEON_BIN_PATH, FileType.DUNGEON_BIN, static_data=self.project.get_rom_module().get_static_data(), threadsafe=True) with self.dungeon_bin_context as dungeon_bin: self.list_of_wtes_dungeon_bin = dungeon_bin.get_files_with_ext( WTE_FILE_EXT) self.list_of_wtus_dungeon_bin = dungeon_bin.get_files_with_ext( WTU_FILE_EXT) self.list_of_zmappats_dungeon_bin = dungeon_bin.get_files_with_ext( ZMAPPAT_FILE_EXT) root = item_store.append(root_node, [ 'skytemple-e-graphics-symbolic', MISC_GRAPHICS, self, MainController, 0, False, '', True ]) self._tree_model = item_store self._tree_level_iter = {} self._tree_level_dungeon_iter = {} # chr at the beginning: for i, name in enumerate(self.list_of_chrs): self._tree_level_iter[name] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', name, self, ChrController, name, False, '', True ]) sorted_entries = {} for name in self.list_of_w16s: sorted_entries[name] = False for name in self.list_of_wtes: sorted_entries[name] = True sorted_entries = { k: v for k, v in sorted(sorted_entries.items(), key=lambda item: item[0]) } for i, (name, is_wte) in enumerate(sorted_entries.items()): if not is_wte: self._tree_level_iter[name] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', name, self, W16Controller, self.list_of_w16s.index(name), False, '', True ]) else: wtu_name = name[:-3] + WTU_FILE_EXT if wtu_name not in self.list_of_wtus: wtu_name = None self._tree_level_iter[name] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', name, self, WteWtuController, WteOpenSpec(name, wtu_name, False), False, '', True ]) # fonts at the end: for i, name in enumerate(self.list_of_font_dats): spec = FontOpenSpec(name, None, FontType.FONT_DAT) self._tree_level_iter[spec.get_row_name()] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', spec.get_row_name(), self, FontController, spec, False, '', True ]) for i, name in enumerate(self.list_of_font_sir0s): spec = FontOpenSpec(name, None, FontType.FONT_SIR0) self._tree_level_iter[spec.get_row_name()] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', spec.get_row_name(), self, FontController, spec, False, '', True ]) for i, name in enumerate(self.list_of_banner_fonts): for assoc in FONT_PAL_ASSOC: if name == assoc[0]: none_assoc = False pal_name = assoc[1] if pal_name not in self.list_of_bins: pal_name = None if not none_assoc or pal_name != None: if pal_name == None: none_assoc = True spec = FontOpenSpec(name, pal_name, FontType.BANNER_FONT) self._tree_level_iter[ spec.get_row_name()] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', spec.get_row_name(), self, FontController, spec, False, '', True ]) for i, name in enumerate(self.list_of_graphic_fonts): pal_name = name[:-3] + PAL_FILE_EXT if pal_name not in self.list_of_pals: pal_name = None spec = FontOpenSpec(name, pal_name, FontType.GRAPHIC_FONT) self._tree_level_iter[spec.get_row_name()] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', spec.get_row_name(), self, GraphicFontController, spec, False, '', True ]) # dungeon bin entries at the end: for i, name in enumerate( self.list_of_wtes_dungeon_bin): # type: ignore wtu_name = name[:-3] + WTU_FILE_EXT if name[:-3] + WTU_FILE_EXT not in self.list_of_wtus_dungeon_bin: # type: ignore wtu_name = None self._tree_level_dungeon_iter[name] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', 'dungeon.bin:' + name, self, WteWtuController, WteOpenSpec(name, wtu_name, True), False, '', True ]) # zmappat at the end: for i, name in enumerate( self.list_of_zmappats_dungeon_bin): # type: ignore self._tree_level_dungeon_iter[name] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', 'dungeon.bin:' + name, self, ZMappaTController, name, False, '', True ]) # cart removed at the end: self._tree_level_iter[CART_REMOVED_NAME] = item_store.append( root, [ 'skytemple-e-graphics-symbolic', CART_REMOVED_NAME, self, CartRemovedController, CART_REMOVED_NAME, False, '', True ]) recursive_generate_item_store_row_label( self._tree_model[root]) # type: ignore
def load_tree_items(self, item_store: TreeStore, root_node): self._tree_iter = item_store.append(root_node, [ 'skytemple-e-patch-symbolic', 'ASM Patches', self, MainController, 0, False, '', True ]) generate_item_store_row_label(item_store[self._tree_iter]) self._tree_model = item_store
def load_tree_items(self, item_store: TreeStore, root_node): root = item_store.append(root_node, [ 'skytemple-view-list-symbolic', GROUND_LISTS, self, MainController, 0, False, '', True ]) self._actor_tree_iter = item_store.append(root, [ 'skytemple-e-actor-symbolic', _('Actors'), self, ActorListController, 0, False, '', True ]) self._starters_tree_iter = item_store.append(root, [ 'skytemple-e-monster-symbolic', _('Starters'), self, StartersListController, 0, False, '', True ]) self._recruitment_tree_iter = item_store.append( root, [ 'skytemple-e-monster-symbolic', _('Recruitment List'), self, RecruitmentListController, 0, False, '', True ]) self._world_map_tree_iter = item_store.append(root, [ 'skytemple-e-worldmap-symbolic', _('World Map Markers'), self, WorldMapController, 0, False, '', True ]) self._rank_list_tree_iter = item_store.append(root, [ 'skytemple-view-list-symbolic', _('Rank List'), self, RankListController, 0, False, '', True ]) self._menu_list_tree_iter = item_store.append(root, [ 'skytemple-view-list-symbolic', _('Menu List'), self, MenuListController, 0, False, '', True ]) self._sp_effects_tree_iter = item_store.append(root, [ 'skytemple-view-list-symbolic', _('Special Process Effects'), self, SPEffectsController, 0, False, '', True ]) self._dun_inter_tree_iter = item_store.append(root, [ 'skytemple-view-list-symbolic', _('Dungeon Interruptions'), self, DungeonInterruptController, 0, False, '', True ]) self._animations_tree_iter = item_store.append(root, [ 'skytemple-view-list-symbolic', _('Animations'), self, AnimationsController, 0, False, '', True ]) self._dungeon_music_tree_iter = item_store.append( root, [ 'skytemple-e-music-symbolic', _('Dungeon Music'), self, DungeonMusicController, 0, False, '', True ]) self._guest_pokemon_root_iter = item_store.append( root, [ 'skytemple-e-monster-symbolic', _('Guest Pokémon'), self, GuestPokemonController, 0, False, '', True ]) self._special_episodes_root_iter = item_store.append( root, [ 'skytemple-e-monster-symbolic', _('Special Episode PCs'), self, SpecialPcsController, 0, False, '', True ]) self._tactics_root_iter = item_store.append(root, [ 'skytemple-view-list-symbolic', _('Tactics'), self, TacticsController, 0, False, '', True ]) self._iq_tree_iter = item_store.append(root, [ 'skytemple-view-list-symbolic', _('IQ'), self, IqController, 0, False, '', True ]) self._misc_settings_tree_iter = item_store.append( root, [ 'skytemple-view-list-symbolic', _('Misc. Settings'), self, MiscSettingsController, 0, False, '', True ]) generate_item_store_row_label(item_store[root]) generate_item_store_row_label(item_store[self._actor_tree_iter]) generate_item_store_row_label(item_store[self._starters_tree_iter]) generate_item_store_row_label(item_store[self._recruitment_tree_iter]) generate_item_store_row_label(item_store[self._world_map_tree_iter]) generate_item_store_row_label(item_store[self._rank_list_tree_iter]) generate_item_store_row_label(item_store[self._menu_list_tree_iter]) generate_item_store_row_label(item_store[self._sp_effects_tree_iter]) generate_item_store_row_label(item_store[self._dun_inter_tree_iter]) generate_item_store_row_label(item_store[self._animations_tree_iter]) generate_item_store_row_label( item_store[self._dungeon_music_tree_iter]) generate_item_store_row_label( item_store[self._misc_settings_tree_iter]) generate_item_store_row_label( item_store[self._guest_pokemon_root_iter]) generate_item_store_row_label( item_store[self._special_episodes_root_iter]) generate_item_store_row_label(item_store[self._tactics_root_iter]) generate_item_store_row_label(item_store[self._iq_tree_iter]) self._tree_model = item_store
def load_tree_items(self, item_store: TreeStore, root_node): root = item_store.append(root_node, [ 'skytemple-e-mapbg-symbolic', MAPBG_NAME, self, MainController, 0, False, '', True ]) sub_nodes = { 'S': item_store.append(root, [ 'skytemple-folder-symbolic', _('S - System'), self, FolderController, 'S - System', False, '', True ]), 'T': item_store.append(root, [ 'skytemple-folder-symbolic', _('T - Town'), self, FolderController, 'T - Town', False, '', True ]), 'D': item_store.append(root, [ 'skytemple-folder-symbolic', _('D - Dungeon'), self, FolderController, 'D - Dungeon', False, '', True ]), 'G': item_store.append(root, [ 'skytemple-folder-symbolic', _('G - Guild'), self, FolderController, 'G - Guild', False, '', True ]), 'H': item_store.append(root, [ 'skytemple-folder-symbolic', _('H - Habitat'), self, FolderController, 'H - Habitat', False, '', True ]), 'P': item_store.append(root, [ 'skytemple-folder-symbolic', _('P - Places'), self, FolderController, 'P - Places', False, '', True ]), 'V': item_store.append(root, [ 'skytemple-folder-symbolic', _('V - Visual'), self, FolderController, 'V - Visual', False, '', True ]), 'W': item_store.append(root, [ 'skytemple-folder-symbolic', _('W - Weather'), self, FolderController, 'W - Weather', False, '', True ]) } # Other other = item_store.append(root, [ 'skytemple-folder-symbolic', _('Others'), self, FolderController, None, False, '', True ]) self._tree_model = item_store self._tree_level_iter = [] for i, level in enumerate(self.bgs.level): parent = other if level.bma_name[0] in sub_nodes.keys(): parent = sub_nodes[level.bma_name[0]] self._tree_level_iter.append( item_store.append( parent, [ # TODO: Name from Strings 'skytemple-e-mapbg-symbolic', level.bma_name, self, BgController, i, False, '', True ])) recursive_generate_item_store_row_label(self._tree_model[root])
def move_iter(mod: Gtk.TreeStore, iter: Gtk.TreeIter, sibling: Gtk.TreeIter = None, parent: Gtk.TreeIter = None, direction: str = 'before'): """move_iter will move iter relative to sibling or parent. Direction (before or after) tells us whether to insert_before or insert_after (with a sib) or to prepend or append (with a parent).""" if direction != "after": direction = "before" path = mod.get_path(iter) if sibling: dpath = mod.get_path(sibling) elif parent: dpath = mod.get_path(parent) else: dpath = () rowdata = get_row(mod, iter) children = harvest_children(mod, iter) if direction != "after": direction = "before" path = mod.get_path(iter) if sibling: dpath = mod.get_path(sibling) elif parent: dpath = mod.get_path(parent) else: dpath = () rowdata = get_row(mod, iter) children = harvest_children(mod, iter) def insert_new(parent): """A little subroutine to insert our row. We'll call this at the appropriate time depending on the order of source and destination iters""" if not parent: parent = None if len(dpath) > 1: parent = mod.get_iter(dpath[0:-1]) if parent == sibling or not sibling: """If our parent is our destination iter or if we have only a parent specified, we're moving inside, not before""" if direction == "before": return mod.append(parent, rowdata) else: return mod.prepend(parent, rowdata) elif direction == "before": return mod.insert_before(parent, sibling, rowdata) else: return mod.insert_after(parent, sibling, rowdata) # if the source is before the destination, we add then remove. otherwise, we remove then add. path_last = path_compare(path, dpath) if path_last == 1: # Source after destination (remove, then add) remove_children(mod, iter) mod.remove(iter) new = insert_new(parent) insert_children(mod, new, children) elif path_last == 0: debug("Moving into my self is nonsensical!", 1) else: # Source before destination (add, then remove) new = insert_new(parent) insert_children(mod, new, children) remove_children(mod, iter) mod.remove(iter)