OSDN Git Service

Changed file layout
[arescue/arescue.git] / arescue / lib / utils / mapeditor / piecelist.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 """piece list TK widget.
4 """
5
6 import Tkinter as Tk
7
8 import Image
9 import ImageDraw
10 import ImageTk
11
12 import config
13
14 import common.model as model
15 import utils.scrolledlistbox as SL
16
17 from piece import Piece
18 from pieceinfo import PieceInfo
19
20 __all__ = ["PieceList"]
21
22 LIST_WIDTH = config.LIST_WIDTH
23
24
25 class PieceList(Tk.Frame):
26
27     def __init__(self, master=None):
28         Tk.Frame.__init__(self, master)
29         self.pices = []
30         self.current = None
31         self.selected = ''
32         # label
33         lb = Tk.Label(self, text='Piece list')
34         lb.pack(anchor=Tk.W)
35         # piece list
36         self.piecelist = SL.ScrolledListbox(self,
37                                            selectmode=Tk.SINGLE,
38                                            width=LIST_WIDTH)
39         self.piecelist.pack(anchor=Tk.W)
40         # piece info
41         self.pieceinfo = PieceInfo(self)
42         self.pieceinfo.pack(anchor=Tk.W)
43         # piece list
44         self.poll()
45
46     def poll(self):
47         """ poll list
48         """
49         now = self.piecelist.curselection()
50         if now != self.current:
51             self.changed(now)
52             self.current = now
53         self.after(250, self.poll)
54
55     def changed(self, selection):
56         """ select piece
57         """
58         if selection:
59             name = self.piecelist.get(selection[0])
60             self.select(name)
61
62     def append(self, piece):
63         """ add piece
64         """
65         for idx, item in enumerate(self.pieces):
66             if piece.name == item.name:
67                 pieces[idx] = piece
68                 return
69         self.pieces.append(piece)
70         self.piecelist.insert(Tk.END, piece.name)
71
72     def remove(self, name=None):
73         """ remove piece
74         """
75         if name == None:
76             name = self.selected
77         for idx, item in enumerate(self.pieces):
78             if name == item.name:
79                 del self.pieces[idx]
80                 self.piecelist.delete(idx)
81                 return True
82         else:
83             return False
84
85     def setlist(self, pieces):
86         """ clear list and set pieces
87         """
88         self.pieces = []
89         self.piecelist.delete(0, Tk.END)
90         for piece in pieces:
91             self.append(piece)
92
93     def select(self, name):
94         """ update piece list, piece info
95         """
96         for idx, item in enumerate(self.pieces):
97             if item.name == name:
98                 self.selected = name
99                 self.piecelist.selection_anchor(idx)
100                 self.piecelist.configure()
101                 self.pieceinfo.show(item)
102
103     def getpiece(self, name=None):
104         """ get piece object
105         """
106         if name == None:
107             name = self.selected
108         for idx, item in enumerate(self.pieces):
109             if item.name == name:
110                 return item
111         return None
112
113
114 def test():
115     import os.path
116     modelpath = '../../data/model'
117     modelfiles = [
118         'model1101.xml',
119         'myship.xml',
120         'nb2.xml',
121         ]
122
123     pieces = []
124     for modelfile in modelfiles:
125         fname = os.path.join(modelpath, modelfile)
126         md = model.load(fname)
127         pieces.append(Piece(md, 64, 32))
128
129     app = PieceList()
130     app.setlist(pieces)
131     app.remove('myship')
132     app.pack()
133     app.mainloop()
134
135 if __name__ == "__main__":
136     test()