aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModelLocator.cs
blob: a7d08eb45b0e57d157e787e0f6acf7d681dfabd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using Tango.Core.DI;
using Tango.MachineStudio.Technician.ViewModels;

namespace Tango.MachineStudio.Technician
{
    /// <summary>
    /// This class contains static references to all the view models in the
    /// application and provides an entry point for the bindings.
    /// </summary>
    public static class ViewModelLocator
    {
        /// <summary>
        /// Initializes a new instance of the ViewModelLocator class.
        /// </summary>
        static ViewModelLocator()
        {
            TangoIOC.Default.Register<MachineTechViewVM>();
        }

        public static MachineTechViewVM MachineTechViewVM
        {
            get
            {
                return TangoIOC.Default.GetInstance<MachineTechViewVM>();
            }
        }
    }
}
="k">using System.Collections.Generic; namespace Tango.Scripting.Editors.Xml { /// <summary> /// Specailized attribute collection with attribute name caching /// </summary> public class AXmlAttributeCollection: FilteredCollection<AXmlAttribute, AXmlObjectCollection<AXmlObject>> { /// <summary> Empty unbound collection </summary> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes", Justification = "InsertItem prevents modifying the Empty collection")] public static readonly AXmlAttributeCollection Empty = new AXmlAttributeCollection(); /// <summary> Create unbound collection </summary> protected AXmlAttributeCollection() {} /// <summary> Wrap the given collection. Non-attributes are filtered </summary> public AXmlAttributeCollection(AXmlObjectCollection<AXmlObject> source): base(source) {} /// <summary> Wrap the given collection. Non-attributes are filtered. Items not matching the condition are filtered. </summary> public AXmlAttributeCollection(AXmlObjectCollection<AXmlObject> source, Predicate<object> condition): base(source, condition) {} Dictionary<string, List<AXmlAttribute>> hashtable = new Dictionary<string, List<AXmlAttribute>>(); void AddToHashtable(AXmlAttribute attr) { string localName = attr.LocalName; if (!hashtable.ContainsKey(localName)) { hashtable[localName] = new List<AXmlAttribute>(1); } hashtable[localName].Add(attr); } void RemoveFromHashtable(AXmlAttribute attr) { string localName = attr.LocalName; hashtable[localName].Remove(attr); } static List<AXmlAttribute> NoAttributes = new List<AXmlAttribute>(); /// <summary> /// Get all attributes with given local name. /// Hash table is used for lookup so this is cheap. /// </summary> public IEnumerable<AXmlAttribute> GetByLocalName(string localName) { if (hashtable.ContainsKey(localName)) { return hashtable[localName]; } else { return NoAttributes; } } /// <inheritdoc/> protected override void ClearItems() { foreach(AXmlAttribute item in this) { RemoveFromHashtable(item); item.Changing -= item_Changing; item.Changed -= item_Changed; } base.ClearItems(); } /// <inheritdoc/> protected override void InsertItem(int index, AXmlAttribute item) { // prevent insertions into the static 'Empty' instance if (this == Empty) throw new NotSupportedException("Cannot insert into AXmlAttributeCollection.Empty"); AddToHashtable(item); item.Changing += item_Changing; item.Changed += item_Changed; base.InsertItem(index, item); } /// <inheritdoc/> protected override void RemoveItem(int index) { RemoveFromHashtable(this[index]); this[index].Changing -= item_Changing; this[index].Changed -= item_Changed; base.RemoveItem(index); } /// <inheritdoc/> protected override void SetItem(int index, AXmlAttribute item) { RemoveFromHashtable(this[index]); this[index].Changing -= item_Changing; this[index].Changed -= item_Changed; AddToHashtable(item); item.Changing += item_Changing; item.Changed += item_Changed; base.SetItem(index, item); } // Every item in the collection should be registered to these handlers // so that we can handle renames void item_Changing(object sender, AXmlObjectEventArgs e) { RemoveFromHashtable((AXmlAttribute)e.Object); } void item_Changed(object sender, AXmlObjectEventArgs e) { AddToHashtable((AXmlAttribute)e.Object); } } }