#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
from java.awt import BorderLayout
from java.awt import Color
from javax.swing import ImageIcon
from javax.swing import JFrame
from javax.swing import JLabel
from javax.swing import JPanel
from javax.swing import JScrollPane
from javax.swing import JSplitPane
from javax.swing import JTable
from javax.swing import JTree
from javax.swing.table import DefaultTableCellRenderer
from javax.swing.table import DefaultTableModel
from javax.swing.table import TableCellRenderer
from javax.swing.tree import DefaultMutableTreeNode
from javax.swing.tree import DefaultTreeCellRenderer;
from os.path import dirname, exists
from sys import argv
from wcModel import WcModel
from wcTeamView import MyTableCellRenderer
## ----------------------------------------
class Stage2Panel(JPanel):
def __init__(self, *args, **keys):
super(JPanel,self).__init__(
layout = BorderLayout(),
**keys
)
path = "%s/squad"%(dirname(argv[-1]))
def treeView(team=None):
self.rootNode = \
final = DefaultMutableTreeNode("Final #64")
semi =
form = "Semi-finals #%d"
for i, matches in enumerate(
[(61,62)]
):
for e in matches:
node = DefaultMutableTreeNode(form%e)
final.add(node)
semi.append(node)
quarter =
form = "Quarter-finals #%d"
for i, matches in enumerate(
[(58,57),(59,60)]
):
for e in matches:
node = DefaultMutableTreeNode(form%e)
semi[i].add(node)
quarter.append(node)
form = "Round of 16 #%d"
for i, matches in enumerate(
[(49,50),(53,54),(51,52),(55,56)]
):
for e in matches:
node = DefaultMutableTreeNode(form%e)
quarter[i].add(node)
tree = JTree(
final,
valueChanged = self,
)
return tree
def tableModel(group=None):
class MyTableModel(DefaultTableModel):
def getColumnClass(self, c):
return self.getValueAt(0, c).__class__
columnNames = "date-time", "home", "score", "away",
self.model = \
model = MyTableModel()
for e in columnNames:
model.addColumn(e)
match = self.rootNode.userObject[-2:]
_,date,_,_,home,score,away,_ = self._scores(match)
model.addRow([date,home,score,away])
return model
def tableView():
self.table = \
comp = JTable(
model = tableModel(),
rowHeight = 60,
)
# public void javax.swing.JTable.
# setDefaultRenderer()
comp.setDefaultRenderer(
ImageIcon, # java.lang.Class
MyTableCellRenderer(), # javax.swing.table.TableCellRenderer
)
return comp
def _splitPane(**keys):
comp = JSplitPane(
orientation = JSplitPane.VERTICAL_SPLIT,
oneTouchExpandable = True,
dividerLocation = 180,
**keys
)
return comp
def splitPane():
controlPane = JScrollPane(
viewportView = treeView(),
preferredSize = (280,200),
)
canvasPane = JScrollPane(
viewportView = tableView(),
preferredSize = (320,100),
)
return _splitPane(
topComponent = controlPane,
bottomComponent = canvasPane,
)
pane = splitPane()
self.add(pane)
def show():
frame = JFrame(
title = "-- Stage2 --",
size = (350,300),
locationRelativeTo = None,
)
frame.add(Stage2Panel())
frame.visible = True
def _scores(self, match):
def valid(line, match):
return line.startswith(match)
path = "%s/matches/stage2.txt"%dirname(argv[-1])
lines = open(path).readlines() if exists(path) else []
for line in lines:
if valid(line, match): break
return line.split("\t")
def __call__(self, e):
node = e.source.lastSelectedPathComponent
match = node.userObject[-2:]
_,date,_,_,home,score,away,_ = self._scores(match)
path = "%s/squad"%(dirname(argv[-1]))
def team(key):
m = WcModel.teamNames
return ImageIcon("%s/%s.gif"%(path, m[key])) if key in m else key
rowIndex = 0
for columnIndex,aValue in enumerate([
date,
team(home),
score,
team(away),
]):
self.model.setValueAt(aValue, rowIndex, columnIndex)
## ========================================