Beispiel #1
0
    def __init__(self):
        widgets.MainWindow.__init__(
            self,
            "Matcol Editor",
        )

        self.resize(450, 500)

        self.matcol_data = MatcolFile()
        self.file_src = ""
        self.widgets = []
        self.tooltips = config.read_config("ovl_util/tooltips/matcol.txt")
        self.games = ("Jurassic World Evolution", "Planet Zoo")
        self.default_fgms = config.read_list(
            "ovl_util/tooltips/matcol-fgm-names.txt")

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('File')
        helpMenu = mainMenu.addMenu('Help')
        button_data = ( (fileMenu, "Open", self.open_materialcollection, "CTRL+O", ""), \
            (fileMenu, "Save", self.save_materialcollection, "CTRL+S", ""), \
            (fileMenu, "Exit", self.close, "", ""), \
            (helpMenu, "Report Bug", self.report_bug, "", ""), \
            (helpMenu, "Documentation", self.online_support, "", ""), \
            )
        self.add_to_menu(button_data)

        self.cleaner = QtCore.QObjectCleanupHandler()

        self.scrollarea = QtWidgets.QScrollArea(self)
        self.scrollarea.setWidgetResizable(True)
        self.setCentralWidget(self.scrollarea)

        # the actual scrollable stuff
        self.widget = QtWidgets.QWidget()
        self.scrollarea.setWidget(self.widget)

        self.game_container = widgets.LabelCombo("Game:", self.games)
        # self.game_container.entry.currentIndexChanged.connect(self.game_changed)
        self.game_container.entry.setEditable(False)
        self.materialcollection_container = widgets.LabelEdit("MATCOL:")
        self.tex_container = QtWidgets.QGroupBox("Slots")
        self.attrib_container = QtWidgets.QGroupBox("Attributes")

        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addWidget(self.game_container)
        self.vbox.addWidget(self.materialcollection_container)
        self.vbox.addWidget(self.tex_container)
        self.vbox.addWidget(self.attrib_container)
        self.vbox.addStretch(1)
        self.widget.setLayout(self.vbox)

        self.tex_grid = self.create_grid()
        self.attrib_grid = self.create_grid()

        self.tex_container.setLayout(self.tex_grid)
        self.attrib_container.setLayout(self.attrib_grid)
