public ViewConditionsModel(VideoSourcesViewModel VideoSourcesViewModel, VideoWritersViewModel VideoWritersViewModel, Settings Settings, RecordingModel RecordingModel, AudioSource AudioSource) { IsRegionMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is RegionSourceProvider) .ToReadOnlyReactivePropertySlim(); IsAudioMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is NoVideoSourceProvider) .ToReadOnlyReactivePropertySlim(); MultipleVideoWriters = VideoWritersViewModel.AvailableVideoWriters .ObserveProperty(M => M.Count) .Select(M => M > 1) .ToReadOnlyReactivePropertySlim(); IsFFmpeg = VideoWritersViewModel .ObserveProperty(M => M.SelectedVideoWriterKind) .Select(M => M is FFmpegWriterProvider || M is StreamingWriterProvider) .ToReadOnlyReactivePropertySlim(); IsVideoQuality = VideoWritersViewModel .ObserveProperty(M => M.SelectedVideoWriterKind) .Select(M => !(M is DiscardWriterProvider)) .ToReadOnlyReactivePropertySlim(); CanChangeWebcam = new[] { RecordingModel .ObserveProperty(M => M.RecorderState) .Select(M => M == RecorderState.NotRecording), Settings.WebcamOverlay .ObserveProperty(M => M.SeparateFile) } .CombineLatest(M => !M[1] || M[0]) // Not SeparateFile or NotRecording .ToReadOnlyReactivePropertySlim(); CanChangeAudioSources = new[] { RecordingModel .ObserveProperty(M => M.RecorderState) .Select(M => M == RecorderState.NotRecording), Settings.Audio .ObserveProperty(M => M.SeparateFilePerSource) } .CombineLatest(M => AudioSource.CanChangeSourcesDuringRecording || !M[1] || M[0]) // Not SeparateFilePerSource or NotRecording .ToReadOnlyReactivePropertySlim(); IsEnabled = RecordingModel .ObserveProperty(M => M.RecorderState) .Select(M => M == RecorderState.NotRecording) .ToReadOnlyReactivePropertySlim(); }
public ViewConditionsModel(VideoSourcesViewModel VideoSourcesViewModel, VideoWritersViewModel VideoWritersViewModel, Settings Settings, RecordingModel RecordingModel, AudioSourceViewModel AudioSourceViewModel) { IsRegionMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is RegionSourceProvider) .ToReadOnlyReactivePropertySlim(); IsAudioMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is NoVideoSourceProvider) .ToReadOnlyReactivePropertySlim(); MultipleVideoWriters = VideoWritersViewModel.AvailableVideoWriters .ObserveProperty(M => M.Count) .Select(M => M > 1) .ToReadOnlyReactivePropertySlim(); IsFFmpeg = VideoWritersViewModel .ObserveProperty(M => M.SelectedVideoWriterKind) .Select(M => M is FFmpegWriterProvider || M is StreamingWriterProvider) .ToReadOnlyReactivePropertySlim(); IsVideoQuality = VideoWritersViewModel .ObserveProperty(M => M.SelectedVideoWriterKind) .Select(M => M is DiscardWriterProvider) .Select(M => !M) .ToReadOnlyReactivePropertySlim(); IsReplayMode = Settings .Video .ObserveProperty(M => M.RecorderMode) .Select(M => M == RecorderMode.Replay) .ToReadOnlyReactivePropertySlim(); CanChangeWebcam = new[] { RecordingModel .ObserveProperty(M => M.RecorderState) .Select(M => M == RecorderState.NotRecording), Settings.WebcamOverlay .ObserveProperty(M => M.SeparateFile), VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is WebcamSourceProvider) } .CombineLatest(M => { var notRecording = M[0]; var separateFile = M[1]; var webcamMode = M[2]; if (webcamMode) { return(notRecording); } return(!separateFile || notRecording); }) .ToReadOnlyReactivePropertySlim(); IsEnabled = RecordingModel .ObserveProperty(M => M.RecorderState) .Select(M => M == RecorderState.NotRecording) .ToReadOnlyReactivePropertySlim(); CanWebcamSeparateFile = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is WebcamSourceProvider) .Select(M => !M) .ToReadOnlyReactivePropertySlim(); IsAroundMouseMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is AroundMouseSourceProvider) .ToReadOnlyReactivePropertySlim(); ShowSourceNameBox = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is RegionSourceProvider || M is AroundMouseSourceProvider) .Select(M => !M) .ToReadOnlyReactivePropertySlim(); }
public ViewConditionsModel(VideoSourcesViewModel VideoSourcesViewModel, VideoWritersViewModel VideoWritersViewModel, Settings Settings, RecordingModel RecordingModel, AudioSourceViewModel AudioSourceViewModel) { IsRegionMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is RegionSourceProvider) .ToReadOnlyReactivePropertySlim(); IsAudioMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is NoVideoSourceProvider) .ToReadOnlyReactivePropertySlim(); IsStepsMode = Settings .Video .ObserveProperty(M => M.RecorderMode) .Select(M => M == RecorderMode.Steps) .ToReadOnlyReactivePropertySlim(); IsNotAudioOrStepsMode = new[] { VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is NoVideoSourceProvider), IsStepsMode } .CombineLatest(M => { var audioMode = M[0]; var stepsMode = M[1]; return(!audioMode && !stepsMode); }) .ToReadOnlyReactivePropertySlim(); MultipleVideoWriters = VideoWritersViewModel.AvailableVideoWriters .ObserveProperty(M => M.Count) .Select(M => M > 1) .ToReadOnlyReactivePropertySlim(); IsFFmpeg = VideoWritersViewModel .ObserveProperty(M => M.SelectedVideoWriterKind) .Select(M => M is FFmpegWriterProvider || M is StreamingWriterProvider) .ToReadOnlyReactivePropertySlim(); IsVideoQuality = VideoWritersViewModel .ObserveProperty(M => M.SelectedVideoWriterKind) .Select(M => M is DiscardWriterProvider) .Select(M => !M) .ToReadOnlyReactivePropertySlim(); IsReplayMode = Settings .Video .ObserveProperty(M => M.RecorderMode) .Select(M => M == RecorderMode.Replay) .ToReadOnlyReactivePropertySlim(); CanChangeWebcam = new[] { RecordingModel .ObserveProperty(M => M.RecorderState) .Select(M => M == RecorderState.NotRecording), Settings.WebcamOverlay .ObserveProperty(M => M.SeparateFile), VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is WebcamSourceProvider) } .CombineLatest(M => { var notRecording = M[0]; var separateFile = M[1]; var webcamMode = M[2]; if (webcamMode) { return(notRecording); } return(!separateFile || notRecording); }) .ToReadOnlyReactivePropertySlim(); IsEnabled = RecordingModel .ObserveProperty(M => M.RecorderState) .Select(M => M == RecorderState.NotRecording) .ToReadOnlyReactivePropertySlim(); CanWebcamSeparateFile = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is WebcamSourceProvider) .Select(M => !M) .ToReadOnlyReactivePropertySlim(); IsAroundMouseMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is AroundMouseSourceProvider) .ToReadOnlyReactivePropertySlim(); IsWebcamMode = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is WebcamSourceProvider) .ToReadOnlyReactivePropertySlim(); ShowSourceNameBox = VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M is RegionSourceProvider || M is AroundMouseSourceProvider) .Select(M => !M) .ToReadOnlyReactivePropertySlim(); StepsBtnEnabled = new[] { IsEnabled, VideoSourcesViewModel .ObserveProperty(M => M.SelectedVideoSourceKind) .Select(M => M.SupportsStepsMode) } .CombineLatestValuesAreAllTrue() .ToReadOnlyReactivePropertySlim(); FpsVisibility = RecordingModel.ObserveProperty(M => M.RecorderState) .CombineLatest(IsNotAudioOrStepsMode, (RecorderState, IsNotAudioOrStepsMode) => RecorderState == RecorderState.Recording && IsNotAudioOrStepsMode) .Select(M => M ? Visibility.Visible : Visibility.Hidden) .ToReadOnlyReactivePropertySlim(); }