private DeskBandMenuAction CreateSubMenuAction(int timeWindowInMinutes) { string actionName = timeWindowInMinutes != 0 ? $"{timeWindowInMinutes} minutes" : "Stop"; DeskBandMenuAction submenuAction = new DeskBandMenuAction(actionName); submenuAction.Clicked += (sender, args) => { minutesLeft = defaultTimerMinutes = timeWindowInMinutes; this.Options.Title = $"{clockIcon}"; if (timeWindowInMinutes != 0) { this.Options.Title += $" {timeWindowInMinutes}"; } else { Task.Run(() => CalloutUserTriggeredStopMessage()); } if (cancellationSource != null) { cancellationSource.Cancel(); } Task.Run(() => RunTimer()); }; return(submenuAction); }
/// <summary> /// 发现新设备 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnDiscoveryLamp(object sender, EventArgs e) { Lamp lamp = ((LampDiscoveryEventArgs)e).lamp; try { //查重 foreach (DeskBandMenuItem item in _deviceListMenu.Items) { if (item.tag != null) { if (((Lamp)item.tag).Address == lamp.Address) { return; } } } } catch (Exception ex) { MessageBox.Show(ex.Message); } DeskBandMenuAction subMenuItem = new DeskBandMenuAction(lamp.Address); subMenuItem.tag = lamp; subMenuItem.Clicked += OnLampMenuItem_Clicked; _deviceListMenu.Items.Add(subMenuItem); }
private async Task AddNewAudioSource(IInternalAudioSource audioSource) { var menuItem = new DeskBandMenuAction(audioSource.Name); menuItem.Clicked += AudioSourceMenuItemOnClicked; lock (_audiosourceListLock) { _audioSourceContextMenuItems.Add(menuItem); RefreshContextMenu(); } var settings = audioSource.Settings; if (settings.Count > 0) { // check if the settings were saved previously and reuse them var matchingSetting = _audioSourceSettingsModel.FirstOrDefault(s => s.AudioSourceName == audioSource.Name); if (matchingSetting != null) { var viewModel = new AudioSourceSettingsVM(matchingSetting, audioSource); // the collection was created on the ui thread await _uiDispatcher.InvokeAsync(() => _settingsWindowVm.AudioSourceSettingsVM.Add(viewModel)); } else { var newSettingsModel = new AudioSourceSettings { AudioSourceName = audioSource.Name }; _audioSourceSettingsModel.Add(newSettingsModel); var newViewModel = new AudioSourceSettingsVM(newSettingsModel, audioSource); await _uiDispatcher.InvokeAsync(() => _settingsWindowVm.AudioSourceSettingsVM.Add(newViewModel)); } } // If user was using this audio source last, then automatically activate it var savedAudioSourceName = _appSettings.AudioSource; if (savedAudioSourceName == null || audioSource.Name != savedAudioSourceName) { return; } await HandleAudioSourceContextMenuItemClick(menuItem).ConfigureAwait(false); }
private List <DeskBandMenuItem> BuildContextMenu() { var pluginList = _audioSourceLoader.AudioSources.Select(audioSource => { var item = new DeskBandMenuAction(audioSource.Name); item.Clicked += AudioSourceMenuItemOnClicked; return(item); }); _pluginSubMenu = new DeskBandMenu("Audio Source", pluginList); var settingsMenuItem = new DeskBandMenuAction("Audio Band Settings"); settingsMenuItem.Clicked += SettingsMenuItemOnClicked; return(new List <DeskBandMenuItem> { settingsMenuItem, _pluginSubMenu }); }
private async Task HandleAudioSourceContextMenuItemClick(DeskBandMenuAction menuItem) { try { if (menuItem.Checked) { menuItem.Checked = false; await UnsubscribeToAudioSource(_currentAudioSource).ConfigureAwait(false); return; } // Uncheck old items and unsubscribe from the current source foreach (var otherMenuItem in _pluginSubMenu.Items.Cast <DeskBandMenuAction>().Where(i => i != null)) { otherMenuItem.Checked = false; } await UnsubscribeToAudioSource(_currentAudioSource).ConfigureAwait(false); _currentAudioSource = _audioSourceManager.AudioSources.FirstOrDefault(c => c.Name == menuItem.Text); if (_currentAudioSource == null) { var menuItemsText = _audioSourceContextMenuItems.Select(m => m.Text); var sources = _audioSourceManager.AudioSources.Select(s => s.Name); Logger.Warn("Contenxt menu item {menuName} had no matching audiosource. Context menu items: {@items}. Audiosources: {@audiosources}", menuItem.Text, menuItemsText, sources); return; } await SubscribeToAudioSource(_currentAudioSource).ConfigureAwait(false); menuItem.Checked = true; } catch (Exception e) { Logger.Error(e, "Error changing audio source. Current: {current}. Menu item: {menu}", _currentAudioSource?.Name, menuItem.Text); _currentAudioSource = null; } }
private async Task InitializeAsync() { try { Logger.Debug("Initialization started"); _audioSourceContextMenuItems = new List <DeskBandMenuAction>(); _settingsMenuItem = new DeskBandMenuAction("Audio Band Settings"); _settingsMenuItem.Clicked += SettingsMenuItemOnClicked; RefreshContextMenu(); _labelService.CustomLabelAdded += LabelServiceOnAddCustomTextLabel; _labelService.CustomLabelRemoved += LabelServiceOnRemoveCustomTextLabel; foreach (var label in _labelService.Labels) { LabelServiceOnAddCustomTextLabel(null, label); } await _uiDispatcher.InvokeAsync(() => InitializeBindingSources( _settingsWindow.AlbumArtPopupVM, _settingsWindow.AlbumArtVM, _settingsWindow.AudioBandVM, _settingsWindow.NextButtonVM, _settingsWindow.PlayPauseButtonVM, _settingsWindow.PreviousButtonVM, _settingsWindow.ProgressBarVM)); _settingsWindow.Saved += SettingsWindowOnSaved; _audioSourceManager.AudioSources.CollectionChanged += AudioSourcesOnCollectionChanged; _audioSourceManager.LoadAudioSources(); Logger.Debug("Initialization complete"); } catch (Exception e) { Logger.Error(e, "Error during initialization"); } }
private async Task InitializeAsync() { try { Logger.Debug("Initialization started"); await Task.Run(() => { _audioSourceContextMenuItems = new List <DeskBandMenuAction>(); _settingsMenuItem = new DeskBandMenuAction("Audio Band Settings"); _settingsMenuItem.Clicked += SettingsMenuItemOnClicked; RefreshContextMenu(); InitializeModels(); }).ConfigureAwait(false); _settingsWindowVm = await SetupViewModels().ConfigureAwait(false); await _uiDispatcher.InvokeAsync(() => { _settingsWindow = new SettingsWindow(_settingsWindowVm); _settingsWindow.Saved += SettingsWindowOnSaved; _settingsWindow.Canceled += SettingsWindowOnCanceled; ElementHost.EnableModelessKeyboardInterop(_settingsWindow); }); _audioSourceManager = new AudioSourceManager(); _audioSourceManager.AudioSources.CollectionChanged += AudioSourcesOnCollectionChanged; _audioSourceManager.LoadAudioSources(); Logger.Debug("Initialization complete"); } catch (Exception e) { Logger.Error(e, "Error during initialization"); } }
/// <summary> /// 列表被点击 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnLampMenuItem_Clicked(object sender, EventArgs args) { DeskBandMenuAction subMenuItem = (DeskBandMenuAction)sender; if (activeMenuItem == null) { activeMenuItem = subMenuItem; } if (subMenuItem != activeMenuItem) { activeMenuItem.Checked = false; activeMenuItem = subMenuItem; } if (activeMenuItem.Checked) { activeMenuItem.Checked = false; } else { activeMenuItem.Checked = true; activeLamp.Open(); } }