buncha new stuff

This commit is contained in:
Stephen Dranger 2011-02-01 05:14:56 -06:00
parent b830b3a76c
commit a1a7a8dbdd
16 changed files with 311 additions and 227 deletions

10
TODO
View file

@ -1,18 +1,11 @@
Features: Features:
* chumdb not working great
* tab recombining gives wrong window icon
* switch focus to lineedit
* colors from ppl msging you not on your buddy list dont work - check chumdb
* scaling icons * scaling icons
* menubar should pass on mouse move
* tab background * tab background
* softcode conversation handle
* top box layout * top box layout
* mood change image -- can't it be done already?
* chat scrolls when switch theme * chat scrolls when switch theme
* softcode menu names and protocol messages, menu location
* eliminate "SWITCH" in profile menu * eliminate "SWITCH" in profile menu
* remove highlighted text area if focus in textinput * remove highlighted text area if focus in textinput
* new sound on CEASE and BEGIN?
* windows text goes gray when out of focus * windows text goes gray when out of focus
* Logging * Logging
* Block list * Block list
@ -23,6 +16,7 @@ Features:
* color tags * color tags
* /me ghostDunk's [GD'S] * /me ghostDunk's [GD'S]
* Transparent background * Transparent background
* tab recombining gives wrong window icon
-- release alpha -- release alpha
* shared buddy lists - changes to the buddy list should refresh it? * shared buddy lists - changes to the buddy list should refresh it?
multiple clients share buddy list??? multiple clients share buddy list???

View file

@ -1 +1 @@
{"gamblingGenocider": {"color": "#00ff00", "handle": "gamblingGenocider", "mood": "offline"}, "aquaMarinist": {"color": "#00caca", "handle": "aquaMarinist", "mood": "offline"}, "unknownTraveler": {"color": "#006666", "handle": "unknownTraveler", "mood": "offline"}, "captainCaveman": {"color": "#7c414e", "handle": "captainCaveman", "mood": "offline"}} {"aquaMarinist": {"color": "#00caca", "handle": "aquaMarinist", "mood": "offline"}, "superGhost": {"color": "#800564", "handle": "superGhost", "mood": "offline"}, "captainCaveman": {"color": "#7c414e", "handle": "captainCaveman", "mood": "offline"}, "gamblingGenocider": {"color": "#00ff00", "handle": "gamblingGenocider", "mood": "offline"}, "unknownTraveler": {"color": "#006666", "handle": "unknownTraveler", "mood": "offline"}, "marineAquist": {"color": "#00caca", "handle": "marineAquist", "mood": "offline"}}

View file

@ -1 +1 @@
{"tabs": true, "chums": ["aquaMarinist", "gardenGnostic", "gamblingGenocider", "schlagzeugGator", "mechanicalSpectacle", "marineAquist"], "defaultprofile": "ghostDunk"} {"tabs": true, "chums": ["aquaMarinist", "gardenGnostic", "gamblingGenocider", "schlagzeugGator", "mechanicalSpectacle", "marineAquist", "unknownTraveler"], "defaultprofile": "testProfile"}

View file

