static internal void UpdateFromCardInfo(this IDynamicActionInfo dynamicActionInfo, ICardInfo cardInfo) { dynamicActionInfo.Text = cardInfo.Name.Replace("Right Click", "Long Press"); dynamicActionInfo.IsToggled = cardInfo.IsToggled; dynamicActionInfo.ImageId = cardInfo.Code; dynamicActionInfo.IsImageAvailable = cardInfo.ImageAvailable; dynamicActionInfo.ButtonOptions = cardInfo.ButtonOptions; }
static internal bool CardInfoHasChanged(this IDynamicActionInfo dynamicActionInfo, ICardInfo cardInfo) { return(dynamicActionInfo.Text != cardInfo.Name || dynamicActionInfo.IsToggled != cardInfo.IsToggled || dynamicActionInfo.ImageId != cardInfo.Code || dynamicActionInfo.IsImageAvailable != cardInfo.ImageAvailable || dynamicActionInfo.ButtonOptions.SequenceEqual(cardInfo.ButtonOptions)); }
/// <summary> /// Create a list of dynamic action options for the specificed dynamic action /// </summary> /// <param name="dynamicActionInfo">Creat options based on this information</param> /// <returns>A list of dynamic action options including dynamicly resolved actions and images if applicable</returns> private IList <DynamicActionOption> CreateDynamicActionOptions(IDynamicActionInfo dynamicActionInfo) { var options = new List <DynamicActionOption>(); foreach (var buttonOption in dynamicActionInfo.ButtonOptions) { var option = CreateDynamicActionOption(buttonOption, dynamicActionInfo); if (option == null) { continue; } options.Add(option); } options.Add(new DynamicActionOption(dynamicActionInfo, null, "Cancel")); return(options); }
/// <summary> /// A pool card button has changed for a card in the pool, so update the dynamic action accordingly /// </summary> /// <param name="dynamicActionInfo">Info for the action that has changed</param> private void PoolDynamicActionChanged(IDynamicActionInfo dynamicActionInfo) { IList <DynamicAction> actions; lock (_dynamicActionsLock) { actions = GetActionsForCardGroup(dynamicActionInfo.CardGroupId).ToList(); } var actionsPerPage = actions.Count; if (actionsPerPage == 0) { return; } var actionIndex = dynamicActionInfo.Index % actionsPerPage; var actionToUpdate = actions[actionIndex]; if (actionToUpdate.ButtonMode == ButtonMode.Pool) { actions[actionIndex].UpdateButtonToNewDynamicAction(dynamicActionInfo); } }
/// <summary> /// Refresh what information is being displayed on the button update it /// </summary> /// <param name="dynamicActionInfo">Information to use for updating the display</param> public void UpdateButtonToNewDynamicAction(IDynamicActionInfo dynamicActionInfo) { if (_dynamicActionOption != null) { //we are displaying a menu option, not our normal stuff _lastSetTitle = _dynamicActionOption.Text; SetTitleAsync(TextUtils.WrapTitle(_dynamicActionOption.Text)); SetImageAsync(_dynamicActionOption.Image); return; } _dynamicActionInfo = dynamicActionInfo; if (_dynamicActionInfo == default) { _lastSetTitle = string.Empty; SetTitleAsync(string.Empty); SetImageAsync(string.Empty); return; } _lastSetTitle = _dynamicActionInfo.Text; UpdateButtonDisplay(); }
public DynamicActionInfoChangedEvent(IDynamicActionInfo dynamicActionInfo) { DynamicActionInfo = dynamicActionInfo; }
public static void PublishDynamicActionInfoChanged(this IEventBus eventBus, IDynamicActionInfo dynamicActionInfo) { eventBus.Publish(new DynamicActionInfoChangedEvent(dynamicActionInfo)); }
/// <summary> /// Get an image using the dynamic action info /// </summary> /// <param name="dynamicActionInfo">Information about a dynamic action so the proper image can be retreieved and drawn properly</param> /// <returns>A string formatted for sending images to the StreamDeck device</returns> /// <remards>Will note the 'toggled' state of the dynamic action info, and draw a gold border if it is toggled</remards> public string GetImage(IDynamicActionInfo dynamicAction) { var imageBytes = dynamicAction.ImageId != null && _imageCache.ContainsKey(dynamicAction.ImageId) ? _imageCache[dynamicAction.ImageId] : null; return(ImageUtils.CreateStreamdeckImage(imageBytes, dynamicAction.IsToggled)); }