/* /// "nGUITask()" */ AROS_UFH0(void, nGUITask) { AROS_USERFUNC_INIT struct Task *thistask; struct AROSXClassBase *arosxb; struct AROSXClassController *arosxc; struct Library *MUIBase; struct Library *PsdBase; struct Library *AROSXBase; struct AROSXClassConfigGUI *gui; thistask = FindTask(NULL); arosxc = thistask->tc_UserData; arosxb = arosxc->arosxb; struct AROSX_GAMEPAD *arosx_gamepad; arosx_gamepad = &arosxc->arosx_gamepad; /* TODO: Make use of OpenLibrary/CloseLibrary to keep track of lib open count... */ ++arosxb->Library.lib_OpenCnt; struct AROSX_EventHook *arosx_eventhook; struct MsgPort *arosx_eventport; if(gui = AllocVec(sizeof(struct AROSXClassConfigGUI), MEMF_CLEAR|MEMF_ANY)) { if(AROSXBase = OpenLibrary("arosx.library", 0)) { mybug(-1,("[AROSXClass GUI] arosx.library openened\n")); arosx_eventport = CreateMsgPort(); arosx_eventhook = AROSX_AddEventHandler(arosx_eventport, (((1<<arosxc->id))<<28)); /* Set to listen every controller */ //arosx_eventhook = AROSX_AddEventHandler(arosx_eventport, (0xf<<28)); if((MUIMasterBase = OpenLibrary(MUIMASTER_NAME, MUIMASTER_VMIN))) { if((ps = OpenLibrary("poseidon.library", 4))) { gui->App = ApplicationObject, MUIA_Application_Title , (IPTR)libname, MUIA_Application_Version , (IPTR)VERSION_STRING, MUIA_Application_Copyright , (IPTR)"©2018-2019 The AROS Development Team", MUIA_Application_Author , (IPTR)"The AROS Development Team", MUIA_Application_Description, (IPTR)"Settings for the arosx.class", MUIA_Application_Base , (IPTR)"AROSX", MUIA_Application_HelpFile , (IPTR)"HELP:Poseidon.guide", MUIA_Application_Menustrip , (IPTR)MenustripObject, Child, (IPTR)MenuObjectT((IPTR)"Project"), Child, (IPTR)(gui->AboutMI = MenuitemObject, MUIA_Menuitem_Title, (IPTR)"About...", MUIA_Menuitem_Shortcut, (IPTR)"?", End), End, Child, (IPTR)MenuObjectT((IPTR)"Settings"), Child, (IPTR)(gui->UseMI = MenuitemObject, MUIA_Menuitem_Title, (IPTR)"Save", MUIA_Menuitem_Shortcut, (IPTR)"S", End), Child, (IPTR)MenuitemObject, MUIA_Menuitem_Title, (IPTR)NM_BARLABEL, End, Child, (IPTR)(gui->MUIPrefsMI = MenuitemObject, MUIA_Menuitem_Title, (IPTR)"MUI Settings", MUIA_Menuitem_Shortcut, (IPTR)"M", End), End, End, SubWindow, (IPTR)(gui->MainWindow = WindowObject, MUIA_Window_ID , MAKE_ID('M','A','I','N'), MUIA_Window_Title, (IPTR)arosxc->name, MUIA_HelpNode, (IPTR)libname, WindowContents, (IPTR)VGroup, Child, (IPTR)(gui->GamepadGroupObject = ColGroup(2), GroupFrameT("Gamepad"), MUIA_Disabled, TRUE, Child, (IPTR)HGroup, Child, (IPTR)(gui->GamepadObject_button_a = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_button_b = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_button_x = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_button_y = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_button_ls = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_button_rs = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_left_thumb = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_right_thumb = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_dpad_left = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_dpad_right = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_dpad_up = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_dpad_down = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_button_back = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), Child, (IPTR)(gui->GamepadObject_button_start = ImageObject, MUIA_Image_FontMatch, TRUE, MUIA_Selected, FALSE, MUIA_ShowSelState, FALSE, MUIA_Image_Spec, MUII_RadioButton, MUIA_Frame, MUIV_Frame_None, End), End, Child, (IPTR)(gui->GamepadObject_left_trigger = GaugeObject, GaugeFrame, MUIA_Gauge_Max, 0xff, MUIA_Gauge_InfoText, (IPTR)"%lx", MUIA_Gauge_Horiz, TRUE, MUIA_Gauge_Current, 0, End), Child, (IPTR)(gui->GamepadObject_right_trigger = GaugeObject, GaugeFrame, MUIA_Gauge_Max, 0xff, MUIA_Gauge_InfoText, (IPTR)"%lx", MUIA_Gauge_Horiz, TRUE, MUIA_Gauge_Current, 0, End), Child, (IPTR)(gui->GamepadObject_left_stick_x = GaugeObject, GaugeFrame, MUIA_Gauge_Max, 0xffff, MUIA_Gauge_InfoText, (IPTR)"%lx", MUIA_Gauge_Horiz, TRUE, MUIA_Gauge_Current, 0, End), Child, (IPTR)(gui->GamepadObject_left_stick_y = GaugeObject, GaugeFrame, MUIA_Gauge_Max, 0xffff, MUIA_Gauge_InfoText, (IPTR)"%lx", MUIA_Gauge_Horiz, TRUE, MUIA_Gauge_Current, 0, End), Child, (IPTR)(gui->GamepadObject_right_stick_x = GaugeObject, GaugeFrame, MUIA_Gauge_Max, 0xffff, MUIA_Gauge_InfoText, (IPTR)"%lx", MUIA_Gauge_Horiz, TRUE, MUIA_Gauge_Current, 0, End), Child, (IPTR)(gui->GamepadObject_right_stick_y = GaugeObject, GaugeFrame, MUIA_Gauge_Max, 0xffff, MUIA_Gauge_InfoText, (IPTR)"%lx", MUIA_Gauge_Horiz, TRUE, MUIA_Gauge_Current, 0, End), End), Child, (IPTR)VSpace(0), Child, (IPTR)HGroup, MUIA_Group_SameWidth, TRUE, Child, (IPTR)(gui->UseObj = TextObject, ButtonFrame, MUIA_Background, MUII_ButtonBack, MUIA_CycleChain, 1, MUIA_InputMode, MUIV_InputMode_RelVerify, MUIA_Text_Contents, (IPTR)"\33c Save ", End), Child, (IPTR)(gui->CloseObj = TextObject, ButtonFrame, MUIA_Background, MUII_ButtonBack, MUIA_CycleChain, 1, MUIA_InputMode, MUIV_InputMode_RelVerify, MUIA_Text_Contents, (IPTR)"\33c Use ", End), End, End, End), End; if(gui->App) { DoMethod(gui->MainWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, gui->App, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit); DoMethod(gui->UseObj, MUIM_Notify, MUIA_Pressed, FALSE, gui->App, 2, MUIM_Application_ReturnID, ID_STORE_CONFIG); DoMethod(gui->CloseObj, MUIM_Notify, MUIA_Pressed, FALSE, gui->App, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit); DoMethod(gui->AboutMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->App, 2, MUIM_Application_ReturnID, ID_ABOUT); DoMethod(gui->UseMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->App, 2, MUIM_Application_ReturnID, ID_STORE_CONFIG); DoMethod(gui->MUIPrefsMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->App, 2, MUIM_Application_OpenConfigWindow, 0); IPTR isopen = 0; IPTR iconify = 0; ULONG sigs; ULONG sigmask; LONG retid; get(gui->App, MUIA_Application_Iconified, &iconify); set(gui->MainWindow, MUIA_Window_Open, TRUE); get(gui->MainWindow, MUIA_Window_Open, &isopen); if((isopen || (!iconify))) { sigmask = (1UL<<arosx_eventport->mp_SigBit); do { retid = DoMethod(gui->App, MUIM_Application_NewInput, &sigs); switch(retid) { case ID_ABOUT: MUI_RequestA(gui->App, gui->MainWindow, 0, NULL, "Fabulous!", VERSION_STRING, NULL); break; } if(retid == MUIV_Application_ReturnID_Quit) { break; } if(sigs) { sigs = Wait(sigs | sigmask | SIGBREAKF_CTRL_C); if(sigs & SIGBREAKF_CTRL_C) { break; } if(sigs & (1UL<<arosx_eventport->mp_SigBit)) { mybug(-1,("(%d) I may have received an event...\n", arosxc->id)); struct AROSX_EventNote *en; while((en = (struct AROSX_EventNote *)GetMsg(arosx_eventport))) { mybug(-1,(" event %08lx\n", en->en_Event)); /* TODO: GUI is disabled until we get the first message even on wired controllers... */ if((arosxc->status.wireless)&&(arosxc->status.signallost)) { set(gui->GamepadGroupObject, MUIA_Disabled, TRUE); } else { set(gui->GamepadGroupObject, MUIA_Disabled, FALSE); set(gui->GamepadObject_button_a, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_A)); set(gui->GamepadObject_button_b, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_B)); set(gui->GamepadObject_button_x, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_X)); set(gui->GamepadObject_button_y, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_Y)); set(gui->GamepadObject_button_ls, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_LEFT_SHOULDER)); set(gui->GamepadObject_button_rs, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_RIGHT_SHOULDER)); set(gui->GamepadObject_left_thumb, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_LEFT_THUMB)); set(gui->GamepadObject_right_thumb, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_RIGHT_THUMB)); set(gui->GamepadObject_dpad_left, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_DPAD_LEFT)); set(gui->GamepadObject_dpad_right, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_DPAD_RIGHT)); set(gui->GamepadObject_dpad_up, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_DPAD_UP)); set(gui->GamepadObject_dpad_down, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_DPAD_DOWN)); set(gui->GamepadObject_button_back, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_BACK)); set(gui->GamepadObject_button_start, MUIA_Selected, (arosx_gamepad->Buttons & AROSX_GAMEPAD_START)); set(gui->GamepadObject_left_trigger, MUIA_Gauge_Current, (arosx_gamepad->LeftTrigger)); set(gui->GamepadObject_right_trigger, MUIA_Gauge_Current, (arosx_gamepad->RightTrigger)); if(arosx_gamepad->ThumbLX>=0x8000) { set(gui->GamepadObject_left_stick_x, MUIA_Gauge_Current, (arosx_gamepad->ThumbLX-0x8000)); } else { set(gui->GamepadObject_left_stick_x, MUIA_Gauge_Current, (0x8000+arosx_gamepad->ThumbLX)); } if(arosx_gamepad->ThumbLY>=0x8000) { set(gui->GamepadObject_left_stick_y, MUIA_Gauge_Current, (arosx_gamepad->ThumbLY-0x8000)); } else { set(gui->GamepadObject_left_stick_y, MUIA_Gauge_Current, (0x8000+arosx_gamepad->ThumbLY)); } if(arosx_gamepad->ThumbRX>=0x8000) { set(gui->GamepadObject_right_stick_x, MUIA_Gauge_Current, (arosx_gamepad->ThumbRX-0x8000)); } else { set(gui->GamepadObject_right_stick_x, MUIA_Gauge_Current, (0x8000+arosx_gamepad->ThumbRX)); } if(arosx_gamepad->ThumbRY>=0x8000) { set(gui->GamepadObject_right_stick_y, MUIA_Gauge_Current, (arosx_gamepad->ThumbRY-0x8000)); } else { set(gui->GamepadObject_right_stick_y, MUIA_Gauge_Current, (0x8000+arosx_gamepad->ThumbRY)); } } ReplyMsg((struct Message *)en); } } } } while(TRUE); set(gui->MainWindow, MUIA_Window_Open, FALSE); } if(gui->App) { MUI_DisposeObject(gui->App); gui->App = NULL; } if(MUIMasterBase) { CloseLibrary(MUIMasterBase); MUIMasterBase = NULL; } if(ps) { CloseLibrary(ps); ps = NULL; } } } } } AROSX_RemEventHandler(arosx_eventhook); CloseLibrary(AROSXBase); FreeVec(gui); Forbid(); arosxc->GUITask = NULL; --arosxb->Library.lib_OpenCnt; } AROS_USERFUNC_EXIT }
/* /// "HCActionDispatcher()" */ AROS_UFH3(IPTR, GM_UNIQUENAME(HCActionDispatcher), AROS_UFHA(struct IClass *, cl, A0), AROS_UFHA(Object *, obj, A2), AROS_UFHA(Msg, msg, A1)) { AROS_USERFUNC_INIT struct ActionData *ad = (struct ActionData *) 0xABADCAFE; struct NepClassHid *nch = NULL; if(msg->MethodID != OM_NEW) { ad = INST_DATA(cl, obj); nch = ad->ad_NCH; } switch(msg->MethodID) { case OM_NEW: if(!(obj = (Object *) DoSuperMethodA(cl,obj,msg))) { return(0); } return (IPTR)obj; case MUIM_Action_UpdateHIDCtrl: { struct NepHidGItem *nhgi = (struct NepHidGItem *) ((struct opSet *) msg)->ops_AttrList; switch(nhgi->nhgi_ObjType) { case NHGIOT_SHOTBUTTON: nhgi->nhgi_Item->nhi_OldValue = 1; nhgi->nhgi_Item->nhi_Collection->nhc_Report->nhr_OutTouched = TRUE; Signal(nch->nch_Task, (1L<<nch->nch_TaskMsgPort->mp_SigBit)); while(nhgi->nhgi_Item->nhi_Collection->nhc_Report->nhr_OutTouched) { psdDelayMS(10); } nhgi->nhgi_Item->nhi_OldValue = 0; nhgi->nhgi_Item->nhi_Collection->nhc_Report->nhr_OutTouched = TRUE; nch->nch_OutFeatTouched = TRUE; Signal(nch->nch_Task, (1L<<nch->nch_TaskMsgPort->mp_SigBit)); break; case NHGIOT_TOGGLEBUTTON: get(nhgi->nhgi_GUIObj, MUIA_Selected, &nhgi->nhgi_Item->nhi_OldValue); nhgi->nhgi_Item->nhi_Collection->nhc_Report->nhr_OutTouched = TRUE; nch->nch_OutFeatTouched = TRUE; Signal(nch->nch_Task, (1L<<nch->nch_TaskMsgPort->mp_SigBit)); break; case NHGIOT_SLIDER: case NHGIOT_SLIDERIMM: get(nhgi->nhgi_GUIObj, MUIA_Numeric_Value, &nhgi->nhgi_Item->nhi_OldValue); nhgi->nhgi_Item->nhi_Collection->nhc_Report->nhr_OutTouched = TRUE; nch->nch_OutFeatTouched = TRUE; Signal(nch->nch_Task, (1L<<nch->nch_TaskMsgPort->mp_SigBit)); break; } return(TRUE); } case MUIM_Action_About: MUI_RequestA(nch->nch_HCApp, nch->nch_HCMainWindow, 0, NULL, "Blimey!", "HID Output Control Window", NULL); return(TRUE); case MUIM_Action_ShowHIDControl: set(nch->nch_HCMainWindow, MUIA_Window_Open, TRUE); return(TRUE); case MUIM_Action_HideHIDControl: set(nch->nch_HCMainWindow, MUIA_Window_Open, FALSE); return(TRUE); } return(DoSuperMethodA(cl,obj,msg)); AROS_USERFUNC_EXIT }
void EventLoop(void) { ULONG sigs = 0UL; while (1) { ULONG rc = DoMethod(MUIApp, MUIM_Application_NewInput, &sigs); switch(rc) { case MUIV_Application_ReturnID_Quit: return; case ACTID_OPEN: { struct FileRequester *request; request = MUI_AllocAslRequestTags(ASL_FileRequest, ASLFR_Window, xget(MUIWindow, MUIA_Window_Window), ASLFR_TitleText, msgTextProgramName, ASLFR_RejectIcons, TRUE, ASLFR_InitialDrawer, "SYS:Prefs/Presets", TAG_DONE ); if( request != NULL ) { DoMethod(MUIApp, MUIA_Application_Sleep, TRUE); if (MUI_AslRequest(request, NULL)) { char *file; DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); file = AllocVec(strlen(request->fr_Drawer)+128,0); if( file != NULL ) { CopyMem(request->fr_Drawer, file, strlen(request->fr_Drawer)+1); AddPart(file, request->fr_File, 128); NewSettings(file); GUINewSettings(); FreeVec(file); } } else { DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); } MUI_FreeAslRequest(request); } break; } case ACTID_SAVEAS: { struct FileRequester *request; request = MUI_AllocAslRequestTags(ASL_FileRequest, ASLFR_Window, xget(MUIWindow, MUIA_Window_Window), ASLFR_TitleText, msgTextProgramName, ASLFR_RejectIcons, TRUE, ASLFR_DoSaveMode, TRUE, ASLFR_InitialDrawer, "SYS:Prefs/Presets", TAG_DONE); if(request != NULL ) { DoMethod(MUIApp, MUIA_Application_Sleep, TRUE); FillUnit(); if (MUI_AslRequest(request, NULL)) { char *file; DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); file = AllocVec(strlen(request->fr_Drawer)+128,0); if( file != NULL ) { CopyMem(request->fr_Drawer, file, strlen(request->fr_Drawer)+1); AddPart(file, request->fr_File, 128); SaveSettings(file, UnitList); if(SaveIcons) { WriteIcon(file); } FreeVec(file); } } else { DoMethod(MUIApp, MUIA_Application_Sleep, FALSE); } MUI_FreeAslRequest(request); } break; } case ACTID_ABOUT: { char* args[] = { "\033c", (char*)msgTextProgramName, "1996-2004 Stéphane Barbaray/Martin Blom" }; MUI_RequestA(MUIApp, MUIWindow, 0, (char *) msgTextProgramName, (char*)msgButtonOK, (char*)msgTextCopyright, args ); break; } case ACTID_SAVE: FillUnit(); SaveSettings(ENVFILE, UnitList); SaveSettings(ENVARCFILE, UnitList); return; case ACTID_USE: FillUnit(); SaveSettings(ENVFILE, UnitList); return; case ACTID_QUIT: return; case ACTID_DEFAULT: NewSettings(NULL); GUINewSettings(); break; case ACTID_LASTSAVED: NewSettings(ENVARCFILE); GUINewSettings(); break; case ACTID_RESTORE: NewSettings(args.from); GUINewSettings(); break; case ACTID_ICONS: { APTR item = (APTR)DoMethod(MUIMenu,MUIM_FindUData,ACTID_ICONS); if(item) { if(xget(item, MUIA_Menuitem_Checked)) { SaveIcons = TRUE; } else { SaveIcons = FALSE; } } break; } case ACTID_HELP: DoMethod(MUIApp,MUIM_Application_ShowHelp,NULL,NULL,"AHI",0); break; case ACTID_GUIDE: DoMethod(MUIApp,MUIM_Application_ShowHelp,NULL,NULL,"MAIN",0); break; case ACTID_HELPINDEX: DoMethod(MUIApp,MUIM_Application_ShowHelp,NULL,NULL,"Concept Index",0); break; case ACTID_UNIT: FillUnit(); NewUnit(xget(MUIUnit,MUIA_Cycle_Active)); GUINewUnit(); break; case ACTID_MODE: FillUnit(); NewMode(xget(MUIList, MUIA_List_Active)); GUINewMode(); break; case ACTID_PLAY: { int unit_id; struct UnitNode* unit; FillUnit(); unit_id = xget( MUIUnit, MUIA_Cycle_Active ); unit = (struct UnitNode *) GetNode( unit_id, UnitList ); PlaySound( &unit->prefs ); break; } case ACTID_DEBUG: case ACTID_SURROUND: case ACTID_ECHO: case ACTID_CPULIMIT: case ACTID_CLIPMV: case ACTID_ACTIME: case ACTID_SCALEMODE: { ULONG debug = AHI_DEBUG_NONE, surround = FALSE, echo = 0, cpu = 90; ULONG clip = FALSE, actime = 0, scalemode = AHI_SCALE_FIXED_0_DB; get(MUIDebug, MUIA_Cycle_Active, &debug); get(MUISurround, MUIA_Cycle_Active, &surround); get(MUIEcho, MUIA_Cycle_Active, &echo); get(MUIClipvol, MUIA_Cycle_Active, &clip); get(MUICpu, MUIA_Numeric_Value, &cpu); get(MUIACTime, MUIA_Numeric_Value, &actime); get(MUIScalemode, MUIA_Cycle_Active, &scalemode); globalprefs.ahigp_DebugLevel = debug; globalprefs.ahigp_DisableSurround = surround; globalprefs.ahigp_DisableEcho = (echo == 2); globalprefs.ahigp_FastEcho = (echo == 1); globalprefs.ahigp_MaxCPU = ((cpu << 16) + 50) / 100; globalprefs.ahigp_ClipMasterVolume = clip; globalprefs.ahigp_AntiClickTime = ((actime << 16) + 500) / 1000; globalprefs.ahigp_ScaleMode = scalemode; break; } } if (sigs) { sigs = Wait(sigs | SIGBREAKF_CTRL_C); if (sigs & SIGBREAKF_CTRL_C) return; } } }
LONG MUI_Request(APTR app, APTR win, LONGBITS flags, char *title, char *gadgets, char *format, ...){ return(MUI_RequestA(app, win, flags, title, gadgets, format, (APTR) (((ULONG)&format)+4) )); }
static IPTR mStorePrefs(struct IClass *cl, Object *obj, struct MUIP_Win_StorePrefs *msg) { struct data *data = INST_DATA(cl,obj); struct URL_Prefs up; ULONG i; set(_app(obj),MUIA_Application_Sleep,TRUE); /* Copy settings from gadgets into structure */ up.up_Version = PREFS_VERSION; NewList((struct List *)&up.up_BrowserList); NewList((struct List *)&up.up_MailerList); NewList((struct List *)&up.up_FTPList); /* Browsers */ for (i = 0; ; i++) { struct URL_BrowserNode *bn; DoMethod(data->browserList,MUIM_List_GetEntry,i,(IPTR)&bn); if (!bn) break; if(isFlagClear(bn->ubn_Flags, UNF_NEW)) AddTail((struct List *)&up.up_BrowserList,(struct Node *)bn); } /* Mailers */ for (i = 0; ; i++) { struct URL_MailerNode *mn; DoMethod(data->mailerList,MUIM_List_GetEntry,i,(IPTR)&mn); if (!mn) break; if(isFlagClear(mn->umn_Flags, UNF_NEW)) AddTail((struct List *)&up.up_MailerList,(struct Node *)mn); } /* FTPs */ for (i = 0; ; i++) { struct URL_FTPNode *fn; DoMethod(data->FTPList,MUIM_List_GetEntry,i,(IPTR)&fn); if (!fn) break; if(isFlagClear(fn->ufn_Flags, UNF_NEW)) AddTail((struct List *)&up.up_FTPList,(struct Node *)fn); } /* Miscellaneous */ if (xget(data->prepend,MUIA_Selected)) SET_FLAG(up.up_Flags, UPF_PREPENDHTTP); else CLEAR_FLAG(up.up_Flags, UPF_PREPENDHTTP); if (xget(data->mailto,MUIA_Selected)) SET_FLAG(up.up_Flags, UPF_DOMAILTO); else CLEAR_FLAG(up.up_Flags, UPF_DOMAILTO); if (xget(data->useFTP,MUIA_Selected)) SET_FLAG(up.up_Flags, UPF_DOFTP); else CLEAR_FLAG(up.up_Flags, UPF_DOFTP); up.up_DefShow = (ULONG)xget(data->show,MUIA_Selected); up.up_DefBringToFront = (ULONG)xget(data->toFront,MUIA_Selected); up.up_DefNewWindow = (ULONG)xget(data->newWin,MUIA_Selected); up.up_DefLaunch = (ULONG)xget(data->launch,MUIA_Selected); /* Save to disk */ if (!URL_SetPrefs(&up,URL_SetPrefs_Save,msg->How==MUIV_Win_StorePrefs_Save,TAG_DONE)) MUI_RequestA(_app(obj),obj,0,getString(MSG_ErrReqTitle),getString(MSG_ErrReqGadget),getString(MSG_Err_FailedSave),NULL); set(_app(obj),MUIA_Application_Sleep,FALSE); /* Quit */ if (msg->How!=MUIV_Win_StorePrefs_Apply) DoMethod(_app(obj),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit); return TRUE; }
/* /// "ApplyDragAction()" */ BOOL ApplyDragAction(Object *obj, LONG targetentry) { struct PrefsListEntry *targetplnode = NULL; struct PrefsListEntry *sourceplnode = NULL; ULONG sourceid, targetid; IPTR sourceentry = -1; LONG result; APTR pic, spic, tpic; APTR form; get(obj, MUIA_List_Active, &sourceentry); if((((LONG) sourceentry) < 0) || (targetentry < 0)) { return(FALSE); } DoMethod(obj, MUIM_List_GetEntry, sourceentry, &sourceplnode); DoMethod(obj, MUIM_List_GetEntry, targetentry, &targetplnode); if((!(sourceplnode && targetplnode)) || (sourceplnode == targetplnode)) { return(FALSE); } sourceid = sourceplnode->chunkid; targetid = targetplnode->chunkid; switch(sourceid) { case IFFFORM_DEVICECFG: if(targetid == IFFFORM_DEVICECFG) { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Replace|Merge|Cancel", "Do you want to \33breplace\33n or \33bmerge\33n the prefs of\n" "\33b%s\33n\n" "with the contents from\n" "\33b%s\33n?", targetplnode->id, sourceplnode->id); if(result < 1) { return(FALSE); } tpic = NULL; spic = NULL; pic = psdFindCfgForm(NULL, IFFFORM_DEVICECFG); while(pic) { if(psdMatchStringChunk(pic, IFFCHNK_DEVID, targetplnode->devid)) { tpic = pic; } if(psdMatchStringChunk(pic, IFFCHNK_DEVID, sourceplnode->devid)) { spic = pic; } pic = psdNextCfgForm(pic); } if(!(tpic && spic)) { return(FALSE); } // delete old contents if(result == 1) { while((pic = psdFindCfgForm(tpic, IFFFORM_DEVCFGDATA))) { psdRemCfgForm(pic); } while((pic = psdFindCfgForm(tpic, IFFFORM_IFCFGDATA))) { psdRemCfgForm(pic); } } // copy device cfg data pic = psdFindCfgForm(spic, IFFFORM_DEVCFGDATA); while(pic) { form = psdWriteCfg(pic); if(form) { psdAddCfgEntry(tpic, form); psdFreeVec(form); } pic = psdNextCfgForm(pic); } // copy interface cfg data pic = psdFindCfgForm(spic, IFFFORM_IFCFGDATA); while(pic) { form = psdWriteCfg(pic); if(form) { psdAddCfgEntry(tpic, form); psdFreeVec(form); } pic = psdNextCfgForm(pic); } return(TRUE); } break; case IFFFORM_IFCFGDATA: case IFFFORM_DEVCFGDATA: if((targetid == IFFFORM_DEVCFGDATA) || (targetid == IFFFORM_IFCFGDATA)) { if(strcmp(sourceplnode->owner, targetplnode->owner)) { result = MUI_RequestA(_app(obj), _win(obj), 0, NULL, "Add to device|Cancel", "Sorry, but only prefs of the same owner can\n" "be replaced.\n\n" "Do you wish to add this prefs\n" "to the device instead?", NULL); if(result < 1) { return(FALSE); } targetid = IFFFORM_DEVICECFG; } else { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Replace|Cancel", "Do you want to \33breplace\33n the prefs of\n" "\33b%s\33n\n" "by those of\n" "\33b%s\33n?", targetplnode->id, sourceplnode->id); if(result < 1) { return(FALSE); } pic = psdGetUsbDevCfg(sourceplnode->owner, sourceplnode->devid, sourceplnode->ifid); if(pic) { form = psdWriteCfg(pic); if(form) { psdSetUsbDevCfg(sourceplnode->owner, targetplnode->devid, targetplnode->ifid, form); psdFreeVec(form); } } return(TRUE); } } if(targetid == IFFFORM_DEVICECFG) { pic = psdGetUsbDevCfg(sourceplnode->owner, targetplnode->devid, sourceplnode->ifid); if(pic) { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Replace|Cancel", "Do you want to \33breplace\33n the prefs of\n" "\33b%s\33n\n" "by the one in\n" "\33b%s\33n?", targetplnode->id, sourceplnode->id); } else { result = MUI_Request(_app(obj), _win(obj), 0, NULL, "Add|Cancel", "Do you want to \33badd\33n the prefs of\n" "\33b%s\33n\n" "to the device\n" "\33b%s\33n?", sourceplnode->id, targetplnode->id); } if(result < 1) { return(FALSE); } pic = psdGetUsbDevCfg(sourceplnode->owner, sourceplnode->devid, sourceplnode->ifid); if(pic) { form = psdWriteCfg(pic); if(form) { psdSetUsbDevCfg(sourceplnode->owner, targetplnode->devid, sourceplnode->ifid, form); psdFreeVec(form); } } return(TRUE); } break; case IFFCHNK_FORCEDBIND: if((targetid == IFFFORM_DEVICECFG) || (targetid == IFFFORM_DEVCFGDATA) || (targetid == IFFFORM_IFCFGDATA) || (targetid == IFFCHNK_FORCEDBIND)) { psdSetForcedBinding(sourceplnode->owner, targetplnode->devid, targetplnode->ifid); return(TRUE); } break; } return(FALSE); }
/* /// "CfgListDispatcher()" */ AROS_UFH3(IPTR, CfgListDispatcher, AROS_UFHA(struct IClass *, cl, A0), AROS_UFHA(Object *, obj, A2), AROS_UFHA(Msg, msg, A1)) { AROS_USERFUNC_INIT // There should never be an uninitialized pointer, but just in case, try to get an mungwall hit if so. struct CfgListData *data = (struct CfgListData *) 0xABADCAFE; // on OM_NEW the obj pointer will be void, so don't try to get the data base in this case. if(msg->MethodID != OM_NEW) data = INST_DATA(cl,obj); switch(msg->MethodID) { case OM_NEW: if(!(obj = (Object *) DoSuperMethodA(cl,obj,msg))) return(0); return((IPTR) obj); case MUIM_DragBegin: data->cl_Dragging = TRUE; break; case MUIM_DragFinish: data->cl_Dragging = FALSE; break; case MUIM_DragQuery: { struct MUI_List_TestPos_Result tpr; struct Window *win; win = _window(obj); if(!win) { return(MUIV_DragQuery_Refuse); } DoMethod(obj, MUIM_List_TestPos, win->MouseX, win->MouseY, &tpr); return((IPTR) (CheckDragAccept(obj, tpr.entry) ? MUIV_DragQuery_Accept : MUIV_DragQuery_Refuse)); } #ifndef MUI_LPR_FULLDROP #define MUI_LPR_FULLDROP (1<<15) #endif case MUIM_List_TestPos: { struct MUIP_List_TestPos *tpmsg = (struct MUIP_List_TestPos *) msg; struct MUI_List_TestPos_Result *res = tpmsg->res; IPTR rc; rc = DoSuperMethodA(cl, obj, msg); if(data->cl_Dragging && (res->entry != -1)) { if(!CheckDragAccept(obj, res->entry)) { res->entry = -1; // illegal combination } else { res->flags |= MUI_LPR_FULLDROP; } } return(rc); } case MUIM_DragDrop: { //struct MUIP_DragDrop *ddmsg = (struct MUIP_DragDrop *) msg; struct MUI_List_TestPos_Result tpr; struct Window *win; win = _window(obj); if(!win) { return(FALSE); } DoMethod(obj, MUIM_List_TestPos, win->MouseX, win->MouseY, &tpr); //DoMethod(obj, MUIM_List_TestPos, ddmsg->x, ddmsg->y, &tpr); if(CheckDragAccept(obj, tpr.entry)) { ApplyDragAction(obj, tpr.entry); } else { MUI_RequestA(_app(obj), _win(obj), 0, NULL, "Oops!", "Sorry, drag'n drop operation to\n" "that target is not supported.", NULL); return(FALSE); } return(TRUE); } } return(DoSuperMethodA(cl,obj,msg)); AROS_USERFUNC_EXIT }