public static void Update()
        {
            KeyboardState state = Keyboard.GetState();

            previous = current;
            current  = new KeyboardStatus(state);
        }
Exemple #2
0
 protected override void OnCreate(Bundle savedInstanceState)
 {
     base.OnCreate(savedInstanceState);
     KeyboardStatus.Subscribe(this);
     KeyboardStatus.KeyboardStatusChangeEvent += OnKeyboardStatusChanged;
     Window.DecorView.ViewTreeObserver.AddOnGlobalLayoutListener(this);  // Why??
     ViewModel?.ViewCreated();
 }
Exemple #3
0
 protected override void OnDestroy()
 {
     base.OnDestroy();
     KeyboardStatus.KeyboardStatusChangeEvent -= OnKeyboardStatusChanged;
     KeyboardStatus.Unsubscribe(this);
     UnBindEventHandlers();
     ViewModel?.ViewDestroyed();
     Window.DecorView.ViewTreeObserver.RemoveOnGlobalLayoutListener(this);
 }
Exemple #4
0
        public void Update( )
        {
            IEnumerable <ItemEditor> allSelectedEditors = selectedEditors( ).ToList(  );

            Vector2 newDistance = MouseStatus.WorldPosition - allSelectedEditors.First().ItemProperties.Position;

            float factor = newDistance.Length( ) / _canvas.GrabPoint.Length( );

            int i = 0;

            allSelectedEditors.Where(si => si.CanScale).ForEach(
                thingToScale =>
            {
                //todo: reimplement texture
                //if (selitem is TextureItem)
                //{
                //    _mainForm.SetToolStripStatusLabel1("Hold down [X] or [Y] to limit scaling to the according dimension.");
                //}

                Vector2 newscale = _canvas.ScalesBeforeUserInteraction[i];
                if (!KeyboardStatus.IsKeyDown(Keys.Y))
                {
                    newscale.X = _canvas.ScalesBeforeUserInteraction[i].X * (((factor - 1.0f) * 0.5f) + 1.0f);
                }

                if (!KeyboardStatus.IsKeyDown(Keys.X))
                {
                    newscale.Y = _canvas.ScalesBeforeUserInteraction[i].Y * (((factor - 1.0f) * 0.5f) + 1.0f);
                }

                thingToScale.Scale = newscale;

                if (KeyboardStatus.IsKeyDown(Keys.LeftControl))
                {
                    Vector2 scale;
                    scale.X            = (float)Math.Round(thingToScale.Scale.X * 10) / 10;
                    scale.Y            = (float)Math.Round(thingToScale.Scale.Y * 10) / 10;
                    thingToScale.Scale = scale;
                }
                i++;
            });

            IoC.Model.NotifyChanged(allSelectedEditors);

            if (MouseStatus.IsNewRightMouseButtonRelease( ) || KeyboardStatus.IsNewKeyRelease(Keys.D3))
            {
                _canvas.SetModeToIdle(  );

                ObjectFactory.GetInstance <IMemento>().EndCommand( );
            }

            return;
        }
Exemple #5
0
        void handleInputWhenAddingAnEntity( )
        {
            //mef: this might need to go back to the main Update method
            if (Constants.Instance.SnapToGrid || KeyboardStatus.IsKeyDown(Keys.G))
            {
                MouseStatus.WorldPosition = SnapToGrid(MouseStatus.WorldPosition);
            }

            if (MouseStatus.IsNewRightMouseButtonClick( ) || KeyboardStatus.IsNewKeyPress(Keys.D3))
            {
                //mef: delegate to current primitive plugin
                if (_entityCreation.StartedCreating)
                {
                    _entityCreation.StartedCreating = false;
                    _entityCreation.ClearCurrentEditor( );

                    //mef: implement
                    //switch (_currentPrimitiveName)
                    //{
                    //    case PrimitiveType.Rectangle:
                    //        //_mainForm.SetToolStripStatusLabel1(Resources.Rectangle_Entered);
                    //        break;
                    //    case PrimitiveType.Circle:
                    //        //_mainForm.SetToolStripStatusLabel1(Resources.Circle_Entered);
                    //        break;
                    //    case PrimitiveType.Path:
                    //        //_mainForm.SetToolStripStatusLabel1(Resources.Path_Entered);
                    //        break;
                    //}
                }
                else
                {
                    destroyPrimitiveBrush( );
                    _entityCreation.StartedCreating = false;
                }
            }

            if (_entityCreation.StartedCreating)
            {
                _entityCreation.CurrentEditor.UserInteractionDuringCreation( );

                return;
            }

            if (MouseStatus.IsNewLeftMouseButtonClick( ) || KeyboardStatus.IsNewKeyPress(Keys.D3))
            {
                if (_entityCreation.StartedCreating == false)
                {
                    _entityCreation.StartedCreating = true;
                    _entityCreation.CurrentEditor   = buildPrimitiveEditorReadyForDesigning(_entityCreation.CreationProperties);
                }
            }
        }
