余録:wcStage2View.py

#! /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) 
        
## ========================================