示例#1
0
        private void TestParseAllTrees()
        {
            //Arrange
            Script tester = new Script();

            foreach (string file in Directory.EnumerateFiles("national_focus", "*.txt"))
            {
                string contents = File.ReadAllText(file);
                //Act
                FocusGridModel           model     = FocusTreeParser.CreateTreeFromScript(file, contents);
                FociGridContainer        container = new FociGridContainer(model);
                List <FociGridContainer> list      = new List <FociGridContainer> {
                    container
                };
                Dictionary <string, string> files = FocusTreeParser.ParseAllTrees(list);
                string filecontent = files.FirstOrDefault().Value;
                string fileName    = files.FirstOrDefault().Key;
                //Assert
                Assert.IsNotNull(model);
                Assert.IsTrue(model.FociList.Any());
                Assert.IsNotNull(fileName);
                Assert.IsNotNull(filecontent);
                tester.Analyse(filecontent);
                Assert.IsFalse(tester.Logger.hasErrors());
            }
        }
示例#2
0
        private void CopyElement(object obj)
        {
            UndoService.Current[GetUndoRoot()].BeginChangeSetBatch("CopyAnyFile", false);
            FileManager dialog = new FileManager(ModeType.Edit);

            if (obj is FocusGridModel)
            {
                FocusGridModel item = new FocusGridModel((FocusGridModel)obj);
                item.VisibleName += "_copy";
                Project.fociList.Add(item);
                RaisePropertyChanged(() => Project.fociList);
            }
            else if (obj is LocalisationModel)
            {
                LocalisationModel item = new LocalisationModel((LocalisationModel)obj);
                item.VisibleName += "_copy";
                Project.localisationList.Add(item);
                RaisePropertyChanged(() => Project.localisationList);
            }
            else if (obj is EventTabModel)
            {
                EventTabModel item = new EventTabModel((EventTabModel)obj);
                item.VisibleName += "_copy";
                Project.eventList.Add(item);
                RaisePropertyChanged(() => Project.eventList);
            }
            else if (obj is ScriptModel)
            {
                ScriptModel item = new ScriptModel((ScriptModel)obj);
                item.VisibleName += "_copy";
                Project.scriptList.Add(item);
                RaisePropertyChanged(() => Project.scriptList);
            }
            UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
        }
示例#3
0
        private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            //Always send the event to the data context
            FocusGridModel dataContext = DataContext as FocusGridModel;

            if (dataContext == null)
            {
                return;
            }
            dataContext.LeftClickCommand.Execute(ListGrid);
            //Check if we are on the grid
            if (!(e.OriginalSource is GriddedGrid))
            {
                return;
            }
            //Make sure we aren't dragging already
            if (IsDragging)
            {
                return;
            }
            // Capture and track the mouse.
            IsSelecting  = true;
            mouseDownPos = e.GetPosition(SelectionGrid);
            SelectionGrid.CaptureMouse();
            // Initial placement of the drag selection box.
            Canvas.SetLeft(selectionBox, mouseDownPos.X);
            Canvas.SetTop(selectionBox, mouseDownPos.Y);
            selectionBox.Width  = 0;
            selectionBox.Height = 0;
            // Make the drag selection box visible.
            selectionBox.Visibility = Visibility.Visible;
            FocusGridModel model = DataContext as FocusGridModel;

            model?.ClearSelected();
        }