Exemple #6
0
        void handleInput(GameTime gameTime)
        {
            KeyboardStatus.Update(Keyboard.GetState( ));

            MouseStatus.Update(Mouse.GetState( ), Camera);

            handleCameraControls(gameTime);


            if (_inputActionLookup.ContainsKey(_userActionInEditor))
            {
                _inputActionLookup[_userActionInEditor]( );
            }
        }
        public void Update( )
        {
            int i = 0;

            IEnumerable <ItemEditor> allSelectedEditors = selectedEditors( ).ToList(  );

            foreach (ItemEditor eachSelectedEditor in allSelectedEditors)
            {
                _newPosition = _canvas.PositionsBeforeUserInteraction[i] + MouseStatus.WorldPosition - _canvas.GrabPoint;

                if (Constants.Instance.SnapToGrid || KeyboardStatus.IsKeyDown(Keys.G))
                {
                    _newPosition = _canvas.SnapToGrid(_newPosition);
                }

                //_editor.SnapPoint.Visible = false ;

                eachSelectedEditor.SetPosition(_newPosition);

                i++;
            }

            IoC.Model.NotifyChanged(allSelectedEditors);

            if (MouseStatus.IsNewLeftMouseButtonReleased( ) || KeyboardStatus.IsNewKeyRelease(Keys.D1))
            {
                foreach (ItemEditor eachSelectedEditor in allSelectedEditors)
                {
                    eachSelectedEditor.OnMouseButtonUp(MouseStatus.WorldPosition);
                }

                bool isMoving = _canvas.CurrentUserAction == UserActionInEditor.MovingItems;
                _canvas.SetModeToIdle( );

                var samePoint = MouseStatus.WorldPosition == _canvas.GrabPoint;

                var memento = ObjectFactory.GetInstance <IMemento>();

                if (samePoint && isMoving)
                {
                    memento.AbortCommand( );
                }
                else
                {
                    memento.EndCommand( );
                }
            }
        }
        public override void UserInteractionDuringCreation( )
        {
            _properties.Width  = MouseStatus.WorldPosition.X - _properties.Position.X;
            _properties.Height = MouseStatus.WorldPosition.Y - _properties.Position.Y;

            if (KeyboardStatus.IsKeyDown(Keys.LeftControl))
            {
                _properties.Width = _properties.Height;
            }

            if (MouseStatus.IsNewLeftMouseButtonClick(  ))
            {
                PreviewEndedReadyForCreation(this, EventArgs.Empty);
            }

            WhenUpdatedByUi(  );
        }
Exemple #9
0
        public void SetMousePosition(int screenx, int screeny)
        {
            Vector2 maincameraposition = Camera.Position;

            if (getLevel( ).ActiveLayer != null)
            {
                Camera.Position *= getLevel( ).ActiveLayer.ScrollSpeed;
            }

            MouseStatus.WorldPosition = Vector2.Transform(new Vector2(screenx, screeny), Matrix.Invert(Camera.Matrix));

            if (Constants.Instance.SnapToGrid || KeyboardStatus.IsKeyDown(Keys.G))
            {
                MouseStatus.WorldPosition = SnapToGrid(MouseStatus.WorldPosition);
            }

            Camera.Position = maincameraposition;
        }
