From 9408b615c5e667e5f34e8ea4ef2a2a58eed06c54 Mon Sep 17 00:00:00 2001 From: Stephen Dranger Date: Sat, 29 Jan 2011 06:33:35 -0600 Subject: [PATCH] more buttons --- TODO | 5 ++- pesterchum.py | 81 +++++++++++++++++++++++++++++++++----- profiles/superGhost.js | 2 +- themes/pesterchum/style.js | 22 +++++++++-- themes/trollian/style.js | 24 ++++++++--- 5 files changed, 112 insertions(+), 22 deletions(-) diff --git a/TODO b/TODO index cf3a904..d09e9fb 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,4 @@ Features: -* mychumhandle/color/pester button -* User profile options (color...?) * Quirks -- package * menubar should pass on mouse move @@ -9,11 +7,14 @@ Features: * Block list * User list/add from list * User commands/stop user from sending commands accidentally +* cleanup theme code -- release alpha +* User profile menu options (color...?) * System tray menu * comment history (up button) * Chat rooms * Implement TC options +* Transparent background -- release beta * theme elements define, implement * Theme checking diff --git a/pesterchum.py b/pesterchum.py index b2e9a8c..b81f26e 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -120,6 +120,10 @@ class pesterTheme(dict): d[k] = s.substitute(path=self.path) return d +class pesterQuirks(object): + def __init__(self, quirklist): + self.quirklist = quirklist + class userConfig(object): def __init__(self): fp = open("pesterchum.js") @@ -193,11 +197,11 @@ class userProfile(object): self.save() def setColor(self, color): self.chat.color = color - self.userprofile["color"] = color.name() + self.userprofile["color"] = unicode(color.name()) self.save() def setQuirks(self, quirks): self.quirks = quirks - self.userprofile["quirks"] = quirks.repr() + self.userprofile["quirks"] = self.quirks.quirklist self.save() def getTheme(self): return self.theme @@ -215,10 +219,6 @@ class userProfile(object): newprofile.save() return newprofile -class pesterQuirks(object): - def __init__(self, quirklist): - self.quirklist = quirklist - class PesterChooseTheme(QtGui.QDialog): def __init__(self, config, theme, parent): QtGui.QDialog.__init__(self, parent) @@ -271,7 +271,7 @@ class PesterChooseProfile(QtGui.QDialog): self.chumHandle = QtGui.QLineEdit(self) self.chumHandle.setMinimumWidth(200) - self.chumHandleLabel = QtGui.QLabel(self.theme["main/labels/mychumhandle"], self) + self.chumHandleLabel = QtGui.QLabel(self.theme["main/mychumhandle/label/text"], self) self.chumColorButton = QtGui.QPushButton(self) self.chumColorButton.resize(50, 20) self.chumColorButton.setStyleSheet("background: %s" % (userprofile.chat.colorhtml())) @@ -962,6 +962,32 @@ class PesterWindow(MovingWindow): self.addChumButton.setStyleSheet(self.theme["main/addchum/style"]) self.connect(self.addChumButton, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT('addChumWindow()')) + self.pesterButton = QtGui.QPushButton(self.theme["main/pester/text"], self) + self.pesterButton.resize(*self.theme["main/pester/size"]) + self.pesterButton.move(*self.theme["main/pester/loc"]) + self.pesterButton.setStyleSheet(self.theme["main/pester/style"]) + self.connect(self.pesterButton, QtCore.SIGNAL('clicked()'), + self, QtCore.SLOT('pesterSelectedChum()')) + + self.mychumhandleLabel = QtGui.QLabel(self.theme["main/mychumhandle/label/text"], self) + self.mychumhandleLabel.move(*self.theme["main/mychumhandle/label/loc"]) + self.mychumhandleLabel.setStyleSheet(self.theme["main/mychumhandle/label/style"]) + self.mychumhandle = QtGui.QPushButton(self.profile().handle, self) + self.mychumhandle.setFlat(True) + self.mychumhandle.move(*self.theme["main/mychumhandle/handle/loc"]) + self.mychumhandle.resize(*self.theme["main/mychumhandle/handle/size"]) + self.mychumhandle.setStyleSheet(self.theme["main/mychumhandle/handle/style"]) + self.connect(self.mychumhandle, QtCore.SIGNAL('clicked()'), + self, QtCore.SLOT('switchProfile()')) + + self.mychumcolor = QtGui.QPushButton(self) + self.mychumcolor.resize(*self.theme["main/mychumhandle/colorswatch/size"]) + self.mychumcolor.move(*self.theme["main/mychumhandle/colorswatch/loc"]) + self.mychumcolor.setStyleSheet("background: %s" % (self.profile().colorhtml())) + if self.theme["main/mychumhandle/colorswatch/text"]: + self.mychumcolor.setText(self.theme["main/mychumhandle/colorswatch/text"]) + self.connect(self.mychumcolor, QtCore.SIGNAL('clicked()'), + self, QtCore.SLOT('changeMyColor()')) if not pygame.mixer: self.alarm = NoneSound() @@ -969,12 +995,14 @@ class PesterWindow(MovingWindow): self.alarm = pygame.mixer.Sound(self.theme["main/sounds/alertsound"]) self.waitingMessages = waitingMessageHolder(self) +# these are mostly initial values so we dont get AttributeErrors later self.convos = {} self.tabconvo = None self.optionmenu = None self.choosetheme = None self.chooseprofile = None self.addchumdialog = None + self.colorDialog = None def profile(self): return self.userprofile.chat @@ -1070,14 +1098,33 @@ class PesterWindow(MovingWindow): self.moods = PesterMoodHandler(self, *[PesterMoodButton(self, **d) for d in self.theme["main/moods"]]) self.moods.showButtons() # chum + self.addChumButton.setText(self.theme["main/addchum/text"]) self.addChumButton.resize(*self.theme["main/addchum/size"]) self.addChumButton.move(*self.theme["main/addchum/loc"]) self.addChumButton.setStyleSheet(self.theme["main/addchum/style"]) + self.pesterButton.setText(self.theme["main/pester/text"]) + self.pesterButton.resize(*self.theme["main/pester/size"]) + self.pesterButton.move(*self.theme["main/pester/loc"]) + self.pesterButton.setStyleSheet(self.theme["main/pester/style"]) # do open windows if self.tabconvo: self.tabconvo.changeTheme(theme) for c in self.convos.values(): c.changeTheme(theme) + # buttons + self.mychumhandleLabel.setText(self.theme["main/mychumhandle/label/text"]) + self.mychumhandleLabel.move(*self.theme["main/mychumhandle/label/loc"]) + self.mychumhandleLabel.setStyleSheet(self.theme["main/mychumhandle/label/style"]) + self.mychumhandle.setText(self.profile().handle) + self.mychumhandle.move(*self.theme["main/mychumhandle/handle/loc"]) + self.mychumhandle.resize(*self.theme["main/mychumhandle/handle/size"]) + self.mychumhandle.setStyleSheet(self.theme["main/mychumhandle/handle/style"]) + self.mychumcolor.resize(*self.theme["main/mychumhandle/colorswatch/size"]) + self.mychumcolor.move(*self.theme["main/mychumhandle/colorswatch/loc"]) + self.mychumcolor.setStyleSheet("background: %s" % (self.profile().colorhtml())) + if self.theme["main/mychumhandle/colorswatch/text"]: + self.mychumcolor.setText(self.theme["main/mychumhandle/colorswatch/text"]) + # sounds if not pygame.mixer: self.alarm = NoneSound() @@ -1105,6 +1152,11 @@ class PesterWindow(MovingWindow): else: self.waitingMessages.answerMessage() + @QtCore.pyqtSlot() + def pesterSelectedChum(self): + curChum = self.chumList.currentItem() + if curChum: + self.newConversationWindow(curChum) @QtCore.pyqtSlot(QtGui.QListWidgetItem) def newConversationWindow(self, chumlisting): chum = chumlisting.chum @@ -1238,14 +1290,23 @@ class PesterWindow(MovingWindow): self.chooseprofile = None @QtCore.pyqtSlot() + def changeMyColor(self): + if self.colorDialog: + return + self.colorDialog = QtGui.QColorDialog(self) + color = self.colorDialog.getColor(initial=self.profile().color) + self.mychumcolor.setStyleSheet("background: %s" % color.name()) + self.userprofile.setColor(color) + self.colorDialog = None + @QtCore.pyqtSlot() def closeProfile(self): self.chooseprofile = None @QtCore.pyqtSlot() def switchProfile(self): if self.convos: closeWarning = QtGui.QMessageBox() - closeWarning.setText("WARNING: THIS WILL CLOSE ALL CONVERSATION WINDOWS!") - closeWarning.setInformativeText("i warned you bro! i warned you about those windows") + closeWarning.setText("WARNING: CHANGING PROFILES WILL CLOSE ALL CONVERSATION WINDOWS!") + closeWarning.setInformativeText("i warned you about windows bro!!!! i told you dog!") closeWarning.setStandardButtons(QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Ok) closeWarning.setDefaultButton(QtGui.QMessageBox.Ok) ret = closeWarning.exec_() @@ -1381,7 +1442,7 @@ class PesterHandler(DefaultCommandHandler): handle = nick[0:nick.find("!")] self.parent.moodUpdated.emit(handle, Mood("offline")) def part(self, nick, channel): - handle = nick[0:oldnick.find("!")] + handle = nick[0:nick.find("!")] if channel == "#pesterchum": self.parent.moodUpdated.emit(handle, Mood("offline")) def nick(self, oldnick, newnick): diff --git a/profiles/superGhost.js b/profiles/superGhost.js index e45bde0..eb22282 100644 --- a/profiles/superGhost.js +++ b/profiles/superGhost.js @@ -1 +1 @@ -{"color": "#00aaff", "theme": "trollian", "quirks": [], "handle": "superGhost"} \ No newline at end of file +{"color": "#65cf91", "theme": "trollian", "quirks": [], "handle": "superGhost"} \ No newline at end of file diff --git a/themes/pesterchum/style.js b/themes/pesterchum/style.js index 045cd60..f7a54fe 100644 --- a/themes/pesterchum/style.js +++ b/themes/pesterchum/style.js @@ -14,7 +14,7 @@ "sounds": { "alertsound": "$path/alarm.wav" }, "chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#919191; ", "loc": [20, 65], - "size": [266, 300], + "size": [266, 270], "moods": { "chummy": { "icon": "$path/chummy.gif", "color": "white" }, "offline": { "icon": "$path/offline.gif", @@ -43,14 +43,28 @@ "color": "white" } } }, + "mychumhandle": { "label": { "text": "MYCHUMHANDLE", + "loc": [70,410], + "style": "color:black;font:bold;" }, + "handle": { "style": "border:3px solid yellow; background: black; color:white;", + "loc": [20,430], + "size": [220,30] }, + "colorswatch": { "loc": [243,430], + "size": [40,30], + "text": "" } + }, "defaultwindow": { "style": "background: #fdb302; font-family:'Courier New';font:bold;selection-background-color:#919191; " }, - "labels": { "mychumhandle": "MYCHUMHANDLE" }, "addchum": { "style": "background: #fdb302; border:5px solid yellow; font: bold;", - "loc": [20,370], - "size": [100, 50], + "loc": [20,340], + "size": [100, 40], "text": "ADD CHUM" }, + "pester": { "style": "background: #fdb302; border:5px solid yellow; font: bold;", + "loc": [130,340], + "size": [100, 40], + "text": "PESTER!" + }, "defaultmood": 0, "moods": [ { "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", diff --git a/themes/trollian/style.js b/themes/trollian/style.js index 37cdc42..0f006c4 100644 --- a/themes/trollian/style.js +++ b/themes/trollian/style.js @@ -1,5 +1,5 @@ {"main": - {"style": "background-image:url($path/tnbg2.png);", + {"style": "background-image:url($path/tnbg2.png);background-color:rgba(255,255,255,0);", "size": [300, 620], "icon": "$path/trayicon3.png", "newmsgicon": "$path/trayicon.gif", @@ -14,7 +14,7 @@ "sounds": { "alertsound": "$path/alarm.wav" }, "chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#ffb6b6; ", "loc": [20, 65], - "size": [266, 300], + "size": [266, 270], "moods": { "chummy": { "icon": "$path/chummy.gif", "color": "white" }, "offline": { "icon": "$path/offline.gif", @@ -43,14 +43,28 @@ "color": "white" } } }, + "mychumhandle": { "label": { "text": "MYTROLLTAG", + "loc": [85,410], + "style": "color:black;font:bold;" }, + "handle": { "style": "border:3px solid #550000; background: black; color:white;", + "loc": [20,430], + "size": [220,30] }, + "colorswatch": { "loc": [243,430], + "size": [40,30], + "text": "" } + }, "defaultwindow": { "style": "background: #e5000f; font-family:'Courier New';font:bold;selection-background-color:#ffb6b6; " }, - "labels": { "mychumhandle": "MYTROLLTAG" }, "addchum": { "style": "background: black; border:5px solid #550000; font: bold;color:white;", - "loc": [20,370], - "size": [100, 50], + "loc": [20,340], + "size": [100, 40], "text": "ADD LOSER" }, + "pester": { "style": "background: black; border:5px solid #550000; font: bold;color:white;", + "loc": [130,340], + "size": [100, 40], + "text": "TROLL" + }, "defaultmood": 7, "moods": [ { "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;",