예제 #1
0
        public MainViewModel(Settings settings)
        {
            _hotkeyManager = new HotkeyManager();
            _saved         = false;
            _queryTextBeforeLeaveResults = "";
            _lastQuery = new Query();
            _disposed  = false;

            _settings = settings;

            _historyItemsStorage       = new WoxJsonStorage <History>();
            _userSelectedRecordStorage = new WoxJsonStorage <UserSelectedRecord>();
            _topMostRecordStorage      = new WoxJsonStorage <TopMostRecord>();
            _history            = _historyItemsStorage.Load();
            _userSelectedRecord = _userSelectedRecordStorage.Load();
            _topMostRecord      = _topMostRecordStorage.Load();

            ContextMenu      = new ResultsViewModel(_settings);
            Results          = new ResultsViewModel(_settings);
            History          = new ResultsViewModel(_settings);
            _selectedResults = Results;

            InitializeKeyCommands();
            RegisterResultsUpdatedEvent();

            _settings.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(Settings.Hotkey))
                {
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        if (_settings.PreviousHotkey != "")
                        {
                            _hotkeyManager.UnregisterHotkey(_hotkeyHandle);
                        }

                        if (_settings.Hotkey != "")
                        {
                            SetHotkey(_settings.Hotkey, OnHotkey);
                        }
                    });
                }
            };

            SetHotkey(_settings.Hotkey, OnHotkey);
            SetCustomPluginHotkey();
        }
예제 #2
0
파일: MainViewModel.cs 프로젝트: xieby/Wox
 private void InitializeContextMenu()
 {
     ContextMenu           = new ResultsViewModel(_settings);
     ContextMenuVisibility = Visibility.Collapsed;
 }
예제 #3
0
파일: MainViewModel.cs 프로젝트: xieby/Wox
 private void InitializeResultListBox()
 {
     Results = new ResultsViewModel(_settings);
     ResultListBoxVisibility = Visibility.Collapsed;
 }
예제 #4
0
        private void InitializeKeyCommands()
        {
            EscCommand = new RelayCommand(_ => {
                if (!ResultsSelected())
                {
                    SelectedResults      = Results;
                    MainWindowVisibility = Visibility.Collapsed;
                }
                else
                {
                    MainWindowVisibility = Visibility.Collapsed;
                }
            });

            SelectNextItemCommand = new RelayCommand(_ => { SelectedResults.SelectNextResult(); });

            SelectPrevItemCommand = new RelayCommand(_ => { SelectedResults.SelectPrevResult(); });

            SelectNextPageCommand = new RelayCommand(_ => { SelectedResults.SelectNextPage(); });

            SelectPrevPageCommand = new RelayCommand(_ => { SelectedResults.SelectPrevPage(); });

            StartHelpCommand = new RelayCommand(_ => { Process.Start("http://doc.wox.one/"); });

            OpenResultCommand = new RelayCommand(index => {
                ResultsViewModel results = SelectedResults;

                if (index != null)
                {
                    results.SelectedIndex = int.Parse(index.ToString());
                }

                Result result = results.SelectedItem?.Result;
                if (result != null) // SelectedItem returns null if selection is empty.
                {
                    bool hideWindow = result.Action != null && result.Action(new ActionContext {
                        SpecialKeyState = GlobalHotkey.Instance.CheckModifiers()
                    });

                    if (hideWindow)
                    {
                        MainWindowVisibility = Visibility.Collapsed;
                    }

                    if (ResultsSelected())
                    {
                        _userSelectedRecord.Add(result);
                        _history.Add(result.OriginQuery.RawQuery);
                        if (result.historySave != null)
                        {
                            addSearchHistory(result.PluginID, result.historySave);
                        }
                    }
                }
            });

            LoadContextMenuCommand = new RelayCommand(_ => {
                if (ResultsSelected())
                {
                    SelectedResults = ContextMenu;
                }
                else
                {
                    SelectedResults = Results;
                }
            });

            LoadHistoryCommand = new RelayCommand(_ => {
                if (ResultsSelected())
                {
                    SelectedResults       = History;
                    History.SelectedIndex = _history.Items.Count - 1;
                }
                else
                {
                    SelectedResults = Results;
                }
            });
        }