public WordViewModel(LetterViewModel[] letterViewModels)
        {
            _letterViewModels = letterViewModels;

            string word = "";
            for (int i = 0; i < LIMIT; i++)
            {
                word += letterViewModels[i].Model.Content;
            }

            _wordModel = new WordModel(word);
        }
        public int CreateNewContext()
        {
            for (int i = 65; i < 65 + 26; i++)
            {
                _letterViewModels[i - 65] = new LetterViewModel(Convert.ToString((char)i));
                _letterViewModels[i - 65].LetterViewModelClicked += LetterViewModelClicked;
                _letterViewModels[i - 65].LetterViewModelEnable += LetterViewModelEnable;
            }

            _stateMachines.Add(new LetterViewModelStateMachine(_letterViewModels));

            return _stateMachines.Count - 1;
        }
        public override void Execute(object parameter)
        {
            InputViewModel inputViewModel = parameter as InputViewModel;
            ObservableCollection<LetterViewModel> letterViewModelCollection = inputViewModel.LetterViewModels;
            LetterViewModel[] letterViewModels = new LetterViewModel[LIMIT];
            for(int i = 0; i < LIMIT; i++)
            {
                letterViewModels[i] = letterViewModelCollection.ElementAt(i);
            }

            WordViewModel wordViewModel = new WordViewModel(letterViewModels);
            WordViewModelManager.GetInstance().AddWord(wordViewModel);

            inputViewModel.ClearLetterViewModels();
        }
        internal LetterViewModelStateMachine(LetterViewModel[] letterViewModels)
        {
            _letterViewModels = letterViewModels;

            foreach(LetterViewModel letterViewModel in _letterViewModels)
            {
                _stateMap[letterViewModel] = ColorState.NEUTRAL;
                _letterMap[letterViewModel.Model.Content] = letterViewModel;
            }

            _styleMap[ColorState.ELIMINATED] = (Style)Application.Current.Resources["RedKeyStyle"];
            _styleMap[ColorState.SELECTED] = (Style)Application.Current.Resources["GreenKeyStyle"];
            _styleMap[ColorState.NEUTRAL] = (Style)Application.Current.Resources["GrayKeyStyle"];
            _styleMap[ColorState.DISABLE_ELIMINATED] = (Style)Application.Current.Resources["DisableRedKeyStyle"];
            _styleMap[ColorState.DISABLE_SELECTED] = (Style)Application.Current.Resources["DisableGreenKeyStyle"];
            _styleMap[ColorState.DISABLE_NEUTRAL] = (Style)Application.Current.Resources["DisableGrayKeyStyle"];
        }
 public void PushLetterViewModel(LetterViewModel letterViewModel)
 {
     if (!IsComplete)
     {
         letterViewModel.IsEnabled = false;
         _models.Add(letterViewModel);
     }
 }
        internal int TransitionState(LetterViewModel letterViewModel)
        {
            if (letterViewModel.IsEnabled)
            {
                switch (_stateMap[letterViewModel])
                {
                    case ColorState.NEUTRAL:
                        letterViewModel.Style = _styleMap[ColorState.ELIMINATED];
                        _stateMap[letterViewModel] = ColorState.ELIMINATED;
                        break;
                    case ColorState.ELIMINATED:
                        ColorState state = _full ? ColorState.NEUTRAL : ColorState.SELECTED;
                        _selectedCounter = _full ? _selectedCounter : _selectedCounter + 1;
                        letterViewModel.Style = _styleMap[state];
                        _stateMap[letterViewModel] = state;
                        break;
                    case ColorState.SELECTED:
                        letterViewModel.Style = _styleMap[ColorState.NEUTRAL];
                        _stateMap[letterViewModel] = ColorState.NEUTRAL;
                        _selectedCounter--;
                        break;
                    case ColorState.DISABLE_NEUTRAL:
                         letterViewModel.Style = _styleMap[ColorState.NEUTRAL];
                        _stateMap[letterViewModel] = ColorState.NEUTRAL;
                        break;
                    case ColorState.DISABLE_ELIMINATED:
                         letterViewModel.Style = _styleMap[ColorState.ELIMINATED];
                        _stateMap[letterViewModel] = ColorState.ELIMINATED;
                        break;
                    case ColorState.DISABLE_SELECTED:
                         letterViewModel.Style = _styleMap[ColorState.SELECTED];
                        _stateMap[letterViewModel] = ColorState.SELECTED;
                        break;
                    default:
                        Debug.Assert(false, "Invalid letter view model given");
                        break;
                }
            }
            else
            {
                switch (_stateMap[letterViewModel])
                {
                    case ColorState.DISABLE_NEUTRAL:
                        letterViewModel.Style = _styleMap[ColorState.DISABLE_ELIMINATED];
                        _stateMap[letterViewModel] = ColorState.DISABLE_ELIMINATED;
                        break;
                    case ColorState.DISABLE_ELIMINATED:
                        ColorState state = _full ? ColorState.DISABLE_NEUTRAL : ColorState.DISABLE_SELECTED;
                        _selectedCounter = _full ? _selectedCounter : _selectedCounter + 1;
                        letterViewModel.Style = _styleMap[state];
                        _stateMap[letterViewModel] = state;
                        break;
                    case ColorState.DISABLE_SELECTED:
                        letterViewModel.Style = _styleMap[ColorState.DISABLE_NEUTRAL];
                        _stateMap[letterViewModel] = ColorState.DISABLE_NEUTRAL;
                        _selectedCounter--;
                        break;
                    case ColorState.NEUTRAL:
                        letterViewModel.Style = _styleMap[ColorState.DISABLE_NEUTRAL];
                        _stateMap[letterViewModel] = ColorState.DISABLE_NEUTRAL;
                        break;
                    case ColorState.ELIMINATED:
                        letterViewModel.Style = _styleMap[ColorState.DISABLE_ELIMINATED];
                        _stateMap[letterViewModel] = ColorState.DISABLE_ELIMINATED;
                        break;
                    case ColorState.SELECTED:
                        letterViewModel.Style = _styleMap[ColorState.DISABLE_SELECTED];
                        _stateMap[letterViewModel] = ColorState.DISABLE_SELECTED;
                        break;
                    default:
                        Debug.Assert(false, "Invalid letter view model given");
                        break;
                }
            }

            _full = _selectedCounter >= LIMIT;

            return _selectedCounter;
        }
 private void LetterViewModelClicked(object sender, LetterViewModel model)
 {
     _stateMachines[_gameIndex].TransitionState(model);
 }