BOOL CChatFrame::OnShowPopupMenu (CBCGPopupMenu* pMenuPopup) { clearIdleTime(); //--------------------------------------------------------- // Replace ID_VIEW_TOOLBARS menu item to the toolbars list: //--------------------------------------------------------- CFrameWnd::OnShowPopupMenu (pMenuPopup); if (pMenuPopup != NULL && pMenuPopup->GetMenuBar ()->CommandToIndex (ID_VIEW_TOOLBARS) >= 0) { if (CBCGToolBar::IsCustomizeMode ()) { //---------------------------------------------------- // Don't show toolbars list in the cuztomization mode! //---------------------------------------------------- return FALSE; } pMenuPopup->RemoveAllItems (); CMenu menu; VERIFY(menu.LoadMenu (IDR_POPUP_TOOLBAR)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); pMenuPopup->GetMenuBar ()->ImportFromMenu (*pPopup, TRUE); } if ( pMenuPopup != NULL && pMenuPopup->GetParentToolBar() == &m_wndTopChatBar ) { if ( m_wndTopChatBar.GetButton( m_GameButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getGames( m_Games ) < 0 ) { //MessageBox( "Failed to get game list." ); return FALSE; } pMenuPopup->RemoveAllItems(); CMenu gameMenu; gameMenu.CreatePopupMenu(); for(int i=0;i<m_Games.size() && i < MAX_GAMES;i++) gameMenu.AppendMenu( MF_STRING, ID_GAMES_BEGIN + i, CString(m_Games[i].name) ); pMenuPopup->GetMenuBar()->ImportFromMenu (gameMenu, TRUE); } if ( m_wndTopChatBar.GetButton( m_RoomsButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getRooms( m_Rooms ) < 0 ) return FALSE; pMenuPopup->RemoveAllItems(); CMenu roomMenu; roomMenu.CreatePopupMenu(); roomMenu.AppendMenu( MF_STRING, ID_CHAT_CREATEROOM, _T("New Room") ); roomMenu.AppendMenu( MF_SEPARATOR ); for(int i=0;i<m_Rooms.size() && i < MAX_ROOMS;i++) { MetaClient::Room & room = m_Rooms[i]; CString sName; sName.Format( _T("%s "), CString( room.name ) ); if ( room.flags & MetaClient::FLAG_ROOM_MODERATED ) sName += _T("[MODERATED]"); if ( room.flags & MetaClient::FLAG_ROOM_PASSWORD ) sName += _T("[PRIVATE]"); if ( room.flags & MetaClient::FLAG_ROOM_PRIVATE ) sName += _T("[HIDDEN]"); CString sMembers; sMembers.Format( _T("\t%u"), room.members ); sName += sMembers; roomMenu.AppendMenu( MF_STRING, ID_ROOM_BEGIN + i, sName ); } pMenuPopup->GetMenuBar()->ImportFromMenu (roomMenu, TRUE); } if ( m_wndTopChatBar.GetButton( m_FriendsButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getFriends( m_Friends ) < 0 ) { //MessageBox( "Failed to get room list." ); return FALSE; } // let friends who are online appear on top of the list m_Friends.qsort( userOnlineSort ); pMenuPopup->RemoveAllItems(); CMenu friendsMenu; friendsMenu.CreatePopupMenu(); for(int i=0;i<m_Friends.size() && i < MAX_FRIENDS;i++) { MetaClient::ShortProfile & profile = m_Friends[ i ]; CString sFriend; sFriend.Format(_T("%s\t%s"), CString(profile.name), CString(profile.status) ); CMenu friendMenu; friendMenu.CreateMenu(); friendMenu.AppendMenu( MF_STRING, ID_FRIEND_MSG_BEGIN + i, _T("Message") ); friendMenu.AppendMenu( MF_STRING, ID_FRIEND_DEL_BEGIN + i, _T("Delete") ); friendsMenu.AppendMenu( MF_POPUP, (UINT)friendMenu.Detach(), sFriend ); } pMenuPopup->GetMenuBar()->ImportFromMenu( friendsMenu, TRUE ); } if ( m_wndTopChatBar.GetButton( m_StaffButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getStaffOnline( m_Staff ) < 0 ) return FALSE; dword userId = client.profile().userId; for( int i = 0 ; i < m_Staff.size() ; i++ ) if( m_Staff[ i ].userId == userId ) { m_Staff.remove(i); break; } pMenuPopup->RemoveAllItems(); CMenu staffMenu; staffMenu.CreatePopupMenu(); for(int i=0;i<m_Staff.size() && i < MAX_STAFF;i++) { MetaClient::ShortProfile & profile = m_Staff[ i ]; CString sType; if ( profile.flags & MetaClient::ADMINISTRATOR ) sType = "[ADMIN]"; else if ( profile.flags & MetaClient::MODERATOR ) sType = "[MOD]"; CString sName; sName = profile.name; CString sStaffMember; sStaffMember.Format( _T("%s: %s\t%s"), sType, sName, CString(profile.status) ); CMenu stMenu; stMenu.CreateMenu(); stMenu.AppendMenu( MF_STRING, ID_STAFF_MSG_BEGIN + i, _T("Message") ); bool bInserted = false; for(unsigned int j=0;j<staffMenu.GetMenuItemCount() && !bInserted;j++) { CString sCompare; staffMenu.GetMenuString( j, sCompare, MF_BYPOSITION ); if ( _tcscmp( sCompare, sName ) > 0 ) { staffMenu.InsertMenu( j, MF_BYPOSITION|MF_POPUP, (UINT)stMenu.Detach(), sStaffMember ) ? true : false; bInserted = true; } } if (!bInserted ) staffMenu.AppendMenu( MF_POPUP, (UINT)stMenu.Detach(), sStaffMember ); } pMenuPopup->GetMenuBar()->ImportFromMenu( staffMenu, TRUE ); } if ( m_wndTopChatBar.GetButton( m_ClanButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; pMenuPopup->RemoveAllItems(); MetaClient & client = CGCQLApp::sm_MetaClient; CMenu clanMenu; clanMenu.CreatePopupMenu(); //clanMenu.AppendMenu( MF_STRING, ID_GAMEBAR_CLAN, _T("Fleet Home") ); dword clanId = client.profile().clanId; if ( clanId != 0 ) { clanMenu.AppendMenu( MF_SEPARATOR ); if ( client.getClan( clanId, m_Clan ) < 0 ) { //MessageBox( "Failed to get clan members" ); return FALSE; } // Remove self from clanlist for( int i = 0 ; i < m_Clan.size() ; i++ ) if( m_Clan[i].userId == client.profile().userId ) { m_Clan.remove(i); break; } // let members who are online appear on top of the list m_Clan.qsort( userOnlineSort ); for( int i = 0 ; i < m_Clan.size() && i < MAX_CLAN ; i++ ) { MetaClient::ShortProfile & profile = m_Clan[ i ]; CString sClanMember; sClanMember.Format( _T("%s\t%s"), CString(profile.name), CString(profile.status) ); CMenu subMenu; subMenu.CreateMenu(); subMenu.AppendMenu( MF_STRING, ID_CLAN_MSG_BEGIN + i, _T("Message") ); clanMenu.AppendMenu( MF_POPUP, (UINT)subMenu.Detach(), sClanMember ); } } pMenuPopup->GetMenuBar()->ImportFromMenu( clanMenu, TRUE ); } } return TRUE; }
void CMuleToolbarCtrl::OnNmRClick(NMHDR* /*pNMHDR*/, LRESULT* pResult) { if (GetKeyState(VK_CONTROL) & 0x8000) { if (!thePrefs.GetToolbarBitmapSettings().IsEmpty()) ChangeToolbarBitmap(thePrefs.GetToolbarBitmapSettings(), true); if (!thePrefs.GetSkinProfile().IsEmpty()) theApp.ApplySkin(thePrefs.GetSkinProfile()); *pResult = TRUE; return; } /////////////////////////////////////////////////////////////////////////// // "Toolbar Bitmap" sub menu // CMenu menuBitmaps; menuBitmaps.CreateMenu(); menuBitmaps.AppendMenu(MF_STRING, MP_SELECTTOOLBARBITMAP, GetResString(IDS_SELECTTOOLBARBITMAP)); menuBitmaps.AppendMenu(MF_STRING, MP_SELECTTOOLBARBITMAPDIR, GetResString(IDS_SELECTTOOLBARBITMAPDIR)); menuBitmaps.AppendMenu(MF_SEPARATOR); menuBitmaps.AppendMenu(MF_STRING, MP_TOOLBARBITMAP, GetResString(IDS_DEFAULT)); m_astrToolbarPaths.RemoveAll(); CString currentBitmapSettings = thePrefs.GetToolbarBitmapSettings(); bool checked = false; if (currentBitmapSettings.IsEmpty()) { menuBitmaps.CheckMenuItem(MP_TOOLBARBITMAP, MF_CHECKED); menuBitmaps.EnableMenuItem(MP_TOOLBARBITMAP, MF_DISABLED); checked = true; } m_astrToolbarPaths.Add(_T("")); // dummy entry for 'Default' menu item int i = 1; if (!thePrefs.GetMuleDirectory(EMULE_TOOLBARDIR).IsEmpty()) { CStringArray astrToolbarFiles; for (int f = 0; f < _countof(s_apszTBFiles); f++) { WIN32_FIND_DATA FileData; HANDLE hSearch = FindFirstFile(thePrefs.GetMuleDirectory(EMULE_TOOLBARDIR) + CString(_T("\\")) + s_apszTBFiles[f], &FileData); if (hSearch != INVALID_HANDLE_VALUE) { do { astrToolbarFiles.Add(FileData.cFileName); } while (astrToolbarFiles.GetCount() < MAX_TOOLBAR_FILES && FindNextFile(hSearch, &FileData)); FindClose(hSearch); } } if (astrToolbarFiles.GetCount() > 0) { Sort(astrToolbarFiles); for (int f = 0; f < astrToolbarFiles.GetCount(); f++) { const CString& bitmapFileName = astrToolbarFiles.GetAt(f); CString bitmapBaseName; LPCTSTR pszTbBaseExt = stristr(bitmapFileName, EMULTB_BASEEXT); if (pszTbBaseExt) bitmapBaseName = bitmapFileName.Left(pszTbBaseExt - (LPCTSTR)bitmapFileName - 1); else bitmapBaseName = bitmapFileName; menuBitmaps.AppendMenu(MF_STRING, MP_TOOLBARBITMAP + i, bitmapBaseName); m_astrToolbarPaths.Add(thePrefs.GetMuleDirectory(EMULE_TOOLBARDIR) + CString(_T("\\")) + bitmapFileName); if (!checked && currentBitmapSettings.CompareNoCase(m_astrToolbarPaths[i]) == 0) { menuBitmaps.CheckMenuItem(MP_TOOLBARBITMAP + i, MF_CHECKED); menuBitmaps.EnableMenuItem(MP_TOOLBARBITMAP + i, MF_DISABLED); checked = true; } i++; } } ASSERT( i-1 == astrToolbarFiles.GetCount() ); } if (!checked) { menuBitmaps.AppendMenu(MF_STRING, MP_TOOLBARBITMAP + i, currentBitmapSettings); menuBitmaps.CheckMenuItem(MP_TOOLBARBITMAP + i, MF_CHECKED); menuBitmaps.EnableMenuItem(MP_TOOLBARBITMAP + i, MF_DISABLED); m_astrToolbarPaths.Add(currentBitmapSettings); } /////////////////////////////////////////////////////////////////////////// // "Skin Profile" sub menu // CMenu menuSkins; menuSkins.CreateMenu(); menuSkins.AppendMenu(MF_STRING, MP_SELECT_SKIN_FILE, GetResString(IDS_SEL_SKIN)); menuSkins.AppendMenu(MF_STRING, MP_SELECT_SKIN_DIR, GetResString(IDS_SEL_SKINDIR)); menuSkins.AppendMenu(MF_SEPARATOR); menuSkins.AppendMenu(MF_STRING, MP_SKIN_PROFILE,GetResString(IDS_DEFAULT)); m_astrSkinPaths.RemoveAll(); CString currentSkin = thePrefs.GetSkinProfile(); checked = false; if (currentSkin.IsEmpty()) { menuSkins.CheckMenuItem(MP_SKIN_PROFILE, MF_CHECKED); menuSkins.EnableMenuItem(MP_SKIN_PROFILE, MF_DISABLED); checked = true; } m_astrSkinPaths.Add(_T("")); // dummy entry for 'Default' menu item i = 1; if (!thePrefs.GetMuleDirectory(EMULE_SKINDIR, false).IsEmpty()) { CStringArray astrSkinFiles; for (int f = 0; f < _countof(s_apszSkinFiles); f++) { WIN32_FIND_DATA FileData; HANDLE hSearch = FindFirstFile(thePrefs.GetMuleDirectory(EMULE_SKINDIR, false) + CString(_T("\\")) + s_apszSkinFiles[f], &FileData); if (hSearch != INVALID_HANDLE_VALUE) { do { astrSkinFiles.Add(FileData.cFileName); } while (astrSkinFiles.GetCount() < MAX_SKIN_FILES && FindNextFile(hSearch, &FileData)); FindClose(hSearch); } } if (astrSkinFiles.GetCount() > 0) { Sort(astrSkinFiles); for (int f = 0; f < astrSkinFiles.GetCount(); f++) { const CString& skinFileName = astrSkinFiles.GetAt(f); CString skinBaseName; LPCTSTR pszSkinBaseExt = stristr(skinFileName, _T(".") EMULSKIN_BASEEXT _T(".ini")); if (pszSkinBaseExt) skinBaseName = skinFileName.Left(pszSkinBaseExt - (LPCTSTR)skinFileName); else skinBaseName = skinFileName; menuSkins.AppendMenu(MF_STRING, MP_SKIN_PROFILE + i, skinBaseName); m_astrSkinPaths.Add(thePrefs.GetMuleDirectory(EMULE_SKINDIR, false) + CString(_T("\\")) + skinFileName); if (!checked && currentSkin.CompareNoCase(m_astrSkinPaths[i]) == 0) { menuSkins.CheckMenuItem(MP_SKIN_PROFILE + i, MF_CHECKED); menuSkins.EnableMenuItem(MP_SKIN_PROFILE + i, MF_DISABLED); checked = true; } i++; } } ASSERT( i-1 == astrSkinFiles.GetCount() ); } if (!checked) { menuSkins.AppendMenu(MF_STRING, MP_SKIN_PROFILE + i, currentSkin); menuSkins.CheckMenuItem(MP_SKIN_PROFILE + i, MF_CHECKED); menuSkins.EnableMenuItem(MP_SKIN_PROFILE + i, MF_DISABLED); m_astrSkinPaths.Add(currentSkin); } /////////////////////////////////////////////////////////////////////////// // "Text Label" sub menu // CMenu menuTextLabels; menuTextLabels.CreateMenu(); ASSERT( MP_NOTEXTLABELS == MP_TEXTLABELS-1 && MP_NOTEXTLABELS == MP_TEXTLABELSONRIGHT-2 ); ASSERT( MP_NOTEXTLABELS + (int)NoLabels == MP_NOTEXTLABELS ); ASSERT( MP_NOTEXTLABELS + (int)LabelsBelow == MP_TEXTLABELS ); ASSERT( MP_NOTEXTLABELS + (int)LabelsRight == MP_TEXTLABELSONRIGHT ); menuTextLabels.AppendMenu(MF_STRING | MF_ENABLED, MP_NOTEXTLABELS, GetResString(IDS_NOTEXTLABELS)); menuTextLabels.AppendMenu(MF_STRING | MF_ENABLED, MP_TEXTLABELS, GetResString(IDS_ENABLETEXTLABELS)); menuTextLabels.AppendMenu(MF_STRING | MF_ENABLED, MP_TEXTLABELSONRIGHT, GetResString(IDS_TEXTLABELSONRIGHT)); menuTextLabels.CheckMenuRadioItem(MP_NOTEXTLABELS, MP_TEXTLABELSONRIGHT, MP_NOTEXTLABELS + (int)thePrefs.GetToolbarLabelSettings(), MF_BYCOMMAND); menuTextLabels.EnableMenuItem(MP_NOTEXTLABELS + (int)thePrefs.GetToolbarLabelSettings(), MF_BYCOMMAND | MF_DISABLED); menuTextLabels.AppendMenu(MF_SEPARATOR); menuTextLabels.AppendMenu(MF_STRING, MP_LARGEICONS, GetResString(IDS_LARGEICONS)); menuTextLabels.AppendMenu(MF_STRING, MP_SMALLICONS, GetResString(IDS_SMALLICONS)); ASSERT( MP_LARGEICONS == MP_SMALLICONS-1 ); menuTextLabels.CheckMenuRadioItem(MP_LARGEICONS, MP_SMALLICONS, m_sizBtnBmp.cx == 16 ? MP_SMALLICONS : MP_LARGEICONS, MF_BYCOMMAND); menuTextLabels.EnableMenuItem(m_sizBtnBmp.cx == 16 ? MP_SMALLICONS : MP_LARGEICONS, MF_BYCOMMAND | MF_DISABLED); /////////////////////////////////////////////////////////////////////////// // Toolbar context menu // CMenu menuToolbar; menuToolbar.CreatePopupMenu(); menuToolbar.AppendMenu(MF_STRING | MF_POPUP, (UINT_PTR)menuBitmaps.m_hMenu, GetResString(IDS_TOOLBARSKINS)); menuToolbar.AppendMenu(MF_STRING | MF_POPUP, (UINT_PTR)menuSkins.m_hMenu, GetResString(IDS_SKIN_PROF)); menuToolbar.AppendMenu(MF_STRING | MF_POPUP, (UINT_PTR)menuTextLabels.m_hMenu, GetResString(IDS_TEXTLABELS)); menuToolbar.AppendMenu(MF_STRING, MP_CUSTOMIZETOOLBAR, GetResString(IDS_CUSTOMIZETOOLBAR)); CPoint point; GetCursorPos(&point); menuToolbar.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); *pResult = TRUE; }