Beispiel #2
0
    def __init__(self):
        widgets.MainWindow.__init__(
            self,
            "OVL Archive Editor",
        )
        self.resize(800, 600)

        self.ovl_data = OvlFile(progress_callback=self.update_progress)

        self.filter = "Supported files ({})".format(" ".join(
            "*" + t for t in extract.SUPPORTED_TYPES))

        self.file_widget = widgets.FileWidget(self, self.cfg)
        self.file_widget.setToolTip(
            "The name of the OVL file that is currently open.")

        self.p_action = QtWidgets.QProgressBar(self)
        self.p_action.setGeometry(0, 0, 200, 15)
        self.p_action.setTextVisible(True)
        self.p_action.setMaximum(1)
        self.p_action.setValue(0)
        self.t_action_current_message = "No operation in progress"
        self.t_action = QtWidgets.QLabel(self,
                                         text=self.t_action_current_message)

        self.game_container = widgets.LabelCombo("Game:", games)
        self.game_container.entry.currentIndexChanged.connect(
            self.game_changed)
        self.game_container.entry.setEditable(False)

        header_names = ["Name", "File Type", "DJB", "Unk0", "Unk1"]
        self.files_container = widgets.SortableTable(header_names, self)
        self.dir_container = widgets.EditCombo(self)
        # toggles
        self.t_show_temp_files = QtWidgets.QCheckBox("Save Temp Files")
        self.t_show_temp_files.setToolTip(
            "By default, temporary files are converted to usable ones and back on the fly."
        )
        self.t_show_temp_files.setChecked(False)

        self.t_2K = QtWidgets.QCheckBox("Inject 2K")
        self.t_2K.setToolTip(
            "Experimental: Increase a JWE Diffuse or Normal map to 2048x2048 resolution."
        )
        self.t_2K.setChecked(False)

        self.sp_hash = QtWidgets.QCheckBox("New Species Hash")
        self.sp_hash.setToolTip("Experimental")
        self.sp_hash.setChecked(False)

        self.ext_dat = QtWidgets.QCheckBox("Use External DAT")
        self.ext_dat.setToolTip(
            "Experimental: Save the ovl with an external STATIC DAT instead of one in memory"
        )
        self.ext_dat.setChecked(False)
        self.ext_dat.stateChanged.connect(self.dat_show)

        self.dat_widget = widgets.FileWidget(self,
                                             self.cfg,
                                             ask_user=False,
                                             dtype="DAT",
                                             poll=False)
        self.dat_widget.setToolTip("External .dat file path")
        self.dat_widget.hide()

        self.e_name_pairs = [(QtWidgets.QLineEdit("old"),
                              QtWidgets.QLineEdit("new")) for i in range(1)]

        self.t_write_dat = QtWidgets.QCheckBox("Save DAT")
        self.t_write_dat.setToolTip(
            "Writes decompressed archive streams to DAT files for debugging.")
        self.t_write_dat.setChecked(False)
        self.t_write_dat.stateChanged.connect(self.load)

        self.t_write_frag_log = QtWidgets.QCheckBox("Save Frag Log")
        self.t_write_frag_log.setToolTip("For devs.")
        self.t_write_frag_log.setChecked(False)
        self.t_write_frag_log.stateChanged.connect(self.load)

        self.qgrid = QtWidgets.QGridLayout()
        self.qgrid.addWidget(self.file_widget, 0, 0, 1, 5)
        self.qgrid.addWidget(self.t_show_temp_files, 1, 0)
        self.qgrid.addWidget(self.t_write_dat, 1, 1)
        self.qgrid.addWidget(self.t_write_frag_log, 1, 2)
        self.qgrid.addWidget(self.ext_dat, 1, 3)
        self.qgrid.addWidget(self.sp_hash, 1, 4)
        for (old, new) in self.e_name_pairs:
            self.qgrid.addWidget(old, 2, 0, 1, 2)
            self.qgrid.addWidget(new, 2, 2, 1, 2)
        self.qgrid.addWidget(
            self.game_container,
            2,
            4,
        )
        self.qgrid.addWidget(self.files_container, 3, 0, 1, 5)
        self.qgrid.addWidget(self.dir_container, 4, 0, 1, 5)
        self.qgrid.addWidget(self.p_action, 5, 0, 1, 5)
        self.qgrid.addWidget(self.t_action, 6, 0, 1, 5)
        self.qgrid.addWidget(self.dat_widget, 7, 0, 1, 5)
        self.central_widget.setLayout(self.qgrid)

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('File')
        editMenu = mainMenu.addMenu('Edit')
        helpMenu = mainMenu.addMenu('Help')
        button_data = (
            (fileMenu, "New", self.file_widget.ask_open_dir, "CTRL+N", "new"),
            (fileMenu, "Open", self.file_widget.ask_open, "CTRL+O", "dir"),
            (fileMenu, "Save", self.save_ovl, "CTRL+S", "save"),
            (fileMenu, "Exit", self.close, "", "exit"),
            (editMenu, "Unpack", self.extract_all, "CTRL+U", "extract"),
            (editMenu, "Inject", self.inject, "CTRL+I", "inject"),
            (editMenu, "Rename", self.hasher, "CTRL+R", ""),
            (editMenu, "Dat Edit", self.dat_replacement, "CTRL+J", ""),
            (editMenu, "Remove Selected", self.remover, "DEL", ""),
            (editMenu, "Walk", self.walker, "", ""),
            # (editMenu, "Reload", self.reload, "", ""),
            (editMenu, "Generate Hash Table", self.walker_hash, "", ""),
            (helpMenu, "Report Bug", self.report_bug, "", "report"),
            (helpMenu, "Documentation", self.online_support, "", "manual"))
        self.add_to_menu(button_data)
        self.check_version()
        self.load_hash_table()
