public void BasicConstructorLifeCycleTest()
        {
            var listenerSuccess = false;

            var publisher = new TestEventPublisher();

            var listener = new PropertyChangedEventListener(publisher, (sender, e) => listenerSuccess = true);

            //------------------
            listenerSuccess.Is(false);

            publisher.RaisePropertyChanged(string.Empty);

            listenerSuccess.Is(true);

            //------------------
            listenerSuccess = false;

            listener.Dispose();
            publisher.RaisePropertyChanged(string.Empty);

            listenerSuccess.Is(false);

            try
            {
                listener.RegisterHandler((sender, e) => listenerSuccess = true);
            }
            catch (Exception e)
            {
                e.GetType().Is(typeof(ObjectDisposedException));
            }
        }
        public void SourceReferenceMemoryLeakTest()
        {
            var handler1Called = false;

            var publisherStrongReference = new TestEventPublisher();
            var publisherWeakReference   = new WeakReference <TestEventPublisher>(publisherStrongReference);

            var listener = new PropertyChangedEventListener(publisherStrongReference);

            listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; });

            publisherStrongReference.RaisePropertyChanged("Dummy1");

            handler1Called.Is(true);

            listener.Dispose();
            publisherStrongReference = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            TestEventPublisher resultPublisher = null;

            publisherWeakReference.TryGetTarget(out resultPublisher).Is(false);
            resultPublisher.IsNull();
        }
        public void FilteredHandlerLifeCycleTest()
        {
            var handler1Called = false;
            var handler2Called = false;
            var handler3Called = false;

            var publisher = new TestEventPublisher();

            var listener = new PropertyChangedEventListener(publisher);

            listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; });
            listener.RegisterHandler("Dummy2", (sender, e) => { e.PropertyName.Is("Dummy2"); handler2Called = true; });
            listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler3Called = true; });

            publisher.RaisePropertyChanged("Dummy1");
            publisher.RaisePropertyChanged("Dummy2");

            handler1Called.Is(true);
            handler2Called.Is(true);
            handler3Called.Is(true);

            //------------------
            handler1Called = false;
            handler2Called = false;
            handler3Called = false;

            listener.Dispose();
            publisher.RaisePropertyChanged("Dummy1");
            publisher.RaisePropertyChanged("Dummy2");

            handler1Called.Is(false);
            handler2Called.Is(false);
            handler3Called.Is(false);
        }
Esempio n. 4
0
        //コンストラクタ
        public StageViewModel(StageModel model, MainViewModel mainViewModel)
        {
            MainViewModel = mainViewModel;

            _model = model;
            _model.MapModels.CollectionChanged += (sender, args) =>
                {
                    _model.Parent.ResetMapModels();

                    if (args.Action == NotifyCollectionChangedAction.Add)
                    {
                        var maps = args.NewItems.Cast<MapModel>();
                        foreach (var m in maps)
                        {
                            var l = new PropertyChangedEventListener(m, (o, eventArgs) =>
                                {
                                    RaisePropertyChanged(eventArgs.PropertyName);
                                    RaisePropertyChanged("CurrentMap");
                                });

                            CompositeDisposable.Add(l);
                        }

                        if (CurrentMapIsNull) { _model.CurrentMap = maps.FirstOrDefault(); }

                        RaisePropertyChanged("CurrentMap");
                    }
                };

            CompositeDisposable.Add(new PropertyChangedEventListener(_model, (sender, e) => RaisePropertyChanged(e.PropertyName)));
        }
Esempio n. 5
0
        public Model()
        {
            _s = new Stream();

            _listener = new PropertyChangedEventListener(_s);
            _listener.RegisterHandler(UpdateHandlerProxy);
        }
Esempio n. 6
0
        public void Initialize()
        {
            _listener = new PropertyChangedEventListener(_model)
            {
                { () => _model.Basic, UpdateBasic },
                {
                    () => _model.ApplicationGroup,
                    (s, e) =>
                    ApplicationGroupName = _model.ApplicationGroup.Name
                },
                {
                    () => _model.Bank,
                    (sender, args) =>
                    BankName =
                        string.IsNullOrEmpty(_model.Bank.Name)
                                ? "(default)"
                                : _model.Bank.Name
                },
                { () => _model.IsMenuVisible, IsMenuVisibleChanged },
                { () => _model.Message, MassageChanged },
                {
                    () => _model.MainWindowVisibility,
                    (s, e) => MainWindowVisibility = _model.MainWindowVisibility
                }
            };

            UpdateBasic(_model, null);

            _model.TimerEnabled = true;
        }
Esempio n. 7
0
        internal MainWindowViewModel()
        {
            GameInformation = new GameInformationViewModel(this);
            r_Page          = GameInformation;

            ApiService.SubscribeOnce("api_start2", delegate
            {
                IsGameStarted = true;
                OnPropertyChanged(nameof(IsGameStarted));
            });

            ApiService.Subscribe("api_req_map/start", _ => ThemeManager.Instance.ChangeAccent(Accent.Brown));
            KanColleGame.Current.ReturnedFromSortie += _ => ThemeManager.Instance.ChangeAccent(Accent.Blue);

            r_BlinkingBrownAccent = new Accent("BlinkingBrown", new Uri("pack://application:,,,/HeavenlyWind;component/Themes/Accents/BlinkingBrown.xaml"));

            PropertyChangedEventListener.FromSource(NotificationService.Instance)
            .Add(nameof(NotificationService.Instance.IsBlinking), delegate
            {
                if (NotificationService.Instance.IsBlinking)
                {
                    ThemeManager.Instance.ChangeAccent(r_BlinkingBrownAccent);
                }
            });

            ShowConstructionHistoryCommand      = new DelegatedCommand(() => WindowService.Instance.Show <ConstructionHistoryWindow>());
            ShowDevelopmentHistoryCommand       = new DelegatedCommand(() => WindowService.Instance.Show <DevelopmentHistoryWindow>());
            ShowSortieHistoryCommand            = new DelegatedCommand(() => WindowService.Instance.Show <SortieHistoryWindow>());
            ShowExpeditionHistoryCommand        = new DelegatedCommand(() => WindowService.Instance.Show <ExpeditionHistoryWindow>());
            ShowScrappingHistoryCommand         = new DelegatedCommand(() => WindowService.Instance.Show <ScrappingHistoryWindow>());
            ShowResourceHistoryCommand          = new DelegatedCommand(() => WindowService.Instance.Show <ResourceHistoryWindow>());
            ShowSortieConsumptionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieConsumptionHistoryWindow>());
            ShowSortieStatisticCommand          = new DelegatedCommand(() => WindowService.Instance.Show <SortieStatisticWindow>());
        }
Esempio n. 8
0
        internal AirBaseViewModel()
        {
            var rAirBase = KanColleGame.Current.Port.AirBase;
            var rPCEL    = new PropertyChangedEventListener(rAirBase);

            rPCEL.Add(nameof(rAirBase.Table), (s, e) => Groups = rAirBase.Table.Values.Select(r => new AirForceGroupViewModel(r)).ToList());
        }
Esempio n. 9
0
 public RepairingViewModel(FleetDock dock)
 {
     this.source = dock;
     if (dock.RepairingDock != null)
     {
         this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName));
     }
     this.CompositeDisposable.Add(new PropertyChangedEventListener(dock,
         (sender, args) =>
         {
             if (args.PropertyName == "RepairingDock")
             {
                 if (this.listener != null) this.listener.Dispose();
                 if (dock.RepairingDock != null)
                 {
                     this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName));
                 }
                 else this.listener = null;
                 this.RaisePropertyChanged("CompleteTime");
                 this.RaisePropertyChanged("Remaining");
             }
             else if (args.PropertyName == "IsRepairing")
                 this.RaisePropertyChanged("IsRepairing");
         }));
 }
 public RepairingViewModel(FleetDock dock)
 {
     this.source = dock;
     if (dock.RepairingDock != null)
     {
         this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName));
     }
     this.CompositeDisposable.Add(new PropertyChangedEventListener(dock,
                                                                   (sender, args) =>
     {
         if (args.PropertyName == "RepairingDock")
         {
             if (this.listener != null)
             {
                 this.listener.Dispose();
             }
             if (dock.RepairingDock != null)
             {
                 this.listener = new PropertyChangedEventListener(dock.RepairingDock, (sender2, args2) => this.RaisePropertyChanged(args2.PropertyName));
             }
             else
             {
                 this.listener = null;
             }
             this.RaisePropertyChanged("CompleteTime");
             this.RaisePropertyChanged("Remaining");
         }
         else if (args.PropertyName == "IsRepairing")
         {
             this.RaisePropertyChanged("IsRepairing");
         }
     }));
 }
Esempio n. 11
0
 public void Initialize()
 {
     listener = new PropertyChangedEventListener(model)
     {
         () => model.DataSource, (_, __) => RaisePropertyChanged(() => DataSource)
     };
 }
        public void BasicConstructorLifeCycleTest()
        {
            var listenerSuccess = false;

            var publisher = new TestEventPublisher();

            var listener = new PropertyChangedEventListener(publisher, (sender, e) => listenerSuccess = true);

            //------------------
            listenerSuccess.Is(false);

            publisher.RaisePropertyChanged(string.Empty);

            listenerSuccess.Is(true);

            //------------------
            listenerSuccess = false;

            listener.Dispose();
            publisher.RaisePropertyChanged(string.Empty);

            listenerSuccess.Is(false);

            try
            {
                listener.RegisterHandler((sender, e) => listenerSuccess = true);
            }
            catch (Exception e)
            {
                e.GetType().Is(typeof(ObjectDisposedException));
            }

        }
Esempio n. 13
0
        internal AirBaseViewModel()
        {
            var rAirBase = KanColleGame.Current.Port.AirBase;
            var rPCEL    = PropertyChangedEventListener.FromSource(rAirBase);

            rPCEL.Add(nameof(rAirBase.AllGroups), (s, e) => Groups = rAirBase.AllGroups.Select(r => new AirForceGroupViewModel(r)).ToArray());
        }
Esempio n. 14
0
 public void Initialize()
 {
     listener = new PropertyChangedEventListener(Model);
     listener.Add(() => Model.CurrentLogFile, (_, __) => {
         IsLargeFile = (Model.CurrentLogFile?.Length ?? 0) > 100 * 1000;
     });
 }
Esempio n. 15
0
        /* コマンド、プロパティの定義にはそれぞれ
         *
         *  lvcom   : ViewModelCommand
         *  lvcomn  : ViewModelCommand(CanExecute無)
         *  llcom   : ListenerCommand(パラメータ有のコマンド)
         *  llcomn  : ListenerCommand(パラメータ有のコマンド・CanExecute無)
         *  lprop   : 変更通知プロパティ(.NET4.5ではlpropn)
         *
         * を使用してください。
         *
         * Modelが十分にリッチであるならコマンドにこだわる必要はありません。
         * View側のコードビハインドを使用しないMVVMパターンの実装を行う場合でも、ViewModelにメソッドを定義し、
         * LivetCallMethodActionなどから直接メソッドを呼び出してください。
         *
         * ViewModelのコマンドを呼び出せるLivetのすべてのビヘイビア・トリガー・アクションは
         * 同様に直接ViewModelのメソッドを呼び出し可能です。
         */

        /* ViewModelからViewを操作したい場合は、View側のコードビハインド無で処理を行いたい場合は
         * Messengerプロパティからメッセージ(各種InteractionMessage)を発信する事を検討してください。
         */

        /* Modelからの変更通知などの各種イベントを受け取る場合は、PropertyChangedEventListenerや
         * CollectionChangedEventListenerを使うと便利です。各種ListenerはViewModelに定義されている
         * CompositeDisposableプロパティ(LivetCompositeDisposable型)に格納しておく事でイベント解放を容易に行えます。
         *
         * ReactiveExtensionsなどを併用する場合は、ReactiveExtensionsのCompositeDisposableを
         * ViewModelのCompositeDisposableプロパティに格納しておくのを推奨します。
         *
         * LivetのWindowテンプレートではViewのウィンドウが閉じる際にDataContextDisposeActionが動作するようになっており、
         * ViewModelのDisposeが呼ばれCompositeDisposableプロパティに格納されたすべてのIDisposable型のインスタンスが解放されます。
         *
         * ViewModelを使いまわしたい時などは、ViewからDataContextDisposeActionを取り除くか、発動のタイミングをずらす事で対応可能です。
         */

        /* UIDispatcherを操作する場合は、DispatcherHelperのメソッドを操作してください。
         * UIDispatcher自体はApp.xaml.csでインスタンスを確保してあります。
         *
         * LivetのViewModelではプロパティ変更通知(RaisePropertyChanged)やDispatcherCollectionを使ったコレクション変更通知は
         * 自動的にUIDispatcher上での通知に変換されます。変更通知に際してUIDispatcherを操作する必要はありません。
         */

        public void Initialize()
        {
            var listener = new PropertyChangedEventListener(drawer);

            listener.RegisterHandler(() => drawer.Method, (s, ev) => RaisePropertyChanged(() => Method));
            CompositeDisposable.Add(listener);
        }
Esempio n. 16
0
        public MainViewModel()
        {
            // 画面デザイン時は処理しない(これにより画面デザインがプレビュー反映されなくなったが、保留)
            if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
            {
                return;
            }

            SolutionExplorerVM = new SolutionExplorerViewModel();
            Anchorables        = new ObservableCollection <AnchorablePaneViewModel>();
            Anchorables.Add(SolutionExplorerVM);

            Documents = new ObservableCollection <DocumentPaneViewModel>();

            // ソリューションエクスプローラーペインからの、プロパティ変更通知を受け取る
            // (ソリューションエクスプローラーツリー内のソースノードを、クリックした際のイベント処理を引き継ぐ)
            var listener = new PropertyChangedEventListener(SolutionExplorerVM);

            listener.RegisterHandler(SolutionExplorerVM_PropertyChanged);
            CompositeDisposable.Add(listener);

            // MainView 側、ComboBox の初期選択項目と同じ値にする
            FontSize    = 18;
            Util.MainVM = this;
        }
Esempio n. 17
0
        public void Initialize()
        {
            listener = new PropertyChangedEventListener(this);
            listener.Add(FolderNamePropertyName, OnPropertyChanged);
            listener.Add(SystemCheckedPropertyName, OnPropertyChanged);
            listener.Add(TemporaryCheckedPropertyName, OnPropertyChanged);
            listener.Add(ArchiveCheckedPropertyName, OnPropertyChanged);
            listener.Add(ReadOnlyCheckedPropertyName, OnPropertyChanged);
            listener.Add(HiddenCheckedPropertyName, OnPropertyChanged);
            listener.Add(CompressedCheckedPropertyName, OnPropertyChanged);
            listener.Add(EncryptedCheckedPropertyName, OnPropertyChanged);

            listenerModel = new PropertyChangedEventListener(Model.GetInstance());
            listenerModel.Add(Model.FileSelected, OnPropertyChanged);
            listenerModel.Add(Model.FormatDecided, OnPropertyChanged);

            if (string.IsNullOrEmpty(Settings.Default.FolderName))
            {
                FolderName = Directory.GetCurrentDirectory();
                Settings.Default.FolderName = FolderName;
            }
            else
            {
                FolderName = Settings.Default.FolderName;
            }
            DirectoryInfos.SelectedDirectoryName = FolderName;
            Files = Model.GetInstance().FileInfo.GetFileNames(DirectoryInfos.SelectedDirectoryName);
        }
        public ProgramEntryViewModel(ProgramEntry menuEntry)
            : base(menuEntry)
        {
            _menuEntry = menuEntry;
            FullPath = menuEntry.FullPath;
            IsDirectory = menuEntry.IsDirectory;
            Childs = ViewModelHelper.CreateReadOnlyDispatcherCollection(
                menuEntry.Childs,
                model => new ProgramEntryViewModel(model),
                DispatcherHelper.UIDispatcher
                );
            CompositeDisposable.Add(Childs);

            var listener = new PropertyChangedEventListener(DesktopStartMenuContext.Current)
                               {
                                   "IsApplicationActive",
                                   (sender, e) =>
                                   {
                                       if(DesktopStartMenuContext.Current.IsApplicationActive && IsExpand)
                                       {
                                           IsExpand = false;
                                       }
                                   }
                               };
        }
Esempio n. 19
0
        public MainWindowViewModel()
        {
            Dpp = new DppViewModel();
            CompositeDisposable.Add(Dpp);

            dppListener = new PropertyChangedEventListener(Dpp);
            CompositeDisposable.Add(Dpp);
            dppListener.Add(() => Dpp.Spectrum, OnSpectrumUpdated);

            PeakFitting = new PeakFittingViewModel();
            CompositeDisposable.Add(PeakFitting);

            peakFittingListener = new PropertyChangedEventListener(PeakFitting);
            CompositeDisposable.Add(peakFittingListener);
            peakFittingListener.Add(() => PeakFitting.Input, (s, e) => DoPeakFittingCommand.RaiseCanExecuteChanged());

            Tube = new TubeControlViewModel();
            CompositeDisposable.Add(Tube);

            SafetySignal = new SafetySignalViewModel();
            CompositeDisposable.Add(SafetySignal);

            Camera = new CameraControlViewModel();
            CompositeDisposable.Add(Camera);

            Reporting = new ReportingViewModel();
            CompositeDisposable.Add(Reporting);

            selfListener = new PropertyChangedEventListener(this, RaiseCanDoChanged);
            CompositeDisposable.Add(selfListener);
        }
Esempio n. 20
0
        public Stream()
        {
            _ps = new PlayStream();

            _listener = new PropertyChangedEventListener(_ps);
            _listener.RegisterHandler(UpdateHandlerProxy);
        }
Esempio n. 21
0
        public void Initialize()
        {
            modelListener = new PropertyChangedEventListener(Model);
            modelListener.Add(() => Model.IsRunning, (_, __) => RaisePropertyChanged(() => RunningState));
            modelListener.Add(() => Model.ServerHostName, (_, __) => RaisePropertyChanged(() => WindowCaption));

            consoleListListener = new CollectionChangedEventListener(Model.ConsoleList, (_, __) => UpdateNumConsole());

            // 他のVMのInitializeを読んでやる
            foreach (var vm in MainPanelMenu)
            {
                InitializeVM(vm);
            }
            foreach (var vm in ConsolePanelMenu)
            {
                InitializeVM(vm);
            }
            foreach (var vm in InfoPanelMenu)
            {
                InitializeVM(vm);
            }

            Model.ServerAddressRequired = ServerAddressRequired;
            Model.Start();
        }
Esempio n. 22
0
 public void Initialize()
 {
     kbtter   = Kbtter.Instance;
     listener = new PropertyChangedEventListener(kbtter);
     CompositeDisposable.Add(listener);
     RegisterHandlers();
     kbtter.Initialize();
     setting = Kbtter3Extension.LoadJson <Kbtter3Setting>(App.ConfigurationFileName);
     TimelineStatuses.CollectionChanged += (s, e) =>
     {
         DispatcherHelper.UIDispatcher.BeginInvoke((Action)(() =>
         {
             if (TimelineStatuses.Count > setting.MainWindow.StatusesShowMax)
             {
                 TimelineStatuses.RemoveAt(setting.MainWindow.StatusesShowMax);
             }
         }));
     };
     TimelineNotifications.CollectionChanged += (s, e) =>
     {
         DispatcherHelper.UIDispatcher.BeginInvoke((Action)(() =>
         {
             if (TimelineNotifications.Count > setting.MainWindow.NotificationsShowMax)
             {
                 TimelineNotifications.RemoveAt(setting.MainWindow.NotificationsShowMax);
             }
         }));
     };
 }
        public async void Initialize()
        {
            _model    = new Model();
            _listener = new PropertyChangedEventListener(_model)
            {
                nameof(_model.DownloadPluginDic),
                (_, __) =>
                DispatcherHelper.UIDispatcher.Invoke(() =>
                {
                    _DownloadPluginList.Clear();
                    foreach (var v in _model.DownloadPluginDic.Values)
                    {
                        MMDPluginPackage package;
                        _model.MMDInstalledPluginPackage.TryGetValue(v.Title, out package);
                        _DownloadPluginList.Add(new PluginData
                        {
                            LatestVersion  = v.LatestVersion,
                            NowVersion     = package?.Version ?? -1,
                            Title          = v.Title,
                            ReadMeFilePath = package?.ReadMeFilePath,
                            Url            = v.Url
                        });
                    }
                    RaisePropertyChanged(nameof(DownloadPluginList));
                })
            };

            // mmdを選択してもらう
            MessageBox.Show("Choose MikuMikuDance.exe (ver9.26 x64).");
            var ofd = new OpenFileDialog
            {
                FileName    = "MikuMikuDance.exe",
                Filter      = "exe file(*.exe)|*.exe|all file(*.*)|*.*",
                FilterIndex = 1,
                Title       = "Choose MikuMikuDance.exe (ver9.26 x64)"
            };


            if (ofd.ShowDialog() == false)
            {
                // キャンセルした場合は終了する
                MessageBox.Show("Canceled, so this program will end.");
                ExitWindow();
                return;
            }

            try
            {
                _model.SetMMDDirectory(ofd.FileName);
            }
            catch (Exception e)
            {
                // 選択したものが間違っていた場合は終了する
                MessageBox.Show(e.Message + "\nThis program will end.");
                ExitWindow();
                return;
            }
            await _model.LoadPluginData();
        }
        public void Initialize()
        {
            if (OS.IsWin8OrLater)
            {
                InstallShortcut();
            }
            else
            {
                InitializeNotifyIcon();
            }

            var rGamePCEL = PropertyChangedEventListener.FromSource(KanColleGame.Current);

            rGamePCEL.Add(nameof(KanColleGame.Current.IsStarted), delegate
            {
                var rPort = KanColleGame.Current.Port;
                rPort.Fleets.FleetsUpdated += rpFleets =>
                {
                    foreach (var rFleet in rpFleets)
                    {
                        rFleet.ExpeditionStatus.Returned += (rpFleetName, rpExpeditionName) =>
                        {
                            if (Preference.Instance.Notification.Expedition)
                            {
                                Show(StringResources.Instance.Main.Notification_Expedition, string.Format(StringResources.Instance.Main.Notification_Expedition_Content, rpFleetName, rpExpeditionName));
                            }
                        };
                        rFleet.ConditionRegeneration.Recovered += rpFleet =>
                        {
                            if (Preference.Instance.Notification.RecoveryFromFatigue)
                            {
                                Show(StringResources.Instance.Main.Notification_RecoveryFromFatigue, string.Format(StringResources.Instance.Main.Notification_RecoveryFromFatigue_Content, rpFleet.Name));
                            }
                        };
                        rFleet.AnchorageRepair.InterruptionNotification += () =>
                        {
                            if (Preference.Instance.Notification.AnchorageRepair)
                            {
                                Show(StringResources.Instance.Main.Notification_AnchorageRepair, StringResources.Instance.Main.Notification_AnchorageRepair_Content);
                            }
                        };
                    }
                };

                var rPortPCEL = PropertyChangedEventListener.FromSource(rPort);
                rPortPCEL.Add(nameof(rPort.ConstructionDocks), delegate
                {
                    foreach (var rConstructionDock in rPort.ConstructionDocks.Values)
                    {
                        rConstructionDock.ConstructionCompleted += rpShipName =>
                        {
                            if (Preference.Instance.Notification.Construction)
                            {
                                Show(StringResources.Instance.Main.Notification_Construction, string.Format(StringResources.Instance.Main.Notification_Construction_Content, rpShipName));
                            }
                        }
                    }
                    ;
                });
Esempio n. 25
0
        public MainWindowViewModel()
        {
            Op = new Operator(this);

            // Add event listeners.
            if (!Designer.IsInDesignMode)             // AddListener source may be null in Design mode.
            {
                _fileListPropertyChangedListener = new PropertyChangedEventListener(FileListPropertyChanged);
                PropertyChangedEventManager.AddListener(FileListCore, _fileListPropertyChangedListener, string.Empty);

                _settingsPropertyChangedListener = new PropertyChangedEventListener(ReactSettingsPropertyChanged);
                PropertyChangedEventManager.AddListener(Settings.Current, _settingsPropertyChangedListener, string.Empty);

                _operatorPropertyChangedListener = new PropertyChangedEventListener(ReactOperatorPropertyChanged);
                PropertyChangedEventManager.AddListener(Op, _operatorPropertyChangedListener, string.Empty);
            }

            // Subscribe event handlers.
            Subscription.Add(Observable.FromEvent
                             (
                                 handler => _currentFrameSizeChanged += handler,
                                 handler => _currentFrameSizeChanged -= handler
                             )
                             .Throttle(TimeSpan.FromMilliseconds(50))
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ => SetCurrentImage()));

            Subscription.Add(Observable.FromEvent
                             (
                                 handler => _autoCheckIntervalChanged += handler,
                                 handler => _autoCheckIntervalChanged -= handler
                             )
                             .Throttle(TimeSpan.FromMilliseconds(200))
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ => Op.ResetAutoTimer()));

            Subscription.Add(Observable.FromEvent
                             (
                                 handler => _targetConditionChanged += handler,
                                 handler => _targetConditionChanged -= handler
                             )
                             .Throttle(TimeSpan.FromMilliseconds(200))
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ =>
            {
                FileListCoreView.Refresh();
                Op.UpdateProgress();
            }));

            Subscription.Add(Observable.FromEventPattern
                             (
                                 handler => Op.ActivateRequested += handler,
                                 handler => Op.ActivateRequested -= handler
                             )
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ => ActivateRequested?.Invoke(this, EventArgs.Empty)));

            SetSample(1);
        }
Esempio n. 26
0
        internal OverviewViewModel()
        {
            var rPort = KanColleGame.Current.Port;

            var rPortPCEL = PropertyChangedEventListener.FromSource(rPort);

            rPortPCEL.Add(nameof(rPort.Ships), (s, e) => ShipCount                     = rPort.Ships.Count);
            rPortPCEL.Add(nameof(rPort.Equipment), (s, e) => EquipmentCount            = rPort.Equipment.Count);
            rPortPCEL.Add(nameof(rPort.RepairDocks), (s, e) => RepairDocks             = rPort.RepairDocks.Values.Select(r => new RepairDockViewModel(r)).ToList());
            rPortPCEL.Add(nameof(rPort.ConstructionDocks), (s, e) => ConstructionDocks = rPort.ConstructionDocks.Values.Select(r => new ConstructionDockViewModel(r)).ToList());
            rPortPCEL.Add(nameof(rPort.Admiral), delegate
            {
                if (!r_IsAdmiralInitialized)
                {
                    var rAdmiral     = rPort.Admiral;
                    var rAdmiralPCEL = PropertyChangedEventListener.FromSource(rAdmiral);
                    rAdmiralPCEL.Add(nameof(rAdmiral.MaxShipCount), (s, e) => CheckShipCapacity());
                    rAdmiralPCEL.Add(nameof(rAdmiral.MaxEquipmentCount), (s, e) => CheckEquipmentCapacity());

                    r_IsAdmiralInitialized = true;
                }

                CheckCapacity();
            });

            AirBase = new AirBaseViewModel();

            r_AirBasePCEL = PropertyChangedEventListener.FromSource(rPort.AirBase);
            r_AirBasePCEL.Add(nameof(rPort.AirBase.AllGroups), delegate
            {
                if (rPort.AirBase.Table.Count == 0)
                {
                    return;
                }

                DispatcherUtil.UIDispatcher.InvokeAsync(() =>
                {
                    if (RightTabs == null)
                    {
                        RightTabs = new ObservableCollection <ModelBase>();
                        OnPropertyChanged(nameof(RightTabs));
                    }

                    RightTabs.Add(AirBase);
                });

                r_AirBasePCEL.Dispose();
                r_AirBasePCEL = null;
            });

            ApiService.Subscribe("api_req_map/next", delegate
            {
                var rSortie = SortieInfo.Current;
                if (rSortie != null)
                {
                    ShipCount = rPort.Ships.Count + rSortie.PendingShipCount;
                }
            });
        }
Esempio n. 27
0
        public MainWindowViewModel()
        {
            mModel = new Model();
            var listener = new PropertyChangedEventListener(mModel);

            listener.RegisterHandler(nameof(Model.BindText), (s, e) => { RaisePropertyChanged(nameof(BindText)); });
            CompositeDisposable.Add(listener);
        }
Esempio n. 28
0
 public FilePeriodViewModel()
 {
     if (!Designer.IsInDesignMode)             // AddListener source may be null in Design mode.
     {
         _resourcesPropertyChangedListener = new PropertyChangedEventListener(ReactResourcesPropertyChanged);
         PropertyChangedEventManager.AddListener(ResourceService.Current, _resourcesPropertyChangedListener, nameof(ResourceService.Resources));
     }
 }
Esempio n. 29
0
        public void Initialize()
        {
            listener = new PropertyChangedEventListener(Model);

            listener.Add(() => Model.BitrateA, UpdateBitrate);
            listener.Add(() => Model.BitrateB, UpdateBitrate);
            listener.Add(() => Model.BitrateH264, UpdateBitrate);
        }
		public ApplicationViewMoel(TwitterApplication application)
		{
			this.Application = application;
			var listener = new PropertyChangedEventListener(application)
			{
				{ "Name", (sender, e) => this.RaisePropertyChanged("Name") },
			};
			this.CompositeDisposable.Add(listener);
		}
Esempio n. 31
0
 public void Initialize()
 {
     _listener = new PropertyChangedEventListener(_model)
     {
         { () => _model.Basic, UpdateBasic },
         { () => _model.IsMenuVisible, IsMenuVisibleChangedEventHandler }
     };
     UpdateBasic(_model, null);
 }
Esempio n. 32
0
        public VideoItemViewModel()
        {
            _Model = new VideoItemModel();

            //よくわからない modelに通知できていない
            var modelListener = new PropertyChangedEventListener(_Model, (sender, e) => RaisePropertyChanged(() => this.Text));

            base.CompositeDisposable.Add(modelListener);
        }
            public HandlerMemoryLeakTestClass(INotifyPropertyChanged publisher)
            {
                Listener = new PropertyChangedEventListener(publisher);

                // This handler refers "this".
                PropertyChangedEventHandler handler = (sender, e) => { ToString(); };

                Listener.RegisterHandler(handler);
                Listener.RegisterHandler("Dummy1", handler);
            }
Esempio n. 34
0
        internal FileItemViewModel(string source, string directoryPath)
        {
            Import(source, directoryPath);

            if (!Designer.IsInDesignMode)             // AddListener source may be null in Design mode.
            {
                resourcesPropertyChangedListener = new PropertyChangedEventListener(ReactResourcesPropertyChanged);
                PropertyChangedEventManager.AddListener(ResourceService.Current, resourcesPropertyChangedListener, "Resources");
            }
        }
        public TechnologyDevelopViewModel(GameInfo gameInfo, TechnologyDevelopWindow window)
        {
            this.gameInfo = gameInfo;
            this.window   = window;

            listener       = new PropertyChangedEventListener(gameInfo, PropertyChangedInGameInfo);
            window.Closed += (sender, eventArgs) => { listener.Dispose(); };

            this.Cancel = new CancelCommand(this);
        }
        internal MainWindowViewModel()
        {
            r_Page          = new InitializationPageViewModel(this);
            GameInformation = new GameInformationViewModel(this);

            ApiService.SubscribeOnce("api_start2", delegate
            {
                IsGameStarted = true;
                OnPropertyChanged(nameof(IsGameStarted));
            });

            ShowSessionToolCommand = new DelegatedCommand(() => WindowService.Instance.Show <SessionToolWindow>(r_SessionTool));

            ApiService.Subscribe("api_req_map/start", _ => ThemeManager.Instance.ChangeAccent(Accent.Brown));
            KanColleGame.Current.ReturnedFromSortie += _ => ThemeManager.Instance.ChangeAccent(Accent.Blue);

            Preference.Instance.Game.DisableHeavyDamageBlinkingWarning.Subscribe(rpValue =>
            {
                if (SortieInfo.Current == null)
                {
                    return;
                }

                if (!rpValue)
                {
                    ThemeManager.Instance.ChangeAccent(Accent.Brown);
                }
            });

            r_BlinkingBrownAccent = new Accent("BlinkingBrown", new Uri("pack://application:,,,/HeavenlyWind;component/Themes/Accents/BlinkingBrown.xaml"));

            PropertyChangedEventListener.FromSource(NotificationService.Instance)
            .Add(nameof(NotificationService.Instance.IsBlinking), delegate
            {
                if (NotificationService.Instance.IsBlinking)
                {
                    ThemeManager.Instance.ChangeAccent(r_BlinkingBrownAccent);
                }
            });

            UISetZoomCommand = new DelegatedCommand <double>(SetZoom);
            UIZoomInCommand  = new DelegatedCommand(() => SetZoom(Preference.Instance.UI.Zoom.Value + .05));
            UIZoomOutCommand = new DelegatedCommand(() => SetZoom(Preference.Instance.UI.Zoom.Value - .05));

            UIZoomFactors = new[] { .25, .5, .75, 1.0, 1.25, 1.5, 1.75, 2.0, 3.0, 4.0 }.Select(r => new UIZoomInfo(r, UISetZoomCommand)).ToArray();

            ShowConstructionHistoryCommand      = new DelegatedCommand(() => WindowService.Instance.Show <ConstructionHistoryWindow>());
            ShowDevelopmentHistoryCommand       = new DelegatedCommand(() => WindowService.Instance.Show <DevelopmentHistoryWindow>());
            ShowSortieHistoryCommand            = new DelegatedCommand(() => WindowService.Instance.Show <SortieHistoryWindow>());
            ShowExpeditionHistoryCommand        = new DelegatedCommand(() => WindowService.Instance.Show <ExpeditionHistoryWindow>());
            ShowScrappingHistoryCommand         = new DelegatedCommand(() => WindowService.Instance.Show <ScrappingHistoryWindow>());
            ShowResourceHistoryCommand          = new DelegatedCommand(() => WindowService.Instance.Show <ResourceHistoryWindow>());
            ShowSortieConsumptionHistoryCommand = new DelegatedCommand(() => WindowService.Instance.Show <SortieConsumptionHistoryWindow>());
            ShowSortieStatisticCommand          = new DelegatedCommand(() => WindowService.Instance.Show <SortieStatisticWindow>());
        }
Esempio n. 37
0
        protected void AddEventListener(INotifyPropertyChanged source, PropertyChangedEventHandler handler)
        {
            if (source == null) { throw new ArgumentException("source"); }
            if (handler == null) { throw new ArgumentException("handler"); }

            PropertyChangedEventListener listener = new PropertyChangedEventListener(source, handler);

            propertyEventListeners.Add(listener);

            PropertyChangedEventManager.AddListener(source, listener, "");
        }
Esempio n. 38
0
        public StreamManagerViewModel(Account account)
        {
            _selectedIndex = -1;
            _accountModel = account;
            _streamManagerModel = account.Stream;
            _streams = ViewModelHelper.CreateReadOnlyDispatcherCollection(
                _streamManagerModel.Streams, item => new StreamViewModel(item), App.Current.Dispatcher);

            CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this));
            _thisPropChangedEventListener.Add(() => IsActive, IsActive_PropertyChanged);
        }
        public NotificationManagerViewModel(NotificationManager model)
        {
            _managerModel = model;
            Items = new DispatcherCollection<NotificationStreamViewModel>(App.Current.Dispatcher);
            CompositeDisposable.Add(_modelPropChangedEventListener = new PropertyChangedEventListener(model));
            CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this));
            CompositeDisposable.Add(Observable.Interval(TimeSpan.FromSeconds(60)).Subscribe(Interval_Fired));

            _modelPropChangedEventListener.Add(() => model.UnreadItemCount, UnreadItemCount_PropertyChanged);
            _thisPropChangedEventListener.Add(() => IsActive, IsActive_PropertyChanged);
        }
Esempio n. 40
0
 protected EntryViewModel(Entry entry)
 {
     IconImage = entry.IconImage;
     DisplayName = entry.DisplayName;
     var listener = new PropertyChangedEventListener(entry)
                        {
                            "DisplayName",(sender,e) => DisplayName = entry.DisplayName,
                            "IconImage",(sender,e) => IconImage = entry.IconImage
                        };
     CompositeDisposable.Add(listener);
 }
