1 //=============================================================================
2 //
3 // File : KvsObject_wizard.cpp
4 // Creation date : Fri Mar 18 14:30:48 CEST 2005
5 // by Tonino Imbesi(Grifisx) and Alessandro Carbone(Noldor)
6 //
7 // This file is part of the KVIrc IRC client distribution
8 // Copyright (C) 2005-2008 Alessandro Carbone (elfonol at gmail dot com)
9 //
10 // This program is FREE software. You can redistribute it and/or
11 // modify it under the terms of the GNU General Public License
12 // as published by the Free Software Foundation; either version 2
13 // of the License, or (at your option) any later version.
14 //
15 // This program is distributed in the HOPE that it will be USEFUL,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 // See the GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with this program. If not, write to the Free Software Foundation,
22 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 //
24 //=============================================================================
25
26 #include <KviTalWizard.h>
27
28 #include "KvsObject_wizard.h"
29 #include "KviError.h"
30 #include "kvi_debug.h"
31
32 #include "KviLocale.h"
33
34 #include <QPushButton>
35
36 /*
37 @doc: wizard
38 @keyterms:
39 wizard object class,
40 @title:
41 wizard class
42 @type:
43 class
44 @short:
45 The wizard class provides a framework for wizard dialogs.
46 @inherits:
47 [class]object[/class]
48 [class]widget[/class]
49 @description:
50 A wizard is an input dialog that consists of a sequence of dialog pages. It walks the user through a process step by step.[br]
51 @functions:
52 !fn: $addPage(<page_widget:object>,<title:string>)
53 Add a page with title.<page_widget> must be a widget's object.
54 !fn: $insertPage(<page_widget>,<title:string>,<index:integer>)
55 Inserts a page at the position <index>. If index is -1, page will appended to the end of the wizard's page sequence.
56 !fn: $setTitle(<page>,<title:string>)
57 Sets the title for page page to title text.
58 !fn: $setBackEnabled(<page_widget>,<bEnabled:boolean>)
59 If enable is set to 1, page page has a [i]back[/i] button; otherwise page has no [i]back[/i] button.[br]
60 By default all pages have this button.
61 !fn: $setNextEnabled(<page_widget>,<bEnabled:boolean>)
62 If enable is set to 1, page page has a [i]next[/i] button; otherwise the [i]next[/i] button on page is disabled.[br]
63 By default all pages have this button.
64 !fn: $setFinishEnabled(<page_widget>,<bEnabled:boolean>)
65 If enable is set to 1, page page has a [i]finish[/i] button; otherwise the [i]finish[/i] button on page is disabled.[br]
66 By default NO pages have this button.
67 !fn: $setHelpEnabled(<page_widget>,<bEnabled:boolean>)
68 If enable is set to 1, page page has a Help button; otherwise the [i]help[/i] button on page is disabled.[br]
69 By default all pages have this button.
70 !fn: $setNextBtnText(<text:string>)
71 Set the text for button [i]next[/i].
72 !fn: $setBackBtnText(<text:string>)
73 Set the text for button [i]back[/i].
74 !fn: $setFinishBtnText(<text:string>)
75 Set the text for button [i]finish[/i].
76 !fn: $setHelpBtnText(<text:string>)
77 Set the text for button Help.
78 !fn: $acceptEvent()
79 This function is called when the user clicks on the [i]finish[/i] button.
80 !fn: $rejectEvent()
81 This function is called when the user clicks on the [i]reject[/i] button.
82 !fn: $nextClickedEvent()
83 This function is called when the user clicks on the [i]next[/i] button.
84 !fn: $backClickedEvent()
85 This function is called when the user clicks on the [i]back[/i] button.
86 @signals:
87 !sg: $nextClicked()
88 This signal is emitted by the default implementation of [classfnc]$nextClickedEvent[/classfnc]().
89 !sg: $backClicked()
90 This signal is emitted by the default implementation of [classfnc]$backClickedEvent[/classfnc]().
91
92 */
93
94 KVSO_BEGIN_REGISTERCLASS(KvsObject_wizard, "wizard", "widget")
95
96 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, addPage)
97 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, insertPage)
98 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setTitle)
99
100 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setBackEnabled);
101 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setNextEnabled);
102 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setFinishEnabled);
103 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setHelpEnabled);
104
105 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setBackBtnText);
106 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setNextBtnText);
107 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setFinishBtnText);
108 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, setHelpBtnText);
109 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, nextClickedEvent);
110 KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_wizard, backClickedEvent);
111
112 KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_wizard, "acceptEvent")
113 KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_wizard, "rejectEvent")
114
KVSO_END_REGISTERCLASS(KvsObject_wizard)115 KVSO_END_REGISTERCLASS(KvsObject_wizard)
116
117 KVSO_BEGIN_CONSTRUCTOR(KvsObject_wizard, KvsObject_widget)
118
119 KVSO_END_CONSTRUCTOR(KvsObject_wizard)
120
121 KVSO_BEGIN_DESTRUCTOR(KvsObject_wizard)
122
123 KVSO_END_CONSTRUCTOR(KvsObject_wizard)
124
125 bool KvsObject_wizard::init(KviKvsRunTimeContext *, KviKvsVariantList *)
126 {
127 setObject(new KviKvsMdmWizard(parentScriptWidget(), getName().toUtf8().data(), this), true);
128
129 return true;
130 }
KVSO_CLASS_FUNCTION(wizard,addPage)131 KVSO_CLASS_FUNCTION(wizard, addPage)
132 {
133 CHECK_INTERNAL_POINTER(widget())
134 KviKvsObject * ob;
135 QString szLabel;
136 kvs_hobject_t hObject;
137 KVSO_PARAMETERS_BEGIN(c)
138 KVSO_PARAMETER("page_widget", KVS_PT_HOBJECT, 0, hObject)
139 KVSO_PARAMETER("label", KVS_PT_STRING, 0, szLabel)
140 KVSO_PARAMETERS_END(c)
141 ob = KviKvsKernel::instance()->objectController()->lookupObject(hObject);
142 if(!ob->object()->isWidgetType())
143 {
144 c->warning(__tr2qs_ctx("Can't add a non-widget object", "objects"));
145 return true;
146 }
147 ((KviTalWizard *)widget())->addPage(((QWidget *)(ob->object())), szLabel);
148 return true;
149 }
KVSO_CLASS_FUNCTION(wizard,insertPage)150 KVSO_CLASS_FUNCTION(wizard, insertPage)
151 {
152 CHECK_INTERNAL_POINTER(widget())
153
154 KviKvsObject * ob;
155 QString szLabel;
156 kvs_uint_t uIndex;
157 kvs_hobject_t hObject;
158 KVSO_PARAMETERS_BEGIN(c)
159 KVSO_PARAMETER("page_widget", KVS_PT_HOBJECT, 0, hObject)
160 KVSO_PARAMETER("label", KVS_PT_STRING, 0, szLabel)
161 KVSO_PARAMETER("index", KVS_PT_UNSIGNEDINTEGER, 0, uIndex)
162 KVSO_PARAMETERS_END(c)
163 ob = KviKvsKernel::instance()->objectController()->lookupObject(hObject);
164 if(!ob->object()->isWidgetType())
165 {
166 c->warning(__tr2qs_ctx("Can't add a non-widget object", "objects"));
167 return true;
168 }
169 ((KviTalWizard *)widget())->insertPage(((QWidget *)(ob->object())), szLabel, uIndex);
170 return true;
171 }
172
KVSO_CLASS_FUNCTION(wizard,setTitle)173 KVSO_CLASS_FUNCTION(wizard, setTitle)
174 {
175 CHECK_INTERNAL_POINTER(widget())
176 KviKvsObject * ob;
177 QString szTitle;
178 kvs_hobject_t hObject;
179 KVSO_PARAMETERS_BEGIN(c)
180 KVSO_PARAMETER("page_widget", KVS_PT_HOBJECT, 0, hObject)
181 KVSO_PARAMETER("title", KVS_PT_STRING, 0, szTitle)
182 KVSO_PARAMETERS_END(c)
183 ob = KviKvsKernel::instance()->objectController()->lookupObject(hObject);
184 if(!ob->object()->isWidgetType())
185 {
186 c->warning(__tr2qs_ctx("Widget object required", "objects"));
187 return true;
188 }
189 ((KviTalWizard *)widget())->setPageTitle(((QWidget *)(ob->object())), szTitle);
190 return true;
191 }
KVSO_CLASS_FUNCTION(wizard,setBackEnabled)192 KVSO_CLASS_FUNCTION(wizard, setBackEnabled)
193 {
194 CHECK_INTERNAL_POINTER(widget())
195 bool bEnabled;
196 KviKvsObject * ob;
197 kvs_hobject_t hObject;
198 KVSO_PARAMETERS_BEGIN(c)
199 KVSO_PARAMETER("page_widget", KVS_PT_HOBJECT, 0, hObject)
200 KVSO_PARAMETER("bEnabled", KVS_PT_BOOL, 0, bEnabled)
201 KVSO_PARAMETERS_END(c)
202 ob = KviKvsKernel::instance()->objectController()->lookupObject(hObject);
203 if(!ob->object()->isWidgetType())
204 {
205 c->warning(__tr2qs_ctx("Widget object required", "objects"));
206 return true;
207 }
208 ((KviTalWizard *)widget())->setBackEnabled(((QWidget *)(ob->object())), bEnabled);
209 return true;
210 }
211
KVSO_CLASS_FUNCTION(wizard,setNextEnabled)212 KVSO_CLASS_FUNCTION(wizard, setNextEnabled)
213 {
214 CHECK_INTERNAL_POINTER(widget())
215
216 bool bEnabled;
217 KviKvsObject * ob;
218 kvs_hobject_t hObject;
219 KVSO_PARAMETERS_BEGIN(c)
220 KVSO_PARAMETER("page_widget", KVS_PT_HOBJECT, 0, hObject)
221 KVSO_PARAMETER("bEnabled", KVS_PT_BOOL, 0, bEnabled)
222 KVSO_PARAMETERS_END(c)
223 ob = KviKvsKernel::instance()->objectController()->lookupObject(hObject);
224 if(!ob->object()->isWidgetType())
225 {
226 c->warning(__tr2qs_ctx("Widget object required", "objects"));
227 return true;
228 }
229 ((KviTalWizard *)widget())->setNextEnabled(((QWidget *)(ob->object())), bEnabled);
230 return true;
231 }
KVSO_CLASS_FUNCTION(wizard,setFinishEnabled)232 KVSO_CLASS_FUNCTION(wizard, setFinishEnabled)
233 {
234 CHECK_INTERNAL_POINTER(widget())
235
236 bool bEnabled;
237 KviKvsObject * ob;
238 kvs_hobject_t hObject;
239 KVSO_PARAMETERS_BEGIN(c)
240 KVSO_PARAMETER("page_widget", KVS_PT_HOBJECT, 0, hObject)
241 KVSO_PARAMETER("bEnabled", KVS_PT_BOOL, 0, bEnabled)
242 KVSO_PARAMETERS_END(c)
243 ob = KviKvsKernel::instance()->objectController()->lookupObject(hObject);
244 if(!ob->object()->isWidgetType())
245 {
246 c->warning(__tr2qs_ctx("Widget object required", "objects"));
247 return true;
248 }
249 ((KviTalWizard *)widget())->setFinishEnabled(((QWidget *)(ob->object())), bEnabled);
250 return true;
251 }
KVSO_CLASS_FUNCTION(wizard,setHelpEnabled)252 KVSO_CLASS_FUNCTION(wizard, setHelpEnabled)
253 {
254 CHECK_INTERNAL_POINTER(widget())
255
256 bool bEnabled;
257 KviKvsObject * ob;
258 kvs_hobject_t hObject;
259 KVSO_PARAMETERS_BEGIN(c)
260 KVSO_PARAMETER("page_widget", KVS_PT_HOBJECT, 0, hObject)
261 KVSO_PARAMETER("bEnabled", KVS_PT_BOOL, 0, bEnabled)
262 KVSO_PARAMETERS_END(c)
263 ob = KviKvsKernel::instance()->objectController()->lookupObject(hObject);
264 if(!ob->object()->isWidgetType())
265 {
266 c->warning(__tr2qs_ctx("Widget object required", "objects"));
267 return true;
268 }
269 ((KviTalWizard *)widget())->setHelpEnabled(((QWidget *)(ob->object())), bEnabled);
270 return true;
271 }
KVSO_CLASS_FUNCTION(wizard,setBackBtnText)272 KVSO_CLASS_FUNCTION(wizard, setBackBtnText)
273 {
274 CHECK_INTERNAL_POINTER(widget())
275
276 QString szText;
277 KVSO_PARAMETERS_BEGIN(c)
278 KVSO_PARAMETER("text", KVS_PT_STRING, 0, szText)
279 KVSO_PARAMETERS_END(c)
280 ((KviTalWizard *)widget())->KviTalWizard::backButton()->setText(szText);
281 return true;
282 }
KVSO_CLASS_FUNCTION(wizard,setNextBtnText)283 KVSO_CLASS_FUNCTION(wizard, setNextBtnText)
284 {
285 CHECK_INTERNAL_POINTER(widget())
286
287 QString szText;
288 KVSO_PARAMETERS_BEGIN(c)
289 KVSO_PARAMETER("text", KVS_PT_STRING, 0, szText)
290 KVSO_PARAMETERS_END(c)
291 ((KviTalWizard *)widget())->KviTalWizard::nextButton()->setText(szText);
292 return true;
293 }
KVSO_CLASS_FUNCTION(wizard,setHelpBtnText)294 KVSO_CLASS_FUNCTION(wizard, setHelpBtnText)
295 {
296 CHECK_INTERNAL_POINTER(widget())
297
298 QString szText;
299 KVSO_PARAMETERS_BEGIN(c)
300 KVSO_PARAMETER("text", KVS_PT_STRING, 0, szText)
301 KVSO_PARAMETERS_END(c)
302 ((KviTalWizard *)widget())->KviTalWizard::helpButton()->setText(szText);
303 return true;
304 }
KVSO_CLASS_FUNCTION(wizard,setFinishBtnText)305 KVSO_CLASS_FUNCTION(wizard, setFinishBtnText)
306 {
307 CHECK_INTERNAL_POINTER(widget())
308
309 QString szText;
310 KVSO_PARAMETERS_BEGIN(c)
311 KVSO_PARAMETER("text", KVS_PT_STRING, 0, szText)
312 KVSO_PARAMETERS_END(c)
313 ((KviTalWizard *)widget())->KviTalWizard::finishButton()->setText(szText);
314 return true;
315 }
accept()316 bool KvsObject_wizard::accept()
317 {
318 KviKvsVariantList * pParams = nullptr;
319 callFunction(this, "acceptEvent", nullptr, pParams);
320 return true;
321 }
reject()322 bool KvsObject_wizard::reject()
323 {
324 KviKvsVariantList * pParams = nullptr;
325 callFunction(this, "rejectEvent", nullptr, pParams);
326 return true;
327 }
KVSO_CLASS_FUNCTION(wizard,nextClickedEvent)328 KVSO_CLASS_FUNCTION(wizard, nextClickedEvent)
329 {
330 emitSignal("nextClicked", c);
331 return true;
332 }
333
nextClicked()334 void KvsObject_wizard::nextClicked()
335 {
336 KviKvsVariantList * params = nullptr;
337 callFunction(this, "nextClickedEvent", params);
338 }
KVSO_CLASS_FUNCTION(wizard,backClickedEvent)339 KVSO_CLASS_FUNCTION(wizard, backClickedEvent)
340 {
341 emitSignal("backClicked", c);
342 return true;
343 }
344
backClicked()345 void KvsObject_wizard::backClicked()
346 {
347 KviKvsVariantList * params = nullptr;
348 callFunction(this, "backClickedEvent", params);
349 }
KviKvsMdmWizard(QWidget * par,const char * name,KvsObject_wizard * parent)350 KviKvsMdmWizard::KviKvsMdmWizard(QWidget * par, const char * name, KvsObject_wizard * parent)
351 : KviTalWizard(par)
352 {
353 m_pParentScript = parent;
354 setObjectName(name);
355 connect(this->backButton(), SIGNAL(clicked()), this, SLOT(slotBackClicked()));
356 connect(this->nextButton(), SIGNAL(clicked()), this, SLOT(slotNextClicked()));
357 }
accept()358 void KviKvsMdmWizard::accept()
359 {
360 if(m_pParentScript->accept())
361 KviTalWizard::accept();
362 }
reject()363 void KviKvsMdmWizard::reject()
364 {
365 if(m_pParentScript->reject())
366 KviTalWizard::reject();
367 }
slotNextClicked()368 void KviKvsMdmWizard::slotNextClicked()
369 {
370 m_pParentScript->nextClicked();
371 }
slotBackClicked()372 void KviKvsMdmWizard::slotBackClicked()
373 {
374 m_pParentScript->backClicked();
375 }
376 KviKvsMdmWizard::~KviKvsMdmWizard()
377 = default;
378