Beispiel #1
0
        public ViewModel()
        {
            // コマンドの初期化
            PlusCommand  = new PlusCommand();
            MinusCommand = new MinusCommand();
            MultiCommand = new MultiCommand();
            DivCommand   = new DivCommand();

            // コマンド実行後の結果をResultに反映
            PlusCommand.PropertyChanged += (sender, e) =>
            {
                Result = ((PlusCommand)sender).Result.ToString();
                RaisePropertyChanged(e.PropertyName);
            };
            MinusCommand.PropertyChanged += (sender, e) =>
            {
                Result = ((MinusCommand)sender).Result.ToString();
                RaisePropertyChanged(e.PropertyName);
            };
            MultiCommand.PropertyChanged += (sender, e) =>
            {
                Result = ((MultiCommand)sender).Result.ToString();
                RaisePropertyChanged(e.PropertyName);
            };
            DivCommand.PropertyChanged += (sender, e) =>
            {
                Result = ((DivCommand)sender).Result;
                RaisePropertyChanged(e.PropertyName);
            };
        }
Beispiel #2
0
 public void AddMultiCommandToQueue(MultiCommand command, bool clear = false)
 {
     if (clear) {
         StopCurrentMultiCommand ();
     }
     commandQueue.Enqueue (command);
 }
Beispiel #3
0
    //  How can I have a shared context like this for all Commands of the group?
    public static MultiCommand SharedContext(this MultiCommand mc, Action <CommandContext> CallBack)
    {
        var cc = new CommandContext();

        CallBack(cc);
        mc.SharedContext = cc;
        return(mc);
    }
Beispiel #4
0
        public CommandEntity ParseMultiCommand(Type attribute)
        {
            CommandEntity         command         = new CommandEntity();
            MultiCommandAttribute moduleAttribute = attribute.GetTypeInfo().GetCustomAttribute <MultiCommandAttribute>();

            command = new MultiCommand(moduleAttribute.Entity as MultiCommand);

            object constructedInstance = null;

            try
            {
                constructedInstance = Activator.CreateInstance(Type.GetType(attribute.AssemblyQualifiedName), command);
            }
            catch
            {
                constructedInstance = Activator.CreateInstance(Type.GetType(attribute.AssemblyQualifiedName));
            }

            List <Type> allChildren = attribute.GetNestedTypes(BindingFlags.NonPublic | BindingFlags.Public)
                                      .Where((x) => x.GetTypeInfo().GetCustomAttributes <CommandEntityAttribute>().Any())
                                      .ToList();

            foreach (Type t in allChildren)
            {
                CommandEntityAttribute entityAttribute = t.GetTypeInfo().GetCustomAttribute <CommandEntityAttribute>();
                CommandEntity          entity          = null;

                if (entityAttribute is MultiCommandAttribute cAttribute)
                {
                    entity = ParseMultiCommand(t);
                }

                if (entity == null)
                {
                    continue;
                }

                entity.Parent = command;
                command.Children.Add(entity);
            }

            List <MethodInfo> methods = attribute.GetMethods()
                                        .Where((x) => x.GetCustomAttributes <CommandAttribute>().Any())
                                        .ToList();

            foreach (MethodInfo m in methods)
            {
                Command newEvent = CreateCommand(m, command, constructedInstance);

                if (newEvent.IsDefault && (command as MultiCommand).defaultCommand == null)
                {
                    (command as MultiCommand).defaultCommand = newEvent;
                }

                command.Children.Add(newEvent);
            }
            return(command);
        }
 public void MultiCommandInit()
 {
     MultiCommand.New()
     .Add(new Command1())
     .Add(new Command2())
     .Add(new Command3())
     .SharedContext(CC => {
         CC.Data             = new RequiredData();
         CC.ServerController = GetServerController();
     });
 }
        public void MutiCommand_Execute()
        {
            Doctor           doctor           = new Doctor();
            DoctorMakeAdvice doctorMakeAdvice = new DoctorMakeAdvice(doctor);

            Light          light          = new Light();
            LightOnCommand lightOnCommand = new LightOnCommand(light);

            MultiCommand multiCommand = new MultiCommand(new ICommand[] { doctorMakeAdvice, lightOnCommand });

            multiCommand.Execute();
        }
