[WIP] Use json payload for click message

This commit is contained in:
Lea Anthony 2021-01-11 06:40:00 +11:00
commit 26a291dbee
No known key found for this signature in database
GPG key ID: 33DAF7BB90A58405
5 changed files with 42 additions and 23 deletions

View file

@ -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!

View file

@ -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!

View file

@ -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())
}

View file

@ -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
}

View file

@ -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 {