@ -6,6 +6,7 @@ import logging
import os, sys import os, sys
import os.path import os.path
from datetime import * from datetime import *
from string import Template
import random import random
import json import json
import re import re
@ -85,11 +86,9 @@ class PesterProfileDB(dict):
fp.close() fp.close()
def getColor(self, handle, default=None): def getColor(self, handle, default=None):
if not self.has_key(handle): if not self.has_key(handle):
print "no color found for %s" % (handle)
return default return default
else: else:
print "pulled %s from db" % (handle) return self[handle].color
return self[handle]["color"]
def setColor(self, handle, color): def setColor(self, handle, color):
if self.has_key(handle): if self.has_key(handle):
self[handle].color = color self[handle].color = color
@ -125,10 +124,10 @@ class PesterProfile(object):
"mood": self.mood.name(), "mood": self.mood.name(),
"color": unicode(self.color.name())}) "color": unicode(self.color.name())})
def beganpestermsg(self, otherchum): def beganpestermsg(self, otherchum, verb="began pestering"):
return "<span style='color:black;'>-- %s <span style='color:%s'>[%s]</span> began pestering %s <span style='color:%s'>[%s]</span> at %s --</span>" % (self.handle, self.colorhtml(), self.initials(), otherchum.handle, otherchum.colorhtml(), otherchum.initials(), datetime.now().strftime("%H:%M")) return "<span style='color:black;'>-- %s <span style='color:%s'>[%s]</span> %s %s <span style='color:%s'>[%s]</span> at %s --</span>" % (self.handle, self.colorhtml(), self.initials(), verb, otherchum.handle, otherchum.colorhtml(), otherchum.initials(), datetime.now().strftime("%H:%M"))
def ceasedpestermsg(self, otherchum): def ceasedpestermsg(self, otherchum, verb="ceased pestering"):
return "<span style='color:black;'>-- %s <span style='color:%s'>[%s]</span> ceased pestering %s <span style='color:%s'>[%s]</span> at %s --</span>" % (self.handle, self.colorhtml(), self.initials(), otherchum.handle, otherchum.colorhtml(), otherchum.initials(), datetime.now().strftime("%H:%M")) return "<span style='color:black;'>-- %s <span style='color:%s'>[%s]</span> %s %s <span style='color:%s'>[%s]</span> at %s --</span>" % (self.handle, self.colorhtml(), self.initials(), verb, otherchum.handle, otherchum.colorhtml(), otherchum.initials(), datetime.now().strftime("%H:%M"))
@staticmethod @staticmethod
def checkLength(handle): def checkLength(handle):
@ -157,11 +156,10 @@ class pesterTheme(dict):
v = v[k] v = v[k]
return v return v
def pathHook(self, d): def pathHook(self, d):
from string import Template
for (k, v) in d.iteritems(): for (k, v) in d.iteritems():
if type(v) is unicode: if type(v) is unicode:
s = Template(v) s = Template(v)
d[k] = s.substitute(path=self.path) d[k] = s.safe_substitute(path=self.path)
return d return d
class pesterQuirk(object): class pesterQuirk(object):
@ -690,14 +688,14 @@ class chumArea(QtGui.QListWidget):
self.addItem(chumLabel) self.addItem(chumLabel)
self.optionsMenu = QtGui.QMenu(self) self.optionsMenu = QtGui.QMenu(self)
pester = QtGui.QAction("PESTER", self) self.pester = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/pester"], self)
self.connect(pester, QtCore.SIGNAL('triggered()'), self.connect(self.pester, QtCore.SIGNAL('triggered()'),
self, QtCore.SLOT('activateChum()')) self, QtCore.SLOT('activateChum()'))
removechum = QtGui.QAction("REMOVE CHUM", self) self.removechum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/removechum"], self)
self.connect(removechum, QtCore.SIGNAL('triggered()'), self.connect(self.removechum, QtCore.SIGNAL('triggered()'),
self, QtCore.SLOT('removeChum()')) self, QtCore.SLOT('removeChum()'))
self.optionsMenu.addAction(pester) self.optionsMenu.addAction(self.pester)
self.optionsMenu.addAction(removechum) self.optionsMenu.addAction(self.removechum)
self.sortItems() self.sortItems()
def addChum(self, chum): def addChum(self, chum):
@ -719,6 +717,9 @@ class chumArea(QtGui.QListWidget):
def changeTheme(self, theme): def changeTheme(self, theme):
self.setGeometry(*(theme["main/chums/loc"]+theme["main/chums/size"])) self.setGeometry(*(theme["main/chums/loc"]+theme["main/chums/size"]))
self.setStyleSheet(theme["main/chums/style"]) self.setStyleSheet(theme["main/chums/style"])
self.pester.setText(theme["main/menus/rclickchumlist/pester"])
self.removechum.setText(theme["main/menus/rclickchumlist/removechum"])
chumlistings = [self.item(i) for i in range(0, self.count())] chumlistings = [self.item(i) for i in range(0, self.count())]
for c in chumlistings: for c in chumlistings:
c.changeTheme(theme) c.changeTheme(theme)
@ -992,19 +993,19 @@ class PesterText(QtGui.QTextEdit):
parent.setChumOpen(True) parent.setChumOpen(True)
window = parent.mainwindow window = parent.mainwindow
me = window.profile() me = window.profile()
msg = chum.beganpestermsg(me) msg = chum.beganpestermsg(me, window.theme["convo/text/beganpester"])
self.append(msg) self.append(msg)
elif msg == "PESTERCHUM:CEASE": elif msg == "PESTERCHUM:CEASE":
parent = self.parent() parent = self.parent()
parent.setChumOpen(False) parent.setChumOpen(False)
window = parent.mainwindow window = parent.mainwindow
me = window.profile() me = window.profile()
msg = chum.ceasedpestermsg(me) msg = chum.ceasedpestermsg(me, window.theme["convo/text/ceasepester"])
self.append(msg) self.append(msg)
else: else:
if not self.parent().chumopen and chum is not self.parent().mainwindow.profile(): if not self.parent().chumopen and chum is not self.parent().mainwindow.profile():
me = self.parent().mainwindow.profile() me = self.parent().mainwindow.profile()
beginmsg = chum.beganpestermsg(me) beginmsg = chum.beganpestermsg(me, self.parent().mainwindow.theme["convo/text/beganpester"])
self.parent().setChumOpen(True) self.parent().setChumOpen(True)
self.append(beginmsg) self.append(beginmsg)
@ -1016,6 +1017,7 @@ class PesterText(QtGui.QTextEdit):
def focusInEvent(self, event): def focusInEvent(self, event):
self.parent().clearNewMessage() self.parent().clearNewMessage()
QtGui.QTextEdit.focusInEvent(self, event) QtGui.QTextEdit.focusInEvent(self, event)
self.parent().textInput.setFocus()
class PesterInput(QtGui.QLineEdit): class PesterInput(QtGui.QLineEdit):
def __init__(self, theme, parent=None): def __init__(self, theme, parent=None):
@ -1039,7 +1041,9 @@ class PesterConvo(QtGui.QFrame):
self.setWindowIcon(chum.mood.icon(self.mainwindow.theme)) self.setWindowIcon(chum.mood.icon(self.mainwindow.theme))
self.setWindowTitle(chum.handle) self.setWindowTitle(chum.handle)
self.chumLabel = QtGui.QLabel(chum.handle, self) t = Template(self.mainwindow.theme["convo/chumlabel/text"])
self.chumLabel = QtGui.QLabel(t.safe_substitute(handle=chum.handle), self)
self.chumLabel.setStyleSheet(self.mainwindow.theme["convo/chumlabel/style"]) self.chumLabel.setStyleSheet(self.mainwindow.theme["convo/chumlabel/style"])
self.textArea = PesterText(self.mainwindow.theme, self) self.textArea = PesterText(self.mainwindow.theme, self)
self.textInput = PesterInput(self.mainwindow.theme, self) self.textInput = PesterInput(self.mainwindow.theme, self)
@ -1060,13 +1064,13 @@ class PesterConvo(QtGui.QFrame):
if parent: if parent:
parent.addChat(self) parent.addChat(self)
if initiated: if initiated:
msg = self.mainwindow.profile().beganpestermsg(self.chum) msg = self.mainwindow.profile().beganpestermsg(self.chum, self.mainwindow.theme["convo/text/beganpester"])
self.textArea.append(msg) self.textArea.append(msg)
self.newmessage = False self.newmessage = False
def updateMood(self, mood): def updateMood(self, mood):
if mood.name() == "offline": if mood.name() == "offline" and self.chumopen == True:
msg = self.mainwindow.profile().ceasedpestermsg(self.chum) msg = self.chum.ceasedpestermsg(self.mainwindow.profile(), self.mainwindow.theme["convo/text/ceasepester"])
self.textArea.append(msg) self.textArea.append(msg)
self.chumopen = False self.chumopen = False
if self.parent(): if self.parent():
@ -1129,6 +1133,8 @@ class PesterConvo(QtGui.QFrame):
self.resize(*theme["convo/size"]) self.resize(*theme["convo/size"])
self.setStyleSheet(theme["convo/style"]) self.setStyleSheet(theme["convo/style"])
self.setWindowIcon(self.chum.mood.icon(theme)) self.setWindowIcon(self.chum.mood.icon(theme))
t = Template(self.mainwindow.theme["convo/chumlabel/text"])
self.chumLabel.setText(t.safe_substitute(handle=self.chum.handle))
self.chumLabel.setStyleSheet(theme["convo/chumlabel/style"]) self.chumLabel.setStyleSheet(theme["convo/chumlabel/style"])
self.textArea.changeTheme(theme) self.textArea.changeTheme(theme)
self.textInput.changeTheme(theme) self.textInput.changeTheme(theme)
@ -1170,29 +1176,37 @@ class PesterWindow(MovingWindow):
self.move(100, 100) self.move(100, 100)
opts = QtGui.QAction("OPTIONS", self) opts = QtGui.QAction(self.theme["main/menus/client/options"], self)
self.opts = opts
self.connect(opts, QtCore.SIGNAL('triggered()'), self.connect(opts, QtCore.SIGNAL('triggered()'),
self, QtCore.SLOT('openOpts()')) self, QtCore.SLOT('openOpts()'))
exitaction = QtGui.QAction("EXIT", self) exitaction = QtGui.QAction(self.theme["main/menus/client/exit"], self)
self.exitaction = exitaction
self.connect(exitaction, QtCore.SIGNAL('triggered()'), self.connect(exitaction, QtCore.SIGNAL('triggered()'),
self, QtCore.SLOT('close()')) self, QtCore.SLOT('close()'))
self.menu = QtGui.QMenuBar(self) self.menu = QtGui.QMenuBar(self)
filemenu = self.menu.addMenu("FILE") filemenu = self.menu.addMenu(self.theme["main/menus/client/_name"])
self.filemenu = filemenu
filemenu.addAction(opts) filemenu.addAction(opts)
filemenu.addAction(exitaction) filemenu.addAction(exitaction)
switch = QtGui.QAction("SWITCH", self) changetheme = QtGui.QAction(self.theme["main/menus/profile/theme"], self)
self.connect(switch, QtCore.SIGNAL('triggered()'), self.changetheme = changetheme
self, QtCore.SLOT('switchProfile()'))
changetheme = QtGui.QAction("THEME", self)
self.connect(changetheme, QtCore.SIGNAL('triggered()'), self.connect(changetheme, QtCore.SIGNAL('triggered()'),
self, QtCore.SLOT('pickTheme()')) self, QtCore.SLOT('pickTheme()'))
changequirks = QtGui.QAction("QUIRKS", self) changequirks = QtGui.QAction(self.theme["main/menus/profile/quirks"], self)
self.changequirks = changequirks
self.connect(changequirks, QtCore.SIGNAL('triggered()'), self.connect(changequirks, QtCore.SIGNAL('triggered()'),
self, QtCore.SLOT('openQuirks()')) self, QtCore.SLOT('openQuirks()'))
profilemenu = self.menu.addMenu("PROFILE") switch = QtGui.QAction(self.theme["main/menus/profile/switch"], self)
self.switch = switch
self.connect(switch, QtCore.SIGNAL('triggered()'),
self, QtCore.SLOT('switchProfile()'))
profilemenu = self.menu.addMenu(self.theme["main/menus/profile/_name"])
self.profilemenu = profilemenu
profilemenu.addAction(changetheme) profilemenu.addAction(changetheme)
profilemenu.addAction(changequirks) profilemenu.addAction(changequirks)
profilemenu.addAction(switch) profilemenu.addAction(switch)
@ -1206,7 +1220,7 @@ class PesterWindow(MovingWindow):
self.chumdb = PesterProfileDB() self.chumdb = PesterProfileDB()
chums = [PesterProfile(c) for c in set(self.config.chums())] chums = [PesterProfile(c, chumdb=self.chumdb) for c in set(self.config.chums())]
self.chumList = chumArea(chums, self) self.chumList = chumArea(chums, self)
self.connect(self.chumList, self.connect(self.chumList,
QtCore.SIGNAL('itemActivated(QListWidgetItem *)'), QtCore.SIGNAL('itemActivated(QListWidgetItem *)'),
@ -1265,7 +1279,7 @@ class PesterWindow(MovingWindow):
mood = matchingChums[0].mood mood = matchingChums[0].mood
else: else:
mood = Mood(0) mood = Mood(0)
chum = PesterProfile(handle, mood=mood) chum = PesterProfile(handle, mood=mood, chumdb=self.chumdb)
self.newConversation(chum, False) self.newConversation(chum, False)
if len(matchingChums) == 0: if len(matchingChums) == 0:
self.moodRequest.emit(chum) self.moodRequest.emit(chum)
@ -1327,11 +1341,21 @@ class PesterWindow(MovingWindow):
self.setWindowIcon(QtGui.QIcon(theme["main/icon"])) self.setWindowIcon(QtGui.QIcon(theme["main/icon"]))
self.setWindowTitle(theme["main/windowtitle"]) self.setWindowTitle(theme["main/windowtitle"])
self.setStyleSheet("QFrame#main { "+theme["main/style"]+" }") self.setStyleSheet("QFrame#main { "+theme["main/style"]+" }")
self.menu.setStyleSheet("QMenuBar { background: transparent; %s } QMenuBar::item { background: transparent; } " % (theme["main/menubar/style"]) + "QMenu { background: transparent; %s } QMenu::item::selected { %s }" % (theme["main/menu/style"], theme["main/menu/selected"])) self.menu.setStyleSheet("QMenuBar { background: transparent; %s } QMenuBar::item { background: transparent; %s } " % (theme["main/menubar/style"], theme["main/menu/menuitem"]) + "QMenu { background: transparent; %s } QMenu::item::selected { %s }" % (theme["main/menu/style"], theme["main/menu/selected"]))
self.closeButton.setIcon(QtGui.QIcon(theme["main/close/image"])) self.closeButton.setIcon(QtGui.QIcon(theme["main/close/image"]))
self.closeButton.move(*theme["main/close/loc"]) self.closeButton.move(*theme["main/close/loc"])
self.miniButton.setIcon(QtGui.QIcon(theme["main/minimize/image"])) self.miniButton.setIcon(QtGui.QIcon(theme["main/minimize/image"]))
self.miniButton.move(*theme["main/minimize/loc"]) self.miniButton.move(*theme["main/minimize/loc"])
# menus
self.menu.move(*theme["main/menu/loc"])
self.opts.setText(theme["main/menus/client/options"])
self.exitaction.setText(theme["main/menus/client/exit"])
self.filemenu.setTitle(theme["main/menus/client/_name"])
self.changetheme.setText(theme["main/menus/profile/theme"])
self.changequirks.setText(theme["main/menus/profile/quirks"])
self.switch.setText(theme["main/menus/profile/switch"])
self.profilemenu.setTitle(theme["main/menus/profile/_name"])
# moods # moods
self.moodsLabel.setText(theme["main/moodlabel/text"]) self.moodsLabel.setText(theme["main/moodlabel/text"])
self.moodsLabel.move(*theme["main/moodlabel/loc"]) self.moodsLabel.move(*theme["main/moodlabel/loc"])
@ -1411,7 +1435,11 @@ class PesterWindow(MovingWindow):
self.newConversationWindow(curChum) self.newConversationWindow(curChum)
@QtCore.pyqtSlot(QtGui.QListWidgetItem) @QtCore.pyqtSlot(QtGui.QListWidgetItem)
def newConversationWindow(self, chumlisting): def newConversationWindow(self, chumlisting):
# check chumdb
chum = chumlisting.chum chum = chumlisting.chum
color = self.chumdb.getColor(chum)
if color:
chum.color = color
self.newConversation(chum) self.newConversation(chum)
@QtCore.pyqtSlot(QtCore.QString) @QtCore.pyqtSlot(QtCore.QString)
def closeConvo(self, handle): def closeConvo(self, handle):
@ -1456,7 +1484,7 @@ class PesterWindow(MovingWindow):
errormsg.showMessage("THIS IS NOT A VALID CHUMTAG!") errormsg.showMessage("THIS IS NOT A VALID CHUMTAG!")
self.addchumdialog = None self.addchumdialog = None
return return
chum = PesterProfile(handle) chum = PesterProfile(handle, chumdb=self.chumdb)
self.chumList.addChum(chum) self.chumList.addChum(chum)
self.config.addChum(chum) self.config.addChum(chum)
self.moodRequest.emit(chum) self.moodRequest.emit(chum)
@ -1539,8 +1567,10 @@ class PesterWindow(MovingWindow):
try: try:
self.changeTheme(pesterTheme(themename)) self.changeTheme(pesterTheme(themename))
except ValueError, e: except ValueError, e:
themeWarning = QtGui.QMessageBox() themeWarning = QtGui.QMessageBox(self)
closeWarning.setText("Theme Error: %s", e) themeWarning.setText("Theme Error: %s" % (e))
themeWarning.exec_()
self.choosetheme = None
return return
# update profile # update profile
self.userprofile.setTheme(self.theme) self.userprofile.setTheme(self.theme)
@ -1554,12 +1584,14 @@ class PesterWindow(MovingWindow):
self.chooseprofile.profileBox.currentIndex() > 0: self.chooseprofile.profileBox.currentIndex() > 0:
handle = unicode(self.chooseprofile.profileBox.currentText()) handle = unicode(self.chooseprofile.profileBox.currentText())
if handle == self.profile().handle: if handle == self.profile().handle:
self.chooseprofile = None
return return
self.userprofile = userProfile(handle) self.userprofile = userProfile(handle)
self.changeTheme(self.userprofile.getTheme()) self.changeTheme(self.userprofile.getTheme())
else: else:
handle = unicode(self.chooseprofile.chumHandle.text()) handle = unicode(self.chooseprofile.chumHandle.text())
if handle == self.profile().handle: if handle == self.profile().handle:
self.chooseprofile = None
return return
profile = PesterProfile(handle, profile = PesterProfile(handle,
self.chooseprofile.chumcolor) self.chooseprofile.chumcolor)
@ -1571,9 +1603,9 @@ class PesterWindow(MovingWindow):
self.config.set("defaultprofile", self.userprofile.chat.handle) self.config.set("defaultprofile", self.userprofile.chat.handle)
# this may have to be fixed # this may have to be fixed
self.closeConversations() self.closeConversations()
self.chooseprofile = None
self.profileChanged.emit() self.profileChanged.emit()
self.chooseprofile = None
@QtCore.pyqtSlot() @QtCore.pyqtSlot()
def changeMyColor(self): def changeMyColor(self):
if not hasattr(self, 'colorDialog'): if not hasattr(self, 'colorDialog'):
@ -1602,8 +1634,11 @@ class PesterWindow(MovingWindow):
return return
self.changeProfile() self.changeProfile()
@QtCore.pyqtSlot(QtCore.QString) @QtCore.pyqtSlot(QtCore.QString, QtCore.QString)
def nickCollision(self, handle): def nickCollision(self, handle, tmphandle):
self.mychumhandle.setText(tmphandle)
if not hasattr(self, 'chooseprofile'):
self.chooseprofile = None
if not self.chooseprofile: if not self.chooseprofile:
h = unicode(handle) h = unicode(handle)
self.changeProfile(collision=h) self.changeProfile(collision=h)
@ -1679,7 +1714,7 @@ class PesterIRC(QtCore.QObject):
moodUpdated = QtCore.pyqtSignal(QtCore.QString, Mood) moodUpdated = QtCore.pyqtSignal(QtCore.QString, Mood)
colorUpdated = QtCore.pyqtSignal(QtCore.QString, QtGui.QColor) colorUpdated = QtCore.pyqtSignal(QtCore.QString, QtGui.QColor)
messageReceived = QtCore.pyqtSignal(QtCore.QString, QtCore.QString) messageReceived = QtCore.pyqtSignal(QtCore.QString, QtCore.QString)
nickCollision = QtCore.pyqtSignal(QtCore.QString) nickCollision = QtCore.pyqtSignal(QtCore.QString, QtCore.QString)
class PesterHandler(DefaultCommandHandler): class PesterHandler(DefaultCommandHandler):
def privmsg(self, nick, chan, msg): def privmsg(self, nick, chan, msg):
@ -1688,6 +1723,7 @@ class PesterHandler(DefaultCommandHandler):
if msg[0] == '\x01': if msg[0] == '\x01':
return return
handle = nick[0:nick.find("!")] handle = nick[0:nick.find("!")]
logging.info("---> recv \"PRIVMSG %s :%s\"" % (handle, msg))
if chan == "#pesterchum": if chan == "#pesterchum":
# follow instructions # follow instructions
if msg[0:6] == "MOOD >": if msg[0:6] == "MOOD >":
@ -1730,8 +1766,9 @@ class PesterHandler(DefaultCommandHandler):
self.getMood(*chums) self.getMood(*chums)
def nicknameinuse(self, server, cmd, nick, msg): def nicknameinuse(self, server, cmd, nick, msg):
helpers.nick(self.client, "pesterClient%d" % (random.randint(100,999))) newnick = "pesterClient%d" % (random.randint(100,999))
self.parent.nickCollision.emit(nick) helpers.nick(self.client, newnick)
self.parent.nickCollision.emit(nick, newnick)
def quit(self, nick, reason): def quit(self, nick, reason):
handle = nick[0:nick.find("!")] handle = nick[0:nick.find("!")]
self.parent.moodUpdated.emit(handle, Mood("offline")) self.parent.moodUpdated.emit(handle, Mood("offline"))
@ -1745,7 +1782,7 @@ class PesterHandler(DefaultCommandHandler):
self.parent.moodUpdated.emit(handle, Mood("chummy")) self.parent.moodUpdated.emit(handle, Mood("chummy"))
def nick(self, oldnick, newnick): def nick(self, oldnick, newnick):
oldhandle = oldnick[0:oldnick.find("!")] oldhandle = oldnick[0:oldnick.find("!")]
newchum = PesterProfile(newnick) newchum = PesterProfile(newnick, chumdb=self.mainwindow.chumdb)
self.parent.moodUpdated.emit(oldhandle, Mood("offline")) self.parent.moodUpdated.emit(oldhandle, Mood("offline"))
if newnick in self.mainwindow.chumList.chums: if newnick in self.mainwindow.chumList.chums:
self.getMood(newchum) self.getMood(newchum)
@ -1848,9 +1885,9 @@ def main():
widget, widget,
QtCore.SLOT('deliverMessage(QString, QString)')) QtCore.SLOT('deliverMessage(QString, QString)'))
irc.connect(irc, irc.connect(irc,
QtCore.SIGNAL('nickCollision(QString)'), QtCore.SIGNAL('nickCollision(QString, QString)'),
widget, widget,
QtCore.SLOT('nickCollision(QString)')) QtCore.SLOT('nickCollision(QString, QString)'))
ircapp = IRCThread(irc) ircapp = IRCThread(irc)
ircapp.start() ircapp.start()

