private void DeleteFocus(FocusModel Model)
 {
     //Kill the set that might have this focus as parent
     foreach (FocusModel focus in FociList)
     {
         foreach (PrerequisitesSetModel set in focus.Prerequisite.ToList())
         {
             if (set.FociList.Contains(Model))
             {
                 set.DeleteSetRelations();
             }
         }
         foreach (MutuallyExclusiveSetModel set in focus.MutualyExclusive.ToList())
         {
             if (set.Focus2 == Model || set.Focus1 == Model)
             {
                 set.DeleteSetRelations();
             }
         }
     }
     //Remove the focus
     FociList.Remove(Model);
     UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
     EditGridDefinition();
     DrawOnCanvas();
 }
Пример #2
0
 public void addFocusToList(Focus FocusToAdd)
 {
     FociList.Add(FocusToAdd);
     RowCount    = FocusToAdd.Y >= RowCount ? FocusToAdd.Y + 1 : RowCount;
     ColumnCount = FocusToAdd.X >= ColumnCount ? FocusToAdd.X + 1 : ColumnCount;
     DrawOnCanvas();
 }
 public void addFocusToList(FocusModel FocusToAdd)
 {
     FociList.Add(FocusToAdd);
     UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
     RowCount    = FocusToAdd.Y >= RowCount ? FocusToAdd.Y + 1 : RowCount;
     ColumnCount = FocusToAdd.X >= ColumnCount ? FocusToAdd.X + 1 : ColumnCount;
     DrawOnCanvas();
 }
Пример #4
0
        public void EditGridDefinition()
        {
            if (!FociList.Any())
            {
                return;
            }
            Focus biggestY = FociList.Aggregate((i1, i2) => i1.Y > i2.Y ? i1 : i2);
            Focus biggestX = FociList.Aggregate((i1, i2) => i1.X > i2.X ? i1 : i2);

            RowCount    = biggestY.Y >= RowCount ? biggestY.Y + 1 : RowCount;
            ColumnCount = biggestX.X >= ColumnCount ? biggestX.X + 1 : ColumnCount;
        }
        public void EditGridDefinition()
        {
            if (!FociList.Any())
            {
                return;
            }
            FocusModel biggestY = FociList.Aggregate((i1, i2) => i1.DisplayY >
                                                     i2.DisplayY ? i1 : i2);
            FocusModel biggestX = FociList.Aggregate((i1, i2) => i1.DisplayX >
                                                     i2.DisplayX ? i1 : i2);

            RowCount    = biggestY.DisplayY >= RowCount ? biggestY.DisplayY + 1 : RowCount;
            ColumnCount = biggestX.DisplayX >= ColumnCount ? biggestX.DisplayX + 1 : ColumnCount;
        }
 internal void updateRelatives(FocusModel RelativeTo)
 {
     if (FociList.All(f => f.CoordinatesRelativeTo != RelativeTo))
     {
         return;
     }
     //Select all focuses that are relative to this parent, but not currently in movement
     foreach (FocusModel relative in
              FociList.Where(f => f.CoordinatesRelativeTo == RelativeTo &&
                             !SelectedFocuses.Contains(f)))
     {
         relative.RaisePropertyChanged(() => relative.DisplayX);
         relative.RaisePropertyChanged(() => relative.DisplayY);
         updateRelatives(relative);
     }
 }
 public FocusGridModel(FocusGridModel model)
 {
     SetupCommons();
     //Transfer data
     UniqueID        = Guid.NewGuid();
     visibleName     = model.visibleName;
     tag             = model.tag;
     additionnalMods = model.additionnalMods;
     foreach (FocusModel focus in model.FociList)
     {
         FociList.Add(new FocusModel(focus));
     }
     //Rerun to create sets
     foreach (FocusModel focus in FociList)
     {
         focus.RepairSets(model.FociList.FirstOrDefault(f => f.UniqueName == focus.UniqueName),
                          FociList.ToList());
     }
     //Create the remaining stuff
     FociList.CollectionChanged += FociList_CollectionChanged;
     //Min Row & column Count
     EditGridDefinition();
 }
 public FocusGridModel(FociGridContainer container)
 {
     SetupCommons();
     //Transfer data
     UniqueID        = container.IdentifierID;
     visibleName     = container.ContainerID;
     tag             = container.TAG;
     additionnalMods = container.AdditionnalMods;
     foreach (Focus focus in container.FociList)
     {
         FociList.Add(new FocusModel(focus));
     }
     //Rerun to create sets
     foreach (FocusModel model in FociList)
     {
         model.RepairSets(
             container.FociList.FirstOrDefault(f => f.UniqueName == model.UniqueName),
             FociList.ToList());
     }
     //Create the remaining stuff
     FociList.CollectionChanged += FociList_CollectionChanged;
     //Min Row & column Count
     EditGridDefinition();
 }
        private void NotificationMessageReceived(NotificationMessage msg)
        {
            //If this is not the intended target
            if (msg.Target != null && msg.Target != this)
            {
                return;
            }
            //If this is a dead tab waiting to be destroyed
            if (VisibleName == null)
            {
                return;
            }
            FocusModel Model = msg.Sender as FocusModel;

            switch (msg.Notification)
            {
            case "CloseEditFocus":
                switch (ModeType)
                {
                case RelationMode.Add:
                    ManageFocusViewModel viewModel = msg.Sender as ManageFocusViewModel;
                    if (viewModel != null)
                    {
                        addFocusToList(viewModel.Focus);
                    }
                    DrawOnCanvas();
                    break;

                case RelationMode.Edit:
                    EditGridDefinition();
                    DrawOnCanvas();
                    break;
                }
                ModeType = RelationMode.None;
                break;

            case "DeleteFocus":
                if (Model == null)
                {
                    return;
                }
                //Check if model is in the selected foci
                if (Model.IsSelected && SelectedFocuses.Contains(Model))
                {
                    //Delete everyone
                    foreach (FocusModel item in SelectedFocuses)
                    {
                        DeleteFocus(item);
                    }
                    break;
                }
                //Otherwise, kill the current focus
                DeleteFocus(Model);
                break;

            case "AddFocusMutually":
                ModeType = RelationMode.MutuallyExclusive;
                if (Model != null)
                {
                    ChosenFocusForLink = Model;
                    Model.IsWaiting    = true;
                }
                break;

            case "FinishAddFocusMutually":
                if (ChosenFocusForLink != null && ChosenFocusForLink != Model &&
                    FociList.Any(f => f == Model))
                {
                    UndoService.Current[GetUndoRoot()]
                    .BeginChangeSetBatch("AddMutuallyExclusive", false);
                    ModeType = RelationMode.None;
                    ChosenFocusForLink.IsWaiting = false;
                    MutuallyExclusiveSetModel tempo =
                        new MutuallyExclusiveSetModel(ChosenFocusForLink, Model);
                    ChosenFocusForLink.MutualyExclusive.Add(tempo);
                    Model?.MutualyExclusive.Add(tempo);
                    ChosenFocusForLink = null;
                    Messenger.Default.Send(new NotificationMessage(this,
                                                                   new ViewModelLocator().StatusBar, "Clear_message"));
                    UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
                    RaisePropertyChanged(() => FociList);
                    DrawOnCanvas();
                }
                break;

            case "AddFocusPrerequisite":
                ModeType = RelationMode.Prerequisite;
                if (Model != null)
                {
                    ChosenFocusForLink = Model;
                    Model.IsWaiting    = true;
                }
                break;

            case "FinishAddFocusPrerequisite":
                if (ChosenFocusForLink != null && ChosenFocusForLink != Model &&
                    FociList.Any(f => f == Model))
                {
                    UndoService.Current[GetUndoRoot()]
                    .BeginChangeSetBatch("AddPrerequisite", false);
                    ModeType = RelationMode.None;
                    if (ModeParam == RelationModeParam.Required)
                    {
                        //Create new set
                        PrerequisitesSetModel set = new PrerequisitesSetModel(ChosenFocusForLink);
                        set.FociList.Add(Model);
                        ChosenFocusForLink.Prerequisite.Add(set);
                    }
                    else if (ModeParam == RelationModeParam.Optional)
                    {
                        //Create new set if no exist
                        if (!ChosenFocusForLink.Prerequisite.Any())
                        {
                            PrerequisitesSetModel set = new PrerequisitesSetModel(ChosenFocusForLink);
                            ChosenFocusForLink.Prerequisite.Add(set);
                        }
                        //Add Model to last Set
                        ChosenFocusForLink.Prerequisite.Last().FociList.Add(Model);
                    }
                    ChosenFocusForLink.IsWaiting = false;
                    ChosenFocusForLink           = null;
                    Messenger.Default.Send(new NotificationMessage(this,
                                                                   new ViewModelLocator().StatusBar, "Clear_message"));
                    UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
                    RaisePropertyChanged(() => FociList);
                    DrawOnCanvas();
                }
                break;

            case "MakeRelativeTo":
                ModeType = RelationMode.RelativeTo;
                if (Model != null)
                {
                    ChosenFocusForLink = Model;
                    Model.IsWaiting    = true;
                }
                break;

            case "FinishMakeRelativeTo":
                if (ChosenFocusForLink != null && ChosenFocusForLink != Model &&
                    FociList.Any(f => f == Model))
                {
                    if (Model != null)
                    {
                        UndoService.Current[GetUndoRoot()]
                        .BeginChangeSetBatch("MakeRelativeTo", false);
                        ModeType = RelationMode.None;
                        ChosenFocusForLink.IsWaiting             = false;
                        ChosenFocusForLink.X                     = ChosenFocusForLink.DisplayX - Model.DisplayX;
                        ChosenFocusForLink.Y                     = ChosenFocusForLink.DisplayY - Model.DisplayY;
                        ChosenFocusForLink.CoordinatesRelativeTo = Model;
                        ChosenFocusForLink = null;
                        Messenger.Default.Send(new NotificationMessage(this,
                                                                       new ViewModelLocator().StatusBar, "Clear_message"));
                        UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
                        RaisePropertyChanged(() => FociList);
                        DrawOnCanvas();
                    }
                }
                break;

            case "PositionChanged":
                if (Model != null)
                {
                    foreach (FocusModel focus in FociList.Where(f => f.CoordinatesRelativeTo == Model))
                    {
                        focus.RaisePropertyChanged(() => focus.DisplayX);
                        focus.RaisePropertyChanged(() => focus.DisplayY);
                    }
                    DrawOnCanvas();
                }
                UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
                break;
            }
            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));
            }
        }
        private void Paste(object sender)
        {
            if (!CanPaste(sender))
            {
                return;
            }
            UndoService.Current[GetUndoRoot()]
            .BeginChangeSetBatch("PasteMultiple", false);
            Point mousePos = Mouse.GetPosition((IInputElement)sender);

            if (!CopyTempMemory.Any())
            {
                return;
            }
            int XChange = 0;
            int YChange = 0;

            if (sender != null)
            {
                FocusModel First = CopyTempMemory.FirstOrDefault();
                if (First == null)
                {
                    return;
                }
                XChange = (int)Math.Floor(mousePos.X / 89 - 0.4) - First.DisplayX;
                YChange = (int)Math.Floor(mousePos.Y / 140) - First.DisplayY;
            }
            List <FocusModel> newSelected = CopyTempMemory.Select(selected =>
                                                                  selected.Copy(XChange, YChange)).ToList();

            for (int index = 0; index < CopyTempMemory.Count; index++)
            {
                FocusModel selected     = CopyTempMemory[index];
                FocusModel currentFocus = newSelected[index];
                //Repair relative to
                if (selected.CoordinatesRelativeTo != null)
                {
                    //If the relative to can be found in the current new list
                    if (newSelected.Any(f => selected.CoordinatesRelativeTo.UniqueName == f.UniqueName))
                    {
                        currentFocus.CoordinatesRelativeTo = newSelected.FirstOrDefault(f =>
                                                                                        selected.CoordinatesRelativeTo.UniqueName == f.UniqueName);
                    }
                    else
                    {
                        //Otherwise, keep the same
                        currentFocus.CoordinatesRelativeTo = selected.CoordinatesRelativeTo;
                    }
                }
                //Repair prerequisites
                foreach (PrerequisitesSetModel set in selected.Prerequisite)
                {
                    PrerequisitesSetModel newset = new PrerequisitesSetModel(currentFocus);
                    foreach (FocusModel child in set.FociList)
                    {
                        //If the focus to can be found in the current new list
                        if (newSelected.Any(f => child.UniqueName == f.UniqueName))
                        {
                            newset.FociList.Add(newSelected.FirstOrDefault(f => child.UniqueName
                                                                           == f.UniqueName));
                        }
                        else
                        {
                            //Otherwise, keep the same
                            newset.FociList.Add(child);
                        }
                    }
                    currentFocus.Prerequisite.Add(newset);
                }
                //Repair mutually exclusives
                foreach (MutuallyExclusiveSetModel set in selected.MutualyExclusive)
                {
                    FocusModel toFind;
                    FocusModel focus1;
                    FocusModel focus2;
                    if (set.Focus1.UniqueName == currentFocus.UniqueName)
                    {
                        toFind = set.Focus2;
                        focus1 = set.Focus1;
                    }
                    else if (set.Focus2.UniqueName == currentFocus.UniqueName)
                    {
                        toFind = set.Focus1;
                        focus1 = set.Focus2;
                    }
                    else
                    {
                        //Cannot be found, cancel
                        continue;
                    }
                    //If the focus to can be found in the current new list
                    if (newSelected.Any(f => toFind.UniqueName == f.UniqueName))
                    {
                        focus2 = newSelected.FirstOrDefault(f => toFind.UniqueName
                                                            == f.UniqueName);
                    }
                    else
                    {
                        //Otherwise, keep the same
                        focus2 = toFind;
                    }
                    currentFocus.MutualyExclusive.Add(new MutuallyExclusiveSetModel(focus1, focus2));
                }
                currentFocus.IsSelected = true;
                FociList.Add(currentFocus);
            }
            //Unselect all the selected foci
            foreach (FocusModel selected in SelectedFocuses)
            {
                selected.IsSelected = false;
            }
            //Change all copied name to append _Copy
            foreach (FocusModel currentFocus in newSelected)
            {
                currentFocus.UniqueName += "_Copy";
            }
            SelectedFocuses = newSelected;
            UndoService.Current[GetUndoRoot()].EndChangeSetBatch();
        }
