示例#1
0
    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])
示例#2
0
    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
示例#3
0
文件: module.py 项目: retke/skytemple
 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
示例#4
0
 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
示例#5
0
    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])
示例#6
0
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)