示例#4
0
        public void TestFocusParser()
        {
            FocusGridModel model = TestScriptToTree();

            TestTreeToScript(model);
            TestParseAllTrees();
        }
 public FociGridContainer(FocusGridModel item)
 {
     IdentifierID    = item.UniqueID;
     ContainerID     = item.VisibleName;
     TAG             = item.TAG;
     AdditionnalMods = item.AdditionnalMods;
     FileInfo        = item.FileInfo;
     FociList        = new List <Focus>();
     foreach (FocusModel model in item.FociList)
     {
         FociList.Add(new Focus
         {
             UniqueName     = model.UniqueName,
             Text           = model.Text,
             Image          = model.Image,
             X              = model.X,
             Y              = model.Y,
             Cost           = model.Cost,
             InternalScript = model.InternalScript,
             Note           = model.Note
         });
     }
     //Repair sets and relative to
     foreach (Focus focus in FociList)
     {
         FocusModel associatedModel =
             item.FociList.FirstOrDefault(f => f.UniqueName == focus.UniqueName);
         //If no model was found, continue the loop, the focus is broken
         if (associatedModel == null)
         {
             continue;
         }
         //Relative to
         if (associatedModel.CoordinatesRelativeTo != null)
         {
             focus.RelativeTo = FociList.FirstOrDefault(f => f.UniqueName ==
                                                        associatedModel.CoordinatesRelativeTo.UniqueName);
         }
         //Prerequisites
         foreach (PrerequisitesSetModel set in associatedModel.Prerequisite)
         {
             PrerequisitesSet newset = new PrerequisitesSet(focus);
             foreach (FocusModel model in set.FociList)
             {
                 newset.FociList.Add(FociList.FirstOrDefault(f => f.UniqueName ==
                                                             model.UniqueName));
             }
             focus.Prerequisite.Add(newset);
         }
         //Mutually exclusives
         foreach (MutuallyExclusiveSetModel set in associatedModel.MutualyExclusive)
         {
             MutuallyExclusiveSet newset = new MutuallyExclusiveSet(
                 FociList.FirstOrDefault(f => f.UniqueName == set.Focus1.UniqueName),
                 FociList.FirstOrDefault(f => f.UniqueName == set.Focus2.UniqueName));
             focus.MutualyExclusive.Add(newset);
         }
     }
 }
示例#6
0
        public static string ParseTreeForCompare(FocusGridModel model)
        {
            FociGridContainer container   = new FociGridContainer(model);
            string            focusTreeId = container.ContainerID.Replace(" ", "_");

            return(Parse(container.FociList.ToList(), focusTreeId,
                         container.TAG, container.AdditionnalMods));
        }
示例#7
0
        private void Focus_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            FocusGridModel model = DataContext as FocusGridModel;

            if (model == null)
            {
                return;
            }
            Focus element = sender as Focus;

            //Check if the focus id not move at all and is not a double click
            if (element != null && !element.IsMouseCaptured && model.ModeType == RelationMode.None &&
                IsDragging)
            {
                //If not holding CTRL
                if (Keyboard.Modifiers != ModifierKeys.Control)
                {
                    //Clear all selected
                    model.ClearSelected();
                }
                //If it was just a click, add this focus to the selected
                model.SelectFocus(element);
                IsDragging = false;
                Source     = null;
                DraggedElement.Clear();
            }
            //Otherwise, manage as a move
            else if (model.ModeType == RelationMode.None && IsDragging)
            {
                if (Source == null)
                {
                    return;
                }
                Source.ReleaseMouseCapture();
                foreach (Focus focus in DraggedElement)
                {
                    Image image = UiHelper.FindChildWithName(focus, "FocusIcon") as Image;
                    if (image == null)
                    {
                        return;
                    }
                    Point basepos = image.TranslatePoint(new Point(0, 0), ListGrid);
                    //Kill the transform
                    focus.RenderTransform = new TranslateTransform();
                    //Change the position after applying the transform
                    ((FocusGridModel)DataContext).ChangePosition(focus.DataContext,
                                                                 new Point(basepos.X + 45, basepos.Y));
                }
                IsDragging    = false;
                transform.X   = 0;
                transform.Y   = 0;
                Source.Cursor = null;
                Source        = null;
                DraggedElement.Clear();
                e.Handled = true;
            }
        }
 private void NotificationMessageReceived(NotificationMessage msg)
 {
     if (msg.Target != null && msg.Target != this)
     {
         //Message not itended for here
         return;
     }
     if (msg.Notification == "OpenFocusTree")
     {
         FociGridContainer container = msg.Sender as FociGridContainer;
         if (TabsModelList.Where((t) => t is FocusGridModel &&
                                 ((FocusGridModel)t).UniqueID == container.IdentifierID).Any())
         {
             return;
         }
         FocusGridModel newModel = new FocusGridModel(container.IdentifierID);
         TabsModelList.Add(newModel);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "OpenLocalisation")
     {
         LocalisationContainer container = msg.Sender as LocalisationContainer;
         if (TabsModelList.Where((t) => t is LocalisationModel &&
                                 ((LocalisationModel)t).UniqueID == container.IdentifierID).Any())
         {
             return;
         }
         LocalisationModel newModel = new LocalisationModel(container.IdentifierID);
         TabsModelList.Add(newModel);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "SaveProject")
     {
         saveProject();
     }
     if (msg.Notification == "RefreshProjectViewer")
     {
         TabsModelList.Clear();
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "SendDeleteItemSignal")
     {
         ObservableObject Model = null;
         if (msg.Sender is FociGridContainer)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is FocusGridModel &&
                                                  ((FocusGridModel)m).UniqueID == ((FociGridContainer)msg.Sender).IdentifierID);
         }
         else if (msg.Sender is LocalisationContainer)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is LocalisationModel &&
                                                  ((LocalisationModel)m).UniqueID == ((LocalisationContainer)msg.Sender).IdentifierID);
         }
         TabsModelList.Remove(Model);
         RaisePropertyChanged("TabsModelList");
     }
 }
