Commit 823b4632b3a4e27248358d707260788aef223b5d

Authored by Imanol-Mikel Barba Sabariego
1 parent 8288ac94

git-svn-id: svn://imanolbarba.net/PAD@38 c2ee353e-ed0d-4329-bf56-03aec153487f

Showing 48 changed files with 1696 additions and 552 deletions
JChatServer/bin/pad/prac2/JChat.class deleted
No preview for this file type
JChatServer/.classpath renamed to JChatServerV2/.classpath
JChatServer/.project renamed to JChatServerV2/.project
JChatServer/.settings/org.eclipse.jdt.core.prefs renamed to JChatServerV2/.settings/org.eclipse.jdt.core.prefs
JChatServer/bin/pad/prac2/ChatException.class renamed to JChatServerV2/bin/pad/prac2/ChatException.class
No preview for this file type
JChatServer/bin/pad/prac2/Connection.class renamed to JChatServerV2/bin/pad/prac2/Connection.class
No preview for this file type
JChatServer/bin/pad/prac2/JChat$1.class renamed to JChatServerV2/bin/pad/prac2/JChat$1.class
No preview for this file type
JChatServerV2/bin/pad/prac2/JChat.class 0 → 100644
No preview for this file type
JChatServer/bin/pad/prac2/MyServerSocket.class renamed to JChatServerV2/bin/pad/prac2/MyServerSocket.class
No preview for this file type
JChatServer/bin/pad/prac2/MySocket.class renamed to JChatServerV2/bin/pad/prac2/MySocket.class
No preview for this file type
JChatServer/bin/pad/prac2/Server.class renamed to JChatServerV2/bin/pad/prac2/Server.class
No preview for this file type
JChatServer/src/pad/prac2/ChatException.java renamed to JChatServerV2/src/pad/prac2/ChatException.java
JChatServer/src/pad/prac2/Connection.java renamed to JChatServerV2/src/pad/prac2/Connection.java
@@ -69,18 +69,23 @@ public class Connection extends Thread @@ -69,18 +69,23 @@ public class Connection extends Thread
69 try 69 try
70 { 70 {
71 str = socket.recvMsg(); 71 str = socket.recvMsg();
72 - while(str.contains(" ")) 72 + if(str.contains(" "))
73 { 73 {
74 socket.sendMsg("CHATNICKINVALID"); 74 socket.sendMsg("CHATNICKINVALID");
75 - str = socket.recvMsg(); 75 + kill = true;
  76 + continue;
76 } 77 }
77 - while(serv.isOnline(str)) 78 + else if(serv.isOnline(str))
78 { 79 {
79 socket.sendMsg("CHATNICKEXIST"); 80 socket.sendMsg("CHATNICKEXIST");
80 - str = socket.recvMsg(); 81 + kill = true;
  82 + continue;
  83 + }
  84 + else
  85 + {
  86 + socket.sendMsg("CHATOK");
  87 + serv.addToChatroom(this, str);
81 } 88 }
82 - socket.sendMsg("CHATOK");  
83 - serv.addToChatroom(this, str);  
84 } 89 }
85 catch (IOException e) 90 catch (IOException e)
86 { 91 {
@@ -96,23 +101,24 @@ public class Connection extends Thread @@ -96,23 +101,24 @@ public class Connection extends Thread
96 { 101 {
97 try 102 try
98 { 103 {
99 - str = "/disconnect"; 104 + str = "0/disconnect";
100 str = socket.recvMsg(); 105 str = socket.recvMsg();
  106 + str = str.substring(1);
101 if(str.equals("/disconnect")) 107 if(str.equals("/disconnect"))
102 { 108 {
103 - socket.sendMsg("DISC_OK"); 109 + socket.sendMsg("0DISC_OK");
104 System.out.println(serv.getNickname(this) + " disconnected"); 110 System.out.println(serv.getNickname(this) + " disconnected");
105 break; 111 break;
106 } 112 }
107 else if(str.equals("/exit")) 113 else if(str.equals("/exit"))
108 { 114 {
109 - socket.sendMsg("EXIT_OK"); 115 + socket.sendMsg("0EXIT_OK");
110 System.out.println(serv.getNickname(this) + " disconnected"); 116 System.out.println(serv.getNickname(this) + " disconnected");
111 break; 117 break;
112 } 118 }
113 else if(str.equals("/who")) 119 else if(str.equals("/who"))
114 { 120 {
115 - socket.sendMsg(serv.listOnline()); 121 + socket.sendMsg("0" + serv.listOnline());
116 } 122 }
117 else if(str.startsWith("@")) 123 else if(str.startsWith("@"))
118 { 124 {
@@ -120,16 +126,16 @@ public class Connection extends Thread @@ -120,16 +126,16 @@ public class Connection extends Thread
120 { 126 {
121 if(!str.contains(" ")) 127 if(!str.contains(" "))
122 { 128 {
123 - serv.sendTo(this,str.substring(1),""); 129 + serv.sendTo(this,str.substring(1),"1");
124 } 130 }
125 else 131 else
126 { 132 {
127 - serv.sendTo(this,str.substring(1,str.indexOf(' ')),str.substring(str.indexOf(' ')+1)); 133 + serv.sendTo(this,"1"+str.substring(1,str.indexOf(' ')),str.substring(str.indexOf(' ')+1));
128 } 134 }
129 } 135 }
130 catch(ChatException cE) 136 catch(ChatException cE)
131 { 137 {
132 - socket.sendMsg(cE.getMessage()); 138 + socket.sendMsg("0"+cE.getMessage());
133 } 139 }
134 } 140 }
135 else 141 else
JChatServer/src/pad/prac2/JChat.java renamed to JChatServerV2/src/pad/prac2/JChat.java
@@ -8,14 +8,17 @@ public class JChat @@ -8,14 +8,17 @@ public class JChat
8 { 8 {
9 String ip; 9 String ip;
10 int port, roomSize; 10 int port, roomSize;
11 - Scanner in = new Scanner(System.in); 11 + /*Scanner in = new Scanner(System.in);
12 System.out.print("IP: "); 12 System.out.print("IP: ");
13 ip = in.nextLine(); 13 ip = in.nextLine();
14 System.out.print("Port: "); 14 System.out.print("Port: ");
15 port = in.nextInt(); 15 port = in.nextInt();
16 System.out.print("Size of chatroom: "); 16 System.out.print("Size of chatroom: ");
17 roomSize = in.nextInt(); 17 roomSize = in.nextInt();
18 - in.close(); 18 + in.close();*/
  19 + ip = "localhost";
  20 + port = 3001;
  21 + roomSize = 5;
19 final Server serv = new Server(ip,port,roomSize); 22 final Server serv = new Server(ip,port,roomSize);
20 Runtime.getRuntime().addShutdownHook(new Thread() 23 Runtime.getRuntime().addShutdownHook(new Thread()
21 { 24 {
JChatServer/src/pad/prac2/MyServerSocket.java renamed to JChatServerV2/src/pad/prac2/MyServerSocket.java
JChatServer/src/pad/prac2/MySocket.java renamed to JChatServerV2/src/pad/prac2/MySocket.java
JChatServer/src/pad/prac2/Server.java renamed to JChatServerV2/src/pad/prac2/Server.java
@@ -134,7 +134,7 @@ public class Server @@ -134,7 +134,7 @@ public class Server
134 conn = it.next(); 134 conn = it.next();
135 if(conn != origin) 135 if(conn != origin)
136 { 136 {
137 - conn.sendMessage(nickname + ": " + message); 137 + conn.sendMessage("0"+nickname + ": " + message);
138 } 138 }
139 } 139 }
140 lock.unlock(); 140 lock.unlock();
@@ -145,15 +145,38 @@ public class Server @@ -145,15 +145,38 @@ public class Server
145 return activeConnections.get(c); 145 return activeConnections.get(c);
146 } 146 }
147 147
  148 + public void notifyAllConnections()
  149 + {
  150 + lock.lock();
  151 + Set<Connection> connections = activeConnections.keySet();
  152 + Iterator<Connection> it = connections.iterator();
  153 + Connection conn;
  154 + while(it.hasNext())
  155 + {
  156 + conn = it.next();
  157 + try
  158 + {
  159 + conn.sendMessage("USERLIST:"+nickList());
  160 + }
  161 + catch(IOException ioExc)
  162 + {
  163 + System.out.println("TCP: Error writing to socket");
  164 + }
  165 + }
  166 + lock.unlock();
  167 + }
  168 +
148 public void addToChatroom(Connection c, String nickName) 169 public void addToChatroom(Connection c, String nickName)
149 { 170 {
150 activeConnections.put(c, nickName); 171 activeConnections.put(c, nickName);
151 System.out.println(nickName + " has entered the room"); 172 System.out.println(nickName + " has entered the room");
  173 + notifyAllConnections();
152 } 174 }
153 175
154 private void removeFromChatroom(Connection c) 176 private void removeFromChatroom(Connection c)
155 { 177 {
156 activeConnections.remove(c); 178 activeConnections.remove(c);
  179 + notifyAllConnections();
157 } 180 }
158 181
159 public boolean isOnline(String nick) 182 public boolean isOnline(String nick)
@@ -165,15 +188,22 @@ public class Server @@ -165,15 +188,22 @@ public class Server
165 { 188 {
166 lock.lock(); 189 lock.lock();
167 String ret = new Integer(activeConnections.size()).toString(); 190 String ret = new Integer(activeConnections.size()).toString();
168 - ret += " people currently online:"; 191 + ret += " people currently online:\n";
  192 + ret += nickList();
  193 + lock.unlock();
  194 + return ret;
  195 + }
  196 +
  197 + public String nickList()
  198 + {
  199 + String ret = "";
169 Collection<String> nickNames = activeConnections.values(); 200 Collection<String> nickNames = activeConnections.values();
170 Iterator<String> it = nickNames.iterator(); 201 Iterator<String> it = nickNames.iterator();
171 while(it.hasNext()) 202 while(it.hasNext())
172 { 203 {
173 - ret += "\n";  
174 ret += it.next(); 204 ret += it.next();
  205 + ret += "\n";
175 } 206 }
176 - lock.unlock();  
177 return ret; 207 return ret;
178 } 208 }
179 209
QChatClient/QChatClient.pro
@@ -13,21 +13,24 @@ TEMPLATE = app @@ -13,21 +13,24 @@ TEMPLATE = app
13 13
14 14
15 SOURCES += main.cpp\ 15 SOURCES += main.cpp\
16 - chatwindow.cpp \  
17 loginscreen.cpp \ 16 loginscreen.cpp \
18 chatroom.cpp \ 17 chatroom.cpp \
19 Socket.cpp \ 18 Socket.cpp \
20 - chatwidget.cpp 19 + chatwidget.cpp \
  20 + chatwindow.cpp \
  21 + chatinputtext.cpp
21 22
22 -HEADERS += chatwindow.h \ 23 +HEADERS += \
23 loginscreen.h \ 24 loginscreen.h \
24 chatroom.h \ 25 chatroom.h \
25 SocketException.h \ 26 SocketException.h \
26 Socket.h \ 27 Socket.h \
27 - chatwidget.h 28 + chatwidget.h \
  29 + chatwindow.h \
  30 + chatinputtext.h
28 31
29 FORMS += chatwindow.ui \ 32 FORMS += chatwindow.ui \
30 loginscreen.ui \ 33 loginscreen.ui \
31 chatroom.ui 34 chatroom.ui
32 35
33 -LIBS += -lpthread 36 +QMAKE_CXXFLAGS += -std=c++11
QChatClient/QChatClient.pro.user
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE QtCreatorProject> 2 <!DOCTYPE QtCreatorProject>
3 -<!-- Written by QtCreator 2.7.1, 2013-12-19T13:24:57. --> 3 +<!-- Written by QtCreator 2.7.1, 2013-12-25T12:22:15. -->
4 <qtcreator> 4 <qtcreator>
5 <data> 5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable> 6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 <valuemap type="QVariantMap"> 53 <valuemap type="QVariantMap">
54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value> 54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
55 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value> 55 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
56 - <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">{430bae4e-c8d6-488c-936e-c89fd5587cd0}</value> 56 + <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">{d6a12d1a-dee4-4341-8f4f-e2749eba145e}</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> 57 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
58 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> 58 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
59 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> 59 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
@@ -247,7 +247,7 @@ @@ -247,7 +247,7 @@
247 </data> 247 </data>
248 <data> 248 <data>
249 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable> 249 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
250 - <value type="QString">{0fd5067a-d849-4d4e-9457-800baef2de83}</value> 250 + <value type="QString">{fd24a9a9-cdbc-49b3-845c-b174fda2a7ac}</value>
251 </data> 251 </data>
252 <data> 252 <data>
253 <variable>ProjectExplorer.Project.Updater.FileVersion</variable> 253 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
QChatClient/chatinputtext.cpp 0 → 100644
  1 +#include "chatinputtext.h"
  2 +
  3 +chatInputText::chatInputText(QWidget *parent) :
  4 + QTextEdit(parent)
  5 +{
  6 +}
  7 +
  8 +void chatInputText::keyPressEvent(QKeyEvent *ke)
  9 +{
  10 + if(ke->key() == Qt::Key_Return || ke->key() == Qt::Key_Enter)
  11 + {
  12 + emit msgReady();
  13 + return;
  14 + }
  15 + QTextEdit::keyPressEvent(ke);
  16 +}
QChatClient/chatinputtext.h 0 → 100644
  1 +#ifndef CHATINPUTTEXT_H
  2 +#define CHATINPUTTEXT_H
  3 +
  4 +#include <QTextEdit>
  5 +#include <QKeyEvent>
  6 +
  7 +class chatInputText : public QTextEdit
  8 +{
  9 + Q_OBJECT
  10 +public:
  11 + explicit chatInputText(QWidget *parent = 0);
  12 +
  13 +signals:
  14 +
  15 +protected:
  16 + void keyPressEvent(QKeyEvent *ke);
  17 +
  18 +signals:
  19 + void msgReady();
  20 +
  21 +public slots:
  22 +
  23 +};
  24 +
  25 +#endif // CHATINPUTTEXT_H
QChatClient/chatroom.cpp
1 #include "chatroom.h" 1 #include "chatroom.h"
2 #include "ui_chatroom.h" 2 #include "ui_chatroom.h"
3 3
  4 +list<QString> sendQueue;
  5 +
  6 +std::mutex myMutex;
  7 +
  8 +std::mutex msgMutex;
  9 +unique_lock<std::mutex>* msgLock;
  10 +
  11 +std::condition_variable msgListNotEmpty;
  12 +
4 Chatroom::Chatroom(QWidget *parent) : 13 Chatroom::Chatroom(QWidget *parent) :
5 QMainWindow(parent), 14 QMainWindow(parent),
6 ui(new Ui::Chatroom) 15 ui(new Ui::Chatroom)
@@ -15,127 +24,253 @@ Chatroom::Chatroom(QWidget *parent) : @@ -15,127 +24,253 @@ Chatroom::Chatroom(QWidget *parent) :
15 ui->chatSplitter->setSizes(chatSizes); 24 ui->chatSplitter->setSizes(chatSizes);
16 ui->windowSplitter->setSizes(splitSizes); 25 ui->windowSplitter->setSizes(splitSizes);
17 connected = false; 26 connected = false;
18 -} 27 + msgLock = new unique_lock<std::mutex>(msgMutex,std::defer_lock);
  28 + send = NULL;
  29 + recv = NULL;
19 30
20 -void killThread(thread_args *t_arg)  
21 -{  
22 - if(t_arg != 0)  
23 - {  
24 - delete t_arg;  
25 - t_arg = 0;  
26 - }  
27 - pthread_exit(NULL); 31 + connect(ui->actionConnect,SIGNAL(triggered()),this,SLOT(startSession()));
  32 + connect(ui->actionExit,SIGNAL(triggered()),this,SLOT(finish()));
  33 + connect(this,SIGNAL(threadsFinished(bool)),this,SLOT(finishThreads(bool)));
  34 + connect(ui->inputText,SIGNAL(msgReady()),this,SLOT(sendMsg()));
  35 + connect(ui->actionDisconnect,SIGNAL(triggered()),this,SLOT(disconnectChatroom()));
  36 + connect(ui->sendButton,SIGNAL(clicked()),this,SLOT(sendMsg()));
  37 + connect(this,SIGNAL(messagesToPrint()),this,SLOT(printMsg()));
28 } 38 }
29 39
30 -void *sendThread(void* args) 40 +void sendThread(Socket* s, Chatroom* chat)
31 { 41 {
32 string send; 42 string send;
33 - struct thread_args *t_arg = (struct thread_args*)args;  
34 - while(connected) 43 + while(chat->getConnected())
35 { 44 {
36 - cout << "> ";  
37 - getline(cin,send);  
38 - if(cin.eof()) 45 + while(sendQueue.empty())
39 { 46 {
40 - send = "/exit"; 47 + msgLock->lock();
  48 + msgListNotEmpty.wait(*msgLock);
  49 + if(!chat->getConnected())
  50 + {
  51 + return;
  52 + }
  53 + msgLock->unlock();
41 } 54 }
  55 + msgLock->lock();
  56 + send = sendQueue.front().toStdString();
  57 + sendQueue.pop_front();
42 try 58 try
43 { 59 {
44 - *(t_arg->s) << send; 60 + if(send[0] == '@')
  61 + {
  62 + send = '1' + send;
  63 + }
  64 + else
  65 + {
  66 + send = '0' + send;
  67 + }
  68 + *s << send;
  69 + msgLock->unlock();
  70 + send = send.substr(1);
45 if(send == "/disconnect" || send == "/exit") 71 if(send == "/disconnect" || send == "/exit")
46 { 72 {
47 break; 73 break;
48 } 74 }
  75 + chat->putMsgToPrintQueue(chat->getNickname().toStdString().append(": ").append(send));
49 } 76 }
50 catch(SocketException& e) 77 catch(SocketException& e)
51 { 78 {
52 cout << e.description() << endl; 79 cout << e.description() << endl;
53 } 80 }
54 } 81 }
55 - killThread(t_arg); 82 + cout << "sendThread finished" << endl;
56 } 83 }
57 84
58 -void *recvThread(void* args) 85 +void recvThread(Socket* s, Chatroom* chat)
59 { 86 {
60 string recv; 87 string recv;
61 - struct thread_args *t_arg = (struct thread_args*)args;  
62 while(true) 88 while(true)
63 { 89 {
64 try 90 try
65 { 91 {
66 - *(t_arg->s) >> recv; 92 + *s >> recv;
  93 + if(recv[0] == '1')
  94 + {
  95 + recv = recv.substr(1);
  96 + chat->relayMsg(recv);
  97 + continue;
  98 + }
  99 + else if(recv[0] == '0')
  100 + {
  101 + recv = recv.substr(1);
  102 + }
67 } 103 }
68 catch(SocketException &e) 104 catch(SocketException &e)
69 { 105 {
70 - connected = false; 106 + chat->setConnected(false);
71 cout << e.description() << endl; 107 cout << e.description() << endl;
72 - cout << "Connection lost. Press Enter to retry connection to chatroom. Press CTRL+C to exit." << endl;  
73 - pthread_cond_signal(t_arg->condition); 108 + msgListNotEmpty.notify_all();
  109 + emit chat->threadsFinished(false);
74 break; 110 break;
75 } 111 }
76 if(recv == "DISC_OK") 112 if(recv == "DISC_OK")
77 { 113 {
78 cout << "Disconnecting" << endl; 114 cout << "Disconnecting" << endl;
79 - connected = false;  
80 - pthread_cond_signal(t_arg->condition); 115 + chat->setConnected(false);
  116 + msgListNotEmpty.notify_all();
  117 + emit chat->threadsFinished(false);
81 break; 118 break;
82 } 119 }
83 else if(recv == "EXIT_OK") 120 else if(recv == "EXIT_OK")
84 { 121 {
85 cout << "Exiting" << endl; 122 cout << "Exiting" << endl;
86 - connected = false;  
87 - pthread_cond_signal(t_arg->condition); 123 + chat->setConnected(false);
  124 + msgListNotEmpty.notify_all();
  125 + emit chat->threadsFinished(true);
88 break; 126 break;
89 } 127 }
90 else 128 else
91 { 129 {
92 - cout << recv << endl; 130 + chat->putMsgToPrintQueue(recv);
93 } 131 }
94 } 132 }
95 - killThread(t_arg); 133 + cout << "recvThread finished" << endl;
96 } 134 }
97 135
98 -void Chatroom::start() 136 +bool Chatroom::getConnected()
99 { 137 {
100 - Socket s;  
101 - connected = false;  
102 - pthread_mutex_t mutex;  
103 - pthread_mutex_init(&mutex,0);  
104 - pthread_cond_t condition;  
105 - pthread_cond_init(&condition,0);  
106 - pthread_t recv, send;  
107 - pthread_attr_t attr;  
108 - pthread_attr_init(&attr);  
109 - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);  
110 - pthread_mutex_lock(&mutex);  
111 - thread_args *sArgs = new thread_args;  
112 - thread_args *rArgs = new thread_args;  
113 - sArgs->mutex = &mutex;  
114 - sArgs->condition = &condition;  
115 - sArgs->s = &s;  
116 -  
117 - rArgs->mutex = &mutex;  
118 - rArgs->condition = &condition;  
119 - rArgs->s = &s;  
120 -  
121 - pthread_create(&send,&attr,sendThread,(void *)sArgs);  
122 - pthread_create(&recv,&attr,recvThread,(void *)rArgs);  
123 -  
124 - while(connected) 138 + myMutex.lock();
  139 + bool val = connected;
  140 + myMutex.unlock();
  141 + return val;
  142 +}
  143 +
  144 +void Chatroom::setConnected(bool status)
  145 +{
  146 + myMutex.lock();
  147 + connected = status;
  148 + myMutex.unlock();
  149 +}
  150 +
  151 +void Chatroom::putMsgToPrintQueue(string &msg)
  152 +{
  153 + printQueue.push_back(msg);
  154 + emit messagesToPrint();
  155 +}
  156 +
  157 +string Chatroom::getSender(string& msg)
  158 +{
  159 + return msg.substr(5,msg.find(':')-5);
  160 +}
  161 +
  162 +void Chatroom::relayMsg(string& msg)
  163 +{
  164 + string sender = getSender(msg);
  165 + map<string,ChatWindow>::iterator it = activeChats.begin();
  166 + if(activeChats.find(sender) == activeChats.end())
125 { 167 {
126 - pthread_cond_wait(&condition,&mutex); 168 + //LAUNCH new windowchat
127 } 169 }
128 - pthread_mutex_unlock(&mutex);  
129 - pthread_join(recv,NULL);  
130 - pthread_join(send,NULL);  
131 - s.Close();  
132 - pthread_cond_destroy(&condition);  
133 - pthread_mutex_destroy(&mutex); 170 + it = activeChats.find(sender);
  171 + it->second.printMsg(msg);
  172 +}
134 173
135 - //LAUNCH LOGINSCREEN 174 +void Chatroom::printMsg()
  175 +{
  176 + while(!printQueue.empty())
  177 + {
  178 + string msg = printQueue.front();
  179 + ui->chatText->printMsg(msg);
  180 + printQueue.pop_front();
  181 + }
  182 +}
  183 +
  184 +void Chatroom::putMsgToSendQueue(QString& msg)
  185 +{
  186 + msgMutex.lock();
  187 + sendQueue.push_back(msg);
  188 + msgMutex.unlock();
  189 + msgListNotEmpty.notify_all();
  190 +}
  191 +
  192 +void Chatroom::setNickname(QString nick)
  193 +{
  194 + nickname = nick;
  195 +}
  196 +
  197 +QString Chatroom::getNickname()
  198 +{
  199 + return nickname;
  200 +}
  201 +
  202 +void Chatroom::startSession()
  203 +{
  204 + LoginScreen login(&s,this);
  205 + login.exec();
  206 + int result = login.result();
  207 + if(result == QDialog::Accepted)
  208 + {
  209 + ui->inputText->setReadOnly(false);
  210 + }
  211 + else if(result == QDialog::Rejected)
  212 + {
  213 + return;
  214 + }
  215 + connected = true;
  216 + ui->chatText->printServerMsg("Connected to chatroom");
  217 + recv = new std::thread(recvThread,&s,this);
  218 + send = new std::thread(sendThread,&s,this);
  219 +}
  220 +
  221 +void Chatroom::sendMsg()
  222 +{
  223 + QString msg = ui->inputText->toPlainText();
  224 + ui->inputText->clear();
  225 + putMsgToSendQueue(msg);
  226 +}
  227 +
  228 +void Chatroom::finish()
  229 +{
  230 + if(recv == NULL && send == NULL)
  231 + {
  232 + ui->inputText->setReadOnly(true);
  233 + ui->chatText->printServerMsg("Disconnected");
  234 + this->close();
  235 + }
  236 + msgMutex.lock();
  237 + sendQueue.clear();
  238 + sendQueue.push_back("/exit");
  239 + msgMutex.unlock();
  240 + msgListNotEmpty.notify_all();
  241 +}
  242 +
  243 +void Chatroom::disconnectChatroom()
  244 +{
  245 + msgMutex.lock();
  246 + sendQueue.clear();
  247 + sendQueue.push_back("/disconnect");
  248 + msgMutex.unlock();
  249 + msgListNotEmpty.notify_all();
  250 +}
  251 +
  252 +void Chatroom::finishThreads(bool exit)
  253 +{
  254 + myMutex.lock();
  255 + ui->inputText->setReadOnly(true);
  256 + recv->join();
  257 + send->join();
  258 + myMutex.unlock();
  259 + ui->chatText->printServerMsg("Disconnected");
  260 + send = NULL;
  261 + recv = NULL;
  262 + if(exit)
  263 + {
  264 + this->close();
  265 + }
136 } 266 }
137 267
138 Chatroom::~Chatroom() 268 Chatroom::~Chatroom()
139 { 269 {
  270 + delete msgLock;
  271 + delete recv;
  272 + delete send;
140 delete ui; 273 delete ui;
141 } 274 }
  275 +
  276 +
QChatClient/chatroom.h
@@ -3,13 +3,12 @@ @@ -3,13 +3,12 @@
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
5 #include "Socket.h" 5 #include "Socket.h"
6 -  
7 -struct thread_args  
8 -{  
9 - pthread_mutex_t *mutex;  
10 - pthread_cond_t *condition;  
11 - Socket *s;  
12 -}; 6 +#include "loginscreen.h"
  7 +#include <thread>
  8 +#include <mutex>
  9 +#include <condition_variable>
  10 +#include "chatwindow.h"
  11 +#include <map>
13 12
14 namespace Ui { 13 namespace Ui {
15 class Chatroom; 14 class Chatroom;
@@ -21,16 +20,42 @@ class Chatroom : public QMainWindow @@ -21,16 +20,42 @@ class Chatroom : public QMainWindow
21 20
22 public: 21 public:
23 explicit Chatroom(QWidget *parent = 0); 22 explicit Chatroom(QWidget *parent = 0);
  23 + bool getConnected();
  24 + void setConnected(bool status);
  25 + void relayMsg(string& msg);
  26 + void setNickname(QString nick);
  27 + QString getNickname();
  28 + void putMsgToPrintQueue(string& msg);
24 ~Chatroom(); 29 ~Chatroom();
  30 +
  31 +public slots:
  32 + void startSession();
  33 + void sendMsg();
  34 + void printMsg();
  35 +
  36 +private slots:
  37 + void finishThreads(bool exit);
  38 + void finish();
  39 + void disconnectChatroom();
  40 +
  41 +signals:
  42 + void threadsFinished(bool exit);
  43 + void messagesToPrint();
25 44
26 private: 45 private:
27 Ui::Chatroom *ui; 46 Ui::Chatroom *ui;
28 - void start(); 47 + map<string,ChatWindow> activeChats;
29 bool connected; 48 bool connected;
  49 + string getSender(string& msg);
  50 + void putMsgToSendQueue(QString& msg);
  51 + std::thread *send;
  52 + std::thread *recv;
  53 + Socket s;
  54 + QString nickname;
  55 + list<string> printQueue;
30 }; 56 };
31 57
32 -void *sendThread(void* args);  
33 -void *recvThread(void* args);  
34 -void killThread(thread_args *t_arg); 58 +void sendThread(Socket* s, Chatroom *chat);
  59 +void recvThread(Socket *s, Chatroom *chat);
35 60
36 #endif // CHATROOM_H 61 #endif // CHATROOM_H
QChatClient/chatroom.ui
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 </rect> 11 </rect>
12 </property> 12 </property>
13 <property name="windowTitle"> 13 <property name="windowTitle">
14 - <string>MainWindow</string> 14 + <string>QChatClient</string>
15 </property> 15 </property>
16 <widget class="QWidget" name="centralwidget"> 16 <widget class="QWidget" name="centralwidget">
17 <layout class="QGridLayout" name="gridLayout_2"> 17 <layout class="QGridLayout" name="gridLayout_2">
@@ -44,10 +44,10 @@ @@ -44,10 +44,10 @@
44 </property> 44 </property>
45 <widget class="ChatWidget" name="chatText"> 45 <widget class="ChatWidget" name="chatText">
46 <property name="readOnly"> 46 <property name="readOnly">
47 - <bool>true</bool> 47 + <bool>false</bool>
48 </property> 48 </property>
49 </widget> 49 </widget>
50 - <widget class="QTextEdit" name="inputText"> 50 + <widget class="chatInputText" name="inputText">
51 <property name="sizePolicy"> 51 <property name="sizePolicy">
52 <sizepolicy hsizetype="Expanding" vsizetype="Ignored"> 52 <sizepolicy hsizetype="Expanding" vsizetype="Ignored">
53 <horstretch>0</horstretch> 53 <horstretch>0</horstretch>
@@ -60,6 +60,9 @@ @@ -60,6 +60,9 @@
60 <height>16777215</height> 60 <height>16777215</height>
61 </size> 61 </size>
62 </property> 62 </property>
  63 + <property name="readOnly">
  64 + <bool>true</bool>
  65 + </property>
63 </widget> 66 </widget>
64 </widget> 67 </widget>
65 </item> 68 </item>
@@ -87,8 +90,55 @@ @@ -87,8 +90,55 @@
87 </widget> 90 </widget>
88 </widget> 91 </widget>
89 </item> 92 </item>
  93 + <item row="1" column="0">
  94 + <widget class="QPushButton" name="sendButton">
  95 + <property name="sizePolicy">
  96 + <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
  97 + <horstretch>0</horstretch>
  98 + <verstretch>0</verstretch>
  99 + </sizepolicy>
  100 + </property>
  101 + <property name="text">
  102 + <string>Send</string>
  103 + </property>
  104 + </widget>
  105 + </item>
90 </layout> 106 </layout>
91 </widget> 107 </widget>
  108 + <widget class="QMenuBar" name="menuBar">
  109 + <property name="geometry">
  110 + <rect>
  111 + <x>0</x>
  112 + <y>0</y>
  113 + <width>800</width>
  114 + <height>26</height>
  115 + </rect>
  116 + </property>
  117 + <widget class="QMenu" name="menuChat">
  118 + <property name="title">
  119 + <string>Chat</string>
  120 + </property>
  121 + <addaction name="actionConnect"/>
  122 + <addaction name="actionDisconnect"/>
  123 + <addaction name="actionExit"/>
  124 + </widget>
  125 + <addaction name="menuChat"/>
  126 + </widget>
  127 + <action name="actionConnect">
  128 + <property name="text">
  129 + <string>Connect...</string>
  130 + </property>
  131 + </action>
  132 + <action name="actionExit">
  133 + <property name="text">
  134 + <string>Exit</string>
  135 + </property>
  136 + </action>
  137 + <action name="actionDisconnect">
  138 + <property name="text">
  139 + <string>Disconnect</string>
  140 + </property>
  141 + </action>
92 </widget> 142 </widget>
93 <customwidgets> 143 <customwidgets>
94 <customwidget> 144 <customwidget>
@@ -96,6 +146,11 @@ @@ -96,6 +146,11 @@
96 <extends>QTextEdit</extends> 146 <extends>QTextEdit</extends>
97 <header>chatwidget.h</header> 147 <header>chatwidget.h</header>
98 </customwidget> 148 </customwidget>
  149 + <customwidget>
  150 + <class>chatInputText</class>
  151 + <extends>QTextEdit</extends>
  152 + <header>chatinputtext.h</header>
  153 + </customwidget>
99 </customwidgets> 154 </customwidgets>
100 <resources/> 155 <resources/>
101 <connections/> 156 <connections/>
QChatClient/chatwidget.cpp
@@ -6,18 +6,17 @@ ChatWidget::ChatWidget(QWidget *parent) : @@ -6,18 +6,17 @@ ChatWidget::ChatWidget(QWidget *parent) :
6 6
7 } 7 }
8 8
9 -void ChatWidget::printServerMsg(QString &str) 9 +void ChatWidget::printServerMsg(const string &str)
10 { 10 {
11 - this->append("<p style=\"font-style:italic;color:gray;\">" + str + "</p>"); 11 + this->append("<p style=\"font-style:italic;color:gray;line-height:25%;\">" + QString::fromStdString(str) + "</p>");
12 } 12 }
13 13
14 -void ChatWidget::printMsg(QString &str) 14 +void ChatWidget::printMsg(const string &str)
15 { 15 {
16 - this->append(str); 16 + this->append(QString::fromStdString(str));
17 } 17 }
18 18
19 -void ChatWidget::printStatusMsg(QString &str) 19 +void ChatWidget::printStatusMsg(const string &str)
20 { 20 {
21 - this->append("<p style=\"font-weight:bold;\">" + str + "</p>"); 21 + this->append("<p style=\"font-weight:bold;line-height:25%;\">" + QString::fromStdString(str) + "</p>");
22 } 22 }
23 -  
QChatClient/chatwidget.h
@@ -3,14 +3,16 @@ @@ -3,14 +3,16 @@
3 3
4 #include <QTextEdit> 4 #include <QTextEdit>
5 5
  6 +using namespace std;
  7 +
6 class ChatWidget : public QTextEdit 8 class ChatWidget : public QTextEdit
7 { 9 {
8 Q_OBJECT 10 Q_OBJECT
9 public: 11 public:
10 explicit ChatWidget(QWidget *parent = 0); 12 explicit ChatWidget(QWidget *parent = 0);
11 - void printServerMsg(QString &str);  
12 - void printMsg(QString& str);  
13 - void printStatusMsg(QString& str); 13 + void printServerMsg(const string &str);
  14 + void printMsg(const string& str);
  15 + void printStatusMsg(const string& str);
14 16
15 signals: 17 signals:
16 18
QChatClient/chatwindow.cpp
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 3
4 using namespace std; 4 using namespace std;
5 5
6 -ChatWindow::ChatWindow(QWidget *parent) : 6 +ChatWindow::ChatWindow(QString& nickname, QWidget *parent) :
7 QMainWindow(parent), 7 QMainWindow(parent),
8 ui(new Ui::ChatWindow) 8 ui(new Ui::ChatWindow)
9 { 9 {
@@ -12,6 +12,13 @@ ChatWindow::ChatWindow(QWidget *parent) : @@ -12,6 +12,13 @@ ChatWindow::ChatWindow(QWidget *parent) :
12 sizes.push_front(ui->chatText->height()); 12 sizes.push_front(ui->chatText->height());
13 sizes.push_front(100); 13 sizes.push_front(100);
14 ui->splitter->setSizes(sizes); 14 ui->splitter->setSizes(sizes);
  15 + this->setWindowTitle("Chat with " + nickname);
  16 + connect(ui->actionExit,SIGNAL(triggered()),this,SLOT(close()));
  17 +}
  18 +
  19 +void ChatWindow::printMsg(string& str)
  20 +{
  21 + ui->chatText->printMsg(str);
15 } 22 }
16 23
17 ChatWindow::~ChatWindow() 24 ChatWindow::~ChatWindow()
QChatClient/chatwindow.h
@@ -2,6 +2,9 @@ @@ -2,6 +2,9 @@
2 #define CHATWINDOW_H 2 #define CHATWINDOW_H
3 3
4 #include <QMainWindow> 4 #include <QMainWindow>
  5 +#include <string>
  6 +
  7 +using namespace std;
5 8
6 namespace Ui { 9 namespace Ui {
7 class ChatWindow; 10 class ChatWindow;
@@ -12,7 +15,8 @@ class ChatWindow : public QMainWindow @@ -12,7 +15,8 @@ class ChatWindow : public QMainWindow
12 Q_OBJECT 15 Q_OBJECT
13 16
14 public: 17 public:
15 - explicit ChatWindow(QWidget *parent = 0); 18 + explicit ChatWindow(QString& nickname,QWidget *parent = 0);
  19 + void printMsg(string& str);
16 ~ChatWindow(); 20 ~ChatWindow();
17 21
18 private: 22 private:
QChatClient/chatwindow.ui
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 </rect> 11 </rect>
12 </property> 12 </property>
13 <property name="windowTitle"> 13 <property name="windowTitle">
14 - <string>ChatWindow</string> 14 + <string>QChatClient</string>
15 </property> 15 </property>
16 <widget class="QWidget" name="centralWidget"> 16 <widget class="QWidget" name="centralWidget">
17 <property name="enabled"> 17 <property name="enabled">
@@ -24,45 +24,80 @@ @@ -24,45 +24,80 @@
24 </sizepolicy> 24 </sizepolicy>
25 </property> 25 </property>
26 <layout class="QGridLayout" name="gridLayout"> 26 <layout class="QGridLayout" name="gridLayout">
27 - <item row="0" column="0">  
28 - <widget class="QSplitter" name="splitter"> 27 + <item row="3" column="1">
  28 + <spacer name="horizontalSpacer">
29 <property name="orientation"> 29 <property name="orientation">
30 - <enum>Qt::Vertical</enum> 30 + <enum>Qt::Horizontal</enum>
31 </property> 31 </property>
32 - <widget class="ChatWidget" name="chatText">  
33 - <property name="readOnly">  
34 - <bool>true</bool>  
35 - </property>  
36 - </widget>  
37 - <widget class="QTextEdit" name="inputText">  
38 - <property name="enabled">  
39 - <bool>true</bool>  
40 - </property>  
41 - <property name="sizePolicy">  
42 - <sizepolicy hsizetype="Expanding" vsizetype="Ignored">  
43 - <horstretch>0</horstretch>  
44 - <verstretch>0</verstretch>  
45 - </sizepolicy>  
46 - </property>  
47 - <property name="minimumSize">  
48 - <size>  
49 - <width>0</width>  
50 - <height>0</height>  
51 - </size>  
52 - </property>  
53 - <property name="maximumSize">  
54 - <size>  
55 - <width>16777215</width>  
56 - <height>16777215</height>  
57 - </size>  
58 - </property>  
59 - <property name="baseSize">  
60 - <size>  
61 - <width>0</width>  
62 - <height>0</height>  
63 - </size>  
64 - </property>  
65 - </widget> 32 + <property name="sizeHint" stdset="0">
  33 + <size>
  34 + <width>40</width>
  35 + <height>20</height>
  36 + </size>
  37 + </property>
  38 + </spacer>
  39 + </item>
  40 + <item row="3" column="0">
  41 + <widget class="QPushButton" name="sendButton">
  42 + <property name="sizePolicy">
  43 + <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
  44 + <horstretch>0</horstretch>
  45 + <verstretch>0</verstretch>
  46 + </sizepolicy>
  47 + </property>
  48 + <property name="text">
  49 + <string>Send</string>
  50 + </property>
  51 + </widget>
  52 + </item>
  53 + <item row="0" column="0" colspan="2">
  54 + <widget class="QWidget" name="widget" native="true">
  55 + <layout class="QGridLayout" name="gridLayout_2">
  56 + <item row="0" column="0">
  57 + <widget class="QSplitter" name="splitter">
  58 + <property name="orientation">
  59 + <enum>Qt::Vertical</enum>
  60 + </property>
  61 + <widget class="ChatWidget" name="chatText">
  62 + <property name="readOnly">
  63 + <bool>true</bool>
  64 + </property>
  65 + </widget>
  66 + <widget class="chatInputText" name="inputText">
  67 + <property name="enabled">
  68 + <bool>true</bool>
  69 + </property>
  70 + <property name="sizePolicy">
  71 + <sizepolicy hsizetype="Expanding" vsizetype="Ignored">
  72 + <horstretch>0</horstretch>
  73 + <verstretch>0</verstretch>
  74 + </sizepolicy>
  75 + </property>
  76 + <property name="minimumSize">
  77 + <size>
  78 + <width>0</width>
  79 + <height>0</height>
  80 + </size>
  81 + </property>
  82 + <property name="maximumSize">
  83 + <size>
  84 + <width>16777215</width>
  85 + <height>16777215</height>
  86 + </size>
  87 + </property>
  88 + <property name="baseSize">
  89 + <size>
  90 + <width>0</width>
  91 + <height>0</height>
  92 + </size>
  93 + </property>
  94 + <property name="readOnly">
  95 + <bool>true</bool>
  96 + </property>
  97 + </widget>
  98 + </widget>
  99 + </item>
  100 + </layout>
66 </widget> 101 </widget>
67 </item> 102 </item>
68 </layout> 103 </layout>
@@ -73,10 +108,22 @@ @@ -73,10 +108,22 @@
73 <x>0</x> 108 <x>0</x>
74 <y>0</y> 109 <y>0</y>
75 <width>400</width> 110 <width>400</width>
76 - <height>25</height> 111 + <height>26</height>
77 </rect> 112 </rect>
78 </property> 113 </property>
  114 + <widget class="QMenu" name="menuChat">
  115 + <property name="title">
  116 + <string>Chat</string>
  117 + </property>
  118 + <addaction name="actionExit"/>
  119 + </widget>
  120 + <addaction name="menuChat"/>
79 </widget> 121 </widget>
  122 + <action name="actionExit">
  123 + <property name="text">
  124 + <string>Exit</string>
  125 + </property>
  126 + </action>
80 </widget> 127 </widget>
81 <layoutdefault spacing="6" margin="11"/> 128 <layoutdefault spacing="6" margin="11"/>
82 <customwidgets> 129 <customwidgets>
@@ -85,6 +132,11 @@ @@ -85,6 +132,11 @@
85 <extends>QTextEdit</extends> 132 <extends>QTextEdit</extends>
86 <header>chatwidget.h</header> 133 <header>chatwidget.h</header>
87 </customwidget> 134 </customwidget>
  135 + <customwidget>
  136 + <class>chatInputText</class>
  137 + <extends>QTextEdit</extends>
  138 + <header>chatinputtext.h</header>
  139 + </customwidget>
88 </customwidgets> 140 </customwidgets>
89 <resources/> 141 <resources/>
90 <connections/> 142 <connections/>
QChatClient/loginscreen.cpp
1 #include "loginscreen.h" 1 #include "loginscreen.h"
2 #include "ui_loginscreen.h" 2 #include "ui_loginscreen.h"
3 3
4 -LoginScreen::LoginScreen(QWidget *parent) : 4 +LoginScreen::LoginScreen(Socket* s, QWidget *parent) :
5 QDialog(parent), 5 QDialog(parent),
6 ui(new Ui::LoginScreen) 6 ui(new Ui::LoginScreen)
7 { 7 {
8 ui->setupUi(this); 8 ui->setupUi(this);
9 ui->nickEdit->setPlaceholderText("Nickname"); 9 ui->nickEdit->setPlaceholderText("Nickname");
10 ui->serverURLEdit->setPlaceholderText("Server hostname:port"); 10 ui->serverURLEdit->setPlaceholderText("Server hostname:port");
  11 + ui->label->setStyleSheet("QLabel { color : red}");
  12 + ui->label->setVisible(false);
  13 + this->s = s;
  14 + connect(ui->connectButton,SIGNAL(clicked()),this,SLOT(connectToChat()));
  15 + connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(cancelLogin()));
11 } 16 }
12 17
13 -void LoginScreen::parseURL(QString host, int port, QString URL) 18 +bool LoginScreen::parseURL(QString& URL)
14 { 19 {
15 if(validateURL(URL)) 20 if(validateURL(URL))
16 { 21 {
  22 + ui->label->setVisible(false);
17 QStringList strings = URL.split(':'); 23 QStringList strings = URL.split(':');
18 - host = strings[0].toStdString(); 24 + host = strings[0];
19 port = strings[1].toInt(); 25 port = strings[1].toInt();
  26 + return true;
  27 + }
  28 + else
  29 + {
  30 + ui->label->setVisible(true);
  31 + return false;
20 } 32 }
21 } 33 }
22 34
23 -bool LoginScreen::validateURL(QString& url) 35 +bool LoginScreen::validateURL(QString& URL)
24 { 36 {
25 - 37 + QRegExp regex("([a-zA-Z.]+|((\\d{1,3}\\.){3}\\d{1,3})):\\d+");
  38 + return regex.exactMatch(URL);
26 } 39 }
27 40
28 -bool LoginScreen::connect(Socket& s) 41 +void LoginScreen::connectToChat()
29 { 42 {
30 - QString host, nick; 43 + QString nick;
31 string response; 44 string response;
32 - int port;  
33 - parseURL(host,port,ui->serverURLEdit->text());  
34 - nick = ui->nickEdit->text();  
35 - try 45 + QString URL = ui->serverURLEdit->text();
  46 + if(parseURL(URL))
36 { 47 {
37 - s.Create();  
38 - s.Connect(host.toStdString(),port);  
39 - s << nick.toStdString();  
40 - s >> response;  
41 - if(response == "CHATNICKINVALID")  
42 - {  
43 - cout << "Spaces not allowed in nicknames, please enter another nickname: ";  
44 - }  
45 - else if(response == "CHATNICKEXIST")  
46 - {  
47 - cout << "Nickname in use, please enter another nickname: ";  
48 - }  
49 - else if(response == "CHATFULL") 48 + nick = ui->nickEdit->text();
  49 + try
50 { 50 {
51 - cout << "Chatroom is full, please wait..." << endl; 51 + s->Create();
  52 + s->Connect(host.toStdString(),port);
  53 + (*s) << nick.toStdString();
  54 + (*s) >> response;
  55 + if(response == "CHATNICKINVALID")
  56 + {
  57 + ui->label->setText("Spaces not allowed in nicknames, please enter another nickname");
  58 + }
  59 + else if(response == "CHATNICKEXIST")
  60 + {
  61 + ui->label->setText("Nickname in use, please enter another nickname");
  62 + }
  63 + else if(response == "CHATFULL")
  64 + {
  65 + ui->label->setText("Chatroom is full, please wait...");
  66 + }
  67 + else if(response != "CHATOK")
  68 + {
  69 + ui->label->setText("Error: " + QString::fromStdString(response));
  70 + }
  71 + else
  72 + {
  73 + ((Chatroom*)this->parent())->setNickname(nick);
  74 + this->accept();
  75 + return;
  76 + }
  77 + ui->label->setVisible(true);
52 } 78 }
53 - else if(response != "CHATOK") 79 + catch(SocketException& e)
54 { 80 {
55 - cout << "Error: " << response << endl; 81 + cout << e.description() << endl;
  82 + QString exception = QString::fromStdString(e.description());
  83 + ui->label->setText(exception);
  84 + ui->label->setVisible(true);
56 } 85 }
57 - else  
58 - {  
59 - return true;  
60 - }  
61 - s.Close();  
62 - return false;  
63 - }  
64 - catch(SocketException& e)  
65 - {  
66 - cout << e.description() << endl;  
67 - exit(-1);  
68 } 86 }
69 } 87 }
70 88
  89 +void LoginScreen::cancelLogin()
  90 +{
  91 + this->reject();
  92 +}
  93 +
71 LoginScreen::~LoginScreen() 94 LoginScreen::~LoginScreen()
72 { 95 {
73 delete ui; 96 delete ui;
QChatClient/loginscreen.h
@@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
2 #define LOGINSCREEN_H 2 #define LOGINSCREEN_H
3 3
4 #include <QDialog> 4 #include <QDialog>
  5 +#include <QRegExp>
5 #include "Socket.h" 6 #include "Socket.h"
  7 +#include "chatroom.h"
6 8
7 namespace Ui { 9 namespace Ui {
8 class LoginScreen; 10 class LoginScreen;
@@ -13,14 +15,20 @@ class LoginScreen : public QDialog @@ -13,14 +15,20 @@ class LoginScreen : public QDialog
13 Q_OBJECT 15 Q_OBJECT
14 16
15 public: 17 public:
16 - explicit LoginScreen(QWidget *parent = 0);  
17 - bool connect(Socket& s); 18 + explicit LoginScreen(Socket *s, QWidget *parent = 0);
18 bool validateURL(QString& url); 19 bool validateURL(QString& url);
19 - void parseURL(QString host, int port, QString URL); 20 + bool parseURL(QString& URL);
20 ~LoginScreen(); 21 ~LoginScreen();
  22 +
  23 +public slots:
  24 + void connectToChat();
  25 + void cancelLogin();
21 26
22 private: 27 private:
23 Ui::LoginScreen *ui; 28 Ui::LoginScreen *ui;
  29 + int port;
  30 + QString host;
  31 + Socket* s;
24 }; 32 };
25 33
26 #endif // LOGINSCREEN_H 34 #endif // LOGINSCREEN_H
QChatClient/loginscreen.ui
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <x>0</x> 7 <x>0</x>
8 <y>0</y> 8 <y>0</y>
9 <width>402</width> 9 <width>402</width>
10 - <height>173</height> 10 + <height>206</height>
11 </rect> 11 </rect>
12 </property> 12 </property>
13 <property name="sizePolicy"> 13 <property name="sizePolicy">
@@ -20,6 +20,25 @@ @@ -20,6 +20,25 @@
20 <string>Login</string> 20 <string>Login</string>
21 </property> 21 </property>
22 <layout class="QGridLayout" name="gridLayout"> 22 <layout class="QGridLayout" name="gridLayout">
  23 + <item row="4" column="1">
  24 + <widget class="QLineEdit" name="serverURLEdit"/>
  25 + </item>
  26 + <item row="0" column="1">
  27 + <spacer name="topSpacer">
  28 + <property name="orientation">
  29 + <enum>Qt::Vertical</enum>
  30 + </property>
  31 + <property name="sizeType">
  32 + <enum>QSizePolicy::Fixed</enum>
  33 + </property>
  34 + <property name="sizeHint" stdset="0">
  35 + <size>
  36 + <width>20</width>
  37 + <height>5</height>
  38 + </size>
  39 + </property>
  40 + </spacer>
  41 + </item>
23 <item row="1" column="1"> 42 <item row="1" column="1">
24 <widget class="QLabel" name="titleLabel"> 43 <widget class="QLabel" name="titleLabel">
25 <property name="sizePolicy"> 44 <property name="sizePolicy">
@@ -39,45 +58,6 @@ @@ -39,45 +58,6 @@
39 </property> 58 </property>
40 </widget> 59 </widget>
41 </item> 60 </item>
42 - <item row="7" column="1">  
43 - <widget class="QWidget" name="buttonBox" native="true">  
44 - <property name="sizePolicy">  
45 - <sizepolicy hsizetype="Preferred" vsizetype="Maximum">  
46 - <horstretch>0</horstretch>  
47 - <verstretch>0</verstretch>  
48 - </sizepolicy>  
49 - </property>  
50 - <layout class="QGridLayout" name="gridLayout_2">  
51 - <item row="0" column="2">  
52 - <widget class="QPushButton" name="cancelButton">  
53 - <property name="text">  
54 - <string>Cancel</string>  
55 - </property>  
56 - </widget>  
57 - </item>  
58 - <item row="0" column="1">  
59 - <widget class="QPushButton" name="connectButton">  
60 - <property name="text">  
61 - <string>OK</string>  
62 - </property>  
63 - </widget>  
64 - </item>  
65 - <item row="0" column="0">  
66 - <spacer name="buttonHorizSpacer">  
67 - <property name="orientation">  
68 - <enum>Qt::Horizontal</enum>  
69 - </property>  
70 - <property name="sizeHint" stdset="0">  
71 - <size>  
72 - <width>40</width>  
73 - <height>20</height>  
74 - </size>  
75 - </property>  
76 - </spacer>  
77 - </item>  
78 - </layout>  
79 - </widget>  
80 - </item>  
81 <item row="2" column="1"> 61 <item row="2" column="1">
82 <spacer name="verticalSpacer"> 62 <spacer name="verticalSpacer">
83 <property name="orientation"> 63 <property name="orientation">
@@ -94,18 +74,18 @@ @@ -94,18 +74,18 @@
94 </property> 74 </property>
95 </spacer> 75 </spacer>
96 </item> 76 </item>
97 - <item row="0" column="1">  
98 - <spacer name="topSpacer"> 77 + <item row="4" column="2">
  78 + <spacer name="rightSpacer">
99 <property name="orientation"> 79 <property name="orientation">
100 - <enum>Qt::Vertical</enum> 80 + <enum>Qt::Horizontal</enum>
101 </property> 81 </property>
102 <property name="sizeType"> 82 <property name="sizeType">
103 - <enum>QSizePolicy::Fixed</enum> 83 + <enum>QSizePolicy::Minimum</enum>
104 </property> 84 </property>
105 <property name="sizeHint" stdset="0"> 85 <property name="sizeHint" stdset="0">
106 <size> 86 <size>
107 - <width>20</width>  
108 - <height>5</height> 87 + <width>10</width>
  88 + <height>20</height>
109 </size> 89 </size>
110 </property> 90 </property>
111 </spacer> 91 </spacer>
@@ -129,27 +109,63 @@ @@ -129,27 +109,63 @@
129 <item row="3" column="1"> 109 <item row="3" column="1">
130 <widget class="QLineEdit" name="nickEdit"/> 110 <widget class="QLineEdit" name="nickEdit"/>
131 </item> 111 </item>
132 - <item row="4" column="1">  
133 - <widget class="QLineEdit" name="serverURLEdit"/>  
134 - </item>  
135 - <item row="4" column="2">  
136 - <spacer name="rightSpacer">  
137 - <property name="orientation">  
138 - <enum>Qt::Horizontal</enum>  
139 - </property>  
140 - <property name="sizeType">  
141 - <enum>QSizePolicy::Minimum</enum>  
142 - </property>  
143 - <property name="sizeHint" stdset="0">  
144 - <size>  
145 - <width>10</width>  
146 - <height>20</height>  
147 - </size> 112 + <item row="7" column="1">
  113 + <widget class="QWidget" name="buttonBox" native="true">
  114 + <property name="sizePolicy">
  115 + <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
  116 + <horstretch>0</horstretch>
  117 + <verstretch>0</verstretch>
  118 + </sizepolicy>
148 </property> 119 </property>
149 - </spacer> 120 + <layout class="QGridLayout" name="gridLayout_2">
  121 + <item row="1" column="1">
  122 + <widget class="QPushButton" name="connectButton">
  123 + <property name="text">
  124 + <string>OK</string>
  125 + </property>
  126 + </widget>
  127 + </item>
  128 + <item row="1" column="2">
  129 + <widget class="QPushButton" name="cancelButton">
  130 + <property name="text">
  131 + <string>Cancel</string>
  132 + </property>
  133 + </widget>
  134 + </item>
  135 + <item row="1" column="0">
  136 + <spacer name="buttonHorizSpacer">
  137 + <property name="orientation">
  138 + <enum>Qt::Horizontal</enum>
  139 + </property>
  140 + <property name="sizeHint" stdset="0">
  141 + <size>
  142 + <width>40</width>
  143 + <height>20</height>
  144 + </size>
  145 + </property>
  146 + </spacer>
  147 + </item>
  148 + <item row="0" column="0">
  149 + <widget class="QLabel" name="label">
  150 + <property name="enabled">
  151 + <bool>true</bool>
  152 + </property>
  153 + <property name="text">
  154 + <string>INVALID HOSTNAME</string>
  155 + </property>
  156 + </widget>
  157 + </item>
  158 + </layout>
  159 + </widget>
150 </item> 160 </item>
151 </layout> 161 </layout>
152 </widget> 162 </widget>
  163 + <tabstops>
  164 + <tabstop>nickEdit</tabstop>
  165 + <tabstop>serverURLEdit</tabstop>
  166 + <tabstop>connectButton</tabstop>
  167 + <tabstop>cancelButton</tabstop>
  168 + </tabstops>
153 <resources/> 169 <resources/>
154 <connections/> 170 <connections/>
155 </ui> 171 </ui>
QChatClient/main.cpp
1 #include "loginscreen.h" 1 #include "loginscreen.h"
2 #include "chatroom.h" 2 #include "chatroom.h"
3 -#include "chatwindow.h"  
4 #include <QApplication> 3 #include <QApplication>
5 4
6 int main(int argc, char *argv[]) 5 int main(int argc, char *argv[])
@@ -8,6 +7,6 @@ int main(int argc, char *argv[]) @@ -8,6 +7,6 @@ int main(int argc, char *argv[])
8 QApplication a(argc, argv); 7 QApplication a(argc, argv);
9 Chatroom c; 8 Chatroom c;
10 c.show(); 9 c.show();
11 - 10 + c.startSession();
12 return a.exec(); 11 return a.exec();
13 } 12 }
build-QChatClient-Desktop-Debug/Makefile
1 ############################################################################# 1 #############################################################################
2 # Makefile for building: QChatClient 2 # Makefile for building: QChatClient
3 -# Generated by qmake (3.0) (Qt 5.0.2) on: mié dic 18 21:28:34 2013 3 +# Generated by qmake (3.0) (Qt 5.0.2) on: mié dic 25 23:14:46 2013
4 # Project: ../QChatClient/QChatClient.pro 4 # Project: ../QChatClient/QChatClient.pro
5 # Template: app 5 # Template: app
6 # Command: /usr/lib/x86_64-linux-gnu/qt5/bin/qmake -spec linux-g++-64 CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug -o Makefile ../QChatClient/QChatClient.pro 6 # Command: /usr/lib/x86_64-linux-gnu/qt5/bin/qmake -spec linux-g++-64 CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug -o Makefile ../QChatClient/QChatClient.pro
@@ -14,7 +14,7 @@ CC = gcc @@ -14,7 +14,7 @@ CC = gcc
14 CXX = g++ 14 CXX = g++
15 DEFINES = -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB 15 DEFINES = -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
16 CFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT -fPIE $(DEFINES) 16 CFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT -fPIE $(DEFINES)
17 -CXXFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT -fPIE $(DEFINES) 17 +CXXFLAGS = -m64 -pipe -std=c++11 -g -Wall -W -D_REENTRANT -fPIE $(DEFINES)
18 INCPATH = -I/usr/share/qt5/mkspecs/linux-g++-64 -I../QChatClient -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -I. -I. 18 INCPATH = -I/usr/share/qt5/mkspecs/linux-g++-64 -I../QChatClient -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -I. -I.
19 LINK = g++ 19 LINK = g++
20 LFLAGS = -m64 20 LFLAGS = -m64
@@ -46,26 +46,28 @@ OBJECTS_DIR = ./ @@ -46,26 +46,28 @@ OBJECTS_DIR = ./
46 ####### Files 46 ####### Files
47 47
48 SOURCES = ../QChatClient/main.cpp \ 48 SOURCES = ../QChatClient/main.cpp \
49 - ../QChatClient/chatwindow.cpp \  
50 ../QChatClient/loginscreen.cpp \ 49 ../QChatClient/loginscreen.cpp \
51 ../QChatClient/chatroom.cpp \ 50 ../QChatClient/chatroom.cpp \
52 ../QChatClient/Socket.cpp \ 51 ../QChatClient/Socket.cpp \
53 - ../QChatClient/client.cpp \  
54 - ../QChatClient/chatwidget.cpp moc_chatwindow.cpp \  
55 - moc_loginscreen.cpp \ 52 + ../QChatClient/chatwidget.cpp \
  53 + ../QChatClient/chatwindow.cpp \
  54 + ../QChatClient/chatinputtext.cpp moc_loginscreen.cpp \
56 moc_chatroom.cpp \ 55 moc_chatroom.cpp \
57 - moc_chatwidget.cpp 56 + moc_chatwidget.cpp \
  57 + moc_chatwindow.cpp \
  58 + moc_chatinputtext.cpp
58 OBJECTS = main.o \ 59 OBJECTS = main.o \
59 - chatwindow.o \  
60 loginscreen.o \ 60 loginscreen.o \
61 chatroom.o \ 61 chatroom.o \
62 Socket.o \ 62 Socket.o \
63 - client.o \  
64 chatwidget.o \ 63 chatwidget.o \
65 - moc_chatwindow.o \ 64 + chatwindow.o \
  65 + chatinputtext.o \
66 moc_loginscreen.o \ 66 moc_loginscreen.o \
67 moc_chatroom.o \ 67 moc_chatroom.o \
68 - moc_chatwidget.o 68 + moc_chatwidget.o \
  69 + moc_chatwindow.o \
  70 + moc_chatinputtext.o
69 DIST = /usr/share/qt5/mkspecs/features/spec_pre.prf \ 71 DIST = /usr/share/qt5/mkspecs/features/spec_pre.prf \
70 /usr/share/qt5/mkspecs/common/shell-unix.conf \ 72 /usr/share/qt5/mkspecs/common/shell-unix.conf \
71 /usr/share/qt5/mkspecs/common/unix.conf \ 73 /usr/share/qt5/mkspecs/common/unix.conf \
@@ -84,8 +86,14 @@ DIST = /usr/share/qt5/mkspecs/features/spec_pre.prf \ @@ -84,8 +86,14 @@ DIST = /usr/share/qt5/mkspecs/features/spec_pre.prf \
84 /usr/share/qt5/mkspecs/modules/qt_lib_opengl.pri \ 86 /usr/share/qt5/mkspecs/modules/qt_lib_opengl.pri \
85 /usr/share/qt5/mkspecs/modules/qt_lib_platformsupport.pri \ 87 /usr/share/qt5/mkspecs/modules/qt_lib_platformsupport.pri \
86 /usr/share/qt5/mkspecs/modules/qt_lib_printsupport.pri \ 88 /usr/share/qt5/mkspecs/modules/qt_lib_printsupport.pri \
  89 + /usr/share/qt5/mkspecs/modules/qt_lib_qml.pri \
  90 + /usr/share/qt5/mkspecs/modules/qt_lib_qmldevtools.pri \
  91 + /usr/share/qt5/mkspecs/modules/qt_lib_qmltest.pri \
  92 + /usr/share/qt5/mkspecs/modules/qt_lib_quick.pri \
  93 + /usr/share/qt5/mkspecs/modules/qt_lib_quickparticles.pri \
87 /usr/share/qt5/mkspecs/modules/qt_lib_sql.pri \ 94 /usr/share/qt5/mkspecs/modules/qt_lib_sql.pri \
88 /usr/share/qt5/mkspecs/modules/qt_lib_testlib.pri \ 95 /usr/share/qt5/mkspecs/modules/qt_lib_testlib.pri \
  96 + /usr/share/qt5/mkspecs/modules/qt_lib_v8.pri \
89 /usr/share/qt5/mkspecs/modules/qt_lib_widgets.pri \ 97 /usr/share/qt5/mkspecs/modules/qt_lib_widgets.pri \
90 /usr/share/qt5/mkspecs/modules/qt_lib_xml.pri \ 98 /usr/share/qt5/mkspecs/modules/qt_lib_xml.pri \
91 /usr/share/qt5/mkspecs/features/qt_functions.prf \ 99 /usr/share/qt5/mkspecs/features/qt_functions.prf \
@@ -165,8 +173,14 @@ Makefile: ../QChatClient/QChatClient.pro /usr/share/qt5/mkspecs/linux-g++-64/qma @@ -165,8 +173,14 @@ Makefile: ../QChatClient/QChatClient.pro /usr/share/qt5/mkspecs/linux-g++-64/qma
165 /usr/share/qt5/mkspecs/modules/qt_lib_opengl.pri \ 173 /usr/share/qt5/mkspecs/modules/qt_lib_opengl.pri \
166 /usr/share/qt5/mkspecs/modules/qt_lib_platformsupport.pri \ 174 /usr/share/qt5/mkspecs/modules/qt_lib_platformsupport.pri \
167 /usr/share/qt5/mkspecs/modules/qt_lib_printsupport.pri \ 175 /usr/share/qt5/mkspecs/modules/qt_lib_printsupport.pri \
  176 + /usr/share/qt5/mkspecs/modules/qt_lib_qml.pri \
  177 + /usr/share/qt5/mkspecs/modules/qt_lib_qmldevtools.pri \
  178 + /usr/share/qt5/mkspecs/modules/qt_lib_qmltest.pri \
  179 + /usr/share/qt5/mkspecs/modules/qt_lib_quick.pri \
  180 + /usr/share/qt5/mkspecs/modules/qt_lib_quickparticles.pri \
168 /usr/share/qt5/mkspecs/modules/qt_lib_sql.pri \ 181 /usr/share/qt5/mkspecs/modules/qt_lib_sql.pri \
169 /usr/share/qt5/mkspecs/modules/qt_lib_testlib.pri \ 182 /usr/share/qt5/mkspecs/modules/qt_lib_testlib.pri \
  183 + /usr/share/qt5/mkspecs/modules/qt_lib_v8.pri \
170 /usr/share/qt5/mkspecs/modules/qt_lib_widgets.pri \ 184 /usr/share/qt5/mkspecs/modules/qt_lib_widgets.pri \
171 /usr/share/qt5/mkspecs/modules/qt_lib_xml.pri \ 185 /usr/share/qt5/mkspecs/modules/qt_lib_xml.pri \
172 /usr/share/qt5/mkspecs/features/qt_functions.prf \ 186 /usr/share/qt5/mkspecs/features/qt_functions.prf \
@@ -216,8 +230,14 @@ Makefile: ../QChatClient/QChatClient.pro /usr/share/qt5/mkspecs/linux-g++-64/qma @@ -216,8 +230,14 @@ Makefile: ../QChatClient/QChatClient.pro /usr/share/qt5/mkspecs/linux-g++-64/qma
216 /usr/share/qt5/mkspecs/modules/qt_lib_opengl.pri: 230 /usr/share/qt5/mkspecs/modules/qt_lib_opengl.pri:
217 /usr/share/qt5/mkspecs/modules/qt_lib_platformsupport.pri: 231 /usr/share/qt5/mkspecs/modules/qt_lib_platformsupport.pri:
218 /usr/share/qt5/mkspecs/modules/qt_lib_printsupport.pri: 232 /usr/share/qt5/mkspecs/modules/qt_lib_printsupport.pri:
  233 +/usr/share/qt5/mkspecs/modules/qt_lib_qml.pri:
  234 +/usr/share/qt5/mkspecs/modules/qt_lib_qmldevtools.pri:
  235 +/usr/share/qt5/mkspecs/modules/qt_lib_qmltest.pri:
  236 +/usr/share/qt5/mkspecs/modules/qt_lib_quick.pri:
  237 +/usr/share/qt5/mkspecs/modules/qt_lib_quickparticles.pri:
219 /usr/share/qt5/mkspecs/modules/qt_lib_sql.pri: 238 /usr/share/qt5/mkspecs/modules/qt_lib_sql.pri:
220 /usr/share/qt5/mkspecs/modules/qt_lib_testlib.pri: 239 /usr/share/qt5/mkspecs/modules/qt_lib_testlib.pri:
  240 +/usr/share/qt5/mkspecs/modules/qt_lib_v8.pri:
221 /usr/share/qt5/mkspecs/modules/qt_lib_widgets.pri: 241 /usr/share/qt5/mkspecs/modules/qt_lib_widgets.pri:
222 /usr/share/qt5/mkspecs/modules/qt_lib_xml.pri: 242 /usr/share/qt5/mkspecs/modules/qt_lib_xml.pri:
223 /usr/share/qt5/mkspecs/features/qt_functions.prf: 243 /usr/share/qt5/mkspecs/features/qt_functions.prf:
@@ -255,7 +275,7 @@ qmake_all: FORCE @@ -255,7 +275,7 @@ qmake_all: FORCE
255 275
256 dist: 276 dist:
257 @test -d .tmp/QChatClient1.0.0 || mkdir -p .tmp/QChatClient1.0.0 277 @test -d .tmp/QChatClient1.0.0 || mkdir -p .tmp/QChatClient1.0.0
258 - $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/QChatClient1.0.0/ && $(COPY_FILE) --parents ../QChatClient/chatwindow.h ../QChatClient/loginscreen.h ../QChatClient/chatroom.h ../QChatClient/SocketException.h ../QChatClient/Socket.h ../QChatClient/client.h ../QChatClient/chatwidget.h .tmp/QChatClient1.0.0/ && $(COPY_FILE) --parents ../QChatClient/main.cpp ../QChatClient/chatwindow.cpp ../QChatClient/loginscreen.cpp ../QChatClient/chatroom.cpp ../QChatClient/Socket.cpp ../QChatClient/client.cpp ../QChatClient/chatwidget.cpp .tmp/QChatClient1.0.0/ && $(COPY_FILE) --parents ../QChatClient/chatwindow.ui ../QChatClient/loginscreen.ui ../QChatClient/chatroom.ui .tmp/QChatClient1.0.0/ && (cd `dirname .tmp/QChatClient1.0.0` && $(TAR) QChatClient1.0.0.tar QChatClient1.0.0 && $(COMPRESS) QChatClient1.0.0.tar) && $(MOVE) `dirname .tmp/QChatClient1.0.0`/QChatClient1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/QChatClient1.0.0 278 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/QChatClient1.0.0/ && $(COPY_FILE) --parents ../QChatClient/loginscreen.h ../QChatClient/chatroom.h ../QChatClient/SocketException.h ../QChatClient/Socket.h ../QChatClient/chatwidget.h ../QChatClient/chatwindow.h ../QChatClient/chatinputtext.h .tmp/QChatClient1.0.0/ && $(COPY_FILE) --parents ../QChatClient/main.cpp ../QChatClient/loginscreen.cpp ../QChatClient/chatroom.cpp ../QChatClient/Socket.cpp ../QChatClient/chatwidget.cpp ../QChatClient/chatwindow.cpp ../QChatClient/chatinputtext.cpp .tmp/QChatClient1.0.0/ && $(COPY_FILE) --parents ../QChatClient/chatwindow.ui ../QChatClient/loginscreen.ui ../QChatClient/chatroom.ui .tmp/QChatClient1.0.0/ && (cd `dirname .tmp/QChatClient1.0.0` && $(TAR) QChatClient1.0.0.tar QChatClient1.0.0 && $(COMPRESS) QChatClient1.0.0.tar) && $(MOVE) `dirname .tmp/QChatClient1.0.0`/QChatClient1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/QChatClient1.0.0
259 279
260 280
261 clean:compiler_clean 281 clean:compiler_clean
@@ -282,11 +302,11 @@ compiler_wayland-server-header_make_all: @@ -282,11 +302,11 @@ compiler_wayland-server-header_make_all:
282 compiler_wayland-server-header_clean: 302 compiler_wayland-server-header_clean:
283 compiler_wayland-client-header_make_all: 303 compiler_wayland-client-header_make_all:
284 compiler_wayland-client-header_clean: 304 compiler_wayland-client-header_clean:
285 -compiler_moc_header_make_all: moc_chatwindow.cpp moc_loginscreen.cpp moc_chatroom.cpp moc_chatwidget.cpp 305 +compiler_moc_header_make_all: moc_loginscreen.cpp moc_chatroom.cpp moc_chatwidget.cpp moc_chatwindow.cpp moc_chatinputtext.cpp
286 compiler_moc_header_clean: 306 compiler_moc_header_clean:
287 - -$(DEL_FILE) moc_chatwindow.cpp moc_loginscreen.cpp moc_chatroom.cpp moc_chatwidget.cpp  
288 -moc_chatwindow.cpp: /usr/include/qt5/QtWidgets/QMainWindow \  
289 - /usr/include/qt5/QtWidgets/qmainwindow.h \ 307 + -$(DEL_FILE) moc_loginscreen.cpp moc_chatroom.cpp moc_chatwidget.cpp moc_chatwindow.cpp moc_chatinputtext.cpp
  308 +moc_loginscreen.cpp: /usr/include/qt5/QtWidgets/QDialog \
  309 + /usr/include/qt5/QtWidgets/qdialog.h \
290 /usr/include/qt5/QtWidgets/qwidget.h \ 310 /usr/include/qt5/QtWidgets/qwidget.h \
291 /usr/include/qt5/QtGui/qwindowdefs.h \ 311 /usr/include/qt5/QtGui/qwindowdefs.h \
292 /usr/include/qt5/QtCore/qglobal.h \ 312 /usr/include/qt5/QtCore/qglobal.h \
@@ -393,13 +413,21 @@ moc_chatwindow.cpp: /usr/include/qt5/QtWidgets/QMainWindow \ @@ -393,13 +413,21 @@ moc_chatwindow.cpp: /usr/include/qt5/QtWidgets/QMainWindow \
393 /usr/include/qt5/QtCore/qfiledevice.h \ 413 /usr/include/qt5/QtCore/qfiledevice.h \
394 /usr/include/qt5/QtGui/qvector2d.h \ 414 /usr/include/qt5/QtGui/qvector2d.h \
395 /usr/include/qt5/QtGui/qtouchdevice.h \ 415 /usr/include/qt5/QtGui/qtouchdevice.h \
  416 + /usr/include/qt5/QtCore/QRegExp \
  417 + ../QChatClient/Socket.h \
  418 + ../QChatClient/SocketException.h \
  419 + ../QChatClient/chatroom.h \
  420 + /usr/include/qt5/QtWidgets/QMainWindow \
  421 + /usr/include/qt5/QtWidgets/qmainwindow.h \
396 /usr/include/qt5/QtWidgets/qtabwidget.h \ 422 /usr/include/qt5/QtWidgets/qtabwidget.h \
397 /usr/include/qt5/QtGui/qicon.h \ 423 /usr/include/qt5/QtGui/qicon.h \
398 - ../QChatClient/chatwindow.h  
399 - /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/chatwindow.h -o moc_chatwindow.cpp 424 + ../QChatClient/loginscreen.h \
  425 + ../QChatClient/chatwindow.h \
  426 + ../QChatClient/loginscreen.h
  427 + /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/loginscreen.h -o moc_loginscreen.cpp
400 428
401 -moc_loginscreen.cpp: /usr/include/qt5/QtWidgets/QDialog \  
402 - /usr/include/qt5/QtWidgets/qdialog.h \ 429 +moc_chatroom.cpp: /usr/include/qt5/QtWidgets/QMainWindow \
  430 + /usr/include/qt5/QtWidgets/qmainwindow.h \
403 /usr/include/qt5/QtWidgets/qwidget.h \ 431 /usr/include/qt5/QtWidgets/qwidget.h \
404 /usr/include/qt5/QtGui/qwindowdefs.h \ 432 /usr/include/qt5/QtGui/qwindowdefs.h \
405 /usr/include/qt5/QtCore/qglobal.h \ 433 /usr/include/qt5/QtCore/qglobal.h \
@@ -506,13 +534,23 @@ moc_loginscreen.cpp: /usr/include/qt5/QtWidgets/QDialog \ @@ -506,13 +534,23 @@ moc_loginscreen.cpp: /usr/include/qt5/QtWidgets/QDialog \
506 /usr/include/qt5/QtCore/qfiledevice.h \ 534 /usr/include/qt5/QtCore/qfiledevice.h \
507 /usr/include/qt5/QtGui/qvector2d.h \ 535 /usr/include/qt5/QtGui/qvector2d.h \
508 /usr/include/qt5/QtGui/qtouchdevice.h \ 536 /usr/include/qt5/QtGui/qtouchdevice.h \
  537 + /usr/include/qt5/QtWidgets/qtabwidget.h \
  538 + /usr/include/qt5/QtGui/qicon.h \
509 ../QChatClient/Socket.h \ 539 ../QChatClient/Socket.h \
510 ../QChatClient/SocketException.h \ 540 ../QChatClient/SocketException.h \
511 - ../QChatClient/loginscreen.h  
512 - /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/loginscreen.h -o moc_loginscreen.cpp 541 + ../QChatClient/loginscreen.h \
  542 + /usr/include/qt5/QtWidgets/QDialog \
  543 + /usr/include/qt5/QtWidgets/qdialog.h \
  544 + /usr/include/qt5/QtCore/QRegExp \
  545 + ../QChatClient/chatroom.h \
  546 + ../QChatClient/chatwindow.h \
  547 + ../QChatClient/chatroom.h
  548 + /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/chatroom.h -o moc_chatroom.cpp
513 549
514 -moc_chatroom.cpp: /usr/include/qt5/QtWidgets/QMainWindow \  
515 - /usr/include/qt5/QtWidgets/qmainwindow.h \ 550 +moc_chatwidget.cpp: /usr/include/qt5/QtWidgets/QTextEdit \
  551 + /usr/include/qt5/QtWidgets/qtextedit.h \
  552 + /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
  553 + /usr/include/qt5/QtWidgets/qframe.h \
516 /usr/include/qt5/QtWidgets/qwidget.h \ 554 /usr/include/qt5/QtWidgets/qwidget.h \
517 /usr/include/qt5/QtGui/qwindowdefs.h \ 555 /usr/include/qt5/QtGui/qwindowdefs.h \
518 /usr/include/qt5/QtCore/qglobal.h \ 556 /usr/include/qt5/QtCore/qglobal.h \
@@ -619,17 +657,16 @@ moc_chatroom.cpp: /usr/include/qt5/QtWidgets/QMainWindow \ @@ -619,17 +657,16 @@ moc_chatroom.cpp: /usr/include/qt5/QtWidgets/QMainWindow \
619 /usr/include/qt5/QtCore/qfiledevice.h \ 657 /usr/include/qt5/QtCore/qfiledevice.h \
620 /usr/include/qt5/QtGui/qvector2d.h \ 658 /usr/include/qt5/QtGui/qvector2d.h \
621 /usr/include/qt5/QtGui/qtouchdevice.h \ 659 /usr/include/qt5/QtGui/qtouchdevice.h \
622 - /usr/include/qt5/QtWidgets/qtabwidget.h \  
623 - /usr/include/qt5/QtGui/qicon.h \  
624 - ../QChatClient/Socket.h \  
625 - ../QChatClient/SocketException.h \  
626 - ../QChatClient/chatroom.h  
627 - /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/chatroom.h -o moc_chatroom.cpp 660 + /usr/include/qt5/QtGui/qtextdocument.h \
  661 + /usr/include/qt5/QtGui/qtextoption.h \
  662 + /usr/include/qt5/QtGui/qtextcursor.h \
  663 + /usr/include/qt5/QtGui/qtextformat.h \
  664 + /usr/include/qt5/QtGui/qpen.h \
  665 + ../QChatClient/chatwidget.h
  666 + /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/chatwidget.h -o moc_chatwidget.cpp
628 667
629 -moc_chatwidget.cpp: /usr/include/qt5/QtWidgets/QTextEdit \  
630 - /usr/include/qt5/QtWidgets/qtextedit.h \  
631 - /usr/include/qt5/QtWidgets/qabstractscrollarea.h \  
632 - /usr/include/qt5/QtWidgets/qframe.h \ 668 +moc_chatwindow.cpp: /usr/include/qt5/QtWidgets/QMainWindow \
  669 + /usr/include/qt5/QtWidgets/qmainwindow.h \
633 /usr/include/qt5/QtWidgets/qwidget.h \ 670 /usr/include/qt5/QtWidgets/qwidget.h \
634 /usr/include/qt5/QtGui/qwindowdefs.h \ 671 /usr/include/qt5/QtGui/qwindowdefs.h \
635 /usr/include/qt5/QtCore/qglobal.h \ 672 /usr/include/qt5/QtCore/qglobal.h \
@@ -736,24 +773,12 @@ moc_chatwidget.cpp: /usr/include/qt5/QtWidgets/QTextEdit \ @@ -736,24 +773,12 @@ moc_chatwidget.cpp: /usr/include/qt5/QtWidgets/QTextEdit \
736 /usr/include/qt5/QtCore/qfiledevice.h \ 773 /usr/include/qt5/QtCore/qfiledevice.h \
737 /usr/include/qt5/QtGui/qvector2d.h \ 774 /usr/include/qt5/QtGui/qvector2d.h \
738 /usr/include/qt5/QtGui/qtouchdevice.h \ 775 /usr/include/qt5/QtGui/qtouchdevice.h \
739 - /usr/include/qt5/QtGui/qtextdocument.h \  
740 - /usr/include/qt5/QtGui/qtextoption.h \  
741 - /usr/include/qt5/QtGui/qtextcursor.h \  
742 - /usr/include/qt5/QtGui/qtextformat.h \  
743 - /usr/include/qt5/QtGui/qpen.h \  
744 - ../QChatClient/chatwidget.h  
745 - /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/chatwidget.h -o moc_chatwidget.cpp 776 + /usr/include/qt5/QtWidgets/qtabwidget.h \
  777 + /usr/include/qt5/QtGui/qicon.h \
  778 + ../QChatClient/chatwindow.h
  779 + /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/chatwindow.h -o moc_chatwindow.cpp
746 780
747 -compiler_wayland-code_make_all:  
748 -compiler_wayland-code_clean:  
749 -compiler_moc_source_make_all:  
750 -compiler_moc_source_clean:  
751 -compiler_uic_make_all: ui_chatwindow.h ui_loginscreen.h ui_chatroom.h  
752 -compiler_uic_clean:  
753 - -$(DEL_FILE) ui_chatwindow.h ui_loginscreen.h ui_chatroom.h  
754 -ui_chatwindow.h: ../QChatClient/chatwindow.ui \  
755 - ../QChatClient/chatwidget.h \  
756 - /usr/include/qt5/QtWidgets/QTextEdit \ 781 +moc_chatinputtext.cpp: /usr/include/qt5/QtWidgets/QTextEdit \
757 /usr/include/qt5/QtWidgets/qtextedit.h \ 782 /usr/include/qt5/QtWidgets/qtextedit.h \
758 /usr/include/qt5/QtWidgets/qabstractscrollarea.h \ 783 /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
759 /usr/include/qt5/QtWidgets/qframe.h \ 784 /usr/include/qt5/QtWidgets/qframe.h \
@@ -867,14 +892,21 @@ ui_chatwindow.h: ../QChatClient/chatwindow.ui \ @@ -867,14 +892,21 @@ ui_chatwindow.h: ../QChatClient/chatwindow.ui \
867 /usr/include/qt5/QtGui/qtextoption.h \ 892 /usr/include/qt5/QtGui/qtextoption.h \
868 /usr/include/qt5/QtGui/qtextcursor.h \ 893 /usr/include/qt5/QtGui/qtextcursor.h \
869 /usr/include/qt5/QtGui/qtextformat.h \ 894 /usr/include/qt5/QtGui/qtextformat.h \
870 - /usr/include/qt5/QtGui/qpen.h  
871 - /usr/lib/x86_64-linux-gnu/qt5/bin/uic ../QChatClient/chatwindow.ui -o ui_chatwindow.h  
872 -  
873 -ui_loginscreen.h: ../QChatClient/loginscreen.ui  
874 - /usr/lib/x86_64-linux-gnu/qt5/bin/uic ../QChatClient/loginscreen.ui -o ui_loginscreen.h 895 + /usr/include/qt5/QtGui/qpen.h \
  896 + /usr/include/qt5/QtGui/QKeyEvent \
  897 + ../QChatClient/chatinputtext.h
  898 + /usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) $(INCPATH) ../QChatClient/chatinputtext.h -o moc_chatinputtext.cpp
875 899
876 -ui_chatroom.h: ../QChatClient/chatroom.ui \ 900 +compiler_wayland-code_make_all:
  901 +compiler_wayland-code_clean:
  902 +compiler_moc_source_make_all:
  903 +compiler_moc_source_clean:
  904 +compiler_uic_make_all: ui_chatwindow.h ui_loginscreen.h ui_chatroom.h
  905 +compiler_uic_clean:
  906 + -$(DEL_FILE) ui_chatwindow.h ui_loginscreen.h ui_chatroom.h
  907 +ui_chatwindow.h: ../QChatClient/chatwindow.ui \
877 ../QChatClient/chatwidget.h \ 908 ../QChatClient/chatwidget.h \
  909 + ../QChatClient/chatinputtext.h \
878 /usr/include/qt5/QtWidgets/QTextEdit \ 910 /usr/include/qt5/QtWidgets/QTextEdit \
879 /usr/include/qt5/QtWidgets/qtextedit.h \ 911 /usr/include/qt5/QtWidgets/qtextedit.h \
880 /usr/include/qt5/QtWidgets/qabstractscrollarea.h \ 912 /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
@@ -989,22 +1021,11 @@ ui_chatroom.h: ../QChatClient/chatroom.ui \ @@ -989,22 +1021,11 @@ ui_chatroom.h: ../QChatClient/chatroom.ui \
989 /usr/include/qt5/QtGui/qtextoption.h \ 1021 /usr/include/qt5/QtGui/qtextoption.h \
990 /usr/include/qt5/QtGui/qtextcursor.h \ 1022 /usr/include/qt5/QtGui/qtextcursor.h \
991 /usr/include/qt5/QtGui/qtextformat.h \ 1023 /usr/include/qt5/QtGui/qtextformat.h \
992 - /usr/include/qt5/QtGui/qpen.h  
993 - /usr/lib/x86_64-linux-gnu/qt5/bin/uic ../QChatClient/chatroom.ui -o ui_chatroom.h  
994 -  
995 -compiler_yacc_decl_make_all:  
996 -compiler_yacc_decl_clean:  
997 -compiler_yacc_impl_make_all:  
998 -compiler_yacc_impl_clean:  
999 -compiler_lex_make_all:  
1000 -compiler_lex_clean:  
1001 -compiler_clean: compiler_moc_header_clean compiler_uic_clean  
1002 -  
1003 -####### Compile  
1004 -  
1005 -main.o: ../QChatClient/main.cpp ../QChatClient/loginscreen.h \  
1006 - /usr/include/qt5/QtWidgets/QDialog \  
1007 - /usr/include/qt5/QtWidgets/qdialog.h \ 1024 + /usr/include/qt5/QtGui/qpen.h \
  1025 + /usr/include/qt5/QtWidgets/QTextEdit \
  1026 + /usr/include/qt5/QtWidgets/qtextedit.h \
  1027 + /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
  1028 + /usr/include/qt5/QtWidgets/qframe.h \
1008 /usr/include/qt5/QtWidgets/qwidget.h \ 1029 /usr/include/qt5/QtWidgets/qwidget.h \
1009 /usr/include/qt5/QtGui/qwindowdefs.h \ 1030 /usr/include/qt5/QtGui/qwindowdefs.h \
1010 /usr/include/qt5/QtCore/qglobal.h \ 1031 /usr/include/qt5/QtCore/qglobal.h \
@@ -1111,26 +1132,24 @@ main.o: ../QChatClient/main.cpp ../QChatClient/loginscreen.h \ @@ -1111,26 +1132,24 @@ main.o: ../QChatClient/main.cpp ../QChatClient/loginscreen.h \
1111 /usr/include/qt5/QtCore/qfiledevice.h \ 1132 /usr/include/qt5/QtCore/qfiledevice.h \
1112 /usr/include/qt5/QtGui/qvector2d.h \ 1133 /usr/include/qt5/QtGui/qvector2d.h \
1113 /usr/include/qt5/QtGui/qtouchdevice.h \ 1134 /usr/include/qt5/QtGui/qtouchdevice.h \
1114 - ../QChatClient/Socket.h \  
1115 - ../QChatClient/SocketException.h \  
1116 - ../QChatClient/chatroom.h \  
1117 - /usr/include/qt5/QtWidgets/QMainWindow \  
1118 - /usr/include/qt5/QtWidgets/qmainwindow.h \  
1119 - /usr/include/qt5/QtWidgets/qtabwidget.h \  
1120 - /usr/include/qt5/QtGui/qicon.h \  
1121 - ../QChatClient/chatwindow.h \  
1122 - /usr/include/qt5/QtWidgets/QApplication \  
1123 - /usr/include/qt5/QtWidgets/qapplication.h \  
1124 - /usr/include/qt5/QtCore/qcoreapplication.h \  
1125 - /usr/include/qt5/QtCore/qeventloop.h \  
1126 - /usr/include/qt5/QtWidgets/qdesktopwidget.h \  
1127 - /usr/include/qt5/QtGui/qguiapplication.h \  
1128 - /usr/include/qt5/QtGui/qinputmethod.h  
1129 - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../QChatClient/main.cpp 1135 + /usr/include/qt5/QtGui/qtextdocument.h \
  1136 + /usr/include/qt5/QtGui/qtextoption.h \
  1137 + /usr/include/qt5/QtGui/qtextcursor.h \
  1138 + /usr/include/qt5/QtGui/qtextformat.h \
  1139 + /usr/include/qt5/QtGui/qpen.h \
  1140 + /usr/include/qt5/QtGui/QKeyEvent
  1141 + /usr/lib/x86_64-linux-gnu/qt5/bin/uic ../QChatClient/chatwindow.ui -o ui_chatwindow.h
1130 1142
1131 -chatwindow.o: ../QChatClient/chatwindow.cpp ../QChatClient/chatwindow.h \  
1132 - /usr/include/qt5/QtWidgets/QMainWindow \  
1133 - /usr/include/qt5/QtWidgets/qmainwindow.h \ 1143 +ui_loginscreen.h: ../QChatClient/loginscreen.ui
  1144 + /usr/lib/x86_64-linux-gnu/qt5/bin/uic ../QChatClient/loginscreen.ui -o ui_loginscreen.h
  1145 +
  1146 +ui_chatroom.h: ../QChatClient/chatroom.ui \
  1147 + ../QChatClient/chatwidget.h \
  1148 + ../QChatClient/chatinputtext.h \
  1149 + /usr/include/qt5/QtWidgets/QTextEdit \
  1150 + /usr/include/qt5/QtWidgets/qtextedit.h \
  1151 + /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
  1152 + /usr/include/qt5/QtWidgets/qframe.h \
1134 /usr/include/qt5/QtWidgets/qwidget.h \ 1153 /usr/include/qt5/QtWidgets/qwidget.h \
1135 /usr/include/qt5/QtGui/qwindowdefs.h \ 1154 /usr/include/qt5/QtGui/qwindowdefs.h \
1136 /usr/include/qt5/QtCore/qglobal.h \ 1155 /usr/include/qt5/QtCore/qglobal.h \
@@ -1237,62 +1256,15 @@ chatwindow.o: ../QChatClient/chatwindow.cpp ../QChatClient/chatwindow.h \ @@ -1237,62 +1256,15 @@ chatwindow.o: ../QChatClient/chatwindow.cpp ../QChatClient/chatwindow.h \
1237 /usr/include/qt5/QtCore/qfiledevice.h \ 1256 /usr/include/qt5/QtCore/qfiledevice.h \
1238 /usr/include/qt5/QtGui/qvector2d.h \ 1257 /usr/include/qt5/QtGui/qvector2d.h \
1239 /usr/include/qt5/QtGui/qtouchdevice.h \ 1258 /usr/include/qt5/QtGui/qtouchdevice.h \
1240 - /usr/include/qt5/QtWidgets/qtabwidget.h \  
1241 - /usr/include/qt5/QtGui/qicon.h \  
1242 - ui_chatwindow.h \  
1243 - /usr/include/qt5/QtCore/QVariant \  
1244 - /usr/include/qt5/QtWidgets/QAction \  
1245 - /usr/include/qt5/QtWidgets/qaction.h \  
1246 - /usr/include/qt5/QtWidgets/qactiongroup.h \  
1247 - /usr/include/qt5/QtWidgets/QApplication \  
1248 - /usr/include/qt5/QtWidgets/qapplication.h \  
1249 - /usr/include/qt5/QtCore/qcoreapplication.h \  
1250 - /usr/include/qt5/QtCore/qeventloop.h \  
1251 - /usr/include/qt5/QtWidgets/qdesktopwidget.h \  
1252 - /usr/include/qt5/QtGui/qguiapplication.h \  
1253 - /usr/include/qt5/QtGui/qinputmethod.h \  
1254 - /usr/include/qt5/QtWidgets/QButtonGroup \  
1255 - /usr/include/qt5/QtWidgets/qbuttongroup.h \  
1256 - /usr/include/qt5/QtWidgets/QGridLayout \  
1257 - /usr/include/qt5/QtWidgets/qgridlayout.h \  
1258 - /usr/include/qt5/QtWidgets/qlayout.h \  
1259 - /usr/include/qt5/QtWidgets/qlayoutitem.h \  
1260 - /usr/include/qt5/QtWidgets/qboxlayout.h \  
1261 - /usr/include/qt5/QtWidgets/QHeaderView \  
1262 - /usr/include/qt5/QtWidgets/qheaderview.h \  
1263 - /usr/include/qt5/QtWidgets/qabstractitemview.h \  
1264 - /usr/include/qt5/QtWidgets/qabstractscrollarea.h \  
1265 - /usr/include/qt5/QtWidgets/qframe.h \  
1266 - /usr/include/qt5/QtCore/qabstractitemmodel.h \  
1267 - /usr/include/qt5/QtCore/qitemselectionmodel.h \  
1268 - /usr/include/qt5/QtWidgets/qabstractitemdelegate.h \  
1269 - /usr/include/qt5/QtWidgets/qstyleoption.h \  
1270 - /usr/include/qt5/QtWidgets/qabstractspinbox.h \  
1271 - /usr/include/qt5/QtGui/qvalidator.h \  
1272 - /usr/include/qt5/QtWidgets/qslider.h \  
1273 - /usr/include/qt5/QtWidgets/qabstractslider.h \  
1274 - /usr/include/qt5/QtWidgets/qstyle.h \  
1275 - /usr/include/qt5/QtWidgets/qtabbar.h \  
1276 - /usr/include/qt5/QtWidgets/qrubberband.h \  
1277 - /usr/include/qt5/QtWidgets/QMenuBar \  
1278 - /usr/include/qt5/QtWidgets/qmenubar.h \  
1279 - /usr/include/qt5/QtWidgets/qmenu.h \  
1280 - /usr/include/qt5/QtWidgets/QSplitter \  
1281 - /usr/include/qt5/QtWidgets/qsplitter.h \  
1282 - /usr/include/qt5/QtWidgets/QTextEdit \  
1283 - /usr/include/qt5/QtWidgets/qtextedit.h \  
1284 /usr/include/qt5/QtGui/qtextdocument.h \ 1259 /usr/include/qt5/QtGui/qtextdocument.h \
1285 /usr/include/qt5/QtGui/qtextoption.h \ 1260 /usr/include/qt5/QtGui/qtextoption.h \
1286 /usr/include/qt5/QtGui/qtextcursor.h \ 1261 /usr/include/qt5/QtGui/qtextcursor.h \
1287 /usr/include/qt5/QtGui/qtextformat.h \ 1262 /usr/include/qt5/QtGui/qtextformat.h \
1288 /usr/include/qt5/QtGui/qpen.h \ 1263 /usr/include/qt5/QtGui/qpen.h \
1289 - /usr/include/qt5/QtWidgets/QWidget \  
1290 - ../QChatClient/chatwidget.h  
1291 - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chatwindow.o ../QChatClient/chatwindow.cpp  
1292 -  
1293 -loginscreen.o: ../QChatClient/loginscreen.cpp ../QChatClient/loginscreen.h \  
1294 - /usr/include/qt5/QtWidgets/QDialog \  
1295 - /usr/include/qt5/QtWidgets/qdialog.h \ 1264 + /usr/include/qt5/QtWidgets/QTextEdit \
  1265 + /usr/include/qt5/QtWidgets/qtextedit.h \
  1266 + /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
  1267 + /usr/include/qt5/QtWidgets/qframe.h \
1296 /usr/include/qt5/QtWidgets/qwidget.h \ 1268 /usr/include/qt5/QtWidgets/qwidget.h \
1297 /usr/include/qt5/QtGui/qwindowdefs.h \ 1269 /usr/include/qt5/QtGui/qwindowdefs.h \
1298 /usr/include/qt5/QtCore/qglobal.h \ 1270 /usr/include/qt5/QtCore/qglobal.h \
@@ -1399,61 +1371,620 @@ loginscreen.o: ../QChatClient/loginscreen.cpp ../QChatClient/loginscreen.h \ @@ -1399,61 +1371,620 @@ loginscreen.o: ../QChatClient/loginscreen.cpp ../QChatClient/loginscreen.h \
1399 /usr/include/qt5/QtCore/qfiledevice.h \ 1371 /usr/include/qt5/QtCore/qfiledevice.h \
1400 /usr/include/qt5/QtGui/qvector2d.h \ 1372 /usr/include/qt5/QtGui/qvector2d.h \
1401 /usr/include/qt5/QtGui/qtouchdevice.h \ 1373 /usr/include/qt5/QtGui/qtouchdevice.h \
1402 - ../QChatClient/Socket.h \  
1403 - ../QChatClient/SocketException.h \  
1404 - ui_loginscreen.h \  
1405 - /usr/include/qt5/QtCore/QVariant \  
1406 - /usr/include/qt5/QtWidgets/QAction \  
1407 - /usr/include/qt5/QtWidgets/qaction.h \  
1408 - /usr/include/qt5/QtGui/qicon.h \  
1409 - /usr/include/qt5/QtWidgets/qactiongroup.h \  
1410 - /usr/include/qt5/QtWidgets/QApplication \  
1411 - /usr/include/qt5/QtWidgets/qapplication.h \  
1412 - /usr/include/qt5/QtCore/qcoreapplication.h \  
1413 - /usr/include/qt5/QtCore/qeventloop.h \  
1414 - /usr/include/qt5/QtWidgets/qdesktopwidget.h \  
1415 - /usr/include/qt5/QtGui/qguiapplication.h \  
1416 - /usr/include/qt5/QtGui/qinputmethod.h \  
1417 - /usr/include/qt5/QtWidgets/QButtonGroup \  
1418 - /usr/include/qt5/QtWidgets/qbuttongroup.h \  
1419 - /usr/include/qt5/QtWidgets/QGridLayout \  
1420 - /usr/include/qt5/QtWidgets/qgridlayout.h \  
1421 - /usr/include/qt5/QtWidgets/qlayout.h \  
1422 - /usr/include/qt5/QtWidgets/qlayoutitem.h \  
1423 - /usr/include/qt5/QtWidgets/qboxlayout.h \  
1424 - /usr/include/qt5/QtWidgets/QHeaderView \  
1425 - /usr/include/qt5/QtWidgets/qheaderview.h \  
1426 - /usr/include/qt5/QtWidgets/qabstractitemview.h \  
1427 - /usr/include/qt5/QtWidgets/qabstractscrollarea.h \  
1428 - /usr/include/qt5/QtWidgets/qframe.h \  
1429 - /usr/include/qt5/QtCore/qabstractitemmodel.h \  
1430 - /usr/include/qt5/QtCore/qitemselectionmodel.h \  
1431 - /usr/include/qt5/QtWidgets/qabstractitemdelegate.h \  
1432 - /usr/include/qt5/QtWidgets/qstyleoption.h \  
1433 - /usr/include/qt5/QtWidgets/qabstractspinbox.h \  
1434 - /usr/include/qt5/QtGui/qvalidator.h \  
1435 - /usr/include/qt5/QtWidgets/qslider.h \  
1436 - /usr/include/qt5/QtWidgets/qabstractslider.h \  
1437 - /usr/include/qt5/QtWidgets/qstyle.h \  
1438 - /usr/include/qt5/QtWidgets/qtabbar.h \  
1439 - /usr/include/qt5/QtWidgets/qtabwidget.h \  
1440 - /usr/include/qt5/QtWidgets/qrubberband.h \  
1441 - /usr/include/qt5/QtWidgets/QLabel \  
1442 - /usr/include/qt5/QtWidgets/qlabel.h \  
1443 - /usr/include/qt5/QtWidgets/QLineEdit \  
1444 - /usr/include/qt5/QtWidgets/qlineedit.h \ 1374 + /usr/include/qt5/QtGui/qtextdocument.h \
  1375 + /usr/include/qt5/QtGui/qtextoption.h \
1445 /usr/include/qt5/QtGui/qtextcursor.h \ 1376 /usr/include/qt5/QtGui/qtextcursor.h \
1446 /usr/include/qt5/QtGui/qtextformat.h \ 1377 /usr/include/qt5/QtGui/qtextformat.h \
1447 /usr/include/qt5/QtGui/qpen.h \ 1378 /usr/include/qt5/QtGui/qpen.h \
1448 - /usr/include/qt5/QtGui/qtextoption.h \  
1449 - /usr/include/qt5/QtWidgets/QPushButton \  
1450 - /usr/include/qt5/QtWidgets/qpushbutton.h \  
1451 - /usr/include/qt5/QtWidgets/qabstractbutton.h \  
1452 - /usr/include/qt5/QtWidgets/QSpacerItem \  
1453 - /usr/include/qt5/QtWidgets/QWidget 1379 + /usr/include/qt5/QtGui/QKeyEvent
  1380 + /usr/lib/x86_64-linux-gnu/qt5/bin/uic ../QChatClient/chatroom.ui -o ui_chatroom.h
  1381 +
  1382 +compiler_yacc_decl_make_all:
  1383 +compiler_yacc_decl_clean:
  1384 +compiler_yacc_impl_make_all:
  1385 +compiler_yacc_impl_clean:
  1386 +compiler_lex_make_all:
  1387 +compiler_lex_clean:
  1388 +compiler_clean: compiler_moc_header_clean compiler_uic_clean
  1389 +
  1390 +####### Compile
  1391 +
  1392 +main.o: ../QChatClient/main.cpp ../QChatClient/loginscreen.h \
  1393 + /usr/include/qt5/QtWidgets/QDialog \
  1394 + /usr/include/qt5/QtWidgets/qdialog.h \
  1395 + /usr/include/qt5/QtWidgets/qwidget.h \
  1396 + /usr/include/qt5/QtGui/qwindowdefs.h \
  1397 + /usr/include/qt5/QtCore/qglobal.h \
  1398 + /usr/include/qt5/QtCore/qconfig.h \
  1399 + /usr/include/qt5/QtCore/qfeatures.h \
  1400 + /usr/include/qt5/QtCore/qsystemdetection.h \
  1401 + /usr/include/qt5/QtCore/qcompilerdetection.h \
  1402 + /usr/include/qt5/QtCore/qprocessordetection.h \
  1403 + /usr/include/qt5/QtCore/qlogging.h \
  1404 + /usr/include/qt5/QtCore/qflags.h \
  1405 + /usr/include/qt5/QtCore/qtypeinfo.h \
  1406 + /usr/include/qt5/QtCore/qtypetraits.h \
  1407 + /usr/include/qt5/QtCore/qsysinfo.h \
  1408 + /usr/include/qt5/QtCore/qobjectdefs.h \
  1409 + /usr/include/qt5/QtCore/qnamespace.h \
  1410 + /usr/include/qt5/QtCore/qobjectdefs_impl.h \
  1411 + /usr/include/qt5/QtGui/qwindowdefs_win.h \
  1412 + /usr/include/qt5/QtCore/qobject.h \
  1413 + /usr/include/qt5/QtCore/qstring.h \
  1414 + /usr/include/qt5/QtCore/qchar.h \
  1415 + /usr/include/qt5/QtCore/qbytearray.h \
  1416 + /usr/include/qt5/QtCore/qrefcount.h \
  1417 + /usr/include/qt5/QtCore/qatomic.h \
  1418 + /usr/include/qt5/QtCore/qbasicatomic.h \
  1419 + /usr/include/qt5/QtCore/qatomic_bootstrap.h \
  1420 + /usr/include/qt5/QtCore/qgenericatomic.h \
  1421 + /usr/include/qt5/QtCore/qatomic_msvc.h \
  1422 + /usr/include/qt5/QtCore/qatomic_integrity.h \
  1423 + /usr/include/qt5/QtCore/qoldbasicatomic.h \
  1424 + /usr/include/qt5/QtCore/qatomic_vxworks.h \
  1425 + /usr/include/qt5/QtCore/qatomic_power.h \
  1426 + /usr/include/qt5/QtCore/qatomic_aarch64.h \
  1427 + /usr/include/qt5/QtCore/qatomic_alpha.h \
  1428 + /usr/include/qt5/QtCore/qatomic_armv7.h \
  1429 + /usr/include/qt5/QtCore/qatomic_armv6.h \
  1430 + /usr/include/qt5/QtCore/qatomic_armv5.h \
  1431 + /usr/include/qt5/QtCore/qatomic_bfin.h \
  1432 + /usr/include/qt5/QtCore/qatomic_ia64.h \
  1433 + /usr/include/qt5/QtCore/qatomic_mips.h \
  1434 + /usr/include/qt5/QtCore/qatomic_s390.h \
  1435 + /usr/include/qt5/QtCore/qatomic_sh4a.h \
  1436 + /usr/include/qt5/QtCore/qatomic_sparc.h \
  1437 + /usr/include/qt5/QtCore/qatomic_x86.h \
  1438 + /usr/include/qt5/QtCore/qatomic_cxx11.h \
  1439 + /usr/include/qt5/QtCore/qatomic_gcc.h \
  1440 + /usr/include/qt5/QtCore/qatomic_unix.h \
  1441 + /usr/include/qt5/QtCore/qarraydata.h \
  1442 + /usr/include/qt5/QtCore/qstringbuilder.h \
  1443 + /usr/include/qt5/QtCore/qlist.h \
  1444 + /usr/include/qt5/QtCore/qalgorithms.h \
  1445 + /usr/include/qt5/QtCore/qiterator.h \
  1446 + /usr/include/qt5/QtCore/qcoreevent.h \
  1447 + /usr/include/qt5/QtCore/qscopedpointer.h \
  1448 + /usr/include/qt5/QtCore/qmetatype.h \
  1449 + /usr/include/qt5/QtCore/qvarlengtharray.h \
  1450 + /usr/include/qt5/QtCore/qcontainerfwd.h \
  1451 + /usr/include/qt5/QtCore/qisenum.h \
  1452 + /usr/include/qt5/QtCore/qobject_impl.h \
  1453 + /usr/include/qt5/QtCore/qmargins.h \
  1454 + /usr/include/qt5/QtGui/qpaintdevice.h \
  1455 + /usr/include/qt5/QtCore/qrect.h \
  1456 + /usr/include/qt5/QtCore/qsize.h \
  1457 + /usr/include/qt5/QtCore/qpoint.h \
  1458 + /usr/include/qt5/QtGui/qpalette.h \
  1459 + /usr/include/qt5/QtGui/qcolor.h \
  1460 + /usr/include/qt5/QtGui/qrgb.h \
  1461 + /usr/include/qt5/QtCore/qstringlist.h \
  1462 + /usr/include/qt5/QtCore/qdatastream.h \
  1463 + /usr/include/qt5/QtCore/qiodevice.h \
  1464 + /usr/include/qt5/QtCore/qpair.h \
  1465 + /usr/include/qt5/QtCore/qregexp.h \
  1466 + /usr/include/qt5/QtCore/qstringmatcher.h \
  1467 + /usr/include/qt5/QtGui/qbrush.h \
  1468 + /usr/include/qt5/QtCore/qvector.h \
  1469 + /usr/include/qt5/QtGui/qmatrix.h \
  1470 + /usr/include/qt5/QtGui/qpolygon.h \
  1471 + /usr/include/qt5/QtGui/qregion.h \
  1472 + /usr/include/qt5/QtCore/qline.h \
  1473 + /usr/include/qt5/QtGui/qtransform.h \
  1474 + /usr/include/qt5/QtGui/qpainterpath.h \
  1475 + /usr/include/qt5/QtGui/qimage.h \
  1476 + /usr/include/qt5/QtGui/qpixmap.h \
  1477 + /usr/include/qt5/QtCore/qsharedpointer.h \
  1478 + /usr/include/qt5/QtCore/qshareddata.h \
  1479 + /usr/include/qt5/QtCore/qsharedpointer_impl.h \
  1480 + /usr/include/qt5/QtCore/qhash.h \
  1481 + /usr/include/qt5/QtGui/qfont.h \
  1482 + /usr/include/qt5/QtGui/qfontmetrics.h \
  1483 + /usr/include/qt5/QtGui/qfontinfo.h \
  1484 + /usr/include/qt5/QtWidgets/qsizepolicy.h \
  1485 + /usr/include/qt5/QtGui/qcursor.h \
  1486 + /usr/include/qt5/QtGui/qkeysequence.h \
  1487 + /usr/include/qt5/QtGui/qevent.h \
  1488 + /usr/include/qt5/QtCore/qvariant.h \
  1489 + /usr/include/qt5/QtCore/qmap.h \
  1490 + /usr/include/qt5/QtCore/qdebug.h \
  1491 + /usr/include/qt5/QtCore/qtextstream.h \
  1492 + /usr/include/qt5/QtCore/qlocale.h \
  1493 + /usr/include/qt5/QtCore/qset.h \
  1494 + /usr/include/qt5/QtCore/qcontiguouscache.h \
  1495 + /usr/include/qt5/QtCore/qurl.h \
  1496 + /usr/include/qt5/QtCore/qurlquery.h \
  1497 + /usr/include/qt5/QtCore/qfile.h \
  1498 + /usr/include/qt5/QtCore/qfiledevice.h \
  1499 + /usr/include/qt5/QtGui/qvector2d.h \
  1500 + /usr/include/qt5/QtGui/qtouchdevice.h \
  1501 + /usr/include/qt5/QtCore/QRegExp \
  1502 + ../QChatClient/Socket.h \
  1503 + ../QChatClient/SocketException.h \
  1504 + ../QChatClient/chatroom.h \
  1505 + /usr/include/qt5/QtWidgets/QMainWindow \
  1506 + /usr/include/qt5/QtWidgets/qmainwindow.h \
  1507 + /usr/include/qt5/QtWidgets/qtabwidget.h \
  1508 + /usr/include/qt5/QtGui/qicon.h \
  1509 + ../QChatClient/chatwindow.h \
  1510 + /usr/include/qt5/QtWidgets/QApplication \
  1511 + /usr/include/qt5/QtWidgets/qapplication.h \
  1512 + /usr/include/qt5/QtCore/qcoreapplication.h \
  1513 + /usr/include/qt5/QtCore/qeventloop.h \
  1514 + /usr/include/qt5/QtWidgets/qdesktopwidget.h \
  1515 + /usr/include/qt5/QtGui/qguiapplication.h \
  1516 + /usr/include/qt5/QtGui/qinputmethod.h
  1517 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../QChatClient/main.cpp
  1518 +
  1519 +loginscreen.o: ../QChatClient/loginscreen.cpp ../QChatClient/loginscreen.h \
  1520 + /usr/include/qt5/QtWidgets/QDialog \
  1521 + /usr/include/qt5/QtWidgets/qdialog.h \
  1522 + /usr/include/qt5/QtWidgets/qwidget.h \
  1523 + /usr/include/qt5/QtGui/qwindowdefs.h \
  1524 + /usr/include/qt5/QtCore/qglobal.h \
  1525 + /usr/include/qt5/QtCore/qconfig.h \
  1526 + /usr/include/qt5/QtCore/qfeatures.h \
  1527 + /usr/include/qt5/QtCore/qsystemdetection.h \
  1528 + /usr/include/qt5/QtCore/qcompilerdetection.h \
  1529 + /usr/include/qt5/QtCore/qprocessordetection.h \
  1530 + /usr/include/qt5/QtCore/qlogging.h \
  1531 + /usr/include/qt5/QtCore/qflags.h \
  1532 + /usr/include/qt5/QtCore/qtypeinfo.h \
  1533 + /usr/include/qt5/QtCore/qtypetraits.h \
  1534 + /usr/include/qt5/QtCore/qsysinfo.h \
  1535 + /usr/include/qt5/QtCore/qobjectdefs.h \
  1536 + /usr/include/qt5/QtCore/qnamespace.h \
  1537 + /usr/include/qt5/QtCore/qobjectdefs_impl.h \
  1538 + /usr/include/qt5/QtGui/qwindowdefs_win.h \
  1539 + /usr/include/qt5/QtCore/qobject.h \
  1540 + /usr/include/qt5/QtCore/qstring.h \
  1541 + /usr/include/qt5/QtCore/qchar.h \
  1542 + /usr/include/qt5/QtCore/qbytearray.h \
  1543 + /usr/include/qt5/QtCore/qrefcount.h \
  1544 + /usr/include/qt5/QtCore/qatomic.h \
  1545 + /usr/include/qt5/QtCore/qbasicatomic.h \
  1546 + /usr/include/qt5/QtCore/qatomic_bootstrap.h \
  1547 + /usr/include/qt5/QtCore/qgenericatomic.h \
  1548 + /usr/include/qt5/QtCore/qatomic_msvc.h \
  1549 + /usr/include/qt5/QtCore/qatomic_integrity.h \
  1550 + /usr/include/qt5/QtCore/qoldbasicatomic.h \
  1551 + /usr/include/qt5/QtCore/qatomic_vxworks.h \
  1552 + /usr/include/qt5/QtCore/qatomic_power.h \
  1553 + /usr/include/qt5/QtCore/qatomic_aarch64.h \
  1554 + /usr/include/qt5/QtCore/qatomic_alpha.h \
  1555 + /usr/include/qt5/QtCore/qatomic_armv7.h \
  1556 + /usr/include/qt5/QtCore/qatomic_armv6.h \
  1557 + /usr/include/qt5/QtCore/qatomic_armv5.h \
  1558 + /usr/include/qt5/QtCore/qatomic_bfin.h \
  1559 + /usr/include/qt5/QtCore/qatomic_ia64.h \
  1560 + /usr/include/qt5/QtCore/qatomic_mips.h \
  1561 + /usr/include/qt5/QtCore/qatomic_s390.h \
  1562 + /usr/include/qt5/QtCore/qatomic_sh4a.h \
  1563 + /usr/include/qt5/QtCore/qatomic_sparc.h \
  1564 + /usr/include/qt5/QtCore/qatomic_x86.h \
  1565 + /usr/include/qt5/QtCore/qatomic_cxx11.h \
  1566 + /usr/include/qt5/QtCore/qatomic_gcc.h \
  1567 + /usr/include/qt5/QtCore/qatomic_unix.h \
  1568 + /usr/include/qt5/QtCore/qarraydata.h \
  1569 + /usr/include/qt5/QtCore/qstringbuilder.h \
  1570 + /usr/include/qt5/QtCore/qlist.h \
  1571 + /usr/include/qt5/QtCore/qalgorithms.h \
  1572 + /usr/include/qt5/QtCore/qiterator.h \
  1573 + /usr/include/qt5/QtCore/qcoreevent.h \
  1574 + /usr/include/qt5/QtCore/qscopedpointer.h \
  1575 + /usr/include/qt5/QtCore/qmetatype.h \
  1576 + /usr/include/qt5/QtCore/qvarlengtharray.h \
  1577 + /usr/include/qt5/QtCore/qcontainerfwd.h \
  1578 + /usr/include/qt5/QtCore/qisenum.h \
  1579 + /usr/include/qt5/QtCore/qobject_impl.h \
  1580 + /usr/include/qt5/QtCore/qmargins.h \
  1581 + /usr/include/qt5/QtGui/qpaintdevice.h \
  1582 + /usr/include/qt5/QtCore/qrect.h \
  1583 + /usr/include/qt5/QtCore/qsize.h \
  1584 + /usr/include/qt5/QtCore/qpoint.h \
  1585 + /usr/include/qt5/QtGui/qpalette.h \
  1586 + /usr/include/qt5/QtGui/qcolor.h \
  1587 + /usr/include/qt5/QtGui/qrgb.h \
  1588 + /usr/include/qt5/QtCore/qstringlist.h \
  1589 + /usr/include/qt5/QtCore/qdatastream.h \
  1590 + /usr/include/qt5/QtCore/qiodevice.h \
  1591 + /usr/include/qt5/QtCore/qpair.h \
  1592 + /usr/include/qt5/QtCore/qregexp.h \
  1593 + /usr/include/qt5/QtCore/qstringmatcher.h \
  1594 + /usr/include/qt5/QtGui/qbrush.h \
  1595 + /usr/include/qt5/QtCore/qvector.h \
  1596 + /usr/include/qt5/QtGui/qmatrix.h \
  1597 + /usr/include/qt5/QtGui/qpolygon.h \
  1598 + /usr/include/qt5/QtGui/qregion.h \
  1599 + /usr/include/qt5/QtCore/qline.h \
  1600 + /usr/include/qt5/QtGui/qtransform.h \
  1601 + /usr/include/qt5/QtGui/qpainterpath.h \
  1602 + /usr/include/qt5/QtGui/qimage.h \
  1603 + /usr/include/qt5/QtGui/qpixmap.h \
  1604 + /usr/include/qt5/QtCore/qsharedpointer.h \
  1605 + /usr/include/qt5/QtCore/qshareddata.h \
  1606 + /usr/include/qt5/QtCore/qsharedpointer_impl.h \
  1607 + /usr/include/qt5/QtCore/qhash.h \
  1608 + /usr/include/qt5/QtGui/qfont.h \
  1609 + /usr/include/qt5/QtGui/qfontmetrics.h \
  1610 + /usr/include/qt5/QtGui/qfontinfo.h \
  1611 + /usr/include/qt5/QtWidgets/qsizepolicy.h \
  1612 + /usr/include/qt5/QtGui/qcursor.h \
  1613 + /usr/include/qt5/QtGui/qkeysequence.h \
  1614 + /usr/include/qt5/QtGui/qevent.h \
  1615 + /usr/include/qt5/QtCore/qvariant.h \
  1616 + /usr/include/qt5/QtCore/qmap.h \
  1617 + /usr/include/qt5/QtCore/qdebug.h \
  1618 + /usr/include/qt5/QtCore/qtextstream.h \
  1619 + /usr/include/qt5/QtCore/qlocale.h \
  1620 + /usr/include/qt5/QtCore/qset.h \
  1621 + /usr/include/qt5/QtCore/qcontiguouscache.h \
  1622 + /usr/include/qt5/QtCore/qurl.h \
  1623 + /usr/include/qt5/QtCore/qurlquery.h \
  1624 + /usr/include/qt5/QtCore/qfile.h \
  1625 + /usr/include/qt5/QtCore/qfiledevice.h \
  1626 + /usr/include/qt5/QtGui/qvector2d.h \
  1627 + /usr/include/qt5/QtGui/qtouchdevice.h \
  1628 + /usr/include/qt5/QtCore/QRegExp \
  1629 + ../QChatClient/Socket.h \
  1630 + ../QChatClient/SocketException.h \
  1631 + ../QChatClient/chatroom.h \
  1632 + /usr/include/qt5/QtWidgets/QMainWindow \
  1633 + /usr/include/qt5/QtWidgets/qmainwindow.h \
  1634 + /usr/include/qt5/QtWidgets/qtabwidget.h \
  1635 + /usr/include/qt5/QtGui/qicon.h \
  1636 + ../QChatClient/chatwindow.h \
  1637 + ui_loginscreen.h \
  1638 + /usr/include/qt5/QtCore/QVariant \
  1639 + /usr/include/qt5/QtWidgets/QAction \
  1640 + /usr/include/qt5/QtWidgets/qaction.h \
  1641 + /usr/include/qt5/QtWidgets/qactiongroup.h \
  1642 + /usr/include/qt5/QtWidgets/QApplication \
  1643 + /usr/include/qt5/QtWidgets/qapplication.h \
  1644 + /usr/include/qt5/QtCore/qcoreapplication.h \
  1645 + /usr/include/qt5/QtCore/qeventloop.h \
  1646 + /usr/include/qt5/QtWidgets/qdesktopwidget.h \
  1647 + /usr/include/qt5/QtGui/qguiapplication.h \
  1648 + /usr/include/qt5/QtGui/qinputmethod.h \
  1649 + /usr/include/qt5/QtWidgets/QButtonGroup \
  1650 + /usr/include/qt5/QtWidgets/qbuttongroup.h \
  1651 + /usr/include/qt5/QtWidgets/QGridLayout \
  1652 + /usr/include/qt5/QtWidgets/qgridlayout.h \
  1653 + /usr/include/qt5/QtWidgets/qlayout.h \
  1654 + /usr/include/qt5/QtWidgets/qlayoutitem.h \
  1655 + /usr/include/qt5/QtWidgets/qboxlayout.h \
  1656 + /usr/include/qt5/QtWidgets/QHeaderView \
  1657 + /usr/include/qt5/QtWidgets/qheaderview.h \
  1658 + /usr/include/qt5/QtWidgets/qabstractitemview.h \
  1659 + /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
  1660 + /usr/include/qt5/QtWidgets/qframe.h \
  1661 + /usr/include/qt5/QtCore/qabstractitemmodel.h \
  1662 + /usr/include/qt5/QtCore/qitemselectionmodel.h \
  1663 + /usr/include/qt5/QtWidgets/qabstractitemdelegate.h \
  1664 + /usr/include/qt5/QtWidgets/qstyleoption.h \
  1665 + /usr/include/qt5/QtWidgets/qabstractspinbox.h \
  1666 + /usr/include/qt5/QtGui/qvalidator.h \
  1667 + /usr/include/qt5/QtWidgets/qslider.h \
  1668 + /usr/include/qt5/QtWidgets/qabstractslider.h \
  1669 + /usr/include/qt5/QtWidgets/qstyle.h \
  1670 + /usr/include/qt5/QtWidgets/qtabbar.h \
  1671 + /usr/include/qt5/QtWidgets/qrubberband.h \
  1672 + /usr/include/qt5/QtWidgets/QLabel \
  1673 + /usr/include/qt5/QtWidgets/qlabel.h \
  1674 + /usr/include/qt5/QtWidgets/QLineEdit \
  1675 + /usr/include/qt5/QtWidgets/qlineedit.h \
  1676 + /usr/include/qt5/QtGui/qtextcursor.h \
  1677 + /usr/include/qt5/QtGui/qtextformat.h \
  1678 + /usr/include/qt5/QtGui/qpen.h \
  1679 + /usr/include/qt5/QtGui/qtextoption.h \
  1680 + /usr/include/qt5/QtWidgets/QPushButton \
  1681 + /usr/include/qt5/QtWidgets/qpushbutton.h \
  1682 + /usr/include/qt5/QtWidgets/qabstractbutton.h \
  1683 + /usr/include/qt5/QtWidgets/QSpacerItem \
  1684 + /usr/include/qt5/QtWidgets/QWidget
1454 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o loginscreen.o ../QChatClient/loginscreen.cpp 1685 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o loginscreen.o ../QChatClient/loginscreen.cpp
1455 1686
1456 -chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \ 1687 +chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \
  1688 + /usr/include/qt5/QtWidgets/QMainWindow \
  1689 + /usr/include/qt5/QtWidgets/qmainwindow.h \
  1690 + /usr/include/qt5/QtWidgets/qwidget.h \
  1691 + /usr/include/qt5/QtGui/qwindowdefs.h \
  1692 + /usr/include/qt5/QtCore/qglobal.h \
  1693 + /usr/include/qt5/QtCore/qconfig.h \
  1694 + /usr/include/qt5/QtCore/qfeatures.h \
  1695 + /usr/include/qt5/QtCore/qsystemdetection.h \
  1696 + /usr/include/qt5/QtCore/qcompilerdetection.h \
  1697 + /usr/include/qt5/QtCore/qprocessordetection.h \
  1698 + /usr/include/qt5/QtCore/qlogging.h \
  1699 + /usr/include/qt5/QtCore/qflags.h \
  1700 + /usr/include/qt5/QtCore/qtypeinfo.h \
  1701 + /usr/include/qt5/QtCore/qtypetraits.h \
  1702 + /usr/include/qt5/QtCore/qsysinfo.h \
  1703 + /usr/include/qt5/QtCore/qobjectdefs.h \
  1704 + /usr/include/qt5/QtCore/qnamespace.h \
  1705 + /usr/include/qt5/QtCore/qobjectdefs_impl.h \
  1706 + /usr/include/qt5/QtGui/qwindowdefs_win.h \
  1707 + /usr/include/qt5/QtCore/qobject.h \
  1708 + /usr/include/qt5/QtCore/qstring.h \
  1709 + /usr/include/qt5/QtCore/qchar.h \
  1710 + /usr/include/qt5/QtCore/qbytearray.h \
  1711 + /usr/include/qt5/QtCore/qrefcount.h \
  1712 + /usr/include/qt5/QtCore/qatomic.h \
  1713 + /usr/include/qt5/QtCore/qbasicatomic.h \
  1714 + /usr/include/qt5/QtCore/qatomic_bootstrap.h \
  1715 + /usr/include/qt5/QtCore/qgenericatomic.h \
  1716 + /usr/include/qt5/QtCore/qatomic_msvc.h \
  1717 + /usr/include/qt5/QtCore/qatomic_integrity.h \
  1718 + /usr/include/qt5/QtCore/qoldbasicatomic.h \
  1719 + /usr/include/qt5/QtCore/qatomic_vxworks.h \
  1720 + /usr/include/qt5/QtCore/qatomic_power.h \
  1721 + /usr/include/qt5/QtCore/qatomic_aarch64.h \
  1722 + /usr/include/qt5/QtCore/qatomic_alpha.h \
  1723 + /usr/include/qt5/QtCore/qatomic_armv7.h \
  1724 + /usr/include/qt5/QtCore/qatomic_armv6.h \
  1725 + /usr/include/qt5/QtCore/qatomic_armv5.h \
  1726 + /usr/include/qt5/QtCore/qatomic_bfin.h \
  1727 + /usr/include/qt5/QtCore/qatomic_ia64.h \
  1728 + /usr/include/qt5/QtCore/qatomic_mips.h \
  1729 + /usr/include/qt5/QtCore/qatomic_s390.h \
  1730 + /usr/include/qt5/QtCore/qatomic_sh4a.h \
  1731 + /usr/include/qt5/QtCore/qatomic_sparc.h \
  1732 + /usr/include/qt5/QtCore/qatomic_x86.h \
  1733 + /usr/include/qt5/QtCore/qatomic_cxx11.h \
  1734 + /usr/include/qt5/QtCore/qatomic_gcc.h \
  1735 + /usr/include/qt5/QtCore/qatomic_unix.h \
  1736 + /usr/include/qt5/QtCore/qarraydata.h \
  1737 + /usr/include/qt5/QtCore/qstringbuilder.h \
  1738 + /usr/include/qt5/QtCore/qlist.h \
  1739 + /usr/include/qt5/QtCore/qalgorithms.h \
  1740 + /usr/include/qt5/QtCore/qiterator.h \
  1741 + /usr/include/qt5/QtCore/qcoreevent.h \
  1742 + /usr/include/qt5/QtCore/qscopedpointer.h \
  1743 + /usr/include/qt5/QtCore/qmetatype.h \
  1744 + /usr/include/qt5/QtCore/qvarlengtharray.h \
  1745 + /usr/include/qt5/QtCore/qcontainerfwd.h \
  1746 + /usr/include/qt5/QtCore/qisenum.h \
  1747 + /usr/include/qt5/QtCore/qobject_impl.h \
  1748 + /usr/include/qt5/QtCore/qmargins.h \
  1749 + /usr/include/qt5/QtGui/qpaintdevice.h \
  1750 + /usr/include/qt5/QtCore/qrect.h \
  1751 + /usr/include/qt5/QtCore/qsize.h \
  1752 + /usr/include/qt5/QtCore/qpoint.h \
  1753 + /usr/include/qt5/QtGui/qpalette.h \
  1754 + /usr/include/qt5/QtGui/qcolor.h \
  1755 + /usr/include/qt5/QtGui/qrgb.h \
  1756 + /usr/include/qt5/QtCore/qstringlist.h \
  1757 + /usr/include/qt5/QtCore/qdatastream.h \
  1758 + /usr/include/qt5/QtCore/qiodevice.h \
  1759 + /usr/include/qt5/QtCore/qpair.h \
  1760 + /usr/include/qt5/QtCore/qregexp.h \
  1761 + /usr/include/qt5/QtCore/qstringmatcher.h \
  1762 + /usr/include/qt5/QtGui/qbrush.h \
  1763 + /usr/include/qt5/QtCore/qvector.h \
  1764 + /usr/include/qt5/QtGui/qmatrix.h \
  1765 + /usr/include/qt5/QtGui/qpolygon.h \
  1766 + /usr/include/qt5/QtGui/qregion.h \
  1767 + /usr/include/qt5/QtCore/qline.h \
  1768 + /usr/include/qt5/QtGui/qtransform.h \
  1769 + /usr/include/qt5/QtGui/qpainterpath.h \
  1770 + /usr/include/qt5/QtGui/qimage.h \
  1771 + /usr/include/qt5/QtGui/qpixmap.h \
  1772 + /usr/include/qt5/QtCore/qsharedpointer.h \
  1773 + /usr/include/qt5/QtCore/qshareddata.h \
  1774 + /usr/include/qt5/QtCore/qsharedpointer_impl.h \
  1775 + /usr/include/qt5/QtCore/qhash.h \
  1776 + /usr/include/qt5/QtGui/qfont.h \
  1777 + /usr/include/qt5/QtGui/qfontmetrics.h \
  1778 + /usr/include/qt5/QtGui/qfontinfo.h \
  1779 + /usr/include/qt5/QtWidgets/qsizepolicy.h \
  1780 + /usr/include/qt5/QtGui/qcursor.h \
  1781 + /usr/include/qt5/QtGui/qkeysequence.h \
  1782 + /usr/include/qt5/QtGui/qevent.h \
  1783 + /usr/include/qt5/QtCore/qvariant.h \
  1784 + /usr/include/qt5/QtCore/qmap.h \
  1785 + /usr/include/qt5/QtCore/qdebug.h \
  1786 + /usr/include/qt5/QtCore/qtextstream.h \
  1787 + /usr/include/qt5/QtCore/qlocale.h \
  1788 + /usr/include/qt5/QtCore/qset.h \
  1789 + /usr/include/qt5/QtCore/qcontiguouscache.h \
  1790 + /usr/include/qt5/QtCore/qurl.h \
  1791 + /usr/include/qt5/QtCore/qurlquery.h \
  1792 + /usr/include/qt5/QtCore/qfile.h \
  1793 + /usr/include/qt5/QtCore/qfiledevice.h \
  1794 + /usr/include/qt5/QtGui/qvector2d.h \
  1795 + /usr/include/qt5/QtGui/qtouchdevice.h \
  1796 + /usr/include/qt5/QtWidgets/qtabwidget.h \
  1797 + /usr/include/qt5/QtGui/qicon.h \
  1798 + ../QChatClient/Socket.h \
  1799 + ../QChatClient/SocketException.h \
  1800 + ../QChatClient/loginscreen.h \
  1801 + /usr/include/qt5/QtWidgets/QDialog \
  1802 + /usr/include/qt5/QtWidgets/qdialog.h \
  1803 + /usr/include/qt5/QtCore/QRegExp \
  1804 + ../QChatClient/chatwindow.h \
  1805 + ui_chatroom.h \
  1806 + /usr/include/qt5/QtCore/QVariant \
  1807 + /usr/include/qt5/QtWidgets/QAction \
  1808 + /usr/include/qt5/QtWidgets/qaction.h \
  1809 + /usr/include/qt5/QtWidgets/qactiongroup.h \
  1810 + /usr/include/qt5/QtWidgets/QApplication \
  1811 + /usr/include/qt5/QtWidgets/qapplication.h \
  1812 + /usr/include/qt5/QtCore/qcoreapplication.h \
  1813 + /usr/include/qt5/QtCore/qeventloop.h \
  1814 + /usr/include/qt5/QtWidgets/qdesktopwidget.h \
  1815 + /usr/include/qt5/QtGui/qguiapplication.h \
  1816 + /usr/include/qt5/QtGui/qinputmethod.h \
  1817 + /usr/include/qt5/QtWidgets/QButtonGroup \
  1818 + /usr/include/qt5/QtWidgets/qbuttongroup.h \
  1819 + /usr/include/qt5/QtWidgets/QGridLayout \
  1820 + /usr/include/qt5/QtWidgets/qgridlayout.h \
  1821 + /usr/include/qt5/QtWidgets/qlayout.h \
  1822 + /usr/include/qt5/QtWidgets/qlayoutitem.h \
  1823 + /usr/include/qt5/QtWidgets/qboxlayout.h \
  1824 + /usr/include/qt5/QtWidgets/QHeaderView \
  1825 + /usr/include/qt5/QtWidgets/qheaderview.h \
  1826 + /usr/include/qt5/QtWidgets/qabstractitemview.h \
  1827 + /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
  1828 + /usr/include/qt5/QtWidgets/qframe.h \
  1829 + /usr/include/qt5/QtCore/qabstractitemmodel.h \
  1830 + /usr/include/qt5/QtCore/qitemselectionmodel.h \
  1831 + /usr/include/qt5/QtWidgets/qabstractitemdelegate.h \
  1832 + /usr/include/qt5/QtWidgets/qstyleoption.h \
  1833 + /usr/include/qt5/QtWidgets/qabstractspinbox.h \
  1834 + /usr/include/qt5/QtGui/qvalidator.h \
  1835 + /usr/include/qt5/QtWidgets/qslider.h \
  1836 + /usr/include/qt5/QtWidgets/qabstractslider.h \
  1837 + /usr/include/qt5/QtWidgets/qstyle.h \
  1838 + /usr/include/qt5/QtWidgets/qtabbar.h \
  1839 + /usr/include/qt5/QtWidgets/qrubberband.h \
  1840 + /usr/include/qt5/QtWidgets/QListWidget \
  1841 + /usr/include/qt5/QtWidgets/qlistwidget.h \
  1842 + /usr/include/qt5/QtWidgets/qlistview.h \
  1843 + /usr/include/qt5/QtWidgets/QMenu \
  1844 + /usr/include/qt5/QtWidgets/qmenu.h \
  1845 + /usr/include/qt5/QtWidgets/QMenuBar \
  1846 + /usr/include/qt5/QtWidgets/qmenubar.h \
  1847 + /usr/include/qt5/QtWidgets/QPushButton \
  1848 + /usr/include/qt5/QtWidgets/qpushbutton.h \
  1849 + /usr/include/qt5/QtWidgets/qabstractbutton.h \
  1850 + /usr/include/qt5/QtWidgets/QSplitter \
  1851 + /usr/include/qt5/QtWidgets/qsplitter.h \
  1852 + /usr/include/qt5/QtWidgets/QWidget \
  1853 + ../QChatClient/chatinputtext.h \
  1854 + /usr/include/qt5/QtWidgets/QTextEdit \
  1855 + /usr/include/qt5/QtWidgets/qtextedit.h \
  1856 + /usr/include/qt5/QtGui/qtextdocument.h \
  1857 + /usr/include/qt5/QtGui/qtextoption.h \
  1858 + /usr/include/qt5/QtGui/qtextcursor.h \
  1859 + /usr/include/qt5/QtGui/qtextformat.h \
  1860 + /usr/include/qt5/QtGui/qpen.h \
  1861 + /usr/include/qt5/QtGui/QKeyEvent \
  1862 + ../QChatClient/chatwidget.h
  1863 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chatroom.o ../QChatClient/chatroom.cpp
  1864 +
  1865 +Socket.o: ../QChatClient/Socket.cpp ../QChatClient/Socket.h \
  1866 + ../QChatClient/SocketException.h
  1867 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Socket.o ../QChatClient/Socket.cpp
  1868 +
  1869 +chatwidget.o: ../QChatClient/chatwidget.cpp ../QChatClient/chatwidget.h \
  1870 + /usr/include/qt5/QtWidgets/QTextEdit \
  1871 + /usr/include/qt5/QtWidgets/qtextedit.h \
  1872 + /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
  1873 + /usr/include/qt5/QtWidgets/qframe.h \
  1874 + /usr/include/qt5/QtWidgets/qwidget.h \
  1875 + /usr/include/qt5/QtGui/qwindowdefs.h \
  1876 + /usr/include/qt5/QtCore/qglobal.h \
  1877 + /usr/include/qt5/QtCore/qconfig.h \
  1878 + /usr/include/qt5/QtCore/qfeatures.h \
  1879 + /usr/include/qt5/QtCore/qsystemdetection.h \
  1880 + /usr/include/qt5/QtCore/qcompilerdetection.h \
  1881 + /usr/include/qt5/QtCore/qprocessordetection.h \
  1882 + /usr/include/qt5/QtCore/qlogging.h \
  1883 + /usr/include/qt5/QtCore/qflags.h \
  1884 + /usr/include/qt5/QtCore/qtypeinfo.h \
  1885 + /usr/include/qt5/QtCore/qtypetraits.h \
  1886 + /usr/include/qt5/QtCore/qsysinfo.h \
  1887 + /usr/include/qt5/QtCore/qobjectdefs.h \
  1888 + /usr/include/qt5/QtCore/qnamespace.h \
  1889 + /usr/include/qt5/QtCore/qobjectdefs_impl.h \
  1890 + /usr/include/qt5/QtGui/qwindowdefs_win.h \
  1891 + /usr/include/qt5/QtCore/qobject.h \
  1892 + /usr/include/qt5/QtCore/qstring.h \
  1893 + /usr/include/qt5/QtCore/qchar.h \
  1894 + /usr/include/qt5/QtCore/qbytearray.h \
  1895 + /usr/include/qt5/QtCore/qrefcount.h \
  1896 + /usr/include/qt5/QtCore/qatomic.h \
  1897 + /usr/include/qt5/QtCore/qbasicatomic.h \
  1898 + /usr/include/qt5/QtCore/qatomic_bootstrap.h \
  1899 + /usr/include/qt5/QtCore/qgenericatomic.h \
  1900 + /usr/include/qt5/QtCore/qatomic_msvc.h \
  1901 + /usr/include/qt5/QtCore/qatomic_integrity.h \
  1902 + /usr/include/qt5/QtCore/qoldbasicatomic.h \
  1903 + /usr/include/qt5/QtCore/qatomic_vxworks.h \
  1904 + /usr/include/qt5/QtCore/qatomic_power.h \
  1905 + /usr/include/qt5/QtCore/qatomic_aarch64.h \
  1906 + /usr/include/qt5/QtCore/qatomic_alpha.h \
  1907 + /usr/include/qt5/QtCore/qatomic_armv7.h \
  1908 + /usr/include/qt5/QtCore/qatomic_armv6.h \
  1909 + /usr/include/qt5/QtCore/qatomic_armv5.h \
  1910 + /usr/include/qt5/QtCore/qatomic_bfin.h \
  1911 + /usr/include/qt5/QtCore/qatomic_ia64.h \
  1912 + /usr/include/qt5/QtCore/qatomic_mips.h \
  1913 + /usr/include/qt5/QtCore/qatomic_s390.h \
  1914 + /usr/include/qt5/QtCore/qatomic_sh4a.h \
  1915 + /usr/include/qt5/QtCore/qatomic_sparc.h \
  1916 + /usr/include/qt5/QtCore/qatomic_x86.h \
  1917 + /usr/include/qt5/QtCore/qatomic_cxx11.h \
  1918 + /usr/include/qt5/QtCore/qatomic_gcc.h \
  1919 + /usr/include/qt5/QtCore/qatomic_unix.h \
  1920 + /usr/include/qt5/QtCore/qarraydata.h \
  1921 + /usr/include/qt5/QtCore/qstringbuilder.h \
  1922 + /usr/include/qt5/QtCore/qlist.h \
  1923 + /usr/include/qt5/QtCore/qalgorithms.h \
  1924 + /usr/include/qt5/QtCore/qiterator.h \
  1925 + /usr/include/qt5/QtCore/qcoreevent.h \
  1926 + /usr/include/qt5/QtCore/qscopedpointer.h \
  1927 + /usr/include/qt5/QtCore/qmetatype.h \
  1928 + /usr/include/qt5/QtCore/qvarlengtharray.h \
  1929 + /usr/include/qt5/QtCore/qcontainerfwd.h \
  1930 + /usr/include/qt5/QtCore/qisenum.h \
  1931 + /usr/include/qt5/QtCore/qobject_impl.h \
  1932 + /usr/include/qt5/QtCore/qmargins.h \
  1933 + /usr/include/qt5/QtGui/qpaintdevice.h \
  1934 + /usr/include/qt5/QtCore/qrect.h \
  1935 + /usr/include/qt5/QtCore/qsize.h \
  1936 + /usr/include/qt5/QtCore/qpoint.h \
  1937 + /usr/include/qt5/QtGui/qpalette.h \
  1938 + /usr/include/qt5/QtGui/qcolor.h \
  1939 + /usr/include/qt5/QtGui/qrgb.h \
  1940 + /usr/include/qt5/QtCore/qstringlist.h \
  1941 + /usr/include/qt5/QtCore/qdatastream.h \
  1942 + /usr/include/qt5/QtCore/qiodevice.h \
  1943 + /usr/include/qt5/QtCore/qpair.h \
  1944 + /usr/include/qt5/QtCore/qregexp.h \
  1945 + /usr/include/qt5/QtCore/qstringmatcher.h \
  1946 + /usr/include/qt5/QtGui/qbrush.h \
  1947 + /usr/include/qt5/QtCore/qvector.h \
  1948 + /usr/include/qt5/QtGui/qmatrix.h \
  1949 + /usr/include/qt5/QtGui/qpolygon.h \
  1950 + /usr/include/qt5/QtGui/qregion.h \
  1951 + /usr/include/qt5/QtCore/qline.h \
  1952 + /usr/include/qt5/QtGui/qtransform.h \
  1953 + /usr/include/qt5/QtGui/qpainterpath.h \
  1954 + /usr/include/qt5/QtGui/qimage.h \
  1955 + /usr/include/qt5/QtGui/qpixmap.h \
  1956 + /usr/include/qt5/QtCore/qsharedpointer.h \
  1957 + /usr/include/qt5/QtCore/qshareddata.h \
  1958 + /usr/include/qt5/QtCore/qsharedpointer_impl.h \
  1959 + /usr/include/qt5/QtCore/qhash.h \
  1960 + /usr/include/qt5/QtGui/qfont.h \
  1961 + /usr/include/qt5/QtGui/qfontmetrics.h \
  1962 + /usr/include/qt5/QtGui/qfontinfo.h \
  1963 + /usr/include/qt5/QtWidgets/qsizepolicy.h \
  1964 + /usr/include/qt5/QtGui/qcursor.h \
  1965 + /usr/include/qt5/QtGui/qkeysequence.h \
  1966 + /usr/include/qt5/QtGui/qevent.h \
  1967 + /usr/include/qt5/QtCore/qvariant.h \
  1968 + /usr/include/qt5/QtCore/qmap.h \
  1969 + /usr/include/qt5/QtCore/qdebug.h \
  1970 + /usr/include/qt5/QtCore/qtextstream.h \
  1971 + /usr/include/qt5/QtCore/qlocale.h \
  1972 + /usr/include/qt5/QtCore/qset.h \
  1973 + /usr/include/qt5/QtCore/qcontiguouscache.h \
  1974 + /usr/include/qt5/QtCore/qurl.h \
  1975 + /usr/include/qt5/QtCore/qurlquery.h \
  1976 + /usr/include/qt5/QtCore/qfile.h \
  1977 + /usr/include/qt5/QtCore/qfiledevice.h \
  1978 + /usr/include/qt5/QtGui/qvector2d.h \
  1979 + /usr/include/qt5/QtGui/qtouchdevice.h \
  1980 + /usr/include/qt5/QtGui/qtextdocument.h \
  1981 + /usr/include/qt5/QtGui/qtextoption.h \
  1982 + /usr/include/qt5/QtGui/qtextcursor.h \
  1983 + /usr/include/qt5/QtGui/qtextformat.h \
  1984 + /usr/include/qt5/QtGui/qpen.h
  1985 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chatwidget.o ../QChatClient/chatwidget.cpp
  1986 +
  1987 +chatwindow.o: ../QChatClient/chatwindow.cpp ../QChatClient/chatwindow.h \
1457 /usr/include/qt5/QtWidgets/QMainWindow \ 1988 /usr/include/qt5/QtWidgets/QMainWindow \
1458 /usr/include/qt5/QtWidgets/qmainwindow.h \ 1989 /usr/include/qt5/QtWidgets/qmainwindow.h \
1459 /usr/include/qt5/QtWidgets/qwidget.h \ 1990 /usr/include/qt5/QtWidgets/qwidget.h \
@@ -1564,9 +2095,7 @@ chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \ @@ -1564,9 +2095,7 @@ chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \
1564 /usr/include/qt5/QtGui/qtouchdevice.h \ 2095 /usr/include/qt5/QtGui/qtouchdevice.h \
1565 /usr/include/qt5/QtWidgets/qtabwidget.h \ 2096 /usr/include/qt5/QtWidgets/qtabwidget.h \
1566 /usr/include/qt5/QtGui/qicon.h \ 2097 /usr/include/qt5/QtGui/qicon.h \
1567 - ../QChatClient/Socket.h \  
1568 - ../QChatClient/SocketException.h \  
1569 - ui_chatroom.h \ 2098 + ui_chatwindow.h \
1570 /usr/include/qt5/QtCore/QVariant \ 2099 /usr/include/qt5/QtCore/QVariant \
1571 /usr/include/qt5/QtWidgets/QAction \ 2100 /usr/include/qt5/QtWidgets/QAction \
1572 /usr/include/qt5/QtWidgets/qaction.h \ 2101 /usr/include/qt5/QtWidgets/qaction.h \
@@ -1601,11 +2130,18 @@ chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \ @@ -1601,11 +2130,18 @@ chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \
1601 /usr/include/qt5/QtWidgets/qstyle.h \ 2130 /usr/include/qt5/QtWidgets/qstyle.h \
1602 /usr/include/qt5/QtWidgets/qtabbar.h \ 2131 /usr/include/qt5/QtWidgets/qtabbar.h \
1603 /usr/include/qt5/QtWidgets/qrubberband.h \ 2132 /usr/include/qt5/QtWidgets/qrubberband.h \
1604 - /usr/include/qt5/QtWidgets/QListWidget \  
1605 - /usr/include/qt5/QtWidgets/qlistwidget.h \  
1606 - /usr/include/qt5/QtWidgets/qlistview.h \ 2133 + /usr/include/qt5/QtWidgets/QMenu \
  2134 + /usr/include/qt5/QtWidgets/qmenu.h \
  2135 + /usr/include/qt5/QtWidgets/QMenuBar \
  2136 + /usr/include/qt5/QtWidgets/qmenubar.h \
  2137 + /usr/include/qt5/QtWidgets/QPushButton \
  2138 + /usr/include/qt5/QtWidgets/qpushbutton.h \
  2139 + /usr/include/qt5/QtWidgets/qabstractbutton.h \
  2140 + /usr/include/qt5/QtWidgets/QSpacerItem \
1607 /usr/include/qt5/QtWidgets/QSplitter \ 2141 /usr/include/qt5/QtWidgets/QSplitter \
1608 /usr/include/qt5/QtWidgets/qsplitter.h \ 2142 /usr/include/qt5/QtWidgets/qsplitter.h \
  2143 + /usr/include/qt5/QtWidgets/QWidget \
  2144 + ../QChatClient/chatinputtext.h \
1609 /usr/include/qt5/QtWidgets/QTextEdit \ 2145 /usr/include/qt5/QtWidgets/QTextEdit \
1610 /usr/include/qt5/QtWidgets/qtextedit.h \ 2146 /usr/include/qt5/QtWidgets/qtextedit.h \
1611 /usr/include/qt5/QtGui/qtextdocument.h \ 2147 /usr/include/qt5/QtGui/qtextdocument.h \
@@ -1613,20 +2149,11 @@ chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \ @@ -1613,20 +2149,11 @@ chatroom.o: ../QChatClient/chatroom.cpp ../QChatClient/chatroom.h \
1613 /usr/include/qt5/QtGui/qtextcursor.h \ 2149 /usr/include/qt5/QtGui/qtextcursor.h \
1614 /usr/include/qt5/QtGui/qtextformat.h \ 2150 /usr/include/qt5/QtGui/qtextformat.h \
1615 /usr/include/qt5/QtGui/qpen.h \ 2151 /usr/include/qt5/QtGui/qpen.h \
1616 - /usr/include/qt5/QtWidgets/QWidget \ 2152 + /usr/include/qt5/QtGui/QKeyEvent \
1617 ../QChatClient/chatwidget.h 2153 ../QChatClient/chatwidget.h
1618 - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chatroom.o ../QChatClient/chatroom.cpp  
1619 -  
1620 -Socket.o: ../QChatClient/Socket.cpp ../QChatClient/Socket.h \  
1621 - ../QChatClient/SocketException.h  
1622 - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Socket.o ../QChatClient/Socket.cpp  
1623 -  
1624 -client.o: ../QChatClient/client.cpp ../QChatClient/client.h \  
1625 - ../QChatClient/Socket.h \  
1626 - ../QChatClient/SocketException.h  
1627 - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o client.o ../QChatClient/client.cpp 2154 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chatwindow.o ../QChatClient/chatwindow.cpp
1628 2155
1629 -chatwidget.o: ../QChatClient/chatwidget.cpp ../QChatClient/chatwidget.h \ 2156 +chatinputtext.o: ../QChatClient/chatinputtext.cpp ../QChatClient/chatinputtext.h \
1630 /usr/include/qt5/QtWidgets/QTextEdit \ 2157 /usr/include/qt5/QtWidgets/QTextEdit \
1631 /usr/include/qt5/QtWidgets/qtextedit.h \ 2158 /usr/include/qt5/QtWidgets/qtextedit.h \
1632 /usr/include/qt5/QtWidgets/qabstractscrollarea.h \ 2159 /usr/include/qt5/QtWidgets/qabstractscrollarea.h \
@@ -1741,11 +2268,9 @@ chatwidget.o: ../QChatClient/chatwidget.cpp ../QChatClient/chatwidget.h \ @@ -1741,11 +2268,9 @@ chatwidget.o: ../QChatClient/chatwidget.cpp ../QChatClient/chatwidget.h \
1741 /usr/include/qt5/QtGui/qtextoption.h \ 2268 /usr/include/qt5/QtGui/qtextoption.h \
1742 /usr/include/qt5/QtGui/qtextcursor.h \ 2269 /usr/include/qt5/QtGui/qtextcursor.h \
1743 /usr/include/qt5/QtGui/qtextformat.h \ 2270 /usr/include/qt5/QtGui/qtextformat.h \
1744 - /usr/include/qt5/QtGui/qpen.h  
1745 - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chatwidget.o ../QChatClient/chatwidget.cpp  
1746 -  
1747 -moc_chatwindow.o: moc_chatwindow.cpp  
1748 - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_chatwindow.o moc_chatwindow.cpp 2271 + /usr/include/qt5/QtGui/qpen.h \
  2272 + /usr/include/qt5/QtGui/QKeyEvent
  2273 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chatinputtext.o ../QChatClient/chatinputtext.cpp
1749 2274
1750 moc_loginscreen.o: moc_loginscreen.cpp 2275 moc_loginscreen.o: moc_loginscreen.cpp
1751 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_loginscreen.o moc_loginscreen.cpp 2276 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_loginscreen.o moc_loginscreen.cpp
@@ -1756,6 +2281,12 @@ moc_chatroom.o: moc_chatroom.cpp @@ -1756,6 +2281,12 @@ moc_chatroom.o: moc_chatroom.cpp
1756 moc_chatwidget.o: moc_chatwidget.cpp 2281 moc_chatwidget.o: moc_chatwidget.cpp
1757 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_chatwidget.o moc_chatwidget.cpp 2282 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_chatwidget.o moc_chatwidget.cpp
1758 2283
  2284 +moc_chatwindow.o: moc_chatwindow.cpp
  2285 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_chatwindow.o moc_chatwindow.cpp
  2286 +
  2287 +moc_chatinputtext.o: moc_chatinputtext.cpp
  2288 + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_chatinputtext.o moc_chatinputtext.cpp
  2289 +
1759 ####### Install 2290 ####### Install
1760 2291
1761 install: FORCE 2292 install: FORCE
build-QChatClient-Desktop-Debug/QChatClient
No preview for this file type
build-QChatClient-Desktop-Debug/chatwidget.o
No preview for this file type
build-QChatClient-Desktop-Debug/chatwindow.o
No preview for this file type
build-QChatClient-Desktop-Debug/loginscreen.o
No preview for this file type
build-QChatClient-Desktop-Debug/main.o
No preview for this file type
build-QChatClient-Desktop-Debug/moc_chatroom.cpp
@@ -19,8 +19,8 @@ @@ -19,8 +19,8 @@
19 19
20 QT_BEGIN_MOC_NAMESPACE 20 QT_BEGIN_MOC_NAMESPACE
21 struct qt_meta_stringdata_Chatroom_t { 21 struct qt_meta_stringdata_Chatroom_t {
22 - QByteArrayData data[1];  
23 - char stringdata[10]; 22 + QByteArrayData data[11];
  23 + char stringdata[118];
24 }; 24 };
25 #define QT_MOC_LITERAL(idx, ofs, len) \ 25 #define QT_MOC_LITERAL(idx, ofs, len) \
26 Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 26 Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
@@ -29,9 +29,22 @@ struct qt_meta_stringdata_Chatroom_t { @@ -29,9 +29,22 @@ struct qt_meta_stringdata_Chatroom_t {
29 ) 29 )
30 static const qt_meta_stringdata_Chatroom_t qt_meta_stringdata_Chatroom = { 30 static const qt_meta_stringdata_Chatroom_t qt_meta_stringdata_Chatroom = {
31 { 31 {
32 -QT_MOC_LITERAL(0, 0, 8) 32 +QT_MOC_LITERAL(0, 0, 8),
  33 +QT_MOC_LITERAL(1, 9, 15),
  34 +QT_MOC_LITERAL(2, 25, 0),
  35 +QT_MOC_LITERAL(3, 26, 4),
  36 +QT_MOC_LITERAL(4, 31, 15),
  37 +QT_MOC_LITERAL(5, 47, 12),
  38 +QT_MOC_LITERAL(6, 60, 7),
  39 +QT_MOC_LITERAL(7, 68, 8),
  40 +QT_MOC_LITERAL(8, 77, 13),
  41 +QT_MOC_LITERAL(9, 91, 6),
  42 +QT_MOC_LITERAL(10, 98, 18)
33 }, 43 },
34 - "Chatroom\0" 44 + "Chatroom\0threadsFinished\0\0exit\0"
  45 + "messagesToPrint\0startSession\0sendMsg\0"
  46 + "printMsg\0finishThreads\0finish\0"
  47 + "disconnectChatroom\0"
35 }; 48 };
36 #undef QT_MOC_LITERAL 49 #undef QT_MOC_LITERAL
37 50
@@ -41,22 +54,71 @@ static const uint qt_meta_data_Chatroom[] = { @@ -41,22 +54,71 @@ static const uint qt_meta_data_Chatroom[] = {
41 7, // revision 54 7, // revision
42 0, // classname 55 0, // classname
43 0, 0, // classinfo 56 0, 0, // classinfo
44 - 0, 0, // methods 57 + 8, 14, // methods
45 0, 0, // properties 58 0, 0, // properties
46 0, 0, // enums/sets 59 0, 0, // enums/sets
47 0, 0, // constructors 60 0, 0, // constructors
48 0, // flags 61 0, // flags
49 - 0, // signalCount 62 + 2, // signalCount
  63 +
  64 + // signals: name, argc, parameters, tag, flags
  65 + 1, 1, 54, 2, 0x05,
  66 + 4, 0, 57, 2, 0x05,
  67 +
  68 + // slots: name, argc, parameters, tag, flags
  69 + 5, 0, 58, 2, 0x0a,
  70 + 6, 0, 59, 2, 0x0a,
  71 + 7, 0, 60, 2, 0x0a,
  72 + 8, 1, 61, 2, 0x08,
  73 + 9, 0, 64, 2, 0x08,
  74 + 10, 0, 65, 2, 0x08,
  75 +
  76 + // signals: parameters
  77 + QMetaType::Void, QMetaType::Bool, 3,
  78 + QMetaType::Void,
  79 +
  80 + // slots: parameters
  81 + QMetaType::Void,
  82 + QMetaType::Void,
  83 + QMetaType::Void,
  84 + QMetaType::Void, QMetaType::Bool, 3,
  85 + QMetaType::Void,
  86 + QMetaType::Void,
50 87
51 0 // eod 88 0 // eod
52 }; 89 };
53 90
54 void Chatroom::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 91 void Chatroom::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
55 { 92 {
56 - Q_UNUSED(_o);  
57 - Q_UNUSED(_id);  
58 - Q_UNUSED(_c);  
59 - Q_UNUSED(_a); 93 + if (_c == QMetaObject::InvokeMetaMethod) {
  94 + Chatroom *_t = static_cast<Chatroom *>(_o);
  95 + switch (_id) {
  96 + case 0: _t->threadsFinished((*reinterpret_cast< bool(*)>(_a[1]))); break;
  97 + case 1: _t->messagesToPrint(); break;
  98 + case 2: _t->startSession(); break;
  99 + case 3: _t->sendMsg(); break;
  100 + case 4: _t->printMsg(); break;
  101 + case 5: _t->finishThreads((*reinterpret_cast< bool(*)>(_a[1]))); break;
  102 + case 6: _t->finish(); break;
  103 + case 7: _t->disconnectChatroom(); break;
  104 + default: ;
  105 + }
  106 + } else if (_c == QMetaObject::IndexOfMethod) {
  107 + int *result = reinterpret_cast<int *>(_a[0]);
  108 + void **func = reinterpret_cast<void **>(_a[1]);
  109 + {
  110 + typedef void (Chatroom::*_t)(bool );
  111 + if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&Chatroom::threadsFinished)) {
  112 + *result = 0;
  113 + }
  114 + }
  115 + {
  116 + typedef void (Chatroom::*_t)();
  117 + if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&Chatroom::messagesToPrint)) {
  118 + *result = 1;
  119 + }
  120 + }
  121 + }
60 } 122 }
61 123
62 const QMetaObject Chatroom::staticMetaObject = { 124 const QMetaObject Chatroom::staticMetaObject = {
@@ -83,6 +145,28 @@ int Chatroom::qt_metacall(QMetaObject::Call _c, int _id, void **_a) @@ -83,6 +145,28 @@ int Chatroom::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
83 _id = QMainWindow::qt_metacall(_c, _id, _a); 145 _id = QMainWindow::qt_metacall(_c, _id, _a);
84 if (_id < 0) 146 if (_id < 0)
85 return _id; 147 return _id;
  148 + if (_c == QMetaObject::InvokeMetaMethod) {
  149 + if (_id < 8)
  150 + qt_static_metacall(this, _c, _id, _a);
  151 + _id -= 8;
  152 + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
  153 + if (_id < 8)
  154 + *reinterpret_cast<int*>(_a[0]) = -1;
  155 + _id -= 8;
  156 + }
86 return _id; 157 return _id;
87 } 158 }
  159 +
  160 +// SIGNAL 0
  161 +void Chatroom::threadsFinished(bool _t1)
  162 +{
  163 + void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
  164 + QMetaObject::activate(this, &staticMetaObject, 0, _a);
  165 +}
  166 +
  167 +// SIGNAL 1
  168 +void Chatroom::messagesToPrint()
  169 +{
  170 + QMetaObject::activate(this, &staticMetaObject, 1, 0);
  171 +}
88 QT_END_MOC_NAMESPACE 172 QT_END_MOC_NAMESPACE
build-QChatClient-Desktop-Debug/moc_chatroom.o
No preview for this file type
build-QChatClient-Desktop-Debug/moc_chatwidget.o
No preview for this file type
build-QChatClient-Desktop-Debug/moc_chatwindow.o
No preview for this file type
build-QChatClient-Desktop-Debug/moc_loginscreen.cpp
@@ -19,8 +19,8 @@ @@ -19,8 +19,8 @@
19 19
20 QT_BEGIN_MOC_NAMESPACE 20 QT_BEGIN_MOC_NAMESPACE
21 struct qt_meta_stringdata_LoginScreen_t { 21 struct qt_meta_stringdata_LoginScreen_t {
22 - QByteArrayData data[1];  
23 - char stringdata[13]; 22 + QByteArrayData data[4];
  23 + char stringdata[40];
24 }; 24 };
25 #define QT_MOC_LITERAL(idx, ofs, len) \ 25 #define QT_MOC_LITERAL(idx, ofs, len) \
26 Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 26 Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
@@ -29,9 +29,12 @@ struct qt_meta_stringdata_LoginScreen_t { @@ -29,9 +29,12 @@ struct qt_meta_stringdata_LoginScreen_t {
29 ) 29 )
30 static const qt_meta_stringdata_LoginScreen_t qt_meta_stringdata_LoginScreen = { 30 static const qt_meta_stringdata_LoginScreen_t qt_meta_stringdata_LoginScreen = {
31 { 31 {
32 -QT_MOC_LITERAL(0, 0, 11) 32 +QT_MOC_LITERAL(0, 0, 11),
  33 +QT_MOC_LITERAL(1, 12, 13),
  34 +QT_MOC_LITERAL(2, 26, 0),
  35 +QT_MOC_LITERAL(3, 27, 11)
33 }, 36 },
34 - "LoginScreen\0" 37 + "LoginScreen\0connectToChat\0\0cancelLogin\0"
35 }; 38 };
36 #undef QT_MOC_LITERAL 39 #undef QT_MOC_LITERAL
37 40
@@ -41,21 +44,34 @@ static const uint qt_meta_data_LoginScreen[] = { @@ -41,21 +44,34 @@ static const uint qt_meta_data_LoginScreen[] = {
41 7, // revision 44 7, // revision
42 0, // classname 45 0, // classname
43 0, 0, // classinfo 46 0, 0, // classinfo
44 - 0, 0, // methods 47 + 2, 14, // methods
45 0, 0, // properties 48 0, 0, // properties
46 0, 0, // enums/sets 49 0, 0, // enums/sets
47 0, 0, // constructors 50 0, 0, // constructors
48 0, // flags 51 0, // flags
49 0, // signalCount 52 0, // signalCount
50 53
  54 + // slots: name, argc, parameters, tag, flags
  55 + 1, 0, 24, 2, 0x0a,
  56 + 3, 0, 25, 2, 0x0a,
  57 +
  58 + // slots: parameters
  59 + QMetaType::Void,
  60 + QMetaType::Void,
  61 +
51 0 // eod 62 0 // eod
52 }; 63 };
53 64
54 void LoginScreen::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 65 void LoginScreen::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
55 { 66 {
56 - Q_UNUSED(_o);  
57 - Q_UNUSED(_id);  
58 - Q_UNUSED(_c); 67 + if (_c == QMetaObject::InvokeMetaMethod) {
  68 + LoginScreen *_t = static_cast<LoginScreen *>(_o);
  69 + switch (_id) {
  70 + case 0: _t->connectToChat(); break;
  71 + case 1: _t->cancelLogin(); break;
  72 + default: ;
  73 + }
  74 + }
59 Q_UNUSED(_a); 75 Q_UNUSED(_a);
60 } 76 }
61 77
@@ -83,6 +99,15 @@ int LoginScreen::qt_metacall(QMetaObject::Call _c, int _id, void **_a) @@ -83,6 +99,15 @@ int LoginScreen::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
83 _id = QDialog::qt_metacall(_c, _id, _a); 99 _id = QDialog::qt_metacall(_c, _id, _a);
84 if (_id < 0) 100 if (_id < 0)
85 return _id; 101 return _id;
  102 + if (_c == QMetaObject::InvokeMetaMethod) {
  103 + if (_id < 2)
  104 + qt_static_metacall(this, _c, _id, _a);
  105 + _id -= 2;
  106 + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
  107 + if (_id < 2)
  108 + *reinterpret_cast<int*>(_a[0]) = -1;
  109 + _id -= 2;
  110 + }
86 return _id; 111 return _id;
87 } 112 }
88 QT_END_MOC_NAMESPACE 113 QT_END_MOC_NAMESPACE
build-QChatClient-Desktop-Debug/moc_loginscreen.o
No preview for this file type
build-QChatClient-Desktop-Debug/ui_chatroom.h
@@ -17,9 +17,12 @@ @@ -17,9 +17,12 @@
17 #include <QtWidgets/QHeaderView> 17 #include <QtWidgets/QHeaderView>
18 #include <QtWidgets/QListWidget> 18 #include <QtWidgets/QListWidget>
19 #include <QtWidgets/QMainWindow> 19 #include <QtWidgets/QMainWindow>
  20 +#include <QtWidgets/QMenu>
  21 +#include <QtWidgets/QMenuBar>
  22 +#include <QtWidgets/QPushButton>
