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; }
bool UsersFrame::handleContextMenu(dwt::ScreenCoordinate pt) { if (users->hasSelected()) { if(pt.x() == -1 && pt.y() == -1) { pt = users->getContextMenuPos(); } MenuPtr menu = addChild(WinUtil::Seeds::menu); appendUserItems(getParent(), menu); menu->appendSeparatorItem(); menu->appendItem(IDC_EDIT, T_("&Description"), std::tr1::bind(&UsersFrame::handleDescription, this)); menu->appendItem(IDC_REMOVE, T_("&Remove"), std::tr1::bind(&UsersFrame::handleRemove, this)); menu->trackPopupMenu(pt, TPM_LEFTALIGN | TPM_RIGHTBUTTON); return true; } return false; }
LRESULT UsersFrame::onCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { CreateSimpleStatusBar(ATL_IDS_IDLEMESSAGE, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | SBARS_SIZEGRIP); ctrlStatus.Attach(m_hWndStatusBar); ctrlUsers.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | LVS_REPORT | LVS_SHOWSELALWAYS , WS_EX_CLIENTEDGE, IDC_USERS); ctrlUsers.SetExtendedListViewStyle(LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT); ctrlUsers.SetBkColor(WinUtil::bgColor); ctrlUsers.SetTextBkColor(WinUtil::bgColor); ctrlUsers.SetTextColor(WinUtil::textColor); // Create listview columns WinUtil::splitTokens(columnIndexes, SETTING(USERSFRAME_ORDER), COLUMN_LAST); WinUtil::splitTokens(columnSizes, SETTING(USERSFRAME_WIDTHS), COLUMN_LAST); for(int j=0; j<COLUMN_LAST; j++) { ctrlUsers.InsertColumn(j, CTSTRING_I(columnNames[j]), LVCFMT_LEFT, columnSizes[j], j); } ctrlUsers.SetColumnOrderArray(COLUMN_LAST, columnIndexes); ctrlUsers.setSortColumn(COLUMN_NICK); usersMenu.CreatePopupMenu(); appendUserItems(usersMenu); usersMenu.AppendMenu(MF_SEPARATOR); usersMenu.AppendMenu(MF_STRING, IDC_EDIT, CTSTRING(PROPERTIES)); usersMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); FavoriteManager::getInstance()->addListener(this); FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); ctrlUsers.SetRedraw(FALSE); for(FavoriteManager::FavoriteMap::iterator i = ul.begin(); i != ul.end(); ++i) { addUser(i->second); } ctrlUsers.SetRedraw(TRUE); startup = false; bHandled = FALSE; return TRUE; }