Beispiel #7
0
        /// <summary>Wire up view model.</summary>
        public ProxyViewModel()
        {
            _controller            = new ProxyController();
            _cameraProxyController = new ProxyController();

            _connectCommands = new List <ConnectCommand>
            {
                new ConnectCommand(_controller),
                new ConnectCommand(_cameraProxyController),
            };
            _connectCommand = new MultiCommand(_connectCommands);

            _cameraProxyController.PropertyChanged += onControllerPropertyChanged;
            _controller.PropertyChanged            += onControllerPropertyChanged;
        }
Beispiel #8
0
        private void ExecuteMultiCommand(string buttonText)
        {
            _multiCommandHaveExecuted = true;

            if (buttonText.Contains("Ready"))
            {
                Actions.SetAndUpdateState(PlayerState.Ready);
            }

            else if (buttonText.Contains("Kill") && SelectedItem != null)
            {
                PlayersHub.Connection.InvokeAsync("KillRequest", Globals.PlayerObject.Guid, SelectedItem.Guid, Globals.GameObject.Guid);

                Actions.SetAndUpdateState(PlayerState.Ready);
            }

            else if (buttonText.Contains("Guess") && SelectedItem != null)
            {
                if (SelectedItem.Role == PlayerRole.Mafia)
                {
                    DependencyService.Get <IMessage>().LongAlert($"'{SelectedItem.Name}' IS the Mafia!");
                }
                else
                {
                    DependencyService.Get <IMessage>().LongAlert($"'{SelectedItem.Name}' NOT a Mafia");
                }

                Actions.SetAndUpdateState(PlayerState.Ready);
            }

            else if (buttonText.Contains("Vote") && SelectedItem != null)
            {
                PlayersHub.Connection.InvokeAsync("VoteRequest", Globals.PlayerObject.Guid, SelectedItem.Guid, Globals.GameObject.Guid);

                Actions.SetAndUpdateState(PlayerState.Ready);
            }

            else
            {
                _multiCommandHaveExecuted = false;
                DependencyService.Get <IMessage>().ShortAlert("Select player");
            }

            MultiCommand.ChangeCanExecute();

            UpdateMultiButtonText();
        }
Beispiel #9
0
 public void PerformActions()
 {
     bool complete = true;
     if (currentMultiCommand != null && currentCommands != null) {
         for (int i = 0; i < currentCommands.Count; i++) { //loop through each command and see if it's done
             if (currentCommands [i].IsComplete () != true) {
                 complete = false;
                 break;
             }
         }
     }
     if (complete && commandQueue.Count > 0) { //if we're done and we have another, queue it up;
         Debug.Log("Selection "+ID+" has "+commandQueue.Count + " in queue,  issuing "+commandQueue.Peek()+" to "+units.Count+" units");
         currentMultiCommand = commandQueue.Dequeue ();
         currentCommands = currentMultiCommand.IssueCommands (this.units);
     }
 }
Beispiel #10
0
    private void OnDelete(object o, EventArgs args)
    {
        List <IObject> Objects  = new List <IObject>(selectedObjects);          //OnObjectRemoved() tries to access selectedObject and that's not possible during "foreach"
        List <Command> commands = new List <Command>();
        Command        command  = null;

        foreach (IGameObject selectedObject in Objects)
        {
            sector.Remove(selectedObject, ref command);
            commands.Add(command);
        }
        if (commands.Count > 1)                                                 //If there are more items, then create multiCommand, otherwise keep single one
        {
            command = new MultiCommand("Deleted " + commands.Count.ToString() + " objects", commands);
        }
        UndoManager.AddCommand(command);
    }
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var command = new MultiCommand()
            {
                Commands = new List <ICommand>()
            };

            foreach (var obj in values)
            {
                if (obj is ICommand c)
                {
                    command.Commands.Add(c);
                }
            }

            return(command);
        }