示例#9
0
        private void FocusGrid_OnKeyUp(object sender, KeyEventArgs e)
        {
            if ((!IsShown || e.SystemKey != Key.LeftAlt) && e.SystemKey != Key.RightAlt)
            {
                return;
            }
            IsShown = false;
            FocusGridModel model = (FocusGridModel)DataContext;

            model.ShowHidePositionLinesCommand.Execute(this);
        }
示例#10
0
        private FocusGridModel TestScriptToTree()
        {
            //Act
            FocusGridModel model = FocusTreeParser.CreateTreeFromScript("usa.txt", File.ReadAllText("usa.txt"));

            //Assert
            Assert.IsNotNull(model);
            Assert.IsTrue(model.FociList.Any());
            Assert.AreEqual(model.TAG, "USA");
            Assert.AreEqual(model.VisibleName, "usa_focus");
            return(model);
        }
示例#11
0
        private void Focus_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            FocusGridModel context = DataContext as FocusGridModel;

            if (e.OriginalSource is TextBox || context == null)
            {
                return;
            }
            Focus element = sender as Focus;

            if (element != null && IsDragging && e.LeftButton == MouseButtonState.Pressed &&
                !DraggedElement.Any())
            {
                //Check if the dragged element is in the selected focus list
                if (context.SelectedFocuses.Any(f => f == element.DataContext))
                {
                    //Add all the selected
                    IEnumerable <Focus> selectedFoci = UiHelper.FindVisualChildren <Focus>(this)
                                                       .Where(f =>
                    {
                        FocusModel selectedContext = f.DataContext as FocusModel;
                        return(selectedContext != null &&
                               context.SelectedFocuses.Any(f2 => f2 == selectedContext));
                    });
                    DraggedElement.AddRange(selectedFoci);
                }
                else
                {
                    //We don't want to have selected AND dragged
                    context.ClearSelected();
                    DraggedElement.Add(element);
                }
                Source = element;
                Source.CaptureMouse();
            }
            if (!DraggedElement.Any() || Source == null || !Source.IsMouseCaptured)
            {
                return;
            }
            currentPoint = e.GetPosition(ListGrid);
            transform.X += currentPoint.X - anchorPoint.X;
            transform.Y += currentPoint.Y - anchorPoint.Y;
            foreach (Focus focus in DraggedElement)
            {
                focus.RenderTransform = transform;
            }
            anchorPoint = currentPoint;
        }
