Ejemplo n.º 1
0
 public TabViewModel(ColumnViewModel owner, TabModel tabModel)
 {
     _owner = owner;
     _model = tabModel;
     tabModel.Activate();
     CompositeDisposable.Add(
         Observable.FromEvent(
             _ => Model.Timeline.OnNewStatusArrived += _,
             _ => Model.Timeline.OnNewStatusArrived -= _)
                   .Subscribe(_ => UnreadCount++));
     CompositeDisposable.Add(
         Observable.FromEvent<ScrollLockStrategy>(
             handler => Setting.ScrollLockStrategy.OnValueChanged += handler,
             handler => Setting.ScrollLockStrategy.OnValueChanged -= handler)
                   .Subscribe(_ =>
                   {
                       RaisePropertyChanged(() => IsScrollLock);
                       RaisePropertyChanged(() => IsScrollLockExplicitEnabled);
                   }));
     CompositeDisposable.Add(() => Model.Deactivate());
     CompositeDisposable.Add(
         Observable.FromEvent(
         h => tabModel.OnBindingAccountIdsChanged += h,
         h => tabModel.OnBindingAccountIdsChanged -= h)
         .Subscribe(_ => DispatcherHolder.Enqueue(() => Timeline.ForEach(t => t.BindingAccounts = Model.BindingAccountIds))));
     IsLoading = true;
     Observable.Defer(
         () =>
         Observable.Start(() => Model.Timeline.ReadMore(null, true))
                   .Merge(Observable.Start(() => Model.ReceiveTimelines(null))))
               .SelectMany(_ => _)
               .Finally(() => IsLoading = false)
               .Subscribe();
 }
Ejemplo n.º 2
0
 public void CloseTab(ColumnViewModel column, TabViewModel tab)
 {
     var ci = _columns.IndexOf(column);
     var ti = column.Tabs.IndexOf(tab);
     TabManager.CloseTab(ci, ti);
 }
Ejemplo n.º 3
0
 public TabViewModel(ColumnViewModel parent, TabModel tabModel)
 {
     _parent = parent;
     _model = tabModel;
     tabModel.Activate();
     CompositeDisposable.Add(
         Observable.FromEvent<TwitterStatus>(
             h => Model.Timeline.NewStatusArrival += h,
             h =>
             {
                 if (Model.Timeline != null)
                     Model.Timeline.NewStatusArrival -= h;
             }).Subscribe(_ => UnreadCount++));
     BindTimeline();
     CompositeDisposable.Add(
         Observable.FromEvent<ScrollLockStrategy>(
             handler => Setting.ScrollLockStrategy.ValueChanged += handler,
             handler => Setting.ScrollLockStrategy.ValueChanged -= handler)
                   .Subscribe(_ =>
                   {
                       RaisePropertyChanged(() => IsScrollLock);
                       RaisePropertyChanged(() => IsScrollLockExplicitEnabled);
                   }));
     CompositeDisposable.Add(() => Model.Deactivate());
     if (Model.FilterQuery.PredicateTreeRoot != null)
     {
         CompositeDisposable.Add(
             Observable.FromEvent(
                 h => Model.FilterQuery.InvalidateRequired += h,
                 h => Model.FilterQuery.InvalidateRequired -= h)
                       .Subscribe(_ =>
                       {
                           var count = Interlocked.Increment(ref _refreshCount);
                           Observable.Timer(TimeSpan.FromSeconds(3))
                                     .Where(__ => Interlocked.CompareExchange(ref _refreshCount, 0, count) == count)
                                     .Subscribe(__ =>
                                     {
                                         System.Diagnostics.Debug.WriteLine("* invalidate executed: " + Name);
                                         // regenerate filter query
                                         Model.RefreshEvaluator();
                                         Model.InvalidateCollection();
                                         BindTimeline();
                                     });
                       }));
     }
     CompositeDisposable.Add(
         Observable.FromEvent(
             h => tabModel.BindingAccountIdsChanged += h,
             h => tabModel.BindingAccountIdsChanged -= h)
                   .Subscribe(
                       _ => DispatcherHolder.Enqueue(
                           () => Timeline.ForEach(t => t.BindingAccounts = Model.BindingAccountIds),
                           DispatcherPriority.Background)));
     CompositeDisposable.Add(
         Observable.FromEvent<bool>(
             h => tabModel.ConfigurationUpdated += h,
             h => tabModel.ConfigurationUpdated -= h)
                   .Subscribe(timelineModelRegenerated =>
                   {
                       RaisePropertyChanged(() => Name);
                       RaisePropertyChanged(() => UnreadCount);
                       if (timelineModelRegenerated)
                       {
                           BindTimeline();
                       }
                   }));
     CompositeDisposable.Add(
         Observable.FromEvent(
         h => tabModel.SetPhysicalFocusRequired += h,
         h => tabModel.SetPhysicalFocusRequired -= h)
         .Subscribe(_ => this.Messenger.Raise(new InteractionMessage("SetPhysicalFocus"))));
 }