TextInputMessageBox::~TextInputMessageBox() { ToggleMenuShortcutKeys(true); MessageMenu* menu = (MessageMenu*)GetMenuByType(kMenuType_Message); if (menu) menu->HandleClick(menu->kButtonID_Close, 0); //closes the menu delete[] m_fmtString; }
static bool Cmd_SetButtonPressed_Execute(COMMAND_ARGS) { UInt32 button = 0; if (ExtractArgs(PASS_EXTRACT_ARGS, &button)) { MessageMenu* menu = (MessageMenu*)GetMenuByType(kMenuType_Message); if (menu) menu->HandleClick(menu->kButtonID_Button1 + button, 0); } return true; }
void TextInputMessageBox::Update() { std::string text = m_promptText + m_inputText; MessageMenu* msgBox = (MessageMenu*)GetMenuByType(kMenuType_Message); if (!msgBox) //original msgBox was closed/overwritten { Init(); //so re-display it msgBox = (MessageMenu*)GetMenuByType(kMenuType_Message); } else if (*ShowMessageBox_pScriptRefID != m_scriptRefID || !msgBox->IsScriptMessageBox()) return; // someone else is displaying a messagebox, let's not interfere msgBox->messageText->SetStringValue(kTileValue_string, text.c_str()); msgBox->messageText->UpdateField(kTileValue_string, 0.0, text.c_str()); }
static bool GetActiveMenuElement(COMMAND_ARGS, eMenuValue whichValue, MenuInfo* out, UInt32 whichMenu = 0) { InterfaceManager* intfc = InterfaceManager::GetSingleton(); Menu* activeMenu = intfc->activeMenu; Tile* activeTile = intfc->activeTile; if (!activeTile) { // theoretically this is active tile if user is navigating by keyboard - for this to work user must pass whichMenu arg activeTile = intfc->altActiveTile; } bool gotValue = false; UInt32 intArg = -1; //Extract arguments if (whichValue < kMenu_Ingredient && whichValue >= kMenu_Selection) //optional int param specifies menu type { ExtractArgs(EXTRACT_ARGS, &intArg); if (intArg != -1) activeMenu = GetMenuByType(intArg); } else if (whichValue >= kMenu_Ingredient) { ExtractArgs(EXTRACT_ARGS, &intArg); if (intArg == -1) return false; } if (whichMenu) //specific menu, so look it up directly activeMenu = GetMenuByType(whichMenu); if (!activeMenu) return false; //get element based on menu type switch (activeMenu->id) { case kMenuType_Message: { MessageMenu* msgMenu = (MessageMenu*)activeMenu; switch (whichValue) { case kMenu_Object: if (ShowMessageBox_pScriptRefID && msgMenu->IsScriptMessageBox()) { out->form = LookupFormByID(*ShowMessageBox_pScriptRefID); gotValue = true; } else out->form = 0; default: break; } } break; case kMenuType_Alchemy: { AlchemyMenu* menu = (AlchemyMenu*)activeMenu; switch (whichValue) { case kMenu_Object: out->form = menu->potion; gotValue = true; break; case kMenu_Ingredient: out->form = menu->GetIngredientItem(intArg); gotValue = true; break; case kMenu_IngredientCount: out->integer = menu->GetIngredientCount(intArg); gotValue = true; break; case kMenu_Apparatus: out->form = menu->GetApparatus(intArg); gotValue = true; break; default: break; } } break; case kMenuType_Container: { ContainerMenu* menu = (ContainerMenu*)activeMenu; switch (whichValue) { case kMenu_ContainerView: if (menu->isContainerContents) out->integer = 0; else out->integer = 1; gotValue = true; break; case kMenu_Ref: { out->form = menu->refr; gotValue = true; break; } case kMenu_Filter: out->integer = menu->filterType; gotValue = true; break; case kMenu_Selection: { if (activeTile) { float fIndex; if (activeTile->GetFloatValue(kTileValue_user11, &fIndex)) { UInt32 index = fIndex; if (menu->isContainerContents) out->form = menu->refr->GetInventoryItem(index, menu->isBarter); else out->form = (*g_thePlayer)->GetInventoryItem(index, 0); gotValue = true; } } } break; case kMenu_Barter: out->integer = menu->isBarter; gotValue = true; break; default: break; } break; } case kMenuType_Magic: { MagicMenu* menu = (MagicMenu*)activeMenu; switch (whichValue) { case kMenu_Selection: { if (activeTile && menu->filterType != MagicMenu::kFilter_ActiveEffects) { float fIndex; if (activeTile->GetFloatValue(kTileValue_user13, &fIndex)) { DEBUG_PRINT("Index of active magic item: %.0f", fIndex); UInt32 index = fIndex; float fObjType; if (activeTile->GetFloatValue(kTileValue_user7, &fObjType)) { if (fObjType == 8) { // a scroll TESForm* form = menu->GetMagicItemForIndex(index); if (form) { out->form = form; gotValue = true; } } else { // a spell out->form = MenuSpellListVisitor(&menu->spells).GetNthInfo(index-1); gotValue = true; } } } } } break; case kMenu_Filter: out->integer = menu->filterType; gotValue = true; break; default: break; } break; } case kMenuType_SpellPurchase: { SpellPurchaseMenu* menu = (SpellPurchaseMenu*)activeMenu; switch (whichValue) { case kMenu_Selection: { if (activeTile) { float fIndex; //if (activeTile->GetFloatValue(kTileValue_user11, &fIndex)) if (activeTile->GetFloatValue(kTileValue_user0, &fIndex)) { UInt32 index = fIndex; out->form = MenuSpellListVisitor(&menu->spells).GetNthInfo(index); gotValue = true; } } break; } case kMenu_Ref: { out->form = menu->spellMerchant; gotValue = true; break; } default: break; } } break; case kMenuType_Enchantment: { EnchantmentMenu* menu = (EnchantmentMenu*)activeMenu; switch (whichValue) { case kMenu_Soulgem: if (menu->soulGemInfo) { out->form = menu->soulGemInfo->form; gotValue = true; } break; case kMenu_EnchantItem: out->form = menu->enchantItem; gotValue = true; break; default: break; } } break; case kMenuType_Book: { BookMenu* menu = (BookMenu*)activeMenu; switch (whichValue) { case kMenu_Ref: out->form = menu->bookRef; gotValue = true; break; case kMenu_Object: out->form = menu->book; gotValue = true; break; default: break; } } break; case kMenuType_Inventory: { InventoryMenu* menu = (InventoryMenu*)activeMenu; switch (whichValue) { case kMenu_Selection: { if (activeTile) { float fIndex; if (activeTile->GetFloatValue(kTileValue_user11, &fIndex)) { UInt32 index = fIndex; out->form = (*g_thePlayer)->GetInventoryItem(index, 0); gotValue = true; } } } break; case kMenu_Filter: out->integer = menu->filterType; gotValue = true; break; default: break; } } break; case kMenuType_Dialog: { DialogMenu* menu = (DialogMenu*)activeMenu; switch (whichValue) { case kMenu_Ref: out->form = menu->speaker; gotValue = true; break; default: break; } } break; default: break; } return gotValue; }