Skip to content

Commit af55135

Browse files
committed
Improve support for referenceDef. Now the stuff the referenceDef references only needs local scope for the reference, not global scope.
1 parent 23ee254 commit af55135

File tree

3 files changed

+49
-22
lines changed

3 files changed

+49
-22
lines changed

StructuredXmlEditor/Data/Workspace.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,22 @@ public void LoadDefinitions()
590590

591591
foreach (var scope in ReferenceableDefinitions.Values)
592592
{
593-
foreach (var def in scope.Values)
593+
foreach (var def in scope.Values.Where(e => e is ReferenceDefinition))
594+
{
595+
try
596+
{
597+
def.RecursivelyResolve(ReferenceableDefinitions[def.SrcFile], ReferenceableDefinitions[""], ReferenceableDefinitions);
598+
}
599+
catch (Exception ex)
600+
{
601+
Message.Show("Failed to resolve references in definition '" + def.Name + "'!\n\n" + ex.Message, "Resolve Definition Failed", "Ok");
602+
}
603+
}
604+
}
605+
606+
foreach (var scope in ReferenceableDefinitions.Values)
607+
{
608+
foreach (var def in scope.Values.Where(e => !(e is ReferenceDefinition)))
594609
{
595610
try
596611
{

StructuredXmlEditor/Definition/CollectionDefinition.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,16 @@ public override void RecursivelyResolve(Dictionary<string, DataDefinition> local
324324
if (defs != null)
325325
{
326326
var def = defs[key] as ReferenceDefinition;
327-
DefKeys = def.Keys;
327+
328+
foreach (var keydef in def.Keys)
329+
{
330+
var childDef = def.Definitions[keydef.Item1];
331+
var childWrapperDef = new CollectionChildDefinition();
332+
childWrapperDef.WrappedDefinition = childDef;
333+
334+
ChildDefinitions.Add(childWrapperDef);
335+
Keys.Add(new Tuple<CollectionChildDefinition, string>(childWrapperDef, keydef.Item2));
336+
}
328337
}
329338
else
330339
{

StructuredXmlEditor/Definition/ReferenceDefinition.cs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ public override void RecursivelyResolve(Dictionary<string, DataDefinition> local
154154
{
155155
var def = defs[key] as ReferenceDefinition;
156156
Keys = def.Keys;
157+
Definitions = def.Definitions;
157158

158159
ListCollectionView lcv = new ListCollectionView(Keys);
159160
lcv.GroupDescriptions.Add(new PropertyGroupDescription("Item2"));
@@ -164,32 +165,34 @@ public override void RecursivelyResolve(Dictionary<string, DataDefinition> local
164165
Message.Show("Failed to find key " + DefKey + "!", "Reference Resolve Failed", "Ok");
165166
}
166167
}
167-
168-
foreach (var key in Keys)
168+
else
169169
{
170-
Dictionary<string, DataDefinition> defs = null;
171-
if (local.ContainsKey(key.Item1.ToLower())) defs = local;
172-
else if (global.ContainsKey(key.Item1.ToLower())) defs = global;
173-
174-
if (defs != null)
170+
foreach (var key in Keys)
175171
{
176-
Definitions[key.Item1] = defs[key.Item1.ToLower()];
177-
}
178-
else if (key.Item1 != "---")
179-
{
180-
Message.Show("Failed to find key " + key.Item1 + "!", "Reference Resolve Failed", "Ok");
172+
Dictionary<string, DataDefinition> defs = null;
173+
if (local.ContainsKey(key.Item1.ToLower())) defs = local;
174+
else if (global.ContainsKey(key.Item1.ToLower())) defs = global;
175+
176+
if (defs != null)
177+
{
178+
Definitions[key.Item1] = defs[key.Item1.ToLower()];
179+
}
180+
else if (key.Item1 != "---")
181+
{
182+
Message.Show("Failed to find key " + key.Item1 + "!", "Reference Resolve Failed", "Ok");
183+
}
181184
}
182-
}
183185

184-
if (Keys.Count == 0)
185-
{
186-
Keys.Add(new Tuple<string, string>("---", "---"));
186+
if (Keys.Count == 0)
187+
{
188+
Keys.Add(new Tuple<string, string>("---", "---"));
187189

188-
ListCollectionView lcv = new ListCollectionView(Keys);
189-
lcv.GroupDescriptions.Add(new PropertyGroupDescription("Item2"));
190-
ItemsSource = lcv;
190+
ListCollectionView lcv = new ListCollectionView(Keys);
191+
lcv.GroupDescriptions.Add(new PropertyGroupDescription("Item2"));
192+
ItemsSource = lcv;
191193

192-
Definitions["---"] = new DummyDefinition();
194+
Definitions["---"] = new DummyDefinition();
195+
}
193196
}
194197
}
195198

0 commit comments

Comments
 (0)