This commit is contained in:
Stephen Dranger 2011-01-22 03:36:24 -06:00
parent 93df12a446
commit 088e6f0a58
10 changed files with 156 additions and 45 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -2,5 +2,6 @@
"chums": ["gamblingGenocider", "chums": ["gamblingGenocider",
"grimAuxiliatrix", "grimAuxiliatrix",
"gardenGnostic" "gardenGnostic"
] ],
"theme": "pesterchum"
} }

View file

@ -9,12 +9,25 @@ from PyQt4 import QtGui, QtCore
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
class Mood(object):
moods = ["chummy", "rancorous", "offline"]
def __init__(self, mood):
if type(mood) is int:
self.mood = mood
else:
self.mood = self.moods.index(mood)
def value(self):
return self.mood
def name(self):
return self.moods[self.mood]
class PesterIRC(QtCore.QObject): class PesterIRC(QtCore.QObject):
def __init__(self, window): def __init__(self, window):
QtCore.QObject.__init__(self) QtCore.QObject.__init__(self)
self.window = window self.window = window
def IRCConnect(self): def IRCConnect(self):
self.cli = IRCClient(PesterHandler, host="irc.tymoon.eu", port=6667, nick="superGhost") self.cli = IRCClient(PesterHandler, host="irc.tymoon.eu", port=6667, nick=self.window.currentHandle)
self.cli.command_handler.window = self.window self.cli.command_handler.window = self.window
self.conn = self.cli.connect() self.conn = self.cli.connect()
@ -25,65 +38,110 @@ class PesterIRC(QtCore.QObject):
class PesterHandler(DefaultCommandHandler): class PesterHandler(DefaultCommandHandler):
def privmsg(self, nick, chan, msg): def privmsg(self, nick, chan, msg):
# display msg, do other stuff # display msg, do other stuff
print "%s: %s" % (nick, msg) handle = nick[0:nick.find("!")]
if chan == "#pesterchum": if chan == "#pesterchum":
# follow instructions # follow instructions
self.window.newMessage() if msg[0:6] == "MOOD >":
pass try:
mood = Mood(int(msg[6:]))
except ValueError:
mood = Mood(0)
self.window.updateMood(handle, mood)
elif msg[0:7] == "GETMOOD":
mychumhandle = self.window.currentHandle
mymood = self.window.currentMood.value()
if msg.find(mychumhandle, 8) != -1:
helpers.msg(self.client, "#pesterchum",
"MOOD >%d" % (mymood))
else: else:
# private message # private message
pass pass
def welcome(self, server, nick, msg): def welcome(self, server, nick, msg):
helpers.join(self.client, "#pesterchum") helpers.join(self.client, "#pesterchum")
mychumhandle = self.window.currentHandle
mymood = self.window.currentMood.value()
helpers.msg(self.client, "#pesterchum", "MOOD >%d" % (mymood))
chums = self.window.chumList.chums
chumglob = "GETMOOD "
for c in chums:
if len(chumglob+c) >= 510:
helpers.msg(self.client, "#pesterchum", chumglob)
chumglob = "GETMOOD "
chumglob += c
if chumglob != "GETMOOD ":
helpers.msg(self.client, "#pesterchum", chumglob)
class pesterTheme(object):
def __init__(self, name):
self.path = "themes/%s" % (name)
fp = open(self.path+"/style.js")
self.theme = json.load(fp, object_hook=self.pathHook)
fp.close()
def getSection(self, section):
return self.theme[section]
def pathHook(self, d):
from string import Template
for (k, v) in d.iteritems():
if type(v) is unicode:
s = Template(v)
d[k] = s.substitute(path=self.path)
return d
class userConfig(object): class userConfig(object):
def __init__(self): def __init__(self, handle="pesterchum"):
fp = open("pesterchum.js") fp = open("%s.js" % (handle))
self.config = json.load(fp) self.config = json.load(fp)
fp.close() fp.close()
self.theme = pesterTheme(self.config["theme"])
def chums(self): def chums(self):
return self.config['chums'] return self.config['chums']
def getTheme(self):
return self.theme
class exitButton(QtGui.QPushButton): class exitButton(QtGui.QPushButton):
def __init__(self, icon, parent=None): def __init__(self, icon, parent=None):
QtGui.QPushButton.__init__(self, icon, "", parent) QtGui.QPushButton.__init__(self, icon, "", parent)
self.setFlat(True) self.setFlat(True)
self.setStyleSheet("QPushButton { padding: 0px; }")
self.setAutoDefault(False)
class chumListing(QtGui.QListWidgetItem):
def __init__(self, chumhandle, moodtheme):
QtGui.QListWidgetItem.__init__(self, chumhandle)
self.theme = moodtheme
self.handle = chumhandle
self.setMood(Mood("offline"))
def setMood(self, mood):
self.mood = mood
self.setIcon(QtGui.QIcon(self.theme[self.mood.name()]["icon"]))
self.setTextColor(QtGui.QColor(self.theme[self.mood.name()]["color"]))
def __lt__(self, cl):
h1 = self.handle.lower()
h2 = cl.handle.lower()
return (h1 < h2)
class chumArea(QtGui.QListWidget): class chumArea(QtGui.QListWidget):
def __init__(self, chums, parent=None): def __init__(self, chums, theme, parent=None):
QtGui.QListWidget.__init__(self, parent) QtGui.QListWidget.__init__(self, parent)
self.setGeometry(75, 100, 350, 500) geometry = theme["loc"] + theme["size"]
self.setStyleSheet(""" self.setGeometry(*geometry)
background-color: black; self.setStyleSheet(theme["style"])
color: white;
font: bold;
font-family: "Courier New";
""")
self.chums = chums self.chums = chums
for c in self.chums: for c in self.chums:
chumLabel = QtGui.QListWidgetItem(c) if not self.findItems(c, QtCore.Qt.MatchFlags(0)):
# chumLabel.setFont(QtGui.QFont("Courier New", pointSize=12, chumLabel = chumListing(c, theme["moods"])
# weight=75))
self.addItem(chumLabel) self.addItem(chumLabel)
self.sortItems()
def updateMood(self, nick, mood):
chums = self.findItems(nick, QtCore.Qt.MatchFlags(0))
for c in chums:
c.setMood(mood)
class MovingWindow(QtGui.QFrame):
class PesterWindow(QtGui.QWidget): def __init__(self, *x, **y):
def __init__(self, parent=None): QtGui.QFrame.__init__(self, *x, **y)
QtGui.QWidget.__init__(self, parent,
flags=QtCore.Qt.CustomizeWindowHint)
self.config = userConfig()
self.setGeometry(100,100, 500, 700)
self.setWindowIcon(QtGui.QIcon('themes/pesterchum/trayicon.gif'))
self.setStyleSheet("""
background-color: #fdb302;
""")
self.closeButton = exitButton(QtGui.QIcon('themes/pesterchum/x.gif'), self)
s = self.size() - self.closeButton.icon().availableSizes()[0]
self.closeButton.move(s.width(), 0)
self.connect(self.closeButton, QtCore.SIGNAL('clicked()'),
self, QtCore.SLOT('close()'))
self.chumList = chumArea(self.config.chums(), self)
self.moving = None self.moving = None
self.moveupdate = 0 self.moveupdate = 0
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
@ -101,8 +159,37 @@ background-color: #fdb302;
if event.button() == 1: if event.button() == 1:
self.update() self.update()
self.moving = None self.moving = None
def newMessage(self):
pass class PesterWindow(MovingWindow):
def __init__(self, parent=None):
MovingWindow.__init__(self, parent,
flags=QtCore.Qt.CustomizeWindowHint)
self.setObjectName("main")
self.config = userConfig()
theme = self.config.getTheme()
main = theme.getSection("main")
width = int(main['width'])
height = int(main['height'])
self.setGeometry(100, 100, width, height)
self.setWindowIcon(QtGui.QIcon(main["icon"]))
self.setStyleSheet("QFrame#main { "+main["style"]+" }")
closestyle = main["close"]
self.closeButton = exitButton(QtGui.QIcon(closestyle["image"]), self)
self.closeButton.move(*closestyle["loc"])
self.connect(self.closeButton, QtCore.SIGNAL('clicked()'),
self, QtCore.SLOT('close()'))
self.chumList = chumArea(self.config.chums(), main["chums"], self)
self.currentHandle = "superGhost"
self.currentMood = Mood(0)
self.convos = {}
def updateMood(self, nick, mood):
self.chumList.updateMood(nick, mood)
def newConversation(self, nick):
convoWindow = PesterConvo(nick, self.theme)
self.convos[nick] = convoWindow
def main(): def main():
@ -116,12 +203,12 @@ def main():
trayicon.setContextMenu(traymenu) trayicon.setContextMenu(traymenu)
trayicon.show() trayicon.show()
#irc = PesterIRC(widget) irc = PesterIRC(widget)
#irc.IRCConnect() irc.IRCConnect()
#irctimer = QtCore.QTimer(widget) irctimer = QtCore.QTimer(widget)
#widget.connect(irctimer, QtCore.SIGNAL('timeout()'), widget.connect(irctimer, QtCore.SIGNAL('timeout()'),
# irc, QtCore.SLOT('updateIRC()')) irc, QtCore.SLOT('updateIRC()'))
#irctimer.start() irctimer.start()
sys.exit(app.exec_()) sys.exit(app.exec_())
main() main()

View file

@ -0,0 +1,23 @@
{"main":
{"style": "background-image:url($path/pcbg.png);",
"width": 300,
"height": 620,
"icon": "$path/trayicon.gif",
"close": { "image": "$path/x.gif",
"loc": [275, 0]},
"chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#919191; ",
"loc": [20, 65],
"size": [265, 400],
"moods": { "chummy": { "icon": "$path/chummy.gif",
"color": "white" },
"offline": { "icon": "$path/offline.gif",
"color": "#919191"},
"rancorous": { "icon": "$path/rancorous.gif",
"color": "red" }
}
},
"elements": [
{ "style": "" }
]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

After

Width:  |  Height:  |  Size: 61 B