Beispiel #12
0
 public PipelineCommand(IEnumerable<RedisCommand> commands, bool transactional)
 {
     if (commands == null)
         throw new ArgumentNullException("commands");
     _commands.AddRange(commands);
     _transactional = transactional;
     if (transactional)
     {
         _multi = new MultiCommand();
         _exec = new ExecCommand();
     } 
     else
     {
         _multi = null;
         _exec = null;
     }
 }
Beispiel #13
0
 public void Hide()
 {
     if (IsOpen && isActive && instantiatedObject != null)
     {
         Command[] commands = new MenuBehaviourCommand[menuBehaviours.Length];
         for (int i = 0; i < menuBehaviours.Length; i++)
         {
             commands[i] = new MenuBehaviourCommand(menuBehaviours[i], MenuBehaviourCommand.Type.Close, true);
         }
         MultiCommand multiCommand = new MultiCommand(commands);
         multiCommand.RegisterFinishCallback(HideFinish);
         commandQ.AddCommand(multiCommand);
     }
     else
     {
         HideFinish();
     }
 }
Beispiel #14
0
    public void Show()
    {
        if (IsOpen && !isActive && instantiatedObject != null)
        {
            instantiatedObject.SetActive(true);

            Command[] commands = new MenuBehaviourCommand[menuBehaviours.Length];
            for (int i = 0; i < menuBehaviours.Length; i++)
            {
                commands[i] = new MenuBehaviourCommand(menuBehaviours[i], MenuBehaviourCommand.Type.Open, true);
            }
            MultiCommand multiCommand = new MultiCommand(commands);
            multiCommand.RegisterFinishCallback(ShowFinish);
            commandQ.AddCommand(multiCommand, CommandQueue.AddMode.Instant);
        }
        else
        {
            ShowFinish();
        }
    }
        /// <summary>
        /// Create a new instance of this class
        /// </summary>
        public PatchVersionSelectionViewModel(Window parentWindow, UserControl control) : base(parentWindow)
        {
            Patches patches = new Patches();

            AllPatches = patches.GetPatches();

            IProgressCommand  downloadPatchesCommand = new DownloadAllPatchesCommand(settingManager);
            ProgressBarDialog dialog = new ProgressBarDialog();

            if (dialog.DataContext is ProgressBarDialogViewModel progressViewModel)
            {
                downloadPatchesCommand.ProgressChanged += (sender, data) =>
                {
                    progressViewModel.UpdateProgress(data.CurrentWorkload, data.TotalWorkload);
                };
                downloadPatchesCommand.Executed += (sender, data) =>
                {
                    progressViewModel.UpdateProgress(100, 100);
                };
            }
            DownloadAllPatches = new MultiCommand(new List <ICommand>()
            {
                downloadPatchesCommand,
                new OpenCustomPopupWindowCommand(currentWindow, FontAwesomeIcon.Hourglass, "Downloading all patches", dialog, false, null)
            });

            object dockArea = control.FindName("DP_InnerDock");

            object controllerDock = control.FindName("IC_PatchSelectionControl");

            if (dockArea is DockPanel panel && controllerDock is ItemsControl controller)
            {
                panelToUse            = panel;
                OpenLaunchGameCommand = new OpenLaunchUserControlToPanel(
                    panelToUse,
                    new LaunchGameUserControl(parentWindow),
                    controller
                    );
            }
        }
Beispiel #16
0
    private void OnClone(object o, EventArgs args)
    {
        List <Command> commands = new List <Command>();
        Command        command  = null;

        foreach (IGameObject selectedObject in selectedObjects)
        {
            try {
                object      newObject  = ((ICloneable)selectedObject).Clone();
                IGameObject gameObject = (IGameObject)newObject;
                sector.Add(gameObject, gameObject.GetType().Name + " (clone)", ref command);
                commands.Add(command);
            } catch (Exception e) {
                ErrorDialog.Exception(e);
            }
        }
        if (commands.Count > 1)                                                 //If there are more items, then create multiCommand, otherwise keep single one
        {
            command = new MultiCommand("Cloned " + commands.Count.ToString() + " objects", commands);
        }
        UndoManager.AddCommand(command);
    }
