From cbaea3b57bb574cb984a3759d9fc8070db67d87a Mon Sep 17 00:00:00 2001 From: Stephen Dranger Date: Sat, 5 Feb 2011 12:56:25 -0600 Subject: [PATCH] fdsd --- TODO | 3 +- dataobjs.py | 21 +++---- dataobjs.pyc | Bin 8965 -> 9080 bytes irc.pyc | Bin 10883 -> 10883 bytes memos.py | 101 +++++++++++++++++++++++++++++-- memos.pyc | Bin 21607 -> 25439 bytes parsetools.py | 19 ++++++ parsetools.pyc | Bin 4583 -> 5213 bytes pesterchum.py | 2 +- profiles/testProfile.js | 2 +- themes/pesterchum/leftarrow.png | Bin 0 -> 205 bytes themes/pesterchum/rightarrow.png | Bin 0 -> 204 bytes themes/pesterchum/style.js | 11 +++- themes/trollian/leftarrow.png | Bin 0 -> 205 bytes themes/trollian/rightarrow.png | Bin 0 -> 204 bytes themes/trollian/style.js | 13 +++- themes/trollian/timeslider.png | Bin 0 -> 327 bytes 17 files changed, 147 insertions(+), 25 deletions(-) create mode 100644 themes/pesterchum/leftarrow.png create mode 100644 themes/pesterchum/rightarrow.png create mode 100644 themes/trollian/leftarrow.png create mode 100644 themes/trollian/rightarrow.png create mode 100644 themes/trollian/timeslider.png diff --git a/TODO b/TODO index 2fbeac4..c49187e 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,6 @@ Features: -* Chat rooms/browser +* What if someone switches nick in memo? +* memo change theme * PESTERLOG: in convo window * help button on quirks menu? * tab recombining gives wrong window icon diff --git a/dataobjs.py b/dataobjs.py index e12fbd2..37419d9 100644 --- a/dataobjs.py +++ b/dataobjs.py @@ -3,6 +3,7 @@ from datetime import * import re from generic import PesterIcon +from parsetools import timeDifference class Mood(object): moods = ["chummy", "rancorous", "offline", "pleasant", "distraught", @@ -140,20 +141,16 @@ class PesterProfile(object): return "-- %s [%s] %s %s [%s] at %s --" % (syscolor.name(), self.handle, self.colorhtml(), self.initials(), verb, otherchum.handle, otherchum.colorhtml(), otherchum.initials(), datetime.now().strftime("%H:%M")) def memoclosemsg(self, syscolor, timeGrammar, verb): return "%s%s%s %s." % (syscolor.name(), self.colorhtml(), timeGrammar.pcf, self.initials(), timeGrammar.number, verb) + def memoopenmsg(self, syscolor, td, timeGrammar, verb, channel): + (temporal, pcf, when) = (timeGrammar.temporal, timeGrammar.pcf, timeGrammar.when) + timetext = timeDifference(td) + initials = pcf+self.initials() + return "%s %s %s %s." % \ + (syscolor.name(), self.colorhtml(), initials, timetext, verb, channel[1:].upper().replace("_", " ")) + def memojoinmsg(self, syscolor, td, timeGrammar, verb): (temporal, pcf, when) = (timeGrammar.temporal, timeGrammar.pcf, timeGrammar.when) - atd = abs(td) - minutes = (atd.days*86400 + atd.seconds) // 60 - hours = minutes // 60 - leftoverminutes = minutes % 60 - if atd == timedelta(0): - timetext = when - elif atd < timedelta(0,3600): - timetext = "%d MINUTES %s" % (minutes, when) - elif atd < timedelta(0,3600*100): - timetext = "%d:%02d HOURS %s" % (hours, leftoverminutes, when) - else: - timetext = "%d HOURS %s" % (hours, when) + timetext = timeDifference(td) initials = pcf+self.initials()+timeGrammar.number return "%s %s [%s] %s %s." % \ (syscolor.name(), self.colorhtml(), temporal, self.handle, diff --git a/dataobjs.pyc b/dataobjs.pyc index 513d6e0a64a67d0095ac75e6f63c99dffa6a1932..ae8de03cd910f27336f0e60b21a145a1bf84d350 100644 GIT binary patch delta 2538 zcmZ8jO>9(E6ux)z-zk`&YwltK27oso(o9TOR=%e#f=DiVW zS_)Ej#(;O>N<~*_q6xAyZj2@hiJHch3k@3+qlqE1F>dsH=RsR(^1hyXe(pQ>yXTxY zHwOP6OfLLY8~gU{W5*2f#&{ATNSHhSa<(9z z_z6@yAf;~xnq`OnC@>K0CPkxu9Qa&z>raD8(mn`|1UHa2sgt3;Mh;kys7?Uf)dqd7 z=0FfRM)b#_KWf@YN(W$R)3?Jtp$>>!^+GrkL}aI48Tnau>PL~iop4oK0ow^&9JXS) zNX@B^^Vuo+jn1MZz z_VVGMCvp9~Z)zfPGjFr&SdO^8FzV6-%aca@pk+4-r93(VPQg+ zyj@T^c6Qr2wV!YJVPhaRRmj<;5!-POf41VHJPlq{F963^I|%p!I5cll0=zG$hOE;y zaN|^Vlf?DqOyvxZdZTEnemLyc_v?~!yZ*IqIEb)8y*)9Rz*bML#&hz@F5Kr@#95Yf z4o)s)OoU__;ST?1Y_ls$|p^+)i0?twT4>vv)SZORuM-$kq#WGF^vPM)dxbKeTdR@O?4?qp&DIN~c#1 zafy!Ib5}*BJfyEQY?Pz=PD6L=De_38Hayy}R26Uj!YAWIMa?%E|e==pd3ispOmbjpVic9K-GxI0oJ!f>O0OZdJS~#q3YQf_yMphbp;ZF;`IzH{6vqiPT$U zaeM?q8iRI|eNHHUY z9mE=j5DPIeL#_ca6BMRTr0g)Xb_Cx7lR|wW9}-O`xeP{~c6w#T*w^K}=wX+W*d0K!9ti*RYKP z8AWJJ= zDnv4|1rWRGNN5>{Gk&nQny7t3rNUA=0DNUt1~8&O=uiy_ U5}Ra9#(fEy@HHiyTADik0|0l=vH$=8 delta 2457 zcmZ8jT})g>6rS1T?*GCrKg*WI<*(qawYDJD3ZzAl0&SsoXww3vxZFF-Ub;Vc?<}Qp z5p6LsF~*RIMqe~B>8qOXU^MYflfE_8r^e`$PxissL}PsNoVmafA@^|R{LP#*-#NoS zXWu!SdiW$7I-HxDGRW?aAN~%*=X|`K8eY%{_meCorjKk9a+i?Vxd1W!d(yzZG)T98MnG6mpQ+6Eneey;yNjv1N;Hy-Z_k%z6p8&B_3uI($d~&+| z>g45#f%b04-MAN(5g=pJuT)ii@%Eqp*StE;?dGSu&u2{<++TcaZ?#UW`#7t%v0 z#N?_r0?V>E-@Cw0tILfgG?}gq($O8g_H}vqBx9h$^IV%UZCdim48R=hVY! zrs{hNI0Xo2HDhprH)s@0b_NYj%RlQ$@$pL7>3#fglhzt8d5k|T(ktY z7Z+zi?qI%zhKP^q$g=;HYZzs!X6IDR24OuYWxW6Jhrn?{=AccYgnNkzouYV?k}WTp zs{y%u96t`|PStlm&1mRhJPS9|za-Tx(5|Xr> zZ5UTqaAW6QLy*!D`DNn~Iwc=9_O#4^g^rEvdf}2O*E8}^(>3inte53l)5Vwyh0s0- zm{_8guF19pPoY}DV3`ZHyrfqTG9f=p%+YoEZz4OOBI7~T$y}qV45JG?OSxznC6l{G z)#jFfjL>R619xs2;tly*^Jpu23&cF^JCZLMH}jSw_F8&0$>^s1DEa&5HLzgQXp229 zcwx0_4;4CvNmq5Ig0sOX8&StH3 zw|p2(htDPQQ{Qv)SWAfBk*8W7#V}FV40mGJWk>30Bi@<_0x5|cw~bu6z*gjIDMsIu zJE^zNC?92RDIc^(>=ny}C2qT;MP2*~YVb_LD)4bTQz&F?W~3zrp*Ac0F0D0R)Et;v*{r%8$nWm>5W`ymrHDf30S~UU{C{; zS3IN?BDCTs8xc~>0k@|#Ysg&>fzy>52{kqJ2dk`yB+&BoLCX-iyXl%XgQ=fXU^mzX zti7&v9K-=7-j7i6kqRM}A77s4ikDac(!3GHr=~)Q6+|)WAv7?sJMa)PN-7ajsUcZE zNzACpF>Sqd2^`K1K|Qe2#EL{rPKcX_*HOba53(*KAXuqoV|ccM7YB<&<<|*;!|;O3svs|(Fu_=@xjn};4zw$l-r$2t)b4VN90$X$=)Jbs_byq wE%PF`Ekpf#q0%iat#CuQ=fcO74a$l5m}Fh`_1LQkC~U+N^CVJ_=%Tm>O|j->@`{dIWq=h delta 16 XcmZn;Z4PC>_=%TG= timedelta(0) else "-" else: if d == timedelta(0): - return "" + return "i" sign = "F" if d >= timedelta(0) else "P" d = abs(d) totalminutes = (d.days*86400 + d.seconds) // 60 @@ -86,10 +86,20 @@ class TimeTracker(list): try: i = self.index(timed) self.current = i + return True except ValueError: self.current = len(self) self.append(timed) self.addRecord(timed) + return False + def prevTime(self): + i = self.current + i = (i - 1) % len(self) + return self[i] + def nextTime(self): + i = self.current + i = (i + 1) % len(self) + return self[i] def setCurrent(self, timed): self.current = self.index(timed) def addRecord(self, timed): @@ -111,8 +121,9 @@ class TimeTracker(list): try: self.pop(self.index(timed)) self.current = len(self)-1 + return True except ValueError: - pass + return None def getTime(self): if self.current >= 0: return self[self.current] @@ -120,6 +131,8 @@ class TimeTracker(list): return None def getGrammar(self): timed = self.getTime() + return self.getGrammarTime(timed) + def getGrammarTime(self, timed): mytime = timedelta(0) (temporal, pcf, when) = pcfGrammar(timed - mytime) if timed == mytime: @@ -165,6 +178,8 @@ class TimeSlider(QtGui.QSlider): time = timelist[abs(self.value())] sign = "+" if self.value() >= 0 else "-" return sign+time + def mouseDoubleClickEvent(self, event): + self.setValue(0) class MemoTabWindow(PesterTabWindow): def __init__(self, mainwindow, parent=None): @@ -231,7 +246,7 @@ class MemoText(PesterText): else: start = 13 space = msg.find(" ") - msg = chum.memsg(systemColor, msg[start:space], msg[space:], timegrammar=time.getGrammar()) + msg = chum.memsg(systemColor, msg[start:space], msg[space:], time=time.getGrammar()) window.chatlog.log(parent.channel, convertTags(msg, "bbcode")) self.append(convertTags(msg)) else: @@ -274,6 +289,18 @@ class PesterMemo(PesterConvo): self.timeinput.setText(timestr) self.timeinput.setSlider() self.timetravel = QtGui.QPushButton("GO", self) + self.timeclose = QtGui.QPushButton("CLOSE", self) + self.timeswitchl = QtGui.QPushButton(self) + self.timeswitchr = QtGui.QPushButton(self) + + self.connect(self.timetravel, QtCore.SIGNAL('clicked()'), + self, QtCore.SLOT('sendtime()')) + self.connect(self.timeclose, QtCore.SIGNAL('clicked()'), + self, QtCore.SLOT('smashclock()')) + self.connect(self.timeswitchl, QtCore.SIGNAL('clicked()'), + self, QtCore.SLOT('prevtime()')) + self.connect(self.timeswitchr, QtCore.SIGNAL('clicked()'), + self, QtCore.SLOT('nexttime()')) self.times = {} @@ -298,7 +325,9 @@ class PesterMemo(PesterConvo): layout_2.addWidget(self.timeslider) layout_2.addWidget(self.timeinput) layout_2.addWidget(self.timetravel) - + layout_2.addWidget(self.timeclose) + layout_2.addWidget(self.timeswitchl) + layout_2.addWidget(self.timeswitchr) self.layout = QtGui.QVBoxLayout() self.layout.addWidget(self.channelLabel) @@ -314,6 +343,11 @@ class PesterMemo(PesterConvo): if parent: parent.addChat(self) + p = self.mainwindow.profile() + timeGrammar = self.time.getGrammar() + systemColor = QtGui.QColor(self.mainwindow.theme["memos/systemMsgColor"]) + self.textArea.append(convertTags(p.memoopenmsg(systemColor, self.time.getTime(), timeGrammar, self.mainwindow.theme["convo/text/openmemo"], self.channel))) + self.newmessage = False def title(self): @@ -366,6 +400,19 @@ class PesterMemo(PesterConvo): slidercss = "QSlider { %s } QSlider::groove { %s } QSlider::handle { %s }" % (theme["memos/time/slider/style"], theme["memos/time/slider/groove"], theme["memos/time/slider/handle"]) self.timeslider.setStyleSheet(slidercss) + larrow = PesterIcon(self.mainwindow.theme["memos/time/arrows/left"]) + self.timeswitchl.setIcon(larrow) + self.timeswitchl.setIconSize(larrow.realsize()) + self.timeswitchl.setStyleSheet(self.mainwindow.theme["memos/time/arrows/style"]) + self.timetravel.setStyleSheet(self.mainwindow.theme["memos/time/buttons/style"]) + self.timeclose.setStyleSheet(self.mainwindow.theme["memos/time/buttons/style"]) + + rarrow = PesterIcon(self.mainwindow.theme["memos/time/arrows/right"]) + self.timeswitchr.setIcon(rarrow) + self.timeswitchr.setIconSize(rarrow.realsize()) + self.timeswitchr.setStyleSheet(self.mainwindow.theme["memos/time/arrows/style"]) + + def changeTheme(self, theme): self.initTheme(theme) self.textArea.changeTheme(theme) @@ -399,7 +446,7 @@ class PesterMemo(PesterConvo): secs = int(cmd) time = datetime.fromtimestamp(secs) timed = time - datetime.now() - s = (timed // 60)*60 + s = (timed.seconds // 60)*60 timed = timedelta(timed.days, s) except ValueError: if cmd == "i": @@ -483,6 +530,50 @@ class PesterMemo(PesterConvo): self.times[h].removeTime(t.getTime()) elif update == "join": self.addUser(h) + time = self.time.getTime() + serverText = "PESTERCHUM:TIME>"+delta2txt(time, "server") + self.messageSent.emit(serverText, self.title()) + + def resetSlider(self, time): + self.timeinput.setText(delta2txt(time)) + self.timeinput.setSlider() + self.sendtime() + + @QtCore.pyqtSlot() + def sendtime(self): + me = self.mainwindow.profile() + systemColor = QtGui.QColor(self.mainwindow.theme["memos/systemMsgColor"]) + time = txt2delta(self.timeinput.text()) + present = self.time.addTime(time) + if not present: + self.textArea.append(convertTags(me.memojoinmsg(systemColor, time, self.time.getGrammar(), self.mainwindow.theme["convo/text/joinmemo"]))) + + serverText = "PESTERCHUM:TIME>"+delta2txt(time, "server") + self.messageSent.emit(serverText, self.title()) + @QtCore.pyqtSlot() + def smashclock(self): + me = self.mainwindow.profile() + time = txt2delta(self.timeinput.text()) + removed = self.time.removeTime(time) + if removed: + grammar = self.time.getGrammarTime(time) + systemColor = QtGui.QColor(self.mainwindow.theme["memos/systemMsgColor"]) + self.textArea.append(convertTags(me.memoclosemsg(systemColor, grammar, self.mainwindow.theme["convo/text/closememo"]))) + + newtime = self.time.getTime() + if newtime is None: + newtime = timedelta(0) + self.resetSlider(newtime) + @QtCore.pyqtSlot() + def prevtime(self): + time = self.time.prevTime() + self.time.setCurrent(time) + self.resetSlider(time) + @QtCore.pyqtSlot() + def nexttime(self): + time = self.time.nextTime() + self.time.setCurrent(time) + self.resetSlider(time) def closeEvent(self, event): self.mainwindow.waitingMessages.messageAnswered(self.channel) diff --git a/memos.pyc b/memos.pyc index 1f17bedbfd4515c52fa8a94b12cbad9e29ba7b39..9e525be948707f26774f71680aa375163450d94b 100644 GIT binary patch delta 8085 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 UR2s?-=H?o~ok34<@mt3K0JV!Z diff --git a/parsetools.py b/parsetools.py index fe3aca5..b6f7fff 100644 --- a/parsetools.py +++ b/parsetools.py @@ -108,3 +108,22 @@ def timeProtocol(cmd): if dir == "P": timed = timed*-1 return timed + +def timeDifference(td): + if td < timedelta(0): + when = "AGO" + else: + when = "FROM NOW" + atd = abs(td) + minutes = (atd.days*86400 + atd.seconds) // 60 + hours = minutes // 60 + leftoverminutes = minutes % 60 + if atd == timedelta(0): + timetext = "RIGHT NOW" + elif atd < timedelta(0,3600): + timetext = "%d MINUTES %s" % (minutes, when) + elif atd < timedelta(0,3600*100): + timetext = "%d:%02d HOURS %s" % (hours, leftoverminutes, when) + else: + timetext = "%d HOURS %s" % (hours, when) + return timetext diff --git a/parsetools.pyc b/parsetools.pyc index 64d926f928596007e1af186b851d715f9a0a57f3..fead7da09374c121b527f2160222c2b3b611bc98 100644 GIT binary patch delta 666 zcmYk3-D(p-6vxk*%}2A@O*a~nVnHGr*t?d36pBdw>W7d7w=IfyX=XyEv>VAx{eWE~ zwzndhSLh4)1U`cg;FTBN`vjh|X{tNSng9IHZ_e4>`F;CmxcuXf?|%N;ZujBx$I`CVixAktUOmnEXW{0kFW>8Nw03$OV)FQiQlj%3)=Z zDaxk;5&>F(%t4Kn0}Yvn8>s_{1DVQQs(PAd_Fri+nbj^pT7Y;6c$Jk!I1^d#8g*RY z0tv!EK%L3^|C8RFY!K-}Lfxnh!Oje>l3mX1s{%=Ze*k^xq@yW7Rt;LT9Q+57g$;N*#pPpvYR zZ*Vv|9UHqy>R1iz=(QTpv;1XNpD3%|+K@D4Vfxg+yUzAwJs7C5iu>vn<;+bc@H)Dp zfF3TPOM`Y;#~RIs2r#Tn!|DqW^`^JV52xR&*OqE@#KQmsv4}K;cc-*cDwh1eJ*9W~ delta 79 zcmcbs@myK@;wN6NTcy6f$qZ1y3Zxx?xVUAabPFpZL$C(V#x01@dA@&Et; diff --git a/pesterchum.py b/pesterchum.py index 35b392b..eebf8a4 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -1136,7 +1136,7 @@ class PesterWindow(MovingWindow): selectedmemo = self.memochooser.selectedmemo() time = unicode(self.memochooser.timeinput.text()) if newmemo: - channel = "#"+unicode(newmemo) + channel = "#"+unicode(newmemo).replace(" ", "_") self.newMemo(channel, time) elif selectedmemo: channel = "#"+unicode(selectedmemo.text()) diff --git a/profiles/testProfile.js b/profiles/testProfile.js index e63a331..223100d 100644 --- a/profiles/testProfile.js +++ b/profiles/testProfile.js @@ -1 +1 @@ -{"color": "#aa00ff", "theme": "pesterchum", "quirks": [], "handle": "testProfile"} \ No newline at end of file +{"color": "#aa00ff", "theme": "trollian", "quirks": [], "handle": "testProfile"} \ No newline at end of file diff --git a/themes/pesterchum/leftarrow.png b/themes/pesterchum/leftarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2117a1916642fd09ea685bbd5cb1ddf59a90a3 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)CRRalHRDKKBcPD4r;B5V#p$&Z zJ^2_EIGA()|4+A>neixS$($W$SfWg7lWrM`)g3s!fl0fm;$~!HepA5YRMvZ(K?Td) rA{mae7VKegXDevoaOW<#QZc1ujR}WBx4CjN&|n5nS3j3^P6_&i literal 0 HcmV?d00001 diff --git a/themes/pesterchum/rightarrow.png b/themes/pesterchum/rightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaf3b474ade8814bb05be464619bd948313a325 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)CRRal;nY_z1%X07o-U3d7N?h9 zcI0AE;BdKk?Dzef+gw$X?@v|Ob0r|TKc}0Rvncd_eo5ukC^PD^Rd! rc;~<(@X{fLWuk0{PT&*qHO2EvOgI$el6g)8&1LX(^>bP0l+XkKCY(Ds literal 0 HcmV?d00001 diff --git a/themes/pesterchum/style.js b/themes/pesterchum/style.js index 1522af3..c78287d 100644 --- a/themes/pesterchum/style.js +++ b/themes/pesterchum/style.js @@ -237,10 +237,17 @@ "userlist": { "width": 150, "style": "border:2px solid yellow; background: white;font: bold;font-family: 'Courier';selection-background-color:#646464; " }, - "time": { "text": { "width": 75, "style": "" }, + "time": { "text": { "width": 75, + "style": "" + }, "slider": { "style": "", "groove": "", - "handle": "" + "handle": "" + }, + "buttons": { "style": "color:white;font:bold;" }, + "arrows": { "left": "$path/leftarrow.png", + "right": "$path/rightarrow.png", + "style": "" } }, "systemMsgColor": "#646464" diff --git a/themes/trollian/leftarrow.png b/themes/trollian/leftarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2117a1916642fd09ea685bbd5cb1ddf59a90a3 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)CRRalHRDKKBcPD4r;B5V#p$&Z zJ^2_EIGA()|4+A>neixS$($W$SfWg7lWrM`)g3s!fl0fm;$~!HepA5YRMvZ(K?Td) rA{mae7VKegXDevoaOW<#QZc1ujR}WBx4CjN&|n5nS3j3^P6_&i literal 0 HcmV?d00001 diff --git a/themes/trollian/rightarrow.png b/themes/trollian/rightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaf3b474ade8814bb05be464619bd948313a325 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)CRRal;nY_z1%X07o-U3d7N?h9 zcI0AE;BdKk?Dzef+gw$X?@v|Ob0r|TKc}0Rvncd_eo5ukC^PD^Rd! rc;~<(@X{fLWuk0{PT&*qHO2EvOgI$el6g)8&1LX(^>bP0l+XkKCY(Ds literal 0 HcmV?d00001 diff --git a/themes/trollian/style.js b/themes/trollian/style.js index 5eab3b7..a0f9b24 100644 --- a/themes/trollian/style.js +++ b/themes/trollian/style.js @@ -289,10 +289,17 @@ "userlist": { "width": 150, "style": "font-size: 12px; background: white; border:2px solid #c2c2c2; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200);" }, - "time": { "text": { "width": 75, "style": "" }, + "time": { "text": { "width": 75, + "style": "color:white;font:bold" + }, "slider": { "style": "", - "groove": "", - "handle": "" + "groove": "border-image:url($path/timeslider.png);", + "handle": "image:url($path/acceptant.png);" + }, + "buttons": { "style": "color:white;font:bold;" }, + "arrows": { "left": "$path/leftarrow.png", + "right": "$path/rightarrow.png", + "style": "" } }, "systemMsgColor": "#646464" diff --git a/themes/trollian/timeslider.png b/themes/trollian/timeslider.png new file mode 100644 index 0000000000000000000000000000000000000000..14041bd41831f66c376824cc9fd454db9324e94e GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0y~yVB`m~ML5`iY zhW{YAVDIwDKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%6^-PRY+gq{Nt{rKq1Kz*N775 z{M_8syb=cIqSVBa)D(sC%#sWRcTeAd@J2pyprS>dE{-7;x8B~|$jfBN;}DpfdgRNQ zGGhY;lM8b+<`jt5t@oVz?ew&K_anwikK`P}kN;jE@X2_uKrp$l`;54vZ`E|WI|>xqX55y4Z}xz}c~?|ldj`XNzB67nF3dl!HHz>hEN6B$X_(8$bCIFUYQiDLHzf~P)gOudd)6vs Q1#~Tgr>mdKI;Vst03`)+qyPW_ literal 0 HcmV?d00001