Skip to content

Commit 3e24b0f

Browse files
committed
Statusbar updated
- Labels added to status bar on main form - Labels added to status bar on chat form
1 parent e0d42a5 commit 3e24b0f

8 files changed

Lines changed: 133 additions & 40 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.vscode/
2+
__pycache__/
3+

client.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@
2222
from ui_events import UI_Events
2323
from socket_client import SocketClient
2424

25-
password = "My Secret Word!"
26-
host = '10.90.4.109'
27-
port = 80
28-
2925
class Communicate(QObject):
3026
""" Communication class """
3127

@@ -41,6 +37,7 @@ def __init__(self):
4137
QObject.__init__(self)
4238

4339
def load_settings():
40+
""" load settings from settings.json file """
4441
if os.path.exists('settings.json'):
4542
json_data = open('settings.json').read()
4643

@@ -92,15 +89,21 @@ def main():
9289
qt_ui.btn_disconnect.setVisible(False)
9390
qt_ui.actionDisconnect.setVisible(False)
9491

95-
qt_ui.statusbar.showMessage('Disconnected')
92+
qt_ui.lbl_sbar_conn.setStyleSheet('color: red')
93+
qt_ui.lbl_sbar_conn.setText('Disconnected')
94+
qt_ui.lbl_sbar_login.setText('')
95+
qt_ui.lbl_sbar_user_count.setText('0')
96+
qt_ui.statusbar.addPermanentWidget(qt_ui.lbl_sbar_conn, 2)
97+
qt_ui.statusbar.addPermanentWidget(qt_ui.lbl_sbar_login, 3)
98+
qt_ui.statusbar.addPermanentWidget(qt_ui.lbl_sbar_user_count, 7)
9699
qt_ui.txt_message.setReadOnly(True)
97100

98101
############################# SYSTEM TRAY ICON #############################
99102
icon = QIcon()
100103
icon.addPixmap(QPixmap(":/images/resources/images/chat_48x48.ico"), QIcon.Normal, QIcon.Off)
101104

102105
main_window.tray_icon = QSystemTrayIcon(main_window)
103-
main_window.tray_icon.setIcon(icon) #setIcon(main_window.style().standardIcon(QStyle.SP_ComputerIcon))
106+
main_window.tray_icon.setIcon(icon)
104107
main_window.tray_icon.activated.connect(events.sys_tray_icon_activated)
105108
# main_window.tray_icon.messageClicked.connect(main_window.show)
106109

@@ -126,8 +129,4 @@ def main():
126129
sys.exit(app.exec_())
127130

128131
if __name__ == '__main__':
129-
130-
if len(sys.argv) > 1:
131-
password = sys.argv[1]
132-
133132
main()

form_chat.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ def setupUi(self, ChatWindow):
3333
self.hLayout_send.addWidget(self.btn_send)
3434
self.verticalLayout.addLayout(self.hLayout_send)
3535
self.verticalLayout_2.addLayout(self.verticalLayout)
36+
self.lbl_sbar_conn = QtWidgets.QLabel(self.centralwidget)
37+
self.lbl_sbar_conn.setObjectName("lbl_sbar_conn")
38+
self.verticalLayout_2.addWidget(self.lbl_sbar_conn)
39+
self.lbl_sbar_login = QtWidgets.QLabel(self.centralwidget)
40+
self.lbl_sbar_login.setObjectName("lbl_sbar_login")
41+
self.verticalLayout_2.addWidget(self.lbl_sbar_login)
3642
ChatWindow.setCentralWidget(self.centralwidget)
3743
self.menubar = QtWidgets.QMenuBar(ChatWindow)
3844
self.menubar.setGeometry(QtCore.QRect(0, 0, 627, 21))
@@ -49,6 +55,8 @@ def retranslateUi(self, ChatWindow):
4955
_translate = QtCore.QCoreApplication.translate
5056
ChatWindow.setWindowTitle(_translate("ChatWindow", "Chat Window"))
5157
self.btn_send.setText(_translate("ChatWindow", "Send"))
58+
self.lbl_sbar_conn.setText(_translate("ChatWindow", "lbl_sbar_conn"))
59+
self.lbl_sbar_login.setText(_translate("ChatWindow", "lbl_sbar_login"))
5260

