MCPcopy Create free account
hub / github.com/ZDoom/Raze / M_SetMenu

Function M_SetMenu

source/common/menu/menu.cpp:505–589  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

503//=============================================================================
504
505void M_SetMenu(FName menu, int param)
506{
507 if (sysCallbacks.SetSpecialMenu && !sysCallbacks.SetSpecialMenu(menu, param)) return;
508
509 DMenuDescriptor **desc = MenuDescriptors.CheckKey(menu);
510 if (desc != nullptr)
511 {
512
513 if ((*desc)->IsKindOf(RUNTIME_CLASS(DListMenuDescriptor)))
514 {
515 DListMenuDescriptor *ld = static_cast<DListMenuDescriptor*>(*desc);
516 if (ld->mAutoselect >= 0 && ld->mAutoselect < (int)ld->mItems.Size())
517 {
518 // recursively activate the autoselected item without ever creating this menu.
519 ld->mItems[ld->mAutoselect]->Activate();
520 }
521 else
522 {
523 PClass *cls = ld->mClass;
524 if (cls == nullptr) cls = DefaultListMenuClass;
525 if (cls == nullptr) cls = PClass::FindClass("ListMenu");
526
527 DMenu *newmenu = (DMenu *)cls->CreateNew();
528 IFVIRTUALPTRNAME(newmenu, "ListMenu", Init)
529 {
530 VMValue params[3] = { newmenu, CurrentMenu, ld };
531 VMCall(func, params, 3, nullptr, 0);
532 }
533 M_ActivateMenu(newmenu);
534 }
535 }
536 else if ((*desc)->IsKindOf(RUNTIME_CLASS(DOptionMenuDescriptor)))
537 {
538 DOptionMenuDescriptor *ld = static_cast<DOptionMenuDescriptor*>(*desc);
539 PClass *cls = ld->mClass;
540 if (cls == nullptr) cls = DefaultOptionMenuClass;
541 if (cls == nullptr) cls = PClass::FindClass("OptionMenu");
542
543 DMenu *newmenu = (DMenu*)cls->CreateNew();
544 IFVIRTUALPTRNAME(newmenu, "OptionMenu", Init)
545 {
546 VMValue params[3] = { newmenu, CurrentMenu, ld };
547 VMCall(func, params, 3, nullptr, 0);
548 }
549 M_ActivateMenu(newmenu);
550 }
551 else if ((*desc)->IsKindOf(RUNTIME_CLASS(DImageScrollerDescriptor)))
552 {
553 auto ld = static_cast<DImageScrollerDescriptor*>(*desc);
554 PClass* cls = ld->mClass;
555 if (cls == nullptr) cls = DefaultOptionMenuClass;
556 if (cls == nullptr) cls = PClass::FindClass("ImageScrollerMenu");
557
558 DMenu* newmenu = (DMenu*)cls->CreateNew();
559 IFVIRTUALPTRNAME(newmenu, "ImageScrollerMenu", Init)
560 {
561 VMValue params[3] = { newmenu, CurrentMenu, ld };
562 VMCall(func, params, 3, nullptr, 0);

Callers 6

GameTickerFunction · 0.85
CCMDFunction · 0.85
DEFINE_ACTION_FUNCTIONFunction · 0.85
DEFINE_ACTION_FUNCTIONFunction · 0.85
M_ResponderFunction · 0.85
CCMDFunction · 0.85

Calls 12

VMCallFunction · 0.85
M_ActivateMenuFunction · 0.85
PrintfFunction · 0.85
M_ClearMenusFunction · 0.85
IsKindOfMethod · 0.80
CreateNewMethod · 0.80
IsDescendantOfMethod · 0.80
IFVIRTUALPTRNAMEFunction · 0.70
CheckKeyMethod · 0.45
SizeMethod · 0.45
ActivateMethod · 0.45
GetCharsMethod · 0.45

Tested by

no test coverage detected