TreeLib: nástřel rozhraní, až na print_tree neimplementováno
This commit is contained in:
		
							parent
							
								
									de24a5029a
								
							
						
					
					
						commit
						2632b90e5d
					
				
					 2 changed files with 63 additions and 9 deletions
				
			
		|  | @ -1244,6 +1244,7 @@ class TreeNode(PolymorphicModel): | |||
| 		on_delete = models.SET_NULL, # Vrcholy s null kořenem jsou sirotci bez ročníku  | ||||
| 		verbose_name="kořen stromu") | ||||
| 	first_child = models.ForeignKey('TreeNode', | ||||
| 		related_name='father_of_first', | ||||
| 		null = True, | ||||
| 		blank = True, | ||||
| 		on_delete=models.SET_NULL, | ||||
|  | @ -1264,15 +1265,6 @@ class TreeNode(PolymorphicModel): | |||
| 	srolovatelne = models.BooleanField(null = True, blank = True, | ||||
| 		verbose_name = "Srolovatelné", | ||||
| 		help_text = "Bude na stránce témátka možnost tuto položku skrýt") | ||||
| 	 | ||||
| 	# Slouží k debugování pro rychlé získání představy o podobě podstromu pod tímto TreeNode. | ||||
| 	def print_tree(self,indent=0): | ||||
| 		# FIXME: Tady se spoléháme na to, že nedeklarovaný primární klíč se jmenuje by default 'id', což není úplně správně | ||||
| 		print("{}{} (id: {})".format(" "*indent,self, self.id)) | ||||
| 		if self.first_child: | ||||
| 			self.first_child.print_tree(indent=indent+2) | ||||
| 		if self.succ: | ||||
| 			self.succ.print_tree(indent=indent) | ||||
| 
 | ||||
| 	def getOdkazStr(self): # String na rozcestník | ||||
| 		return self.first_child.getOdkazStr() | ||||
|  | @ -1341,6 +1333,7 @@ class MezicisloNode(TreeNode): | |||
| 		verbose_name = 'Mezičíslo (Node)' | ||||
| 		verbose_name_plural = 'Mezičísla (Node)' | ||||
| 
 | ||||
| 	# TODO: Využít TreeLib | ||||
| 	def aktualizuj_nazev(self): | ||||
| 		if self.prev: | ||||
| 			if (self.prev.get_real_instance_class() != CisloNode and | ||||
|  |  | |||
							
								
								
									
										61
									
								
								seminar/treelib.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								seminar/treelib.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| # NOTE: node.prev a node.succ jsou implementovány přímo v models.TreeNode | ||||
| 
 | ||||
| # Slouží k debugování pro rychlé získání představy o podobě podstromu pod tímto TreeNode. | ||||
| def print_tree(node,indent=0): | ||||
| 	# FIXME: Tady se spoléháme na to, že nedeklarovaný primární klíč se jmenuje by default 'id', což není úplně správně | ||||
| 	print("{}{} (id: {})".format(" "*indent,node, node.id)) | ||||
| 	if node.first_child: | ||||
| 		node.first_child.print_tree(indent=indent+2) | ||||
| 	if node.succ: | ||||
| 		node.succ.print_tree(indent=indent) | ||||
| 
 | ||||
| ## Rodinné vztahy | ||||
| def get_parent(node): | ||||
| 	# Nejdřív získáme prvního potomka... | ||||
| 
 | ||||
| 	# ... a z prvního potomka umíme najít rodiče | ||||
| 
 | ||||
| # Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé) | ||||
| def general_next(node) | ||||
| def general_prev(node) | ||||
| 
 | ||||
| # Generátor potomků | ||||
| # TODO: copy-pasta | ||||
| 
 | ||||
| # Generátor bratrů | ||||
| 
 | ||||
| # Generátor následníků v "the-right-order" | ||||
| 
 | ||||
| ## Filtrační hledání | ||||
| # Najdi dalšího bratra nějakého typu, nebo None. | ||||
| # hledá i podtřídy, i.e. get_next_brother_of_type(neco, TreeNode) je prostě succ. | ||||
| def get_next_brother_of_type(current, type): | ||||
| def get_prev_brother_of_type(current, type): | ||||
| 
 | ||||
| # Totéž pro "the-right-order" pořadí | ||||
| def get_next_node_of_type(current, type): | ||||
| def get_next_node_of_type(current, type): | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Editace stromu: | ||||
| def create_node_after(predecessor, type, **kwargs): | ||||
| 
 | ||||
| # Vyrábí prvního syna, ostatní nalepí za (existují-li) | ||||
| def create_child(parent, type, **kwargs): | ||||
| 
 | ||||
| def create_node_before(...): | ||||
| 	# Tohle bude hell. | ||||
| 
 | ||||
| # ValueError, pokud je (aspoň) jeden parametr None | ||||
| def swap(node, other): | ||||
| 
 | ||||
| def swap_pred | ||||
| def swap_succ | ||||
| 
 | ||||
| # Rotace stromu | ||||
| # Dokumentace viz wiki: | ||||
| # (lower bude jednoduchá rotace, ne mega, existence jednoduché rotace mi došla až po nakreslení obrázku) | ||||
| def raise(node) | ||||
| def lower(node) | ||||
		Loading…
	
		Reference in a new issue
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky