mirror of
https://github.com/Xevion/tcp-chat.git
synced 2025-12-06 15:16:43 -06:00
change GUI label to statusbar, imports/docs cleanup
This commit is contained in:
@@ -78,7 +78,6 @@ class Ui_ConnectionDialog(object):
|
|||||||
self.connection_groupbox.setObjectName("connection_groupbox")
|
self.connection_groupbox.setObjectName("connection_groupbox")
|
||||||
self.gridLayout_4 = QtWidgets.QGridLayout(self.connection_groupbox)
|
self.gridLayout_4 = QtWidgets.QGridLayout(self.connection_groupbox)
|
||||||
self.gridLayout_4.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
|
self.gridLayout_4.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
|
||||||
self.gridLayout_4.setContentsMargins(-1, -1, -1, 0)
|
|
||||||
self.gridLayout_4.setObjectName("gridLayout_4")
|
self.gridLayout_4.setObjectName("gridLayout_4")
|
||||||
self.nickname_layout = QtWidgets.QHBoxLayout()
|
self.nickname_layout = QtWidgets.QHBoxLayout()
|
||||||
self.nickname_layout.setObjectName("nickname_layout")
|
self.nickname_layout.setObjectName("nickname_layout")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Form implementation generated from reading ui file '.\client\MainWindow.ui'
|
# Form implementation generated from reading ui file '.\client\ui\MainWindow.ui'
|
||||||
#
|
#
|
||||||
# Created by: PyQt5 UI code generator 5.15.2
|
# Created by: PyQt5 UI code generator 5.15.2
|
||||||
#
|
#
|
||||||
@@ -14,7 +14,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
|||||||
class Ui_MainWindow(object):
|
class Ui_MainWindow(object):
|
||||||
def setupUi(self, MainWindow):
|
def setupUi(self, MainWindow):
|
||||||
MainWindow.setObjectName("MainWindow")
|
MainWindow.setObjectName("MainWindow")
|
||||||
MainWindow.resize(800, 643)
|
MainWindow.resize(800, 625)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
|
||||||
|
MainWindow.setSizePolicy(sizePolicy)
|
||||||
|
MainWindow.setMinimumSize(QtCore.QSize(0, 20))
|
||||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
@@ -24,26 +30,12 @@ class Ui_MainWindow(object):
|
|||||||
self.centralwidget.setObjectName("centralwidget")
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
|
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
|
||||||
self.gridLayout.setObjectName("gridLayout")
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
self.messageBox = QtWidgets.QTextEdit(self.centralwidget)
|
self.chat_history_label = QtWidgets.QLabel(self.centralwidget)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Maximum)
|
self.chat_history_label.setObjectName("chat_history_label")
|
||||||
sizePolicy.setHorizontalStretch(0)
|
self.gridLayout.addWidget(self.chat_history_label, 0, 1, 1, 1)
|
||||||
sizePolicy.setVerticalStretch(0)
|
self.connections_label = QtWidgets.QLabel(self.centralwidget)
|
||||||
sizePolicy.setHeightForWidth(self.messageBox.sizePolicy().hasHeightForWidth())
|
self.connections_label.setObjectName("connections_label")
|
||||||
self.messageBox.setSizePolicy(sizePolicy)
|
self.gridLayout.addWidget(self.connections_label, 0, 2, 1, 1)
|
||||||
self.messageBox.setMaximumSize(QtCore.QSize(16777215, 80))
|
|
||||||
self.messageBox.setObjectName("messageBox")
|
|
||||||
self.gridLayout.addWidget(self.messageBox, 2, 1, 1, 2)
|
|
||||||
self.label = QtWidgets.QLabel(self.centralwidget)
|
|
||||||
self.label.setObjectName("label")
|
|
||||||
self.gridLayout.addWidget(self.label, 0, 2, 1, 1)
|
|
||||||
self.messageHistory = QtWidgets.QTextBrowser(self.centralwidget)
|
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(5)
|
|
||||||
sizePolicy.setHeightForWidth(self.messageHistory.sizePolicy().hasHeightForWidth())
|
|
||||||
self.messageHistory.setSizePolicy(sizePolicy)
|
|
||||||
self.messageHistory.setObjectName("messageHistory")
|
|
||||||
self.gridLayout.addWidget(self.messageHistory, 1, 1, 1, 1)
|
|
||||||
self.connectionsList = QtWidgets.QListWidget(self.centralwidget)
|
self.connectionsList = QtWidgets.QListWidget(self.centralwidget)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Expanding)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Expanding)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
@@ -53,14 +45,23 @@ class Ui_MainWindow(object):
|
|||||||
self.connectionsList.setMaximumSize(QtCore.QSize(200, 16777215))
|
self.connectionsList.setMaximumSize(QtCore.QSize(200, 16777215))
|
||||||
self.connectionsList.setObjectName("connectionsList")
|
self.connectionsList.setObjectName("connectionsList")
|
||||||
self.gridLayout.addWidget(self.connectionsList, 1, 2, 1, 1)
|
self.gridLayout.addWidget(self.connectionsList, 1, 2, 1, 1)
|
||||||
self.label_2 = QtWidgets.QLabel(self.centralwidget)
|
self.messageBox = QtWidgets.QTextEdit(self.centralwidget)
|
||||||
self.label_2.setObjectName("label_2")
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Maximum)
|
||||||
self.gridLayout.addWidget(self.label_2, 0, 1, 1, 1)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
spacerItem = QtWidgets.QSpacerItem(100, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
sizePolicy.setVerticalStretch(0)
|
||||||
self.gridLayout.addItem(spacerItem, 3, 1, 1, 1)
|
sizePolicy.setHeightForWidth(self.messageBox.sizePolicy().hasHeightForWidth())
|
||||||
self.data_stats = QtWidgets.QLabel(self.centralwidget)
|
self.messageBox.setSizePolicy(sizePolicy)
|
||||||
self.data_stats.setObjectName("data_stats")
|
self.messageBox.setMaximumSize(QtCore.QSize(16777215, 80))
|
||||||
self.gridLayout.addWidget(self.data_stats, 3, 2, 1, 1)
|
self.messageBox.setObjectName("messageBox")
|
||||||
|
self.gridLayout.addWidget(self.messageBox, 2, 1, 1, 2)
|
||||||
|
self.messageHistory = QtWidgets.QTextBrowser(self.centralwidget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(5)
|
||||||
|
sizePolicy.setHeightForWidth(self.messageHistory.sizePolicy().hasHeightForWidth())
|
||||||
|
self.messageHistory.setSizePolicy(sizePolicy)
|
||||||
|
self.messageHistory.setObjectName("messageHistory")
|
||||||
|
self.gridLayout.addWidget(self.messageHistory, 1, 1, 1, 1)
|
||||||
MainWindow.setCentralWidget(self.centralwidget)
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
|
||||||
@@ -68,6 +69,9 @@ class Ui_MainWindow(object):
|
|||||||
self.menuFile = QtWidgets.QMenu(self.menubar)
|
self.menuFile = QtWidgets.QMenu(self.menubar)
|
||||||
self.menuFile.setObjectName("menuFile")
|
self.menuFile.setObjectName("menuFile")
|
||||||
MainWindow.setMenuBar(self.menubar)
|
MainWindow.setMenuBar(self.menubar)
|
||||||
|
self.status_bar = QtWidgets.QStatusBar(MainWindow)
|
||||||
|
self.status_bar.setObjectName("status_bar")
|
||||||
|
MainWindow.setStatusBar(self.status_bar)
|
||||||
self.actionConnect_to = QtWidgets.QAction(MainWindow)
|
self.actionConnect_to = QtWidgets.QAction(MainWindow)
|
||||||
self.actionConnect_to.setObjectName("actionConnect_to")
|
self.actionConnect_to.setObjectName("actionConnect_to")
|
||||||
self.actionSave_chat_to = QtWidgets.QAction(MainWindow)
|
self.actionSave_chat_to = QtWidgets.QAction(MainWindow)
|
||||||
@@ -85,9 +89,12 @@ class Ui_MainWindow(object):
|
|||||||
def retranslateUi(self, MainWindow):
|
def retranslateUi(self, MainWindow):
|
||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
MainWindow.setWindowTitle(_translate("MainWindow", "TCPChat"))
|
MainWindow.setWindowTitle(_translate("MainWindow", "TCPChat"))
|
||||||
self.label.setText(_translate("MainWindow", "Connections"))
|
self.chat_history_label.setText(_translate("MainWindow", "Chat History"))
|
||||||
self.label_2.setText(_translate("MainWindow", "Chat History"))
|
self.connections_label.setText(_translate("MainWindow", "Connections"))
|
||||||
self.data_stats.setText(_translate("MainWindow", "0.00KB Sent, 0.00KB Received"))
|
self.connectionsList.setStatusTip(_translate("MainWindow", "View and/or moderate all users connected to the server."))
|
||||||
|
self.messageBox.setStatusTip(_translate("MainWindow", "Type a message to send to the server."))
|
||||||
|
self.messageBox.setPlaceholderText(_translate("MainWindow", "Type your message here..."))
|
||||||
|
self.messageHistory.setStatusTip(_translate("MainWindow", "View all messages sent by the server and other users."))
|
||||||
self.menuFile.setTitle(_translate("MainWindow", "File"))
|
self.menuFile.setTitle(_translate("MainWindow", "File"))
|
||||||
self.actionConnect_to.setText(_translate("MainWindow", "Connect to..."))
|
self.actionConnect_to.setText(_translate("MainWindow", "Connect to..."))
|
||||||
self.actionSave_chat_to.setText(_translate("MainWindow", "Export chat..."))
|
self.actionSave_chat_to.setText(_translate("MainWindow", "Export chat..."))
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import re
|
import re
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui
|
|
||||||
from PyQt5.QtCore import QEvent
|
from PyQt5.QtCore import QEvent
|
||||||
from PyQt5.QtWidgets import QDialog, QStatusBar, QWidget, QSpacerItem, QSizePolicy
|
from PyQt5.QtWidgets import QDialog, QStatusBar
|
||||||
|
|
||||||
import constants
|
import constants
|
||||||
from client.ConnectionDialog import Ui_ConnectionDialog
|
from client.ConnectionDialog import Ui_ConnectionDialog
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
import logging
|
import logging
|
||||||
import socket
|
import socket
|
||||||
from pprint import pprint
|
from typing import List
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QEvent, QTimer
|
|
||||||
from PyQt5.QtWidgets import QMainWindow
|
|
||||||
|
|
||||||
|
from PyQt5.QtCore import Qt, QEvent
|
||||||
|
from PyQt5.QtWidgets import QMainWindow, QLabel
|
||||||
from sortedcontainers import SortedList
|
from sortedcontainers import SortedList
|
||||||
|
|
||||||
import constants
|
import constants
|
||||||
import helpers
|
import helpers
|
||||||
import re
|
|
||||||
from client.MainWindow import Ui_MainWindow
|
from client.MainWindow import Ui_MainWindow
|
||||||
from client.dialog import NicknameDialog
|
|
||||||
from client.worker import ReceiveWorker
|
from client.worker import ReceiveWorker
|
||||||
|
|
||||||
IP = '127.0.0.1'
|
IP = '127.0.0.1'
|
||||||
@@ -44,12 +41,16 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||||||
self.receiveThread.logs.connect(self.log) # Receiving logging messages from a thread
|
self.receiveThread.logs.connect(self.log) # Receiving logging messages from a thread
|
||||||
self.receiveThread.data_stats.connect(self.count_stats) # Receiving data usage stats
|
self.receiveThread.data_stats.connect(self.count_stats) # Receiving data usage stats
|
||||||
# TODO: Improve initial client/server data exchange
|
# TODO: Improve initial client/server data exchange
|
||||||
self.receiveThread.sent_nick.connect(self._ready)
|
|
||||||
self.receiveThread.start()
|
self.receiveThread.start()
|
||||||
|
|
||||||
self.messageBox.setPlaceholderText('Type your message here...')
|
# Setup message box return key logic
|
||||||
self.messageBox.installEventFilter(self)
|
self.messageBox.installEventFilter(self)
|
||||||
|
|
||||||
|
self.data_stats = QLabel("0.00KB Sent, 0.00KB Received")
|
||||||
|
self.data_stats.setAlignment(Qt.AlignVCenter)
|
||||||
|
self.status_bar.addPermanentWidget(self.data_stats)
|
||||||
|
|
||||||
|
# Variables for managing
|
||||||
self.messages = SortedList(key=lambda message: message['time'])
|
self.messages = SortedList(key=lambda message: message['time'])
|
||||||
self.added_messages = []
|
self.added_messages = []
|
||||||
self.max_message_id = -1
|
self.max_message_id = -1
|
||||||
@@ -57,20 +58,22 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||||||
self.sent, self.received = 0, 0
|
self.sent, self.received = 0, 0
|
||||||
|
|
||||||
def count_stats(self, sent: bool, change: int) -> None:
|
def count_stats(self, sent: bool, change: int) -> None:
|
||||||
|
"""Handler for counting data statistics."""
|
||||||
|
if change != 0:
|
||||||
if sent:
|
if sent:
|
||||||
self.sent += change
|
self.sent += change
|
||||||
else:
|
else:
|
||||||
self.received += change
|
self.received += change
|
||||||
self.data_stats.setText(f'{helpers.sizeof_fmt(self.sent)} Sent, {helpers.sizeof_fmt(self.received)} Received')
|
self.data_stats.setText(f'{helpers.sizeof_fmt(self.sent)} Sent, '
|
||||||
|
f'{helpers.sizeof_fmt(self. received)} Received')
|
||||||
|
|
||||||
def log(self, log_data: dict) -> None:
|
@staticmethod
|
||||||
|
def log(log_data: dict) -> None:
|
||||||
|
"""Handler for data logging from a thread."""
|
||||||
logger.log(level=log_data['level'], msg=log_data['message'], exc_info=log_data['error'])
|
logger.log(level=log_data['level'], msg=log_data['message'], exc_info=log_data['error'])
|
||||||
|
|
||||||
def _ready(self):
|
|
||||||
logger.debug('Nickname sent. Ready to communicate with server further...')
|
|
||||||
self.get_message_history()
|
|
||||||
|
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
|
"""Handle closing by stopping the receive thread."""
|
||||||
self.receiveThread.stop()
|
self.receiveThread.stop()
|
||||||
event.accept() # let the window close
|
event.accept() # let the window close
|
||||||
|
|
||||||
@@ -89,14 +92,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||||||
def refresh_messages(self) -> None:
|
def refresh_messages(self) -> None:
|
||||||
"""Completely refresh the chat box text."""
|
"""Completely refresh the chat box text."""
|
||||||
scrollbar = self.messageHistory.verticalScrollBar()
|
scrollbar = self.messageHistory.verticalScrollBar()
|
||||||
lastPosition = scrollbar.value()
|
last_position = scrollbar.value()
|
||||||
atMaximum = lastPosition == scrollbar.maximum()
|
at_maximum = last_position == scrollbar.maximum()
|
||||||
|
|
||||||
self.messageHistory.setText('<br>'.join(
|
self.messageHistory.setText('<br>'.join(
|
||||||
msg['compiled'] for msg in self.messages
|
msg['compiled'] for msg in self.messages
|
||||||
))
|
))
|
||||||
|
|
||||||
scrollbar.setValue(scrollbar.maximum() if atMaximum else lastPosition)
|
scrollbar.setValue(scrollbar.maximum() if at_maximum else last_position)
|
||||||
|
|
||||||
def send(self, data: bytes, **kwargs) -> None:
|
def send(self, data: bytes, **kwargs) -> None:
|
||||||
self.count_stats(True, len(data))
|
self.count_stats(True, len(data))
|
||||||
@@ -129,15 +132,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||||||
}
|
}
|
||||||
))
|
))
|
||||||
|
|
||||||
def get_message_history(self) -> None:
|
def update_connections(self, users: List[dict]):
|
||||||
logger.info('Requesting message history')
|
"""Update the Connections List widget"""
|
||||||
self.send(helpers.prepare_json(
|
|
||||||
{
|
|
||||||
'type': constants.Types.REQUEST,
|
|
||||||
'request': constants.Requests.GET_MESSAGE_HISTORY
|
|
||||||
}
|
|
||||||
))
|
|
||||||
|
|
||||||
def update_connections(self, users):
|
|
||||||
self.connectionsList.clear()
|
self.connectionsList.clear()
|
||||||
self.connectionsList.addItems([user['nickname'] for user in users])
|
self.connectionsList.addItems([user['nickname'] for user in users])
|
||||||
|
|||||||
@@ -17,5 +17,5 @@ def main(nickname: str = None):
|
|||||||
|
|
||||||
if connect_dialog.connect_pressed:
|
if connect_dialog.connect_pressed:
|
||||||
settings = connect_dialog.settings
|
settings = connect_dialog.settings
|
||||||
m = MainWindow(settings.ip, settings.port, settings.nickname)
|
window = MainWindow(settings.ip, settings.port, settings.nickname)
|
||||||
app.exec_()
|
app.exec_()
|
||||||
|
|||||||
@@ -7,9 +7,21 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>800</width>
|
<width>800</width>
|
||||||
<height>643</height>
|
<height>625</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>TCPChat</string>
|
<string>TCPChat</string>
|
||||||
</property>
|
</property>
|
||||||
@@ -21,39 +33,20 @@
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="2" column="1" colspan="2">
|
<item row="0" column="1">
|
||||||
<widget class="QTextEdit" name="messageBox">
|
<widget class="QLabel" name="chat_history_label">
|
||||||
<property name="sizePolicy">
|
<property name="text">
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
|
<string>Chat History</string>
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>80</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2">
|
<item row="0" column="2">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="connections_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Connections</string>
|
<string>Connections</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QTextBrowser" name="messageHistory">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>5</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
<item row="1" column="2">
|
||||||
<widget class="QListWidget" name="connectionsList">
|
<widget class="QListWidget" name="connectionsList">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@@ -68,32 +61,43 @@
|
|||||||
<height>16777215</height>
|
<height>16777215</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="statusTip">
|
||||||
</item>
|
<string>View and/or moderate all users connected to the server.</string>
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Chat History</string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="2" column="1" colspan="2">
|
||||||
<spacer name="horizontalSpacer">
|
<widget class="QTextEdit" name="messageBox">
|
||||||
<property name="orientation">
|
<property name="sizePolicy">
|
||||||
<enum>Qt::Horizontal</enum>
|
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>100</width>
|
<width>16777215</width>
|
||||||
<height>20</height>
|
<height>80</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
<property name="statusTip">
|
||||||
|
<string>Type a message to send to the server.</string>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Type your message here...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="2">
|
<item row="1" column="1">
|
||||||
<widget class="QLabel" name="data_stats">
|
<widget class="QTextBrowser" name="messageHistory">
|
||||||
<property name="text">
|
<property name="sizePolicy">
|
||||||
<string>0.00KB Sent, 0.00KB Received</string>
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>5</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="statusTip">
|
||||||
|
<string>View all messages sent by the server and other users.</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -118,6 +122,14 @@
|
|||||||
</widget>
|
</widget>
|
||||||
<addaction name="menuFile"/>
|
<addaction name="menuFile"/>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="status_bar">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
<action name="actionConnect_to">
|
<action name="actionConnect_to">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Connect to...</string>
|
<string>Connect to...</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user