示例#1
0
        public void LoadConfig(LoadingForm loadingForm)
        {
            int statusNum = 0;

            // Read configuration
            loadingForm.UpdateStatus("Loading main configuration", statusNum++);
            XmlConfigParser.OpenConfig(@"Config/Config.xml");
            loadingForm.UpdateStatus("Loading Miscellaneous Data", statusNum++);
            _miscData = XmlConfigParser.OpenWatchVarData(@"Config/MiscData.xml", "MiscDataSchema.xsd");
            loadingForm.UpdateStatus("Loading Object Data", statusNum++);
            _objectData = XmlConfigParser.OpenWatchVarData(@"Config/ObjectData.xml", "ObjectDataSchema.xsd", "objectOffset");
            loadingForm.UpdateStatus("Loading Object Associations", statusNum++);
            _objectAssoc = XmlConfigParser.OpenObjectAssoc(@"Config/ObjectAssociations.xml", _slotManagerGui);
            loadingForm.UpdateStatus("Loading Mario Data", statusNum++);
            _marioData = XmlConfigParser.OpenWatchVarData(@"Config/MarioData.xml", "MarioDataSchema.xsd", "marioOffset");
            loadingForm.UpdateStatus("Loading Camera Data", statusNum++);
            _cameraData = XmlConfigParser.OpenWatchVarData(@"Config/CameraData.xml", "CameraDataSchema.xsd");
            loadingForm.UpdateStatus("Loading HUD Data", statusNum++);
            _triangleData = XmlConfigParser.OpenWatchVarData(@"Config/TrianglesData.xml", "TrianglesDataSchema.xsd", "triangleOffset");
            loadingForm.UpdateStatus("Loading Triangles Data", statusNum++);
            _hudData = XmlConfigParser.OpenWatchVarData(@"Config/HudData.xml", "HudDataSchema.xsd");
            loadingForm.UpdateStatus("Loading Map Associations", statusNum++);
            _mapAssoc = XmlConfigParser.OpenMapAssoc(@"Config/MapAssociations.xml");
            loadingForm.UpdateStatus("Loading Scripts", statusNum++);
            _scriptParser = XmlConfigParser.OpenScripts(@"Config/Scripts.xml");
            loadingForm.UpdateStatus("Loading Hacks", statusNum++);
            _romHacks = XmlConfigParser.OpenHacks(@"Config/Hacks.xml");

            loadingForm.UpdateStatus("Finishing", statusNum);
        }
示例#2
0
        public ObjectSlotsManager(ProcessStream stream, ObjectAssociations objAssoc,
                                  ObjectManager objManager, ObjectSlotManagerGui managerGui, MapManager mapManager, MiscManager miscManager)
        {
            ObjectAssoc  = objAssoc;
            _stream      = stream;
            _objManager  = objManager;
            ManagerGui   = managerGui;
            _mapManager  = mapManager;
            _miscManager = miscManager;

            // Add MapToggleModes
            ManagerGui.MapObjectToggleModeComboBox.DataSource   = Enum.GetValues(typeof(MapToggleModeType));
            ManagerGui.MapObjectToggleModeComboBox.SelectedItem = MapToggleModeType.Single;

            // Add SortMethods
            ManagerGui.SortMethodComboBox.DataSource   = Enum.GetValues(typeof(ObjectSlotsManager.SortMethodType));
            ManagerGui.SortMethodComboBox.SelectedItem = SortMethodType.ProcessingOrder;

            // Add LabelMethods
            ManagerGui.LabelMethodComboBox.DataSource   = Enum.GetValues(typeof(ObjectSlotsManager.SlotLabelType));
            ManagerGui.LabelMethodComboBox.SelectedItem = SlotLabelType.Recommended;

            // Create and setup object slots
            ObjectSlots = new ObjectSlot[Config.ObjectSlots.MaxSlots];
            for (int i = 0; i < Config.ObjectSlots.MaxSlots; i++)
            {
                var objectSlot = new ObjectSlot(i, this, ManagerGui, new Size(DefaultSlotSize, DefaultSlotSize));
                ObjectSlots[i]    = objectSlot;
                objectSlot.Click += (sender, e) => OnClick(sender, e);
                ManagerGui.FlowLayoutContainer.Controls.Add(objectSlot);
            }

            // Change default
            ChangeSlotSize(DefaultSlotSize);
        }