View file

@ -1 +1 @@
{"color": "#aa00ff", "theme": "pesterchum", "quirks": [], "handle": "testProfile"} {"color": "#aa00ff", "theme": "trollian", "quirks": [], "handle": "testProfile"}

View file

@ -10,9 +10,21 @@
"loc": [255, 0]}, "loc": [255, 0]},
"menubar": { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px;" }, "menubar": { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px;" },
"menu" : { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px; background-color: #fdb302;border:2px solid #ffff00", "menu" : { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px; background-color: #fdb302;border:2px solid #ffff00",
"selected": "background-color: #ffff00" "selected": "background-color: #ffff00",
"menuitem": "margin-right:10px;",
"loc": [7,3]
}, },
"sounds": { "alertsound": "$path/alarm.wav" }, "sounds": { "alertsound": "$path/alarm.wav" },
"menus": {"client": {"_name": "CLIENT",
"options": "OPTIONS",
"exit": "EXIT"},
"profile": {"_name": "PROFILE",
"switch": "SWITCH",
"theme": "THEME",
"quirks": "QUIRKS"},
"rclickchumlist": {"pester": "PESTER",
"removechum": "REMOVE CHUM"}
},
"chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#919191; ", "chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#919191; ",
"loc": [20, 65], "loc": [20, 65],
"size": [266, 270], "size": [266, 270],
@ -66,7 +78,7 @@
"size": [100, 40], "size": [100, 40],
"text": "PESTER!" "text": "PESTER!"
}, },
"defaultmood": "chummy", "defaultmood": 0,
"moodlabel": { "style": "", "moodlabel": { "style": "",
"loc": [20, 430], "loc": [20, 430],
"text": "MOODS" "text": "MOODS"
@ -78,7 +90,7 @@
"size": [133, 30], "size": [133, 30],
"text": "CHUMMY", "text": "CHUMMY",
"icon": "$path/chummy.gif", "icon": "$path/chummy.gif",
"mood": "chummy" "mood": 0
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color: #919191", { "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color: #919191",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -86,7 +98,7 @@
"size": [133, 30], "size": [133, 30],
"text": "PLEASANT", "text": "PLEASANT",
"icon": "$path/pleasant.gif", "icon": "$path/pleasant.gif",
"mood": "pleasant" "mood": 3
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", { "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -94,7 +106,7 @@
"size": [133, 30], "size": [133, 30],
"text": "DISTRAUGHT", "text": "DISTRAUGHT",
"icon": "$path/distraught.gif", "icon": "$path/distraught.gif",
"mood": "distraught" "mood": 4
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", { "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -102,7 +114,7 @@
"size": [133, 30], "size": [133, 30],
"text": "UNRULY", "text": "UNRULY",
"icon": "$path/unruly.gif", "icon": "$path/unruly.gif",
"mood": "unruly" "mood": 5
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", { "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -110,7 +122,7 @@
"size": [133, 30], "size": [133, 30],
"text": "SMOOTH", "text": "SMOOTH",
"icon": "$path/smooth.gif", "icon": "$path/smooth.gif",
"mood": "smooth" "mood": 6
}, },
{ "style": "text-align:left; background: red; border:3px solid black; padding: 5px;", { "style": "text-align:left; background: red; border:3px solid black; padding: 5px;",
"selected": "text-align:left; background: red; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: red; border:3px solid black; padding: 5px;font: bold;",
@ -118,7 +130,7 @@
"size": [133, 30], "size": [133, 30],
"text": "RANCOROUS", "text": "RANCOROUS",
"icon": "$path/rancorous.gif", "icon": "$path/rancorous.gif",
"mood": "rancorous" "mood": 1
}, },
{ "style": "text-align:center; background: #919191; border:3px solid black; padding: 5px;", { "style": "text-align:center; background: #919191; border:3px solid black; padding: 5px;",
"selected": "text-align:center; background: #919191; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:center; background: #919191; border:3px solid black; padding: 5px;font: bold;",
@ -126,14 +138,16 @@
"size": [263, 30], "size": [263, 30],
"text": "ABSCOND", "text": "ABSCOND",
"icon": "$path/offline.gif", "icon": "$path/offline.gif",
"mood": "offline" "mood": 2
} }
] ]
}, },
"convo": "convo":
{"style": "background: #fdb302; font-family: 'Courier New'", {"style": "background: #fdb302; font-family: 'Courier New'",
"size": [600, 500], "size": [600, 500],
"chumlabel": { "style": "background: rgba(255, 255, 255, 25%);" }, "chumlabel": { "style": "background: rgba(255, 255, 255, 25%);",
"text" : ":: $handle ::"
},
"textarea": { "textarea": {
"style": "background: white;font:bold;" "style": "background: white;font:bold;"
}, },
@ -144,6 +158,10 @@
"style": "", "style": "",
"newmsgcolor": "#fdb302", "newmsgcolor": "#fdb302",
"tabstyle": 0 "tabstyle": 0
},
"text": {
"beganpester": "began pestering",
"ceasepester": "ceased pestering"
} }
} }

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 9 KiB

