From 1bb7cb7797df21c4bcea05ba20c7021804c1fe5e Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Tue, 1 Mar 2011 09:58:00 +0000 Subject: [PATCH] Basis gelegd voor PanelDevice, todo: - knop icons cachen om echte togglers mogelijk te maken - rij if...elseif equals statements met een ButtonList loop korter maken? - sliders afhandelen - feedback terugsturen - naamgeving aanpassen --- java/.classpath | 1 + java/resource/icons/camera.png | Bin 0 -> 1548 bytes java/resource/icons/comment.png | Bin 0 -> 1185 bytes java/resource/icons/connect.png | Bin 0 -> 1562 bytes java/resource/icons/control_eject_blue.png | Bin 0 -> 2090 bytes java/resource/icons/control_end_blue.png | Bin 0 -> 2146 bytes .../icons/control_fastforward_blue.png | Bin 0 -> 2027 bytes java/resource/icons/control_pause_blue.png | Bin 0 -> 1962 bytes java/resource/icons/control_play_blue.png | Bin 0 -> 1971 bytes java/resource/icons/control_rewind_blue.png | Bin 0 -> 2044 bytes java/resource/icons/control_start_blue.png | Bin 0 -> 2148 bytes java/resource/icons/control_stop_blue.png | Bin 0 -> 1930 bytes java/resource/icons/image.png | Bin 0 -> 1292 bytes java/resource/icons/sound_mute.png | Bin 0 -> 2080 bytes java/src/pm/Main.java | 10 +- java/src/pm/device/panel/HoldButton.java | 33 +++ .../pm/device/panel/HoldButtonListener.java | 6 + java/src/pm/device/panel/Panel.java | 216 ++++++++++++++++++ java/src/pm/device/panel/PanelButton.java | 14 ++ .../pm/device/panel/PanelButtonListener.java | 6 + java/src/pm/device/panel/PanelDevice.java | 32 +++ 21 files changed, 314 insertions(+), 4 deletions(-) create mode 100644 java/resource/icons/camera.png create mode 100644 java/resource/icons/comment.png create mode 100644 java/resource/icons/connect.png create mode 100644 java/resource/icons/control_eject_blue.png create mode 100644 java/resource/icons/control_end_blue.png create mode 100644 java/resource/icons/control_fastforward_blue.png create mode 100644 java/resource/icons/control_pause_blue.png create mode 100644 java/resource/icons/control_play_blue.png create mode 100644 java/resource/icons/control_rewind_blue.png create mode 100644 java/resource/icons/control_start_blue.png create mode 100644 java/resource/icons/control_stop_blue.png create mode 100644 java/resource/icons/image.png create mode 100644 java/resource/icons/sound_mute.png create mode 100644 java/src/pm/device/panel/HoldButton.java create mode 100644 java/src/pm/device/panel/HoldButtonListener.java create mode 100644 java/src/pm/device/panel/Panel.java create mode 100644 java/src/pm/device/panel/PanelButton.java create mode 100644 java/src/pm/device/panel/PanelButtonListener.java create mode 100644 java/src/pm/device/panel/PanelDevice.java diff --git a/java/.classpath b/java/.classpath index e387117..10efc83 100644 --- a/java/.classpath +++ b/java/.classpath @@ -11,5 +11,6 @@ + diff --git a/java/resource/icons/camera.png b/java/resource/icons/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..e8608c239e525c9035c10a39e0cbbe464cf16236 GIT binary patch literal 1548 zcmV+n2J`ueP)Kz!xF7iKK$D5 zm!D>al#1R<8}8Ws%1dGw{*x*bxo^|Vx<+kBuP|3?i4!BAH4fo=9T*IaQ^%` zxLi($+6^H#>#Ml$cIcS=J zO7fGcw}6||>7>nF*tBI6h6aa3e{^&dYuBzN00xOk{*wg&ndGm(FXP(8HN@lbc?^Uj z5p;C4BiIxa^TN>>-VWr&STYl%gJ`JDzEuGB=}wz!OiWCOjaWz5io}Wo4x$Sq zBSuhCZ@fZaCqZouG~ zLA18DQIzK_0GeJ|0JwDN5;CbILeVxH8*^bO?na?hiDVb~KQf1HtGtL$Pts}2SlzW6 zW+g&-V}n4JYp(7h0H;o#sxsgrw{X*l0gi!GE{n;VH=wqx#OG%l(b5{j*1jlOVgX@y zb1I9`tJ5?#g;yVTlI<0!6s-P6zi=S~&<*{+Q!z8Zr&L2BI~fQU@cFNfPoQl@3_p!E zVqJF^dLCE_Z-W=vm}BzE2>=VKU z8ebjLUnN&8S3gS;8E>0};uA07Z5^;W4&hTiSj; z1GHA{Ex02C+)AYqbW?}Z<-sJ~>%Qh$0wqJ0og@l^vO@^>S;u2+!?rG`M?}6s{%7H} z%1dE@T~Hzym~?-m(J+QDj$mh30cTQijAt|iB_~=Hj}Y#&j>p)BZ6nbL&Ar6}ueGQk zxosYxbX;YCuA-`jDXOP&^jJUkZQqJ-M-tdOY+$yMh#JWJ`5p)Mt<&-2(SAxm#F84K zJaQ}fXxeR3F)LY^fwO~W#baa}G5~{UR1^o=THEo@^=tU<&=G8WWIbMdp%Y%Wm9PqP z8oj3DG&V$YCCaAlVvcEQ)wtueYOi4xfR*nJ4E#1At`7$uKST_|e!)1K1p)y|EUidT zJuqCO%6dNJsb(k?i}L_@iMdAF*hB8Ksx9js;BSs6i&be6fO0yWKGEOb zztPUwwXbBo!nL+GSlDcL)~x|)PClPMVb@4@P3WioeI${3fq9o3`ykFw3s*$dqO?+@ yc@|ZXcfaw;*>42_X1RYGO80)8E;oRG1sDLJI6MV&=6-$v0000e*DtJ=?ID#Bg`zQ2{92c8WSC3PNGakV#Li& z7nUjh=osrtfv(HCY1gi|$M?DSR=d)&qPOlW&zhcl&htF?ocBHFtt5n?xok4caZ~Y6 zlBBc`AAatG`DImi>=m-IjwGc*P&@gE7pE5(iWz~C=0ef@6Tc*e2Vf;0w{$M^r( ztmoy|-CeVgR^3uY6{XrWy_t7(ntu2#K&Q`Mrf6j9!$b8epXP2O8w1*7O+O9QR+f}M zxu%NZ+~J=j3Pl-_?8J-n7&?)=$lBwNItFQADCj@DbJ-&PI(;<*+SYyD=kHqVazC+V z5&1$yBNJ>}U|F$M*%?4wW3v<6UjlSY<}zHf!fLi zrno0a1;)T|Xqd1YgGC$4Zo|uuNbDx7zmh6Kf)c_78 zS+$}zR~IC>p&`;4h#Qeh-iuM!d_F_tIWnNL8f%zZspmi}8VY=W>dXig=+;sxvavV>D5mTu~1&a8p&Tu7CfPVt4h19qVtUdzY3|G-ipas&$4cl-UIO zJ;4Zl+dD)jdWLDt=lQC0e_bPY4>1DC^+4K+h_Qg-X1MAPp8jU{Q!6QKSo`T44buzF zr`V8@v6eLZW062)+~584C%fL840ydLtQcdd6_J`|{-o`Ctb*h^GK`#$fb zu7fXb37+e}JloyF;H!i({M7mN4U_~y|w0&Vw~ePY!!&8^&D!?@15TPm{w{n0nRICLQ@#NK25 zV#SWP4|Ct`jO(5JL6hlsfq5>hZ)^)0oPWbzZ7&bB9XQH;K6^in|HD8r(veYQr_M#j zA5MzTW&r74Xs3194kqXC$+`Y@EX}onzXTWna^bk0xa+Mf00000NkvXXu0mjf{XjX6 literal 0 HcmV?d00001 diff --git a/java/resource/icons/connect.png b/java/resource/icons/connect.png new file mode 100644 index 0000000000000000000000000000000000000000..203b5e24e74f7c1fac622dfdd4be80c8307914a9 GIT binary patch literal 1562 zcmV+#2IcvQP)J5vqSMC&n{u5Q3cR?RdJZDQ%ZT5zZw_6qAXvH& zI+$hXs?5{e?&4i*clTYr;v=lvn~J$U8g$rYf*q6)=upuv2x#pPkoZ*?@<%LIp06jg zy*TKg>cF+w@Ht7xFF>Yg>a`4(EnkM{1F7)y(h{lMNz6;nh1diUPul@b?%n=@2vBU7 zDekiRaDB|w8XP&54F`!Bq17NXVkveWNynRGHL!^?fyhk!_xQ!jg}S|+cS}IK9{nNgR7pyyTR|{Oj-`c zxp6(5u-GU`8D`J|bn{H-n+~pDilpS!&KcB7?i1H8nQe|M^}vIBrAXL+*myH8%$R%e zBF&V=NWB)*<^>}^Cm-%E40uXPf%2fKUF>s~tTXF(ei4D|X5dJ4B#!==0$Ne9a-O~` z7QFNDvfEOq6|Lf0+>)UDynINMnIm;t_|6W*ox&R=ngvfWXrd4>EITLxuCha>=NDYs5~kDuai9XUO2}FSnJknbh$1;5AmPhMoJ~oChT_qo^%(Cz`|U>ou@_s@ zPab_R)-VNeek~}uQ3wefM(8x)MteQ9{9b}fTf>9Y65KZ698glGmHbm0jRKK`+XV*XOg?dy247r2U4K9y}$Q==8T z0tA?fi!gbXKUrn(MLmnk;+x1f(T49Csng{)Pyt%WF45*O6Emhyhn0HiD)%y^-sYg~ zTwE_FWWMR|b#76~g~15u9s*s$j@|sHYd%KuvE!ZgDmOQ8++cK8#nc{OJ&6uc3PFE|$Jvx~ zH#U5`xr==KaFBM-0XM<~f{XgbGURv;R)9u*QDoKErC}pij=uyL0Hv6zg=-!b)&Kwi M07*qoM6N<$g3J=?c>n+a literal 0 HcmV?d00001 diff --git a/java/resource/icons/control_eject_blue.png b/java/resource/icons/control_eject_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..3a528af4ed7f89792631d5b62f9d483bdb683a56 GIT binary patch literal 2090 zcmV+_2-WwAP)B$4cH{44WU6kO4_PwiD+mV5N#4Aq5UU{l0QN(dvmPU2gP(&Z)W!UzW09bd)N0yz$~v7+jl2> z=M+4yi_)Vy#3hCS81&;y;GY19(9esy_D*=H>$hk3K0P`cxx(${S3mpvVlgS>J&)VH zsAhRSRupIAo_QH?OOsg@&A_S825}}ZfW}XH5mA&@{pR4tk6-^@2ViS@hYCn*UiizK zvfI7wnd)-XEz5^SgPk`t^o?m4Q}juT{caJtehGzX5+wRx-_ncSNB<2~QQm6WS@%O4 z((Xh7x$?!vu6yQXpO%d9MHT<(b43Y(r!G&9E?I@rVNg}W;$BTLC65jqt zJKp|#Ti?e!YYL|-;hMhl!`<7~EzJH7fj9Rk=pIqQ?v|z72aK~NN0FAkFb2kDY+gH` ztYPGe!r|@{FV%b@UI{7Q=atVL-20^kdG|eATaGim3a*Yt;UaX2wk`@B>61wmMItK$ zCXJhO7L7)9+*Ax~Sek|NU7shp%Qxiq9RG8p6PS(y!qUw<7o_AC{ciVTRTN}8`CEmH z%qTf#k0Zh*#YDJWlKHgUVpy>ezs@FB!b9uUm1pCJx~-d}>Gf~5x; zGp0cPs=5rH&s(;E^8B+Ks<{*PIR{ca(T3r12}tlt`0<_w?AcmHw8nhrF`jeHz~{tI zfUH`xq7bqymocWJfRtDH&Bwm7I1drZ)S+P1G`l#3Sdg1;K937Ke${}VZ&{7kjs;A5 z<@;6U7|-z~6qQ z-&l!VA9f*RNG84fw<~y(#(0j`@Y<>FV3{nNF_sl&Lh|`HF*YmUHC*npr9~NLuyBCI z6Um}rW3#*P)a&(lqkwze)UlgvNM|*YH~AVctpdBr6~n7o@|GJY|f{ z3b+hPTAxRNN)<$!5=64S^Cx!ImPm1 z1hT=*;sn8fKS_2@C&3lZ&4ZF8!~g`lpxnE-5FZ^qX6^#9BX~NvQwnuLVjj^>WgFj; zZwQmlMpwK57XfI35vPD*s=c+Yf&#C?w9ahKQJu^jp<)}Pv=Rj)hG!apgba)*F?N@; z)A0!9xGb7+5N`pQ5@lb*CpgjCZCk(^N9<4%CR}EZumx5v%)^$4mXR_>ta0JHmoUa7 zk(ex(Ij)A<+xti6=g&<>P@UKuN3KlKeEiccy!`Y=D73Ap7KN%t5shj@^wc!#KR=^P zDm5c24mEXPYfS~Bx@8gP^2q|4E>aaHOvYvfqT#{rhSQh(c9iC)U__X(EmirL*>8jm zGO#%2Y= zfxqtC-&}h4j>jJ=qx2CFR*hH;@Neys0{r4P^|5raJm9!t;>p!6k@!x2dJXq3y36*t z0nrYE1loN_(dbkhLg4*<`x%=RP)2($ULPDB>Ns|;zqqPA2P$_TcIfIh``vUu zdzirM__Km&nA2~jrqppogca#+I?x!*Sd!D!K30;N>_hooN!IZi4{A4_X4@qRrlLNN zdEVgN<_^4es0E#Eml{v)+PvKcADr5j-}1wRD2*sPYtem+imRXeX;xNd;p(y+R4&X# zakihLdg4rBAzaG;b!8YQFZAKW#Xf|_MmhtHd!GMK>qo6Lea#L!^^QKxxONcDA<9gc zlQ;K^8@AUb#BAvRM>5Vg}wxz&!RUjG$f0NivW UdRcP1j{pDw07*qoM6N<$g2*TS_W%F@ literal 0 HcmV?d00001 diff --git a/java/resource/icons/control_end_blue.png b/java/resource/icons/control_end_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8a6edb1bd2eb9ba34a000d1deaef23e1719a7e GIT binary patch literal 2146 zcmV-o2%YzdP)J7`=<5vd;U}?Bxf`^ z6lM9=JM&;oVJ56yngNO!yH(W;IPp~gPWeWl^>aUjRJBXL7P$Y@=YP}(U|D*T28bJK z-g-$^l-)nyQVLb8@<79f{Z}*?n$%!Y)nk}b6ajKlL|C#=1QG9>JN;1i&c7k7sxP z_Kgf5-@hdvm%}$=fV{58+yBI-(wtoz3ZQpPgMSVO0cC+e%Gvx@+Xm=Jq5!bUlLSlC zMR>KX7he5G&(No}TbINeAzklz%fRmYmSsPP$~y*C7#I%&g*0DAsR-Gz*+{5@85cBv=L%-%*&r?ICOV$ZsneBrEtox!o|r5NT^*Dhy)M>Gus(s z2}wX6lb3N`yoK?Q4%buzHm}Trvlp%=E2W!r20!^*tDTs(0c_>2+Tzrlf{_Ewl zAB{$bKz8S^XxM%4GTb3R&*%&)XI9J^$SCm5wtvCNa|3YT$tqC88s>zKFk5{fil?*N zZ}yGiJlK9u8HB?+iZq~mRE71oIN{NIir}!SHXzF#RJ{T*=dG*Ca5|GpHe;QCbtTL# zr2FO*TXMf@Pf-B;xoqAqIpguPu)){;Sbdtp|i(tq9)Ddj}KAZx@HNY zB$tp*(oF`4x#bT$_T92v2w|m;PDeQGLKKNs`p;l2Yad<~ zryI{Bg2F6{d>tu(vKjs4ut} zcf(V4UT`{O+$`ZbCMYxWLq#W?4rSKxSs8*Uhjgqe$OO@uvXgX^0ZE3Wl&mbs;K@Rn zn}|#Uu;V!usQaiNo_TN`Jo)@v;7k$`QWP$lH5iN-;E>JKx=xO0CS+NDIvAp(gmjYu z5+#$_k{EHy;|98BoB0*z-!;OU3H4ZDBa1Spg5Cj?|tfS>E+ zaF7g0NtW#C#H8pxN)M@?qdOio6p2qhgIn*A&G?c7RPzyo@&DWvj*?)8fIl;1&!Sqj zXt0>sC`I>i30=^b5o6(a8ho(Hi8n59I!H3U(SWzN4W+YK+)x51HL?ZC#Q^O`3f>LSDghHX5H zF(3(bOoc+Tc_oS!c( zCIb@7aiWed`mhV5PTD}*BEi6b_hk1FB+G1`DliSu1PK{(d_?zG|Nb^lQVu>6D`Kf~#TW_KjtWd3{rI zF*~;SpUwlbM{yQQHV=*qRBo8#8q6>_G4mI?8SH(n11=Bxn!B41zK%;*D6M74`(_kU9V&R}}Q{kfTGuG{lcxG0`b3B3MaL?LnFtXtp$c+uMhADrwBbo^%f zHWV|6G+{X%V*nwhQa8QWUjME?y<+>wM8tVl@nZBM`rKzCl4xM@k&9t+VC!~cHBARK zc=qTiIMFpQhRUnxwE}63QY6u#)DA_64Dq+uw@zoQ@U-_%7Nsq4Lg_8ZeB{Q~wMn8i zFUU}*gU=gi?C68vz1a!}Y`*l`U=92X# z9w=Xy1BKZsknEV7DI|ni`4?Z0!Dr`&;P{tAFf%#c?`wTw?|-^J?!x6uR?>xU>eUPh zBM6I-GF^*u7k_JW^){EM=zBs^a)BOKhlGd`y7u+daL)(6w-0%zM=w&Hk08WJhY_p1)cHJ)zy2%0 Y0I_8RWW5ui&Hw-a07*qoM6N<$g6RtSg8%>k literal 0 HcmV?d00001 diff --git a/java/resource/icons/control_fastforward_blue.png b/java/resource/icons/control_fastforward_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..e3489591b2a5cda19c82579f6e36d0688b31fd30 GIT binary patch literal 2027 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 wIZfmdnFg9MMH9UqhK=%4`m#9w^Pd0%0D9&Azh}>Zm;e9(07*qoM6N<$f;khPF8}}l literal 0 HcmV?d00001 diff --git a/java/resource/icons/control_play_blue.png b/java/resource/icons/control_play_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f7345f3713a730b613faf82026caaa0adb375c GIT binary patch literal 1971 zcmV;k2Tb^hP)FuzPnw&Ga@2NOxDg`J$q# zyMDH*0$W!WL8Ha4>l%7TG>k;`q?i4whyuTa`Ew*l^#AdeAZp(J6tQUZrBl^gpQ0u0 zb_ghy`O6CHT< zz4qRZsyEM{OhTS&d1Lpkdza)rM9Q0cqUauqfy1pxw@w(xB!@^#Zy5cf3U=PJki20O zh(crc>HVAUNF*U8#=LTG-J!b{6>iwGr2^-IQCt~`LniGKnJx;P=@vv$Bv_d*B&<*D zo9|c{j_9}%HL!6-E-qgF%BNOrEa*A;_a-MX9Rk9Noz;sn3QGQ1^VoVyGM(ZbgG_Fe z9Jkw$XhEe7nS5-8!?1EfmFwbhEGZlLO(QlW*SG=N* zbxsf{TDvvd<8ha7q&olNdd#$lW6p_`2-0m@-_jPufydY3=PxwC>yl_qF!v_E@4(5Q z0C{!u>iJLC+=i@{uPDhjlSO1JZUKt`bw7`an)kb~_o21;>GN;G z*fNhxF{D`W&?PVA$+$aS8o<8fn=%_(S@mbetvJeZA9DAnVJCFzu&ZcJ^} zk|89`Mmcd)CKqUek(xk)2cm`u7r9%oW!IKu;<-0I#9#JqqY8q?5WZ>15q} zTs$1=ZaCZ43!fs)q6#bmnkZvlrWbYfC-B#O+vx^mK-aD7SxQ-Akwy*pTzenJLzf#^ zHxmd4{_*nR=C-TkQczc$*$eD5jeHyvDf5s06G!%w^0+>uh0XkB)e{tz}Z1oZdi5)jvZ;j(Q3Aw{K%IT2-C~hkm<|} zYCA_xc0iAgbqh%o2)oGEN$=&a-Ao0XD5$NRm`Fx^*|4 zZX74VM}|cxK@S`~kIuIaK60Zk5FoK}=RTm*!kE9TvgE6ny7-=D^URvojp<47I^PE- zuH`c+Hxp09oHPN?{<#^~dIHDWj{oj861&c+G(mv>={?(cA-?dw2lMA8e zsVTP}yHKs~ff+!abkm&9@Ctab@e*1-4-R~M;Nc&UXdlOa@|BFQ&3f=;?b|(B>+dhj z$@DHR@|$YRHa!bBC*7P#xrb(5x)(Uu(294@c7&RLy=@B}(?b}xjZPxK{*3aRxpJ!Z zonY4bZT-V>&o>v%BP$Z`gSdI`n{MP%Xk65;)2N!p!Ww>g_#Do(b`O&Bt^8R*807Ms z?o#T6BEm$1r)rzVvX|$d>KG}@O!uJTYd&ktCe^hC$(|8R)Z;Se4URQ;;$mZyjnF8@R%C-cR7$@7V2rnkDWlHjy+!Iw6DLNw`rbhHsoO zWGC6EtvL4oewPcJdE4r6-{OF literal 0 HcmV?d00001 diff --git a/java/resource/icons/control_rewind_blue.png b/java/resource/icons/control_rewind_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..de9fc07b247950c8cb283a10fae0316d2954f35b GIT binary patch literal 2044 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 Qvj6}907*qoM6N<$f(mk(X8-^I literal 0 HcmV?d00001 diff --git a/java/resource/icons/image.png b/java/resource/icons/image.png new file mode 100644 index 0000000000000000000000000000000000000000..00c0978f63243785fb4455b06de0cc3ff1a870de GIT binary patch literal 1292 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 KMNUMnLSTXiGU-VG literal 0 HcmV?d00001 diff --git a/java/src/pm/Main.java b/java/src/pm/Main.java index 2d141ca..b797f58 100644 --- a/java/src/pm/Main.java +++ b/java/src/pm/Main.java @@ -17,6 +17,7 @@ import pm.device.gui.GUIDevice; import pm.device.javainput.extreme3d.Extreme3DDevice; import pm.device.javainput.rumblepad.RumblepadDevice; import pm.device.jintellitype.JIntellitypeDevice; +import pm.device.panel.PanelDevice; import pm.device.player.PlayerDevice; import pm.device.text.TextDevice; import pm.device.text.lan.LanTextDevice; @@ -51,22 +52,23 @@ public class Main extends EventListener { } public void initialise() throws DeviceInitialiseException { - //add(new JIntellitypeDevice()); + add(new JIntellitypeDevice()); //add(new PlayerDevice()); //add(new RumblepadDevice()); //add(new WiimoteDevice()); //add(new GUIDevice()); //add(new TextDevice()); + add(new PanelDevice()); //add(new LanTextDevice()); //add(new Extreme3DDevice()); startDevices(); //add(new ExampleApplication()); //add(new WMPApplication()); - add(new GomPlayerApplication()); + //add(new GomPlayerApplication()); //add(new WinampApplication()); - //add(new iTunesApplication()); - add(new VLCApplication()); + add(new iTunesApplication()); + //add(new VLCApplication()); //add(new MPCApplication()); startApplications(); } diff --git a/java/src/pm/device/panel/HoldButton.java b/java/src/pm/device/panel/HoldButton.java new file mode 100644 index 0000000..8abc9ce --- /dev/null +++ b/java/src/pm/device/panel/HoldButton.java @@ -0,0 +1,33 @@ +package pm.device.panel; + +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +import javax.swing.JButton; + +public class HoldButton extends JButton implements MouseListener { + protected static final long serialVersionUID = 1L; + + protected HoldButtonListener holdButtonListener; + + public HoldButton(HoldButtonListener holdButtonListener) { + this.holdButtonListener = holdButtonListener; + addMouseListener(this); + } + + public void mousePressed(MouseEvent event) { + if (event.getButton() == MouseEvent.BUTTON1) { + holdButtonListener.buttonPressed(this); + } + } + + public void mouseReleased(MouseEvent event) { + if (event.getButton() == MouseEvent.BUTTON1) { + holdButtonListener.buttonReleased(this); + } + } + + public void mouseClicked(MouseEvent event) {} + public void mouseEntered(MouseEvent event) {} + public void mouseExited(MouseEvent event) {} +} diff --git a/java/src/pm/device/panel/HoldButtonListener.java b/java/src/pm/device/panel/HoldButtonListener.java new file mode 100644 index 0000000..fe21235 --- /dev/null +++ b/java/src/pm/device/panel/HoldButtonListener.java @@ -0,0 +1,6 @@ +package pm.device.panel; + +public interface HoldButtonListener { + public void buttonPressed(HoldButton button); + public void buttonReleased(HoldButton button); +} diff --git a/java/src/pm/device/panel/Panel.java b/java/src/pm/device/panel/Panel.java new file mode 100644 index 0000000..2f97ecc --- /dev/null +++ b/java/src/pm/device/panel/Panel.java @@ -0,0 +1,216 @@ +package pm.device.panel; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.net.URL; +import java.util.concurrent.TimeUnit; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JSlider; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import pm.Device; +import pm.macro.state.Press; + +public class Panel extends JFrame implements ChangeListener, HoldButtonListener { + protected static final long serialVersionUID = 1L; + protected final static String TITLE = "MIMIS Panel Device"; + + protected PanelButtonListener panelButtonListener; + protected ClassLoader classLoader; + + protected JLabel timeLabel; + protected JLabel chapterLabel; + + protected JProgressBar positionProgressBar; + protected JSlider positionSlider; + protected JSlider volumeSlider; + + protected JButton previousChapterButton; + protected JButton rewindButton; + protected JButton stopButton; + protected JButton pauseButton; + protected JButton playButton; + protected JButton fastForwardButton; + protected JButton nextChapterButton; + protected JButton toggleMuteButton; + protected boolean setPositionValue; + + Panel(PanelButtonListener panelButtonListener) { + super(TITLE); + this.panelButtonListener = panelButtonListener; + classLoader = getClass().getClassLoader(); + createControls(); + layoutControls(); + pack(); + setResizable(false); + setVisible(true); + } + + protected URL getResource(String name) { + return classLoader.getResource(name); + } + + protected ImageIcon getImageIcon(String name) { + return new ImageIcon(getResource(name)); + } + + protected JButton getButton(String name, String text) { + JButton button = (JButton) new HoldButton(this); + button.setIcon(getImageIcon(name)); + button.setToolTipText(text); + return button; + } + + protected void createControls() { + timeLabel = new JLabel("hh:mm:ss"); + chapterLabel = new JLabel("00/00"); + + positionProgressBar = new JProgressBar(); + positionProgressBar.setToolTipText("Time"); + + positionSlider = new JSlider(); + positionSlider.setToolTipText("Position"); + + volumeSlider = new JSlider(); + volumeSlider.setOrientation(JSlider.HORIZONTAL); + volumeSlider.setPreferredSize(new Dimension(100, 40)); + volumeSlider.setToolTipText("Change volume"); + + previousChapterButton = getButton("icons/control_start_blue.png", "Go to previous chapter"); + rewindButton = getButton("icons/control_rewind_blue.png", "Skip back"); + stopButton = getButton("icons/control_stop_blue.png", "Stop"); + pauseButton = getButton("icons/control_pause_blue.png", "Play/pause"); + playButton = getButton("icons/control_play_blue.png", "Play"); + fastForwardButton = getButton("icons/control_fastforward_blue.png", "Skip forward"); + nextChapterButton = getButton("icons/control_end_blue.png", "Go to next chapter"); + toggleMuteButton = getButton("icons/sound_mute.png", "Toggle Mute"); + } + + protected void layoutControls() { + setLayout(new BorderLayout()); + + JPanel positionPanel = new JPanel(); + positionPanel.setLayout(new GridLayout(2, 1)); + positionPanel.add(positionProgressBar); + positionPanel.add(positionSlider); + + JPanel topPanel = new JPanel(); + topPanel.setLayout(new BorderLayout(8, 0)); + + topPanel.add(timeLabel, BorderLayout.WEST); + topPanel.add(positionPanel, BorderLayout.CENTER); + topPanel.add(chapterLabel, BorderLayout.EAST); + add(topPanel, BorderLayout.NORTH); + + JPanel bottomPanel = new JPanel(); + bottomPanel.setLayout(new FlowLayout()); + + bottomPanel.add(previousChapterButton); + bottomPanel.add(rewindButton); + bottomPanel.add(stopButton); + bottomPanel.add(pauseButton); + bottomPanel.add(playButton); + bottomPanel.add(fastForwardButton); + bottomPanel.add(nextChapterButton); + bottomPanel.add(volumeSlider); + bottomPanel.add(toggleMuteButton); + + add(bottomPanel, BorderLayout.SOUTH); + + positionSlider.addChangeListener(this); + volumeSlider.addChangeListener(this); + } + + /* Listeners */ + public void stateChanged(ChangeEvent event) { + Object source = event.getSource(); + if (positionSlider.equals(source)) { + if (!setPositionValue) { + float positionValue = (float) positionSlider.getValue() / 100.0f; + System.out.println(positionValue); + } + } else if (volumeSlider.equals(source)) { + + } + } + + public void buttonPressed(HoldButton button) { + if (button.equals(previousChapterButton)) { + panelButtonListener.buttonPressed(PanelButton.PREVIOUS_CHAPTER); + } else if (button.equals(rewindButton)) { + panelButtonListener.buttonPressed(PanelButton.REWIND); + } else if (button.equals(stopButton)) { + panelButtonListener.buttonPressed(PanelButton.STOP); + } else if (button.equals(pauseButton)) { + panelButtonListener.buttonPressed(PanelButton.PAUSE); + } else if (button.equals(playButton)) { + panelButtonListener.buttonPressed(PanelButton.PLAY); + } else if (button.equals(fastForwardButton)) { + panelButtonListener.buttonPressed(PanelButton.FAST_FORWARD); + } else if (button.equals(nextChapterButton)) { + panelButtonListener.buttonPressed(PanelButton.NEXT_CHAPTER); + } else if (button.equals(toggleMuteButton)) { + panelButtonListener.buttonPressed(PanelButton.TOGGLE_MUTE); + } + } + + public void buttonReleased(HoldButton button) { + if (button.equals(previousChapterButton)) { + panelButtonListener.buttonReleased(PanelButton.PREVIOUS_CHAPTER); + } else if (button.equals(rewindButton)) { + panelButtonListener.buttonReleased(PanelButton.REWIND); + } else if (button.equals(stopButton)) { + panelButtonListener.buttonReleased(PanelButton.STOP); + } else if (button.equals(pauseButton)) { + panelButtonListener.buttonReleased(PanelButton.PAUSE); + } else if (button.equals(playButton)) { + panelButtonListener.buttonReleased(PanelButton.PLAY); + } else if (button.equals(fastForwardButton)) { + panelButtonListener.buttonReleased(PanelButton.FAST_FORWARD); + } else if (button.equals(nextChapterButton)) { + panelButtonListener.buttonReleased(PanelButton.NEXT_CHAPTER); + } else if (button.equals(toggleMuteButton)) { + panelButtonListener.buttonReleased(PanelButton.TOGGLE_MUTE); + } + } + + /* Update */ + public void updateTime(long millis) { + String s = String.format( + "%02d:%02d:%02d", + TimeUnit.MILLISECONDS.toHours(millis), + TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), + TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); + timeLabel.setText(s); + } + + public void updatePosition(int value) { + positionProgressBar.setValue(value); + setPositionValue = true; + positionSlider.setValue(value); + setPositionValue = false; + } + + public void updateChapter(int chapter, int chapterCount) { + String s = chapterCount != -1 ? (chapter + 1) + "/" + chapterCount + : "-"; + chapterLabel.setText(s); + chapterLabel.invalidate(); + validate(); + } + + public void updateVolume(int value) { + volumeSlider.setValue(value); + } +} diff --git a/java/src/pm/device/panel/PanelButton.java b/java/src/pm/device/panel/PanelButton.java new file mode 100644 index 0000000..2484e36 --- /dev/null +++ b/java/src/pm/device/panel/PanelButton.java @@ -0,0 +1,14 @@ +package pm.device.panel; + +import pm.Button; + +public enum PanelButton implements Button { + PREVIOUS_CHAPTER, + REWIND, + STOP, + PAUSE, + PLAY, + FAST_FORWARD, + NEXT_CHAPTER, + TOGGLE_MUTE; +} diff --git a/java/src/pm/device/panel/PanelButtonListener.java b/java/src/pm/device/panel/PanelButtonListener.java new file mode 100644 index 0000000..9b44472 --- /dev/null +++ b/java/src/pm/device/panel/PanelButtonListener.java @@ -0,0 +1,6 @@ +package pm.device.panel; + +public interface PanelButtonListener { + public void buttonPressed(PanelButton panelButton); + public void buttonReleased(PanelButton panelButton); +} diff --git a/java/src/pm/device/panel/PanelDevice.java b/java/src/pm/device/panel/PanelDevice.java new file mode 100644 index 0000000..5e9737f --- /dev/null +++ b/java/src/pm/device/panel/PanelDevice.java @@ -0,0 +1,32 @@ +package pm.device.panel; + +import pm.Device; +import pm.event.Task; +import pm.macro.state.Press; +import pm.macro.state.Release; +import pm.value.Action; +import pm.value.Target; + +public class PanelDevice extends Device implements PanelButtonListener { + + protected Panel panel; + + public void initialise() { + panel = new Panel(this); + panel.updateTime(12342398); + panel.updatePosition(43); + add(new Press(PanelButton.PLAY), new Task(Action.PLAY, Target.APPLICATION)); + } + + public void exit() { + panel.dispose(); + } + + public void buttonPressed(PanelButton panelButton) { + add(new Press(panelButton)); + } + + public void buttonReleased(PanelButton panelButton) { + add(new Release(panelButton)); + } +}