Implemented drop downs.

This commit is contained in:
Jonathan Bernard 2010-08-23 20:32:59 -05:00
parent 68e5701f50
commit a090beb2e6
2 changed files with 108 additions and 20 deletions

View File

@ -1,7 +1,7 @@
#Tue, 06 Jul 2010 06:30:26 -0500 #Mon, 09 Aug 2010 19:14:52 -0500
#Mon Jul 05 23:10:39 CDT 2010 #Mon Jul 05 23:10:39 CDT 2010
app.version=0.3.0 app.version=0.3.0
build.number=67 build.number=85
src.dir=src src.dir=src
lib.dir=lib lib.dir=lib
build.dir=build build.dir=build

View File

@ -5,6 +5,7 @@ import groovy.swing.SwingBuilder
import java.awt.GridBagConstraints as GBC import java.awt.GridBagConstraints as GBC
import java.awt.GridBagLayout import java.awt.GridBagLayout
import java.awt.BorderLayout import java.awt.BorderLayout
import java.awt.event.MouseEvent
import javax.swing.DefaultListModel import javax.swing.DefaultListModel
import javax.swing.JFrame import javax.swing.JFrame
import javax.swing.JOptionPane import javax.swing.JOptionPane
@ -19,11 +20,17 @@ public class TeamMaker {
def frame def frame
def team1List def team1List
List team1Players
def team2List def team2List
List team2Players
def team1WinsButton def team1WinsButton
def team2WinsButton def team2WinsButton
def newGameButton def newGameButton
def sittingList def sittingList
List sittingPlayers
def inGamePlayerDropMenu
def sittingPlayerDropMenu
protected Logger log = Logger.getLogger(getClass()) protected Logger log = Logger.getLogger(getClass())
@ -33,6 +40,7 @@ public class TeamMaker {
class Observables { class Observables {
@Bindable boolean inGame = false @Bindable boolean inGame = false
@Bindable int teamSize = 4 @Bindable int teamSize = 4
@Bindable Player popupPlayer = null
} }
def model = new Observables() def model = new Observables()
@ -65,6 +73,23 @@ public class TeamMaker {
*/ */
private void init() { private void init() {
inGamePlayerDropMenu = swing.popupMenu(/*'Player Options'*/) {
menuItem('Bench Player',/* enabled: bind { !model.inGame },*/
actionPerformed: { benchPlayer(model.popupPlayer) })
}
sittingPlayerDropMenu = swing.popupMenu(/*'Player Options'*/) {
menuItem('Assign to Team 1', /*enabled: bind { !model.inGame },*/
actionPerformed: { assignPlayer(model.popupPlayer, team1List) })
menuItem('Assign to Team 2', /*enabled: bind { !model.inGame },*/
actionPerformed: { assignPlayer(model.popupPlayer, team2List) })
menuItem('Set Games Sat',
actionPerformed: { setGamesSat(model.popupPlayer) })
}
frame = swing.frame(title: "JDB TeamMaker v$version", frame = swing.frame(title: "JDB TeamMaker v$version",
size: [600, 400], locationRelativeTo: null, size: [600, 400], locationRelativeTo: null,
defaultCloseOperation: JFrame.EXIT_ON_CLOSE) { defaultCloseOperation: JFrame.EXIT_ON_CLOSE) {
@ -90,24 +115,32 @@ public class TeamMaker {
team1List = list(cellRenderer: teamListRenderer, team1List = list(cellRenderer: teamListRenderer,
constraints: gbc(gridx: 0, gridy: 1, fill: GBC.BOTH, constraints: gbc(gridx: 0, gridy: 1, fill: GBC.BOTH,
insets: [5, 5, 0, 0], weightx: 2, weighty: 2), insets: [5, 5, 0, 0], weightx: 2, weighty: 2),
model: new DefaultListModel()) model: new DefaultListModel(),
mouseClicked: { evt ->
if (evt.button != MouseEvent.BUTTON3) return
showInGamePlayerDropMenu(evt)
})
team1WinsButton = button('Team A Wins', team1WinsButton = button('Team A Wins',
constraints: gbc(gridx: 0, gridy: 2, anchor: constraints: gbc(gridx: 0, gridy: 2, anchor:
GBC.CENTER, insets: [5, 5, 5, 0]), GBC.CENTER, insets: [5, 5, 5, 0]),
enabled: bind { model.inGame }, enabled: bind { model.inGame },
actionPerformed: { declareWinner(team1List)}) actionPerformed: { declareLoser(team2List)})
team2List = list(cellRenderer: teamListRenderer, team2List = list(cellRenderer: teamListRenderer,
constraints: gbc(gridx: 1, gridy: 1, fill: GBC.BOTH, constraints: gbc(gridx: 1, gridy: 1, fill: GBC.BOTH,
insets: [5, 5, 0, 5], weightx: 2, weighty: 2), insets: [5, 5, 0, 5], weightx: 2, weighty: 2),
model: new DefaultListModel()) model: new DefaultListModel(),
mouseClicked: { evt ->
if (evt.button != MouseEvent.BUTTON3) return
showInGamePlayerDropMenu(evt)
})
team2WinsButton = button('Team B Wins', team2WinsButton = button('Team B Wins',
constraints: gbc(gridx: 1, gridy: 2, constraints: gbc(gridx: 1, gridy: 2,
anchor: GBC.CENTER, insets: [5, 5, 5, 5]), anchor: GBC.CENTER, insets: [5, 5, 5, 5]),
enabled: bind { model.inGame }, enabled: bind { model.inGame },
actionPerformed: { declareWinner(team2List)} ) actionPerformed: { declareLoser(team1List)} )
} }
@ -117,7 +150,11 @@ public class TeamMaker {
sittingList = list(cellRenderer: new PlayerListCellRenderer( sittingList = list(cellRenderer: new PlayerListCellRenderer(
this, showStats: true, colored: true), this, showStats: true, colored: true),
model: new SortedPlayerModel()) model: new SortedPlayerModel(),
mouseClicked: { evt ->
if (evt.button != MouseEvent.BUTTON3) return
showSittingPlayerDropMenu(evt)
})
} }
button('Next Game', constraints: gbc(gridx: 0, gridy: 1, button('Next Game', constraints: gbc(gridx: 0, gridy: 1,
@ -152,7 +189,6 @@ public class TeamMaker {
} }
TeamMaker() { TeamMaker() {
log.fatal("Is this thing on?")
init() init()
} }
@ -189,34 +225,34 @@ public class TeamMaker {
if (team2List.model.size() < model.teamSize) if (team2List.model.size() < model.teamSize)
populate(team2List) populate(team2List)
recalculateOdds()
model.inGame = true model.inGame = true
// recalculate odds
def players = sittingList.model.collect { it }
swing.doOutside {
oddsCalculator.recalculate(players, getSpotsOpen(), playerChooser)
swing.edt { sittingList.repaint() }
}
} }
private void declareWinner(def teamList) { private void declareLoser(def teamList) {
sittingList.model.each { it.gamesSat++ } sittingList.model.each { it.gamesSat++ }
teamList.model.each { player -> teamList.model.each { player ->
player.gamesSat = 0 player.gamesSat = 0
sittingList.model.addElement(player) sittingList.model.addElement(player)
} }
//recalculate odds recalculateOdds()
teamList.model.clear()
teamList.repaint()
sittingList.repaint()
model.inGame = false
}
private void recalculateOdds() {
def players = sittingList.model.collect { it } def players = sittingList.model.collect { it }
swing.doOutside { swing.doOutside {
oddsCalculator.recalculate(players, getSpotsOpen(), playerChooser) oddsCalculator.recalculate(players, getSpotsOpen(), playerChooser)
swing.edt { sittingList.repaint() } swing.edt { sittingList.repaint() }
} }
teamList.model.clear()
teamList.repaint()
sittingList.repaint()
model.inGame = false
} }
private void populate(def teamList) { private void populate(def teamList) {
@ -227,4 +263,56 @@ public class TeamMaker {
} }
} }
private benchPlayer(Player p) {
team1List.remove(p)
sittingList.model.addElement(p)
recalculateOdds()
}
private assignPlayer(Player p, def teamList) {
sittingList.model.removeElement(p)
teamList.model.addElement(p)
recalculateOdds()
}
private void showSittingPlayerDropMenu(def evt) {
int index = sittingList.locationToIndex(evt.point)
sittingList.selectedIndex = index
this.model.popupPlayer = sittingList.model.getElementAt(index)
sittingPlayerDropMenu.show(sittingList, evt.point.@x, evt.point.@y)
}
private void showInGamePlayerDropMenu(def evt) {
def teamList = evt.source
int index = teamList.locationToIndex(evt.point)
teamList.selectedIndex = index
this.model.popupPlayer = teamList.model.getElementAt(index)
inGamePlayerDropMenu.show(teamList, evt.point.@x, evt.point.@y)
}
private void setGamesSat(Player p) {
String value = JOptionPane.showInputDialog(frame,
"How many games has ${p.name} sat?", "Set Games Sat.",
JOptionPane.QUESTION_MESSAGE)
int newGames
sittingList.model.removeElement(p)
if (!value) return
try { newGames = value.toInteger() }
catch (Throwable t) {
JOptionPane.showMessageDialog(frame,
"The value $value is not a valid number.",
"Invalid Input", JOptionPane.ERROR_MESSAGE)
setGamesSat(p)
return
}
p.gamesSat = newGames
if (!sittingList.model.set.contains(p)) sittingList.model.addElement(p)
recalculateOdds()
}
} }