1
//=============================================================================
3
// File : KviKvsUserAction.cpp
4
// Creation date : Tue 07 Dec 2004 02:00:24 by Szymon Stefanek
6
// This file is part of the KVIrc IRC client distribution
7
// Copyright (C) 2004-2010 Szymon Stefanek <pragma at kvirc dot net>
9
// This program is FREE software. You can redistribute it and/or
10
// modify it under the terms of the GNU General Public License
11
// as published by the Free Software Foundation; either version 2
12
// of the License, or (at your opinion) any later version.
14
// This program is distributed in the HOPE that it will be USEFUL,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17
// See the GNU General Public License for more details.
19
// You should have received a copy of the GNU General Public License
20
// along with this program. If not, write to the Free Software Foundation,
21
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23
//=============================================================================
25
#include "KviKvsUserAction.h"
26
#include "KviKvsScript.h"
27
#include "KviConfigurationFile.h"
28
#include "KviIconManager.h"
29
#include "KviActionManager.h"
30
#include "KviKvsScript.h"
31
#include "KviWindow.h"
32
#include "KviCommandFormatter.h"
34
KviKvsUserAction::KviKvsUserAction(QObject * pParent,
35
const QString &szName,
36
const QString &szScriptCode,
37
const QString &szVisibleNameCode,
38
const QString &szDescriptionCode,
39
const QString &szCategory,
40
const QString &szBigIconId,
41
const QString &szSmallIconId,
43
const QString &szKeySequence
58
QString szKvsName = "action::";
61
QString szTmp = szKvsName;
62
szTmp += "::description";
63
m_pDescriptionScript = new KviKvsScript(szTmp,szDescriptionCode,KviKvsScript::Parameter);
67
m_pVisibleNameScript = new KviKvsScript(szTmp,szVisibleNameCode,KviKvsScript::Parameter);
69
m_szCategory = szCategory;
70
m_pCategory = KviActionManager::instance()->category(szCategory);
74
KviKvsUserAction::KviKvsUserAction(QObject * pParent)
75
: KviKvsAction(pParent,QString(),QString(),QString(),QString())
78
m_pDescriptionScript = 0;
79
m_pVisibleNameScript = 0;
82
KviKvsUserAction::~KviKvsUserAction()
84
if(m_pDescriptionScript)
85
delete m_pDescriptionScript;
86
if(m_pVisibleNameScript)
87
delete m_pVisibleNameScript;
90
KviKvsUserAction * KviKvsUserAction::createInstance(
92
const QString & szName,
93
const QString & szScriptCode,
94
const QString & szVisibleNameCode,
95
const QString & szDescriptionCode,
96
const QString & szCategory,
97
const QString & szBigIconId,
98
const QString & szSmallIconId,
100
const QString & szKeySequence
103
return new KviKvsUserAction(
117
void KviKvsUserAction::exportToKvs(QString & szBuffer)
133
void KviKvsUserAction::exportToKvs(
135
const QString & szName,
136
const QString & szScriptCode,
137
const QString & szVisibleName,
138
const QString & szDescription,
139
const QString & szCategory,
140
const QString & szBigIconId,
141
const QString & szSmallIconId,
143
const QString & szKeySequence
146
szBuffer += "action.create";
147
if(uFlags & NeedsContext)
150
if(uFlags & NeedsConnection)
153
if(uFlags & EnableAtLogin)
157
if(uFlags & InternalWindowMask)
160
if(uFlags & WindowConsole)
162
if(uFlags & WindowChannel)
164
if(uFlags & WindowQuery)
166
if(uFlags & WindowDccChat)
170
if(uFlags & (WindowConsole | WindowChannel | WindowQuery))
172
if(uFlags & WindowOnlyIfUsersSelected)
177
if(!szCategory.isEmpty())
180
szBuffer += szCategory;
183
if(!szKeySequence.isEmpty())
185
szBuffer += " -k=\"";
186
szBuffer += szKeySequence;
195
if(szVisibleName.contains('$'))
197
szBuffer += szVisibleName;
200
szTmp = szVisibleName.trimmed();
201
if(szTmp.startsWith(QChar('\"')) && szTmp.endsWith(QChar('\"')))
206
szTmp.replace("\"","\\\"");
213
if(szDescription.contains('$'))
215
szBuffer += szDescription;
218
szTmp = szDescription.trimmed();
219
if(szTmp.startsWith(QChar('\"')) && szTmp.endsWith(QChar('\"')))
224
szTmp.replace("\"","\\\"");
231
if(szBigIconId.contains('$'))
233
szBuffer += szBigIconId;
236
szTmp = szBigIconId.trimmed();
237
if(szTmp.startsWith(QChar('\"')) && szTmp.endsWith(QChar('\"')))
242
szTmp.replace("\"","\\\"");
249
if(szSmallIconId.contains('$'))
251
szBuffer += szSmallIconId;
254
szTmp = szSmallIconId.trimmed();
255
if(szTmp.startsWith(QChar('\"')) && szTmp.endsWith(QChar('\"')))
260
szTmp.replace("\"","\\\"");
267
szTmp = szScriptCode;
268
KviCommandFormatter::blockFromBuffer(szTmp);
274
// FIXME: Cache this stuff ??
276
const QString & KviKvsUserAction::visibleName()
278
if(!m_pVisibleNameScript)
279
return m_szVisibleName;
280
if(!m_pVisibleNameScript->run(g_pActiveWindow,0,m_szVisibleName))
281
m_szVisibleName = m_pVisibleNameScript->code();
282
return m_szVisibleName;
285
const QString & KviKvsUserAction::description()
287
if(!m_pDescriptionScript)
288
return m_szDescription;
289
if(!m_pDescriptionScript->run(g_pActiveWindow,0,m_szDescription))
290
m_szDescription = m_pDescriptionScript->code();
291
return m_szDescription;
294
const QString & KviKvsUserAction::visibleNameCode()
296
if(!m_pVisibleNameScript)
297
return m_szVisibleName;
298
return m_pVisibleNameScript->code();
301
const QString & KviKvsUserAction::descriptionCode()
303
if(!m_pDescriptionScript)
304
return m_szDescription;
305
return m_pDescriptionScript->code();
308
bool KviKvsUserAction::isKviUserActionNeverOverrideThis()
313
bool KviKvsUserAction::load(KviConfigurationFile * cfg)
315
m_szName = cfg->group();
316
if(m_szName.isEmpty())return false;
317
m_szVisibleName = cfg->readEntry("VisibleName");
318
if(m_szVisibleName.isEmpty())return false;
319
QString szKvsName = "action::";
320
szKvsName += m_szName;
321
QString szTmp = szKvsName;
324
if(m_pVisibleNameScript)delete m_pVisibleNameScript;
325
m_pVisibleNameScript = new KviKvsScript(szTmp,m_szVisibleName,KviKvsScript::Parameter);
327
if(m_szVisibleName.isEmpty())return false;
328
m_szDescription = cfg->readEntry("Description");
330
szTmp += "::description";
332
if(m_pDescriptionScript)delete m_pDescriptionScript;
333
m_pDescriptionScript = new KviKvsScript(szTmp,m_szDescription,KviKvsScript::Parameter);
336
m_szBigIconId = cfg->readEntry("BigIcon");
337
m_szSmallIconId = cfg->readEntry("SmallIcon");
338
m_szKeySequence = cfg->readEntry("KeySequence");
339
m_szCategory = cfg->readEntry("Category");
340
m_pCategory = KviActionManager::instance()->category(m_szCategory);
341
m_uFlags = cfg->readUIntEntry("Flags",0);
343
QString szCode = cfg->readEntry("Code");
344
if(szCode.isEmpty())return false;
346
m_szScript = QString(szCode);
351
void KviKvsUserAction::save(KviConfigurationFile * cfg)
353
cfg->setGroup(m_szName);
354
if(m_pVisibleNameScript)cfg->writeEntry("VisibleName",m_pVisibleNameScript->code());
355
if(m_pDescriptionScript)
357
if(!m_pDescriptionScript->code().isEmpty())cfg->writeEntry("Description",m_pDescriptionScript->code());
359
if(!m_szBigIconId.isEmpty())cfg->writeEntry("BigIcon",m_szBigIconId);
360
if(!m_szSmallIconId.isEmpty())cfg->writeEntry("SmallIcon",m_szSmallIconId);
361
if(!m_szCategory.isEmpty())cfg->writeEntry("Category",m_szCategory);
362
if(!m_szKeySequence.isEmpty())cfg->writeEntry("KeySequence",m_szKeySequence);
363
if(m_uFlags != 0)cfg->writeEntry("Flags",m_uFlags);
364
cfg->writeEntry("Code",m_szScript);