Mercurial > traipse_dev
comparison orpg/gametree/gametree.py @ 132:fe4dc5817d5e alpha
Traipse Alpha 'OpenRPG' {091005-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 (Cleaning up for Beta)
Added Bookmarks
Fix to Remote Admin Commands
Minor fix to text based Server
Fix to Pretty Print, from Core
Fix to Splitter Nodes not being created
Fix to massive amounts of images loading, from Core
Added 'boot' command to remote admin
Added confirmation window for sent nodes
Minor changes to allow for portability to an OpenSUSE linux OS
Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG
Zoom Mouse plugin added
Images added to Plugin UI
Switching to Element Tree
Map efficiency, from FlexiRPG
Added Status Bar to Update Manager
default_manifest.xml renamed to default_upmana.xml
Cleaner clode for saved repositories
New TrueDebug Class in orpg_log (See documentation for usage)
Mercurial's hgweb folder is ported to upmana
**Pretty important update that can help remove thousands of dead children from your gametree.
**Children, <forms />, <group_atts />, <horizontal />, <cols />, <rows />, <height />, etc... are all tags now.
Check your gametree and look for dead children!!
**New Gamtree Recusion method, mapping, and context sensitivity. !!Alpha - Watch out for infinite loops!!
Dead Node Children, now that's a
O O
-v-v- Happy Halloween!
author | sirebral |
---|---|
date | Thu, 05 Nov 2009 12:15:19 -0600 |
parents | d54e1328dbb1 |
children | 37d26a98883f |
comparison
equal
deleted
inserted
replaced
131:90d19eb43830 | 132:fe4dc5817d5e |
---|---|
107 self.Bind(wx.EVT_CHAR, self.on_char) | 107 self.Bind(wx.EVT_CHAR, self.on_char) |
108 self.Bind(wx.EVT_KEY_UP, self.on_key_up) | 108 self.Bind(wx.EVT_KEY_UP, self.on_key_up) |
109 self.id = 1 | 109 self.id = 1 |
110 self.dragging = False | 110 self.dragging = False |
111 self.last_save_dir = dir_struct["user"] | 111 self.last_save_dir = dir_struct["user"] |
112 self.tree_map = [] | |
112 | 113 |
113 #Create tree from default if it does not exist | 114 #Create tree from default if it does not exist |
114 validate.config_file("tree.xml","default_tree.xml") | 115 validate.config_file("tree.xml","default_tree.xml") |
115 component.add("tree", self) | 116 component.add("tree", self) |
116 | 117 |
118 self.root = self.AddRoot("Game Tree", self.icons['gear']) | 119 self.root = self.AddRoot("Game Tree", self.icons['gear']) |
119 self.was_labeling = 0 | 120 self.was_labeling = 0 |
120 self.rename_flag = 0 | 121 self.rename_flag = 0 |
121 self.image_cache = {} | 122 self.image_cache = {} |
122 logger.debug("Exit game_tree") | 123 logger.debug("Exit game_tree") |
123 | |
124 | 124 |
125 def add_nodehandler(self, nodehandler, nodeclass): | 125 def add_nodehandler(self, nodehandler, nodeclass): |
126 if not self.nodehandlers.has_key(nodehandler): self.nodehandlers[nodehandler] = nodeclass | 126 if not self.nodehandlers.has_key(nodehandler): self.nodehandlers[nodehandler] = nodeclass |
127 else: logger.debug("Nodehandler for " + nodehandler + " already exists!") | 127 else: logger.debug("Nodehandler for " + nodehandler + " already exists!") |
128 | |
129 | 128 |
130 def remove_nodehandler(self, nodehandler): | 129 def remove_nodehandler(self, nodehandler): |
131 if self.nodehandlers.has_key(nodehandler): | 130 if self.nodehandlers.has_key(nodehandler): |
132 del self.nodehandlers[nodehandler] | 131 del self.nodehandlers[nodehandler] |
133 else: logger.debug("No nodehandler for " + nodehandler + " exists!") | 132 else: logger.debug("No nodehandler for " + nodehandler + " exists!") |
134 | 133 |
135 | |
136 def init_nodehandlers(self): | 134 def init_nodehandlers(self): |
137 self.add_nodehandler('group_handler', containers.group_handler) | 135 self.add_nodehandler('group_handler', containers.group_handler) |
138 self.add_nodehandler('tabber_handler', containers.tabber_handler) | 136 self.add_nodehandler('tabber_handler', containers.tabber_handler) |
139 self.add_nodehandler('splitter_handler', containers.splitter_handler) | 137 self.add_nodehandler('splitter_handler', containers.splitter_handler) |
140 self.add_nodehandler('form_handler', forms.form_handler) | 138 self.add_nodehandler('form_handler', forms.form_handler) |
171 self.SelectItem(curSelection) | 169 self.SelectItem(curSelection) |
172 if(isinstance(obj,core.node_handler)): | 170 if(isinstance(obj,core.node_handler)): |
173 obj.on_drop(evt) | 171 obj.on_drop(evt) |
174 self.drag_obj = None | 172 self.drag_obj = None |
175 evt.Skip() | 173 evt.Skip() |
176 | |
177 | 174 |
178 def on_char(self, evt): | 175 def on_char(self, evt): |
179 key_code = evt.GetKeyCode() | 176 key_code = evt.GetKeyCode() |
180 curSelection = self.GetSelection() # Get the current selection | 177 curSelection = self.GetSelection() # Get the current selection |
181 if evt.ShiftDown() and ((key_code == wx.WXK_UP) or (key_code == wx.WXK_DOWN)) and not self.dragging: | 178 if evt.ShiftDown() and ((key_code == wx.WXK_UP) or (key_code == wx.WXK_DOWN)) and not self.dragging: |
198 elif key_code == wx.WXK_F2: | 195 elif key_code == wx.WXK_F2: |
199 self.rename_flag = 1 | 196 self.rename_flag = 1 |
200 self.EditLabel(curSelection) | 197 self.EditLabel(curSelection) |
201 evt.Skip() | 198 evt.Skip() |
202 | 199 |
203 | |
204 def locate_valid_tree(self, error, msg): ## --Snowdog 3/05 | 200 def locate_valid_tree(self, error, msg): ## --Snowdog 3/05 |
205 """prompts the user to locate a new tree file or create a new one""" | 201 """prompts the user to locate a new tree file or create a new one""" |
206 response = wx.MessageDialog(self, msg, error, wx.YES|wx.NO|wx.ICON_ERROR) | 202 response = wx.MessageDialog(self, msg, error, wx.YES|wx.NO|wx.ICON_ERROR) |
207 if response == wx.YES: | 203 if response == wx.YES: |
208 file = None | 204 file = None |
379 tostring(data) | 375 tostring(data) |
380 beg = string.find(data,"<tree>") | 376 beg = string.find(data,"<tree>") |
381 end = string.rfind(data,"</tree>") | 377 end = string.rfind(data,"</tree>") |
382 data = data[6:end] | 378 data = data[6:end] |
383 self.insert_xml(data) | 379 self.insert_xml(data) |
384 | |
385 | 380 |
386 def on_send_to_chat(self, evt): | 381 def on_send_to_chat(self, evt): |
387 item = self.GetSelection() | 382 item = self.GetSelection() |
388 obj = self.GetPyData(item) | 383 obj = self.GetPyData(item) |
389 obj.on_send_to_chat(evt) | 384 obj.on_send_to_chat(evt) |
390 | |
391 | 385 |
392 def on_whisper_to(self, evt): | 386 def on_whisper_to(self, evt): |
393 players = self.session.get_players() | 387 players = self.session.get_players() |
394 opts = [] | 388 opts = [] |
395 myid = self.session.get_id() | 389 myid = self.session.get_id() |
485 dlg.Destroy() | 479 dlg.Destroy() |
486 | 480 |
487 | 481 |
488 def on_wizard(self, evt): | 482 def on_wizard(self, evt): |
489 item = self.GetSelection() | 483 item = self.GetSelection() |
490 debug((item)) | |
491 obj = self.GetPyData(item) | 484 obj = self.GetPyData(item) |
492 name = "New " + obj.xml_root.get("name") | 485 name = "New " + obj.xml_root.get("name") |
493 icon = obj.xml_root.get("icon") | 486 icon = obj.xml_root.get("icon") |
494 xml_data = "<nodehandler name=\""+name+"\" icon=\"" + icon + "\" module=\"core\" class=\"node_loader\" >" | 487 xml_data = "<nodehandler name=\""+name+"\" icon=\"" + icon + "\" module=\"core\" class=\"node_loader\" >" |
495 xml_data += xml.toxml(obj) | 488 xml_data += xml.toxml(obj) |
655 # -- Snowdog 8/03 | 648 # -- Snowdog 8/03 |
656 if not txt: | 649 if not txt: |
657 wx.MessageBox("Import Failed: Invalid or missing node data") | 650 wx.MessageBox("Import Failed: Invalid or missing node data") |
658 logger.general("Import Failed: Invalid or missing node data") | 651 logger.general("Import Failed: Invalid or missing node data") |
659 return | 652 return |
660 | 653 try: new_xml = XML(txt) |
661 try: | |
662 new_xml = XML(txt) | |
663 except ExpatError: | 654 except ExpatError: |
664 wx.MessageBox("Error Importing Node or Tree") | 655 wx.MessageBox("Error Importing Node or Tree") |
665 logger.general("Error Importing Node or Tree") | 656 logger.general("Error Importing Node or Tree") |
666 return | 657 return |
667 | 658 |
669 for xml_child in new_xml: | 660 for xml_child in new_xml: |
670 self.load_xml(xml_child, self.root) | 661 self.load_xml(xml_child, self.root) |
671 return | 662 return |
672 | 663 |
673 self.xml_root.append(new_xml) | 664 self.xml_root.append(new_xml) |
674 self.load_xml(new_xml,self.root,self.root) | 665 self.load_xml(new_xml, self.root, self.root) |
675 | 666 |
676 | 667 |
677 def build_img_list(self): | 668 def build_img_list(self): |
678 """make image list""" | 669 """make image list""" |
679 helper = img_helper() | 670 helper = img_helper() |
685 path = orpg.dirpath.dir_struct["icon"] + icon.get("file") | 676 path = orpg.dirpath.dir_struct["icon"] + icon.get("file") |
686 img = helper.load_file(path) | 677 img = helper.load_file(path) |
687 self.icons[key] = self._imageList.Add(img) | 678 self.icons[key] = self._imageList.Add(img) |
688 self.SetImageList(self._imageList) | 679 self.SetImageList(self._imageList) |
689 | 680 |
681 def get_tree_map(self, parent): | |
682 ## Could be a little cleaner ## | |
683 family_tree = [] | |
684 test = parent | |
685 while test != self.root: | |
686 parent = self.GetItemText(test) | |
687 test = self.GetItemParent(test) | |
688 family_tree.append(parent) | |
689 return family_tree | |
690 | 690 |
691 def load_xml(self, xml_element, parent_node, prev_node=None): | 691 def load_xml(self, xml_element, parent_node, prev_node=None): |
692 if parent_node != self.root: | |
693 ## Loading XML seems to lag on Grids ## | |
694 family_tree = self.get_tree_map(parent_node) | |
695 family_tree.reverse() | |
696 map_str = '' #'!@' | |
697 for member in family_tree: | |
698 map_str += member +'::' | |
699 map_str = map_str[:len(map_str)-2] #+'@!' | |
700 xml_element.set('map', map_str) | |
701 | |
692 #add the first tree node | 702 #add the first tree node |
693 i = 0 | 703 i = 0 |
694 name = xml_element.get("name") | 704 name = xml_element.get("name") |
695 icon = xml_element.get("icon") | 705 icon = xml_element.get("icon") |
696 if self.icons.has_key(icon): i = self.icons[icon] | 706 if self.icons.has_key(icon): i = self.icons[icon] |
697 | 707 |
698 if prev_node: | 708 if prev_node: |
699 if prev_node == parent_node: new_tree_node = self.PrependItem(parent_node, name, i, i) | 709 if prev_node == parent_node: new_tree_node = self.PrependItem(parent_node, name, i, i) |
700 else: new_tree_node = self.InsertItem(parent_node,prev_node, name, i, i) | 710 else: new_tree_node = self.InsertItem(parent_node, prev_node, name, i, i) |
701 else: new_tree_node = self.AppendItem(parent_node, name, i, i) | 711 else: new_tree_node = self.AppendItem(parent_node, name, i, i) |
702 | 712 |
703 logger.debug("Node Added to tree") | 713 logger.debug("Node Added to tree") |
704 #create a nodehandler or continue loading xml into tree | 714 #create a nodehandler or continue loading xml into tree |
705 if xml_element.tag == "nodehandler": | 715 if xml_element.tag == "nodehandler": |
722 #self.Delete(new_tree_node) | 732 #self.Delete(new_tree_node) |
723 #parent = xml_dom._get_parentNode() | 733 #parent = xml_dom._get_parentNode() |
724 #parent.removeChild(xml_dom) | 734 #parent.removeChild(xml_dom) |
725 | 735 |
726 return new_tree_node | 736 return new_tree_node |
727 | |
728 | 737 |
729 def cached_load_of_image(self, bmp_in, new_tree_node): | 738 def cached_load_of_image(self, bmp_in, new_tree_node): |
730 image_list = self.GetImageList() | 739 image_list = self.GetImageList() |
731 img = wx.ImageFromBitmap(bmp_in) | 740 img = wx.ImageFromBitmap(bmp_in) |
732 img_data = img.GetData() | 741 img_data = img.GetData() |
733 image_index = None | 742 image_index = None |
734 for key in self.image_cache.keys(): | 743 for key in self.image_cache.keys(): |
735 if self.image_cache[key] == str(img_data): | 744 if self.image_cache[key] == str(img_data): |
736 image_index = key | 745 image_index = key |
737 break | 746 break |
738 | |
739 if image_index is None: | 747 if image_index is None: |
740 image_index = image_list.Add(bmp_in) | 748 image_index = image_list.Add(bmp_in) |
741 self.image_cache[image_index] = img_data | 749 self.image_cache[image_index] = img_data |
742 self.SetItemImage(new_tree_node,image_index) | 750 self.SetItemImage(new_tree_node,image_index) |
743 self.SetItemImage(new_tree_node,image_index, wx.TreeItemIcon_Selected) | 751 self.SetItemImage(new_tree_node,image_index, wx.TreeItemIcon_Selected) |
744 return image_index | 752 return image_index |
745 | 753 |
746 | |
747 def on_rclick(self, evt): | 754 def on_rclick(self, evt): |
748 pt = evt.GetPosition() | 755 pt = evt.GetPosition() |
749 (item, flag) = self.HitTest(pt) | 756 (item, flag) = self.HitTest(pt) |
750 if item.IsOk(): | 757 if item.IsOk(): |
751 obj = self.GetPyData(item) | 758 obj = self.GetPyData(item) |