public override Helix.Element3D GetElement(SceneNodeModel treeNode, int itemIndex) { var nodeType = treeNode?.NodeType ?? NodeType.None; var paletteKey = PaletteType.FromNodeType(nodeType); return(PaletteHolders[paletteKey].Elements[itemIndex]); }
public override bool ExecuteObjectOperation(SceneNodeModel treeNode, ObjectOperation operation, int itemIndex) { var paletteKey = PaletteType.FromNodeType(treeNode.NodeType); var holder = PaletteHolders[paletteKey]; var blockEditor = scenario.MetadataStream.GetBlockEditor(holder.Definition.PlacementBlockRef.TagBlock.Pointer.Address); switch (operation) { case ObjectOperation.Add: blockEditor.Add(); blockEditor.UpdateBlockReference(holder.Definition.PlacementBlockRef); var placement = holder.InsertPlacement(blockEditor.EntryCount - 1, scenario, paletteKey); //setting the palette index causes a refresh which builds an element for the new object //these also need to be set to -1 initially anyway placement.PaletteIndex = placement.NameIndex = -1; break; case ObjectOperation.Remove: if (itemIndex < 0 || itemIndex >= holder.Definition.Placements.Count) { return(false); } ShiftObjectNames(paletteKey, itemIndex, holder.Definition.Placements.Count, true); blockEditor.Remove(itemIndex); blockEditor.UpdateBlockReference(holder.Definition.PlacementBlockRef); holder.RemovePlacement(itemIndex); UpdateBlockIndexes(paletteKey, itemIndex, holder.Definition.Placements.Count); break; case ObjectOperation.Copy: if (itemIndex < 0 || itemIndex >= holder.Definition.Placements.Count) { return(false); } ShiftObjectNames(paletteKey, itemIndex, holder.Definition.Placements.Count, false); var destIndex = itemIndex + 1; blockEditor.Copy(itemIndex, destIndex); blockEditor.UpdateBlockReference(holder.Definition.PlacementBlockRef); placement = holder.InsertPlacement(destIndex, scenario, paletteKey); placement.CopyFrom(holder.Definition.Placements[itemIndex]); UpdateBlockIndexes(paletteKey, itemIndex, holder.Definition.Placements.Count); break; default: return(false); } return(true); }
public override IEnumerable <ScenarioListItem> GetListItems(SceneNodeModel treeNode) { var paletteKey = PaletteType.FromNodeType(treeNode.NodeType); foreach (var placement in scenario.Palettes[paletteKey].Placements) { yield return(new ScenarioListItem(placement)); } }
private void btnEditPalette_Click(object sender, RoutedEventArgs e) { var paletteKey = PaletteType.FromNodeType(scenario.SelectedNodeType); if (paletteKey != null) { new PaletteEditorWindow(scenario, paletteKey) { Owner = Window.GetWindow(this) } }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var nodeType = value as NodeType? ?? NodeType.None; var action = parameter?.ToString(); var paletteKey = PaletteType.FromNodeType(nodeType); if (paletteKey != null) { return(true); } return(false); }
public override void OnSelectedTreeNodeChanged(SceneNodeModel newNode) { var nodeType = newNode?.NodeType ?? NodeType.None; //if the node is not a palette this will disable hit testing on all palettes var paletteKey = PaletteType.FromNodeType(nodeType); foreach (var palette in PaletteHolders.Values) { palette.GroupElement.IsHitTestVisible = palette.Name == paletteKey; } //only render decals when the decal node is selected PaletteHolders[PaletteType.Decal].GroupElement.IsRendering = nodeType == NodeType.Decals; }
internal override BlockPropertiesLocator GetPropertiesLocator(SceneNodeModel treeNode, int itemIndex) { var paletteKey = PaletteType.FromNodeType(treeNode.NodeType); if (itemIndex >= 0) { var palette = scenario.Palettes[paletteKey]; var altNodes = new List <Tuple <XmlNode, long> >(); altNodes.Add(Tuple.Create(scenario.Sections[Section.ObjectNames].Node, scenario.RootAddress)); altNodes.Add(Tuple.Create(palette.PaletteNode, scenario.RootAddress)); return(new BlockPropertiesLocator { RootNode = palette.PlacementsNode, BaseAddress = palette.PlacementBlockRef.TagBlock.Pointer.Address + itemIndex * palette.PlacementBlockRef.BlockSize, AdditionalNodes = altNodes, TargetObject = palette.Placements[itemIndex] }); } return(null); }
public override bool SupportsObjectOperation(ObjectOperation operation, NodeType nodeType) => PaletteType.FromNodeType(nodeType) != null;
public override bool HandlesNodeType(NodeType nodeType) => PaletteType.FromNodeType(nodeType) != null;
public override int GetElementIndex(SceneNodeModel treeNode, Helix.Element3D element) { var paletteKey = PaletteType.FromNodeType(treeNode.NodeType); return(scenario.Palettes[paletteKey].Placements.IndexOf(element.DataContext as ObjectPlacement)); }