public IElement ToGlueIElement(ArrowElementSave arrowElement)
        {
            List <string> referencedFiles = new List <string>();


            IElement glueElement;

            if (arrowElement.ElementType == ElementType.Screen)
            {
                glueElement      = new ScreenSave();
                glueElement.Name = "Screens/" + arrowElement.Name;
            }
            else
            {
                glueElement      = new EntitySave();
                glueElement.Name = "Entities/" + arrowElement.Name;
            }


            AddSpritesToElement(arrowElement, glueElement, referencedFiles);

            AddCirclesToElement(arrowElement, glueElement);
            AddRectanglesToElement(arrowElement, glueElement);

            AddElementInstancesToElement(arrowElement, glueElement);

            AddReferencedFileSaves(referencedFiles, glueElement);

            AddCustomVariables(glueElement);

            return(glueElement);
        }
예제 #2
0
        private void AddRequirementForComponent(ArrowElementSave element, ArrowIntentComponentSave component)
        {
            switch (component.GlueItemType)
            {
            case GlueItemType.Entity:

                break;

            case GlueItemType.File:
                AddFileForComponent(element, component);
                break;

            case GlueItemType.NamedObject:

                break;

            case GlueItemType.Screen:

                break;

            case GlueItemType.Undefined:

                break;
            }
        }
예제 #3
0
        public object InstanceForElementRuntime(ElementRuntime elementRuntime)
        {
            if (elementRuntime == null)
            {
                return(null);
            }

            if (elementRuntime.AssociatedNamedObjectSave == null)
            {
                throw new Exception("The ElementRuntime does not have an associated NamedObject and it should");
            }

            string nameToFind = elementRuntime.AssociatedNamedObjectSave.InstanceName;

            IElement containerIElement = ObjectFinder.Self.GetElementContaining(elementRuntime.AssociatedNamedObjectSave);

            string containerNameStripped = null;

            if (containerIElement is EntitySave)
            {
                containerNameStripped = containerIElement.Name.Substring("Entities/".Length);
            }
            else //Implied: if (containerIElement is ScreenSave)
            {
                containerNameStripped = containerIElement.Name.Substring("Screens/".Length);
            }

            ArrowElementSave container = ArrowState.Self.CurrentArrowProject.Elements.FirstOrDefault(
                item => item.Name == containerNameStripped);

            return(container.AllInstances.FirstOrDefault(item =>
                                                         LateBinder.GetInstance(item.GetType()).GetValue(item, "Name") as string == nameToFind));
        }
예제 #4
0
 public void AddRequirementsForIntent(ArrowElementSave element, ArrowIntentSave intent)
 {
     foreach (var component in intent.Components)
     {
         AddRequirementForComponent(element, component);
     }
 }
        private void AddCirclesToElement(ArrowElementSave arrowElement, IElement glueElemement)
        {
            foreach (var circle in arrowElement.Circles)
            {
                NamedObjectSave nos = mCircleSaveConverter.CircleSaveToNamedObjectSave(circle);

                glueElemement.NamedObjects.Add(nos);
            }
        }
        private void AddElementInstancesToElement(ArrowElementSave arrowElement, IElement glueElement)
        {
            foreach (var instance in arrowElement.ElementInstances)
            {
                NamedObjectSave nosToAdd = mArrowElementInstanceConverter.ArrowElementInstanceToNos(instance);

                glueElement.NamedObjects.Add(nosToAdd);
            }
        }
        private void AddRectanglesToElement(ArrowElementSave arrowElement, IElement glueElemement)
        {
            foreach (var rectangle in arrowElement.Rectangles)
            {
                NamedObjectSave nos = mRectangleSaveConverter.RectangleSaveToNamedObjectSave(rectangle);

                glueElemement.NamedObjects.Add(nos);
            }
        }
예제 #8
0
        private void AfterAddLogic(ArrowElementSave arrowElement, object newObject)
        {
            MakeNewObjectUnique(arrowElement, newObject);
            ArrowCommands.Self.File.SaveProject();
            ArrowCommands.Self.File.GenerateGlux();

            ArrowState.Self.CurrentArrowElementVm.Refresh();

            ArrowCommands.Self.UpdateToSelectedElement();
            //ArrowCommands.Self.GuiCommands.RefreshSingleElementTreeView();
        }
        private void AddSpritesToElement(ArrowElementSave arrowElement, IElement glueElemement, List <string> referencedFiles)
        {
            foreach (var sprite in arrowElement.Sprites)
            {
                NamedObjectSave nos = mSpriteSaveConverter.SpriteSaveToNamedObjectSave(sprite);

                glueElemement.NamedObjects.Add(nos);

                sprite.GetReferencedFiles(referencedFiles);
            }
        }
