余録:worldCup/jython/ex12/wcFrame.py

#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
## History: Swing Example "2010 FIFA World Cup South Africa™"
##      2003/07, Java/Jython
##      2006/07, Jython
##      2008/02, Jython 2.2.1
##      2010/06, Jython 2.5.0
#...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
"""
>>> tips()

>>> ## ----------------------------------------
>>> None
version: #1.0.23a
"""
from __init__ import *

## ---------------------------------------- demo: jython
"""
$ cd /Users/sketch/home_sketch/worldCup/jython/
$ jython -i ex12/wcFrame.py

"""
## ----------------------------------------
from wcModel import WcModel

from javax.swing import ImageIcon
from javax.swing import JFrame
from javax.swing import JLabel
from javax.swing import JList
from javax.swing import JPanel
from javax.swing import JScrollPane
from javax.swing import JSplitPane
from javax.swing import JTabbedPane

class TopPanel(JPanel):
    def __init__(self, master, *args, **keys):
        master.contentPane = self
        self.group = None
        self.label = {}

        def leftComponent(group):
            listData = WcModel.teamsBelongTo(group)
            view = JList(
                listData,   # java.util.Vector
                valueChanged = self,
                )
            comp = JScrollPane(
                viewportView = view,
                preferredSize = (120,150),
                )
            return comp

        def rightComponent(group):
            self.label[group] = \
            view = JLabel(
                icon = ImageIcon("matches/wc2010logo.png"),
                text = u"2010 FIFA World Cup South Africa™",
                horizontalAlignment = JLabel.CENTER,
                verticalTextPosition = JLabel.BOTTOM,
                horizontalTextPosition = JLabel.CENTER,
                )
            comp = JScrollPane(
                viewportView = view,
                preferredSize = (180,0),
                )
            return comp

        def splitPane(group):
            comp = JSplitPane(
                orientation = JSplitPane.HORIZONTAL_SPLIT,
                oneTouchExpandable = True,
                dividerLocation = 70,
                leftComponent  = leftComponent(group),
                rightComponent = rightComponent(group),
                )
            return comp

        def tabbedPane():
            def stateChanged(e):
                index = e.source.selectedIndex
                self.group = WcModel.groupTabAt(index)
                
            comp = JTabbedPane(
                stateChanged = stateChanged,
                )
            for e in WcModel.groupTabs:
                comp.addTab(e, splitPane(e))
            return comp

        ## ----------------------------------------
        comp = tabbedPane()
        self.add(comp)
        master.pack()

    def __call__(self, e):  # javax.swing.event.ListSelectionEvent
        value = e.source.selectedValue
        self.update_(value)

    def update_(self, team):
        comp = self.label[self.group]
        comp.icon = ImageIcon("squad/%s.gif"%team)
        comp.text = WcModel.teamName(team)

## ----------------------------------------
def tips():
    global Qt; Qt = \
    frame = JFrame(
        title = "FIFA World Cup #12",
        size = (320,180),
        locationRelativeTo = None,
        defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
        )
    TopPanel(frame)
    frame.visible = True

## ----------------------------------------
if __name__=='__main__':
    inform()
    testmod()

## ========================================