KVIrc 5.2.6
Developer APIs
KviKvsPopupMenu.h
Go to the documentation of this file.
1#ifndef _KVI_KVS_POPUPMENU_H_
2#define _KVI_KVS_POPUPMENU_H_
3//=============================================================================
4//
5// File : KviKvsPopupMenu.h
6// Creation date : Wed 07 Jan 2004 05:02:57 by Szymon Stefanek
7//
8// This file is part of the KVIrc IRC client distribution
9// Copyright (C) 2004-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 "KviQString.h"
29#include "KviWindow.h"
30#include "KviKvsHash.h"
31#include "KviKvsVariantList.h"
32#include "KviKvsScript.h"
34
35#include <QLabel>
36#include <QPixmap>
37#include <QMenu>
38
39class KviKvsPopupMenu;
40
42{
43 friend class KviKvsPopupMenu;
44
45public:
54
55protected:
58 KviWindow * m_pWindow = nullptr;
60 bool m_bTestMode = false;
61
62public:
65 bool isSoftLocked() const { return m_eLocked != Unlocked; }
66 bool isHardLocked() const { return m_eLocked == HardLocked; }
67 void setLocked(LockStatus eLocked) { m_eLocked = eLocked; }
68 KviWindow * window() const { return m_pWindow; }
69 void setWindow(KviWindow * pWindow) { m_pWindow = pWindow; }
70 bool testMode() const { return m_bTestMode; }
71 void setTestMode(bool bTestMode) { m_bTestMode = bTestMode; }
72};
73
75{
76 friend class KviKvsPopupMenu;
77
78public:
87
88protected:
89 KviKvsPopupMenuItem(Type t, const QString & szItemName, const QString & szCondition);
90 KviKvsPopupMenuItem(Type t, QString szItemName, const KviKvsScript * pCondition);
91
92public:
93 virtual ~KviKvsPopupMenuItem();
94
95protected:
96 QString m_szItemName;
99
100public:
101 // this doesn't trigger errors, only warnings
103
105
106 const QString & name() const { return m_szItemName; }
107
108 bool isItem() const { return m_eType == Item; }
109 bool isSeparator() const { return m_eType == Separator; }
110 bool isLabel() const { return m_eType == Label; }
111 bool isExtMenu() const { return m_eType == ExtMenu; }
112 bool isMenu() const { return m_eType == Menu; }
113
115 virtual KviKvsScript * kvsIcon() const;
116 virtual KviKvsScript * kvsText() const;
117 virtual KviKvsScript * kvsCode() const;
118
119 virtual void fill(KviKvsPopupMenu * pMenu, KviKvsPopupMenuTopLevelData * pData, int iIdx) = 0;
120 virtual void clear();
121 virtual KviKvsPopupMenuItem * clone() const = 0;
122};
123
125{
126 friend class KviKvsPopupMenu;
127
128protected:
129 KviKvsPopupMenuItemSeparator(const QString & szItemName, const QString & szCondition);
130 KviKvsPopupMenuItemSeparator(const QString & szItemName, const KviKvsScript * pCondition);
131
132public:
134
135public:
136 void fill(KviKvsPopupMenu * pMenu, KviKvsPopupMenuTopLevelData * pData, int iIdx) override;
137 KviKvsPopupMenuItem * clone() const override;
138};
139
141{
142protected:
143 KviKvsPopupMenuItemWithTextAndIcon(KviKvsPopupMenuItem::Type t, const QString & szItemName, const QString & szText, const QString & szIcon, const QString & szCondition);
144 KviKvsPopupMenuItemWithTextAndIcon(KviKvsPopupMenuItem::Type t, const QString & szItemName, const KviKvsScript * pText, const KviKvsScript * pIcon, const KviKvsScript * pCondition);
145
146public:
148
149protected:
152
153public:
154 KviKvsScript * kvsIcon() const override;
155 KviKvsScript * kvsText() const override;
156 // this just returns a string, eventually empty
158 // this just returns the icon, eventually
159 QPixmap * evaluateIcon(KviKvsPopupMenuTopLevelData * pData);
160};
161
163
164// this acts as signal relay
166{
167 Q_OBJECT
169
170protected:
173
174protected:
176protected slots:
177 void labelDestroyed();
178};
179
181{
183 friend class KviKvsPopupMenu;
184
185protected:
186 KviKvsPopupMenuItemLabel(const QString & szItemName, const QString & szText, const QString & szIcon, const QString & szCondition);
187 KviKvsPopupMenuItemLabel(const QString & szItemName, const KviKvsScript * pText, const KviKvsScript * pIcon, const KviKvsScript * pCondition);
188
189public:
191
192protected:
193 QLabel * m_pLabel = nullptr;
195
196public:
197 void fill(KviKvsPopupMenu * pMenu, KviKvsPopupMenuTopLevelData * pData, int iIdx) override;
198 KviKvsPopupMenuItem * clone() const override;
199 void clear() override;
200
201protected:
202 void labelDestroyed();
203};
204
206{
207 friend class KviKvsPopupMenu;
208
209protected:
210 KviKvsPopupMenuItemItem(const QString & szItemName, const QString & szCode, const QString & szText, const QString & szIcon, const QString & szCondition);
211 KviKvsPopupMenuItemItem(const QString & szItemName, const KviKvsScript * pCode, const KviKvsScript * pText, const KviKvsScript * pIcon, const KviKvsScript * pCondition);
212
213public:
215
216protected:
218
219protected:
220 KviKvsScript * kvsCode() const override;
221
222public:
223 void fill(KviKvsPopupMenu * pMenu, KviKvsPopupMenuTopLevelData * pData, int iIdx) override;
224 KviKvsPopupMenuItem * clone() const override;
225};
226
228{
229 friend class KviKvsPopupMenu;
230
231protected:
232 KviKvsPopupMenuItemMenu(const QString & szItemName, KviKvsPopupMenu * pMenu, const QString & szText, const QString & szIcon, const QString & szCondition);
233 KviKvsPopupMenuItemMenu(const QString & szItemName, KviKvsPopupMenu * pMenu, const KviKvsScript * pText, const KviKvsScript * pIcon, const KviKvsScript * pCondition);
234
235public:
237
238protected:
240
241public:
242 KviKvsPopupMenu * menu() const { return m_pMenu; }
243 void fill(KviKvsPopupMenu * pMenu, KviKvsPopupMenuTopLevelData * pData, int iIdx) override;
244 void clear() override;
245 KviKvsPopupMenuItem * clone() const override;
246};
247
249{
250 friend class KviKvsPopupMenu;
251
252protected:
253 KviKvsPopupMenuItemExtMenu(const QString & szItemName, QString szMenuName, const QString & szText, const QString & szIcon, const QString & szCondition);
254 KviKvsPopupMenuItemExtMenu(const QString & szItemName, QString szMenuName, const KviKvsScript * pText, const KviKvsScript * pIcon, const KviKvsScript * pCondition);
255
256public:
258
259protected:
261 KviKvsPopupMenu * m_pMenu = nullptr; // owned!
262public:
263 const QString & extName() const { return m_szMenuName; }
264 void fill(KviKvsPopupMenu * pMenu, KviKvsPopupMenuTopLevelData * pData, int iIdx) override;
265 void clear() override;
266 KviKvsPopupMenuItem * clone() const override;
267};
268
269class KVIRC_API KviKvsPopupMenu : public QMenu
270{
271 Q_OBJECT
273 friend class KviKvsPopupManager;
275
276public:
277 KviKvsPopupMenu(const QString & szName);
279
280protected:
282
283private:
284 QString m_szName;
289 // this is a temporary used to hack-in the activation from KviMenuBar
291 bool m_bSetupDone = false;
292
293public:
294 const QString & popupName() const { return m_szName; }
295 void setPopupName(const QString & szName) { m_szName = szName; }
296 void copyFrom(const KviKvsPopupMenu * src);
297 KviKvsPopupMenuTopLevelData * topLevelData();
298 KviKvsPopupMenu * topLevelPopup();
300 bool isSoftLocked();
301 bool isHardLocked();
303 KviKvsPopupMenu * addPopup(const QString & szItemName, const QString & szText, const QString & szIcon, const QString & szCondition);
304 void addSeparator(const QString & szItemName, const QString & szCondition);
305 void addLabel(const QString & szItemName, const QString & szText, const QString & szIcon, const QString & szCondition);
306 void addItem(const QString & szItemName, const QString & szCode, const QString & szText, const QString & szIcon, const QString & szCondition);
307 void addExtPopup(const QString & szItemName, const QString & szPopupName, const QString & szText, const QString & szIcon, const QString & szCondition);
308 void doPopup(const QPoint & pnt, KviWindow * wnd, KviKvsVariantList * pParams, bool bTestMode = false);
309 bool isEmpty() const { return m_pItemList->isEmpty() && m_pPrologues->isEmpty() && m_pEpilogues->isEmpty(); }
310 void doClear();
311 void addPrologue(const QString & szItemName, const QString & szCode);
312 void addEpilogue(const QString & szItemName, const QString & szCode);
313 bool removeItemByName(const QString & szItemName, bool bRecursive);
314 KviKvsPopupMenu * findChildPopupByName(const QString & szItemName);
318 void generateDefPopup(QString & buffer);
320 void generateDefPopupCore(QString & buffer);
321
322protected:
323 void addItemInternal(KviKvsPopupMenuItem * it);
324 void executePrologues(KviKvsPopupMenuTopLevelData * pData);
325 void executeEpilogues(KviKvsPopupMenuTopLevelData * pData);
326 void load(const QString & prefix, KviConfigurationFile * cfg);
327 void save(const QString & prefix, KviConfigurationFile * cfg);
328private slots:
329 void setupMenuContents();
330
331protected:
332 void clearMenuContents();
333protected slots:
334 void itemClicked(QAction * pAction);
335signals:
337};
338
339#endif
Handling of hash data type in KVS.
KVIrc Script manager.
Parser class to handle variant variables lists.
Helper functions for the QString class.
Contains the KviWindow class.
btnDict clear()
Definition KviConfigurationFile.h:50
Definition KviKvsRunTimeContext.h:44
KviKvsPopupMenu * m_pMenu
Definition KviKvsPopupMenu.h:261
const QString & extName() const
Definition KviKvsPopupMenu.h:263
friend class KviKvsPopupMenu
Definition KviKvsPopupMenu.h:250
KviKvsPopupMenuItemExtMenu(const QString &szItemName, QString szMenuName, const QString &szText, const QString &szIcon, const QString &szCondition)
Definition KviKvsPopupMenu.cpp:397
QString m_szMenuName
Definition KviKvsPopupMenu.h:260
KviKvsPopupMenuItem * clone() const override
Definition KviKvsPopupMenu.cpp:344
KviKvsScript * kvsCode() const override
Definition KviKvsPopupMenu.cpp:349
KviKvsScript * m_pKvsCode
Definition KviKvsPopupMenu.h:217
KviKvsPopupMenuItemItem(const QString &szItemName, const QString &szCode, const QString &szText, const QString &szIcon, const QString &szCondition)
Definition KviKvsPopupMenu.cpp:312
friend class KviKvsPopupMenu
Definition KviKvsPopupMenu.h:207
void fill(KviKvsPopupMenu *pMenu, KviKvsPopupMenuTopLevelData *pData, int iIdx) override
Definition KviKvsPopupMenu.cpp:330
KviKvsPopupMenuItemLabel * m_pItem
Definition KviKvsPopupMenu.h:175
void labelDestroyed()
Definition KviKvsPopupMenu.cpp:236
friend class KviKvsPopupMenuItemLabel
Definition KviKvsPopupMenu.h:168
KviKvsPopupMenuItemLabelHelper(KviKvsPopupMenuItemLabel *pItem)
Definition KviKvsPopupMenu.cpp:228
Definition KviKvsPopupMenu.h:181
friend class KviKvsPopupMenuItemLabelHelper
Definition KviKvsPopupMenu.h:182
KviKvsPopupMenuItemLabelHelper * m_pSignalRelay
Definition KviKvsPopupMenu.h:194
KviKvsPopupMenuItemLabel(const QString &szItemName, const QString &szText, const QString &szIcon, const QString &szCondition)
Definition KviKvsPopupMenu.cpp:241
void labelDestroyed()
Definition KviKvsPopupMenu.cpp:263
KviKvsPopupMenuItem * clone() const override
Definition KviKvsPopupMenu.cpp:268
QLabel * m_pLabel
Definition KviKvsPopupMenu.h:193
friend class KviKvsPopupMenu
Definition KviKvsPopupMenu.h:183
void fill(KviKvsPopupMenu *pMenu, KviKvsPopupMenuTopLevelData *pData, int iIdx) override
Definition KviKvsPopupMenu.cpp:283
KviKvsPopupMenu * menu() const
Definition KviKvsPopupMenu.h:242
KviKvsPopupMenuItemMenu(const QString &szItemName, KviKvsPopupMenu *pMenu, const QString &szText, const QString &szIcon, const QString &szCondition)
Definition KviKvsPopupMenu.cpp:354
friend class KviKvsPopupMenu
Definition KviKvsPopupMenu.h:229
KviKvsPopupMenu * m_pMenu
Definition KviKvsPopupMenu.h:239
friend class KviKvsPopupMenu
Definition KviKvsPopupMenu.h:126
void fill(KviKvsPopupMenu *pMenu, KviKvsPopupMenuTopLevelData *pData, int iIdx) override
Definition KviKvsPopupMenu.cpp:122
KviKvsPopupMenuItem * clone() const override
Definition KviKvsPopupMenu.cpp:129
KviKvsPopupMenuItemSeparator(const QString &szItemName, const QString &szCondition)
Definition KviKvsPopupMenu.cpp:109
QPixmap * evaluateIcon(KviKvsPopupMenuTopLevelData *pData)
Definition KviKvsPopupMenu.cpp:180
QString evaluateText(KviKvsPopupMenuTopLevelData *pData)
Definition KviKvsPopupMenu.cpp:208
KviKvsScript * m_pKvsIcon
Definition KviKvsPopupMenu.h:151
KviKvsScript * kvsIcon() const override
Definition KviKvsPopupMenu.cpp:170
KviKvsScript * kvsText() const override
Definition KviKvsPopupMenu.cpp:175
KviKvsPopupMenuItemWithTextAndIcon(KviKvsPopupMenuItem::Type t, const QString &szItemName, const QString &szText, const QString &szIcon, const QString &szCondition)
Definition KviKvsPopupMenu.cpp:134
KviKvsScript * m_pKvsText
Definition KviKvsPopupMenu.h:150
Definition KviKvsPopupMenu.h:75
virtual KviKvsPopupMenuItem * clone() const =0
KviKvsPopupMenuItem(Type t, const QString &szItemName, const QString &szCondition)
Definition KviKvsPopupMenu.cpp:47
KviKvsScript * m_pKvsCondition
Definition KviKvsPopupMenu.h:98
bool isLabel() const
Definition KviKvsPopupMenu.h:110
bool isExtMenu() const
Definition KviKvsPopupMenu.h:111
const QString & name() const
Definition KviKvsPopupMenu.h:106
friend class KviKvsPopupMenu
Definition KviKvsPopupMenu.h:76
bool isMenu() const
Definition KviKvsPopupMenu.h:112
KviKvsScript * kvsCondition() const
Definition KviKvsPopupMenu.h:114
bool evaluateCondition(KviKvsPopupMenuTopLevelData *pData)
Definition KviKvsPopupMenu.cpp:90
Type m_eType
Definition KviKvsPopupMenu.h:97
Type
Definition KviKvsPopupMenu.h:80
@ Menu
Definition KviKvsPopupMenu.h:82
@ Label
Definition KviKvsPopupMenu.h:83
@ ExtMenu
Definition KviKvsPopupMenu.h:85
@ Item
Definition KviKvsPopupMenu.h:81
@ Separator
Definition KviKvsPopupMenu.h:84
bool isSeparator() const
Definition KviKvsPopupMenu.h:109
QString m_szItemName
Definition KviKvsPopupMenu.h:96
KviKvsPopupMenuItem::Type type() const
Definition KviKvsPopupMenu.h:104
bool isItem() const
Definition KviKvsPopupMenu.h:108
virtual void fill(KviKvsPopupMenu *pMenu, KviKvsPopupMenuTopLevelData *pData, int iIdx)=0
Definition KviKvsPopupMenu.h:42
bool m_bTestMode
Definition KviKvsPopupMenu.h:60
KviKvsVariantList * m_pParameters
Definition KviKvsPopupMenu.h:57
void setWindow(KviWindow *pWindow)
Definition KviKvsPopupMenu.h:69
KviKvsExtendedRunTimeData * extendedRunTimeData() const
Definition KviKvsPopupMenu.h:63
KviWindow * window() const
Definition KviKvsPopupMenu.h:68
KviWindow * m_pWindow
Definition KviKvsPopupMenu.h:58
friend class KviKvsPopupMenu
Definition KviKvsPopupMenu.h:43
void setLocked(LockStatus eLocked)
Definition KviKvsPopupMenu.h:67
bool testMode() const
Definition KviKvsPopupMenu.h:70
bool isHardLocked() const
Definition KviKvsPopupMenu.h:66
void setTestMode(bool bTestMode)
Definition KviKvsPopupMenu.h:71
KviKvsExtendedRunTimeData * m_pExtendedRunTimeData
Definition KviKvsPopupMenu.h:56
LockStatus m_eLocked
Definition KviKvsPopupMenu.h:59
LockStatus
Definition KviKvsPopupMenu.h:49
@ Unlocked
Definition KviKvsPopupMenu.h:50
@ HardLocked
Definition KviKvsPopupMenu.h:52
@ SoftLocked
Definition KviKvsPopupMenu.h:51
KviKvsVariantList * parameters() const
Definition KviKvsPopupMenu.h:64
bool isSoftLocked() const
Definition KviKvsPopupMenu.h:65
KviKvsPopupMenuTopLevelData(KviKvsVariantList *pParameters, KviWindow *pWindow)
Definition KviKvsPopupMenu.cpp:471
Definition KviKvsPopupMenu.h:270
bool m_bSetupDone
Definition KviKvsPopupMenu.h:291
friend class KviKvsPopupManager
Definition KviKvsPopupMenu.h:273
friend class KviSinglePopupEditor
Definition KviKvsPopupMenu.h:274
KviKvsPopupMenuTopLevelData * m_pTopLevelData
Definition KviKvsPopupMenu.h:288
KviPointerList< KviKvsPopupMenuItem > * itemList() const
Definition KviKvsPopupMenu.h:299
bool isEmpty() const
Definition KviKvsPopupMenu.h:309
KviKvsPopupMenu * parentPopup() const
Definition KviKvsPopupMenu.h:317
KviKvsPopupMenu * m_pParentPopup
Definition KviKvsPopupMenu.h:285
void setPopupName(const QString &szName)
Definition KviKvsPopupMenu.h:295
void testModeItemClicked(KviKvsPopupMenuItem *it)
friend class KviKvsPopupMenuItemMenu
Definition KviKvsPopupMenu.h:272
KviPointerList< KviKvsScript > * prologues() const
Definition KviKvsPopupMenu.h:316
void setParentPopup(KviKvsPopupMenu *par)
Definition KviKvsPopupMenu.h:319
QString m_szName
Definition KviKvsPopupMenu.h:284
KviPointerList< KviKvsPopupMenuItem > * m_pItemList
Definition KviKvsPopupMenu.h:281
KviKvsPopupMenu(const QString &szName)
Definition KviKvsPopupMenu.cpp:483
KviKvsPopupMenuTopLevelData * m_pTempTopLevelData
Definition KviKvsPopupMenu.h:290
KviPointerList< KviKvsScript > * m_pEpilogues
Definition KviKvsPopupMenu.h:287
KviPointerList< KviKvsScript > * m_pPrologues
Definition KviKvsPopupMenu.h:286
const QString & popupName() const
Definition KviKvsPopupMenu.h:294
KviPointerList< KviKvsScript > * epilogues() const
Definition KviKvsPopupMenu.h:315
The KVIrc Script class.
Definition KviKvsScript.h:60
Class to handle variant variables lists.
Definition KviKvsVariantList.h:42
A template double linked list of pointers.
Definition KviPointerList.h:371
Base class for all windows in KVIrc.
Definition KviWindow.h:75
#define t
Definition detector.cpp:85
This file contains compile time settings.
#define KVIRC_API
Definition kvi_settings.h:127