예제 #10
0
        public ArrowElementSave Element()
        {
            TextInputWindow tiw = new TextInputWindow();

            tiw.Text = "Enter new element name:";

            List <string> intentNames = new List <string>();

            const string noIntent = "<NO INTENT>";

            intentNames.Add(noIntent);
            foreach (var item in ArrowState.Self.CurrentArrowProject.Intents)
            {
                intentNames.Add(item.Name);
            }



            var treeView = tiw.AddTreeView(intentNames);


            var result = tiw.ShowDialog();

            if (result.HasValue && result.Value)
            {
                ArrowElementSave toReturn = new ArrowElementSave();
                toReturn.Name = tiw.Result;
                ArrowProjectSave projectToAddTo = ArrowState.Self.CurrentArrowProject;

                if (treeView.SelectedItem as string != noIntent)
                {
                    toReturn.Intent = treeView.SelectedItem as string;

                    ArrowIntentSave intent = new ArrowIntentSave();
                    IntentManager.Self.AddRequirementsForIntent(toReturn, intent);
                }

                projectToAddTo.Elements.Add(toReturn);

                ArrowCommands.Self.File.SaveProject();
                ArrowCommands.Self.File.GenerateGlux();
                ArrowState.Self.CurrentArrowProjectVm.Refresh();

                return(toReturn);
            }
            else
            {
                return(null);
            }
        }
예제 #11
0
        private void HandleAddInstanceClick(object sender, RoutedEventArgs e)
        {
            object dataContext = ((System.Windows.Controls.Control)sender).DataContext;

            if (dataContext is ArrowElementOrIntentVm)
            {
                ArrowElementVm aevm = ((ArrowElementOrIntentVm)dataContext).ElementVm;

                ArrowElementSave arrowElementSave = aevm.Model;

                var newInstance = ArrowCommands.Self.Add.ElementInstance(arrowElementSave.Name + "Instance", arrowElementSave);

                ArrowCommands.Self.Add.MakeNewObjectUnique(ArrowState.Self.CurrentArrowElementSave, newInstance);
            }
        }
예제 #12
0
        public void DeleteCurrentInstance()
        {
            ArrowProjectSave arrowProject = ArrowState.Self.CurrentArrowProject;

            ArrowElementSave element = ArrowState.Self.CurrentArrowElementSave;

            object instance = ArrowState.Self.CurrentInstance;

            ///////////////////Early Out///////////////////////
            if (arrowProject == null || instance == null)
            {
                return;
            }
            /////////////////End Early Out/////////////////////

            if (instance is SpriteSave)
            {
                element.Sprites.Remove(instance as SpriteSave);
            }
            else if (instance is CircleSave)
            {
                element.Circles.Remove(instance as CircleSave);
            }
            else if (instance is AxisAlignedRectangleSave)
            {
                element.Rectangles.Remove(instance as AxisAlignedRectangleSave);
            }
            else if (instance is SpriteFrameSave)
            {
                element.SpriteFrameSaves.Remove(instance as SpriteFrameSave);
            }
            else if (instance is ArrowElementInstance)
            {
                element.ElementInstances.Remove(instance as ArrowElementInstance);
            }
            else
            {
                throw new NotImplementedException("Removal of the type " + instance.GetType().Name + " needs to be implemented");
            }

            ArrowCommands.Self.File.GenerateGlux();
            ArrowCommands.Self.File.SaveProject();

            ArrowCommands.Self.UpdateToSelectedElement();
        }
예제 #13
0
        public ArrowElementInstance ElementInstance(string name, ArrowElementSave typeToAdd)
        {
            ArrowElementInstance instance = new ArrowElementInstance();

            instance.Name = name;
            instance.Type = typeToAdd.Name;

            ArrowState.Self.CurrentArrowElementSave.ElementInstances.Add(instance);

            ArrowCommands.Self.File.SaveProject();
            ArrowCommands.Self.File.GenerateGlux();

            ArrowCommands.Self.UpdateToSelectedElement();

            ArrowState.Self.CurrentInstance = instance;

            return(instance);
        }