示例#12
0
        private void AddElement()
        {
            FileManager dialog = new FileManager(ModeType.Create);

            dialog.ShowDialog();
            ObservableObject File = (new ViewModelLocator()).FileManager.File;

            if (File == null)
            {
                return;
            }
            UndoService.Current[GetUndoRoot()].BeginChangeSetBatch("AddAnyFile", false);
            FocusGridModel file = File as FocusGridModel;

            if (file != null)
            {
                ProjectModel project = new ViewModelLocator().Main.Project;
                project.fociList.Add(file);
                RaisePropertyChanged(() => project.fociList);
            }
            else if (File is LocalisationModel)
            {
                ProjectModel project = new ViewModelLocator().Main.Project;
                project.localisationList.Add((LocalisationModel)File);
                //Check if first, if yes, set as default
                if (project.DefaultLocale == null)
                {
                    project.DefaultLocale = (LocalisationModel)File;
                }
                RaisePropertyChanged(() => project.localisationList);
            }
            else if (File is EventTabModel)
            {
                ProjectModel project = new ViewModelLocator().Main.Project;
                project.eventList.Add((EventTabModel)File);
                RaisePropertyChanged(() => project.eventList);
            }
            else if (File is ScriptModel)
            {
                ProjectModel project = new ViewModelLocator().Main.Project;
                project.scriptList.Add((ScriptModel)File);
                RaisePropertyChanged(() => project.scriptList);
            }
            UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
        }
示例#13
0
        protected override void OnRender(DrawingContext drawingContext)
        {
            Child.Children.Clear();
            FocusGridModel DataContext = this.DataContext as FocusGridModel;

            base.OnRender(drawingContext);
            foreach (CanvasLine line in DataContext.CanvasLines)
            {
                Line newLine = new Line()
                {
                    X1              = line.X1,
                    X2              = line.X2,
                    Y1              = line.Y1,
                    Y2              = line.Y2,
                    Visibility      = System.Windows.Visibility.Visible,
                    StrokeThickness = 2,
                    Stroke          = line.Color
                };
                if (line.Dashes)
                {
                    newLine.StrokeDashArray = new DoubleCollection(new double[] { 2, 2 });
                }
                Child.Children.Add(newLine);
            }
            if (DataContext.selectedLine != null)
            {
                ResourceDictionary resourceLocalization = new ResourceDictionary();
                resourceLocalization.Source = new Uri("/FocusTreeManager;component/Resources/Icons.xaml", UriKind.Relative);
                Rectangle visualBoard = new Rectangle();
                visualBoard.Width  = 25;
                visualBoard.Height = 25;
                Canvas.SetLeft(visualBoard, Math.Min(DataContext.selectedLine.X1,
                                                     DataContext.selectedLine.X2) + (Math.Abs(DataContext.selectedLine.X2 -
                                                                                              DataContext.selectedLine.X1) / 2) - 12.5);
                Canvas.SetTop(visualBoard, Math.Min(DataContext.selectedLine.Y1,
                                                    DataContext.selectedLine.Y2) + (Math.Abs(DataContext.selectedLine.Y2 -
                                                                                             DataContext.selectedLine.Y1) / 2) - 12.5);
                VisualBrush vBrush = new VisualBrush();
                vBrush.Visual    = (Visual)resourceLocalization["appbar_scissor"];
                visualBoard.Fill = vBrush;
                Child.Children.Add(visualBoard);
            }
        }
示例#14
0
 private void FocusGrid_OnKeyDown(object sender, KeyEventArgs e)
 {
     if (!IsShown && (e.SystemKey == Key.LeftAlt || e.SystemKey == Key.RightAlt))
     {
         IsShown = true;
         FocusGridModel model = (FocusGridModel)DataContext;
         model.ShowHidePositionLinesCommand.Execute(this);
         e.Handled = true;
     }
     else if (e.Key == Key.C && Keyboard.IsKeyDown(Key.LeftCtrl))
     {
         FocusGridModel model = (FocusGridModel)DataContext;
         model.CopyCommand.Execute(null);
     }
     else if (e.Key == Key.V && Keyboard.IsKeyDown(Key.LeftCtrl))
     {
         FocusGridModel model = (FocusGridModel)DataContext;
         model.PasteCommand.Execute(null);
     }
 }