Esempio n. 41
0
 public void Initialize()
 {
     listener = new PropertyChangedEventListener(Model);
     listener.Add(() => Model.DiskFreeSpace, (_, __) => {
         DiskItems = Model.DiskFreeSpace.Select(
             item => new DiskItemViewModel()
         {
             Model = item
         }).ToList();
     });
 }
        void Initialize()
        {
            MapAreas = KanColleGame.Current.MasterInfo.Expeditions.Values.Where(r => ExpeditionService.Instance.ContainsInfo(r.ID)).GroupBy(r => r.MapArea).Select(r => new ExpeditionGroupByMapArea(r)).ToList();
            OnPropertyChanged(nameof(MapAreas));

            r_PCELs = KanColleGame.Current.Port.Fleets.Table.Values.Skip(1).Select(r =>
            {
                var rPCEL = new PropertyChangedEventListener(r);
                rPCEL.Add(nameof(r.Ships), (s, e) => Update(r));
                return rPCEL;
            }).ToArray();
        }
Esempio n. 43
0
        static InputModel()
        {
            _disposables = new CompositeDisposable();
            _core = new InputCoreModel();
            _accounts = new AccountSelectorModel(_core);

            // link property changing
            var icmpc = new PropertyChangedEventListener(_core);
            icmpc.RegisterHandler(() => _core.CurrentInputData,
                                (o, e) => _accounts.CurrentInputDataChanged());
            _disposables.Add(icmpc);
            SetEventPropagation();
        }
Esempio n. 44
0
 public UserProfilePageViewModel(User us, MainWindowViewModel vm)
 {
     user = us;
     mainw = vm;
     mwlistener = new PropertyChangedEventListener(mainw);
     mwlistener.Add("TabClose", (s, e) =>
     {
         if (mainw.ClosedTabTag == this)
         {
             Dispose();
         }
     });
 }
 public UserCustomizableTimelineViewModel(MainWindowViewModel mv)
 {
     main = mv;
     listener = new PropertyChangedEventListener(kbtter);
     CompositeDisposable.Add(listener);
     listener.Add("Status", OnStatus);
     mwlistener = new PropertyChangedEventListener(main);
     mwlistener.Add("TabClose", (s, e) =>
     {
         if (main.ClosedTabTag==this)
         {
             Dispose();
         }
     });
 }
Esempio n. 46
0
        public MainWindowViewModel()
        {
            #region Timerモデル生成および聞き耳設定
            _timerModel = new TimerModel();
            var timerListener = new PropertyChangedEventListener(_timerModel);

            timerListener.RegisterHandler("NowTimerStatus", (sender, e) =>
            {
                if (_timerModel.NowTimerStatus == TimerModel.TimerStatus.CountDown)
                {
                    StartPauseButtonContent = "PAUSE";
                    TimerValueListIsEnable = false;
                }
                else
                {
                    StartPauseButtonContent = "START";
                    TimerValueListIsEnable = true;
                }
            });

            timerListener.RegisterHandler("TimerRemainValue", (sender, e) =>
            {
                RemainTime = _timerModel.TimerRemainValue.ToString(@"hh\:mm\:ss\:fff");
            });
            this.CompositeDisposable.Add(timerListener);
            #endregion

            #region Timer値リストモデル生成および聞き耳設定
            _timerValueListModel = TimerListFactory.Create();
            var timerValueListListener = new PropertyChangedEventListener(_timerValueListModel);

            timerValueListListener.RegisterHandler("TimerValueListModel", (sender, e) =>
            {
                TimerValueList = _timerValueListModel.getEditTimerValueList();

                // コンボボックス表示用文字列再構築
                TimerValueStrList.Clear();
                foreach(TimeSpan ts in TimerValueList)
                {
                    TimerValueStrList.Add(MyUtil.TimeSpanTo24hStr(ts));
                }
                RaisePropertyChanged("TimerValueStrList");
            });

            this.CompositeDisposable.Add(timerValueListListener);

            #endregion
        }
        public void MultipleHandlerLifeCycleTest()
        {
            var handler1Success = false;
            var handler2Success = false;

            var publisher = new TestEventPublisher();

            var listener = new PropertyChangedEventListener(publisher);

            //------------------
            handler1Success.Is(false);
            handler2Success.Is(false);

            publisher.RaisePropertyChanged(string.Empty);

            handler1Success.Is(false);
            handler2Success.Is(false);

            //------------------
            listener.RegisterHandler((sender, e) => handler1Success = true);

            publisher.RaisePropertyChanged(string.Empty);

            handler1Success.Is(true);
            handler2Success.Is(false);

            //------------------
            handler1Success = false;
            handler2Success = false;

            listener.RegisterHandler((sender, e) => handler2Success = true);

            publisher.RaisePropertyChanged(string.Empty);

            handler1Success.Is(true);
            handler2Success.Is(true);

            //------------------
            handler1Success = false;
            handler2Success = false;

            listener.Dispose();
            publisher.RaisePropertyChanged(string.Empty);

            handler1Success.Is(false);
            handler2Success.Is(false);
        }
Esempio n. 48
0
        public AccountViewModel(Account model, MainViewModel managerVM)
        {
            _accountModel = model;
            _userName = _accountModel.Builder.Name;
            _userMailAddress = _accountModel.Builder.Email;
            _manager = managerVM;
            _stream = new StreamManagerViewModel(_accountModel);
            _notification = new NotificationManagerViewModel(_accountModel.Notification);
            OpenAccountListCommand = new ViewModelCommand(OpenAccountListCommand_Execute);
            ActivateCommand = new ViewModelCommand(ActivateCommand_Execute);
            CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this));

            _thisPropChangedEventListener.Add(() => IsActive, IsActive_PropertyChanged);
            DataCacheDictionary
                .DownloadImage(new Uri(_accountModel.Builder.IconUrl.Replace("$SIZE_SEGMENT", "s38-c-k")))
                .ContinueWith(tsk => UserIconUrl = tsk.Result);
        }
        public MaterialManager(MaterialChartPlugin plugin)
        {
            this.plugin = plugin;

            this.Log = new MaterialLog(plugin);

            KanColleClient.Current
                // KanColleClientのIsStartedがtrueに変更されたら資材データの購読を開始
                .Subscribe(nameof(KanColleClient.IsStarted), () =>
                {
                    var materials = KanColleClient.Current.Homeport.Materials;
                    var adomiral = KanColleClient.Current.Homeport.Admiral;
                    listener = new PropertyChangedEventListener(materials)
                    {
                        { nameof(materials.Fuel),  (_,__) => RaisePropertyChanged(nameof(Fuel)) },
                        { nameof(materials.Ammunition),  (_,__) => RaisePropertyChanged(nameof(Ammunition)) },
                        { nameof(materials.Steel),  (_,__) => RaisePropertyChanged(nameof(Steel)) },
                        { nameof(materials.Bauxite),  (_,__) => RaisePropertyChanged(nameof(Bauxite)) },
                        { nameof(materials.InstantRepairMaterials),  (_,__) => RaisePropertyChanged(nameof(RepairTool)) },
                        { nameof(adomiral.Level), (_, __) => RaisePropertyChanged(nameof(StorableMaterialLimit)) }
                    };

                    // 資材のロギング
                    Observable.FromEvent<PropertyChangedEventHandler, PropertyChangedEventArgs>(
                        h => (sender, e) => h(e),
                        h => materials.PropertyChanged += h,
                        h => materials.PropertyChanged -= h)
                        // プロパティ名が一致しているか調べて
                        .Where(e => IsObservedPropertyName(e.PropertyName))
                        // まとめて通知が来るので10ms待機して
                        .Throttle(TimeSpan.FromMilliseconds(10))
                        // 処理
                        .Subscribe(async _ =>
                        {
                            if (Log.HasLoaded)
                            {
                                Log.History.Add(new TimeMaterialsPair(DateTime.Now, Fuel, Ammunition, Steel, Bauxite, RepairTool,
                                    materials.DevelopmentMaterials, materials.InstantBuildMaterials, materials.ImprovementMaterials));
                                await Log.SaveAsync();
                            }
                        });

                    this.IsAvailable = true;

                }, false);
        }
Esempio n. 50
0
        public StreamViewModel(Stream circle)
        {
            _circleModel = circle;
            _name = circle.Name;
            _status = StreamStateType.UnLoaded;
            ReconnectCommand = new ViewModelCommand(ReconnectCommand_Executed);
            ResumeCommand = new ViewModelCommand(ReconnectCommand_Executed);
            ResumeButton = new ResumeButtonViewModel() { ClickCommand = ReconnectCommand };
            CompositeDisposable.Add(_modelPropChangedEventListener = new PropertyChangedEventListener(circle));
            CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this));
            CompositeDisposable.Add(_activities = ViewModelHelper.CreateReadOnlyDispatcherCollection<Activity, ViewModel>(
                _circleModel.Activities, item => new ActivityViewModel(item, _isActive), App.Current.Dispatcher));

            _modelPropChangedEventListener.Add(() => circle.Status, Model_Status_PropertyChanged);
            _modelPropChangedEventListener.Add(() => circle.ChangedActivityCount, Model_ChangedActivityCount_PropertyChanged);
            _thisPropChangedEventListener.Add(() => ScrollOffset, ScrollOffset_PropertyChanged);
        }
Esempio n. 51
0
 public ActivityViewModel(Activity activity, bool isActive)
 {
     _model = activity;
     _isActive = isActive;
     _comments = ViewModelHelper.CreateReadOnlyDispatcherCollection(
         _model.Comments, item => new CommentViewModel(item, _isActive), App.Current.Dispatcher);
     _comments.CollectionChanged += _comments_CollectionChanged;
     SendCommentCommand = new ViewModelCommand(SendCommentCommand_Executed);
     CancelCommentCommand = new ViewModelCommand(CancelCommentCommand_Executed);
     CompositeDisposable.Add(_comments);
     CompositeDisposable.Add(_thisPropChangedEventListener = new PropertyChangedEventListener(this));
     CompositeDisposable.Add(
         Observable.Merge(
             Observable.Return(Unit.Default),
             Observable.FromEventPattern<EventHandler, EventArgs>(
                 handler => _model.Updated += handler,
                 handler => _model.Updated -= handler).Select(info => Unit.Default))
             .Subscribe(info => Task.Run(() => Refresh(_isActive))));
     _thisPropChangedEventListener.Add(() => IsCheckedCommentsHeader, IsCheckedCommentsHeader_PropertyChanged);
 }
Esempio n. 52
0
        private void InitializeEventListeners()
        {
            listener = new PropertyChangedEventListener(Kbtter);
            CompositeDisposable.Add(listener);

            listener.Add("AuthenticatedUser", (s, e) =>
            {
                View.LoginUser.Dispose();
                View.LoginUser = new UserViewModel(Kbtter.AuthenticatedUser, this);
                UpdateStatusCommand.RaiseCanExecuteChanged();
            });

            listener.Add("NotifyText", (s, e) =>
            {
                View.Notify(Kbtter.NotifyText);
            });

            listener.Add("HeadlineText", (s, e) =>
            {
                View.HeadlineText = Kbtter.HeadlineText;
                View.HeadlineUserImage = Kbtter.HeadlineUserImage;
            });
        }
        public void FilteredHandlerLifeCycleTest()
        {
            var handler1Called = false;
            var handler2Called = false;
            var handler3Called = false;

            var publisher = new TestEventPublisher();

            var listener = new PropertyChangedEventListener(publisher);

            listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; });
            listener.RegisterHandler("Dummy2", (sender, e) => { e.PropertyName.Is("Dummy2"); handler2Called = true; });
            listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler3Called = true; });

            publisher.RaisePropertyChanged("Dummy1");
            publisher.RaisePropertyChanged("Dummy2");

            handler1Called.Is(true);
            handler2Called.Is(true);
            handler3Called.Is(true);

            //------------------
            handler1Called = false;
            handler2Called = false;
            handler3Called = false;

            listener.Dispose();
            publisher.RaisePropertyChanged("Dummy1");
            publisher.RaisePropertyChanged("Dummy2");

            handler1Called.Is(false);
            handler2Called.Is(false);
            handler3Called.Is(false);
        }
Esempio n. 54
0
        public InputCoreViewModel(InputViewModel parent)
        {
            this._parent = parent;
            this._provider = new InputAreaSuggestItemProvider();

            CompositeDisposable.Add(
                this._bindingHashtags = ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx(
                    InputModel.InputCore.BindingHashtags,
                    tag => new BindHashtagViewModel(tag, () => UnbindHashtag(tag)),
                    DispatcherHelper.UIDispatcher));
            CompositeDisposable.Add(_bindingHashtags
                                        .ListenCollectionChanged()
                                        .Subscribe(_ =>
                                        {
                                            InputData.BoundTags = _bindingHashtags.Select(h => h.Hashtag).ToArray();
                                            RaisePropertyChanged(() => IsBindingHashtagExisted);
                                        }));
            _bindableHashtagCandidates =
                new DispatcherCollection<BindHashtagViewModel>(DispatcherHelper.UIDispatcher);
            CompositeDisposable.Add(_bindableHashtagCandidates
                                        .ListenCollectionChanged()
                                        .Subscribe(_ => RaisePropertyChanged(() => IsBindableHashtagExisted)));

            CompositeDisposable.Add(_draftedInputs =
                                    ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx(
                    InputModel.InputCore.Drafts,
                                        _ =>
                                        new InputDataViewModel(this, _, vm => InputModel.InputCore.Drafts.Remove(vm)),
                                        DispatcherHelper.UIDispatcher));

            CompositeDisposable.Add(_draftedInputs
                                        .ListenCollectionChanged()
                                        .Subscribe(_ =>
                                        {
                                            RaisePropertyChanged(() => DraftCount);
                                            RaisePropertyChanged(() => IsDraftsExisted);
                                        }));

            // listen setting changed
            CompositeDisposable.Add(
                Setting.SuppressTagBindingInReply.ListenValueChanged(
                    _ => RaisePropertyChanged(() => IsBindHashtagEnabled)));

            // listen text control
            CompositeDisposable.Add(new EventListener<Action<CursorPosition>>(
                h => InputModel.SetCursorRequest += h,
                h => InputModel.SetCursorRequest -= h,
                SetCursor));
            var plistener = new PropertyChangedEventListener(InputModel.InputCore);
            plistener.Add(() => InputModel.InputCore.CurrentInputData, (_, e) => InputDataChanged());
            CompositeDisposable.Add(plistener);

            // initialize clipboard watcher.
            ClipboardWatcher watcher;
            CompositeDisposable.Add(watcher = new ClipboardWatcher());
            watcher.ClipboardChanged += (o, e) => RaisePropertyChanged(() => IsClipboardContentImage);
            watcher.StartWatching();
            Setting.DisableGeoLocationService.ValueChanged += this.UpdateGeoLocationService;
            this.UpdateGeoLocationService(Setting.DisableGeoLocationService.Value);
        }
