This commit is contained in:
Stephen Dranger 2011-02-11 03:07:07 -06:00
parent 2dbd124c2d
commit 7e3f40a65e
23 changed files with 147 additions and 91 deletions

4
TODO
View file

@ -1,7 +1,6 @@
Features: Features:
* Tray doesn't disappear on windows after close * Tray doesn't disappear on windows after close
* scroll bar style? * smilies processed before quirks
* flashing??
* More complex quirks: random, spelling, by-sound * More complex quirks: random, spelling, by-sound
* convert hex tags (<GFFFFFF> or <GFF0000>) * convert hex tags (<GFFFFFF> or <GFF0000>)
* help menu -- about and forum * help menu -- about and forum
@ -13,6 +12,7 @@ Features:
* convo backgrounds -- make them more like http://www.mspaintadventures.com/storyfiles/hs2/02546_2.gif * convo backgrounds -- make them more like http://www.mspaintadventures.com/storyfiles/hs2/02546_2.gif
* help button on quirks menu? * help button on quirks menu?
-- release beta -- release beta
* flashing??
* change profile only once we have confirmation from server * change profile only once we have confirmation from server
* log viewer * log viewer
* pick your own icon * pick your own icon

View file

@ -195,9 +195,14 @@ class PesterTabWindow(QtGui.QFrame):
class PesterText(QtGui.QTextEdit): class PesterText(QtGui.QTextEdit):
def __init__(self, theme, parent=None): def __init__(self, theme, parent=None):
QtGui.QTextEdit.__init__(self, parent) QtGui.QTextEdit.__init__(self, parent)
self.setStyleSheet(theme["convo/textarea/style"]) self.initTheme(theme)
self.setReadOnly(True) self.setReadOnly(True)
self.setMouseTracking(True) self.setMouseTracking(True)
def initTheme(self, theme):
if theme.has_key("convo/scrollbar"):
self.setStyleSheet("QTextEdit { %s } QScrollBar:vertical { %s } QScrollBar::handle:vertical { %s } QScrollBar::add-line:vertical { %s } QScrollBar::sub-line:vertical { %s } QScrollBar:up-arrow:vertical { %s } QScrollBar:down-arrow:vertical { %s }" % (theme["convo/textarea/style"], theme["convo/scrollbar/style"], theme["convo/scrollbar/handle"], theme["convo/scrollbar/downarrow"], theme["convo/scrollbar/uparrow"], theme["convo/scrollbar/uarrowstyle"], theme["convo/scrollbar/darrowstyle"] ))
else:
self.setStyleSheet("QTextEdit { %s }" % (theme["convo/textarea/style"]))
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"]) systemColor = QtGui.QColor(self.parent().mainwindow.theme["convo/systemMsgColor"])
@ -265,9 +270,8 @@ class PesterText(QtGui.QTextEdit):
self.lastmsg = datetime.now() self.lastmsg = datetime.now()
window.chatlog.log(chum.handle, convertTags(msg, "bbcode")) window.chatlog.log(chum.handle, convertTags(msg, "bbcode"))
def changeTheme(self, theme): def changeTheme(self, theme):
self.setStyleSheet(theme["convo/textarea/style"]) self.initTheme(theme)
sb = self.verticalScrollBar() sb = self.verticalScrollBar()
sb.setMaximum(sb.maximum()+1000) # ugly hack but whatcha gonna do
sb.setValue(sb.maximum()) sb.setValue(sb.maximum())
def focusInEvent(self, event): def focusInEvent(self, event):
self.parent().clearNewMessage() self.parent().clearNewMessage()
@ -317,12 +321,13 @@ class PesterInput(QtGui.QLineEdit):
class PesterConvo(QtGui.QFrame): class PesterConvo(QtGui.QFrame):
def __init__(self, chum, initiated, mainwindow, parent=None): def __init__(self, chum, initiated, mainwindow, parent=None):
QtGui.QFrame.__init__(self, parent) QtGui.QFrame.__init__(self, parent)
self.setObjectName(chum.handle)
self.setFocusPolicy(QtCore.Qt.ClickFocus) self.setFocusPolicy(QtCore.Qt.ClickFocus)
self.chum = chum self.chum = chum
self.mainwindow = mainwindow self.mainwindow = mainwindow
convo = self.mainwindow.theme["convo"] convo = self.mainwindow.theme["convo"]
self.resize(*convo["size"]) self.resize(*convo["size"])
self.setStyleSheet("QFrame { %s } QScrollBar:vertical { %s } QScrollBar::handle:vertical { %s }" % (convo["style"], convo["scrollbar"]["style"], convo["scrollbar"]["handle"])) self.setStyleSheet("QFrame { %s }" % convo["style"])
self.setWindowIcon(self.icon()) self.setWindowIcon(self.icon())
self.setWindowTitle(self.title()) self.setWindowTitle(self.title())
@ -480,7 +485,8 @@ class PesterConvo(QtGui.QFrame):
self.chumopen = o self.chumopen = o
def changeTheme(self, theme): def changeTheme(self, theme):
self.resize(*theme["convo/size"]) self.resize(*theme["convo/size"])
self.setStyleSheet("QFrame { %s } QScrollBar:vertical { %s } QScrollBar::handle:vertical { %s }" % (theme["convo/style"], theme["convo/scrollbar"]["style"], theme["convo/scrollbar"]["handle"])) self.setStyleSheet("QFrame { %s }" % (theme["convo/style"]))
margins = theme["convo/margins"] margins = theme["convo/margins"]
self.layout.setContentsMargins(margins["left"], margins["top"], self.layout.setContentsMargins(margins["left"], margins["top"],
margins["right"], margins["bottom"]) margins["right"], margins["bottom"])
@ -496,7 +502,7 @@ class PesterConvo(QtGui.QFrame):
self.quirksOff.setText(self.mainwindow.theme["main/menus/rclickchumlist/quirksoff"]) self.quirksOff.setText(self.mainwindow.theme["main/menus/rclickchumlist/quirksoff"])
self.addChumAction.setText(self.mainwindow.theme["main/menus/rclickchumlist/addchum"]) self.addChumAction.setText(self.mainwindow.theme["main/menus/rclickchumlist/addchum"])
self.blockAction.setText(self.mainwindow.theme["main/menus/rclickchumlist/blockchum"]) self.blockAction.setText(self.mainwindow.theme["main/menus/rclickchumlist/blockchum"])
self.unblockchum.setText(self.mainwindow.theme["main/menus/rclickchumlist/unblockchum"], self) self.unblockchum.setText(self.mainwindow.theme["main/menus/rclickchumlist/unblockchum"])
self.textArea.changeTheme(theme) self.textArea.changeTheme(theme)
self.textInput.changeTheme(theme) self.textInput.changeTheme(theme)

