Chat-O-Matic/application/views/UserListView.cpp
Jaidyn Ann 63d8bbef26 Add user-list to the conversation view, menu tweaks
UserListView and UserItem were added as the backbone of the user-list,
and the (currently unused) Caya message CAYA_SEND_INVITE was established
for inviting users to rooms.

Some menus were reworked (e.g., pop-ups of the RosterListView) or
generally tweaked to be more sensical or consistent.
2021-05-31 10:50:43 -05:00

96 lines
1.7 KiB
C++

/*
* Copyright 2021, Jaidyn Levesque <jadedctrl@teknik.io>
* All rights reserved. Distributed under the terms of the MIT license.
*/
#include "UserListView.h"
#include <PopUpMenu.h>
#include <MenuItem.h>
#include <Window.h>
#include "CayaMessages.h"
#include "User.h"
#include "UserInfoWindow.h"
#include "UserItem.h"
const uint32 kUserInfo = 'ULui';
//const uint32 kLeaveSelectedChat = 'CVcs';
UserListView::UserListView(const char* name)
: BListView(name)
{
}
void
UserListView::MessageReceived(BMessage* msg)
{
switch (msg->what) {
case kUserInfo:
{
UserItem* item = (UserItem*)ItemAt(CurrentSelection());
if (item == NULL)
return;
UserInfoWindow* win = new UserInfoWindow(item->GetUser());
win->Show();
break;
}
default:
BListView::MessageReceived(msg);
}
}
void
UserListView::MouseDown(BPoint where)
{
BListView::MouseDown(where);
uint32 buttons = 0;
Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons);
if (!(buttons & B_SECONDARY_MOUSE_BUTTON))
return;
if (CurrentSelection() >= 0)
_UserPopUp()->Go(ConvertToScreen(where), true, false);
else
_BlankPopUp()->Go(ConvertToScreen(where), true, false);
}
BPopUpMenu*
UserListView::_UserPopUp()
{
BPopUpMenu* menu = new BPopUpMenu("userPopUp");
menu->AddItem(new BMenuItem("User info…" B_UTF8_ELLIPSIS,
new BMessage(kUserInfo)));
menu->SetTargetForItems(this);
return menu;
}
BPopUpMenu*
UserListView::_BlankPopUp()
{
BPopUpMenu* menu = new BPopUpMenu("blankPopUp");
BMenuItem* invite = new BMenuItem("Invite user…" B_UTF8_ELLIPSIS,
new BMessage(CAYA_SEND_INVITE), 'I', B_COMMAND_KEY);
invite->SetEnabled(false);
menu->AddItem(invite);
menu->SetTargetForItems(Window());
return menu;
}