/// <summary> /// Update the breadcrumb navigation bar, make all nodes correspond to the design-time state /// of the room layers and items. /// </summary> /// TODO: currently this is the only way to sync navbar with the design-time properties. /// find a better solution, perhaps tie each DesignTimeProperties object to a bar node. public void RefreshLayersTree() { IAddressNode currentNode = _editAddressBar.CurrentNode; IAddressNode[] layers = new IAddressNode[_layers.Count]; VisibleLayerRadioGroup visibleLayerRadioGroup = new VisibleLayerRadioGroup(); for (int layerIndex = 0; layerIndex < layers.Length; layerIndex++) { IRoomEditorFilter layer = _layers[layerIndex]; IAddressNode[] children = new IAddressNode[layer.DesignItems.Count]; int index = 0; foreach (var item in layer.DesignItems) { string id = item.Key; string name = layer.GetItemName(id); children[index++] = new RoomEditNode(GetLayerItemUniqueID(layer, name), name, id, new IAddressNode[0], item.Value.Visible, item.Value.Locked, false); } RoomEditNode node = new RoomEditNode(layer.DisplayName, children, layer.Visible, layer.Locked); node.Layer = layer; if (layer is BaseAreasEditorFilter) { node.VisibleGroup = visibleLayerRadioGroup; } foreach (IAddressNode child in children) { child.Parent = node; } layers[layerIndex] = node; } _layersRoot = new RoomEditNode("Room", layers, true, false); foreach (IAddressNode layer in layers) { layer.Parent = _layersRoot; } _editAddressBar.InitializeRoot(_layersRoot); SelectOldNode(currentNode); }