예제 #14
0
        internal void ElementInstance()
        {
            if (ArrowState.Self.CurrentArrowElementSave != null)
            {
                //Show a text input window for the name, but add a combo box so the user can select the type
                TextInputWindow tiw = new TextInputWindow();

                TreeView treeView = new TreeView();
                treeView.HorizontalAlignment = HorizontalAlignment.Stretch;
                treeView.VerticalAlignment   = VerticalAlignment.Top;
                treeView.Height = 80;
                treeView.Margin = new Thickness(3);

                List <ArrowElementSave> toAddToTreeView = new List <ArrowElementSave>();

                foreach (var elementSave in ArrowState.Self.CurrentArrowProject.Elements)
                {
                    if (elementSave != null && elementSave != ArrowState.Self.CurrentArrowElementSave)
                    {
                        toAddToTreeView.Add(elementSave);
                    }
                }

                treeView.ItemsSource = toAddToTreeView;

                tiw.AddControl(treeView);



                bool?result = tiw.ShowDialog();

                if (result.HasValue && result.Value)
                {
                    ArrowElementSave typeToAdd = treeView.SelectedItem as ArrowElementSave;

                    string name = tiw.Result;

                    ElementInstance(name, typeToAdd);
                }
                //tiw.AddControl
            }
        }
예제 #15
0
        public void DeleteCurrentElement()
        {
            ArrowProjectSave arrowProject = ArrowState.Self.CurrentArrowProject;

            ArrowElementSave element = ArrowState.Self.CurrentArrowElementSave;

            ///////////////////Early Out///////////////////////
            if (arrowProject == null || element == null)
            {
                return;
            }
            /////////////////End Early Out/////////////////////

            arrowProject.Elements.Remove(element);

            ArrowCommands.Self.File.GenerateGlux();
            ArrowCommands.Self.File.SaveProject();

            //ArrowCommands.Self.GuiCommands.RefreshSingleElementTreeView();
            ArrowCommands.Self.View.RefreshToCurrentElement();

            ArrowState.Self.CurrentArrowProjectVm.Refresh();
        }
예제 #16
0
        public bool IsInstanceNameValid(string name, out string whyIsntValid, object instanceSave, ArrowElementSave container)
        {
            whyIsntValid = null;
            foreach (var instanceObject in container.AllInstances)
            {
                if (instanceObject != instanceSave && LateBinder.GetValueStatic(instanceObject, "Name") as string == name)
                {
                    whyIsntValid = "The name " + name + " is already being used by another object";
                    break;
                }
            }

            if (string.IsNullOrEmpty(whyIsntValid))
            {
                IsInstanceNameValid(name, out whyIsntValid);
            }

            return(string.IsNullOrEmpty(whyIsntValid));
        }
예제 #17
0
        public void TestConversion()
        {
            ArrowProjectSave project = new ArrowProjectSave();

            SpriteSave spriteSave = new SpriteSave();

            spriteSave.X       = 3;
            spriteSave.Y       = 4;
            spriteSave.Name    = "SpriteInstance";
            spriteSave.Texture = "Entities/FirstElement/redball.BMP";


            ArrowElementSave element = new ArrowElementSave();

            element.Name = "FirstElement";
            element.Sprites.Add(spriteSave);
            project.Elements.Add(element);


            element      = new ArrowElementSave();
            element.Name = "ContainerOfFirstElement";
            element.Sprites.Add(spriteSave);
            project.Elements.Add(element);

            ArrowElementInstance instance = new ArrowElementInstance();

            instance.Name = "FirstElementInstance";
            instance.Type = "FirstElement";
            instance.SetVariable("X", 4);
            instance.SetVariable("Y", 5);
            element.ElementInstances.Add(instance);



            ArrowProjectToGlueProjectConverter converter = new ArrowProjectToGlueProjectConverter();

            GlueProjectSave gps = converter.ToGlueProjectSave(project);

            EntitySave firstElementEntity      = gps.Entities.FirstOrDefault(item => item.Name == "Entities/FirstElement");
            EntitySave containerOfFirstElement = gps.Entities.FirstOrDefault(item => item.Name == "Entities/ContainerOfFirstElement");

            if (firstElementEntity.Name.StartsWith("Entities/") == false)
            {
                throw new Exception("Entity names must start with \"Entities/\"");
            }

            if (firstElementEntity.ReferencedFiles.Count == 0)
            {
                throw new Exception("The Entity should automatically contain a ReferencedFile for the redball file");
            }

            if (containerOfFirstElement.NamedObjects.FirstOrDefault(item => item.InstanceName == "FirstElementInstance") == null)
            {
                throw new Exception("The entity should contain a NOS for another element, but it doesn't");
            }

            string gluxString;

            FileManager.XmlSerialize(gps, out gluxString);

            string aroxString;

            FileManager.XmlSerialize(project, out aroxString);
        }
예제 #18
0
 private void AddFileForComponent(ArrowElementSave element, ArrowIntentComponentSave component)
 {
 }