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)