LRESULT RSSNewsFrame::onContextMenu(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL & bHandled) { if (reinterpret_cast<HWND>(wParam) == ctrlList && ctrlList.GetSelectedCount() > 0) { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; if (pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(ctrlList, pt); } if (ctrlList.GetSelectedCount() == 1) { OMenu RSSMenu; RSSMenu.CreatePopupMenu(); RSSMenu.AppendMenu(MF_STRING, IDC_OPEN_FILE, CTSTRING(OPEN)); RSSMenu.AppendMenu(MF_POPUP, (UINT_PTR)(HMENU)copyMenu, CTSTRING(COPY)); // RSSMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); RSSMenu.SetMenuDefaultItem(IDC_OPEN_FILE); RSSMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); return TRUE; } } bHandled = FALSE; return FALSE; }
LRESULT ChatCtrl::onContextMenu(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; // location of mouse click if(pt.x == -1 && pt.y == -1) { CRect erc; GetRect(&erc); pt.x = erc.Width() / 2; pt.y = erc.Height() / 2; ClientToScreen(&pt); } POINT ptCl = pt; ScreenToClient(&ptCl); OnRButtonDown(ptCl); bool boHitURL = HitURL(); if (!boHitURL) selectedURL.clear(); OMenu menu; menu.CreatePopupMenu(); if (copyMenu.m_hMenu != NULL) { // delete copy menu if it exists copyMenu.DestroyMenu(); copyMenu.m_hMenu = NULL; } if(selectedUser.empty()) { if(!selectedIP.empty()) { menu.InsertSeparatorFirst(selectedIP); menu.AppendMenu(MF_STRING, IDC_WHOIS_IP, (TSTRING(WHO_IS) + _T(" ") + selectedIP).c_str() ); if (client && client->isOp()) { menu.AppendMenu(MF_SEPARATOR); menu.AppendMenu(MF_STRING, IDC_BAN_IP, (_T("!banip ") + selectedIP).c_str()); menu.SetMenuDefaultItem(IDC_BAN_IP); menu.AppendMenu(MF_STRING, IDC_UNBAN_IP, (_T("!unban ") + selectedIP).c_str()); menu.AppendMenu(MF_SEPARATOR); } } else { menu.InsertSeparatorFirst(_T("Text")); } menu.AppendMenu(MF_STRING, ID_EDIT_COPY, CTSTRING(COPY)); menu.AppendMenu(MF_STRING, IDC_COPY_ACTUAL_LINE, CTSTRING(COPY_LINE)); if(!selectedURL.empty()) menu.AppendMenu(MF_STRING, IDC_COPY_URL, CTSTRING(COPY_URL)); } else { bool isMe = (selectedUser == Text::toT(client->getMyNick())); // click on nick copyMenu.CreatePopupMenu(); copyMenu.InsertSeparatorFirst(TSTRING(COPY)); for(int j=0; j < OnlineUser::COLUMN_LAST; j++) { copyMenu.AppendMenu(MF_STRING, IDC_COPY + j, CTSTRING_I(HubFrame::columnNames[j])); } menu.InsertSeparatorFirst(selectedUser); if(!isMe) { menu.AppendMenu(MF_STRING, IDC_GETLIST, CTSTRING(GET_FILE_LIST)); menu.AppendMenu(MF_SEPARATOR); menu.AppendMenu(MF_STRING, IDC_PRIVATEMESSAGE, CTSTRING(SEND_PRIVATE_MESSAGE)); menu.AppendMenu(MF_SEPARATOR); menu.AppendMenu(MF_STRING, IDC_PUBLIC_MESSAGE, CTSTRING(SEND_PUBLIC_MESSAGE)); menu.AppendMenu(MF_STRING, IDC_SELECT_USER, CTSTRING(SELECT_USER_LIST)); } if(BOOLSETTING(LOG_PRIVATE_CHAT)) { menu.AppendMenu(MF_SEPARATOR); menu.AppendMenu(MF_STRING, IDC_OPEN_USER_LOG, CTSTRING(OPEN_USER_LOG)); } menu.AppendMenu(MF_SEPARATOR); if(!isMe) { menu.AppendMenu(MF_STRING, IDC_ADD_TO_FAVORITES, CTSTRING(ADD_TO_FAVORITES)); const OnlineUserPtr ou = client->findUser(Text::fromT(selectedUser)); if(!FavoriteManager::getInstance()->isIgnoredUser(ou->getUser()->getCID())) { menu.AppendMenu(MF_STRING, IDC_IGNORE, CTSTRING(IGNORE_USER)); } else { menu.AppendMenu(MF_STRING, IDC_UNIGNORE, CTSTRING(UNIGNORE_USER)); } menu.AppendMenu(MF_SEPARATOR); } menu.AppendMenu(MF_POPUP, (UINT)(HMENU)copyMenu, CTSTRING(COPY)); if(!isMe) { menu.AppendMenu(MF_SEPARATOR); menu.AppendMenu(MF_POPUP, (UINT)(HMENU)WinUtil::grantMenu, CTSTRING(GRANT_SLOTS_MENU)); menu.AppendMenu(MF_STRING, IDC_MATCH_QUEUE, CTSTRING(MATCH_QUEUE)); // add user commands prepareMenu(menu, ::UserCommand::CONTEXT_USER, client->getHubUrl()); } // default doubleclick action switch(SETTING(CHAT_DBLCLICK)) { case 0: menu.SetMenuDefaultItem(IDC_SELECT_USER); break; case 1: menu.SetMenuDefaultItem(IDC_PUBLIC_MESSAGE); break; case 2: menu.SetMenuDefaultItem(IDC_PRIVATEMESSAGE); break; case 3: menu.SetMenuDefaultItem(IDC_GETLIST); break; case 4: menu.SetMenuDefaultItem(IDC_MATCH_QUEUE); break; case 6: menu.SetMenuDefaultItem(IDC_ADD_TO_FAVORITES); break; } } menu.AppendMenu(MF_SEPARATOR); menu.AppendMenu(MF_STRING, ID_EDIT_SELECT_ALL, CTSTRING(SELECT_ALL)); menu.AppendMenu(MF_STRING, ID_EDIT_CLEAR_ALL, CTSTRING(CLEAR)); //flag to indicate pop up menu. m_bPopupMenu = true; menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); return 0; }
LRESULT AutoSearchFrame::onContextMenu(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if(reinterpret_cast<HWND>(wParam) == ctrlAutoSearch) { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; OMenu asMenu; asMenu.CreatePopupMenu(); CRect rc; ctrlAutoSearch.GetHeader().GetWindowRect(&rc); if (PtInRect(&rc, pt)) { return 0; } if(pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(ctrlAutoSearch, pt); } int enable = ctrlAutoSearch.GetSelectedCount() == 1 ? MFS_ENABLED : MFS_DISABLED; auto index = WinUtil::getFirstSelectedIndex(ctrlAutoSearch); if(ctrlAutoSearch.GetSelectedCount() > 1) { asMenu.appendItem(TSTRING(ENABLE_AUTOSEARCH), [=] { handleState(false); }); asMenu.appendItem(TSTRING(DISABLE_AUTOSEARCH), [=] { handleState(true); }); asMenu.appendSeparator(); } else if(ctrlAutoSearch.GetSelectedCount() == 1) { asMenu.appendItem(TSTRING(SEARCH), [=] { handleSearch(true); }); asMenu.appendItem(TSTRING(SEARCH_FOREGROUND), [=] { handleSearch(false); }); asMenu.appendSeparator(); if(ctrlAutoSearch.GetCheckState(index) == 1) { asMenu.appendItem(TSTRING(DISABLE_AUTOSEARCH), [=] { handleState(true); }); } else { asMenu.appendItem(TSTRING(ENABLE_AUTOSEARCH), [=] { handleState(false); }); } asMenu.appendSeparator(); } if (ctrlAutoSearch.GetSelectedCount() > 0) { auto groups = AutoSearchManager::getInstance()->getGroups(); if (!groups.empty()) { OMenu* groupsMenu = asMenu.createSubMenu(_T("Move to group")); groupsMenu->appendItem(_T("---"), [=] { handleMoveToGroup(Util::emptyString); }); for (auto grp : groups) { groupsMenu->appendItem(Text::toT(grp), [=] { handleMoveToGroup(grp); }); } asMenu.appendSeparator(); } } asMenu.AppendMenu(MF_STRING, IDC_ADD, CTSTRING(ADD)); asMenu.AppendMenu(MF_STRING, IDC_CHANGE, CTSTRING(SETTINGS_CHANGE)); asMenu.AppendMenu(MF_STRING, IDC_DUPLICATE, CTSTRING(DUPLICATE)); tstring title; if (ctrlAutoSearch.GetSelectedCount() == 1) { BundleList bundles; AutoSearch::FinishedPathMap fpl; auto as = ctrlAutoSearch.getItemData(index)->asItem; title = Text::toT(as->getDisplayName()); if (as->usingIncrementation()) { asMenu.appendSeparator(); asMenu.appendItem(TSTRING(INCREASE_NUM), [=] { AutoSearchManager::getInstance()->changeNumber(as, true); }, (as->getMaxNumber() > 0 && as->getCurNumber() >= as->getMaxNumber()) ? OMenu::FLAG_DISABLED : 0); asMenu.appendItem(TSTRING(DECREASE_NUM), [=] { AutoSearchManager::getInstance()->changeNumber(as, false); }, as->getCurNumber() == 0 ? OMenu::FLAG_DISABLED : 0); } AutoSearchManager::getInstance()->getMenuInfo(as, bundles, fpl); if (!bundles.empty() || !fpl.empty()) { asMenu.appendSeparator(); if (!bundles.empty()) { auto bundleMenu = asMenu.createSubMenu(CTSTRING(REMOVE_BUNDLE), true); for(auto& b: bundles) { auto token = b->getToken(); bundleMenu->appendItem(Text::toT(b->getName()), [=] { WinUtil::removeBundle(token); }); } } auto pathMenu = asMenu.createSubMenu(CTSTRING(OPEN_FOLDER), false); if (!bundles.empty()) { pathMenu->InsertSeparatorFirst(CTSTRING(QUEUED_BUNDLES)); for(auto& b: bundles) { string path = b->getTarget(); pathMenu->appendItem(Text::toT(path), [=] { WinUtil::openFolder(Text::toT(path)); }); } } if (!fpl.empty()) { pathMenu->InsertSeparatorLast(CTSTRING(FINISHED_BUNDLES)); for(auto j=fpl.begin(); j != fpl.end(); j++) { string path = j->first; pathMenu->appendItem(Text::toT(path) + (j->second > 0 ? _T(" (") + Text::toT(Util::formatTime("%Y-%m-%d %H:%M", j->second)) + _T(")") : Util::emptyStringT), [=] { WinUtil::openFolder(Text::toT(path)); }); } pathMenu->appendSeparator(); pathMenu->appendItem(CTSTRING(CLEAR_FINISHED_PATHS), [=] { AutoSearchManager::getInstance()->clearPaths(as); }); } } if (!as->getLastError().empty()) { asMenu.appendSeparator(); asMenu.appendItem(TSTRING(CLEAR_ERROR), [=] { as->setLastError(Util::emptyString); updateItem(as); }); } } asMenu.AppendMenu(MF_SEPARATOR); asMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); asMenu.EnableMenuItem(IDC_CHANGE, enable); asMenu.EnableMenuItem(IDC_DUPLICATE, enable); asMenu.SetMenuDefaultItem(IDC_CHANGE); //make a menu title from the search string, its probobly too long to fit but atleast it shows something. if (!title.empty()) asMenu.InsertSeparatorFirst(title); asMenu.open(m_hWnd, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt); if (!title.empty()) asMenu.RemoveFirstItem(); return TRUE; } bHandled = FALSE; return FALSE; }