Exemple #10
0
        public override void HandleKeyPressWhenFocused(  )
        {
            if (KeyboardStatus.IsNewKeyPress(Keys.H))
            {
                IMemento memento = IoC.Memento;
                memento.Record("Flip Item(s) Horizontally", () =>
                {
                    FlipHorizontally = !FlipHorizontally;
                    IoC.Model.NotifyChanged(this);
                });
            }

            if (KeyboardStatus.IsNewKeyPress(Keys.V))
            {
                IMemento memento = IoC.Memento;
                memento.Record("Flip Item(s) Vertically", () =>
                {
                    FlipVertically = !FlipVertically;
                    IoC.Model.NotifyChanged(this);
                });
            }
        }
Exemple #11
0
        public override void UserInteractionDuringCreation( )
        {
            int lastItemIndex = _properties.WorldPoints.Count - 1;

            Vector2 mouseWorldPos = MouseStatus.WorldPosition;

            //_properties.WorldPoints[ lastItemIndex ] = mouseWorldPos ;
            //_properties.LocalPoints[ lastItemIndex ] = _properties.WorldPoints[0] - mouseWorldPos ;

            //}


            if (MouseStatus.IsNewLeftMouseButtonClick(  ))
            {
                addWorldPoint(mouseWorldPos);

                WhenUpdatedByUi(  );
            }

            if (MouseStatus.IsNewMiddleMouseButtonClick(  ))
            {
                _editorMode = ItemEditorMode.Created;

                PreviewEndedReadyForCreation(this, EventArgs.Empty);
            }

            if (KeyboardStatus.IsNewKeyPress(Keys.Back))
            {
                if (_properties.WorldPoints.Count > 1)
                {
                    int lastItem = lastItemIndex;
                    _properties.WorldPoints.RemoveAt(lastItem);
                    _properties.LocalPoints.RemoveAt(lastItem);

                    WhenUpdatedByUi(  );
                }
            }
        }
Exemple #12
0
        public void Update( )
        {
            IEnumerable <ItemEditor> allSelectedEditors = selectedEditors( ).ToList(  );

            Vector2 newpos = MouseStatus.WorldPosition - allSelectedEditors.First().ItemProperties.Position;

            float deltaTheta = (float)Math.Atan2(_canvas.GrabPoint.Y, _canvas.GrabPoint.X) - (float)Math.Atan2(newpos.Y, newpos.X);

            int i = 0;

            foreach (ItemEditor eachSelectedItem in allSelectedEditors)
            {
                if (eachSelectedItem.CanRotate( ))
                {
                    eachSelectedItem.Rotation = _canvas.RotationsBeforeUserInteraction[i] - deltaTheta;

                    if (KeyboardStatus.IsKeyDown(Keys.LeftControl))
                    {
                        eachSelectedItem.Rotation = (float)Math.Round(eachSelectedItem.Rotation / MathHelper.PiOver4)
                                                    * MathHelper.PiOver4;
                    }

                    i++;
                }

                IoC.Model.NotifyChanged(allSelectedEditors);
            }


            if (MouseStatus.IsNewMiddleMouseButtonRelease( ) || KeyboardStatus.IsNewKeyRelease(Keys.D2))
            {
                _canvas.SetModeToIdle(  );

                ObjectFactory.GetInstance <IMemento>().EndCommand( );
            }

            return;
        }
    public BridgeEnums.EGetKeyboardStatusErrorCode GetKeyboardStatus(ref KeyboardStatus ks)
    {
        unsafe
        {
            fixed(byte *responseBufferPtr = &responseBuffer[0])
            {
                UGetKeyboardStatus(responseBufferPtr, responseBufferSize);
            }

            responseAsString = System.Text.Encoding.ASCII.GetString(responseBuffer, 0, responseBuffer.Length);
        }

        // Parse json message we received:
        keyboardStatusServerResponse = JsonUtility.FromJson <KeyboardStatusServerJSONResponse>(responseAsString);

        if ((BridgeEnums.EGetKeyboardStatusErrorCode)keyboardStatusServerResponse.error_code == BridgeEnums.EGetKeyboardStatusErrorCode.SUCCESS)
        {
            ks.isVisible       = keyboardStatusServerResponse.status.visible;
            ks.pairedTrackerID = keyboardStatusServerResponse.status.paired_tracker_id;
        }

        return((BridgeEnums.EGetKeyboardStatusErrorCode)keyboardStatusServerResponse.error_code);
    }
