diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index 193c47f..f3f52da 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -7,12 +7,22 @@ Visit https://github.com/illuminatedwax/pesterchum for git access and source cod CHANGELOG --------- -### 3.14b (idk on version number scheme) +### 3.14.2 * 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 + +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 \ No newline at end of file diff --git a/TODO b/TODO index 4363b88..a865abd 100644 --- a/TODO +++ b/TODO @@ -1,13 +1,20 @@ -o Bugs: -* 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: +* 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? @@ -16,10 +23,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..4c2b02b 100644 --- a/convo.py +++ b/convo.py @@ -9,7 +9,7 @@ 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 parsetools import convertTags, lexMessage, splitMessage, mecmd, colorBegin, colorEnd, img2smiley class PesterTabWindow(QtGui.QFrame): def __init__(self, mainwindow, parent=None, convo="convo"): @@ -350,7 +350,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() @@ -599,13 +599,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() 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..fd77ad6 100644 --- a/generic.py +++ b/generic.py @@ -37,13 +37,6 @@ class RightClickList(QtGui.QListWidget): 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()) - class MultiTextDialog(QtGui.QDialog): def __init__(self, title, parent, *queries): QtGui.QDialog.__init__(self, parent) 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 551caa0..1ffe9ef 100644 --- a/menus.py +++ b/menus.py @@ -544,10 +544,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) @@ -574,12 +570,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.ok = QtGui.QPushButton("OK", self) self.ok.setDefault(True) self.connect(self.ok, QtCore.SIGNAL('clicked()'), @@ -595,9 +585,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(hr) layout_0.addWidget(self.timestampcheck) layout_0.addWidget(self.timestampBox) layout_0.addWidget(self.secondscheck) diff --git a/parsetools.py b/parsetools.py index 67f79da..a495c93 100644 --- a/parsetools.py +++ b/parsetools.py @@ -131,6 +131,8 @@ def lexMessage(string): (hyperlink, _urlre), (memolex, _memore), (smiley, _smilere)] + string = unicode(string) + string = string.replace("\n", " ").replace("\r", " ") lexed = lexer(unicode(string), lexlist) balanced = [] @@ -176,6 +178,41 @@ def convertTags(lexed, format="html"): return escaped +def splitMessage(msg, format="ctag"): + """Splits message if it is too long.""" + 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("</c>")) + 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 +253,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 +272,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 +282,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 b8dbeda..e255fa9 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"emptyGroups": false, "hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "openDefaultGroup": true, "groups": [], "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 +{"emptyGroups": false, "hideOfflineChums": true, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "openDefaultGroup": true, "groups": [], "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", "bluntInstrument", "sunilaSeed", "ghostBinoculars", "cosmicSailor", "alGore", "evacipatedBox", "nickServ", "nakNak", "calSprite", "fairytalePorn", "moonbaseAlpha", "binaryRabbitlover"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file diff --git a/pesterchum.py b/pesterchum.py index 1282cf1..5965023 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 @@ -78,10 +78,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")+"<br />" - 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")+"<br />" + 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 +134,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 +155,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,18 +267,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 addChum(self, chum): if chum.handle not in self.chums(): fp = open(self.filename) # what if we have two clients open?? @@ -321,25 +294,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): @@ -428,6 +382,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: @@ -453,9 +410,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 @@ -469,44 +426,32 @@ 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() - self.chumoptions = QtGui.QMenu(self) - self.groupoptions = QtGui.QMenu(self) - self.optionsMenu = self.chumoptions + self.optionsMenu = 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()')) @@ -519,83 +464,13 @@ 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.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.groupoptions.addAction(self.renamegroup) - self.groupoptions.addAction(self.removegroup) + self.optionsMenu.addAction(self.pester) + self.optionsMenu.addAction(self.logchum) + self.optionsMenu.addAction(self.blockchum) + self.optionsMenu.addAction(self.removechum) 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: - if item.text(0) == "Chums" or item.text(0) in self.groups: - group = item.text(0) - else: - group = item.parent().text(0) - chumLabel = event.source().currentItem() - chumLabel.chum.group = group - self.mainwindow.chumdb.setGroup(chumLabel.chum.handle, group) - self.takeItem(chumLabel) - self.addItem(chumLabel) - - def chumoptionsmenu(self): - self.optionsMenu = self.chumoptions - def groupoptionsmenu(self): - self.optionsMenu = self.groupoptions - def moveGroupMenu(self): - currentGroup = self.currentItem() - if currentGroup: - currentGroup = currentGroup.parent().text(0) - 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) - if self.currentItem().text(0) == "Chums" or \ - self.currentItem().text(0) in self.groups: - self.groupoptionsmenu() - else: - self.chumoptionsmenu() - self.moveGroupMenu() - self.optionsMenu.popup(event.globalPos()) - + self.sortItems() def addChum(self, chum): if len([c for c in self.chums if c.handle == chum.handle]) != 0: return @@ -604,95 +479,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()): - curgroups.append(self.topLevelItem(i).text(0)) - 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 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() - if item.text(0) in self.groups: - self.mainwindow.config.delGroup(str(item.text(0))) - expand = item.isExpanded() - self.mainwindow.config.addGroup(str(item.text(0)), not expand) - elif item.text(0) == "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: - 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.MatchFlags(0)): - 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()): - if self.topLevelItem(i).text(0) == 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) @@ -703,7 +512,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: @@ -729,27 +538,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: @@ -761,7 +557,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): @@ -771,7 +567,7 @@ class chumArea(RightClickTree): self.blockChumSignal.emit(self.currentItem().chum.handle) @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) @@ -786,59 +582,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() - self.mainwindow.config.delGroup(str(currentGroup.text(0))) - 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) - 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 - self.mainwindow.config.delGroup(currentGroup.text(0)) - 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) @@ -850,34 +607,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"]) @@ -1094,10 +836,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()'), @@ -1134,7 +872,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) @@ -1195,7 +932,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, @@ -1301,10 +1038,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 @@ -1362,8 +1099,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(): @@ -1384,7 +1121,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: @@ -1431,7 +1168,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"]) @@ -1586,9 +1322,7 @@ class PesterWindow(MovingWindow): def pesterSelectedChum(self): curChum = self.chumList.currentItem() if curChum: - if curChum.text(0) not in self.chumList.groups and \ - curChum.text(0) != "Chums": - self.newConversationWindow(curChum) + self.newConversationWindow(curChum) @QtCore.pyqtSlot(QtGui.QListWidgetItem) def newConversationWindow(self, chumlisting): # check chumdb @@ -1612,7 +1346,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 @@ -1644,19 +1378,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(":") @@ -1929,25 +1663,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'): @@ -2029,16 +1744,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) self.optionmenu = None @QtCore.pyqtSlot() diff --git a/themes/enamel/style.js b/themes/enamel/style.js index 6536989..07f8b06 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", @@ -39,9 +38,6 @@ "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 +54,7 @@ "loc": [440, 211], "size": [289, 275], "userlistcolor": "black", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.gif", "color": "black" }, @@ -66,7 +62,7 @@ "offline": { "icon": "$path/offline.gif", "color": "#9d9d9d"}, - + "pleasant": { "icon": "$path/pleasant.gif", "color": "black" }, "distraught": { "icon": "$path/distraught.gif", "color": "black" }, @@ -94,7 +90,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 +109,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Century Gothic'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -131,7 +127,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 +147,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 +230,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 +258,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 +278,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 +295,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..c7fb706 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", @@ -41,9 +40,6 @@ "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 +49,7 @@ "loc": [123, 88], "size": [190, 65], "userlistcolor": "white", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "white" }, @@ -61,7 +57,7 @@ "offline": { "icon": "$path/offline.png", "color": "#bebebe"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "white" }, "distraught": { "icon": "$path/distraught.png", "color": "white" }, @@ -89,7 +85,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 +104,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Arial'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -126,7 +122,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 +142,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 +233,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 +263,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 +284,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 +301,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..eb6e9db 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", @@ -41,9 +40,6 @@ "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 +49,7 @@ "loc": [12, 117], "size": [209, 82], "userlistcolor": "white", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "white" }, @@ -61,7 +57,7 @@ "offline": { "icon": "$path/offline.png", "color": "#646464"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "white" }, "distraught": { "icon": "$path/distraught.png", "color": "white" }, @@ -89,7 +85,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 +104,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Courier'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -126,7 +122,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 +136,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 +144,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 +230,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 +243,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 +264,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 +281,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..0ec8137 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", @@ -40,9 +38,6 @@ "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 +54,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 +236,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 +266,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 +312,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 +328,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..d478374 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..d141d74 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", @@ -41,9 +40,6 @@ "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 +49,7 @@ "loc": [70, 20], "size": [175,100], "userlistcolor": "black", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "black" }, @@ -61,7 +57,7 @@ "offline": { "icon": "$path/offline.png", "color": "#646464"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "black" }, "distraught": { "icon": "$path/distraught.png", "color": "black" }, @@ -89,7 +85,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 +104,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #bebebe; border:2px solid black; font-family: 'Courier'", "size": [195, 200], "label": { "text": "Ruffians", @@ -126,7 +122,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 +136,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 +144,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 +194,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 +215,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 +232,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