5361

5462
if __name__ == "__main__":

form_chat.ui

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,20 @@
4343
</item>
4444
</layout>
4545
</item>
46+
<item>
47+
<widget class="QLabel" name="lbl_sbar_conn">
48+
<property name="text">
49+
<string>lbl_sbar_conn</string>
50+
</property>
51+
</widget>
52+
</item>
53+
<item>
54+
<widget class="QLabel" name="lbl_sbar_login">
55+
<property name="text">
56+
<string>lbl_sbar_login</string>
57+
</property>
58+
</widget>
59+
</item>
4660
</layout>
4761
</widget>
4862
<widget class="QMenuBar" name="menubar">

form_main.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ def setupUi(self, SocketChat):
6767
self.gLayout_main.setColumnStretch(0, 20)
6868
self.gLayout_main.setColumnStretch(1, 80)
6969
self.verticalLayout.addLayout(self.gLayout_main)
70+
self.lbl_sbar_conn = QtWidgets.QLabel(self.centralwidget)
71+
self.lbl_sbar_conn.setObjectName("lbl_sbar_conn")
72+
self.verticalLayout.addWidget(self.lbl_sbar_conn)
73+
self.lbl_sbar_login = QtWidgets.QLabel(self.centralwidget)
74+
self.lbl_sbar_login.setObjectName("lbl_sbar_login")
75+
self.verticalLayout.addWidget(self.lbl_sbar_login)
76+
self.lbl_sbar_user_count = QtWidgets.QLabel(self.centralwidget)
77+
self.lbl_sbar_user_count.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
78+
self.lbl_sbar_user_count.setObjectName("lbl_sbar_user_count")
79+
self.verticalLayout.addWidget(self.lbl_sbar_user_count)
7080
SocketChat.setCentralWidget(self.centralwidget)
7181
self.menubar = QtWidgets.QMenuBar(SocketChat)
7282
self.menubar.setGeometry(QtCore.QRect(0, 0, 680, 21))
@@ -106,6 +116,9 @@ def retranslateUi(self, SocketChat):
106116
self.btn_connect.setText(_translate("SocketChat", "Connect"))
107117
self.btn_disconnect.setText(_translate("SocketChat", "Disconnect"))
108118
self.btn_send.setText(_translate("SocketChat", "Send"))
119+
self.lbl_sbar_conn.setText(_translate("SocketChat", "lbl_sbar_conn"))
120+
self.lbl_sbar_login.setText(_translate("SocketChat", "lbl_sbar_login"))
121+
self.lbl_sbar_user_count.setText(_translate("SocketChat", "lbl_sbar_user_count"))
109122
self.menuFile.setTitle(_translate("SocketChat", "File"))
110123
self.menuSettings.setTitle(_translate("SocketChat", "Settings"))
111124
self.actionClose.setText(_translate("SocketChat", "Close"))

form_main.ui

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<string>Socket Chat</string>
2121
</property>
2222
<property name="windowIcon">
23-
<iconset resource="resources.qrc">
23+
<iconset>
2424
<normaloff>:/images/resources/images/chat_48x48.ico</normaloff>:/images/resources/images/chat_48x48.ico</iconset>
2525
</property>
2626
<widget class="QWidget" name="centralwidget">
@@ -110,6 +110,30 @@
110110
</item>
111111
</layout>
112112
</item>
113+
<item>
114+
<widget class="QLabel" name="lbl_sbar_conn">
115+
<property name="text">
116+
<string>lbl_sbar_conn</string>
117+
</property>
118+
</widget>
119+
</item>
120+
<item>
121+
<widget class="QLabel" name="lbl_sbar_login">
122+
<property name="text">
123+
<string>lbl_sbar_login</string>
124+
</property>
125+
</widget>
126+
</item>
127+
<item>
128+
<widget class="QLabel" name="lbl_sbar_user_count">
129+
<property name="text">
130+
<string>lbl_sbar_user_count</string>
131+
</property>
132+
<property name="alignment">
133+
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
134+
</property>
135+
</widget>
136+
</item>
113137
</layout>
114138
</widget>
115139
<widget class="QMenuBar" name="menubar">

settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"settings": {"server": ["10.90.4.109", 80], "encryption": "My Secret Word!", "minimize": false}}
1+
{"settings": {"server": ["192.168.1.139", 80], "encryption": "My Secret Word!", "minimize": false}}

ui_events.py

Lines changed: 60 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ def txt_message_enter(self):
4444
def txt_username_enter(self):
4545
self.btn_connect_clicked()
4646

47+
def btn_pm_send_clicked(self, ui):
48+
message = ui.txt_message.text()
49+
self.client.talk(message, ui.username)
50+
ui.txt_message.setText('')
51+
4752
QtCore.pyqtSlot(str)
4853
def on_message(self, msg):
4954
self.ui.txt_chat.append(msg)
@@ -121,14 +126,21 @@ def on_user_list(self, obj):
121126
model.appendRow(item)
122127

123128
self.ui.lst_users.setModel(model)
129+
130+
self.ui.lbl_sbar_user_count.setText('{0}'.format(model.rowCount()))
124131

125132
QtCore.pyqtSlot()
126133
def on_connect(self):
127134
self.ui.btn_connect.setVisible(False)
128135
self.ui.actionConnect.setVisible(False)
129136
self.ui.actionDisconnect.setVisible(True)
130137
self.ui.btn_disconnect.setVisible(True)
131-
self.ui.statusbar.showMessage('Connected')
138+
self.ui.lbl_sbar_conn.setStyleSheet('color: green')
139+
self.ui.lbl_sbar_conn.setText('Connected')
140+
self.ui.lbl_sbar_login.setText('Logged as <b>{0}</b>'.format(self.client.username))
141+
142+
self.chat_windows_status(True)
143+
132144
self.ui.txt_message.setReadOnly(False)
133145
self.ui.txt_username.setReadOnly(True)
134146
self.ui.txt_message.setFocus()
@@ -139,7 +151,13 @@ def on_disconnect(self):
139151
self.ui.actionDisconnect.setVisible(False)
140152
self.ui.actionConnect.setVisible(True)
141153
self.ui.btn_connect.setVisible(True)
142-
self.ui.statusbar.showMessage('Disconnected')
154+
self.ui.lbl_sbar_conn.setStyleSheet('color: red')
155+
self.ui.lbl_sbar_conn.setText('Disconnected')
156+
self.ui.lbl_sbar_login.setText('')
157+
self.ui.lbl_sbar_user_count.setText('0')
158+
159+
self.chat_windows_status(False)
160+
143161
self.ui.txt_message.setReadOnly(True)
144162
self.ui.txt_username.setReadOnly(False)
145163
self.ui.txt_username.setFocus()
@@ -149,6 +167,19 @@ def on_clear_user_list(self):
149167
model = QStandardItemModel(self.ui.lst_users)
150168
self.ui.lst_users.setModel(model)
151169

170+
QtCore.pyqtSlot(str, str, str)
171+
def show_dialog_box(self, title, message, mb_type):
172+
if mb_type == 'c':
173+
QMessageBox.critical(self.window, title, message)
174+
elif mb_type == 'i':
175+
QMessageBox.information(self.window, title, message)
176+
elif mb_type == 'q':
177+
QMessageBox.question(self.window, title, message)
178+
elif mb_type == 'w':
179+
QMessageBox.warning(self.window, title, message)
180+
else:
181+
QMessageBox.information(self.window, title, message)
182+
152183
def on_close(self):
153184
self.app.closeAllWindows()
154185

@@ -178,24 +209,6 @@ def appQuitEvent(self):
178209
self.client.stop()
179210
self.app.quit()
180211

