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.
This commit is contained in:
parent
ca2e05915d
commit
63d8bbef26
|
@ -20,6 +20,9 @@ const uint32 CAYA_CHAT = 'CYch';
|
||||||
//! Create a new chat
|
//! Create a new chat
|
||||||
const uint32 CAYA_NEW_CHAT = 'CYnc';
|
const uint32 CAYA_NEW_CHAT = 'CYnc';
|
||||||
|
|
||||||
|
//! Invite user to current chat
|
||||||
|
const uint32 CAYA_SEND_INVITE = 'CYin';
|
||||||
|
|
||||||
//! Send replicant's messenger to Caya
|
//! Send replicant's messenger to Caya
|
||||||
const uint32 CAYA_REPLICANT_MESSENGER = 'RPme';
|
const uint32 CAYA_REPLICANT_MESSENGER = 'RPme';
|
||||||
|
|
||||||
|
|
|
@ -272,6 +272,7 @@ Conversation::_EnsureUser(BMessage* msg)
|
||||||
if (user == NULL && serverUser != NULL) {
|
if (user == NULL && serverUser != NULL) {
|
||||||
fUsers.AddItem(id, serverUser);
|
fUsers.AddItem(id, serverUser);
|
||||||
user = serverUser;
|
user = serverUser;
|
||||||
|
GetView()->UpdateUserList(fUsers);
|
||||||
}
|
}
|
||||||
else if (user == NULL) {
|
else if (user == NULL) {
|
||||||
user = new Contact(id, _GetServer()->Looper());
|
user = new Contact(id, _GetServer()->Looper());
|
||||||
|
@ -279,6 +280,7 @@ Conversation::_EnsureUser(BMessage* msg)
|
||||||
|
|
||||||
_GetServer()->AddContact(user);
|
_GetServer()->AddContact(user);
|
||||||
fUsers.AddItem(id, user);
|
fUsers.AddItem(id, user);
|
||||||
|
GetView()->UpdateUserList(fUsers);
|
||||||
}
|
}
|
||||||
|
|
||||||
user->RegisterObserver(this);
|
user->RegisterObserver(this);
|
||||||
|
|
|
@ -334,6 +334,7 @@ MainWindow::_CreateMenuBar()
|
||||||
{
|
{
|
||||||
BMenuBar* menuBar = new BMenuBar("MenuBar");
|
BMenuBar* menuBar = new BMenuBar("MenuBar");
|
||||||
|
|
||||||
|
// Program
|
||||||
BMenu* programMenu = new BMenu("Program");
|
BMenu* programMenu = new BMenu("Program");
|
||||||
programMenu->AddItem(new BMenuItem("About" B_UTF8_ELLIPSIS,
|
programMenu->AddItem(new BMenuItem("About" B_UTF8_ELLIPSIS,
|
||||||
new BMessage(B_ABOUT_REQUESTED)));
|
new BMessage(B_ABOUT_REQUESTED)));
|
||||||
|
@ -344,16 +345,25 @@ MainWindow::_CreateMenuBar()
|
||||||
new BMessage(B_QUIT_REQUESTED), 'Q', B_COMMAND_KEY));
|
new BMessage(B_QUIT_REQUESTED), 'Q', B_COMMAND_KEY));
|
||||||
programMenu->SetTargetForItems(this);
|
programMenu->SetTargetForItems(this);
|
||||||
|
|
||||||
|
// Chat
|
||||||
BMenu* chatMenu = new BMenu("Chat");
|
BMenu* chatMenu = new BMenu("Chat");
|
||||||
|
BMenuItem* invite = new BMenuItem("Invite user" B_UTF8_ELLIPSIS,
|
||||||
|
new BMessage(CAYA_SEND_INVITE), 'I', B_COMMAND_KEY);
|
||||||
|
invite->SetEnabled(false);
|
||||||
|
|
||||||
chatMenu->AddItem(new BMenuItem("New chat" B_UTF8_ELLIPSIS,
|
chatMenu->AddItem(new BMenuItem("New chat" B_UTF8_ELLIPSIS,
|
||||||
new BMessage(CAYA_NEW_CHAT), 'M', B_COMMAND_KEY));
|
new BMessage(CAYA_NEW_CHAT), 'M', B_COMMAND_KEY));
|
||||||
|
chatMenu->AddSeparatorItem();
|
||||||
|
chatMenu->AddItem(invite);
|
||||||
chatMenu->SetTargetForItems(this);
|
chatMenu->SetTargetForItems(this);
|
||||||
|
|
||||||
|
// Window
|
||||||
BMenu* windowMenu = new BMenu("Window");
|
BMenu* windowMenu = new BMenu("Window");
|
||||||
windowMenu->AddItem(new BMenuItem("Up",
|
windowMenu->AddItem(new BMenuItem("Up",
|
||||||
new BMessage(CAYA_MOVE_UP), B_UP_ARROW, B_COMMAND_KEY));
|
new BMessage(CAYA_MOVE_UP), B_UP_ARROW, B_COMMAND_KEY));
|
||||||
windowMenu->AddItem(new BMenuItem("Down",
|
windowMenu->AddItem(new BMenuItem("Down",
|
||||||
new BMessage(CAYA_MOVE_DOWN), B_DOWN_ARROW, B_COMMAND_KEY));
|
new BMessage(CAYA_MOVE_DOWN), B_DOWN_ARROW, B_COMMAND_KEY));
|
||||||
|
windowMenu->SetTargetForItems(this);
|
||||||
|
|
||||||
menuBar->AddItem(programMenu);
|
menuBar->AddItem(programMenu);
|
||||||
menuBar->AddItem(chatMenu);
|
menuBar->AddItem(chatMenu);
|
||||||
|
|
|
@ -74,6 +74,8 @@ SRCS = \
|
||||||
application/views/StatusMenuItem.cpp \
|
application/views/StatusMenuItem.cpp \
|
||||||
application/views/StatusView.cpp \
|
application/views/StatusView.cpp \
|
||||||
application/views/UserInfoWindow.cpp \
|
application/views/UserInfoWindow.cpp \
|
||||||
|
application/views/UserItem.cpp \
|
||||||
|
application/views/UserListView.cpp \
|
||||||
application/views/UserPopUp.cpp
|
application/views/UserPopUp.cpp
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "NotifyMessage.h"
|
#include "NotifyMessage.h"
|
||||||
#include "ProtocolLooper.h"
|
#include "ProtocolLooper.h"
|
||||||
#include "ProtocolManager.h"
|
#include "ProtocolManager.h"
|
||||||
|
#include "UserItem.h"
|
||||||
#include "UserPopUp.h"
|
#include "UserPopUp.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,6 +28,7 @@ User::User(BString id, BMessenger msgn)
|
||||||
fName(id),
|
fName(id),
|
||||||
fMessenger(msgn),
|
fMessenger(msgn),
|
||||||
fLooper(NULL),
|
fLooper(NULL),
|
||||||
|
fListItem(NULL),
|
||||||
fStatus(CAYA_OFFLINE),
|
fStatus(CAYA_OFFLINE),
|
||||||
fPopUp(NULL)
|
fPopUp(NULL)
|
||||||
{
|
{
|
||||||
|
@ -137,6 +139,15 @@ User::ProtocolBitmap() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UserItem*
|
||||||
|
User::GetListItem()
|
||||||
|
{
|
||||||
|
if (fListItem == NULL)
|
||||||
|
fListItem = new UserItem(fName, this);
|
||||||
|
return fListItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CayaStatus
|
CayaStatus
|
||||||
User::GetNotifyStatus() const
|
User::GetNotifyStatus() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
class BBitmap;
|
class BBitmap;
|
||||||
|
|
||||||
class Conversation;
|
class Conversation;
|
||||||
class UserPopUp;
|
|
||||||
class ProtocolLooper;
|
class ProtocolLooper;
|
||||||
class RosterItem;
|
class UserItem;
|
||||||
|
class UserPopUp;
|
||||||
|
|
||||||
|
|
||||||
typedef KeyMap<BString, Conversation*> ChatMap;
|
typedef KeyMap<BString, Conversation*> ChatMap;
|
||||||
|
@ -49,6 +49,8 @@ public:
|
||||||
void SetProtocolLooper(ProtocolLooper* looper);
|
void SetProtocolLooper(ProtocolLooper* looper);
|
||||||
BBitmap* ProtocolBitmap() const;
|
BBitmap* ProtocolBitmap() const;
|
||||||
|
|
||||||
|
UserItem* GetListItem();
|
||||||
|
|
||||||
BString GetName() const;
|
BString GetName() const;
|
||||||
BBitmap* AvatarBitmap() const;
|
BBitmap* AvatarBitmap() const;
|
||||||
CayaStatus GetNotifyStatus() const;
|
CayaStatus GetNotifyStatus() const;
|
||||||
|
@ -65,6 +67,8 @@ protected:
|
||||||
BMessenger fMessenger;
|
BMessenger fMessenger;
|
||||||
ProtocolLooper* fLooper;
|
ProtocolLooper* fLooper;
|
||||||
|
|
||||||
|
UserItem* fListItem;
|
||||||
|
|
||||||
BString fID;
|
BString fID;
|
||||||
bigtime_t fInstance;
|
bigtime_t fInstance;
|
||||||
BString fName;
|
BString fName;
|
||||||
|
|
|
@ -88,7 +88,7 @@ ConversationListView::_BlankPopUp()
|
||||||
{
|
{
|
||||||
BPopUpMenu* menu = new BPopUpMenu("blankPopUp");
|
BPopUpMenu* menu = new BPopUpMenu("blankPopUp");
|
||||||
menu->AddItem(new BMenuItem("New chat" B_UTF8_ELLIPSIS,
|
menu->AddItem(new BMenuItem("New chat" B_UTF8_ELLIPSIS,
|
||||||
new BMessage(CAYA_NEW_CHAT)));
|
new BMessage(CAYA_NEW_CHAT), 'M', B_COMMAND_KEY));
|
||||||
menu->SetTargetForItems(Window());
|
menu->SetTargetForItems(Window());
|
||||||
|
|
||||||
return menu;
|
return menu;
|
||||||
|
|
|
@ -9,9 +9,11 @@
|
||||||
#include "ConversationView.h"
|
#include "ConversationView.h"
|
||||||
|
|
||||||
#include <LayoutBuilder.h>
|
#include <LayoutBuilder.h>
|
||||||
|
#include <ListView.h>
|
||||||
#include <Notification.h>
|
#include <Notification.h>
|
||||||
#include <ScrollView.h>
|
#include <ScrollView.h>
|
||||||
#include <StringList.h>
|
#include <StringList.h>
|
||||||
|
#include <StringView.h>
|
||||||
|
|
||||||
#include <libinterface/BitmapView.h>
|
#include <libinterface/BitmapView.h>
|
||||||
|
|
||||||
|
@ -22,6 +24,8 @@
|
||||||
#include "Contact.h"
|
#include "Contact.h"
|
||||||
#include "Conversation.h"
|
#include "Conversation.h"
|
||||||
#include "NotifyMessage.h"
|
#include "NotifyMessage.h"
|
||||||
|
#include "UserItem.h"
|
||||||
|
#include "UserListView.h"
|
||||||
|
|
||||||
|
|
||||||
ConversationView::ConversationView()
|
ConversationView::ConversationView()
|
||||||
|
@ -30,37 +34,7 @@ ConversationView::ConversationView()
|
||||||
fMessageQueue()
|
fMessageQueue()
|
||||||
{
|
{
|
||||||
fMessageCount = 0;
|
fMessageCount = 0;
|
||||||
|
_InitInterface();
|
||||||
fReceiveView = new CayaRenderView("fReceiveView");
|
|
||||||
BScrollView* scrollViewReceive = new BScrollView("scrollviewR",
|
|
||||||
fReceiveView, B_WILL_DRAW, false, true);
|
|
||||||
|
|
||||||
|
|
||||||
fPersonalMessage = new BTextView("personalMessage", B_WILL_DRAW);
|
|
||||||
fPersonalMessage->SetExplicitAlignment(
|
|
||||||
BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE));
|
|
||||||
|
|
||||||
fPersonalMessage->SetText("");
|
|
||||||
fPersonalMessage->MakeEditable(false);
|
|
||||||
fPersonalMessage->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
fStatus = new BStringView("status", "");
|
|
||||||
|
|
||||||
fAvatar = new BitmapView("ContactIcon");
|
|
||||||
fAvatar->SetExplicitMinSize(BSize(50, 50));
|
|
||||||
fAvatar->SetExplicitPreferredSize(BSize(50, 50));
|
|
||||||
fAvatar->SetExplicitAlignment(BAlignment(B_ALIGN_RIGHT, B_ALIGN_MIDDLE));
|
|
||||||
|
|
||||||
fProtocolView = new BitmapView("protocolView");
|
|
||||||
|
|
||||||
BLayoutBuilder::Group<>(this, B_VERTICAL)
|
|
||||||
.AddGroup(B_HORIZONTAL)
|
|
||||||
.Add(fProtocolView)
|
|
||||||
.Add(fPersonalMessage)
|
|
||||||
.Add(fAvatar)
|
|
||||||
.End()
|
|
||||||
.Add(scrollViewReceive, 3);
|
|
||||||
// .Add(fStatus, 4)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,35 +55,13 @@ ConversationView::QuitRequested()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Conversation*
|
|
||||||
ConversationView::GetConversation()
|
|
||||||
{
|
|
||||||
return fConversation;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ConversationView::SetConversation(Conversation* chat)
|
ConversationView::AttachedToWindow()
|
||||||
{
|
{
|
||||||
fConversation = chat;
|
while (fMessageQueue.IsEmpty() == false) {
|
||||||
fContact = chat->Users().ValueAt(0);
|
BMessage* msg = fMessageQueue.RemoveItemAt(0);
|
||||||
fPersonalMessage->SetText(chat->GetName());
|
ImMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ConversationView::UpdateAvatar()
|
|
||||||
{
|
|
||||||
if (fContact->AvatarBitmap() != NULL)
|
|
||||||
fAvatar->SetBitmap(fContact->AvatarBitmap());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ConversationView::UpdatePersonalMessage()
|
|
||||||
{
|
|
||||||
if (fContact->GetNotifyPersonalStatus() != NULL)
|
|
||||||
fPersonalMessage->SetText(fContact->GetNotifyPersonalStatus());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,16 +93,6 @@ ConversationView::MessageReceived(BMessage* message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ConversationView::AttachedToWindow()
|
|
||||||
{
|
|
||||||
while (fMessageQueue.IsEmpty() == false) {
|
|
||||||
BMessage* msg = fMessageQueue.RemoveItemAt(0);
|
|
||||||
ImMessage(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ConversationView::ImMessage(BMessage* msg)
|
ConversationView::ImMessage(BMessage* msg)
|
||||||
{
|
{
|
||||||
|
@ -220,6 +162,50 @@ ConversationView::ImMessage(BMessage* msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Conversation*
|
||||||
|
ConversationView::GetConversation()
|
||||||
|
{
|
||||||
|
return fConversation;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ConversationView::SetConversation(Conversation* chat)
|
||||||
|
{
|
||||||
|
fConversation = chat;
|
||||||
|
fContact = chat->Users().ValueAt(0);
|
||||||
|
fPersonalMessage->SetText(chat->GetName());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ConversationView::UpdateAvatar()
|
||||||
|
{
|
||||||
|
if (fContact->AvatarBitmap() != NULL)
|
||||||
|
fAvatar->SetBitmap(fContact->AvatarBitmap());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ConversationView::UpdatePersonalMessage()
|
||||||
|
{
|
||||||
|
if (fContact->GetNotifyPersonalStatus() != NULL)
|
||||||
|
fPersonalMessage->SetText(fContact->GetNotifyPersonalStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ConversationView::UpdateUserList(UserMap users)
|
||||||
|
{
|
||||||
|
fUserList->MakeEmpty();
|
||||||
|
for (int i = 0; i < users.CountItems(); i++) {
|
||||||
|
User* user = users.ValueAt(i);
|
||||||
|
if (fUserList->HasItem(user->GetListItem()) == false)
|
||||||
|
fUserList->AddItem(user->GetListItem());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ConversationView::ObserveString(int32 what, BString str)
|
ConversationView::ObserveString(int32 what, BString str)
|
||||||
{
|
{
|
||||||
|
@ -291,6 +277,48 @@ ConversationView::AppendStatus(CayaStatus status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ConversationView::_InitInterface()
|
||||||
|
{
|
||||||
|
fReceiveView = new CayaRenderView("fReceiveView");
|
||||||
|
BScrollView* scrollViewReceive = new BScrollView("receiveScrollView",
|
||||||
|
fReceiveView, B_WILL_DRAW, false, true);
|
||||||
|
|
||||||
|
fPersonalMessage = new BTextView("personalMessage", B_WILL_DRAW);
|
||||||
|
fPersonalMessage->SetExplicitAlignment(
|
||||||
|
BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE));
|
||||||
|
|
||||||
|
fPersonalMessage->SetText("");
|
||||||
|
fPersonalMessage->MakeEditable(false);
|
||||||
|
fPersonalMessage->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||||
|
|
||||||
|
fStatus = new BStringView("status", "");
|
||||||
|
|
||||||
|
fAvatar = new BitmapView("ContactIcon");
|
||||||
|
fAvatar->SetExplicitMinSize(BSize(50, 50));
|
||||||
|
fAvatar->SetExplicitPreferredSize(BSize(50, 50));
|
||||||
|
fAvatar->SetExplicitAlignment(BAlignment(B_ALIGN_RIGHT, B_ALIGN_MIDDLE));
|
||||||
|
|
||||||
|
fProtocolView = new BitmapView("protocolView");
|
||||||
|
|
||||||
|
fUserList = new UserListView("userList");
|
||||||
|
BScrollView* scrollViewUsers = new BScrollView("userScrollView",
|
||||||
|
fUserList, B_WILL_DRAW, false, true);
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(this, B_VERTICAL)
|
||||||
|
.AddGroup(B_HORIZONTAL)
|
||||||
|
.Add(fProtocolView)
|
||||||
|
.Add(fPersonalMessage)
|
||||||
|
.Add(fAvatar)
|
||||||
|
.End()
|
||||||
|
.AddSplit(B_HORIZONTAL, 0)
|
||||||
|
.Add(scrollViewReceive, 5)
|
||||||
|
.Add(scrollViewUsers, 1)
|
||||||
|
.End();
|
||||||
|
// .Add(fStatus, 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ConversationView::_AppendOrEnqueueMessage(BMessage* msg)
|
ConversationView::_AppendOrEnqueueMessage(BMessage* msg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,17 +7,17 @@
|
||||||
|
|
||||||
#include <GroupView.h>
|
#include <GroupView.h>
|
||||||
#include <ObjectList.h>
|
#include <ObjectList.h>
|
||||||
#include <StringView.h>
|
|
||||||
#include <TextView.h>
|
|
||||||
|
|
||||||
#include "CayaConstants.h"
|
#include "CayaConstants.h"
|
||||||
|
#include "Conversation.h"
|
||||||
|
|
||||||
class BMessageQueue;
|
class BStringView;
|
||||||
|
class BTextView;
|
||||||
|
|
||||||
class BitmapView;
|
class BitmapView;
|
||||||
class CayaRenderView;
|
class CayaRenderView;
|
||||||
class Contact;
|
class Contact;
|
||||||
class Conversation;
|
class UserListView;
|
||||||
|
|
||||||
|
|
||||||
class ConversationView : public BGroupView {
|
class ConversationView : public BGroupView {
|
||||||
|
@ -25,17 +25,19 @@ public:
|
||||||
ConversationView();
|
ConversationView();
|
||||||
ConversationView(Conversation* chat);
|
ConversationView(Conversation* chat);
|
||||||
|
|
||||||
virtual void MessageReceived(BMessage* message);
|
|
||||||
virtual bool QuitRequested();
|
virtual bool QuitRequested();
|
||||||
|
virtual void AttachedToWindow();
|
||||||
|
|
||||||
|
virtual void MessageReceived(BMessage* message);
|
||||||
|
void ImMessage(BMessage* msg);
|
||||||
|
|
||||||
Conversation* GetConversation();
|
Conversation* GetConversation();
|
||||||
void SetConversation(Conversation* chat);
|
void SetConversation(Conversation* chat);
|
||||||
|
|
||||||
void AttachedToWindow();
|
|
||||||
|
|
||||||
void UpdateAvatar();
|
void UpdateAvatar();
|
||||||
void UpdatePersonalMessage();
|
void UpdatePersonalMessage();
|
||||||
void ImMessage(BMessage* msg);
|
void UpdateUserList(UserMap users);
|
||||||
|
|
||||||
void ObserveString(int32 what, BString str);
|
void ObserveString(int32 what, BString str);
|
||||||
void ObservePointer(int32 what, void* ptr);
|
void ObservePointer(int32 what, void* ptr);
|
||||||
|
@ -46,18 +48,22 @@ public:
|
||||||
void AvoidFocus(bool avoid);
|
void AvoidFocus(bool avoid);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void _InitInterface();
|
||||||
|
|
||||||
bool _AppendOrEnqueueMessage(BMessage* msg);
|
bool _AppendOrEnqueueMessage(BMessage* msg);
|
||||||
void _AppendMessage(BMessage* msg);
|
void _AppendMessage(BMessage* msg);
|
||||||
|
|
||||||
Conversation* fConversation;
|
Conversation* fConversation;
|
||||||
Contact* fContact;
|
Contact* fContact;
|
||||||
|
int32 fMessageCount;
|
||||||
|
BObjectList<BMessage> fMessageQueue;
|
||||||
|
|
||||||
CayaRenderView* fReceiveView;
|
CayaRenderView* fReceiveView;
|
||||||
BStringView* fStatus;
|
BStringView* fStatus;
|
||||||
BTextView* fPersonalMessage;
|
BTextView* fPersonalMessage;
|
||||||
BitmapView* fProtocolView;
|
BitmapView* fProtocolView;
|
||||||
BitmapView* fAvatar;
|
BitmapView* fAvatar;
|
||||||
int32 fMessageCount;
|
UserListView* fUserList;
|
||||||
BObjectList<BMessage> fMessageQueue;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,12 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "UserInfoWindow.h"
|
#include "CayaProtocolMessages.h"
|
||||||
#include "Contact.h"
|
#include "Contact.h"
|
||||||
|
#include "ProtocolLooper.h"
|
||||||
#include "RosterItem.h"
|
#include "RosterItem.h"
|
||||||
|
#include "TheApp.h"
|
||||||
|
#include "UserInfoWindow.h"
|
||||||
|
|
||||||
const int32 kAddPeople = 'ADPL';
|
const int32 kAddPeople = 'ADPL';
|
||||||
const int32 kSendFile = 'SDFL';
|
const int32 kSendFile = 'SDFL';
|
||||||
|
@ -62,24 +65,15 @@ RosterListView::RosterListView(const char* name)
|
||||||
fPopUp = new BPopUpMenu("contextMenu", false, false);
|
fPopUp = new BPopUpMenu("contextMenu", false, false);
|
||||||
BMenuItem* item = NULL;
|
BMenuItem* item = NULL;
|
||||||
|
|
||||||
fPopUp->AddItem(new BMenuItem("Start a Conversation", new BMessage(kStartConv)));
|
fPopUp->AddItem(new BMenuItem("Start a chat", new BMessage(kStartConv)));
|
||||||
item = new BMenuItem("Send a File", new BMessage(kSendFile));
|
item = new BMenuItem("Send a file" B_UTF8_ELLIPSIS, new BMessage(kSendFile));
|
||||||
item->SetEnabled(false);
|
item->SetEnabled(false);
|
||||||
fPopUp->AddItem(item);
|
fPopUp->AddItem(item);
|
||||||
|
|
||||||
fPopUp->AddItem(new BSeparatorItem());
|
fPopUp->AddItem(new BSeparatorItem());
|
||||||
|
|
||||||
fPopUp->AddItem(new BMenuItem("Get Informations", new BMessage(kGetInfo)));
|
fPopUp->AddItem(new BMenuItem("User info" B_UTF8_ELLIPSIS,
|
||||||
|
new BMessage(kGetInfo)));
|
||||||
item = new BMenuItem("Show Logs", new BMessage(kShowLogs));
|
|
||||||
item->SetEnabled(false);
|
|
||||||
fPopUp->AddItem(item);
|
|
||||||
|
|
||||||
fPopUp->AddItem(new BSeparatorItem());
|
|
||||||
|
|
||||||
item = new BMenuItem("Add to Address Book", new BMessage(kAddPeople));
|
|
||||||
item->SetEnabled(false);
|
|
||||||
fPopUp->AddItem(item);
|
|
||||||
|
|
||||||
fPopUp->SetTargetForItems(this);
|
fPopUp->SetTargetForItems(this);
|
||||||
}
|
}
|
||||||
|
@ -114,10 +108,15 @@ RosterListView::MessageReceived(BMessage* msg)
|
||||||
|
|
||||||
case kStartConv:
|
case kStartConv:
|
||||||
{
|
{
|
||||||
if (ritem == NULL)
|
User* user;
|
||||||
|
if (ritem == NULL || (user = ritem->GetContact()) == NULL)
|
||||||
return;
|
return;
|
||||||
// Contact* link = ritem->GetContact();
|
|
||||||
// link->ShowWindow(false, true);
|
BMessage* start = new BMessage(IM_MESSAGE);
|
||||||
|
start->AddInt32("im_what", IM_CREATE_CHAT);
|
||||||
|
start->AddString("user_id", user->GetId());
|
||||||
|
|
||||||
|
user->GetProtocolLooper()->PostMessage(start);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2021, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "UserItem.h"
|
||||||
|
|
||||||
|
#include "User.h"
|
||||||
|
|
||||||
|
|
||||||
|
UserItem::UserItem(const char* name, User* user)
|
||||||
|
:
|
||||||
|
BStringItem(name),
|
||||||
|
fUser(user)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
User*
|
||||||
|
UserItem::GetUser()
|
||||||
|
{
|
||||||
|
return fUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
UserItem::ObserveString(int32 what, BString str)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
UserItem::ObservePointer(int32 what, void* ptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
UserItem::ObserveInteger(int32 what, int32 val)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2021, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
#ifndef USERITEM_H
|
||||||
|
#define USERITEM_H
|
||||||
|
|
||||||
|
#include <StringItem.h>
|
||||||
|
|
||||||
|
#include "Observer.h"
|
||||||
|
|
||||||
|
class User;
|
||||||
|
|
||||||
|
|
||||||
|
class UserItem : public BStringItem, public Observer {
|
||||||
|
public:
|
||||||
|
UserItem(const char* name, User* user);
|
||||||
|
|
||||||
|
User* GetUser();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ObserveString(int32 what, BString str);
|
||||||
|
void ObservePointer(int32 what, void* ptr);
|
||||||
|
void ObserveInteger(int32 what, int32 val);
|
||||||
|
|
||||||
|
private:
|
||||||
|
User* fUser;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // USERITEM_H
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2021, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
#ifndef CONVERSATIONLIST_H
|
||||||
|
#define CONVERSATIONLIST_H
|
||||||
|
|
||||||
|
#include <ListView.h>
|
||||||
|
|
||||||
|
class BPopUpMenu;
|
||||||
|
|
||||||
|
|
||||||
|
class UserListView : public BListView {
|
||||||
|
public:
|
||||||
|
UserListView(const char* name);
|
||||||
|
|
||||||
|
void MessageReceived(BMessage* msg);
|
||||||
|
|
||||||
|
void MouseDown(BPoint where);
|
||||||
|
|
||||||
|
private:
|
||||||
|
BPopUpMenu* _UserPopUp();
|
||||||
|
BPopUpMenu* _BlankPopUp();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CONVERSATIONLIST_H
|
||||||
|
|
Ŝarĝante…
Reference in New Issue