Skip to content

Commit f6e99f1

Browse files
Add files via upload
1 parent ece61bf commit f6e99f1

1 file changed

Lines changed: 157 additions & 0 deletions

File tree

settingsWindow.py

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
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

Comments
 (0)