annotate orpg/gametree/nodehandlers/minilib.py~ @ 31:fc48380f0c9f ornery-orc

Traipse Beta 'OpenRPG' {100503-00} Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user. Update Summary (Patch-2) New Features: New Namespace method with two new syntaxes New Namespace Internal is context sensitive, always! New Namespace External is 'as narrow as you make it' New Namespace FutureCheck helps ensure you don't receive an incorrect node New Namespace 2.0 documentation in the User Manual New Namespace plugin, Allows Traipse users to use the Standard syntax !@ :: @! New Mini Library with minis from Devin Knight New PluginDB access for URL2Link plugin New to Forms, they now show their content in Design Mode New to Update Manager, checks Repo for updates on software start New to Mini Lib node, change title in design mode New to Game Tree, never lose a node, appends a number to the end of corrupted trees New to Server GUI, Traipse Suite's Debug Console New Warhammer PC Sheet Updates: Update to White Board layer, uses a pencil image for color button Update to Grid Layer, uses a grid image for color button Update to Chat Window, size of drop down menus Update to default lobby message Update to template Text node Update to 4e PC Sheet node Update to how display names are acquired Update to Server, added some 'Pious' technology Update to features node Fixes: Fix to Server GUI startup errors Fix to Server GUI Rooms tab updating Fix to Chat and Settings if non existant die roller is picked Fix to Dieroller and .open() used with .vs(). Successes are correctly calculated Fix to Alias Lib's Export to Tree, Open, Save features Fix to alias node, now works properly Fix to Splitter node, minor GUI cleanup Fix to Backgrounds not loading through remote loader Fix to Node name errors Fix to rolling dice in chat Whispers Fix to Splitters Sizing issues Fix to URL2Link plugin, modified regex compilation should remove memory leak Fix to mapy.py, a roll back due to zoomed grid issues Fix to whiteboard_handler, Circles work by you clicking the center of the circle Fix to Servers parse_incoming_dom which was outdated and did not respect XML Fix to a broken link in the server welcome message Fix to InterParse and logger requiring traceback Fix to Update Manager Status Bar Fix to failed image and erroneous pop up Fix to Mini Lib node that was preventing use Fix to plugins that parce dice but did not call InterParse Fix to nodes for name changing by double click Fix to Game Tree, node ordering on drag and drop corrected Fix to Game Tree, corrupted error message was not showing Fix to Update Manager, checks for internet connection Fix to Update Manager, Auto Update corrections Fix to Server GUI's broadcast, room, player messaging
author sirebral
date Mon, 03 May 2010 03:30:11 -0500
parents 4385a7d0efd1
children
rev   line source
31
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
1 # Copyright (C) 2000-2001 The OpenRPG Project
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
2 #
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
3 # openrpg-dev@lists.sourceforge.net
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
4 #
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
5 # This program is free software; you can redistribute it and/or modify
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
6 # it under the terms of the GNU General Public License as published by
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
7 # the Free Software Foundation; either version 2 of the License, or
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
8 # (at your option) any later version.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
9 #
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
10 # This program is distributed in the hope that it will be useful,
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
13 # GNU General Public License for more details.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
14 #
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
15 # You should have received a copy of the GNU General Public License
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
16 # along with this program; if not, write to the Free Software
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
17 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
18 # --
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
19 #
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
20 # File: minilib.py
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
21 # Author: Ted Berg
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
22 # Maintainer:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
23 # Version:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
24 # $Id: minilib.py,v 1.28 2007/04/22 22:00:18 digitalxero Exp $
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
25 #
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
26 # Description: nodehandler for a collection of miniatures.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
27 #
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
28
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
29 __version__ = "$Id: minilib.py,v 1.28 2007/04/22 22:00:18 digitalxero Exp $"
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
30
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
31 """Nodehandler for collections of miniatures. User can add, delete, edit
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
32 miniatures as sending them to the map singly or in batches.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
33 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
34 from core import *
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
35 from orpg.dirpath import dir_struct
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
36 import string
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
37 import map_miniature_nodehandler
0
4385a7d0efd1 Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff changeset
38 import orpg.mapper.map_msg
31
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
39 import orpg.minidom as minidom
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
40 # import scriptkit
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
41
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
42 # Constants
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
43 TO_MINILIB_MAP = {'path':'url', 'label':'name', 'id':None, 'action':None}
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
44 FROM_MINILIB_MAP = {'url':'path', 'name':'label', 'unique':None}
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
45 CORE_ATTRIBUTES = ['name', 'url', 'unique', 'posy', 'posx', 'hide', 'face', 'heading', 'align', 'locked', 'width', 'height']
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
46
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
47 ATTRIBUTE_NAME = 'name'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
48 ATTRIBUTE_URL = 'url'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
49 ATTRIBUTE_UNIQUE = 'unique'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
50 ATTRIBUTE_ID = 'id'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
51 ATTRIBUTE_POSX = 'posx'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
52 ATTRIBUTE_POSY = 'posy'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
53
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
54 TAG_MINIATURE = 'miniature'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
55
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
56 COMPONENT_MAP = 'map'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
57 COMPONENT_SESSION = 'session'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
58 # <nodehandler name='?' module='minilib' class='minilib_handler'>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
59 # <miniature name='?' url='?' unique='?'></miniature>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
60 # </nodehandler>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
61
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
62 class minilib_handler( node_handler ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
63 """A nodehandler that manages a collection of miniatures for the
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
64 map.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
65 <pre>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
66 &lt;nodehandler name='?' module='minilib' class='minilib_handler'&gt;
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
67 &lt;miniature name='?' url='?' unique='?'&gt;&lt;/miniature&gt;
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
68 &lt;/nodehandler&gt;
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
69 </pre>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
70 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
71 def __init__(self, xml, tree_node):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
72 """Instantiates the class, and sets all vars to their default state
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
73 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
74 node_handler.__init__(self, xml, tree_node)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
75 self.myeditor = None
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
76 self.mywindow = None
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
77 self.tree_node = tree_node
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
78 self.update_leaves()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
79 self.sanity_check_nodes()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
80
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
81 def get_design_panel( self, parent ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
82 """returns an instance of the miniature library edit control ( see
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
83 on_design ). This is for use with the the 'edit multiple nodes in a
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
84 single frame' code.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
85 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
86 return minpedit( parent, self )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
87
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
88 def get_use_panel( self, parent ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
89 """returns an instance of the miniature library view control ( see
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
90 on_use ). This is for use with the the 'view multiple nodes in a
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
91 single frame' code.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
92 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
93 return minilib_use_panel( parent, self )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
94
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
95 def tohtml( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
96 """Returns an HTML representation of this node in string format.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
97 The table columnwidths are currently being forced, as the wxHTML
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
98 widgets being used don't handle cells wider than the widgets are
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
99 expecting for a given column.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
100 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
101 str = '<table border="2" >'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
102 str += "<tr><th width='20%'>Label</th><th>Image</th><th width='65%'>URL</th><th>Unique</th></tr>"
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
103 for mini in self.xml.findall(TAG_MINIATURE):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
104 url = mini.get(ATTRIBUTE_URL)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
105 label = mini.get(ATTRIBUTE_NAME)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
106 flag = 0
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
107 try:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
108 flag = eval( mini.get(ATTRIBUTE_UNIQUE) )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
109 except:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
110 pass
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
111 show = 'yes'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
112 if flag:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
113 show = 'no'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
114
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
115 str += """<tr>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
116 <td> %s </td>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
117 <td><img src="%s"></td>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
118 <td> %s </td>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
119 <td> %s </td>
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
120 </tr>""" % ( label, url, url, show )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
121
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
122 str += "</table>"
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
123 return str
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
124
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
125 def html_view( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
126 """see to_html
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
127 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
128 return self.tohtml()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
129
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
130 def on_drop(self, evt):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
131 drag_obj = self.tree.drag_obj
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
132 if drag_obj == self or self.tree.is_parent_node( self.mytree_node, drag_obj.mytree_node ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
133 return
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
134 elif isinstance( drag_obj, map_miniature_nodehandler.map_miniature_handler ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
135 drop_xml = self.tree.drag_obj.xml#.delete()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
136 obj = drop_xml[0]
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
137 dict = {}
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
138 unique = ''
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
139 for attrib in obj.keys():
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
140 key = TO_MINILIB_MAP.get( attrib, attrib )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
141 if key != None:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
142 dict[ key ] = obj.get( attrib )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
143 dict[ ATTRIBUTE_UNIQUE ] = unique
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
144 self.new_mini( dict )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
145 else:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
146 node_handler.on_drop(self, evt)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
147
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
148
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
149 def new_mini( self, data={}, add=1 ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
150 mini = Element( TAG_MINIATURE )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
151 for key in data.keys():
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
152 mini.set( key, data[ key ] )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
153 for key in CORE_ATTRIBUTES:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
154 if mini.get( key ) == '':
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
155 mini.set( key, '0' )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
156 if add:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
157 self.add_mini( mini )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
158 self.add_leaf( mini )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
159 return mini
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
160
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
161 def add_mini( self, mini ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
162 self.xml.append( mini )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
163
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
164 def add_leaf( self, mini, icon='gear' ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
165 tree = self.tree
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
166 icons = tree.icons
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
167 key = mini.get( ATTRIBUTE_NAME )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
168 self.mydata.append( mini )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
169
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
170 def update_leaves( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
171 self.mydata = []
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
172 for n in self.xml.findall(TAG_MINIATURE):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
173 self.add_leaf( n )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
174
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
175 def on_drag( self, evt ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
176 print 'drag event caught'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
177
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
178 def send_mini_to_map( self, mini, count=1, addName=True ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
179 if mini == None:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
180 return
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
181 if mini.get( ATTRIBUTE_URL ) == '' or mini.get( ATTRIBUTE_URL ) == 'http://':
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
182 self.chat.ParsePost( self.chat.colorize(self.chat.syscolor, '"%s" is not a valid URL, the mini "%s" will not be added to the map' % ( mini.get( ATTRIBUTE_URL ), mini.get( ATTRIBUTE_NAME ) )) )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
183 return
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
184 session = component.get( COMPONENT_SESSION )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
185 if (session.my_role() != session.ROLE_GM) and (session.my_role() != session.ROLE_PLAYER):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
186 component.get("chat").InfoPost("You must be either a player or GM to use the miniature Layer")
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
187 return
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
188 map = component.get(COMPONENT_MAP)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
189 for loop in range( count ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
190 msg = self.get_miniature_XML( mini, addName)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
191 msg = str("<map action='update'><miniatures>" + msg + "</miniatures></map>")
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
192 map.new_data( msg )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
193 session.send( msg )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
194
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
195 def get_miniature_XML( self, mini_xml, addName = True ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
196 msg = orpg.mapper.map_msg.mini_msg()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
197 map = component.get( COMPONENT_MAP )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
198 session = component.get( COMPONENT_SESSION )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
199 msg.init_prop( ATTRIBUTE_ID, session.get_next_id() )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
200 msg.init_prop('selected', '1')# this will make the mini initially selected
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
201 for k in mini_xml.keys():
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
202 # translate our attributes to map attributes
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
203 key = FROM_MINILIB_MAP.get( k, k )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
204 if key != None:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
205 if not addName and k == 'name':
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
206 pass
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
207 else:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
208 msg.init_prop( key, mini_xml.get( k ) )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
209 unique = self.is_unique( mini_xml )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
210 if addName:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
211 label = mini_xml.get( ATTRIBUTE_NAME )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
212 else:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
213 label = ''
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
214 return msg.get_all_xml()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
215
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
216 def is_unique( self, mini ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
217 unique = mini.get( ATTRIBUTE_UNIQUE )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
218 val = 0
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
219 try: val = eval( unique )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
220 except: val = len( unique )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
221 return val
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
222
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
223 def sanity_check_nodes( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
224 for node in self.xml.findall(TAG_MINIATURE):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
225 if node.get( ATTRIBUTE_POSX ) == '': node.set( ATTRIBUTE_POSX, '0' )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
226 if node.get( ATTRIBUTE_POSY ) == '': node.set( ATTRIBUTE_POSY, '0' )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
227
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
228 def get_mini( self, index ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
229 try: return self.xml.findall(TAG_MINIATURE)[index]
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
230 except: return None
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
231
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
232 class mini_handler( node_handler ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
233 def __init__( self, xml, tree_node, handler ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
234 node_handler.__init__( self, xml, tree_node)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
235 self.handler = handler
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
236
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
237 def on_ldclick( self, evt ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
238 self.handler.send_mini_to_map( self.xml )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
239
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
240 def on_drop( self, evt ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
241 pass
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
242
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
243 def on_lclick( self, evt ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
244 print 'hi'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
245 evt.Skip()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
246
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
247 class minilib_use_panel(wx.Panel):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
248 """This panel will be displayed when the user double clicks on the
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
249 miniature library node. It is a sorted listbox of miniature labels,
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
250 a text field for entering a count ( for batch adds ) and 'add'/'done'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
251 buttons.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
252 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
253 def __init__( self, frame, handler ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
254 """Constructor.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
255 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
256 wx.Panel.__init__( self, frame, -1 )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
257 self.handler = handler
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
258 self.frame = frame
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
259
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
260 self.map = component.get('map')
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
261 names = self.buildList()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
262 # self.keys = self.list.keys()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
263 # self.keys.sort()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
264
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
265
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
266 s = self.GetClientSizeTuple()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
267
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
268 self.sizer = wx.BoxSizer(wx.VERTICAL)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
269 box = wx.BoxSizer(wx.HORIZONTAL)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
270 self.listbox = wx.ListBox(self, wx.ID_ANY, (10, 10), (s[0] - 10, s[1] - 30 ), names, wx.LB_EXTENDED)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
271 self.count = wx.TextCtrl(self, wx.ID_ANY, '1')
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
272
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
273 box.Add( wx.StaticText( self, -1, 'Minis to add' ), 0, wx.EXPAND )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
274 box.Add(wx.Size(10,10))
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
275 box.Add(self.count, 1, wx.EXPAND)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
276
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
277 self.sizer.Add( self.listbox, 1, wx.EXPAND )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
278 self.sizer.Add( box, 0, wx.EXPAND )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
279
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
280 box = wx.BoxSizer( wx.HORIZONTAL )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
281 self.okBtn = wx.Button(self, wx.ID_ANY, 'Add')
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
282 box.Add(self.okBtn, 0, wx.EXPAND)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
283 self.addBtn = wx.Button(self, wx.ID_ANY, 'Add No Label')
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
284 box.Add(self.addBtn, 0, wx.EXPAND)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
285 self.cancleBtn = wx.Button(self, wx.ID_ANY, 'Done')
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
286 box.Add(self.cancleBtn, 0, wx.EXPAND)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
287
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
288 self.sizer.Add(wx.Size(10,10))
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
289 self.sizer.Add(box, 0, wx.EXPAND)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
290 self.Bind(wx.EVT_BUTTON, self.on_ok, self.okBtn)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
291 self.Bind(wx.EVT_BUTTON, self.on_ok, self.addBtn)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
292 self.Bind(wx.EVT_BUTTON, self.on_close, self.cancleBtn)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
293 self.SetSizer(self.sizer)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
294 self.SetAutoLayout(True)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
295 self.Fit()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
296
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
297 def buildList( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
298 """Returns a dictionary of label => game tree miniature DOM node mappings.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
299 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
300 self.list = []
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
301 for mini in self.handler.xml.findall(TAG_MINIATURE):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
302 self.list.append( mini.get( ATTRIBUTE_NAME ) )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
303 return self.list
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
304
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
305 def on_close(self, evt):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
306 self.frame.Close()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
307
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
308 def on_ok( self, evt ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
309 """Event handler for the 'add' button.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
310 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
311 btn = self.FindWindowById(evt.GetId())
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
312 sendName = True
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
313 try:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
314 count = eval( self.count.GetValue() )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
315 except:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
316 count = 1
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
317
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
318 try:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
319 if eval( unique ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
320 count = 1
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
321 unique = eval( unique )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
322 except:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
323 pass
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
324
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
325 if btn.GetLabel() == 'Add No Label':
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
326 sendName = False
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
327 for index in self.listbox.GetSelections():
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
328 self.handler.send_mini_to_map( self.handler.get_mini( index ), count, sendName )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
329
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
330
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
331 class minpedit(wx.Panel):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
332 """Panel for editing game tree miniature nodes. Node information
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
333 is displayed in a grid, and buttons are provided for adding, deleting
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
334 nodes, and for sending minis to the map ( singly and in batches ).
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
335 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
336 def __init__( self, frame, handler ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
337 """Constructor.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
338 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
339 wx.Panel.__init__( self, frame, -1 )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
340 self.handler = handler
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
341 self.frame = frame
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
342
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
343 self.sizer = wx.BoxSizer( wx.VERTICAL )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
344 self.grid = minilib_grid( self, handler )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
345
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
346 bbox = wx.BoxSizer( wx.HORIZONTAL )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
347 newMiniBtn = wx.Button( self, wx.ID_ANY, "New mini" )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
348 delMiniBtn = wx.Button( self, wx.ID_ANY, "Del mini" )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
349 addMiniBtn = wx.Button( self, wx.ID_ANY, "Add 1" )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
350 addBatchBtn = wx.Button( self, wx.ID_ANY, "Add Batch" )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
351 bbox.Add(newMiniBtn, 0, wx.EXPAND )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
352 bbox.Add(delMiniBtn, 0, wx.EXPAND )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
353 bbox.Add(wx.Size(10,10))
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
354 bbox.Add(addMiniBtn, 0, wx.EXPAND )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
355 bbox.Add(addBatchBtn, 0, wx.EXPAND )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
356
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
357 self.sizer.Add( self.grid, 1, wx.EXPAND)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
358 self.sizer.Add( bbox, 0)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
359 self.SetSizer(self.sizer)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
360 self.SetAutoLayout(True)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
361 self.Fit()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
362
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
363 self.Bind(wx.EVT_BUTTON, self.add_mini, newMiniBtn)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
364 self.Bind(wx.EVT_BUTTON, self.del_mini, delMiniBtn)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
365 self.Bind(wx.EVT_BUTTON, self.send_to_map, addMiniBtn)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
366 self.Bind(wx.EVT_BUTTON, self.send_group_to_map, addBatchBtn)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
367
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
368 def add_mini( self, evt=None ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
369 """Event handler for the 'New mini' button. It calls
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
370 minilib_grid.add_row
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
371 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
372 self.grid.add_row()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
373
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
374 def del_mini( self, evt=None ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
375 """Event handler for the 'Del mini' button. It calls
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
376 minilib_grid.del_row
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
377 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
378 self.grid.del_row()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
379
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
380 def send_to_map( self, evt=None ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
381 """Event handler for the 'Add 1' button. Sends the
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
382 miniature defined by the currently selected row to the map, once.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
383 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
384 index = self.grid.GetGridCursorRow()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
385 self.handler.send_mini_to_map( self.handler.get_mini( index ) )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
386
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
387 def send_group_to_map( self, evt=None ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
388 """Event handler for the 'Add batch' button. Querys the user
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
389 for a mini count and sends the miniature defined by the currently
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
390 selected row to the map, the specified number of times.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
391 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
392 if self.grid.GetNumberRows() > 0:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
393 dlg = wx.TextEntryDialog( self.frame,
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
394 'How many %s\'s do you want to add?' %
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
395 ( self.grid.getSelectedLabel() ), 'Batch mini add', '2' )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
396 if dlg.ShowModal() == wx.ID_OK:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
397 try:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
398 value = eval( dlg.GetValue() )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
399 except:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
400 value = 0
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
401 # for loop in range( 0, value ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
402 # self.send_to_map()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
403 print 'getting selected index for batch send'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
404 index = self.grid.GetGridCursorRow()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
405 print 'sending batch to map'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
406 self.handler.send_mini_to_map( self.handler.get_mini( index ), value )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
407
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
408 class minilib_grid(wx.grid.Grid):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
409 """A wxGrid subclass designed for editing game tree miniature library
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
410 nodes.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
411 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
412 def __init__( self, parent, handler ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
413 """Constructor.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
414 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
415 wx.grid.Grid.__init__(self, parent, -1, style=wx.SUNKEN_BORDER | wx.WANTS_CHARS )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
416 self.parent = parent
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
417 self.handler = handler
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
418 #self.keys = [ ATTRIBUTE_NAME, ATTRIBUTE_URL, ATTRIBUTE_UNIQUE ]
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
419 self.keys = CORE_ATTRIBUTES
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
420 self.CreateGrid( 1, len( self.keys ) )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
421 # self.SetColLabelValue( 0, 'Name' )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
422 # self.SetColLabelValue( 1, 'URL' )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
423 # self.SetColSize( 1, 250 )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
424 # self.SetColLabelValue( 2, 'Unique' )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
425 for key in self.keys:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
426 self.SetColLabelValue( self.keys.index( key ), key )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
427 self.update_all()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
428 self.selectedRow = 0
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
429 self.AutoSizeColumns()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
430 self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.on_cell_change)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
431 self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.select_cell)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
432
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
433 def update_cols( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
434 for n in self.handler.xml.findall(TAG_MINIATURE):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
435 for k in n.keys():
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
436 if k not in self.keys:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
437 self.keys.append( k )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
438
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
439 def select_cell( self, evt ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
440 """Event handler for grid cell selection changes. It stores the
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
441 last selected row in a variable for use by the add[*] and del_row
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
442 operations.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
443 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
444 self.BeginBatch()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
445 self.selectedRow = evt.GetRow()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
446 self.SelectRow( self.selectedRow )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
447 self.EndBatch()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
448 evt.Skip()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
449
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
450 def getList( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
451 """Returns the list of 'miniature' DOM elements associated with this
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
452 miniature library.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
453 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
454 return self.handler.xml.findall( TAG_MINIATURE )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
455
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
456 def add_row( self, count = 1 ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
457 """creates a new miniature node, and then adds it to the current
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
458 miniature library, and to the grid.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
459 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
460 self.AppendRows( count )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
461 node = self.handler.new_mini( {
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
462 ATTRIBUTE_NAME :' ',
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
463 ATTRIBUTE_URL :'http://'} )# minidom.Element( TAG_MINIATURE )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
464 self.update_all()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
465 #self.handler.xml.append( node )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
466
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
467 def del_row( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
468 """deletes the miniature associated with the currently selected
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
469 row. BUG BUG BUG this method should drop a child from the DOM but
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
470 does not.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
471 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
472 if self.selectedRow > -1:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
473 pos = self.selectedRow
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
474 list = self.handler.xml.findall(TAG_MINIATURE)
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
475 self.handler.xml.remove( list[pos] )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
476 self.DeleteRows( pos, 1 )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
477 list = self.getList()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
478 del list[ pos ]
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
479
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
480 def on_cell_change( self, evt ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
481 """Event handler for cell selection changes. selected row is used
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
482 to update data for that row.
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
483 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
484 row = evt.GetRow()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
485 self.update_data_row( row )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
486
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
487 def update_all( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
488 """ensures that the grid is displaying the correct number of
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
489 rows, and then updates all data displayed by the grid
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
490 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
491 list = self.getList()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
492 count = 0
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
493 for n in list:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
494 for k in n.keys():
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
495 if k not in self.keys:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
496 self.keys.append( k )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
497 count = len( self.keys )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
498 if self.GetNumberCols() < count:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
499 self.AppendCols( count - self.GetNumberCols() )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
500 for k in self.keys:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
501 self.SetColLabelValue( self.keys.index( k ), k )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
502 count = len( list )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
503 rowcount = self.GetNumberRows()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
504 if ( count > rowcount ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
505 total = count - rowcount
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
506 self.AppendRows( total )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
507 elif ( count < rowcount ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
508 total = rowcount - count
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
509 self.DeleteRows( 0, total );
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
510 for index in range( 0, count ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
511 self.update_grid_row( index )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
512
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
513 def getSelectedLabel( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
514 """Returns the label for the selected row
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
515 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
516 return self.GetTable().GetValue( self.selectedRow, 0 )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
517
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
518 def getSelectedURL( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
519 """Returns the URL for the selected row
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
520 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
521 return self.GetTable().GetValue( self.selectedRow, 1 )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
522
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
523 def getSelectedSerial( self ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
524 """Returns the ATTRIBUTE_UNIQUE value for the selected row
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
525 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
526 return self.GetTable().GetValue( self.selectedRow, 2 )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
527
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
528 def update_grid_row( self, row ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
529 """Updates the specified grid row with data from the DOM node
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
530 specified by 'row'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
531 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
532 list = self.getList()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
533 item = list[ row ]
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
534 for key in self.keys:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
535 self.GetTable().SetValue( row, self.keys.index( key ), item.get( key ) )
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
536
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
537 def update_data_row( self, row ):
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
538 """Updates the DOM nodw 'row' with grid data from 'row'
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
539 """
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
540 list = self.getList()
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
541 item = list[ row ]
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
542 for key in self.keys:
fc48380f0c9f Traipse Beta 'OpenRPG' {100503-00}
sirebral
parents: 0
diff changeset
543 item.set( key, string.strip( self.GetTable().GetValue( row, self.keys.index( key ) ) ) )