bool CMenu::InsertItem(UINT itemIndex, bool byPosition, const CMenuItem &item) { #ifndef _UNICODE if (!g_IsNT) { MENUITEMINFOA si; ConvertItemToSysForm(item, si); AString s; if (item.IsString()) { s = GetSystemString(item.StringValue); si.dwTypeData = (LPTSTR)(LPCTSTR)s; } return InsertItem(itemIndex, byPosition, &si); } else #endif { MENUITEMINFOW si; ConvertItemToSysForm(item, si); if (item.IsString()) si.dwTypeData = (LPWSTR)(LPCWSTR)item.StringValue; return InsertItem(itemIndex, byPosition, &si); } }
//------------------------------------------------------------------------ COptionMenu* COptionMenu::getSubMenu (int32_t idx) const { CMenuItem* item = getEntry (idx); if (item) return item->getSubmenu (); return 0; }
// 1.) because NPP use lets IDs for menu items // and we can not get new IDs for our dynamic menu items. To solve // this problem we switch menu message handling from WM_COMMAND to WM_MENUCOMMAND // see 2.) and 3.) LRESULT CALLBACK CEditor::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ if (message == WM_MENUCOMMAND){ CMenuItem* mItem = CMenuItem::GetInstance((HMENU)lParam, wParam); if (mItem){ // here we have our menu item mItem->call(); }else{ // we have menu items from NPP // simulate WM_COMMAND, NPP handles his menu items self MENUITEMINFO mii; mii.cbSize = sizeof(mii); mii.fMask = MIIM_ID | MIIM_DATA; // 2.) WM_MENUCOMMAND + submenu handle and item position help us to // get MenuItemInfo without using of menu item ID BOOL res = GetMenuItemInfo((HMENU)lParam, wParam, TRUE, &mii); if (res) ::SendMessage(hwnd, WM_COMMAND,mii.wID,0); } } else if (message == WM_INITMENUPOPUP){ CMenu* menu = CMenu::GetInstance((HMENU)wParam); if (menu){ menu->oninitpopup(); return NULL; } } WNDPROC oldWndProc = (WNDPROC)GetProp(hwnd, SUBCLASSING); return CallWindowProc(oldWndProc, hwnd, message, wParam, lParam); }
//------------------------------------------------------------------------ bool COptionMenu::setCurrent (int32_t index, bool countSeparator) { CMenuItem* item = 0; if (countSeparator) { item = getEntry (index); if (!item || (item && item->isSeparator ())) return false; currentIndex = index; } else { int32_t i = 0; CMenuItemIterator it = menuItems->begin (); while (it != menuItems->end ()) { if (i > index) break; if ((*it)->isSeparator ()) index++; it++; i++; } currentIndex = index; item = getEntry (currentIndex); } if (item && style & (kMultipleCheckStyle & ~kCheckStyle)) item->setChecked (!item->isChecked ()); // to force the redraw setDirty (); return true; }
//------------------------------------------------------------------------ bool COptionMenu::isCheckEntry (int32_t index) const { CMenuItem* item = getEntry (index); if (item && item->isChecked ()) return true; return false; }
//------------------------------------------------------------------------ COptionMenu* UIDescriptionTestController::createContextMenu (const CPoint& pos, VST3Editor* editor) { Parameter* tabParameter = getParameterObject (20000); if (tabParameter) { UIDescriptionTestControllerMenuHandler* menuHandler = new UIDescriptionTestControllerMenuHandler (tabParameter); COptionMenu* menu = new COptionMenu (); menu->setStyle (kMultipleCheckStyle); for (int32 i = 0; i <= tabParameter->getInfo ().stepCount; i++) { String128 valueString; tabParameter->toString (tabParameter->toNormalized (i), valueString); String str (valueString); str.toMultiByte (kCP_Utf8); CMenuItem* item = menu->addEntry (new CCommandMenuItem (str.text8 (), i, menuHandler)); if (tabParameter->getNormalized () == tabParameter->toNormalized (i)) item->setChecked (true); } COptionMenu* mainMenu = new COptionMenu (); mainMenu->addEntry (new CMenuItem ("Show Tab"))->setSubmenu (menu); menuHandler->forget (); return mainMenu; } return 0; }
//------------------------------------------------------------------------ void COptionMenu::draw (CDrawContext *pContext) { CMenuItem* item = getEntry (currentIndex); drawBack (pContext, inPopup ? bgWhenClick : 0); if (item) drawPlatformText (pContext, CString (item->getTitle ()).getPlatformString ()); setDirty (false); }
foreach (QGraphicsItem* pItem,m_ContextItems) { CMenuItem* pMenuItem = dynamic_cast<CMenuItem*>(pItem); if (pMenuItem) { pMenuItem->setScaleFactor(m_xFactor,m_yFactor); } }
void CMenu::ItemChanged( int a_iItemCode, int a_iValue, CMenuItem* a_poMenuItem ) { debug( "CMenu::ItemChanged( %d, %d )\n", a_iItemCode, a_iValue ); switch ( a_iItemCode ) { case MENU_NUM_PLAYERS: g_oState.m_iNumPlayers = a_iValue; break; case MENU_TEAM_MODE: { g_oState.m_enTeamMode = (SState::TTeamModeEnum) a_iValue; CMenuItem* poItem; poItem = GetMenuItem( MENU_TEAM_SIZE ); if ( poItem ) poItem->SetEnabled( SState::Team_CUSTOM==g_oState.m_enTeamMode ); poItem = GetMenuItem( MENU_TEAM_MULTISELECT ); if ( poItem ) poItem->SetEnabled( SState::Team_CUSTOM==g_oState.m_enTeamMode ); break; } case MENU_TEAM_SIZE: g_oState.m_iTeamSize = a_iValue; break; case MENU_TEAM_MULTISELECT: g_oState.m_bTeamMultiselect = a_iValue; break; case MENU_MUSIC_VOLUME: g_oState.m_iMusicVolume = a_iValue; Audio->SetMusicVolume( a_iValue ); break; case MENU_SOUND_VOLUME: g_oState.m_iSoundVolume = a_iValue; break; case MENU_ROUND_LENGTH: g_oState.m_iRoundLength = a_iValue; break; case MENU_GAME_SPEED: g_oState.m_iGameSpeed = a_iValue; break; case MENU_TOTAL_HIT_POINTS: g_oState.m_iHitPoints = a_iValue; break; case MENU_LANGUAGE: g_oState.SetLanguage( g_ppcLanguageCodes[ a_iValue ] ); Clear(); Draw(); break; } // end of switch a_iItemCode }
static void MyChangeMenu(HMENU menuLoc, int level, int menuIndex) { CMenu menu; menu.Attach(menuLoc); for (int i = 0;; i++) { CMenuItem item; item.fMask = Get_fMask_for_String() | MIIM_SUBMENU | MIIM_ID; item.fType = MFT_STRING; if (!menu.GetItem(i, true, item)) break; { UString newString; if (item.hSubMenu) { UInt32 langID = 0; if (level == 1 && menuIndex == kMenuIndex_Bookmarks) langID = kAddToFavoritesLangID; else { MyChangeMenu(item.hSubMenu, level + 1, i); if (level == 1 && menuIndex == kMenuIndex_View) langID = kToolbarsLangID; else if (level == 0 && i < ARRAY_SIZE(kTopMenuLangIDs)) langID = kTopMenuLangIDs[i]; else continue; } LangString_OnlyFromLangFile(langID, newString); if (newString.IsEmpty()) continue; } else { if (item.IsSeparator()) continue; int langPos = FindLangItem(item.wID); // we don't need lang change for CRC items!!! LangString_OnlyFromLangFile(langPos >= 0 ? kIDLangPairs[langPos].LangID : item.wID, newString); if (newString.IsEmpty()) continue; int tabPos = item.StringValue.ReverseFind(L'\t'); if (tabPos >= 0) newString += item.StringValue.Ptr(tabPos); } { item.StringValue = newString; item.fMask = Get_fMask_for_String(); item.fType = MFT_STRING; menu.SetItem(i, true, item); } } } }
//------------------------------------------------------------------------ bool COptionMenu::checkEntry (int32_t index, bool state) { CMenuItem* item = getEntry (index); if (item) { item->setChecked (state); return true; } return false; }
void CMenu::AddOkCancel( int a_iOkCode ) { SDL_Rect oRect; oRect.x = 0; oRect.w = 150; oRect.y = gamescreen->h - 50; oRect.h = sge_TTF_FontHeight( inkFont ); CMenuItem* poItem = AddMenuItem( "~OK", SDLK_o, a_iOkCode ); poItem->SetPosition( oRect ); // poItem = AddMenuItem( "Cancel", SDLK_UNKNOWN, 0 ); oRect.x = gamescreen->w - 150; poItem->SetPosition( oRect ); }
//------------------------------------------------------------------------ int32_t COptionMenu::onKeyDown (VstKeyCode& keyCode) { if (keyCode.modifier == 0 && keyCode.character == 0) { if (keyCode.virt == VKEY_RETURN) { CBaseObjectGuard guard (this); if (bgWhenClick) invalid (); popup (); if (bgWhenClick) invalid (); return 1; } if (!(style & (kMultipleCheckStyle & ~kCheckStyle))) { if (keyCode.virt == VKEY_UP) { int32_t value = (int32_t)getValue ()-1; if (value >= 0) { CMenuItem* entry = getEntry (value); while (entry && (entry->isSeparator () || entry->isTitle () || !entry->isEnabled () || entry->getSubmenu ())) entry = getEntry (--value); if (entry) { beginEdit (); setValue ((float)value); lastResult = (int32_t)getValue (); valueChanged (); endEdit (); invalid (); } } return 1; } if (keyCode.virt == VKEY_DOWN) { int32_t value = (int32_t)getValue ()+1; if (value < getNbEntries ()) { CMenuItem* entry = getEntry (value); while (entry && (entry->isSeparator () || entry->isTitle () || !entry->isEnabled () || entry->getSubmenu ())) entry = getEntry (++value); if (entry) { beginEdit (); setValue ((float)value); lastResult = (int32_t)getValue (); valueChanged (); endEdit (); invalid (); } } return 1; } } } return CParamDisplay::onKeyDown (keyCode); }
CMenuItem::CMenuItem(const CMenuItem &CM) : CField( CM ), Label( CM.Label ) { _selected = CM.selected(); CField::_data = &_format; Label.frame(this); }
//------------------------------------------------------------------------ void COptionMenu::setValue (float val) { if ((int32_t)val < 0 || (int32_t)val >= getNbEntries ()) return; currentIndex = (int32_t)val; if (style & (kMultipleCheckStyle & ~kCheckStyle)) { CMenuItem* item = getCurrent (); if (item) item->setChecked (!item->isChecked ()); } CParamDisplay::setValue (val); // to force the redraw setDirty (); }
// 获取当前处于活动状态的子菜单项 CMenuItem* CDuiMenu::GetHoverMenuItem() { for (size_t i = 0; i < m_vecControl.size(); i++) { CControlBase * pControlBase = m_vecControl[i]; if(pControlBase->IsClass(CMenuItem::GetClassName())) // 如果是MenuItem类型控件 { CMenuItem* pMenuItem = (CMenuItem*)pControlBase; if(pMenuItem->IsHover()) { return pMenuItem; } } } return NULL; }
// 刷新父控件下面所有同一个组的RadioButton控件的状态 BOOL CMenuItem::ResetGroupCheck() { CDuiObject* pParentObj = GetParent(); if(pParentObj == NULL) { return FALSE; } vector<CControlBase*>* pvecControl = NULL; if(pParentObj->IsClass(_T("dlg"))) { CDlgBase* pDlg = static_cast<CDlgBase*>(pParentObj); pvecControl = pDlg->GetControls(); }else if(pParentObj->IsClass(_T("popup"))) { CDlgPopup* pDlg = static_cast<CDlgPopup*>(pParentObj); pvecControl = pDlg->GetControls(); }else { CControlBase* pControlBase = static_cast<CControlBase*>(pParentObj); pvecControl = pControlBase->GetControls(); } if(pvecControl == NULL) { return FALSE; } for(int i=0; i<(int)pvecControl->size(); i++) { CControlBase* pControlBase = pvecControl->at(i); if(pControlBase->IsClass(CMenuItem::GetClassName()) && pControlBase->GetVisible() && !pControlBase->GetDisable()) { CMenuItem* pControl = static_cast<CMenuItem*>(pControlBase); if((pControl->GetGroupName() == m_strGroupName) && (pControl != this)) { // 重置控件状态 pControl->SetControlCheck(FALSE); } } } return TRUE; }
// 初始化 void CDuiHandlerTrayMenu::OnInit() { { CMenuItem* pDuiMenuItem = (CMenuItem*) GetControl(_T("menuitem.radio")); if(pDuiMenuItem) { pDuiMenuItem->SetDuiHandler(this); } } { this->SetTitle(_T("close_app"),_T("退出APP")); } { CMenuItem* pDuiMenuItem = (CMenuItem*)GetControl(_T("menuitem_checkbox")); if(pDuiMenuItem) { pDuiMenuItem->SetCheck(m_checked); } } { CMenuItem* pDuiMenuItem = (CMenuItem*)GetControl(m_radio_name); if(pDuiMenuItem) { pDuiMenuItem->ResetGroupCheck(); pDuiMenuItem->SetCheck(TRUE); } } }
CMenu& CMenu::add(const char* text, bool selected) { CMenuItem* newMenuItem = new CMenuItem(selected, _format, text, 1, 1, width() - 2); newMenuItem->frame(this); if (_tail) { MNode* newNode = new MNode(newMenuItem, _tail->_index + 1, _tail); _tail->_next = newNode; _tail = newNode; } else { _head = _tail = new MNode(newMenuItem, 0, (MNode*)0); _first = _cur = _head; } if (selected) { selectedIndex(_tail->_index); } _count++; return *this; }
// 获取当前处于活动状态的子菜单项(根据鼠标位置查找) CMenuItem* CDuiMenu::GetMenuItemWithPoint(CPoint point) { for (size_t i = 0; i < m_vecControl.size(); i++) { CControlBase * pControlBase = m_vecControl[i]; if(pControlBase->IsClass(CMenuItem::GetClassName())) // 如果是MenuItem类型控件 { CMenuItem* pMenuItem = (CMenuItem*)pControlBase; CRect rc = pMenuItem->GetRect(); if(rc.PtInRect(point)) { return pMenuItem; } } } return NULL; }
// 获取所在Radio组选择的控件的值 CString CMenuItem::GetGroupValue() { CDuiObject* pParentObj = GetParent(); if(pParentObj == NULL) { return _T(""); } vector<CControlBase*>* pvecControl = NULL; if(pParentObj->IsClass(_T("dlg"))) { CDlgBase* pDlg = static_cast<CDlgBase*>(pParentObj); pvecControl = pDlg->GetControls(); }else if(pParentObj->IsClass(_T("popup"))) { CDlgPopup* pDlg = static_cast<CDlgPopup*>(pParentObj); pvecControl = pDlg->GetControls(); }else { CControlBase* pControlBase = static_cast<CControlBase*>(pParentObj); pvecControl = pControlBase->GetControls(); } if(pvecControl == NULL) { return _T(""); } for(int i=0; i<(int)pvecControl->size(); i++) { CControlBase* pControlBase = pvecControl->at(i); if(pControlBase->IsClass(CMenuItem::GetClassName()) && pControlBase->GetVisible() && !pControlBase->GetDisable()) { CMenuItem* pControl = static_cast<CMenuItem*>(pControlBase); if((pControl->GetGroupName() == m_strGroupName) && pControl->GetCheck()) { return pControl->GetValue(); } } } return _T(""); }
bool CMenu::GetItem(UINT itemIndex, bool byPosition, CMenuItem &item) { const UINT kMaxSize = 512; #ifndef _UNICODE if (!g_IsNT) { CHAR s[kMaxSize + 1]; MENUITEMINFOA si; ConvertItemToSysForm(item, si); if (item.IsString()) { si.cch = kMaxSize; si.dwTypeData = s; } if (GetItemInfo(itemIndex, byPosition, &si)) { ConvertItemToMyForm(si, item); if (item.IsString()) item.StringValue = GetUnicodeString(s); return true; } } else #endif { wchar_t s[kMaxSize + 1]; MENUITEMINFOW si; ConvertItemToSysForm(item, si); if (item.IsString()) { si.cch = kMaxSize; si.dwTypeData = s; } if (GetItemInfo(itemIndex, byPosition, &si)) { ConvertItemToMyForm(si, item); if (item.IsString()) item.StringValue = s; return true; } } return false; }
void LoadFileMenu(HMENU hMenu, int startPos, bool programMenu, bool isFsFolder, int numItems, bool allAreFiles) { CMenu destMenu; destMenu.Attach(hMenu); UString diffPath; ReadRegDiff(diffPath); int numRealItems = startPos; for (int i = 0;; i++) { CMenuItem item; item.fMask = MIIM_STATE | MIIM_ID | Get_fMaskForFTypeAndString(); item.fType = MFT_STRING; if (!g_FileMenu.GetItem(i, true, item)) break; { if (!programMenu && item.wID == IDCLOSE) continue; if (item.wID == IDM_FILE_DIFF && diffPath.IsEmpty()) continue; bool isOneFsFile = (isFsFolder && numItems == 1 && allAreFiles); bool disable = ((item.wID == IDM_FILE_SPLIT || item.wID == IDM_FILE_COMBINE) && !isOneFsFile); bool isBigScreen = NControl::IsDialogSizeOK(40, 200); if (!isBigScreen && (disable || item.IsSeparator())) continue; if (destMenu.InsertItem(startPos, true, item)) startPos++; if (disable) destMenu.EnableItem(startPos - 1, MF_BYPOSITION | MF_GRAYED); if (!item.IsSeparator()) numRealItems = startPos; } } destMenu.RemoveAllItemsFrom(numRealItems); }
CNetworkMenu::CNetworkMenu(): CMenu( "Network Play Setup" ) { m_bOK = false; m_bServer = g_oState.m_bServer; m_sHostname = g_oState.m_acLatestServer; m_sNick = g_oState.m_acNick; AddMenuItem( "Find an opponent on MortalNet", SDLK_UNKNOWN, MENU_MORTALNET ); AddMenuItem( "START NETWORK GAME!", SDLK_UNKNOWN, MENU_CONNECT ); m_poNickMenuItem = AddTextMenuItem( "Nickname: ", m_sNick.c_str(), MENU_NICK ); AddEnumMenuItem( "Network mode: ", m_bServer ? 1 : 0, g_ppcServer, g_piServer, MENU_SERVER ); m_poServerMenuItem = AddTextMenuItem( "Connect to: ", m_sHostname.c_str(), MENU_HOSTNAME ); m_poServerMenuItem->SetEnabled(!m_bServer); CMenuItem* poItem = AddMenuItem( "Cancel", SDLK_UNKNOWN, MENU_CANCEL ); SDL_Rect oRect; oRect.x = gamescreen->w - 150; oRect.w = 150; oRect.y = gamescreen->h - 50; oRect.h = 30; poItem->SetPosition( oRect ); }
bool changeNotify(const neutrino_locale_t OptionName, void *) { if (OptionName == LOCALE_TIMERLIST_APIDS_DFLT) { if (*o_dflt==0) { m_std->setActive(true); m_alt->setActive(true); m_ac3->setActive(true); } else { m_std->setActive(false); m_alt->setActive(false); m_ac3->setActive(false); *o_std=0; *o_alt=0; *o_ac3=0; } } else { if (*o_std || *o_alt || *o_ac3) *o_dflt=0; } return true; }
//------------------------------------------------------------------------ CMenuItem::CMenuItem (const CMenuItem& item) : title (0) , flags (item.flags) , keyCode (0) , keyModifiers (0) , virtualKeyCode (0) , submenu (0) , icon (0) { setTitle (item.getTitle ()); setIcon (item.getIcon ()); if (item.getVirtualKeyCode ()) setVirtualKey (item.getVirtualKeyCode (), item.getKeyModifiers ()); else setKey (item.getKeycode (), item.getKeyModifiers ()); setTag (item.getTag ()); setSubmenu (item.getSubmenu ()); }
bool CMenu::InsertItem(UINT itemIndex, bool byPosition, const CMenuItem &item) { #ifndef _UNICODE if (!g_IsNT) { MENUITEMINFOA si; ConvertItemToSysForm(item, si); AString s; if (item.IsString()) { s = GetSystemString(item.StringValue); si.dwTypeData = (LPTSTR)(LPCTSTR)s; } return InsertItem(itemIndex, byPosition, &si); } else #endif { MENUITEMINFOW si; ConvertItemToSysForm(item, si); if (item.IsString()) si.dwTypeData = (LPWSTR)(LPCWSTR)item.StringValue; #ifdef UNDER_CE UINT flags = (item.fType & MFT_SEPARATOR) ? MF_SEPARATOR : MF_STRING; UINT id = item.wID; if ((item.fMask & MIIM_SUBMENU) != 0) { flags |= MF_POPUP; id = (UINT)item.hSubMenu; } if (!Insert(itemIndex, flags | (byPosition ? MF_BYPOSITION : MF_BYCOMMAND), id, item.StringValue)) return false; return SetItemInfo(itemIndex, byPosition, &si); #else return InsertItem(itemIndex, byPosition, &si); #endif } }
//---------------------------------------------------------------------------------------------------- CMessageResult UIFocusSettingsController::notify (CBaseObject* sender, IdStringPtr message) { if (message == UIDialogController::kMsgDialogButton1Clicked) { if (controls[kEnabledTag]) { settings->setBooleanAttribute ("enabled", controls[kEnabledTag]->getValue () == controls[kEnabledTag]->getMax () ? true : false); } if (controls[kColorTag]) { COptionMenu* menu = dynamic_cast<COptionMenu*>(controls[kColorTag]); CMenuItem* item = menu->getCurrent (); if (item) settings->setAttribute ("color", item->getTitle ()); } if (controls[kWidthTag]) { settings->setDoubleAttribute ("width", controls[kWidthTag]->getValue ()); } return kMessageNotified; } return kMessageUnknown; }
void CMenu::FocusNext() { CMenuItem* poItem = NULL; int iNextItem; for ( iNextItem = m_iCurrentItem+1; iNextItem < (int) m_oItems.size(); ++iNextItem ) { poItem = m_oItems[iNextItem]; if ( poItem->GetEnabled() ) { break; } poItem = NULL; } if ( NULL != poItem ) { Audio->PlaySample("MENU_ITEM_SELECTION"); m_oItems[m_iCurrentItem]->SetActive(false); m_oItems[iNextItem]->SetActive(true); m_iCurrentItem = iNextItem; } }
void CMenu::FocusPrev() { CMenuItem* poItem = NULL; int iPrevItem; for ( iPrevItem = m_iCurrentItem-1; iPrevItem >= 0; --iPrevItem ) { poItem = m_oItems[iPrevItem]; if ( poItem->GetEnabled() ) { break; } poItem = NULL; } if ( NULL != poItem ) { Audio->PlaySample("MENU_ITEM_SELECTION"); m_oItems[m_iCurrentItem]->SetActive(false); m_oItems[iPrevItem]->SetActive(true); m_iCurrentItem = iPrevItem; } }