ui/wpf/UIcore/MainToolBar.cs

Fri, 15 Nov 2024 21:16:18 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 15 Nov 2024 21:16:18 +0100
branch
newapi
changeset 383
03599608d555
parent 137
c9b8b9e0cfe8
permissions
-rw-r--r--

add UiObject reference counting (GTK)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace UI
{
    public class MainToolBar
    {
        Dictionary<string, IToolItem> Items = new Dictionary<string, IToolItem>();
        List<string> Defaults = new List<string>();

        public MainToolBar()
        {

        }

        public bool HasItems()
        {
            return Defaults.Count > 0 ? true : false;
        }

        public void AddDefault(string itemName)
        {
            Defaults.Add(itemName);
        }

        public void AddToolItem(string name, string label, Action<IntPtr> action)
        {
            ToolItem item = new ToolItem();
            item.Label = label;
            item.Action = action;
            Items.Add(name, item);
        }

        public ToolBarTray CreateToolBarTray(IntPtr objptr)
        {
            ToolBarTray tray = new ToolBarTray();
            ToolBar toolbar = new ToolBar();
            tray.ToolBars.Add(toolbar);
            foreach(string s in Defaults)
            {
                IToolItem item = Items[s];
                item.AddTo(toolbar, objptr);
            }

            return tray;
        }
    }

    public interface IToolItem
    {
        void AddTo(System.Windows.Controls.ToolBar toolbar, IntPtr uiobj);
    }

    public class ToolItem : IToolItem
    {
        public string Label { get; set; }
        // TODO: icon
        public Action<IntPtr> Action { get; set; }

        public void AddTo(System.Windows.Controls.ToolBar toolbar, IntPtr uiobj)
        {
            Button button = new Button();
            button.Content = Label;

            EventCallback e = new EventCallback(uiobj, Action);
            button.Click += e.Callback;

            toolbar.Items.Add(button);
        }
    }
}

mercurial