Implemented drop downs.
This commit is contained in:
parent
68e5701f50
commit
a090beb2e6
@ -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
|
||||||
|
@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user