示例#3
0
        public MapManager(ProcessStream stream, MapAssociations mapAssoc, ObjectAssociations objAssoc,
                          MapGui mapGui)
        {
            _stream  = stream;
            MapAssoc = mapAssoc;
            _mapGui  = mapGui;

            _marioMapObj = new MapObject(objAssoc.MarioMapImage, 1);
            _marioMapObj.UsesRotation = true;

            _holpMapObj = new MapObject(objAssoc.HolpImage, 2);

            _cameraMapObj = new MapObject(objAssoc.CameraMapImage, 1);
            _cameraMapObj.UsesRotation = true;
            _floorTriangleMapObj       = new TriangleMapObject(Color.FromArgb(200, Color.Yellow), 3);
        }
示例#4
0
        public ObjectManager(ProcessStream stream, ObjectAssociations objAssoc, List <WatchVariable> objectData, ObjectDataGui objectGui)
            : base(stream, objectData, objectGui.ObjectFlowLayout)
        {
            _objGui   = objectGui;
            _objAssoc = objAssoc;

            // Register controls on the control (for drag-and-drop)
            RegisterControlEvents(_objGui.ObjectBorderPanel);
            foreach (Control control in _objGui.ObjectBorderPanel.Controls)
            {
                RegisterControlEvents(control);
            }

            _objGui.ObjAddressLabelValue.Click += ObjAddressLabel_Click;
            _objGui.ObjAddressLabel.Click      += ObjAddressLabel_Click;

            // Register buttons
            objectGui.CloneButton.Click       += CloneButton_Click;
            objectGui.UnloadButton.Click      += UnloadButton_Click;
            objectGui.MoveMarioToButton.Click += MoveMarioToButton_Click;
            objectGui.MoveToMarioButton.Click += MoveToMarioButton_Click;
        }
