QTfrontend/ui/widget/chatwidget.h
author unc0rr
Sun, 02 Dec 2012 01:25:11 +0400
changeset 8178 8bd087478b48
parent 7742 e5e529dcc9bb
child 8179 a1ffcb559f99
permissions -rw-r--r--
Fix QSettings problems: - Reopen file in ReadOnly mode if it was open in ReadWrite mode and is being read. This is needed for stupid QSettings which opens file in ReadWrite mode just to call readAll() on it. - Implement setSize(0)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
480
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
     1
/*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 486
diff changeset
     2
 * Hedgewars, a free turn based strategy game
486
7ea71cd3acd5 - Change proto version to 4
unc0rr
parents: 480
diff changeset
     3
 * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
6952
7f70f37bbf08 license header year range adjustments
sheepluva
parents: 6929
diff changeset
     4
 * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
480
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
     5
 *
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
     8
 * the Free Software Foundation; version 2 of the License
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
     9
 *
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    13
 * GNU General Public License for more details.
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    14
 *
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    15
 * You should have received a copy of the GNU General Public License
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    16
 * along with this program; if not, write to the Free Software
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    18
 */
09434d6c3865 GPL headers added
displacer
parents: 465
diff changeset
    19
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    20
#ifndef _CHAT_WIDGET_INCLUDED
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    21
#define _CHAT_WIDGET_INCLUDED
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    22
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    23
#include <QWidget>
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    24
#include <QString>
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    25
#include <QGridLayout>
6214
c06b7e2eb7a4 custom highlighting
sheepluva
parents: 6205
diff changeset
    26
#include <QList>
6229
4c834af76c3b * fix highlighting (i just broke it by not negating a boolean expression)
sheepluva
parents: 6227
diff changeset
    27
#include <QPair>
4899
8163c9aaad0c automatically convert hedgewars.org urls to actual links (in order to make support in the lobby/rooms easier
sheepluva
parents: 4897
diff changeset
    28
#include <QRegExp>
7720
8e6b79a020f8 Show more statuses in icons.
unc0rr
parents: 6952
diff changeset
    29
#include <QHash>
7723
ca05b576ec74 Start moving to players list model.
unc0rr
parents: 7720
diff changeset
    30
#include <QListWidgetItem>
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    31
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6147
diff changeset
    32
#include "SDLInteraction.h"
2775
3445ce5e9c79 Only beep in room, load sound in constructor
nemo
parents: 2773
diff changeset
    33
6147
b4d7d8d62feb feature-pimpin'-up the chat input line in frontend:
sheepluva
parents: 6060
diff changeset
    34
#include "SmartLineEdit.h"
b4d7d8d62feb feature-pimpin'-up the chat input line in frontend:
sheepluva
parents: 6060
diff changeset
    35
1520
f72f538eba05 Refactor chat widget to use QTextBrower instead of QListWidget:
unc0rr
parents: 1405
diff changeset
    36
class QTextBrowser;
f72f538eba05 Refactor chat widget to use QTextBrower instead of QListWidget:
unc0rr
parents: 1405
diff changeset
    37
class QLineEdit;
7723
ca05b576ec74 Start moving to players list model.
unc0rr
parents: 7720
diff changeset
    38
class QListView;
2773
e94f240a8a41 Have game beep when someone joins lobby/room. Controlled by Sound option
nemo
parents: 2706
diff changeset
    39
class QSettings;
7725
4ad05a478c6c Further work on moving to players list model
unc0rr
parents: 7723
diff changeset
    40
class QAbstractItemModel;
7740
076f57836ee3 Restore old context menu behavior
unc0rr
parents: 7725
diff changeset
    41
class QMenu;
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    42
6185
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    43
/**
6200
6a4ace88d85a tweak and document abstract page
sheepluva
parents: 6197
diff changeset
    44
 * @brief Chat widget.
6185
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    45
 *
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    46
 * By default uses :res/css/chat.css as style sheet for chat.
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    47
 * See \repo{res/css/chat.css} for a more detailed description.
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    48
 *
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    49
 * @see http://doc.qt.nokia.com/4.5/richtext-html-subset.html#css-properties
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    50
 */
a6aa2d44f390 document css files better
sheepluva
parents: 6182
diff changeset
    51
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    52
class HWChatWidget : public QWidget
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    53
{
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    54
        Q_OBJECT
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    55
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    56
    public:
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    57
        HWChatWidget(QWidget* parent, QSettings * gameSettings, bool notify);
6929
c305d31642ac reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents: 6928
diff changeset
    58
        void setIgnoreListKick(bool enabled); ///< automatically kick people on ignore list (if possible)
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    59
        void setShowFollow(bool enabled);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    60
        static const QString & styleSheet();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    61
        void displayError(const QString & message);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    62
        void displayNotice(const QString & message);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    63
        void displayWarning(const QString & message);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    64
        void setUser(const QString & nickname);
7725
4ad05a478c6c Further work on moving to players list model
unc0rr
parents: 7723
diff changeset
    65
        void setUsersModel(QAbstractItemModel * model);
2845
19db164dd20d Frontend:
smxx
parents: 2779
diff changeset
    66
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    67
    protected:
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    68
        virtual void dragEnterEvent(QDragEnterEvent * event);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    69
        virtual void dropEvent(QDropEvent * event);
6197
sheepluva
parents: 6194
diff changeset
    70
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    71
    private:
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    72
        static QString * s_styleSheet;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    73
        static QStringList * s_displayNone;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    74
        static bool s_isTimeStamped;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    75
        static QString s_tsFormat;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    76
        static const QRegExp URLREGEXP;
6197
sheepluva
parents: 6194
diff changeset
    77
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    78
        static void setStyleSheet(const QString & 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: 6165
diff changeset
    79
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    80
        void addLine(const QString & cssClass, QString line, bool isHighlight = false);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    81
        bool parseCommand(const QString & line);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    82
        void discardStyleSheet();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    83
        void saveStyleSheet();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    84
        QString linkedNick(const QString & nickname);
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    85
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    86
    public slots:
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    87
        void onChatString(const QString& str);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    88
        void onChatString(const QString& nick, const QString& str);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    89
        void onServerMessage(const QString& str);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    90
        void nickAdded(const QString& nick, bool notifyNick);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    91
        void nickRemoved(const QString& nick);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    92
        void clear();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    93
        void adminAccess(bool);
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
    94
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    95
    signals:
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    96
        void chatLine(const QString& str);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    97
        void kick(const QString & str);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    98
        void ban(const QString & str);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
    99
        void info(const QString & str);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   100
        void follow(const QString &);
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   101
        void nickCountUpdate(int cnt);
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
   102
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   103
    private:
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   104
        bool m_isAdmin;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   105
        QGridLayout mainLayout;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   106
        QTextBrowser* chatText;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   107
        QStringList chatStrings;
7723
ca05b576ec74 Start moving to players list model.
unc0rr
parents: 7720
diff changeset
   108
        QListView* chatNicks;
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   109
        SmartLineEdit* chatEditLine;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   110
        QAction * acInfo;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   111
        QAction * acKick;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   112
        QAction * acBan;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   113
        QAction * acFollow;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   114
        QAction * acIgnore;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   115
        QAction * acFriend;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   116
        QSettings * gameSettings;
7740
076f57836ee3 Restore old context menu behavior
unc0rr
parents: 7725
diff changeset
   117
        QMenu * m_nicksMenu;
6928
9562ace15141 nemo said I was boring for removing the "hello" randomizer on room join.
sheepluva
parents: 6700
diff changeset
   118
        QStringList m_helloSounds;
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   119
        QString m_hilightSound;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   120
        QString m_userNick;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   121
        QString m_clickedNick;
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   122
        QList<QRegExp> m_highlights; ///< regular expressions used for highlighting
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   123
        bool notify;
6929
c305d31642ac reimplement auto-kick for ignored players (it was temporarily removed during refactoring)
sheepluva
parents: 6928
diff changeset
   124
        bool m_autoKickEnabled;
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
   125
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   126
    private slots:
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   127
        void returnPressed();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   128
        void onBan();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   129
        void onKick();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   130
        void onInfo();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   131
        void onFollow();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   132
        void onIgnore();
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   133
        void onFriend();
7742
e5e529dcc9bb - Finish conversion to nicks model
unc0rr
parents: 7741
diff changeset
   134
        void chatNickDoubleClicked(const QModelIndex & index);
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6418
diff changeset
   135
        void linkClicked(const QUrl & link);
7740
076f57836ee3 Restore old context menu behavior
unc0rr
parents: 7725
diff changeset
   136
        void nicksContextMenuRequested(const QPoint & pos);
461
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
   137
};
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
   138
105af110b0e6 chatWidget with layout
displacer
parents:
diff changeset
   139
#endif // _CHAT_WIDGET_INCLUDED