Beispiel #1
0
        private void LoadUninstallableItems()
        {
            var products      = ProductInstallation.GetProducts(null, "s-1-1-0", UserContexts.All).ToArray();
            var installations = products
                                .Where(ins => ins.ProductName != null)
                                .Select(ins => new InstalledItem(ins.ProductName,
                                                                 ins.ProductCode,
                                                                 ins.InstallDate,
                                                                 ins.InstallLocation,
                                                                 ins.UrlInfoAbout,
                                                                 ins.ProductVersion,
                                                                 ins.Publisher))
                                .OrderBy(ins => ins.Product);

            _logger.Info("Found {0} installed items", installations.Count());
            Items                = new ObservableCollection <InstalledItem>(installations);
            FilteredItems        = CollectionViewSource.GetDefaultView(Items);
            FilteredItems.Filter = ItemFilter();
            FilteredItems.Refresh();

            Cancelling          = false;
            UninstallInProgress = false;
            UninstallCurrent    = 0;
            UninstallTotal      = 0;
            UninstallProgress   = 0;
        }
Beispiel #2
0
        public InstalledItemsViewModel(InstalledItemsView view)
        {
            _logger.Info("Startup");
            _view = view;

            UninstallCommand       = new DelegateCommand(Uninstall);
            CancelUninstallCommand = new DelegateCommand(CancelUninstall);
            SelectCommand          = new DelegateCommand(SelectForUninstall);

            LoadUninstallableItems();

            Observable.FromEventPattern <PropertyChangedEventArgs>(this, "PropertyChanged")
            .Where(x => x.EventArgs.PropertyName == "FilterText")
            .Subscribe(_ => FilteredItems.Refresh());
        }
Beispiel #3
0
        protected virtual void OnFilterItemsForDisplay(string filterString)
        {
            bool shouldRefresh = false;

            if (string.IsNullOrEmpty(filterString))
            {
                foreach (ListViewItemWrapper wrapper in Items)
                {
                    if (!wrapper.Visible)
                    {
                        wrapper.Visible = true;
                        shouldRefresh   = true;
                    }
                }
            }
            else
            {
                foreach (ListViewItemWrapper wrapper in Items)
                {
                    string sourceText = (!string.IsNullOrEmpty(wrapper.SearchText)) ? wrapper.SearchText : wrapper.Name;
                    if (Contains(sourceText, filterString, StringComparison.CurrentCultureIgnoreCase))
                    {
                        if (!wrapper.Visible)
                        {
                            wrapper.Visible = true;
                            shouldRefresh   = true;
                        }
                    }
                    else
                    {
                        if (wrapper.Visible)
                        {
                            wrapper.Visible = false;
                            shouldRefresh   = true;
                        }
                    }
                }
            }

            if (shouldRefresh)
            {
                FilteredItems.Refresh();
            }
        }
        public MainViewModel()
        {
            // タイトルに表示する文字列を指定
            var asm = Assembly.GetExecutingAssembly().GetName();

            AppName.Value = asm.Name + " - " + asm.Version.Major + "." + asm.Version.Minor;

            // 表示するリスト(filteredItemsSource)のソースとフィルタの設定
            FilteredItemsSource = new CollectionViewSource {
                Source = MemoList
            };
            FilteredItemsSource.Filter += (s, e) =>
            {
                var item = e.Item as SelfMemoItem;
                e.Accepted = CheckFilterStr(FilterStr.Value, item) && CheckCategoryFilter(item);
            };

            // ファイルが有ればロードしてMemoListを更新
            if (File.Exists(MemoFileName))
            {
                SelfMemoList.LoadMemoFile(MemoList, MemoFileName);
            }

            // MemoListが空なら、ヘルプメッセージ的な項目を追加する
            if (SelfMemoList.ItemsList.Count == 0)
            {
                MemoList.Add(new SelfMemoItem("用語", "正式名称、別名、訳語など", "用語の解説", "カテゴリ"));
                MemoList.Add(new SelfMemoItem("SelfMemo", "概要", "キーワードと関連情報(訳語、正式名称、説明など)を登録し、ど忘れした時に見返しやすくするアプリです。", "本アプリの説明"));
                MemoList.Add(new SelfMemoItem("SelfMemo", "検索機能", "検索フォームからキーワード検索ができます。", "本アプリの説明"));
                MemoList.Add(new SelfMemoItem("SelfMemo", "ショートカット", "グローバルホットキー(デフォルトでAlt+Shift+F2)でいつでもアプリ起動します。", "本アプリの説明"));
                MemoList.Add(new SelfMemoItem("SelfMemo", "項目追加", "メニューの「登録ダイアログを開く(Ctrl+R)」からキーワードの追加ができます。", "本アプリの説明"));
                MemoList.Add(new SelfMemoItem("SelfMemo", "項目編集", "編集ビューから登録内容の編集ができます。", "本アプリの説明"));
                MemoList.Add(new SelfMemoItem("SelfMemo", "カテゴリフィルタ", "「カテゴリ」メニューでカテゴリ毎の表示フィルタリングができます。", "本アプリの説明"));
            }

            // Filter文字列が更新されたら、Filterされたアイテムリストを更新
            FilterStr.Subscribe(_ =>
            {
                // 既にタイマーが走ってたら、一旦止める
                if (FilteredItemsRefreshTimer.IsEnabled)
                {
                    FilteredItemsRefreshTimer.Stop();
                }

                // タイマー開始
                FilteredItemsRefreshTimer.Interval = TimeSpan.FromMilliseconds(300);
                FilteredItemsRefreshTimer.Tick    += (s, e) =>
                {
                    FilteredItems.Refresh();
                    FilteredItemsRefreshTimer.Stop();
                };
                FilteredItemsRefreshTimer.Start();
            });

            // Filter文字列の有無フラグを連動
            UseFilterStr = FilterStr.Select(x => !string.IsNullOrWhiteSpace(x)).ToReadOnlyReactivePropertySlim();

            // カテゴリ選択ComboBoxが更新されたら、Filterされたアイテムリスト更新
            CategoryListSelected.Subscribe(_ =>
            {
                if (!FilteredItemsRefreshTimer.IsEnabled)
                {
                    FilteredItemsRefreshTimer.Interval = TimeSpan.FromMilliseconds(300);
                    FilteredItemsRefreshTimer.Tick    += (s, e) =>
                    {
                        FilteredItems.Refresh();
                        FilteredItemsRefreshTimer.Stop();
                    };
                    FilteredItemsRefreshTimer.Start();
                }
            });

            // 選択項目をSelectedItemに入れる処理
            FilteredItems.CurrentChanged += (s, e) =>
            {
                SelectedItem.Value = FilteredItems.CurrentItem as SelfMemoItem;
            };

            // UseCategoryListはカテゴリリストからなんか選択されてたらTrue
            UseCategoryList = CategoryListSelected.Select(x => !string.IsNullOrEmpty(x)).ToReadOnlyReactivePropertySlim();

            // カテゴリリストのON/OFFを切り替えるタイミングでもカテゴリリストの内容更新
            UseCategoryList.Subscribe(_ =>
            {
                SelfMemoList.UpdateCategoryList();
            });

            // MemoListのコレクションが更新されたらファイルに保存
            MemoList.CollectionChanged += (s, e) =>
            {
                SelfMemoList.SaveMemoFile(MemoList, MemoFileName);
            };

            WindowWidth.Subscribe(_ =>
            {
                ExpanderWidth.Value = Math.Max(400, WindowWidth.Value / 2);
            });
        }