diff --git a/cef/internal/def/proc-def-index.go b/cef/internal/def/proc-def-index.go index ef2ba5da..5702873c 100644 --- a/cef/internal/def/proc-def-index.go +++ b/cef/internal/def/proc-def-index.go @@ -1011,6 +1011,7 @@ const ( CEFFrame_Parent CEFFrameRef_UnWrap // ICefMenuModel + CefMenuModelRef_New CEFMenuModel_AddSeparator CEFMenuModel_Clear CEFMenuModel_IsSubMenu @@ -1034,6 +1035,12 @@ const ( CEFMenuModel_SetEnabled CEFMenuModel_SetLabel CEFMenuModel_GetIndexOf + CefMenuModel_GetType + CefMenuModel_GetLabel + CefMenuModel_GetGroupId + CefMenuModel_SetGroupId + CefMenuModel_GetSubMenu + CefMenuModel_GetColor // Misc Functions Misc_WindowInfoAsChild Misc_WindowInfoAsPopUp diff --git a/cef/internal/def/proc-def.go b/cef/internal/def/proc-def.go index 1ce074ca..4aa7d4e0 100644 --- a/cef/internal/def/proc-def.go +++ b/cef/internal/def/proc-def.go @@ -1011,29 +1011,36 @@ func init() { dllimports.NewEnergyImport("CEFFrame_Parent", 0), dllimports.NewEnergyImport("CEFFrameRef_UnWrap", 0), //ICefMenuModel - dllimports.NewEnergyImport("cefMenuModel_AddSeparator", 0), - dllimports.NewEnergyImport("cefMenuModel_Clear", 0), - dllimports.NewEnergyImport("cefMenuModel_IsSubMenu", 0), - dllimports.NewEnergyImport("cefMenuModel_GetCount", 0), - dllimports.NewEnergyImport("cefMenuModel_AddItem", 0), - dllimports.NewEnergyImport("cefMenuModel_AddCheckItem", 0), - dllimports.NewEnergyImport("cefMenuModel_AddRadioItem", 0), - dllimports.NewEnergyImport("cefMenuModel_AddSubMenu", 0), - dllimports.NewEnergyImport("cefMenuModel_Remove", 0), - dllimports.NewEnergyImport("cefMenuModel_RemoveAt", 0), - dllimports.NewEnergyImport("cefMenuModel_SetChecked", 0), - dllimports.NewEnergyImport("cefMenuModel_IsChecked", 0), - dllimports.NewEnergyImport("cefMenuModel_SetColor", 0), - dllimports.NewEnergyImport("cefMenuModel_SetFontList", 0), - dllimports.NewEnergyImport("cefMenuModel_HasAccelerator", 0), - dllimports.NewEnergyImport("cefMenuModel_SetAccelerator", 0), - dllimports.NewEnergyImport("cefMenuModel_RemoveAccelerator", 0), - dllimports.NewEnergyImport("cefMenuModel_IsVisible", 0), - dllimports.NewEnergyImport("cefMenuModel_SetVisible", 0), - dllimports.NewEnergyImport("cefMenuModel_IsEnabled", 0), - dllimports.NewEnergyImport("cefMenuModel_SetEnabled", 0), - dllimports.NewEnergyImport("cefMenuModel_SetLabel", 0), - dllimports.NewEnergyImport("cefMenuModel_GetIndexOf", 0), + dllimports.NewEnergyImport("CefMenuModelRef_New", 0), + dllimports.NewEnergyImport("CEFMenuModel_AddSeparator", 0), + dllimports.NewEnergyImport("CEFMenuModel_Clear", 0), + dllimports.NewEnergyImport("CEFMenuModel_IsSubMenu", 0), + dllimports.NewEnergyImport("CEFMenuModel_GetCount", 0), + dllimports.NewEnergyImport("CEFMenuModel_AddItem", 0), + dllimports.NewEnergyImport("CEFMenuModel_AddCheckItem", 0), + dllimports.NewEnergyImport("CEFMenuModel_AddRadioItem", 0), + dllimports.NewEnergyImport("CEFMenuModel_AddSubMenu", 0), + dllimports.NewEnergyImport("CEFMenuModel_Remove", 0), + dllimports.NewEnergyImport("CEFMenuModel_RemoveAt", 0), + dllimports.NewEnergyImport("CEFMenuModel_SetChecked", 0), + dllimports.NewEnergyImport("CEFMenuModel_IsChecked", 0), + dllimports.NewEnergyImport("CEFMenuModel_SetColor", 0), + dllimports.NewEnergyImport("CEFMenuModel_SetFontList", 0), + dllimports.NewEnergyImport("CEFMenuModel_HasAccelerator", 0), + dllimports.NewEnergyImport("CEFMenuModel_SetAccelerator", 0), + dllimports.NewEnergyImport("CEFMenuModel_RemoveAccelerator", 0), + dllimports.NewEnergyImport("CEFMenuModel_IsVisible", 0), + dllimports.NewEnergyImport("CEFMenuModel_SetVisible", 0), + dllimports.NewEnergyImport("CEFMenuModel_IsEnabled", 0), + dllimports.NewEnergyImport("CEFMenuModel_SetEnabled", 0), + dllimports.NewEnergyImport("CEFMenuModel_SetLabel", 0), + dllimports.NewEnergyImport("CEFMenuModel_GetIndexOf", 0), + dllimports.NewEnergyImport("CefMenuModel_GetType", 0), + dllimports.NewEnergyImport("CefMenuModel_GetLabel", 0), + dllimports.NewEnergyImport("CefMenuModel_GetGroupId", 0), + dllimports.NewEnergyImport("CefMenuModel_SetGroupId", 0), + dllimports.NewEnergyImport("CefMenuModel_GetSubMenu", 0), + dllimports.NewEnergyImport("CefMenuModel_GetColor", 0), // Misc CEFWindowInfo dllimports.NewEnergyImport("Misc_WindowInfoAsChild", 0), dllimports.NewEnergyImport("Misc_WindowInfoAsPopUp", 0), diff --git a/cef/context-menu-item.go b/cef/types-menu-model.go similarity index 89% rename from cef/context-menu-item.go rename to cef/types-menu-model.go index a07ee735..4086895b 100644 --- a/cef/context-menu-item.go +++ b/cef/types-menu-model.go @@ -17,6 +17,7 @@ import ( . "github.com/energye/energy/v2/common" "github.com/energye/energy/v2/common/imports" . "github.com/energye/energy/v2/consts" + "github.com/energye/energy/v2/types" "github.com/energye/golcl/lcl/api" "strings" "unsafe" @@ -178,6 +179,42 @@ func (m *ICefMenuModel) AddMenuItem(item *MenuItem) bool { return true } +// MenuModelRef -> ICefMenuModel +var MenuModelRef menuModel + +type menuModel uintptr + +func (*menuModel) New(delegate *ICefMenuModelDelegate) *ICefMenuModel { + var result uintptr + imports.Proc(def.CefMenuModelRef_New).Call(delegate.Instance(), uintptr(unsafe.Pointer(&result))) + if result != 0 { + return &ICefMenuModel{instance: unsafe.Pointer(result)} + } + return nil +} + +// Instance 实例 +func (m *ICefMenuModel) Instance() uintptr { + if m == nil { + return 0 + } + return uintptr(m.instance) +} + +func (m *ICefMenuModel) Free() { + if m.instance != nil { + m.base.Free(m.Instance()) + m.instance = nil + } +} + +func (m *ICefMenuModel) IsValid() bool { + if m == nil || m.instance == nil { + return false + } + return m.instance != nil +} + // AddSeparator 添加一个分隔线 func (m *ICefMenuModel) AddSeparator() bool { return cefMenuModel_AddSeparator(uintptr(m.instance)) @@ -291,15 +328,37 @@ func (m *ICefMenuModel) GetIndexOf(commandId MenuId) int32 { return cefMenuModel_GetIndexOf(uintptr(m.instance), commandId) } -func (m *ICefMenuModel) Instance() uintptr { - return uintptr(m.instance) +func (m *ICefMenuModel) GetType(commandId MenuId) TCefMenuItemType { + r1, _, _ := imports.Proc(def.CefMenuModel_GetType).Call(m.Instance(), uintptr(commandId)) + return TCefMenuItemType(r1) } -func (m *ICefMenuModel) Free() { - if m.instance != nil { - m.base.Free(m.Instance()) - m.instance = nil +func (m *ICefMenuModel) GetLabel(commandId MenuId) string { + r1, _, _ := imports.Proc(def.CefMenuModel_GetLabel).Call(m.Instance(), uintptr(commandId)) + return api.GoStr(r1) +} + +func (m *ICefMenuModel) GetGroupId(commandId MenuId) int32 { + r1, _, _ := imports.Proc(def.CefMenuModel_GetGroupId).Call(m.Instance(), uintptr(commandId)) + return int32(r1) +} + +func (m *ICefMenuModel) SetGroupId(commandId MenuId, groupId int32) bool { + r1, _, _ := imports.Proc(def.CefMenuModel_SetGroupId).Call(m.Instance(), uintptr(commandId), uintptr(groupId)) + return api.GoBool(r1) +} + +func (m *ICefMenuModel) GetSubMenu(commandId MenuId) *ICefMenuModel { + r1, _, _ := imports.Proc(def.CefMenuModel_GetSubMenu).Call(m.Instance(), uintptr(commandId)) + if r1 != 0 { + return &ICefMenuModel{instance: unsafe.Pointer(r1)} } + return nil +} + +func (m *ICefMenuModel) GetColor(commandId MenuId, colorType TCefMenuColorType) (color types.TCefColor, result bool) { + r1, _, _ := imports.Proc(def.CefMenuModel_GetColor).Call(m.Instance(), uintptr(commandId), uintptr(colorType), uintptr(unsafe.Pointer(&color))) + return color, api.GoBool(r1) } // ------------------------------------ PROC diff --git a/cef/types-menumodel-delegate.go b/cef/types-menumodel-delegate.go new file mode 100644 index 00000000..be8414f5 --- /dev/null +++ b/cef/types-menumodel-delegate.go @@ -0,0 +1,50 @@ +//---------------------------------------- +// +// Copyright © yanghy. All Rights Reserved. +// +// Licensed under Apache License Version 2.0, January 2004 +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +//---------------------------------------- + +// CEF 右键菜单 + +package cef + +import ( + "unsafe" +) + +// MenuModelDelegateRef -> ICefMenuModelDelegate +var MenuModelDelegateRef menuModelDelegate + +type menuModelDelegate uintptr + +func (*menuModelDelegate) New() *ICefMenuModelDelegate { + var result uintptr + //imports.Proc(def.MenuModelRef_New).Call(uintptr(unsafe.Pointer(&result))) + return &ICefMenuModelDelegate{instance: unsafe.Pointer(result)} +} + +// Instance 实例 +func (m *ICefMenuModelDelegate) Instance() uintptr { + if m == nil { + return 0 + } + return uintptr(m.instance) +} + +func (m *ICefMenuModelDelegate) Free() { + if m.instance != nil { + m.base.Free(m.Instance()) + m.instance = nil + } +} + +func (m *ICefMenuModelDelegate) IsValid() bool { + if m == nil || m.instance == nil { + return false + } + return m.instance != nil +} diff --git a/cef/types.go b/cef/types.go index 16c1fb63..03e8aec3 100644 --- a/cef/types.go +++ b/cef/types.go @@ -445,6 +445,13 @@ type ICefMenuModel struct { CefMis *keyEventAccelerator } +// ICefMenuModelDelegate +// /include/capi/cef_menu_model_delegate_capi.h (cef_menu_model_delegate_t) +type ICefMenuModelDelegate struct { + base TCefBaseRefCounted + instance unsafe.Pointer +} + // ICefStringMultiMap 实例 type ICefStringMultiMap struct { instance unsafe.Pointer diff --git a/consts/consts.go b/consts/consts.go index 77300e5d..2964b9b7 100644 --- a/consts/consts.go +++ b/consts/consts.go @@ -1462,3 +1462,15 @@ const ( FILE_DIALOG_OPEN_FOLDER = 0x00000002 FILE_DIALOG_SAVE = 0x00000003 ) + +// /include/internal/cef_types.h (cef_menu_item_type_t) +type TCefMenuItemType = types.Int32 + +const ( + MENUITEMTYPE_NONE TCefMenuItemType = iota + MENUITEMTYPE_COMMAND + MENUITEMTYPE_CHECK + MENUITEMTYPE_RADIO + MENUITEMTYPE_SEPARATOR + MENUITEMTYPE_SUBMENU +)