示例#15
0
        private void TestTreeToScript(FocusGridModel model)
        {
            //Arrange
            FociGridContainer        container = new FociGridContainer(model);
            List <FociGridContainer> list      = new List <FociGridContainer> {
                container
            };
            Script tester = new Script();
            //Act
            Dictionary <string, string> files = FocusTreeParser.ParseAllTrees(list);
            string filecontent = files.FirstOrDefault().Value;
            string fileName    = files.FirstOrDefault().Key;

            //Assert
            Assert.IsNotNull(filecontent);
            Assert.IsNotNull(fileName);
            Assert.AreEqual(fileName, "usa_focus");
            //Test if we can process the script
            tester.Analyse(filecontent);
            Assert.IsFalse(tester.Logger.hasErrors());
            Assert.IsNotNull(tester.FindAssignation("tag"));
        }
示例#16
0
        private void UIElement_OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            if (!IsSelecting)
            {
                return;
            }
            // Release the mouse capture and stop tracking it.
            IsSelecting = false;
            SelectionGrid.ReleaseMouseCapture();
            // Hide the drag selection box.
            selectionBox.Visibility = Visibility.Collapsed;
            Point mouseUpPos                 = e.GetPosition(SelectionGrid);
            Rect  selectedBoundaries         = new Rect(mouseDownPos, mouseUpPos);
            IEnumerable <Focus> selectedFoci = UiHelper.FindVisualChildren <Focus>(this)
                                               .Where(f =>
            {
                Image firstOrDefault = UiHelper.FindChildWithName(f, "FocusIcon") as Image;
                if (firstOrDefault == null)
                {
                    return(false);
                }
                Point pos = firstOrDefault.TranslatePoint(new Point(0, 0), this);
                return(selectedBoundaries
                       .Contains(new Point(pos.X + f.ActualWidth / 2,
                                           pos.Y + f.ActualHeight / 2)));
            });
            FocusGridModel model = DataContext as FocusGridModel;

            foreach (Focus focus in selectedFoci)
            {
                MouseEventArgs mouseLeaveEventArgs = new MouseEventArgs(Mouse.PrimaryDevice, 0)
                {
                    RoutedEvent = Mouse.MouseLeaveEvent
                };
                focus.RaiseEvent(mouseLeaveEventArgs);
                model?.SelectFocus(focus);
            }
        }
示例#17
0
        private void Focus_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            FocusGridModel model = DataContext as FocusGridModel;

            if (model == null)
            {
                return;
            }
            if (e.ClickCount > 1 || model.ModeType != RelationMode.None)
            {
                return;
            }
            DraggedElement.Clear();
            Focus element = sender as Focus;

            if (element == null)
            {
                return;
            }
            anchorPoint    = e.GetPosition(ListGrid);
            IsDragging     = true;
            element.Cursor = ((TextBlock)Resources["CursorGrabbing"]).Cursor;
        }
        public void SetFileType(object param)
        {
            File = null;
            ListViewItem item = param as ListViewItem;

            if (item == null)
            {
                return;
            }
            switch (item.Tag as string)
            {
            case "FocusTreeItem":
                File = new FocusGridModel("New file");
                Messenger.Default.Send(new NotificationMessage(this,
                                                               new ViewModelLocator().Tutorial, "NewFocusTreeFile"));
                break;

            case "LocalisationItem":
                File = new LocalisationModel("New file");
                Messenger.Default.Send(new NotificationMessage(this,
                                                               new ViewModelLocator().Tutorial, "NewLocalizationFile"));
                break;

            case "EventItem":
                File = new EventTabModel("New file");
                Messenger.Default.Send(new NotificationMessage(this,
                                                               new ViewModelLocator().Tutorial, "NewEventFile"));
                break;

            case "GenericItem":
                File = new ScriptModel("New file");
                Messenger.Default.Send(new NotificationMessage(this,
                                                               new ViewModelLocator().Tutorial, "NewScriptFile"));
                break;
            }
        }
        protected override void OnRender(DrawingContext drawingContext)
        {
            Child.Children.Clear();
            FocusGridModel context = DataContext as FocusGridModel;

            base.OnRender(drawingContext);
            if (context == null)
            {
                return;
            }
            foreach (CanvasLine line in context.CanvasLines)
            {
                Line newLine = new Line
                {
                    X1              = line.X1,
                    X2              = line.X2,
                    Y1              = line.Y1,
                    Y2              = line.Y2,
                    Visibility      = Visibility.Visible,
                    StrokeThickness = 2,
                    Stroke          = line.Color
                };
                if (line.Dashes)
                {
                    newLine.StrokeDashArray = new DoubleCollection(new double[] { 2, 2 });
                }
                Child.Children.Add(newLine);
            }
            if (context.selectedLine == null)
            {
                return;
            }
            ResourceDictionary resourceLocalization = new ResourceDictionary
            {
                Source = new Uri("/FocusTreeManager;component/Resources/Icons.xaml", UriKind.Relative)
            };
            Rectangle visualBoard = new Rectangle
            {
                Width  = 25,
                Height = 25
            };
            //Canvas.SetLeft(visualBoard, Math.Min(context.selectedLine.X1,
            //                                context.selectedLine.X2) +
            //                                Math.Abs(context.selectedLine.X2 -
            //                                         context.selectedLine.X1) / 2 - 12.5);
            //Canvas.SetTop(visualBoard, Math.Min(context.selectedLine.Y1,
            //                               context.selectedLine.Y2) +
            //                               Math.Abs(context.selectedLine.Y2 -
            //                                        context.selectedLine.Y1) / 2 - 12.5);
            Point Position = Mouse.GetPosition(this);

            Canvas.SetTop(visualBoard, Position.Y);
            Canvas.SetLeft(visualBoard, Position.X);
            VisualBrush vBrush = new VisualBrush
            {
                Visual = (Visual)resourceLocalization["appbar_scissor"]
            };

            visualBoard.Fill = vBrush;
            Child.Children.Add(visualBoard);
        }