View file

@ -1,8 +1,8 @@
{"main": {"main":
{"style": "background-image:url($path/pcbg.png);", {"style": "background-image:url($path/pcbg.png);",
"size": [232, 380], "size": [232, 380],
"icon": "$path/trayicon.gif", "icon": "$path/trayicon.png",
"newmsgicon": "$path/trayicon2.gif", "newmsgicon": "$path/trayicon2.png",
"windowtitle": "PESTERCHUM", "windowtitle": "PESTERCHUM",
"close": { "image": "$path/x.gif", "close": { "image": "$path/x.gif",
"loc": [210, 2]}, "loc": [210, 2]},
@ -10,9 +10,21 @@
"loc": [190, 2]}, "loc": [190, 2]},
"menubar": { "style": "font-family: 'Courier'; font:bold; font-size: 12px;" }, "menubar": { "style": "font-family: 'Courier'; font:bold; font-size: 12px;" },
"menu" : { "style": "font-family: 'Courier'; font: bold; font-size: 12px; background-color: #fdb302;border:2px solid #ffff00", "menu" : { "style": "font-family: 'Courier'; font: bold; font-size: 12px; background-color: #fdb302;border:2px solid #ffff00",
"selected": "background-color: #ffff00" "menuitem": "margin-right:10px;",
"selected": "background-color: #ffff00",
"loc": [10,0]
}, },
"sounds": { "alertsound": "$path/alarm.wav" }, "sounds": { "alertsound": "$path/alarm.wav" },
"menus": {"client": {"_name": "CLIENT",
"options": "OPTIONS",
"exit": "EXIT"},
"profile": {"_name": "PROFILE",
"switch": "SWITCH",
"theme": "THEME",
"quirks": "QUIRKS"},
"rclickchumlist": {"pester": "PESTER",
"removechum": "REMOVE CHUM"}
},
"chums": { "style": "border:2px solid yellow; background-color: black;color: white;font: bold;font-family: 'Courier';selection-background-color:#646464; ", "chums": { "style": "border:2px solid yellow; background-color: black;color: white;font: bold;font-family: 'Courier';selection-background-color:#646464; ",
"loc": [12, 117], "loc": [12, 117],
"size": [209, 82], "size": [209, 82],
@ -46,7 +58,7 @@
}, },
"mychumhandle": { "label": { "text": "CHUMHANDLE:", "mychumhandle": { "label": { "text": "CHUMHANDLE:",
"loc": [19,232], "loc": [19,232],
"style": "color: rgba(255, 255, 0, 0%) ; font-family: 'Courier';" }, "style": "color: rgba(255, 255, 0, 0%) ;font:bold; font-family: 'Courier';" },
"handle": { "style": "background: black; padding: 3px; color:white; font-family:'Courier'; font:bold; text-align:left;", "handle": { "style": "background: black; padding: 3px; color:white; font-family:'Courier'; font:bold; text-align:left;",
"loc": [14,246], "loc": [14,246],
"size": [190, 21] }, "size": [190, 21] },
@ -66,66 +78,66 @@
"size": [71, 22], "size": [71, 22],
"text": "PESTER!" "text": "PESTER!"
}, },
"defaultmood": "chummy", "defaultmood": 0,
"moodlabel": { "style": "", "moodlabel": { "style": "",
"loc": [20, 4300], "loc": [20, 430],
"text": "MOODS" "text": "MOODS"
}, },
"moods": [ "moods": [
{ "style": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'; font:bold; font-size:9pt;", "selected": "text-align:left; background-image:url($path/moodcheck1.gif); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [12, 288], "loc": [12, 288],
"size": [104, 22], "size": [104, 22],
"text": "CHUMMY", "text": "CHUMMY",
"icon": "$path/chummy.gif", "icon": "$path/chummy.gif",
"mood": "chummy" "mood": 0
}, },
{ "style": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'; font: bold; font-size:9pt;", "selected": "text-align:left; background-image:url($path/moodcheck2.gif); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [12, 308], "loc": [12, 308],
"size": [104, 22], "size": [104, 22],
"text": "PALSY", "text": "PALSY",
"icon": "$path/chummy.gif", "icon": "$path/chummy.gif",
"mood": "pleasant.gif" "mood": 3
}, },
{ "style": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier';font: bold; font-size:9pt;", "selected": "text-align:left; background-image:url($path/moodcheck3.gif); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [12, 328], "loc": [12, 328],
"size": [104, 22], "size": [104, 22],
"text": "CHIPPER", "text": "CHIPPER",
"icon": "$path/chummy.gif", "icon": "$path/chummy.gif",
"mood": "distraught" "mood": 4
}, },
{ "style": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'; font-size:9pt; font: bold;", "selected": "text-align:left; background-image:url($path/moodcheck2.gif); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [117, 288], "loc": [117, 288],
"size": [104, 22], "size": [104, 22],
"text": "BULLY", "text": "BULLY",
"icon": "$path/chummy.gif", "icon": "$path/chummy.gif",
"mood": "unruly" "mood": 5
}, },
{ "style": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier'", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: yellow; border:2px solid #c48a00; padding: 5px;color:#000000; font-family:'Courier';font: bold; font-size:9pt;", "selected": "text-align:left; background-image:url($path/moodcheck2.gif); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [117, 308], "loc": [117, 308],
"size": [104, 22], "size": [104, 22],
"text": "PEPPY", "text": "PEPPY",
"icon": "$path/chummy.gif", "icon": "$path/chummy.gif",
"mood": "smooth" "mood": 6
}, },
{ "style": "text-align:left; background: red; border:2px solid #c48a00; padding: 5px;color:#FFFFFF; font-family:'Courier'", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: red; border:2px solid #c48a00; padding: 5px;color:#FFFFFF; font-family:'Courier';font: bold; font-size:9pt;", "selected": "text-align:left; background-image:url($path/moodcheck4.gif); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [117, 328], "loc": [117, 328],
"size": [104, 22], "size": [104, 22],
"text": "RANCOROUS", "text": "RANCOROUS",
"icon": "$path/rancorous.gif", "icon": "$path/rancorous.gif",
"mood": 1 "mood": 1
}, },
{ "style": "text-align:center; background: black; border:2px solid #c48a00; padding: 5px;color:#646464; font-family:'Courier'", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:center; background: black; border:2px solid #c48a00; padding: 5px;color:#646464; font-family:'Courier';font: bold; font-size:9pt;", "selected": "text-align:left; background-image:url($path/moodcheck5.gif); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [12, 348], "loc": [12, 348],
"size": [209, 22], "size": [209, 22],
"text": "ABSCOND", "text": "ABSCOND",
"icon": "$path/offline.gif", "icon": "$path/x.gif",
"mood": 2 "mood": 2
} }
] ]
@ -133,9 +145,10 @@
"convo": "convo":
{"style": "background: #fdb302; border:2px solid yellow; font-family: 'Courier'", {"style": "background: #fdb302; border:2px solid yellow; font-family: 'Courier'",
"size": [295, 191], "size": [295, 191],
"chumlabel": { "style": "background: rgb(196, 138, 0);" }, "chumlabel": { "style": "background: rgb(196, 138, 0); color: white; text-align:center;",
"text" : ":: $handle ::" },
"textarea": { "textarea": {
"style": "background: white; font:bold; border:2px solid #c48a00;" "style": "background: white; font:bold; border:2px solid #c48a00;text-align:center;"
}, },
"input": { "input": {
"style": "background: white; border:2px solid #c48a00;" "style": "background: white; border:2px solid #c48a00;"
@ -144,6 +157,10 @@
"style": "", "style": "",
"newmsgcolor": "#fdb302", "newmsgcolor": "#fdb302",
"tabstyle": 0 "tabstyle": 0
},
"text": {
"beganpester": "began pestering",
"ceasepester": "ceased pestering"
} }
} }