BIN
convo.pyc

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
irc.pyc

Binary file not shown.

View file

@ -3,7 +3,7 @@ import re
from PyQt4 import QtGui, QtCore from PyQt4 import QtGui, QtCore
from datetime import time, timedelta, datetime from datetime import time, timedelta, datetime
from dataobjs import PesterProfile, Mood from dataobjs import PesterProfile, Mood, PesterHistory
from generic import PesterIcon, RightClickList from generic import PesterIcon, RightClickList
from convo import PesterConvo, PesterInput, PesterText, PesterTabWindow from convo import PesterConvo, PesterInput, PesterText, PesterTabWindow
from parsetools import convertTags, escapeBrackets, addTimeInitial, timeProtocol from parsetools import convertTags, escapeBrackets, addTimeInitial, timeProtocol
@ -214,9 +214,15 @@ _ctag_begin = re.compile(r'<c=(.*?)>')
class MemoText(PesterText): class MemoText(PesterText):
def __init__(self, theme, parent=None): def __init__(self, theme, parent=None):
QtGui.QTextEdit.__init__(self, parent) QtGui.QTextEdit.__init__(self, parent)
self.setStyleSheet(theme["memos/textarea/style"]) self.initTheme(theme)
self.setReadOnly(True) self.setReadOnly(True)
self.setMouseTracking(True) self.setMouseTracking(True)
def initTheme(self, theme):
if theme.has_key("memos/scrollbar"):
self.setStyleSheet("QTextEdit { %s } QScrollBar:vertical { %s } QScrollBar::handle:vertical { %s } QScrollBar::add-line:vertical { %s } QScrollBar::sub-line:vertical { %s } QScrollBar:up-arrow:vertical { %s } QScrollBar:down-arrow:vertical { %s }" % (theme["memos/textarea/style"], theme["memos/scrollbar/style"], theme["memos/scrollbar/handle"], theme["memos/scrollbar/downarrow"], theme["memos/scrollbar/uparrow"], theme["memos/scrollbar/uarrowstyle"], theme["memos/scrollbar/darrowstyle"] ))
else:
self.setStyleSheet("QTextEdit { %s }" % theme["memos/textarea/style"])
def addMessage(self, text, chum): def addMessage(self, text, chum):
parent = self.parent() parent = self.parent()
window = parent.mainwindow window = parent.mainwindow
@ -279,7 +285,7 @@ class MemoText(PesterText):
def changeTheme(self, theme): def changeTheme(self, theme):
self.setStyleSheet(theme["memos/textarea/style"]) self.initTheme(theme)
class MemoInput(PesterInput): class MemoInput(PesterInput):
@ -394,6 +400,7 @@ class PesterMemo(PesterConvo):
self.op = False self.op = False
self.newmessage = False self.newmessage = False
self.history = PesterHistory()
self.applyquirks = True self.applyquirks = True
def title(self): def title(self):
@ -428,7 +435,7 @@ class PesterMemo(PesterConvo):
def initTheme(self, theme): def initTheme(self, theme):
memo = theme["memos"] memo = theme["memos"]
self.resize(*memo["size"]) self.resize(*memo["size"])
self.setStyleSheet(memo["style"]) self.setStyleSheet("QFrame { %s }" % (memo["style"]))
self.setWindowIcon(PesterIcon(theme["memos/memoicon"])) self.setWindowIcon(PesterIcon(theme["memos/memoicon"]))
t = Template(theme["memos/label/text"]) t = Template(theme["memos/label/text"])
@ -470,7 +477,7 @@ class PesterMemo(PesterConvo):
margins = theme["memos/margins"] margins = theme["memos/margins"]
self.layout.setContentsMargins(margins["left"], margins["top"], self.layout.setContentsMargins(margins["left"], margins["top"],
margins["right"], margins["bottom"]) margins["right"], margins["bottom"])
for item in [self.userlist.row(i) for i in range(0,self.userlist.count())]: for item in [self.userlist.item(i) for i in range(0,self.userlist.count())]:
if item.op: if item.op:
icon = PesterIcon(self.mainwindow.theme["memos/op/icon"]) icon = PesterIcon(self.mainwindow.theme["memos/op/icon"])
item.setIcon(icon) item.setIcon(icon)