示例#20
0
        public static FocusGridModel CreateTreeFromScript(string fileName, Script script)
        {
            if (script.Logger.hasErrors())
            {
                return(null);
            }
            FocusGridModel container = new FocusGridModel(script.TryParse(script, "id"));
            //Get content of Modifier block
            Assignation modifier = script.FindAssignation("modifier");

            container.TAG = script.TryParse(modifier, "tag", null, false);
            if (container.TAG != null)
            {
                container.AdditionnalMods = modifier.GetContentAsScript(new[] { "add", "tag" })
                                            .Parse(script.Comments, 0);
            }
            //Run through all foci
            foreach (ICodeStruct codeStruct in script.FindAllValuesOfType <CodeBlock>("focus"))
            {
                CodeBlock block = (CodeBlock)codeStruct;
                try
                {
                    //Create the focus
                    FocusModel newFocus = new FocusModel
                    {
                        UniqueName = script.TryParse(block, "id"),
                        Text       = script.TryParse(block, "text", null, false),
                        Image      = script.TryParse(block, "icon").Replace("GFX_", ""),
                        X          = int.Parse(script.TryParse(block, "x")),
                        Y          = int.Parse(script.TryParse(block, "y")),
                        Cost       = GetDouble(script.TryParse(block, "cost"), 10)
                    };
                    //Get all core scripting elements
                    Script InternalFocusScript = block.
                                                 GetContentAsScript(ALL_PARSED_ELEMENTS.ToArray(), script.Comments);
                    newFocus.InternalScript = InternalFocusScript;
                    if (script.Logger.hasErrors())
                    {
                        new ViewModelLocator().ErrorDawg.AddError(
                            string.Join("\n", script.Logger.getErrors()));
                        continue;
                    }
                    container.FociList.Add(newFocus);
                }
                catch (Exception)
                {
                    //TODO: Add language support
                    new ViewModelLocator().ErrorDawg.AddError(script.Logger.ErrorsToString());
                    new ViewModelLocator().ErrorDawg.AddError("Invalid syntax for focus "
                                                              + script.TryParse(block, "id") + ", please double-check the syntax.");
                }
            }
            //Run through all foci again for mutually exclusives and prerequisites
            foreach (ICodeStruct codeStruct in script.FindAllValuesOfType <CodeBlock>("focus"))
            {
                CodeBlock block = (CodeBlock)codeStruct;
                string    id    = block.FindValue("id") != null?block.FindValue("id").Parse() : "";

                FocusModel newFocus = container.FociList.FirstOrDefault(f => f.UniqueName == id);
                if (newFocus == null)
                {
                    //Check if we removed this focus because of a syntax error
                    continue;
                }
                //Try to find its relative to
                string relativeToId = script.TryParse(block, "relative_position_id", null, false);
                if (!string.IsNullOrEmpty(relativeToId))
                {
                    newFocus.CoordinatesRelativeTo = container.FociList.FirstOrDefault(f =>
                                                                                       f.UniqueName == relativeToId);
                }
                //Recreate its mutually exclusives
                foreach (ICodeStruct exclusives in block.FindAllValuesOfType <ICodeStruct>
                             ("mutually_exclusive"))
                {
                    foreach (ICodeStruct focuses in exclusives
                             .FindAllValuesOfType <ICodeStruct>("focus"))
                    {
                        //Check if focus exists in list
                        FocusModel found = container.FociList.FirstOrDefault(f =>
                                                                             f.UniqueName == focuses.Parse());
                        //If we have found something
                        if (found == null)
                        {
                            continue;
                        }
                        MutuallyExclusiveSetModel set =
                            new MutuallyExclusiveSetModel(newFocus, found);
                        //Check if the set already exists in this focus
                        if (newFocus.MutualyExclusive.Contains(set) ||
                            found.MutualyExclusive.Contains(set))
                        {
                            continue;
                        }
                        newFocus.MutualyExclusive.Add(set);
                        found.MutualyExclusive.Add(set);
                    }
                }
                //Recreate its prerequisites
                foreach (ICodeStruct prerequistes in block
                         .FindAllValuesOfType <ICodeStruct>("prerequisite"))
                {
                    if (!prerequistes.FindAllValuesOfType <ICodeStruct>("focus").Any())
                    {
                        break;
                    }
                    PrerequisitesSetModel set = new PrerequisitesSetModel(newFocus);
                    foreach (ICodeStruct focuses in prerequistes.FindAllValuesOfType <ICodeStruct>
                                 ("focus"))
                    {
                        //Add the focus as a prerequisites in the current existing focuses
                        FocusModel search = container.FociList.FirstOrDefault((f) =>
                                                                              f.UniqueName == focuses.Parse());
                        if (search != null)
                        {
                            set.FociList.Add(search);
                        }
                    }
                    //If any prerequisite was added (Poland has empty prerequisite blocks...)
                    if (set.FociList.Any())
                    {
                        newFocus.Prerequisite.Add(set);
                    }
                }
            }
            return(container);
        }