20 #include <QtWidgets/QSplitter> 23 #include <QtWidgets/QSplitter>
21 -#include <QtWidgets/QTextEdit>  
22 #include <QtWidgets/QWidget> 24 #include <QtWidgets/QWidget>
  25 +#include "chatinputtext.h"
23 #include "chatwidget.h" 26 #include "chatwidget.h"
24 27
25 QT_BEGIN_NAMESPACE 28 QT_BEGIN_NAMESPACE
@@ -27,6 +30,9 @@ QT_BEGIN_NAMESPACE @@ -27,6 +30,9 @@ QT_BEGIN_NAMESPACE
27 class Ui_Chatroom 30 class Ui_Chatroom
28 { 31 {
29 public: 32 public:
  33 + QAction *actionConnect;
  34 + QAction *actionExit;
  35 + QAction *actionDisconnect;
30 QWidget *centralwidget; 36 QWidget *centralwidget;
31 QGridLayout *gridLayout_2; 37 QGridLayout *gridLayout_2;
32 QSplitter *windowSplitter; 38 QSplitter *windowSplitter;
@@ -34,14 +40,23 @@ public: @@ -34,14 +40,23 @@ public:
34 QGridLayout *gridLayout; 40 QGridLayout *gridLayout;
35 QSplitter *chatSplitter; 41 QSplitter *chatSplitter;
36 ChatWidget *chatText; 42 ChatWidget *chatText;
37 - QTextEdit *inputText; 43 + chatInputText *inputText;
38 QListWidget *userList; 44 QListWidget *userList;
  45 + QPushButton *sendButton;
  46 + QMenuBar *menuBar;
  47 + QMenu *menuChat;
39 48
40 void setupUi(QMainWindow *Chatroom) 49 void setupUi(QMainWindow *Chatroom)
41 { 50 {
42 if (Chatroom->objectName().isEmpty()) 51 if (Chatroom->objectName().isEmpty())
43 Chatroom->setObjectName(QStringLiteral("Chatroom")); 52 Chatroom->setObjectName(QStringLiteral("Chatroom"));
44 Chatroom->resize(800, 600); 53 Chatroom->resize(800, 600);
  54 + actionConnect = new QAction(Chatroom);
  55 + actionConnect->setObjectName(QStringLiteral("actionConnect"));
  56 + actionExit = new QAction(Chatroom);
  57 + actionExit->setObjectName(QStringLiteral("actionExit"));
  58 + actionDisconnect = new QAction(Chatroom);
  59 + actionDisconnect->setObjectName(QStringLiteral("actionDisconnect"));
45 centralwidget = new QWidget(Chatroom); 60 centralwidget = new QWidget(Chatroom);
46 centralwidget->setObjectName(QStringLiteral("centralwidget")); 61 centralwidget->setObjectName(QStringLiteral("centralwidget"));
47 gridLayout_2 = new QGridLayout(centralwidget); 62 gridLayout_2 = new QGridLayout(centralwidget);
@@ -60,9 +75,9 @@ public: @@ -60,9 +75,9 @@ public:
60 chatSplitter->setOrientation(Qt::Vertical); 75 chatSplitter->setOrientation(Qt::Vertical);
61 chatText = new ChatWidget(chatSplitter); 76 chatText = new ChatWidget(chatSplitter);
62 chatText->setObjectName(QStringLiteral("chatText")); 77 chatText->setObjectName(QStringLiteral("chatText"));
63 - chatText->setReadOnly(true); 78 + chatText->setReadOnly(false);
64 chatSplitter->addWidget(chatText); 79 chatSplitter->addWidget(chatText);
65 - inputText = new QTextEdit(chatSplitter); 80 + inputText = new chatInputText(chatSplitter);
66 inputText->setObjectName(QStringLiteral("inputText")); 81 inputText->setObjectName(QStringLiteral("inputText"));
67 QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored); 82 QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);
68 sizePolicy.setHorizontalStretch(0); 83 sizePolicy.setHorizontalStretch(0);
@@ -70,6 +85,7 @@ public: @@ -70,6 +85,7 @@ public:
70 sizePolicy.setHeightForWidth(inputText->sizePolicy().hasHeightForWidth()); 85 sizePolicy.setHeightForWidth(inputText->sizePolicy().hasHeightForWidth());
71 inputText->setSizePolicy(sizePolicy); 86 inputText->setSizePolicy(sizePolicy);
72 inputText->setMaximumSize(QSize(16777215, 16777215)); 87 inputText->setMaximumSize(QSize(16777215, 16777215));
  88 + inputText->setReadOnly(true);
73 chatSplitter->addWidget(inputText); 89 chatSplitter->addWidget(inputText);
74 90
75 gridLayout->addWidget(chatSplitter, 0, 0, 1, 1); 91 gridLayout->addWidget(chatSplitter, 0, 0, 1, 1);
@@ -88,7 +104,28 @@ public: @@ -88,7 +104,28 @@ public:
88 104
89 gridLayout_2->addWidget(windowSplitter, 0, 0, 1, 1); 105 gridLayout_2->addWidget(windowSplitter, 0, 0, 1, 1);
90 106
  107 + sendButton = new QPushButton(centralwidget);
  108 + sendButton->setObjectName(QStringLiteral("sendButton"));
  109 + QSizePolicy sizePolicy2(QSizePolicy::Fixed, QSizePolicy::Fixed);
  110 + sizePolicy2.setHorizontalStretch(0);
  111 + sizePolicy2.setVerticalStretch(0);
  112 + sizePolicy2.setHeightForWidth(sendButton->sizePolicy().hasHeightForWidth());
  113 + sendButton->setSizePolicy(sizePolicy2);
  114 +
  115 + gridLayout_2->addWidget(sendButton, 1, 0, 1, 1);
  116 +
91 Chatroom->setCentralWidget(centralwidget); 117 Chatroom->setCentralWidget(centralwidget);
  118 + menuBar = new QMenuBar(Chatroom);
  119 + menuBar->setObjectName(QStringLiteral("menuBar"));
  120 + menuBar->setGeometry(QRect(0, 0, 800, 26));
  121 + menuChat = new QMenu(menuBar);
  122 + menuChat->setObjectName(QStringLiteral("menuChat"));
  123 + Chatroom->setMenuBar(menuBar);
  124 +
  125 + menuBar->addAction(menuChat->menuAction());
  126 + menuChat->addAction(actionConnect);
  127 + menuChat->addAction(actionDisconnect);
  128 + menuChat->addAction(actionExit);
92 129
93 retranslateUi(Chatroom); 130 retranslateUi(Chatroom);
94 131
@@ -97,7 +134,12 @@ public: @@ -97,7 +134,12 @@ public:
97 134
98 void retranslateUi(QMainWindow *Chatroom) 135 void retranslateUi(QMainWindow *Chatroom)
99 { 136 {
100 - Chatroom->setWindowTitle(QApplication::translate("Chatroom", "MainWindow", 0)); 137 + Chatroom->setWindowTitle(QApplication::translate("Chatroom", "QChatClient", 0));
  138 + actionConnect->setText(QApplication::translate("Chatroom", "Connect...", 0));
  139 + actionExit->setText(QApplication::translate("Chatroom", "Exit", 0));
  140 + actionDisconnect->setText(QApplication::translate("Chatroom", "Disconnect", 0));
  141 + sendButton->setText(QApplication::translate("Chatroom", "Send", 0));
  142 + menuChat->setTitle(QApplication::translate("Chatroom", "Chat", 0));
101 } // retranslateUi 143 } // retranslateUi
102 144
103 }; 145 };
build-QChatClient-Desktop-Debug/ui_chatwindow.h
@@ -16,10 +16,13 @@ @@ -16,10 +16,13 @@
16 #include <QtWidgets/QGridLayout> 16 #include <QtWidgets/QGridLayout>
17 #include <QtWidgets/QHeaderView> 17 #include <QtWidgets/QHeaderView>
18 #include <QtWidgets/QMainWindow> 18 #include <QtWidgets/QMainWindow>
  19 +#include <QtWidgets/QMenu>
19 #include <QtWidgets/QMenuBar> 20 #include <QtWidgets/QMenuBar>
  21 +#include <QtWidgets/QPushButton>
  22 +#include <QtWidgets/QSpacerItem>
20 #include <QtWidgets/QSplitter> 23 #include <QtWidgets/QSplitter>
21 -#include <QtWidgets/QTextEdit>  
22 #include <QtWidgets/QWidget> 24 #include <QtWidgets/QWidget>
  25 +#include "chatinputtext.h"
23 #include "chatwidget.h" 26 #include "chatwidget.h"
24 27
25 QT_BEGIN_NAMESPACE 28 QT_BEGIN_NAMESPACE
@@ -27,18 +30,26 @@ QT_BEGIN_NAMESPACE @@ -27,18 +30,26 @@ QT_BEGIN_NAMESPACE
27 class Ui_ChatWindow 30 class Ui_ChatWindow
28 { 31 {
29 public: 32 public:
  33 + QAction *actionExit;
30 QWidget *centralWidget; 34 QWidget *centralWidget;
31 QGridLayout *gridLayout; 35 QGridLayout *gridLayout;
  36 + QSpacerItem *horizontalSpacer;
  37 + QPushButton *sendButton;
  38 + QWidget *widget;
  39 + QGridLayout *gridLayout_2;
32 QSplitter *splitter; 40 QSplitter *splitter;
33 ChatWidget *chatText; 41 ChatWidget *chatText;
34 - QTextEdit *inputText; 42 + chatInputText *inputText;
35 QMenuBar *menuBar; 43 QMenuBar *menuBar;
  44 + QMenu *menuChat;
36 45
37 void setupUi(QMainWindow *ChatWindow) 46 void setupUi(QMainWindow *ChatWindow)
38 { 47 {
39 if (ChatWindow->objectName().isEmpty()) 48 if (ChatWindow->objectName().isEmpty())
40 ChatWindow->setObjectName(QStringLiteral("ChatWindow")); 49 ChatWindow->setObjectName(QStringLiteral("ChatWindow"));
41 ChatWindow->resize(400, 502); 50 ChatWindow->resize(400, 502);
  51 + actionExit = new QAction(ChatWindow);
  52 + actionExit->setObjectName(QStringLiteral("actionExit"));
42 centralWidget = new QWidget(ChatWindow); 53 centralWidget = new QWidget(ChatWindow);
43 centralWidget->setObjectName(QStringLiteral("centralWidget")); 54 centralWidget->setObjectName(QStringLiteral("centralWidget"));
44 centralWidget->setEnabled(true); 55 centralWidget->setEnabled(true);
@@ -51,34 +62,63 @@ public: @@ -51,34 +62,63 @@ public:
51 gridLayout->setSpacing(6); 62 gridLayout->setSpacing(6);
52 gridLayout->setContentsMargins(11, 11, 11, 11); 63 gridLayout->setContentsMargins(11, 11, 11, 11);
53 gridLayout->setObjectName(QStringLiteral("gridLayout")); 64 gridLayout->setObjectName(QStringLiteral("gridLayout"));
54 - splitter = new QSplitter(centralWidget); 65 + horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
  66 +
  67 + gridLayout->addItem(horizontalSpacer, 3, 1, 1, 1);
  68 +
  69 + sendButton = new QPushButton(centralWidget);
  70 + sendButton->setObjectName(QStringLiteral("sendButton"));
  71 + QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::Fixed);
  72 + sizePolicy1.setHorizontalStretch(0);
  73 + sizePolicy1.setVerticalStretch(0);
  74 + sizePolicy1.setHeightForWidth(sendButton->sizePolicy().hasHeightForWidth());
  75 + sendButton->setSizePolicy(sizePolicy1);
  76 +
  77 + gridLayout->addWidget(sendButton, 3, 0, 1, 1);
  78 +
  79 + widget = new QWidget(centralWidget);
  80 + widget->setObjectName(QStringLiteral("widget"));
  81 + gridLayout_2 = new QGridLayout(widget);
  82 + gridLayout_2->setSpacing(6);
  83 + gridLayout_2->setContentsMargins(11, 11, 11, 11);
  84 + gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
  85 + splitter = new QSplitter(widget);
55 splitter->setObjectName(QStringLiteral("splitter")); 86 splitter->setObjectName(QStringLiteral("splitter"));
56 splitter->setOrientation(Qt::Vertical); 87 splitter->setOrientation(Qt::Vertical);
57 chatText = new ChatWidget(splitter); 88 chatText = new ChatWidget(splitter);
58 chatText->setObjectName(QStringLiteral("chatText")); 89 chatText->setObjectName(QStringLiteral("chatText"));
59 chatText->setReadOnly(true); 90 chatText->setReadOnly(true);
60 splitter->addWidget(chatText); 91 splitter->addWidget(chatText);
61 - inputText = new QTextEdit(splitter); 92 + inputText = new chatInputText(splitter);
62 inputText->setObjectName(QStringLiteral("inputText")); 93 inputText->setObjectName(QStringLiteral("inputText"));
63 inputText->setEnabled(true); 94 inputText->setEnabled(true);
64 - QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Ignored);  
65 - sizePolicy1.setHorizontalStretch(0);  
66 - sizePolicy1.setVerticalStretch(0);  
67 - sizePolicy1.setHeightForWidth(inputText->sizePolicy().hasHeightForWidth());  
68 - inputText->setSizePolicy(sizePolicy1); 95 + QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Ignored);
  96 + sizePolicy2.setHorizontalStretch(0);
  97 + sizePolicy2.setVerticalStretch(0);
  98 + sizePolicy2.setHeightForWidth(inputText->sizePolicy().hasHeightForWidth());
  99 + inputText->setSizePolicy(sizePolicy2);
69 inputText->setMinimumSize(QSize(0, 0)); 100 inputText->setMinimumSize(QSize(0, 0));
70 inputText->setMaximumSize(QSize(16777215, 16777215)); 101 inputText->setMaximumSize(QSize(16777215, 16777215));
71 inputText->setBaseSize(QSize(0, 0)); 102 inputText->setBaseSize(QSize(0, 0));
  103 + inputText->setReadOnly(true);
72 splitter->addWidget(inputText); 104 splitter->addWidget(inputText);
73 105
74 - gridLayout->addWidget(splitter, 0, 0, 1, 1); 106 + gridLayout_2->addWidget(splitter, 0, 0, 1, 1);
  107 +
  108 +
  109 + gridLayout->addWidget(widget, 0, 0, 1, 2);
75 110
76 ChatWindow->setCentralWidget(centralWidget); 111 ChatWindow->setCentralWidget(centralWidget);
77 menuBar = new QMenuBar(ChatWindow); 112 menuBar = new QMenuBar(ChatWindow);
78 menuBar->setObjectName(QStringLiteral("menuBar")); 113 menuBar->setObjectName(QStringLiteral("menuBar"));
79 - menuBar->setGeometry(QRect(0, 0, 400, 25)); 114 + menuBar->setGeometry(QRect(0, 0, 400, 26));
  115 + menuChat = new QMenu(menuBar);
  116 + menuChat->setObjectName(QStringLiteral("menuChat"));
80 ChatWindow->setMenuBar(menuBar); 117 ChatWindow->setMenuBar(menuBar);
81 118
  119 + menuBar->addAction(menuChat->menuAction());
  120 + menuChat->addAction(actionExit);
  121 +
82 retranslateUi(ChatWindow); 122 retranslateUi(ChatWindow);
83 123
84 QMetaObject::connectSlotsByName(ChatWindow); 124 QMetaObject::connectSlotsByName(ChatWindow);
@@ -86,7 +126,10 @@ public: @@ -86,7 +126,10 @@ public:
86 126
87 void retranslateUi(QMainWindow *ChatWindow) 127 void retranslateUi(QMainWindow *ChatWindow)
88 { 128 {
89 - ChatWindow->setWindowTitle(QApplication::translate("ChatWindow", "ChatWindow", 0)); 129 + ChatWindow->setWindowTitle(QApplication::translate("ChatWindow", "QChatClient", 0));
  130 + actionExit->setText(QApplication::translate("ChatWindow", "Exit", 0));
  131 + sendButton->setText(QApplication::translate("ChatWindow", "Send", 0));
  132 + menuChat->setTitle(QApplication::translate("ChatWindow", "Chat", 0));
90 } // retranslateUi 133 } // retranslateUi
91 134
92 }; 135 };
build-QChatClient-Desktop-Debug/ui_loginscreen.h
@@ -28,24 +28,25 @@ class Ui_LoginScreen @@ -28,24 +28,25 @@ class Ui_LoginScreen
28 { 28 {
29 public: 29 public:
30 QGridLayout *gridLayout; 30 QGridLayout *gridLayout;
  31 + QLineEdit *serverURLEdit;
  32 + QSpacerItem *topSpacer;
31 QLabel *titleLabel; 33 QLabel *titleLabel;
  34 + QSpacerItem *verticalSpacer;
  35 + QSpacerItem *rightSpacer;
  36 + QSpacerItem *leftSpacer;
  37 + QLineEdit *nickEdit;
32 QWidget *buttonBox; 38 QWidget *buttonBox;
33 QGridLayout *gridLayout_2; 39 QGridLayout *gridLayout_2;
34 - QPushButton *cancelButton;  
35 QPushButton *connectButton; 40 QPushButton *connectButton;
  41 + QPushButton *cancelButton;
36 QSpacerItem *buttonHorizSpacer; 42 QSpacerItem *buttonHorizSpacer;
37 - QSpacerItem *verticalSpacer;  
38 - QSpacerItem *topSpacer;  
39 - QSpacerItem *leftSpacer;  
40 - QLineEdit *nickEdit;  
41 - QLineEdit *serverURLEdit;  
42 - QSpacerItem *rightSpacer; 43 + QLabel *label;
43 44
44 void setupUi(QDialog *LoginScreen) 45 void setupUi(QDialog *LoginScreen)
45 { 46 {
46 if (LoginScreen->objectName().isEmpty()) 47 if (LoginScreen->objectName().isEmpty())
47 LoginScreen->setObjectName(QStringLiteral("LoginScreen")); 48 LoginScreen->setObjectName(QStringLiteral("LoginScreen"));
48 - LoginScreen->resize(402, 173); 49 + LoginScreen->resize(402, 206);
49 QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 50 QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
50 sizePolicy.setHorizontalStretch(0); 51 sizePolicy.setHorizontalStretch(0);
51 sizePolicy.setVerticalStretch(0); 52 sizePolicy.setVerticalStretch(0);
@@ -53,6 +54,15 @@ public: @@ -53,6 +54,15 @@ public:
53 LoginScreen->setSizePolicy(sizePolicy); 54 LoginScreen->setSizePolicy(sizePolicy);
54 gridLayout = new QGridLayout(LoginScreen); 55 gridLayout = new QGridLayout(LoginScreen);
55 gridLayout->setObjectName(QStringLiteral("gridLayout")); 56 gridLayout->setObjectName(QStringLiteral("gridLayout"));
  57 + serverURLEdit = new QLineEdit(LoginScreen);
  58 + serverURLEdit->setObjectName(QStringLiteral("serverURLEdit"));
  59 +
  60 + gridLayout->addWidget(serverURLEdit, 4, 1, 1, 1);
  61 +
  62 + topSpacer = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Fixed);
  63 +
  64 + gridLayout->addItem(topSpacer, 0, 1, 1, 1);
  65 +
56 titleLabel = new QLabel(LoginScreen); 66 titleLabel = new QLabel(LoginScreen);
57 titleLabel->setObjectName(QStringLiteral("titleLabel")); 67 titleLabel->setObjectName(QStringLiteral("titleLabel"));
58 QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Maximum); 68 QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Maximum);
@@ -64,36 +74,13 @@ public: @@ -64,36 +74,13 @@ public:
64 74
65 gridLayout->addWidget(titleLabel, 1, 1, 1, 1); 75 gridLayout->addWidget(titleLabel, 1, 1, 1, 1);
66 76
67 - buttonBox = new QWidget(LoginScreen);  
68 - buttonBox->setObjectName(QStringLiteral("buttonBox"));  
69 - sizePolicy1.setHeightForWidth(buttonBox->sizePolicy().hasHeightForWidth());  
70 - buttonBox->setSizePolicy(sizePolicy1);  
71 - gridLayout_2 = new QGridLayout(buttonBox);  
72 - gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));  
73 - cancelButton = new QPushButton(buttonBox);  
74 - cancelButton->setObjectName(QStringLiteral("cancelButton"));  
75 -  
76 - gridLayout_2->addWidget(cancelButton, 0, 2, 1, 1);  
77 -  
78 - connectButton = new QPushButton(buttonBox);  
79 - connectButton->setObjectName(QStringLiteral("connectButton"));  
80 -  
81 - gridLayout_2->addWidget(connectButton, 0, 1, 1, 1);  
82 -  
83 - buttonHorizSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);  
84 -  
85 - gridLayout_2->addItem(buttonHorizSpacer, 0, 0, 1, 1);  
86 -  
87 -  
88 - gridLayout->addWidget(buttonBox, 7, 1, 1, 1);  
89 -  
90 verticalSpacer = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed); 77 verticalSpacer = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed);
91 78
92 gridLayout->addItem(verticalSpacer, 2, 1, 1, 1); 79 gridLayout->addItem(verticalSpacer, 2, 1, 1, 1);
93 80
94 - topSpacer = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Fixed); 81 + rightSpacer = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum);
95 82
96 - gridLayout->addItem(topSpacer, 0, 1, 1, 1); 83 + gridLayout->addItem(rightSpacer, 4, 2, 1, 1);
97 84
98 leftSpacer = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum); 85 leftSpacer = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum);
99 86
@@ -104,15 +91,38 @@ public: @@ -104,15 +91,38 @@ public:
104 91
105 gridLayout->addWidget(nickEdit, 3, 1, 1, 1); 92 gridLayout->addWidget(nickEdit, 3, 1, 1, 1);
106 93
107 - serverURLEdit = new QLineEdit(LoginScreen);  
108 - serverURLEdit->setObjectName(QStringLiteral("serverURLEdit")); 94 + buttonBox = new QWidget(LoginScreen);
  95 + buttonBox->setObjectName(QStringLiteral("buttonBox"));
  96 + sizePolicy1.setHeightForWidth(buttonBox->sizePolicy().hasHeightForWidth());
  97 + buttonBox->setSizePolicy(sizePolicy1);
  98 + gridLayout_2 = new QGridLayout(buttonBox);
  99 + gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
  100 + connectButton = new QPushButton(buttonBox);
  101 + connectButton->setObjectName(QStringLiteral("connectButton"));
109 102
110 - gridLayout->addWidget(serverURLEdit, 4, 1, 1, 1); 103 + gridLayout_2->addWidget(connectButton, 1, 1, 1, 1);
111 104
112 - rightSpacer = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum); 105 + cancelButton = new QPushButton(buttonBox);
  106 + cancelButton->setObjectName(QStringLiteral("cancelButton"));
113 107
114 - gridLayout->addItem(rightSpacer, 4, 2, 1, 1); 108 + gridLayout_2->addWidget(cancelButton, 1, 2, 1, 1);
  109 +
  110 + buttonHorizSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
  111 +
  112 + gridLayout_2->addItem(buttonHorizSpacer, 1, 0, 1, 1);
  113 +
  114 + label = new QLabel(buttonBox);
  115 + label->setObjectName(QStringLiteral("label"));
  116 + label->setEnabled(true);
115 117
  118 + gridLayout_2->addWidget(label, 0, 0, 1, 1);
  119 +
  120 +
  121 + gridLayout->addWidget(buttonBox, 7, 1, 1, 1);
  122 +
  123 + QWidget::setTabOrder(nickEdit, serverURLEdit);
  124 + QWidget::setTabOrder(serverURLEdit, connectButton);
  125 + QWidget::setTabOrder(connectButton, cancelButton);
116 126
117 retranslateUi(LoginScreen); 127 retranslateUi(LoginScreen);
118 128
@@ -123,8 +133,9 @@ public: @@ -123,8 +133,9 @@ public:
123 { 133 {
124 LoginScreen->setWindowTitle(QApplication::translate("LoginScreen", "Login", 0)); 134 LoginScreen->setWindowTitle(QApplication::translate("LoginScreen", "Login", 0));
125 titleLabel->setText(QApplication::translate("LoginScreen", "Log in to chatroom", 0)); 135 titleLabel->setText(QApplication::translate("LoginScreen", "Log in to chatroom", 0));
126 - cancelButton->setText(QApplication::translate("LoginScreen", "Cancel", 0));  
127 connectButton->setText(QApplication::translate("LoginScreen", "OK", 0)); 136 connectButton->setText(QApplication::translate("LoginScreen", "OK", 0));
  137 + cancelButton->setText(QApplication::translate("LoginScreen", "Cancel", 0));
  138 + label->setText(QApplication::translate("LoginScreen", "INVALID HOSTNAME", 0));
128 } // retranslateUi 139 } // retranslateUi
129 140
130 }; 141 };