Esempio n. 55
0
 public DirectoryInfos()
 {
     listener = new PropertyChangedEventListener(this);
     listener.Add(IsExpandedPropertyName, OnPropertyChanged);
     listener.Add(IsSelectedPropertyName, OnPropertyChanged);
 }
        public void AddHandlerKindTest()
        {
            var handler1Called = false;
            var handler2Called = false;
            var handler3Called = false;
            var handler4Called = false;
            var handler5Called = false;

            var publisher = new TestEventPublisher();
            var listener1 = new PropertyChangedEventListener(publisher)
            {
                {"Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; }},
                {() => publisher.Dummy2,
                        (sender, e) => { e.PropertyName.Is("Dummy2"); handler2Called = true;},
                        (sender, e) => { e.PropertyName.Is("Dummy2"); handler3Called = true;}
                },
                (sender,e) => handler4Called = true,
                {"Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler5Called = true; }}
            };

            publisher.RaisePropertyChanged(null);

            handler1Called.Is(false);
            handler2Called.Is(false);
            handler3Called.Is(false);
            handler4Called.Is(true);
            handler5Called.Is(false);

            handler4Called = false;

            publisher.RaisePropertyChanged("Dummy1");

            handler1Called.Is(true);
            handler2Called.Is(false);
            handler3Called.Is(false);
            handler4Called.Is(true);
            handler5Called.Is(true);

            handler1Called = false;
            handler4Called = false;
            handler5Called = false;

            publisher.RaisePropertyChanged("Dummy2");

            handler1Called.Is(false);
            handler2Called.Is(true);
            handler3Called.Is(true);
            handler4Called.Is(true);
            handler5Called.Is(false);

            handler1Called = false;
            handler2Called = false;
            handler3Called = false;
            handler4Called = false;
            handler5Called = false;

            listener1.Dispose();

            publisher.RaisePropertyChanged("Dummy1");
            publisher.RaisePropertyChanged("Dummy2");

            handler1Called.Is(false);
            handler2Called.Is(false);
            handler3Called.Is(false);
            handler4Called.Is(false);
            handler5Called.Is(false);
        }
        public void MultiThreadHandlerTest()
        {
            var publisher = new TestEventPublisher();

            var listener = new PropertyChangedEventListener(publisher);

            var handlerCalledCount = 0;

            var parentTask = new Task(() =>
            {
                var tf = new TaskFactory(TaskCreationOptions.AttachedToParent, TaskContinuationOptions.AttachedToParent);

                for (int i = 0; i < 50; i++)
                {
                    tf.StartNew(() =>
                            {
                                for (int f = 0; f < 500; f++)
                                {
                                    listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handlerCalledCount++; });
                                }

                            });
                }
            });

            parentTask.Start();
            parentTask.Wait();

            handlerCalledCount.Is(0);

            publisher.RaisePropertyChanged("Dummy1");

            handlerCalledCount.Is(25000);

            handlerCalledCount = 0;

            listener.Dispose();
            publisher.RaisePropertyChanged("Dummy1");

            handlerCalledCount.Is(0);
        }
Esempio n. 58
0
        public InputCoreViewModel(InputViewModel parent)
        {
            this._parent = parent;
            this._provider = new InputAreaSuggestItemProvider();

            CompositeDisposable.Add(
                this._bindingHashtags = ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx(
                    InputModel.InputCore.BindingHashtags,
                    tag => new BindHashtagViewModel(tag, () => UnbindHashtag(tag)),
                    DispatcherHelper.UIDispatcher));
            CompositeDisposable.Add(_bindingHashtags
                                        .ListenCollectionChanged()
                                        .Subscribe(_ =>
                                        {
                                            InputData.BoundTags = _bindingHashtags.Select(h => h.Hashtag).ToArray();
                                            RaisePropertyChanged(() => IsBindingHashtagExisted);
                                        }));
            _bindableHashtagCandidates =
                new DispatcherCollection<BindHashtagViewModel>(DispatcherHelper.UIDispatcher);
            CompositeDisposable.Add(_bindableHashtagCandidates
                                        .ListenCollectionChanged()
                                        .Subscribe(_ => RaisePropertyChanged(() => IsBindableHashtagExisted)));

            CompositeDisposable.Add(_draftedInputs =
                                    ViewModelHelperRx.CreateReadOnlyDispatcherCollectionRx(
                    InputModel.InputCore.Drafts,
                                        _ =>
                                        new InputDataViewModel(this, _, vm => InputModel.InputCore.Drafts.Remove(vm)),
                                        DispatcherHelper.UIDispatcher));

            CompositeDisposable.Add(_draftedInputs
                                        .ListenCollectionChanged()
                                        .Subscribe(_ =>
                                        {
                                            RaisePropertyChanged(() => DraftCount);
                                            RaisePropertyChanged(() => IsDraftsExisted);
                                        }));

            // listen setting changed
            CompositeDisposable.Add(
                Setting.SuppressTagBindingInReply.ListenValueChanged(
                    _ => RaisePropertyChanged(() => IsBindHashtagEnabled)));

            // listen text control
            CompositeDisposable.Add(new EventListener<Action<CursorPosition>>(
                h => InputModel.SetCursorRequest += h,
                h => InputModel.SetCursorRequest -= h,
                SetCursor));
            var plistener = new PropertyChangedEventListener(InputModel.InputCore);
            plistener.Add(() => InputModel.InputCore.CurrentInputData, (_, e) => InputDataChanged());
            CompositeDisposable.Add(plistener);

            // create temporary directory and reserve deletion before exit app.
            do
            {
                _tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            } while (Directory.Exists(_tempDir));
            Directory.CreateDirectory(_tempDir);
            App.ApplicationExit += () =>
            {
                try
                {
                    Directory.Delete(this._tempDir, true);
                }
                // ReSharper disable once EmptyGeneralCatchClause
                catch (Exception)
                {
                    // I think that is sign from God that I must not delete that folder if failed.
                }
            };

            // initialize clipboard watcher.
            ClipboardWatcher watcher;
            CompositeDisposable.Add(watcher = new ClipboardWatcher());
            watcher.ClipboardChanged += (o, e) => RaisePropertyChanged(() => IsClipboardContentImage);
            watcher.StartWatching();
            Setting.DisableGeoLocationService.ValueChanged += this.UpdateGeoLocationService;
            this.UpdateGeoLocationService(Setting.DisableGeoLocationService.Value);
        }
        public void SourceReferenceMemoryLeakTest()
        {
            var handler1Called = false;

            var publisherStrongReference = new TestEventPublisher();
            var publisherWeakReference = new WeakReference<TestEventPublisher>(publisherStrongReference);

            var listener = new PropertyChangedEventListener(publisherStrongReference);
            listener.RegisterHandler("Dummy1", (sender, e) => { e.PropertyName.Is("Dummy1"); handler1Called = true; });

            publisherStrongReference.RaisePropertyChanged("Dummy1");

            handler1Called.Is(true);

            listener.Dispose();
            publisherStrongReference = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            TestEventPublisher resultPublisher = null;
            publisherWeakReference.TryGetTarget(out resultPublisher).Is(false);
            resultPublisher.IsNull();
        }
Esempio n. 60
0
 public void Initialize()
 {
     listener = new PropertyChangedEventListener(kbtter);
     CompositeDisposable.Add(listener);
 }