示例#21
0
        private void EditElement(object obj)
        {
            UndoService.Current[GetUndoRoot()].BeginChangeSetBatch("EditAnyFile", false);
            FileManager dialog = new FileManager(ModeType.Edit);

            if (obj is FocusGridModel)
            {
                FocusGridModel item = (FocusGridModel)obj;
                new ViewModelLocator().FileManager.File = new FocusGridModel(item.VisibleName)
                {
                    TAG             = item.TAG,
                    AdditionnalMods = item.AdditionnalMods
                };
                dialog.ShowDialog();
                if (new ViewModelLocator().FileManager.File == null)
                {
                    return;
                }
                FocusGridModel newItem = new ViewModelLocator().FileManager.File as FocusGridModel;
                if (newItem == null)
                {
                    return;
                }
                item.VisibleName     = newItem.VisibleName;
                item.TAG             = newItem.TAG;
                item.AdditionnalMods = newItem.AdditionnalMods;
            }
            else if (obj is LocalisationModel)
            {
                LocalisationModel item = (LocalisationModel)obj;
                new ViewModelLocator().FileManager.File = new LocalisationModel(item.VisibleName)
                {
                    LanguageName = item.LanguageName
                };
                dialog.ShowDialog();
                if (new ViewModelLocator().FileManager.File == null)
                {
                    return;
                }
                LocalisationModel newItem = new ViewModelLocator().FileManager.File as LocalisationModel;
                if (newItem == null)
                {
                    return;
                }
                item.VisibleName  = newItem.VisibleName;
                item.LanguageName = newItem.LanguageName;
            }
            else if (obj is EventTabModel)
            {
                EventTabModel item = (EventTabModel)obj;
                new ViewModelLocator().FileManager.File = new EventTabModel(item.VisibleName)
                {
                    EventNamespace = item.EventNamespace
                };
                dialog.ShowDialog();
                if (new ViewModelLocator().FileManager.File == null)
                {
                    return;
                }
                EventTabModel newItem = (new ViewModelLocator()).FileManager.File as EventTabModel;
                if (newItem == null)
                {
                    return;
                }
                item.VisibleName    = newItem.VisibleName;
                item.EventNamespace = newItem.EventNamespace;
            }
            else if (obj is ScriptModel)
            {
                ScriptModel item = (ScriptModel)obj;
                new ViewModelLocator().FileManager.File = new ScriptModel(item.VisibleName);
                dialog.ShowDialog();
                if (new ViewModelLocator().FileManager.File == null)
                {
                    return;
                }
                ScriptModel newItem = new ViewModelLocator().FileManager.File as ScriptModel;
                if (newItem != null)
                {
                    item.VisibleName = newItem.VisibleName;
                }
            }
            UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
        }