Exemple #14
0
 public Input(MouseStatus mouseStatus, KeyboardStatus keyboardStatus)
 {
     MouseStatus    = mouseStatus;
     KeyboardStatus = keyboardStatus;
 }
 public KeyboardStatusChangeEventArgs(KeyboardStatus status, int visibleHeightToDecorHeightDelta)
 {
     Status = status;
     VisibleHeightToDecorHeightDelta = visibleHeightToDecorHeightDelta;
 }
Exemple #16
0
        public void Update( )
        {
            //get item under mouse cursor

            var model = ObjectFactory.GetInstance <IModel>( );

            ItemEditor item = _canvas.ItemUnderMouse;

            bool controlButtonPressed = KeyboardStatus.IsKeyDown(Keys.LeftControl);

            if (item != null)
            {
                _mainForm.SetToolStripStatusLabel1(item.ItemProperties.Name);

                item.OnMouseOver(MouseStatus.WorldPosition);

                if (controlButtonPressed)
                {
                    _mainForm.SetCursorForCanvas(_cursorDuplicate);
                }
            }
            else
            {
                _mainForm.SetToolStripStatusLabel1(string.Empty);
            }

            if (item != _lastItem && _lastItem != null)
            {
                _lastItem.OnMouseOut( );
            }

            _lastItem = item;

            IEnumerable <ITreeItem> editors = selectedEditors( ).ToList(  );

            if (MouseStatus.IsNewLeftMouseButtonClick() || KeyboardStatus.IsNewKeyPress(Keys.D1))
            {
                if (item != null)
                {
                    item.OnMouseButtonDown(MouseStatus.WorldPosition);
                }

                if (controlButtonPressed && item != null)
                {
                    _canvas.StartCopyingSelectedItems( );
                }
                else if (KeyboardStatus.IsKeyDown(Keys.LeftShift) && item != null)
                {
                    model.ToggleSelectionOnItem(item);
                }
                else if (editors.Contains(item))
                {
                    _canvas.StartMovingSelectedItems( );
                }
                else if (!selectedEditors().Contains(item))
                {
                    if (item != null)
                    {
                        _model.SelectEditor(item);
                        _canvas.StartMovingSelectedItems(  );
                    }
                    else
                    {
                        _canvas.CreateSelectionRectangle( );
                    }
                }
            }

            //MIDDLE MOUSE BUTTON CLICK
            bool anyEditorsSelected = editors.Any();

            if (MouseStatus.IsNewMiddleMouseButtonClick( ) || KeyboardStatus.IsNewKeyPress(Keys.D2))
            {
                if (item != null)
                {
                    item.OnMouseOut( );
                }

                if (controlButtonPressed)
                {
                    _canvas.StartMovingCamera( );
                }
                else
                {
                    if (anyEditorsSelected)
                    {
                        _canvas.StartRotatingItems( );
                    }
                }
            }

            //RIGHT MOUSE BUTTON CLICK
            if (MouseStatus.IsNewRightMouseButtonClick( ) || KeyboardStatus.IsNewKeyPress(Keys.D3))
            {
                if (item != null)
                {
                    item.OnMouseOut( );
                }

                if (anyEditorsSelected)
                {
                    _canvas.StartScalingSelectedItems( );
                }
            }

            selectedEditors(  ).ForEach(e => e.HandleKeyPressWhenFocused());
        }
Exemple #17
0
 public SearchBoxKeyBoardEventArgs(bool isSelection, KeyboardStatus status)
 {
     IsClosingAfterSelection = isSelection;
     Status = status;
 }
