mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
[WIP] Use json payload for click message
This commit is contained in:
parent
8ee8c9b07c
commit
26a291dbee
5 changed files with 42 additions and 23 deletions
|
|
@ -133,10 +133,12 @@ void DeleteMenu(Menu *menu) {
|
|||
}
|
||||
|
||||
// Creates a JSON message for the given menuItemID and data
|
||||
const char* createContextMenuMessage(const char *menuItemID, const char *givenContextMenuData) {
|
||||
const char* createMenuClickedMessage(const char *menuItemID, const char *data) {
|
||||
JsonNode *jsonObject = json_mkobject();
|
||||
json_append_member(jsonObject, "menuItemID", json_mkstring(menuItemID));
|
||||
json_append_member(jsonObject, "data", json_mkstring(givenContextMenuData));
|
||||
if (data != NULL) {
|
||||
json_append_member(jsonObject, "data", json_mkstring(data));
|
||||
}
|
||||
const char *result = json_encode(jsonObject);
|
||||
json_delete(jsonObject);
|
||||
return result;
|
||||
|
|
@ -177,12 +179,15 @@ void menuItemCallback(id self, SEL cmd, id sender) {
|
|||
|
||||
// Generate message to send to backend
|
||||
if( callbackData->menu->menuType == ApplicationMenuType ) {
|
||||
message = concat("MC", callbackData->menuID);
|
||||
const char *clickMessage = createMenuClickedMessage(callbackData->menuID, NULL);
|
||||
message = concat("MC", clickMessage);
|
||||
MEMFREE(clickMessage);
|
||||
} else if( callbackData->menu->menuType == ContextMenuType ) {
|
||||
// Get the context menu data from the menu
|
||||
ContextMenuStore* store = (ContextMenuStore*) callbackData->menu->parentData;
|
||||
const char *contextMenuMessage = createContextMenuMessage(callbackData->menuID, store->contextMenuData);
|
||||
message = concat("XC", contextMenuMessage);
|
||||
const char *clickMessage = createMenuClickedMessage(callbackData->menuID, store->contextMenuData);
|
||||
message = concat("XC", clickMessage);
|
||||
MEMFREE(clickMessage);
|
||||
}
|
||||
|
||||
// TODO: Add other menu types here!
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ func (m *Manager) getMenuItemByID(menuId string) *menu.MenuItem {
|
|||
return m.menuItemMap.idToMenuItemMap[menuId]
|
||||
}
|
||||
|
||||
func (m *Manager) ProcessClick(menuID string) error {
|
||||
func (m *Manager) ProcessClick(menuID string, data string) error {
|
||||
|
||||
// Get the menu item
|
||||
menuItem := m.getMenuItemByID(menuID)
|
||||
|
|
@ -72,7 +72,7 @@ func (m *Manager) ProcessClick(menuID string) error {
|
|||
// Create new Callback struct
|
||||
callbackData := &menu.CallbackData{
|
||||
MenuItem: menuItem,
|
||||
ContextData: "",
|
||||
ContextData: data,
|
||||
}
|
||||
|
||||
// Call back!
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package subsystem
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/wailsapp/wails/v2/internal/menumanager"
|
||||
"strings"
|
||||
"sync"
|
||||
|
|
@ -95,9 +96,21 @@ func (m *Menu) Start() error {
|
|||
continue
|
||||
}
|
||||
m.logger.Trace("Got Menu clicked Message: %s %+v", menuMessage.Topic(), menuMessage.Data())
|
||||
menuid := menuMessage.Data().(string)
|
||||
|
||||
err := m.menuManager.ProcessClick(menuid)
|
||||
type ClickCallbackMessage struct {
|
||||
MenuItemID string `json:"menuItemID"`
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
var callbackData ClickCallbackMessage
|
||||
message := []byte(menuMessage.Data().(string))
|
||||
err := json.Unmarshal(message, &callbackData)
|
||||
if err != nil {
|
||||
m.logger.Error("%s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = m.menuManager.ProcessClick(callbackData.MenuItemID, callbackData.Data)
|
||||
if err != nil {
|
||||
m.logger.Trace("%s", err.Error())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,18 +34,18 @@ func (c *ContextMenu) WailsInit(runtime *wails.Runtime) error {
|
|||
|
||||
func createContextMenus() *menu.ContextMenus {
|
||||
result := menu.NewContextMenus()
|
||||
result.AddMenu("test", menu.NewMenuFromItems(
|
||||
menu.Text("Clicked 0 times", "Test Context Menu", nil),
|
||||
menu.Separator(),
|
||||
menu.Checkbox("I am a checkbox", "checkbox", false, nil),
|
||||
menu.Separator(),
|
||||
menu.Radio("Radio Option 1", "Radio Option 1", true, nil),
|
||||
menu.Radio("Radio Option 2", "Radio Option 2", false, nil),
|
||||
menu.Radio("Radio Option 3", "Radio Option 3", false, nil),
|
||||
menu.Separator(),
|
||||
menu.SubMenu("A Submenu", menu.NewMenuFromItems(
|
||||
menu.Text("Hello", "Hello", nil),
|
||||
)),
|
||||
))
|
||||
//result.AddMenu("test", menu.NewMenuFromItems(
|
||||
// menu.Text("Clicked 0 times", "Test Context Menu", nil),
|
||||
// menu.Separator(),
|
||||
// menu.Checkbox("I am a checkbox", "checkbox", false, nil),
|
||||
// menu.Separator(),
|
||||
// menu.Radio("Radio Option 1", "Radio Option 1", true, nil),
|
||||
// menu.Radio("Radio Option 2", "Radio Option 2", false, nil),
|
||||
// menu.Radio("Radio Option 3", "Radio Option 3", false, nil),
|
||||
// menu.Separator(),
|
||||
// menu.SubMenu("A Submenu", menu.NewMenuFromItems(
|
||||
// menu.Text("Hello", "Hello", nil),
|
||||
// )),
|
||||
//))
|
||||
return result
|
||||
}
|
||||
|
|
|
|||
|
|
@ -225,7 +225,8 @@ func (m *Menu) insertAfterRandom(_ *menu.MenuItem) {
|
|||
}
|
||||
|
||||
func (m *Menu) processPlainText(callbackData *menu.CallbackData) {
|
||||
println("\n\n\n\n\n\n\nCallback successful\n\n\n\n\n")
|
||||
label := callbackData.MenuItem.Label
|
||||
fmt.Printf("\n\n\n\n\n\n\nMenu Item label = `%s`\n\n\n\n\n", label)
|
||||
}
|
||||
|
||||
func (m *Menu) createApplicationMenu() *menu.Menu {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue