Better Checked implementation

This commit is contained in:
Lea Anthony 2022-04-30 21:39:19 +10:00
commit 1830c64c79
No known key found for this signature in database
GPG key ID: 33DAF7BB90A58405
4 changed files with 25 additions and 0 deletions

View file

@ -56,6 +56,7 @@ void AppendSubmenu(void* parent, void* child);
void AppendRole(void *inctx, void *inMenu, int role);
void SetAsApplicationMenu(void *inctx, void *inMenu);
void UpdateApplicationMenu(void *inctx);
void SetMenuItemChecked(void* nsMenuItem, int checked);
/* Tray Menu */
void* NewNSStatusItem(const char* label);

View file

@ -165,6 +165,10 @@ void ToggleMaximise(void* inctx) {
);
}
void SetMenuItemChecked(void* nsMenuItem, int checked) {
[(NSMenuItem*)nsMenuItem setState:(checked == 0 ? NSOffState : NSOnState)];
}
const char* GetSize(void *inctx) {
WailsContext *ctx = (__bridge WailsContext*) inctx;
NSRect frame = [ctx.mainWindow frame];

View file

@ -67,6 +67,10 @@ type MenuItem struct {
radioGroupMembers []*MenuItem
}
func (m *MenuItem) SetChecked(value bool) {
C.SetMenuItemChecked(m.nsmenuitem, bool2Cint(value))
}
func (m *NSMenu) AddMenuItem(menuItem *menu.MenuItem) *MenuItem {
c := NewCalloc()
defer c.Free()
@ -83,6 +87,7 @@ func (m *NSMenu) AddMenuItem(menuItem *menu.MenuItem) *MenuItem {
result.id = createMenuItemID(result)
result.nsmenuitem = C.AppendMenuItem(m.context, m.nsmenu, c.String(menuItem.Label), key, modifier, bool2Cint(menuItem.Disabled), bool2Cint(menuItem.Checked), C.int(result.id))
menuItem.Impl = result
return result
}

View file

@ -6,6 +6,10 @@ import (
"github.com/wailsapp/wails/v2/pkg/menu/keys"
)
type MenuItemImpl interface {
SetChecked(bool)
}
// MenuItem represents a menuitem contained in a menu
type MenuItem struct {
// Label is what appears as the menu text
@ -53,6 +57,9 @@ type MenuItem struct {
// Used for locking when removing elements
removeLock sync.Mutex
// Implementation of the runtime methods
Impl MenuItemImpl
}
// Parent returns the parent of the menu item.
@ -216,6 +223,14 @@ func (m *MenuItem) insertItemAtIndex(index int, target *MenuItem) bool {
return true
}
func (m *MenuItem) SetChecked(b bool) {
if m.Checked != b {
println("here!!!!!")
m.Checked = b
m.Impl.SetChecked(b)
}
}
// Text is a helper to create basic Text menu items
func Text(label string, accelerator *keys.Accelerator, click Callback) *MenuItem {
return &MenuItem{