prealpha-0.0.4

This commit is contained in:
Stephen Dranger 2011-02-02 02:20:48 -06:00
parent a1a7a8dbdd
commit 24c1cebe57
32 changed files with 591 additions and 339 deletions

22
TODO
View file

@ -1,22 +1,17 @@
Features: Features:
* scaling icons
* tab background
* top box layout
* chat scrolls when switch theme * chat scrolls when switch theme
* 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
* Block list * Block list
* User list/add from list * User list/add from list
* Turn quirks off * Turn quirks off
* User commands/stop user from sending commands accidentally * User commands/stop user from sending commands accidentally
* Hyperlinks * Hyperlinks
* color tags
* /me ghostDunk's [GD'S] * /me ghostDunk's [GD'S]
* Transparent background * Transparent background
* tab recombining gives wrong window icon * tab recombining gives wrong window icon
* help menu -- about and forum
* new sound on CEASE and BEGIN?
-- 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???
@ -26,11 +21,13 @@ Features:
* page up/down scrolling * page up/down scrolling
* ctrl-tab should prefer new convos * ctrl-tab should prefer new convos
* Chat rooms/browser * Chat rooms/browser
* More complex quirks * More complex quirks: random, spelling, by-sound
* Implement TC options * Implement TC options
* spell check? * spell check?
* Help menu * Help menu
* more robust IRC error handling
-- release beta -- release beta
* log viewer
* pick your own icon * pick your own icon
* time codes * time codes
* theme elements define, implement * theme elements define, implement
@ -41,3 +38,10 @@ Features:
* put code into separate files * put code into separate files
* hide offline chums * hide offline chums
* chum list groups * chum list groups
-- MEMOS:
list has "CREATE" CACNCEL JOIN buttons
no "--" for sys mesg

View file

@ -1 +1 @@
{"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"}} {"aquaMarinist": {"color": "#00caca", "handle": "aquaMarinist", "mood": "offline"}, "nitroZealist": {"color": "#ff3737", "handle": "nitroZealist", "mood": "offline"}, "superGhost": {"color": "#800564", "handle": "superGhost", "mood": "offline"}, "tentacleTherapist": {"color": "#cc66ff", "handle": "tentacleTherapist", "mood": "offline"}, "captainCaveman": {"color": "#7c414e", "handle": "captainCaveman", "mood": "offline"}, "gamblingGenocider": {"color": "#00ff00", "handle": "gamblingGenocider", "mood": "offline"}, "schlagzeugGator": {"color": "#61821f", "handle": "schlagzeugGator", "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", "unknownTraveler"], "defaultprofile": "testProfile"} {"tabs": true, "chums": ["aquaMarinist", "gardenGnostic", "gamblingGenocider", "schlagzeugGator", "mechanicalSpectacle", "marineAquist", "unknownTraveler", "tentacleTherapist"], "defaultprofile": "testProfile"}

View file

@ -18,7 +18,8 @@ logging.basicConfig(level=logging.INFO)
class Mood(object): class Mood(object):
moods = ["chummy", "rancorous", "offline", "pleasant", "distraught", moods = ["chummy", "rancorous", "offline", "pleasant", "distraught",
"unruly", "smooth", "ecstatic", "relaxed", "discontent", "unruly", "smooth", "ecstatic", "relaxed", "discontent",
"devious", "sleek", "detestful"] "devious", "sleek", "detestful", "mirthful", "manipulative",
"vigorous", "perky", "acceptant", "protective"]
def __init__(self, mood): def __init__(self, mood):
if type(mood) is int: if type(mood) is int:
self.mood = mood self.mood = mood
@ -34,7 +35,83 @@ class Mood(object):
return name return name
def icon(self, theme): def icon(self, theme):
f = theme["main/chums/moods"][self.name()]["icon"] f = theme["main/chums/moods"][self.name()]["icon"]
return QtGui.QIcon(f) return PesterIcon(f)
_ctag_begin = re.compile(r'<c=(.*?)>')
_ctag_rgb = re.compile(r'\d+,\d+,\d+')
def convertColorTags(string, format="html"):
if format not in ["html", "bbcode", "ctag"]:
raise ValueError("Color format not recognized")
def repfunc(matchobj):
color = matchobj.group(1)
if _ctag_rgb.match(color) is not None:
if format=='ctag':
return "<c=%s,%s,%s>"
qc = QtGui.QColor(*color.split(","))
else:
qc = QtGui.QColor(color)
if not qc.isValid():
qc = QtGui.QColor("black")
if format == "html":
return '<span style="color:%s">' % (qc.name())
elif format == "bbcode":
return '[color=%s]' % (qc.name())
elif format == "ctag":
(r,g,b,a) = qc.getRgb()
return '<c=%s,%s,%s>' % (r,g,b)
string = _ctag_begin.sub(repfunc, string)
endtag = {"html": "</span>", "bbcode": "[/color]", "ctag": "</c>"}
string = string.replace("</c>", endtag[format])
return string
def escapeBrackets(string):
class beginTag(object):
def __init__(self, tag):
self.tag = tag
class endTag(object):
pass
newlist = []
begintagpos = [(m.start(), m.end()) for m in _ctag_begin.finditer(string)]
lasti = 0
for (s, e) in begintagpos:
newlist.append(string[lasti:s])
newlist.append(beginTag(string[s:e]))
lasti = e
if lasti < len(string):
newlist.append(string[lasti:])
tmp = []
for o in newlist:
if type(o) is not beginTag:
l = o.split("</c>")
tmp.append(l[0])
l = l[1:]
for item in l:
tmp.append(endTag())
tmp.append(item)
else:
tmp.append(o)
btlen = 0
etlen = 0
retval = ""
newlist = tmp
for o in newlist:
if type(o) is beginTag:
retval += o.tag.replace("&", "&amp;")
btlen +=1
elif type(o) is endTag:
if etlen >= btlen:
continue
else:
retval += "</c>"
etlen += 1
else:
retval += o.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
if btlen > etlen:
for i in range(0, btlen-etlen):
retval += "</c>"
return retval
class waitingMessageHolder(object): class waitingMessageHolder(object):
def __init__(self, mainwindow, **msgfuncs): def __init__(self, mainwindow, **msgfuncs):
@ -65,6 +142,30 @@ class waitingMessageHolder(object):
class NoneSound(object): class NoneSound(object):
def play(self): pass def play(self): pass
class PesterLog(object):
def __init__(self, handle):
self.handle = handle
if not os.path.exists("logs/%s" % (handle)):
os.mkdir("logs/%s" % (handle))
self.convos = {}
def log(self, handle, msg):
if not self.convos.has_key(handle):
time = datetime.now().strftime("%Y-%m-%d.%H:%M")
if not os.path.exists("logs/%s/%s" % (self.handle, handle)):
os.mkdir("logs/%s/%s" % (self.handle, handle))
fp = open("logs/%s/%s/%s.%s" % (self.handle, handle, handle, time), 'a')
self.convos[handle] = fp
self.convos[handle].write(msg+"\n")
self.convos[handle].flush()
def finish(self, handle):
if not self.convos.has_key(handle):
return
self.convos[handle].close()
del self.convos[handle]
def close(self):
for h in self.convos.keys():
self.close(h)
class PesterProfileDB(dict): class PesterProfileDB(dict):
def __init__(self): def __init__(self):
try: try:
@ -124,10 +225,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, verb="began pestering"): def beganpestermsg(self, otherchum, syscolor, verb="began pestering"):
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")) return "<c=%s>-- %s <c=%s>[%s]</c> %s %s <c=%s>[%s]</c> at %s --</c>" % (syscolor.name(), self.handle, self.colorhtml(), self.initials(), verb, otherchum.handle, otherchum.colorhtml(), otherchum.initials(), datetime.now().strftime("%H:%M"))
def ceasedpestermsg(self, otherchum, verb="ceased pestering"): def ceasedpestermsg(self, otherchum, syscolor, verb="ceased pestering"):
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")) return "<c=%s>-- %s <c=%s>[%s]</c> %s %s <c=%s>[%s]</c> at %s --</c>" % (syscolor.name(), 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):
@ -643,6 +744,7 @@ class PesterOptions(QtGui.QDialog):
class WMButton(QtGui.QPushButton): class WMButton(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.setIconSize(icon.realsize())
self.setFlat(True) self.setFlat(True)
self.setStyleSheet("QPushButton { padding: 0px; }") self.setStyleSheet("QPushButton { padding: 0px; }")
self.setAutoDefault(False) self.setAutoDefault(False)
@ -775,8 +877,9 @@ class PesterMoodHandler(QtCore.QObject):
class PesterMoodButton(QtGui.QPushButton): class PesterMoodButton(QtGui.QPushButton):
def __init__(self, parent, **options): def __init__(self, parent, **options):
icon = QtGui.QIcon(options["icon"]) icon = PesterIcon(options["icon"])
QtGui.QPushButton.__init__(self, icon, options["text"], parent) QtGui.QPushButton.__init__(self, icon, options["text"], parent)
self.setIconSize(icon.realsize())
self.setFlat(True) self.setFlat(True)
self.resize(*options["size"]) self.resize(*options["size"])
self.move(*options["loc"]) self.move(*options["loc"])
@ -795,6 +898,22 @@ class PesterMoodButton(QtGui.QPushButton):
self.moodUpdated.emit(self.mood.value()) self.moodUpdated.emit(self.mood.value())
moodUpdated = QtCore.pyqtSignal(int) moodUpdated = QtCore.pyqtSignal(int)
class PesterIcon(QtGui.QIcon):
def __init__(self, *x, **y):
QtGui.QIcon.__init__(self, *x, **y)
if type(x[0]) in [str, unicode]:
self.icon_pixmap = QtGui.QPixmap(x[0])
else:
self.icon_pixmap = None
def realsize(self):
if self.icon_pixmap:
return self.icon_pixmap.size()
else:
try:
return self.availableSizes()[0]
except IndexError:
return None
class MovingWindow(QtGui.QFrame): class MovingWindow(QtGui.QFrame):
def __init__(self, *x, **y): def __init__(self, *x, **y):
QtGui.QFrame.__init__(self, *x, **y) QtGui.QFrame.__init__(self, *x, **y)
@ -831,7 +950,7 @@ class PesterTabWindow(QtGui.QFrame):
self.connect(self.tabs, QtCore.SIGNAL('tabCloseRequested(int)'), self.connect(self.tabs, QtCore.SIGNAL('tabCloseRequested(int)'),
self, QtCore.SLOT('tabClose(int)')) self, QtCore.SLOT('tabClose(int)'))
self.tabs.setShape(self.mainwindow.theme["convo/tabs/tabstyle"]) self.tabs.setShape(self.mainwindow.theme["convo/tabs/tabstyle"])
self.tabs.setStyleSheet("QTabBar::tabs{ %s }" % (self.mainwindow.theme["convo/tabs/style"])) self.tabs.setStyleSheet("QTabBar::tab{ %s } QTabBar::tab:selected { %s }" % (self.mainwindow.theme["convo/tabs/style"], self.mainwindow.theme["convo/tabs/selectedstyle"]))
self.layout = QtGui.QVBoxLayout() self.layout = QtGui.QVBoxLayout()
self.layout.setContentsMargins(0,0,0,0) self.layout.setContentsMargins(0,0,0,0)
@ -986,6 +1105,7 @@ class PesterText(QtGui.QTextEdit):
self.setReadOnly(True) self.setReadOnly(True)
def addMessage(self, text, chum): def addMessage(self, text, chum):
color = chum.colorhtml() color = chum.colorhtml()
systemColor = QtGui.QColor(self.parent().mainwindow.theme["convo/systemMsgColor"])
initials = chum.initials() initials = chum.initials()
msg = unicode(text) msg = unicode(text)
if msg == "PESTERCHUM:BEGIN": if msg == "PESTERCHUM:BEGIN":
@ -993,31 +1113,37 @@ 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, window.theme["convo/text/beganpester"]) msg = chum.beganpestermsg(me, systemColor, window.theme["convo/text/beganpester"])
self.append(msg) window.chatlog.log(chum.handle, convertColorTags(msg, "bbcode"))
self.append(convertColorTags(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, window.theme["convo/text/ceasepester"]) msg = chum.ceasedpestermsg(me, systemColor, window.theme["convo/text/ceasepester"])
self.append(msg) window.chatlog.log(chum.handle, convertColorTags(msg, "bbcode"))
self.append(convertColorTags(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, self.parent().mainwindow.theme["convo/text/beganpester"]) beginmsg = chum.beganpestermsg(me, systemColor, self.parent().mainwindow.theme["convo/text/beganpester"])
self.parent().setChumOpen(True) self.parent().setChumOpen(True)
self.append(beginmsg) self.parent().mainwindow.chatlog.log(chum.handle, convertColorTags(beginmsg, "bbcode"))
self.append(convertColorTags(beginmsg))
msg = msg.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;") msg = "<c=%s>%s: %s</c>" % (color, initials, msg)
self.append("<span style='color:%s'>%s: %s</span>" % \ msg = escapeBrackets(msg)
(color, initials, msg)) self.append(convertColorTags(msg))
if chum.handle == self.parent().mainwindow.profile().handle:
self.parent().mainwindow.chatlog.log(self.parent().chum.handle, convertColorTags(msg, "bbcode"))
else:
self.parent().mainwindow.chatlog.log(chum.handle, convertColorTags(msg, "bbcode"))
def changeTheme(self, theme): def changeTheme(self, theme):
self.setStyleSheet(theme["convo/textarea/style"]) self.setStyleSheet(theme["convo/textarea/style"])
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):
@ -1045,6 +1171,10 @@ class PesterConvo(QtGui.QFrame):
self.chumLabel = QtGui.QLabel(t.safe_substitute(handle=chum.handle), self) 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.chumLabel.setAlignment(self.aligndict["h"][self.mainwindow.theme["convo/chumlabel/align/h"]] | self.aligndict["v"][self.mainwindow.theme["convo/chumlabel/align/v"]])
self.chumLabel.setMaximumHeight(self.mainwindow.theme["convo/chumlabel/maxheight"])
self.chumLabel.setMinimumHeight(self.mainwindow.theme["convo/chumlabel/minheight"])
self.chumLabel.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding))
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)
self.textInput.setFocus() self.textInput.setFocus()
@ -1056,6 +1186,7 @@ class PesterConvo(QtGui.QFrame):
self.layout.addWidget(self.chumLabel) self.layout.addWidget(self.chumLabel)
self.layout.addWidget(self.textArea) self.layout.addWidget(self.textArea)
self.layout.addWidget(self.textInput) self.layout.addWidget(self.textInput)
self.layout.setSpacing(0)
self.setLayout(self.layout) self.setLayout(self.layout)
@ -1064,14 +1195,16 @@ 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, self.mainwindow.theme["convo/text/beganpester"]) msg = self.mainwindow.profile().beganpestermsg(self.chum, QtGui.QColor(self.mainwindow.theme["convo/systemMsgColor"]), self.mainwindow.theme["convo/text/beganpester"])
self.textArea.append(msg) self.textArea.append(convertColorTags(msg))
self.mainwindow.chatlog.log(self.chum.handle, convertColorTags(msg, "bbcode"))
self.newmessage = False self.newmessage = False
def updateMood(self, mood): def updateMood(self, mood):
if mood.name() == "offline" and self.chumopen == True: if mood.name() == "offline" and self.chumopen == True:
msg = self.chum.ceasedpestermsg(self.mainwindow.profile(), self.mainwindow.theme["convo/text/ceasepester"]) msg = self.chum.ceasedpestermsg(self.mainwindow.profile(), QtGui.QColor(self.mainwindow.theme["convo/systemMsgColor"]), self.mainwindow.theme["convo/text/ceasepester"])
self.textArea.append(msg) self.textArea.append(convertColorTags(msg))
self.mainwindow.chatlog.log(self.chum.handle, convertColorTags(msg, "bbcode"))
self.chumopen = False self.chumopen = False
if self.parent(): if self.parent():
self.parent().updateMood(self.chum.handle, mood) self.parent().updateMood(self.chum.handle, mood)
@ -1114,6 +1247,7 @@ class PesterConvo(QtGui.QFrame):
# reset system tray # reset system tray
def focusInEvent(self, event): def focusInEvent(self, event):
self.clearNewMessage() self.clearNewMessage()
self.textInput.setFocus()
def raiseChat(self): def raiseChat(self):
self.activateWindow() self.activateWindow()
self.raise_() self.raise_()
@ -1136,6 +1270,10 @@ class PesterConvo(QtGui.QFrame):
t = Template(self.mainwindow.theme["convo/chumlabel/text"]) t = Template(self.mainwindow.theme["convo/chumlabel/text"])
self.chumLabel.setText(t.safe_substitute(handle=self.chum.handle)) 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.chumLabel.setAlignment(self.aligndict["h"][self.mainwindow.theme["convo/chumlabel/align/h"]] | self.aligndict["v"][self.mainwindow.theme["convo/chumlabel/align/v"]])
self.chumLabel.setMaximumHeight(self.mainwindow.theme["convo/chumlabel/maxheight"])
self.chumLabel.setMinimumHeight(self.mainwindow.theme["convo/chumlabel/minheight"])
self.chumLabel.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding))
self.textArea.changeTheme(theme) self.textArea.changeTheme(theme)
self.textInput.changeTheme(theme) self.textInput.changeTheme(theme)
@ -1157,10 +1295,18 @@ class PesterConvo(QtGui.QFrame):
messageSent = QtCore.pyqtSignal(QtCore.QString, PesterProfile) messageSent = QtCore.pyqtSignal(QtCore.QString, PesterProfile)
windowClosed = QtCore.pyqtSignal(QtCore.QString) windowClosed = QtCore.pyqtSignal(QtCore.QString)
aligndict = {"h": {"center": QtCore.Qt.AlignHCenter,
"left": QtCore.Qt.AlignLeft,
"right": QtCore.Qt.AlignRight },
"v": {"center": QtCore.Qt.AlignVCenter,
"top": QtCore.Qt.AlignTop,
"bottom": QtCore.Qt.AlignBottom } }
class PesterWindow(MovingWindow): class PesterWindow(MovingWindow):
def __init__(self, parent=None): def __init__(self, parent=None):
MovingWindow.__init__(self, parent, MovingWindow.__init__(self, parent,
flags=QtCore.Qt.CustomizeWindowHint) flags=(QtCore.Qt.CustomizeWindowHint |
QtCore.Qt.FramelessWindowHint))
self.convos = {} self.convos = {}
self.tabconvo = None self.tabconvo = None
@ -1174,6 +1320,8 @@ class PesterWindow(MovingWindow):
self.userprofile = userProfile(PesterProfile("pesterClient%d" % (random.randint(100,999)), QtGui.QColor("black"), Mood(0))) self.userprofile = userProfile(PesterProfile("pesterClient%d" % (random.randint(100,999)), QtGui.QColor("black"), Mood(0)))
self.theme = self.userprofile.getTheme() self.theme = self.userprofile.getTheme()
self.chatlog = PesterLog(self.profile().handle)
self.move(100, 100) self.move(100, 100)
opts = QtGui.QAction(self.theme["main/menus/client/options"], self) opts = QtGui.QAction(self.theme["main/menus/client/options"], self)
@ -1211,10 +1359,10 @@ class PesterWindow(MovingWindow):
profilemenu.addAction(changequirks) profilemenu.addAction(changequirks)
profilemenu.addAction(switch) profilemenu.addAction(switch)
self.closeButton = WMButton(QtGui.QIcon(self.theme["main/close/image"]), self) self.closeButton = WMButton(PesterIcon(self.theme["main/close/image"]), self)
self.connect(self.closeButton, QtCore.SIGNAL('clicked()'), self.connect(self.closeButton, QtCore.SIGNAL('clicked()'),
self, QtCore.SLOT('close()')) self, QtCore.SLOT('close()'))
self.miniButton = WMButton(QtGui.QIcon(self.theme["main/minimize/image"]), self) self.miniButton = WMButton(PesterIcon(self.theme["main/minimize/image"]), self)
self.connect(self.miniButton, QtCore.SIGNAL('clicked()'), self.connect(self.miniButton, QtCore.SIGNAL('clicked()'),
self, QtCore.SLOT('showMinimized()')) self, QtCore.SLOT('showMinimized()'))
@ -1338,13 +1486,17 @@ class PesterWindow(MovingWindow):
self.choosetheme.exec_() self.choosetheme.exec_()
def initTheme(self, theme): def initTheme(self, theme):
self.resize(*theme["main/size"]) self.resize(*theme["main/size"])
self.setWindowIcon(QtGui.QIcon(theme["main/icon"])) self.setWindowIcon(PesterIcon(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; %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.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"])) newcloseicon = PesterIcon(theme["main/close/image"])
self.closeButton.setIcon(newcloseicon)
self.closeButton.setIconSize(newcloseicon.realsize())
self.closeButton.move(*theme["main/close/loc"]) self.closeButton.move(*theme["main/close/loc"])
self.miniButton.setIcon(QtGui.QIcon(theme["main/minimize/image"])) newminiicon = PesterIcon(theme["main/minimize/image"])
self.miniButton.setIcon(newminiicon)
self.miniButton.setIconSize(newminiicon.realsize())
self.miniButton.move(*theme["main/minimize/loc"]) self.miniButton.move(*theme["main/minimize/loc"])
# menus # menus
self.menu.move(*theme["main/menu/loc"]) self.menu.move(*theme["main/menu/loc"])
@ -1444,10 +1596,13 @@ class PesterWindow(MovingWindow):
@QtCore.pyqtSlot(QtCore.QString) @QtCore.pyqtSlot(QtCore.QString)
def closeConvo(self, handle): def closeConvo(self, handle):
h = unicode(handle) h = unicode(handle)
chum = self.convos[h].chum
chumopen = self.convos[h].chumopen chumopen = self.convos[h].chumopen
del self.convos[h]
if chumopen: if chumopen:
self.chatlog.log(chum.handle, convertColorTags(self.profile().ceasedpestermsg(chum, QtGui.QColor(self.theme["convo/systemMsgColor"]), self.theme["convo/text/ceasepester"]), "bbcode"))
self.chatlog.finish(h)
self.convoClosed.emit(handle) self.convoClosed.emit(handle)
del self.convos[h]
@QtCore.pyqtSlot() @QtCore.pyqtSlot()
def tabsClosed(self): def tabsClosed(self):
del self.tabconvo del self.tabconvo
@ -1598,6 +1753,9 @@ class PesterWindow(MovingWindow):
self.userprofile = userProfile.newUserProfile(profile) self.userprofile = userProfile.newUserProfile(profile)
self.changeTheme(self.userprofile.getTheme()) self.changeTheme(self.userprofile.getTheme())
self.chatlog.close()
self.chatlog = PesterLog(handle)
# is default? # is default?
if self.chooseprofile.defaultcheck.isChecked(): if self.chooseprofile.defaultcheck.isChecked():
self.config.set("defaultprofile", self.userprofile.chat.handle) self.config.set("defaultprofile", self.userprofile.chat.handle)
@ -1818,9 +1976,9 @@ class PesterTray(QtGui.QSystemTrayIcon):
@QtCore.pyqtSlot(int) @QtCore.pyqtSlot(int)
def changeTrayIcon(self, i): def changeTrayIcon(self, i):
if i == 0: if i == 0:
self.setIcon(QtGui.QIcon(self.mainwindow.theme["main/icon"])) self.setIcon(PesterIcon(self.mainwindow.theme["main/icon"]))
else: else:
self.setIcon(QtGui.QIcon(self.mainwindow.theme["main/newmsgicon"])) self.setIcon(PesterIcon(self.mainwindow.theme["main/newmsgicon"]))
def main(): def main():
@ -1833,7 +1991,7 @@ def main():
widget = PesterWindow() widget = PesterWindow()
widget.show() widget.show()
trayicon = PesterTray(QtGui.QIcon(widget.theme["main/icon"]), widget, app) trayicon = PesterTray(PesterIcon(widget.theme["main/icon"]), widget, app)
trayicon.show() trayicon.show()
trayicon.connect(trayicon, trayicon.connect(trayicon,

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 9 KiB

View file

@ -1,18 +1,18 @@
{"main": {"main":
{"style": "background-image:url($path/pcbg.png);", {"style": "background-image:url($path/pcbg.png);",
"size": [300, 620], "size": [232, 380],
"icon": "$path/trayicon.gif", "icon": "$path/trayicon.png",
"newmsgicon": "$path/trayicon2.png", "newmsgicon": "$path/trayicon2.png",
"windowtitle": "P3ST3RCHUM", "windowtitle": "PESTERCHUM",
"close": { "image": "$path/x.gif", "close": { "image": "$path/x.gif",
"loc": [275, 0]}, "loc": [210, 2]},
"minimize": { "image": "$path/m.gif", "minimize": { "image": "$path/m.gif",
"loc": [255, 0]}, "loc": [190, 2]},
"menubar": { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px;" }, "menubar": { "style": "font-family: 'Courier'; font: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'; font: bold; font-size: 12px; background-color: #fdb302;border:2px solid #ffff00",
"selected": "background-color: #ffff00",
"menuitem": "margin-right:10px;", "menuitem": "margin-right:10px;",
"loc": [7,3] "selected": "background-color: #ffff00",
"loc": [10,0]
}, },
"sounds": { "alertsound": "$path/alarm.wav" }, "sounds": { "alertsound": "$path/alarm.wav" },
"menus": {"client": {"_name": "CLIENT", "menus": {"client": {"_name": "CLIENT",
@ -25,13 +25,13 @@
"rclickchumlist": {"pester": "PESTER", "rclickchumlist": {"pester": "PESTER",
"removechum": "REMOVE CHUM"} "removechum": "REMOVE CHUM"}
}, },
"chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#919191; ", "chums": { "style": "border:2px solid yellow; background-color: black;color: white;font: bold;font-family: 'Courier';selection-background-color:#646464; ",
"loc": [20, 65], "loc": [12, 117],
"size": [266, 270], "size": [209, 82],
"moods": { "chummy": { "icon": "$path/chummy.gif", "moods": { "chummy": { "icon": "$path/chummy.gif",
"color": "white" }, "color": "white" },
"offline": { "icon": "$path/offline.gif", "offline": { "icon": "$path/offline.gif",
"color": "#919191"}, "color": "#646464"},
"rancorous": { "icon": "$path/rancorous.gif", "rancorous": { "icon": "$path/rancorous.gif",
"color": "red" }, "color": "red" },
"detestful": { "icon": "$path/detestful.gif", "detestful": { "icon": "$path/detestful.gif",
@ -56,26 +56,26 @@
"color": "white" } "color": "white" }
} }
}, },
"mychumhandle": { "label": { "text": "MYCHUMHANDLE", "mychumhandle": { "label": { "text": "CHUMHANDLE:",
"loc": [70,380], "loc": [19,232],
"style": "color:black;font:bold;" }, "style": "color: rgba(255, 255, 0, 0%) ;font:bold; font-family: 'Courier';" },
"handle": { "style": "border:3px solid yellow; background: black; color:white;", "handle": { "style": "background: black; padding: 3px; color:white; font-family:'Courier'; font:bold; text-align:left;",
"loc": [20,400], "loc": [14,246],
"size": [220,30] }, "size": [190, 21] },
"colorswatch": { "loc": [243,400], "colorswatch": { "loc": [196,246],
"size": [40,30], "size": [23,21],
"text": "" } "text": "" }
}, },
"defaultwindow": { "style": "background: #fdb302; font-family:'Courier New';font:bold;selection-background-color:#919191; " "defaultwindow": { "style": "background: #fdb302; font-family:'Courier';font:bold;selection-background-color:#919191; "
}, },
"addchum": { "style": "background: #fdb302; border:5px solid yellow; font: bold;", "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(0, 0, 0, 0%); font-family:'Courier';",
"loc": [20,340], "loc": [12,202],
"size": [100, 40], "size": [71, 22],
"text": "ADD CHUM" "text": "ADD CHUM"
}, },
"pester": { "style": "background: #fdb302; border:5px solid yellow; font: bold;", "pester": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';",
"loc": [130,340], "loc": [150,202],
"size": [100, 40], "size": [71, 22],
"text": "PESTER!" "text": "PESTER!"
}, },
"defaultmood": 0, "defaultmood": 0,
@ -84,85 +84,90 @@
"text": "MOODS" "text": "MOODS"
}, },
"moods": [ "moods": [
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "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": [20, 470], "loc": [12, 288],
"size": [133, 30], "size": [104, 22],
"text": "CHUMMY", "text": "CHUMMY",
"icon": "$path/chummy.gif", "icon": "$path/chummy.gif",
"mood": 0 "mood": 0
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color: #919191", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;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": [20, 497], "loc": [12, 308],
"size": [133, 30], "size": [104, 22],
"text": "PLEASANT", "text": "PALSY",
"icon": "$path/pleasant.gif", "icon": "$path/chummy.gif",
"mood": 3 "mood": 3
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "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": [20, 524], "loc": [12, 328],
"size": [133, 30], "size": [104, 22],
"text": "DISTRAUGHT", "text": "CHIPPER",
"icon": "$path/distraught.gif", "icon": "$path/chummy.gif",
"mood": 4 "mood": 4
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;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": [150, 470], "loc": [117, 288],
"size": [133, 30], "size": [104, 22],
"text": "UNRULY", "text": "BULLY",
"icon": "$path/unruly.gif", "icon": "$path/chummy.gif",
"mood": 5 "mood": 5
}, },
{ "style": "text-align:left; background: white; border:3px solid black; padding: 5px;color:#919191;", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;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": [150, 497], "loc": [117, 308],
"size": [133, 30], "size": [104, 22],
"text": "SMOOTH", "text": "PEPPY",
"icon": "$path/smooth.gif", "icon": "$path/chummy.gif",
"mood": 6 "mood": 6
}, },
{ "style": "text-align:left; background: red; border:3px solid black; padding: 5px;", { "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:3px solid black; padding: 5px;font: bold;", "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": [150, 524], "loc": [117, 328],
"size": [133, 30], "size": [104, 22],
"text": "RANCOROUS", "text": "RANCOROUS",
"icon": "$path/rancorous.gif", "icon": "$path/rancorous.gif",
"mood": 1 "mood": 1
}, },
{ "style": "text-align:center; background: #919191; border:3px solid black; padding: 5px;", { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'",
"selected": "text-align:center; background: #919191; border:3px solid black; padding: 5px;font: bold;", "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": [20, 551], "loc": [12, 348],
"size": [263, 30], "size": [209, 22],
"text": "ABSCOND", "text": "ABSCOND",
"icon": "$path/offline.gif", "icon": "$path/x.gif",
"mood": 2 "mood": 2
} }
] ]
}, },
"convo": "convo":
{"style": "background: #fdb302; font-family: 'Courier New'", {"style": "background: #fdb302; border:2px solid yellow; font-family: 'Courier'",
"size": [600, 500], "size": [295, 191],
"chumlabel": { "style": "background: rgba(255, 255, 255, 25%);", "chumlabel": { "style": "background: rgb(196, 138, 0); color: white; border:0px;",
"align": { "h": "center", "v": "center" },
"minheight": 30,
"maxheight": 50,
"text" : ":: $handle ::" "text" : ":: $handle ::"
}, },
"textarea": { "textarea": {
"style": "background: white;font:bold;" "style": "background: white; font:bold; border:2px solid #c48a00;text-align:center;"
}, },
"input": { "input": {
"style": "background: white;" "style": "background: white; border:2px solid #c48a00;margin-top:5px;"
}, },
"tabs": { "tabs": {
"style": "", "style": "",
"selectedstyle": "",
"newmsgcolor": "#fdb302", "newmsgcolor": "#fdb302",
"tabstyle": 0 "tabstyle": 0
}, },
"text": { "text": {
"beganpester": "began pestering", "beganpester": "began pestering",
"ceasepester": "ceased pestering" "ceasepester": "ceased pestering"
} },
"systemMsgColor": "#646464"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 B

After

Width:  |  Height:  |  Size: 55 B

View file

@ -145,23 +145,29 @@
"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); color: white; text-align:center;", "chumlabel": { "style": "background: rgb(196, 138, 0); color: white; border:0px;",
"text" : ":: $handle ::" }, "align": { "h": "center", "v": "center" },
"minheight": 30,
"maxheight": 50,
"text" : ":: $handle ::"
},
"textarea": { "textarea": {
"style": "background: white; font:bold; border:2px solid #c48a00;text-align:center;" "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;margin-top:5px;"
}, },
"tabs": { "tabs": {
"style": "", "style": "",
"selectedstyle": "",
"newmsgcolor": "#fdb302", "newmsgcolor": "#fdb302",
"tabstyle": 0 "tabstyle": 0
}, },
"text": { "text": {
"beganpester": "began pestering", "beganpester": "began pestering",
"ceasepester": "ceased pestering" "ceasepester": "ceased pestering"
} },
"systemMsgColor": "#646464"
} }
} }

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 B

After

Width:  |  Height:  |  Size: 50 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 B

View file

@ -1,168 +1,247 @@
{"main": {"main":
{"style": "background-image:url($path/tnbg2.png);background-color:rgba(255,255,255,0);", {"style": "background-image:url($path/tnbg.png);background-color:rgba(255,255,255,0);",
"size": [300, 620], "size": [650, 450],
"icon": "$path/trayicon3.png", "icon": "$path/trayicon2.png",
"newmsgicon": "$path/trayicon.gif", "newmsgicon": "$path/trayicon3.png",
"windowtitle": "TROLLIAN", "windowtitle": "TROLLIAN",
"close": { "image": "$path/x.gif", "close": { "image": "$path/x.gif",
"loc": [275, 0]}, "loc": [635, 2]},
"minimize": { "image": "$path/m.gif", "minimize": { "image": "$path/m.gif",
"loc": [255, 0]}, "loc": [621, 8]},
"menubar": { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px;" }, "menubar": { "style": "font-family: 'Arial'; font-size: 11px; color: rgba(0,0,0,0);" },
"menu" : { "style": "font-family: 'Courier New'; font-weight: bold; font-size: 12px; background-color: #e5000f; border:2px solid #ff0000",
"selected": "background-color: #ff0000",
"menuitem": "margin-right:10px;", "menu" : { "style": "font-family: 'Arial'; font-size: 11px; background-color: #c2c2c2; border:1px solid #545454;",
"loc": [10,0]
"selected": "background-color: #545454",
"menuitem": "margin-right:14px;",
"loc": [14,90]
}, },
"sounds": { "alertsound": "$path/alarm.wav" }, "sounds": { "alertsound": "$path/alarm.wav" },
"menus": {"client": {"_name": "GRUBBER", "menus": {"client": {"_name": "Trollian",
"options": "OPTIONS", "options": "Options",
"exit": "ABSCOND"}, "exit": "Abscond"},
"profile": {"_name": "HEMOSPECTRUM", "profile": {"_name": "View",
"switch": "SWITCH", "switch": "Trolltag",
"theme": "THEME", "theme": "Theme",
"quirks": "ANNOYING"}, "quirks": "Annoying"},
"rclickchumlist": {"pester": "TROLL", "rclickchumlist": {"pester": "Troll",
"removechum": "REMOVE LOSER"} "removechum": "Trash"}
}, },
"chums": { "style": "background-color: black;color: white;font: bold;font-family: 'Courier New';selection-background-color:#ffb6b6; ", "chums": { "style": "border: 0px; background-color: white; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200); ",
"loc": [20, 65], "loc": [476, 90],
"size": [266, 270], "size": [175, 361],
"moods": { "chummy": { "icon": "$path/chummy.gif",
"color": "white" }, "moods": {
"offline": { "icon": "$path/offline.gif",
"color": "#919191"}, "chummy": { "icon": "$path/chummy.png", "color": "#63ea00" },
"rancorous": { "icon": "$path/rancorous.gif",
"color": "red" }, "rancorous": { "icon": "$path/rancorous.png", "color": "#7f7f7f" },
"detestful": { "icon": "$path/detestful.gif",
"color": "red" }, "offline": { "icon": "$path/offline.png", "color": "black"},
"devious": { "icon": "$path/devious.gif",
"color": "white" },
"discontent": { "icon": "$path/discontent.gif", "pleasant": { "icon": "$path/pleasant.png", "color": "#d69df8" },
"color": "white" },
"distraught": { "icon": "$path/distraught.gif", "distraught": { "icon": "$path/distraught.png", "color": "#706eba" },
"color": "white" },
"ecstatic": { "icon": "$path/estatic.gif", "unruly": { "icon": "$path/unruly.png", "color": "blue" },
"color": "white" },
"pleasant": { "icon": "$path/pleasant.gif", "smooth": { "icon": "$path/smooth.png", "color": "red" },
"color": "white" },
"relaxed": { "icon": "$path/relaxed.gif",
"color": "white" }, "ecstatic": { "icon": "$path/ecstatic.png", "color": "#99004d" },
"sleek": { "icon": "$path/sleek.gif",
"color": "white" }, "relaxed": { "icon": "$path/relaxed.png", "color": "#078446" },
"smooth": { "icon": "$path/smooth.gif",
"color": "white" }, "discontent": { "icon": "$path/discontent.png", "color": "#a75403" },
"unruly": { "icon": "$path/unruly.gif",
"color": "white" } "devious": { "icon": "$path/devious.png", "color": "#008282" },
"sleek": { "icon": "$path/sleek.png", "color": "#a1a100" },
"detestful": { "icon": "$path/detestful.png", "color": "#6a006a" },
"mirthful": { "icon": "$path/mirthful.png", "color": "#450077" },
"manipulative": { "icon": "$path/manipulative.png", "color": "#004182" },
"vigorous": { "icon": "$path/vigorous.png", "color": "#0021cb" },
"perky": { "icon": "$path/perky.png", "color": "#406600" },
"acceptant": { "icon": "$path/acceptant.png", "color": "#a10000" },
"protective": { "icon": "$path/protective.png", "color": "white" }
} }
}, },
"mychumhandle": { "label": { "text": "MYTROLLTAG", "mychumhandle": { "label": { "text": "",
"loc": [85,410], "loc": [85,410],
"style": "color:black;font:bold;" }, "style": "color:rgba(0,0,0,0);" },
"handle": { "style": "border:3px solid #550000; background: black; color:white;", "handle": { "style": "background: rgba(0,0,0,0); color:rgba(0,0,0,0);",
"loc": [20,430], "loc": [0,0],
"size": [220,30] }, "size": [0,0] },
"colorswatch": { "loc": [243,430], "colorswatch": { "loc": [0,0],
"size": [40,30], "size": [0,0],
"text": "" } "text": "" }
}, },
"defaultwindow": { "style": "background: #e5000f; font-family:'Courier New';font:bold;selection-background-color:#ffb6b6; " "defaultwindow": { "style": "background: #c2c2c2; font-family:'Arial';font:bold;selection-background-color:#545454; "
}, },
"addchum": { "style": "background: black; border:5px solid #550000; font: bold;color:white;", "addchum": { "style": "background: rgba(0,0,0,0); border:0px; color: rgba(0,0,0,0);",
"loc": [20,340], "loc": [475, 67],
"size": [100, 40], "size": [175, 18],
"text": "ADD LOSER" "text": ""
}, },
"pester": { "style": "background: black; border:5px solid #550000; font: bold;color:white;", "pester": { "style": "background: rgba(0,0,0,0); border:0px; color: rgba(0,0,0,0);",
"loc": [130,340], "loc": [0,0],
"size": [100, 40], "size": [0, 0],
"text": "TROLL" "text": ""
}, },
"defaultmood": 7, "defaultmood": 7,
"moodlabel": { "style": "", "moodlabel": { "style": "",
"loc": [20, 430], "loc": [0, 0],
"text": "MOODS" "text": ""
}, },
"moods": [ "moods": [
{ "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;", { "style": "border:0px;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "background-image:url($path/moodcheck1.png); border:0px;",
"loc": [20, 470], "loc": [25, 141],
"size": [133, 30], "size": [20, 270],
"text": "ECSTATIC", "text": "",
"icon": "$path/estatic.gif", "icon": "",
"mood": 7 "mood": 17
}, },
{ "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color: #dbdbdb", { "style": "border:0px;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "background-image:url($path/moodcheck2.png); border:0px;",
"loc": [20, 497], "loc": [60, 141],
"size": [133, 30], "size": [20, 270],
"text": "RELAXED", "text": "",
"icon": "$path/relaxed.gif", "icon": "",
"mood": 8
},
{ "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;",
"loc": [20, 524],
"size": [133, 30],
"text": "DISCONTENT",
"icon": "$path/discontent.gif",
"mood": 9 "mood": 9
}, },
{ "style": "text-align:left; background: black; border:3px solid black; padding: 5px;color:#dbdbdb;", { "style": "border:0px;",
"selected": "text-align:left; background: white; border:3px solid black; padding: 5px;font: bold;", "selected": "background-image:url($path/moodcheck3.png); border:0px;",
"loc": [150, 470], "loc": [95, 141],
"size": [133, 30], "size": [20, 270],
"text": "DEVIOUS", "text": "",
"icon": "$path/devious.gif", "icon": "",
"mood": 10
},
{ "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;",
"loc": [150, 497],
"size": [133, 30],
"text": "SLEEK",
"icon": "$path/sleek.gif",
"mood": 11 "mood": 11
}, },
{ "style": "text-align:left; background: red; border:3px solid black; padding: 5px;", { "style": "border:0px;",
"selected": "text-align:left; background: red; border:3px solid black; padding: 5px;font: bold;", "selected": "background-image:url($path/moodcheck4.png); border:0px;",
"loc": [150, 524], "loc": [130, 141],
"size": [133, 30], "size": [20, 270],
"text": "DETESTFUL", "text": "",
"icon": "$path/detestful.gif", "icon": "",
"mood": 1
},
{ "style": "border:0px;",
"selected": "background-image:url($path/moodcheck5.png); border:0px;",
"loc": [165, 141],
"size": [20, 270],
"text": "",
"icon": "",
"mood": 16
},
{ "style": "border:0px;",
"selected": "background-image:url($path/moodcheck6.png); border:0px;",
"loc": [200, 141],
"size": [20, 270],
"text": "",
"icon": "",
"mood": 8
},
{ "style": "border:0px;",
"selected": "background-image:url($path/moodcheck7.png); border:0px;",
"loc": [235, 141],
"size": [20, 270],
"text": "",
"icon": "",
"mood": 10
},
{ "style": "border:0px;",
"selected": "background-image:url($path/moodcheck8.png); border:0px;",
"loc": [270, 141],
"size": [20, 270],
"text": "",
"icon": "",
"mood": 14
},
{ "style": "border:0px;",
"selected": "background-image:url($path/moodcheck9.png); border:0px;",
"loc": [305, 141],
"size": [20, 270],
"text": "",
"icon": "",
"mood": 15
},
{ "style": "border:0px;",
"selected": "background-image:url($path/moodcheck10.png); border:0px;",
"loc": [340, 141],
"size": [20, 270],
"text": "",
"icon": "",
"mood": 13
},
{ "style": "border:0px;",
"selected": "background-image:url($path/moodcheck11.png); border:0px;",
"loc": [375, 141],
"size": [20, 270],
"text": "",
"icon": "",
"mood": 12 "mood": 12
}, },
{ "style": "text-align:center; background: #919191; border:3px solid black; padding: 5px;", { "style": "border:0px;",
"selected": "text-align:center; background: #919191; border:3px solid black; padding: 5px;font: bold;", "selected": "background-image:url($path/moodcheck12.png); border:0px;",
"loc": [20, 551], "loc": [410, 141],
"size": [263, 30], "size": [20, 270],
"text": "ABSCOND", "text": "",
"icon": "$path/offline.gif", "icon": "",
"mood": 7
},
{ "style": "border:0px;color: rgba(0, 0, 0, 0%);",
"selected": "border:0px; color: rgba(0, 0, 0, 0%);",
"loc": [12, 117],
"size": [435, 18],
"text": "",
"icon": "",
"mood": 2 "mood": 2
} }
] ]
}, },
"convo": "convo":
{"style": "background: #e5000f; font-family: 'Courier New'", {"style": "background: rgb(190, 19, 4); font-family: 'Arial'",
"size": [600, 500], "size": [308, 194],
"chumlabel": { "style": "background: rgba(255, 255, 255, 25%);", "chumlabel": { "style": "background: rgb(255, 38, 18); color: white;",
"text" : "trolling $handle" "align": { "h": "center", "v": "center" },
"minheight": 30,
"maxheight": 50,
"text" : "trolling: $handle"
}, },
"textarea": { "textarea": {
"style": "background: white;font:bold;" "style": "background: white; border:0px;"
}, },
"input": { "input": {
"style": "background: white;" "style": "background: white; border:0px solid #c48a00;margin-top:5px;"
}, },
"tabs": { "tabs": {
"style": "", "style": "",
"selectedstyle": "",
"newmsgcolor": "red", "newmsgcolor": "red",
"tabstyle": 0 "tabstyle": 0
}, },
"text": { "text": {
"beganpester": "began trolling", "beganpester": "began trolling",
"ceasepester": "gave up trolling" "ceasepester": "gave up trolling"
} },
"systemMsgColor": "#646464"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

After

Width:  |  Height:  |  Size: 76 B