2 * AxWin3 Interface Library
3 * - By John Hodge (thePowersGang)
6 * - Menu renderer interface
9 #include <axwin3/axwin.h>
10 #include <axwin3/menu.h>
11 #include <menu_messages.h>
12 #include "include/internal.h"
13 #include "include/ipc.h"
17 typedef struct sMenuWindowInfo tMenuWindowInfo;
19 struct sAxWin3_MenuItem
23 tAxWin3_Menu_Callback Callback;
28 struct sMenuWindowInfo
31 tAxWin3_MenuItem *Items;
35 int AxWin3_Menu_int_Callback(tHWND Window, int Message, int Length, void *Data)
37 tMenuWindowInfo *info = AxWin3_int_GetDataPtr(Window);
40 case MSG_MENU_SELECT: {
41 tMenuMsg_Select *msg = Data;
42 tAxWin3_MenuItem *item;
43 if(Length < sizeof(tMenuMsg_Select)) return -1;
44 if(msg->ID >= info->nItems) return -1;
45 item = &info->Items[msg->ID];
46 if(item->Callback) item->Callback(item->CbPtr);
52 tHWND AxWin3_Menu_Create(tHWND Parent)
55 tMenuWindowInfo *info;
57 ret = AxWin3_CreateWindow(Parent, "Menu", 0, sizeof(*info), AxWin3_Menu_int_Callback);
60 info = AxWin3_int_GetDataPtr(ret);
67 void AxWin3_Menu_ShowAt(tHWND Menu, int X, int Y)
69 AxWin3_MoveWindow(Menu, X, Y);
70 AxWin3_ShowWindow(Menu, 1);
73 tAxWin3_MenuItem *AxWin3_Menu_AddItem(
74 tHWND Menu, const char *Label,
75 tAxWin3_Menu_Callback Cb, void *Ptr,
76 int Flags, tHWND SubMenu
79 tMenuWindowInfo *info;
80 tAxWin3_MenuItem *ret;
82 info = AxWin3_int_GetDataPtr(Menu);
85 info->Items = realloc(info->Items, sizeof(*info->Items)*info->nItems);
87 _SysDebug("ERROR: Realloc Failed");
91 ret = &info->Items[info->nItems-1];
92 ret->ID = info->nItems - 1;
96 ret->SubMenu = SubMenu;
99 tAxWin_IPCMessage *msg;
100 tMenuMsg_AddItem *req;
101 msg = AxWin3_int_AllocateIPCMessage(Menu, MSG_MENU_ADDITEM, 0, sizeof(*req)+strlen(Label));
102 req = (void*)msg->Data;
105 req->SubMenuID = AxWin3_int_GetWindowID(SubMenu);
106 strcpy(req->Label, Label);
107 AxWin3_int_SendIPCMessage(msg);