From b3e09493f409e4a3a20e056987a8eeedb4ae6dff Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Sun, 29 Aug 2010 23:29:38 -0500 Subject: [PATCH] Lots of work towards team and player panels. Created graphics for player panel. Fleshed out team and player panels. --- build.xml | 2 +- lib/slf4j-api-1.6.1.jar | Bin 0 -> 25496 bytes lib/slf4j-log4j12-1.6.1.jar | Bin 0 -> 9753 bytes project.properties | 4 +- resources/board.xcf | Bin 0 -> 2273 bytes resources/default-teammakerrc | 2 + resources/plus1T1.png | Bin 0 -> 1343 bytes resources/plus1T2.png | Bin 0 -> 1341 bytes resources/plus2T1.png | Bin 0 -> 1352 bytes resources/plus2T2.png | Bin 0 -> 1348 bytes resources/plus3T1.png | Bin 0 -> 1348 bytes resources/plus3T2.png | Bin 0 -> 1338 bytes resources/reboundT1.png | Bin 0 -> 1527 bytes resources/reboundT2.png | Bin 0 -> 1527 bytes resources/turnover.png | Bin 0 -> 342 bytes resources/turnoverT1.png | Bin 0 -> 445 bytes resources/turnoverT2.png | Bin 0 -> 446 bytes src/com/jdbernard/teammaker/Game.groovy | 15 +++ src/com/jdbernard/teammaker/Player.groovy | 6 +- .../teammaker/PlayerListCellRenderer.groovy | 2 +- .../jdbernard/teammaker/PlayerPanel.groovy | 109 +++++++++++++++++- .../teammaker/ProfessionalPickup.groovy | 37 +++--- src/com/jdbernard/teammaker/TeamPanel.groovy | 78 ++++++++++++- src/com/jdbernard/teammaker/Test.groovy | 28 +++++ 24 files changed, 257 insertions(+), 26 deletions(-) create mode 100755 lib/slf4j-api-1.6.1.jar create mode 100755 lib/slf4j-log4j12-1.6.1.jar create mode 100644 resources/board.xcf create mode 100644 resources/default-teammakerrc create mode 100644 resources/plus1T1.png create mode 100644 resources/plus1T2.png create mode 100644 resources/plus2T1.png create mode 100644 resources/plus2T2.png create mode 100644 resources/plus3T1.png create mode 100644 resources/plus3T2.png create mode 100644 resources/reboundT1.png create mode 100644 resources/reboundT2.png create mode 100644 resources/turnover.png create mode 100644 resources/turnoverT1.png create mode 100644 resources/turnoverT2.png create mode 100644 src/com/jdbernard/teammaker/Test.groovy diff --git a/build.xml b/build.xml index 94efa70..a18872a 100644 --- a/build.xml +++ b/build.xml @@ -66,7 +66,7 @@ destfile="${build.dir}/${app.name}-${app.version}.${build.number}.jar" basedir="${build.dir}/classes"> - + diff --git a/lib/slf4j-api-1.6.1.jar b/lib/slf4j-api-1.6.1.jar new file mode 100755 index 0000000000000000000000000000000000000000..42e0ad0de7773da9b94b12f503deda7f5a506015 GIT binary patch literal 25496 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 BDINd- literal 0 HcmV?d00001 diff --git a/resources/default-teammakerrc b/resources/default-teammakerrc new file mode 100644 index 0000000..0a6d5d6 --- /dev/null +++ b/resources/default-teammakerrc @@ -0,0 +1,2 @@ +base-point-value=1 +team.size=4 diff --git a/resources/plus1T1.png b/resources/plus1T1.png new file mode 100644 index 0000000000000000000000000000000000000000..bcec2ba5444bc3b9a588962e14fa253c7134f858 GIT binary patch literal 1343 zcmV-F1;F}=P)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc7 z0wxowmPh^o000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000D7&+aza+}2hhZYuXhVT`6AOVhOePou@}N+ zreVxb3*&a*^hOG!3u>cXTp=S878Qox2dP>Vm|7YWxWlk zxVU%<_yKq{{S)`55#q-Lq61+v1U#05_CvO9e-Fs#^C=Vx2@vo?<``IrXAtL-K>P^! z87Rp@yvDZe5s$~?9654C(P&g-V`HkRsrds40cIu#9^hpl#?~Z=JqY+X!?U{#!*G@^ zUFrmbK_y!t5J*H}eYRn=fiT-$fHA}p1k|R;_j`a^T3Qqihc(-Vhlf>FRW%O$m`fdb z0CB;E=tjUNv+k*~EGrCX_wL<_#bQcjot>SDC_JAF#8#eg0q!D-nF1bmuhkb87KRH7 z3Y=4?PAQWO4h||mKi@G7qbJuDC9b#-EeLoCcny%(>vj72`joA;wYAAK%_vZp3&3I8 zU4Rd!SA^EAS)-AW5#?eN6B7bt7{&>=&a$#b>Rf>D5TFAG4$N>IjYbs;g>>xLF-4=% zv=ICD?UQZW6Tl-`#2%|3o;_isfhW=Jax@BZN=l@L2C1)4zumm4g9i^L3QUnmBrU+e zz<>bRw*6)%@zsK_?!vwEpw2e*`upgOax~o4CGFa!se%H1R$8is?h>>tOJ~oXO$#tS zKCY&wCV4!bKhudf3dTQztII%zg@xi)N%7L?T+ge7Sb+ z+?lZ!g2A9X9?w)N@dbi!1cw2&wzjISu1{5jvYHRa{amlQcsVzZQCXw zrSPp=x8(QxRZ&qP+qTD30X!}k6%?DM89jaav^H$mAZvl8#QUPCs7Qf8K#t?YJ%iNM zCBNSfmzQ?~cnYvG72tM((+m!veA+b8W3-Sys$#!(If+ zAF!>9&op`F35bR&RGgQmsm4Z~U$VqW2F&G?c0V=@LtosG@$SIP@#E`Y|JP7ozt$RZ?!!qkfG!{aT%8X<#vZMsqXVDM z$HKC*X>sDajo*EtbO1kPozu@X<2)n4ojZ51EGs%XI_dy1pckkCUIlJvE0k)?$W#OF z)@rz64!GUz+$(p}Ofh4#F(<_IcrbHQFe>RXupjsZn9L=_iQjX9BzM25ok^uR{~vS3 zQbl04nf%Z8uK}dW|Lio`|K)7wf-?R=|C-N3e*@87*}J)+-2MOn002ovPDHLkV1lH< BY*GLK literal 0 HcmV?d00001 diff --git a/resources/plus1T2.png b/resources/plus1T2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0014d60c754b5bfb2829254879729a7ae64d0c GIT binary patch literal 1341 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 literal 0 HcmV?d00001 diff --git a/resources/reboundT1.png b/resources/reboundT1.png new file mode 100644 index 0000000000000000000000000000000000000000..c3578a1c8058be602b37e52a7ff7cddabe995ec3 GIT binary patch literal 1527 zcmVPx#24YJ`L;wH)OaK6Y!_V6Q000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc7 z0yzNSatOWv000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000G2Nkl^=q9=Y^$m@U!^t3GN zFF@A>>3c4BTrfF6KqPJZap=TTF`&3_5S654t z)~;O}a^aQkA|D?gAAcb(E-p||P@tnnk18c4Ma&Hou^tT>GDL2-TUV}JQEY5%z%Y!1 z-9f$>P)0^ZptQ8KHP>#pTf>JB7t;_ewum=TZf>q5X~l{aGELJ5jCoYzSi>;B2b7hS zrG|zEwMAuRr7#e`-*+ORXM*bL>eSNGB0z>=YzC~Zl0V^aILZMnU%vbSQlHN!m&>KR zyu6?TU$t4POVG-dDMHE)-8EF9%W}|%jtCf z+Y$Mz0?#fu+YdBu+_-kR&dtqL2B^}qR6BaKE?&GS5)fWnKpLv3s8A#n7Z=Ovbb6za zCkXx!d=4llC#Q9y-|yFn6DKrr;zR+OJ$tqq&Yzb+uKav4$|f&IX=!Qgh_79{rky)? zDlIKdmSuUO33yg;N04NirmwKDur)w!ZLJ0l9H{j4bQKj9DG&$*Ux2pHm?0M10)9kO zrc8N2_{NPJHEh^00ZK_p`7N{|MOq3sfa}0~0Kebg`oin=(%9HYettf4=FABW78C$* z@ywav$wBbQ&dkgNVDsk9Y}l}YnwlD7Vq$85H*Vj)U1r}a+6yq?rh*61o`OICM{{#~ zmn1lS8kQ|XE*Di98PuLT2dVZ4cfjNEFnI7_m6w+rF)=aKz*?`@yR*}aUhq;4NFZfo zNZHx)OrESi6B5+ybV{Iq`t{SGIoIFy*E0|36zeGGt;z|Bs&-OVir+15W41|VMRdU~{97*iwM zX^VjbpqXR#J@9g;QlR~Mpgj&YJr7SOF$%Z@Ozm_H7*mbb_BbMz4ui{0@M13~uzDYi zSn^0k7|ET^jE7L?z6X2(lzj{PDj>5RpVc;CxEqmj9o~;N9zwjMFswIqApEomE_@hO zK(v5eO^30?w%2$UcqjZ$ll(|22(OKZmESgH?+1S?=7Q7w#2)?hXDC_JVG5#=w{;+r zGm(T%D~5Z41mJuFte+Vvz7;J%ct29`j-2@V6r{z${!0M!n<2OG|J@0L|AIGx(Jy#x d4DBC{{6Bi~kx0Z7MY;e0002ovPDHLkV1l8SpvV9K literal 0 HcmV?d00001 diff --git a/resources/reboundT2.png b/resources/reboundT2.png new file mode 100644 index 0000000000000000000000000000000000000000..64daab15b99217927f0df6540cda4e4137fbb14c GIT binary patch literal 1527 zcmVPx#24YJ`L;wH)OaK6Y!_V6Q000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc7 z0y+%B=@(W2000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000G2Nkl z5tXGSF+dIfh|wT6&;)RjLJ+hh1X~D&%F zC+GX_G7dV%m%uC_3m6LY0sKG%phwI#fC+|SoVD9WqkR+|8>puTPjLsh2~+{+fWNs5 zlmdrkDpWJS@ zh7B9m2)Jy4UBX=8V;~RMV+RqLi1%zkzA!QS5YM7<Q@A*Lf*Y!Ppw+}vDA(#n-9WtyfB82h-yv4&xM4=5`u zOAQSTYKzLsN?{;=f8azyuLRZA)v2YWMSu*$*aBExCGY8QILZO7Sh3KR zyu6?TU$t4POVO%Tt0YOwmMxQISuH^CM=}Z=f{~}-K!su4zX7@*A1@^*OOq!{rKPIB zc1^2SuMQQMm>fpD12G9P5G5uis=mHnr%#_2Aj`6rK8k#l;Aj)vI|$m|yLX^w?OJKu zHfiThY2iY7ogayp&= zc0~S~z_T09^#_d~KfYbAb8~Z*0jjht)s7jXOP4N*1ccWXkcKKMDijID#l>jF^ z)Ts{%-?V9yh7TVuKq)CHzlAoWNK4@+a06HX;P?Am2fSV{jg5`u=jStb?%ZH!K>+}l z&YlgP90ZT-%*;#xwrttL#*G`Psi`3*CZ+~>Q3xIY8`VZF@Zo!*_PnC~53i zX}|ylQd8wN&7dfd3v|41UwKngwFty_wt&S5*v$h^qN2kKg4;9=*ZlcVQUXVg;3+BL zqmd(-4y;H_BzeXRUK~7_!-4l=7|ET^^oLOAz7Ko>lzj{PD65SKq1Kz*N775{M_8s zyb=cIqSVBa)D(sC%#sWRcTeAd@J2pyprVbQE{-7)hu=>3=4(*kabdsw_+{qDx>DCm zAuE)UVz)@!8J1ZcP*!2!Ij+EP;MJ5`b}6=e$8at`j-bLPslsDuVlm17uvG}{_QBg`LCR7jn>+&HE-k?`gSV>GYa93F)K!(YwVRyrm czc%&^7CeP&a+9tx0v*rb>FVdQ&MBb@02%#uIRF3v literal 0 HcmV?d00001 diff --git a/resources/turnoverT1.png b/resources/turnoverT1.png new file mode 100644 index 0000000000000000000000000000000000000000..87dcc08e6a106bfcf0e4a131364768af6d8f3fe2 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Y)RhkE`P)DiXMsm#F#`j)FbFd;%$g$s6l5>)^mS#w#UaaNDzv}O>=#f-vcxr_#5q4V zH#M(>!MP|ku_QG`p**uBL&4qCHz2%`PaJ5Kgr|#RNW|f{VR!jj6*$_AX~EOV2UO>!vj_-D%@w?fAbq$y0CF(N&!* zn7t-?WyN2vloZugXDrg3b?P_yvey%h-6YI1lKa8cX?3}Gj$y2XyOFn;( h`p0x5&xQ9X_vg30Hfvq~tpEljgQu&X%Q~loCIDIdr&|C3 literal 0 HcmV?d00001 diff --git a/resources/turnoverT2.png b/resources/turnoverT2.png new file mode 100644 index 0000000000000000000000000000000000000000..b78e1af6c744d7e6c2dd2015dc0b20d18728343a GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Y)RhkEwc6x=<11Hv2m#DP{xdb&7zt_cAKwRfhU*OzI|r=>VxO4 zs|#i@iMATvZ1&{|zkTU+=FAQU*^@cVYoC9Jdi_7PgYA`1Khs@NgO6+vCV8Jpc1*ar z=zxq#V%&l`(_OdczHho=RM#u{`^EDj+4u8zEod`nu6Wd+#G&)zuHt(Wey5Wbg*Q8` z-<@pg5mMt`ope@MnBi~D%J!mrT@%+H{~Gi#$ZdL*faV=`&Q_uS>_>%S9*JbTDe?L6 zg%mMdTGhCd@2KD$whi3d>p4SC*Q%cGk&-FQO8v$t9_8a;_~6jaq?4z&HdNk`^g1@H zR4AfuZF^o$P!H3yjZ^&&oR!%dqOEu9b>*WYOrM^HX3ofV+G2c`DctzExx*J<@3Q3| jmh0Aw2*?K7S21sD>Qnyk=yEkMBpEzi{an^LB{Ts59L%bU literal 0 HcmV?d00001 diff --git a/src/com/jdbernard/teammaker/Game.groovy b/src/com/jdbernard/teammaker/Game.groovy index b161fda..e848b7f 100644 --- a/src/com/jdbernard/teammaker/Game.groovy +++ b/src/com/jdbernard/teammaker/Game.groovy @@ -3,6 +3,16 @@ package com.jdbernard.teammaker public class Game { static int BASE_POINT_VALUE = 1 + public static enum Team { + TEAM1("T1"), TEAM2("T2"); + + public final String suffix; + + private Team(String suffix) { this.suffix = suffix } + + public String toString() { return "Team ${ordinal() + 1}" } + } + // lists of players for each team List team1 List team2 @@ -33,4 +43,9 @@ public class Game { public int getTeamTurnovers(List team) { return team.sum { turnovers[(it.name)] ?: 0 } } + + public List getTeam(Team team) { + if (team == Team.TEAM1) return team1 + else return team2 + } } diff --git a/src/com/jdbernard/teammaker/Player.groovy b/src/com/jdbernard/teammaker/Player.groovy index 077e28b..b3ea8b9 100644 --- a/src/com/jdbernard/teammaker/Player.groovy +++ b/src/com/jdbernard/teammaker/Player.groovy @@ -11,8 +11,8 @@ public class Player implements Comparable { public int getPlusMinus() { if (games.size() == 0) return 0 - int plusMinus games.sum { game -> - if (game.team1.contains(this)) { + int plusMinus = games.sum { game -> + if (game.team1.contains(this)) return game.team1Score - game.team2Score else return game.team2Score - game.team1Score } @@ -26,7 +26,7 @@ public class Player implements Comparable { points += (game.twoPointers[(name)] ?: 0) * (Game.BASE_POINT_VALUE) } - return (games.size() == 0 ? 0 : points /= games.size()) + return (games.size() == 0 ? 0 : points / games.size()) } public float getReboundsPerGame() { diff --git a/src/com/jdbernard/teammaker/PlayerListCellRenderer.groovy b/src/com/jdbernard/teammaker/PlayerListCellRenderer.groovy index 5c860c4..8a3d1b9 100644 --- a/src/com/jdbernard/teammaker/PlayerListCellRenderer.groovy +++ b/src/com/jdbernard/teammaker/PlayerListCellRenderer.groovy @@ -14,7 +14,7 @@ public class PlayerListCellRenderer extends JPanel implements ListCellRenderer { boolean showStats boolean colored - private TeamMaker teamMaker + private ProfessionalPickup teamMaker private JLabel nameLabel private JLabel statsLabel diff --git a/src/com/jdbernard/teammaker/PlayerPanel.groovy b/src/com/jdbernard/teammaker/PlayerPanel.groovy index 43c8fcd..ac55ff4 100644 --- a/src/com/jdbernard/teammaker/PlayerPanel.groovy +++ b/src/com/jdbernard/teammaker/PlayerPanel.groovy @@ -1,19 +1,124 @@ package com.jdbernard.teammaker +import groovy.beans.Bindable +import org.slf4j.Logger +import org.slf4j.LoggerFactory + +import static java.awt.event.MouseEvent.BUTTON1 as LEFT_BUTTON +import static java.awt.event.MouseEvent.BUTTON2 as RIGHT_BUTTON + public class PlayerPanel { /* ======== MODEL ======== */ + static def swing = ProfessionalPickup.swing + static def icons = [:] + + TeamPanel teamPanel + Logger log = LoggerFactory.getLogger(getClass()) + // GUI Components class View { def panel + def nameLabel + def twoPtrButton + def twoPtAttemptsButton + def threePtrButton + def threePtAttemptsButton + def rebsButton + def toversButton } - View view + View view = new View() class Model { + @Bindable Player player + @Bindable Game game + @Bindable Game.Team team } - Model model + Model model = new Model() /* ======== VIEW ======== */ + + private void initGUI() { + view.panel = swing.hbox { + hstrut(5) + view.nameLabel = label(model.player.name) + hstrut(5) + view.twoPtrButton = button( + icon: getIcon("plus${Game.BASE_POINT_VALUE}"), + iconTextGap: 0, margin: [0, 0, 0, 0], + actionPerformed: { evt -> + if (LEFT_BUTTON == evt.button) { + model.game.twoPointers[(model.player.name)]++ + model.game.twoPointAttemps[(model.player.name)]++ + } else { + model.game.twoPointers[(model.player.name)]-- + model.game.twoPointAttemps[(model.player.name)]-- + }}, + toolTipText: "Click to add a successful " + + Game.BASE_POINT_VALUE + " point shot.\nRight-click to " + + "undo (remove the shot).") + hstrut(5) + view.threePtrButton = button( + icon: getIcon("plus${Game.BASE_POINT_VALUE + 1}"), + iconTextGap: 0, margin: [0, 0, 0, 0], + actionPerformed: { evt -> + if (LEFT_BUTTON == evt.button) { + model.game.threePointers[(model.player.name)]++ + model.game.threePointAttempts[(model.player.name)]++ + } else { + model.game.threePointers[(model.player.name)]-- + model.game.threePointAttempts[(model.player.name)]-- + }}, + toolTipText: "Click to add a successful " + + (Game.BASE_POINT_VALUE + 1) + " point shot.\nRight-click " + + "to undo (remove the shot).") + hstrut(5) + view.rebsButton = button( + icon: getIcon("rebound"), + iconTextGap: 0, margin: [0, 0, 0, 0], + actionPerformed: { evt -> + if (LEFT_BUTTON == evt.button) + model.game.rebounds[(model.player.name)]++ + else model.game.rebounds[(model.player.name)]-- }, + toolTipText: "Click to add a rebound.\nRight-click to undo.") + hstrut(5) + view.toversButton = button( + icon: getIcon("turnover"), + iconTextGap: 0, margin: [0, 0, 0, 0], + actionPerformed: { evt -> + if (LEFT_BUTTON == evt.button) + model.game.turnovers[(model.player.name)]++ + else model.game.turnovers[(model.player.name)]-- }, + toolTipText: "Click to add a turnover.\nRight click to undo.") + hglue() + } + } + + private def getIcon(String type) { + String iconKey = type + model.team.suffix + + if (!icons[iconKey]) { + + if (log.isDebugEnabled()) + log.debug("Looking for icon resources: /${iconKey}.png") + + icons[iconKey] = swing.imageIcon("/${iconKey}.png") + } + + return icons[iconKey] + } + + /* ======== CONTROLLER ======== */ + + public PlayerPanel(TeamPanel teamPanel, Player player) { + this.teamPanel = teamPanel + model.player = player + model.game = teamPanel.model.game + model.team = teamPanel.model.team + + initGUI() + } +} diff --git a/src/com/jdbernard/teammaker/ProfessionalPickup.groovy b/src/com/jdbernard/teammaker/ProfessionalPickup.groovy index f43f05d..254ad2d 100644 --- a/src/com/jdbernard/teammaker/ProfessionalPickup.groovy +++ b/src/com/jdbernard/teammaker/ProfessionalPickup.groovy @@ -11,6 +11,8 @@ import javax.swing.JFrame import javax.swing.JOptionPane import org.apache.log4j.Logger +import static com.jdbernard.teammaker.Game.Team.* + public class ProfessionalPickup { /* ======== MODEL ======== */ @@ -233,7 +235,7 @@ public class ProfessionalPickup { .withInputStream { is -> teammakerrc.text = is.text } // load config - teammakerrc.withInputStream { model.config.load(is) } + teammakerrc.withInputStream { model.config.load(it) } // set configured properties Game.BASE_POINT_VALUE = model.config.getProperty('base-point-value', @@ -253,11 +255,11 @@ public class ProfessionalPickup { } private void setTeamSize() { - def newSize = JOptionPane.showMessageDialog(view.frame, + def newSize = JOptionPane.showInputDialog(view.frame, "Enter the new team size: ", "Set Team Size...", JOptionPane.QUESTION_MESSAGE) - if (newSize.isInteger()) model.teamSize = newSize.toInteger() + if (newSize && newSize.isInteger()) model.teamSize = newSize.toInteger() else JOptionPane.showMessageDialog(view.frame, "$newSize is not a valid team size (it is not a number...).", "Set Team Size...", JOptionPane.ERROR_MESSAGE) @@ -291,9 +293,14 @@ public class ProfessionalPickup { } - private void declareLoser(int teamNum) { + public void declareWinner(Game.Team team) { + if (team == TEAM1) declareLoser(TEAM2) + else declareLoser(TEAM1) + } + + public void declareLoser(Game.Team team) { model.sittingPlayers.each { it.gamesSat++ } - def teamPlayers = playersForTeam(teamNum) + def teamPlayers = playersForTeam(team) teamPlayers.each { player -> player.gamesSat = 0 model.sittingPlayers << player @@ -337,8 +344,8 @@ public class ProfessionalPickup { } - private void populate(int teamNum) { - def teamPlayers = playersForTeam(teamNum) + private void populate(Game.Team team) { + def teamPlayers = playersForTeam(team) while (teamPlayers.size() < model.teamSize) { def player = model.playerChooser.choose(model.sittingPlayers) teamPlayers << player @@ -348,15 +355,15 @@ public class ProfessionalPickup { refreshGUI(); } - private benchPlayer(Player p, int teamNum) { - def teamPlayers = playersForTeam(teamNum) + private benchPlayer(Player p, Game.Team team) { + def teamPlayers = playersForTeam(team) teamPlayers.remove(p) model.sittingPlayers << p refreshGUI() } - private assignPlayer(Player p, int teamNum) { - def teamPlayers = playersForTeam(teamNum) + private assignPlayer(Player p, Game.Team team) { + def teamPlayers = playersForTeam(team) model.sittingPlayers.remove(p) teamPlayers << p refreshGUI() @@ -410,13 +417,13 @@ public class ProfessionalPickup { refreshGUI() } - private List playersForTeam(int teamNum) { - if (teamNum == 1) return model.team1Players + private List playersForTeam(Game.Team team) { + if (team == Game.Team.TEAM1) return model.team1Players else return model.team2Players } - private List listForTeam(int teamNum) { - if (teamNum == 1) return view.team1List + private List listForTeam(Game.Team team) { + if (team == Game.Team.TEAM11) return view.team1List else return view.team2List } } diff --git a/src/com/jdbernard/teammaker/TeamPanel.groovy b/src/com/jdbernard/teammaker/TeamPanel.groovy index db6ed78..c731771 100644 --- a/src/com/jdbernard/teammaker/TeamPanel.groovy +++ b/src/com/jdbernard/teammaker/TeamPanel.groovy @@ -1,23 +1,97 @@ package com.jdbernard.teammaker +import groovy.beans.Bindable +import javax.swing.BoxLayout + +import static com.jdbernard.teammaker.Game.Team.* + public class TeamPanel { /* ======== MODEL ======== */ + private static def swing = ProfessionalPickup.swing + + ProfessionalPickup main + // GUI components class View { def panel + def teamStatsBox + def scoreLabel + def reboundsLabel + def turnoversLabel + def playerPanels + def winsButton } View view = new View() class Model { - @Bindable String name + //@Bindable String name + @Bindable Game game + @Bindable Game.Team team + @Bindable List players } Model model = new Model() /* ======== VIEW ======== */ - view.panel = swing.panel(border: titledBorder(model.name)) { + private void initGUI() { + view.panel = swing.vbox { + + view.teamStatsBox = hbox { + + vstrut(5) + view.scoreLabel = label("0") + vstrut(5) + view.reboundsLabel = label("Rebs: 0") + vstrut(5) + view.turnoversLabel = label("T/Os: 0") + hglue() + view.winsButton = button("Winners", + actionPerformed: { main.declareWinner(model.team) }) + vstrut(5) + } + } + + view.playerPanels = [] + } + + private void initPlayerPanels(List players) { + view.playerPanels.each { view.panel.remove(it.view.panel) } + view.playerPanels.clear() + + // create and add player panels + model.players.each { player -> + def playerPanel = new PlayerPanel(this, player) + view.panel << playerPanel.view.panel + view.playerPanels << playerPanel.view.panel + } + + } + + /* ======== CONTROLLER ======== */ + + public TeamPanel(ProfessionalPickup main, Game.Team team) { + this.main = main + model.team = team + + initGUI() + } + + public void newGame(Game game) { + model.game = game + model.players = game.getTeam(model.team) + + view.panel.border = swing.titledBorder(model.team.toString()) + + initPlayerPanels(model.players) + } + + public void updateStats() { + view.scoreLabel = model.game.getTeamScore(model.players) + view.reboundsLabel = model.game.getTeamRebounds(model.players) + view.turnoversLabel = model.game.getTeamTurnovers(model.players) + } } diff --git a/src/com/jdbernard/teammaker/Test.groovy b/src/com/jdbernard/teammaker/Test.groovy new file mode 100644 index 0000000..043b697 --- /dev/null +++ b/src/com/jdbernard/teammaker/Test.groovy @@ -0,0 +1,28 @@ +package com.jdbernard.teammaker + +import groovy.swing.SwingBuilder + +public class Test { + + public static void main(String[] args) { + Game.BASE_POINT_VALUE = 2 + Player bob = new Player(name: "Bob", games: [], gamesSat: 0, benched: false) + Player stan = new Player(name: "Stan", games: [], gamesSat: 0, benched: false) + + Game game = new Game(team1: [bob], team2: [stan]) + + def tp = new TeamPanel(null, Game.Team.TEAM1) + tp.newGame(game) + + def pp = new PlayerPanel(tp, bob) + def swing = new SwingBuilder() + + def frame = swing.frame(size: [400, 400]) { + vbox { + widget(pp.view.panel) + } + } + + frame.show() + } +}