LRESULT WaitingUsersFrame::onContextMenu(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { RECT rc; POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; m_ctrlList.GetHeader().GetWindowRect(&rc); if (PtInRect(&rc, pt)) { m_ctrlList.showMenu(pt); return TRUE; } // Create context menu // !SMT!-UI OMenu contextMenu; contextMenu.CreatePopupMenu(); clearUserMenu(); // [+] IRainman fix. if (reinterpret_cast<HWND>(wParam) == m_ctrlList && m_ctrlList.GetSelectedCount() > 0) { if (pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(m_ctrlList, pt); } appendAndActivateUserItems(contextMenu); contextMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); return TRUE; } else if (reinterpret_cast<HWND>(wParam) == ctrlQueued && ctrlQueued.GetSelectedItem() != NULL) { if (pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(ctrlQueued, pt); } else { UINT a = 0; ctrlQueued.ScreenToClient(&pt); HTREEITEM ht = ctrlQueued.HitTest(pt, &a); if (ht != NULL && ht != ctrlQueued.GetSelectedItem()) ctrlQueued.SelectItem(ht); ctrlQueued.ClientToScreen(&pt); } // !SMT!-UI reinitUserMenu(getCurrentdUser(), Util::emptyString); // [+] IRainman fix. appendAndActivateUserItems(contextMenu); contextMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); WinUtil::unlinkStaticMenus(contextMenu); // TODO - fix copy-paste return TRUE; } return FALSE; }
LRESULT UploadQueueFrame::onContextMenu(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { RECT rc; POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; ctrlList.GetHeader().GetWindowRect(&rc); if(PtInRect(&rc, pt)){ ctrlList.showMenu(pt); return TRUE; } usingUserMenu = reinterpret_cast<HWND>(wParam) == ctrlQueued; OMenu contextMenu; contextMenu.CreatePopupMenu(); contextMenu.InsertSeparatorFirst(CTSTRING(UPLOAD_QUEUE)); if(reinterpret_cast<HWND>(wParam) == ctrlList && ctrlList.GetSelectedCount() > 0) { if(pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(ctrlList, pt); } appendUserItems(contextMenu, Util::emptyString); // TODO: hubhint contextMenu.AppendMenu(MF_SEPARATOR); contextMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); contextMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); return TRUE; } else if(usingUserMenu && ctrlQueued.GetSelectedItem() != NULL) { if(pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(ctrlQueued, pt); } else { UINT a = 0; ctrlQueued.ScreenToClient(&pt); HTREEITEM ht = ctrlQueued.HitTest(pt, &a); if(!ht || ht == rootItem) return FALSE; if(ht != ctrlQueued.GetSelectedItem()) ctrlQueued.SelectItem(ht); ctrlQueued.ClientToScreen(&pt); } appendUserItems(contextMenu, Util::emptyString); // TODO: hubhint contextMenu.AppendMenu(MF_SEPARATOR); contextMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); contextMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); return TRUE; } return FALSE; }
LRESULT UsersFrame::onContextMenu(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (reinterpret_cast<HWND>(wParam) == ctrlUsers && ctrlUsers.GetSelectedCount() > 0 ) { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; if(pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(ctrlUsers, pt); } OMenu usersMenu; usersMenu.CreatePopupMenu(); usersMenu.AppendMenu(MF_STRING, IDC_OPEN_USER_LOG, CTSTRING(OPEN_USER_LOG)); usersMenu.AppendMenu(MF_SEPARATOR); appendUserItems(usersMenu, Util::emptyString); // TODO: hubhint usersMenu.AppendMenu(MF_SEPARATOR); usersMenu.AppendMenu(MF_STRING, IDC_EDIT, CTSTRING(PROPERTIES)); usersMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); tstring x; if (ctrlUsers.GetSelectedCount() == 1) { x = ctrlUsers.getItemData(WinUtil::getFirstSelectedIndex(ctrlUsers))->columns[COLUMN_NICK]; } else { x = _T(""); } if (!x.empty()) usersMenu.InsertSeparatorFirst(x); usersMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); return TRUE; } bHandled = FALSE; return FALSE; }
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 UsersFrame::onContextMenu(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { if (reinterpret_cast<HWND>(wParam) == ctrlUsers && ctrlUsers.GetSelectedCount() > 0) { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; if (pt.x == -1 && pt.y == -1) { WinUtil::getContextMenuPos(ctrlUsers, pt); } clearUserMenu(); // [+] IRainman fix. // [+] brain-ripper // Make menu dynamic, since its content depends of which // user selected (for add/remove favorites item) OMenu usersMenu; usersMenu.CreatePopupMenu(); usersMenu.AppendMenu(MF_STRING, IDC_EDIT, CTSTRING(PROPERTIES)); usersMenu.AppendMenu(MF_STRING, IDC_OPEN_USER_LOG, CTSTRING(OPEN_USER_LOG)); usersMenu.AppendMenu(MF_STRING, IDC_REMOVE_FROM_FAVORITES, CTSTRING(REMOVE_FROM_FAVORITES)); //[+] NightOrion tstring x; if (ctrlUsers.GetSelectedCount() == 1) { const auto user = ctrlUsers.getItemData(ctrlUsers.GetSelectedIndex())->getUser(); if (user->isOnline()) { usersMenu.AppendMenu(MF_SEPARATOR); x = user->getLastNickT(); reinitUserMenu(user, Util::emptyString); // TODO: add hub hint. if (!x.empty()) usersMenu.InsertSeparatorFirst(x); appendAndActivateUserItems(usersMenu); } } else { usersMenu.AppendMenu(MF_SEPARATOR); appendAndActivateUserItems(usersMenu); } usersMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd); if (!x.empty()) usersMenu.RemoveFirstItem(); 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; }