Merge MainWindow and ChatWindow

This commit is contained in:
Jaidyn Ann 2021-05-29 15:47:54 -05:00
parent b9d120a8f6
commit f0492a995d
9 changed files with 66 additions and 249 deletions

View File

@ -1,173 +0,0 @@
/*
* Copyright 2009-2011, Andrea Anzani. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Andrea Anzani, andrea.anzani@gmail.com
*/
#include "ChatWindow.h"
#include <Alert.h>
#include <Application.h>
#include <Box.h>
#include <Button.h>
#include <CheckBox.h>
#include <GridLayout.h>
#include <GridLayoutBuilder.h>
#include <GroupLayout.h>
#include <GroupLayoutBuilder.h>
#include <Layout.h>
#include <LayoutBuilder.h>
#include <ListView.h>
#include <Message.h>
#include <SpaceLayoutItem.h>
#include <ScrollView.h>
#include <String.h>
#include <StringList.h>
#include <Notification.h>
#include <libinterface/BitmapView.h>
#include "CayaMessages.h"
#include "CayaProtocolMessages.h"
#include "CayaPreferences.h"
#include "ConversationView.h"
#include "Conversation.h"
#include "Contact.h"
#include "EditingFilter.h"
#include "CayaConstants.h"
#include "CayaRenderView.h"
#include "NotifyMessage.h"
ChatWindow::ChatWindow()
:
BWindow(BRect(200, 200, 500, 500), "Chat", B_TITLED_WINDOW, 0)
{
fChatView = new ConversationView();
fSendView = new BTextView("fSendView");
fSendScroll = new BScrollView("fSendScroll", fSendView,
B_WILL_DRAW, false, true);
fSendView->SetWordWrap(true);
AddCommonFilter(new EditingFilter(fSendView));
fSendView->MakeFocus(true);
BLayoutBuilder::Group<>(this, B_VERTICAL)
.Add(fChatView)
.Add(fSendScroll)
.End();
}
ChatWindow::ChatWindow(Conversation* cl)
:
ChatWindow()
{
fChatView = new ConversationView(cl);
SetConversation(cl);
}
void
ChatWindow::SetConversation(Conversation* chat)
{
BView* current = FindView("chatView");
RemoveChild(FindView("chatView"));
RemoveChild(FindView("fSendScroll"));
fChatView = chat->GetView();
AddChild(fChatView);
AddChild(fSendScroll);
}
void
ChatWindow::ShowWindow()
{
if (IsHidden())
Show();
if (IsMinimized())
Minimize(false);
if (!IsActive())
Activate(true);
}
bool
ChatWindow::QuitRequested()
{
BMessage msg(CAYA_CLOSE_CHAT_WINDOW);
// msg.AddString("chat_id", fConversation->GetId());
// fConversation->Messenger().SendMessage(&msg);
return false;
}
void
ChatWindow::MessageReceived(BMessage* message)
{
switch (message->what) {
case CAYA_CHAT:
message->PrintToStream();
message->AddString("body", fSendView->Text());
fChatView->MessageReceived(message);
fSendView->SetText("");
break;
case IM_MESSAGE:
fChatView->ImMessage(message);
break;
default:
BWindow::MessageReceived(message);
break;
}
}
void
ChatWindow::ImMessage(BMessage* msg)
{
fChatView->ImMessage(msg);
}
void
ChatWindow::ObserveString(int32 what, BString str)
{
fChatView->ObserveString(what, str);
}
void
ChatWindow::ObservePointer(int32 what, void* ptr)
{
fChatView->ObservePointer(what, ptr);
}
void
ChatWindow::ObserveInteger(int32 what, int32 val)
{
fChatView->ObserveInteger(what, val);
}
void
ChatWindow::AvoidFocus(bool avoid)
{
// This is needed to avoid the window focus when
// a new message is received, since it could be a lot annoying
// for the user
if (avoid)
SetFlags(B_AVOID_FOCUS);
else
SetFlags(Flags() &~ B_AVOID_FOCUS);
}

View File

@ -1,49 +0,0 @@
/*
* Copyright 2009-2011, Andrea Anzani. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _CHAT_WINDOW_H
#define _CHAT_WINDOW_H
#include <Notification.h>
#include <StringView.h>
#include <TextView.h>
#include <Window.h>
#include "CayaConstants.h"
#include "Observer.h"
class BitmapView;
class BScrollVie;
class Conversation;
class ConversationView;
class CayaRenderView;
class Contact;
class ChatWindow : public BWindow, public Observer {
public:
ChatWindow();
ChatWindow(Conversation* cl);
void SetConversation(Conversation* chat);
virtual void ShowWindow();
virtual void MessageReceived(BMessage* message);
virtual bool QuitRequested();
void ImMessage(BMessage* msg);
void ObserveString(int32 what, BString str);
void ObservePointer(int32 what, void* ptr);
void ObserveInteger(int32 what, int32 val);
void AvoidFocus(bool avoid);
private:
BScrollView* fSendScroll;
BTextView* fSendView;
ConversationView* fChatView;
};
#endif // _CHAT_WINDOW_H

View File

@ -13,7 +13,6 @@
#include "CayaProtocolMessages.h" #include "CayaProtocolMessages.h"
#include "CayaRenderView.h" #include "CayaRenderView.h"
#include "CayaUtils.h" #include "CayaUtils.h"
#include "ChatWindow.h"
#include "ConversationItem.h" #include "ConversationItem.h"
#include "ConversationView.h" #include "ConversationView.h"
#include "MainWindow.h" #include "MainWindow.h"
@ -97,8 +96,7 @@ Conversation::ObserveInteger(int32 what, int32 val)
void void
Conversation::ShowView(bool typing, bool userAction) Conversation::ShowView(bool typing, bool userAction)
{ {
((TheApp*)be_app)->GetMainWindow()->GetChatWindow()->SetConversation(this); ((TheApp*)be_app)->GetMainWindow()->SetConversation(this);
((TheApp*)be_app)->GetMainWindow()->GetChatWindow()->ShowWindow();
} }

View File

@ -26,10 +26,10 @@
#include "CayaMessages.h" #include "CayaMessages.h"
#include "CayaProtocolMessages.h" #include "CayaProtocolMessages.h"
#include "CayaPreferences.h" #include "CayaPreferences.h"
#include "ChatWindow.h"
#include "ConversationItem.h" #include "ConversationItem.h"
#include "ConversationListView.h" #include "ConversationListView.h"
#include "ConversationView.h" #include "ConversationView.h"
#include "EditingFilter.h"
#include "NotifyMessage.h" #include "NotifyMessage.h"
#include "MainWindow.h" #include "MainWindow.h"
#include "PreferencesDialog.h" #include "PreferencesDialog.h"
@ -49,9 +49,6 @@ MainWindow::MainWindow()
{ {
fStatusView = new StatusView("statusView"); fStatusView = new StatusView("statusView");
fChatWindow = new ChatWindow();
fChatWindow->Show();
// Menubar // Menubar
BMenuBar* menuBar = new BMenuBar("MenuBar"); BMenuBar* menuBar = new BMenuBar("MenuBar");
@ -75,13 +72,32 @@ MainWindow::MainWindow()
fListView = new ConversationListView("roomList"); fListView = new ConversationListView("roomList");
BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f) fChatView = new ConversationView();
fSendView = new BTextView("fSendView");
fSendScroll = new BScrollView("fSendScroll", fSendView,
B_WILL_DRAW, false, true);
fSendView->SetWordWrap(true);
AddCommonFilter(new EditingFilter(fSendView));
fSendView->MakeFocus(true);
fRightView = new BGroupView("rightView", B_VERTICAL);
fRightView->AddChild(fChatView);
fRightView->AddChild(fSendScroll);
BLayoutBuilder::Group<>(this, B_VERTICAL)
.Add(menuBar) .Add(menuBar)
.Add(fListView)
.AddGroup(B_VERTICAL) .AddGroup(B_HORIZONTAL)
.SetInsets(5, 5, 5, 10) .SetInsets(5, 5, 5, 10)
.AddGroup(B_VERTICAL)
.Add(fListView)
.Add(fStatusView) .Add(fStatusView)
.End() .End()
.Add(fRightView)
.End()
.End(); .End();
// Filter messages using Server // Filter messages using Server
@ -175,6 +191,15 @@ MainWindow::MessageReceived(BMessage* message)
break; break;
} }
case CAYA_CHAT:
{
message->AddString("body", fSendView->Text());
fChatView->MessageReceived(message);
fSendView->SetText("");
break;
}
case IM_MESSAGE: case IM_MESSAGE:
ImMessage(message); ImMessage(message);
break; break;
@ -232,7 +257,6 @@ MainWindow::ImMessage(BMessage* msg)
case IM_MESSAGE_RECEIVED: case IM_MESSAGE_RECEIVED:
{ {
_EnsureConversationItem(msg); _EnsureConversationItem(msg);
// fChatWindow->PostMessage(msg);
break; break;
} }
case IM_MESSAGE_SENT: case IM_MESSAGE_SENT:
@ -245,6 +269,20 @@ MainWindow::ImMessage(BMessage* msg)
} }
void
MainWindow::SetConversation(Conversation* chat)
{
BView* current = fRightView->FindView("chatView");
fRightView->RemoveChild(fRightView->FindView("chatView"));
fRightView->RemoveChild(fRightView->FindView("fSendScroll"));
fChatView = chat->GetView();
fRightView->AddChild(fChatView);
fRightView->AddChild(fSendScroll);
}
void void
MainWindow::ObserveInteger(int32 what, int32 val) MainWindow::ObserveInteger(int32 what, int32 val)
{ {

View File

@ -10,13 +10,14 @@
#include "Observer.h" #include "Observer.h"
class BCardLayout; class BGroupView;
class BTextControl; class BTextControl;
class BTextView;
class Conversation;
class ConversationItem; class ConversationItem;
class ConversationListView; class ConversationListView;
class ConversationView; class ConversationView;
class ChatWindow;
class Server; class Server;
class StatusView; class StatusView;
class RosterItem; class RosterItem;
@ -38,7 +39,7 @@ public:
void ObserveInteger(int32 what, int32 val); void ObserveInteger(int32 what, int32 val);
ChatWindow* GetChatWindow() { return fChatWindow; } void SetConversation(Conversation* chat);
Server* GetServer() const { return fServer; } Server* GetServer() const { return fServer; }
void UpdateListItem(ConversationItem* item); void UpdateListItem(ConversationItem* item);
@ -49,11 +50,19 @@ public:
private: private:
ConversationItem* _EnsureConversationItem(BMessage* msg); ConversationItem* _EnsureConversationItem(BMessage* msg);
ChatWindow* fChatWindow;
ConversationListView* fListView;
StatusView* fStatusView;
Server* fServer; Server* fServer;
bool fWorkspaceChanged; bool fWorkspaceChanged;
// Left panel, chat list
ConversationListView* fListView;
StatusView* fStatusView;
// Right panel, chat
BGroupView* fRightView;
BScrollView* fSendScroll;
BTextView* fSendView;
ConversationView* fChatView;
}; };
#endif // _MAIN_WINDOW_H #endif // _MAIN_WINDOW_H

View File

@ -39,7 +39,6 @@ SRCS = \
application/CayaUtils.cpp \ application/CayaUtils.cpp \
application/Contact.cpp \ application/Contact.cpp \
application/Conversation.cpp \ application/Conversation.cpp \
application/ChatWindow.cpp \
application/EditingFilter.cpp \ application/EditingFilter.cpp \
application/ImageCache.cpp \ application/ImageCache.cpp \
application/Main.cpp \ application/Main.cpp \

View File

@ -25,7 +25,6 @@
#include "CayaProtocol.h" #include "CayaProtocol.h"
#include "CayaPreferences.h" #include "CayaPreferences.h"
#include "CayaProtocolMessages.h" #include "CayaProtocolMessages.h"
#include "ChatWindow.h"
#include "ImageCache.h" #include "ImageCache.h"
#include "ProtocolManager.h" #include "ProtocolManager.h"
#include "RosterItem.h" #include "RosterItem.h"

View File

@ -18,7 +18,6 @@
class BBitmap; class BBitmap;
class ChatWindow;
class Conversation; class Conversation;
class UserPopUp; class UserPopUp;
class ProtocolLooper; class ProtocolLooper;

View File

@ -9,8 +9,7 @@
#include "StatusView.h" #include "StatusView.h"
#include <Bitmap.h> #include <Bitmap.h>
#include <GroupLayout.h> #include <LayoutBuilder.h>
#include <GroupLayoutBuilder.h>
#include <Message.h> #include <Message.h>
#include <MenuField.h> #include <MenuField.h>
#include <MenuItem.h> #include <MenuItem.h>
@ -75,8 +74,7 @@ StatusView::StatusView(const char* name)
fAvatar->SetExplicitPreferredSize(BSize(50, 50)); fAvatar->SetExplicitPreferredSize(BSize(50, 50));
// Set layout // Set layout
SetLayout(new BGroupLayout(B_VERTICAL)); BLayoutBuilder::Group<>(this, B_HORIZONTAL)
AddChild(BGroupLayoutBuilder(B_HORIZONTAL, 5)
.AddGroup(B_VERTICAL) .AddGroup(B_VERTICAL)
.Add(statusField) .Add(statusField)
.AddGroup(B_HORIZONTAL) .AddGroup(B_HORIZONTAL)
@ -85,8 +83,7 @@ StatusView::StatusView(const char* name)
.End() .End()
.End() .End()
.Add(fAvatar) .Add(fAvatar)
// .TopView() .End();
);
} }