QTfrontend/ui/widget/chatwidget.h
changeset 6060 fdfc01419815
parent 5998 e8f44e9433f0
child 6147 b4d7d8d62feb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/ui/widget/chatwidget.h	Wed Sep 28 19:27:56 2011 +0200
@@ -0,0 +1,124 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
+ * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef _CHAT_WIDGET_INCLUDED
+#define _CHAT_WIDGET_INCLUDED
+
+#include <QWidget>
+#include <QListWidget>
+#include <QString>
+#include <QGridLayout>
+#include <QRegExp>
+
+#include "SDLs.h"
+
+class ListWidgetNickItem;
+class QTextBrowser;
+class QLineEdit;
+class QListWidget;
+class QSettings;
+class SDLInteraction;
+
+// this class is for custom nick sorting
+class ListWidgetNickItem : public QListWidgetItem
+{
+public:
+  ListWidgetNickItem(const QString& nick, bool isFriend, bool isIgnored);
+  bool operator<(const QListWidgetItem & other) const;
+  void setFriend(bool isFriend);
+  void setIgnored(bool isIgnored);
+  bool isFriend();
+  bool ignored();
+
+private:
+  bool aFriend;
+  bool isIgnored;
+};
+
+class HWChatWidget : public QWidget
+{
+  Q_OBJECT
+
+ public:
+  HWChatWidget(QWidget* parent, QSettings * gameSettings, SDLInteraction * sdli, bool notify);
+  void loadLists(const QString & nick);
+  void saveLists(const QString & nick);
+  void setShowReady(bool s);
+  void setShowFollow(bool enabled);
+  void addLine(const QString & cssClass, QString line);
+  static const char* STYLE;
+  QStringList ignoreList, friendsList;
+
+private:
+  void loadList(QStringList & list, const QString & file);
+  void saveList(QStringList & list, const QString & file);
+  void updateNickItem(QListWidgetItem *item);
+  void updateNickItems();
+  static const QRegExp URLREGEXP;
+
+ public slots:
+  void onChatString(const QString& str);
+  void onChatString(const QString& nick, const QString& str);
+  void onServerMessage(const QString& str);
+  void nickAdded(const QString& nick, bool notifyNick);
+  void nickRemoved(const QString& nick);
+  void clear();
+  void setReadyStatus(const QString & nick, bool isReady);
+  void adminAccess(bool);
+
+ signals:
+  void chatLine(const QString& str);
+  void kick(const QString & str);
+  void ban(const QString & str);
+  void info(const QString & str);
+  void follow(const QString &);
+  void nickCountUpdate(int cnt);
+
+ private:
+  QGridLayout mainLayout;
+  QTextBrowser* chatText;
+  QStringList chatStrings;
+  QListWidget* chatNicks;
+  QLineEdit* chatEditLine;
+  QAction * acInfo;
+  QAction * acKick;
+  QAction * acBan;
+  QAction * acFollow;
+  QAction * acIgnore;
+  QAction * acFriend;
+  QSettings * gameSettings;
+  SDLInteraction * sdli;
+  Mix_Chunk *sound[4];
+  bool notify;
+  bool showReady;
+
+ private slots:
+  void returnPressed();
+  void onBan();
+  void onKick();
+  void onInfo();
+  void onFollow();
+  void onIgnore();
+  void onFriend();
+  void chatNickDoubleClicked(QListWidgetItem * item);
+  void chatNickSelected(int index);
+  void linkClicked(const QUrl & link);
+};
+
+#endif // _CHAT_WIDGET_INCLUDED