From 547fdb71b4bf1093b9c7a647bf11cbdfc2d68cb2 Mon Sep 17 00:00:00 2001 From: Stephen Dranger Date: Wed, 9 Feb 2011 00:26:23 -0600 Subject: [PATCH] fds --- TODO | 2 -- convo.py | 20 ++++++++++-- convo.pyc | Bin 22673 -> 23317 bytes dataobjs.py | 31 +++++++++++------- dataobjs.pyc | Bin 9823 -> 11510 bytes generic.pyc | Bin 3575 -> 3575 bytes irc.pyc | Bin 13203 -> 13203 bytes logs/chums.js | 2 +- memos.py | 1 + memos.pyc | Bin 30967 -> 31005 bytes menus.py | 7 ++++ menus.pyc | Bin 20025 -> 20542 bytes oyoyo/__init__.pyc | Bin 333 -> 333 bytes oyoyo/client.pyc | Bin 9728 -> 9728 bytes oyoyo/cmdhandler.pyc | Bin 8312 -> 8312 bytes oyoyo/helpers.pyc | Bin 5013 -> 5013 bytes oyoyo/ircevents.pyc | Bin 5693 -> 5693 bytes oyoyo/parse.pyc | Bin 2869 -> 2869 bytes parsetools.pyc | Bin 6975 -> 6975 bytes pesterchum.js | 2 +- pesterchum.py | 64 ++++++++++++++++++++++++------------- themes/pesterchum/style.js | 2 ++ trayicon32.icns | Bin 0 -> 2420 bytes trayicon32.png | Bin 0 -> 3675 bytes 24 files changed, 92 insertions(+), 39 deletions(-) create mode 100644 trayicon32.icns create mode 100644 trayicon32.png diff --git a/TODO b/TODO index a7fcb93..1e4b410 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,5 @@ Features: * Tray doesn't disappear on windows after close -* comment history (up button) -* page up/down scrolling * System tray menu * troll colors * ctrl-tab should prefer new convos diff --git a/convo.py b/convo.py index 8ae2d46..345ff6c 100644 --- a/convo.py +++ b/convo.py @@ -2,7 +2,7 @@ from string import Template import re from PyQt4 import QtGui, QtCore -from dataobjs import PesterProfile, Mood +from dataobjs import PesterProfile, Mood, PesterHistory from generic import PesterIcon, RightClickList from parsetools import escapeBrackets, convertTags @@ -277,6 +277,20 @@ class PesterInput(QtGui.QLineEdit): def focusInEvent(self, event): self.parent().clearNewMessage() QtGui.QLineEdit.focusInEvent(self, event) + def keyPressEvent(self, event): + if event.key() == QtCore.Qt.Key_Up: + text = unicode(self.text()) + next = self.parent().history.next(text) + if next is not None: + self.setText(next) + elif event.key() == QtCore.Qt.Key_Down: + prev = self.parent().history.prev() + if prev is not None: + self.setText(prev) + elif event.key() in [QtCore.Qt.Key_PageUp, QtCore.Qt.Key_PageDown]: + self.parent().textArea.keyPressEvent(event) + QtGui.QLineEdit.keyPressEvent(self, event) + class PesterConvo(QtGui.QFrame): def __init__(self, chum, initiated, mainwindow, parent=None): @@ -343,7 +357,7 @@ class PesterConvo(QtGui.QFrame): self.textArea.append(convertTags(msg)) self.mainwindow.chatlog.log(self.title(), convertTags(msg, "bbcode")) self.newmessage = False - self.history = [] + self.history = PesterHistory() def title(self): return self.chum.handle @@ -411,6 +425,7 @@ class PesterConvo(QtGui.QFrame): def focusInEvent(self, event): self.clearNewMessage() self.textInput.setFocus() + def raiseChat(self): self.activateWindow() self.raise_() @@ -457,6 +472,7 @@ class PesterConvo(QtGui.QFrame): text = unicode(self.textInput.text()) if text == "": return + self.history.add(text) # deal with quirks here if self.applyquirks: qtext = self.mainwindow.userprofile.quirks.apply(text) diff --git a/convo.pyc b/convo.pyc index 5444dee5b9de08d524c4703d868eb82974e5382e..1c73f3b086037986f777ec4de09513e92830eb63 100644 GIT binary patch delta 5460 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 0: - self.current -= 1 return text def prev(self): - if self.current == -1 or self.current == len(self.history) - 1: - return "" self.current += 1 + if self.current >= len(self.history): + self.current = len(self.history) + return self.retrieve() return self.history[self.current] def reset(self): - self.current = len(self.history) - 1 + self.current = len(self.history) + self.saved = None + def save(self, text): + self.saved = text + def retrieve(self): + return self.saved def add(self, text): - self.history.append(text) - self.current = len(self.history) - 1 + if len(self.history) == 0 or text != self.history[len(self.history)-1]: + self.history.append(text) + self.reset() diff --git a/dataobjs.pyc b/dataobjs.pyc index a3409abde85b521824036fcb19cf69d9821bff05..50947cf69986bca7d56d215eac10fa258fcec3fa 100644 GIT binary patch delta 1229 zcmZWo&rcIk5T1FvEiAuU8d9x<7(mP#_27XZkr;&d;~=Q7C%72wu38Q)*%GU zqOcnO1&?y@s23AMOgtF>0RIOM-c0=FJ-UV1W~TFI=FQAE@9VGIf0l-S{O<2LF{&48 zbolAU?<^$#ygU4Ucz{BW9x??5+9KK{T3Q~Uz@e&N+&}n!W+LfF>fJC-!su2#PMXoP ztPmqICxvdNqkR`!fh!f3^AzNa(M3Vt7~Q0+eissJazjKx<{|NEs7FK_ME8jTHU?&~ z9!HF-FUgB_DDqvXL@GVDqZqsPB#OdDQqXrKnuCg0*27@WoonfFoc6_&ha&dytw}u* z2V#bJ00R@C1twTk)XWh}XSU8nnW#gXHabWq;L-+*iyIJRx^iF9Wd$U1(V-1(idLQj z7Xyeiv_R^z1YbtgFGb1ZdP~#`s6=221_ND>wOvX0G)XV@PPZi9z~Q6h4L}hWImZ*1a|Zw6nB!u3z^$30Mlfh%0%-pC5TU1Zkv z$Vzt*_9e$G(NBBbnR`(fhshWCVwsrGJYz)GS~!m1SJnWBK z6W;GQ7ePKemm%@wf3%an9kS`Ga(n~TVVl8pAQ(g>1`y=rqgFjJX delta 66 zcmewsdEZC+;wN6Nvl|0_lNq3Z14ugnaq)_Y(kob*8G<$VHr_j{!lc1BSzRY}@*!^9 P$>(&07zHLj)DZ>%j<;wN6N>6-o<*+1|C06yjh$^ZZW delta 16 Ycmew^{au><;wN6NuK9r**+1|C06|#?H2?qr diff --git a/irc.pyc b/irc.pyc index 62a8eb1dacfd9b430f6554df3ecd56d0d78e85b6..e4a65a510087af4df768c7fa422ef6360a2a92cd 100644 GIT binary patch delta 16 YcmbQ7J~^HJ;wN6NMfU?XviBGR06%gE9smFU delta 16 XcmbQ7J~^HJ;wN6NuK9r**?WuuJx>P5 diff --git a/logs/chums.js b/logs/chums.js index 2d32949..efaf589 100644 --- a/logs/chums.js +++ b/logs/chums.js @@ -1 +1 @@ -{"macruralAlchemist": {"color": "#700000", "handle": "macruralAlchemist", "mood": "offline"}, "lyricalKeraunoscopic": {"color": "#00c000", "handle": "lyricalKeraunoscopic", "mood": "offline"}, "fireSwallow": {"color": "#80bb9a", "handle": "fireSwallow", "mood": "offline"}, "aquaMarinist": {"color": "#00caca", "handle": "aquaMarinist", "mood": "offline"}, "nitroZealist": {"color": "#ff3737", "handle": "nitroZealist", "mood": "offline"}, "mechanicalSpectacle": {"color": "#0000ff", "handle": "mechanicalSpectacle", "mood": "offline"}, "greyscalePacifist": {"color": "#7f7f7f", "handle": "greyscalePacifist", "mood": "offline"}, "caffeinatedAnalyst": {"color": "#aa0000", "handle": "caffeinatedAnalyst", "mood": "offline"}, "iw": {"color": "#ff0000", "handle": "iw", "mood": "offline"}, "insipidTranscient": {"color": "#145064", "handle": "insipidTranscient", "mood": "offline"}, "pesterClient394": {"color": "#ff3737", "handle": "pesterClient394", "mood": "offline"}, "absoluteTranquility": {"color": "#000033", "handle": "absoluteTranquility", "mood": "offline"}, "centaursTesticle": {"color": "#000056", "handle": "centaursTesticle", "mood": "offline"}, "quintessentialArbalest": {"color": "#999999", "handle": "quintessentialArbalest", "mood": "offline"}, "agogPorphyry": {"color": "#522d80", "handle": "agogPorphyry", "mood": "offline"}, "DocScratch": {"color": "#ffffff", "handle": "DocScratch", "mood": "offline"}, "anguillaNuntia": {"color": "#ff007f", "handle": "anguillaNuntia", "mood": "offline"}, "aceIsm": {"color": "#ffcc66", "handle": "aceIsm", "mood": "offline"}, "apocalypseArisen": {"color": "#a10000", "handle": "apocalypseArisen", "mood": "offline"}, "radicalApologist": {"color": "#ffaa00", "handle": "radicalApologist", "mood": "offline"}, "microMachines": {"color": "#aa00ff", "handle": "microMachines", "mood": "offline"}, "uroborosUnbound": {"color": "#00416a", "handle": "uroborosUnbound", "mood": "offline"}, "arachnidsGrip": {"color": "#005682", "handle": "arachnidsGrip", "mood": "offline"}, "percipientPedestrian": {"color": "#00ffff", "handle": "percipientPedestrian", "mood": "offline"}, "tentacleTherapist": {"color": "#cc66ff", "handle": "tentacleTherapist", "mood": "offline"}, "gamblingGenocider": {"color": "#00ff00", "handle": "gamblingGenocider", "mood": "offline"}, "elegantDiversion": {"color": "#14b40a", "handle": "elegantDiversion", "mood": "offline"}, "moirailBunp": {"color": "#6a3d0f", "handle": "moirailBunp", "mood": "offline"}, "madLurker": {"color": "#000000", "handle": "madLurker", "mood": "offline"}, "testOut": {"color": "#c760cc", "handle": "testOut", "mood": "offline"}, "pesterClient3022": {"color": "#336600", "handle": "pesterClient3022", "mood": "offline"}, "hellerificJefferson": {"color": "#3300ff", "handle": "hellerificJefferson", "mood": "offline"}, "androidTechnician": {"color": "#0000ff", "handle": "androidTechnician", "mood": "offline"}, "recalcitrantDisaster": {"color": "#8b0068", "handle": "recalcitrantDisaster", "mood": "offline"}, "superGhost": {"color": "#800564", "handle": "superGhost", "mood": "offline"}, "arsenicCatnip": {"color": "#006400", "handle": "arsenicCatnip", "mood": "offline"}, "kaleidoscopicMind": {"color": "#ff6666", "handle": "kaleidoscopicMind", "mood": "offline"}, "aquaticMarinist": {"color": "#00caca", "handle": "aquaticMarinist", "mood": "offline"}, "captainCaveman": {"color": "#7c414e", "handle": "captainCaveman", "mood": "offline"}, "sucroseSaboteur": {"color": "#00e700", "handle": "sucroseSaboteur", "mood": "offline"}, "cuttlefishCuller": {"color": "#77003c", "handle": "cuttlefishCuller", "mood": "offline"}, "carcinoGeneticist": {"color": "#999999", "handle": "carcinoGeneticist", "mood": "offline"}, "masterG": {"color": "#77003c", "handle": "masterG", "mood": "offline"}, "plasmaModerator": {"color": "#5685cc", "handle": "plasmaModerator", "mood": "offline"}, "carcinoGenetecist": {"color": "#7f7f7f", "handle": "carcinoGenetecist", "mood": "offline"}, "remoteBloodbath": {"color": "#c70000", "handle": "remoteBloodbath", "mood": "offline"}, "oilslickOrchid": {"color": "#743f7e", "handle": "oilslickOrchid", "mood": "offline"}, "acapellaWaterfall": {"color": "#000099", "handle": "acapellaWaterfall", "mood": "offline"}, "rageInducer": {"color": "#00ffff", "handle": "rageInducer", "mood": "offline"}, "gallowsCalibrator": {"color": "#008282", "handle": "gallowsCalibrator", "mood": "offline"}, "greenZephyr": {"color": "#00ca40", "handle": "greenZephyr", "mood": "offline"}, "lawdEngrish": {"color": "#00ff00", "handle": "lawdEngrish", "mood": "offline"}, "adiosToreador": {"color": "#aa5500", "handle": "adiosToreador", "mood": "offline"}, "maxiumumFatness": {"color": "#3366ff", "handle": "maxiumumFatness", "mood": "offline"}, "schlagzeugGator": {"color": "#61821f", "handle": "schlagzeugGator", "mood": "offline"}, "metaliAggressive": {"color": "#9289d5", "handle": "metaliAggressive", "mood": "offline"}, "midnightSparrow": {"color": "#ff55ff", "handle": "midnightSparrow", "mood": "offline"}, "magmaExploiter": {"color": "#d90000", "handle": "magmaExploiter", "mood": "offline"}, "illuminatedWax": {"color": "#000000", "handle": "illuminatedWax", "mood": "offline"}, "zealousScarecrow": {"color": "#00c882", "handle": "zealousScarecrow", "mood": "offline"}, "gardenGnostic": {"color": "#00ff00", "handle": "gardenGnostic", "mood": "offline"}, "unknownTraveler": {"color": "#006666", "handle": "unknownTraveler", "mood": "offline"}, "utilitarianTurnabout": {"color": "#dd0000", "handle": "utilitarianTurnabout", "mood": "offline"}, "marineAquist": {"color": "#00caca", "handle": "marineAquist", "mood": "offline"}} \ No newline at end of file +{"macruralAlchemist": {"color": "#700000", "handle": "macruralAlchemist", "mood": "offline"}, "lyricalKeraunoscopic": {"color": "#00c000", "handle": "lyricalKeraunoscopic", "mood": "offline"}, "fireSwallow": {"color": "#80bb9a", "handle": "fireSwallow", "mood": "offline"}, "aquaMarinist": {"color": "#00caca", "handle": "aquaMarinist", "mood": "offline"}, "centaursTesticle": {"color": "#000056", "handle": "centaursTesticle", "mood": "offline"}, "mechanicalSpectacle": {"color": "#0000ff", "handle": "mechanicalSpectacle", "mood": "offline"}, "carcinoGeneticist": {"color": "#999999", "handle": "carcinoGeneticist", "mood": "offline"}, "greyscalePacifist": {"color": "#7f7f7f", "handle": "greyscalePacifist", "mood": "offline"}, "aquaticMarinist": {"color": "#00caca", "handle": "aquaticMarinist", "mood": "offline"}, "maxiumumFatness": {"color": "#3366ff", "handle": "maxiumumFatness", "mood": "offline"}, "insipidTranscient": {"color": "#145064", "handle": "insipidTranscient", "mood": "offline"}, "caffeinatedAnalyst": {"color": "#aa0000", "handle": "caffeinatedAnalyst", "mood": "offline"}, "midnightSparrow": {"color": "#ff55ff", "handle": "midnightSparrow", "mood": "offline"}, "absoluteTranquility": {"color": "#000033", "handle": "absoluteTranquility", "mood": "offline"}, "nitroZealist": {"color": "#ff3737", "handle": "nitroZealist", "mood": "offline"}, "quintessentialArbalest": {"color": "#999999", "handle": "quintessentialArbalest", "mood": "offline"}, "agogPorphyry": {"color": "#522d80", "handle": "agogPorphyry", "mood": "offline"}, "androidTechnician": {"color": "#0000ff", "handle": "androidTechnician", "mood": "offline"}, "anguillaNuntia": {"color": "#ff007f", "handle": "anguillaNuntia", "mood": "offline"}, "aceIsm": {"color": "#ffcc66", "handle": "aceIsm", "mood": "offline"}, "apocalypseArisen": {"color": "#a10000", "handle": "apocalypseArisen", "mood": "offline"}, "radicalApologist": {"color": "#ffaa00", "handle": "radicalApologist", "mood": "offline"}, "microMachines": {"color": "#aa00ff", "handle": "microMachines", "mood": "offline"}, "uroborosUnbound": {"color": "#00416a", "handle": "uroborosUnbound", "mood": "offline"}, "arachnidsGrip": {"color": "#005682", "handle": "arachnidsGrip", "mood": "offline"}, "percipientPedestrian": {"color": "#00ffff", "handle": "percipientPedestrian", "mood": "offline"}, "tentacleTherapist": {"color": "#cc66ff", "handle": "tentacleTherapist", "mood": "offline"}, "sucroseSaboteur": {"color": "#00e700", "handle": "sucroseSaboteur", "mood": "offline"}, "illuminatedWax": {"color": "#000000", "handle": "illuminatedWax", "mood": "offline"}, "moirailBunp": {"color": "#6a3d0f", "handle": "moirailBunp", "mood": "offline"}, "madLurker": {"color": "#000000", "handle": "madLurker", "mood": "offline"}, "testOut": {"color": "#c760cc", "handle": "testOut", "mood": "offline"}, "pesterClient3022": {"color": "#336600", "handle": "pesterClient3022", "mood": "offline"}, "hellerificJefferson": {"color": "#3300ff", "handle": "hellerificJefferson", "mood": "offline"}, "DocScratch": {"color": "#ffffff", "handle": "DocScratch", "mood": "offline"}, "recalcitrantDisaster": {"color": "#8b0068", "handle": "recalcitrantDisaster", "mood": "offline"}, "superGhost": {"color": "#800564", "handle": "superGhost", "mood": "offline"}, "arsenicCatnip": {"color": "#006400", "handle": "arsenicCatnip", "mood": "offline"}, "kaleidoscopicMind": {"color": "#ff6666", "handle": "kaleidoscopicMind", "mood": "offline"}, "zealousScarecrow": {"color": "#00c882", "handle": "zealousScarecrow", "mood": "offline"}, "captainCaveman": {"color": "#7c414e", "handle": "captainCaveman", "mood": "offline"}, "gamblingGenocider": {"color": "#00ff00", "handle": "gamblingGenocider", "mood": "offline"}, "cuttlefishCuller": {"color": "#77003c", "handle": "cuttlefishCuller", "mood": "offline"}, "iw": {"color": "#ff0000", "handle": "iw", "mood": "offline"}, "masterG": {"color": "#77003c", "handle": "masterG", "mood": "offline"}, "elegantDiversion": {"color": "#14b40a", "handle": "elegantDiversion", "mood": "offline"}, "plasmaModerator": {"color": "#5685cc", "handle": "plasmaModerator", "mood": "offline"}, "carcinoGenetecist": {"color": "#7f7f7f", "handle": "carcinoGenetecist", "mood": "offline"}, "marineAquist": {"color": "#00caca", "handle": "marineAquist", "mood": "offline"}, "remoteBloodbath": {"color": "#c70000", "handle": "remoteBloodbath", "mood": "offline"}, "oilslickOrchid": {"color": "#743f7e", "handle": "oilslickOrchid", "mood": "offline"}, "acapellaWaterfall": {"color": "#000099", "handle": "acapellaWaterfall", "mood": "offline"}, "rageInducer": {"color": "#00ffff", "handle": "rageInducer", "mood": "offline"}, "gallowsCalibrator": {"color": "#008282", "handle": "gallowsCalibrator", "mood": "offline"}, "greenZephyr": {"color": "#00ca40", "handle": "greenZephyr", "mood": "offline"}, "lawdEngrish": {"color": "#00ff00", "handle": "lawdEngrish", "mood": "offline"}, "pretentiousFantasia": {"color": "#ff66cf", "handle": "pretentiousFantasia", "mood": "offline"}, "schlagzeugGator": {"color": "#61821f", "handle": "schlagzeugGator", "mood": "offline"}, "metaliAggressive": {"color": "#9289d5", "handle": "metaliAggressive", "mood": "offline"}, "pesterClient394": {"color": "#ff3737", "handle": "pesterClient394", "mood": "offline"}, "magmaExploiter": {"color": "#d90000", "handle": "magmaExploiter", "mood": "offline"}, "gardenGnostic": {"color": "#00ff00", "handle": "gardenGnostic", "mood": "offline"}, "unknownTraveler": {"color": "#006666", "handle": "unknownTraveler", "mood": "offline"}, "utilitarianTurnabout": {"color": "#dd0000", "handle": "utilitarianTurnabout", "mood": "offline"}, "adiosToreador": {"color": "#aa5500", "handle": "adiosToreador", "mood": "offline"}} \ No newline at end of file diff --git a/memos.py b/memos.py index 5b0a358..abcff9a 100644 --- a/memos.py +++ b/memos.py @@ -543,6 +543,7 @@ class PesterMemo(PesterConvo): text = unicode(self.textInput.text()) if text == "": return + self.history.add(text) if self.time.getTime() == None: self.sendtime() grammar = self.time.getGrammar() diff --git a/memos.pyc b/memos.pyc index b60595e845dddb8074066a4d4709363939676f68..0dd44f5aac5ad0eca9cefb5cbe48b4cb6e642469 100644 GIT binary patch delta 627 zcmYk2Pe>GT6vyBDxwGSLt*+Wu)`ABWP3)5NX9X`}Vui{67SwGeu*P{h2}nND@c4jt;&xelGWMnZV-P`@`q1;dB;`_5Z9Ev`q_qh>z zQcU4!@T&L$@de#h_wXX^t1Wy<_ZPQJ-B}(MmysId=jlPY17Fj#@?Gqr?n>6mn2X;8 zwaQf3t1*7T>N3erV7u#xS83C$Vutp;b^J*F@cfKO0k+z3Ms7Lo>I+)bYBTb*S#UJXJm$(1` delta 575 zcmX|+KWI}?6vofF?aOOZQ?)T_(GC%`q3U9>DMAOI5Uef4yi`eS5wwZnHtEZsUPa*r zinXIIXH^0n>|`;%Nd#L5MMoD07biCz?4YBb^9sV{$N9eVan3!@cJa?Iv_J30qQ9T# zy7qbj3-q`!?yLcn0G1Tg2LXKm9Raq`!#&jl+7_d&K$?9}Kfc%K2OR}H0D2z{70+B? z8IznI4AZ?~`oFn9G%YAu;PX?U4}i}ZE)LTD;yGss{0NvhtSLZq2n>MFYY|FJ1#LSV zmjHcOeEG-`nJ8%y2>K}fDBg|_1Ax0I*b(qyKzDDvi6oKL37VL%4y4!vmB1KUv^Bqt zqvS1QaWZ(jaJ>&t2Z{1|#8fbIX9Cqpq<8r#+NmV)V(_K%9&wYN>PL8ql1oqU1-)cS z9VfRssxBjSGiiENjblI`st<95rfWGX&8uGromw`W*Ud~?BkXJkXT4R#S=y?%FipwE zDt@Gm#yZzOo3s6mR{5UM%jK`sZq`F@4!@Dp`itMmSy{e$O70nB7@M!jvuTG6BqCWB~HxSs79ofF^=;_!SES$pGWv5aS?ck5FHQFg*nW zJwrXCVo#8GQGR++Vs36`Ub;e3r9x&-PAQO`SdyAjo>-xvk)DxXT;fuim#wLzkXTd# zQsQ2enVXYYma3qqkyu!o=$lxSnU`5yqN%|KG%g5;8G>R!1Q&?l0THnvLT+-hkB`6` zMxgUSVZy*D%*e~gJNdj%nBZL?_ccg@3CLh$)R3NR<~x%eV#?jg4SKedIsJqfWhTq` J$uda_0sxkAQw9J4 delta 70 zcmdnDfN|#>M(K;6c)7af2l^&6KmiAkb^zjH&yCWajI2xy!5R{qn;1`fGigXp*7u(| Snc3HBGEaaIqts;i09gQmgAp14 diff --git a/oyoyo/__init__.pyc b/oyoyo/__init__.pyc index be26c04278418a75756d2cf8046f30e23a4107ba..28e3e80c476d1ac01bd4cfb463eeb187f0612c7e 100644 GIT binary patch delta 15 WcmX@hbe4(j;wN6NbFmxQ+!+BfRRyU4 delta 15 XcmX@hbe4(j;wN6Nd*3&*xibO)HMa&+ diff --git a/oyoyo/client.pyc b/oyoyo/client.pyc index 5ba5325557d363f0374c9e0ca7739ef737554db4..9115adc5cacf5adb23fb132f67c3c301bbd75af2 100644 GIT binary patch delta 15 WcmZqhY4BmY_=%V6#+Hq2zf=J<<_6mU delta 15 WcmZqhY4BmY_=%TGaLz`yU#b8v#0C5S diff --git a/oyoyo/cmdhandler.pyc b/oyoyo/cmdhandler.pyc index e9def19d77978e0983f9458c1605a5ac084df2c3..d97b3d1ff2c4eb42e44ae39815380e44fd3c0833 100644 GIT binary patch delta 15 Wcmez2@WX-a;wN6NbFmxQiWC4n$_B*% delta 15 Xcmez2@WX-a;wN6Nd*3&*6)6A!K`aMv diff --git a/oyoyo/helpers.pyc b/oyoyo/helpers.pyc index e5c82c49e21cd1824177f884ec2698caa054d20e..e5b17da6abb110ba3d8dc2bd4f39e243966dd719 100644 GIT binary patch delta 16 XcmbQLK2@Fl;wN4%2Mhm=?0v!jG4%y{ delta 16 XcmbQLK2@Fl;wN6NuK9r*+53b6Hg5(k diff --git a/oyoyo/ircevents.pyc b/oyoyo/ircevents.pyc index 1f1ccd60b234136833f75055fd8d2e431da22511..c83999f5508b0e331f132f84e784455707b3e147 100644 GIT binary patch delta 15 Wcmdn1vsZ`h;wN6NbFmxQ%*6mS&IRHC delta 15 Xcmdn1vsZ`h;wN6Nd*3&*nTr7cI4}l` diff --git a/oyoyo/parse.pyc b/oyoyo/parse.pyc index e67f2eacb08e566bee9472177a2c6889c2828d09..9095b24ca7fdd4567a86d7cbbd0c9a4cc710c079 100644 GIT binary patch delta 15 WcmdlgwpEPn;wN6NbFmxQ^tk~smj#mm delta 15 XcmdlgwpEPn;wN6Nd*3&*>2m`BH2DTS diff --git a/parsetools.pyc b/parsetools.pyc index 692c655fd982cfa1265a07c62d19e8b56b63d12b..3138a62e09e2cca1a15996723194e9e8527ecfe9 100644 GIT binary patch delta 15 WcmdmQw%?5H;wN6N-oG2!ETsWAtp;EK delta 15 WcmdmQw%?5H;wN4%^Wz)YETsW7n+4PW diff --git a/pesterchum.js b/pesterchum.js index 4d98969..b0ffdad 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"tabs": true, "soundon": true, "chums": ["marineAquist", "unknownTraveler", "tentacleTherapist", "macruralAlchemist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "adiosToreador", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "maxiumumFatness", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "acapellaWaterfall", "anguillaNuntia", "oilslickOrchid", "confusedTransient"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"tabs": true, "soundon": true, "chums": ["marineAquist", "unknownTraveler", "tentacleTherapist", "macruralAlchemist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "adiosToreador", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "maxiumumFatness", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "acapellaWaterfall", "anguillaNuntia", "oilslickOrchid", "confusedTransient", "pretentiousFantasia"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file diff --git a/pesterchum.py b/pesterchum.py index 639096f..47689fc 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -14,7 +14,7 @@ import pygame from menus import PesterChooseQuirks, PesterChooseTheme, \ PesterChooseProfile, PesterOptions, PesterUserlist, PesterMemoList, \ - LoadingScreen + LoadingScreen, AboutPesterchum from dataobjs import PesterProfile, Mood, pesterQuirk, pesterQuirks from generic import PesterIcon, RightClickList, MultiTextDialog, PesterList from convo import PesterTabWindow, PesterText, PesterInput, PesterConvo @@ -109,25 +109,26 @@ class PesterProfileDB(dict): self.save() class pesterTheme(dict): - def __init__(self, name): + def __init__(self, name, default=False): self.path = "themes/%s" % (name) self.name = name fp = open(self.path+"/style.js") theme = json.load(fp, object_hook=self.pathHook) self.update(theme) fp.close() - defaultfp = open("themes/pesterchum/style.js") # set default - defaultTheme = json.load(defaultfp, object_hook=self.pathHook) - self.defaultTheme = defaultTheme - defaultfp.close() + if not default: + self.defaultTheme = pesterTheme("pesterchum", default=True) def __getitem__(self, key): keys = key.split("/") v = dict.__getitem__(self, keys.pop(0)) for k in keys: try: v = v[k] - except KeyError: - v = self.defaultTheme[k] + except KeyError, e: + if hasattr(self, 'defaultTheme'): + return self.defaultTheme[key] + else: + raise e return v def pathHook(self, d): for (k, v) in d.iteritems(): @@ -136,19 +137,23 @@ class pesterTheme(dict): d[k] = s.safe_substitute(path=self.path) return d def get(self, key, default): - try: - ret = self[key] - except KeyError: - return default - else: - return ret + keys = key.split("/") + v = dict.__getitem__(self, keys.pop(0)) + for k in keys: + try: + v = v[k] + except KeyError: + return default + return v def has_key(self, key): - try: - self[key] - except KeyError: - return False - else: - return True + keys = key.split("/") + v = dict.__getitem__(self, keys.pop(0)) + for k in keys: + try: + v = v[k] + except KeyError: + return False + return True class userConfig(object): def __init__(self): @@ -684,6 +689,14 @@ class PesterWindow(MovingWindow): profilemenu.addAction(changecoloraction) profilemenu.addAction(switch) + self.aboutAction = QtGui.QAction(self.theme["main/menus/help/about"], self) + self.connect(self.aboutAction, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('aboutPesterchum()')) + helpmenu = self.menu.addMenu(self.theme["main/menus/help/_name"]) + self.helpmenu = helpmenu + 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()')) @@ -923,6 +936,8 @@ class PesterWindow(MovingWindow): self.changecoloraction.setText(theme["main/menus/profile/color"]) self.switch.setText(theme["main/menus/profile/switch"]) self.profilemenu.setTitle(theme["main/menus/profile/_name"]) + self.aboutAction.setText(self.theme["main/menus/help/about"]) + self.helpmenu.setTitle(self.theme["main/menus/help/_name"]) # moods self.moodsLabel.setText(theme["main/moodlabel/text"]) @@ -976,9 +991,7 @@ class PesterWindow(MovingWindow): self.currentMoodIcon.move(*theme["main/mychumhandle/currentMood"]) self.currentMoodIcon.show() else: - print "no mood :(" if hasattr(self, 'currentMoodIcon') and self.currentMoodIcon: - print "hiding..." self.currentMoodIcon.hide() self.currentMoodIcon = None @@ -1475,6 +1488,13 @@ class PesterWindow(MovingWindow): if ret == QtGui.QMessageBox.Cancel: return self.changeProfile() + @QtCore.pyqtSlot() + def aboutPesterchum(self): + if hasattr(self, 'aboutwindow') and self.aboutwindow: + return + self.aboutwindow = AboutPesterchum(self) + self.aboutwindow.exec_() + self.aboutwindow = None @QtCore.pyqtSlot(QtCore.QString, QtCore.QString) def nickCollision(self, handle, tmphandle): diff --git a/themes/pesterchum/style.js b/themes/pesterchum/style.js index 589e99f..697b9bf 100644 --- a/themes/pesterchum/style.js +++ b/themes/pesterchum/style.js @@ -28,6 +28,8 @@ "theme": "THEME", "block": "TROLLSLUM", "quirks": "QUIRKS"}, + "help": { "_name": "HELP", + "about": "ABOUT" }, "rclickchumlist": {"pester": "PESTER", "removechum": "REMOVE CHUM", "blockchum": "BLOCK", diff --git a/trayicon32.icns b/trayicon32.icns new file mode 100644 index 0000000000000000000000000000000000000000..5cb1b0aa1198251bf882894fd397e3074a105987 GIT binary patch literal 2420 zcmeHHJx?1!5S?AelF!y*Ul9<(Mo`eCOq%?eRH;x%8uAC0!$MX>;UYyO8n;(rn?7l2 z-GOAV0RfExFBtiJx|__LIXE1!3zSqjdp_R0*`2q`ndOgPRsoE!%d79+0tozt!uM@< zYnbp44}J9zTCEUKSVQ4?woh&irQdGZZP{uMNiR@-BJjAC7}|<`m|szT6?O%kR+qZE ztxmw}J1s@)JN`OCVEYi1Sq1ISj#PNt+a9TiLai1e3Z&w;XSV03Rzz>3dxOX&zfJ zv(;BP*Wa1}>sT*BD!+B5_0?8B1&bQ@Gmx5Ah4gd^GW)0(XnPydG-E+`EuN}GlBZkU z)%Tx2QI-NB({mbw0QFp2vVhqm?IS(DKAL5C&hz;R@O&1`HqxC8v5##te;Lu-aG4*j z9X9YDQ5MC!wfAroM?@4y_ZyvO9>nJ#n6Pvc6#~3j0`o9}tnbjAx`^Y8spS>^8ORSj z?2UI!>cOT1P6RmC6n|8g`el)(tE{ znQRlwKzd*UzeADC#vh%ZDY$>4*P7#fF_w(u<6M--mO@mE z#|J)MjptEEycW-ge7rK6bH`{cj$h8lcl)3J`y2S%f8WXbKi@HYKPU0y?(F67=kwEf GF2Ha3rJ=I` literal 0 HcmV?d00001 diff --git a/trayicon32.png b/trayicon32.png new file mode 100644 index 0000000000000000000000000000000000000000..ca094fce99daa0daf0bb6d6dc7c8d776bb094d87 GIT binary patch literal 3675 zcmeH}_cI*)7RJ9q^xjK&iN4Wmu-dL(gB6P;x+Nk@BGE!D(en}!-HH;uhGb=x=$#cr zT_susFS$`dqU@D>|BQRj%yXWZ^TU~WK68FJ@i#0C8EAQF0RRlfMtas4F8D{(CK0=m7LXFSMVaF&r-F_WXqZjngbHRktU6fq^(pxJ^W(^qk|LgS zSV_?*(9Te;2^A(q6~!eCo-BtJ`AoGOeH}S}KdrSP3L`@&#NG*rI zN2W74i$?*Y#Pnr<7=Zi~j*GPWXF&wU8UjHj3CHLpz12oZy6Wn>dcHnd>8At0azOal zxs+@JZ-fSAgztHw=q`oV9lHESM~R;GOgisD{^p$BzTY1<`UNlWv$N}KYcnR@Fh`d` zyRdUqr&GJ#*}Y%k(9@&CFCSM#FbcOZh7`wNI)@L;im!~mq}MT*rFJW?m{dPT znNHgejGBH-zg?*FIwV>!G!(l1)NC$7b8%#@2}t22YObv4W1$Ws3f4ps!GSn-tE;9d z%0}|m2?#-3BmOL-|*jdMnM(^zY&LGF9GZ28DE=+ymsZ zlR5KqK0SEHtNC1|VB=Gz7t>s_7Q9cc{TnxxV)s2cncgng+v`#^scu7WuU64l_VU)< ztRioYKXe;?8%V*5(Ql_wp$LQtx(MhRA{{2F;u_zY(4HeL)>X&<&9Tjjg!SNE6P|VEb)|Jmk4yz! z+oEjig|Y$!i*m99thxYaU27Fv#-{WrTWutY)7Z4Qx-e~m*Ne;R$h-DiKoiSCnt(;d zC%f^XO~Y>)-^dRF=^0`;qWa=c5n80BuUw#B;sa7-nk8=YoXf`BDGxoz17TLc`u1NBgD4F5q zJ#P6_q-UffD~&3xDh;<=Rcdxhu_dkg&Gsi4M%_LW@mu1CsAR%r?1s&(%|a<{DW|!n z`eBVsg-8^5oF$(|w3e1Df78qy;v8|XzSiSz_+ zXpgc#8pob(Z8k{dK z%mwAjg=*}n>DoTM^{HZX>ofJYE1Emq7 zWGM1@j4sCU(#dhi6QQ;wZFQo@&-&RN-RJpuT@Kyk$m+=Tj%p#V{(oLn3mt7_5>g1> zjL|p3zfFCja{20#*cDDM9vvHP7o(lz7l-5>lh05N9GizfT+;ikm#(*%gOayYtCcoU zhGzKt^Tz~a1U1mrb=X23Lwm{J&+Tc$9PSjP|F_p2n8Tc)TfW@8> z#60BXKPfHB!6H41#Zv3|XX52ATFe;C7IM_{II|xM`YLFux5`JoOnKoCs}M3z#i6!P zUp*fWRe40$pZDBPY?Kv9qZ;sOcu{rPUYZsMEBS_SkeG&0)uTM@JljU%2i4Lm^RA8T z3^xoCU#RAOe@)t9?POhki7SpVwUg#Yer>I~t5y&74<^#Ca$LR^bCa?P`XK=a@tw4+ z+_B5332zk(G55jT=@^Xccu(fDO=nBH9v!wlKfQC?5-DrH^xoxn43be8_U{X4gJMc7X-cy05DX6Z@4~Y8 zvJG-ojj(i=3H`l^IbeBQpOmQ`1~%-48(@^&A~8aV~^E5I-XfHO~f$ z?^d^1wm2Q=?C8$I7h)&19na@yzRy3s+a8#|KQ?c8L>V15dY*Ea%mlxjoRvHj!w|Eb zcU?5e(BU>0023-VTRBrk-*M4%|Zps z-a-NCKXtL?|Mh zqz0paDZWt3wD=<(k^Y4_%8RIz=5W(CxH>zg2{ zR?K_YrJHWzdWO+;T4k4;?yPIQYrX`p?J8QlYo_|`wL=&q0K9At6+?;ke}Eh7TjREBA literal 0 HcmV?d00001