public SelectionViewModel(SelectionInput <T> input) : base(input.Title, input.ContentHeader, input.Label) { Items = new ObservableCollection <T>(input.Items); SelectedItem = input.SelectedItem; DisplayMemberPath = input.DisplayMemberPath; }
public InputManager() { ControlInput = new ControlInput(KeyboardAdapter); PlayerInputs = new List <PlayerInput>(); TextInput = new TextEditInput(KeyboardAdapter); SelectInput = new SelectionInput(KeyboardAdapter); }
public StorageBarcodeViewModel SelectStorageBarcode(object parentViewModel, List <StorageBarcodeViewModel> barcodes) { var selectedBarcode = barcodes.First(); var input = new SelectionInput <StorageBarcodeViewModel> { Title = "Barcodes - Import", ContentHeader = "Select barcode", Label = "Barcode:", Items = barcodes, SelectedItem = selectedBarcode, DisplayMemberPath = "Title" }; var dataContext = new SelectionViewModel <StorageBarcodeViewModel>(input); var window = new SelectionWindow(dataContext) { Owner = GetWindowWithDataContext(parentViewModel) }; window.ShowDialog(); return(dataContext.Result); }
public WorkspaceViewModel SelectBarcodesWorkspace(IEnumerable <WorkspaceViewModel> workspaces) { var selectedWorkspace = workspaces.First(); var input = new SelectionInput <WorkspaceViewModel> { Title = "Barcodes - Workspaces", ContentHeader = "Select desired workspace", Label = "Workspace:", Items = workspaces, SelectedItem = selectedWorkspace, DisplayMemberPath = "Name" }; var dataContext = new SelectionViewModel <WorkspaceViewModel>(input); var window = new SelectionWindow(dataContext) { Owner = MainWindow }; window.ShowDialog(); return(dataContext.Result); }
public void ProcessInput(ActionMapInput input, ConsumeControlDelegate consumeControl) { if (this.GetManipulatorDragState()) { return; } m_SelectionInput = (SelectionInput)input; var multiSelectControl = m_SelectionInput.multiSelect; if (this.GetDeviceType() == DeviceType.Vive) { multiSelectControl = m_SelectionInput.multiSelectAlt; } if (multiSelectControl.wasJustPressed) { var realTime = Time.realtimeSinceStartup; if (UIUtils.IsDoubleClick(realTime - m_LastMultiSelectClickTime)) { foreach (var linkedObject in linkedObjects) { var selectionTool = (SelectionTool)linkedObject; selectionTool.m_MultiSelect = !selectionTool.m_MultiSelect; this.HideTooltip(selectionTool); } if (m_MultiSelect) { this.ShowTooltip(this); } } m_LastMultiSelectClickTime = realTime; } this.SetDefaultRayColor(rayOrigin, m_MultiSelect ? m_MultiselectRayColor : m_NormalRayColor); if (this.IsSharedUpdater(this)) { this.SetManipulatorsVisible(this, !m_MultiSelect); m_SelectionHoverGameObjects.Clear(); foreach (var linkedObject in linkedObjects) { var selectionTool = (SelectionTool)linkedObject; selectionTool.m_HasDirectHover = false; // Clear old hover state if (selectionTool.m_BlockSelect) { continue; } if (!selectionTool.IsRayActive()) { continue; } var selectionRayOrigin = selectionTool.rayOrigin; var hover = this.GetFirstGameObject(selectionRayOrigin); if (!selectionTool.GetSelectionCandidate(ref hover)) { continue; } if (hover) { GameObject lastHover; if (m_HoverGameObjects.TryGetValue(selectionRayOrigin, out lastHover) && lastHover != hover) { this.SetHighlight(lastHover, false, selectionRayOrigin); } m_SelectionHoverGameObjects[selectionRayOrigin] = hover; m_HoverGameObjects[selectionRayOrigin] = hover; } } var directSelection = this.GetDirectSelection(); // Unset highlight old hovers k_TempHovers.Clear(); foreach (var kvp in m_HoverGameObjects) { k_TempHovers[kvp.Key] = kvp.Value; } foreach (var kvp in k_TempHovers) { var directRayOrigin = kvp.Key; var hover = kvp.Value; if (!directSelection.ContainsKey(directRayOrigin) && !m_SelectionHoverGameObjects.ContainsKey(directRayOrigin)) { this.SetHighlight(hover, false, directRayOrigin); m_HoverGameObjects.Remove(directRayOrigin); } } // Find new hovers foreach (var kvp in directSelection) { var directRayOrigin = kvp.Key; var directHoveredObject = kvp.Value; var directSelectionCandidate = this.GetSelectionCandidate(directHoveredObject, true); // Can't select this object (it might be locked or static) if (directHoveredObject && !directSelectionCandidate) { if (directHoveredObject != null) { this.SetHighlight(directHoveredObject, false); } continue; } if (directSelectionCandidate) { directHoveredObject = directSelectionCandidate; } if (!this.CanGrabObject(directHoveredObject, directRayOrigin)) { continue; } var grabbingNode = this.RequestNodeFromRayOrigin(directRayOrigin); var selectionTool = linkedObjects.Cast <SelectionTool>().FirstOrDefault(linkedObject => linkedObject.node == grabbingNode); if (selectionTool == null) { continue; } if (selectionTool.m_BlockSelect) { continue; } GameObject lastHover; if (m_HoverGameObjects.TryGetValue(directRayOrigin, out lastHover) && lastHover != directHoveredObject) { this.SetHighlight(lastHover, false, directRayOrigin); } if (!selectionTool.IsDirectActive()) { m_HoverGameObjects.Remove(directRayOrigin); this.SetHighlight(directHoveredObject, false, directRayOrigin); continue; } // Only overwrite an existing selection if it does not contain the hovered object // In the case of multi-select, only add, do not remove if (selectionTool.m_SelectionInput.select.wasJustPressed && !Selection.objects.Contains(directHoveredObject)) { this.SelectObject(directHoveredObject, directRayOrigin, m_MultiSelect); } m_HoverGameObjects[directRayOrigin] = directHoveredObject; selectionTool.m_HasDirectHover = true; } // Set highlight on new hovers foreach (var hover in m_HoverGameObjects) { this.SetHighlight(hover.Value, true, hover.Key); } } if (!m_HasDirectHover) { HideDirectSelectFeedback(); } else if (m_DirectSelectFeedback.Count == 0) { ShowDirectSelectFeedback(); } GameObject hoveredObject = null; var rayActive = IsRayActive(); if (rayActive) { // Need to call GetFirstGameObject a second time because we do not guarantee shared updater executes first hoveredObject = this.GetFirstGameObject(rayOrigin); if (hovered != null) { hovered(hoveredObject, rayOrigin); } GetSelectionCandidate(ref hoveredObject); if (hoveredObject && this.GetVRPlayerObjects().Contains(hoveredObject)) { hoveredObject = null; } } if (!hoveredObject) { HideSelectFeedback(); } else if (m_SelectFeedback.Count == 0) { ShowSelectFeedback(); } var pointerPosition = this.GetPointerPosition(rayOrigin); // Capture object on press var select = m_SelectionInput.select; if (select.wasJustPressed) { m_SelectStartPosition = pointerPosition; // Ray selection only if ray is visible m_PressedObject = hoveredObject; } if (select.isHeld) { var startToEnd = pointerPosition - m_SelectStartPosition; var visuals = m_Preferences.sphereMode ? m_BlockSelectSphere : m_BlockSelectCube; var distance = startToEnd.magnitude; if (!m_BlockSelect && distance > k_BLockSelectDragThreshold * this.GetViewerScale()) { m_BlockSelect = true; visuals.SetActive(true); m_PressedObject = null; this.AddRayVisibilitySettings(rayOrigin, this, false, true); this.SetUIBlockedForRayOrigin(rayOrigin, true); } if (m_BlockSelect) { this.SetManipulatorsVisible(this, false); } //TODO: use hashsets to only unset highlights for removed objects foreach (var hover in m_BlockSelectHoverGameObjects) { this.SetHighlight(hover, false, rayOrigin); } m_BlockSelectHoverGameObjects.Clear(); var visualsTransform = visuals.transform; if (m_Preferences.sphereMode) { visualsTransform.localScale = Vector3.one * distance * 2; visualsTransform.position = m_SelectStartPosition; this.CheckSphere(m_SelectStartPosition, distance, m_BlockSelectHoverGameObjects, ignoreList); } else { visualsTransform.localScale = startToEnd; visualsTransform.position = m_SelectStartPosition + startToEnd * 0.5f; this.CheckBounds(m_BlockSelectCubeRenderer.bounds, m_BlockSelectHoverGameObjects, ignoreList); } foreach (var hover in m_BlockSelectHoverGameObjects) { this.SetHighlight(hover, true, rayOrigin); } if (m_BlockSelect) { consumeControl(select); } } // Make selection on release if (select.wasJustReleased) { if (m_BlockSelect) { if (!m_MultiSelect) { this.SetManipulatorsVisible(this, true); Selection.activeGameObject = null; } this.SelectObjects(m_BlockSelectHoverGameObjects, rayOrigin, m_MultiSelect); foreach (var hover in m_BlockSelectHoverGameObjects) { if (hover != null) { this.SetHighlight(hover, false, rayOrigin); } } this.ResetDirectSelectionState(); } else if (rayActive) { if (m_PressedObject == hoveredObject) { this.SelectObject(m_PressedObject, rayOrigin, m_MultiSelect, true); this.ResetDirectSelectionState(); if (m_PressedObject != null) { this.SetHighlight(m_PressedObject, false, rayOrigin); } } if (m_PressedObject) { consumeControl(select); } } this.SetUIBlockedForRayOrigin(rayOrigin, false); this.RemoveRayVisibilitySettings(rayOrigin, this); (m_Preferences.sphereMode ? m_BlockSelectSphere : m_BlockSelectCube).SetActive(false); m_PressedObject = null; m_BlockSelect = false; } }
public void ProcessInput(ActionMapInput input, ConsumeControlDelegate consumeControl) { if (this.GetManipulatorDragState()) { return; } m_SelectionInput = (SelectionInput)input; var multiSelectControl = m_SelectionInput.multiSelect; if (proxyType == typeof(ViveProxy)) { multiSelectControl = m_SelectionInput.multiSelectAlt; } if (multiSelectControl.wasJustPressed) { var realTime = Time.realtimeSinceStartup; if (UIUtils.IsDoubleClick(realTime - m_LastMultiSelectClickTime)) { foreach (var linkedObject in linkedObjects) { var selectionTool = (SelectionTool)linkedObject; selectionTool.m_MultiSelect = !selectionTool.m_MultiSelect; this.HideTooltip(selectionTool); } if (m_MultiSelect) { this.ShowTooltip(this); } consumeControl(multiSelectControl); } m_LastMultiSelectClickTime = realTime; } this.SetDefaultRayColor(rayOrigin, m_MultiSelect ? m_MultiselectRayColor : m_NormalRayColor); if (this.IsSharedUpdater(this)) { this.SetManipulatorsVisible(this, !m_MultiSelect); var directSelection = this.GetDirectSelection(); m_SelectionHoverGameObjects.Clear(); foreach (var linkedObject in linkedObjects) { var selectionTool = (SelectionTool)linkedObject; var selectionRayOrigin = selectionTool.rayOrigin; if (!selectionTool.IsRayActive()) { continue; } var hover = this.GetFirstGameObject(selectionRayOrigin); if (!selectionTool.GetSelectionCandidate(ref hover)) { continue; } if (hover) { GameObject lastHover; if (m_HoverGameObjects.TryGetValue(selectionRayOrigin, out lastHover) && lastHover != hover) { this.SetHighlight(lastHover, false, selectionRayOrigin); } m_SelectionHoverGameObjects[selectionRayOrigin] = hover; m_HoverGameObjects[selectionRayOrigin] = hover; } } // Unset highlight old hovers var hovers = new Dictionary <Transform, GameObject>(m_HoverGameObjects); foreach (var kvp in hovers) { var directRayOrigin = kvp.Key; var hover = kvp.Value; if (!directSelection.ContainsKey(directRayOrigin) && !m_SelectionHoverGameObjects.ContainsKey(directRayOrigin)) { this.SetHighlight(hover, false, directRayOrigin); m_HoverGameObjects.Remove(directRayOrigin); } } // Find new hovers foreach (var kvp in directSelection) { var directRayOrigin = kvp.Key; var directHoveredObject = kvp.Value; var directSelectionCandidate = this.GetSelectionCandidate(directHoveredObject, true); // Can't select this object (it might be locked or static) if (directHoveredObject && !directSelectionCandidate) { continue; } if (directSelectionCandidate) { directHoveredObject = directSelectionCandidate; } if (!this.CanGrabObject(directHoveredObject, directRayOrigin)) { continue; } var grabbingNode = this.RequestNodeFromRayOrigin(directRayOrigin); var selectionTool = linkedObjects.Cast <SelectionTool>().FirstOrDefault(linkedObject => linkedObject.node == grabbingNode); if (selectionTool == null) { continue; } if (!selectionTool.IsDirectActive()) { m_HoverGameObjects.Remove(directRayOrigin); this.SetHighlight(directHoveredObject, false, directRayOrigin); continue; } // Only overwrite an existing selection if it does not contain the hovered object // In the case of multi-select, only add, do not remove if (selectionTool.m_SelectionInput.select.wasJustPressed && !Selection.objects.Contains(directHoveredObject)) { this.SelectObject(directHoveredObject, directRayOrigin, m_MultiSelect); } GameObject lastHover; if (m_HoverGameObjects.TryGetValue(directRayOrigin, out lastHover) && lastHover != directHoveredObject) { this.SetHighlight(lastHover, false, directRayOrigin); } m_HoverGameObjects[directRayOrigin] = directHoveredObject; } // Set highlight on new hovers foreach (var hover in m_HoverGameObjects) { this.SetHighlight(hover.Value, true, hover.Key); } } if (!IsRayActive()) { return; } // Need to call GetFirstGameObject a second time because we do not guarantee shared updater executes first var hoveredObject = this.GetFirstGameObject(rayOrigin); if (hovered != null) { hovered(hoveredObject, rayOrigin); } if (!GetSelectionCandidate(ref hoveredObject)) { return; } // Capture object on press if (m_SelectionInput.select.wasJustPressed) { m_PressedObject = hoveredObject; } // Select button on release if (m_SelectionInput.select.wasJustReleased) { if (m_PressedObject == hoveredObject) { this.SelectObject(m_PressedObject, rayOrigin, m_MultiSelect, true); this.ResetDirectSelectionState(); if (m_PressedObject != null) { this.SetHighlight(m_PressedObject, false, rayOrigin); } } if (m_PressedObject) { consumeControl(m_SelectionInput.select); } m_PressedObject = null; } }