Exemple #18
0
        void handleCameraControls(GameTime gameTime)
        {
            int scrollWheelDelta = MouseStatus.ScrollwheelDelta;

            if (scrollWheelDelta > 0 /* && kstate.IsKeyDown(Keys.LeftControl)*/)
            {
                float zoom = (float)Math.Round(Camera.Scale * 10) * 10.0f + 10.0f;

                _mainForm.SetZoomComboText(zoom.ToString( ) + "%");

                Camera.Scale = zoom / 100.0f;
            }

            if (scrollWheelDelta < 0 /* && kstate.IsKeyDown(Keys.LeftControl)*/)
            {
                float zoom = (float)Math.Round(Camera.Scale * 10) * 10.0f - 10.0f;
                if (zoom <= 0.0f)
                {
                    return;
                }

                _mainForm.SetZoomComboText(zoom.ToString( ) + "%");

                Camera.Scale = zoom / 100.0f;
            }

            //Camera movement
            float delta;

            if (KeyboardStatus.IsKeyDown(Keys.LeftShift))
            {
                delta = Constants.Instance.CameraFastSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
            }
            else
            {
                delta = Constants.Instance.CameraSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
            }

            bool leftControlKeyNotPressed = KeyboardStatus.IsKeyUp(Keys.LeftControl);

            if (KeyboardStatus.IsKeyDown(Keys.W) && leftControlKeyNotPressed)
            {
                Camera.Position += (new Vector2(0, -delta));
            }

            if (KeyboardStatus.IsKeyDown(Keys.S) && leftControlKeyNotPressed)
            {
                Camera.Position += (new Vector2(0, +delta));
            }

            if (KeyboardStatus.IsKeyDown(Keys.A) && leftControlKeyNotPressed)
            {
                Camera.Position += (new Vector2(-delta, 0));
            }

            if (KeyboardStatus.IsKeyDown(Keys.D) && leftControlKeyNotPressed)
            {
                Camera.Position += (new Vector2(+delta, 0));
            }

            if (KeyboardStatus.IsKeyDown(Keys.Subtract))
            {
                var zoom = (float)(Camera.Scale * 0.995);

                _mainForm.SetZoomComboText(textualRepresentationOfZoom(zoom));

                Camera.Scale = zoom;
            }

            if (KeyboardStatus.IsKeyDown(Keys.Add))
            {
                var zoom = (float)(Camera.Scale * 1.005);
                _mainForm.SetZoomComboText(textualRepresentationOfZoom(zoom));
                Camera.Scale = zoom;
            }

            //get mouse world position considering the ScrollSpeed of the current layer
            Vector2 maincameraposition = Camera.Position;

            if (getLevel( ).ActiveLayer != null)
            {
                Camera.Position *= getLevel( ).ActiveLayer.ScrollSpeed;
            }

            MouseStatus.UpdateCamera(Camera);

            MouseStatus.WorldPosition = Vector2.Transform(MouseStatus.ScreenPosition, Matrix.Invert(Camera.Matrix));
            MouseStatus.WorldPosition = MouseStatus.WorldPosition.Round( );

            _mainForm.SetToolStripStatusLabel3(
                "Mouse: ({0}, {1})".FormatWith(MouseStatus.WorldPosition.X, MouseStatus.WorldPosition.Y));

            Camera.Position = maincameraposition;
        }
Exemple #19
0
 public KeyboardStatusChangeEventArgs(KeyboardStatus status)
 {
     Status = status;
 }