Beispiel #3
0
    def __init__(self):

        """View initializer."""
        super().__init__()

        # save config file name from args
        self.config_path = ''

        # Set some main window's properties
        self.setWindowTitle('Mod Pack Tool ' + __version__ )
        self.setFixedSize(435, 125)

        # Add a menu
        main_menu = QMenuBar(self)
        file_menu = main_menu.addMenu('File')
        help_menu = main_menu.addMenu('Help')
        button_data = (
            (file_menu, "Open", self.load_config, "CTRL+O", "dir"),
            (file_menu, "Save", self.save_config, "CTRL+S", "save"),
            (file_menu, "Exit", self.close, "", "exit"),
            (help_menu, "Report Bug", self.report_bug, "", "report"),
            (help_menu, "Documentation", self.online_support, "", "manual"))
        self.add_to_menu(button_data)
        self.setMenuBar(main_menu)
        self.aboutAction = QAction("&About", self)        
        help_menu.addAction(self.aboutAction)

        # Set the central widget
        self.generalLayout = QVBoxLayout()
        self._centralWidget = QWidget()
        self._centralWidget.setLayout(self.generalLayout)
        self.setCentralWidget(self._centralWidget)

        # Add app widgets
        self.src_widget = widgets.DirWidget(self, {})
        self.src_widget.setToolTip("Source folder to pack files from.")
        self.generalLayout.addWidget(self.src_widget)

        self.dst_widget = widgets.DirWidget(self, {})
        self.dst_widget.setToolTip("Destination folder to pack files to.")
        self.generalLayout.addWidget(self.dst_widget)

        # Add a line for controls
        self.boxLayout = QHBoxLayout()
        self.boxLayout.addStretch(1)
        self.generalLayout.addLayout(self.boxLayout)

        # Add a button
        self.watch = QCheckBox("Watch changes")
        self.watch.setToolTip("Experimental")
        self.watch.setChecked(False)
        self.watch.stateChanged.connect(self.watchChanged)
        self.boxLayout.addWidget(self.watch)
        self.fs_watcher = ''

        self.game_container = widgets.LabelCombo("Game:", [g.value for g in games])
        self.boxLayout.addWidget(self.game_container)
        
        self.packButton = QPushButton("Pack")
        self.boxLayout.addWidget(self.packButton)
        self.packButton.clicked.connect(self.pack_mod)

        if len(sys.argv) > 1:
            self.apply_from_config(sys.argv[1])
Beispiel #4
0
    def __init__(self):
        widgets.MainWindow.__init__(
            self,
            "FGM Editor",
        )

        self.resize(800, 600)

        self.fgm_data = FgmFile()
        self.widgets = []
        self.tooltips = config.read_config("ovl_util/tooltips/fgm.txt")
        self.shaders = {}
        for game in games:
            self.shaders[game] = config.read_list(
                f"ovl_util/tooltips/fgm-shaders-{game.lower().replace(' ', '-')}.txt"
            )

        self.cleaner = QtCore.QObjectCleanupHandler()

        self.scrollarea = QtWidgets.QScrollArea(self)
        self.scrollarea.setWidgetResizable(True)
        self.setCentralWidget(self.scrollarea)

        # the actual scrollable stuff
        self.widget = QtWidgets.QWidget()
        self.scrollarea.setWidget(self.widget)

        self.game_container = widgets.LabelCombo("Game:", games)
        self.game_container.entry.currentIndexChanged.connect(
            self.game_changed)
        self.game_container.entry.setEditable(False)
        self.file_widget = widgets.FileWidget(self, self.cfg, dtype="FGM")
        self.shader_container = widgets.LabelCombo("Shader:", ())
        self.shader_container.entry.activated.connect(self.shader_changed)
        self.tex_container = QtWidgets.QGroupBox("Textures")
        self.attrib_container = QtWidgets.QGroupBox("Attributes")

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.file_widget)
        vbox.addWidget(self.game_container)
        vbox.addWidget(self.shader_container)
        vbox.addWidget(self.tex_container)
        vbox.addWidget(self.attrib_container)
        vbox.addStretch(1)
        self.widget.setLayout(vbox)

        self.tex_grid = self.create_grid()
        self.attrib_grid = self.create_grid()

        self.tex_container.setLayout(self.tex_grid)
        self.attrib_container.setLayout(self.attrib_grid)

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('File')
        helpMenu = mainMenu.addMenu('Help')
        button_data = ( (fileMenu, "Open", self.file_widget.ask_open, "CTRL+O", ""), \
            (fileMenu, "Save", self.save_fgm, "CTRL+S", ""), \
            (fileMenu, "Exit", self.close, "", ""), \
            (helpMenu, "Report Bug", self.report_bug, "", ""), \
            (helpMenu, "Documentation", self.online_support, "", ""), \
            )
        self.add_to_menu(button_data)
Beispiel #5
0
    def __init__(self):
        widgets.MainWindow.__init__(
            self,
            "OVL Archive Editor",
        )
        self.resize(800, 600)

        self.ovl_data = OvlFile(progress_callback=self.update_progress)
        self.ovl_data.load_hash_table()

        self.filter = "Supported files ({})".format(" ".join(
            "*" + t for t in SUPPORTED_TYPES))

        self.file_widget = widgets.FileWidget(self, self.cfg)
        self.file_widget.setToolTip(
            "The name of the OVL file that is currently open")

        self.p_action = QtWidgets.QProgressBar(self)
        self.p_action.setGeometry(0, 0, 200, 15)
        self.p_action.setTextVisible(True)
        self.p_action.setMaximum(1)
        self.p_action.setValue(0)
        self.t_action_current_message = "No operation in progress"
        self.t_action = QtWidgets.QLabel(self,
                                         text=self.t_action_current_message)

        self.game_choice = widgets.LabelCombo("Game:",
                                              [g.value for g in games])
        # only listen to user changes
        self.game_choice.entry.textActivated.connect(self.game_changed)
        self.game_choice.entry.setEditable(False)

        self.compression_choice = widgets.LabelCombo(
            "Compression:", [c.name for c in Compression])
        # only listen to user changes
        self.compression_choice.entry.textActivated.connect(
            self.compression_changed)
        self.compression_choice.entry.setEditable(False)

        header_names = ["Name", "File Type", "DJB"]

        self.model = QtWidgets.QFileSystemModel()
        self.dirs_container = QtWidgets.QTreeView()
        self.dirs_container.setModel(self.model)
        self.dirs_container.setColumnHidden(1, True)
        self.dirs_container.setColumnHidden(2, True)
        self.dirs_container.setColumnHidden(3, True)
        self.dirs_container.doubleClicked.connect(self.dirs_clicked)
        self.set_game_dir()

        self.dirs_container.header().setSortIndicator(0,
                                                      QtCore.Qt.AscendingOrder)
        self.dirs_container.model().sort(
            self.dirs_container.header().sortIndicatorSection(),
            self.dirs_container.header().sortIndicatorOrder())

        self.dirs_container.setAnimated(False)
        self.dirs_container.setIndentation(20)
        self.dirs_container.setSortingEnabled(True)

        self.dirs_container.setWindowTitle("Dir View")
        self.dirs_container.resize(640, 480)

        # create the table
        self.files_container = widgets.SortableTable(header_names,
                                                     IGNORE_TYPES)
        # connect the interaction functions
        self.files_container.table.model.member_renamed.connect(
            self.rename_handle)
        self.files_container.table.files_dragged.connect(self.drag_files)
        self.files_container.table.files_dropped.connect(self.inject_files)
        # self.files_container.table.file_selected.connect(self.show_dependencies)

        self.included_ovls_view = widgets.EditCombo(self)
        self.included_ovls_view.setToolTip(
            "These OVL files are loaded by the current OVL file, so their files are included"
        )
        self.included_ovls_view.entries_changed.connect(
            self.ovl_data.set_included_ovl_names)

        self.dat_widget = widgets.FileWidget(self,
                                             self.cfg,
                                             ask_user=False,
                                             dtype="DAT",
                                             poll=False)
        self.dat_widget.setToolTip(
            "External .dat file path to overwrite internal OVS data")
        self.dat_widget.hide()

        right_frame = QtWidgets.QWidget()
        hbox = QtWidgets.QVBoxLayout()
        hbox.addWidget(self.file_widget)
        hbox.addWidget(self.files_container)
        hbox.addWidget(self.included_ovls_view)
        hbox.addWidget(self.dat_widget)
        right_frame.setLayout(hbox)

        # toggles
        self.t_show_temp_files = QtWidgets.QCheckBox("Save Temp Files")
        self.t_show_temp_files.setToolTip(
            "By default, temporary files are converted to usable ones and back on the fly"
        )
        self.t_show_temp_files.setChecked(False)

        self.in_folder = QtWidgets.QCheckBox("Process Folder")
        self.in_folder.setToolTip(
            "Runs commands on all OVLs of current folder")
        self.in_folder.setChecked(False)

        self.ext_dat = QtWidgets.QCheckBox("Use External DAT")
        self.ext_dat.setToolTip(
            "Experimental: Save the ovl with an external STATIC DAT instead of one in memory"
        )
        self.ext_dat.setChecked(False)
        self.ext_dat.stateChanged.connect(self.dat_show)

        self.t_animal_ovl = QtWidgets.QCheckBox("Animal OVL Mode")
        self.t_animal_ovl.setToolTip(
            "Renames only MS2, MDL2 and MOTIONGRAPH files.")
        self.t_animal_ovl.setChecked(False)

        self.t_unsafe = QtWidgets.QCheckBox("Unsafe Mode")
        self.t_unsafe.setToolTip(
            "Forces unsafe (brute force) replacement. May break your files.")
        self.t_unsafe.setChecked(False)

        self.e_name_old = QtWidgets.QTextEdit("old")
        self.e_name_new = QtWidgets.QTextEdit("new")
        self.e_name_old.setFixedHeight(100)
        self.e_name_new.setFixedHeight(100)
        self.e_name_old.setTabChangesFocus(True)
        self.e_name_new.setTabChangesFocus(True)

        self.t_write_dat = QtWidgets.QCheckBox("Save DAT")
        self.t_write_dat.setToolTip(
            "Writes decompressed archive streams to DAT files for debugging")
        self.t_write_dat.setChecked(False)
        self.t_write_dat.stateChanged.connect(self.load)

        self.splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        self.splitter.addWidget(self.dirs_container)
        self.splitter.addWidget(right_frame)
        self.splitter.setSizes([200, 400])
        self.splitter.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                    QtWidgets.QSizePolicy.Expanding)

        self.qgrid = QtWidgets.QGridLayout()
        self.qgrid.addWidget(self.e_name_old, 0, 0, 5, 1)
        self.qgrid.addWidget(self.e_name_new, 0, 1, 5, 1)

        self.qgrid.addWidget(self.t_show_temp_files, 0, 3)
        self.qgrid.addWidget(self.t_write_dat, 1, 3)
        self.qgrid.addWidget(self.ext_dat, 2, 3)
        self.qgrid.addWidget(self.in_folder, 3, 3)
        self.qgrid.addWidget(
            self.game_choice,
            0,
            4,
        )
        self.qgrid.addWidget(
            self.compression_choice,
            1,
            4,
        )
        self.qgrid.addWidget(self.t_animal_ovl, 2, 4)
        self.qgrid.addWidget(self.t_unsafe, 3, 4)

        self.qgrid.addWidget(self.splitter, 5, 0, 1, 5)
        self.qgrid.addWidget(self.p_action, 6, 0, 1, 5)
        self.qgrid.addWidget(self.t_action, 7, 0, 1, 5)

        self.central_widget.setLayout(self.qgrid)

        main_menu = self.menuBar()
        file_menu = main_menu.addMenu('File')
        edit_menu = main_menu.addMenu('Edit')
        util_menu = main_menu.addMenu('Util')
        help_menu = main_menu.addMenu('Help')
        button_data = ((file_menu, "New", self.file_widget.ask_open_dir,
                        "CTRL+N", "new"),
                       (file_menu, "Open", self.file_widget.ask_open, "CTRL+O",
                        "dir"), (file_menu, "Save", self.save_ovl, "CTRL+S",
                                 "save"),
                       (file_menu, "Save As", self.save_as_ovl, "CTRL+SHIFT+S",
                        "save"), (file_menu, "Exit", self.close, "", "exit"),
                       (edit_menu, "Unpack", self.extract_all, "CTRL+U",
                        "extract"), (edit_menu, "Inject", self.inject_ask,
                                     "CTRL+I", "inject"),
                       (edit_menu, "Rename", self.rename, "CTRL+R",
                        ""), (edit_menu, "Rename Contents",
                              self.rename_contents, "CTRL+SHIFT+R", ""),
                       (edit_menu, "Remove Selected", self.remover, "DEL",
                        ""), (util_menu, "Inspect Models", self.inspect_models,
                              "", ""), (util_menu, "Inspect FGMs",
                                        self.walker_fgm, "", ""),
                       (util_menu, "Generate Hash Table", self.walker_hash, "",
                        ""), (util_menu, "Save Frag Log",
                              self.ovl_data.dump_frag_log, "",
                              ""), (util_menu, "Open Tools Dir",
                                    self.open_tools_dir, "", ""),
                       (util_menu, "Export File List", self.save_file_list, "",
                        ""), (util_menu, "Set Game Dir", self.ask_game_dir, "",
                              ""), (util_menu, "Export included ovl list",
                                    self.save_included_ovls, "", ""),
                       (help_menu, "Report Bug", self.report_bug, "",
                        "report"), (help_menu, "Documentation",
                                    self.online_support, "", "manual"))
        self.add_to_menu(button_data)
        self.check_version()
