private void refreshEffects() { effectsLayout.ClearWidgets(); foreach (var effect in project.Effects.OrderBy(e => e.Name)) { Widget effectRoot; Label nameLabel, detailsLabel; Button renameButton, statusButton, configButton, editButton, removeButton; effectsLayout.Add(effectRoot = new LinearLayout(Manager) { AnchorFrom = BoxAlignment.Centre, AnchorTo = BoxAlignment.Centre, Horizontal = true, FitChildren = true, Fill = true, Children = new Widget[] { renameButton = new Button(Manager) { StyleName = "icon", Icon = IconFont.Pencil, Tooltip = "Rename", AnchorFrom = BoxAlignment.Centre, AnchorTo = BoxAlignment.Centre, CanGrow = false, }, new LinearLayout(Manager) { StyleName = "condensed", Children = new Widget[] { nameLabel = new Label(Manager) { StyleName = "listItem", Text = effect.Name, AnchorFrom = BoxAlignment.Left, AnchorTo = BoxAlignment.Left, }, detailsLabel = new Label(Manager) { StyleName = "listItemSecondary", Text = getEffectDetails(effect), AnchorFrom = BoxAlignment.Left, AnchorTo = BoxAlignment.Left, }, }, }, statusButton = new Button(Manager) { StyleName = "icon", AnchorFrom = BoxAlignment.Centre, AnchorTo = BoxAlignment.Centre, CanGrow = false, Displayed = false, }, configButton = new Button(Manager) { StyleName = "icon", Icon = IconFont.Gear, Tooltip = "Configure", AnchorFrom = BoxAlignment.Centre, AnchorTo = BoxAlignment.Centre, CanGrow = false, }, editButton = new Button(Manager) { StyleName = "icon", Icon = IconFont.PencilSquare, Tooltip = "Edit script", AnchorFrom = BoxAlignment.Centre, AnchorTo = BoxAlignment.Centre, CanGrow = false, Disabled = effect.Path == null, }, removeButton = new Button(Manager) { StyleName = "icon", Icon = IconFont.Times, Tooltip = "Remove", AnchorFrom = BoxAlignment.Centre, AnchorTo = BoxAlignment.Centre, CanGrow = false, }, }, }); updateStatusButton(statusButton, effect); var ef = effect; EventHandler changedHandler; effect.OnChanged += changedHandler = (sender, e) => { nameLabel.Text = ef.Name; detailsLabel.Text = getEffectDetails(ef); updateStatusButton(statusButton, ef); }; effectRoot.OnHovered += (sender, e) => { ef.Highlight = e.Hovered; OnEffectPreselect?.Invoke(e.Hovered ? ef : null); }; effectRoot.OnClickDown += (sender, e) => { OnEffectSelected?.Invoke(ef); return(true); }; effectRoot.OnDisposed += (sender, e) => { ef.Highlight = false; ef.OnChanged -= changedHandler; }; statusButton.OnClick += (sender, e) => Manager.ScreenLayerManager.ShowMessage($"Status: {ef.Status}\n\n{ef.StatusMessage}"); renameButton.OnClick += (sender, e) => Manager.ScreenLayerManager.ShowPrompt("Effect name", $"Pick a new name for {ef.Name}", ef.Name, (newName) => { ef.Name = newName; refreshEffects(); }); editButton.OnClick += (sender, e) => openEffectEditor(ef); configButton.OnClick += (sender, e) => { if (!effectConfigUi.Displayed || effectConfigUi.Effect != ef) { effectConfigUi.Effect = ef; effectConfigUi.Displayed = true; } else { effectConfigUi.Displayed = false; } }; removeButton.OnClick += (sender, e) => Manager.ScreenLayerManager.ShowMessage($"Remove {ef.Name}?", () => project.Remove(ef), true); } }
public void Show(OnEffectSelected callback) { m_delegate = callback; Show(true); }
public new void Hide() { m_delegate = null; base.Hide(); }
private void ReceivedEffectHandler(LedConfigurationDto effect) { OnEffectSelected?.Invoke(this, effect); }