mirror of
				https://github.com/Theodor-Springmann-Stiftung/hamann-ausgabe-core.git
				synced 2025-10-30 17:55:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			154 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Threading.Tasks;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace HaInformator
 | |
| {
 | |
|     public class SelectionState
 | |
|     {
 | |
|         public string Name { get; private set;  }
 | |
|         private HashSet<Tree> _sTrees;
 | |
|         private Stack<Tree> _mTrees;
 | |
| 
 | |
|         public SelectionState() { }
 | |
| 
 | |
|         public SelectionState(Tree tree)
 | |
|         {
 | |
|             _sTrees = new HashSet<Tree>() { tree };
 | |
|             this.Name = tree != null ? tree.Name : "";
 | |
|         }
 | |
| 
 | |
|         public SelectionState(HashSet<Tree> tree)
 | |
|         {
 | |
|             _sTrees = tree;
 | |
|             this.Name = tree != null && tree.Any() ? tree.First().Name : "";
 | |
|         }
 | |
| 
 | |
|         public AttributeTree GetAttributeTree()
 | |
|         {
 | |
|             if (_sTrees == null)
 | |
|                 return null;
 | |
|             AttributeTree res = null;
 | |
|             foreach (var t in _sTrees)
 | |
|             {
 | |
|                 if (t.Attributes != null)
 | |
|                 {
 | |
|                     if (res == null)
 | |
|                         res = new AttributeTree();
 | |
|                     res.AddAttribute(t.Attributes);
 | |
|                 }
 | |
|             }
 | |
|             return res;
 | |
|         }
 | |
|     
 | |
|         public void Mark()
 | |
|         {
 | |
|             if (_sTrees == null)
 | |
|                 return;
 | |
|             foreach (var t in _sTrees)
 | |
|             {
 | |
|                 if (_mTrees == null)
 | |
|                     _mTrees = new Stack<Tree>();
 | |
|                 _mTrees.Push(t);
 | |
|                 t.ForeColor = System.Drawing.SystemColors.HighlightText;
 | |
|                 t.BackColor = System.Drawing.SystemColors.Highlight;
 | |
|                 if (t.Parent != null)
 | |
|                     _expandNodeAndParents(t);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void Unmark()
 | |
|         {
 | |
|             if (_mTrees == null)
 | |
|                 return;
 | |
|             while (_mTrees.Any())
 | |
|             {
 | |
|                 var t = _mTrees.Pop();
 | |
|                 t.ForeColor = Color.Black;
 | |
|                 t.BackColor = Color.Transparent;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void _expandNodeAndParents(Tree node)
 | |
|         {
 | |
|             if (_mTrees == null || node == null)
 | |
|                 return;
 | |
|             node.Expand();
 | |
|             if (node.Parent == null)
 | |
|                 return;
 | |
|             else
 | |
|                 _expandNodeAndParents((Tree)node.Parent);
 | |
|         }
 | |
| 
 | |
|         public void ChangeName(string name)
 | |
|         {
 | |
|             if (_sTrees == null || String.IsNullOrWhiteSpace(name))
 | |
|                 return;
 | |
|             foreach (var t in _sTrees) t.SetName(name);
 | |
|             this.Name = name;
 | |
|         }
 | |
| 
 | |
|         public void AddElement(string name, string value = "")
 | |
|         {
 | |
|             if (_sTrees == null || String.IsNullOrWhiteSpace(name))
 | |
|                 return;
 | |
|             foreach (var t in _sTrees) t.AddElement(name, value);
 | |
|         }
 | |
| 
 | |
|         public void RemoveElement()
 | |
|         {
 | |
|             if (_sTrees == null)
 | |
|                 return;
 | |
|             foreach (var t in _sTrees) t.RemoveElement();
 | |
|         }
 | |
| 
 | |
|         public void AddAttribute(string name, string value = "")
 | |
|         {
 | |
|             if (_sTrees == null || String.IsNullOrWhiteSpace(name))
 | |
|                 return;
 | |
|             foreach (var t in _sTrees) t.AddAttribute(name, value);
 | |
|         }
 | |
| 
 | |
|         public void SaveTree(string filepath)
 | |
|         {
 | |
|             if (_sTrees == null || _sTrees.Count == 0 || String.IsNullOrWhiteSpace(filepath))
 | |
|                 return;
 | |
|             foreach (var t in _sTrees)
 | |
|                 t.SaveFile(filepath);
 | |
|         }
 | |
| 
 | |
|         public void EditAttribute(string source, string target)
 | |
|         {
 | |
|             if (_sTrees == null ||
 | |
|                 _sTrees.Count == 0 ||
 | |
|                 String.IsNullOrWhiteSpace(source) ||
 | |
|                 String.IsNullOrWhiteSpace(target))
 | |
|                 return;
 | |
|             foreach (var t in _sTrees) t.EditAttribute(source, target);
 | |
|         }
 | |
| 
 | |
|         public void RemoveAttribute(string target)
 | |
|         {
 | |
|             if (_sTrees == null ||
 | |
|                 _sTrees.Count == 0 ||
 | |
|                 String.IsNullOrWhiteSpace(target))
 | |
|                 return;
 | |
|             foreach (var t in _sTrees) t.Attributes.RemoveAttribute(target);
 | |
|         }
 | |
| 
 | |
|         public void EditValue(string attr, string source, string target)
 | |
|         {
 | |
|             if (_sTrees == null ||
 | |
|                 _sTrees.Count == 0 ||
 | |
|                 String.IsNullOrWhiteSpace(source))
 | |
|                 return;
 | |
|             foreach (var t in _sTrees) t.Attributes.EditValue(attr, source, target);
 | |
|         }
 | |
|     }
 | |
| }
 | 
