1 #ifndef _KVI_SELECTORS_H_
2 #define _KVI_SELECTORS_H_
3 //=============================================================================
4 //
5 //   File : KviSelectors.h
6 //   Creation date : Mon Now 13 2000 15:21:10 CEST by Szymon Stefanek
7 //
8 //   This file is part of the KVIrc IRC client distribution
9 //   Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
10 //
11 //   This program is FREE software. You can redistribute it and/or
12 //   modify it under the terms of the GNU General Public License
13 //   as published by the Free Software Foundation; either version 2
14 //   of the License, or (at your option) any later version.
15 //
16 //   This program is distributed in the HOPE that it will be USEFUL,
17 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
18 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 //   See the GNU General Public License for more details.
20 //
21 //   You should have received a copy of the GNU General Public License
22 //   along with this program. If not, write to the Free Software Foundation,
23 //   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 //
25 //=============================================================================
26 
27 #include "kvi_settings.h"
28 #include "KviPixmap.h"
29 #include "KviTalHBox.h"
30 #include "KviTalListWidget.h"
31 #include "KviTalVBox.h"
32 
33 #include <QCheckBox>
34 #include <QColor>
35 #include <QFont>
36 #include <QLabel>
37 #include <QLineEdit>
38 #include <QPushButton>
39 #include <QScrollArea>
40 #include <QSpinBox>
41 #include <QString>
42 #include <QStringList>
43 #include <QTreeWidget>
44 #include <QValidator>
45 
46 class KVIRC_API KviSelectorInterface
47 {
48 public:
KviSelectorInterface()49 	KviSelectorInterface(){};
~KviSelectorInterface()50 	virtual ~KviSelectorInterface(){};
51 
52 public:
commit()53 	virtual void commit(){};
textForSearch()54 	virtual QString textForSearch() { return QString(); };
widgetToHighlight()55 	virtual QWidget * widgetToHighlight() { return nullptr; };
56 };
57 
58 class KVIRC_API KviBoolSelector : public QCheckBox, public KviSelectorInterface
59 {
60 	Q_OBJECT
61 public:
62 	KviBoolSelector(QWidget * par, const QString & txt, bool * pOption, bool bEnabled);
~KviBoolSelector()63 	~KviBoolSelector(){};
64 
65 private:
66 	bool * m_pOption;
67 
68 public:
69 	virtual void commit();
textForSearch()70 	QString textForSearch() { return text(); };
widgetToHighlight()71 	QWidget * widgetToHighlight() { return (QWidget *)this; };
72 public slots:
73 	void setNotEnabled(bool bNotEnabled);
74 	void setEnabled(bool bEnabled);
75 };
76 
77 class KVIRC_API KviStringSelector : public KviTalHBox, public KviSelectorInterface
78 {
79 	Q_OBJECT
80 public:
81 	KviStringSelector(QWidget * par, const QString & txt, QString * pOption, bool bEnabled);
82 	~KviStringSelector();
83 
84 protected:
85 	QLabel * m_pLabel;
86 	QLineEdit * m_pLineEdit;
87 	QString * m_pOption;
88 
89 public:
setValidator(QValidator * v)90 	void setValidator(QValidator * v) { m_pLineEdit->setValidator(v); };
setMinimumLabelWidth(unsigned int uWidth)91 	void setMinimumLabelWidth(unsigned int uWidth) { m_pLabel->setMinimumWidth(uWidth); };
92 	virtual void commit();
93 	void setText(const QString & text);
textForSearch()94 	QString textForSearch() { return m_pLabel->text(); };
widgetToHighlight()95 	QWidget * widgetToHighlight() { return (QWidget *)m_pLabel; };
lineEdit()96 	QLineEdit * lineEdit() { return m_pLineEdit; };
currentText()97 	QString currentText() { return m_pLineEdit->text(); };
98 public slots:
99 	virtual void setEnabled(bool bEnabled);
100 };
101 
102 class KVIRC_API KviPasswordSelector : public KviTalHBox, public KviSelectorInterface
103 {
104 	Q_OBJECT
105 public:
106 	KviPasswordSelector(QWidget * par, const QString & txt, QString * pOption, bool bEnabled);
107 	~KviPasswordSelector();
108 
109 protected:
110 	QLabel * m_pLabel;
textForSearch()111 	QString textForSearch() { return m_pLabel->text(); };
widgetToHighlight()112 	QWidget * widgetToHighlight() { return (QWidget *)m_pLabel; };
113 	QLineEdit * m_pLineEdit;
114 	QCheckBox * m_pCheckBox;
115 	QString * m_pOption;
116 
117 public:
setValidator(QValidator * v)118 	void setValidator(QValidator * v) { m_pLineEdit->setValidator(v); };
setMinimumLabelWidth(unsigned int uWidth)119 	void setMinimumLabelWidth(unsigned int uWidth) { m_pLabel->setMinimumWidth(uWidth); };
120 	virtual void commit();
121 	void setText(const QString & text);
122 public slots:
123 	virtual void setEnabled(bool bEnabled);
124 protected slots:
125 	void checkToggled(int state);
126 };
127 
128 class KVIRC_API KviPasswordLineEdit : public KviTalHBox
129 {
130 	Q_OBJECT
131 public:
132 	KviPasswordLineEdit(QWidget * par);
133 	~KviPasswordLineEdit();
134 
135 protected:
136 	QLineEdit * m_pLineEdit;
137 	QCheckBox * m_pCheckBox;
138 
139 public:
140 	QString text();
141 	void setText(const QString & text);
142 public slots:
143 	virtual void setEnabled(bool bEnabled);
144 protected slots:
145 	void checkToggled(int state);
146 };
147 
148 class KVIRC_API KviPixmapPreview : public QScrollArea
149 {
150 	Q_OBJECT
151 public:
152 	KviPixmapPreview(QWidget * par);
153 	~KviPixmapPreview();
154 
155 protected:
156 	QLabel * m_pLabPixmap;
157 
158 public:
159 	void setPixmap(KviPixmap * pix);
160 };
161 
162 class KVIRC_API KviPixmapSelector : public QWidget, public KviSelectorInterface
163 {
164 	Q_OBJECT
165 public:
166 	KviPixmapSelector(QWidget * par, const QString & txt, KviPixmap * pOption, bool bEnabled);
167 	~KviPixmapSelector();
168 
169 private:
170 	QCheckBox * m_pCheckBox;
171 	QLabel * m_pFileNameLabel;
172 	KviPixmapPreview * m_pPreview;
173 	QPushButton * m_pChooseButton;
174 	KviPixmap * m_pOption;
175 	KviPixmap m_localPixmap;
176 
177 public:
178 	void setImagePath(const QString & path);
179 	virtual void commit();
180 	virtual void setEnabled(bool bEnabled);
181 protected slots:
182 	void checkBoxToggled(bool bEnabled);
183 	void choosePixmap();
184 };
185 
186 class KVIRC_API KviUIntSelector : public KviTalHBox, public KviSelectorInterface
187 {
188 	Q_OBJECT
189 public:
190 	KviUIntSelector(QWidget * par, const QString & txt, unsigned int * pOption,
191 	    unsigned int uLowBound, unsigned int uHighBound, unsigned int uDefault, bool bEnabled, bool bShortInt = false);
~KviUIntSelector()192 	~KviUIntSelector(){};
193 
194 private:
195 	QLabel * m_pLabel;
196 
197 	QSpinBox * m_pSpinBox;
198 	unsigned int * m_pOption;
199 	unsigned int m_uLowBound;
200 	unsigned int m_uHighBound;
201 	unsigned int m_uDefault;
202 	bool m_bIsShortInt;
203 
204 public:
textForSearch()205 	QString textForSearch() { return m_pLabel->text(); };
widgetToHighlight()206 	QWidget * widgetToHighlight() { return (QWidget *)m_pLabel; };
207 	virtual void setPrefix(const QString & txt);
208 	virtual void setSuffix(const QString & txt);
209 	virtual void commit();
210 public slots:
211 	virtual void setEnabled(bool bEnabled);
212 };
213 
214 class KVIRC_API KviFileSelector : public QWidget, public KviSelectorInterface
215 {
216 	Q_OBJECT
217 	Q_PROPERTY(QString tmpFile READ tmpFile WRITE setTmpFile)
218 public:
219 	KviFileSelector(QWidget * par, const QString & txt, QString * pOption, bool bEnabled, unsigned int uFlags = 0, const QString & szFilter = QString());
~KviFileSelector()220 	~KviFileSelector(){};
221 
222 public:
223 	enum Flags
224 	{
225 		ChooseSaveFileName = 1,
226 		DontConfirmOverwrite = 2,
227 		VerticalLayout = 4
228 	};
229 
230 protected:
231 	QLabel * m_pLabel;
232 	QLineEdit * m_pLineEdit;
233 	QPushButton * m_pButton;
234 	QString * m_pOption;
235 	unsigned int m_uFlags;
236 	QString m_szFilter;
237 	QGridLayout * m_Layout;
238 
239 public:
tmpFile()240 	QString tmpFile() { return m_pLineEdit->text(); };
setTmpFile(QString & szFile)241 	void setTmpFile(QString & szFile) { m_pLineEdit->setText(szFile); };
242 	virtual void commit();
243 	void setSelection(const QString & szSelection);
244 signals:
245 	void selectionChanged(const QString & szNewValue);
246 public slots:
247 	virtual void setEnabled(bool bEnabled);
248 private slots:
249 	void browseClicked();
250 
251 protected:
252 	virtual void select();
253 };
254 
255 class KVIRC_API KviDirectorySelector : public KviFileSelector
256 {
257 	Q_OBJECT
258 public:
259 	KviDirectorySelector(QWidget * par, const QString & txt, QString * pOption, bool bEnabled, unsigned int uFlags = 0);
~KviDirectorySelector()260 	~KviDirectorySelector(){};
261 
262 protected:
263 	virtual void select();
264 };
265 
266 class KVIRC_API KviColorSelector : public KviTalHBox, public KviSelectorInterface
267 {
268 	Q_OBJECT
269 public:
270 	KviColorSelector(QWidget * par, const QString & txt, QColor * pOption, bool bEnabled);
~KviColorSelector()271 	~KviColorSelector(){};
272 
273 private:
274 	QLabel * m_pLabel;
275 	QColor * m_pOption;
276 	QColor m_memColor;
277 	QPushButton * m_pButton;
278 
279 public:
textForSearch()280 	QString textForSearch() { return m_pLabel->text(); };
widgetToHighlight()281 	QWidget * widgetToHighlight() { return (QWidget *)m_pLabel; };
282 	virtual void commit();
getColor()283 	QColor getColor() { return m_memColor; };
284 	void forceColor(QColor clr);
285 
286 private:
287 	void setButtonPalette(QColor * pOption);
288 private slots:
289 	void changeClicked();
290 public slots:
291 	virtual void setEnabled(bool bEnabled);
292 };
293 
294 class KVIRC_API KviFontSelector : public KviTalHBox, public KviSelectorInterface
295 {
296 	Q_OBJECT
297 public:
298 	KviFontSelector(QWidget * par, const QString & txt, QFont * pOption, bool bEnabled);
~KviFontSelector()299 	~KviFontSelector(){};
300 
301 private:
302 	QLabel * m_pLabel;
303 	QFont * m_pOption;
304 	QPushButton * m_pButton;
305 
306 public:
307 	virtual void commit();
textForSearch()308 	QString textForSearch() { return m_pLabel->text(); };
widgetToHighlight()309 	QWidget * widgetToHighlight() { return (QWidget *)m_pLabel; };
310 private:
311 	void setButtonFont(QFont * pOption);
312 public slots:
313 	virtual void setEnabled(bool bEnabled);
314 private slots:
315 	void changeClicked();
316 };
317 
318 class KVIRC_API KviStringListSelector : public KviTalVBox, public KviSelectorInterface
319 {
320 	Q_OBJECT
321 public:
322 	KviStringListSelector(QWidget * par, const QString & txt, QStringList * pOption, bool bEnabled);
323 	~KviStringListSelector();
324 
325 private:
326 	QLabel * m_pLabel;
327 	KviTalListWidget * m_pListWidget;
328 	QLineEdit * m_pLineEdit;
329 	QPushButton * m_pAddButton;
330 	QPushButton * m_pRemoveButton;
331 	QStringList * m_pOption;
332 
333 public:
334 	virtual void commit();
textForSearch()335 	QString textForSearch() { return m_pLabel->text(); };
widgetToHighlight()336 	QWidget * widgetToHighlight() { return (QWidget *)m_pLabel; };
337 public slots:
338 	virtual void setEnabled(bool bEnabled);
339 private slots:
340 	void textChanged(const QString & str);
341 	void itemSelectionChanged();
342 	void addClicked();
343 	void removeClicked();
344 };
345 
346 class QMenu;
347 
348 class KVIRC_API KviMircTextColorSelector : public KviTalHBox, public KviSelectorInterface
349 {
350 	Q_OBJECT
351 public:
352 	KviMircTextColorSelector(QWidget * par, const QString & txt, unsigned int * uFore, unsigned int * uBack, bool bEnabled);
353 	~KviMircTextColorSelector();
354 
355 private:
356 	QLabel * m_pLabel;
357 	QPushButton * m_pButton;
358 	unsigned int * m_pUFore;
359 	unsigned int * m_pUBack;
360 	unsigned int m_uFore;
361 	unsigned int m_uBack;
362 	QMenu * m_pContextPopup;
363 	QMenu * m_pForePopup;
364 	QMenu * m_pBackPopup;
365 
366 public:
367 	virtual void commit();
368 	virtual void setEnabled(bool bEnabled);
369 protected slots:
370 	void buttonClicked();
371 	void foreSelected(QAction * pAction);
372 	void backSelected(QAction * pAction);
373 
374 protected:
375 	void setButtonPalette();
376 };
377 
378 class KVIRC_API KviSoundSelector : public KviFileSelector
379 {
380 	Q_OBJECT
381 public:
382 	KviSoundSelector(QWidget * par, const QString & txt, QString * pOption, bool bEnabled);
383 	~KviSoundSelector();
384 
385 protected:
386 	QPushButton * m_pPlayButton;
387 private slots:
388 	void playSound();
389 
390 public:
391 	virtual void setEnabled(bool bEnabled);
392 };
393 
394 class KVIRC_API KviChanTreeViewItem : public QTreeWidgetItem
395 {
396 private:
397 	QString m_szPass;
398 
399 public:
400 	KviChanTreeViewItem(QTreeWidget * pList, QString szChan, QString szPass);
~KviChanTreeViewItem()401 	~KviChanTreeViewItem(){};
402 
pass()403 	const QString & pass() { return m_szPass; }
404 };
405 
406 class KVIRC_API KviChannelListSelector : public KviTalVBox, public KviSelectorInterface
407 {
408 	Q_OBJECT
409 public:
410 	KviChannelListSelector(QWidget * par, const QString & txt, QStringList * pOption, bool bEnabled);
411 	~KviChannelListSelector();
412 
413 private:
414 	QLabel * m_pLabel;
415 	QTreeWidget * m_pTreeWidget;
416 	QLineEdit * m_pChanLineEdit;
417 	QLineEdit * m_pPassLineEdit;
418 	QPushButton * m_pAddButton;
419 	QPushButton * m_pRemoveButton;
420 	QStringList * m_pOption;
421 
422 public:
423 	virtual void commit();
textForSearch()424 	QString textForSearch() { return m_pLabel->text(); };
widgetToHighlight()425 	QWidget * widgetToHighlight() { return (QWidget *)m_pLabel; };
426 	virtual void setEnabled(bool bEnabled);
427 private slots:
428 	void textChanged(const QString & str);
429 	void itemSelectionChanged();
430 	void addClicked();
431 	void removeClicked();
432 };
433 
434 #endif //!_KVI_SELECTORS_H_
435