load courtroom_design.ini (wip)

This commit is contained in:
cidoku 2025-10-11 04:14:26 -03:00
parent 22e576c775
commit bf6889a957
2 changed files with 124 additions and 5 deletions

View File

@ -2,7 +2,7 @@
# window size is defined at the end of the file
# IC viewport
_scale = 2
_scale = 2.5
self.viewport.setGeometry(0, 0, 256 * _scale, 192 * _scale)
# Textbox

View File

@ -140,7 +140,7 @@ class MusicDownloadThread(QtCore.QThread):
try:
response = urlopen(request, timeout=5)
except Exception as e:
print "[audio] There's no response, aborting. Details below:"
print "[audio] HTTP request failed, aborting... Details below:"
print "[audio]", e, url
self.quit()
return
@ -171,7 +171,7 @@ class MusicDownloadThread(QtCore.QThread):
self.caller.stream = create_string_buffer(stream)
self.finished_signal.emit(file_length)
else:
print "[audio] There's no response, aborting..."
print "[audio] Stream is empty, aborting..."
self.quit()
return
@ -811,6 +811,7 @@ class EditEvidenceDialog(QtGui.QDialog):
self.cancel.clicked.connect(self.onCancelClicked)
self.cancel.move(264 + 16, 384 - self.cancel.size().height() - 2)
self.choosepic = QtGui.QComboBox(self)
self.choosepic.setEditable(True)
self.choosepic.setGeometry(self.eviname.x() + self.eviname.size().width() - 128 - 84, self.eviname.y() + 70 - 32, 128, 24)
self.filenames = []
self.browse = QtGui.QPushButton(self)
@ -1310,6 +1311,7 @@ class GUI(QtGui.QWidget):
self.cbPair = QtGui.QCheckBox(self.tabPair)
self.cbPair.setChecked(False)
self.boxPair = QtGui.QComboBox(self.tabPair)
self.boxPair.setEditable(True)
self.sliPairOffset = QtGui.QSlider(QtCore.Qt.Horizontal, self.tabPair)
self.sliPairOffset.setRange(-100, 100)
self.sliPairOffset.setValue(0)
@ -1468,6 +1470,11 @@ class GUI(QtGui.QWidget):
self.btnCallMod.setText('Call mod')
self.btnCallMod.clicked.connect(self.onCallModClicked)
self.btnReloadTheme = QtGui.QPushButton(self)
self.btnReloadTheme.setText('Reload theme')
self.btnReloadTheme.clicked.connect(self.onReloadThemeClicked)
self.btnReloadTheme.setVisible(False)
self.btnSettings = QtGui.QPushButton("Settings", self)
self.btnSettings.clicked.connect(self.gamewindow.showSettings)
@ -1703,28 +1710,124 @@ class GUI(QtGui.QWidget):
self.viewportScale = 1
self.nameFontPointSize = 12
self.textFontPointSize = 24
self.emotePageGeometry = (526, 384, 288, 98)
self.loadTheme()
def loadTheme(self, switching=False):
theme = getOption("General", "theme", "default")
try:
stylesheet = ""
self.emotePageGeometry = []
self.gamewindow.setStyleSheet("")
self.chatbox.resetGeometry()
self.btnReloadTheme.setVisible(False)
self.btnRealization.setPixmaps(theme)
self.btnShake.setPixmaps(theme)
self.btnObjection.setPixmaps(theme)
self.btnTakeThat.setPixmaps(theme)
self.btnHoldIt.setPixmaps(theme)
# Design
courtroomDesign = AO2XPpath + "ao2xp_themes/" + theme + '/courtroom_design.ini'
if exists(courtroomDesign):
design = {}
with open(courtroomDesign) as f:
for keys in f.read().split("\n"):
if not keys or "=" not in keys or keys[0] == ";": continue
key, value = keys.split("=")
design[key.strip()] = value.replace(" ", "").split(',')
geometry = {
"viewport": self.viewport,
"ic_chatlog": self.gameTabs,
"server_chatlog": self.OOCLog,
"ooc_chat_name": self.OOCNameInput,
"ooc_chat_message": self.OOCInput,
"music_label": self.lblMusicVolume,
"sfx_label": self.lblSoundVolume,
"blip_label": self.lblBlipsVolume,
"music_slider": self.sliMusicVolume,
"sfx_slider": self.sliSoundVolume,
"blip_slider": self.sliBlipsVolume,
"emote_dropdown": self.boxEmotes,
"effects_dropdown": self.boxEffects,
"pos_dropdown": self.boxPositions,
"text_color": self.boxColors,
"pre_no_interrupt": self.cbNoInterrupt,
"change_character": self.btnChangeChar,
"call_mod": self.btnCallMod,
"reload_theme": self.btnReloadTheme,
"ic_chat_name": self.shownameEdit,
"settings": self.btnSettings,
"ao2_chatbox": self.chatbox,
"ao2_ic_chat_message": self.ICChatInput,
"message": self.text,
"showname": self.name,
"music_list": self.serverTabs
}
move = {
"pre": self.cbPreanim,
"flip": self.cbFlip,
"additive": self.cbAdditive,
"slide_enable": self.cbSlide,
"hold_it": self.btnHoldIt,
"objection": self.btnObjection,
"take_that": self.btnTakeThat,
"custom_objection": self.btnCustomObjection,
"emote_left": self.btnPrevEmotePage,
"emote_right": self.btnNextEmotePage,
"realization": self.btnRealization,
"screenshake": self.btnShake,
"not_guilty": self.btnNotGuilty,
"guilty": self.btnGuilty,
"witness_testimony": self.btnWitnessTestimony,
"cross_examination": self.btnCrossExamination,
}
bars = {
"defense_bar": self.btnDefenseBar,
"prosecution_bar": self.btnProsecutionBar
}
for e in geometry.keys():
if e in design:
geometry[e].setGeometry(*[int(x) for x in design[e]])
for e in move.keys():
if e in design:
move[e].move(*[int(x) for x in design[e]][0:2])
for e in bars.keys():
if e in design:
bars[e].moveBar(*[int(x) for x in design[e]][0:2])
if "emotes" in design:
self.emotePageGeometry = [int(x) for x in design["emotes"]]
else:
self.emotePageGeometry = [0, 0, 0, 0]
if "emote_button_spacing" in design:
self.emotePageGeometry += [int(x) for x in design["emote_button_spacing"]]
else:
self.emotePageGeometry += [1, 1]
if "found_song_color" in design:
self.foundSongItemColor = QtGui.QColor(*[int(x) for x in design["found_song_color"]])
self.btnReloadTheme.setVisible(True)
else:
# Try to load ao2xp theme
pass
with open(AO2XPpath + "ao2xp_themes/" + theme + "/theme.py") as t:
exec t
if switching:
# This is to reset the colors on the music list. Not necessary on startup
self.onMusicSearch("")
self.viewportScale = self.viewport.height() / float(192)
self.court.resize(self.viewport.size())
@ -1740,6 +1843,7 @@ class GUI(QtGui.QWidget):
self.ao2text.setGeometry(self.text.geometry())
self.ao2text.setStyleSheet(self.text.styleSheet())
self.sliDemoSeekbar.setGeometry(self.ICChatInput.geometry())
# Theme chatbox
chatboxPixmap = QtGui.QPixmap(testPath(
@ -1774,6 +1878,16 @@ class GUI(QtGui.QWidget):
self.presentedEvidence.setGeometry(self.viewport.x() + 16, self.viewport.y() + 16, 70 * self.viewportScale, 70 * self.viewportScale)
# Theme fonts
courtroomFonts = AO2XPpath + "ao2xp_themes/" + theme + '/courtroom_fonts.ini'
if exists(courtroomFonts):
fonts = {}
with open(courtroomDesign) as f:
for keys in f.read().split("\n"):
if not keys or "=" not in keys or keys[0] == ";": continue
key, value = keys.split("=")
fonts[key.strip()] = value.replace(" ", "").split(',')
fontDb = None
nameFont = None
textFont = None
@ -1792,6 +1906,8 @@ class GUI(QtGui.QWidget):
label.resize(self.viewport.width(), label.sizeHint().height())
label.setFont(nameFont)
# Load emote buttons
# TODO: Buggy on theme switch / reload
xMod_count = yMod_count = 0
left, top, width, height, hSpacing, vSpacing = self.emotePageGeometry
columns = (width - 40) / (hSpacing + 40) + 1
@ -2515,6 +2631,9 @@ class GUI(QtGui.QWidget):
self.tcp.send("ZZ#"+reason.toUtf8() + "#%")
else:
self.tcp.send("ZZ#%")
def onReloadThemeClicked(self):
self.loadTheme()
def onChangeCharClicked(self):
if self.demoPlaying: