1/* This file is part of the KDE project
2 Copyright (C) 2007 - 2010 Dag Andersen <danders@get2net.dk>
3 Copyright (C) 2012 Dag Andersen <danders@get2net.dk>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/
20
21#include "kptviewlistdialog.h"
22#include "kptviewlist.h"
23#include "kptview.h"
24#include "reports/reportview.h"
25#include <kptdebug.h>
26
27#include <klocale.h>
28
29
30namespace KPlato
31{
32
33ViewListDialog::ViewListDialog( View *view, ViewListWidget &viewlist, QWidget *parent )
34 : KDialog(parent)
35{
36 setCaption( i18nc( "@title:window", "Add View") );
37 setButtons( KDialog::Ok | KDialog::Cancel );
38 setDefaultButton( Ok );
39
40 m_panel = new AddViewPanel( view, viewlist, this );
41
42 setMainWidget( m_panel );
43
44 enableButtonOk(false);
45
46 connect(this,SIGNAL(okClicked()),this,SLOT(slotOk()));
47 connect( m_panel, SIGNAL(enableButtonOk(bool)), SLOT(enableButtonOk(bool)) );
48 connect( m_panel, SIGNAL(viewCreated(ViewBase*)), SIGNAL(viewCreated(ViewBase*)) );
49
50 connect(&viewlist, SIGNAL(viewListItemRemoved(ViewListItem*)), SLOT(slotViewListItemRemoved(ViewListItem*)));
51}
52
53void ViewListDialog::slotViewListItemRemoved( ViewListItem * )
54{
55 reject();
56}
57
58void ViewListDialog::slotOk() {
59 if ( m_panel->ok() ) {
60 accept();
61 }
62}
63
64//------------------------
65AddViewPanel::AddViewPanel( View *view, ViewListWidget &viewlist, QWidget *parent )
66 : QWidget( parent ),
67 m_view( view ),
68 m_viewlist( viewlist ),
69 m_viewnameChanged( false ),
70 m_viewtipChanged( false )
71{
72 widget.setupUi( this );
73
74 // NOTE: these lists must match switch in ok() FIXME: refactor
75 m_viewtypes << "ResourceEditor"
76 << "TaskEditor"
77 << "CalendarEditor"
78 << "AccountsEditor"
79 << "DependencyEditor"
80 << "PertEditor"
81 << "ScheduleHandlerView"
82 << "TaskStatusView"
83 << "TaskView"
84 << "TaskWorkPackageView"
85 << "GanttView"
86 << "MilestoneGanttView"
87 << "ResourceAppointmentsView"
88 << "ResourceAppointmentsGanttView"
89 << "AccountsView"
90 << "ProjectStatusView"
91 << "PerformanceStatusView"
92 << "ReportView";
93 QStringList lst;
94 lst << i18n( "Resource Editor" )
95 << i18n( "Task Editor" )
96 << i18n( "Work & Vacation Editor" )
97 << i18n( "Accounts Editor" )
98 << i18n( "Dependency Editor (Graphic)" )
99 << i18n( "Dependency Editor (List)" )
100 << i18n( "Schedule Handler" )
101 << i18n( "Task Status" )
102 << i18n( "Task View" )
103 << i18n( "Work Package View" )
104 << i18n( "Gantt View" )
105 << i18n( "Milestone Gantt View" )
106 << i18n( "Resource Assignments" )
107 << i18n( "Resource Assignments (Gantt)" )
108 << i18n( "Cost Breakdown" )
109 << i18n( "Project Performance Chart" )
110 << i18n( "Tasks Performance Chart" )
111 << i18n( "Report" );
112
113 widget.viewtype->addItems( lst );
114
115 foreach ( ViewListItem *item, m_viewlist.categories() ) {
116 m_categories.insert( item->text( 0 ), item );
117 }
118 widget.category->addItems( m_categories.keys() );
119 ViewListItem *curr = m_viewlist.currentCategory();
120 if ( curr ) {
121 widget.category->setCurrentIndex( m_categories.values().indexOf( curr ) );
122 }
123 fillAfter( m_categories.value( widget.category->currentText() ) );
124
125 viewtypeChanged( widget.viewtype->currentIndex() );
126
127 connect( widget.viewname, SIGNAL(textChanged(QString)), SLOT(changed()) );
128 connect( widget.tooltip, SIGNAL(textChanged(QString)), SLOT(changed()) );
129 connect( widget.viewname, SIGNAL(textChanged(QString)), SLOT(viewnameChanged(QString)) );
130 connect( widget.tooltip, SIGNAL(textChanged(QString)), SLOT(viewtipChanged(QString)) );
131 connect( widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed()) );
132 connect( widget.viewtype, SIGNAL(currentIndexChanged(int)), SLOT(viewtypeChanged(int)) );
133 connect( widget.category, SIGNAL(editTextChanged(QString)), SLOT(categoryChanged()) );
134}
135
136void AddViewPanel::viewnameChanged( const QString &text )
137{
138 m_viewnameChanged = ! text.isEmpty();
139}
140
141void AddViewPanel::viewtipChanged( const QString &text )
142{
143 m_viewtipChanged = ! text.isEmpty();
144}
145
146void AddViewPanel::viewtypeChanged( int idx )
147{
148 ViewInfo vi = m_view->defaultViewInfo( m_viewtypes.value( idx ) );
149 if ( widget.viewname->text().isEmpty() ) {
150 m_viewnameChanged = false;
151 }
152 if ( ! m_viewnameChanged ) {
153 widget.viewname->setText( vi.name );
154 m_viewnameChanged = false;
155 }
156 if ( widget.tooltip->text().isEmpty() ) {
157 m_viewtipChanged = false;
158 }
159 if ( ! m_viewtipChanged ) {
160 widget.tooltip->setText( vi.tip );
161 m_viewtipChanged = false;
162 }
163}
164
165void AddViewPanel::categoryChanged()
166{
167 kDebug(planDbg())<<widget.category->currentText();
168 fillAfter( m_categories.value( widget.category->currentText() ) );
169 changed();
170}
171
172void AddViewPanel::fillAfter( ViewListItem *cat )
173{
174 kDebug(planDbg())<<cat;
175 widget.insertAfter->clear();
176 if ( cat ) {
177 widget.insertAfter->addItem( i18n( "Top" ) );
178// int idx = 0;
179 for ( int i = 0; i < cat->childCount(); ++i ) {
180 ViewListItem *itm = static_cast<ViewListItem*>( cat->child( i ) );
181 widget.insertAfter->addItem( itm->text( 0 ), QVariant::fromValue( (void*)itm ) );
182 }
183 if ( cat == m_viewlist.currentCategory() ) {
184 ViewListItem *v = m_viewlist.currentItem();
185 if ( v && v->type() != ViewListItem::ItemType_Category ) {
186 widget.insertAfter->setCurrentIndex( cat->indexOfChild( v ) + 1 );
187 }
188 }
189 }
190}
191
192bool AddViewPanel::ok()
193{
194 QString n = widget.category->currentText();
195 ViewListItem *curr = m_categories.value( n );
196 QString c = curr == 0 ? n : curr->tag();
197
198 ViewListItem *cat = m_viewlist.addCategory( c, n );
199 if ( cat == 0 ) {
200 return false;
201 }
202 ViewBase *v = 0;
203 int index = widget.insertAfter->currentIndex();
204 int viewtype = widget.viewtype->currentIndex();
205 switch ( viewtype ) {
206 case 0: { // Resource editor
207 v = m_view->createResourceEditor( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
208 break; }
209 case 1: { // Task editor
210 v = m_view->createTaskEditor( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
211 break; }
212 case 2: { // Work & Vacation Editor
213 v = m_view->createCalendarEditor( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
214 break; }
215 case 3: { // Accounts Editor
216 v = m_view->createAccountsEditor( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
217 break; }
218 case 4: { // Dependency Editor (Graphic)
219 v = m_view->createDependencyEditor( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
220 break; }
221 case 5: { // Dependency Editor (List)
222 v = m_view->createPertEditor( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
223 break; }
224 case 6: { // Schedules Handler
225 v = m_view->createScheduleHandler( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
226 break; }
227 case 7: { // Task status
228 v = m_view->createTaskStatusView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
229 break; }
230 case 8: { // Task status
231 v = m_view->createTaskView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
232 break; }
233 case 9: { // Task work package
234 v = m_view->createTaskWorkPackageView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
235 break; }
236 case 10: { // Gantt View
237 v = m_view->createGanttView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
238 break; }
239 case 11: { // Milestone Gantt View
240 v = m_view->createMilestoneGanttView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
241 break; }
242 case 12: { // Resource Assignments
243 v = m_view->createResourceAppointmentsView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
244 break; }
245 case 13: { // Resource Assignments (Gantt)
246 v = m_view->createResourceAppointmentsGanttView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
247 break; }
248 case 14: { // Cost Breakdown
249 v = m_view->createAccountsView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
250 break; }
251 case 15: { // Project Performance Chart
252 v = m_view->createProjectStatusView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
253 break; }
254 case 16: { // Task Performance Chart
255 v = m_view->createPerformanceStatusView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
256 break; }
257 case 17: { // Report view
258 v = m_view->createReportView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
259 break; }
260 default:
261 kError()<<"Unknown view type!";
262 break;
263 }
264 emit viewCreated( v );
265 return true;
266}
267
268void AddViewPanel::changed()
269{
270 bool disable = widget.viewname->text().isEmpty() | widget.viewtype->currentText().isEmpty() | widget.category->currentText().isEmpty();
271 emit enableButtonOk( ! disable );
272}
273
274//------------------------
275ViewListEditViewDialog::ViewListEditViewDialog( ViewListWidget &viewlist, ViewListItem *item, QWidget *parent )
276 : KDialog(parent)
277{
278 setCaption( i18nc( "@title:window", "Configure View" ) );
279 setButtons( KDialog::Ok | KDialog::Cancel );
280 setDefaultButton( Ok );
281
282 m_panel = new EditViewPanel( viewlist, item, this );
283
284 setMainWidget( m_panel );
285
286 enableButtonOk(false);
287
288 connect(this,SIGNAL(okClicked()),this,SLOT(slotOk()));
289 connect( m_panel, SIGNAL(enableButtonOk(bool)), SLOT(enableButtonOk(bool)) );
290
291 connect(&viewlist, SIGNAL(viewListItemRemoved(ViewListItem*)), SLOT(slotViewListItemRemoved(ViewListItem*)));
292}
293
294void ViewListEditViewDialog::slotViewListItemRemoved( ViewListItem * )
295{
296 reject();
297}
298
299void ViewListEditViewDialog::slotOk() {
300 if ( m_panel->ok() ) {
301 accept();
302 }
303}
304
305EditViewPanel::EditViewPanel( ViewListWidget &viewlist, ViewListItem *item, QWidget *parent )
306 : QWidget( parent ),
307 m_item( item ),
308 m_viewlist( viewlist )
309{
310 widget.setupUi( this );
311
312 widget.viewname->setText( item->text( 0 ) );
313 widget.tooltip->setText( item->toolTip( 0 ) );
314
315 foreach ( ViewListItem *item, m_viewlist.categories() ) {
316 m_categories.insert( item->text( 0 ), item );
317 }
318 widget.category->addItems( m_categories.keys() );
319 ViewListItem *curr = m_viewlist.currentCategory();
320 if ( curr ) {
321 widget.category->setCurrentIndex( m_categories.values().indexOf( curr ) );
322 }
323 categoryChanged();
324
325 connect( widget.viewname, SIGNAL(textChanged(QString)), SLOT(changed()) );
326 connect( widget.tooltip, SIGNAL(textChanged(QString)), SLOT(changed()) );
327 connect( widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed()) );
328 connect( widget.category, SIGNAL(editTextChanged(QString)), SLOT(categoryChanged()) );
329}
330
331bool EditViewPanel::ok()
332{
333 QString n = widget.category->currentText();
334 ViewListItem *curr = m_categories.value( n );
335 QString c = curr == 0 ? n : curr->tag();
336
337 ViewListItem *cat = m_viewlist.addCategory( c, n );
338 if ( cat == 0 ) {
339 kWarning()<<"No category";
340 return false;
341 }
342 if ( widget.viewname->text() != m_item->text( 0 ) ) {
343 m_item->setText( 0, widget.viewname->text() );
344 }
345 if ( widget.tooltip->text() != m_item->toolTip( 0 ) ) {
346 m_item->setToolTip( 0, widget.tooltip->text() );
347 }
348 m_viewlist.removeViewListItem( m_item );
349 int index = qMin( widget.insertAfter->currentIndex(), cat->childCount() );
350 m_viewlist.addViewListItem( m_item, cat, index );
351
352 return true;
353}
354
355void EditViewPanel::changed()
356{
357 bool disable = widget.viewname->text().isEmpty() | widget.category->currentText().isEmpty();
358 emit enableButtonOk( ! disable );
359}
360
361void EditViewPanel::categoryChanged()
362{
363 kDebug(planDbg())<<widget.category->currentText();
364 fillAfter( m_categories.value( widget.category->currentText() ) );
365 changed();
366}
367
368void EditViewPanel::fillAfter( ViewListItem *cat )
369{
370 kDebug(planDbg())<<cat;
371 widget.insertAfter->clear();
372 if ( cat ) {
373 widget.insertAfter->addItem( i18n( "Top" ) );
374// int idx = 0;
375 for ( int i = 0; i < cat->childCount(); ++i ) {
376 ViewListItem *itm = static_cast<ViewListItem*>( cat->child( i ) );
377 widget.insertAfter->addItem( itm->text( 0 ), QVariant::fromValue( (void*)itm ) );
378 }
379 if ( cat == m_viewlist.currentCategory() ) {
380 ViewListItem *v = m_viewlist.currentItem();
381 if ( v && v->type() != ViewListItem::ItemType_Category ) {
382 widget.insertAfter->setCurrentIndex( cat->indexOfChild( v ) + 1 );
383 }
384 }
385 }
386}
387
388//------------------------
389ViewListEditCategoryDialog::ViewListEditCategoryDialog( ViewListWidget &viewlist, ViewListItem *item, QWidget *parent )
390 : KDialog(parent)
391{
392 setCaption( i18nc( "@title:window", "Configure Category" ) );
393 setButtons( KDialog::Ok | KDialog::Cancel );
394 setDefaultButton( Ok );
395
396 m_panel = new EditCategoryPanel( viewlist, item, this );
397
398 setMainWidget( m_panel );
399
400 enableButtonOk(false);
401
402 connect(this,SIGNAL(okClicked()),this,SLOT(slotOk()));
403 connect( m_panel, SIGNAL(enableButtonOk(bool)), SLOT(enableButtonOk(bool)) );
404
405 connect(&viewlist, SIGNAL(viewListItemRemoved(ViewListItem*)), SLOT(slotViewListItemRemoved(ViewListItem*)));
406}
407
408void ViewListEditCategoryDialog::slotViewListItemRemoved( ViewListItem * )
409{
410 reject();
411}
412
413void ViewListEditCategoryDialog::slotOk() {
414 if ( m_panel->ok() ) {
415 accept();
416 }
417}
418
419EditCategoryPanel::EditCategoryPanel( ViewListWidget &viewlist, ViewListItem *item, QWidget *parent )
420 : QWidget( parent ),
421 m_item( item ),
422 m_viewlist( viewlist )
423{
424 widget.setupUi( this );
425
426 widget.viewname->setText( item->text( 0 ) );
427 widget.tooltip->setText( item->toolTip( 0 ) );
428
429 fillAfter();
430
431 connect( widget.viewname, SIGNAL(textChanged(QString)), SLOT(changed()) );
432 connect( widget.tooltip, SIGNAL(textChanged(QString)), SLOT(changed()) );
433 connect( widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed()) );
434}
435
436bool EditCategoryPanel::ok()
437{
438 if ( widget.viewname->text() != m_item->text( 0 ) ) {
439 m_item->setText( 0, widget.viewname->text() );
440 }
441 if ( widget.tooltip->text() != m_item->toolTip( 0 ) ) {
442 m_item->setToolTip( 0, widget.tooltip->text() );
443 }
444 bool ex = m_item->isExpanded();
445 m_viewlist.removeViewListItem( m_item );
446 int index = widget.insertAfter->currentIndex();
447 m_viewlist.addViewListItem( m_item, 0, index );
448 m_item->setExpanded( ex );
449 return true;
450}
451
452void EditCategoryPanel::changed()
453{
454 bool disable = widget.viewname->text().isEmpty();
455 emit enableButtonOk( ! disable );
456}
457
458void EditCategoryPanel::fillAfter()
459{
460 kDebug(planDbg());
461 widget.insertAfter->clear();
462 widget.insertAfter->addItem( i18n( "Top" ) );
463 int idx = 0;
464 QList<ViewListItem*> lst = m_viewlist.categories();
465 for ( int i = 0; i < lst.count(); ++i ) {
466 ViewListItem *itm = lst[ i ];
467 if ( m_item == itm ) {
468 idx = i;
469 } else {
470 widget.insertAfter->addItem( itm->text( 0 ), QVariant::fromValue( (void*)itm ) );
471 }
472 }
473 widget.insertAfter->setCurrentIndex( idx );
474}
475
476//------ Reports
477ViewListReportsDialog::ViewListReportsDialog( View *view, ViewListWidget &viewlist, QWidget *parent )
478 : KDialog(parent)
479{
480 setCaption( i18nc( "@title:window", "Add Report" ) );
481 setButtons( KDialog::Ok | KDialog::Cancel );
482 setDefaultButton( Ok );
483
484 m_panel = new AddReportsViewPanel( view, viewlist, this );
485
486 setMainWidget( m_panel );
487
488 enableButtonOk(true);
489
490 connect(this,SIGNAL(okClicked()),this,SLOT(slotOk()));
491 connect( m_panel, SIGNAL(enableButtonOk(bool)), SLOT(enableButtonOk(bool)) );
492 connect( m_panel, SIGNAL(viewCreated(ViewBase*)), SIGNAL(viewCreated(ViewBase*)) );
493
494 connect(&viewlist, SIGNAL(viewListItemRemoved(ViewListItem*)), SLOT(slotViewListItemRemoved(ViewListItem*)));
495}
496
497void ViewListReportsDialog::slotViewListItemRemoved( ViewListItem * )
498{
499 reject();
500}
501
502void ViewListReportsDialog::slotOk() {
503 if ( m_panel->ok() ) {
504 accept();
505 }
506}
507
508//------------------------
509AddReportsViewPanel::AddReportsViewPanel( View *view, ViewListWidget &viewlist, QWidget *parent )
510 : QWidget( parent ),
511 m_view( view ),
512 m_viewlist( viewlist ),
513 m_viewnameChanged( false ),
514 m_viewtipChanged( false )
515{
516 widget.setupUi( this );
517
518 // NOTE: these lists must match switch in ok() FIXME: refactor
519 m_viewtypes << "ReportView";
520 QStringList lst;
521 lst << i18n( "Report" );
522 widget.viewtype->addItems( lst );
523
524 foreach ( ViewListItem *item, m_viewlist.categories() ) {
525 m_categories.insert( item->text( 0 ), item );
526 }
527 widget.category->addItems( m_categories.keys() );
528 ViewListItem *curr = m_viewlist.currentCategory();
529 if ( curr ) {
530 widget.category->setCurrentIndex( m_categories.values().indexOf( curr ) );
531 }
532 fillAfter( m_categories.value( widget.category->currentText() ) );
533
534 viewtypeChanged( widget.viewtype->currentIndex() );
535
536 connect( widget.viewname, SIGNAL(textChanged(QString)), SLOT(changed()) );
537 connect( widget.tooltip, SIGNAL(textChanged(QString)), SLOT(changed()) );
538 connect( widget.viewname, SIGNAL(textChanged(QString)), SLOT(viewnameChanged(QString)) );
539 connect( widget.tooltip, SIGNAL(textChanged(QString)), SLOT(viewtipChanged(QString)) );
540 connect( widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed()) );
541 connect( widget.viewtype, SIGNAL(currentIndexChanged(int)), SLOT(viewtypeChanged(int)) );
542 connect( widget.category, SIGNAL(editTextChanged(QString)), SLOT(categoryChanged()) );
543}
544
545void AddReportsViewPanel::viewnameChanged( const QString &text )
546{
547 m_viewnameChanged = ! text.isEmpty();
548}
549
550void AddReportsViewPanel::viewtipChanged( const QString &text )
551{
552 m_viewtipChanged = ! text.isEmpty();
553}
554
555void AddReportsViewPanel::viewtypeChanged( int idx )
556{
557 ViewInfo vi = m_view->defaultViewInfo( m_viewtypes.value( idx ) );
558 if ( widget.viewname->text().isEmpty() ) {
559 m_viewnameChanged = false;
560 }
561 if ( ! m_viewnameChanged ) {
562 widget.viewname->setText( vi.name );
563 m_viewnameChanged = false;
564 }
565 if ( widget.tooltip->text().isEmpty() ) {
566 m_viewtipChanged = false;
567 }
568 if ( ! m_viewtipChanged ) {
569 widget.tooltip->setText( vi.tip );
570 m_viewtipChanged = false;
571 }
572}
573
574void AddReportsViewPanel::categoryChanged()
575{
576 kDebug(planDbg())<<widget.category->currentText();
577 fillAfter( m_categories.value( widget.category->currentText() ) );
578 changed();
579}
580
581void AddReportsViewPanel::fillAfter( ViewListItem *cat )
582{
583 kDebug(planDbg())<<cat;
584 widget.insertAfter->clear();
585 if ( cat ) {
586 widget.insertAfter->addItem( i18n( "Top" ) );
587// int idx = 0;
588 for ( int i = 0; i < cat->childCount(); ++i ) {
589 ViewListItem *itm = static_cast<ViewListItem*>( cat->child( i ) );
590 widget.insertAfter->addItem( itm->text( 0 ), QVariant::fromValue( (void*)itm ) );
591 }
592 if ( cat == m_viewlist.currentCategory() ) {
593 ViewListItem *v = m_viewlist.currentItem();
594 if ( v && v->type() != ViewListItem::ItemType_Category ) {
595 widget.insertAfter->setCurrentIndex( cat->indexOfChild( v ) + 1 );
596 }
597 }
598 }
599}
600
601bool AddReportsViewPanel::ok()
602{
603 QString n = widget.category->currentText();
604 ViewListItem *curr = m_categories.value( n );
605 QString c = curr == 0 ? n : curr->tag();
606
607 ViewListItem *cat = m_viewlist.addCategory( c, n );
608 if ( cat == 0 ) {
609 return false;
610 }
611 ViewBase *v = 0;
612 int index = widget.insertAfter->currentIndex();
613 int viewtype = widget.viewtype->currentIndex();
614 switch ( viewtype ) {
615 case 0: { // Report view
616 v = m_view->createReportView( cat, m_viewtypes.value( viewtype ), widget.viewname->text(), widget.tooltip->text(), index );
617 break; }
618 default:
619 kError()<<"Unknown view type!";
620 break;
621 }
622 emit viewCreated( v );
623 return true;
624}
625
626void AddReportsViewPanel::changed()
627{
628 bool disable = widget.viewname->text().isEmpty() | widget.viewtype->currentText().isEmpty() | widget.category->currentText().isEmpty();
629 emit enableButtonOk( ! disable );
630}
631
632
633
634} //KPlato namespace
635
636#include "kptviewlistdialog.moc"
637