diff --git a/AO2XPbase/ao2xp_themes/default/theme.py b/AO2XPbase/ao2xp_themes/default/theme.py index cd8abdd..91cfb95 100644 --- a/AO2XPbase/ao2xp_themes/default/theme.py +++ b/AO2XPbase/ao2xp_themes/default/theme.py @@ -1,8 +1,7 @@ self.gamewindow.setFixedSize(820, 730) -self.text.resize(VIEWPORT_W, 96) -self.text.move(6, 20) -self.text.setStyleSheet('color: white;') +self.text.setGeometry(16, 32, VIEWPORT_W - 32, 112) +self.text.setStyleSheet('background-color: rgba(0, 0, 0, 0); color: white;') self.ao2text.setGeometry(16, 32, VIEWPORT_W - 32, 112) self.ao2text.setStyleSheet("background-color: rgba(0, 0, 0, 0); color: white;") @@ -42,14 +41,23 @@ self.musicitems.setGeometry(814 - 288, 468, 288, 256) self.icLog.setGeometry(8, 8, 714 - 304 - 22, 212) self.evidencedropdown.setGeometry(8, 8, 192, 20) +self.privatedropdown.setGeometry(8, 8, 192, 20) self.evidencedesc.setGeometry(8, 108, 714 - 304 - 22, 112) self.evidenceimage.setGeometry(326, 8, 70, 70) + self.evidenceadd.move(8, 32) -self.evidenceadd.resize(60, 23) -self.evidenceedit.move(3 + self.evidenceadd.x() + self.evidenceadd.size().width(), 32) -self.evidencedelete.move(3 + self.evidenceedit.x() + self.evidenceedit.size().width(), 32) -self.evidenceload.move(3 + self.evidencedelete.x() + self.evidencedelete.size().width(), 32) -self.evidencesave.move(3 + self.evidenceload.x() + self.evidenceload.size().width(), 32) +self.evidenceedit.move(3 + self.evidenceadd.x() + self.evidenceadd.size().width(), self.evidenceadd.y()) +self.evidencedelete.move(3 + self.evidenceedit.x() + self.evidenceedit.size().width(), self.evidenceadd.y()) +self.evidencemoveprivate.move(3 + self.evidencedelete.x() + self.evidencedelete.size().width(), self.evidenceadd.y()) +self.evidencemoveallprivate.move(3 + self.evidencemoveprivate.x() + self.evidencemoveprivate.size().width(), self.evidenceadd.y()) +self.evidencemoveglobal.move(3 + self.evidencedelete.x() + self.evidencedelete.size().width(), self.evidenceadd.y()) +self.evidencemoveallglobal.move(3 + self.evidencemoveprivate.x() + self.evidencemoveprivate.size().width(), self.evidenceadd.y()) +self.evidenceswitchprivate.move(3 + self.evidencemoveallprivate.x() + self.evidencemoveallprivate.size().width(), self.evidenceadd.y()) +self.evidenceswitchglobal.move(3 + self.evidencemoveallprivate.x() + self.evidencemoveallprivate.size().width(), self.evidenceadd.y()) + +self.evidenceload.move(3 + self.evidenceswitchprivate.x() + self.evidenceswitchprivate.size().width(), self.evidenceadd.y()) +self.evidencesave.move(3 + self.evidenceload.x() + self.evidenceload.size().width(), self.evidenceadd.y()) + self.evidencepresent.move((714 - 304 - 22) / 2 - self.evidencepresent.button_off.size().width() / 2, self.evidencedesc.y() - self.evidencepresent.button_off.size().height()) self.msgqueueList.setGeometry(8, 8, 714 - 304 - 22, 180) diff --git a/gameview.py b/gameview.py index 93daf8a..4df6d13 100644 --- a/gameview.py +++ b/gameview.py @@ -686,6 +686,7 @@ class gui(QtGui.QWidget): chatmsg = '' charid = -1 login = False + privateinv = False #ICchat = QtCore.pyqtSignal(str, str, str, str, str, str, int, int, int, int, int, int, int, int) #ICchat = QtCore.pyqtSignal(list) @@ -825,34 +826,71 @@ class gui(QtGui.QWidget): self.icLog.textChanged.connect(self.icLogChanged) self.evidencedropdown = QtGui.QComboBox(self.gametab_evidence) - self.evidencedropdown.currentIndexChanged.connect(self.changeEvidence) + self.evidencedropdown.currentIndexChanged.connect(self.changeGlobalEvidence) + self.privatedropdown = QtGui.QComboBox(self.gametab_evidence) + self.privatedropdown.currentIndexChanged.connect(self.changePrivateEvidence) + self.evidencedesc = QtGui.QTextEdit(self.gametab_evidence) self.evidencedesc.setReadOnly(True) self.evidenceimage = QtGui.QLabel(self.gametab_evidence) self.evidenceimage.setPixmap(QtGui.QPixmap(AOpath + 'evidence/empty.png')) self.evidenceimage.show() - self.evidenceadd = QtGui.QPushButton(self.gametab_evidence) - self.evidenceadd.setText('Add') + self.evidenceadd = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "add.png"), "", self.gametab_evidence) + self.evidenceadd.setToolTip('Add new evidence') self.evidenceadd.clicked.connect(self.onAddEvidence) - self.evidenceedit = QtGui.QPushButton(self.gametab_evidence) - self.evidenceedit.setText('Edit') + self.evidenceadd.resize(self.evidenceadd.sizeHint()) + self.evidenceedit = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "edit.png"), "", self.gametab_evidence) + self.evidenceedit.setToolTip('Edit selected evidence') self.evidenceedit.clicked.connect(self.onEditEvidence) - self.evidenceedit.resize(self.evidenceadd.size()) - self.evidencedelete = QtGui.QPushButton(self.gametab_evidence) - self.evidencedelete.setText('Delete') + self.evidencedelete = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "delete.png"), "", self.gametab_evidence) + self.evidencedelete.setToolTip('Delete selected evidence') self.evidencedelete.clicked.connect(self.onDeleteEvidence) + self.evidenceload = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "folder.png"), "", self.gametab_evidence) + self.evidenceload.setToolTip('Import all evidence from file') + self.evidenceload.clicked.connect(self.onImportEvidence) + self.evidencesave = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "disk.png"), "", self.gametab_evidence) + self.evidencesave.setToolTip('Export all evidence to file') + self.evidencesave.clicked.connect(self.onExportEvidence) + + self.evidencemoveprivate = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "arrow_right.png"), "", self.gametab_evidence) + self.evidencemoveprivate.setToolTip('Transfer selected evidence to private inventory') + self.evidencemoveprivate.clicked.connect(self.onTransferEvidence) + self.evidencemoveallprivate = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "arrow_right2.png"), "", self.gametab_evidence) + self.evidencemoveallprivate.setToolTip('Transfer all evidence to private inventory') + self.evidencemoveallprivate.clicked.connect(self.onTransferAllEvidence) + + self.evidencemoveglobal = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "arrow_left.png"), "", self.gametab_evidence) + self.evidencemoveglobal.setToolTip('Transfer selected evidence to global inventory') + self.evidencemoveglobal.clicked.connect(self.onTransferEvidence) + self.evidencemoveallglobal = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "arrow_left2.png"), "", self.gametab_evidence) + self.evidencemoveallglobal.setToolTip('Transfer all evidence to global inventory') + self.evidencemoveallglobal.clicked.connect(self.onTransferAllEvidence) + + self.evidenceswitchprivate = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "world.png"), "", self.gametab_evidence) + self.evidenceswitchprivate.setToolTip('Switch to private inventory') + self.evidenceswitchprivate.clicked.connect(self.onSwitchInventory) + self.evidenceswitchglobal = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "briefcase.png"), "", self.gametab_evidence) + self.evidenceswitchglobal.setToolTip('Switch to global inventory') + self.evidenceswitchglobal.clicked.connect(self.onSwitchInventory) + + self.evidenceedit.resize(self.evidenceadd.size()) self.evidencedelete.resize(self.evidenceadd.size()) - self.evidenceload = QtGui.QPushButton(self.gametab_evidence) - self.evidenceload.setText('Load') - self.evidenceload.clicked.connect(self.onLoadEvidence) self.evidenceload.resize(self.evidenceadd.size()) - self.evidencesave = QtGui.QPushButton(self.gametab_evidence) - self.evidencesave.setText('Save') - self.evidencesave.clicked.connect(self.onSaveEvidence) self.evidencesave.resize(self.evidenceadd.size()) + self.evidencemoveprivate.resize(self.evidenceadd.size()) + self.evidencemoveallprivate.resize(self.evidenceadd.size()) + self.evidencemoveglobal.resize(self.evidenceadd.size()) + self.evidencemoveallglobal.resize(self.evidenceadd.size()) + self.evidenceswitchprivate.resize(self.evidenceadd.size()) + self.evidenceswitchglobal.resize(self.evidenceadd.size()) self.evidencepresent = PresentButton(self, self.gametab_evidence) + self.privatedropdown.hide() + self.evidencemoveglobal.hide() + self.evidencemoveallglobal.hide() + self.evidenceswitchglobal.hide() + self.msgqueueList = QtGui.QListWidget(self.gametab_msgqueue) self.msgqueueList.itemClicked.connect(self.onClicked_msgqueue) self.removeQueue = QtGui.QPushButton(self.gametab_msgqueue) @@ -1098,6 +1136,7 @@ class gui(QtGui.QWidget): self.msgqueue = [] self.selectedmsg = -1 self.evidence = [] + self.privateevidence = [] self.selectedevi = -1 self.present = False self.playerlist = {} @@ -1478,16 +1517,149 @@ class gui(QtGui.QWidget): self.evidence_editor.EditEvidence(self.selectedevi) def onDeleteEvidence(self): - if self.evidence: - self.tcp.send('DE#' + str(self.selectedevi) + '#%') - else: - self.tcp.send('DE#0#%') + if self.selectedevi == -1: + return - def onSaveEvidence(self): - pass + if not self.privateinv: + if self.evidence: + self.tcp.send('DE#' + str(self.selectedevi) + '#%') + else: + self.tcp.send('DE#0#%') + elif len(self.privateevidence): + del self.privateevidence[self.selectedevi] + self.privatedropdown.removeItem(self.selectedevi) + + def onExportEvidence(self): + path = str(QtGui.QFileDialog.getSaveFileName(self, "Save evidence", AOpath, "Evidence (*.ini)")) + if path: + evidence = self.evidence if not self.privateinv else self.privateevidence + inifile = ConfigParser() + for i in range(len(evidence)): + evi = evidence[i] + id = str(i) + inifile.add_section(id) + if isinstance(evi[0], QtCore.QString): + inifile.set(id, "name", evi[0].replace('\n', '\\n')) + inifile.set(id, "description", evi[1].replace('\n', '\\n')) + inifile.set(id, "image", evi[2]) + else: + inifile.set(id, "name", evi[0].replace('\n', '\\n').encode('utf-8')) + inifile.set(id, "description", evi[1].replace('\n', '\\n').encode('utf-8')) + inifile.set(id, "image", evi[2].encode('utf-8')) + + inifile.write(open(path, "wb")) - def onLoadEvidence(self): - pass + def onImportEvidence(self): + if not self.privateinv: + if QtGui.QMessageBox.warning(self, "Import evidence", 'This will OVERWRITE the global evidence server-side.\n\nContinue?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) == QtGui.QMessageBox.No: + return + else: + if QtGui.QMessageBox.warning(self, "Import evidence", 'This will OVERWRITE your private evidence.\n\nContinue?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) == QtGui.QMessageBox.No: + return + + path = str(QtGui.QFileDialog.getOpenFileName(self, "Load evidence", AOpath, "Evidence (*.ini)")) + if path and exists(path): + evidence = [] + inifile = ConfigParser() + inifile.read(path) + for section in inifile.sections(): + name = ini.read_ini(inifile, section, "name").decode('utf-8').replace('\\n', '\n') + description = ini.read_ini(inifile, section, "description").decode('utf-8').replace('\\n', '\n') + image = ini.read_ini(inifile, section, "image", "empty.png") + evidence.append([name, description, image]) + + if self.privateinv: + dropdown = self.privatedropdown + self.privateevidence = evidence + if dropdown.count() > 0: + dropdown.clear() + + if evidence: + for evi in evidence: + dropdown.addItem(evi[0]) + dropdown.setCurrentIndex(self.selectedevi) + elif evidence: + if self.evidence: + for i in range(len(self.evidence)): + self.tcp.send('DE#' + str(self.selectedevi) + '#%') + for evi in evidence: + self.tcp.send('PE#' + evi[0] + '#' + evi[1] + '#' + evi[2] + '#%') + + + def onTransferEvidence(self): + if self.privateinv: + evi = self.privateevidence[self.selectedevi] + target = self.evidence + target_str = "global" + else: + evi = self.evidence[self.selectedevi] + target = self.privateevidence + target_str = "private" + + if evi in target: + return QtGui.QMessageBox.warning(self, "Can't transfer evidence", 'The evidence "%s" already exists in the %s inventory.' % (evi[0], target_str)) + else: + if self.privateinv: + self.tcp.send('PE#' + evi[0] + '#' + evi[1] + '#' + evi[2] + '#%') + else: + self.privateevidence.append(evi) + self.privatedropdown.addItem(evi[0]) + + def onTransferAllEvidence(self): + fail = [] + + if self.privateinv: + evi = self.privateevidence[self.selectedevi] + origin = self.privateevidence + target = self.evidence + target_str = "global" + else: + evi = self.evidence[self.selectedevi] + origin = self.evidence + target = self.privateevidence + target_str = "private" + + for evi in origin: + if evi in target: + fail.append(evi[0]) + else: + if self.privateinv: + self.tcp.send('PE#' + evi[0] + '#' + evi[1] + '#' + evi[2] + '#%') + else: + self.privateevidence.append(evi) + self.privatedropdown.addItem(evi[0]) + + if fail: + return QtGui.QMessageBox.warning(self, "Some evidence wasn't transferred", "The following evidence already exists in the %s inventory:\n\n%s." % (target_str, ", ".join(fail))) + + def onSwitchInventory(self, reset=False): + self.privateinv = not self.privateinv + if self.privateinv and not reset: + self.present = False + self.evidencepresent.setPixmap(self.evidencepresent.button_off) + self.evidencepresent.hide() + self.evidencedropdown.hide() + self.privatedropdown.show() + self.evidencemoveglobal.show() + self.evidencemoveallglobal.show() + self.evidenceswitchglobal.show() + self.evidencemoveprivate.hide() + self.evidencemoveallprivate.hide() + self.evidenceswitchprivate.hide() + self.privatedropdown.setCurrentIndex(0) + self.changeEvidence(0, 1) + else: + self.evidencepresent.show() + self.evidencedropdown.show() + self.privatedropdown.hide() + self.evidencemoveglobal.hide() + self.evidencemoveallglobal.hide() + self.evidenceswitchglobal.hide() + self.evidencemoveprivate.show() + self.evidencemoveallprivate.show() + self.evidenceswitchprivate.show() + self.evidencedropdown.setCurrentIndex(0) + self.changeEvidence(0, 0) def onClick_callMod(self): if "modcall_reason" in self.features: @@ -1567,12 +1739,30 @@ class gui(QtGui.QWidget): else: return QtGui.QMessageBox.warning(self, 'No player selected', 'Select a player from the list to ban.') - def changeEvidence(self, ind): + def changeEvidence(self, ind, kind): if ind < 0: return - self.selectedevi = ind - self.evidencedesc.setText(self.evidence[ind][1]) - self.setEvidenceImg(self.evidenceimage, self.evidence[ind][2]) + if self.privateinv: + if not kind == 1: + return + evi = self.privateevidence + else: + if not kind == 0: + return + evi = self.evidence + + if len(evi) == 0: + self.selectedevi = -1 + else: + self.selectedevi = ind + self.evidencedesc.setText(evi[ind][1]) + self.setEvidenceImg(self.evidenceimage, evi[ind][2]) + + def changeGlobalEvidence(self, ind): + self.changeEvidence(ind, 0) + + def changePrivateEvidence(self, ind): + self.changeEvidence(ind, 1) def changeEmote(self, dropdown, ind): if ind == -1: @@ -1606,14 +1796,20 @@ class gui(QtGui.QWidget): elif type == 'warning': reply = QtGui.QMessageBox.warning(self, *args, **kwargs) if self.willDisconnect: - self.selectedplayer = -1 - self.playerList.clear() - self.playerKick.setDisabled(True) - self.playerBan.setDisabled(True) - self.ooclogin.setText("Login") - login = False - self.stopMusic() + self.disconnectCommon() self.gamewindow.returnToMenu() + + def disconnectCommon(self): + self.onSwitchInventory(True) + self.selectedplayer = -1 + self.playerList.clear() + self.playerKick.setDisabled(True) + self.playerBan.setDisabled(True) + self.ooclogin.setText("Login") + self.login = False + self.privateinv = False + self.tcp.close() + self.stopMusic() def onMusicClick(self, item): if "cccc_ic_support" in self.features and self.showname: @@ -2839,7 +3035,7 @@ class EditEvidenceDialog(QtGui.QDialog): def __init__(self, gamegui): super(EditEvidenceDialog, self).__init__() self.gamegui = gamegui - self.setWindowTitle('Add evidence') + self.setTitle() self.resize(512, 384) self.setModal(True) @@ -2903,10 +3099,22 @@ class EditEvidenceDialog(QtGui.QDialog): name = encode_ao_str(self.eviname.text()) desc = encode_ao_str(self.evidesc.toPlainText()) - if self.editing: - self.gamegui.tcp.send('EE#' + str(self.edit_ind) + '#' + name + '#' + desc + '#' + self.filename + '#%') + if not self.gamegui.privateinv: + if self.editing: + self.gamegui.tcp.send('EE#' + str(self.edit_ind) + '#' + name + '#' + desc + '#' + self.filename + '#%') + else: + self.gamegui.tcp.send('PE#' + name + '#' + desc + '#' + self.filename + '#%') else: - self.gamegui.tcp.send('PE#' + name + '#' + desc + '#' + self.filename + '#%') + if self.editing: + self.gamegui.privateevidence[self.gamegui.selectedevi] = [unicode(name), unicode(desc), unicode(self.filename)] + self.gamegui.privatedropdown.setItemText(self.gamegui.selectedevi, name) + + evi = self.gamegui.privateevidence[self.gamegui.selectedevi] + self.gamegui.evidencedesc.setText(evi[1]) + self.gamegui.setEvidenceImg(self.gamegui.evidenceimage, evi[2]) + else: + self.gamegui.privateevidence.append([name, desc, self.filename]) + self.gamegui.privatedropdown.addItem(name) self.eviname.setText('') self.evidesc.setText('') @@ -2914,7 +3122,7 @@ class EditEvidenceDialog(QtGui.QDialog): self.evipicture.setPixmap(evipic) self.filename = 'empty.png' self.editing = False - self.setWindowTitle('Add evidence') + self.setTitle() self.choosepic.setCurrentIndex(self.emptyfile) self.hide() @@ -2925,7 +3133,7 @@ class EditEvidenceDialog(QtGui.QDialog): self.evipicture.setPixmap(evipic) self.filename = 'empty.png' self.editing = False - self.setWindowTitle('Add evidence') + self.setTitle() self.choosepic.setCurrentIndex(self.emptyfile) self.hide() @@ -2948,14 +3156,20 @@ class EditEvidenceDialog(QtGui.QDialog): def EditEvidence(self, ind): self.editing = True self.edit_ind = ind - if self.gamegui.evidence[ind][2] not in self.filenames: - self.filenames.append(self.gamegui.evidence[ind][2]) - self.choosepic.addItem(self.gamegui.evidence[ind][2].split('.')[0]) - self.choosepic.setCurrentIndex(self.filenames.index(self.gamegui.evidence[ind][2])) - self.eviname.setText(self.gamegui.evidence[ind][0]) - self.evidesc.setText(self.gamegui.evidence[ind][1]) - self.setWindowTitle('Edit evidence') + evidence = self.gamegui.privateevidence if self.gamegui.privateinv else self.gamegui.evidence + + if evidence[ind][2] not in self.filenames: + self.filenames.append(evidence[ind][2]) + self.choosepic.addItem(evidence[ind][2].split('.')[0]) + self.choosepic.setCurrentIndex(self.filenames.index(evidence[ind][2])) + self.eviname.setText(evidence[ind][0]) + self.evidesc.setText(evidence[ind][1]) + self.setWindowTitle("Edit evidence" if not self.gamegui.privateinv else "Edit evidence in private inventory") self.show() + + def setTitle(self): + self.setWindowTitle('Add evidence' if not self.gamegui.privateinv else "Add evidence to private inventory") + class EmoteButton(QtGui.QLabel): @@ -3053,14 +3267,7 @@ class TCP_Thread(QtCore.QThread): color.setHsv(0, 255, 255) while True: if self.parent.disconnectnow: - self.parent.selectedplayer = -1 - self.parent.playerList.clear() - self.parent.stopMusic() - self.parent.tcp.close() - self.parent.playerKick.setDisabled(True) - self.parent.playerBan.setDisabled(True) - self.parent.ooclogin.setText("Login") - self.parent.login = False + self.parent.disconnectCommon() self.quit() return pingtimer -= 1