From e4ce90d2ebe7f777a483eead37468cfa844fd4ff Mon Sep 17 00:00:00 2001 From: Daniel Thompson Date: Tue, 29 Dec 2020 20:13:00 +0000 Subject: [PATCH] apps: alarm: Adopt the spinner widget Replace the open coded spinner widget with the newly introduced system one. Signed-off-by: Daniel Thompson --- res/AlarmApp.png | Bin 5202 -> 6006 bytes wasp/apps/alarm.py | 75 +++++++++++++-------------------------------- 2 files changed, 21 insertions(+), 54 deletions(-) diff --git a/res/AlarmApp.png b/res/AlarmApp.png index f2edcd38ca9fddf7ce1ac4f2c83d57741be05e57..183c3d6f0d9606178ba87f887c8a1be6d3d3cf56 100644 GIT binary patch literal 6006 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 Vz3tI-2jJ--J*~U2Dh<15{{<#&-Ms(+ literal 5202 zcmcIoc{J2*|Nai)$yUi5lVv-^P{@VM4Mqk0E5s zKEfb0wizU28OwWn|M{Kg{LXvMd!FZgzvs-HIdk9VzVGknzCNGpx;`)UbktcG&oe?0 z#BxVN#Q=g}w&0WU3k~?EZM69T1hK>Ks3_j^Mw6zr9oao;J2uj%NX<#jjH++w=)M+m zzo6kbJK%jjPUWWBpmOMCy~3<>iu+l8lTD@a=Ez zqXS+<>#4)q^77sxbq!3}?mz@FGc%t+se5{QCMPHVQHBuy($?12*{Pu*BCYLC`dS?; zN5NA_6FC8taTYGA6CUbn3SDU#88V*B_w4M51)8bH>kj-b$<4|^Y=%w^F8%!Z)5DeQ zF!9leL?Ved{WMTj4Lfqk*|;y0CGYyJ4V?F2S`T{VxiXq{%Lkd*wIloK0By6sOU&`3 ztnPxiem_jK&&bmgW@m(lS2&I%TgYc>`?a;SIK$(6ZL7u|`zjipCO-DxK58s0>&5u} z6oY4FW%2OvBqk>Ii74mkX>0d>P8JEMV}f>BSXiQ?qI%8`zf}3QvoVKh{P9X0HLHxQ z9A9k?pvoWoG$bbH>AkJ1tHWNWT`w#ux|rE3gBfoLIs$=l%&-k{xFQKp*Rt);mb<8% zz3&oTI6gd_q#?*SiG=8u$z(6qbvZwZKV{r*^bpq1D3`RdHD->Y@Ut^kfB5i)$>Qqo z_V%vyudAxuj}8y$%Bym%xn(>S+g_ffv}*{qMxL?Iw|91qQ8|>g+FTsS?}*_Mu?{1c zr#-6oSSl{czFRaj3g%S?9_%Se(J3hG?d`4RosU)%H?99*(|yk6-H)`Wjg1X;M8F3O zroWz(HG)=dhFKxR*U#@-dQ|n~=qQD{*3vQOdTM23r*(ejk5Dght)Vv@SpFJI96gnk z@XiRsEANk=@NMit($mv_{rWYb>y2kcb@j+Zz{DPvdM&-Dbo)7kSIX17!EILKY#Oq% zw7gt-4xp*Np~0x^;RTnM5q<}Y`LU~JH?~XPf{h#Mj~@`pCAv6usm!eG?2n%`U0g84 zEj+CkfNN*G0PiSYKQcTbVyx8on!LQT=})QlG(Yr7=p`}#0_mlisp%9JtKjKb{d4XI z_iRu4H81g7T369j3$)fy>D#w2RQN}W^oK`iG!wSE;+K||>T;d|SeTlc@)CTG2OBPe zWU%Yc4%iwoDnO(%5Xa1eoW$R)m3X00{mZI?Y(6s~45eqEw^>y@y`d!zWmYo@@WvV$ z8A)HiJ~B4e@0;CcjhvdA8kEVxjow6?4w|J+Hu=@$<^AESZJA-KsTtXg&=N`v4Gryc zcs;QAW1*XLk_k!$F(FUZUAumLq0y~3<2pIE{^Kb@%-grMe%s|9YT~3z2jAKwDe}K; zWA55+wMzDehlf89RTGC!ed_3VT!DY}4-s_ERW5Gs57S8x;^e%Gii$=yE$q8?Kwgk+ zw%4|A`04BG58&}>cMIN7=_I=6=dB+<&fjb_sS^6(bAw^6J(8n z@nlWS@Fv_~Z(RU-+UVPC?LCMrw=)w;sm#PMRz|$vyYf7ad8u@n5;4k*ds|!#=iy0~ zVhXl)bnMwRvkwXiI-Hp3darY1H5*Jj?Lx)v7Q$C+L}2gJ3hg7X2UQJw1JMes)gH}B zC1qtS->yJC3;Wm?RGg$>h#+nk`MfDxVPJT87~c&G(0AqQdS4{7;e9K27?$Q>ZQUlX zC6Ie6l7R|;|2lx{I;8n!T5T~1iEenZ>qV2>d09k+v_Lm4y@5TlzEPy?OhC}j2oM>N z&%B-3ERc*hI}lJmTK(Bxv)fUkB_d1_8JzGw!t8W}3SBKVank{I;mqO}rl%ueK^>CN zDH0iB(IY2FI?V=9PZaVyS{6UV!l!pkMgj2c>N@wtT?%R* zJ%E?ac4?k_G~qv%-zd>7Y}BW}Osc-qH&HZLd}~GjXr%te^p>!C50dQQol!75bWnTDC??Ka|%uH>(R4S(BrU2Ntc2Qe;$aR_b8 zdWk5sistXnBj(9xJLVoq{(o7(UqA@HVAGsMamU1}fBVCw zFQI+zkx~y33~4qy_GI^rt;P=btQK#y<_qIL$qS3wshn{~3aCG~4|nDkx>F7{i!sxN_vA7i^x(#oza@b%u9S$a>#ZrfI&o`_+B#_C z+p%@A*_jdDy=!!A3HopAf4Y85ZV3PT2aw_Oso% zD5V8%k|rOl*rTL0V$|TEDT%vFxS*0Zv7mjm^dA1e*f(->E%1!!YB$7Zk#dGTd*xMVM_uQ?>eT-w ztefEDk&^qPN|%$7$IxR(B|@TR0CD@9{S)2!`T2l$mONy5W5>qEI9zd%s2UiXjX=on z&L{RcBy`P_CTbYy>0edfht3sqcfG}6j+TmYWMpJs5B$C%{R`GA#c$hA^c;0QQ5Ptc zY2THy2t;6Q=fnw%fzR79cMJ`O@{}VEfie~`D(AlCy&lG4COrBZ?7^EyJQB@5o8JK? z>S}AZTUF#9FZRjxe<$<^Bcb$t9nLfStyC_S2)n~wIoRIoVO*-f8<>h-wbmFWB*m>Xi`{hL1222DV5%W zX3N@G1Kjb^|1E}WQa}wcUe<=l4mMst?fBz01lbA*j9A@;EtLnhUBVa!4#0}5VJCwJ z`TtVD6@$Cd($h~mFF@bV0=kxfk2^}$Cex>)#@(Q2jyeBC=QAQ(zY?tT@85^TCtfM3FMaQI`|Vj^XvsU#jt;39IYH&TICr~m{;SrdW=#+4#l_%aVq$}&%*;&ELUHjWDhUAvrlZklAoo+W zhdfwiq=yyDF65V$Y1cPda+Z~qQGNiyicBxXV2q4tEXsjLutqNV3;ov7V#&!R?VRL{ zx$qcRMv7ZdP)m2t!z$b8CbUiw0|UdFWQ=%?r zd-HR%nsk$Izs=APL?5MtM;1kXV{pl{g$cq*0DYI(H9ysW%34#ZT??D#Y^->&y3v71 zC7Ws<`-~yo+fHKd7#@B2_)$i8=c=4s07!DbZE_gSk~r`haw{n=J{f`ACQmhZuB2?9 zoRHKm<_LehPR3W{S5_MAjlb}4z)6_-Z?ta``%St70s>aXFsP#{5E}5i@5o6g5zfo| zF~%)gG_ZHTOG{-g&|bnm zDzpy=9#8n*&L#KNOKMI|PAC*gSvj1=@6BHf&iw=FWetbwO(EMrvoa_nu*+U7Qfigf+t(Suak43ipXAYKS`Iwm~GAMd@cr3rfhu~?PTArx_pfjmyJAjmtpW98U}$KFKnR>|4MQJ2;fb`$5JFhc?OSE> z<7L>8L>8}AyzBms>+Mqk85{SdGUY&fB}Cl|COiplt!4K+R}jMvXhP*wF`LL_9a1J- zWMyT=AJyuiV{?FeqpI*?`IB^tNJAvL%j}GDn?2VWP-}#02cy%W{BhQJdIpA|o!JP0 zQu8`Do6!!!!F?km;w-I{!hja26FEl|Q;=YwdsO2%UKv28WXYmR?4XnrnaoAS#l;{! zqhey{2fpU3$7ai-`nE@C0>|sziG(J<0COkF^JV4b&W?^AN2cm@mkAyH`2&jrvA5X1 zd^Re5aOO(}%v@4Z(s8Q3de~%^Rwo3sG5*WM1zK#+j$kRs7gdE5`{AHh2;EWDQ7Kol Gc=k_IC}0i% diff --git a/wasp/apps/alarm.py b/wasp/apps/alarm.py index 9d647da..e6ee4df 100644 --- a/wasp/apps/alarm.py +++ b/wasp/apps/alarm.py @@ -14,6 +14,7 @@ An application to set a vibration alarm. All settings can be accessed from the W """ import wasp +import fonts import time import widgets @@ -49,11 +50,12 @@ class AlarmApp(): def __init__(self): """Initialize the application.""" + self.active = widgets.Checkbox(104, 200) + self.hours = widgets.Spinner(50, 60, 0, 24, 2) + self.minutes = widgets.Spinner(130, 60, 0, 60, 2) - self.active = widgets.Checkbox(104, 194) + self.hours.value = 7 self.ringing = False - self.hours = 0 - self.minutes = 0 def foreground(self): """Activate the application.""" @@ -76,80 +78,43 @@ class AlarmApp(): if self.ringing: wasp.watch.vibrator.pulse(duty=50, ms=500) wasp.system.keep_awake() + else: + wasp.system.bar.update() def touch(self, event): """Notify the application of a touchscreen touch event.""" - draw = wasp.watch.drawable if self.ringing: mute = wasp.watch.display.mute self.ringing = False mute(True) self._draw() mute(False) - - elif self.active.touch(event): + elif self.hours.touch(event) or self.minutes.touch(event) or \ + self.active.touch(event): pass - elif event[1] in range(30,90): - if event[2] in range(40,100): - self.hours += 1 - if self.hours > 23: - self.hours = 0 - - elif event[2] in range(120,180): - self.hours -= 1 - if self.hours < 0: - self.hours = 23 - - elif event[1] in range(150,210): - if event[2] in range(40,100): - self.minutes += 1 - if self.minutes > 59: - self.minutes = 0 - - elif event[2] in range(120,180): - self.minutes -= 1 - if self.minutes < 0: - self.minutes = 59 - - self._update() - def _draw(self): """Draw the display from scratch.""" draw = wasp.watch.drawable if not self.ringing: draw.fill() - draw.string(self.NAME, 0, 6, width=240) - draw.fill(0xffff, 120, 112, 2, 2) - draw.fill(0xffff, 120, 106, 2, 2) + sbar = wasp.system.bar + sbar.clock = True + sbar.draw() - for posx in [40,160]: - draw.string("+", posx, 60, width=40) - draw.string("-", posx, 140, width=40) + draw.set_font(fonts.sans28) + draw.string(':', 110, 120-14, width=20) self.active.draw() - - self._update() + self.hours.draw() + self.minutes.draw() else: draw.fill() + draw.set_font(fonts.sans24) draw.string("Alarm", 0, 150, width=240) draw.blit(icon, 73, 50) - def _update(self): - """Update the dynamic parts of the application display.""" - draw = wasp.watch.drawable - - if self.hours < 10: - draw.string("0"+str(self.hours), 10, 100, width=100) - else: - draw.string(str(self.hours), 10, 100, width=100) - - if self.minutes < 10: - draw.string("0"+str(self.minutes), 130, 100, width=100) - else: - draw.string(str(self.minutes), 130, 100, width=100) - def _alert(self): self.ringing = True wasp.system.wake() @@ -160,6 +125,8 @@ class AlarmApp(): yyyy = now[0] mm = now[1] dd = now[2] - if self.hours < now[3] or (self.hours == now[3] and self.minutes <= now[4]): + HH = self.hours.value + MM = self.minutes.value + if HH < now[3] or (HH == now[3] and MM <= now[4]): dd += 1 - self.current_alarm = (time.mktime((yyyy, mm, dd, self.hours, self.minutes, 0, 0, 0, 0))) + self.current_alarm = (time.mktime((yyyy, mm, dd, HH, MM, 0, 0, 0, 0)))