From e51b3fe350255e891b3955c4cf1df4fd1464e7be Mon Sep 17 00:00:00 2001 From: Tom Calver Date: Mon, 21 Apr 2025 18:12:13 +0100 Subject: [PATCH] #131: Extend line size in send message to match full screen chat window --- src/main/kotlin/chatroom/ChatroomWindow.kt | 22 +++++-------------- .../chatroom/ChatroomWindowConstants.kt | 19 ++++++++++++++++ .../chatroom/sendmessages/SendMessagePanel.kt | 3 ++- 3 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 src/main/kotlin/chatroom/ChatroomWindowConstants.kt diff --git a/src/main/kotlin/chatroom/ChatroomWindow.kt b/src/main/kotlin/chatroom/ChatroomWindow.kt index 264c1eb..680ea3f 100644 --- a/src/main/kotlin/chatroom/ChatroomWindow.kt +++ b/src/main/kotlin/chatroom/ChatroomWindow.kt @@ -18,8 +18,6 @@ import org.koin.core.component.createScope import org.koin.core.component.inject import org.koin.core.scope.Scope import view.AppWindow -import view.DEFAULT_TERMINAL_HEIGHT -import view.DEFAULT_TERMINAL_WIDTH import view.linearLayoutFill class ChatroomWindow( @@ -32,29 +30,23 @@ class ChatroomWindow( init { setHints(listOf(CENTERED)) - val totalColumns = DEFAULT_TERMINAL_WIDTH * 3 - val totalRows = DEFAULT_TERMINAL_HEIGHT - val leftWidth = LEFT_PANEL_WIDTH - val rightWidth = totalColumns - leftWidth - val sendMessagesHeight = 5 - val chatHeight = totalRows - sendMessagesHeight val rightPanel = Panel(LinearLayout(VERTICAL)).apply { - setPreferredSize(TerminalSize(rightWidth, totalRows)) + setPreferredSize(TerminalSize(RIGHT_WIDTH, TOTAL_ROWS)) addComponent( viewMessages.bordered() - .setPreferredSize(TerminalSize(0, chatHeight)).linearLayoutFill(), + .setPreferredSize(TerminalSize(0, CHAT_HEIGHT)).linearLayoutFill(), ) addComponent( sendMessages.bordered() - .setPreferredSize(TerminalSize(0, sendMessagesHeight)).linearLayoutFill(), + .setPreferredSize(TerminalSize(0, SEND_MESSAGES_HEIGHT)).linearLayoutFill(), ) } val chatroom = Panel(LinearLayout(HORIZONTAL)).apply { - setPreferredSize(TerminalSize(totalColumns, totalRows)) - addComponent(usersList.bordered().setPreferredSize(TerminalSize(leftWidth, 0)).linearLayoutFill()) + setPreferredSize(TerminalSize(TOTAL_COLUMNS, TOTAL_ROWS)) + addComponent(usersList.bordered().setPreferredSize(TerminalSize(LEFT_WIDTH, 0)).linearLayoutFill()) addComponent(rightPanel) } component = chatroom @@ -65,8 +57,4 @@ class ChatroomWindow( scope.close() windowScope.cancel() } - - companion object { - private const val LEFT_PANEL_WIDTH = 20 - } } diff --git a/src/main/kotlin/chatroom/ChatroomWindowConstants.kt b/src/main/kotlin/chatroom/ChatroomWindowConstants.kt new file mode 100644 index 0000000..a8fc467 --- /dev/null +++ b/src/main/kotlin/chatroom/ChatroomWindowConstants.kt @@ -0,0 +1,19 @@ +package chatroom + +import view.DEFAULT_TERMINAL_HEIGHT +import view.DEFAULT_TERMINAL_WIDTH + +const val TOTAL_COLUMNS = DEFAULT_TERMINAL_WIDTH * 3 +const val TOTAL_ROWS = DEFAULT_TERMINAL_HEIGHT +const val LEFT_WIDTH = 20 +const val RIGHT_WIDTH = TOTAL_COLUMNS - LEFT_WIDTH +const val SEND_MESSAGES_HEIGHT = 5 +const val SEND_MESSAGES_WIDTH = RIGHT_WIDTH - 7 +const val CHAT_HEIGHT = TOTAL_ROWS - SEND_MESSAGES_HEIGHT + +fun sendMessagesWidth(): Int { + assert(SEND_MESSAGES_WIDTH > 10) { + "Send Message Width must never be less than 10 columns." + } + return SEND_MESSAGES_WIDTH +} diff --git a/src/main/kotlin/chatroom/sendmessages/SendMessagePanel.kt b/src/main/kotlin/chatroom/sendmessages/SendMessagePanel.kt index 8fc145e..6b8f83c 100644 --- a/src/main/kotlin/chatroom/sendmessages/SendMessagePanel.kt +++ b/src/main/kotlin/chatroom/sendmessages/SendMessagePanel.kt @@ -1,6 +1,7 @@ package chatroom.sendmessages import chatroom.BorderedPanel +import chatroom.sendMessagesWidth import chatroom.sendmessages.SendMessageEvent.SendMessage import chatroom.sendmessages.SendMessageViewState.Clear import com.googlecode.lanterna.TerminalSize @@ -15,7 +16,7 @@ class SendMessagePanel( ) : Panel(BorderLayout()), BorderedPanel, SendMessagesView { private val message: CharacterWrapTextBox = CharacterWrapTextBox( - TerminalSize(20, 3), + TerminalSize(sendMessagesWidth(), 3), ) { presenter.onEvent(SendMessage(text)) } private val text: String get() = message.text