Beispiel #17
0
    public void OnMouseButtonRelease(Vector mousePos, int button, ModifierType Modifiers)
    {
        if (button == 1)
        {
            switch (state)
            {
            case State.NONE:
                break;

            case State.SELECTING:
                // Add objects in the selected area to selectedObjects

                // Flush selected objects if it's not CTRL+select
                if ((Modifiers & ModifierType.ControlMask) == 0)
                {
                    selectedObjects.Clear();
                }

                RectangleF selectedArea = new RectangleF(pressPoint, mousePos);
                foreach (IObject Object in sector.GetObjects(typeof(IObject)))
                {
                    if (selectedArea.Contains(Object.Area))
                    {
                        if (selectedObjects.Contains(Object))
                        {
                            selectedObjects.Remove(Object);
                        }
                        else
                        {
                            selectedObjects.Add(Object);
                        }
                    }
                }

                if (selectedObjects.Count == 1)
                {
                    //show properties
                    MakeActive(selectedObjects[0]);
                    //application.EditProperties(selectedObjects[0], selectedObjects[0].GetType().Name);
                }
                else
                {
                    // resizing is unavailable if more objects are selected
                    activeObject = null;
                    controlPoints.Clear();
                    application.EditProperties(selectedObjects, "Group of " + selectedObjects.Count.ToString() + " objects");
                }
                break;

            case State.DRAGGING:
                // Finish dragging and register undo command
                Vector newPosition = new Vector(activeObject.Area.Left, activeObject.Area.Top); //Area is up to date, no need to calculate it again
                if (newPosition != originalPosition)                                            // FIXME: is that ok in C# or do we compare the reference here?
                {
                    Vector       totalShift    = newPosition - originalPosition;
                    MultiCommand multi_command = new MultiCommand("Moved " + selectedObjects.Count + " objects");

                    foreach (IObject selectedObject in selectedObjects)
                    {
                        // copy new area to variable
                        RectangleF oldArea = selectedObject.Area;

                        // and shift it to it's oreginal location
                        oldArea.Move(-totalShift);

                        multi_command.Add(new ObjectAreaChangeCommand(
                                              "Moved Object " + selectedObject,
                                              oldArea,
                                              selectedObject.Area,                             // We are already on new area
                                              selectedObject));
                    }

                    UndoManager.AddCommand(multi_command);
                }

                break;
            }

            state = State.NONE;
            Redraw();
        }

        /*if (false)
         * {
         *      if (button == 1 && state == State.DRAGGING) {
         *              state = State.NONE;
         *
         *              Vector newPosition = new Vector (activeObject.Area.Left, activeObject.Area.Top);//Area is up to date, no need to calculate it again
         *              if (originalPosition != newPosition) {
         *                      Command command = null;
         *                      List<Command> commandList = new List<Command>();
         *                      Vector totalShift = newPosition - originalPosition;
         *                      foreach (IObject selectedObject in selectedObjects) {
         *                              RectangleF oldArea = selectedObject.Area;			//copy new area to variable
         *                              oldArea.Move(-totalShift);					//	and shift it to it's oreginal location
         *                              command = new ObjectAreaChangeCommand(
         *                                      "Moved Object " + selectedObject,
         *                                      oldArea,
         *                                      selectedObject.Area,					//We are already on new area
         *                                      selectedObject);
         *                              commandList.Add(command);
         *                      }
         *
         *                      if (commandList.Count > 1)			//If there are more items, then create multiCommand, otherwise keep single one
         *                              command = new MultiCommand("Moved " + commandList.Count.ToString() + " objects", commandList);
         *
         *                      UndoManager.AddCommand(command);		//All commands are already done.. no need to do that again
         *
         *                      Redraw();
         *              } else {						//L click + no CTRL => select single object under cursor
         *                      if ((Modifiers & ModifierType.ControlMask) == 0) {
         *                              MakeActive(FindObjectAt(mousePos));
         *                              Redraw();
         *                      }
         *              }
         *      }
         *      if (button == 3 && state == State.SELECTING) {
         *              state = State.NONE;
         *              if ((pressPoint - mousePos).Norm() < 10) {		//for moves within 10px circle around pressPoint show popup menu
         *                      bool hit = false;
         *                      foreach (IObject selectedObject in selectedObjects) {
         *                              hit |= selectedObject.Area.Contains(mousePos);
         *                      }
         *                      if (!hit) {
         *                              MakeActive(FindObjectAt(mousePos));
         *                              Redraw();
         *                      }
         *                      if (hit || activeObject != null)		//Show popup menu when clicked on object (from selection or new one)
         *                              PopupMenu(button);
         *              } else {
         *                      if ((Modifiers & ModifierType.ControlMask) == 0)	//Flush selected objects if it's not CTRL+select
         *                              selectedObjects.Clear();
         *
         *                      RectangleF selectedArea = new RectangleF(pressPoint, mousePos);
         *                      foreach(IObject Object in sector.GetObjects(typeof(IObject))) {
         *                              if (selectedArea.Contains(Object.Area)) {
         *                                      if (selectedObjects.Contains(Object))
         *                                              selectedObjects.Remove(Object);
         *                                      else
         *                                              selectedObjects.Add(Object);
         *                              }
         *                      }
         *                      if (selectedObjects.Count == 1)	{		//show properties
         *                              MakeActive(selectedObjects[0]);
         *                              //application.EditProperties(selectedObjects[0], selectedObjects[0].GetType().Name);
         *                      } else {
         *                              activeObject = null;					//resizing is unavailable if more objects are selected
         *                              controlPoints.Clear();
         *                              application.EditProperties(selectedObjects, "Group of " + selectedObjects.Count.ToString() + " objects");
         *                      }
         *                      Redraw();
         *              }
         *      }
         * }*/
    }
 public Command1(MultiCommand rollbackMultiCommand = null) : base(rollbackMultiCommand)
 {
 }
