void RosterView::MouseDown(BPoint point) { Window()->Activate(true); uint32 buttons = 0; GetMouse(&point, &buttons); printf("buttons %i\n",buttons); if (buttons & B_SECONDARY_MOUSE_BUTTON) { RosterItem *item = CurrentItemSelection(); if (item && !item->StalePointer()) { UpdatePopUpMenu(); BPoint screen_point(point); ConvertToScreen(&screen_point); BRect r(screen_point.x - 4, screen_point.y - 20, screen_point.x + 24, screen_point.y + 4); _popup->Go(screen_point, true, true, r, false); } } BOutlineListView::MouseDown(point); }
int32 RosterView::FindUser(UserID *compare_user) { if (compare_user == NULL) return -1; for (int i=0; i<FullListCountItems(); ++i) { RosterItem *item = dynamic_cast<RosterItem *>(FullListItemAt(i)); if (item == NULL || item->StalePointer()) continue; if (item->GetUserID() == compare_user) return i; } return -1; }
void RosterView::UpdatePopUpMenu() { RosterItem *item = CurrentItemSelection(); if (item && !item->StalePointer()) { const UserID *user = item->GetUserID(); _change_user_item->SetEnabled(true); _remove_user_item->SetEnabled(true); if (user->OnlineStatus() != UserID::CONF_STATUS) { _presence->SetEnabled(true); if (user->HaveSubscriptionTo()) { _subscribe_presence->SetEnabled(false); _unsubscribe_presence->SetEnabled(true); } else { _subscribe_presence->SetEnabled(true); _unsubscribe_presence->SetEnabled(false); } } else { _presence->SetEnabled(false); } } else { _change_user_item->SetEnabled(false); _remove_user_item->SetEnabled(false); _presence->SetEnabled(false); } }