Stage 2
[quassel.git] / src / qtgui / bufferwidget.h
1 /***************************************************************************
2  *   Copyright (C) 2005-07 by The Quassel Team                             *
3  *   devel@quassel-irc.org                                                 *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
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                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20
21 #ifndef _BUFFERWIDGET_H_
22 #define _BUFFERWIDGET_H_
23
24 #include "ui_bufferwidget.h"
25
26 #include "global.h"
27
28 class Buffer;
29 struct BufferState;
30 class ChatWidget;
31 class LayoutThread;
32
33 //!\brief Displays the contents of a Buffer.
34 /** A BufferWidget usually includes a topic line, a nicklist, the chat itself, and an input line.
35  * For server buffers or queries, there is of course no nicklist.
36  * The contents of the chat is rendered by a ChatWidget.
37  */
38 class BufferWidget : public QWidget {
39   Q_OBJECT
40
41   public:
42     BufferWidget(QWidget *parent = 0);
43     ~BufferWidget();
44     void init();
45
46     QSize sizeHint() const;
47
48   signals:
49     void userInput(QString msg);
50     void aboutToClose();
51   
52     //void layoutMessages(LayoutTask);
53     void nickListUpdated(QStringList l);
54       
55   protected:
56
57   public slots:
58     void setBuffer(Buffer *);
59     void saveState();
60     //void prependMessages(Buffer *, QList<Message>);  // for backlog processing
61
62   protected:
63     void resizeEvent ( QResizeEvent * event );
64
65   private slots:
66     void enterPressed();
67     void itemExpansionChanged(QTreeWidgetItem *);
68     void updateTitle();
69
70     //void displayMsg(Message);
71     void updateNickList(BufferState *state, QVariantMap nicks);
72     void updateNickList(QVariantMap nicks);
73     void setOwnNick(QString ownNick);
74     void setTopic(QString topic);
75     void setActive(bool act = true);
76
77     //void messagesLayouted(LayoutTask);
78
79
80   private:
81     Ui::BufferWidget ui;
82     Buffer *curBuf;
83     QHash<Buffer *, BufferState *> states;
84     bool active;
85
86     ChatWidget *chatWidget;
87     QSplitter *splitter;
88     QTreeWidget *nickTree;
89
90     QString networkName;
91     QString bufferName;
92
93     //LayoutThread *layoutThread;
94     //QHash<Buffer *, QList<ChatLine*> > chatLineCache;
95     //QHash<Buffer *, QList<Message> > msgCache;
96 };
97
98 struct BufferState {
99   ChatWidget *chatWidget;
100   QTreeWidget *nickTree;
101   QSplitter *splitter;
102   QWidget *page;
103   Buffer *buffer;
104   QByteArray splitterState;
105   QString topic, ownNick;
106   QString inputLine;
107   int currentLine;
108   int lineOffset;
109   bool opsExpanded, voicedExpanded, usersExpanded;
110 };
111
112 #endif