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 | |
30 | namespace KPlato |
31 | { |
32 | |
33 | ViewListDialog::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 | |
53 | void ViewListDialog::slotViewListItemRemoved( ViewListItem * ) |
54 | { |
55 | reject(); |
56 | } |
57 | |
58 | void ViewListDialog::slotOk() { |
59 | if ( m_panel->ok() ) { |
60 | accept(); |
61 | } |
62 | } |
63 | |
64 | //------------------------ |
65 | AddViewPanel::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 | |
136 | void AddViewPanel::viewnameChanged( const QString &text ) |
137 | { |
138 | m_viewnameChanged = ! text.isEmpty(); |
139 | } |
140 | |
141 | void AddViewPanel::viewtipChanged( const QString &text ) |
142 | { |
143 | m_viewtipChanged = ! text.isEmpty(); |
144 | } |
145 | |
146 | void 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 | |
165 | void AddViewPanel::categoryChanged() |
166 | { |
167 | kDebug(planDbg())<<widget.category->currentText(); |
168 | fillAfter( m_categories.value( widget.category->currentText() ) ); |
169 | changed(); |
170 | } |
171 | |
172 | void 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 | |
192 | bool 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 | |
268 | void 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 | //------------------------ |
275 | ViewListEditViewDialog::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 | |
294 | void ViewListEditViewDialog::slotViewListItemRemoved( ViewListItem * ) |
295 | { |
296 | reject(); |
297 | } |
298 | |
299 | void ViewListEditViewDialog::slotOk() { |
300 | if ( m_panel->ok() ) { |
301 | accept(); |
302 | } |
303 | } |
304 | |
305 | EditViewPanel::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 | |
331 | bool 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 | |
355 | void EditViewPanel::changed() |
356 | { |
357 | bool disable = widget.viewname->text().isEmpty() | widget.category->currentText().isEmpty(); |
358 | emit enableButtonOk( ! disable ); |
359 | } |
360 | |
361 | void EditViewPanel::categoryChanged() |
362 | { |
363 | kDebug(planDbg())<<widget.category->currentText(); |
364 | fillAfter( m_categories.value( widget.category->currentText() ) ); |
365 | changed(); |
366 | } |
367 | |
368 | void 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 | //------------------------ |
389 | ViewListEditCategoryDialog::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 | |
408 | void ViewListEditCategoryDialog::slotViewListItemRemoved( ViewListItem * ) |
409 | { |
410 | reject(); |
411 | } |
412 | |
413 | void ViewListEditCategoryDialog::slotOk() { |
414 | if ( m_panel->ok() ) { |
415 | accept(); |
416 | } |
417 | } |
418 | |
419 | EditCategoryPanel::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 | |
436 | bool 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 | |
452 | void EditCategoryPanel::changed() |
453 | { |
454 | bool disable = widget.viewname->text().isEmpty(); |
455 | emit enableButtonOk( ! disable ); |
456 | } |
457 | |
458 | void 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 |
477 | ViewListReportsDialog::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 | |
497 | void ViewListReportsDialog::slotViewListItemRemoved( ViewListItem * ) |
498 | { |
499 | reject(); |
500 | } |
501 | |
502 | void ViewListReportsDialog::slotOk() { |
503 | if ( m_panel->ok() ) { |
504 | accept(); |
505 | } |
506 | } |
507 | |
508 | //------------------------ |
509 | AddReportsViewPanel::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 | |
545 | void AddReportsViewPanel::viewnameChanged( const QString &text ) |
546 | { |
547 | m_viewnameChanged = ! text.isEmpty(); |
548 | } |
549 | |
550 | void AddReportsViewPanel::viewtipChanged( const QString &text ) |
551 | { |
552 | m_viewtipChanged = ! text.isEmpty(); |
553 | } |
554 | |
555 | void 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 | |
574 | void AddReportsViewPanel::categoryChanged() |
575 | { |
576 | kDebug(planDbg())<<widget.category->currentText(); |
577 | fillAfter( m_categories.value( widget.category->currentText() ) ); |
578 | changed(); |
579 | } |
580 | |
581 | void 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 | |
601 | bool 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 | |
626 | void 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 | |