/// <summary> /// Function for the Form to interact with the input manager. /// The inputEvent should be a function in the InputStateManager. /// </summary> /// <param name="key">if a key was not pressed this event, null, else char</param> public void RunInputEvent(Func <StateControls, bool> inputEvent) { char?key = getKey(); var stateControls = MakeControls(key, getModifiers()); bool toRefresh = inputEvent(stateControls); //Process [CircuitActions] if (stateControls.CircuitActionsOutput != null) { rightClickMenu.Items.Clear(); foreach (var action in stateControls.CircuitActionsOutput) { //Creates a dropdown menu item which, when clicked, will invoke the action and refresh the drawing panel void actionEvent(object s, EventArgs e) => stateControls.CircuitActionsOutput.InvokeActionAndRefresh(stateControls.State, drawingPanel.Refresh, action); var item = new ToolStripMenuItem(action.Name, null, actionEvent) { ShortcutKeyDisplayString = action.Hotkey.GetHotkeyString(action.Modifiers), ShowShortcutKeys = true }; rightClickMenu.Items.Add(item); } rightClickMenu.Show(drawingPanel, drawingPanel.PointToClient(Cursor.Position)); } //Process [CircuitProperties] if (stateControls.CircuitPropertiesOutput != null) { circuitPropertyBox.Items.Clear(); circuitPropertyTextBox.Visible = false; circuitPropertyValueBox.Visible = true; circuitPropertyValueBox.Items.Clear(); CircuitProperties = stateControls.CircuitPropertiesOutput; foreach (var property in CircuitProperties) { circuitPropertyBox.Items.Add(property.Key); } } if (toRefresh) { drawingPanel.Refresh(); } }
/// <summary> /// Returns a list of updated CircuitProperties to be passed into the StateControls /// </summary> public CircuitPropertyCollection GetUpdatedCircuitProperties(Action <string> registerChange) { if (!selections.SetEquals(oldSelections)) { CircuitPropertyCollection circuitProperties = CircuitPropertyCollection.Empty; oldSelections.Clear(); oldSelections.UnionWith(selections); foreach (var selection in selections) { circuitProperties.Intersect(CircuitAttributes.GetProperties(selection, registerChange)); } return(circuitProperties); } return(null); }
/// <summary> /// Propogates hotkey through all selected CircuitObjects and runs any valid [CircuitProperties] /// </summary> protected bool ExecuteHotkey(BoardState state, char?key, Modifier Modifiers, Action <string> registerChange, out CircuitPropertyCollection circuitProperties) { CircuitActionCollection actions = CircuitActionCollection.Empty; //Find all actions foreach (var selection in selections) { actions.UnionWith(CircuitAttributes.GetActions(selection, RefreshSelections, registerChange)); } char hotkey = (char)key; //Execute matches bool toRefresh = actions.InvokeHotkeyActions(state, hotkey, Modifiers); circuitProperties = GetUpdatedCircuitProperties(registerChange); return(toRefresh); }