module ui.MenuItem;

import ui.Core;
import ui.Window;

class MenuItem {
    protected uiMenuItem * _menuItem;

    private void delegate(MenuItem v)[] OnClickedListeners;
    private extern (C) static void OnClickedCallback(uiMenuItem *, uiWindow *window, void *data) {
        auto v = cast(MenuItem) data;
        foreach (dlg; v.OnClickedListeners) {
            dlg(v);
        }
    }
    public MenuItem addOnClicked(void delegate(MenuItem v) f) {
        OnClickedListeners ~= f;
        return this;
    }

    this(uiMenuItem * menuItem) {
        _menuItem = menuItem;

        uiMenuItemOnClicked(_menuItem, &OnClickedCallback, cast(void *) this);
    }

    MenuItem enable() {
        uiMenuItemEnable(_menuItem);
        return this;
    }

    MenuItem disable() {
        uiMenuItemDisable(_menuItem);
        return this;
    }

    size_t checked() {
        return cast(size_t) uiMenuItemChecked(_menuItem);
    }

    MenuItem setChecked(bool checked) {
        uiMenuItemSetChecked(_menuItem, cast(int) checked);
        return this;
    }
}