1 #include "Designers.h"
2 
Save(Time afiletime,TreeCtrl & tree)3 void TreeDesPos::Save(Time afiletime, TreeCtrl& tree)
4 {
5 	filetime = afiletime;
6 	scroll = tree.GetScroll();
7 	cursor = tree.GetCursor();
8 	openid = tree.GetOpenIds();
9 }
10 
Restore(Time afiletime,TreeCtrl & tree)11 void TreeDesPos::Restore(Time afiletime, TreeCtrl& tree)
12 {
13 	if(afiletime == filetime) {
14 		tree.OpenIds(openid);
15 		if(tree.IsValid(cursor))
16 			tree.SetCursor(cursor);
17 		tree.ScrollTo(scroll);
18 	}
19 	tree.SetFocus();
20 }
21 
Serialize(Stream & s,ArrayMap<String,TreeDesPos> & pos)22 void Serialize(Stream& s, ArrayMap<String, TreeDesPos>& pos)
23 {
24 	int version = 0;
25 	s / version;
26 	s % pos;
27 }
28 
TreeViewDes()29 TreeViewDes::TreeViewDes()
30 {
31 	tree.NoRoot();
32 
33 	error.SetFont(Arial(20)).SetInk(Red);
34 	errorbg.Height(Zy(25)).Add(error.SizePos());
35 
36 	Add(tree.SizePos());
37 
38 	tree.WhenLeftDouble = [=] { CopyPath(); };
39 }
40 
41 ArrayMap<String, TreeDesPos> TreeViewDes::pos;
42 
Load(const String & fn)43 bool TreeViewDes::Load(const String& fn)
44 {
45 	RemoveFrame(errorbg);
46 	tree.Clear();
47 
48 	filename = fn;
49 
50 	FileIn in(filename);
51 	if(!in)
52 		return false;
53 
54 	filetime = in.GetTime();
55 
56 	const int limit = 20000000;
57 
58 	String txt = in.Get(limit);
59 
60 	String parsingError = Load0(txt);
61 	if(in.GetSize() >= limit)
62 		MergeWith(parsingError, ", ", "file was longer than 20MB and was truncated");
63 	if(parsingError.GetCount()) {
64 		error = String() << "XML parsing error: " << parsingError << ".";
65 		AddFrame(errorbg);
66 	}
67 
68 	return tree.GetChildCount(0);
69 }
70 
EditMenu(Bar & menu)71 void TreeViewDes::EditMenu(Bar& menu)
72 {
73 	menu.Add(tree.IsCursor(), "Copy current path to clipboard", [=] { CopyPath(); });
74 }
75 
RestoreEditPos()76 void TreeViewDes::RestoreEditPos()
77 {
78 	pos.GetAdd(filename + "\n" + GetId()).Restore(filetime, tree);
79 }
80 
SaveEditPos()81 void TreeViewDes::SaveEditPos()
82 {
83 	pos.GetAdd(filename + "\n" + GetId()).Save(filetime, tree);
84 }
85 
INITIALIZER(TreeViewDes)86 INITIALIZER(TreeViewDes)
87 {
88 	RegisterGlobalSerialize("TreeViewDes", [](Stream& s) {
89 		int version = 0;
90 		s / version;
91 		s % TreeViewDes::pos;
92 	});
93 }
94