// ChooseKeymapMenu.c //#define MDEBUG #include <proto/intuition.h> #include <proto/exec.h> #include <classes/popupmenu.h> #include "dockybase.h" #include "DockWindow.h" #include "prefs.h" #include "KeyMapSwitcher_rev.h" extern BOOL WinMode; extern char keymap1Flag[1024], keymap2Flag[1024]; void MenuHandlerFunc(struct Hook *hook, Object *o, APTR reserved); void OpenDockMenu(struct DockyData *dd) { Object *chooseMenu; struct Hook *MenuHandler; // MenuHandler.h_Entry = (HOOKFUNC)MenuHandlerFunc; // MenuHandler.h_Data = dd; MenuHandler = (struct Hook *)IExec->AllocSysObjectTags(ASOT_HOOK, ASOHOOK_Entry, MenuHandlerFunc, ASOHOOK_Data, dd, TAG_DONE); chooseMenu = IIntuition->NewObject(NULL, "popupmenu.class", PMA_MenuHandler,MenuHandler, TAG_DONE); Object *item1 = IIntuition->NewObject(NULL, "popupmenuitem.class", PMIA_ID, MENU_OPT1, PMIA_Title, dd->keymap1Name, PMIA_Icon, OBJ(GID_BITMAP1) = IIntuition->NewObject(NULL, "bitmap.image", BITMAP_SourceFile, keymap1Flag, BITMAP_Screen, dd->scr, BITMAP_Masking, TRUE, TAG_DONE), TAG_END); Object *item2 = IIntuition->NewObject(NULL, "popupmenuitem.class", PMIA_ID, MENU_OPT2, PMIA_Title, dd->keymap2Name, PMIA_Disabled, TRUE, PMIA_Icon, OBJ(GID_BITMAP2) = IIntuition->NewObject(NULL, "bitmap.image", BITMAP_SourceFile, keymap2Flag, BITMAP_Screen, dd->scr, BITMAP_Masking, TRUE, TAG_DONE), TAG_END); Object *item3 = IIntuition->NewObject(NULL, "popupmenuitem.class", PMIA_Title, "Settings...", PMIA_ID, MENU_PREFS, TAG_END); Object *itemBar = IIntuition->NewObject(NULL, "popupmenuitem.class", PMIA_Title,~0, TAG_END); // language2 valid/available if( OBJ(GID_BITMAP2) ) IIntuition->SetAttrs(item2, PMIA_Disabled,FALSE, TAG_DONE); IIntuition->IDoMethod(chooseMenu, OM_ADDMEMBER, item1); // lang1 IIntuition->IDoMethod(chooseMenu, OM_ADDMEMBER, item2); // lang2 if(!WinMode) { IIntuition->IDoMethod(chooseMenu, OM_ADDMEMBER, itemBar); // separator IIntuition->IDoMethod(chooseMenu, OM_ADDMEMBER, item3); // Settings... } IIntuition->IDoMethod(chooseMenu, PM_OPEN, dd->win); // show popup menu IIntuition->DisposeObject(chooseMenu); IExec->FreeSysObject(ASOT_HOOK, MenuHandler); } void MenuHandlerFunc(struct Hook *hook, Object *o, APTR reserved) { uint32 item_ID = 0; struct DockyData *DD = (struct DockyData *)hook->h_Data; if( IIntuition->GetAttr(PMIA_ID, o, &item_ID) ) { #ifdef MDEBUG IDOS->Printf("Choosed: "); #endif switch(item_ID) { case MENU_OPT1: #ifdef MDEBUG IDOS->Printf("'%s'\n",DD->keymap1Name); #endif ChangeKeymap(DD, DD->keymap1Name); IUtility->Strlcpy( DD->keymapSel, DD->keymap1Name, sizeof(DD->keymapSel) ); break; case MENU_OPT2: #ifdef MDEBUG IDOS->Printf("'%s'\n",DD->keymap2Name); #endif ChangeKeymap(DD, DD->keymap2Name); IUtility->Strlcpy( DD->keymapSel, DD->keymap2Name, sizeof(DD->keymapSel) ); break; case MENU_PREFS: { char keymap2Sel[128]; // to check if keymap2 changed #ifdef MDEBUG IDOS->Printf("Settings...\n"); #endif IUtility->Strlcpy( keymap2Sel, DD->keymap2Name, sizeof(keymap2Sel) ); OpenPrefsWindow(DD); #ifdef MDEBUG IDOS->Printf("%s == %s?\n",DD->keymap2Name,keymap2Sel); #endif if(IUtility->Stricmp(DD->keymap2Name, keymap2Sel) != 0) {// NEW keymap2: tooltype (KEYMAP2); keymap2Name & keymap2Flag SetKeyMapFlag(DD->keymap2Name, keymap2Flag); #ifdef MDEBUG IDOS->Printf("[NEW]KEYMAP2='%s' FLAG2='%s' (tooltype)\n",DD->keymap2Name,keymap2Flag); #endif } } break; } } }