示例#5
0
        public static ObjectAssociations OpenObjectAssoc(string path, ObjectSlotManagerGui objectSlotManagerGui)
        {
            var assoc    = new ObjectAssociations();
            var assembly = Assembly.GetExecutingAssembly();

            // Create schema set
            var schemaSet = new XmlSchemaSet()
            {
                XmlResolver = new ResourceXmlResolver()
            };

            schemaSet.Add("http://tempuri.org/ReusableTypes.xsd", "ReusableTypes.xsd");
            schemaSet.Add("http://tempuri.org/ObjectAssociationsSchema.xsd", "ObjectAssociationsSchema.xsd");
            schemaSet.Compile();

            // Load and validate document
            var doc = XDocument.Load(path);

            doc.Validate(schemaSet, Validation);

            // Create Behavior-ImagePath list
            string defaultImagePath = "", emptyImagePath = "", imageDir = "", mapImageDir = "", overlayImageDir = "",
                   marioImagePath = "", holpMapImagePath = "", hudImagePath = "", debugImagePath = "",
                   miscImagePath = "", cameraImagePath = "", marioMapImagePath = "", cameraMapImagePath = "",
                   selectedOverlayImagePath = "", standingOnOverlayImagePath = "", holdingOverlayImagePath = "",
                   interactingOverlayImagePath = "", usingOverlayImagePath = "", closestOverlayImagePath = "";
            uint ramToBehaviorOffset = 0;
            uint marioBehavior = 0;

            foreach (XElement element in doc.Root.Elements())
            {
                switch (element.Name.ToString())
                {
                case "Config":
                    foreach (XElement subElement in element.Elements())
                    {
                        switch (subElement.Name.ToString())
                        {
                        case "ImageDirectory":
                            imageDir = subElement.Value;
                            break;

                        case "DefaultImage":
                            defaultImagePath = subElement.Value;
                            break;

                        case "MapImageDirectory":
                            mapImageDir = subElement.Value;
                            break;

                        case "OverlayImageDirectory":
                            overlayImageDir = subElement.Value;
                            break;

                        case "EmptyImage":
                            emptyImagePath = subElement.Value;
                            break;

                        case "RamToBehaviorOffset":
                            ramToBehaviorOffset = ParsingUtilities.ParseHex(subElement.Value);
                            assoc.RamOffset     = ramToBehaviorOffset;
                            break;
                        }
                    }
                    break;

                case "Mario":
                    marioImagePath    = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value;
                    marioMapImagePath = element.Element(XName.Get("MapImage")) != null?
                                        element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value : null;

                    assoc.MarioColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value);
                    marioBehavior    = ParsingUtilities.ParseHex(element.Attribute(XName.Get("behaviorScriptAddress")).Value);
                    break;

                case "Hud":
                    hudImagePath   = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value;
                    assoc.HudColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value);
                    break;

                case "Debug":
                    debugImagePath   = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value;
                    assoc.DebugColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value);
                    break;

                case "Misc":
                    miscImagePath   = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value;
                    assoc.MiscColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value);
                    break;

                case "Camera":
                    cameraImagePath    = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value;
                    assoc.CameraColor  = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value);
                    cameraMapImagePath = element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value;
                    break;

                case "Holp":
                    holpMapImagePath = element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value;
                    break;

                case "Overlays":
                    foreach (XElement subElement in element.Elements())
                    {
                        switch (subElement.Name.ToString())
                        {
                        case "Selected":
                            selectedOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value;
                            break;

                        case "StandingOn":
                            standingOnOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value;
                            break;

                        case "Holding":
                            holdingOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value;
                            break;

                        case "Interacting":
                            interactingOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value;
                            break;

                        case "Using":
                            usingOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value;
                            break;

                        case "Closest":
                            closestOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value;
                            break;
                        }
                    }
                    break;

                case "Object":
                    uint behaviorAddress = (ParsingUtilities.ParseHex(element.Attribute(XName.Get("behaviorScriptAddress")).Value)
                                            - ramToBehaviorOffset) & 0x00FFFFFF;
                    uint?gfxId = null;
                    int? subType = null, appearance = null;
                    if (element.Attribute(XName.Get("gfxId")) != null)
                    {
                        gfxId = ParsingUtilities.ParseHex(element.Attribute(XName.Get("gfxId")).Value) | 0x80000000U;
                    }
                    if (element.Attribute(XName.Get("subType")) != null)
                    {
                        subType = ParsingUtilities.TryParseInt(element.Attribute(XName.Get("subType")).Value);
                    }
                    if (element.Attribute(XName.Get("appearance")) != null)
                    {
                        appearance = ParsingUtilities.TryParseInt(element.Attribute(XName.Get("appearance")).Value);
                    }
                    string imagePath    = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value;
                    string mapImagePath = null;
                    bool   rotates      = false;
                    if (element.Element(XName.Get("MapImage")) != null)
                    {
                        mapImagePath = element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value;
                        rotates      = bool.Parse(element.Element(XName.Get("MapImage")).Attribute(XName.Get("rotates")).Value);
                    }
                    string name      = element.Attribute(XName.Get("name")).Value;
                    var    watchVars = new List <WatchVariable>();
                    foreach (var subElement in element.Elements().Where(x => x.Name == "Data"))
                    {
                        var watchVar = GetWatchVariableFromElement(subElement);
                        watchVar.OtherOffset = (subElement.Attribute(XName.Get("objectOffset")) != null) ?
                                               bool.Parse(subElement.Attribute(XName.Get("objectOffset")).Value) : false;

                        watchVars.Add(watchVar);
                    }

                    var newBehavior = new ObjectBehaviorAssociation()
                    {
                        BehaviorCriteria = new BehaviorCriteria()
                        {
                            BehaviorAddress = behaviorAddress,
                            GfxId           = gfxId,
                            SubType         = subType,
                            Appearance      = appearance
                        },
                        ImagePath      = imagePath,
                        MapImagePath   = mapImagePath,
                        Name           = name,
                        RotatesOnMap   = rotates,
                        WatchVariables = watchVars
                    };

                    if (!assoc.AddAssociation(newBehavior))
                    {
                        throw new Exception("More than one behavior address was defined.");
                    }

                    break;
                }
            }

            // Load Images
            // TODO: Exceptions
            assoc.DefaultImage   = Bitmap.FromFile(imageDir + defaultImagePath);
            assoc.EmptyImage     = Bitmap.FromFile(imageDir + emptyImagePath);
            assoc.MarioImage     = Bitmap.FromFile(imageDir + marioImagePath);
            assoc.CameraImage    = Bitmap.FromFile(imageDir + cameraImagePath);
            assoc.MarioMapImage  = marioMapImagePath == "" ? assoc.MarioImage : Bitmap.FromFile(mapImageDir + marioMapImagePath);
            assoc.HudImage       = Bitmap.FromFile(imageDir + hudImagePath);
            assoc.DebugImage     = Bitmap.FromFile(imageDir + debugImagePath);
            assoc.MiscImage      = Bitmap.FromFile(imageDir + miscImagePath);
            assoc.HolpImage      = Bitmap.FromFile(mapImageDir + holpMapImagePath);
            assoc.CameraMapImage = Bitmap.FromFile(mapImageDir + cameraMapImagePath);
            assoc.MarioBehavior  = marioBehavior - ramToBehaviorOffset;
            objectSlotManagerGui.SelectedObjectOverlayImage    = Bitmap.FromFile(overlayImageDir + selectedOverlayImagePath);
            objectSlotManagerGui.StandingOnObjectOverlayImage  = Bitmap.FromFile(overlayImageDir + standingOnOverlayImagePath);
            objectSlotManagerGui.HoldingObjectOverlayImage     = Bitmap.FromFile(overlayImageDir + holdingOverlayImagePath);
            objectSlotManagerGui.InteractingObjectOverlayImage = Bitmap.FromFile(overlayImageDir + interactingOverlayImagePath);
            objectSlotManagerGui.UsingObjectOverlayImage       = Bitmap.FromFile(overlayImageDir + usingOverlayImagePath);
            objectSlotManagerGui.ClosestObjectOverlayImage     = Bitmap.FromFile(overlayImageDir + closestOverlayImagePath);

            foreach (var obj in assoc.BehaviorAssociations)
            {
                if (obj.ImagePath == null || obj.ImagePath == "")
                {
                    continue;
                }

                using (var preLoad = Bitmap.FromFile(imageDir + obj.ImagePath))
                {
                    float scale = Math.Max(preLoad.Height / 128f, preLoad.Width / 128f);
                    obj.Image = new Bitmap(preLoad, new Size((int)(preLoad.Width / scale), (int)(preLoad.Height / scale)));
                }
                if (obj.MapImagePath == "" || obj.MapImagePath == null)
                {
                    obj.MapImage = obj.Image;
                }
                else
                {
                    using (var preLoad = Bitmap.FromFile(mapImageDir + obj.MapImagePath))
                    {
                        float scale = Math.Max(preLoad.Height / 128f, preLoad.Width / 128f);
                        obj.MapImage = new Bitmap(preLoad, new Size((int)(preLoad.Width / scale), (int)(preLoad.Height / scale)));
                    }
                }
                obj.TransparentImage    = obj.Image.GetOpaqueImage(0.5f);
                obj.TransparentMapImage = obj.Image.GetOpaqueImage(0.5f);
            }

            return(assoc);
        }
示例#6
0
        public void AssociateWithObject(TreeListViewRow destination)
        {
            try
            {
                foreach (var objectItem in ObjectViewModelLocator.GetObjectVM().SelectedItems)
                {
                    switch (Globals.DraggedItem.Type)
                    {
                    case "Template":
                        foreach (var templateItem in TemplateViewModelLocator.GetTemplateVM().SelectedItems)
                        {
                            ObjectAssociationModel objectAssociationItem = new ObjectAssociationModel
                            {
                                IsNew             = true,
                                IsChanged         = false,
                                IsDeleted         = false,
                                ID                = Guid.NewGuid(),
                                Project_ID        = Globals.Project_ID,
                                Object_ID         = objectItem.ID,
                                AssociationType   = Globals.DraggedItem.Type,
                                Value             = "",
                                ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>(),
                            };
                            objectAssociationItem.Association_ID     = templateItem.ID;
                            objectAssociationItem.Name               = templateItem.TemplateName;
                            objectAssociationItem.Description        = templateItem.Description;
                            objectAssociationItem.AssociationType_ID = templateItem.TemplateType_ID;

                            foreach (var childItem in templateItem.ChildTemplates)
                            {
                                ObjectAssociationModel objectAssociationChildItem = new ObjectAssociationModel
                                {
                                    IsNew              = true,
                                    IsChanged          = false,
                                    IsDeleted          = false,
                                    ID                 = Guid.NewGuid(),
                                    AssociationType    = "Template",
                                    Project_ID         = Globals.Project_ID,
                                    Object_ID          = objectItem.ID,
                                    Association_ID     = childItem.ID,
                                    Name               = childItem.TemplateName,
                                    Description        = childItem.Description,
                                    AssociationType_ID = childItem.TemplateType_ID,
                                    Value              = "",
                                    ChildAssociations  = new TD.ObservableItemCollection <ObjectAssociationModel>()
                                };
                                objectAssociationItem.ChildAssociations.Add(objectAssociationChildItem);
                                LoadTemplateProperties(objectAssociationChildItem);
                            }
                            ;
                            ObjectAssociations.Add(objectAssociationItem);
                            LoadTemplateProperties(objectAssociationItem);
                        }
                        break;

                    case "Property":
                        foreach (var propertyItem in PropertyViewModelLocator.GetPropertyVM().SelectedItems)
                        {
                            ObjectAssociationModel objectAssociationItem = new ObjectAssociationModel
                            {
                                IsNew             = true,
                                IsChanged         = false,
                                IsDeleted         = false,
                                ID                = Guid.NewGuid(),
                                Project_ID        = Globals.Project_ID,
                                Object_ID         = objectItem.ID,
                                AssociationType   = Globals.DraggedItem.Type,
                                Value             = "",
                                ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>(),
                            };

                            objectAssociationItem.Association_ID     = propertyItem.ID;
                            objectAssociationItem.Name               = propertyItem.PropertyName;
                            objectAssociationItem.Description        = propertyItem.Description;
                            objectAssociationItem.AssociationType_ID = propertyItem.PropertyType_ID;

                            foreach (var childItem in propertyItem.ChildProperties)
                            {
                                ObjectAssociationModel objectAssociationChildItem = new ObjectAssociationModel
                                {
                                    IsNew              = true,
                                    IsChanged          = false,
                                    IsDeleted          = false,
                                    AssociationType    = "Property",
                                    Project_ID         = Globals.Project_ID,
                                    Object_ID          = objectItem.ID,
                                    Association_ID     = childItem.ID,
                                    Name               = childItem.PropertyName,
                                    Description        = childItem.Description,
                                    AssociationType_ID = childItem.PropertyType_ID,
                                    Value              = "",
                                    ChildAssociations  = new TD.ObservableItemCollection <ObjectAssociationModel>()
                                };
                                objectAssociationItem.ChildAssociations.Add(objectAssociationChildItem);
                            }
                            ObjectAssociations.Add(objectAssociationItem);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                RadWindow.Alert(ex.Message);
            }
        }
示例#7
0
 /// <summary>
 ///
 /// </summary>
 public void Refresh()
 {
     ObjectAssociations.Clear();
     Load(null);
     FilteredObjectAssociations.View.Refresh();
 }
示例#8
0
        private void Load(Guid?associationParent_ID)
        {
            // Check if the templates and properties have ben loaded. Necessary because of the various background workers
            //while (!TemplateViewModelLocator.IsLoaded() || !PropertyViewModelLocator.IsLoaded());
            try
            {
                using (EDBEntities eDB = new EDBEntities())
                {
                    foreach (tblObjectAssociation Rec in (from o in eDB.tblObjectAssociations where (o.Project_ID == Globals.Project_ID) orderby o.AssociationType select o))
                    {
                        ObjectAssociationModel objectAssociationItem = new ObjectAssociationModel
                        {
                            ID                = Rec.ID,
                            Project_ID        = Rec.Project_ID,
                            Object_ID         = Rec.Object_ID,
                            Association_ID    = Rec.Association_ID,
                            AssociationType   = Rec.AssociationType,
                            IsChanged         = false,
                            IsNew             = false,
                            IsDeleted         = false,
                            ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>()
                        };
                        switch (objectAssociationItem.AssociationType)
                        {
                        case "Template":
                            // Get detail info of the template
                            var templateItem = TemplateViewModelLocator.GetTemplateVM().GetTemplate(objectAssociationItem.Association_ID, null);
                            if (templateItem != null)
                            {
                                objectAssociationItem.Name               = templateItem.TemplateName;
                                objectAssociationItem.Description        = templateItem.Description;
                                objectAssociationItem.AssociationType_ID = templateItem.TemplateType_ID;
                                // and get any child items
                                foreach (var childItem in templateItem.ChildTemplates)
                                {
                                    ObjectAssociationModel item = new ObjectAssociationModel
                                    {
                                        ID                 = Rec.ID,
                                        Project_ID         = childItem.Project_ID,
                                        Object_ID          = objectAssociationItem.Object_ID,
                                        Association_ID     = childItem.ID,
                                        Name               = childItem.TemplateName,
                                        Description        = childItem.Description,
                                        AssociationType    = "Template",
                                        AssociationType_ID = childItem.TemplateType_ID,
                                        ChildAssociations  = new TD.ObservableItemCollection <ObjectAssociationModel>()
                                    };
                                    objectAssociationItem.ChildAssociations.Add(item);
                                    LoadTemplateProperties(item);
                                }
                                LoadTemplateProperties(objectAssociationItem);
                            }
                            else
                            {
                                throw new System.InvalidOperationException(String.Format("Association without source\nTemplate ID: {0}\nFix in database", objectAssociationItem.Association_ID));
                            }

                            break;

                        case "Property":
                            var propertyItem = PropertyViewModelLocator.GetPropertyVM().GetProperty(objectAssociationItem.Association_ID, null);
                            if (propertyItem != null)
                            {
                                objectAssociationItem.Name               = propertyItem.PropertyName;
                                objectAssociationItem.Description        = propertyItem.Description;
                                objectAssociationItem.AssociationType_ID = propertyItem.PropertyType_ID;

                                // If the Object Association has a value in the table, use this as the associated value
                                // otherwise use the value defined in the property
                                if (!String.IsNullOrEmpty(Rec.Value))
                                {
                                    objectAssociationItem.Value = Rec.Value;
                                }
                                else
                                {
                                    objectAssociationItem.Value = propertyItem.Value;
                                }

                                foreach (var childItem in propertyItem.ChildProperties)
                                {
                                    ObjectAssociationModel item = new ObjectAssociationModel
                                    {
                                        ID                 = Rec.ID,
                                        Project_ID         = childItem.Project_ID,
                                        Object_ID          = objectAssociationItem.Object_ID,
                                        Association_ID     = childItem.ID,
                                        Name               = childItem.PropertyName,
                                        Description        = childItem.Description,
                                        AssociationType    = "Property",
                                        AssociationType_ID = childItem.PropertyType_ID,
                                        ChildAssociations  = new TD.ObservableItemCollection <ObjectAssociationModel>()
                                    };
                                    objectAssociationItem.ChildAssociations.Add(item);
                                }
                            }
                            else
                            {
                                throw new System.InvalidOperationException(String.Format("Association without source\nProperty ID: {0}\nFix in database", objectAssociationItem.Association_ID));
                            }
                            break;

                        case "TemplateProperty":
                            break;
                        }

                        ObjectAssociations.Add(objectAssociationItem);
                    }
                }
            }
            catch (Exception ex)
            {
                Application.Current.Dispatcher.Invoke((Action) delegate { RadWindow.Alert(ex.Message); });
            }
        }