1
//=============================================================================
3
// File : kvi_kvs_useraction.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-2008 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 "kvi_kvs_useraction.h"
26
#include "kvi_kvs_script.h"
27
#include "kvi_config.h"
28
#include "kvi_iconmanager.h"
29
#include "kvi_actionmanager.h"
30
#include "kvi_kvs_script.h"
31
#include "kvi_window.h"
32
#include "kvi_cmdformatter.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)szBuffer += " -l";
156
if(uFlags & InternalWindowMask)
159
if(uFlags & WindowConsole)szWins += "x";
160
if(uFlags & WindowChannel)szWins += "c";
161
if(uFlags & WindowQuery)szWins += "q";
162
if(uFlags & WindowDccChat)szWins += "d";
165
if(uFlags & (WindowConsole | WindowChannel | WindowQuery))
167
if(uFlags & WindowOnlyIfUsersSelected)
172
if(!szCategory.isEmpty())
175
szBuffer += szCategory;
178
if(!szKeySequence.isEmpty())
180
szBuffer += " -k=\"";
181
szBuffer += szKeySequence;
190
if(szVisibleName.contains('$'))
196
tmp.replace("\"","\\\"");
202
if(szDescription.contains('$'))
204
szBuffer += szDescription;
208
tmp.replace("\"","\\\"");
214
if(szBigIconId.contains('$'))
216
szBuffer += szBigIconId;
220
tmp.replace("\"","\\\"");
226
if(szSmallIconId.contains('$'))
228
szBuffer += szSmallIconId;
232
tmp.replace("\"","\\\"");
239
KviCommandFormatter::blockFromBuffer(tmp);
245
// FIXME: Cache this stuff ??
247
const QString & KviKvsUserAction::visibleName()
249
if(!m_pVisibleNameScript)
250
return m_szVisibleName;
251
if(!m_pVisibleNameScript->run(g_pActiveWindow,0,m_szVisibleName))
252
m_szVisibleName = m_pVisibleNameScript->code();
253
return m_szVisibleName;
256
const QString & KviKvsUserAction::description()
258
if(!m_pDescriptionScript)
259
return m_szDescription;
260
if(!m_pDescriptionScript->run(g_pActiveWindow,0,m_szDescription))
261
m_szDescription = m_pDescriptionScript->code();
262
return m_szDescription;
265
const QString & KviKvsUserAction::visibleNameCode()
267
if(!m_pVisibleNameScript)
268
return m_szVisibleName;
269
return m_pVisibleNameScript->code();
272
const QString & KviKvsUserAction::descriptionCode()
274
if(!m_pDescriptionScript)
275
return m_szDescription;
276
return m_pDescriptionScript->code();
279
bool KviKvsUserAction::isKviUserActionNeverOverrideThis()
284
bool KviKvsUserAction::load(KviConfig * cfg)
286
m_szName = cfg->group();
287
if(m_szName.isEmpty())return false;
288
m_szVisibleName = cfg->readQStringEntry("VisibleName");
289
if(m_szVisibleName.isEmpty())return false;
290
QString szKvsName = "action::";
291
szKvsName += m_szName;
292
QString szTmp = szKvsName;
295
if(m_pVisibleNameScript)delete m_pVisibleNameScript;
296
m_pVisibleNameScript = new KviKvsScript(szTmp,m_szVisibleName,KviKvsScript::Parameter);
298
if(m_szVisibleName.isEmpty())return false;
299
m_szDescription = cfg->readQStringEntry("Description");
301
szTmp += "::description";
303
if(m_pDescriptionScript)delete m_pDescriptionScript;
304
m_pDescriptionScript = new KviKvsScript(szTmp,m_szDescription,KviKvsScript::Parameter);
307
m_szBigIconId = cfg->readQStringEntry("BigIcon");
308
m_szSmallIconId = cfg->readQStringEntry("SmallIcon");
309
m_szKeySequence = cfg->readQStringEntry("KeySequence");
310
m_szCategory = cfg->readQStringEntry("Category");
311
m_pCategory = KviActionManager::instance()->category(m_szCategory);
312
m_uFlags = cfg->readUIntEntry("Flags",0);
314
QString szCode = cfg->readQStringEntry("Code");
315
if(szCode.isEmpty())return false;
317
m_szScript = QString(szCode);
322
void KviKvsUserAction::save(KviConfig * cfg)
324
cfg->setGroup(m_szName);
325
if(m_pVisibleNameScript)cfg->writeEntry("VisibleName",m_pVisibleNameScript->code());
326
if(m_pDescriptionScript)
328
if(!m_pDescriptionScript->code().isEmpty())cfg->writeEntry("Description",m_pDescriptionScript->code());
330
if(!m_szBigIconId.isEmpty())cfg->writeEntry("BigIcon",m_szBigIconId);
331
if(!m_szSmallIconId.isEmpty())cfg->writeEntry("SmallIcon",m_szSmallIconId);
332
if(!m_szCategory.isEmpty())cfg->writeEntry("Category",m_szCategory);
333
if(!m_szKeySequence.isEmpty())cfg->writeEntry("KeySequence",m_szKeySequence);
334
if(m_uFlags != 0)cfg->writeEntry("Flags",m_uFlags);
335
cfg->writeEntry("Code",m_szScript);