File indexing completed on 2024-04-28 16:24:40
0001 /* This file is part of the KDE project 0002 Copyright (C) 2007 - 2010 Dag Andersen <danders@get2net.dk> 0003 Copyright (C) 2012 Dag Andersen <danders@get2net.dk> 0004 0005 This library is free software; you can redistribute it and/or 0006 modify it under the terms of the GNU Library General Public 0007 License as published by the Free Software Foundation; either 0008 version 2 of the License, or (at your option) any later version. 0009 0010 This library is distributed in the hope that it will be useful, 0011 but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0013 Library General Public License for more details. 0014 0015 You should have received a copy of the GNU Library General Public License 0016 along with this library; see the file COPYING.LIB. If not, write to 0017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0018 Boston, MA 02110-1301, USA. 0019 */ 0020 0021 // clazy:excludeall=qstring-arg 0022 #include "kptviewlistdialog.h" 0023 #include "kptviewlist.h" 0024 #include "kptview.h" 0025 0026 #ifdef PLAN_USE_KREPORT 0027 #include "reports/reportview.h" 0028 #endif 0029 0030 #include <kptdebug.h> 0031 0032 #include <KLocalizedString> 0033 0034 #include <QTextEdit> 0035 0036 namespace KPlato 0037 { 0038 0039 ViewListDialog::ViewListDialog(View *view, ViewListWidget &viewlist, QWidget *parent) 0040 : KoDialog(parent) 0041 { 0042 setCaption(xi18nc("@title:window", "Add View")); 0043 setButtons(KoDialog::Ok | KoDialog::Cancel); 0044 setDefaultButton(Ok); 0045 0046 m_panel = new AddViewPanel(view, viewlist, this); 0047 0048 setMainWidget(m_panel); 0049 0050 enableButtonOk(false); 0051 0052 connect(this,&KoDialog::okClicked,this,&ViewListDialog::slotOk); 0053 connect(m_panel, &AddViewPanel::enableButtonOk, this, &KoDialog::enableButtonOk); 0054 connect(m_panel, &AddViewPanel::viewCreated, this, &ViewListDialog::viewCreated); 0055 0056 connect(&viewlist, &ViewListWidget::viewListItemRemoved, this, &ViewListDialog::slotViewListItemRemoved); 0057 } 0058 0059 void ViewListDialog::slotViewListItemRemoved(ViewListItem *) 0060 { 0061 reject(); 0062 } 0063 0064 void ViewListDialog::slotOk() { 0065 if (m_panel->ok()) { 0066 accept(); 0067 } 0068 } 0069 0070 //------------------------ 0071 AddViewPanel::AddViewPanel(View *view, ViewListWidget &viewlist, QWidget *parent) 0072 : QWidget(parent), 0073 m_view(view), 0074 m_viewlist(viewlist), 0075 m_viewnameChanged(false), 0076 m_viewtipChanged(false) 0077 { 0078 widget.setupUi(this); 0079 0080 // NOTE: these lists must match switch in ok() FIXME: refactor 0081 m_viewtypes << "ResourceEditor" 0082 << "TaskEditor" 0083 << "CalendarEditor" 0084 << "AccountsEditor" 0085 << "DependencyEditor" 0086 << "PertEditor" 0087 << "ScheduleHandlerView" 0088 << "TaskStatusView" 0089 << "TaskView" 0090 << "TaskWorkPackageView" 0091 << "GanttView" 0092 << "MilestoneGanttView" 0093 << "ResourceAppointmentsView" 0094 << "ResourceAppointmentsGanttView" 0095 << "AccountsView" 0096 << "ProjectStatusView" 0097 << "PerformanceStatusView" 0098 << "ReportsGeneratorView"; 0099 #ifdef PLAN_USE_KREPORT 0100 m_viewtypes << "ReportView"; 0101 #endif 0102 QStringList lst; 0103 lst << i18n("Resource Editor") 0104 << i18n("Task Editor") 0105 << i18n("Work & Vacation Editor") 0106 << i18n("Accounts Editor") 0107 << i18n("Dependency Editor (Graphic)") 0108 << i18n("Dependency Editor (List)") 0109 << i18n("Schedule Handler") 0110 << i18n("Task Status") 0111 << i18n("Task View") 0112 << i18n("Work Package View") 0113 << i18n("Gantt View") 0114 << i18n("Milestone Gantt View") 0115 << i18n("Resource Assignments") 0116 << i18n("Resource Assignments (Gantt)") 0117 << i18n("Cost Breakdown") 0118 << i18n("Project Performance Chart") 0119 << i18n("Tasks Performance Chart") 0120 << i18n("Reports generator"); 0121 #ifdef PLAN_USE_KREPORT 0122 lst << i18n("Report"); 0123 #endif 0124 widget.viewtype->addItems(lst); 0125 0126 foreach (ViewListItem *item, m_viewlist.categories()) { 0127 m_categories.insert(item->text(0), item); 0128 } 0129 widget.category->addItems(m_categories.keys()); 0130 ViewListItem *curr = m_viewlist.currentCategory(); 0131 if (curr) { 0132 const QList<ViewListItem*> &items = m_categories.values(); 0133 widget.category->setCurrentIndex(items.indexOf(curr)); 0134 } 0135 fillAfter(m_categories.value(widget.category->currentText())); 0136 0137 viewtypeChanged(widget.viewtype->currentIndex()); 0138 0139 connect(widget.viewname, &QLineEdit::textChanged, this, &AddViewPanel::changed); 0140 connect(widget.tooltip, &QLineEdit::textChanged, this, &AddViewPanel::changed); 0141 connect(widget.viewname, &QLineEdit::textChanged, this, &AddViewPanel::viewnameChanged); 0142 connect(widget.tooltip, &QLineEdit::textChanged, this, &AddViewPanel::viewtipChanged); 0143 connect(widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed())); 0144 connect(widget.viewtype, SIGNAL(currentIndexChanged(int)), SLOT(viewtypeChanged(int))); 0145 connect(widget.category, &QComboBox::editTextChanged, this, &AddViewPanel::categoryChanged); 0146 0147 QString categoryWhatsThis = xi18nc("@info:whatsthis", 0148 "<title>The category of the view</title><nl/>" 0149 "The view is placed under this category in the view selector.<nl/>" 0150 "You can edit the category name to create a new category."); 0151 widget.categoryLabel->setWhatsThis(categoryWhatsThis); 0152 widget.category->setWhatsThis(categoryWhatsThis); 0153 0154 QTimer::singleShot(0, this, &AddViewPanel::changed); 0155 } 0156 0157 void AddViewPanel::viewnameChanged(const QString &text) 0158 { 0159 m_viewnameChanged = ! text.isEmpty(); 0160 } 0161 0162 void AddViewPanel::viewtipChanged(const QString &text) 0163 { 0164 m_viewtipChanged = ! text.isEmpty(); 0165 } 0166 0167 void AddViewPanel::viewtypeChanged(int idx) 0168 { 0169 ViewInfo vi = m_view->defaultViewInfo(m_viewtypes.value(idx)); 0170 if (widget.viewname->text().isEmpty()) { 0171 m_viewnameChanged = false; 0172 } 0173 if (! m_viewnameChanged) { 0174 widget.viewname->setText(vi.name); 0175 m_viewnameChanged = false; 0176 } 0177 if (widget.tooltip->text().isEmpty()) { 0178 m_viewtipChanged = false; 0179 } 0180 if (! m_viewtipChanged) { 0181 QTextEdit e; 0182 e.setText(vi.tip); 0183 widget.tooltip->setText(e.toPlainText()); 0184 m_viewtipChanged = false; 0185 } 0186 } 0187 0188 void AddViewPanel::categoryChanged() 0189 { 0190 debugPlan<<widget.category->currentText(); 0191 fillAfter(m_categories.value(widget.category->currentText())); 0192 changed(); 0193 } 0194 0195 void AddViewPanel::fillAfter(ViewListItem *cat) 0196 { 0197 debugPlan<<cat; 0198 widget.insertAfter->clear(); 0199 if (cat) { 0200 widget.insertAfter->addItem(i18n("Top")); 0201 // int idx = 0; 0202 for (int i = 0; i < cat->childCount(); ++i) { 0203 ViewListItem *itm = static_cast<ViewListItem*>(cat->child(i)); 0204 widget.insertAfter->addItem(itm->text(0), QVariant::fromValue((void*)itm)); 0205 } 0206 if (cat == m_viewlist.currentCategory()) { 0207 ViewListItem *v = m_viewlist.currentItem(); 0208 if (v && v->type() != ViewListItem::ItemType_Category) { 0209 widget.insertAfter->setCurrentIndex(cat->indexOfChild(v) + 1); 0210 } 0211 } 0212 } 0213 } 0214 0215 bool AddViewPanel::ok() 0216 { 0217 QString n = widget.category->currentText(); 0218 ViewListItem *curr = m_categories.value(n); 0219 QString c = curr == 0 ? n : curr->tag(); 0220 0221 ViewListItem *cat = m_viewlist.addCategory(c, n); 0222 if (cat == 0) { 0223 return false; 0224 } 0225 ViewBase *v = 0; 0226 int index = widget.insertAfter->currentIndex(); 0227 int viewtype = widget.viewtype->currentIndex(); 0228 switch (viewtype) { 0229 case 0: { // Resource editor 0230 v = m_view->createResourceEditor(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0231 break; } 0232 case 1: { // Task editor 0233 v = m_view->createTaskEditor(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0234 break; } 0235 case 2: { // Work & Vacation Editor 0236 v = m_view->createCalendarEditor(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0237 break; } 0238 case 3: { // Accounts Editor 0239 v = m_view->createAccountsEditor(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0240 break; } 0241 case 4: { // Dependency Editor (Graphic) 0242 v = m_view->createDependencyEditor(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0243 break; } 0244 case 5: { // Dependency Editor (List) 0245 v = m_view->createPertEditor(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0246 break; } 0247 case 6: { // Schedules Handler 0248 v = m_view->createScheduleHandler(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0249 break; } 0250 case 7: { // Task status 0251 v = m_view->createTaskStatusView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0252 break; } 0253 case 8: { // Task status 0254 v = m_view->createTaskView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0255 break; } 0256 case 9: { // Task work package 0257 v = m_view->createTaskWorkPackageView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0258 break; } 0259 case 10: { // Gantt View 0260 v = m_view->createGanttView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0261 break; } 0262 case 11: { // Milestone Gantt View 0263 v = m_view->createMilestoneGanttView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0264 break; } 0265 case 12: { // Resource Assignments 0266 v = m_view->createResourceAppointmentsView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0267 break; } 0268 case 13: { // Resource Assignments (Gantt) 0269 v = m_view->createResourceAppointmentsGanttView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0270 break; } 0271 case 14: { // Cost Breakdown 0272 v = m_view->createAccountsView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0273 break; } 0274 case 15: { // Project Performance Chart 0275 v = m_view->createProjectStatusView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0276 break; } 0277 case 16: { // Task Performance Chart 0278 v = m_view->createPerformanceStatusView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0279 break; } 0280 case 17: { // Reports generator 0281 v = m_view->createReportsGeneratorView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0282 break; } 0283 #ifdef PLAN_USE_KREPORT 0284 case 18: { // Report view 0285 v = m_view->createReportView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0286 break; } 0287 #endif 0288 default: 0289 errorPlan<<"Unknown view type!"; 0290 break; 0291 } 0292 emit viewCreated(v); 0293 return true; 0294 } 0295 0296 void AddViewPanel::changed() 0297 { 0298 bool disable = widget.viewname->text().isEmpty() | widget.viewtype->currentText().isEmpty() | widget.category->currentText().isEmpty(); 0299 emit enableButtonOk(! disable); 0300 } 0301 0302 //------------------------ 0303 ViewListEditViewDialog::ViewListEditViewDialog(ViewListWidget &viewlist, ViewListItem *item, QWidget *parent) 0304 : KoDialog(parent) 0305 { 0306 setCaption(xi18nc("@title:window", "Configure View")); 0307 setButtons(KoDialog::Ok | KoDialog::Cancel); 0308 setDefaultButton(Ok); 0309 0310 m_panel = new EditViewPanel(viewlist, item, this); 0311 0312 setMainWidget(m_panel); 0313 0314 enableButtonOk(false); 0315 0316 connect(this,&KoDialog::okClicked,this,&ViewListEditViewDialog::slotOk); 0317 connect(m_panel, &EditViewPanel::enableButtonOk, this, &KoDialog::enableButtonOk); 0318 0319 connect(&viewlist, &ViewListWidget::viewListItemRemoved, this, &ViewListEditViewDialog::slotViewListItemRemoved); 0320 } 0321 0322 void ViewListEditViewDialog::slotViewListItemRemoved(ViewListItem *) 0323 { 0324 reject(); 0325 } 0326 0327 void ViewListEditViewDialog::slotOk() { 0328 if (m_panel->ok()) { 0329 accept(); 0330 } 0331 } 0332 0333 EditViewPanel::EditViewPanel(ViewListWidget &viewlist, ViewListItem *item, QWidget *parent) 0334 : QWidget(parent), 0335 m_item(item), 0336 m_viewlist(viewlist) 0337 { 0338 widget.setupUi(this); 0339 0340 widget.viewname->setText(item->text(0)); 0341 QTextEdit e; 0342 e.setText(item->toolTip(0)); 0343 widget.tooltip->setText(e.toPlainText()); 0344 0345 foreach (ViewListItem *item, m_viewlist.categories()) { 0346 m_categories.insert(item->text(0), item); 0347 } 0348 widget.category->addItems(m_categories.keys()); 0349 ViewListItem *curr = m_viewlist.currentCategory(); 0350 if (curr) { 0351 const QList<ViewListItem*> &items = m_categories.values(); 0352 widget.category->setCurrentIndex(items.indexOf(curr)); 0353 } 0354 categoryChanged(); 0355 0356 connect(widget.viewname, &QLineEdit::textChanged, this, &EditViewPanel::changed); 0357 connect(widget.tooltip, &QLineEdit::textChanged, this, &EditViewPanel::changed); 0358 connect(widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed())); 0359 connect(widget.category, &QComboBox::editTextChanged, this, &EditViewPanel::categoryChanged); 0360 0361 QString categoryWhatsThis = xi18nc("@info:whatsthis", 0362 "<title>The category of the view</title><nl/>" 0363 "The view is placed under this category in the view selector.<nl/>" 0364 "Selecting a different category will move the view to the new category.<nl/>" 0365 "You can edit the category name to create a new category."); 0366 widget.categoryLabel->setWhatsThis(categoryWhatsThis); 0367 widget.category->setWhatsThis(categoryWhatsThis); 0368 } 0369 0370 bool EditViewPanel::ok() 0371 { 0372 QString n = widget.category->currentText(); 0373 ViewListItem *curr = m_categories.value(n); 0374 QString c = curr == 0 ? n : curr->tag(); 0375 0376 ViewListItem *cat = m_viewlist.addCategory(c, n); 0377 if (cat == 0) { 0378 warnPlan<<"No category"; 0379 return false; 0380 } 0381 if (widget.viewname->text() != m_item->text(0)) { 0382 m_item->setText(0, widget.viewname->text()); 0383 } 0384 if (widget.tooltip->text() != m_item->toolTip(0)) { 0385 m_item->setToolTip(0, widget.tooltip->text()); 0386 } 0387 m_viewlist.removeViewListItem(m_item); 0388 int index = qMin(widget.insertAfter->currentIndex(), cat->childCount()); 0389 m_viewlist.addViewListItem(m_item, cat, index); 0390 0391 return true; 0392 } 0393 0394 void EditViewPanel::changed() 0395 { 0396 bool disable = widget.viewname->text().isEmpty() | widget.category->currentText().isEmpty(); 0397 emit enableButtonOk(! disable); 0398 } 0399 0400 void EditViewPanel::categoryChanged() 0401 { 0402 debugPlan<<widget.category->currentText(); 0403 fillAfter(m_categories.value(widget.category->currentText())); 0404 changed(); 0405 } 0406 0407 void EditViewPanel::fillAfter(ViewListItem *cat) 0408 { 0409 debugPlan<<cat; 0410 widget.insertAfter->clear(); 0411 if (cat) { 0412 widget.insertAfter->addItem(i18n("Top")); 0413 // int idx = 0; 0414 for (int i = 0; i < cat->childCount(); ++i) { 0415 ViewListItem *itm = static_cast<ViewListItem*>(cat->child(i)); 0416 widget.insertAfter->addItem(itm->text(0), QVariant::fromValue((void*)itm)); 0417 } 0418 if (cat == m_viewlist.currentCategory()) { 0419 ViewListItem *v = m_viewlist.currentItem(); 0420 if (v && v->type() != ViewListItem::ItemType_Category) { 0421 widget.insertAfter->setCurrentIndex(cat->indexOfChild(v) + 1); 0422 } 0423 } 0424 } 0425 } 0426 0427 //------------------------ 0428 ViewListEditCategoryDialog::ViewListEditCategoryDialog(ViewListWidget &viewlist, ViewListItem *item, QWidget *parent) 0429 : KoDialog(parent) 0430 { 0431 setCaption(xi18nc("@title:window", "Configure Category")); 0432 setButtons(KoDialog::Ok | KoDialog::Cancel); 0433 setDefaultButton(Ok); 0434 0435 m_panel = new EditCategoryPanel(viewlist, item, this); 0436 0437 setMainWidget(m_panel); 0438 0439 enableButtonOk(false); 0440 0441 connect(this,&KoDialog::okClicked,this,&ViewListEditCategoryDialog::slotOk); 0442 connect(m_panel, &EditCategoryPanel::enableButtonOk, this, &KoDialog::enableButtonOk); 0443 0444 connect(&viewlist, &ViewListWidget::viewListItemRemoved, this, &ViewListEditCategoryDialog::slotViewListItemRemoved); 0445 } 0446 0447 void ViewListEditCategoryDialog::slotViewListItemRemoved(ViewListItem *) 0448 { 0449 reject(); 0450 } 0451 0452 void ViewListEditCategoryDialog::slotOk() { 0453 if (m_panel->ok()) { 0454 accept(); 0455 } 0456 } 0457 0458 EditCategoryPanel::EditCategoryPanel(ViewListWidget &viewlist, ViewListItem *item, QWidget *parent) 0459 : QWidget(parent), 0460 m_item(item), 0461 m_viewlist(viewlist) 0462 { 0463 widget.setupUi(this); 0464 0465 widget.viewname->setText(item->text(0)); 0466 QTextEdit e; 0467 e.setText(item->toolTip(0)); 0468 widget.tooltip->setText(e.toPlainText()); 0469 0470 fillAfter(); 0471 0472 connect(widget.viewname, &QLineEdit::textChanged, this, &EditCategoryPanel::changed); 0473 connect(widget.tooltip, &QLineEdit::textChanged, this, &EditCategoryPanel::changed); 0474 connect(widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed())); 0475 } 0476 0477 bool EditCategoryPanel::ok() 0478 { 0479 if (widget.viewname->text() != m_item->text(0)) { 0480 m_item->setText(0, widget.viewname->text()); 0481 } 0482 if (widget.tooltip->text() != m_item->toolTip(0)) { 0483 m_item->setToolTip(0, widget.tooltip->text()); 0484 } 0485 bool ex = m_item->isExpanded(); 0486 m_viewlist.removeViewListItem(m_item); 0487 int index = widget.insertAfter->currentIndex(); 0488 m_viewlist.addViewListItem(m_item, 0, index); 0489 m_item->setExpanded(ex); 0490 return true; 0491 } 0492 0493 void EditCategoryPanel::changed() 0494 { 0495 bool disable = widget.viewname->text().isEmpty(); 0496 emit enableButtonOk(! disable); 0497 } 0498 0499 void EditCategoryPanel::fillAfter() 0500 { 0501 debugPlan; 0502 widget.insertAfter->clear(); 0503 widget.insertAfter->addItem(i18n("Top")); 0504 int idx = 0; 0505 QList<ViewListItem*> lst = m_viewlist.categories(); 0506 for (int i = 0; i < lst.count(); ++i) { 0507 ViewListItem *itm = lst[ i ]; 0508 if (m_item == itm) { 0509 idx = i; 0510 } else { 0511 widget.insertAfter->addItem(itm->text(0), QVariant::fromValue((void*)itm)); 0512 } 0513 } 0514 widget.insertAfter->setCurrentIndex(idx); 0515 } 0516 0517 #ifdef PLAN_USE_KREPORT 0518 //------ Reports 0519 ViewListReportsDialog::ViewListReportsDialog(View *view, ViewListWidget &viewlist, const QDomDocument &doc, QWidget *parent) 0520 : KoDialog(parent) 0521 { 0522 setCaption(xi18nc("@title:window", "Add Report")); 0523 setButtons(KoDialog::Ok | KoDialog::Cancel); 0524 setDefaultButton(Ok); 0525 0526 m_panel = new AddReportsViewPanel(view, viewlist, doc, this); 0527 0528 setMainWidget(m_panel); 0529 0530 enableButtonOk(true); 0531 0532 connect(this,SIGNAL(okClicked()),this,SLOT(slotOk())); 0533 connect(m_panel, SIGNAL(enableButtonOk(bool)), SLOT(enableButtonOk(bool))); 0534 connect(m_panel, SIGNAL(viewCreated(KPlato::ViewBase*)), SIGNAL(viewCreated(KPlato::ViewBase*))); 0535 0536 connect(&viewlist, SIGNAL(viewListItemRemoved(KPlato::ViewListItem*)), SLOT(slotViewListItemRemoved(KPlato::ViewListItem*))); 0537 } 0538 0539 void ViewListReportsDialog::slotViewListItemRemoved(ViewListItem *) 0540 { 0541 reject(); 0542 } 0543 0544 void ViewListReportsDialog::slotOk() { 0545 if (m_panel->ok()) { 0546 accept(); 0547 } 0548 } 0549 0550 //------------------------ 0551 AddReportsViewPanel::AddReportsViewPanel(View *view, ViewListWidget &viewlist, const QDomDocument &doc, QWidget *parent) 0552 : QWidget(parent), 0553 m_view(view), 0554 m_viewlist(viewlist), 0555 m_viewnameChanged(false), 0556 m_viewtipChanged(false), 0557 m_data(doc) 0558 { 0559 widget.setupUi(this); 0560 0561 // NOTE: these lists must match switch in ok() FIXME: refactor 0562 m_viewtypes << "ReportView"; 0563 QStringList lst; 0564 lst << xi18n("Report"); 0565 widget.viewtype->addItems(lst); 0566 0567 foreach (ViewListItem *item, m_viewlist.categories()) { 0568 m_categories.insert(item->text(0), item); 0569 } 0570 widget.category->addItems(m_categories.keys()); 0571 ViewListItem *curr = m_viewlist.currentCategory(); 0572 if (curr) { 0573 widget.category->setCurrentIndex(m_categories.values().indexOf(curr)); 0574 } 0575 fillAfter(m_categories.value(widget.category->currentText())); 0576 0577 viewtypeChanged(widget.viewtype->currentIndex()); 0578 0579 connect(widget.viewname, SIGNAL(textChanged(QString)), SLOT(changed())); 0580 connect(widget.tooltip, SIGNAL(textChanged(QString)), SLOT(changed())); 0581 connect(widget.viewname, SIGNAL(textChanged(QString)), SLOT(viewnameChanged(QString))); 0582 connect(widget.tooltip, SIGNAL(textChanged(QString)), SLOT(viewtipChanged(QString))); 0583 connect(widget.insertAfter, SIGNAL(currentIndexChanged(int)), SLOT(changed())); 0584 connect(widget.viewtype, SIGNAL(currentIndexChanged(int)), SLOT(viewtypeChanged(int))); 0585 connect(widget.category, SIGNAL(editTextChanged(QString)), SLOT(categoryChanged())); 0586 } 0587 0588 void AddReportsViewPanel::viewnameChanged(const QString &text) 0589 { 0590 m_viewnameChanged = ! text.isEmpty(); 0591 } 0592 0593 void AddReportsViewPanel::viewtipChanged(const QString &text) 0594 { 0595 m_viewtipChanged = ! text.isEmpty(); 0596 } 0597 0598 void AddReportsViewPanel::viewtypeChanged(int idx) 0599 { 0600 ViewInfo vi = m_view->defaultViewInfo(m_viewtypes.value(idx)); 0601 if (widget.viewname->text().isEmpty()) { 0602 m_viewnameChanged = false; 0603 } 0604 if (! m_viewnameChanged) { 0605 widget.viewname->setText(vi.name); 0606 m_viewnameChanged = false; 0607 } 0608 if (widget.tooltip->text().isEmpty()) { 0609 m_viewtipChanged = false; 0610 } 0611 if (! m_viewtipChanged) { 0612 QTextEdit e; 0613 e.setText(vi.tip); 0614 widget.tooltip->setText(e.toPlainText()); 0615 m_viewtipChanged = false; 0616 } 0617 } 0618 0619 void AddReportsViewPanel::categoryChanged() 0620 { 0621 debugPlan<<widget.category->currentText(); 0622 fillAfter(m_categories.value(widget.category->currentText())); 0623 changed(); 0624 } 0625 0626 void AddReportsViewPanel::fillAfter(ViewListItem *cat) 0627 { 0628 debugPlan<<cat; 0629 widget.insertAfter->clear(); 0630 if (cat) { 0631 widget.insertAfter->addItem(i18n("Top")); 0632 // int idx = 0; 0633 for (int i = 0; i < cat->childCount(); ++i) { 0634 ViewListItem *itm = static_cast<ViewListItem*>(cat->child(i)); 0635 widget.insertAfter->addItem(itm->text(0), QVariant::fromValue((void*)itm)); 0636 } 0637 if (cat == m_viewlist.currentCategory()) { 0638 ViewListItem *v = m_viewlist.currentItem(); 0639 if (v && v->type() != ViewListItem::ItemType_Category) { 0640 widget.insertAfter->setCurrentIndex(cat->indexOfChild(v) + 1); 0641 } 0642 } 0643 } 0644 } 0645 0646 bool AddReportsViewPanel::ok() 0647 { 0648 QString n = widget.category->currentText(); 0649 ViewListItem *curr = m_categories.value(n); 0650 QString c = curr == 0 ? n : curr->tag(); 0651 0652 ViewListItem *cat = m_viewlist.addCategory(c, n); 0653 if (cat == 0) { 0654 return false; 0655 } 0656 ViewBase *v = 0; 0657 int index = widget.insertAfter->currentIndex(); 0658 int viewtype = widget.viewtype->currentIndex(); 0659 switch (viewtype) { 0660 case 0: { // Report view 0661 v = m_view->createReportView(cat, m_viewtypes.value(viewtype), widget.viewname->text(), widget.tooltip->text(), index); 0662 static_cast<ReportView*>(v)->loadXML(m_data); 0663 break; } 0664 default: 0665 errorPlan<<"Unknown view type!"; 0666 break; 0667 } 0668 emit viewCreated(v); 0669 return true; 0670 } 0671 0672 void AddReportsViewPanel::changed() 0673 { 0674 bool disable = widget.viewname->text().isEmpty() | widget.viewtype->currentText().isEmpty() | widget.category->currentText().isEmpty(); 0675 emit enableButtonOk(! disable); 0676 } 0677 #endif 0678 0679 } //KPlato namespace