Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 public void Show(OnEffectSelected callback)
 {
     m_delegate = callback;
     Show(true);
 }
Exemplo n.º 3
0
 public new void Hide()
 {
     m_delegate = null;
     base.Hide();
 }
Exemplo n.º 4
0
 private void ReceivedEffectHandler(LedConfigurationDto effect)
 {
     OnEffectSelected?.Invoke(this, effect);
 }