Beispiel #6
0
    def load_materialcollection(self):
        if self.file_src:
            for w in self.widgets:
                w.deleteLater()
            self.cfg[
                "dir_materialcollections_in"], materialcollection_name = os.path.split(
                    self.file_src)
            try:
                self.matcol_data.load(self.file_src)
                game = get_game(self.matcol_data)[0]
                print("from game", game)
                self.game_container.entry.setText(game.value)

                self.materialcollection_container.entry.setText(
                    materialcollection_name)

                # delete existing widgets
                self.clear_layout(self.tex_grid)
                self.clear_layout(self.attrib_grid)

                self.tex_grid = self.create_grid()
                self.attrib_grid = self.create_grid()

                self.tex_container.setLayout(self.tex_grid)
                self.attrib_container.setLayout(self.attrib_grid)
                line_i = 0
                for i, tex in enumerate(self.matcol_data.textures):
                    # w = widgets.VectorEntry(tex, self.tooltips)
                    # form.addRow(w.label, w.data)
                    box = widgets.CollapsibleBox(f"Slot {i}")
                    # box = QtWidgets.QGroupBox(f"Slot {i}")
                    self.tex_grid.addWidget(box, line_i, 0)
                    line_i += 1
                    lay = self.create_grid()
                    a = QtWidgets.QLabel("texture type")
                    b = QtWidgets.QLabel("texture suffix")
                    x = QtWidgets.QLineEdit(tex.texture_type)
                    y = QtWidgets.QLineEdit(tex.texture_suffix)

                    combo = widgets.LabelCombo("First FGM:", self.default_fgms,
                                               tex, "fgm_name")
                    lay.addWidget(a, 0, 0)
                    lay.addWidget(b, 1, 0)
                    lay.addWidget(x, 0, 1)
                    lay.addWidget(y, 1, 1)
                    lay.addWidget(combo.label, 2, 0)
                    lay.addWidget(combo.entry, 2, 1)
                    box.setLayout(lay)

                line_i = 0
                for i, attrib in enumerate(self.matcol_data.layers):
                    box = widgets.CollapsibleBox(f"Slot {i}")
                    self.attrib_grid.addWidget(box, line_i, 0)
                    line_i += 1
                    lay = self.create_grid()
                    combo = widgets.LabelCombo("FGM:", self.default_fgms,
                                               attrib, "name")
                    lay.addWidget(combo.label, 0, 0)
                    lay.addWidget(combo.entry, 0, 1)
                    l = 1
                    for infow in attrib.infos:
                        w = widgets.MatcolInfo(infow, self.tooltips)
                        lay.addWidget(w.label, l, 0)
                        lay.addWidget(w.data, l, 1)
                        l += 1
                    box.setLayout(lay)

                line_i = 0
                # for zstr in self.matcol_data.layers:
                #
                # 	a = QtWidgets.QLabel("variant fgm")
                # 	b = QtWidgets.QLineEdit(zstr)
                # 	self.attrib_grid.addWidget(a, line_i, 0)
                # 	self.attrib_grid.addWidget(b, line_i, 1)
                # 	line_i += 1

            except Exception as ex:
                ovl_util.interaction.showdialog(str(ex))
                print(traceback.print_exc())
            print("Done!")
