public GesturesForm(GesturesForm gesturesForm, GestureRecognition.Logic.Enums.GestureFormOption option, GestureRecognition.UnistrokeRecognizer.Logic.Enums.RecognizeMode recognizeMethod)
        {
            InitializeComponent();

            this._gesturesForm = gesturesForm;
            this._gestureOption = option;
            this._recognizeMethods = recognizeMethod;
            this.SquareButton.Visible = false;

            BuildSkeletonSave.Visible = false;

            graphics = this.CreateGraphics();

            this.DoubleBuffered = true;

            switch (option)
            {
                case GestureRecognition.Logic.Enums.GestureFormOption.Record:
                    {
                        InitRecording();
                    } break;
                case GestureRecognition.Logic.Enums.GestureFormOption.Load:
                    {
                        InitLoading();
                    } break;
                case GestureRecognition.Logic.Enums.GestureFormOption.Recognize:
                    {
                        InitRecognizing();
                    } break;
                case GestureRecognition.Logic.Enums.GestureFormOption.SquareRecognizer:
                    {
                        InitSquareRecognizing();
                    }break;
            }
        }
        private void SaveSkeleton_Click(object sender, EventArgs e)
        {
            _isDrawing = false;

            if (_gestureOption == GestureRecognition.Logic.Enums.GestureFormOption.RecordSkeletonBuild)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Gestures (*.xml)|*.xml";
                saveDialog.Title = "Save Gesture As";
                saveDialog.AddExtension = true;
                saveDialog.RestoreDirectory = false;

                if (saveDialog.ShowDialog(this) == DialogResult.OK)
                {
                    SaveGesture(saveDialog.FileName, _newGesture.Points);
                }

                saveDialog.Dispose();
                _gestureOption = GestureRecognition.Logic.Enums.GestureFormOption.None;
                Invalidate();
            }
            else if (_gestureOption == GestureRecognition.Logic.Enums.GestureFormOption.RecognizeMultiStroke)
            {
                Recognize();
            }
            else if (_gestureOption == GestureRecognition.Logic.Enums.GestureFormOption.SquareRecognizer)
            {
                RecognizeSquares();
            }

            Invalidate();

            _newGesture.Points.Clear();
            _squares.Clear();
        }
        private void GesturesForm_MouseUp(object sender, MouseEventArgs e)
        {
            if (_isMoving)
            {
                _isMoving = false;
                _selectedSquareIndex = -1;

                if (_gestureOption == GestureRecognition.Logic.Enums.GestureFormOption.Record)
                {
                    BuildSkeletonSave.Visible = true;
                }
                else if (_gestureOption == GestureRecognition.Logic.Enums.GestureFormOption.Recognize)
                {
                    BuildSkeletonSave.Text = "Recognize Skeleton";
                    BuildSkeletonSave.Visible = true;
                }
            }
            else if (_isDrawing)
            {
                    _isDrawing = false;
                    if (_newGesture.Points.Count > _mininumPointsValue)
                    {
                        if (_gestureOption == GestureRecognition.Logic.Enums.GestureFormOption.Record)
                        {
                            SaveFileDialog saveDialog = new SaveFileDialog();
                            saveDialog.Filter = "Gestures (*.xml)|*.xml";
                            saveDialog.Title = "Save Gesture As";
                            saveDialog.AddExtension = true;
                            saveDialog.RestoreDirectory = false;

                            if (saveDialog.ShowDialog(this) == DialogResult.OK)
                            {
                                SaveGesture(saveDialog.FileName, _newGesture.Points);
                            }

                            saveDialog.Dispose();
                            _gestureOption = GestureRecognition.Logic.Enums.GestureFormOption.None;
                            BuildSkeletonSave.Visible = false ;
                            Invalidate();
                        }
                        else if (_gestureOption == GestureRecognition.Logic.Enums.GestureFormOption.Recognize)
                        {
                            Recognize();
                        }
                    else
                    {
                        GestureInfo.Text = "You need more points to draw a gesture (min " + _mininumPointsValue + ")";
                    }
                }
            }
        }