View file

@ -10,9 +10,21 @@
"loc": [255, 0]}, "loc": [255, 0]},
"menubar": { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px;" }, "menubar": { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px;" },
"menu" : { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px; background-color: #e5000f; border:2px solid #ff0000", "menu" : { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px; background-color: #e5000f; border:2px solid #ff0000",
"selected": "background-color: #ff0000" "selected": "background-color: #ff0000",
"menuitem": "margin-right:10px;",
"loc": [10,0]
}, },
"sounds": { "alertsound": "$path/alarm.wav" }, "sounds": { "alertsound": "$path/alarm.wav" },
"menus": {"client": {"_name": "GRUBBER",
"options": "OPTIONS",
"exit": "ABSCOND"},
"profile": {"_name": "HEMOSPECTRUM",
"switch": "SWITCH",
"theme": "THEME",
"quirks": "ANNOYING"},
"rclickchumlist": {"pester": "TROLL",
"removechum": "REMOVE LOSER"}
},
"chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#ffb6b6; ", "chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#ffb6b6; ",
"loc": [20, 65], "loc": [20, 65],
"size": [266, 270], "size": [266, 270],
@ -66,7 +78,7 @@
"size": [100, 40], "size": [100, 40],
"text": "TROLL" "text": "TROLL"
}, },
"defaultmood": "ecstatic", "defaultmood": 7,
"moodlabel": { "style": "", "moodlabel": { "style": "",
"loc": [20, 430], "loc": [20, 430],
"text": "MOODS" "text": "MOODS"
@ -78,7 +90,7 @@
"size": [133, 30], "size": [133, 30],
"text": "ECSTATIC", "text": "ECSTATIC",
"icon": "$path/estatic.gif", "icon": "$path/estatic.gif",
"mood": "ecstatic" "mood": 7
}, },
{ "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color: #dbdbdb", { "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color: #dbdbdb",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -86,7 +98,7 @@
"size": [133, 30], "size": [133, 30],
"text": "RELAXED", "text": "RELAXED",
"icon": "$path/relaxed.gif", "icon": "$path/relaxed.gif",
"mood": "relaxed" "mood": 8
}, },
{ "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;", { "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -94,7 +106,7 @@
"size": [133, 30], "size": [133, 30],
"text": "DISCONTENT", "text": "DISCONTENT",
"icon": "$path/discontent.gif", "icon": "$path/discontent.gif",
"mood": "discontent" "mood": 9
}, },
{ "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;", { "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -102,7 +114,7 @@
"size": [133, 30], "size": [133, 30],
"text": "DEVIOUS", "text": "DEVIOUS",
"icon": "$path/devious.gif", "icon": "$path/devious.gif",
"mood": "devious" "mood": 10
}, },
{ "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;", { "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;",
@ -110,7 +122,7 @@
"size": [133, 30], "size": [133, 30],
"text": "SLEEK", "text": "SLEEK",
"icon": "$path/sleek.gif", "icon": "$path/sleek.gif",
"mood": "sleek" "mood": 11
}, },
{ "style": "text-align:left; background: red; border:3px solid black; padding: 5px;", { "style": "text-align:left; background: red; border:3px solid black; padding: 5px;",
"selected": "text-align:left; background: red; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:left; background: red; border:3px solid black; padding: 5px;font: bold;",
@ -118,7 +130,7 @@
"size": [133, 30], "size": [133, 30],
"text": "DETESTFUL", "text": "DETESTFUL",
"icon": "$path/detestful.gif", "icon": "$path/detestful.gif",
"mood": "detestful" "mood": 12
}, },
{ "style": "text-align:center; background: #919191; border:3px solid black; padding: 5px;", { "style": "text-align:center; background: #919191; border:3px solid black; padding: 5px;",
"selected": "text-align:center; background: #919191; border:3px solid black; padding: 5px;font: bold;", "selected": "text-align:center; background: #919191; border:3px solid black; padding: 5px;font: bold;",
@ -126,14 +138,16 @@
"size": [263, 30], "size": [263, 30],
"text": "ABSCOND", "text": "ABSCOND",
"icon": "$path/offline.gif", "icon": "$path/offline.gif",
"mood": "offline" "mood": 2
} }
] ]
}, },
"convo": "convo":
{"style": "background: #e5000f; font-family: 'Courier New'", {"style": "background: #e5000f; font-family: 'Courier New'",
"size": [600, 500], "size": [600, 500],
"chumlabel": { "style": "background: rgba(255, 255, 255, 25%);" }, "chumlabel": { "style": "background: rgba(255, 255, 255, 25%);",
"text" : "trolling $handle"
},
"textarea": { "textarea": {
"style": "background: white;font:bold;" "style": "background: white;font:bold;"
}, },
@ -144,6 +158,10 @@
"style": "", "style": "",
"newmsgcolor": "red", "newmsgcolor": "red",
"tabstyle": 0 "tabstyle": 0
},
"text": {
"beganpester": "began trolling",
"ceasepester": "gave up trolling"
} }
} }