BIN
memos.pyc

Binary file not shown.

BIN
menus.pyc

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,5 @@
import re import re
from copy import copy
from datetime import timedelta from datetime import timedelta
from PyQt4 import QtGui from PyQt4 import QtGui
@ -7,6 +8,26 @@ _ctag_rgb = re.compile(r'\d+,\d+,\d+')
_urlre = re.compile(r"(?i)(http://[^\s<[]+)") _urlre = re.compile(r"(?i)(http://[^\s<[]+)")
_memore = re.compile(r" (#[A-Za-z0-9_]+)") _memore = re.compile(r" (#[A-Za-z0-9_]+)")
def lexer(string, objlist):
"""objlist is a list: [(objecttype, re),...] list is in order of preference"""
stringlist = [string]
for (oType, regexp) in objlist:
newstringlist = copy(stringlist)
for (stri, s) in enumerate(stringlist):
tmp = []
lasti = 0
for m in regexp.finditer(string):
start = m.start()
end = m.end()
tag = oType(group(0), *groups())
tmp.append(string[lasti:start])
tmp.append(tag)
if lasti < len(string):
tmp.append(string[lasti:])
stringlist = stringlist[0:stri]+tmp+stringlist[stri+1:]
stringlist = copy(newstringlist)
return stringlist
def convertTags(string, format="html"): def convertTags(string, format="html"):
if format not in ["html", "bbcode", "ctag"]: if format not in ["html", "bbcode", "ctag"]:
raise ValueError("Color format not recognized") raise ValueError("Color format not recognized")

Binary file not shown.

View file

@ -1 +1 @@
{"tabs": true, "soundon": true, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "adiosToreador", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "maxiumumFatness", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "confusedTransient", "pretentiousFantasia", "aquaticMarinist"], "defaultprofile": "ghostDunk", "block": []} {"tabs": false, "soundon": true, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "adiosToreador", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "maxiumumFatness", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "confusedTransient", "pretentiousFantasia", "aquaticMarinist"], "defaultprofile": "ghostDunk", "block": []}

View file

@ -333,9 +333,6 @@ class chumArea(RightClickList):
QtGui.QListWidget.__init__(self, parent) QtGui.QListWidget.__init__(self, parent)
self.mainwindow = parent self.mainwindow = parent
theme = self.mainwindow.theme theme = self.mainwindow.theme
geometry = theme["main/chums/loc"] + theme["main/chums/size"]
self.setGeometry(*geometry)
self.setStyleSheet(theme["main/chums/style"])
self.chums = chums self.chums = chums
for c in self.chums: for c in self.chums:
chandle = c.handle chandle = c.handle
@ -357,6 +354,7 @@ class chumArea(RightClickList):
self.optionsMenu.addAction(self.blockchum) self.optionsMenu.addAction(self.blockchum)
self.optionsMenu.addAction(self.removechum) self.optionsMenu.addAction(self.removechum)
self.initTheme(theme)
self.sortItems() self.sortItems()
def addChum(self, chum): def addChum(self, chum):
if len([c for c in self.chums if c.handle == chum.handle]) != 0: if len([c for c in self.chums if c.handle == chum.handle]) != 0:
@ -380,13 +378,17 @@ class chumArea(RightClickList):
chums = self.findItems(handle, QtCore.Qt.MatchFlags(0)) chums = self.findItems(handle, QtCore.Qt.MatchFlags(0))
for c in chums: for c in chums:
c.setColor(color) c.setColor(color)
def changeTheme(self, theme): def initTheme(self, theme):
self.setGeometry(*(theme["main/chums/loc"]+theme["main/chums/size"])) self.setGeometry(*(theme["main/chums/loc"]+theme["main/chums/size"]))
if theme.has_key("main/chums/scrollbar"):
self.setStyleSheet("QListWidget { %s } QScrollBar { %s } QScrollBar::handle { %s } QScrollBar::add-line { %s } QScrollBar::sub-line { %s } QScrollBar:up-arrow { %s } QScrollBar:down-arrow { %s }" % (theme["main/chums/style"], theme["main/chums/scrollbar/style"], theme["main/chums/scrollbar/handle"], theme["main/chums/scrollbar/downarrow"], theme["main/chums/scrollbar/uparrow"], theme["main/chums/scrollbar/uarrowstyle"], theme["main/chums/scrollbar/darrowstyle"] ))
else:
self.setStyleSheet(theme["main/chums/style"]) self.setStyleSheet(theme["main/chums/style"])
self.pester.setText(theme["main/menus/rclickchumlist/pester"]) self.pester.setText(theme["main/menus/rclickchumlist/pester"])
self.removechum.setText(theme["main/menus/rclickchumlist/removechum"]) self.removechum.setText(theme["main/menus/rclickchumlist/removechum"])
self.blockchum.setText(theme["main/menus/rclickchumlist/blockchum"]) self.blockchum.setText(theme["main/menus/rclickchumlist/blockchum"])
def changeTheme(self, theme):
self.initTheme(theme)
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)
@ -1667,7 +1669,6 @@ class MainProgram(QtCore.QObject):
QtCore.SIGNAL('closeToTraySignal()'), QtCore.SIGNAL('closeToTraySignal()'),
self.trayicon, self.trayicon,
QtCore.SLOT('show()')) QtCore.SLOT('show()'))
print self.trayicon.contextMenu()
self.irc = PesterIRC(self.widget) self.irc = PesterIRC(self.widget)
self.connectWidgets(self.irc, self.widget) self.connectWidgets(self.irc, self.widget)
@ -1796,9 +1797,10 @@ class MainProgram(QtCore.QObject):
self.widget.loadingscreen = LoadingScreen(self.widget) self.widget.loadingscreen = LoadingScreen(self.widget)
self.connect(self.widget.loadingscreen, QtCore.SIGNAL('rejected()'), self.connect(self.widget.loadingscreen, QtCore.SIGNAL('rejected()'),
self.widget, QtCore.SLOT('close()')) self.widget, QtCore.SLOT('close()'))
status = self.widget.loadingscreen.exec_() self.widget.loadingscreen = None
if status == QtGui.QDialog.Rejected: #status = self.widget.loadingscreen.exec_()
sys.exit(0) #if status == QtGui.QDialog.Rejected:
# sys.exit(0)
os._exit(self.app.exec_()) os._exit(self.app.exec_())
pesterchum = MainProgram() pesterchum = MainProgram()

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

View file

@ -196,20 +196,26 @@
"convo": "convo":
{"style": "background-color: #fdb302;background-image:url($path/convobg.png);background-repeat: no-repeat; border:2px solid yellow; font-family: 'Courier'", {"style": "background-color: #fdb302;background-image:url($path/convobg.png);background-repeat: no-repeat; border:2px solid yellow; font-family: 'Courier'",
"tabstyle": "background-color: #fdb302; font-family: 'Courier'", "tabstyle": "background-color: #fdb302; font-family: 'Courier'",
"scrollbar": { "style" : "", "handle": "" }, "scrollbar": { "style" : "margin-right: 10px; padding-top:17px; padding-bottom:17px;width: 27px; background:white; border:2px solid #c48a00;",
"handle": "background-color:#c48a00;min-height:20px;",
"downarrow": "height:17px;border:2px solid #c48a00;",
"darrowstyle": "image:url($path/downarrow.png);",
"uparrow": "height:17px;border:2px solid #c48a00;",
"uarrowstyle": "image:url($path/uparrow.png);"
},
"margins": {"top": 0, "bottom": 6, "left": 0, "right": 0 }, "margins": {"top": 0, "bottom": 6, "left": 0, "right": 0 },
"size": [520, 325], "size": [520, 325],
"chumlabel": { "style": "background: rgb(196, 138, 0); color: white; border:0px; font-size: 14px;", "chumlabel": { "style": "margin-bottom: 21px;background: rgb(196, 138, 0); color: white; border:0px; font-size: 14px;",
"align": { "h": "center", "v": "center" }, "align": { "h": "center", "v": "center" },
"minheight": 26, "minheight": 47,
"maxheight": 26, "maxheight": 47,
"text" : ":: $handle ::" "text" : ":: $handle ::"
}, },
"textarea": { "textarea": {
"style": "background: white; font:bold; border:2px solid #c48a00;text-align:center; margin-top:21px; margin-right:10px; margin-left:10px; font-size: 14px;" "style": "background: white; font-size: 14px;font:bold; border:2px solid #c48a00;text-align:center; margin-right:10px; margin-left:10px;"
}, },
"input": { "input": {
"style": "background: white; border:2px solid #c48a00;margin-top:3px; margin-right:10px; margin-left:10px; font-size: 12px;" "style": "background: white; border:2px solid #c48a00;margin-top:5px; margin-right:10px; margin-left:10px; font-size: 12px;"
}, },
"tabs": { "tabs": {
"style": "", "style": "",
@ -241,20 +247,27 @@
"newmsgcolor": "#fdb302", "newmsgcolor": "#fdb302",
"tabstyle": 0 "tabstyle": 0
}, },
"label": { "text": "Bulletin Board: $channel", "scrollbar": { "style" : "margin-right: 10px; padding-top:17px; padding-bottom:17px;width: 27px; background:white; border:2px solid #c48a00;",
"style": "background: rgb(196, 138, 0); color: white; border:0px; font-size: 12px;", "handle": "background-color:#c48a00;min-height:20px;",
"align": { "h": "center", "v": "center" }, "downarrow": "height:17px;border:2px solid #c48a00;",
"minheight": 26, "darrowstyle": "image:url($path/downarrow.png);",
"maxheight": 26 "uparrow": "height:17px;border:2px solid #c48a00;",
"uarrowstyle": "image:url($path/uparrow.png);"
}, },
"input": { "style": "background: white; border:2px solid #c48a00;margin-top:5px; font-size: 12px; margin-left:10px;" }, "label": { "text": "Bulletin Board: $channel",
"textarea": { "style": "background: white; font:bold; border:2px solid #c48a00;text-align:center; font-size: 12px; margin-top: 21px; margin-left:10px;" }, "style": "margin-bottom: 21px;background: rgb(196, 138, 0); color: white; border:0px; font-size: 14px;",
"align": { "h": "center", "v": "center" },
"minheight": 47,
"maxheight": 47
},
"input": { "style": "background: white; border:2px solid #c48a00;margin-top:5px; margin-right:10px; margin-left:10px; font-size: 12px;" },
"textarea": { "style": "background: white; font-size: 14px;font:bold; border:2px solid #c48a00;text-align:center; margin-right:10px; margin-left:10px;" },
"margins": {"top": 0, "bottom": 6, "left": 0, "right": 0 }, "margins": {"top": 0, "bottom": 6, "left": 0, "right": 0 },
"userlist": { "width": 150, "userlist": { "width": 150,
"style": "border:2px solid #c48a00; background: white;font: bold;font-family: 'Courier';selection-background-color:#646464; font-size: 12px; margin-left:10px; margin-right:10px; margin-top: 21px;" "style": "border:2px solid #c48a00; background: white;font: bold;font-family: 'Courier';selection-background-color:#646464; font-size: 12px; margin-left:0px; margin-right:10px;"
}, },
"time": { "text": { "width": 75, "time": { "text": { "width": 75,
"style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px;" "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;"
}, },
"slider": { "style": "border: 0px;", "slider": { "style": "border: 0px;",
"groove": "", "groove": "",

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

View file

@ -21,7 +21,7 @@
"memos": "Memos", "memos": "Memos",
"userlist": "Fresh Targets", "userlist": "Fresh Targets",
"import": "import U2;", "import": "import U2;",
"idle":, "Idle", "idle": "Idle",
"exit": "Abscond"}, "exit": "Abscond"},
"profile": {"_name": "View", "profile": {"_name": "View",
"switch": "Trolltag", "switch": "Trolltag",
@ -39,6 +39,13 @@
"quirksoff": "Quirks Off" } "quirksoff": "Quirks Off" }
}, },
"chums": { "style": "font-size: 12px; background: white; border:2px solid #c2c2c2; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200);", "chums": { "style": "font-size: 12px; background: white; border:2px solid #c2c2c2; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200);",
"scrollbar": { "style" : "background-color:#c2c2c2;",
"handle": "background-color:#e02413;height:20px;border:2px solid #ff2612;",
"downarrow": "",
"darrowstyle": "",
"uparrow": "",
"uarrowstyle": ""
},
"loc": [475, 89], "loc": [475, 89],
"size": [175, 361], "size": [175, 361],
"userlistcolor": "black", "userlistcolor": "black",
@ -242,14 +249,14 @@
"scrollbar": { "style" : "", "handle": "" }, "scrollbar": { "style" : "", "handle": "" },
"margins": {"top": 22, "bottom": 9, "left": 10, "right": 4 }, "margins": {"top": 22, "bottom": 9, "left": 10, "right": 4 },
"size": [400, 250], "size": [400, 250],
"chumlabel": { "style": "background: rgb(255, 38, 18); color: white; padding: 2px; border:1px solid #c2c2c2;", "chumlabel": { "style": "background: rgb(255, 38, 18); color: white; padding: 2px; border:1px solid #c2c2c2; margin-bottom: 4px;",
"align": { "h": "left", "v": "center" }, "align": { "h": "left", "v": "center" },
"minheight": 18, "minheight": 29,
"maxheight": 18, "maxheight": 40,
"text" : "trolling: $handle" "text" : "trolling: $handle"
}, },
"textarea": { "textarea": {
"style": "background: white; border:2px solid #c2c2c2; font-size: 14px; margin-top: 4px;" "style": "background: white; border:2px solid #c2c2c2; font-size: 14px;"
}, },
"input": { "input": {
"style": "background: white;margin-top:5px; border:1px solid #c2c2c2; margin-right: 54px; font-size: 12px; height: 19px;" "style": "background: white;margin-top:5px; border:1px solid #c2c2c2; margin-right: 54px; font-size: 12px; height: 19px;"
@ -283,20 +290,20 @@
"tabstyle": 0 "tabstyle": 0
}, },
"label": { "text": "Bulletin Board: $channel", "label": { "text": "Bulletin Board: $channel",
"style": "background-image:url($path/chumlabelbg.png);background-color:rgb(255,38,18); background-repeat: no-repeat; color: white; padding: 2px; border:1px solid #c2c2c2;", "style": "background-image:url($path/chumlabelbg.png);background-color:rgb(255,38,18); background-repeat: no-repeat; color: white; padding: 2px; border:1px solid #c2c2c2; margin-bottom:4px;",
"align": { "h": "left", "v": "center" }, "align": { "h": "left", "v": "center" },
"minheight": 18, "minheight": 29,
"maxheight": 18 "maxheight": 40
}, },
"textarea": { "textarea": {
"style": "background: white; border:2px solid #c2c2c2; font-size: 12px; margin-top: 4px;" "style": "background: white; border:2px solid #c2c2c2; font-size: 12px;"
}, },
"input": { "input": {
"style": "background: white;margin-top:5px; border:1px solid #c2c2c2; font-size: 12px; height: 19px; margin-bottom: 5px; " "style": "background: white;margin-top:5px; border:1px solid #c2c2c2; font-size: 12px; height: 19px; margin-bottom: 5px; "
}, },
"margins": {"top": 22, "bottom": 10, "left": 9, "right": 4 }, "margins": {"top": 22, "bottom": 10, "left": 9, "right": 4 },
"userlist": { "width": 125, "userlist": { "width": 125,
"style": "font-size: 12px; background: white; margin-top: 4px; margin-left: 5px; margin-bottom: 5px; border:2px solid #c2c2c2; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200);" "style": "font-size: 12px; background: white; margin-left: 5px; margin-bottom: 5px; border:2px solid #c2c2c2; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200);"
}, },
"time": { "text": { "width": 75, "time": { "text": { "width": 75,
"style": "color: black; font:bold; border:1px solid #c2c2c2; background: white; height: 19px;" "style": "color: black; font:bold; border:1px solid #c2c2c2; background: white; height: 19px;"