Beispiel #19
0
        // it makes some sense in demonstration purposes...
        private MultiCommand BuildCommands()
        {
            #region Here we are creating all commands

            var fileGroup           = new MultiCommand(BuildTestListOfCommands("file"));
            var dataSourceGroup     = new MultiCommand(BuildTestListOfCommands("dataSource"));
            var otherTypeGroup      = new MultiCommand(BuildTestListOfCommands("otherType"));
            var serviceCommandGroup = new MultiCommand(BuildTestListOfCommands("service"));

            var multiCommand = new MultiCommand(new List <ICommand>()
            {
                fileGroup,
                dataSourceGroup,
                otherTypeGroup,
                serviceCommandGroup
            });
            #endregion

            #region here we'll set strategies to commands
            // FULLROLLBACK
            var fullRollbackStrategy = new RollbackOneStrategy(multiCommand);
            // ONECOMMMANDROLLBACK
            // this one will be executed by default if no strategy is selected

            // Certain GROUPROLLBACK (ONLY COMMANDS OF A SPECIFIC GROUP)
            var fileGroupRollBackStrategy    = new RollbackOneStrategy(fileGroup);
            var serviceGroupRollBackStrategy = new RollbackOneStrategy(serviceCommandGroup);
            var dataGroupRollBackStrategy    = new RollbackOneStrategy(dataSourceGroup);
            var otherGroupRollBackStrategy   = new RollbackOneStrategy(otherTypeGroup);

            // COMBINATIONSOFCOMMANDSINDIFFERENTGROUPSROLLBACK | MORETHANONECOMMANDROLLBACK
            var customRollback1 = new RollbackManyStrategy(new List <ICommand>
            {
                // rollback 2 file commands
                fileGroup.CommandAt(0),
                otherTypeGroup.CommandAt(2)
            });

            var customRollback2 = new RollbackManyStrategy(new List <ICommand>
            {
                fileGroup.CommandAt(1),
                fileGroup.CommandAt(2),
                // rollback 2 dataSource commands
                dataSourceGroup.CommandAt(1),
                dataSourceGroup.CommandAt(4),
                // and we can also rollback the whole group of Service commands (if they are executed)
                otherTypeGroup
            });

            // NONEROLLBACKSTRATEGY
            // and this one can be used if we do not need to rollback a certain command if it ever fails
            var noneRollbackCommand = new RollbackNoneStrategy();
            #endregion

            #region Here we'll set up strategies for certain commands
            (serviceCommandGroup.CommandAt(3) as BaseCommand).SetRollbackStrategy(fullRollbackStrategy);

            (dataSourceGroup.CommandAt(0) as BaseCommand).SetRollbackStrategy(fileGroupRollBackStrategy);
            (serviceCommandGroup.CommandAt(4) as BaseCommand).SetRollbackStrategy(serviceGroupRollBackStrategy);
            (dataSourceGroup.CommandAt(3) as BaseCommand).SetRollbackStrategy(dataGroupRollBackStrategy);
            (otherTypeGroup.CommandAt(4) as BaseCommand).SetRollbackStrategy(otherGroupRollBackStrategy);

            (serviceCommandGroup.CommandAt(2) as BaseCommand).SetRollbackStrategy(customRollback1);
            (serviceCommandGroup.CommandAt(0) as BaseCommand).SetRollbackStrategy(customRollback2);

            #endregion

            return(multiCommand);
        }
 private void OnClone(object o, EventArgs args)
 {
     List<Command> commands = new List<Command>();
     Command command = null;
     foreach (IGameObject selectedObject in selectedObjects)
         try {
             object newObject = ((ICloneable) selectedObject).Clone();
             IGameObject gameObject = (IGameObject) newObject;
             sector.Add(gameObject, gameObject.GetType().Name + " (clone)", ref command);
             commands.Add(command);
         } catch(Exception e) {
             ErrorDialog.Exception(e);
         }
     if (commands.Count > 1)						//If there are more items, then create multiCommand, otherwise keep single one
         command = new MultiCommand("Cloned " + commands.Count.ToString() + " objects", commands);
     UndoManager.AddCommand(command);
 }
    public void OnMouseButtonRelease(Vector mousePos, int button, ModifierType Modifiers)
    {
        if (button == 1) {
            switch(state)
            {
            case State.NONE:
                break;

            case State.SELECTING:
                // Add objects in the selected area to selectedObjects

                                // Flush selected objects if it's not CTRL+select
                if ((Modifiers & ModifierType.ControlMask) == 0)
                {
                    selectedObjects.Clear();
                }

                RectangleF selectedArea = new RectangleF(pressPoint, mousePos);
                foreach(IObject Object in sector.GetObjects(typeof(IObject)))
                {
                    if (selectedArea.Contains(Object.Area))
                    {
                        if (selectedObjects.Contains(Object))
                        {
                            selectedObjects.Remove(Object);
                        }
                        else
                        {
                            selectedObjects.Add(Object);
                        }
                    }
                }

                if (selectedObjects.Count == 1)
                {
                    //show properties
                    MakeActive(selectedObjects[0]);
                    //application.EditProperties(selectedObjects[0], selectedObjects[0].GetType().Name);
                }
                else
                {
                    // resizing is unavailable if more objects are selected
                    activeObject = null;
                    controlPoints.Clear();
                    application.EditProperties(selectedObjects, "Group of " + selectedObjects.Count.ToString() + " objects");
                }
                break;

            case State.DRAGGING:
                // Finish dragging and register undo command
                Vector newPosition = new Vector (activeObject.Area.Left, activeObject.Area.Top);//Area is up to date, no need to calculate it again
                if (newPosition != originalPosition) // FIXME: is that ok in C# or do we compare the reference here?
                {
                    Vector totalShift = newPosition - originalPosition;
                    MultiCommand multi_command = new MultiCommand("Moved " + selectedObjects.Count + " objects");

                    foreach (IObject selectedObject in selectedObjects)
                    {
                        // copy new area to variable
                        RectangleF oldArea = selectedObject.Area;

                        // and shift it to it's oreginal location
                        oldArea.Move(-totalShift);

                        multi_command.Add(new ObjectAreaChangeCommand(
                                      "Moved Object " + selectedObject,
                                      oldArea,
                                      selectedObject.Area, // We are already on new area
                                      selectedObject));
                    }

                    UndoManager.AddCommand(multi_command);
                }

                break;
            }

            state = State.NONE;
            Redraw();
        }

        /*if (false)
        {
            if (button == 1 && state == State.DRAGGING) {
                state = State.NONE;

                Vector newPosition = new Vector (activeObject.Area.Left, activeObject.Area.Top);//Area is up to date, no need to calculate it again
                if (originalPosition != newPosition) {
                    Command command = null;
                    List<Command> commandList = new List<Command>();
                    Vector totalShift = newPosition - originalPosition;
                    foreach (IObject selectedObject in selectedObjects) {
                        RectangleF oldArea = selectedObject.Area;			//copy new area to variable
                        oldArea.Move(-totalShift);					//	and shift it to it's oreginal location
                        command = new ObjectAreaChangeCommand(
                            "Moved Object " + selectedObject,
                            oldArea,
                            selectedObject.Area,					//We are already on new area
                            selectedObject);
                        commandList.Add(command);
                    }

                    if (commandList.Count > 1)			//If there are more items, then create multiCommand, otherwise keep single one
                        command = new MultiCommand("Moved " + commandList.Count.ToString() + " objects", commandList);

                    UndoManager.AddCommand(command);		//All commands are already done.. no need to do that again

                    Redraw();
                } else {						//L click + no CTRL => select single object under cursor
                    if ((Modifiers & ModifierType.ControlMask) == 0) {
                        MakeActive(FindObjectAt(mousePos));
                        Redraw();
                    }
                }
            }
            if (button == 3 && state == State.SELECTING) {
                state = State.NONE;
                if ((pressPoint - mousePos).Norm() < 10) {		//for moves within 10px circle around pressPoint show popup menu
                    bool hit = false;
                    foreach (IObject selectedObject in selectedObjects) {
                        hit |= selectedObject.Area.Contains(mousePos);
                    }
                    if (!hit) {
                        MakeActive(FindObjectAt(mousePos));
                        Redraw();
                    }
                    if (hit || activeObject != null)		//Show popup menu when clicked on object (from selection or new one)
                        PopupMenu(button);
                } else {
                    if ((Modifiers & ModifierType.ControlMask) == 0)	//Flush selected objects if it's not CTRL+select
                        selectedObjects.Clear();

                    RectangleF selectedArea = new RectangleF(pressPoint, mousePos);
                    foreach(IObject Object in sector.GetObjects(typeof(IObject))) {
                        if (selectedArea.Contains(Object.Area)) {
                            if (selectedObjects.Contains(Object))
                                selectedObjects.Remove(Object);
                            else
                                selectedObjects.Add(Object);
                        }
                    }
                    if (selectedObjects.Count == 1)	{		//show properties
                        MakeActive(selectedObjects[0]);
                        //application.EditProperties(selectedObjects[0], selectedObjects[0].GetType().Name);
                    } else {
                        activeObject = null;					//resizing is unavailable if more objects are selected
                        controlPoints.Clear();
                        application.EditProperties(selectedObjects, "Group of " + selectedObjects.Count.ToString() + " objects");
                    }
                    Redraw();
                }
            }
        }*/
    }
 public MultiCommandAttribute()
 {
     Entity = new MultiCommand(Entity);
 }
