UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2024 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "menu.h" 30 31 static ui_menu_add_f createMenuItem[] = { 32 /* UI_MENU */ ui_add_menu, 33 /* UI_MENU_ITEM */ ui_add_menu_item, 34 /* UI_MENU_CHECK_ITEM */ ui_add_menu_checkitem, 35 /* UI_MENU_RADIO_ITEM */ ui_add_menu_radioitem, 36 /* UI_MENU_ITEM_LIST */ ui_add_menu_list, 37 /* UI_MENU_CHECKITEM_LIST */ ui_add_menu_checklist, 38 /* UI_MENU_RADIOITEM_LIST */ ui_add_menu_radiolist, 39 /* UI_MENU_SEPARATOR */ ui_add_menu_separator 40 }; 41 42 43 HMENU ui_create_main_menu(UiObject *obj) { 44 UiMenu *menu = uic_get_menu_list(); 45 if (!menu) { 46 return NULL; 47 } 48 49 HMENU hMenu = CreateMenu(); 50 ui_add_menu(hMenu, 0, &menu->item, obj); 51 52 53 54 return hMenu; 55 } 56 57 void ui_add_menu(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 58 UiMenu *menu = (UiMenu*)item; 59 HMENU hMenu = CreatePopupMenu(); 60 AppendMenu(parent, MF_POPUP, (UINT_PTR)hMenu, menu->label); 61 62 int i = 0; 63 UiMenuItemI *child = menu->items_begin; 64 while (child) { 65 createMenuItem[child->type](hMenu, i++, child, obj); 66 child = child->next; 67 } 68 } 69 70 void ui_add_menu_item(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 71 UiMenuItem *i = (UiMenuItem*)item; 72 AppendMenu(parent, MF_STRING, 0, i->label); 73 } 74 75 void ui_add_menu_checkitem(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 76 77 } 78 79 void ui_add_menu_radioitem(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 80 81 } 82 83 void ui_add_menu_list(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 84 85 } 86 87 void ui_add_menu_checklist(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 88 89 } 90 91 void ui_add_menu_radiolist(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 92 93 } 94 95 void ui_add_menu_separator(HMENU parent, int pos, UiMenuItemI *item, UiObject *obj) { 96 97 } 98