add music options, random play and copy selected track name

This commit is contained in:
cidoku 2025-10-08 17:24:16 -03:00
parent b4a5c289f8
commit a00ab9f4ae
5 changed files with 83 additions and 26 deletions

View File

@ -4,7 +4,7 @@ self.gamewindow.setStyleSheet("")
# window size is defined at the end of the file # window size is defined at the end of the file
# IC viewport # IC viewport
_scale = 2 _scale = 2.5
self.viewport.move(0, 0) self.viewport.move(0, 0)
self.viewport.resize(256 * _scale, 192 * _scale) self.viewport.resize(256 * _scale, 192 * _scale)
@ -162,13 +162,14 @@ self.btnNextEmotePage.move(viewportRight + 286, self.btnPrevEmotePage.y())
self.serverTabs.setGeometry(viewportRight + 14, oocBottom + 200, 288, 258) self.serverTabs.setGeometry(viewportRight + 14, oocBottom + 200, 288, 258)
self.musicItems.setGeometry(8, 8, 268, 184) self.musicItems.setGeometry(8, 8, 268, 184)
self.musicSearch.setGeometry(8, self.musicItems.size().height() + 16, 268, self.musicSearch.sizeHint().height()) self.btnMusicOptions.setGeometry(self.musicItems.x() + self.musicItems.width() - self.btnMusicOptions.sizeHint().width(), self.musicItems.size().height() + 16, self.btnMusicOptions.sizeHint().width(), self.musicSearch.sizeHint().height())
self.musicSearch.setGeometry(8, self.btnMusicOptions.y(), self.musicItems.width() - self.btnMusicOptions.width() - 4, self.musicSearch.sizeHint().height())
self.foundSongItemColor = "#80ff80" self.foundSongItemColor = "#80ff80"
self.backgroundItems.setGeometry(8, 8, 268, 184) self.backgroundItems.setGeometry(8, 8, 268, 184)
self.backgroundSearch.setGeometry(8, self.musicItems.size().height() + 16, 268 - self.btnBackgroundsRefresh.sizeHint().width() - 20, self.musicSearch.sizeHint().height()) self.backgroundSearch.setGeometry(8, self.musicItems.size().height() + 16, 268 - self.btnBackgroundsRefresh.sizeHint().width() - 20, self.backgroundSearch.sizeHint().height())
self.btnBackgroundsRefresh.resize(self.btnBackgroundsRefresh.sizeHint()) self.btnBackgroundsRefresh.resize(self.btnBackgroundsRefresh.sizeHint().width(), self.backgroundSearch.height())
self.btnBackgroundsRefresh.move(268 - self.btnBackgroundsRefresh.sizeHint().width(), self.backgroundItems.size().height() + 16) self.btnBackgroundsRefresh.move(self.backgroundItems.width() - self.btnBackgroundsRefresh.width(), self.backgroundItems.size().height() + 16)
self.playerItems.setGeometry(8, 8, 268, 180) self.playerItems.setGeometry(8, 8, 268, 180)
self.btnPlayerPair.resize(self.btnPlayerPair.sizeHint()) self.btnPlayerPair.resize(self.btnPlayerPair.sizeHint())

BIN
AO2XPbase/icons/cog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 B

View File

@ -1065,6 +1065,7 @@ class GUI(QtGui.QWidget):
chatmsg = '' chatmsg = ''
charid = -1 charid = -1
login = False login = False
privateMusicSelected = False
privateInventorySelected = False privateInventorySelected = False
scaling = [SCALING_AUTO, SCALING_AUTO] scaling = [SCALING_AUTO, SCALING_AUTO]
@ -1369,6 +1370,39 @@ class GUI(QtGui.QWidget):
self.musicSearch.setPlaceholderText("Search...") self.musicSearch.setPlaceholderText("Search...")
self.musicSearch.textChanged.connect(self.onMusicSearch) self.musicSearch.textChanged.connect(self.onMusicSearch)
self.foundSongItemColor = "background: #80FF80;" self.foundSongItemColor = "background: #80FF80;"
self.btnMusicOptions = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "cog.png"), "", self.tabMusic)
self.btnMusicOptions.setToolTip('Music options')
self.btnMusicOptions.clicked.connect(self.onMusicOptionsClicked)
self.actMusicRandom = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "control_play_blue.png"), "&Play random", self.tabMusic)
self.actMusicRandom.triggered.connect(self.onActMusicRandomTriggered)
self.actMusicCopy = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "page_copy.png"), "&Copy selected song name", self.tabMusic)
self.actMusicCopy.triggered.connect(self.onActMusicCopyTriggered)
self.actMusicCopy.setDisabled(True)
self.actMusicAdd = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "add.png"), "&Add new entry", self.tabMusic)
self.actMusicEdit = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "edit.png"), "&Edit selected entry", self.tabMusic)
self.actMusicDelete = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "delete.png"), "&Delete selected entry", self.tabMusic)
self.actMusicSwitchToGlobal = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "world.png"), "&View global music list", self.tabMusic)
self.actMusicSwitchToPrivate = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "briefcase.png"), "&View private music list", self.tabMusic)
self.actMusicSwitchToPrivate.setDisabled(True)
self.mnuMusicOptions = QtGui.QMenu(self.tabMusic)
self.mnuMusicOptions.addAction(self.actMusicRandom)
self.mnuMusicOptions.addAction(self.actMusicCopy)
self.mnuMusicOptions.addSeparator()
self.mnuMusicOptions.addAction(self.actMusicSwitchToPrivate)
self.mnuMusicOptionsPrivate = QtGui.QMenu(self.tabMusic)
self.mnuMusicOptionsPrivate.addAction(self.actMusicRandom)
self.mnuMusicOptionsPrivate.addAction(self.actMusicCopy)
self.mnuMusicOptionsPrivate.addSeparator()
self.mnuMusicOptionsPrivate.addAction(self.actMusicAdd)
self.mnuMusicOptionsPrivate.addAction(self.actMusicEdit)
self.mnuMusicOptionsPrivate.addAction(self.actMusicDelete)
self.mnuMusicOptionsPrivate.addSeparator()
self.mnuMusicOptionsPrivate.addAction(self.actMusicSwitchToGlobal)
# Areas list # Areas list
self.areaItems = QtGui.QListWidget() self.areaItems = QtGui.QListWidget()
@ -1596,7 +1630,8 @@ class GUI(QtGui.QWidget):
self.demoRecorder = None self.demoRecorder = None
self.demoPlaying = False self.demoPlaying = False
self.musicList = {} self.musicList = {}
self.userPickedMusicItem = False self.musicListPrivate = {}
self.pickedMusicItem = False
self.slideEnabled = getOption("General", "slide", False) == 'True' self.slideEnabled = getOption("General", "slide", False) == 'True'
self.slideAvailable = False self.slideAvailable = False
@ -1851,20 +1886,48 @@ class GUI(QtGui.QWidget):
def onShownameChanged(self, text): def onShownameChanged(self, text):
self.showname = str(text.toUtf8()) self.showname = str(text.toUtf8())
def onMusicItemClicked(self, item):
self.actMusicCopy.setDisabled(False)
def onMusicItemDoubleClicked(self, item):
self.pickedMusicItem = True
_musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList
self.sendMC(_musicList[item.text()])
def onMusicSearch(self, text): def onMusicSearch(self, text):
self.musicItems.clear() self.musicItems.clear()
self.actMusicCopy.setDisabled(True)
_musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList
if text: if text:
for song, fname in self.musicList.items(): for song, fname in _musicList.items():
if QtCore.QString(fname).contains(text, QtCore.Qt.CaseInsensitive): if QtCore.QString(fname).contains(text, QtCore.Qt.CaseInsensitive):
songitem = QtGui.QListWidgetItem() songitem = QtGui.QListWidgetItem()
songitem.setText(song) songitem.setText(song)
if exists(unicode(AOpath + 'sounds/music/' + fname.replace("<and>","&").lower())): if not self.privateMusicSelected and exists(unicode(AOpath + 'sounds/music/' + decodeAOString(fname).lower())):
songitem.setBackgroundColor(QtGui.QColor(self.foundSongItemColor)) songitem.setBackgroundColor(QtGui.QColor(self.foundSongItemColor))
self.musicItems.addItem(songitem) self.musicItems.addItem(songitem)
else: else:
self.loadAllMusic() self.loadAllMusic()
def onMusicOptionsClicked(self):
if self.privateMusicSelected:
self.mnuMusicOptionsPrivate.exec_(QtGui.QCursor.pos())
else:
self.mnuMusicOptions.exec_(QtGui.QCursor.pos())
def onActMusicRandomTriggered(self):
self.pickedMusicItem = True
_musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList
_item = self.musicItems.item(random.randint(0, self.musicItems.count()))
self.musicItems.setCurrentItem(_item)
self.actMusicCopy.setDisabled(False)
self.sendMC(_musicList[_item.text()])
def onActMusicCopyTriggered(self):
QtGui.QApplication.clipboard().setText(self.musicItems.currentItem().text())
def loadBackgrounds(self): def loadBackgrounds(self):
self.backgroundItems.clear() self.backgroundItems.clear()
@ -2255,7 +2318,7 @@ class GUI(QtGui.QWidget):
else: else:
if self.privateInventorySelected: if self.privateInventorySelected:
for i in range(len(evi)): for i in range(len(evi)):
evi[i] = evi[i].replace('#', '<num>').replace('%', '<percent>').replace('&', '<and>').replace('$', '<dollar>').replace('\\n', '\n') evi[i] = encodeAOString(evi[i]).replace('\\n', '\n')
self.tcp.send('PE#' + evi[0] + '#' + evi[1] + '#' + evi[2] + '#%') self.tcp.send('PE#' + evi[0] + '#' + evi[1] + '#' + evi[2] + '#%')
else: else:
self.privateEvidence.append(evi) self.privateEvidence.append(evi)
@ -2480,13 +2543,6 @@ class GUI(QtGui.QWidget):
self.demoRecorder = None self.demoRecorder = None
self.demoPlaying = False self.demoPlaying = False
self.stopMusic() self.stopMusic()
def onMusicItemClicked(self, item):
pass
def onMusicItemDoubleClicked(self, item):
self.userPickedMusicItem = True
self.sendMC(self.musicList[item.text()])
def onAreaItemClicked(self, item): def onAreaItemClicked(self, item):
area = item.text().split('\n')[0] area = item.text().split('\n')[0]
@ -2511,7 +2567,7 @@ class GUI(QtGui.QWidget):
self.tcp.send('CT#' + name + '#' + text + '#%') self.tcp.send('CT#' + name + '#' + text + '#%')
def onOOCReturn(self): def onOOCReturn(self):
text = self.OOCInput.text().replace('#', '<num>').replace('%', '<percent>').replace('&', '<and>').replace('$', '<dollar>').replace('\\n', '\n') text = encodeAOString(self.OOCInput.text()).replace('\\n', '\n')
if text.startsWith('//'): if text.startsWith('//'):
code = str(self.OOCInput.text()).replace('//', '', 1).replace('\\NEWLINE', '\n') code = str(self.OOCInput.text()).replace('//', '', 1).replace('\\NEWLINE', '\n')
try: try:
@ -2551,7 +2607,7 @@ class GUI(QtGui.QWidget):
self.OOCInput.clear() self.OOCInput.clear()
def onICReturn(self): def onICReturn(self):
text = unicode(self.ICChatInput.text()).replace('#', '<num>').replace('%', '<percent>').replace('&', '<and>').replace('$', '<dollar>')#.replace('/n', '\n') text = encodeAOString(unicode(self.ICChatInput.text())) #.replace('/n', '\n')
if text: if text:
if self.cbMockText.isChecked(): if self.cbMockText.isChecked():
@ -2910,7 +2966,7 @@ class GUI(QtGui.QWidget):
fShowname = mChatMessage[SHOWNAME] fShowname = mChatMessage[SHOWNAME]
if self.messageQueue: if self.messageQueue:
chatMsgComp = (self.messageQueue[0].split('#')[5]).replace('<dollar>', '$').replace('<percent>', '%').replace('<and>', '&').replace('<num>', '#') chatMsgComp = decodeAOString(self.messageQueue[0].split('#')[5])
examine = chatMsgComp == ">" or chatMsgComp == "<" or chatMsgComp == "=" examine = chatMsgComp == ">" or chatMsgComp == "<" or chatMsgComp == "="
special = not chatMsgComp or chatMsgComp.isspace() special = not chatMsgComp or chatMsgComp.isspace()
if examine or (fCharId == self.myChar and (special or mChatMessage[CHATMSG] == chatMsgComp)): # our message showed up if examine or (fCharId == self.myChar and (special or mChatMessage[CHATMSG] == chatMsgComp)): # our message showed up
@ -3746,7 +3802,7 @@ class GUI(QtGui.QWidget):
if exists(AOpath + 'sounds/music/' + musl): if exists(AOpath + 'sounds/music/' + musl):
playLocal = True playLocal = True
elif self.userPickedMusicItem: elif self.pickedMusicItem:
_musl = self.musicList[self.musicItems.currentItem().text()] _musl = self.musicList[self.musicItems.currentItem().text()]
if exists(AOpath + 'sounds/music/' + _musl): if exists(AOpath + 'sounds/music/' + _musl):
musl = _musl musl = _musl
@ -3757,7 +3813,7 @@ class GUI(QtGui.QWidget):
musl = _musl musl = _musl
playLocal = True playLocal = True
self.userPickedMusicItem = False self.pickedMusicItem = False
if playLocal: if playLocal:
if isinstance(musl, unicode): if isinstance(musl, unicode):
@ -3833,13 +3889,13 @@ class GUI(QtGui.QWidget):
audio.pauseHandle(self.music) audio.pauseHandle(self.music)
def loadAllMusic(self): def loadAllMusic(self):
for song, fname in self.musicList.items(): _musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList
for song, fname in _musicList.items():
songitem = QtGui.QListWidgetItem() songitem = QtGui.QListWidgetItem()
songitem.setText(song) songitem.setText(song)
if exists(unicode(AOpath + 'sounds/music/' + fname.replace("<and>","&").lower())): if not self.privateMusicSelected and exists(unicode(AOpath + 'sounds/music/' + decodeAOString(fname).lower())):
songitem.setBackgroundColor(QtGui.QColor(self.foundSongItemColor)) songitem.setBackgroundColor(QtGui.QColor(self.foundSongItemColor))
#else:
#songitem.setBackgroundColor(QtGui.QColor(255, 128, 128))
self.musicItems.addItem(songitem) self.musicItems.addItem(songitem)
def loadAllEvidence(self, evi): def loadAllEvidence(self, evi):
@ -3982,7 +4038,7 @@ class GUI(QtGui.QWidget):
# We want only song names without paths or extensions in the music list # We want only song names without paths or extensions in the music list
for song in musicList: for song in musicList:
_basename = os.path.splitext(basename(song)) _basename = os.path.splitext(basename(song))
self.musicList[QtCore.QString(_basename[0].decode('utf-8').replace("<and>","&"))] = song.decode('utf-8') self.musicList[QtCore.QString(decodeAOString(_basename[0].decode('utf-8')))] = song.decode('utf-8')
if "base/" in webAO_bucket: if "base/" in webAO_bucket:
webAO_bucket = webAO_bucket.replace("base/", "") webAO_bucket = webAO_bucket.replace("base/", "")