Exemplo n.º 1
0
    public void Run()
    {
        RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;

        var visualizer = new MenuViewMessageInterpreter();
        var state      = new MenuViewMessage {
            Items =
            {
                MenuItemViewMessage.MakeRange("[-1, 1]: 0.5", -1, +1, 0.5, false),
                MenuItemViewMessage.MakeRange("[-1, 1]: -1",  -1, +1,  -1, true),
                MenuItemViewMessage.MakeRange("[-1, 1]: 0",   -1, +1,   0, false),
                MenuItemViewMessage.MakeRange("[-1, 1]: +1",  -1, +1,  +1, false),
                MenuItemViewMessage.MakeRange("[0, 1]: 0.5",   0,  1, 0.5, false),
                MenuItemViewMessage.MakeRange("[0, 1]: 0",     0,  1,   0, false),
                MenuItemViewMessage.MakeRange("[0, 1]: 1",     0,  1,   1, false)
            }
        };
        var visual = visualizer.Interpret(state);

        var window = new Window {
            Background = Brushes.Pink,
            Content    = visual
        };

        window.Show();

        Dispatcher.Run();
    }
    public MenuViewMessage AuthorMessage(MenuModel model)
    {
        List <MenuItemViewMessage> itemMessages = new List <MenuItemViewMessage>();

        for (int i = 0; i < model.Items.Count; ++i)
        {
            var  item      = model.Items[i];
            bool selected  = i == model.SelectedItemIdx;
            bool isEditing = selected && model.IsEditing;

            MenuItemViewMessage itemMessage;
            switch (item)
            {
            case UpMenuItem upMenuItem:
                itemMessage = MenuItemViewMessage.MakeUpLevelButton(upMenuItem.Label);
                break;

            case SubLevelMenuItem subLevelItem:
                itemMessage = MenuItemViewMessage.MakeSubLevelButton(subLevelItem.Label);
                break;

            case IRangeMenuItem rangeItem:
                itemMessage = MenuItemViewMessage.MakeRange(rangeItem.Label, rangeItem.Min, rangeItem.Max, rangeItem.Value, isEditing);
                break;

            case IToggleMenuItem toggleMenuItem:
                itemMessage = MenuItemViewMessage.MakeToggle(toggleMenuItem.Label, toggleMenuItem.IsSet);
                break;

            case ActionMenuItem actionMenuItem:
                itemMessage = MenuItemViewMessage.MakeActionButton(actionMenuItem.Label, actionMenuItem.RequiresMoreInformation);
                break;

            default:
                throw new InvalidOperationException();
            }

            if (selected)
            {
                itemMessage.Active = true;
            }
            itemMessages.Add(itemMessage);
        }

        return(new MenuViewMessage {
            Items = itemMessages,
            Position = model.ScrollPosition
        });
    }