|
| 1 | +from uip import ui_settingsWindow |
| 2 | +from PySide6 import QtWidgets, QtCore |
| 3 | +import _thread, api |
| 4 | + |
| 5 | + |
| 6 | +class WheelFilter(QtCore.QObject): |
| 7 | + def __init__(self, scrollarea: QtWidgets.QScrollArea = None): |
| 8 | + super().__init__() |
| 9 | + self.scrollarea = scrollarea |
| 10 | + |
| 11 | + def eventFilter(self, watched, event: QtCore.QEvent): |
| 12 | + if event.type() == QtCore.QEvent.Type.Wheel: |
| 13 | + if self.scrollarea: |
| 14 | + self.scrollarea.wheelEvent(event) |
| 15 | + return True # 跳过 |
| 16 | + return super().eventFilter(watched, event) |
| 17 | + |
| 18 | + |
| 19 | +class SettingsWindow(ui_settingsWindow.Ui_Dialog, QtWidgets.QDialog): |
| 20 | + def __init__(self, parent=None): |
| 21 | + super().__init__(parent=parent) |
| 22 | + self.setupUi(self) |
| 23 | + self.form_names: dict = None |
| 24 | + |
| 25 | + self.setEventFilter() |
| 26 | + self.setupSignal() |
| 27 | + |
| 28 | + def setFormNames(self, fn: dict): |
| 29 | + self.form_names = fn |
| 30 | + |
| 31 | + def setupSignal(self): |
| 32 | + self.label_script_use_full_qua_name.mouseReleaseEvent = self.label_event_1 |
| 33 | + self.label_save_disk.mouseReleaseEvent = self.label_event_2 |
| 34 | + |
| 35 | + def label_event_1(self, event: QtCore.QEvent): |
| 36 | + self.checkBox_script_fully_qua_name.click() |
| 37 | + |
| 38 | + def label_event_2(self, event: QtCore.QEvent): |
| 39 | + self.checkBox_save_disk.click() |
| 40 | + |
| 41 | + def setEventFilter(self): |
| 42 | + self.efs = list() |
| 43 | + for i in self.all_combo_boxes: |
| 44 | + self.efs.append(WheelFilter(self.scrollArea)) |
| 45 | + i.installEventFilter(self.efs[-1]) |
| 46 | + |
| 47 | + @property |
| 48 | + def all_combo_boxes(self): |
| 49 | + return [ |
| 50 | + self.comboBox_ado_exp_form, |
| 51 | + self.comboBox_bund_ass_em, |
| 52 | + self.comboBox_i_exp_form, |
| 53 | + self.comboBox_lm_exp_form, |
| 54 | + self.comboBox_lang_ver, |
| 55 | + self.comboBox_scr_cont_lev, |
| 56 | + self.comboBox_scr_exp_form, |
| 57 | + self.comboBox_shd_form_exp, |
| 58 | + self.comboBox_sprite_exp_form, |
| 59 | + self.comboBox_ta_exp_form, |
| 60 | + ] |
| 61 | + |
| 62 | + @property |
| 63 | + def inversed_settings_mapping(self): |
| 64 | + return dict(map(reversed, self.settings_mapping.items())) |
| 65 | + |
| 66 | + @property |
| 67 | + def settings_mapping(self): |
| 68 | + return { |
| 69 | + "Bundled Assets Export Mode": self.comboBox_bund_ass_em, |
| 70 | + "Script Content Level": self.comboBox_scr_cont_lev, |
| 71 | + "Audio Export Format": self.comboBox_ado_exp_form, |
| 72 | + "Image Export Format": self.comboBox_i_exp_form, |
| 73 | + "Lightmap Texture Export Format": self.comboBox_lm_exp_form, |
| 74 | + "Sprite Export Format": self.comboBox_sprite_exp_form, |
| 75 | + "Shader Export Format": self.comboBox_shd_form_exp, |
| 76 | + "TextAsset Export Format": self.comboBox_ta_exp_form, |
| 77 | + "C# Language Version": self.comboBox_lang_ver, |
| 78 | + "Script Export Format": self.comboBox_scr_exp_form, |
| 79 | + "Default Version": self.lineEdit_def_ver, |
| 80 | + "Target Version For Version Changing": self.lineEdit_targ_ver_chang, |
| 81 | + "Skip StreamingAssets Folder": self.checkBox_skp_opt_fold, |
| 82 | + "Remove Nullable Attributes": self.checkBox_rm_null_attr, |
| 83 | + "Publicize Assemblies": self.checkBox_pub_asm, |
| 84 | + "Enable Prefab Outlining": self.checkBox_enable_pref_ol, |
| 85 | + "Scripts use fully-qualified type names": self.checkBox_script_fully_qua_name, |
| 86 | + "Save Settings to Disk": self.checkBox_save_disk, |
| 87 | + } |
| 88 | + |
| 89 | + @property |
| 90 | + def all_widgets(self): |
| 91 | + return self.settings_mapping.values() |
| 92 | + |
| 93 | + def setData(self, data: dict): |
| 94 | + for i in data.keys(): |
| 95 | + if not i in self.settings_mapping.keys(): |
| 96 | + continue # 付费版功能,咱没有 |
| 97 | + wid = self.settings_mapping[i] |
| 98 | + if type(wid) == QtWidgets.QCheckBox: |
| 99 | + wid.setChecked(data[i]) |
| 100 | + elif type(wid) == QtWidgets.QComboBox: |
| 101 | + wid.setCurrentIndex(data[i]) |
| 102 | + elif type(wid) == QtWidgets.QLineEdit: |
| 103 | + wid.setText(data[i]) |
| 104 | + |
| 105 | + def _get_post_values(self) -> dict: |
| 106 | + ret = dict() |
| 107 | + for i in self.all_widgets: |
| 108 | + if type(i) == QtWidgets.QComboBox: |
| 109 | + form_name = self.form_names[self.inversed_settings_mapping[i]] |
| 110 | + selection = self.form_names[form_name + "_options"][i.currentIndex()] |
| 111 | + ret[form_name] = selection |
| 112 | + elif type(i) == QtWidgets.QCheckBox: |
| 113 | + if not i.isChecked(): |
| 114 | + continue # 没选不需要提交 |
| 115 | + form_name = self.form_names[self.inversed_settings_mapping[i]] |
| 116 | + ret[form_name] = "on" |
| 117 | + elif type(i) == QtWidgets.QLineEdit: |
| 118 | + form_name = self.form_names[self.inversed_settings_mapping[i]] |
| 119 | + ret[form_name] = i.text() |
| 120 | + return ret |
| 121 | + |
| 122 | + def accept(self): |
| 123 | + self._prompt_window = QtWidgets.QLabel("请稍后... Please wait...") |
| 124 | + self._prompt_window.setWindowTitle("加载中... Loading...") |
| 125 | + self._prompt_window.show() |
| 126 | + self.setEnabled(False) |
| 127 | + self.post_ret_code = None |
| 128 | + self.posted = False |
| 129 | + _thread.start_new_thread(self._post_settings, tuple()) |
| 130 | + while not self.posted: |
| 131 | + self.update() |
| 132 | + QtWidgets.QApplication.processEvents() |
| 133 | + self._prompt_window.close() |
| 134 | + self.setEnabled(True) |
| 135 | + if self.post_ret_code == 200 or self.post_ret_code == 302: |
| 136 | + QtWidgets.QMessageBox.information(self, "Success", "Settings Saved") |
| 137 | + else: |
| 138 | + QtWidgets.QMessageBox.critical( |
| 139 | + self, |
| 140 | + "Failed", |
| 141 | + "Cannot Save Settings, status code:" + str(self.post_ret_code), |
| 142 | + ) |
| 143 | + return False |
| 144 | + return super().accept() |
| 145 | + |
| 146 | + def _post_settings(self): |
| 147 | + self.post_ret_code = api.post_settings( |
| 148 | + self._get_post_values(), self.parent().port |
| 149 | + ) |
| 150 | + self.posted = True |
| 151 | + |
| 152 | + |
| 153 | +if __name__ == "__main__": |
| 154 | + qa = QtWidgets.QApplication(list()) |
| 155 | + sw = SettingsWindow() |
| 156 | + sw.show() |
| 157 | + qa.exec() |
0 commit comments