Beispiel #7
0
	def __init__(self):
		widgets.MainWindow.__init__(self, "FGM Editor", )
		
		self.resize(800, 600)

		self.fgm_data = FgmFile()
		self.tooltips = config.read_config("ovl_util/tooltips/fgm.txt")
		self.games = [g.value for g in games]
		self.fgm_dict = None

		self.cleaner = QtCore.QObjectCleanupHandler()

		self.scrollarea = QtWidgets.QScrollArea(self)
		self.scrollarea.setWidgetResizable(True)
		self.setCentralWidget(self.scrollarea)

		# the actual scrollable stuff
		self.widget = QtWidgets.QWidget()
		self.scrollarea.setWidget(self.widget)

		self.game_container = widgets.LabelCombo("Game:", self.games)
		self.game_container.entry.currentIndexChanged.connect(self.game_changed)
		self.game_container.entry.setEditable(False)
		self.file_widget = widgets.FileWidget(self, self.cfg, dtype="FGM")

		self.shader_choice = widgets.LabelCombo("Shader:", ())
		self.shader_choice.entry.activated.connect(self.shader_changed)
		self.attribute_choice = widgets.LabelCombo("Attribute:", ())
		self.texture_choice = widgets.LabelCombo("Texture:", ())
		self.attribute_add = QtWidgets.QPushButton("Add Attribute")
		self.attribute_add.clicked.connect(self.add_attribute)
		self.texture_add = QtWidgets.QPushButton("Add Texture")
		self.texture_add.clicked.connect(self.add_texture)

		self.tex_container = ProptertyContainer(self, "Textures")
		self.attrib_container = ProptertyContainer(self, "Attributes")

		self.game_changed()
		# self.populate_choices()
		self.shader_changed()

		vbox = QtWidgets.QVBoxLayout()
		vbox.addWidget(self.file_widget)
		vbox.addWidget(self.game_container)
		vbox.addWidget(self.shader_choice)
		vbox.addWidget(self.attribute_choice)
		vbox.addWidget(self.attribute_add)
		vbox.addWidget(self.texture_choice)
		vbox.addWidget(self.texture_add)
		vbox.addWidget(self.tex_container)
		vbox.addWidget(self.attrib_container)
		vbox.addStretch(1)
		self.widget.setLayout(vbox)

		main_menu = self.menuBar()
		file_menu = main_menu.addMenu('File')
		help_menu = main_menu.addMenu('Help')
		button_data = (
			(file_menu, "Open", self.file_widget.ask_open, "CTRL+O", "dir"),
			(file_menu, "Save", self.save_fgm, "CTRL+S", "save"),
			(file_menu, "Save As", self.save_as_fgm, "CTRL+SHIFT+S", "save"),
			(file_menu, "Exit", self.close, "", "exit"),
			(help_menu, "Report Bug", self.report_bug, "", "report"),
			(help_menu, "Documentation", self.online_support, "", "manual")
		)
		self.add_to_menu(button_data)