示例#22
0
 public LineAdorner(UIElement el, FocusGridModel DataContext) : base(el)
 {
     element          = el as FrameworkElement;
     this.DataContext = DataContext;
     Children         = new Canvas();
 }
示例#23
0
 private void NotificationMessageReceived(NotificationMessage msg)
 {
     //If this is not the intended target
     if (msg.Target != null && msg.Target != this)
     {
         return;
     }
     if (msg.Notification == "OpenFocusTree")
     {
         FocusGridModel container = msg.Sender as FocusGridModel;
         if (TabsModelList.Contains(container))
         {
             return;
         }
         CheckForChanges(container);
         TabsModelList.Add(container);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "OpenLocalisation")
     {
         LocalisationModel container = msg.Sender as LocalisationModel;
         if (TabsModelList.Contains(container))
         {
             return;
         }
         CheckForChanges(container);
         TabsModelList.Add(container);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "OpenEventList")
     {
         EventTabModel container = msg.Sender as EventTabModel;
         if (TabsModelList.Contains(container))
         {
             return;
         }
         CheckForChanges(container);
         TabsModelList.Add(container);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "OpenScriptList")
     {
         ScriptModel container = msg.Sender as ScriptModel;
         if (TabsModelList.Contains(container))
         {
             return;
         }
         CheckForChanges(container);
         TabsModelList.Add(container);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "SaveProject")
     {
         saveProject();
     }
     if (msg.Notification == "RefreshProjectViewer")
     {
         TabsModelList.Clear();
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "SendDeleteItemSignal")
     {
         ObservableObject Model = null;
         if (msg.Sender is FocusGridModel)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is FocusGridModel &&
                                                  ((FocusGridModel)m).UniqueID == ((FocusGridModel)msg.Sender).UniqueID);
         }
         else if (msg.Sender is LocalisationModel)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is LocalisationModel &&
                                                  ((LocalisationModel)m).UniqueID == ((LocalisationModel)msg.Sender).UniqueID);
         }
         else if (msg.Sender is EventTabModel)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is EventTabModel &&
                                                  ((EventTabModel)m).UniqueID == ((EventTabModel)msg.Sender).UniqueID);
         }
         else if (msg.Sender is ScriptModel)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is ScriptModel &&
                                                  ((ScriptModel)m).UniqueID == ((ScriptModel)msg.Sender).UniqueID);
         }
         TabsModelList.Remove(Model);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Target == this)
     {
         //Resend to the tutorial View model if this was the target
         Messenger.Default.Send(new NotificationMessage(msg.Sender,
                                                        new ViewModelLocator().Tutorial, msg.Notification));
     }
 }