diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index 193c47f..191275c 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -7,12 +7,25 @@ Visit https://github.com/illuminatedwax/pesterchum for git access and source cod CHANGELOG --------- -### 3.14b (idk on version number scheme) +### 3.14.1 * Pesterchum 3.14 - illuminatedwax [ghostDunk] * Art - Grimlive [aquaMarinist] * Quirks lower() function - Kiooeht [evacipatedBox] * Quirks scrabble() function - Kiooeht [evacipatedBox] +* Quirks reverse() function - illuminatedwax [ghostDunk] * Timestamps - Kiooeht [evacipatedBox] * Logviewer - Kiooeht [evacipatedBox] -* Chum list groups - Kiooeht [evacipatedBox] -* Chum list bug fixes - Kiooeht [evacipatedBox] +* Quirk ordering - alGore +* # of users in a memo - alGore +* @links to users - illuminatedwax [ghostDunk] +* Support for REPORT and ALT to calSprite built in + +BUG FIXES: +* mixer bug fixed +* "flags" bug fixed +* incorrect characters in memos no longer break log file names +* memos now do not break on case-sensitivity +* fixed QDB address +* now lines too long to send in a single message are split up correctly +* quirk replace bug fixed +* pesterClientXXX profiles no longer saved \ No newline at end of file diff --git a/TODO b/TODO index 39cd641..1a89703 100644 --- a/TODO +++ b/TODO @@ -1,14 +1,21 @@ -o Bugs: -* some nicks can override others. ex: ectoBiologist and ectoBio. ectoBio's mood will be seen, not ectoBiologist's -* REGEXP: \b(\S)(\S*)(\S)\b REPLACE WITH: upper(\1)\2upper(\3) <-- - this regexp, when used as a quirk and then typed in breaks -* import modified.tar -* channels aren't case sensitive! get the real name of a channel +Bugs: +* weird memo time bug * Windows doesn't show style sheet sometimes?? Maybe related to themes. * Issues with connecting? Client not closing connection right? People keep getting "nick taken" messages * Windows XP SP2: sometimes mouse clicks dont register? must be some kinda crash -* don't save pesterClientXXX names -* need to make it so "/" in a memo doesn't mess up the logs +* enamel doesnt have time arrows + +Features: +* different sound for memos/pesters +* OOC +* log viewer needs to have BBCode/HTML/Text copy modes +* random pesters +* copy quirks between profiles? +* chum list groups +* More complex quirks: by-sound +* Theme checking +* Spy mode +* Animated Mac Bugs: * Mac doesn't show tabs right, display gifs, highlighting thing? @@ -17,10 +24,3 @@ SS: in the one-on-one pester it resizes with the window SS: but the memo one doesn't resize SS: and the arrows next to the time thing overlap the CLOSE button -Features: -* copy quirks between profiles? -* help button on quirks menu? -* More complex quirks: by-sound -* Theme checking -* Spy mode -* Animated diff --git a/convo.py b/convo.py index 2a6ddac..fab1ed6 100644 --- a/convo.py +++ b/convo.py @@ -8,8 +8,8 @@ from datetime import datetime, timedelta from PyQt4 import QtGui, QtCore from dataobjs import PesterProfile, Mood, PesterHistory -from generic import PesterIcon, RightClickList -from parsetools import convertTags, lexMessage, mecmd, colorBegin, colorEnd, img2smiley +from generic import PesterIcon +from parsetools import convertTags, lexMessage, splitMessage, mecmd, colorBegin, colorEnd, img2smiley class PesterTabWindow(QtGui.QFrame): def __init__(self, mainwindow, parent=None, convo="convo"): @@ -304,6 +304,9 @@ class PesterText(QtGui.QTextEdit): if url != "": if url[0] == "#" and url != "#pesterchum": self.parent().mainwindow.showMemos(url[1:]) + elif url[0] == "@": + handle = unicode(url[1:]) + self.parent().mainwindow.newConversation(handle) else: QtGui.QDesktopServices.openUrl(QtCore.QUrl(url, QtCore.QUrl.TolerantMode)) QtGui.QTextEdit.mousePressEvent(self, event) @@ -350,7 +353,7 @@ class PesterText(QtGui.QTextEdit): "Accept": "text/plain"} try: pass - hconn = httplib.HTTPConnection('luke.violentlemon.com', 80, + hconn = httplib.HTTPConnection('qdb.pesterchum.net', 80, timeout=15) hconn.request("POST", "/index.php", params, headers) response = hconn.getresponse() @@ -443,10 +446,14 @@ class PesterConvo(QtGui.QFrame): self.unblockchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/unblockchum"], self) self.connect(self.unblockchum, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('unblockChumSlot()')) + self.reportchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/report"], self) + self.connect(self.reportchum, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('reportThisChum()')) self.optionsMenu.addAction(self.quirksOff) self.optionsMenu.addAction(self.addChumAction) self.optionsMenu.addAction(self.blockAction) + self.optionsMenu.addAction(self.reportchum) self.chumopen = False self.applyquirks = True @@ -599,13 +606,17 @@ class PesterConvo(QtGui.QFrame): lexmsg = lexMessage(text) if type(lexmsg[0]) is not mecmd and self.applyquirks: lexmsg = quirks.apply(lexmsg) - serverMsg = copy(lexmsg) - self.addMessage(lexmsg, True) - # if ceased, rebegin - if hasattr(self, 'chumopen') and not self.chumopen: - self.mainwindow.newConvoStarted.emit(QtCore.QString(self.title()), True) - text = convertTags(serverMsg, "ctag") - self.messageSent.emit(text, self.title()) + lexmsgs = splitMessage(lexmsg) + + for lm in lexmsgs: + serverMsg = copy(lm) + self.addMessage(lm, True) + # if ceased, rebegin + if hasattr(self, 'chumopen') and not self.chumopen: + self.mainwindow.newConvoStarted.emit(QtCore.QString(self.title()), True) + self.setChumOpen(True) + text = convertTags(serverMsg, "ctag") + self.messageSent.emit(text, self.title()) self.textInput.setText("") @QtCore.pyqtSlot() @@ -615,6 +626,9 @@ class PesterConvo(QtGui.QFrame): def blockThisChum(self): self.mainwindow.blockChum(self.chum.handle) @QtCore.pyqtSlot() + def reportThisChum(self): + self.mainwindow.reportChum(self.chum.handle) + @QtCore.pyqtSlot() def unblockChumSlot(self): self.mainwindow.unblockChum(self.chum.handle) @QtCore.pyqtSlot(bool) diff --git a/dataobjs.py b/dataobjs.py index b6459fc..38d071f 100644 --- a/dataobjs.py +++ b/dataobjs.py @@ -7,9 +7,11 @@ from generic import PesterIcon from parsetools import timeDifference, convertTags, lexMessage from mispeller import mispeller -_upperre = re.compile(r"upper\(([\w\\]+)\)") -_lowerre = re.compile(r"lower\(([\w\\]+)\)") -_scramblere = re.compile(r"scramble\(([\w\\]+)\)") +_groupre = re.compile(r"\\([0-9]+)") +_upperre = re.compile(r"upper\(([\w<>\\]+)\)") +_lowerre = re.compile(r"lower\(([\w<>\\]+)\)") +_scramblere = re.compile(r"scramble\(([\w<>\\]+)\)") +_reversere = re.compile(r"reverse\(([\w<>\\]+)\)") class Mood(object): moods = ["chummy", "rancorous", "offline", "pleasant", "distraught", @@ -62,15 +64,19 @@ class pesterQuirk(object): return string def regexprep(mo): to = self.quirk["to"] + to = _groupre.sub(r"\\g<\1>", to) def upperrep(m): return mo.expand(m.group(1)).upper() def lowerrep(m): return mo.expand(m.group(1)).lower() def scramblerep(m): return "".join(random.sample(mo.expand(m.group(1)), len(mo.expand(m.group(1))))) + def reverserep(m): + return mo.expand(m.group(1))[::-1] to = _upperre.sub(upperrep, to) to = _lowerre.sub(lowerrep, to) to = _scramblere.sub(scramblerep, to) + to = _reversere.sub(reverserep, to) return mo.expand(to) return re.sub(fr, regexprep, string) elif self.type == "random": @@ -181,7 +187,7 @@ class pesterQuirks(object): yield q class PesterProfile(object): - def __init__(self, handle, color=None, mood=Mood("offline"), group=None, chumdb=None): + def __init__(self, handle, color=None, mood=Mood("offline"), chumdb=None): self.handle = handle if color is None: if chumdb: @@ -190,12 +196,6 @@ class PesterProfile(object): color = QtGui.QColor("black") self.color = color self.mood = mood - if group is None: - if chumdb: - group = chumdb.getGroup(handle, "Chums") - else: - group = "Chums" - self.group = group def initials(self, time=None): handle = self.handle caps = [l for l in handle if l.isupper()] @@ -225,8 +225,7 @@ class PesterProfile(object): def plaindict(self): return (self.handle, {"handle": self.handle, "mood": self.mood.name(), - "color": unicode(self.color.name()), - "group": unicode(self.group)}) + "color": unicode(self.color.name())}) def blocked(self, config): return self.handle in config.getBlocklist() diff --git a/generic.py b/generic.py index 2c0f265..0e5b21a 100644 --- a/generic.py +++ b/generic.py @@ -35,14 +35,9 @@ class RightClickList(QtGui.QListWidget): if event.reason() == QtGui.QContextMenuEvent.Mouse: listing = self.itemAt(event.pos()) self.setCurrentItem(listing) - self.optionsMenu.popup(event.globalPos()) - -class RightClickTree(QtGui.QTreeWidget): - def contextMenuEvent(self, event): - if event.reason() == QtGui.QContextMenuEvent.Mouse: - listing = self.itemAt(event.pos()) - self.setCurrentItem(listing) - self.optionsMenu.popup(event.globalPos()) + self.getOptionsMenu().popup(event.globalPos()) + def getOptionsMenu(self): + return self.optionsMenu class MultiTextDialog(QtGui.QDialog): def __init__(self, title, parent, *queries): diff --git a/irc.py b/irc.py index a30294d..c0a9e08 100644 --- a/irc.py +++ b/irc.py @@ -97,8 +97,8 @@ class PesterIRC(QtCore.QThread): space = l[0].rfind(" ", 0,400) if space == -1: space = 400 - a = l[0][0:space] - b = l[0][space:] + a = l[0][0:space+1] + b = l[0][space+1:] if len(b) > 0: return [a] + splittext([b]) else: diff --git a/logviewer.py b/logviewer.py index b543731..b1c9474 100644 --- a/logviewer.py +++ b/logviewer.py @@ -3,7 +3,7 @@ import codecs import re from time import strftime, strptime from PyQt4 import QtGui, QtCore -from generic import RightClickList, RightClickTree +from generic import RightClickList from parsetools import convertTags from convo import PesterText @@ -138,8 +138,7 @@ class PesterLogViewer(QtGui.QDialog): self.logList.sort() self.logList.reverse() - self.tree = RightClickTree() - self.tree.optionsMenu = QtGui.QMenu(self) + self.tree = QtGui.QTreeWidget() self.tree.setFixedSize(260, 300) self.tree.header().hide() if theme.has_key("convo/scrollbar"): @@ -149,7 +148,6 @@ class PesterLogViewer(QtGui.QDialog): self.connect(self.tree, QtCore.SIGNAL('itemSelectionChanged()'), self, QtCore.SLOT('loadSelectedLog()')) self.tree.setSortingEnabled(False) - child_1 = None last = ["",""] for (i,l) in enumerate(self.logList): diff --git a/memos.py b/memos.py index 36066e1..66aff11 100644 --- a/memos.py +++ b/memos.py @@ -218,10 +218,10 @@ class MemoTabWindow(PesterTabWindow): def __init__(self, mainwindow, parent=None): PesterTabWindow.__init__(self, mainwindow, parent, "memos") def addChat(self, convo): - self.convos[convo.channel] = convo + self.convos[convo.channel.upper()] = convo # either addTab or setCurrentIndex will trigger changed() - newindex = self.tabs.addTab(convo.channel) - self.tabIndices[convo.channel] = newindex + newindex = self.tabs.addTab(convo.channel.upper()) + self.tabIndices[convo.channel.upper()] = newindex self.tabs.setCurrentIndex(newindex) self.tabs.setTabIcon(newindex, PesterIcon(self.mainwindow.theme["memos/memoicon"])) def updateBlocked(self): @@ -291,16 +291,16 @@ class MemoText(PesterText): grammar = time.getGrammar() joinmsg = chum.memojoinmsg(systemColor, time.getTime(), grammar, window.theme["convo/text/joinmemo"]) self.append(convertTags(joinmsg)) - parent.mainwindow.chatlog.log(parent.channel, joinmsg) + parent.mainwindow.chatlog.log(parent.channel.upper(), joinmsg) time.openCurrentTime() if type(lexmsg[0]) is mecmd: memsg = chum.memsg(systemColor, lexmsg, time=time.getGrammar()) - window.chatlog.log(parent.channel, memsg) + window.chatlog.log(parent.channel.upper(), memsg) self.append(convertTags(memsg)) else: self.append(convertTags(lexmsg)) - window.chatlog.log(parent.channel, lexmsg) + window.chatlog.log(parent.channel.upper(), lexmsg) def changeTheme(self, theme): self.initTheme(theme) @@ -417,7 +417,7 @@ class PesterMemo(PesterConvo): msg = p.memoopenmsg(systemColor, self.time.getTime(), timeGrammar, self.mainwindow.theme["convo/text/openmemo"], self.channel) self.time.openCurrentTime() self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) self.op = False self.newmessage = False @@ -425,7 +425,7 @@ class PesterMemo(PesterConvo): self.applyquirks = True def title(self): - return self.channel + return self.channel.upper() def icon(self): return PesterIcon(self.mainwindow.theme["memos/memoicon"]) @@ -555,7 +555,7 @@ class PesterMemo(PesterConvo): self.times[handle].removeTime(close) msg = chum.memoclosemsg(systemColor, grammar, window.theme["convo/text/closememo"]) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) elif timed not in self.times[handle]: self.times[handle].addTime(timed) else: @@ -601,7 +601,7 @@ class PesterMemo(PesterConvo): namesdb = self.mainwindow.namesdb # reload names self.userlist.clear() - for n in self.mainwindow.namesdb[self.channel]: + for n in self.mainwindow.namesdb[self.channel.upper()]: self.addUser(n) @QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString) @@ -635,7 +635,7 @@ class PesterMemo(PesterConvo): grammar = t.getGrammar() msg = chum.memoclosemsg(systemColor, grammar, self.mainwindow.theme["convo/text/closememo"]) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) self.times[h].removeTime(t.getTime()) if update == "nick": self.addUser(newnick) @@ -663,7 +663,7 @@ class PesterMemo(PesterConvo): opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW") msg = chum.memobanmsg(opchum, opgrammar, systemColor, grammar) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) ttracker.removeTime(ttracker.getTime()) if chum is self.mainwindow.profile(): @@ -682,10 +682,10 @@ class PesterMemo(PesterConvo): self.time.openCurrentTime() msg = me.memoopenmsg(systemColor, self.time.getTime(), self.time.getGrammar(), self.mainwindow.theme["convo/text/openmemo"], self.channel) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) elif ret == QtGui.QMessageBox.Cancel: if self.parent(): - i = self.parent().tabIndices[self.channel] + i = self.parent().tabIndices[self.channel.upper()] self.parent().tabClose(i) else: self.close() @@ -749,7 +749,7 @@ class PesterMemo(PesterConvo): systemColor = QtGui.QColor(self.mainwindow.theme["memos/systemMsgColor"]) msg = me.memoclosemsg(systemColor, grammar, self.mainwindow.theme["convo/text/closememo"]) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) newtime = self.time.getTime() if newtime is None: diff --git a/menus.py b/menus.py index 4f91613..c0f4d15 100644 --- a/menus.py +++ b/menus.py @@ -546,10 +546,6 @@ class PesterOptions(QtGui.QDialog): self.theme = theme self.setStyleSheet(self.theme["main/defaultwindow/style"]) - hr = QtGui.QFrame() - hr.setFrameShape(QtGui.QFrame.HLine) - hr.setFrameShadow(QtGui.QFrame.Sunken) - self.tabcheck = QtGui.QCheckBox("Tabbed Conversations", self) if self.config.tabs(): self.tabcheck.setChecked(True) @@ -576,14 +572,6 @@ class PesterOptions(QtGui.QDialog): if self.config.showSeconds(): self.secondscheck.setChecked(True) - # Will add ability to turn off groups later - #self.groupscheck = QtGui.QCheckBox("Use Groups", self) - #self.groupscheck.setChecked(self.config.useGroups()) - self.showemptycheck = QtGui.QCheckBox("Show Empty Groups", self) - self.showemptycheck.setChecked(self.config.showEmptyGroups()) - self.showonlinenumbers = QtGui.QCheckBox("Show Number of Online Chums", self) - self.showonlinenumbers.setChecked(self.config.showOnlineNumbers()) - self.ok = QtGui.QPushButton("OK", self) self.ok.setDefault(True) self.connect(self.ok, QtCore.SIGNAL('clicked()'), @@ -599,10 +587,6 @@ class PesterOptions(QtGui.QDialog): layout_0.addWidget(self.tabcheck) layout_0.addWidget(self.soundcheck) layout_0.addWidget(self.hideOffline) - #layout_0.addWidget(self.groupscheck) - layout_0.addWidget(self.showemptycheck) - layout_0.addWidget(self.showonlinenumbers) - layout_0.addWidget(hr) layout_0.addWidget(self.timestampcheck) layout_0.addWidget(self.timestampBox) layout_0.addWidget(self.secondscheck) @@ -628,7 +612,11 @@ class PesterUserlist(QtGui.QDialog): self.addChumAction = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/addchum"], self) self.connect(self.addChumAction, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('addChumSlot()')) + self.pesterChumAction = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/pester"], self) + self.connect(self.pesterChumAction, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('pesterChumSlot()')) self.userarea.optionsMenu.addAction(self.addChumAction) + self.userarea.optionsMenu.addAction(self.pesterChumAction) self.ok = QtGui.QPushButton("OK", self) self.ok.setDefault(True) @@ -652,7 +640,7 @@ class PesterUserlist(QtGui.QDialog): self.updateUsers() @QtCore.pyqtSlot() def updateUsers(self): - names = self.mainwindow.namesdb["#pesterchum"] + names = self.mainwindow.namesdb["#PESTERCHUM"] self.userarea.clear() for n in names: item = QtGui.QListWidgetItem(n) @@ -693,8 +681,15 @@ class PesterUserlist(QtGui.QDialog): if not cur: return self.addChum.emit(cur.text()) + @QtCore.pyqtSlot() + def pesterChumSlot(self): + cur = self.userarea.currentItem() + if not cur: + return + self.pesterChum.emit(cur.text()) addChum = QtCore.pyqtSignal(QtCore.QString) + pesterChum = QtCore.pyqtSignal(QtCore.QString) class MemoListItem(QtGui.QListWidgetItem): @@ -816,6 +811,6 @@ class LoadingScreen(QtGui.QDialog): class AboutPesterchum(QtGui.QMessageBox): def __init__(self, parent=None): QtGui.QMessageBox.__init__(self, parent) - self.setText("P3ST3RCHUM V. 3.14") - self.setInformativeText("Programming by illuminatedwax (ghostDunk), art by Grimlive (aquaMarinist). Special thanks to ABT and gamblingGenocider.") + self.setText("P3ST3RCHUM V. 3.14.1") + self.setInformativeText("Programming by illuminatedwax (ghostDunk), Kiooeht (evacipatedBox), alGore, art by Grimlive (aquaMarinist). Special thanks to ABT and gamblingGenocider.") self.mainwindow = parent diff --git a/parsetools.py b/parsetools.py index 67f79da..fad5e1f 100644 --- a/parsetools.py +++ b/parsetools.py @@ -11,6 +11,7 @@ _ctag_end = re.compile(r'(?i)') _ctag_rgb = re.compile(r'\d+,\d+,\d+') _urlre = re.compile(r"(?i)https?://[^\s]+") _memore = re.compile(r"(\s|^)(#[A-Za-z0-9_]+)") +_handlere = re.compile(r"(\s|^)(@[A-Za-z0-9_]+)") _imgre = re.compile(r"""(?i)""") _mecmdre = re.compile(r"^(/me|PESTERCHUM:ME)(\S*)") @@ -109,6 +110,16 @@ class memolex(object): return "%s%s" % (self.space, self.channel, self.channel) else: return self.string +class chumhandlelex(object): + def __init__(self, string, space, handle): + self.string = string + self.space = space + self.handle = handle + def convert(self, format): + if format == "html": + return "%s%s" % (self.space, self.handle, self.handle) + else: + return self.string class smiley(object): def __init__(self, string): self.string = string @@ -129,8 +140,11 @@ def lexMessage(string): (colorBegin, _ctag_begin), (colorBegin, _gtag_begin), (colorEnd, _ctag_end), (imagelink, _imgre), (hyperlink, _urlre), (memolex, _memore), + (chumhandlelex, _handlere), (smiley, _smilere)] + string = unicode(string) + string = string.replace("\n", " ").replace("\r", " ") lexed = lexer(unicode(string), lexlist) balanced = [] @@ -176,6 +190,50 @@ def convertTags(lexed, format="html"): return escaped +def splitMessage(msg, format="ctag"): + """Splits message if it is too long.""" + # split long text lines + buf = [] + for o in msg: + if type(o) in [str, unicode] and len(o) > 200: + for i in range(0, len(o), 200): + buf.append(o[i:i+200]) + else: + buf.append(o) + msg = buf + okmsg = [] + cbegintags = [] + output = [] + for o in msg: + okmsg.append(o) + if type(o) is colorBegin: + cbegintags.append(o) + elif type(o) is colorEnd: + cbegintags.pop() + # yeah normally i'd do binary search but im lazy + msglen = len(convertTags(okmsg, format)) + 4*(len(cbegintags)) + if msglen > 400: + okmsg.pop() + if len(okmsg) == 0: + output.append([o]) + else: + tmp = [] + for color in cbegintags: + okmsg.append(colorEnd("")) + tmp.append(color) + output.append(okmsg) + if type(o) is colorBegin: + cbegintags.append(o) + elif type(o) is colorEnd: + cbegintags.pop() + tmp.append(o) + okmsg = tmp + + if len(okmsg) > 0: + output.append(okmsg) + return output + + def addTimeInitial(string, grammar): endofi = string.find(":") @@ -216,7 +274,7 @@ def timeDifference(td): elif atd < timedelta(0,3600): if minutes == 1: timetext = "%d MINUTE %s" % (minutes, when) - else: + else: timetext = "%d MINUTES %s" % (minutes, when) elif atd < timedelta(0,3600*100): if hours == 1 and leftoverminutes == 0: @@ -235,7 +293,7 @@ def img2smiley(string): return string smiledict = { - ":rancorous:": "pc_rancorous.gif", + ":rancorous:": "pc_rancorous.gif", ":apple:": "apple.gif", ":bathearst:": "bathearst.gif", ":cathearst:": "cathearst.png", @@ -245,7 +303,7 @@ smiledict = { ":blueghost:": "blueslimer.gif", ":slimer:": "slimer.gif", ":candycorn:": "candycorn.gif", - ":cheer:": "cheer.gif", + ":cheer:": "cheer.gif", ":duhjohn:": "confusedjohn.gif", ":datrump:": "datrump.gif", ":facepalm:": "facepalm.gif", diff --git a/pesterchum.js b/pesterchum.js index d8f7ad6..1dbea1d 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "bluntInstrument", "sunilaSeed", "ghostBinoculars", "cosmicSailor", "alGore", "nickServ", "nakNak"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"hideOfflineChums": true, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite", "fairytalePorn", "brooklynRage"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file diff --git a/pesterchum.py b/pesterchum.py index 24eee8a..56ddf1d 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -18,7 +18,7 @@ from menus import PesterChooseQuirks, PesterChooseTheme, \ PesterChooseProfile, PesterOptions, PesterUserlist, PesterMemoList, \ LoadingScreen, AboutPesterchum from dataobjs import PesterProfile, Mood, pesterQuirk, pesterQuirks -from generic import PesterIcon, RightClickList, RightClickTree, MultiTextDialog, PesterList +from generic import PesterIcon, RightClickList, MultiTextDialog, PesterList from convo import PesterTabWindow, PesterText, PesterInput, PesterConvo from parsetools import convertTags, addTimeInitial from memos import PesterMemo, MemoTabWindow, TimeTracker @@ -26,6 +26,7 @@ from irc import PesterIRC from logviewer import PesterLogUserSelect, PesterLogViewer _datadir = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.DataLocation)+"Pesterchum/" +canon_handles = ["apocalypseArisen", "arsenicCatnip", "arachnidsGrip", "adiosToreador", "caligulasAquarium", "cuttlefishCuller", "carcinoGeneticist", "centaursTesticle", "grimAuxiliatrix", "gallowsCalibrator", "gardenGnostic", "ectoBiologist", "twinArmageddons", "terminallyCapricious", "turntechGodhead", "tentacleTherapist"] if sys.platform == "darwin": if not os.path.exists(_datadir): @@ -78,10 +79,13 @@ class PesterLog(object): self.logpath = _datadir+"logs" def log(self, handle, msg): - time = strftime("[%H:%M:%S] ") - bbcodemsg = time + convertTags(msg, "bbcode") - html = time + convertTags(msg, "html")+"
" - msg = time + convertTags(msg, "text") + #watch out for illegal characters + handle = re.sub(r'[<>:"/\\|?*]', "_", handle) + #time = strftime("[%H:%M:%S] ") + # no time codes in logs + bbcodemsg = convertTags(msg, "bbcode") + html = convertTags(msg, "html")+"
" + msg = convertTags(msg, "text") modes = {"bbcode": bbcodemsg, "html": html, "text": msg} if not self.convos.has_key(handle): time = datetime.now().strftime("%Y-%m-%d.%H.%M") @@ -131,14 +135,7 @@ class PesterProfileDB(dict): json.dump(chumdict, fp) fp.close() - u = [] - for (handle, c) in chumdict.iteritems(): - try: - g = c['group'] - u.append((handle, PesterProfile(handle, color=QtGui.QColor(c['color']), mood=Mood(c['mood']), group=g))) - except KeyError: - u.append((handle, PesterProfile(handle, color=QtGui.QColor(c['color']), mood=Mood(c['mood'])))) - converted = dict(u) + converted = dict([(handle, PesterProfile(handle, color=QtGui.QColor(c['color']), mood=Mood(c['mood']))) for (handle, c) in chumdict.iteritems()]) self.update(converted) def save(self): @@ -159,17 +156,6 @@ class PesterProfileDB(dict): self[handle].color = color else: self[handle] = PesterProfile(handle, color) - def getGroup(self, handle, default="Chums"): - if not self.has_key(handle): - return default - else: - return self[handle].group - def setGroup(self, handle, theGroup): - if self.has_key(handle): - self[handle].group = theGroup - else: - self[handle] = PesterProfile(handle, group=theGroup) - self.save() def __setitem__(self, key, val): dict.__setitem__(self, key, val) self.save() @@ -282,22 +268,6 @@ class userConfig(object): if not self.config.has_key('showSeconds'): self.set("showSeconds", False) return self.config.get('showSeconds', False) - def useGroups(self): - if not self.config.has_key('useGroups'): - self.set("useGroups", False) - return self.config.get('useGroups', False) - def openDefaultGroup(self): - if not self.config.has_key('openDefaultGroup'): - self.set("openDefaultGroup", True) - return self.config.get('openDefaultGroup', True) - def showEmptyGroups(self): - if not self.config.has_key('emptyGroups'): - self.set("emptyGroups", False) - return self.config.get('emptyGroups', False) - def showOnlineNumbers(self): - if not self.config.has_key('onlineNumbers'): - self.set("onlineNumbers", False) - return self.config.get('onlineNumbers', False) def addChum(self, chum): if chum.handle not in self.chums(): fp = open(self.filename) # what if we have two clients open?? @@ -325,25 +295,6 @@ class userConfig(object): l = self.getBlocklist() l.pop(l.index(handle)) self.set('block', l) - def getGroups(self): - if not self.config.has_key('groups'): - self.set('groups', []) - return self.config.get('groups', []) - def addGroup(self, group, open=False): - l = self.getGroups() - if group not in l: - l.append([group,open]) - l.sort() - self.set('groups', l) - def delGroup(self, group): - l = self.getGroups() - i = 0 - for g in l: - if g[0] == group: break - i = i+1 - l.pop(i) - l.sort() - self.set('groups', l) def server(self): return self.config.get('server', 'irc.mindfang.org') def port(self): @@ -432,6 +383,9 @@ class userProfile(object): return self.theme def save(self): handle = self.chat.handle + if handle[0:12] == "pesterClient": + # dont save temp profiles + return try: jsonoutput = json.dumps(self.userprofile) except ValueError, e: @@ -457,9 +411,9 @@ class WMButton(QtGui.QPushButton): self.setStyleSheet("QPushButton { padding: 0px; }") self.setAutoDefault(False) -class chumListing(QtGui.QTreeWidgetItem): +class chumListing(QtGui.QListWidgetItem): def __init__(self, chum, window): - QtGui.QTreeWidgetItem.__init__(self, [chum.handle]) + QtGui.QListWidgetItem.__init__(self, chum.handle) self.mainwindow = window self.chum = chum self.handle = chum.handle @@ -473,46 +427,33 @@ class chumListing(QtGui.QTreeWidgetItem): mood = self.chum.mood self.mood = mood icon = self.mood.icon(self.mainwindow.theme) - self.setIcon(0, icon) + self.setIcon(icon) try: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) except KeyError: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) def changeTheme(self, theme): icon = self.mood.icon(theme) - self.setIcon(0, icon) + self.setIcon(icon) try: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) except KeyError: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) def __lt__(self, cl): h1 = self.handle.lower() h2 = cl.handle.lower() return (h1 < h2) -class chumArea(RightClickTree): +class chumArea(RightClickList): def __init__(self, chums, parent=None): - QtGui.QTreeWidget.__init__(self, parent) + QtGui.QListWidget.__init__(self, parent) self.mainwindow = parent theme = self.mainwindow.theme self.chums = chums - gTemp = self.mainwindow.config.getGroups() - self.groups = [g[0] for g in gTemp] - self.openGroups = [g[1] for g in gTemp] - # quick hack to sort saved groups - self.mainwindow.config.addGroup("f3rskv9dssag[%3ffvsla09iv34G#$v") - self.mainwindow.config.delGroup("f3rskv9dssag[%3ffvsla09iv34G#$v") - # end quick hack - self.showAllGroups() if not self.mainwindow.config.hideOfflineChums(): self.showAllChums() - if not self.mainwindow.config.showEmptyGroups(): - self.hideEmptyGroups() - if self.mainwindow.config.showOnlineNumbers(): - self.showOnlineNumbers() - self.chumoptions = QtGui.QMenu(self) - self.groupoptions = QtGui.QMenu(self) - self.optionsMenu = self.chumoptions + self.optionsMenu = QtGui.QMenu(self) + self.canonMenu = QtGui.QMenu(self) self.pester = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/pester"], self) self.connect(self.pester, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('activateChum()')) @@ -525,98 +466,35 @@ class chumArea(RightClickTree): self.logchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/viewlog"], self) self.connect(self.logchum, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('openChumLogs()')) + self.reportchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/report"], self) + self.connect(self.reportchum, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('reportChum()')) + self.findalts = QtGui.QAction("Find Alts", self) + self.connect(self.findalts, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('findAlts()')) - self.removegroup = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/removegroup"], self) - self.connect(self.removegroup, QtCore.SIGNAL('triggered()'), - self, QtCore.SLOT('removeGroup()')) - self.renamegroup = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/renamegroup"], self) - self.connect(self.renamegroup, QtCore.SIGNAL('triggered()'), - self, QtCore.SLOT('renameGroup()')) - self.chumoptions.addAction(self.pester) - self.chumoptions.addAction(self.logchum) - self.chumoptions.addAction(self.blockchum) - self.chumoptions.addAction(self.removechum) - self.moveMenu = QtGui.QMenu(self.mainwindow.theme["main/menus/rclickchumlist/movechum"], self) - self.chumoptions.addMenu(self.moveMenu) - self.moveGroupMenu() + self.optionsMenu.addAction(self.pester) + self.optionsMenu.addAction(self.logchum) + self.optionsMenu.addAction(self.blockchum) + self.optionsMenu.addAction(self.removechum) + self.optionsMenu.addAction(self.reportchum) - self.groupoptions.addAction(self.renamegroup) - self.groupoptions.addAction(self.removegroup) + + self.canonMenu.addAction(self.pester) + self.canonMenu.addAction(self.logchum) + self.canonMenu.addAction(self.blockchum) + self.canonMenu.addAction(self.removechum) + self.canonMenu.addAction(self.reportchum) + self.canonMenu.addAction(self.findalts) self.initTheme(theme) - #self.sortItems() - #self.sortItems(1, QtCore.Qt.AscendingOrder) - self.setSortingEnabled(False) - self.header().hide() - self.setDropIndicatorShown(False) - self.setIndentation(0) - self.setDragEnabled(True) - self.setDragDropMode(QtGui.QAbstractItemView.InternalMove) - - self.connect(self, QtCore.SIGNAL('itemDoubleClicked(QTreeWidgetItem *, int)'), - self, QtCore.SLOT('expandGroup()')) - - def dropEvent(self, event): - item = self.itemAt(event.pos()) - if item: - text = str(item.text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - if text == "Chums" or text in self.groups: - group = text - else: - ptext = str(item.parent().text(0)) - if ptext.rfind(" ") != -1: - ptext = ptext[0:ptext.rfind(" ")] - group = ptext - chumLabel = event.source().currentItem() - chumLabel.chum.group = group - self.mainwindow.chumdb.setGroup(chumLabel.chum.handle, group) - self.takeItem(chumLabel) - self.addItem(chumLabel) - if self.mainwindow.config.showOnlineNumbers(): - self.showOnlineNumbers() - - def chumoptionsmenu(self): - self.optionsMenu = self.chumoptions - def groupoptionsmenu(self): - self.optionsMenu = self.groupoptions - def moveGroupMenu(self): - currentGroup = self.currentItem() - if currentGroup: - text = str(currentGroup.parent().text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - currentGroup = text - self.moveMenu.clear() - actGroup = QtGui.QActionGroup(self) - - groups = self.groups[:] - groups.insert(0, "Chums") - for gtext in groups: - if gtext == currentGroup: - continue - movegroup = self.moveMenu.addAction(gtext) - actGroup.addAction(movegroup) - self.connect(actGroup, QtCore.SIGNAL('triggered(QAction *)'), - self, QtCore.SLOT('moveToGroup(QAction *)')) - def contextMenuEvent(self, event): - #fuckin Qt - if event.reason() == QtGui.QContextMenuEvent.Mouse: - listing = self.itemAt(event.pos()) - self.setCurrentItem(listing) - text = str(self.currentItem().text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - if text == "Chums": - return - elif text in self.groups: - self.groupoptionsmenu() - else: - self.chumoptionsmenu() - self.moveGroupMenu() - self.optionsMenu.popup(event.globalPos()) - + self.sortItems() + def getOptionsMenu(self): + currenthandle = self.currentItem().chum.handle + if currenthandle in canon_handles: + return self.canonMenu + else: + return self.optionsMenu def addChum(self, chum): if len([c for c in self.chums if c.handle == chum.handle]) != 0: return @@ -625,152 +503,29 @@ class chumArea(RightClickTree): chum.mood.name() == "offline"): chumLabel = chumListing(chum, self.mainwindow) self.addItem(chumLabel) - #self.topLevelItem(0).addChild(chumLabel) - #self.topLevelItem(0).sortChildren(0, QtCore.Qt.AscendingOrder) + self.sortItems() def getChums(self, handle): - chums = self.findItems(handle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive) + chums = self.findItems(handle, QtCore.Qt.MatchFlags(0)) return chums def showAllChums(self): for c in self.chums: chandle = c.handle - if not len(self.findItems(chandle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive)): + if not self.findItems(chandle, QtCore.Qt.MatchFlags(0)): chumLabel = chumListing(c, self.mainwindow) self.addItem(chumLabel) - #self.sortItems() + self.sortItems() def hideOfflineChums(self): - for j in range(self.topLevelItemCount()): - i = 0 - listing = self.topLevelItem(j).child(i) - while listing is not None: - if listing.chum.mood.name() == "offline": - self.topLevelItem(j).takeChild(i) - else: - i += 1 - listing = self.topLevelItem(j).child(i) - self.topLevelItem(j).sortChildren(0, QtCore.Qt.AscendingOrder) - def showAllGroups(self): - curgroups = [] - for i in range(self.topLevelItemCount()): - text = str(self.topLevelItem(i).text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - curgroups.append(text) - if "Chums" not in curgroups: - child_1 = QtGui.QTreeWidgetItem(["Chums"]) - self.addTopLevelItem(child_1) - if self.mainwindow.config.openDefaultGroup(): - child_1.setExpanded(True) - for i,g in enumerate(self.groups): - if g not in curgroups: - child_1 = QtGui.QTreeWidgetItem(["%s" % (g)]) - self.addTopLevelItem(child_1) - if self.openGroups[i]: - child_1.setExpanded(True) - def showOnlineNumbers(self): - if hasattr(self, 'groups'): - self.hideOnlineNumbers() - totals = {'Chums': 0} - online = {'Chums': 0} - for g in self.groups: - totals[str(g)] = 0 - online[str(g)] = 0 - for c in self.chums: - yes = c.mood.name() != "offline" - if c.group == "Chums": - totals[str(c.group)] = totals[str(c.group)]+1 - if yes: - online[str(c.group)] = online[str(c.group)]+1 - elif c.group in totals: - totals[str(c.group)] = totals[str(c.group)]+1 - if yes: - online[str(c.group)] = online[str(c.group)]+1 - else: - totals["Chums"] = totals["Chums"]+1 - if yes: - online["Chums"] = online["Chums"]+1 - for i in range(self.topLevelItemCount()): - text = str(self.topLevelItem(i).text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - self.topLevelItem(i).setText(0, "%s (%i/%i)" % (text, online[text], totals[text])) - def hideOnlineNumbers(self): - for i in range(self.topLevelItemCount()): - text = str(self.topLevelItem(i).text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - self.topLevelItem(i).setText(0, "%s" % (text)) - def hideEmptyGroups(self): i = 0 - listing = self.topLevelItem(i) + listing = self.item(i) while listing is not None: - if listing.childCount() == 0: - self.takeTopLevelItem(i) + if listing.chum.mood.name() == "offline": + self.takeItem(i) else: i += 1 - listing = self.topLevelItem(i) - @QtCore.pyqtSlot() - def expandGroup(self): - item = self.currentItem() - text = str(item.text(0)) - if text.find(" ") != -1: - text = text[0:text.rfind(" ")] - - if text in self.groups: - self.mainwindow.config.delGroup(text) - expand = item.isExpanded() - self.mainwindow.config.addGroup(text, not expand) - elif text == "Chums": - self.mainwindow.config.set("openDefaultGroup", not item.isExpanded()) - def addItem(self, chumLabel): - if hasattr(self, 'groups'): - if chumLabel.chum.group not in self.groups: - if self.topLevelItemCount() == 0: - child_1 = QtGui.QTreeWidgetItem(["Chums"]) - self.addTopLevelItem(child_1) - if self.mainwindow.config.openDefaultGroup(): - child_1.setExpanded(True) - else: - text = str(self.topLevelItem(0).text(0)) - if text.find(" ") != -1: - text = text[0:text.rfind(" ")] - if text != "Chums": - child_1 = QtGui.QTreeWidgetItem(["Chums"]) - self.insertTopLevelItems(0, [child_1]) - if self.mainwindow.config.openDefaultGroup(): - child_1.setExpanded(True) - self.topLevelItem(0).addChild(chumLabel) - self.topLevelItem(0).sortChildren(0, QtCore.Qt.AscendingOrder) - else: - if not self.findItems(chumLabel.handle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive): - if not self.findItems(chumLabel.chum.group, QtCore.Qt.MatchContains): - child_1 = QtGui.QTreeWidgetItem(["%s" % (chumLabel.chum.group)]) - self.addTopLevelItem(child_1) - if self.openGroups[self.groups.index("%s" % (chumLabel.chum.group))]: - child_1.setExpanded(True) - for i in range(self.topLevelItemCount()): - text = str(self.topLevelItem(i).text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - if text == chumLabel.chum.group: - break - self.topLevelItem(i).addChild(chumLabel) - self.topLevelItem(i).sortChildren(0, QtCore.Qt.AscendingOrder) - else: # usually means this is now the trollslum - if not self.findItems(chumLabel.handle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive): - self.topLevelItem(0).addChild(chumLabel) - self.topLevelItem(0).sortChildren(0, QtCore.Qt.AscendingOrder) - def takeItem(self, chumLabel): - r = None - for i in range(self.topLevelItemCount()): - for j in range(self.topLevelItem(i).childCount()): - if self.topLevelItem(i).child(j).text(0) == chumLabel.chum.handle: - r = self.topLevelItem(i).takeChild(j) - break - if not self.mainwindow.config.showEmptyGroups(): - self.hideEmptyGroups() - return r + listing = self.item(i) + self.sortItems() def updateMood(self, handle, mood): hideoff = self.mainwindow.config.hideOfflineChums() chums = self.getChums(handle) @@ -781,7 +536,7 @@ class chumArea(RightClickTree): handle in [p.handle for p in self.chums]: newLabel = chumListing([p for p in self.chums if p.handle == handle][0], self.mainwindow) self.addItem(newLabel) - #self.sortItems() + self.sortItems() chums = [newLabel] elif mood.name() == "offline" and \ len(chums) > 0: @@ -791,8 +546,6 @@ class chumArea(RightClickTree): for c in chums: oldmood = c.mood c.setMood(mood) - if self.mainwindow.config.showOnlineNumbers(): - self.showOnlineNumbers() return oldmood def updateColor(self, handle, color): chums = self.findItems(handle, QtCore.Qt.MatchFlags(0)) @@ -809,27 +562,14 @@ class chumArea(RightClickTree): self.removechum.setText(theme["main/menus/rclickchumlist/removechum"]) self.blockchum.setText(theme["main/menus/rclickchumlist/blockchum"]) self.logchum.setText(theme["main/menus/rclickchumlist/viewlog"]) - self.removegroup.setText(theme["main/menus/rclickchumlist/removegroup"]) - self.renamegroup.setText(theme["main/menus/rclickchumlist/renamegroup"]) - self.moveMenu.setTitle(theme["main/menus/rclickchumlist/movechum"]) def changeTheme(self, theme): self.initTheme(theme) - chumlistings = [] - for i in range(self.topLevelItemCount()): - for j in range(self.topLevelItem(i).childCount()): - chumlistings.append(self.topLevelItem(i).child(j)) - #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: c.changeTheme(theme) - - def count(self): - c = 0 - for i in range(self.topLevelItemCount()): - c = c + self.topLevelItem(i).childCount() - return c @QtCore.pyqtSlot() def activateChum(self): - self.itemActivated.emit(self.currentItem(), 0) + self.itemActivated.emit(self.currentItem()) @QtCore.pyqtSlot() def removeChum(self, handle = None): if handle: @@ -841,7 +581,7 @@ class chumArea(RightClickTree): currentChum = self.currentItem().chum self.chums = [c for c in self.chums if c.handle != currentChum.handle] self.removeChumSignal.emit(self.currentItem().chum.handle) - oldlist = self.takeItem(self.currentItem()) + oldlist = self.takeItem(self.currentRow()) del oldlist @QtCore.pyqtSlot() def blockChum(self): @@ -850,8 +590,20 @@ class chumArea(RightClickTree): return self.blockChumSignal.emit(self.currentItem().chum.handle) @QtCore.pyqtSlot() + def reportChum(self): + currentChum = self.currentItem() + if not currentChum: + return + self.mainwindow.reportChum(self.currentItem().chum.handle) + @QtCore.pyqtSlot() + def findAlts(self): + currentChum = self.currentItem() + if not currentChum: + return + self.mainwindow.sendMessage.emit("ALT %s" % (currentChum.chum.handle) , "calSprite") + @QtCore.pyqtSlot() def openChumLogs(self): - currentChum = self.currentItem().text(0) + currentChum = self.currentItem().text() if not currentChum: return self.pesterlogviewer = PesterLogViewer(currentChum, self.mainwindow.config, self.mainwindow.theme, self.mainwindow) @@ -866,67 +618,20 @@ class chumArea(RightClickTree): self.pesterlogviewer = None @QtCore.pyqtSlot() def renameGroup(self): - if not hasattr(self, 'renamegroupdialog'): - self.renamegroupdialog = None - if not self.renamegroupdialog: - (gname, ok) = QtGui.QInputDialog.getText(self, "Rename Group", "Enter a new name for the group:") - if ok: - gname = unicode(gname) - currentGroup = self.currentItem() - if not currentGroup: - return - index = self.indexOfTopLevelItem(currentGroup) - if index != -1: - expanded = currentGroup.isExpanded() - text = str(currentGroup.text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - self.mainwindow.config.delGroup(text) - self.mainwindow.config.addGroup(gname, expanded) - gTemp = self.mainwindow.config.getGroups() - self.groups = [g[0] for g in gTemp] - self.openGroups = [g[1] for g in gTemp] - for i in range(currentGroup.childCount()): - currentGroup.child(i).chum.group = gname - self.mainwindow.chumdb.setGroup(currentGroup.child(i).chum.handle, gname) - currentGroup.setText(0, gname) - if self.mainwindow.config.showOnlineNumbers(): - self.showOnlineNumbers() - self.renamegroupdialog = None + (gname, ok) = QtGui.QInputDialog.getText(self, "Rename Group", "Enter a new name for the group:") + if ok: + pass + #rename group + @QtCore.pyqtSlot() def removeGroup(self): - currentGroup = self.currentItem() - if not currentGroup: - return - text = str(currentGroup.text(0)) - if text.rfind(" ") != -1: - text = text[0:text.rfind(" ")] - self.mainwindow.config.delGroup(text) - gTemp = self.mainwindow.config.getGroups() - self.groups = [g[0] for g in gTemp] - self.openGroups = [g[1] for g in gTemp] - for i in range(self.topLevelItemCount()): - if self.topLevelItem(i).text(0) == currentGroup.text(0): - break - while self.topLevelItem(i) and self.topLevelItem(i).child(0): - chumLabel = self.topLevelItem(i).child(0) - chumLabel.chum.group = "Chums" - self.mainwindow.chumdb.setGroup(chumLabel.chum.handle, "Chums") - self.takeItem(chumLabel) - self.addItem(chumLabel) - self.takeTopLevelItem(i) + pass + #remove group + @QtCore.pyqtSlot(QtGui.QAction) def moveToGroup(self, item): - if not item: - return - group = str(item.text()) - chumLabel = self.currentItem() - if not chumLabel: - return - chumLabel.chum.group = group - self.mainwindow.chumdb.setGroup(chumLabel.chum.handle, group) - self.takeItem(chumLabel) - self.addItem(chumLabel) + pass + #move to group removeChumSignal = QtCore.pyqtSignal(QtCore.QString) blockChumSignal = QtCore.pyqtSignal(QtCore.QString) @@ -938,34 +643,19 @@ class trollSlum(chumArea): theme = self.mainwindow.theme self.setStyleSheet(theme["main/trollslum/chumroll/style"]) self.chums = trolls - child_1 = QtGui.QTreeWidgetItem([""]) - self.addTopLevelItem(child_1) - child_1.setExpanded(True) for c in self.chums: chandle = c.handle if not self.findItems(chandle, QtCore.Qt.MatchFlags(0)): chumLabel = chumListing(c, self.mainwindow) self.addItem(chumLabel) - self.setSortingEnabled(False) - self.header().hide() - self.setDropIndicatorShown(False) - self.setIndentation(0) - self.optionsMenu = QtGui.QMenu(self) self.unblockchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/unblockchum"], self) self.connect(self.unblockchum, QtCore.SIGNAL('triggered()'), self, QtCore.SIGNAL('unblockChumSignal()')) self.optionsMenu.addAction(self.unblockchum) - #self.sortItems() - def contextMenuEvent(self, event): - #fuckin Qt - if event.reason() == QtGui.QContextMenuEvent.Mouse: - listing = self.itemAt(event.pos()) - self.setCurrentItem(listing) - if self.currentItem().text(0) != "": - self.optionsMenu.popup(event.globalPos()) + self.sortItems() def changeTheme(self, theme): self.setStyleSheet(theme["main/trollslum/chumroll/style"]) self.removechum.setText(theme["main/menus/rclickchumlist/removechum"]) @@ -1182,10 +872,6 @@ class PesterWindow(MovingWindow): self.logv = logv self.connect(logv, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('openLogv()')) - grps = QtGui.QAction(self.theme["main/menus/client/addgroup"], self) - self.grps = grps - self.connect(grps, QtCore.SIGNAL('triggered()'), - self, QtCore.SLOT('addGroupWindow()')) opts = QtGui.QAction(self.theme["main/menus/client/options"], self) self.opts = opts self.connect(opts, QtCore.SIGNAL('triggered()'), @@ -1222,7 +908,6 @@ class PesterWindow(MovingWindow): filemenu.addAction(logv) filemenu.addAction(userlistaction) filemenu.addAction(self.idleaction) - filemenu.addAction(grps) filemenu.addAction(self.importaction) filemenu.addAction(self.reconnectAction) filemenu.addAction(exitaction) @@ -1261,15 +946,18 @@ class PesterWindow(MovingWindow): self.aboutAction = QtGui.QAction(self.theme["main/menus/help/about"], self) self.connect(self.aboutAction, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('aboutPesterchum()')) + self.botAction = QtGui.QAction("CALSPRITE", self) + self.connect(self.botAction, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('loadCalsprite()')) self.helpAction = QtGui.QAction("HELP", self) self.connect(self.helpAction, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('launchHelp()')) helpmenu = self.menu.addMenu(self.theme["main/menus/help/_name"]) self.helpmenu = helpmenu self.helpmenu.addAction(self.helpAction) + self.helpmenu.addAction(self.botAction) self.helpmenu.addAction(self.aboutAction) - self.closeButton = WMButton(PesterIcon(self.theme["main/close/image"]), self) self.connect(self.closeButton, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT('closeToTray()')) @@ -1283,7 +971,7 @@ class PesterWindow(MovingWindow): chums = [PesterProfile(c, chumdb=self.chumdb) for c in set(self.config.chums())] self.chumList = chumArea(chums, self) self.connect(self.chumList, - QtCore.SIGNAL('itemActivated(QTreeWidgetItem *, int)'), + QtCore.SIGNAL('itemActivated(QListWidgetItem *)'), self, QtCore.SLOT('pesterSelectedChum()')) self.connect(self.chumList, @@ -1389,10 +1077,10 @@ class PesterWindow(MovingWindow): else: self.alarm.play() def newMemoMsg(self, chan, handle, msg): - if not self.memos.has_key(chan): + if not self.memos.has_key(chan.upper()): # silently ignore in case we forgot to /part return - memo = self.memos[chan] + memo = self.memos[chan.upper()] msg = unicode(msg) if not memo.times.has_key(handle): # new chum! time current @@ -1420,6 +1108,16 @@ class PesterWindow(MovingWindow): if hasattr(self, 'trollslum') and self.trollslum: self.trollslum.updateMood(handle, mood) def newConversation(self, chum, initiated=True): + if type(chum) in [str, unicode]: + matchingChums = [c for c in self.chumList.chums if c.handle == chum] + if len(matchingChums) > 0: + mood = matchingChums[0].mood + else: + mood = Mood(2) + chum = PesterProfile(chum, mood=mood, chumdb=self.chumdb) + if len(matchingChums) == 0: + self.moodRequest.emit(chum) + if self.convos.has_key(chum.handle): self.convos[chum.handle].showChat() return @@ -1450,8 +1148,8 @@ class PesterWindow(MovingWindow): def newMemo(self, channel, timestr, secret=False): if channel == "#pesterchum": return - if self.memos.has_key(channel): - self.memos[channel].showChat() + if self.memos.has_key(channel.upper()): + self.memos[channel.upper()].showChat() return # do slider dialog then set if self.config.tabs(): @@ -1472,7 +1170,7 @@ class PesterWindow(MovingWindow): QtCore.SIGNAL('userPresentSignal(QString, QString, QString)'), memoWindow, QtCore.SLOT('userPresentChange(QString, QString, QString)')) # chat client send memo open - self.memos[channel] = memoWindow + self.memos[channel.upper()] = memoWindow self.joinChannel.emit(channel) # race condition? self.secret = secret if self.secret: @@ -1519,7 +1217,6 @@ class PesterWindow(MovingWindow): # menus self.menu.move(*theme["main/menu/loc"]) self.logv.setText(theme["main/menus/client/logviewer"]) - self.grps.setText(theme["main/menus/client/addgroup"]) self.opts.setText(theme["main/menus/client/options"]) self.exitaction.setText(theme["main/menus/client/exit"]) self.userlistaction.setText(theme["main/menus/client/userlist"]) @@ -1674,12 +1371,7 @@ class PesterWindow(MovingWindow): def pesterSelectedChum(self): curChum = self.chumList.currentItem() if curChum: - text = str(curChum.text(0)) - if text.find(" ") != -1: - text = text[0:text.rfind(" ")] - if text not in self.chumList.groups and \ - text != "Chums": - self.newConversationWindow(curChum) + self.newConversationWindow(curChum) @QtCore.pyqtSlot(QtGui.QListWidgetItem) def newConversationWindow(self, chumlisting): # check chumdb @@ -1703,7 +1395,7 @@ class PesterWindow(MovingWindow): c = unicode(channel) self.chatlog.finish(c) self.leftChannel.emit(channel) - del self.memos[c] + del self.memos[c.upper()] @QtCore.pyqtSlot() def tabsClosed(self): del self.tabconvo @@ -1735,19 +1427,19 @@ class PesterWindow(MovingWindow): @QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString) def timeCommand(self, chan, handle, command): (c, h, cmd) = (unicode(chan), unicode(handle), unicode(command)) - if self.memos[c]: - self.memos[c].timeUpdate(h, cmd) + if self.memos[c.upper()]: + self.memos[c.upper()].timeUpdate(h, cmd) @QtCore.pyqtSlot(QtCore.QString, PesterList) def updateNames(self, channel, names): - c = unicode(channel) + c = unicode(channel).upper() # update name DB self.namesdb[c] = names # warn interested party of names self.namesUpdated.emit() @QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString) def userPresentUpdate(self, handle, channel, update): - c = unicode(channel) + c = unicode(channel).upper() n = unicode(handle) if update == "nick": l = n.split(":") @@ -1811,6 +1503,11 @@ class PesterWindow(MovingWindow): @QtCore.pyqtSlot(QtCore.QString) def removeChum(self, chumlisting): self.config.removeChum(chumlisting) + def reportChum(self, handle): + (reason, ok) = QtGui.QInputDialog.getText(self, "Report User", "Enter the reason you are reporting this user (optional):") + if ok: + self.sendMessage.emit("REPORT %s %s" % (handle, reason) , "calSprite") + @QtCore.pyqtSlot(QtCore.QString) def blockChum(self, handle): h = unicode(handle) @@ -1970,6 +1667,8 @@ class PesterWindow(MovingWindow): self, QtCore.SLOT('userListClose()')) self.connect(self.allusers, QtCore.SIGNAL('addChum(QString)'), self, QtCore.SLOT('userListAdd(QString)')) + self.connect(self.allusers, QtCore.SIGNAL('pesterChum(QString)'), + self, QtCore.SLOT('userListPester(QString)')) self.requestNames.emit("#pesterchum") self.allusers.show() @@ -1978,6 +1677,10 @@ class PesterWindow(MovingWindow): h = unicode(handle) chum = PesterProfile(h, chumdb=self.chumdb) self.addChum(chum) + @QtCore.pyqtSlot(QtCore.QString) + def userListPester(self, handle): + h = unicode(handle) + self.newConversation(h) @QtCore.pyqtSlot() def userListClose(self): self.allusers = None @@ -2020,25 +1723,6 @@ class PesterWindow(MovingWindow): def closeLogUsers(self): self.logusermenu.close() self.logusermenu = None - - @QtCore.pyqtSlot() - def addGroupWindow(self): - if not hasattr(self, 'addgroupdialog'): - self.addgroupdialog = None - if not self.addgroupdialog: - (gname, ok) = QtGui.QInputDialog.getText(self, "Add Group", "Enter a name for the new group:") - if ok: - gname = unicode(gname) - self.config.addGroup(gname) - gTemp = self.config.getGroups() - self.chumList.groups = [g[0] for g in gTemp] - self.chumList.openGroups = [g[1] for g in gTemp] - self.chumList.showAllGroups() - if not self.config.showEmptyGroups(): - self.chumList.hideEmptyGroups() - - self.addgroupdialog = None - @QtCore.pyqtSlot() def openOpts(self): if not hasattr(self, 'optionmenu'): @@ -2120,24 +1804,6 @@ class PesterWindow(MovingWindow): self.config.set("time12Format", False) secondssetting = self.optionmenu.secondscheck.isChecked() self.config.set("showSeconds", secondssetting) - # groups - #groupssetting = self.optionmenu.groupscheck.isChecked() - #self.config.set("useGroups", groupssetting) - emptygroupssetting = self.optionmenu.showemptycheck.isChecked() - curemptygroup = self.config.showEmptyGroups() - if curemptygroup and not emptygroupssetting: - self.chumList.hideEmptyGroups() - elif emptygroupssetting and not curemptygroup: - self.chumList.showAllGroups() - self.config.set("emptyGroups", emptygroupssetting) - # online numbers - onlinenumsetting = self.optionmenu.showonlinenumbers.isChecked() - curonlinenum = self.config.showOnlineNumbers() - if onlinenumsetting and not curonlinenum: - self.chumList.showOnlineNumbers() - elif curonlinenum and not onlinenumsetting: - self.chumList.hideOnlineNumbers() - self.config.set("onlineNumbers", onlinenumsetting) self.optionmenu = None @QtCore.pyqtSlot() @@ -2245,6 +1911,9 @@ class PesterWindow(MovingWindow): self.aboutwindow.exec_() self.aboutwindow = None @QtCore.pyqtSlot() + def loadCalsprite(self): + self.newConversation("calSprite") + @QtCore.pyqtSlot() def launchHelp(self): QtGui.QDesktopServices.openUrl(QtCore.QUrl("http://nova.xzibition.com/~illuminatedwax/help.html", QtCore.QUrl.TolerantMode)) diff --git a/readme.txt b/readme.txt index c6f5da7..6304041 100644 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,21 @@ -Welcome to Pesterchum 3.14! +Welcome to Pesterchum 3.14.1! + +WHAT'S NEW? +----------- +* Quirks now have a lower(), scramble(), and reverse() function! +* Timestamps - check your Config! +* Logviewer - View logs right in Pesterchum! +* Quirk ordering - order your quirks so they work right! +* # of users in a memo - You can now see how many users are in a memo. +* @links to users - typing @ before user's name creates a link + that will pester them! +* Support for REPORT and ALT to calSprite built in - + If someone is bothering you, or a canon handle is idle, or + for whatever reason, right click their name and go to "Report" + to report them to a moderator. + If you want to talk to an alt canon handle, just right click + the username! + if you have an alt handle, register it with calSprite! Here's some tips to help you get started: @@ -59,6 +76,44 @@ list later on in this readme. FA% --- +Q: Norton says it has a virus and then deletes it! +A: Read this helpful Norton FAQ: + +Alright, here's a guide to by-passing Norton: +First, to download Pesterchum: +1: Make sure you're on a Moderator account. Moreso for the Norton steps than these ones. +2: Download the .zip file, not the .exe file. +3: Unzip the .zip file onto memory. Pesterchum should now be installed. + +Now, to by-pass Norton: +1: Make sure you're still on a moderator account. +2: Open up Norton. +3: Click on 'Settings' up in the upperright hand corner. +4: Click on 'Anitivirus', off to the upper left. It has a small image of a needle or something similar off to it's side. +5: There's a word that reads 'SONAR protection' halfway to the bottomleft. Off to it's right, there's a bar that's half green. Click on the bar. +6: It will warn you about turning off SONAR. Have it set to turn back on when the system restarts. +7: If done properly, the background for the main page of Norton(what you saw on steps 2-3) has turned an apocaliptic red. Feel free to close Norton now. Keep in mind to stay off suspicious online sites now. +8: Open up Pesterchum, and let the chummy convos begin. + +When finished: +First, Log off of Pesterchum. LOG OFF, NOT CLOSE IT. +Then, you can either shut off your comp, and Norton will re-enable SONAR, or you can repeat steps 1-5, except turning the red bar green. If done right, Norton will be it's happy color again. +Keep in mind that you must repeat all of this(other than the download) every time you want to get on Pesterchum. + +Hope this is helpful! + +(This guide brought to you by the slightly combined efforts of empireomega and Xanaomin) + +Q: I can't connect because my school/university/network/stolen wifi is blocking my connection! OR I can't seem to connect to the server at all and I'm not running any firewalls! +A: Edit your pesterchum.js file. Open it up in notepad or something, and then edit the beginning so it looks like this: + +{"port": "1413", .... + +where the .... is the rest of the gobbledygook there. + +Q: The mood buttons on Pesterchum 6.0 don't match up to what it sets your mood to! What gives? +A: The mood names are just there to look canon. It is intentional. + Q: I'm appearing as offline to 2.5 users/other users appear the wrong mood? What's happeninggggg A: The 2.5 people decided to change the mood protocol. When I made @@ -274,6 +329,12 @@ PC will save your color, quirks, and theme for that profile. Chumrolls and block lists are the same for all profiles. Feel free to have multiple instances of PC running on two or more handles! +CALSPRITE +--------- +calSprite is the bot that helps moderate canon handle usage! Simply pester +calSprite with the world "HELP" (turn your quirks off!) and you +will get instructions on how to use calSprite! + QUIRKS ------ There are six kinds of quirks! I'll teach you how to use them all! diff --git a/smilies/discontent.png b/smilies/discontent.png new file mode 100644 index 0000000..546a2eb Binary files /dev/null and b/smilies/discontent.png differ diff --git a/smilies/perky.png b/smilies/perky.png index 2b24953..608ec74 100644 Binary files a/smilies/perky.png and b/smilies/perky.png differ diff --git a/themes/enamel/style.js b/themes/enamel/style.js index 6536989..cc0c1aa 100644 --- a/themes/enamel/style.js +++ b/themes/enamel/style.js @@ -20,10 +20,9 @@ "memos": "Memos", "logviewer": "Pesterlogs", "userlist": "Userlist", - "addgroup": "Add Group", "import": "Import", "reconnect": "Reconnect", - "idle": "Idle", + "idle": "Idle", "exit": "Exit"}, "profile": {"_name": "Profile", "switch": "Switch", @@ -36,12 +35,10 @@ "rclickchumlist": {"pester": "Pester", "removechum": "Remove Chum", "blockchum": "Block", + "report": "Report", "addchum": "Add Chum", "viewlog": "View Pesterlog", "unblockchum": "Unblock", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Ban User", "opuser": "Make OP", "quirksoff": "Quirks Off" @@ -58,7 +55,7 @@ "loc": [440, 211], "size": [289, 275], "userlistcolor": "black", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.gif", "color": "black" }, @@ -66,7 +63,7 @@ "offline": { "icon": "$path/offline.gif", "color": "#9d9d9d"}, - + "pleasant": { "icon": "$path/pleasant.gif", "color": "black" }, "distraught": { "icon": "$path/distraught.gif", "color": "black" }, @@ -94,7 +91,7 @@ "devious": { "icon": "$path/devious.gif", "color": "red" }, "sleek": { "icon": "$path/sleek.gif", "color": "red" }, - + "detestful": { "icon": "$path/detestful.gif", "color": "red" }, "mirthful": { "icon": "$path/mirthful.gif", "color": "red" }, @@ -113,7 +110,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Century Gothic'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -131,7 +128,7 @@ "text": "" }, "currentMood": [1500, 1500] }, - "defaultwindow": { "style": "background: #fdb302; font-family:'Century Gothic';font:bold;selection-background-color:#919191; " + "defaultwindow": { "style": "background: #fdb302; font-family:'Century Gothic';font:bold;selection-background-color:#919191; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:0px; color: rgba(0, 0, 0, 0%);", "loc": [443,144], @@ -151,82 +148,82 @@ }, "defaultmood": 0, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "" - }, + "loc": [20, 430], + "text": "" + }, "moods": [ - { "style": "background-image:url($path/mood1.png); border:0px;", - "selected": "background-image:url($path/mood1c.png); border:0px;", - "loc": [0, 258], - "size": [100,110], - "text": "", - "icon": "", - "mood": 0 - }, - { "style": "background-image:url($path/mood2.png); border:0px;", - "selected": "background-image:url($path/mood2c.png); border:0px;", - "loc": [106, 258], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 19 - }, - { "style": "background-image:url($path/mood3.png); border:0px;", - "selected": "background-image:url($path/mood3c.png); border:0px;", - "loc": [212, 258], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 22 - }, - { "style": "background-image:url($path/mood4.png); border:0px;", - "selected": "background-image:url($path/mood4c.png); border:0px;", - "loc": [318, 258], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 4 - }, - { "style": "background-image:url($path/mood5.png); border:0px;", - "selected": "background-image:url($path/mood5c.png); border:0px;", - "loc": [0, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 3 - }, - { "style": "background-image:url($path/mood6.png); border:0px;", - "selected": "background-image:url($path/mood6c.png); border:0px;", - "loc": [106, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 20 - }, - { "style": "background-image:url($path/mood7.png); border:0px;", - "selected": "background-image:url($path/mood7c.png); border:0px;", - "loc": [212, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 5 - }, - { "style": "background-image:url($path/mood8.png); border:0px;", - "selected": "background-image:url($path/mood8c.png); border:0px;", - "loc": [318, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 1 - }, - { "style": "border:0px;", - "selected": "border:0px;", - "loc": [0, 0], - "size": [100, 100], - "text": "", - "icon": "", - "mood": 2 - } + { "style": "background-image:url($path/mood1.png); border:0px;", + "selected": "background-image:url($path/mood1c.png); border:0px;", + "loc": [0, 258], + "size": [100,110], + "text": "", + "icon": "", + "mood": 0 + }, + { "style": "background-image:url($path/mood2.png); border:0px;", + "selected": "background-image:url($path/mood2c.png); border:0px;", + "loc": [106, 258], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 19 + }, + { "style": "background-image:url($path/mood3.png); border:0px;", + "selected": "background-image:url($path/mood3c.png); border:0px;", + "loc": [212, 258], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 22 + }, + { "style": "background-image:url($path/mood4.png); border:0px;", + "selected": "background-image:url($path/mood4c.png); border:0px;", + "loc": [318, 258], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 4 + }, + { "style": "background-image:url($path/mood5.png); border:0px;", + "selected": "background-image:url($path/mood5c.png); border:0px;", + "loc": [0, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 3 + }, + { "style": "background-image:url($path/mood6.png); border:0px;", + "selected": "background-image:url($path/mood6c.png); border:0px;", + "loc": [106, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 20 + }, + { "style": "background-image:url($path/mood7.png); border:0px;", + "selected": "background-image:url($path/mood7c.png); border:0px;", + "loc": [212, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 5 + }, + { "style": "background-image:url($path/mood8.png); border:0px;", + "selected": "background-image:url($path/mood8c.png); border:0px;", + "loc": [318, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 1 + }, + { "style": "border:0px;", + "selected": "border:0px;", + "loc": [0, 0], + "size": [100, 100], + "text": "", + "icon": "", + "mood": 2 + } ] }, "convo": @@ -234,7 +231,7 @@ "tabstyle": "background-color: #fdb302; font-family: 'Century Gothic'", "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "border-width: 5px; border-image:url($path/scrollbg.png) 5px; min-height:60px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -262,12 +259,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -282,7 +279,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "border-width: 5px; border-image:url($path/scrollbg.png) 5px; min-height:60px;", - "downarrow": "height:17px;border:0px;", + "downarrow": "height:17px;border:0px;", "darrowstyle": "image:url();", "uparrow": "height:17px;border:0px;", "uarrowstyle": "image:url();" @@ -299,20 +296,20 @@ "userlist": { "width": 150, "style": "border:2px solid #c48a00; background: white; font-family: 'Century Gothic';selection-background-color:#646464; font-size: 14px; margin-left:0px; margin-right:10px;" }, - "time": { "text": { "width": 75, - "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Century Gothic';font:bold;" + "time": { "text": { "width": 75, + "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Century Gothic';font:bold;" }, "slider": { "style": "border: 0px;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/smooth.png" } } -} +} \ No newline at end of file diff --git a/themes/gold/style.js b/themes/gold/style.js index d5cefa4..b8223be 100644 --- a/themes/gold/style.js +++ b/themes/gold/style.js @@ -16,16 +16,15 @@ "loc": [150,22] }, "sounds": { "alertsound": "$path/alarm.wav", - "ceasesound": "$path/cease.wav" }, + "ceasesound": "$path/cease.wav" }, "menus": {"client": {"_name": "Client", "options": "Options", "memos": "Memos", "logviewer": "Pesterlogs", "userlist": "Userlist", - "addgroup": "Add Group", "import": "Import", - "reconnect": "Reconnect", - "idle": "Idle", + "reconnect": "Reconnect", + "idle": "Idle", "exit": "Exit"}, "profile": {"_name": "Profile", "switch": "Switch", @@ -37,13 +36,11 @@ "about": "About" }, "rclickchumlist": {"pester": "Pester", "removechum": "Remove Chum", + "report": "Report", "blockchum": "Block", "addchum": "Add Chum", "viewlog": "View Pesterlog", "unblockchum": "Unblock", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Ban User", "opuser": "Make OP", "quirksoff": "Quirks Off" @@ -53,7 +50,7 @@ "loc": [123, 88], "size": [190, 65], "userlistcolor": "white", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "white" }, @@ -61,7 +58,7 @@ "offline": { "icon": "$path/offline.png", "color": "#bebebe"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "white" }, "distraught": { "icon": "$path/distraught.png", "color": "white" }, @@ -89,7 +86,7 @@ "devious": { "icon": "$path/devious.png", "color": "red" }, "sleek": { "icon": "$path/sleek.png", "color": "red" }, - + "detestful": { "icon": "$path/detestful.png", "color": "red" }, "mirthful": { "icon": "$path/mirthful.png", "color": "red" }, @@ -108,7 +105,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Arial'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -126,7 +123,7 @@ "text": "" }, "currentMood": [129, 176] }, - "defaultwindow": { "style": "background: #fdb302; font-family:'Arial';font:bold;selection-background-color:#919191; " + "defaultwindow": { "style": "background: #fdb302; font-family:'Arial';font:bold;selection-background-color:#919191; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:0px; color: rgba(0, 0, 0, 0%);", "loc": [25,0], @@ -146,90 +143,90 @@ }, "defaultmood": 0, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "MOODS" - }, + "loc": [20, 430], + "text": "MOODS" + }, "moods": [ - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck1.png); border:0px;", - "loc": [13, 204], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 0 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck2.png); border:0px;", - "loc": [13, 231], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 19 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck3.png); border:0px;", - "loc": [13, 258], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 20 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck4.png); border:0px;", - "loc": [116, 204], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 21 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck5.png); border:0px;", - "loc": [116, 231], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 22 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck6.png); border:0px;", - "loc": [116, 258], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 5 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck7.png); border:0px;", - "loc": [219, 204], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 6 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck8.png); border:0px;", - "loc": [219, 231], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 3 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck9.png); border:0px;", - "loc": [219, 258], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 1 - }, - { "style": "border:0px;", - "selected": "border:0px;", - "loc": [13, 175], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 2 - } + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck1.png); border:0px;", + "loc": [13, 204], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 0 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck2.png); border:0px;", + "loc": [13, 231], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 19 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck3.png); border:0px;", + "loc": [13, 258], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 20 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck4.png); border:0px;", + "loc": [116, 204], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 21 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck5.png); border:0px;", + "loc": [116, 231], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 22 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck6.png); border:0px;", + "loc": [116, 258], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 5 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck7.png); border:0px;", + "loc": [219, 204], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 6 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck8.png); border:0px;", + "loc": [219, 231], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 3 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck9.png); border:0px;", + "loc": [219, 258], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 1 + }, + { "style": "border:0px;", + "selected": "border:0px;", + "loc": [13, 175], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 2 + } ] }, "convo": @@ -237,7 +234,7 @@ "tabstyle": "background-color: #fdb302; font-family: 'Arial'", "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -267,12 +264,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -288,7 +285,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -305,20 +302,20 @@ "userlist": { "width": 150, "style": "border:2px solid #c48a00; background: white; font-family: 'Arial';selection-background-color:#646464; font-size: 14px; margin-left:0px; margin-right:10px;" }, - "time": { "text": { "width": 75, - "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Arial';font:bold;" + "time": { "text": { "width": 75, + "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Arial';font:bold;" }, "slider": { "style": "border: 0px;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/smooth.png" } } -} +} \ No newline at end of file diff --git a/themes/pesterchum/style.js b/themes/pesterchum/style.js index e000af4..35127de 100644 --- a/themes/pesterchum/style.js +++ b/themes/pesterchum/style.js @@ -16,16 +16,15 @@ "loc": [10,0] }, "sounds": { "alertsound": "$path/alarm.wav", - "ceasesound": "$path/cease.wav" }, + "ceasesound": "$path/cease.wav" }, "menus": {"client": {"_name": "CLIENT", "options": "OPTIONS", "memos": "MEMOS", "logviewer": "PESTERLOGS", "userlist": "USERLIST", - "addgroup": "ADD GROUP", "import": "IMPORT", "reconnect": "RECONNECT", - "idle": "IDLE", + "idle": "IDLE", "exit": "EXIT"}, "profile": {"_name": "PROFILE", "switch": "SWITCH", @@ -37,13 +36,11 @@ "about": "ABOUT" }, "rclickchumlist": {"pester": "PESTER", "removechum": "REMOVE CHUM", + "report": "REPORT", "blockchum": "BLOCK", "addchum": "ADD CHUM", "viewlog": "VIEW PESTERLOG", "unblockchum": "UNBLOCK", - "removegroup": "REMOVE GROUP", - "renamegroup": "RENAME GROUP", - "movechum": "MOVE TO", "banuser": "BAN USER", "opuser": "MAKE OP", "quirksoff": "QUIRKS OFF" @@ -53,7 +50,7 @@ "loc": [12, 117], "size": [209, 82], "userlistcolor": "white", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "white" }, @@ -61,7 +58,7 @@ "offline": { "icon": "$path/offline.png", "color": "#646464"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "white" }, "distraught": { "icon": "$path/distraught.png", "color": "white" }, @@ -89,7 +86,7 @@ "devious": { "icon": "$path/devious.png", "color": "red" }, "sleek": { "icon": "$path/sleek.png", "color": "red" }, - + "detestful": { "icon": "$path/detestful.png", "color": "red" }, "mirthful": { "icon": "$path/mirthful.png", "color": "red" }, @@ -108,7 +105,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Courier'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -126,7 +123,7 @@ "text": "" }, "currentMood": [18, 249] }, - "defaultwindow": { "style": "background: #fdb302; font-family:'Courier';font:bold;selection-background-color:#919191; " + "defaultwindow": { "style": "background: #fdb302; font-family:'Courier';font:bold;selection-background-color:#919191; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(0, 0, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", @@ -140,7 +137,7 @@ "size": [71, 22], "text": "" }, - "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", + "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", "loc": [81,202], "size": [71, 22], @@ -148,73 +145,73 @@ }, "defaultmood": 0, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "MOODS" - }, + "loc": [20, 430], + "text": "MOODS" + }, "moods": [ - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 288], - "size": [104, 22], - "text": "CHUMMY", - "icon": "$path/chummy.png", - "mood": 0 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 308], - "size": [104, 22], - "text": "PALSY", - "icon": "$path/chummy.png", - "mood": 3 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck3.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 328], - "size": [104, 22], - "text": "CHIPPER", - "icon": "$path/chummy.png", - "mood": 4 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [117, 288], - "size": [104, 22], - "text": "BULLY", - "icon": "$path/chummy.png", - "mood": 5 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [117, 308], - "size": [104, 22], - "text": "PEPPY", - "icon": "$path/chummy.png", - "mood": 6 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck4.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [117, 328], - "size": [104, 22], - "text": "RANCOROUS", - "icon": "$path/rancorous.png", - "mood": 1 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck5.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 348], - "size": [209, 22], - "text": "ABSCOND", - "icon": "", - "mood": 2 - } + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 288], + "size": [104, 22], + "text": "CHUMMY", + "icon": "$path/chummy.png", + "mood": 0 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 308], + "size": [104, 22], + "text": "PALSY", + "icon": "$path/chummy.png", + "mood": 3 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck3.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 328], + "size": [104, 22], + "text": "CHIPPER", + "icon": "$path/chummy.png", + "mood": 4 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [117, 288], + "size": [104, 22], + "text": "BULLY", + "icon": "$path/chummy.png", + "mood": 5 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [117, 308], + "size": [104, 22], + "text": "PEPPY", + "icon": "$path/chummy.png", + "mood": 6 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck4.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [117, 328], + "size": [104, 22], + "text": "RANCOROUS", + "icon": "$path/rancorous.png", + "mood": 1 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck5.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 348], + "size": [209, 22], + "text": "ABSCOND", + "icon": "", + "mood": 2 + } ] }, "convo": {"style": "background-color: #fdb302;background-image:url($path/convobg.png);background-repeat: no-repeat; border:2px solid yellow; font-family: 'Courier'", "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: white; border:2px solid #c48a00;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -234,7 +231,7 @@ "style": "background: white; border:2px solid #c48a00;margin-top:5px; margin-right:10px; margin-left:10px; font-size: 12px;font-family: 'Courier'" }, "tabwindow" : { - "style": "background-color:#fdb302;border:0px" + "style": "background-color:#fdb302;border:0px" }, "tabs": { "style": "background-color: #7f7f7f; font-family: 'Courier';font:bold;font-size:12px;min-height:25px;", @@ -247,12 +244,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -268,7 +265,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -285,20 +282,20 @@ "userlist": { "width": 150, "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, - "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;" + "time": { "text": { "width": 75, + "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;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font: bold; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font: bold; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/op.png" } } -} +} \ No newline at end of file diff --git a/themes/trollian/style.js b/themes/trollian/style.js index 86f4902..ac22821 100644 --- a/themes/trollian/style.js +++ b/themes/trollian/style.js @@ -21,10 +21,8 @@ "memos": "Memos", "logviewer": "Pesterlogs", "userlist": "Fresh Targets", - "addgroup": "Add Group", "import": "import U2;", - "reconnect": "Reconnect", - "idle": "Idle", + "idle": "Idle", "exit": "Abscond"}, "profile": {"_name": "View", "switch": "Trolltag", @@ -36,13 +34,11 @@ "about": "About" }, "rclickchumlist": {"pester": "Troll", "removechum": "Trash", + "report": "Remove", "blockchum": "Block", "addchum": "Add Chump", "viewlog": "View Pesterlog", "unblockchum": "Mercy", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Ban", "opuser": "Promote", "quirksoff": "Quirks Off" } @@ -59,50 +55,50 @@ "size": [171, 357], "userlistcolor": "black", "moods": { - + "chummy": { "icon": "$path/chummy.png", "color": "#63ea00" }, - + "rancorous": { "icon": "$path/rancorous.png", "color": "#7f7f7f" }, - + "offline": { "icon": "$path/offline.png", "color": "black"}, - - + + "pleasant": { "icon": "$path/pleasant.png", "color": "#d69df8" }, - + "distraught": { "icon": "$path/distraught.png", "color": "#706eba" }, - + "pranky": { "icon": "$path/pranky.png", "color": "blue" }, - - + + "smooth": { "icon": "$path/smooth.png", "color": "red" }, - - + + "ecstatic": { "icon": "$path/ecstatic.png", "color": "#99004d" }, - + "relaxed": { "icon": "$path/relaxed.png", "color": "#078446" }, - + "discontent": { "icon": "$path/discontent.png", "color": "#a75403" }, - + "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" }, - + "blocked": { "icon": "$path/blocked.png", "color": "black" } - + } }, "trollslum": { @@ -241,7 +237,7 @@ "icon": "", "mood": 7 }, - + { "style": "border:0px;color: rgba(0, 0, 0, 0%);", "selected": "border:0px; color: rgba(0, 0, 0, 0%);", "loc": [12, 117], @@ -271,7 +267,7 @@ "style": "background: white;margin-top:5px; border:1px solid #c2c2c2; margin-right: 54px; font-size: 12px; height: 19px;" }, "tabwindow" : { - "style": "background: rgb(190, 19, 4); font-family: 'Arial'" + "style": "background: rgb(190, 19, 4); font-family: 'Arial'" }, "tabs": { "style": "", @@ -317,15 +313,15 @@ "userlist": { "width": 125, "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, - "style": "color: black; font:bold; border:1px solid #c2c2c2; background: white; height: 19px;" + "time": { "text": { "width": 75, + "style": "color: black; font:bold; border:1px solid #c2c2c2; background: white; height: 19px;" }, "slider": { "style": " border:1px solid #c2c2c2;", "groove": "border-image:url($path/timeslider.png);", "handle": "image:url($path/acceptant.png);" }, - "buttons": { "style": "border:1px solid #a68168; height: 17px; width: 50px; color: #cd8f9d; font-family: 'Arial'; background: rgb(190, 19, 4); margin-left: 2px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "border:1px solid #a68168; height: 17px; width: 50px; color: #cd8f9d; font-family: 'Arial'; background: rgb(190, 19, 4); margin-left: 2px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", "style": "width: 19px; height: 19px; border:0px; margin-left: 2px;" } @@ -333,4 +329,4 @@ "systemMsgColor": "#646464", "op": { "icon": "$path/op.png" } } -} +} \ No newline at end of file diff --git a/themes/trollian2.5/style.js b/themes/trollian2.5/style.js index cf3c96e..bcd3288 100644 --- a/themes/trollian2.5/style.js +++ b/themes/trollian2.5/style.js @@ -180,7 +180,7 @@ }, "buttons": { "style": "color: black; font: bold; border: 2px solid #780000; font: bold; font-size: 12px; background: #e5000f; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" } }, - + "tabwindow": { "style": "" }, "tabs": { "style": "", "selectedstyle": "", diff --git a/themes/typewriter/style.js b/themes/typewriter/style.js index 996c106..13306f0 100644 --- a/themes/typewriter/style.js +++ b/themes/typewriter/style.js @@ -16,16 +16,15 @@ "loc": [43,220] }, "sounds": { "alertsound": "$path/alarm.wav", - "ceasesound": "$path/cease.wav" }, + "ceasesound": "$path/cease.wav" }, "menus": {"client": {"_name": "Typewriter", "options": "Preferences", "memos": "Bulletin Boards", "logviewer": "Pesterlogs", "userlist": "Userlist", - "addgroup": "Add Group", "import": "Import", - "idle": "Idle", - "reconnect": "Reconnect", + "idle": "Idle", + "reconnect": "Reconnect", "exit": "Cease"}, "profile": {"_name": "Ink", "switch": "Alias", @@ -37,13 +36,11 @@ "about": "About" }, "rclickchumlist": {"pester": "Converse", "removechum": "Erase User", + "report": "Report User", "blockchum": "Condemn", "addchum": "Add User", "viewlog": "View Pesterlog", "unblockchum": "Forgive", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Expel User", "opuser": "Promote", "quirksoff": "Quirks Off" @@ -53,7 +50,7 @@ "loc": [70, 20], "size": [175,100], "userlistcolor": "black", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "black" }, @@ -61,7 +58,7 @@ "offline": { "icon": "$path/offline.png", "color": "#646464"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "black" }, "distraught": { "icon": "$path/distraught.png", "color": "black" }, @@ -89,7 +86,7 @@ "devious": { "icon": "$path/devious.png", "color": "red" }, "sleek": { "icon": "$path/sleek.png", "color": "red" }, - + "detestful": { "icon": "$path/detestful.png", "color": "red" }, "mirthful": { "icon": "$path/mirthful.png", "color": "red" }, @@ -108,7 +105,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #bebebe; border:2px solid black; font-family: 'Courier'", "size": [195, 200], "label": { "text": "Ruffians", @@ -126,7 +123,7 @@ "text": "" }, "currentMood": [0, 0] }, - "defaultwindow": { "style": "background: #bebebe; font-family:'Courier';font:bold;selection-background-color: black; " + "defaultwindow": { "style": "background: #bebebe; font-family:'Courier';font:bold;selection-background-color: black; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:0px solid #c48a00; font: bold; color: rgba(0, 0, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", @@ -140,7 +137,7 @@ "size": [70, 15], "text": "" }, - "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", + "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", "loc": [0,0], "size": [0, 0], @@ -148,26 +145,26 @@ }, "defaultmood": 18, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "MOODS" - }, + "loc": [20, 430], + "text": "MOODS" + }, "moods": [ - { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [95, 323], - "size": [62, 9], - "text": "", - "icon": "", - "mood": 18 - }, - { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [165, 323], - "size": [70, 9], - "text": "", - "icon": "", - "mood": 2 - } + { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [95, 323], + "size": [62, 9], + "text": "", + "icon": "", + "mood": 18 + }, + { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [165, 323], + "size": [70, 9], + "text": "", + "icon": "", + "mood": 2 + } ] }, "convo": @@ -198,12 +195,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -219,7 +216,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:black;min-height:20px;", - "downarrow": "height:17px;border:0px;", + "downarrow": "height:17px;border:0px;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -236,20 +233,20 @@ "userlist": { "width": 150, "style": "border:2px solid black; background: white;font: bold;font-family: 'Courier';selection-background-color:black; font-size: 12px; margin-left:0px; margin-right:10px;" }, - "time": { "text": { "width": 75, - "style": " border: 2px solid black; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;" + "time": { "text": { "width": 75, + "style": " border: 2px solid black; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;" }, "slider": { "style": "border: 0px;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid black; font: bold; font-size: 12px; background: white; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid black; font: bold; font-size: 12px; background: white; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/protective.png" } } -} +} \ No newline at end of file