author | sheepluva |
Tue, 04 Feb 2014 19:45:22 +0100 | |
changeset 10108 | c68cf030eded |
parent 10061 | b7161f00a6ca |
child 10248 | 7b9b44a051f8 |
permissions | -rw-r--r-- |
480 | 1 |
/* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
486 | 3 |
* Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com> |
9998 | 4 |
* Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com> |
480 | 5 |
* |
6 |
* This program is free software; you can redistribute it and/or modify |
|
7 |
* it under the terms of the GNU General Public License as published by |
|
8 |
* the Free Software Foundation; version 2 of the License |
|
9 |
* |
|
10 |
* This program is distributed in the hope that it will be useful, |
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
* GNU General Public License for more details. |
|
14 |
* |
|
15 |
* You should have received a copy of the GNU General Public License |
|
16 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10061
diff
changeset
|
17 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
480 | 18 |
*/ |
19 |
||
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
20 |
#include <QDesktopServices> |
1520
f72f538eba05
Refactor chat widget to use QTextBrower instead of QListWidget:
unc0rr
parents:
1516
diff
changeset
|
21 |
#include <QTextBrowser> |
1391 | 22 |
#include <QAction> |
6165
6fe3e922246e
moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents:
6151
diff
changeset
|
23 |
#include <QFile> |
2845 | 24 |
#include <QTextStream> |
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
25 |
#include <QMenu> |
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
26 |
#include <QCursor> |
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
27 |
#include <QItemSelectionModel> |
6197 | 28 |
#include <QDateTime> |
29 |
#include <QTime> |
|
7723 | 30 |
#include <QListView> |
7737 | 31 |
#include <QModelIndexList> |
32 |
#include <QSortFilterProxyModel> |
|
7740 | 33 |
#include <QMenu> |
8451
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
34 |
#include <QScrollBar> |
461 | 35 |
|
6930 | 36 |
#include "DataManager.h" |
2773
e94f240a8a41
Have game beep when someone joins lobby/room. Controlled by Sound option
nemo
parents:
2706
diff
changeset
|
37 |
#include "hwconsts.h" |
e94f240a8a41
Have game beep when someone joins lobby/room. Controlled by Sound option
nemo
parents:
2706
diff
changeset
|
38 |
#include "gameuiconfig.h" |
7737 | 39 |
#include "playerslistmodel.h" |
8797
b7e0b7a18e3a
application bar blinks when someone pings you (issue 492)
koda
parents:
8451
diff
changeset
|
40 |
#include "HWApplication.h" |
461 | 41 |
#include "chatwidget.h" |
42 |
||
7720 | 43 |
|
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
44 |
QString * HWChatWidget::s_styleSheet = NULL; |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
45 |
QStringList * HWChatWidget::s_displayNone = NULL; |
6197 | 46 |
bool HWChatWidget::s_isTimeStamped = true; |
6229
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
47 |
QString HWChatWidget::s_tsFormat = ":mm:ss"; |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
48 |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
49 |
const QString & HWChatWidget::styleSheet() |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
50 |
{ |
6197 | 51 |
if (s_styleSheet != NULL) |
52 |
return *s_styleSheet; |
|
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
53 |
|
6197 | 54 |
setStyleSheet(); |
55 |
||
56 |
return *s_styleSheet; |
|
57 |
} |
|
58 |
||
59 |
void HWChatWidget::setStyleSheet(const QString & styleSheet) |
|
60 |
{ |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
61 |
QString orgStyleSheet = styleSheet; |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
62 |
QString style = QString(orgStyleSheet); |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
63 |
|
6197 | 64 |
// no stylesheet supplied, search for one or use default |
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
65 |
if (orgStyleSheet.isEmpty()) |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
66 |
{ |
6197 | 67 |
// load external stylesheet if there is any |
8049 | 68 |
QFile extFile("physfs://css/chat.css"); |
6197 | 69 |
|
70 |
QFile resFile(":/res/css/chat.css"); |
|
71 |
||
72 |
QFile & file = (extFile.exists()?extFile:resFile); |
|
73 |
||
74 |
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) |
|
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
75 |
{ |
6197 | 76 |
QTextStream in(&file); |
77 |
while (!in.atEnd()) |
|
78 |
{ |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
79 |
style.append(in.readLine()+"\n"); |
6197 | 80 |
} |
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
81 |
orgStyleSheet = style; |
6214 | 82 |
|
83 |
file.close(); |
|
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
84 |
} |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
85 |
} |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
86 |
|
6197 | 87 |
// let's parse display:none; ... |
88 |
||
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
89 |
// prepare for MAGIC :D |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
90 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
91 |
// matches (multi-)whitespaces (for replacement with simple space) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
92 |
QRegExp ws("\\s+"); |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
93 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
94 |
// matches comments (for removal) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
95 |
QRegExp rem("/\\*([^*]|\\*(?!/))*\\*/"); |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
96 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
97 |
// strip comments and multi-whitespaces to compress the style-sheet a bit |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
98 |
style = style.remove(rem).replace(ws," "); |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
99 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
100 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
101 |
// now let's see what messages the user does not want to be displayed |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
102 |
// by checking for display:none; (since QTextBrowser does not support it) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
103 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
104 |
// MOAR MAGIC :DDD |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
105 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
106 |
// matches definitions lacking display:none; (for removal) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
107 |
QRegExp displayed( |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
108 |
"([^{}]*\\{)(?!([^}]*;)* ?display ?: ?none ?(;[^}]*)?\\})[^}]*\\}"); |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
109 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
110 |
// matches all {...} and , (used as seperator for splitting into names) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
111 |
QRegExp split(" *(\\{[^}]*\\}|,) *"); |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
112 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
113 |
// matches class names that are referenced without hierachy |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
114 |
QRegExp nohierarchy("^.[^ .]+$"); |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
115 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
116 |
QStringList victims = QString(style). |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
117 |
remove(displayed). // remove visible stuff |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
118 |
trimmed(). |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
119 |
split(split). // get a list of the names |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
120 |
filter(nohierarchy). // only direct class names |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
121 |
replaceInStrings(QRegExp("^."),""); // crop . |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
122 |
|
6197 | 123 |
|
124 |
if (victims.contains("timestamp")) |
|
125 |
{ |
|
126 |
s_isTimeStamped = false; |
|
127 |
victims.removeAll("timestamp"); |
|
128 |
} |
|
6229
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
129 |
else |
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
130 |
{ |
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
131 |
s_isTimeStamped = true; |
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
132 |
s_tsFormat = |
6231 | 133 |
((victims.contains("timestamp:hours"))?"":"hh:") + |
134 |
QString("mm") + |
|
135 |
((victims.contains("timestamp:seconds"))?"":":ss"); |
|
6229
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
136 |
} |
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
137 |
|
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
138 |
victims.removeAll("timestamp:hours"); |
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
139 |
victims.removeAll("timestamp:seconds"); |
6197 | 140 |
|
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
141 |
victims.removeDuplicates(); |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
142 |
|
6197 | 143 |
QStringList * oldDisplayNone = s_displayNone; |
144 |
QString * oldStyleSheet = s_styleSheet; |
|
145 |
||
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
146 |
s_displayNone = new QStringList(victims); |
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
147 |
s_styleSheet = new QString(orgStyleSheet); |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
148 |
|
6197 | 149 |
if (oldDisplayNone != NULL) |
150 |
delete oldDisplayNone; |
|
151 |
||
152 |
if (oldStyleSheet != NULL) |
|
153 |
delete oldStyleSheet; |
|
154 |
||
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
155 |
} |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
156 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
157 |
void HWChatWidget::displayError(const QString & message) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
158 |
{ |
6181
c739b503ae31
ugh wth... cleaned FL/IL change notifications up
sheepluva
parents:
6180
diff
changeset
|
159 |
addLine("msg_Error", " !!! " + message); |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
160 |
} |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
161 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
162 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
163 |
void HWChatWidget::displayNotice(const QString & message) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
164 |
{ |
6181
c739b503ae31
ugh wth... cleaned FL/IL change notifications up
sheepluva
parents:
6180
diff
changeset
|
165 |
addLine("msg_Notice", " *** " + message); |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
166 |
} |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
167 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
168 |
|
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
169 |
void HWChatWidget::displayWarning(const QString & message) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
170 |
{ |
6181
c739b503ae31
ugh wth... cleaned FL/IL change notifications up
sheepluva
parents:
6180
diff
changeset
|
171 |
addLine("msg_Warning", " *!* " + message); |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
172 |
} |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
173 |
|
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
174 |
|
8179
a1ffcb559f99
Refactor: get rid of excessive QSettings instances on the same poor hedgewars.ini file
unc0rr
parents:
8049
diff
changeset
|
175 |
HWChatWidget::HWChatWidget(QWidget* parent, bool notify) : |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
176 |
QWidget(parent), |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
177 |
mainLayout(this) |
461 | 178 |
{ |
9134 | 179 |
this->gameSettings = NULL; |
2775 | 180 |
this->notify = notify; |
6418
f1a3c3aab5b4
hide all context menu options for own nick, except for info
sheepluva
parents:
6240
diff
changeset
|
181 |
|
f1a3c3aab5b4
hide all context menu options for own nick, except for info
sheepluva
parents:
6240
diff
changeset
|
182 |
m_isAdmin = false; |
6929
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
183 |
m_autoKickEnabled = false; |
6418
f1a3c3aab5b4
hide all context menu options for own nick, except for info
sheepluva
parents:
6240
diff
changeset
|
184 |
|
8395
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
185 |
QStringList vpList = |
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
186 |
QStringList() << "Classic" << "Default" << "Mobster" << "Russian"; |
6928
9562ace15141
nemo said I was boring for removing the "hello" randomizer on room join.
sheepluva
parents:
6700
diff
changeset
|
187 |
|
8395
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
188 |
foreach (const QString & vp, vpList) |
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
189 |
{ |
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
190 |
m_helloSounds.append(QString("/Sounds/voices/%1/Hello.ogg").arg(vp)); |
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
191 |
} |
6238 | 192 |
|
8395
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
193 |
m_hilightSound = "/Sounds/beep.ogg"; |
2773
e94f240a8a41
Have game beep when someone joins lobby/room. Controlled by Sound option
nemo
parents:
2706
diff
changeset
|
194 |
|
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
195 |
mainLayout.setMargin(0); |
461 | 196 |
|
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
197 |
QWidget * leftSideContainer = new QWidget(); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
198 |
leftSideContainer->setObjectName("leftSideContainer"); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
199 |
leftSideContainer->setStyleSheet("#leftSideContainer { border-width: 0px; background-color: #ffcc00; border-radius: 10px;} QTextBrowser, SmartLineEdit { background-color: rgb(13, 5, 68); }"); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
200 |
QVBoxLayout * leftSide = new QVBoxLayout(leftSideContainer); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
201 |
leftSide->setSpacing(3); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
202 |
leftSide->setMargin(3); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
203 |
mainLayout.addWidget(leftSideContainer, 76); |
461 | 204 |
|
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
205 |
// Chat view |
462 | 206 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
207 |
chatText = new QTextBrowser(this); |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
208 |
chatText->document()->setDefaultStyleSheet(styleSheet()); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
209 |
chatText->setMinimumHeight(20); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
210 |
chatText->setMinimumWidth(10); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
211 |
chatText->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); |
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
212 |
chatText->setOpenLinks(false); |
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
213 |
chatText->setStyleSheet("QTextBrowser { background-color: rgb(23, 11, 54); border-width: 0px; }"); |
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
214 |
connect(chatText, SIGNAL(anchorClicked(const QUrl&)), |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
215 |
this, SLOT(linkClicked(const QUrl&))); |
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
216 |
leftSide->addWidget(chatText, 1); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
217 |
|
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
218 |
// Input box |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
219 |
|
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
220 |
// Normal: rgb(23, 11, 54) |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
221 |
// Hover: rgb(13, 5, 68) |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
222 |
|
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
223 |
chatEditLine = new SmartLineEdit(); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
224 |
chatEditLine->setMaxLength(300); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
225 |
chatEditLine->setStyleSheet("SmartLineEdit { background-color: rgb(23, 11, 54); padding: 2px 8px; border-width: 0px; border-radius: 7px; } SmartLineEdit:hover, SmartLineEdit:focus { background-color: rgb(13, 5, 68); }"); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
226 |
chatEditLine->setFixedHeight(24); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
227 |
chatEditLine->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
228 |
connect(chatEditLine, SIGNAL(returnPressed()), this, SLOT(returnPressed())); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
229 |
|
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
230 |
leftSide->addWidget(chatEditLine, 0); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
231 |
|
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
232 |
// Nickname list |
462 | 233 |
|
7723 | 234 |
chatNicks = new QListView(this); |
7720 | 235 |
chatNicks->setIconSize(QSize(24, 16)); |
7725 | 236 |
chatNicks->setSelectionMode(QAbstractItemView::SingleSelection); |
237 |
chatNicks->setEditTriggers(QAbstractItemView::NoEditTriggers); |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
238 |
chatNicks->setMinimumHeight(10); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
239 |
chatNicks->setMinimumWidth(10); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
240 |
chatNicks->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); |
7740 | 241 |
chatNicks->setContextMenuPolicy(Qt::CustomContextMenu); |
242 |
||
7742 | 243 |
connect(chatNicks, SIGNAL(doubleClicked(QModelIndex)), |
244 |
this, SLOT(chatNickDoubleClicked(QModelIndex))); |
|
7740 | 245 |
|
246 |
connect(chatNicks, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(nicksContextMenuRequested(QPoint))); |
|
2706
935b7d618cf0
sheepluva's patch to add a "follow" command to server and frontend, in order to stalk people and join them in their rooms
koda
parents:
2428
diff
changeset
|
247 |
|
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
248 |
mainLayout.addSpacing(0); |
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8396
diff
changeset
|
249 |
mainLayout.addWidget(chatNicks, 24); |
1391 | 250 |
|
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
251 |
// the userData is used to flag things that are even available when user |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
252 |
// is offline |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
253 |
acInfo = new QAction(QAction::tr("Info"), chatNicks); |
3123 | 254 |
acInfo->setIcon(QIcon(":/res/info.png")); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
255 |
acInfo->setData(QVariant(false)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
256 |
connect(acInfo, SIGNAL(triggered(bool)), this, SLOT(onInfo())); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
257 |
acKick = new QAction(QAction::tr("Kick"), chatNicks); |
3123 | 258 |
acKick->setIcon(QIcon(":/res/kick.png")); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
259 |
acKick->setData(QVariant(false)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
260 |
connect(acKick, SIGNAL(triggered(bool)), this, SLOT(onKick())); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
261 |
acBan = new QAction(QAction::tr("Ban"), chatNicks); |
3123 | 262 |
acBan->setIcon(QIcon(":/res/ban.png")); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
263 |
acBan->setData(QVariant(true)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
264 |
connect(acBan, SIGNAL(triggered(bool)), this, SLOT(onBan())); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
265 |
acFollow = new QAction(QAction::tr("Follow"), chatNicks); |
3123 | 266 |
acFollow->setIcon(QIcon(":/res/follow.png")); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
267 |
acFollow->setData(QVariant(false)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
268 |
connect(acFollow, SIGNAL(triggered(bool)), this, SLOT(onFollow())); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
269 |
acIgnore = new QAction(QAction::tr("Ignore"), chatNicks); |
3123 | 270 |
acIgnore->setIcon(QIcon(":/res/ignore.png")); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
271 |
acIgnore->setData(QVariant(true)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
272 |
connect(acIgnore, SIGNAL(triggered(bool)), this, SLOT(onIgnore())); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
273 |
acFriend = new QAction(QAction::tr("Add friend"), chatNicks); |
3123 | 274 |
acFriend->setIcon(QIcon(":/res/addfriend.png")); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
275 |
acFriend->setData(QVariant(true)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
276 |
connect(acFriend, SIGNAL(triggered(bool)), this, SLOT(onFriend())); |
2377 | 277 |
|
4892 | 278 |
chatNicks->insertAction(0, acFriend); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
279 |
chatNicks->insertAction(0, acInfo); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
280 |
chatNicks->insertAction(0, acIgnore); |
3697 | 281 |
|
4892 | 282 |
setShowFollow(true); |
6182
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
283 |
|
6197 | 284 |
setAcceptDrops(true); |
7740 | 285 |
|
286 |
m_nicksMenu = new QMenu(this); |
|
287 |
||
6182
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
288 |
clear(); |
4892 | 289 |
} |
290 |
||
8179
a1ffcb559f99
Refactor: get rid of excessive QSettings instances on the same poor hedgewars.ini file
unc0rr
parents:
8049
diff
changeset
|
291 |
void HWChatWidget::setSettings(QSettings * settings) |
a1ffcb559f99
Refactor: get rid of excessive QSettings instances on the same poor hedgewars.ini file
unc0rr
parents:
8049
diff
changeset
|
292 |
{ |
a1ffcb559f99
Refactor: get rid of excessive QSettings instances on the same poor hedgewars.ini file
unc0rr
parents:
8049
diff
changeset
|
293 |
gameSettings = settings; |
a1ffcb559f99
Refactor: get rid of excessive QSettings instances on the same poor hedgewars.ini file
unc0rr
parents:
8049
diff
changeset
|
294 |
} |
6178
affa860f2983
BOOOOooOM <headshot>! removing default stylesheets from c++ code and adding them as text files to the qt resources
sheepluva
parents:
6177
diff
changeset
|
295 |
|
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
296 |
void HWChatWidget::linkClicked(const QUrl & link) |
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
297 |
{ |
8768 | 298 |
if ((link.scheme() == "http") or (link.scheme() == "https")) |
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
299 |
QDesktopServices::openUrl(link); |
8768 | 300 |
else if (link.scheme() == "hwnick") |
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
301 |
{ |
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
302 |
// decode nick |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
303 |
QString nick = QString::fromUtf8(QByteArray::fromBase64(link.encodedQuery())); |
7742 | 304 |
QModelIndexList mil = chatNicks->model()->match(chatNicks->model()->index(0, 0), Qt::DisplayRole, nick); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
305 |
|
7742 | 306 |
bool isOffline = (mil.size() < 1); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
307 |
|
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
308 |
if (isOffline) |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
309 |
{ |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
310 |
m_clickedNick = nick; |
7742 | 311 |
chatNicks->selectionModel()->clearSelection(); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
312 |
} |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
313 |
else |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
314 |
{ |
7742 | 315 |
chatNicks->selectionModel()->select(mil[0], QItemSelectionModel::ClearAndSelect); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
316 |
} |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
317 |
|
7742 | 318 |
nicksContextMenuRequested(chatNicks->mapFromGlobal(QCursor::pos())); |
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
319 |
} |
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
320 |
} |
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
321 |
|
4892 | 322 |
void HWChatWidget::setShowFollow(bool enabled) |
323 |
{ |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
324 |
if (enabled) |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
325 |
{ |
4892 | 326 |
if (!(chatNicks->actions().contains(acFollow))) |
327 |
chatNicks->insertAction(acFriend, acFollow); |
|
328 |
} |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
329 |
else |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
330 |
{ |
4892 | 331 |
if (chatNicks->actions().contains(acFollow)) |
332 |
chatNicks->removeAction(acFollow); |
|
333 |
} |
|
2845 | 334 |
} |
335 |
||
6929
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
336 |
void HWChatWidget::setIgnoreListKick(bool enabled) |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
337 |
{ |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
338 |
m_autoKickEnabled = enabled; |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
339 |
} |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
340 |
|
6237
a66029015c18
whoopsy, my bad (segfault due to accepting empty lines)
sheepluva
parents:
6233
diff
changeset
|
341 |
|
461 | 342 |
void HWChatWidget::returnPressed() |
343 |
{ |
|
5990
578978418fe5
let frontend send (copypasta) multi-line messages line by line to avoid protocol violation
sheepluva
parents:
5953
diff
changeset
|
344 |
QStringList lines = chatEditLine->text().split('\n'); |
6150
1d98752c1fba
frontend chat input history, use arrow keys UP/DOWN
sheepluva
parents:
6149
diff
changeset
|
345 |
chatEditLine->rememberCurrentText(); |
6197 | 346 |
foreach (const QString &line, lines) |
347 |
{ |
|
6237
a66029015c18
whoopsy, my bad (segfault due to accepting empty lines)
sheepluva
parents:
6233
diff
changeset
|
348 |
// skip empty/whitespace lines |
a66029015c18
whoopsy, my bad (segfault due to accepting empty lines)
sheepluva
parents:
6233
diff
changeset
|
349 |
if (line.trimmed().isEmpty()) |
a66029015c18
whoopsy, my bad (segfault due to accepting empty lines)
sheepluva
parents:
6233
diff
changeset
|
350 |
continue; |
a66029015c18
whoopsy, my bad (segfault due to accepting empty lines)
sheepluva
parents:
6233
diff
changeset
|
351 |
|
6197 | 352 |
if (!parseCommand(line)) |
353 |
emit chatLine(line); |
|
354 |
} |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
355 |
chatEditLine->clear(); |
461 | 356 |
} |
2846 | 357 |
|
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
358 |
// "link" nick, but before that encode it in base64 to make sure it can't |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
359 |
// intefere with html/url syntax the nick is put as querystring as putting |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
360 |
// it as host would convert it to it's lower case variant |
6227
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
361 |
QString HWChatWidget::linkedNick(const QString & nickname) |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
362 |
{ |
6227
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
363 |
if (nickname != m_userNick) |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
364 |
return QString("<a href=\"hwnick://?%1\" class=\"nick\">%2</a>").arg( |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
365 |
QString(nickname.toUtf8().toBase64())).arg(Qt::escape(nickname)); |
6233 | 366 |
|
367 |
// unlinked nick (if own one) |
|
368 |
return QString("<span class=\"nick\">%1</span>").arg(Qt::escape(nickname)); |
|
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
369 |
} |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
370 |
|
8768 | 371 |
const QRegExp HWChatWidget::URLREGEXP = QRegExp("(http(s)?://)?(www\\.)?((hedgewars\\.org|code\\.google\\.com|googlecode\\.com|hh\\.unit22\\.org)(/[^ ]*)?)"); |
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
372 |
|
8759 | 373 |
bool HWChatWidget::containsHighlight(const QString & sender, const QString & message) |
461 | 374 |
{ |
8759 | 375 |
if ((sender != m_userNick) && (!m_userNick.isEmpty())) |
376 |
{ |
|
377 |
QString lcStr = message.toLower(); |
|
378 |
||
379 |
foreach (const QRegExp & hl, m_highlights) |
|
380 |
{ |
|
381 |
if (lcStr.contains(hl)) |
|
382 |
return true; |
|
383 |
} |
|
384 |
} |
|
385 |
return false; |
|
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
386 |
} |
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
387 |
|
8759 | 388 |
QString HWChatWidget::messageToHTML(const QString & message) |
389 |
{ |
|
390 |
QString formattedStr = Qt::escape(message); |
|
391 |
// link some urls |
|
8768 | 392 |
formattedStr = formattedStr.replace(URLREGEXP, "<a href=\"http\\2://\\4\">\\4</a>"); |
8759 | 393 |
return formattedStr; |
394 |
} |
|
4899
8163c9aaad0c
automatically convert hedgewars.org urls to actual links (in order to make support in the lobby/rooms easier
sheepluva
parents:
4898
diff
changeset
|
395 |
|
8759 | 396 |
void HWChatWidget::onChatAction(const QString & nick, const QString & action) |
397 |
{ |
|
398 |
printChatString(nick, "* " + linkedNick(nick) + " " + messageToHTML(action), "Action", containsHighlight(nick, action)); |
|
399 |
} |
|
400 |
||
401 |
void HWChatWidget::onChatMessage(const QString & nick, const QString & message) |
|
402 |
{ |
|
403 |
printChatString(nick, linkedNick(nick) + ": " + messageToHTML(message), "Chat", containsHighlight(nick, message)); |
|
404 |
} |
|
405 |
||
406 |
void HWChatWidget::printChatString( |
|
407 |
const QString & nick, const QString & str, const QString & cssClassPart, bool highlight) |
|
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
408 |
{ |
7741 | 409 |
QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model()); |
410 |
if(!playersSortFilterModel) |
|
411 |
return; |
|
412 |
||
413 |
PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel()); |
|
414 |
||
415 |
if(!players) |
|
416 |
return; |
|
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
417 |
|
8759 | 418 |
// don't show chat lines that are from ignored nicks |
419 |
if (players->isFlagSet(nick, PlayersListModel::Ignore)) |
|
420 |
return; |
|
4897
11598e7aa7e6
make names in chats clickable. still color adjustments needed; and testing
sheepluva
parents:
4892
diff
changeset
|
421 |
|
7741 | 422 |
bool isFriend = (!nick.isEmpty()) && players->isFlagSet(nick, PlayersListModel::Friend); |
423 |
||
8759 | 424 |
QString cssClass = (isFriend ? "msg_Friend" : "msg_User") + cssClassPart; |
3697 | 425 |
|
8759 | 426 |
addLine(cssClass, str, highlight); |
5998
e8f44e9433f0
many many netclient/frondent changes (just the beginning though):
sheepluva
parents:
5990
diff
changeset
|
427 |
} |
2377 | 428 |
|
6182
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
429 |
void HWChatWidget::addLine(const QString & cssClass, QString line, bool isHighlight) |
5998
e8f44e9433f0
many many netclient/frondent changes (just the beginning though):
sheepluva
parents:
5990
diff
changeset
|
430 |
{ |
6180
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
431 |
if (s_displayNone->contains(cssClass)) |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
432 |
return; // the css forbids us to display this line |
0992fc5a4ad9
some changes to the css... display:none; works now (e.g. you can use it for user join/leave messages that are not your friends)
sheepluva
parents:
6178
diff
changeset
|
433 |
|
8451
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
434 |
beforeContentAdd(); |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
435 |
|
5998
e8f44e9433f0
many many netclient/frondent changes (just the beginning though):
sheepluva
parents:
5990
diff
changeset
|
436 |
if (chatStrings.size() > 250) |
e8f44e9433f0
many many netclient/frondent changes (just the beginning though):
sheepluva
parents:
5990
diff
changeset
|
437 |
chatStrings.removeFirst(); |
e8f44e9433f0
many many netclient/frondent changes (just the beginning though):
sheepluva
parents:
5990
diff
changeset
|
438 |
|
6197 | 439 |
if (s_isTimeStamped) |
440 |
{ |
|
441 |
QString tsMarkUp = "<span class=\"timestamp\">[%1]</span> "; |
|
442 |
QTime now = QDateTime::currentDateTime().time(); |
|
6229
4c834af76c3b
* fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents:
6227
diff
changeset
|
443 |
line = tsMarkUp.arg(now.toString(s_tsFormat)) + line; |
6197 | 444 |
} |
445 |
||
6182
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
446 |
line = QString("<span class=\"%1\">%2</span>").arg(cssClass).arg(line); |
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
447 |
|
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
448 |
if (isHighlight) |
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
449 |
{ |
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
450 |
line = QString("<span class=\"highlight\">%1</span>").arg(line); |
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
451 |
SDLInteraction::instance().playSoundFile(m_hilightSound); |
8797
b7e0b7a18e3a
application bar blinks when someone pings you (issue 492)
koda
parents:
8451
diff
changeset
|
452 |
HWApplication::alert(this, 800); |
6182
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
453 |
} |
5998
e8f44e9433f0
many many netclient/frondent changes (just the beginning though):
sheepluva
parents:
5990
diff
changeset
|
454 |
|
e8f44e9433f0
many many netclient/frondent changes (just the beginning though):
sheepluva
parents:
5990
diff
changeset
|
455 |
chatStrings.append(line); |
2377 | 456 |
|
6197 | 457 |
chatText->setHtml("<html><body>"+chatStrings.join("<br>")+"</body></html>"); |
1587 | 458 |
|
8451
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
459 |
afterContentAdd(); |
1587 | 460 |
} |
461 |
||
462 |
void HWChatWidget::onServerMessage(const QString& str) |
|
463 |
{ |
|
8451
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
464 |
beforeContentAdd(); |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
465 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
466 |
if (chatStrings.size() > 250) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
467 |
chatStrings.removeFirst(); |
2377 | 468 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
469 |
chatStrings.append("<hr>" + str + "<hr>"); |
2377 | 470 |
|
6197 | 471 |
chatText->setHtml("<html><body>"+chatStrings.join("<br>")+"</body></html>"); |
1516
bb9fa5809c49
Limit chat history to 250 entries to avoid DoS attack with its use
unc0rr
parents:
1457
diff
changeset
|
472 |
|
8451
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
473 |
afterContentAdd(); |
461 | 474 |
} |
465 | 475 |
|
7741 | 476 |
|
6182
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
477 |
void HWChatWidget::nickAdded(const QString & nick, bool notifyNick) |
465 | 478 |
{ |
7741 | 479 |
QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model()); |
480 |
if(!playersSortFilterModel) |
|
481 |
return; |
|
482 |
||
483 |
PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel()); |
|
484 |
||
485 |
if(!players) |
|
486 |
return; |
|
487 |
||
488 |
bool isIgnored = players->isFlagSet(nick, PlayersListModel::Ignore); |
|
6929
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
489 |
|
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
490 |
if (isIgnored && m_isAdmin && m_autoKickEnabled) |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
491 |
{ |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
492 |
emit kick(nick); |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
493 |
return; |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
494 |
} |
c305d31642ac
reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents:
6928
diff
changeset
|
495 |
|
6182
d56d18802481
some more chat fixes and changes, I think. hum. what was that? um. aaah, I better go catch some sheep ... er sleep.. um..
sheepluva
parents:
6181
diff
changeset
|
496 |
if ((!isIgnored) && (nick != m_userNick)) // don't auto-complete own name |
6149 | 497 |
chatEditLine->addNickname(nick); |
498 |
||
7740 | 499 |
emit nickCountUpdate(chatNicks->model()->rowCount()); |
5094 | 500 |
|
8759 | 501 |
if (!isIgnored) |
502 |
printChatString(nick, QString("*** ") + tr("%1 has joined").arg(linkedNick(nick)), "Join", false); |
|
503 |
||
8395
0b357c57e01c
small cleanup of helloSounds; note: physfs:// prefix will break sound paths since playSoundFile uses physfs for finding files already
sheepluva
parents:
8179
diff
changeset
|
504 |
if (notifyNick && notify && (m_helloSounds.size() > 0)) |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
505 |
{ |
6928
9562ace15141
nemo said I was boring for removing the "hello" randomizer on room join.
sheepluva
parents:
6700
diff
changeset
|
506 |
SDLInteraction::instance().playSoundFile( |
9562ace15141
nemo said I was boring for removing the "hello" randomizer on room join.
sheepluva
parents:
6700
diff
changeset
|
507 |
m_helloSounds.at(rand() % m_helloSounds.size())); |
2773
e94f240a8a41
Have game beep when someone joins lobby/room. Controlled by Sound option
nemo
parents:
2706
diff
changeset
|
508 |
} |
465 | 509 |
} |
510 |
||
511 |
void HWChatWidget::nickRemoved(const QString& nick) |
|
512 |
{ |
|
8759 | 513 |
nickRemoved(nick, ""); |
514 |
} |
|
515 |
||
516 |
void HWChatWidget::nickRemoved(const QString& nick, const QString & message) |
|
517 |
{ |
|
6147
b4d7d8d62feb
feature-pimpin'-up the chat input line in frontend:
sheepluva
parents:
6145
diff
changeset
|
518 |
chatEditLine->removeNickname(nick); |
b4d7d8d62feb
feature-pimpin'-up the chat input line in frontend:
sheepluva
parents:
6145
diff
changeset
|
519 |
|
7741 | 520 |
emit nickCountUpdate(chatNicks->model()->rowCount()); |
8759 | 521 |
|
522 |
if (message.isEmpty()) |
|
523 |
printChatString(nick, QString("*** ") + tr("%1 has left").arg(linkedNick(nick)), "Leave", false); |
|
524 |
else |
|
525 |
printChatString(nick, QString("*** ") + tr("%1 has left (%2)").arg(linkedNick(nick)).arg(messageToHTML(message)), "Leave", false); |
|
465 | 526 |
} |
527 |
||
528 |
void HWChatWidget::clear() |
|
529 |
{ |
|
6151
9fd5b70acb1a
give the room name edit box a history of previous room. however I hate that box from the bottom of my heart, it shall dieeeee... later...
sheepluva
parents:
6150
diff
changeset
|
530 |
chatEditLine->reset(); |
6198
9aa9ed77d63c
unbreak command auto-completion (was broken since r0b92341adb6a - 52 commits ago)
sheepluva
parents:
6197
diff
changeset
|
531 |
|
9aa9ed77d63c
unbreak command auto-completion (was broken since r0b92341adb6a - 52 commits ago)
sheepluva
parents:
6197
diff
changeset
|
532 |
// add default commands |
9aa9ed77d63c
unbreak command auto-completion (was broken since r0b92341adb6a - 52 commits ago)
sheepluva
parents:
6197
diff
changeset
|
533 |
QStringList cmds; |
9aa9ed77d63c
unbreak command auto-completion (was broken since r0b92341adb6a - 52 commits ago)
sheepluva
parents:
6197
diff
changeset
|
534 |
cmds << "/me" << "/discardStyleSheet" << "/saveStyleSheet"; |
9aa9ed77d63c
unbreak command auto-completion (was broken since r0b92341adb6a - 52 commits ago)
sheepluva
parents:
6197
diff
changeset
|
535 |
chatEditLine->addCommands(cmds); |
9aa9ed77d63c
unbreak command auto-completion (was broken since r0b92341adb6a - 52 commits ago)
sheepluva
parents:
6197
diff
changeset
|
536 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
537 |
chatText->clear(); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
538 |
chatStrings.clear(); |
7723 | 539 |
//chatNicks->clear(); |
6214 | 540 |
|
541 |
// clear and re compile regexp for highlighting |
|
542 |
m_highlights.clear(); |
|
543 |
||
6215 | 544 |
QString hlRegExp("^(.* )?%1[^-a-z0-9_]*( .*)?$"); |
6214 | 545 |
QRegExp whitespace("\\s"); |
546 |
||
9979 | 547 |
if (!m_userNick.isEmpty()) |
548 |
m_highlights.append(QRegExp(hlRegExp.arg(QRegExp::escape(m_userNick.toLower())))); |
|
6214 | 549 |
|
7911
98b806c1793d
this should fix the highlighting failz with non-lowercase player names like the one CheezeMonkey ran into.
sheepluva
parents:
7743
diff
changeset
|
550 |
QFile file(cfgdir->absolutePath() + "/" + m_userNick.toLower() + "_highlight.txt"); |
6214 | 551 |
|
552 |
if (file.exists() && (file.open(QIODevice::ReadOnly | QIODevice::Text))) |
|
553 |
{ |
|
554 |
QTextStream in(&file); |
|
555 |
while (!in.atEnd()) |
|
556 |
{ |
|
557 |
QString line = in.readLine(); |
|
558 |
QStringList list = line.split(whitespace); |
|
559 |
foreach (QString word, list) |
|
560 |
{ |
|
561 |
m_highlights.append(QRegExp( |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6418
diff
changeset
|
562 |
hlRegExp.arg(QRegExp::escape(word.toLower())))); |
6214 | 563 |
} |
564 |
} |
|
565 |
||
566 |
if (file.isOpen()) |
|
567 |
file.close(); |
|
568 |
} |
|
569 |
||
7911
98b806c1793d
this should fix the highlighting failz with non-lowercase player names like the one CheezeMonkey ran into.
sheepluva
parents:
7743
diff
changeset
|
570 |
QFile file2(cfgdir->absolutePath() + "/" + m_userNick.toLower() + "_hlregexp.txt"); |
6214 | 571 |
|
572 |
if (file2.exists() && (file2.open(QIODevice::ReadOnly | QIODevice::Text))) |
|
573 |
{ |
|
574 |
QTextStream in(&file2); |
|
575 |
while (!in.atEnd()) |
|
576 |
{ |
|
577 |
m_highlights.append(QRegExp(in.readLine().toLower())); |
|
578 |
} |
|
579 |
||
580 |
if (file2.isOpen()) |
|
581 |
file2.close(); |
|
582 |
} |
|
465 | 583 |
} |
1391 | 584 |
|
8762 | 585 |
void HWChatWidget::onPlayerInfo( |
586 |
const QString & nick, |
|
587 |
const QString & ip, |
|
588 |
const QString & version, |
|
589 |
const QString & roomInfo) |
|
590 |
{ |
|
591 |
addLine("msg_PlayerInfo", QString(" >>> %1 - <span class=\"ipaddress\">%2</span> <span class=\"version\">%3</span> <span class=\"location\">%4</span>") |
|
592 |
.arg(linkedNick(nick)) |
|
10061
b7161f00a6ca
hide complete IP of other users, when non-admin requests player info. showing the first two parts of the IP was kinda pointless to begin with (what for?) and has recently lead to increased abuse and lobby flooding due to bots collecting/posting IP tracking information
sheepluva
parents:
9998
diff
changeset
|
593 |
.arg(ip == "[]"?"":ip) |
8762 | 594 |
.arg(version) |
595 |
.arg(roomInfo)); |
|
596 |
} |
|
597 |
||
1391 | 598 |
void HWChatWidget::onKick() |
599 |
{ |
|
7737 | 600 |
QModelIndexList mil = chatNicks->selectionModel()->selectedRows(); |
601 |
||
602 |
if(mil.size()) |
|
603 |
emit kick(mil[0].data().toString()); |
|
1391 | 604 |
} |
1405 | 605 |
|
1860 | 606 |
void HWChatWidget::onBan() |
607 |
{ |
|
7737 | 608 |
QModelIndexList mil = chatNicks->selectionModel()->selectedRows(); |
609 |
||
610 |
if(mil.size()) |
|
611 |
emit ban(mil[0].data().toString()); |
|
1860 | 612 |
} |
613 |
||
1577 | 614 |
void HWChatWidget::onInfo() |
615 |
{ |
|
7737 | 616 |
QModelIndexList mil = chatNicks->selectionModel()->selectedRows(); |
617 |
||
618 |
if(mil.size()) |
|
619 |
emit info(mil[0].data().toString()); |
|
1577 | 620 |
} |
621 |
||
2706
935b7d618cf0
sheepluva's patch to add a "follow" command to server and frontend, in order to stalk people and join them in their rooms
koda
parents:
2428
diff
changeset
|
622 |
void HWChatWidget::onFollow() |
935b7d618cf0
sheepluva's patch to add a "follow" command to server and frontend, in order to stalk people and join them in their rooms
koda
parents:
2428
diff
changeset
|
623 |
{ |
7737 | 624 |
QModelIndexList mil = chatNicks->selectionModel()->selectedRows(); |
625 |
||
626 |
if(mil.size()) |
|
627 |
emit follow(mil[0].data().toString()); |
|
2706
935b7d618cf0
sheepluva's patch to add a "follow" command to server and frontend, in order to stalk people and join them in their rooms
koda
parents:
2428
diff
changeset
|
628 |
} |
935b7d618cf0
sheepluva's patch to add a "follow" command to server and frontend, in order to stalk people and join them in their rooms
koda
parents:
2428
diff
changeset
|
629 |
|
2845 | 630 |
void HWChatWidget::onIgnore() |
631 |
{ |
|
7737 | 632 |
QModelIndexList mil = chatNicks->selectionModel()->selectedRows(); |
633 |
||
634 |
QString nick; |
|
635 |
if(mil.size()) |
|
636 |
nick = mil[0].data().toString(); |
|
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
637 |
else |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
638 |
nick = m_clickedNick; |
2845 | 639 |
|
7737 | 640 |
QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model()); |
641 |
if(!playersSortFilterModel) |
|
642 |
return; |
|
643 |
||
644 |
PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel()); |
|
645 |
||
646 |
if(!players) |
|
647 |
return; |
|
648 |
||
649 |
if(players->isFlagSet(nick, PlayersListModel::Ignore)) |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
650 |
{ |
7737 | 651 |
players->setFlag(nick, PlayersListModel::Ignore, false); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
652 |
chatEditLine->addNickname(nick); |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
653 |
displayNotice(tr("%1 has been removed from your ignore list").arg(linkedNick(nick))); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
654 |
} |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
655 |
else // not on list - add |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
656 |
{ |
4884 | 657 |
// don't consider ignored people friends |
7737 | 658 |
if(players->isFlagSet(nick, PlayersListModel::Friend)) |
4884 | 659 |
emit onFriend(); |
660 |
||
7737 | 661 |
players->setFlag(nick, PlayersListModel::Ignore, true); |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
662 |
chatEditLine->removeNickname(nick); |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
663 |
displayNotice(tr("%1 has been added to your ignore list").arg(linkedNick(nick))); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
664 |
} |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
665 |
|
7737 | 666 |
if(mil.size()) |
667 |
chatNicks->scrollTo(chatNicks->selectionModel()->selectedRows()[0]); |
|
2845 | 668 |
} |
669 |
||
670 |
void HWChatWidget::onFriend() |
|
671 |
{ |
|
7737 | 672 |
QModelIndexList mil = chatNicks->selectionModel()->selectedRows(); |
673 |
||
674 |
QString nick; |
|
675 |
if(mil.size()) |
|
676 |
nick = mil[0].data().toString(); |
|
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
677 |
else |
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
678 |
nick = m_clickedNick; |
2845 | 679 |
|
7737 | 680 |
QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model()); |
681 |
if(!playersSortFilterModel) |
|
682 |
return; |
|
683 |
||
684 |
PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel()); |
|
685 |
||
686 |
if(!players) |
|
687 |
return; |
|
688 |
||
689 |
if(players->isFlagSet(nick, PlayersListModel::Friend)) |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
690 |
{ |
7737 | 691 |
players->setFlag(nick, PlayersListModel::Friend, false); |
692 |
chatEditLine->removeNickname(nick); |
|
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
693 |
displayNotice(tr("%1 has been removed from your friends list").arg(linkedNick(nick))); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
694 |
} |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
695 |
else // not on list - add |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
696 |
{ |
7737 | 697 |
if(players->isFlagSet(nick, PlayersListModel::Ignore)) |
4884 | 698 |
emit onIgnore(); |
699 |
||
7737 | 700 |
players->setFlag(nick, PlayersListModel::Friend, true); |
701 |
chatEditLine->addNickname(nick); |
|
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
702 |
displayNotice(tr("%1 has been added to your friends list").arg(linkedNick(nick))); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
703 |
} |
6222
96d10dcd6d84
+ make names in notice messages and leave messages clickable too
sheepluva
parents:
6221
diff
changeset
|
704 |
|
7737 | 705 |
if(mil.size()) |
706 |
chatNicks->scrollTo(chatNicks->selectionModel()->selectedRows()[0]); |
|
2845 | 707 |
} |
7742 | 708 |
|
709 |
void HWChatWidget::chatNickDoubleClicked(const QModelIndex &index) |
|
2706
935b7d618cf0
sheepluva's patch to add a "follow" command to server and frontend, in order to stalk people and join them in their rooms
koda
parents:
2428
diff
changeset
|
710 |
{ |
7742 | 711 |
m_clickedNick = index.data().toString(); |
712 |
||
4892 | 713 |
QList<QAction *> actions = chatNicks->actions(); |
714 |
actions.first()->activate(QAction::Trigger); |
|
2706
935b7d618cf0
sheepluva's patch to add a "follow" command to server and frontend, in order to stalk people and join them in their rooms
koda
parents:
2428
diff
changeset
|
715 |
} |
7742 | 716 |
|
1860 | 717 |
|
718 |
void HWChatWidget::adminAccess(bool b) |
|
719 |
{ |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
720 |
chatNicks->removeAction(acKick); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
721 |
chatNicks->removeAction(acBan); |
2377 | 722 |
|
6418
f1a3c3aab5b4
hide all context menu options for own nick, except for info
sheepluva
parents:
6240
diff
changeset
|
723 |
m_isAdmin = b; |
f1a3c3aab5b4
hide all context menu options for own nick, except for info
sheepluva
parents:
6240
diff
changeset
|
724 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
725 |
if(b) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
726 |
{ |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
727 |
chatNicks->insertAction(0, acKick); |
7537
833a0c34fafc
Room bans. They're more simple, than the global ones: if you ban someone, he is banned by ip in this room for the rest of the room lifetime. Not tested.
unc0rr
parents:
6952
diff
changeset
|
728 |
chatNicks->insertAction(0, acBan); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2847
diff
changeset
|
729 |
} |
1860 | 730 |
} |
6197 | 731 |
|
732 |
void HWChatWidget::dragEnterEvent(QDragEnterEvent * event) |
|
733 |
{ |
|
734 |
if (event->mimeData()->hasUrls()) |
|
735 |
{ |
|
736 |
QList<QUrl> urls = event->mimeData()->urls(); |
|
737 |
if (urls.count() == 1) |
|
6202
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
738 |
{ |
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
739 |
QUrl url = urls[0]; |
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
740 |
|
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
741 |
static QRegExp localFileRegExp("file://.*\\.css$"); |
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
742 |
localFileRegExp.setCaseSensitivity(Qt::CaseInsensitive); |
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
743 |
|
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
744 |
if (url.toString().contains(localFileRegExp)) |
6197 | 745 |
event->acceptProposedAction(); |
6202
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
746 |
} |
6197 | 747 |
} |
748 |
} |
|
749 |
||
750 |
void HWChatWidget::dropEvent(QDropEvent * event) |
|
751 |
{ |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
752 |
const QString path(event->mimeData()->urls()[0].toString()); |
6202
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
753 |
|
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
754 |
QFile file(event->mimeData()->urls()[0].toLocalFile()); |
6197 | 755 |
|
756 |
if (file.exists() && (file.open(QIODevice::ReadOnly | QIODevice::Text))) |
|
757 |
{ |
|
758 |
QString style; |
|
759 |
QTextStream in(&file); |
|
760 |
while (!in.atEnd()) |
|
761 |
{ |
|
762 |
QString line = in.readLine(); |
|
6202
8e3f006b9b1e
this should fix stylesheet importing on windows, but we'll see
sheepluva
parents:
6201
diff
changeset
|
763 |
style.append(line + "\n"); |
6197 | 764 |
} |
765 |
||
766 |
setStyleSheet(style); |
|
767 |
chatText->document()->setDefaultStyleSheet(*s_styleSheet); |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
768 |
displayNotice(tr("Stylesheet imported from %1").arg(path)); |
6239 | 769 |
displayNotice(tr("Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!").arg("/saveStyleSheet").arg("/discardStyleSheet")); |
6197 | 770 |
|
6214 | 771 |
if (file.isOpen()) |
772 |
file.close(); |
|
773 |
||
6197 | 774 |
event->acceptProposedAction(); |
775 |
} |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
776 |
else |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
777 |
displayError(tr("Couldn't read %1").arg(event->mimeData()->urls()[0].toString())); |
6197 | 778 |
} |
779 |
||
780 |
||
781 |
void HWChatWidget::discardStyleSheet() |
|
782 |
{ |
|
783 |
setStyleSheet(); |
|
784 |
chatText->document()->setDefaultStyleSheet(*s_styleSheet); |
|
785 |
displayNotice(tr("StyleSheet discarded")); |
|
786 |
} |
|
787 |
||
788 |
||
789 |
void HWChatWidget::saveStyleSheet() |
|
790 |
{ |
|
8049 | 791 |
QString dest = "physfs://css/chat.css"; |
6197 | 792 |
|
793 |
QFile file(dest); |
|
794 |
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) |
|
795 |
{ |
|
796 |
QTextStream out(&file); |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
797 |
QStringList lines = s_styleSheet->split("\n", QString::KeepEmptyParts); |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
798 |
|
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
799 |
// strip trailing empty lines |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
800 |
while (lines.last().isEmpty()) |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
801 |
lines.takeLast(); |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
802 |
|
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
803 |
foreach (const QString & line, lines) |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
804 |
{ |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
805 |
out << line << endl; |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
806 |
} |
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
807 |
out << endl; |
6197 | 808 |
file.close(); |
809 |
displayNotice(tr("StyleSheet saved to %1").arg(dest)); |
|
810 |
} |
|
811 |
else |
|
6201
d88e7f6cf499
fix of /saveStyleSheet command, error message on stylesheet import fail
sheepluva
parents:
6198
diff
changeset
|
812 |
displayError(tr("Failed to save StyleSheet to %1").arg(dest)); |
6197 | 813 |
} |
814 |
||
815 |
||
816 |
bool HWChatWidget::parseCommand(const QString & line) |
|
817 |
{ |
|
818 |
if (line[0] == '/') |
|
819 |
{ |
|
820 |
QString tline = line.trimmed(); |
|
821 |
if (tline.startsWith("/me")) |
|
822 |
return false; // not a real command |
|
823 |
||
824 |
else if (tline == "/discardStyleSheet") |
|
825 |
discardStyleSheet(); |
|
826 |
else if (tline == "/saveStyleSheet") |
|
827 |
saveStyleSheet(); |
|
828 |
else |
|
8396 | 829 |
emit consoleCommand(tline.mid(1)); |
6197 | 830 |
|
831 |
return true; |
|
832 |
} |
|
833 |
||
834 |
return false; |
|
835 |
} |
|
6227
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
836 |
|
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
837 |
|
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
838 |
void HWChatWidget::setUser(const QString & nickname) |
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
839 |
{ |
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
840 |
m_userNick = nickname; |
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
841 |
nickRemoved(nickname); |
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
842 |
clear(); |
ce60b734fff1
update name autocompletion after nick change (since own nick isn't suggested)
sheepluva
parents:
6222
diff
changeset
|
843 |
} |
7723 | 844 |
|
845 |
||
7725 | 846 |
void HWChatWidget::setUsersModel(QAbstractItemModel *model) |
7723 | 847 |
{ |
7740 | 848 |
chatNicks->selectionModel()->deleteLater(); |
849 |
||
7723 | 850 |
chatNicks->setModel(model); |
851 |
chatNicks->setModelColumn(0); |
|
852 |
} |
|
7740 | 853 |
|
854 |
void HWChatWidget::nicksContextMenuRequested(const QPoint &pos) |
|
855 |
{ |
|
856 |
QModelIndexList mil = chatNicks->selectionModel()->selectedRows(); |
|
857 |
||
858 |
QString nick; |
|
859 |
||
860 |
if(mil.size()) |
|
861 |
nick = mil[0].data().toString(); |
|
862 |
else |
|
863 |
nick = m_clickedNick; |
|
864 |
||
9728
320f89e0b28c
fix for regression issue 669 "Lobby: User context-menu of offline user shows all options as if user was still online"
sheepluva
parents:
9726
diff
changeset
|
865 |
bool isOnline = (mil.size() > 0); |
320f89e0b28c
fix for regression issue 669 "Lobby: User context-menu of offline user shows all options as if user was still online"
sheepluva
parents:
9726
diff
changeset
|
866 |
|
7740 | 867 |
QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model()); |
868 |
if(!playersSortFilterModel) |
|
869 |
return; |
|
870 |
||
871 |
PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel()); |
|
872 |
||
873 |
if(!players) |
|
874 |
return; |
|
875 |
||
876 |
bool isSelf = (nick == m_userNick); |
|
9726
dfdde45181ec
don't show 'follow' entry for players that are in lobby
sheepluva
parents:
9493
diff
changeset
|
877 |
bool isInRoom = players->isFlagSet(nick, PlayersListModel::InRoom); |
7740 | 878 |
|
9726
dfdde45181ec
don't show 'follow' entry for players that are in lobby
sheepluva
parents:
9493
diff
changeset
|
879 |
acFollow->setVisible(!isSelf && isInRoom); |
7740 | 880 |
|
9728
320f89e0b28c
fix for regression issue 669 "Lobby: User context-menu of offline user shows all options as if user was still online"
sheepluva
parents:
9726
diff
changeset
|
881 |
acInfo->setVisible(isOnline); |
320f89e0b28c
fix for regression issue 669 "Lobby: User context-menu of offline user shows all options as if user was still online"
sheepluva
parents:
9726
diff
changeset
|
882 |
|
7740 | 883 |
// update context menu labels according to possible action |
884 |
if(players->isFlagSet(nick, PlayersListModel::Ignore)) |
|
885 |
{ |
|
886 |
acIgnore->setText(QAction::tr("Unignore")); |
|
887 |
acIgnore->setIcon(QIcon(":/res/unignore.png")); |
|
888 |
} |
|
889 |
else |
|
890 |
{ |
|
891 |
acIgnore->setText(QAction::tr("Ignore")); |
|
892 |
acIgnore->setIcon(QIcon(":/res/ignore.png")); |
|
893 |
acIgnore->setVisible(!isSelf); |
|
894 |
} |
|
895 |
||
896 |
if(players->isFlagSet(nick, PlayersListModel::Friend)) |
|
897 |
{ |
|
898 |
acFriend->setText(QAction::tr("Remove friend")); |
|
899 |
acFriend->setIcon(QIcon(":/res/remfriend.png")); |
|
900 |
} |
|
901 |
else |
|
902 |
{ |
|
903 |
acFriend->setText(QAction::tr("Add friend")); |
|
904 |
acFriend->setIcon(QIcon(":/res/addfriend.png")); |
|
905 |
acFriend->setVisible(!isSelf); |
|
906 |
} |
|
907 |
||
908 |
if (m_isAdmin) |
|
909 |
{ |
|
9728
320f89e0b28c
fix for regression issue 669 "Lobby: User context-menu of offline user shows all options as if user was still online"
sheepluva
parents:
9726
diff
changeset
|
910 |
acKick->setVisible(!isSelf && isOnline); |
7740 | 911 |
acBan->setVisible(!isSelf); |
912 |
} |
|
913 |
||
914 |
m_nicksMenu->clear(); |
|
915 |
||
916 |
foreach(QAction * action, chatNicks->actions()) |
|
917 |
m_nicksMenu->addAction(action); |
|
918 |
||
919 |
m_nicksMenu->popup(chatNicks->mapToGlobal(pos)); |
|
920 |
} |
|
8451
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
921 |
|
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
922 |
void HWChatWidget::beforeContentAdd() |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
923 |
{ |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
924 |
m_scrollBarPos = chatText->verticalScrollBar()->value(); |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
925 |
m_scrollToBottom = m_scrollBarPos == chatText->verticalScrollBar()->maximum(); |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
926 |
} |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
927 |
|
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
928 |
void HWChatWidget::afterContentAdd() |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
929 |
{ |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
930 |
if(m_scrollToBottom) |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
931 |
{ |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
932 |
chatText->verticalScrollBar()->setValue(chatText->verticalScrollBar()->maximum()); |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
933 |
chatText->moveCursor(QTextCursor::End); |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
934 |
} else |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
935 |
{ |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
936 |
chatText->verticalScrollBar()->setValue(m_scrollBarPos); |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
937 |
} |
8c7da08df048
Allow navigating backwards chat widget log while new lines are being added
unc0rr
parents:
8430
diff
changeset
|
938 |
} |
9493
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
939 |
|
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
940 |
void HWChatWidget::resizeEvent(QResizeEvent * event) |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
941 |
{ |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
942 |
Q_UNUSED(event); |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
943 |
|
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
944 |
afterContentAdd(); |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
945 |
} |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
946 |
|
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
947 |
void HWChatWidget::showEvent(QShowEvent * event) |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
948 |
{ |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
949 |
Q_UNUSED(event); |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
950 |
|
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
951 |
afterContentAdd(); |
23c674bfa2e2
Scroll chat widget to bottom on show and resize events
unc0rr
parents:
9134
diff
changeset
|
952 |
} |