181-
QtCore.pyqtSlot(str, str, str)
182-
def show_dialog_box(self, title, message, mb_type):
183-
if mb_type == 'c':
184-
QMessageBox.critical(self.window, title, message)
185-
elif mb_type == 'i':
186-
QMessageBox.information(self.window, title, message)
187-
elif mb_type == 'q':
188-
QMessageBox.question(self.window, title, message)
189-
elif mb_type == 'w':
190-
QMessageBox.warning(self.window, title, message)
191-
else:
192-
QMessageBox.information(self.window, title, message)
193-
194-
def pm_btn_send_clicked(self, ui):
195-
message = ui.txt_message.text()
196-
self.client.talk(message, ui.username)
197-
ui.txt_message.setText('')
198-
199212
def create_chat_window(self, username):
200213
if not hasattr(self.ui, 'windows'):
201214
self.ui.windows = dict()
@@ -212,14 +225,19 @@ def create_chat_window(self, username):
212225
tmp_ui.setupUi(tmp_window)
213226
tmp_ui.username = username
214227

215-
tmp_ui.btn_send.clicked.connect(partial(self.pm_btn_send_clicked, tmp_ui))
216-
tmp_ui.txt_message.returnPressed.connect(partial(self.pm_btn_send_clicked, tmp_ui))
228+
tmp_ui.btn_send.clicked.connect(partial(self.btn_pm_send_clicked, tmp_ui))
229+
tmp_ui.txt_message.returnPressed.connect(partial(self.btn_pm_send_clicked, tmp_ui))
230+
231+
tmp_ui.statusbar.addPermanentWidget(tmp_ui.lbl_sbar_conn, 2)
232+
tmp_ui.statusbar.addPermanentWidget(tmp_ui.lbl_sbar_login, 8)
217233

218234
tmp_window.setWindowIcon(icon)
219235
tmp_window.setWindowTitle('{} - Chat'.format(username))
220236

221237
self.ui.windows['chat'][username] = [tmp_window, tmp_ui]
222238

239+
self.chat_windows_status(True)
240+
223241
def lst_users_double_clicked(self, item: QModelIndex):
224242
username = item.data()
225243

@@ -239,12 +257,6 @@ def lst_users_double_clicked(self, item: QModelIndex):
239257
msg = self.client.user_chat_queue[username].get()
240258
print(msg)
241259
self.ui.windows['chat'][username][1].txt_chat.append(msg)
242-
243-
def sys_tray_icon_activated(self, reason):
244-
if reason == QSystemTrayIcon.DoubleClick:
245-
self.window.tray_icon.contextMenu().exec_(QCursor().pos())
246-
elif reason == QSystemTrayIcon.Trigger:
247-
self.window.show()
248260

249261
def load_settings_form(self):
250262
ui = self.ui.windows['settings'][1]
@@ -293,3 +305,23 @@ def open_preferences(self):
293305

294306
self.load_settings_form()
295307
self.ui.windows['settings'][0].show()
308+
309+
def sys_tray_icon_activated(self, reason):
310+
if reason == QSystemTrayIcon.DoubleClick:
311+
self.window.tray_icon.contextMenu().exec_(QCursor().pos())
312+
elif reason == QSystemTrayIcon.Trigger:
313+
self.window.show()
314+
315+
def chat_windows_status(self, status):
316+
if status:
317+
if hasattr(self.ui, 'windows') and 'chat' in self.ui.windows:
318+
for key, val in self.ui.windows['chat'].items():
319+
val[1].lbl_sbar_conn.setStyleSheet('color: green')
320+
val[1].lbl_sbar_conn.setText('Connected')
321+
val[1].lbl_sbar_login.setText('Logged as <b>{0}</b>'.format(self.client.username))
322+
else:
323+
if hasattr(self.ui, 'windows') and 'chat' in self.ui.windows:
324+
for key, val in self.ui.windows['chat'].items():
325+
val[1].lbl_sbar_conn.setStyleSheet('color: red')
326+
val[1].lbl_sbar_conn.setText('Disconnected')
327+
val[1].lbl_sbar_login.setText('')

0 commit comments

Comments
 (0)