Exemple #20
0
    // Listen to keys events
    void Update()
    {
        if (Input.anyKeyDown)
        {
            switch (Input.inputString)
            {
            // ---------------------------------------------------------------------
            // Keyboard functions examples
            // ---------------------------------------------------------------------

            case "a":
                // Set keyboard to visible
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetKeyboardVisibility(true);
                Debug.Log(errorCode == 0 ? "Keyboard is now visible" : "Error with code: " + errorCode);
                break;

            case "s":
                // Set keyboard to hidden
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetKeyboardVisibility(false);
                Debug.Log(errorCode == 0 ? "Keyboard is now hidden" : "Error with code: " + errorCode);
                break;

            case "d":
                // Get keyboard status
                KeyboardStatus ks = new KeyboardStatus();
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.GetKeyboardStatus(ref ks);
                Debug.Log(errorCode == 0 ? ("Keyboard visible: " + ks.isVisible + ", id: '" + ks.pairedTrackerID + "'") : ("Error with code: " + errorCode));
                break;

            case "f":
                // Get supported keyboards and their respective skins
                SupportedKeyboards sk = new SupportedKeyboards();
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.GetSupportedKeyboards(ref sk);
                Debug.Log(errorCode == 0 ? (sk.Print()) : "Error with code: " + errorCode);
                break;

            case "g":
                // Set the "CrashTest" skin
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetSkin("CrashTest");;
                Debug.Log(errorCode == 0 ? "Skin CrashTest applied" : "Error with code: " + errorCode);
                break;

            // ---------------------------------------------------------------------
            // Hands functions examples
            // ---------------------------------------------------------------------

            case "z":
                // Set hands to visible
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsVisibility(true);
                Debug.Log(errorCode == 0 ? "Hands are now visible" : "Error with code: " + errorCode);
                break;

            case "x":
                // Set hands to hidden
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsVisibility(false);
                Debug.Log(errorCode == 0 ? "Hands are now hidden" : "Error with code: " + errorCode);
                break;

            case "c":
                // Get hands status
                HandsFeedbackStatus hs = new HandsFeedbackStatus();
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.GetHandsStatus(ref hs);
                Debug.Log(errorCode == 0 ? ("Hands feedback status: " + hs.isVisible + ", " + hs.eHandsRepresentationMode + ", (" + hs.color[0] + ", " + hs.color[1] + ", " + hs.color[2] + "), " + hs.opacityLevel + "," + hs.segmentationThreshold) : "Error with code: " + errorCode);
                break;

            case "v":
                // Set hands representation to "Hands Segmentation"
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsRepresentationMode(BridgeEnums.EHandsRepresentationMode.HANDS_SEGMENTATION);
                Debug.Log(errorCode == 0 ? "Hands representation set to 'Hands Segmentation'" : "Error with code: " + errorCode);
                break;

            case "b":
                // Set hands representation to "Seethrough"
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsRepresentationMode(BridgeEnums.EHandsRepresentationMode.SEETHRU);
                Debug.Log(errorCode == 0 ? "Hands representation set to 'Seethrough'" : "Error with code: " + errorCode);
                break;

            case "n":
                // Set random hand color in 'Hands segmentation' mode
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsColor(BridgeEnums.EHandsRepresentationMode.HANDS_SEGMENTATION, Random.Range(0, 255), Random.Range(0, 255), Random.Range(0, 255));
                Debug.Log(errorCode == 0 ? "Hands set to random color in 'Hands Segmentation' mode" : "Error with code: " + errorCode);
                break;

            case "m":
                // Set Hands Segmentation threshold to 10%
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsSegmentationThreshold(BridgeEnums.EHandsRepresentationMode.HANDS_SEGMENTATION, 0.1f);
                Debug.Log(errorCode == 0 ? "Hands Segmentation threshold set to 10%" : "Error with code: " + errorCode);
                break;

            case "j":
                // Set Hands Segmentation threshold to 30%
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsSegmentationThreshold(BridgeEnums.EHandsRepresentationMode.HANDS_SEGMENTATION, 0.3f);
                Debug.Log(errorCode == 0 ? "Hands Segmentation threshold set to 30%" : "Error with code: " + errorCode);
                break;

            case "k":
                // Set Hands opacity to 70%
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsOpacity(BridgeEnums.EHandsRepresentationMode.HANDS_SEGMENTATION, 1.0f);
                Debug.Log(errorCode == 0 ? "Hands Segmentation opacity set to 100%" : "Error with code: " + errorCode);
                break;

            case "l":
                // Set Hands opacity to 70%
                errorCode = (int)BridgeSDK.Instance.bridgeSDK.SetHandsOpacity(BridgeEnums.EHandsRepresentationMode.HANDS_SEGMENTATION, 0.7f);
                Debug.Log(errorCode == 0 ? "Hands Segmentation opacity set to 70%" : "Error with code: " + errorCode);
                break;
            }
        }
    }