Beispiel #23
0
 public FailCommand(MultiCommand rollbackMultiCommand = null) : base(rollbackMultiCommand)
 {
 }
 private void OnDelete(object o, EventArgs args)
 {
     List<IObject> Objects = new List<IObject>(selectedObjects);	//OnObjectRemoved() tries to access selectedObject and that's not possible during "foreach"
     List<Command> commands = new List<Command>();
     Command command = null;
     foreach (IGameObject selectedObject in Objects) {
         sector.Remove(selectedObject, ref command);
         commands.Add(command);
     }
     if (commands.Count > 1)						//If there are more items, then create multiCommand, otherwise keep single one
         command = new MultiCommand("Deleted " + commands.Count.ToString() + " objects", commands);
     UndoManager.AddCommand(command);
 }
Beispiel #25
0
        /// <summary>
        /// Create a new instance of this model
        /// </summary>
        /// <param name="window"></param>
        public MainWindowModel(Window window) : base(window, true)
        {
            IconVisible        = false;
            updateSearched     = false;
            CloseWindowCommand = new CloseApplicationCommand();

            SetWindowTitle();

            object dockArea = window.FindName("DP_ContentDock");

            if (dockArea is DockPanel panel)
            {
                ISettingFactory settingFactory = new WpfPropertySettingManagerFactory();
                SettingManager  wpfSettings    = settingFactory.GetSettingsManager();

                contentDock = panel;

                BrowserUserControl localBrowser     = new BrowserUserControl(string.Empty);
                ICommand           openLocalBrowser = new MultiCommand(new List <ICommand>()
                {
                    new OpenControlToPanel(contentDock, localBrowser, false),
                    new ChangeBrowserContentCommand(localBrowser)
                });

                BrowserUserControl remoteBrowser     = new BrowserUserControl(string.Empty, new RemoteDocumentManagerFactory(new TimeSpan(0, 30, 0)));
                ICommand           openRemoteBrowser = new MultiCommand(new List <ICommand>()
                {
                    new OpenControlToPanel(contentDock, remoteBrowser, false),
                    new ChangeBrowserContentCommand(remoteBrowser)
                });

                OpenNewsCommand      = openRemoteBrowser;
                OpenChangelogCommand = openLocalBrowser;
                OpenDisclamerCommand = openLocalBrowser;
                OpenAboutCommand     = openLocalBrowser;
                OpenLicenseCommand   = openLocalBrowser;

                OpenHDPatchCommand = new OpenControlToPanel(contentDock, new ComingSoonControl());
                OpenMapCommand     = new OpenControlToPanel(contentDock, new MapUserControl());
                LaunchGameCommand  = new OpenControlToPanel(contentDock, new PatchVersionSelectionUserControl(window));
                OpenSettingCommand = new OpenControlToPanel(contentDock, new SettingsUserControl(currentWindow));
                ComingSoonCommand  = new OpenControlToPanel(contentDock, new ComingSoonControl());

                ReportIssueCommand = new OpenLinkCommand(wpfSettings.GetValue <string>("ReportIssueLink"));
                OpenEditorCommand  = new StartEditorCommand(settingManager);
                OpenSettlersConfigurationCommand = new StartSettlersConfigCommand(settingManager);
                OpenSavesFolderCommand           = new OpenFolderCommand(Environment.GetFolderPath(
                                                                             Environment.SpecialFolder.MyDocuments)
                                                                         + "/TheSettlers4/Save/"
                                                                         );

                string gameFolder    = settingManager.GetValue <string>("GameFolder");
                string textureChange = gameFolder + "Texturenwechsler.bat";
                OpenTextureChangerCommand = new StartProgramCommand(textureChange);

                OpenNewsCommand.Execute("News.md");
            }

            ChangeGroupVisiblity    = new ToggleSubGroupVisibilityCommand(currentWindow);
            window.ContentRendered += (sender, data) =>
            {
                if (updateSearched)
                {
                    return;
                }
                updateSearched = true;
                CheckForUpdateIfNeeded(window);
            };
        }
Beispiel #26
0
 public void StopCurrentMultiCommand()
 {
     commandQueue.Clear ();
     currentMultiCommand = null;
     for (int i = 0; i < units.Count; i++) {
         units [i].StopCurrentCommand ();
     }
 }
Beispiel #27
0
 protected BaseCommand(MultiCommand rollbackMultiCommand = null)
 {
     this.rollbackMultiCommand = rollbackMultiCommand;
 }