summaryrefslogtreecommitdiffstats
path: root/src/kvirc/ui/kvi_statusbar.h
blob: 119c93d880bbcf4a382d0554ed43362ca10927f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef _KVI_STATUSBAR_H_
#define _KVI_STATUSBAR_H_
//=============================================================================
//
//   File : kvi_statusbar.h
//   Created on Tue 07 Sep 2004 03:56:46 by Szymon Stefanek
//
//   This file is part of the KVIrc IRC client distribution
//   Copyright (C) 2004 Szymon Stefanek <pragma at kvirc dot net>
//
//   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; either version 2
//   of the License, or (at your opinion) any later version.
//
//   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. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
//=============================================================================

#include "kvi_settings.h"
#include "kvi_pointerlist.h"
#include "kvi_heapobject.h"

#include <qstring.h>
#include "kvi_pointerhashtable.h"
#include <qstatusbar.h>

class KviFrame;

class QTimer;
class QLabel;
class KviTalPopupMenu;

class KVIRC_API KviStatusBarMessage : public KviHeapObject
{
	friend class KviStatusBar;
protected:
	QString      m_szText;
	unsigned int m_uTimeout;
	unsigned int m_uPriority;
public:
	KviStatusBarMessage(const QString &szText,unsigned int uTimeout = 8000,unsigned int uPriority = 0)
		: KviHeapObject(), m_szText(szText), m_uTimeout(uTimeout), m_uPriority(uPriority) {};
	~KviStatusBarMessage(){};
public:
	const QString & text(){ return m_szText; };
	unsigned int timeout(){ return m_uTimeout; };
	unsigned int priority(){ return m_uPriority; };
};


class KviStatusBarApplet;
class KviStatusBarAppletDescriptor;
class KviIrcContext;
class KviDynamicToolTip;

class KVIRC_API KviStatusBar : public QStatusBar
{
	friend class KviStatusBarApplet;
	friend class KviFrame;
	Q_OBJECT
public:
	KviStatusBar(KviFrame * pFrame);
	~KviStatusBar();
protected:
	KviFrame                                 * m_pFrame;
	KviPointerList<KviStatusBarMessage>          * m_pMessageQueue;
	QTimer                                   * m_pMessageTimer;
	QLabel                                   * m_pMessageLabel;
	KviPointerList<KviStatusBarApplet>           * m_pAppletList;
	KviPointerHashTable<QString,KviStatusBarAppletDescriptor>      * m_pAppletDescriptors;
	KviTalPopupMenu                               * m_pContextPopup;
	KviTalPopupMenu                               * m_pAppletsPopup;
	KviStatusBarApplet                       * m_pClickedApplet;
	int                                        m_iLastMinimumHeight;
	bool                                       m_bStopLayoutOnAddRemove;
	KviDynamicToolTip                        * m_pToolTip;
public:
	KviFrame * frame(){ return m_pFrame; };
protected slots:
	void messageTimerFired();
protected:
	void showFirstMessageInQueue();
	virtual void paintEvent(QPaintEvent * e);
	virtual void mousePressEvent(QMouseEvent * e);
	virtual void mouseMoveEvent(QMouseEvent * e);
	virtual void mouseReleaseEvent(QMouseEvent * e);
	virtual void resizeEvent(QResizeEvent * e);
	virtual bool event(QEvent * e);
	void registerApplet(KviStatusBarApplet * a);
	void unregisterApplet(KviStatusBarApplet * a);
	void recalcMinimumHeight();
	void layoutChildren();
	void updateLayout(){ recalcMinimumHeight(); layoutChildren(); };
	void save();
	void load();
	KviStatusBarApplet * createApplet(const QString &szInternalName);
	void showLayoutHelp();
public:
	bool appletExists(KviStatusBarApplet * pApplet);
	// pnt is global!
	KviStatusBarApplet * appletAt(const QPoint &pnt,bool bBestMatch = false);

	KviTalPopupMenu * contextPopup();
	// takes the ownership of pMsg
	void queueMessage(KviStatusBarMessage * pMsg);
	// called by KviFrame
	void activeWindowChanged();
	
	void registerAppletDescriptor(KviStatusBarAppletDescriptor * d);

	//void addApplet(KviStatusBarApplet * pApplet);
	//void removeApplet(KviStatusBarApplet * pApplet);
protected slots:
	void contextPopupAboutToShow();
	void appletsPopupAboutToShow();
	void appletsPopupActivated(int id);
	void removeClickedApplet();
	void setPermanentMessage();
	void tipRequest(KviDynamicToolTip *pTip,const QPoint &pnt);
};

#endif //!_KVI_STATUSBAR_H_