KVIrc 5.2.0
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:
49 {
52 HardLocked
53 };
54
55protected:
56 KviKvsExtendedRunTimeData * m_pExtendedRunTimeData = nullptr;
57 KviKvsVariantList * m_pParameters = nullptr;
58 KviWindow * m_pWindow = nullptr;
59 LockStatus m_eLocked = Unlocked;
60 bool m_bTestMode = false;
61
62public:
63 KviKvsExtendedRunTimeData * extendedRunTimeData() const { return m_pExtendedRunTimeData; }
64 KviKvsVariantList * parameters() const { return m_pParameters; }
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:
79 enum Type
80 {
85 ExtMenu
86 };
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;
98 KviKvsScript * m_pKvsCondition = nullptr;
99
100public:
101 // this doesn't trigger errors, only warnings
102 bool evaluateCondition(KviKvsPopupMenuTopLevelData * pData);
103
104 KviKvsPopupMenuItem::Type type() const { return m_eType; }
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
114 KviKvsScript * kvsCondition() const { return m_pKvsCondition; }
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:
150 KviKvsScript * m_pKvsText = nullptr;
151 KviKvsScript * m_pKvsIcon = nullptr;
152
153public:
154 KviKvsScript * kvsIcon() const override;
155 KviKvsScript * kvsText() const override;
156 // this just returns a string, eventually empty
157 QString evaluateText(KviKvsPopupMenuTopLevelData * pData);
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:
175 KviKvsPopupMenuItemLabel * m_pItem = nullptr;
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;
194 KviKvsPopupMenuItemLabelHelper * m_pSignalRelay = 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:
217 KviKvsScript * m_pKvsCode = nullptr;
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:
239 KviKvsPopupMenu * m_pMenu = nullptr;
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;
274 friend class KviSinglePopupEditor;
275
276public:
277 KviKvsPopupMenu(const QString & szName);
279
280protected:
281 KviPointerList<KviKvsPopupMenuItem> * m_pItemList = nullptr;
282
283private:
284 QString m_szName;
285 KviKvsPopupMenu * m_pParentPopup = nullptr;
286 KviPointerList<KviKvsScript> * m_pPrologues = nullptr;
287 KviPointerList<KviKvsScript> * m_pEpilogues = nullptr;
288 KviKvsPopupMenuTopLevelData * m_pTopLevelData = nullptr;
289 // this is a temporary used to hack-in the activation from KviMenuBar
290 KviKvsPopupMenuTopLevelData * m_pTempTopLevelData = nullptr;
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();
299 KviPointerList<KviKvsPopupMenuItem> * itemList() const { return m_pItemList; }
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);
315 KviPointerList<KviKvsScript> * epilogues() const { return m_pEpilogues; }
316 KviPointerList<KviKvsScript> * prologues() const { return m_pPrologues; }
317 KviKvsPopupMenu * parentPopup() const { return m_pParentPopup; }
318 void generateDefPopup(QString & buffer);
319 void setParentPopup(KviKvsPopupMenu * par) { m_pParentPopup = par; }
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
Definition KviKvsPopupManager.h:31
Definition KviKvsPopupMenu.h:249
const QString & extName() const
Definition KviKvsPopupMenu.h:263
QString m_szMenuName
Definition KviKvsPopupMenu.h:260
Definition KviKvsPopupMenu.h:206
Definition KviKvsPopupMenu.h:166
Definition KviKvsPopupMenu.h:181
Definition KviKvsPopupMenu.h:228
KviKvsPopupMenu * menu() const
Definition KviKvsPopupMenu.h:242
Definition KviKvsPopupMenu.h:125
Definition KviKvsPopupMenu.h:141
Definition KviKvsPopupMenu.h:75
virtual KviKvsPopupMenuItem * clone() const =0
bool isLabel() const
Definition KviKvsPopupMenu.h:110
bool isExtMenu() const
Definition KviKvsPopupMenu.h:111
const QString & name() const
Definition KviKvsPopupMenu.h:106
bool isMenu() const
Definition KviKvsPopupMenu.h:112
KviKvsScript * kvsCondition() const
Definition KviKvsPopupMenu.h:114
Type m_eType
Definition KviKvsPopupMenu.h:97
Type
Definition KviKvsPopupMenu.h:80
@ Menu
Definition KviKvsPopupMenu.h:82
@ Label
Definition KviKvsPopupMenu.h:83
@ 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
void setWindow(KviWindow *pWindow)
Definition KviKvsPopupMenu.h:69
KviKvsExtendedRunTimeData * extendedRunTimeData() const
Definition KviKvsPopupMenu.h:63
KviWindow * window() const
Definition KviKvsPopupMenu.h:68
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
LockStatus
Definition KviKvsPopupMenu.h:49
@ Unlocked
Definition KviKvsPopupMenu.h:50
@ SoftLocked
Definition KviKvsPopupMenu.h:51
KviKvsVariantList * parameters() const
Definition KviKvsPopupMenu.h:64
bool isSoftLocked() const
Definition KviKvsPopupMenu.h:65
Definition KviKvsPopupMenu.h:270
KviPointerList< KviKvsPopupMenuItem > * itemList() const
Definition KviKvsPopupMenu.h:299
bool isEmpty() const
Definition KviKvsPopupMenu.h:309
KviKvsPopupMenu * parentPopup() const
Definition KviKvsPopupMenu.h:317
void setPopupName(const QString &szName)
Definition KviKvsPopupMenu.h:295
void testModeItemClicked(KviKvsPopupMenuItem *it)
KviPointerList< KviKvsScript > * prologues() const
Definition KviKvsPopupMenu.h:316
void setParentPopup(KviKvsPopupMenu *par)
Definition KviKvsPopupMenu.h:319
QString m_szName
Definition KviKvsPopupMenu.h:284
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
bool isEmpty() const
Returns true if the list is empty.
Definition KviPointerList.h:611
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