From 641e8b1fb49877d23a4d29346f02f56811959f5e Mon Sep 17 00:00:00 2001 From: Jaidyn Ann Date: Sun, 30 May 2021 12:30:26 -0500 Subject: [PATCH] Correct spacing and sizes of main window views Removes explicit setting of sizes in ConversationView and StatusView, allowing them to be resized appropriately. Also rearranges StatusView somewhat, so that it's more friendly to smaller sizes. (The avatar is moved from being beside the status menu field to being beside the nickname textbox.) --- application/MainWindow.cpp | 203 +++++++++++---------- application/MainWindow.h | 27 +-- application/views/ConversationListView.cpp | 7 +- application/views/ConversationListView.h | 2 +- application/views/ConversationView.cpp | 8 +- application/views/StatusView.cpp | 6 +- 6 files changed, 126 insertions(+), 127 deletions(-) diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp index 6c1a6c4..f42e1b7 100644 --- a/application/MainWindow.cpp +++ b/application/MainWindow.cpp @@ -12,26 +12,19 @@ #include #include #include -#include -#include #include -#include -#include #include -#include - #include "AccountManager.h" -#include "CayaConstants.h" #include "CayaMessages.h" -#include "CayaProtocolMessages.h" #include "CayaPreferences.h" +#include "CayaProtocolMessages.h" #include "ConversationItem.h" #include "ConversationListView.h" #include "ConversationView.h" #include "EditingFilter.h" -#include "NotifyMessage.h" #include "MainWindow.h" +#include "NotifyMessage.h" #include "PreferencesDialog.h" #include "ReplicantStatusView.h" #include "RosterWindow.h" @@ -47,63 +40,16 @@ MainWindow::MainWindow() BWindow(BRect(0, 0, 300, 400), "Caya", B_TITLED_WINDOW, 0), fWorkspaceChanged(false) { - fStatusView = new StatusView("statusView"); - - // Menubar - BMenuBar* menuBar = new BMenuBar("MenuBar"); - - BMenu* programMenu = new BMenu("Program"); - programMenu->AddItem(new BMenuItem("About" B_UTF8_ELLIPSIS, - new BMessage(B_ABOUT_REQUESTED))); - programMenu->AddItem(new BMenuItem("Preferences" B_UTF8_ELLIPSIS, - new BMessage(CAYA_SHOW_SETTINGS), ',', B_COMMAND_KEY)); - programMenu->AddItem(new BSeparatorItem()); - programMenu->AddItem(new BMenuItem("Quit", - new BMessage(B_QUIT_REQUESTED), 'Q', B_COMMAND_KEY)); - programMenu->SetTargetForItems(this); - - BMenu* chatMenu = new BMenu("Chat"); - chatMenu->AddItem(new BMenuItem("New chat" B_UTF8_ELLIPSIS, - new BMessage(CAYA_NEW_CHAT))); - chatMenu->SetTargetForItems(this); - - menuBar->AddItem(programMenu); - menuBar->AddItem(chatMenu); - - fListView = new ConversationListView("roomList"); - - 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) - - .AddGroup(B_HORIZONTAL) - .SetInsets(5, 5, 5, 10) - .AddGroup(B_VERTICAL) - .Add(fListView) - .Add(fStatusView) - .End() - - .Add(fRightView) - .End() - .End(); + _InitInterface(); // Filter messages using Server fServer = new Server(); AddFilter(fServer); + // Also through the editing filter (enter to send) + AddCommonFilter(new EditingFilter(fSendView)); + fSendView->MakeFocus(true); + CenterOnScreen(); //TODO check for errors here @@ -216,26 +162,6 @@ MainWindow::MessageReceived(BMessage* message) } -void -MainWindow::ImError(BMessage* msg) -{ - const char* error = NULL; - const char* detail = msg->FindString("detail"); - - if (msg->FindString("error", &error) != B_OK) - return; - - // Format error message - BString errMsg(error); - if (detail) - errMsg << "\n" << detail; - - BAlert* alert = new BAlert("Error", errMsg.String(), "OK", NULL, NULL, - B_WIDTH_AS_USUAL, B_STOP_ALERT); - alert->Go(); -} - - void MainWindow::ImMessage(BMessage* msg) { @@ -270,16 +196,22 @@ MainWindow::ImMessage(BMessage* msg) void -MainWindow::SetConversation(Conversation* chat) +MainWindow::ImError(BMessage* msg) { - BView* current = fRightView->FindView("chatView"); - fRightView->RemoveChild(fRightView->FindView("chatView")); - fRightView->RemoveChild(fRightView->FindView("fSendScroll")); + const char* error = NULL; + const char* detail = msg->FindString("detail"); - fChatView = chat->GetView(); + if (msg->FindString("error", &error) != B_OK) + return; - fRightView->AddChild(fChatView); - fRightView->AddChild(fSendScroll); + // Format error message + BString errMsg(error); + if (detail) + errMsg << "\n" << detail; + + BAlert* alert = new BAlert("Error", errMsg.String(), "OK", NULL, NULL, + B_WIDTH_AS_USUAL, B_STOP_ALERT); + alert->Go(); } @@ -294,16 +226,6 @@ MainWindow::ObserveInteger(int32 what, int32 val) } -void -MainWindow::UpdateListItem(ConversationItem* item) -{ - if (fListView->HasItem(item) == true) - fListView->InvalidateItem(fListView->IndexOf(item)); - else - fListView->AddItem(item); -} - - void MainWindow::WorkspaceActivated(int32 workspace, bool active) { @@ -314,6 +236,79 @@ MainWindow::WorkspaceActivated(int32 workspace, bool active) } +void +MainWindow::SetConversation(Conversation* chat) +{ + fRightView->RemoveChild(fRightView->FindView("chatView")); + fRightView->RemoveChild(fRightView->FindView("fSendScroll")); + + if (chat != NULL) + fChatView = chat->GetView(); + + fRightView->AddChild(fChatView, 9); + fRightView->AddChild(fSendScroll, 1); +} + + +void +MainWindow::_InitInterface() +{ + // Left side of window, Roomlist + Status + fListView = new ConversationListView("roomList"); + fStatusView = new StatusView("statusView"); + + // Right-side of window, Chat + Textbox + fRightView = new BSplitView(B_VERTICAL, 0); + fChatView = new ConversationView(); + fSendView = new BTextView("fSendView"); + fSendScroll = new BScrollView("fSendScroll", fSendView, + B_WILL_DRAW, false, true); + fSendView->SetWordWrap(true); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .Add(_CreateMenuBar()) + .AddGroup(B_HORIZONTAL) + .SetInsets(5, 5, 0, 10) + .AddSplit(B_HORIZONTAL, 0) + .AddGroup(B_VERTICAL) + .Add(fListView, 1) + .Add(fStatusView) + .End() + .Add(fRightView, 5) + .End() + .End() + .End(); + + SetConversation(NULL); +} + + +BMenuBar* +MainWindow::_CreateMenuBar() +{ + BMenuBar* menuBar = new BMenuBar("MenuBar"); + + BMenu* programMenu = new BMenu("Program"); + programMenu->AddItem(new BMenuItem("About" B_UTF8_ELLIPSIS, + new BMessage(B_ABOUT_REQUESTED))); + programMenu->AddItem(new BMenuItem("Preferences" B_UTF8_ELLIPSIS, + new BMessage(CAYA_SHOW_SETTINGS), ',', B_COMMAND_KEY)); + programMenu->AddItem(new BSeparatorItem()); + programMenu->AddItem(new BMenuItem("Quit", + new BMessage(B_QUIT_REQUESTED), 'Q', B_COMMAND_KEY)); + programMenu->SetTargetForItems(this); + + BMenu* chatMenu = new BMenu("Chat"); + chatMenu->AddItem(new BMenuItem("New chat" B_UTF8_ELLIPSIS, + new BMessage(CAYA_NEW_CHAT))); + chatMenu->SetTargetForItems(this); + + menuBar->AddItem(programMenu); + menuBar->AddItem(chatMenu); + return menuBar; +} + + ConversationItem* MainWindow::_EnsureConversationItem(BMessage* msg) { @@ -325,7 +320,7 @@ MainWindow::_EnsureConversationItem(BMessage* msg) if (chat != NULL) { ConversationItem* item = chat->GetConversationItem(); if (fListView->HasItem(item)) { - UpdateListItem(item); + _UpdateListItem(item); } else if (item != NULL) { fListView->AddItem(item); @@ -337,3 +332,13 @@ MainWindow::_EnsureConversationItem(BMessage* msg) } +void +MainWindow::_UpdateListItem(ConversationItem* item) +{ + if (fListView->HasItem(item) == true) + fListView->InvalidateItem(fListView->IndexOf(item)); + else + fListView->AddItem(item); +} + + diff --git a/application/MainWindow.h b/application/MainWindow.h index 21535d4..66e1cba 100644 --- a/application/MainWindow.h +++ b/application/MainWindow.h @@ -10,17 +10,16 @@ #include "Observer.h" -class BGroupView; -class BTextControl; +class BSplitView; class BTextView; class Conversation; class ConversationItem; class ConversationListView; class ConversationView; +class RosterItem; class Server; class StatusView; -class RosterItem; class MainWindow: public BWindow, public Observer { @@ -28,27 +27,28 @@ public: MainWindow(); void Start(); + virtual bool QuitRequested(); virtual void MessageReceived(BMessage* message); void ImMessage(BMessage* msg); void ImError(BMessage* msg); - virtual bool QuitRequested(); + + // Observer inheritance + void ObserveInteger(int32 what, int32 val); virtual void WorkspaceActivated(int32 workspace, bool active); - void ObserveInteger(int32 what, int32 val); - void SetConversation(Conversation* chat); Server* GetServer() const { return fServer; } - void UpdateListItem(ConversationItem* item); - - int32 CountItems() const; - RosterItem* ItemAt(int index); private: - ConversationItem* _EnsureConversationItem(BMessage* msg); + void _InitInterface(); + BMenuBar* _CreateMenuBar(); + + ConversationItem* _EnsureConversationItem(BMessage* msg); + void _UpdateListItem(ConversationItem* item); Server* fServer; bool fWorkspaceChanged; @@ -58,11 +58,12 @@ private: StatusView* fStatusView; // Right panel, chat - BGroupView* fRightView; + BSplitView* fRightView; BScrollView* fSendScroll; BTextView* fSendView; ConversationView* fChatView; - }; + #endif // _MAIN_WINDOW_H + diff --git a/application/views/ConversationListView.cpp b/application/views/ConversationListView.cpp index d570047..b1efa31 100644 --- a/application/views/ConversationListView.cpp +++ b/application/views/ConversationListView.cpp @@ -19,7 +19,7 @@ const uint32 kLeaveSelectedChat = 'CVcs'; ConversationListView::ConversationListView(const char* name) - : BOutlineListView(name) + : BListView(name) { } @@ -39,7 +39,7 @@ ConversationListView::MessageReceived(BMessage* msg) } default: - BOutlineListView::MessageReceived(msg); + BListView::MessageReceived(msg); } } @@ -69,7 +69,8 @@ BPopUpMenu* ConversationListView::_ConversationPopUp() { BPopUpMenu* menu = new BPopUpMenu("chatPopUp"); - menu->AddItem(new BMenuItem("Open chat…", new BMessage(kOpenSelectedChat))); + menu->AddItem(new BMenuItem("Open chat" B_UTF8_ELLIPSIS, + new BMessage(kOpenSelectedChat))); menu->AddItem(new BMenuItem("Leave chat", new BMessage(kLeaveSelectedChat))); menu->SetTargetForItems(this); diff --git a/application/views/ConversationListView.h b/application/views/ConversationListView.h index b6a6d3f..9336888 100644 --- a/application/views/ConversationListView.h +++ b/application/views/ConversationListView.h @@ -10,7 +10,7 @@ class BPopUpMenu; -class ConversationListView : public BOutlineListView { +class ConversationListView : public BListView { public: ConversationListView(const char* name); diff --git a/application/views/ConversationView.cpp b/application/views/ConversationView.cpp index 361e2ba..c5f8394 100644 --- a/application/views/ConversationView.cpp +++ b/application/views/ConversationView.cpp @@ -41,15 +41,12 @@ ConversationView::ConversationView() BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE)); fPersonalMessage->SetText(""); - fPersonalMessage->SetExplicitMaxSize(BSize(400, 200)); fPersonalMessage->MakeEditable(false); fPersonalMessage->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fStatus = new BStringView("status", ""); - fStatus->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE)); fAvatar = new BitmapView("ContactIcon"); - fAvatar->SetExplicitMaxSize(BSize(50, 50)); fAvatar->SetExplicitMinSize(BSize(50, 50)); fAvatar->SetExplicitPreferredSize(BSize(50, 50)); fAvatar->SetExplicitAlignment(BAlignment(B_ALIGN_RIGHT, B_ALIGN_MIDDLE)); @@ -62,9 +59,8 @@ ConversationView::ConversationView() .Add(fPersonalMessage) .Add(fAvatar) .End() - .Add(scrollViewReceive, 3) - .Add(fStatus, 4) - .SetInsets(5, 5, 5, 5); + .Add(scrollViewReceive, 3); +// .Add(fStatus, 4) } diff --git a/application/views/StatusView.cpp b/application/views/StatusView.cpp index 20650a5..479511a 100644 --- a/application/views/StatusView.cpp +++ b/application/views/StatusView.cpp @@ -37,9 +37,6 @@ StatusView::StatusView(const char* name) fNickname = new NicknameTextControl("Nickname", new BMessage(kSetNickname)); - BStringView* nicknameLabel = new BStringView("Nickname", - "Nickname:", B_WILL_DRAW); - // Status menu fStatusMenu = new BPopUpMenu("-"); @@ -78,11 +75,10 @@ StatusView::StatusView(const char* name) .AddGroup(B_VERTICAL) .Add(statusField) .AddGroup(B_HORIZONTAL) - .Add(nicknameLabel) .Add(fNickname) + .Add(fAvatar) .End() .End() - .Add(fAvatar) .End(); }