Пример #11
0
 private void NotificationMessageReceived(NotificationMessage msg)
 {
     if (!this.isShown || this.Filename == null)
     {
         //is not shown, do not manage
         return;
     }
     if (msg.Notification == "HideAddFocus")
     {
         System.Windows.Application.Current.Properties["Mode"] = null;
         AddFocusViewModel viewModel = msg.Sender as AddFocusViewModel;
         addFocusToList(viewModel.Focus);
         RaisePropertyChanged(() => FociList);
         DrawOnCanvas();
     }
     if (msg.Notification == "HideEditFocus")
     {
         System.Windows.Application.Current.Properties["Mode"] = null;
         EditGridDefinition();
         DrawOnCanvas();
     }
     if (msg.Notification == "DeleteFocus")
     {
         Focus Model = (Focus)msg.Sender;
         //Kill the set that might have this focus as parent
         foreach (Focus focus in FociList)
         {
             foreach (PrerequisitesSet set in focus.Prerequisite.ToList())
             {
                 if (set.FociList.Contains(Model))
                 {
                     set.DeleteSetRelations();
                 }
             }
         }
         FociList.Remove(Model);
         RaisePropertyChanged(() => FociList);
         EditGridDefinition();
         DrawOnCanvas();
     }
     if (msg.Notification == "AddFocusMutually")
     {
         System.Windows.Application.Current.Properties["Mode"] = "Mutually";
         Focus Model = (Focus)msg.Sender;
         selectedFocus    = Model;
         Model.IsSelected = true;
     }
     if (msg.Notification == "FinishAddFocusMutually")
     {
         Focus Model = (Focus)msg.Sender;
         if (selectedFocus != null && selectedFocus != Model &&
             FociList.Where((f) => f == Model).Any())
         {
             System.Windows.Application.Current.Properties["Mode"] = null;
             selectedFocus.IsSelected = false;
             var tempo = new MutuallyExclusiveSet(selectedFocus, Model);
             selectedFocus.MutualyExclusive.Add(tempo);
             Model.MutualyExclusive.Add(tempo);
             DrawOnCanvas();
         }
     }
     if (msg.Notification == "AddFocusPrerequisite")
     {
         System.Windows.Application.Current.Properties["Mode"] = "Prerequisite";
         Focus Model = (Focus)msg.Sender;
         selectedFocus    = Model;
         Model.IsSelected = true;
     }
     if (msg.Notification == "FinishAddFocusPrerequisite")
     {
         Focus Model = (Focus)msg.Sender;
         if (selectedFocus != null && selectedFocus != Model &&
             FociList.Where((f) => f == Model).Any())
         {
             System.Windows.Application.Current.Properties["Mode"] = null;
             string Type = (string)System.Windows.Application.Current.Properties["ModeParam"];
             System.Windows.Application.Current.Properties["ModeParam"] = null;
             selectedFocus.IsSelected = false;
             if (Type == "Required")
             {
                 //Create new set
                 PrerequisitesSet set = new PrerequisitesSet(selectedFocus);
                 set.FociList.Add(Model);
                 selectedFocus.Prerequisite.Add(set);
             }
             else
             {
                 //Create new set if no exist
                 if (!selectedFocus.Prerequisite.Any())
                 {
                     PrerequisitesSet set = new PrerequisitesSet(selectedFocus);
                     selectedFocus.Prerequisite.Add(set);
                 }
                 //Add Model to first Set
                 selectedFocus.Prerequisite.First().FociList.Add(Model);
             }
             RaisePropertyChanged(() => FociList);
             DrawOnCanvas();
         }
     }
     if (msg.Notification == "ContainerRenamed")
     {
         RaisePropertyChanged(() => Filename);
     }
 }