Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 76.65 KB | None | 0 0
  1. from PyQt5 import QtCore, QtGui, QtWidgets
  2. from functools import partial
  3. import time
  4. import re
  5. import socket
  6. import select
  7. import errno
  8. import sys
  9. import threading
  10. import queue
  11. from PyQt5 import QtCore, QtGui, QtWidgets
  12. from PyQt5.QtWidgets import QMainWindow
  13. from PyQt5.QtCore import QEvent
  14. import ipaddress
  15. import pickle
  16.  
  17.  
  18. #St (hover) = "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:1 rgba(209, 229, 241, 255));"
  19. #St (click) = "background-color: qlineargradient(spread:pad, x1:0.318, y1:0.363636, x2:1, y2:0, stop:1 rgba(160, 199, 228, 255));"
  20.  
  21. # QLabel_alterada = custom class for clickcable labels
  22.  
  23. class Ui_createRoomWindow(QMainWindow):
  24.  
  25.     def sendInfo(self, private, roomName, roomDesc):
  26.         global info_socket
  27.         HEADER_LENGTH = 10
  28.  
  29.         roomName = roomName
  30.         roomDesc = roomDesc
  31.         people = ["People"]
  32.         server = "Server"
  33.         private = private
  34.  
  35.         IP = ""
  36.         chatPORT = 4040
  37.         roomInfoPort = 4041
  38.  
  39.         server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  40.         server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  41.         server_socket.bind((IP, chatPORT))
  42.         server_socket.listen()
  43.  
  44.         info_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  45.         info_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  46.         info_socket.bind((IP, roomInfoPort))
  47.         info_socket.listen()
  48.  
  49.         sockets_list = [server_socket]
  50.         clients = {}
  51.         threadedRoom = threading.Thread(target=roomInfo, args=(roomName, roomDesc, people, server, private),
  52.                                         daemon=True)
  53.         threadedRoom.start()
  54.  
  55.         print(f'Listening for connections on {IP}:{chatPORT}...')
  56.  
  57.         def receive_message(client_socket):
  58.             try:
  59.                 message_header = client_socket.recv(HEADER_LENGTH)
  60.                 if not len(message_header):
  61.                     return False
  62.                 message_length = int(message_header.decode('utf-8').strip())
  63.                 return {'header': message_header, 'data': client_socket.recv(message_length)}
  64.             except:
  65.                 return False
  66.  
  67.         while True:
  68.             read_sockets, _, exception_sockets = select.select(sockets_list, [], sockets_list)
  69.  
  70.             # Iterate over notified sockets
  71.             for notified_socket in read_sockets:
  72.  
  73.                 if notified_socket == server_socket:
  74.  
  75.                     client_socket, client_address = server_socket.accept()
  76.  
  77.                     user = receive_message(client_socket)
  78.  
  79.                     if user is False:
  80.                         continue
  81.  
  82.                     sockets_list.append(client_socket)
  83.  
  84.                     clients[client_socket] = user
  85.  
  86.                     print('Accepted new connection from {}:{}, username: {}'.format(*client_address,
  87.                                                                                     user['data'].decode('utf-8')))
  88.  
  89.                 else:
  90.  
  91.                     message = receive_message(notified_socket)
  92.  
  93.                     if message is False:
  94.                         print('Closed connection from: {}'.format(clients[notified_socket]['data'].decode('utf-8')))
  95.  
  96.                         sockets_list.remove(notified_socket)
  97.  
  98.                         del clients[notified_socket]
  99.  
  100.                         continue
  101.  
  102.                     user = clients[notified_socket]
  103.  
  104.                     print(f'Received message from {user["data"].decode("utf-8")}: {message["data"].decode("utf-8")}')
  105.  
  106.                     for client_socket in clients:
  107.  
  108.                         if client_socket != notified_socket:
  109.                             client_socket.send(user['header'] + user['data'] + message['header'] + message['data'])
  110.  
  111.             for notified_socket in exception_sockets:
  112.                 sockets_list.remove(notified_socket)
  113.  
  114.                 del clients[notified_socket]
  115.  
  116.  
  117.     def makeRoom(self):
  118.         MainWindow.hide()
  119.         if self.checkNo.isChecked() and self.checkYes.isChecked():
  120.             private = "unChecked"
  121.         elif self.checkNo.isChecked():
  122.             private = "no"
  123.         elif self.checkYes.isChecked():
  124.             private = "yes"
  125.         else:
  126.             private = "unChecked"
  127.         if private == "unChecked":
  128.             msg = QtWidgets.QMessageBox()
  129.             msg.setIcon(QtWidgets.QMessageBox.Critical)
  130.             msg.setText("Error")
  131.             msg.setInformativeText('Please check an option')
  132.             msg.setWindowTitle("Error")
  133.             msg.exec_()
  134.         else:
  135.             pass
  136.         roomName = self.roomNameWrite.text()
  137.         roomDesc = self.roomDescWrite.toPlainText()
  138.         if roomName == "":
  139.             msg = QtWidgets.QMessageBox()
  140.             msg.setIcon(QtWidgets.QMessageBox.Critical)
  141.             msg.setText("Error")
  142.             msg.setInformativeText('Please enter a room name')
  143.             msg.setWindowTitle("Error")
  144.             msg.exec_()
  145.  
  146.         if roomDesc == "":
  147.             msg = QtWidgets.QMessageBox()
  148.             msg.setIcon(QtWidgets.QMessageBox.Critical)
  149.             msg.setText("Error")
  150.             msg.setInformativeText('Please enter a room description')
  151.             msg.setWindowTitle("Error")
  152.             msg.exec_()
  153.  
  154.         currentRoom = threading.Thread(target=self.sendInfo, args=(private,roomName,roomDesc))
  155.         currentRoom.start()
  156.  
  157.  
  158.  
  159.     def setupUi(self, createRoomWindow):
  160.         createRoomWindow.setObjectName("createRoomWindow")
  161.         createRoomWindow.resize(350, 400)
  162.         createRoomWindow.setMinimumSize(QtCore.QSize(350, 400))
  163.         createRoomWindow.setMaximumSize(QtCore.QSize(350, 400))
  164.         self.centralwidget = QtWidgets.QWidget(createRoomWindow)
  165.         self.centralwidget.setObjectName("centralwidget")
  166.         self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
  167.         self.gridLayout_2.setObjectName("gridLayout_2")
  168.         self.titleLabel = QtWidgets.QLabel(self.centralwidget)
  169.         self.titleLabel.setMaximumSize(QtCore.QSize(16777215, 30))
  170.         font = QtGui.QFont()
  171.         font.setPointSize(10)
  172.         font.setBold(True)
  173.         font.setWeight(75)
  174.         self.titleLabel.setFont(font)
  175.         self.titleLabel.setAlignment(QtCore.Qt.AlignCenter)
  176.         self.titleLabel.setObjectName("titleLabel")
  177.         self.gridLayout_2.addWidget(self.titleLabel, 0, 0, 1, 1)
  178.         self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
  179.         self.groupBox.setTitle("")
  180.         self.groupBox.setObjectName("groupBox")
  181.         self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
  182.         self.gridLayout.setObjectName("gridLayout")
  183.         self.checkNo = QtWidgets.QCheckBox(self.groupBox)
  184.         self.checkNo.setMinimumSize(QtCore.QSize(150, 0))
  185.         self.checkNo.setObjectName("checkNo")
  186.         self.gridLayout.addWidget(self.checkNo, 2, 2, 1, 1)
  187.         self.roomNameLabel = QtWidgets.QLabel(self.groupBox)
  188.         self.roomNameLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
  189.         self.roomNameLabel.setObjectName("roomNameLabel")
  190.         self.gridLayout.addWidget(self.roomNameLabel, 0, 0, 1, 1)
  191.         self.checkYes = QtWidgets.QCheckBox(self.groupBox)
  192.         self.checkYes.setMaximumSize(QtCore.QSize(70, 17))
  193.         self.checkYes.setObjectName("checkYes")
  194.         self.gridLayout.addWidget(self.checkYes, 2, 1, 1, 1)
  195.         self.roomNameWrite = QtWidgets.QLineEdit(self.groupBox)
  196.         self.roomNameWrite.setMinimumSize(QtCore.QSize(223, 20))
  197.         self.roomNameWrite.setObjectName("roomNameWrite")
  198.         self.gridLayout.addWidget(self.roomNameWrite, 0, 1, 1, 1)
  199.         self.roomDescWrite = QtWidgets.QTextEdit(self.groupBox)
  200.         self.roomDescWrite.setMinimumSize(QtCore.QSize(223, 80))
  201.         self.roomDescWrite.setMaximumSize(QtCore.QSize(16777215, 80))
  202.         self.roomDescWrite.setObjectName("roomDescWrite")
  203.         self.gridLayout.addWidget(self.roomDescWrite, 1, 1, 1, 1)
  204.         self.prRoomLabel = QtWidgets.QLabel(self.groupBox)
  205.         self.prRoomLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
  206.         self.prRoomLabel.setObjectName("prRoomLabel")
  207.         self.gridLayout.addWidget(self.prRoomLabel, 2, 0, 1, 1)
  208.         self.roomDescLabel = QtWidgets.QLabel(self.groupBox)
  209.         self.roomDescLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
  210.         self.roomDescLabel.setObjectName("roomDescLabel")
  211.         self.gridLayout.addWidget(self.roomDescLabel, 1, 0, 1, 1)
  212.         self.gridLayout_2.addWidget(self.groupBox, 1, 0, 1, 1)
  213.         self.createRoomButton = QtWidgets.QPushButton(self.centralwidget)
  214.         self.createRoomButton.setObjectName("createRoomButton")
  215.         self.gridLayout_2.addWidget(self.createRoomButton, 2, 0, 1, 1)
  216.         self.cancel = QtWidgets.QPushButton(self.centralwidget)
  217.         self.cancel.setObjectName("cancel")
  218.         self.gridLayout_2.addWidget(self.cancel, 3, 0, 1, 1)
  219.         createRoomWindow.setCentralWidget(self.centralwidget)
  220.         self.menubar = QtWidgets.QMenuBar(createRoomWindow)
  221.         self.menubar.setGeometry(QtCore.QRect(0, 0, 350, 21))
  222.         self.menubar.setObjectName("menubar")
  223.         createRoomWindow.setMenuBar(self.menubar)
  224.         self.statusbar = QtWidgets.QStatusBar(createRoomWindow)
  225.         self.statusbar.setObjectName("statusbar")
  226.         createRoomWindow.setStatusBar(self.statusbar)
  227.  
  228.         self.retranslateUi(createRoomWindow)
  229.         QtCore.QMetaObject.connectSlotsByName(createRoomWindow)
  230.         self.createRoomButton.clicked.connect(self.makeRoom)
  231.         self.cancel.clicked.connect(lambda: self.cancelBtn(createRoomWindow))
  232.  
  233.     def cancelBtn(self, createRoomWindow):
  234.         createRoomWindow.hide()
  235.         MainWindow.show()
  236.  
  237.     def retranslateUi(self, createRoomWindow):
  238.         _translate = QtCore.QCoreApplication.translate
  239.         createRoomWindow.setWindowTitle(_translate("createRoomWindow", "Create Room"))
  240.         self.titleLabel.setText(_translate("createRoomWindow", "Create A Room"))
  241.         self.checkNo.setText(_translate("createRoomWindow", "No"))
  242.         self.roomNameLabel.setText(_translate("createRoomWindow", "Room Name"))
  243.         self.checkYes.setText(_translate("createRoomWindow", "Yes"))
  244.         self.prRoomLabel.setText(_translate("createRoomWindow", "Private Room"))
  245.         self.roomDescLabel.setText(_translate("createRoomWindow", "Room Description"))
  246.         self.createRoomButton.setText(_translate("createRoomWindow", "Create Room"))
  247.         self.cancel.setText(_translate("cancel", "Back To Menu"))
  248.  
  249.  
  250. def getRoomInfo(ipAddresses):
  251.     global listPropreties
  252.     global listNames
  253.     listNames = []
  254.     listPropreties = []
  255.     time.sleep(1)
  256.     global noIp
  257.     while True:
  258.         if noIp:
  259.             break
  260.         else:
  261.             IP = str(ipAddresses.get())
  262.             PORT = 4041
  263.             HEADER_LENGHT = 10
  264.             client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  265.             client_socket.connect((IP, PORT))
  266.  
  267.  
  268.             finalMessage = b''
  269.             new_msg = True
  270.             while True:
  271.                 msgConstruct = client_socket.recv(16)
  272.                 if msgConstruct:
  273.                     if new_msg:
  274.                         msglen = int(msgConstruct[:HEADER_LENGHT])
  275.                         new_msg = False
  276.                     finalMessage += msgConstruct
  277.                     if len(finalMessage) - HEADER_LENGHT == msglen:
  278.                         propreties = pickle.loads(finalMessage[HEADER_LENGHT:])
  279.                         listPropreties.append(propreties)
  280.                         print(propreties)
  281.                         print(propreties["people"])
  282.                         full_msg = b""
  283.                         if ipAddresses.empty():
  284.                             for dict in listPropreties:
  285.                                 listNames.append(dict["roomName"])
  286.  
  287.                             return 0
  288.                         else:
  289.                             pass
  290.                 else:
  291.                     break
  292.  
  293.  
  294.  
  295. def roomInfo(roomName, roomDesc, people, server, private):
  296.     global info_socket
  297.     HEADER_LENGHT = 10
  298.     properties = {"roomName":roomName,"roomDesc":roomDesc,"people":people,"server":server,"private":private}
  299.     packet = pickle.dumps(properties)
  300.     msg = bytes(f"{len(packet):<{HEADER_LENGHT}}", 'utf-8') + packet
  301.     while True:
  302.         info_sock, info_address = info_socket.accept()
  303.         print("{}".format(info_address))
  304.         info_sock.send(msg)
  305.         info_sock.close()
  306.  
  307.  
  308. def checkRoomsOnline(ipAddresses):
  309.     def portscan(ip):
  310.         global noIp
  311.         noIp = False
  312.         port = 4040
  313.         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  314.         s.settimeout(0.5)#
  315.  
  316.         try:
  317.             con = s.connect((str(ip),port))
  318.             ipAddresses.put(ip)
  319.             print('Port :',str(ip),"is open.")
  320.  
  321.             con.close()
  322.         except:
  323.             pass
  324.  
  325.     for x in ipaddress.ip_network('192.168.0.0/24'):
  326.  
  327.         t = threading.Thread(target=portscan,kwargs={'ip':str(x)})
  328.  
  329.  
  330.         t.start()
  331.     if ipAddresses.empty():
  332.         global noIp
  333.         print("set")
  334.         noIp = True
  335.     return 0
  336.  
  337.  
  338. class QLabel_alterada(QtWidgets.QLabel):
  339.     clicked = QtCore.pyqtSignal(str)
  340.  
  341.     def __init__(self, parent=None):
  342.         super(QLabel_alterada, self).__init__(parent)
  343.  
  344.     def mousePressEvent(self, event):
  345.         self.ultimo = "Single"
  346.  
  347.     def mouseReleaseEvent(self, event):
  348.         if self.ultimo == "Single":
  349.             QtCore.QTimer.singleShot(QtWidgets.QApplication.instance().doubleClickInterval(),
  350.                               self.performSingleClickAction)
  351.         else:
  352.             self.clicked.emit(self.ultimo)
  353.  
  354.     def mouseDoubleClickEvent(self, event):
  355.         self.ultimo = "Double"
  356.  
  357.     def performSingleClickAction(self):
  358.         if self.ultimo == "Single":
  359.             self.clicked.emit(self.ultimo)
  360.  
  361. # Ip address prompt Window
  362.  
  363. class Ui_IpAddressCheck(QtWidgets.QMainWindow):
  364.     def setupUi(self, IpAddressCheck):
  365.         IpAddressCheck.setObjectName("IpAddressCheck")
  366.         IpAddressCheck.resize(250, 100)
  367.         IpAddressCheck.setMinimumSize(QtCore.QSize(250, 0))
  368.         IpAddressCheck.setMaximumSize(QtCore.QSize(250, 100))
  369.         self.centralwidget = QtWidgets.QWidget(IpAddressCheck)
  370.         self.centralwidget.setObjectName("centralwidget")
  371.         self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
  372.         self.gridLayout.setObjectName("gridLayout")
  373.         self.ipAddress = QtWidgets.QLineEdit(self.centralwidget)
  374.         self.ipAddress.setObjectName("ipAddress")
  375.         self.gridLayout.addWidget(self.ipAddress, 1, 1, 1, 1)
  376.         self.ipAddressLabel = QtWidgets.QLabel(self.centralwidget)
  377.         self.ipAddressLabel.setObjectName("ipAddressLabel")
  378.         self.gridLayout.addWidget(self.ipAddressLabel, 1, 0, 1, 1)
  379.         IpAddressCheck.setCentralWidget(self.centralwidget)
  380.         self.menubar = QtWidgets.QMenuBar(IpAddressCheck)
  381.         self.menubar.setGeometry(QtCore.QRect(0, 0, 250, 21))
  382.         self.menubar.setObjectName("menubar")
  383.         IpAddressCheck.setMenuBar(self.menubar)
  384.         self.statusbar = QtWidgets.QStatusBar(IpAddressCheck)
  385.         self.statusbar.setObjectName("statusbar")
  386.         IpAddressCheck.setStatusBar(self.statusbar)
  387.  
  388.         self.retranslateUi(IpAddressCheck)
  389.         QtCore.QMetaObject.connectSlotsByName(IpAddressCheck)
  390.         self.ipAddress.returnPressed.connect(self.tryToConnect)
  391.  
  392.     def retranslateUi(self, IpAddressCheck):
  393.         _translate = QtCore.QCoreApplication.translate
  394.         IpAddressCheck.setWindowTitle(_translate("IpAddressCheck", "MainWindow"))
  395.         self.ipAddressLabel.setText(_translate("IpAddressCheck", "Ip to connect to"))
  396.  
  397. # Chat Window
  398.  
  399. class Ui_chatWindow(object):
  400.     def setupUi(self, chatWindow):
  401.         chatWindow.setObjectName("chatWindow")
  402.         chatWindow.resize(500, 600)
  403.         chatWindow.setMinimumSize(QtCore.QSize(500, 600))
  404.         chatWindow.setMaximumSize(QtCore.QSize(500, 600))
  405.         self.centralwidget = QtWidgets.QWidget(chatWindow)
  406.         self.centralwidget.setObjectName("centralwidget")
  407.         self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
  408.         self.gridLayout.setObjectName("gridLayout")
  409.         self.mainChatEdit = QtWidgets.QTextEdit(self.centralwidget)
  410.         font = QtGui.QFont()
  411.         font.setPointSize(6)
  412.         self.mainChatEdit.setFont(font)
  413.         self.mainChatEdit.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ArrowCursor))
  414.         self.mainChatEdit.setStyleSheet("")
  415.         self.mainChatEdit.setFrameShadow(QtWidgets.QFrame.Sunken)
  416.         self.mainChatEdit.setReadOnly(True)
  417.         self.mainChatEdit.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
  418.         self.mainChatEdit.setObjectName("mainChatEdit")
  419.         self.gridLayout.addWidget(self.mainChatEdit, 1, 0, 1, 1)
  420.         self.sendMsg = QtWidgets.QLineEdit(self.centralwidget)
  421.         self.sendMsg.setObjectName("sendMsg")
  422.         self.gridLayout.addWidget(self.sendMsg, 2, 0, 1, 1)
  423.         self.connectedTo = QtWidgets.QLabel(self.centralwidget)
  424.         font = QtGui.QFont()
  425.         font.setBold(True)
  426.         font.setWeight(75)
  427.         self.connectedTo.setFont(font)
  428.         self.connectedTo.setAlignment(QtCore.Qt.AlignCenter)
  429.         self.connectedTo.setObjectName("connectedTo")
  430.         self.gridLayout.addWidget(self.connectedTo, 0, 0, 1, 1)
  431.         chatWindow.setCentralWidget(self.centralwidget)
  432.         self.menubar = QtWidgets.QMenuBar(chatWindow)
  433.         self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 21))
  434.         self.menubar.setObjectName("menubar")
  435.         chatWindow.setMenuBar(self.menubar)
  436.         self.statusbar = QtWidgets.QStatusBar(chatWindow)
  437.         self.statusbar.setObjectName("statusbar")
  438.         chatWindow.setStatusBar(self.statusbar)
  439.  
  440.         self.retranslateUi(chatWindow)
  441.         QtCore.QMetaObject.connectSlotsByName(chatWindow)
  442.         self.userName = "GinTora"
  443.         self.outPutText = ""
  444.         self.sendMsg.returnPressed.connect(self.sendMessage)
  445.         self.timer = QtCore.QTimer()
  446.         self.timer.timeout.connect(self.checkForMessage)
  447.         self.timer.start(1000)
  448.  
  449.     def sendMessage(self):
  450.         global sendMsg
  451.  
  452.         msgToOutput = self.sendMsg.text()
  453.         sendMsg.put(self.sendMsg.text())
  454.         self.sendMsg.clear()
  455.         chatText = "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt;\">{}: {}</span></p>\n".format("Kyand",msgToOutput)
  456.         self.outPutText += chatText
  457.         _translate = QtCore.QCoreApplication.translate
  458.         chatWindow.setWindowTitle(_translate("chatWindow", "MainWindow"))
  459.         self.mainChatEdit.setHtml(_translate("chatWindow", """
  460.  
  461.                           <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n
  462.                           <html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n
  463.                           p, li {{ white-space: pre-wrap; }}\n
  464.                           </style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:6pt; font-weight:400; font-style:normal;\">\n
  465.                           {}</html>
  466.  
  467.                                   """.format(self.outPutText)))
  468.  
  469.     def checkForMessage(self):
  470.         global msg
  471.         global user
  472.  
  473.         if msg.empty():
  474.             pass
  475.         else:
  476.             userOutput = user.get()
  477.             msgOutput = msg.get()
  478.             chatText = "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt;\">{}: {}</span></p>\n".format(userOutput,msgOutput)
  479.             self.outPutText += chatText
  480.             _translate = QtCore.QCoreApplication.translate
  481.             chatWindow.setWindowTitle(_translate("chatWindow", "MainWindow"))
  482.             self.mainChatEdit.setHtml(_translate("chatWindow", """
  483.  
  484.                    <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n
  485.                    <html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n
  486.                    p, li {{ white-space: pre-wrap; }}\n
  487.                    </style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:6pt; font-weight:400; font-style:normal;\">\n
  488.                    {}</html>
  489.  
  490.                            """.format(self.outPutText)))
  491.  
  492.     def retranslateUi(self, chatWindow):
  493.         _translate = QtCore.QCoreApplication.translate
  494.         chatWindow.setWindowTitle(_translate("chatWindow", "MainWindow"))
  495.         self.mainChatEdit.setHtml(_translate("chatWindow", """
  496.  
  497. <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n
  498. <html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n
  499. p, li { white-space: pre-wrap; }\n
  500. </style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:6pt; font-weight:400; font-style:normal;\">\n
  501. </html>
  502.  
  503.        """))
  504.         self.connectedTo.setText(_translate("chatWindow", "Connected to "))
  505.  
  506.  
  507.  
  508. # Room Description Window
  509.  
  510. class Ui_roomDescription(object):
  511.     def __init__(self):
  512.         global listPropreties
  513.         self.listPropreties = listPropreties
  514.  
  515.     def getProp(self, name):
  516.         for dict in self.listPropreties:
  517.             if dict["roomName"] == name:
  518.                 print(dict)
  519.             else:
  520.                 pass
  521.     def setupUi(self, roomDescription, name, dictDescription, dictPeople, dictServer):
  522.         roomDescription.setObjectName("roomDescription")
  523.         roomDescription.resize(500, 250)
  524.         roomDescription.setMinimumSize(QtCore.QSize(0, 250))
  525.         roomDescription.setMaximumSize(QtCore.QSize(500, 250))
  526.         self.centralwidget = QtWidgets.QWidget(roomDescription)
  527.         self.centralwidget.setObjectName("centralwidget")
  528.         self.gridLayout_4 = QtWidgets.QGridLayout(self.centralwidget)
  529.         self.gridLayout_4.setObjectName("gridLayout_4")
  530.         self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
  531.         self.groupBox_2.setTitle("")
  532.         self.groupBox_2.setObjectName("groupBox_2")
  533.         self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_2)
  534.         self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
  535.         self.gridLayout_2.setObjectName("gridLayout_2")
  536.         self.peopleDesc = QtWidgets.QLabel(self.groupBox_2)
  537.         self.peopleDesc.setMinimumSize(QtCore.QSize(70, 0))
  538.         self.peopleDesc.setMaximumSize(QtCore.QSize(60, 16777215))
  539.         font = QtGui.QFont()
  540.         font.setBold(True)
  541.         font.setWeight(75)
  542.         self.peopleDesc.setFont(font)
  543.         self.peopleDesc.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
  544.         self.peopleDesc.setObjectName("peopleDesc")
  545.         self.gridLayout_2.addWidget(self.peopleDesc, 0, 0, 1, 1)
  546.         self.peopleDescField = QtWidgets.QLabel(self.groupBox_2)
  547.         self.peopleDescField.setMinimumSize(QtCore.QSize(0, 30))
  548.         self.peopleDescField.setFrameShape(QtWidgets.QFrame.StyledPanel)
  549.         self.peopleDescField.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
  550.         self.peopleDescField.setObjectName("peopleDescField")
  551.         self.gridLayout_2.addWidget(self.peopleDescField, 0, 1, 1, 1)
  552.         self.gridLayout_4.addWidget(self.groupBox_2, 1, 0, 1, 1)
  553.         self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
  554.         font = QtGui.QFont()
  555.         font.setPointSize(9)
  556.         self.groupBox.setFont(font)
  557.         self.groupBox.setTitle("")
  558.         self.groupBox.setObjectName("groupBox")
  559.         self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox)
  560.         self.gridLayout_5.setContentsMargins(0, 0, 0, 0)
  561.         self.gridLayout_5.setObjectName("gridLayout_5")
  562.         self.serverDesc = QtWidgets.QLabel(self.groupBox)
  563.         self.serverDesc.setMinimumSize(QtCore.QSize(70, 0))
  564.         self.serverDesc.setMaximumSize(QtCore.QSize(60, 16777215))
  565.         font = QtGui.QFont()
  566.         font.setPointSize(9)
  567.         font.setBold(True)
  568.         font.setWeight(75)
  569.         self.serverDesc.setFont(font)
  570.         self.serverDesc.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
  571.         self.serverDesc.setObjectName("serverDesc")
  572.         self.gridLayout_5.addWidget(self.serverDesc, 0, 0, 1, 1)
  573.         self.serverDescField = QtWidgets.QLabel(self.groupBox)
  574.         self.serverDescField.setMinimumSize(QtCore.QSize(0, 30))
  575.         font = QtGui.QFont()
  576.         font.setPointSize(8)
  577.         self.serverDescField.setFont(font)
  578.         self.serverDescField.setFrameShape(QtWidgets.QFrame.StyledPanel)
  579.         self.serverDescField.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
  580.         self.serverDescField.setObjectName("serverDescField")
  581.         self.gridLayout_5.addWidget(self.serverDescField, 0, 1, 1, 1)
  582.         self.gridLayout_4.addWidget(self.groupBox, 2, 0, 1, 1)
  583.         self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
  584.         self.groupBox_3.setTitle("")
  585.         self.groupBox_3.setObjectName("groupBox_3")
  586.         self.gridLayout = QtWidgets.QGridLayout(self.groupBox_3)
  587.         self.gridLayout.setContentsMargins(0, 0, 0, 0)
  588.         self.gridLayout.setObjectName("gridLayout")
  589.         self.descriptionDesc = QtWidgets.QLabel(self.groupBox_3)
  590.         self.descriptionDesc.setMinimumSize(QtCore.QSize(70, 60))
  591.         self.descriptionDesc.setMaximumSize(QtCore.QSize(60, 60))
  592.         font = QtGui.QFont()
  593.         font.setPointSize(9)
  594.         font.setBold(True)
  595.         font.setWeight(75)
  596.         self.descriptionDesc.setFont(font)
  597.         self.descriptionDesc.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
  598.         self.descriptionDesc.setObjectName("descriptionDesc")
  599.         self.gridLayout.addWidget(self.descriptionDesc, 0, 0, 1, 1)
  600.         self.descriptionDescField = QtWidgets.QLabel(self.groupBox_3)
  601.         self.descriptionDescField.setFrameShape(QtWidgets.QFrame.StyledPanel)
  602.         self.descriptionDescField.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
  603.         self.descriptionDescField.setObjectName("descriptionDescField")
  604.         self.gridLayout.addWidget(self.descriptionDescField, 0, 1, 1, 1)
  605.         self.gridLayout_4.addWidget(self.groupBox_3, 0, 0, 1, 1)
  606.         roomDescription.setCentralWidget(self.centralwidget)
  607.         self.menubar = QtWidgets.QMenuBar(roomDescription)
  608.         self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 21))
  609.         self.menubar.setObjectName("menubar")
  610.         roomDescription.setMenuBar(self.menubar)
  611.         self.statusbar = QtWidgets.QStatusBar(roomDescription)
  612.         self.statusbar.setObjectName("statusbar")
  613.         roomDescription.setStatusBar(self.statusbar)
  614.  
  615.         self.retranslateUi(roomDescription, name, dictDescription, dictPeople, dictServer)
  616.         QtCore.QMetaObject.connectSlotsByName(roomDescription)
  617.         self.getProp(name)
  618.  
  619.     def retranslateUi(self, roomDescription, name, dictDescription, dictPeople, dictServer):
  620.         _translate = QtCore.QCoreApplication.translate
  621.         roomDescription.setWindowTitle(_translate("roomDescription", "{} Description".format(name)))
  622.         self.peopleDesc.setText(_translate("roomDescription", "People"))
  623.         self.peopleDescField.setText(_translate("roomDescription", dictPeople[name]))
  624.         self.serverDesc.setText(_translate("roomDescription", "Server"))
  625.         self.serverDescField.setText(_translate("roomDescription", dictServer[name]))
  626.         self.descriptionDesc.setText(_translate("roomDescription", "Description"))
  627.         self.descriptionDescField.setText(_translate("roomDescription", dictDescription[name]))
  628.  
  629.  
  630.  
  631. # Private Room Password prompt pop up
  632.  
  633. class Ui_pRoom(object):
  634.     def setupUi(self, pRoom, name):
  635.         pRoom.setObjectName("pRoom")
  636.         pRoom.resize(400, 150)
  637.         pRoom.setMinimumSize(QtCore.QSize(400, 150))
  638.         pRoom.setMaximumSize(QtCore.QSize(400, 150))
  639.         self.centralwidget = QtWidgets.QWidget(pRoom)
  640.         self.centralwidget.setObjectName("centralwidget")
  641.         self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
  642.         self.gridLayout.setObjectName("gridLayout")
  643.         self.pswd = QtWidgets.QLabel(self.centralwidget)
  644.         self.pswd.setObjectName("pswd")
  645.         self.gridLayout.addWidget(self.pswd, 1, 0, 1, 1)
  646.         self.pRoomPass = QtWidgets.QLineEdit(self.centralwidget)
  647.         self.pRoomPass.setInputMask("")
  648.         self.pRoomPass.setEchoMode(QtWidgets.QLineEdit.Password)
  649.         self.pRoomPass.setObjectName("pRoomPass")
  650.         self.gridLayout.addWidget(self.pRoomPass, 1, 1, 1, 1)
  651.         self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
  652.         self.groupBox.setTitle("")
  653.         self.groupBox.setFlat(True)
  654.         self.groupBox.setObjectName("groupBox")
  655.         self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox)
  656.         self.gridLayout_3.setObjectName("gridLayout_3")
  657.         self.gridLayout_2 = QtWidgets.QGridLayout()
  658.         self.gridLayout_2.setObjectName("gridLayout_2")
  659.         self.enteringPRoom = QtWidgets.QLabel(self.groupBox)
  660.         font = QtGui.QFont()
  661.         font.setPointSize(12)
  662.         font.setBold(True)
  663.         font.setWeight(75)
  664.         self.enteringPRoom.setFont(font)
  665.         self.enteringPRoom.setAlignment(QtCore.Qt.AlignCenter)
  666.         self.enteringPRoom.setObjectName("enteringPRoom")
  667.         self.gridLayout_2.addWidget(self.enteringPRoom, 0, 0, 1, 1)
  668.         self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 1)
  669.         self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 2)
  670.         pRoom.setCentralWidget(self.centralwidget)
  671.         self.menubar = QtWidgets.QMenuBar(pRoom)
  672.         self.menubar.setGeometry(QtCore.QRect(0, 0, 400, 21))
  673.         self.menubar.setObjectName("menubar")
  674.         pRoom.setMenuBar(self.menubar)
  675.         self.statusbar = QtWidgets.QStatusBar(pRoom)
  676.         self.statusbar.setObjectName("statusbar")
  677.         pRoom.setStatusBar(self.statusbar)
  678.  
  679.         self.retranslateUi(pRoom, name)
  680.         QtCore.QMetaObject.connectSlotsByName(pRoom)
  681.  
  682.     def retranslateUi(self, pRoom, name):
  683.         _translate = QtCore.QCoreApplication.translate
  684.         pRoom.setWindowTitle(_translate("pRoom", name))
  685.         self.pswd.setText(_translate("pRoom", "Password"))
  686.         self.enteringPRoom.setText(_translate("pRoom", "You are trying to enter a Private Room"))
  687.  
  688.  
  689.  
  690.  
  691. # Ui_Loader is the loading window for Avaible Rooms Window
  692.  
  693. class Ui_Loader(QMainWindow):
  694.     def __init__(self):
  695.         self.ipAddresses = queue.Queue()
  696.  
  697.     def setupUi(self, Loader):
  698.         Loader.setObjectName("Loader")
  699.         Loader.resize(350, 150)
  700.         Loader.setMinimumSize(QtCore.QSize(350, 150))
  701.         Loader.setMaximumSize(QtCore.QSize(350, 150))
  702.         self.centralwidget = QtWidgets.QWidget(Loader)
  703.         self.centralwidget.setObjectName("centralwidget")
  704.         self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
  705.         self.gridLayout.setObjectName("gridLayout")
  706.         self.label = QtWidgets.QLabel(self.centralwidget)
  707.         self.label.setObjectName("label")
  708.         self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
  709.         self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
  710.         self.progressBar.setProperty("value", 0)
  711.         self.progressBar.setObjectName("progressBar")
  712.         self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 1)
  713.         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  714.         self.pushButton.setObjectName("pushButton")
  715.         self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1)
  716.         Loader.setCentralWidget(self.centralwidget)
  717.         self.menubar = QtWidgets.QMenuBar(Loader)
  718.         self.menubar.setGeometry(QtCore.QRect(0, 0, 350, 21))
  719.         self.menubar.setObjectName("menubar")
  720.         Loader.setMenuBar(self.menubar)
  721.         self.statusbar = QtWidgets.QStatusBar(Loader)
  722.         self.statusbar.setObjectName("statusbar")
  723.         Loader.setStatusBar(self.statusbar)
  724.  
  725.         self.retranslateUi(Loader)
  726.         QtCore.QMetaObject.connectSlotsByName(Loader)
  727.         self.timer = QtCore.QTimer()
  728.         self.timer.timeout.connect(lambda: self.handlerTimer(Loader))
  729.         self.timer.start(50)
  730.         self.pushButton.clicked.connect(lambda: self.cancelBtn(Loader))
  731.         portScanner = threading.Thread(target=checkRoomsOnline, args=(self.ipAddresses,))
  732.         portScanner.start()
  733.         getRoomInfos = threading.Thread(target=getRoomInfo, args=(self.ipAddresses,))
  734.         getRoomInfos.start()
  735.     def cancelBtn(self, Loader):
  736.         Loader.hide()
  737.         MainWindow.show()
  738.         self.timer.stop()
  739.  
  740.     def handlerTimer(self, Loader):
  741.         value = self.progressBar.value()
  742.         if value < 100:
  743.             value = value + 5
  744.             self.progressBar.setValue(value)
  745.         else:
  746.             self.aviableRooms = QtWidgets.QMainWindow()
  747.             self.u = Ui_aviableRooms()
  748.             self.u.setupUi(self.aviableRooms)
  749.             self.aviableRooms.show()
  750.             Loader.hide()
  751.             self.timer.stop()
  752.  
  753.     def retranslateUi(self, Loader):
  754.         _translate = QtCore.QCoreApplication.translate
  755.         Loader.setWindowTitle(_translate("Loader", "MainWindow"))
  756.         self.label.setText(_translate("Loader", "                          Scanning network for chat rooms"))
  757.         self.pushButton.setText(_translate("Loader", "Cancel"))
  758.  
  759.  
  760. # Window that contains the list of chat rooms
  761.  
  762. class Ui_aviableRooms(QtWidgets.QWidget):
  763.     def __init__(self):
  764.         global dictLabelObj
  765.         global listOfRoomObj
  766.         global listOfConnectedObj
  767.         global listOfOnlineObj
  768.         global dictLabelObj
  769.         global hoverSt
  770.         global clickSt
  771.         super().__init__()
  772.         global listNames
  773.         print(listNames)
  774.         listNamesLen = len(listNames)
  775.         print(listNamesLen)
  776.         self.chatRooms = []
  777.         self.coloredRow = "12"
  778.         self.listOfRoomObj = []
  779.         self.listOfConnectedObj = []
  780.         self.listOfOnlineObj = []
  781.         dictLabelObj = {}
  782.         self.hoverSt = "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:1 rgba(209, 229, 241, 255));"                   # Css for label when hovering over rooms
  783.         self.clickSt = "background-color: qlineargradient(spread:pad, x1:0.318, y1:0.363636, x2:1, y2:0, stop:1 rgba(160, 199, 228, 255));"        # Css for label when clicked on room
  784.         for name in listNames:
  785.             self.chatRooms.append(name)
  786.  
  787.         print(self.chatRooms)
  788.         while len(self.chatRooms) < 10:
  789.             self.chatRooms.append("")
  790.         #self.chatRooms = ["Administration","","","","","","","","",""]       # List to build up chat room names
  791.         print(self.chatRooms)
  792.         self.isPrivateRoom = ["yes","","","","","","","","",""]              # List to build up if chat room is private or not
  793.         indexCount = 0            # Index variable for the for loop
  794.         for rooms in self.chatRooms:                     #      Replace all empty rooms with N/A ( Creates new self.chatRoom )
  795.             if rooms == "":
  796.                 self.chatRooms[indexCount] = "N/A"
  797.                 pass
  798.             else:
  799.                 pass
  800.             indexCount +=1
  801.         self.roomN1,self.roomN2,self.roomN3,self.roomN4,self.roomN5,self.roomN6,self.roomN7,self.roomN8,self.roomN9,self.roomN10 = self.chatRooms
  802.         self.dictLabelNames = {"1":self.roomN1,"2":self.roomN2,"3":self.roomN3,"4":self.roomN4,"5":self.roomN5,"6":self.roomN6,"7":self.roomN7,"8":self.roomN8,"9":self.roomN9,"10":self.roomN10} #RowNumber/RoomName dictionary
  803.         self.dictDescription = {self.roomN1:"1",self.roomN2:"2",self.roomN3:"3",self.roomN4:"4",self.roomN5:"5",self.roomN6:"6",self.roomN7:"7",self.roomN8:"8",self.roomN9:"9",self.roomN10:"10"} #RoomName/Description Dict
  804.         self.dictPeople = {self.roomN1:"1",self.roomN2:"2",self.roomN3:"3",self.roomN4:"4",self.roomN5:"5",self.roomN6:"6",self.roomN7:"7",self.roomN8:"8",self.roomN9:"9",self.roomN10:"10"} #RoomName/ListOfPeople Dict
  805.         self.dictServer = {self.roomN1:"1",self.roomN2:"2",self.roomN3:"3",self.roomN4:"4",self.roomN5:"5",self.roomN6:"6",self.roomN7:"7",self.roomN8:"8",self.roomN9:"9",self.roomN10:"10"} #RoomName/Server Dict
  806.  
  807.     def eventFilter(self, object, event):        # Used for hovering/clicking effects.
  808.         global dictLabelobj
  809.         rowNum = object.objectName()[-1]  # Last index of the object name, object names are as follow : object1, object2, etc... So we get the last index (-1) to get the row number since object1 is on first row.
  810.         connectedObj = dictLabelObj["Connected" + rowNum] # We "query" the dictionary using objectname + its row number for all 4 objects.
  811.         onlineObj = dictLabelObj["Online" + rowNum] # ^
  812.         roomObj = dictLabelObj["Room" + rowNum] # ^
  813.         privateObj = dictLabelObj["Private" + rowNum] # ^
  814.  
  815.         if event.type() == QtCore.QEvent.MouseButtonPress: # On each button press
  816.             if event.button() == QtCore.Qt.LeftButton:            # Left click
  817.                 try: # Point of this is; when we click on label, it gets the object (label object) and sets it to white. After that, on new variables (privateObj, roomObj etc,) it sets it to blue. When we click again, it sets the OLD clicked object to white.
  818.                     # Gather label current label OBJECT from object Dict
  819.                     oldConnectedObj = dictLabelObj["Connected" + self.coloredRow]
  820.                     oldOnlineObj = dictLabelObj["Online" + self.coloredRow]
  821.                     oldRoomObj = dictLabelObj["Room" + self.coloredRow]
  822.                     oldPrivateObj = dictLabelObj["Private" + self.coloredRow]
  823.                     # Set the 4 label objects to white
  824.                     oldConnectedObj.setStyleSheet("")
  825.                     oldOnlineObj.setStyleSheet("")
  826.                     oldPrivateObj.setStyleSheet("")
  827.                     oldRoomObj.setStyleSheet("")
  828.  
  829.                 except:
  830.                     pass
  831.                 # Set label color to blue (clicked)
  832.                 self.coloredRow = rowNum
  833.                 privateObj.setStyleSheet(self.clickSt)
  834.                 roomObj.setStyleSheet(self.clickSt)
  835.                 connectedObj.setStyleSheet(self.clickSt)
  836.                 onlineObj.setStyleSheet(self.clickSt)
  837.                 pass
  838.             elif event.button() == QtCore.Qt.RightButton:        # Right click
  839.                 try:  # Point of this is; when we click on label, it gets the object (label object) and sets it to white. After that, on new variables (privateObj, roomObj etc,) it sets it to blue. When we click again, it sets the OLD clicked object to white.
  840.                     # Gather label current label OBJECT from object Dict
  841.                     oldConnectedObj = dictLabelObj["Connected" + self.coloredRow]
  842.                     oldOnlineObj = dictLabelObj["Online" + self.coloredRow]
  843.                     oldRoomObj = dictLabelObj["Room" + self.coloredRow]
  844.                     oldPrivateObj = dictLabelObj["Private" + self.coloredRow]
  845.                     # Set the 4 label objects to white
  846.                     oldConnectedObj.setStyleSheet("")
  847.                     oldOnlineObj.setStyleSheet("")
  848.                     oldPrivateObj.setStyleSheet("")
  849.                     oldRoomObj.setStyleSheet("")
  850.  
  851.                 except:
  852.                     pass
  853.                     # Set label color to blue (clicked)
  854.                 self.coloredRow = rowNum
  855.                 privateObj.setStyleSheet(self.clickSt)
  856.                 roomObj.setStyleSheet(self.clickSt)
  857.                 connectedObj.setStyleSheet(self.clickSt)
  858.                 onlineObj.setStyleSheet(self.clickSt)
  859.                 pass
  860.                 try:
  861.  
  862.                     name = self.dictLabelNames[str(rowNum)]
  863.                 except:
  864.                     name = self.dictLabelNames["10"]
  865.                 if name == "N/A":
  866.                     pass
  867.                 else:
  868.                     contextMenu = QtWidgets.QMenu(self)
  869.                     connect = contextMenu.addAction("Connect")
  870.                     description = contextMenu.addAction("Room Description")
  871.                     action = contextMenu.exec_(QtGui.QCursor.pos())
  872.                     if action == connect:
  873.                         name = self.dictLabelNames[str(rowNum)]
  874.                         if self.isPrivateRoom[int(rowNum) - 1] == "yes":
  875.                             self.pRoom = QtWidgets.QMainWindow()
  876.                             self.ui = Ui_pRoom()
  877.                             self.ui.setupUi(self.pRoom, name)
  878.                             self.pRoom.show()
  879.                         else:
  880.                             print("not private")
  881.                             pass
  882.                     elif action == description:
  883.                         name = self.dictLabelNames[str(rowNum)]
  884.                         self.roomDescription = QtWidgets.QMainWindow()
  885.                         self.ui = Ui_roomDescription()
  886.                         self.ui.setupUi(self.roomDescription, name, self.dictDescription, self.dictPeople, self.dictServer)
  887.                         self.roomDescription.show()
  888.                         pass
  889.         if event.type() == QEvent.Enter: # When we hover over a label
  890.             #Set hover color on hover
  891.             privateObj.setStyleSheet(self.hoverSt)
  892.             roomObj.setStyleSheet(self.hoverSt)
  893.             connectedObj.setStyleSheet(self.hoverSt)
  894.             onlineObj.setStyleSheet(self.hoverSt)
  895.             if self.coloredRow == rowNum:
  896.                 # If We are on the row that is colored (clicked), dont color it with hover color
  897.                 privateObj.setStyleSheet(self.clickSt)
  898.                 roomObj.setStyleSheet(self.clickSt)
  899.                 connectedObj.setStyleSheet(self.clickSt)
  900.                 onlineObj.setStyleSheet(self.clickSt)
  901.             pass
  902.         elif event.type() == QEvent.Leave: # When we leave label table.
  903.             if self.coloredRow == rowNum:
  904.                 #We do nothing if the current label row is the clicked row.
  905.                 pass
  906.             else:
  907.                 # If its anything else, set it to white!
  908.                 privateObj.setStyleSheet("")
  909.                 roomObj.setStyleSheet("")
  910.                 connectedObj.setStyleSheet("")
  911.                 onlineObj.setStyleSheet("")
  912.         return False
  913.  
  914.     def checkPrivate(self, pslot, i):
  915.         if self.isPrivateRoom[i] == "yes":
  916.             pass
  917.         else:
  918.             pslot.hide()
  919.  
  920.     def assignColorLabels(self):
  921.         for room,connected,online in zip(self.listOfRoomObj,self.listOfConnectedObj,self.listOfOnlineObj):
  922.             room.installEventFilter(self)
  923.             connected.installEventFilter(self)
  924.             online.installEventFilter(self)
  925.  
  926.     def setupUi(self, aviableRooms):
  927.         # Main Window (avaibleRooms)
  928.  
  929.         aviableRooms.setObjectName("aviableRooms")
  930.         aviableRooms.resize(300, 350)
  931.  
  932.         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
  933.         sizePolicy.setHorizontalStretch(0)
  934.         sizePolicy.setVerticalStretch(0)
  935.         sizePolicy.setHeightForWidth(aviableRooms.sizePolicy().hasHeightForWidth())
  936.  
  937.         aviableRooms.setSizePolicy(sizePolicy)
  938.         aviableRooms.setMinimumSize(QtCore.QSize(300, 350))
  939.         aviableRooms.setMaximumSize(QtCore.QSize(300, 350))
  940.  
  941.         # CentralWidget (For avaibleRooms)
  942.  
  943.         self.centralwidget = QtWidgets.QWidget(aviableRooms)
  944.         self.centralwidget.setObjectName("centralwidget")
  945.  
  946.         # gridLayout (For CentralWidget)
  947.  
  948.         self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
  949.         self.gridLayout.setContentsMargins(0, 0, 0, 0)
  950.         self.gridLayout.setSpacing(0)
  951.         self.gridLayout.setObjectName("gridLayout")
  952.         # ScrollArea (In CentralWidget)
  953.  
  954.         self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
  955.         self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame)
  956.         self.scrollArea.setWidgetResizable(True)
  957.         self.scrollArea.setObjectName("scrollArea")
  958.         self.scrollAreaWidgetContents = QtWidgets.QWidget()
  959.         self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 311, 442))
  960.         self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
  961.         self.formLayout_3 = QtWidgets.QFormLayout(self.scrollAreaWidgetContents)
  962.         self.formLayout_3.setObjectName("formLayout_3")
  963.         self.BACK = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
  964.         self.BACK.setObjectName("BACK")
  965.         self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.SpanningRole, self.BACK)
  966.         self.roomsBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents)
  967.         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
  968.         sizePolicy.setHorizontalStretch(0)
  969.         sizePolicy.setVerticalStretch(0)
  970.         sizePolicy.setHeightForWidth(self.roomsBox.sizePolicy().hasHeightForWidth())
  971.         self.roomsBox.setSizePolicy(sizePolicy)
  972.         self.roomsBox.setLayoutDirection(QtCore.Qt.LeftToRight)
  973.         self.roomsBox.setTitle("")
  974.         self.roomsBox.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
  975.         self.roomsBox.setObjectName("roomsBox")
  976.         self.gridLayout_8 = QtWidgets.QGridLayout(self.roomsBox)
  977.         self.gridLayout_8.setContentsMargins(0, 0, 0, 0)
  978.         self.gridLayout_8.setSpacing(0)
  979.         self.gridLayout_8.setObjectName("gridLayout_8")
  980.         self.gridLayout_7 = QtWidgets.QGridLayout()
  981.         self.gridLayout_7.setObjectName("gridLayout_7")
  982.         self.Online8 = QLabel_alterada(self.roomsBox)
  983.         self.Online8.setFrameShape(QtWidgets.QFrame.StyledPanel)
  984.         self.Online8.setAlignment(QtCore.Qt.AlignCenter)
  985.         self.Online8.setObjectName("Online8")
  986.         dictLabelObj.update({"Online8": self.Online8})
  987.         self.listOfOnlineObj.append(self.Online8)
  988.         self.gridLayout_7.addWidget(self.Online8, 8, 3, 1, 1)
  989.         self.Connected4 = QLabel_alterada(self.roomsBox)
  990.         self.Connected4.setFrameShape(QtWidgets.QFrame.StyledPanel)
  991.         self.Connected4.setAlignment(QtCore.Qt.AlignCenter)
  992.         self.Connected4.setObjectName("Connected4")
  993.         dictLabelObj.update({"Connected4": self.Connected4})
  994.         self.listOfConnectedObj.append(self.Connected4)
  995.         self.gridLayout_7.addWidget(self.Connected4, 4, 2, 1, 1)
  996.         self.Online10 = QLabel_alterada(self.roomsBox)
  997.         self.Online10.setFrameShape(QtWidgets.QFrame.StyledPanel)
  998.         self.Online10.setAlignment(QtCore.Qt.AlignCenter)
  999.         self.Online10.setObjectName("Online10")
  1000.         dictLabelObj.update({"Online0": self.Online10})
  1001.         self.listOfOnlineObj.append(self.Online10)
  1002.         self.gridLayout_7.addWidget(self.Online10, 10, 3, 1, 1)
  1003.         self.Room4 = QLabel_alterada(self.roomsBox)
  1004.         self.Room4.setMinimumSize(QtCore.QSize(0, 20))
  1005.         self.Room4.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1006.         self.Room4.setFrameShadow(QtWidgets.QFrame.Plain)
  1007.         self.Room4.setAlignment(QtCore.Qt.AlignCenter)
  1008.         self.Room4.setObjectName("Room4")
  1009.         dictLabelObj.update({"Room4": self.Room4})
  1010.         self.listOfRoomObj.append(self.Room4)
  1011.         self.gridLayout_7.addWidget(self.Room4, 4, 1, 1, 1)
  1012.         self.Online7 = QLabel_alterada(self.roomsBox)
  1013.         self.Online7.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1014.         self.Online7.setAlignment(QtCore.Qt.AlignCenter)
  1015.         self.Online7.setObjectName("Online7")
  1016.         dictLabelObj.update({"Online7": self.Online7})
  1017.         self.listOfOnlineObj.append(self.Online7)
  1018.         self.gridLayout_7.addWidget(self.Online7, 7, 3, 1, 1)
  1019.         self.Connected2 = QLabel_alterada(self.roomsBox)
  1020.         self.Connected2.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1021.         self.Connected2.setAlignment(QtCore.Qt.AlignCenter)
  1022.         self.Connected2.setObjectName("Connected2")
  1023.         dictLabelObj.update({"Connected2": self.Connected2})
  1024.         self.listOfConnectedObj.append(self.Connected2)
  1025.         self.gridLayout_7.addWidget(self.Connected2, 2, 2, 1, 1)
  1026.         self.Room8 = QLabel_alterada(self.roomsBox)
  1027.         self.Room8.setMinimumSize(QtCore.QSize(0, 20))
  1028.         self.Room8.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1029.         self.Room8.setAlignment(QtCore.Qt.AlignCenter)
  1030.         self.Room8.setObjectName("Room8")
  1031.         dictLabelObj.update({"Room8": self.Room8})
  1032.         self.listOfRoomObj.append(self.Room8)
  1033.         self.gridLayout_7.addWidget(self.Room8, 8, 1, 1, 1)
  1034.         self.Room3 = QLabel_alterada(self.roomsBox)
  1035.         self.Room3.setMinimumSize(QtCore.QSize(0, 20))
  1036.         self.Room3.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1037.         self.Room3.setAlignment(QtCore.Qt.AlignCenter)
  1038.         self.Room3.setObjectName("Room3")
  1039.         dictLabelObj.update({"Room3": self.Room3})
  1040.         self.listOfRoomObj.append(self.Room3)
  1041.         self.gridLayout_7.addWidget(self.Room3, 3, 1, 1, 1)
  1042.         self.Room9 = QLabel_alterada(self.roomsBox)
  1043.         self.Room9.setMinimumSize(QtCore.QSize(0, 20))
  1044.         self.Room9.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1045.         self.Room9.setAlignment(QtCore.Qt.AlignCenter)
  1046.         self.Room9.setObjectName("Room9")
  1047.         dictLabelObj.update({"Room9": self.Room9})
  1048.         self.listOfRoomObj.append(self.Room9)
  1049.         self.gridLayout_7.addWidget(self.Room9, 9, 1, 1, 1)
  1050.         self.Online3 = QLabel_alterada(self.roomsBox)
  1051.         self.Online3.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1052.         self.Online3.setAlignment(QtCore.Qt.AlignCenter)
  1053.         self.Online3.setObjectName("Online3")
  1054.         dictLabelObj.update({"Online3": self.Online3})
  1055.         self.listOfOnlineObj.append(self.Online3)
  1056.         self.gridLayout_7.addWidget(self.Online3, 3, 3, 1, 1)
  1057.         self.Connected10 = QLabel_alterada(self.roomsBox)
  1058.         self.Connected10.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1059.         self.Connected10.setAlignment(QtCore.Qt.AlignCenter)
  1060.         self.Connected10.setObjectName("Connected10")
  1061.         dictLabelObj.update({"Connected0": self.Connected10})
  1062.         self.listOfConnectedObj.append(self.Connected10)
  1063.         self.gridLayout_7.addWidget(self.Connected10, 10, 2, 1, 1)
  1064.         self.Room6 = QLabel_alterada(self.roomsBox)
  1065.         self.Room6.setMinimumSize(QtCore.QSize(0, 20))
  1066.         self.Room6.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1067.         self.Room6.setAlignment(QtCore.Qt.AlignCenter)
  1068.         self.Room6.setObjectName("Room6")
  1069.         dictLabelObj.update({"Room6": self.Room6})
  1070.         self.listOfRoomObj.append(self.Room6)
  1071.         self.gridLayout_7.addWidget(self.Room6, 6, 1, 1, 1)
  1072.         self.Room10 = QLabel_alterada(self.roomsBox)
  1073.         self.Room10.setMinimumSize(QtCore.QSize(0, 20))
  1074.         self.Room10.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1075.         self.Room10.setAlignment(QtCore.Qt.AlignCenter)
  1076.         self.Room10.setObjectName("Room10")
  1077.         self.listOfRoomObj.append(self.Room10)
  1078.         dictLabelObj.update({"Room0": self.Room10})
  1079.         self.gridLayout_7.addWidget(self.Room10, 10, 1, 1, 1)
  1080.         self.Connected9 = QLabel_alterada(self.roomsBox)
  1081.         self.Connected9.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1082.         self.Connected9.setAlignment(QtCore.Qt.AlignCenter)
  1083.         self.Connected9.setObjectName("Connected9")
  1084.         dictLabelObj.update({"Connected9": self.Connected9})
  1085.         self.listOfConnectedObj.append(self.Connected9)
  1086.         self.gridLayout_7.addWidget(self.Connected9, 9, 2, 1, 1)
  1087.         self.Online2 = QLabel_alterada(self.roomsBox)
  1088.         self.Online2.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1089.         self.Online2.setAlignment(QtCore.Qt.AlignCenter)
  1090.         self.Online2.setObjectName("Online2")
  1091.         dictLabelObj.update({"Online2": self.Online2})
  1092.         self.listOfOnlineObj.append(self.Online2)
  1093.         self.gridLayout_7.addWidget(self.Online2, 2, 3, 1, 1)
  1094.         self.Room7 = QLabel_alterada(self.roomsBox)
  1095.         self.Room7.setMinimumSize(QtCore.QSize(0, 20))
  1096.         self.Room7.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1097.         self.Room7.setAlignment(QtCore.Qt.AlignCenter)
  1098.         self.Room7.setObjectName("Room7")
  1099.         dictLabelObj.update({"Room7": self.Room7})
  1100.         self.listOfRoomObj.append(self.Room7)
  1101.         self.gridLayout_7.addWidget(self.Room7, 7, 1, 1, 1)
  1102.         self.Connected6 = QLabel_alterada(self.roomsBox)
  1103.         self.Connected6.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1104.         self.Connected6.setAlignment(QtCore.Qt.AlignCenter)
  1105.         self.Connected6.setObjectName("Connected6")
  1106.         dictLabelObj.update({"Connected6": self.Connected6})
  1107.         self.listOfConnectedObj.append(self.Connected6)
  1108.         self.gridLayout_7.addWidget(self.Connected6, 6, 2, 1, 1)
  1109.         self.Room2 = QLabel_alterada(self.roomsBox)
  1110.         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
  1111.         sizePolicy.setHorizontalStretch(0)
  1112.         sizePolicy.setVerticalStretch(0)
  1113.         sizePolicy.setHeightForWidth(self.Room2.sizePolicy().hasHeightForWidth())
  1114.         self.Room2.setSizePolicy(sizePolicy)
  1115.         self.Room2.setMinimumSize(QtCore.QSize(0, 20))
  1116.         self.Room2.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1117.         self.Room2.setAlignment(QtCore.Qt.AlignCenter)
  1118.         self.Room2.setObjectName("Room2")
  1119.         dictLabelObj.update({"Room2": self.Room2})
  1120.         self.listOfRoomObj.append(self.Room2)
  1121.         self.gridLayout_7.addWidget(self.Room2, 2, 1, 1, 1)
  1122.         self.Connected7 = QLabel_alterada(self.roomsBox)
  1123.         self.Connected7.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1124.         self.Connected7.setAlignment(QtCore.Qt.AlignCenter)
  1125.         self.Connected7.setObjectName("Connected7")
  1126.         dictLabelObj.update({"Connected7": self.Connected7})
  1127.         self.listOfConnectedObj.append(self.Connected7)
  1128.         self.gridLayout_7.addWidget(self.Connected7, 7, 2, 1, 1)
  1129.         self.RoomOnline = QtWidgets.QLabel(self.roomsBox)
  1130.         self.RoomOnline.setFrameShape(QtWidgets.QFrame.Panel)
  1131.         self.RoomOnline.setFrameShadow(QtWidgets.QFrame.Plain)
  1132.         self.RoomOnline.setAlignment(QtCore.Qt.AlignCenter)
  1133.         self.RoomOnline.setObjectName("RoomOnline")
  1134.         self.gridLayout_7.addWidget(self.RoomOnline, 0, 3, 1, 1)
  1135.         self.Connected3 = QLabel_alterada(self.roomsBox)
  1136.         self.Connected3.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1137.         self.Connected3.setAlignment(QtCore.Qt.AlignCenter)
  1138.         self.Connected3.setObjectName("Connected3")
  1139.         dictLabelObj.update({"Connected3": self.Connected3})
  1140.         self.listOfConnectedObj.append(self.Connected3)
  1141.         self.gridLayout_7.addWidget(self.Connected3, 3, 2, 1, 1)
  1142.         self.Room1 = QLabel_alterada(self.roomsBox)
  1143.         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
  1144.         sizePolicy.setHorizontalStretch(0)
  1145.         sizePolicy.setVerticalStretch(0)
  1146.         sizePolicy.setHeightForWidth(self.Room1.sizePolicy().hasHeightForWidth())
  1147.         self.Room1.setSizePolicy(sizePolicy)
  1148.         self.Room1.setMinimumSize(QtCore.QSize(80, 20))
  1149.         self.Room1.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1150.         self.Room1.setFrameShadow(QtWidgets.QFrame.Plain)
  1151.         self.Room1.setMidLineWidth(0)
  1152.         self.Room1.setTextFormat(QtCore.Qt.AutoText)
  1153.         self.Room1.setAlignment(QtCore.Qt.AlignCenter)
  1154.         self.Room1.setWordWrap(False)
  1155.         self.Room1.setObjectName("Room1")
  1156.         dictLabelObj.update({"Room1": self.Room1})
  1157.         self.listOfRoomObj.append(self.Room1)
  1158.         self.gridLayout_7.addWidget(self.Room1, 1, 1, 1, 1)
  1159.         self.Online4 = QLabel_alterada(self.roomsBox)
  1160.         self.Online4.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1161.         self.Online4.setAlignment(QtCore.Qt.AlignCenter)
  1162.         self.Online4.setObjectName("Online4")
  1163.         dictLabelObj.update({"Online4": self.Online4})
  1164.         self.listOfOnlineObj.append(self.Online4)
  1165.         self.gridLayout_7.addWidget(self.Online4, 4, 3, 1, 1)
  1166.         self.Online9 = QLabel_alterada(self.roomsBox)
  1167.         self.Online9.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1168.         self.Online9.setAlignment(QtCore.Qt.AlignCenter)
  1169.         self.Online9.setObjectName("Online9")
  1170.         dictLabelObj.update({"Online9": self.Online9})
  1171.         self.listOfOnlineObj.append(self.Online9)
  1172.         self.gridLayout_7.addWidget(self.Online9, 9, 3, 1, 1)
  1173.         self.Online5 = QLabel_alterada(self.roomsBox)
  1174.         self.Online5.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1175.         self.Online5.setAlignment(QtCore.Qt.AlignCenter)
  1176.         self.Online5.setObjectName("Online5")
  1177.         dictLabelObj.update({"Online5": self.Online5})
  1178.         self.listOfOnlineObj.append(self.Online5)
  1179.         self.gridLayout_7.addWidget(self.Online5, 5, 3, 1, 1)
  1180.         self.Connected8 = QLabel_alterada(self.roomsBox)
  1181.         self.Connected8.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1182.         self.Connected8.setAlignment(QtCore.Qt.AlignCenter)
  1183.         self.Connected8.setObjectName("Connected8")
  1184.         dictLabelObj.update({"Connected8": self.Connected8})
  1185.         self.listOfConnectedObj.append(self.Connected8)
  1186.         self.gridLayout_7.addWidget(self.Connected8, 8, 2, 1, 1)
  1187.         self.RoomName = QtWidgets.QLabel(self.roomsBox)
  1188.         self.RoomName.setMinimumSize(QtCore.QSize(20, 0))
  1189.         self.RoomName.setFrameShape(QtWidgets.QFrame.Panel)
  1190.         self.RoomName.setAlignment(QtCore.Qt.AlignCenter)
  1191.         self.RoomName.setObjectName("RoomName")
  1192.         self.gridLayout_7.addWidget(self.RoomName, 0, 1, 1, 1)
  1193.         self.Connected1 = QLabel_alterada(self.roomsBox)
  1194.         self.Connected1.setMinimumSize(QtCore.QSize(80, 0))
  1195.         self.Connected1.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1196.         self.Connected1.setAlignment(QtCore.Qt.AlignCenter)
  1197.         self.Connected1.setObjectName("Connected1")
  1198.         dictLabelObj.update({"Connected1": self.Connected1})
  1199.         self.listOfConnectedObj.append(self.Connected1)
  1200.         self.gridLayout_7.addWidget(self.Connected1, 1, 2, 1, 1)
  1201.         self.RoomConnected = QtWidgets.QLabel(self.roomsBox)
  1202.         self.RoomConnected.setMinimumSize(QtCore.QSize(0, 20))
  1203.         self.RoomConnected.setFrameShape(QtWidgets.QFrame.Panel)
  1204.         self.RoomConnected.setAlignment(QtCore.Qt.AlignCenter)
  1205.         self.RoomConnected.setObjectName("RoomConnected")
  1206.         self.gridLayout_7.addWidget(self.RoomConnected, 0, 2, 1, 1)
  1207.         self.Connected5 = QLabel_alterada(self.roomsBox)
  1208.         self.Connected5.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1209.         self.Connected5.setAlignment(QtCore.Qt.AlignCenter)
  1210.         self.Connected5.setObjectName("Connected5")
  1211.         dictLabelObj.update({"Connected5": self.Connected5})
  1212.         self.listOfConnectedObj.append(self.Connected5)
  1213.         self.gridLayout_7.addWidget(self.Connected5, 5, 2, 1, 1)
  1214.         self.Online1 = QLabel_alterada(self.roomsBox)
  1215.         self.Online1.setMinimumSize(QtCore.QSize(80, 0))
  1216.         self.Online1.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1217.         self.Online1.setAlignment(QtCore.Qt.AlignCenter)
  1218.         self.Online1.setObjectName("Online1")
  1219.         dictLabelObj.update({"Online1": self.Online1})
  1220.         self.listOfOnlineObj.append(self.Online1)
  1221.         self.gridLayout_7.addWidget(self.Online1, 1, 3, 1, 1)
  1222.         self.Room5 = QLabel_alterada(self.roomsBox)
  1223.         self.Room5.setMinimumSize(QtCore.QSize(0, 20))
  1224.         self.Room5.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1225.         self.Room5.setAlignment(QtCore.Qt.AlignCenter)
  1226.         self.Room5.setObjectName("Room5")
  1227.         dictLabelObj.update({"Room5": self.Room5})
  1228.         self.listOfRoomObj.append(self.Room5)
  1229.         self.gridLayout_7.addWidget(self.Room5, 5, 1, 1, 1)
  1230.         self.Online6 = QLabel_alterada(self.roomsBox)
  1231.         self.Online6.setFrameShape(QtWidgets.QFrame.StyledPanel)
  1232.         self.Online6.setAlignment(QtCore.Qt.AlignCenter)
  1233.         self.Online6.setObjectName("Online6")
  1234.         dictLabelObj.update({"Online6": self.Online6})
  1235.         self.listOfOnlineObj.append(self.Online6)
  1236.         self.gridLayout_7.addWidget(self.Online6, 6, 3, 1, 1)
  1237.         self.PlaceHolder = QtWidgets.QLabel(self.roomsBox)
  1238.         self.PlaceHolder.setMinimumSize(QtCore.QSize(25, 20))
  1239.         self.PlaceHolder.setMaximumSize(QtCore.QSize(20, 20))
  1240.         self.PlaceHolder.setFrameShape(QtWidgets.QFrame.NoFrame)
  1241.         self.PlaceHolder.setLineWidth(0)
  1242.         self.PlaceHolder.setText("")
  1243.         self.PlaceHolder.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1244.         self.PlaceHolder.setScaledContents(True)
  1245.         self.PlaceHolder.setWordWrap(False)
  1246.         self.PlaceHolder.setObjectName("PlaceHolder")
  1247.         self.PlaceHolder.hide()
  1248.         self.gridLayout_7.addWidget(self.PlaceHolder, 0, 0, 1, 1)
  1249.         self.Private1 = QtWidgets.QLabel(self.roomsBox)
  1250.         self.Private1.setMaximumSize(QtCore.QSize(25, 20))
  1251.         self.Private1.setText("")
  1252.         self.Private1.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1253.         self.Private1.setScaledContents(True)
  1254.         self.Private1.setObjectName("Private1")
  1255.         dictLabelObj.update({"Private1":self.Private1})
  1256.         self.checkPrivate(self.Private1, 0)
  1257.         self.gridLayout_7.addWidget(self.Private1, 1, 0, 1, 1)
  1258.         self.Private2 = QtWidgets.QLabel(self.roomsBox)
  1259.         self.Private2.setMaximumSize(QtCore.QSize(25, 20))
  1260.         self.Private2.setText("")
  1261.         self.Private2.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1262.         self.Private2.setScaledContents(True)
  1263.         self.Private2.setObjectName("Private2")
  1264.         dictLabelObj.update({"Private2":self.Private2})
  1265.         self.checkPrivate(self.Private2, 1)
  1266.         self.gridLayout_7.addWidget(self.Private2, 2, 0, 1, 1)
  1267.         self.Private3 = QtWidgets.QLabel(self.roomsBox)
  1268.         self.Private3.setMaximumSize(QtCore.QSize(25, 20))
  1269.         self.Private3.setText("")
  1270.         self.Private3.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1271.         self.Private3.setScaledContents(True)
  1272.         self.Private3.setObjectName("Private3")
  1273.         dictLabelObj.update({"Private3":self.Private3})
  1274.         self.checkPrivate(self.Private3, 2)
  1275.         self.gridLayout_7.addWidget(self.Private3, 3, 0, 1, 1)
  1276.         self.Private4 = QtWidgets.QLabel(self.roomsBox)
  1277.         self.Private4.setMaximumSize(QtCore.QSize(25, 20))
  1278.         self.Private4.setText("")
  1279.         self.Private4.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1280.         self.Private4.setScaledContents(True)
  1281.         self.Private4.setObjectName("Private4")
  1282.         dictLabelObj.update({"Private4":self.Private4})
  1283.         self.checkPrivate(self.Private4, 3)
  1284.         self.gridLayout_7.addWidget(self.Private4, 4, 0, 1, 1)
  1285.         self.Private5 = QtWidgets.QLabel(self.roomsBox)
  1286.         self.Private5.setMaximumSize(QtCore.QSize(25, 20))
  1287.         self.Private5.setText("")
  1288.         self.Private5.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1289.         self.Private5.setScaledContents(True)
  1290.         self.Private5.setObjectName("Private5")
  1291.         dictLabelObj.update({"Private5":self.Private5})
  1292.         self.checkPrivate(self.Private5, 4)
  1293.         self.gridLayout_7.addWidget(self.Private5, 5, 0, 1, 1)
  1294.         self.Private6 = QtWidgets.QLabel(self.roomsBox)
  1295.         self.Private6.setMaximumSize(QtCore.QSize(25, 20))
  1296.         self.Private6.setText("")
  1297.         self.Private6.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1298.         self.Private6.setScaledContents(True)
  1299.         self.Private6.setObjectName("Private6")
  1300.         dictLabelObj.update({"Private6":self.Private6})
  1301.         self.checkPrivate(self.Private6, 5)
  1302.         self.gridLayout_7.addWidget(self.Private6, 6, 0, 1, 1)
  1303.         self.Private7 = QtWidgets.QLabel(self.roomsBox)
  1304.         self.Private7.setMaximumSize(QtCore.QSize(25, 20))
  1305.         self.Private7.setText("")
  1306.         self.Private7.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1307.         self.Private7.setScaledContents(True)
  1308.         self.Private7.setObjectName("Private7")
  1309.         dictLabelObj.update({"Private7":self.Private7})
  1310.         self.checkPrivate(self.Private7, 6)
  1311.         self.gridLayout_7.addWidget(self.Private7, 7, 0, 1, 1)
  1312.         self.Private8 = QtWidgets.QLabel(self.roomsBox)
  1313.         self.Private8.setMaximumSize(QtCore.QSize(25, 20))
  1314.         self.Private8.setText("")
  1315.         self.Private8.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1316.         self.Private8.setScaledContents(True)
  1317.         self.Private8.setObjectName("Private8")
  1318.         dictLabelObj.update({"Private8":self.Private8})
  1319.         self.checkPrivate(self.Private8, 7)
  1320.         self.gridLayout_7.addWidget(self.Private8, 8, 0, 1, 1)
  1321.         self.Private9 = QtWidgets.QLabel(self.roomsBox)
  1322.         self.Private9.setMaximumSize(QtCore.QSize(25, 20))
  1323.         self.Private9.setText("")
  1324.         self.Private9.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1325.         self.Private9.setScaledContents(True)
  1326.         self.Private9.setObjectName("Private9")
  1327.         dictLabelObj.update({"Private9":self.Private9})
  1328.         self.checkPrivate(self.Private9, 8)
  1329.         self.gridLayout_7.addWidget(self.Private9, 9, 0, 1, 1)
  1330.         self.Private10 = QtWidgets.QLabel(self.roomsBox)
  1331.         self.Private10.setMaximumSize(QtCore.QSize(25, 20))
  1332.         self.Private10.setText("")
  1333.         self.Private10.setPixmap(QtGui.QPixmap("D:/untitled/Lan Chat/unnamed.png"))
  1334.         self.Private10.setScaledContents(True)
  1335.         self.Private10.setObjectName("Private10")
  1336.         dictLabelObj.update({"Private0":self.Private10})
  1337.         self.checkPrivate(self.Private10, 9)
  1338.         self.gridLayout_7.addWidget(self.Private10, 10, 0, 1, 1)
  1339.         self.gridLayout_8.addLayout(self.gridLayout_7, 0, 0, 1, 1)
  1340.         self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.roomsBox)
  1341.         self.scrollArea.setWidget(self.scrollAreaWidgetContents)
  1342.         self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)
  1343.         aviableRooms.setCentralWidget(self.centralwidget)
  1344.         self.menubar = QtWidgets.QMenuBar(aviableRooms)
  1345.         self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 21))
  1346.         self.menubar.setObjectName("menubar")
  1347.         aviableRooms.setMenuBar(self.menubar)
  1348.         self.statusbar = QtWidgets.QStatusBar(aviableRooms)
  1349.         self.statusbar.setObjectName("statusbar")
  1350.         aviableRooms.setStatusBar(self.statusbar)
  1351.         self.BACK.clicked.connect(lambda: self.cancelBtn(aviableRooms))
  1352.  
  1353.  
  1354.         self.retranslateUi(aviableRooms)
  1355.         QtCore.QMetaObject.connectSlotsByName(aviableRooms)
  1356.         self.assignColorLabels()
  1357.  
  1358.         # CLICK LABELS CONNECTS -----------------------------
  1359.  
  1360.         self.Room1.clicked.connect(partial(self.Clic, 1))
  1361.         self.Room2.clicked.connect(partial(self.Clic, 2))
  1362.         self.Room3.clicked.connect(partial(self.Clic, 3))
  1363.         self.Room4.clicked.connect(partial(self.Clic, 4))
  1364.         self.Room5.clicked.connect(partial(self.Clic, 5))
  1365.         self.Room6.clicked.connect(partial(self.Clic, 6))
  1366.         self.Room7.clicked.connect(partial(self.Clic, 7))
  1367.         self.Room8.clicked.connect(partial(self.Clic, 8))
  1368.         self.Room9.clicked.connect(partial(self.Clic, 9))
  1369.         self.Room10.clicked.connect(partial(self.Clic, 10))
  1370.         self.Connected1.clicked.connect(partial(self.Clic, 1))
  1371.         self.Connected2.clicked.connect(partial(self.Clic, 2))
  1372.         self.Connected3.clicked.connect(partial(self.Clic, 3))
  1373.         self.Connected4.clicked.connect(partial(self.Clic, 4))
  1374.         self.Connected5.clicked.connect(partial(self.Clic, 5))
  1375.         self.Connected6.clicked.connect(partial(self.Clic, 6))
  1376.         self.Connected7.clicked.connect(partial(self.Clic, 7))
  1377.         self.Connected8.clicked.connect(partial(self.Clic, 8))
  1378.         self.Connected9.clicked.connect(partial(self.Clic, 9))
  1379.         self.Connected10.clicked.connect(partial(self.Clic, 10))
  1380.         self.Online1.clicked.connect(partial(self.Clic, 1))
  1381.         self.Online2.clicked.connect(partial(self.Clic, 2))
  1382.         self.Online3.clicked.connect(partial(self.Clic, 3))
  1383.         self.Online4.clicked.connect(partial(self.Clic, 4))
  1384.         self.Online5.clicked.connect(partial(self.Clic, 5))
  1385.         self.Online6.clicked.connect(partial(self.Clic, 6))
  1386.         self.Online7.clicked.connect(partial(self.Clic, 7))
  1387.         self.Online8.clicked.connect(partial(self.Clic, 8))
  1388.         self.Online9.clicked.connect(partial(self.Clic, 9))
  1389.         self.Online10.clicked.connect(partial(self.Clic, 10))
  1390.  
  1391.  
  1392.     #def rightClick(self, rowNum):
  1393.  
  1394.     def cancelBtn(self, aviableRooms):
  1395.         aviableRooms.close()
  1396.         MainWindow.show()
  1397.  
  1398.  
  1399.     def Clic(self,rowNum, click):
  1400.         name = self.dictLabelNames[str(rowNum)]
  1401.         if name == "N/A":
  1402.             pass
  1403.         else:
  1404.             if click == "Single":
  1405.                 pass
  1406.             elif click == "Double":
  1407.                 if self.isPrivateRoom[int(rowNum)-1] == "yes":
  1408.                     self.pRoom = QtWidgets.QMainWindow()
  1409.                     self.ui = Ui_pRoom()
  1410.                     self.ui.setupUi(self.pRoom,name)
  1411.                     self.pRoom.show()
  1412.                 else:
  1413.                     pass
  1414.             else:
  1415.                 pass
  1416.         # ROOMS
  1417.     def hi(self):
  1418.         print("AAAAAAAAAAAA")
  1419.     def retranslateUi(self, aviableRooms):
  1420.         _translate = QtCore.QCoreApplication.translate
  1421.         aviableRooms.setWindowTitle(_translate("aviableRooms", "MainWindow"))
  1422.         self.Online8.setText(_translate("aviableRooms", ""))
  1423.         self.Connected4.setText(_translate("aviableRooms", ""))
  1424.         self.Online10.setText(_translate("aviableRooms", ""))
  1425.         self.Room4.setText(_translate("aviableRooms", self.roomN4))
  1426.         self.Online7.setText(_translate("aviableRooms", ""))
  1427.         self.Connected2.setText(_translate("aviableRooms", ""))
  1428.         self.Room8.setText(_translate("aviableRooms", self.roomN8))
  1429.         self.Room3.setText(_translate("aviableRooms", self.roomN3))
  1430.         self.Room9.setText(_translate("aviableRooms", self.roomN9))
  1431.         self.Online3.setText(_translate("aviableRooms", ""))
  1432.         self.Connected10.setText(_translate("aviableRooms", ""))
  1433.         self.Room6.setText(_translate("aviableRooms", self.roomN6))
  1434.         self.Room10.setText(_translate("aviableRooms", self.roomN10))
  1435.         self.Connected9.setText(_translate("aviableRooms", ""))
  1436.         self.Online2.setText(_translate("aviableRooms", ""))
  1437.         self.Room7.setText(_translate("aviableRooms", self.roomN7))
  1438.         self.Connected6.setText(_translate("aviableRooms", ""))
  1439.         self.Room2.setText(_translate("aviableRooms", self.roomN2))
  1440.         self.Connected7.setText(_translate("aviableRooms", ""))
  1441.         self.RoomOnline.setText(_translate("aviableRooms", "Room Status"))
  1442.         self.Connected3.setText(_translate("aviableRooms", ""))
  1443.         self.Room1.setText(_translate("aviableRooms", self.roomN1))
  1444.         self.Online4.setText(_translate("aviableRooms", ""))
  1445.         self.Online9.setText(_translate("aviableRooms", ""))
  1446.         self.Online5.setText(_translate("aviableRooms", ""))
  1447.         self.Connected8.setText(_translate("aviableRooms", ""))
  1448.         self.RoomName.setText(_translate("aviableRooms", "Room Name"))
  1449.         self.Connected1.setText(_translate("aviableRooms", "2"))
  1450.         self.RoomConnected.setText(_translate("aviableRooms", "Members Online"))
  1451.         self.Connected5.setText(_translate("aviableRooms", ""))
  1452.         self.Online1.setText(_translate("aviableRooms", "Active"))
  1453.         self.Room5.setText(_translate("aviableRooms", self.roomN5))
  1454.         self.Online6.setText(_translate("aviableRooms", ""))
  1455.         self.BACK.setText(_translate("aviableRooms", "Go Back"))
  1456.  
  1457.  
  1458. class Ui_MainWindow(object):
  1459.     def setupUi(self, MainWindow):
  1460.         MainWindow.setObjectName("MainWindow")
  1461.         MainWindow.resize(500, 150)
  1462.         MainWindow.setMinimumSize(QtCore.QSize(500, 150))
  1463.         MainWindow.setMaximumSize(QtCore.QSize(500, 150))
  1464.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  1465.         self.centralwidget.setObjectName("centralwidget")
  1466.         self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
  1467.         self.gridLayout.setObjectName("gridLayout")
  1468.         self.label = QtWidgets.QLabel(self.centralwidget)
  1469.         self.label.setObjectName("label")
  1470.         self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
  1471.         self.buttonCreate = QtWidgets.QPushButton(self.centralwidget)
  1472.         self.buttonCreate.setObjectName("buttonCreate")
  1473.         self.gridLayout.addWidget(self.buttonCreate, 1, 1, 1, 1)
  1474.         self.buttonRooms = QtWidgets.QPushButton(self.centralwidget)
  1475.         self.buttonRooms.setObjectName("buttonRooms")
  1476.         self.gridLayout.addWidget(self.buttonRooms, 1, 0, 1, 1)
  1477.         self.buttonPrivate = QtWidgets.QPushButton(self.centralwidget)
  1478.         self.buttonPrivate.setObjectName("buttonPrivate")
  1479.         self.gridLayout.addWidget(self.buttonPrivate, 1, 2, 1, 1)
  1480.         MainWindow.setCentralWidget(self.centralwidget)
  1481.         self.menubar = QtWidgets.QMenuBar(MainWindow)
  1482.         self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 21))
  1483.         self.menubar.setObjectName("menubar")
  1484.         MainWindow.setMenuBar(self.menubar)
  1485.         self.statusbar = QtWidgets.QStatusBar(MainWindow)
  1486.         self.statusbar.setObjectName("statusbar")
  1487.         MainWindow.setStatusBar(self.statusbar)
  1488.  
  1489.         self.retranslateUi(MainWindow)
  1490.         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  1491.         self.buttonRooms.clicked.connect(self.avaibleRoomsWindow)
  1492.         self.buttonPrivate.clicked.connect(self.chatWindowPop)
  1493.         self.buttonCreate.clicked.connect(self.createRoomPop)
  1494.     def chatWindowPop(self):
  1495.         self.IpAddressCheck = QtWidgets.QMainWindow()
  1496.         self.ui = Ui_IpAddressCheck()
  1497.         self.ui.setupUi(self.IpAddressCheck)
  1498.         self.IpAddressCheck.show()
  1499.  
  1500.     def createRoomPop(self):
  1501.         self.createRoomWindow = QtWidgets.QMainWindow()
  1502.         self.ui = Ui_createRoomWindow()
  1503.         self.ui.setupUi(self.createRoomWindow)
  1504.         self.createRoomWindow.show()
  1505.         MainWindow.hide()
  1506.  
  1507.     def avaibleRoomsWindow(self):
  1508.         self.Loader = QtWidgets.QMainWindow()
  1509.         self.ui = Ui_Loader()
  1510.         self.ui.setupUi(self.Loader)
  1511.         self.Loader.show()
  1512.         MainWindow.hide()
  1513.  
  1514.     def retranslateUi(self, MainWindow):
  1515.         _translate = QtCore.QCoreApplication.translate
  1516.         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  1517.         self.label.setText(_translate("MainWindow", "COMPANY NAME LAN CHAT"))
  1518.         self.buttonCreate.setText(_translate("MainWindow", "Create a chat room"))
  1519.         self.buttonRooms.setText(_translate("MainWindow", "See avaible chat rooms"))
  1520.         self.buttonPrivate.setText(_translate("MainWindow", "Private chat session"))
  1521.  
  1522.  
  1523. def backEndConnection():
  1524.     global msg
  1525.     global user
  1526.     global sendMsg
  1527.     user = queue.Queue()
  1528.     msg = queue.Queue()
  1529.     sendMsg = queue.Queue()
  1530.     HEADER_LENGTH = 10
  1531.  
  1532.     IP = "127.0.0.1"
  1533.     PORT = 4040
  1534.     my_username = "Kyand"
  1535.  
  1536.     client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  1537.     client_socket.connect((IP, PORT))
  1538.  
  1539.     client_socket.setblocking(False)
  1540.  
  1541.     username = my_username.encode('utf-8')
  1542.     username_header = f"{len(username):<{HEADER_LENGTH}}".encode('utf-8')
  1543.     client_socket.send(username_header + username)
  1544.  
  1545.     while True:
  1546.         message = ""
  1547.         if sendMsg.empty():
  1548.             pass
  1549.         else:
  1550.             message = sendMsg.get()
  1551.  
  1552.         if message:
  1553.  
  1554.             message = message.encode('utf-8')
  1555.             message_header = f"{len(message):<{HEADER_LENGTH}}".encode('utf-8')
  1556.             client_socket.send(message_header + message)
  1557.  
  1558.         try:
  1559.             while True:
  1560.  
  1561.                 username_header = client_socket.recv(HEADER_LENGTH)
  1562.  
  1563.                 if not len(username_header):
  1564.                     #print('Connection closed by the server')
  1565.                     sys.exit()
  1566.  
  1567.                 username_length = int(username_header.decode('utf-8').strip())
  1568.  
  1569.                 username = client_socket.recv(username_length).decode('utf-8')
  1570.                 user.put(username)
  1571.  
  1572.                 message_header = client_socket.recv(HEADER_LENGTH)
  1573.                 message_length = int(message_header.decode('utf-8').strip())
  1574.                 message = client_socket.recv(message_length).decode('utf-8')
  1575.                 msg.put(message)
  1576.  
  1577.                 #print(f'{"oof"} > {"oof"}')
  1578.  
  1579.         except IOError as e:
  1580.             if e.errno != errno.EAGAIN and e.errno != errno.EWOULDBLOCK:
  1581.                 #print('Reading error: {}'.format(str(e)))
  1582.                 sys.exit()
  1583.             continue
  1584.  
  1585.         except Exception as e:
  1586.             #print('Reading error: '.format(str(e)))
  1587.             sys.exit()
  1588.  
  1589.  
  1590.  
  1591. if __name__ == "__main__":
  1592.     import sys
  1593.  
  1594.     app = QtWidgets.QApplication(sys.argv)
  1595.     MainWindow = QtWidgets.QMainWindow()
  1596.     ui = Ui_MainWindow()
  1597.     ui.setupUi(MainWindow)
  1598.     MainWindow.show()
  1599.     sys.exit(app.exec_())
  1600.  
  1601.  
  1602. #socketThread = threading.Thread(target=backEndConnection)
  1603. #socketThread.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement