public MainWindow() { DataContext = this; InitializeComponent(); if (DesignerProperties.GetIsInDesignMode(this)) { this.actionService = new DesignerActionService(); this.hotkeyService = new DesignerApplicationHotkeyService(); SelectedFileService = new DesignerSelectedFileService(); SettingService = new DesignerAppSettingService(); AudioRecordingService = new DesignerAudioRecordingService(); AudioPlaybackService = new DesignerAudioPlaybackService(); return; } else { // ToDo: Evil Hack to have the cake (see actual design in design mode) and eat it too (have different styles at runtime) this.Resources = null; this.actionService = UnityHandler.UnityContainer.Resolve <IActionService>(); //actionService.ChangeTheme("Simple_Black"); //this.InvalidateVisual(); this.hotkeyService = UnityHandler.UnityContainer.Resolve <IApplicationHotkeyService>(); SelectedFileService = UnityHandler.UnityContainer.Resolve <ISelectedFileService>(); SettingService = UnityHandler.UnityContainer.Resolve <IAppSettingService>(); SettingService.PropertyChanged += SettingService_PropertyChanged; AudioRecordingService = UnityHandler.UnityContainer.Resolve <IAudioRecordingService>(); AudioRecordingService.PropertyChanged += AudioRecordingService_PropertyChanged; AudioPlaybackService = UnityHandler.UnityContainer.Resolve <IAudioPlaybackService>(); AudioPlaybackService.PropertyChanged += AudioPlaybackService_PropertyChanged; // try restore last window positon if (!SettingService.MainWindowLeftX.HasValue || !SettingService.MainWindowTopY.HasValue) { this.Left = (SystemParameters.PrimaryScreenWidth / 2) - (this.Width / 2); this.Top = (SystemParameters.PrimaryScreenHeight / 2) - (this.Height / 2); } else { this.Left = SettingService.MainWindowLeftX.Value; this.Top = SettingService.MainWindowTopY.Value; } this.KeyDown += Window_KeyDown; this.MouseRightButtonUp += MainWindow_MouseRightButtonUp; trayIcon = new System.Windows.Forms.NotifyIcon { Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName), Visible = true }; trayIcon.Click += new EventHandler(TrayIcon_Click); trayIcon.DoubleClick += new EventHandler(TrayIconMenu_DoubleClick); // initialize control visibility (is being toggled via SettingService_PropertyChanged - binding with bool to visibility converter did not update) OutputPathControl.Visibility = SettingService.OutputPathControlVisible ? Visibility.Visible : Visibility.Collapsed; OutputPathControlSpacer.Visibility = SettingService.OutputPathControlVisible ? Visibility.Visible : Visibility.Collapsed; SelectedFileControl.Visibility = SettingService.SelectedFileControlVisible ? Visibility.Visible : Visibility.Collapsed; SelectedFileControlSpacer.Visibility = SettingService.SelectedFileControlVisible ? Visibility.Visible : Visibility.Collapsed; RecordingTimerControl.Visibility = SettingService.RecordingTimerControlVisible ? Visibility.Visible : Visibility.Collapsed; RecordingTimerControlSpacer.Visibility = SettingService.RecordingTimerControlVisible ? Visibility.Visible : Visibility.Collapsed; this.Topmost = SettingService.WindowAlwaysOnTop; // hacky way to have a window for NotificationManager // is this really needed? (window is loaded into memory even if running in background) this.Show(); if (SettingService.MinimizedToTray) { SwitchToBackgroundMode(); } SelectedFileService.SelectLatestFile(); //else //{ // SwitchToForegroundMode(); //} } }
private void AudioRecordingService_PropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(AudioRecordingService.CurrentlyRecording): { if (AudioRecordingService.CurrentlyRecording) { if (SettingService.PlayAudioFeedBackMarkingStartAndStopRecording) { audioPlaybackService.KillAudio(reset: true); audioPlaybackService.QueueFile(audioPlaybackService.RecordStartAudioFeedbackPath); audioPlaybackService.Play(); while (audioPlaybackService.PlaybackState != PlaybackState.Stopped) { } audioPlaybackService.KillAudio(reset: true); } if (SettingService.ShowBalloonTipsForRecording) { _notificationManager.ShowAsync( new NotificationContent() { Type = NotificationType.Information, Title = "Recording started!", Message = "RecNForget now recording..." }); } AudioPlaybackService.KillAudio(reset: true); TaskBar_ProgressState = "Error"; } else { if (SettingService.PlayAudioFeedBackMarkingStartAndStopRecording || SettingService.AutoReplayAudioAfterRecording) { if (SettingService.PlayAudioFeedBackMarkingStartAndStopRecording) { actionService.QueueAudioPlayback(fileName: audioPlaybackService.RecordStopAudioFeedbackPath); } if (SettingService.AutoReplayAudioAfterRecording) { actionService.QueueAudioPlayback( fileName: AudioRecordingService.LastFileName, startIndicatorFileName: SettingService.PlayAudioFeedBackMarkingStartAndStopReplaying ? audioPlaybackService.ReplayStartAudioFeedbackPath : null, endIndicatorFileName: SettingService.PlayAudioFeedBackMarkingStartAndStopReplaying ? audioPlaybackService.ReplayStopAudioFeedbackPath : null); } actionService.TogglePlayPauseAudio(); } TaskBar_ProgressState = "None"; if (SettingService.ShowBalloonTipsForRecording) { _notificationManager.ShowAsync( content: new NotificationContent() { Type = NotificationType.Success, Title = "Recording saved!", Message = AudioRecordingService.LastFileName }, onClick: () => { if (AudioRecordingService.LastFileName == string.Empty || !File.Exists(AudioRecordingService.LastFileName)) { return; } string argument = "/select, \"" + AudioRecordingService.LastFileName + "\""; System.Diagnostics.Process.Start("explorer.exe", argument); }); } if (SettingService.AutoSelectLastRecording) { SelectedFileService.SelectFile(new FileInfo(AudioRecordingService.LastFileName)); } } break; } } }