Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
98fa9eb1
Commit
98fa9eb1
authored
Aug 15, 2015
by
Zach
Browse files
Merge pull request #1356 from Fizztastic/ChatRoomCompleter
Username Completer in server room
parents
0f4dc180
50d67467
Changes
6
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/dlg_settings.cpp
View file @
98fa9eb1
...
@@ -573,6 +573,9 @@ MessagesSettingsPage::MessagesSettingsPage()
...
@@ -573,6 +573,9 @@ MessagesSettingsPage::MessagesSettingsPage()
{
{
chatMentionCheckBox
.
setChecked
(
settingsCache
->
getChatMention
());
chatMentionCheckBox
.
setChecked
(
settingsCache
->
getChatMention
());
connect
(
&
chatMentionCheckBox
,
SIGNAL
(
stateChanged
(
int
)),
settingsCache
,
SLOT
(
setChatMention
(
int
)));
connect
(
&
chatMentionCheckBox
,
SIGNAL
(
stateChanged
(
int
)),
settingsCache
,
SLOT
(
setChatMention
(
int
)));
chatMentionCompleterCheckbox
.
setChecked
(
settingsCache
->
getChatMentionCompleter
());
connect
(
&
chatMentionCompleterCheckbox
,
SIGNAL
(
stateChanged
(
int
)),
settingsCache
,
SLOT
(
setChatMentionCompleter
(
int
)));
ignoreUnregUsersMainChat
.
setChecked
(
settingsCache
->
getIgnoreUnregisteredUsers
());
ignoreUnregUsersMainChat
.
setChecked
(
settingsCache
->
getIgnoreUnregisteredUsers
());
ignoreUnregUserMessages
.
setChecked
(
settingsCache
->
getIgnoreUnregisteredUserMessages
());
ignoreUnregUserMessages
.
setChecked
(
settingsCache
->
getIgnoreUnregisteredUserMessages
());
...
@@ -605,11 +608,12 @@ MessagesSettingsPage::MessagesSettingsPage()
...
@@ -605,11 +608,12 @@ MessagesSettingsPage::MessagesSettingsPage()
chatGrid
->
addWidget
(
&
chatMentionCheckBox
,
0
,
0
);
chatGrid
->
addWidget
(
&
chatMentionCheckBox
,
0
,
0
);
chatGrid
->
addWidget
(
&
invertMentionForeground
,
0
,
1
);
chatGrid
->
addWidget
(
&
invertMentionForeground
,
0
,
1
);
chatGrid
->
addWidget
(
mentionColor
,
0
,
2
);
chatGrid
->
addWidget
(
mentionColor
,
0
,
2
);
chatGrid
->
addWidget
(
&
ignoreUnregUsersMainChat
,
1
,
0
);
chatGrid
->
addWidget
(
&
chatMentionCompleterCheckbox
,
1
,
0
);
chatGrid
->
addWidget
(
&
ignoreUnregUsersMainChat
,
2
,
0
);
chatGrid
->
addWidget
(
&
hexLabel
,
1
,
2
);
chatGrid
->
addWidget
(
&
hexLabel
,
1
,
2
);
chatGrid
->
addWidget
(
&
ignoreUnregUserMessages
,
2
,
0
);
chatGrid
->
addWidget
(
&
ignoreUnregUserMessages
,
3
,
0
);
chatGrid
->
addWidget
(
&
messagePopups
,
3
,
0
);
chatGrid
->
addWidget
(
&
messagePopups
,
4
,
0
);
chatGrid
->
addWidget
(
&
mentionPopups
,
4
,
0
);
chatGrid
->
addWidget
(
&
mentionPopups
,
5
,
0
);
chatGroupBox
=
new
QGroupBox
;
chatGroupBox
=
new
QGroupBox
;
chatGroupBox
->
setLayout
(
chatGrid
);
chatGroupBox
->
setLayout
(
chatGrid
);
...
@@ -734,6 +738,7 @@ void MessagesSettingsPage::retranslateUi()
...
@@ -734,6 +738,7 @@ void MessagesSettingsPage::retranslateUi()
chatGroupBox
->
setTitle
(
tr
(
"Chat settings"
));
chatGroupBox
->
setTitle
(
tr
(
"Chat settings"
));
highlightGroupBox
->
setTitle
(
tr
(
"Custom alert words"
));
highlightGroupBox
->
setTitle
(
tr
(
"Custom alert words"
));
chatMentionCheckBox
.
setText
(
tr
(
"Enable chat mentions"
));
chatMentionCheckBox
.
setText
(
tr
(
"Enable chat mentions"
));
chatMentionCompleterCheckbox
.
setText
(
tr
(
"Enable mention completer"
));
messageShortcuts
->
setTitle
(
tr
(
"In-game message macros"
));
messageShortcuts
->
setTitle
(
tr
(
"In-game message macros"
));
ignoreUnregUsersMainChat
.
setText
(
tr
(
"Ignore chat room messages sent by unregistered users"
));
ignoreUnregUsersMainChat
.
setText
(
tr
(
"Ignore chat room messages sent by unregistered users"
));
ignoreUnregUserMessages
.
setText
(
tr
(
"Ignore private messages sent by unregistered users"
));
ignoreUnregUserMessages
.
setText
(
tr
(
"Ignore private messages sent by unregistered users"
));
...
...
cockatrice/src/dlg_settings.h
View file @
98fa9eb1
...
@@ -168,6 +168,7 @@ private:
...
@@ -168,6 +168,7 @@ private:
QAction
*
aAdd
;
QAction
*
aAdd
;
QAction
*
aRemove
;
QAction
*
aRemove
;
QCheckBox
chatMentionCheckBox
;
QCheckBox
chatMentionCheckBox
;
QCheckBox
chatMentionCompleterCheckbox
;
QCheckBox
invertMentionForeground
;
QCheckBox
invertMentionForeground
;
QCheckBox
invertHighlightForeground
;
QCheckBox
invertHighlightForeground
;
QCheckBox
ignoreUnregUsersMainChat
;
QCheckBox
ignoreUnregUsersMainChat
;
...
...
cockatrice/src/settingscache.cpp
View file @
98fa9eb1
...
@@ -77,6 +77,7 @@ SettingsCache::SettingsCache()
...
@@ -77,6 +77,7 @@ SettingsCache::SettingsCache()
minPlayersForMultiColumnLayout
=
settings
->
value
(
"interface/min_players_multicolumn"
,
5
).
toInt
();
minPlayersForMultiColumnLayout
=
settings
->
value
(
"interface/min_players_multicolumn"
,
5
).
toInt
();
tapAnimation
=
settings
->
value
(
"cards/tapanimation"
,
true
).
toBool
();
tapAnimation
=
settings
->
value
(
"cards/tapanimation"
,
true
).
toBool
();
chatMention
=
settings
->
value
(
"chat/mention"
,
true
).
toBool
();
chatMention
=
settings
->
value
(
"chat/mention"
,
true
).
toBool
();
chatMentionCompleter
=
settings
->
value
(
"chat/mentioncompleter"
,
true
).
toBool
();
chatMentionForeground
=
settings
->
value
(
"chat/mentionforeground"
,
true
).
toBool
();
chatMentionForeground
=
settings
->
value
(
"chat/mentionforeground"
,
true
).
toBool
();
chatHighlightForeground
=
settings
->
value
(
"chat/highlightforeground"
,
true
).
toBool
();
chatHighlightForeground
=
settings
->
value
(
"chat/highlightforeground"
,
true
).
toBool
();
chatMentionColor
=
settings
->
value
(
"chat/mentioncolor"
,
"A6120D"
).
toString
();
chatMentionColor
=
settings
->
value
(
"chat/mentioncolor"
,
"A6120D"
).
toString
();
...
@@ -360,6 +361,13 @@ void SettingsCache::setChatMention(int _chatMention) {
...
@@ -360,6 +361,13 @@ void SettingsCache::setChatMention(int _chatMention) {
settings
->
setValue
(
"chat/mention"
,
chatMention
);
settings
->
setValue
(
"chat/mention"
,
chatMention
);
}
}
void
SettingsCache
::
setChatMentionCompleter
(
const
int
_enableMentionCompleter
)
{
chatMentionCompleter
=
_enableMentionCompleter
;
settings
->
setValue
(
"chat/mentioncompleter"
,
chatMentionCompleter
);
emit
chatMentionCompleterChanged
();
}
void
SettingsCache
::
setChatMentionForeground
(
int
_chatMentionForeground
)
{
void
SettingsCache
::
setChatMentionForeground
(
int
_chatMentionForeground
)
{
chatMentionForeground
=
_chatMentionForeground
;
chatMentionForeground
=
_chatMentionForeground
;
settings
->
setValue
(
"chat/mentionforeground"
,
chatMentionForeground
);
settings
->
setValue
(
"chat/mentionforeground"
,
chatMentionForeground
);
...
...
cockatrice/src/settingscache.h
View file @
98fa9eb1
...
@@ -43,6 +43,7 @@ signals:
...
@@ -43,6 +43,7 @@ signals:
void
ignoreUnregisteredUserMessagesChanged
();
void
ignoreUnregisteredUserMessagesChanged
();
void
pixmapCacheSizeChanged
(
int
newSizeInMBs
);
void
pixmapCacheSizeChanged
(
int
newSizeInMBs
);
void
masterVolumeChanged
(
int
value
);
void
masterVolumeChanged
(
int
value
);
void
chatMentionCompleterChanged
();
private:
private:
QSettings
*
settings
;
QSettings
*
settings
;
...
@@ -65,6 +66,7 @@ private:
...
@@ -65,6 +66,7 @@ private:
int
minPlayersForMultiColumnLayout
;
int
minPlayersForMultiColumnLayout
;
bool
tapAnimation
;
bool
tapAnimation
;
bool
chatMention
;
bool
chatMention
;
bool
chatMentionCompleter
;
QString
chatMentionColor
;
QString
chatMentionColor
;
QString
chatHighlightColor
;
QString
chatHighlightColor
;
bool
chatMentionForeground
;
bool
chatMentionForeground
;
...
@@ -136,6 +138,7 @@ public:
...
@@ -136,6 +138,7 @@ public:
int
getMinPlayersForMultiColumnLayout
()
const
{
return
minPlayersForMultiColumnLayout
;
}
int
getMinPlayersForMultiColumnLayout
()
const
{
return
minPlayersForMultiColumnLayout
;
}
bool
getTapAnimation
()
const
{
return
tapAnimation
;
}
bool
getTapAnimation
()
const
{
return
tapAnimation
;
}
bool
getChatMention
()
const
{
return
chatMention
;
}
bool
getChatMention
()
const
{
return
chatMention
;
}
bool
getChatMentionCompleter
()
const
{
return
chatMentionCompleter
;
}
bool
getChatMentionForeground
()
const
{
return
chatMentionForeground
;
}
bool
getChatMentionForeground
()
const
{
return
chatMentionForeground
;
}
bool
getChatHighlightForeground
()
const
{
return
chatHighlightForeground
;
}
bool
getChatHighlightForeground
()
const
{
return
chatHighlightForeground
;
}
bool
getZoneViewSortByName
()
const
{
return
zoneViewSortByName
;
}
bool
getZoneViewSortByName
()
const
{
return
zoneViewSortByName
;
}
...
@@ -218,6 +221,7 @@ public slots:
...
@@ -218,6 +221,7 @@ public slots:
void
setMinPlayersForMultiColumnLayout
(
int
_minPlayersForMultiColumnLayout
);
void
setMinPlayersForMultiColumnLayout
(
int
_minPlayersForMultiColumnLayout
);
void
setTapAnimation
(
int
_tapAnimation
);
void
setTapAnimation
(
int
_tapAnimation
);
void
setChatMention
(
int
_chatMention
);
void
setChatMention
(
int
_chatMention
);
void
setChatMentionCompleter
(
int
_chatMentionCompleter
);
void
setChatMentionForeground
(
int
_chatMentionForeground
);
void
setChatMentionForeground
(
int
_chatMentionForeground
);
void
setChatHighlightForeground
(
int
_chatHighlightForeground
);
void
setChatHighlightForeground
(
int
_chatHighlightForeground
);
void
setZoneViewSortByName
(
int
_zoneViewSortByName
);
void
setZoneViewSortByName
(
int
_zoneViewSortByName
);
...
...
cockatrice/src/tab_room.cpp
View file @
98fa9eb1
...
@@ -11,6 +11,14 @@
...
@@ -11,6 +11,14 @@
#include
<QSplitter>
#include
<QSplitter>
#include
<QApplication>
#include
<QApplication>
#include
<QSystemTrayIcon>
#include
<QSystemTrayIcon>
#include
<QCompleter>
#include
<QWidget>
#include
<QTextCursor>
#include
<QAbstractItemView>
#include
<QScrollBar>
#include
<QStringListModel>
#include
<QKeyEvent>
#include
<QFocusEvent>
#include
"tab_supervisor.h"
#include
"tab_supervisor.h"
#include
"tab_room.h"
#include
"tab_room.h"
#include
"tab_userlists.h"
#include
"tab_userlists.h"
...
@@ -51,8 +59,9 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI
...
@@ -51,8 +59,9 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI
connect
(
chatView
,
SIGNAL
(
showCardInfoPopup
(
QPoint
,
QString
)),
this
,
SLOT
(
showCardInfoPopup
(
QPoint
,
QString
)));
connect
(
chatView
,
SIGNAL
(
showCardInfoPopup
(
QPoint
,
QString
)),
this
,
SLOT
(
showCardInfoPopup
(
QPoint
,
QString
)));
connect
(
chatView
,
SIGNAL
(
deleteCardInfoPopup
(
QString
)),
this
,
SLOT
(
deleteCardInfoPopup
(
QString
)));
connect
(
chatView
,
SIGNAL
(
deleteCardInfoPopup
(
QString
)),
this
,
SLOT
(
deleteCardInfoPopup
(
QString
)));
connect
(
chatView
,
SIGNAL
(
addMentionTag
(
QString
)),
this
,
SLOT
(
addMentionTag
(
QString
)));
connect
(
chatView
,
SIGNAL
(
addMentionTag
(
QString
)),
this
,
SLOT
(
addMentionTag
(
QString
)));
connect
(
settingsCache
,
SIGNAL
(
chatMentionCompleterChanged
()),
this
,
SLOT
(
actCompleterChanged
()));
sayLabel
=
new
QLabel
;
sayLabel
=
new
QLabel
;
sayEdit
=
new
Q
LineEdit
;
sayEdit
=
new
Custom
LineEdit
;
sayLabel
->
setBuddy
(
sayEdit
);
sayLabel
->
setBuddy
(
sayEdit
);
connect
(
sayEdit
,
SIGNAL
(
returnPressed
()),
this
,
SLOT
(
sendMessage
()));
connect
(
sayEdit
,
SIGNAL
(
returnPressed
()),
this
,
SLOT
(
sendMessage
()));
...
@@ -103,13 +112,26 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI
...
@@ -103,13 +112,26 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI
setLayout
(
hbox
);
setLayout
(
hbox
);
const
int
userListSize
=
info
.
user_list_size
();
const
int
userListSize
=
info
.
user_list_size
();
for
(
int
i
=
0
;
i
<
userListSize
;
++
i
)
for
(
int
i
=
0
;
i
<
userListSize
;
++
i
)
{
userList
->
processUserInfo
(
info
.
user_list
(
i
),
true
);
userList
->
processUserInfo
(
info
.
user_list
(
i
),
true
);
autocompleteUserList
.
append
(
"@"
+
QString
::
fromStdString
(
info
.
user_list
(
i
).
name
()));
}
userList
->
sortItems
();
userList
->
sortItems
();
const
int
gameListSize
=
info
.
game_list_size
();
const
int
gameListSize
=
info
.
game_list_size
();
for
(
int
i
=
0
;
i
<
gameListSize
;
++
i
)
for
(
int
i
=
0
;
i
<
gameListSize
;
++
i
)
gameSelector
->
processGameInfo
(
info
.
game_list
(
i
));
gameSelector
->
processGameInfo
(
info
.
game_list
(
i
));
completer
=
new
QCompleter
(
autocompleteUserList
,
sayEdit
);
completer
->
setCaseSensitivity
(
Qt
::
CaseInsensitive
);
completer
->
setMaxVisibleItems
(
5
);
#if QT_VERSION >= 0x050000
completer
->
setFilterMode
(
Qt
::
MatchStartsWith
);
#endif
sayEdit
->
setCompleter
(
completer
);
actCompleterChanged
();
}
}
TabRoom
::~
TabRoom
()
TabRoom
::~
TabRoom
()
...
@@ -119,7 +141,7 @@ TabRoom::~TabRoom()
...
@@ -119,7 +141,7 @@ TabRoom::~TabRoom()
void
TabRoom
::
retranslateUi
()
void
TabRoom
::
retranslateUi
()
{
{
gameSelector
->
retranslateUi
();
gameSelector
->
retranslateUi
();
chatView
->
retranslateUi
();
chatView
->
retranslateUi
();
userList
->
retranslateUi
();
userList
->
retranslateUi
();
sayLabel
->
setText
(
tr
(
"&Say:"
));
sayLabel
->
setText
(
tr
(
"&Say:"
));
...
@@ -166,16 +188,20 @@ QString TabRoom::sanitizeHtml(QString dirty) const
...
@@ -166,16 +188,20 @@ QString TabRoom::sanitizeHtml(QString dirty) const
void
TabRoom
::
sendMessage
()
void
TabRoom
::
sendMessage
()
{
{
if
(
sayEdit
->
text
().
isEmpty
())
if
(
sayEdit
->
text
().
isEmpty
()){
return
;
return
;
}
else
if
(
completer
->
popup
()
->
isVisible
()){
Command_RoomSay
cmd
;
completer
->
popup
()
->
hide
();
cmd
.
set_message
(
sayEdit
->
text
().
toStdString
());
return
;
}
else
{
PendingCommand
*
pend
=
prepareRoomCommand
(
cmd
);
Command_RoomSay
cmd
;
connect
(
pend
,
SIGNAL
(
finished
(
Response
,
CommandContainer
,
QVariant
)),
this
,
SLOT
(
sayFinished
(
const
Response
&
)));
cmd
.
set_message
(
sayEdit
->
text
().
toStdString
());
sendRoomCommand
(
pend
);
sayEdit
->
clear
();
PendingCommand
*
pend
=
prepareRoomCommand
(
cmd
);
connect
(
pend
,
SIGNAL
(
finished
(
Response
,
CommandContainer
,
QVariant
)),
this
,
SLOT
(
sayFinished
(
const
Response
&
)));
sendRoomCommand
(
pend
);
sayEdit
->
clear
();
}
}
}
void
TabRoom
::
sayFinished
(
const
Response
&
response
)
void
TabRoom
::
sayFinished
(
const
Response
&
response
)
...
@@ -200,6 +226,11 @@ void TabRoom::actOpenChatSettings() {
...
@@ -200,6 +226,11 @@ void TabRoom::actOpenChatSettings() {
settings
.
exec
();
settings
.
exec
();
}
}
void
TabRoom
::
actCompleterChanged
()
{
settingsCache
->
getChatMentionCompleter
()
?
completer
->
setCompletionRole
(
2
)
:
completer
->
setCompletionRole
(
1
);
}
void
TabRoom
::
processRoomEvent
(
const
RoomEvent
&
event
)
void
TabRoom
::
processRoomEvent
(
const
RoomEvent
&
event
)
{
{
switch
(
static_cast
<
RoomEvent
::
RoomEventType
>
(
getPbExtension
(
event
)))
{
switch
(
static_cast
<
RoomEvent
::
RoomEventType
>
(
getPbExtension
(
event
)))
{
...
@@ -222,11 +253,17 @@ void TabRoom::processJoinRoomEvent(const Event_JoinRoom &event)
...
@@ -222,11 +253,17 @@ void TabRoom::processJoinRoomEvent(const Event_JoinRoom &event)
{
{
userList
->
processUserInfo
(
event
.
user_info
(),
true
);
userList
->
processUserInfo
(
event
.
user_info
(),
true
);
userList
->
sortItems
();
userList
->
sortItems
();
if
(
!
autocompleteUserList
.
contains
(
"@"
+
QString
::
fromStdString
(
event
.
user_info
().
name
()))){
autocompleteUserList
<<
"@"
+
QString
::
fromStdString
(
event
.
user_info
().
name
());
sayEdit
->
updateCompleterModel
(
autocompleteUserList
);
}
}
}
void
TabRoom
::
processLeaveRoomEvent
(
const
Event_LeaveRoom
&
event
)
void
TabRoom
::
processLeaveRoomEvent
(
const
Event_LeaveRoom
&
event
)
{
{
userList
->
deleteUser
(
QString
::
fromStdString
(
event
.
name
()));
userList
->
deleteUser
(
QString
::
fromStdString
(
event
.
name
()));
autocompleteUserList
.
removeOne
(
"@"
+
QString
::
fromStdString
(
event
.
name
()));
sayEdit
->
updateCompleterModel
(
autocompleteUserList
);
}
}
void
TabRoom
::
processRoomSayEvent
(
const
Event_RoomSay
&
event
)
void
TabRoom
::
processRoomSayEvent
(
const
Event_RoomSay
&
event
)
...
@@ -259,3 +296,124 @@ void TabRoom::sendRoomCommand(PendingCommand *pend)
...
@@ -259,3 +296,124 @@ void TabRoom::sendRoomCommand(PendingCommand *pend)
{
{
client
->
sendCommand
(
pend
);
client
->
sendCommand
(
pend
);
}
}
CustomLineEdit
::
CustomLineEdit
(
QWidget
*
parent
)
:
QLineEdit
(
parent
)
{
}
void
CustomLineEdit
::
focusOutEvent
(
QFocusEvent
*
e
){
QLineEdit
::
focusOutEvent
(
e
);
if
(
c
->
popup
()
->
isVisible
()){
//Remove Popup
c
->
popup
()
->
hide
();
//Truncate the line to last space or whole string
QString
textValue
=
text
();
int
lastIndex
=
textValue
.
length
();
int
lastWordStartIndex
=
textValue
.
lastIndexOf
(
" "
)
+
1
;
int
leftShift
=
qMin
(
lastIndex
,
lastWordStartIndex
);
setText
(
textValue
.
left
(
leftShift
));
//Insert highlighted line from popup
insert
(
c
->
completionModel
()
->
index
(
c
->
popup
()
->
currentIndex
().
row
(),
0
).
data
().
toString
()
+
" "
);
//Set focus back to the textbox since tab was pressed
setFocus
();
}
}
void
CustomLineEdit
::
keyPressEvent
(
QKeyEvent
*
event
)
{
switch
(
event
->
key
()){
case
Qt
::
Key_Return
:
case
Qt
::
Key_Enter
:
case
Qt
::
Key_Escape
:
if
(
c
->
popup
()
->
isVisible
()){
event
->
ignore
();
//Remove Popup
c
->
popup
()
->
hide
();
//Truncate the line to last space or whole string
QString
textValue
=
text
();
int
lastIndexof
=
textValue
.
lastIndexOf
(
" "
);
QString
finalString
=
textValue
.
left
(
lastIndexof
);
//Add a space if there's a word
if
(
finalString
!=
""
)
finalString
+=
" "
;
setText
(
finalString
);
return
;
}
break
;
case
Qt
::
Key_Space
:
if
(
c
->
popup
()
->
isVisible
()){
event
->
ignore
();
//Remove Popup
c
->
popup
()
->
hide
();
//Truncate the line to last space or whole string
QString
textValue
=
text
();
int
lastIndex
=
textValue
.
length
();
int
lastWordStartIndex
=
textValue
.
lastIndexOf
(
" "
)
+
1
;
int
leftShift
=
qMin
(
lastIndex
,
lastWordStartIndex
);
setText
(
textValue
.
left
(
leftShift
));
//Insert highlighted line from popup
insert
(
c
->
completionModel
()
->
index
(
c
->
popup
()
->
currentIndex
().
row
(),
0
).
data
().
toString
()
+
" "
);
return
;
}
break
;
default:
break
;
}
QLineEdit
::
keyPressEvent
(
event
);
//Wait until the first character after @
if
(
!
c
||
text
().
right
(
1
).
contains
(
"@"
))
return
;
//Set new completion prefix
c
->
setCompletionPrefix
(
cursorWord
(
text
()));
if
(
c
->
completionPrefix
().
length
()
<
1
){
c
->
popup
()
->
hide
();
return
;
}
//Draw completion box
QRect
cr
=
cursorRect
();
cr
.
setWidth
(
c
->
popup
()
->
sizeHintForColumn
(
0
)
+
c
->
popup
()
->
verticalScrollBar
()
->
sizeHint
().
width
());
c
->
complete
(
cr
);
//Select first item in the completion popup
QItemSelectionModel
*
sm
=
new
QItemSelectionModel
(
c
->
completionModel
());
c
->
popup
()
->
setSelectionModel
(
sm
);
sm
->
select
(
c
->
completionModel
()
->
index
(
0
,
0
),
QItemSelectionModel
::
ClearAndSelect
);
sm
->
setCurrentIndex
(
c
->
completionModel
()
->
index
(
0
,
0
),
QItemSelectionModel
::
NoUpdate
);
}
QString
CustomLineEdit
::
cursorWord
(
const
QString
&
line
)
const
{
return
line
.
mid
(
line
.
left
(
cursorPosition
()).
lastIndexOf
(
" "
)
+
1
,
cursorPosition
()
-
line
.
left
(
cursorPosition
()).
lastIndexOf
(
" "
)
-
1
);
}
void
CustomLineEdit
::
insertCompletion
(
QString
arg
)
{
QString
s_arg
=
arg
+
" "
;
setText
(
text
().
replace
(
text
().
left
(
cursorPosition
()).
lastIndexOf
(
" "
)
+
1
,
cursorPosition
()
-
text
().
left
(
cursorPosition
()).
lastIndexOf
(
" "
)
-
1
,
s_arg
));
}
void
CustomLineEdit
::
setCompleter
(
QCompleter
*
completer
)
{
c
=
completer
;
c
->
setWidget
(
this
);
connect
(
c
,
SIGNAL
(
activated
(
QString
)),
this
,
SLOT
(
insertCompletion
(
QString
)));
}
void
CustomLineEdit
::
updateCompleterModel
(
QStringList
completionList
)
{
if
(
!
c
||
c
->
popup
()
->
isVisible
())
return
;
QStringListModel
*
model
;
model
=
(
QStringListModel
*
)(
c
->
model
());
if
(
model
==
NULL
)
model
=
new
QStringListModel
();
QStringList
updatedList
=
completionList
;
model
->
setStringList
(
updatedList
);
}
\ No newline at end of file
cockatrice/src/tab_room.h
View file @
98fa9eb1
...
@@ -4,6 +4,9 @@
...
@@ -4,6 +4,9 @@
#include
"tab.h"
#include
"tab.h"
#include
<QGroupBox>
#include
<QGroupBox>
#include
<QMap>
#include
<QMap>
#include
<QLineEdit>
#include
<QKeyEvent>
#include
<QFocusEvent>
namespace
google
{
namespace
protobuf
{
class
Message
;
}
}
namespace
google
{
namespace
protobuf
{
class
Message
;
}
}
class
AbstractClient
;
class
AbstractClient
;
...
@@ -13,6 +16,7 @@ class ChatView;
...
@@ -13,6 +16,7 @@ class ChatView;
class
QLineEdit
;
class
QLineEdit
;
class
QPushButton
;
class
QPushButton
;
class
QTextTable
;
class
QTextTable
;
class
QCompleter
;
class
RoomEvent
;
class
RoomEvent
;
class
ServerInfo_Room
;
class
ServerInfo_Room
;
class
ServerInfo_Game
;
class
ServerInfo_Game
;
...
@@ -24,6 +28,7 @@ class GameSelector;
...
@@ -24,6 +28,7 @@ class GameSelector;
class
Response
;
class
Response
;
class
PendingCommand
;
class
PendingCommand
;
class
ServerInfo_User
;
class
ServerInfo_User
;
class
CustomLineEdit
;
class
TabRoom
:
public
Tab
{
class
TabRoom
:
public
Tab
{
Q_OBJECT
Q_OBJECT
...
@@ -38,14 +43,17 @@ private:
...
@@ -38,14 +43,17 @@ private:
UserList
*
userList
;
UserList
*
userList
;
ChatView
*
chatView
;
ChatView
*
chatView
;
QLabel
*
sayLabel
;
QLabel
*
sayLabel
;
Q
LineEdit
*
sayEdit
;
Custom
LineEdit
*
sayEdit
;
QGroupBox
*
chatGroupBox
;
QGroupBox
*
chatGroupBox
;
QMenu
*
roomMenu
;
QMenu
*
roomMenu
;
QAction
*
aLeaveRoom
;
QAction
*
aLeaveRoom
;
QAction
*
aOpenChatSettings
;
QAction
*
aOpenChatSettings
;
QAction
*
aClearChat
;
QAction
*
aClearChat
;
QString
sanitizeHtml
(
QString
dirty
)
const
;
QString
sanitizeHtml
(
QString
dirty
)
const
;
QStringList
autocompleteUserList
;
QCompleter
*
completer
;
signals:
signals:
void
roomClosing
(
TabRoom
*
tab
);
void
roomClosing
(
TabRoom
*
tab
);
void
openMessageDialog
(
const
QString
&
userName
,
bool
focus
);
void
openMessageDialog
(
const
QString
&
userName
,
bool
focus
);
...
@@ -59,7 +67,8 @@ private slots:
...
@@ -59,7 +67,8 @@ private slots:
void
addMentionTag
(
QString
mentionTag
);
void
addMentionTag
(
QString
mentionTag
);
void
focusTab
();
void
focusTab
();
void
actShowMentionPopup
(
QString
&
sender
);
void
actShowMentionPopup
(
QString
&
sender
);
void
actCompleterChanged
();
void
processListGamesEvent
(
const
Event_ListGames
&
event
);
void
processListGamesEvent
(
const
Event_ListGames
&
event
);
void
processJoinRoomEvent
(
const
Event_JoinRoom
&
event
);
void
processJoinRoomEvent
(
const
Event_JoinRoom
&
event
);
void
processLeaveRoomEvent
(
const
Event_LeaveRoom
&
event
);
void
processLeaveRoomEvent
(
const
Event_LeaveRoom
&
event
);
...
@@ -81,4 +90,21 @@ public:
...
@@ -81,4 +90,21 @@ public:
void
sendRoomCommand
(
PendingCommand
*
pend
);
void
sendRoomCommand
(
PendingCommand
*
pend
);
};
};
class
CustomLineEdit
:
public
QLineEdit
{
Q_OBJECT
private:
QString
cursorWord
(
const
QString
&
line
)
const
;
QCompleter
*
c
;
private
slots
:
void
insertCompletion
(
QString
);
protected:
void
keyPressEvent
(
QKeyEvent
*
event
);
void
focusOutEvent
(
QFocusEvent
*
e
);
public:
explicit
CustomLineEdit
(
QWidget
*
parent
=
0
);
void
setCompleter
(
QCompleter
*
);
void
updateCompleterModel
(
QStringList
);
};
#endif
#endif
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment