File indexing completed on 2024-05-12 05:25:40
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "sieveeditormainwidget.h" 0008 #include "sieveeditoremptytabwidgetlabel.h" 0009 #include "sieveeditorpagewidget.h" 0010 #include "sieveeditorscriptmanagerwidget.h" 0011 #include "sieveeditortabwidget.h" 0012 #include <KSieveUi/SieveEditor> 0013 0014 #include <KColorScheme> 0015 #include <KConfigGroup> 0016 #include <KLocalizedString> 0017 #include <KMessageBox> 0018 #include <KSharedConfig> 0019 #include <QTabWidget> 0020 0021 #include <QApplication> 0022 #include <QStackedWidget> 0023 #include <QTabBar> 0024 0025 namespace 0026 { 0027 static const char mySieveEditorMainWidgetConfigGroupName[] = "SieveEditorMainWidget"; 0028 } 0029 SieveEditorMainWidget::SieveEditorMainWidget(KActionCollection *ac, QWidget *parent) 0030 : QSplitter(parent) 0031 { 0032 mStackedWidget = new QStackedWidget(this); 0033 mStackedWidget->setObjectName(QLatin1StringView("stackedwidget")); 0034 0035 mEditorEmptyLabel = new SieveEditorEmptyTabWidgetLabel; 0036 0037 mTabWidget = new SieveEditorTabWidget(ac); 0038 connect(mTabWidget, &SieveEditorTabWidget::tabCloseRequestedIndex, this, &SieveEditorMainWidget::slotTabCloseRequested); 0039 connect(mTabWidget, &SieveEditorTabWidget::tabRemoveAllExclude, this, &SieveEditorMainWidget::slotTabRemoveAllExclude); 0040 connect(mTabWidget, &SieveEditorTabWidget::tabCloseAllTab, this, &SieveEditorMainWidget::slotTabCloseAllRequested); 0041 0042 mStackedWidget->addWidget(mTabWidget); 0043 mStackedWidget->addWidget(mEditorEmptyLabel); 0044 addWidget(mStackedWidget); 0045 0046 mScriptManagerWidget = new SieveEditorScriptManagerWidget; 0047 connect(mScriptManagerWidget, &SieveEditorScriptManagerWidget::createScriptPage, this, &SieveEditorMainWidget::slotCreateScriptPage); 0048 connect(mScriptManagerWidget, &SieveEditorScriptManagerWidget::updateButtons, this, &SieveEditorMainWidget::updateButtons); 0049 connect(mScriptManagerWidget, &SieveEditorScriptManagerWidget::scriptDeleted, this, &SieveEditorMainWidget::slotScriptDeleted); 0050 connect(mScriptManagerWidget, &SieveEditorScriptManagerWidget::serverSieveFound, this, &SieveEditorMainWidget::serverSieveFound); 0051 connect(mScriptManagerWidget, &SieveEditorScriptManagerWidget::scriptRenamed, this, &SieveEditorMainWidget::slotScriptRenamed); 0052 connect(this, &SieveEditorMainWidget::updateScriptList, mScriptManagerWidget, &SieveEditorScriptManagerWidget::slotRefreshList); 0053 addWidget(mScriptManagerWidget); 0054 setChildrenCollapsible(false); 0055 QList<int> splitterSizes; 0056 splitterSizes << 80 << 20; 0057 KConfigGroup myGroup(KSharedConfig::openStateConfig(), QLatin1StringView(mySieveEditorMainWidgetConfigGroupName)); 0058 setSizes(myGroup.readEntry("mainSplitter", splitterSizes)); 0059 updateStackedWidget(); 0060 } 0061 0062 SieveEditorMainWidget::~SieveEditorMainWidget() 0063 { 0064 disconnect(mScriptManagerWidget, &SieveEditorScriptManagerWidget::updateButtons, this, &SieveEditorMainWidget::updateButtons); 0065 KConfigGroup myGroup(KSharedConfig::openStateConfig(), QLatin1StringView(mySieveEditorMainWidgetConfigGroupName)); 0066 myGroup.writeEntry("mainSplitter", sizes()); 0067 myGroup.sync(); 0068 } 0069 0070 QWidget *SieveEditorMainWidget::hasExistingPage(const QUrl &url) 0071 { 0072 for (int i = 0; i < mTabWidget->count(); ++i) { 0073 auto page = qobject_cast<SieveEditorPageWidget *>(mTabWidget->widget(i)); 0074 if (page) { 0075 if (page->currentUrl() == url) { 0076 return page; 0077 } 0078 } 0079 } 0080 return nullptr; 0081 } 0082 0083 void SieveEditorMainWidget::updateStackedWidget() 0084 { 0085 if (mTabWidget->count() == 0) { 0086 mStackedWidget->setCurrentWidget(mEditorEmptyLabel); 0087 } else { 0088 mStackedWidget->setCurrentWidget(mTabWidget); 0089 } 0090 } 0091 0092 void SieveEditorMainWidget::slotScriptDeleted(const QUrl &url) 0093 { 0094 QWidget *page = hasExistingPage(url); 0095 if (page) { 0096 mTabWidget->removeTab(mTabWidget->indexOf(page)); 0097 delete page; 0098 } 0099 updateStackedWidget(); 0100 } 0101 0102 void SieveEditorMainWidget::slotScriptRenamed(const QUrl &oldUrl, const QUrl &newUrl) 0103 { 0104 QWidget *page = hasExistingPage(oldUrl); 0105 if (page) { 0106 if (auto editor = qobject_cast<SieveEditorPageWidget *>(page)) { 0107 editor->setCurrentUrl(newUrl); 0108 const QString newScriptName = newUrl.fileName(); 0109 mTabWidget->setTabText(mTabWidget->indexOf(page), newScriptName); 0110 editor->renameScriptName(newScriptName); 0111 } 0112 } 0113 updateStackedWidget(); 0114 } 0115 0116 void SieveEditorMainWidget::slotCreateScriptPage(const KSieveUi::ManageSieveWidget::ScriptInfo &info, bool isNewScript) 0117 { 0118 QWidget *page = hasExistingPage(info.currentUrl); 0119 if (page) { 0120 mTabWidget->setCurrentWidget(page); 0121 } else { 0122 auto editor = new SieveEditorPageWidget; 0123 connect(editor, &SieveEditorPageWidget::refreshList, this, &SieveEditorMainWidget::updateScriptList); 0124 connect(editor, &SieveEditorPageWidget::scriptModified, this, &SieveEditorMainWidget::slotScriptModified); 0125 connect(editor, &SieveEditorPageWidget::modeEditorChanged, this, &SieveEditorMainWidget::modeEditorChanged); 0126 connect(editor, &SieveEditorPageWidget::undoAvailable, this, &SieveEditorMainWidget::undoAvailable); 0127 connect(editor, &SieveEditorPageWidget::redoAvailable, this, &SieveEditorMainWidget::redoAvailable); 0128 connect(editor, &SieveEditorPageWidget::copyAvailable, this, &SieveEditorMainWidget::copyAvailable); 0129 connect(editor, &SieveEditorPageWidget::sieveEditorTabCurrentChanged, this, &SieveEditorMainWidget::sieveEditorTabCurrentChanged); 0130 connect(editor, &SieveEditorPageWidget::requestCloseTab, this, &SieveEditorMainWidget::forceCloseTab); 0131 editor->setIsNewScript(isNewScript); 0132 editor->loadScript(info); 0133 mTabWidget->addTab(editor, info.currentUrl.fileName()); 0134 mTabWidget->setCurrentWidget(editor); 0135 if (isNewScript) { 0136 editor->uploadScript(false, true); 0137 } 0138 updateStackedWidget(); 0139 } 0140 } 0141 0142 void SieveEditorMainWidget::createNewScript() 0143 { 0144 mScriptManagerWidget->slotCreateNewScript(); 0145 } 0146 0147 void SieveEditorMainWidget::deleteScript() 0148 { 0149 mScriptManagerWidget->slotDeleteScript(); 0150 } 0151 0152 void SieveEditorMainWidget::updateServerList() 0153 { 0154 mScriptManagerWidget->updateServerList(); 0155 } 0156 0157 void SieveEditorMainWidget::editScript() 0158 { 0159 mScriptManagerWidget->editScript(); 0160 } 0161 0162 void SieveEditorMainWidget::desactivateScript() 0163 { 0164 mScriptManagerWidget->desactivateScript(); 0165 } 0166 0167 void SieveEditorMainWidget::refreshList() 0168 { 0169 mScriptManagerWidget->refreshList(); 0170 } 0171 0172 void SieveEditorMainWidget::uploadScript() 0173 { 0174 QWidget *w = mTabWidget->currentWidget(); 0175 if (w) { 0176 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0177 if (page) { 0178 page->uploadScript(); 0179 } 0180 } 0181 } 0182 0183 bool SieveEditorMainWidget::needToSaveScript() 0184 { 0185 bool scriptSaved = false; 0186 for (int i = 0; i < mTabWidget->count(); ++i) { 0187 auto page = qobject_cast<SieveEditorPageWidget *>(mTabWidget->widget(i)); 0188 if (page) { 0189 const bool result = page->needToSaveScript(); 0190 if (result) { 0191 scriptSaved = true; 0192 } 0193 } 0194 } 0195 return scriptSaved; 0196 } 0197 0198 QTabWidget *SieveEditorMainWidget::tabWidget() const 0199 { 0200 return mTabWidget; 0201 } 0202 0203 bool SieveEditorMainWidget::isUndoAvailable() const 0204 { 0205 QWidget *w = mTabWidget->currentWidget(); 0206 if (w) { 0207 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0208 if (page) { 0209 return page->isUndoAvailable(); 0210 } 0211 } 0212 return false; 0213 } 0214 0215 bool SieveEditorMainWidget::isRedoAvailable() const 0216 { 0217 QWidget *w = mTabWidget->currentWidget(); 0218 if (w) { 0219 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0220 if (page) { 0221 return page->isRedoAvailable(); 0222 } 0223 } 0224 return false; 0225 } 0226 0227 bool SieveEditorMainWidget::isWordWrap() const 0228 { 0229 QWidget *w = mTabWidget->currentWidget(); 0230 if (w) { 0231 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0232 if (page) { 0233 return page->isWordWrap(); 0234 } 0235 } 0236 return false; 0237 } 0238 0239 bool SieveEditorMainWidget::hasSelection() const 0240 { 0241 QWidget *w = mTabWidget->currentWidget(); 0242 if (w) { 0243 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0244 if (page) { 0245 return page->hasSelection(); 0246 } 0247 } 0248 return false; 0249 } 0250 0251 void SieveEditorMainWidget::slotSelectAll() 0252 { 0253 QWidget *w = mTabWidget->currentWidget(); 0254 if (w) { 0255 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0256 if (page) { 0257 page->selectAll(); 0258 } 0259 } 0260 } 0261 0262 void SieveEditorMainWidget::slotCopy() 0263 { 0264 QWidget *w = mTabWidget->currentWidget(); 0265 if (w) { 0266 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0267 if (page) { 0268 page->copy(); 0269 } 0270 } 0271 } 0272 0273 void SieveEditorMainWidget::slotPaste() 0274 { 0275 QWidget *w = mTabWidget->currentWidget(); 0276 if (w) { 0277 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0278 if (page) { 0279 page->paste(); 0280 } 0281 } 0282 } 0283 0284 void SieveEditorMainWidget::slotCut() 0285 { 0286 QWidget *w = mTabWidget->currentWidget(); 0287 if (w) { 0288 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0289 if (page) { 0290 page->cut(); 0291 } 0292 } 0293 } 0294 0295 void SieveEditorMainWidget::slotUndo() 0296 { 0297 QWidget *w = mTabWidget->currentWidget(); 0298 if (w) { 0299 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0300 if (page) { 0301 page->undo(); 0302 } 0303 } 0304 } 0305 0306 void SieveEditorMainWidget::slotRedo() 0307 { 0308 QWidget *w = mTabWidget->currentWidget(); 0309 if (w) { 0310 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0311 if (page) { 0312 page->redo(); 0313 } 0314 } 0315 } 0316 0317 void SieveEditorMainWidget::slotGoToLine() 0318 { 0319 QWidget *w = mTabWidget->currentWidget(); 0320 if (w) { 0321 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0322 if (page) { 0323 page->goToLine(); 0324 } 0325 } 0326 } 0327 0328 void SieveEditorMainWidget::slotFind() 0329 { 0330 QWidget *w = mTabWidget->currentWidget(); 0331 if (w) { 0332 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0333 if (page) { 0334 page->find(); 0335 } 0336 } 0337 } 0338 0339 void SieveEditorMainWidget::slotReplace() 0340 { 0341 QWidget *w = mTabWidget->currentWidget(); 0342 if (w) { 0343 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0344 if (page) { 0345 page->replace(); 0346 } 0347 } 0348 } 0349 0350 QString SieveEditorMainWidget::currentText() const 0351 { 0352 QWidget *w = mTabWidget->currentWidget(); 0353 if (w) { 0354 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0355 if (page) { 0356 return page->currentText(); 0357 } 0358 } 0359 return {}; 0360 } 0361 0362 void SieveEditorMainWidget::slotCreateRulesGraphically() 0363 { 0364 QWidget *w = mTabWidget->currentWidget(); 0365 if (w) { 0366 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0367 if (page) { 0368 page->createRulesGraphically(); 0369 } 0370 } 0371 } 0372 0373 void SieveEditorMainWidget::slotCheckSyntax() 0374 { 0375 QWidget *w = mTabWidget->currentWidget(); 0376 if (w) { 0377 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0378 if (page) { 0379 page->checkSyntax(); 0380 } 0381 } 0382 } 0383 0384 void SieveEditorMainWidget::slotComment() 0385 { 0386 QWidget *w = mTabWidget->currentWidget(); 0387 if (w) { 0388 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0389 if (page) { 0390 page->comment(); 0391 } 0392 } 0393 } 0394 0395 void SieveEditorMainWidget::slotUncomment() 0396 { 0397 QWidget *w = mTabWidget->currentWidget(); 0398 if (w) { 0399 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0400 if (page) { 0401 page->uncomment(); 0402 } 0403 } 0404 } 0405 0406 void SieveEditorMainWidget::slotImport() 0407 { 0408 QWidget *w = mTabWidget->currentWidget(); 0409 if (w) { 0410 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0411 if (page) { 0412 page->import(); 0413 } 0414 } 0415 } 0416 0417 void SieveEditorMainWidget::slotCheckSpelling() 0418 { 0419 QWidget *w = mTabWidget->currentWidget(); 0420 if (w) { 0421 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0422 if (page) { 0423 page->checkSpelling(); 0424 } 0425 } 0426 } 0427 0428 void SieveEditorMainWidget::slotSaveAs() 0429 { 0430 QWidget *w = mTabWidget->currentWidget(); 0431 if (w) { 0432 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0433 if (page) { 0434 page->saveAs(); 0435 } 0436 } 0437 } 0438 0439 void SieveEditorMainWidget::slotReverseCase() 0440 { 0441 QWidget *w = mTabWidget->currentWidget(); 0442 if (w) { 0443 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0444 if (page) { 0445 page->reverseCase(); 0446 } 0447 } 0448 } 0449 0450 void SieveEditorMainWidget::slotDebugSieveScript() 0451 { 0452 QWidget *w = mTabWidget->currentWidget(); 0453 if (w) { 0454 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0455 if (page) { 0456 page->debugSieveScript(); 0457 } 0458 } 0459 } 0460 0461 void SieveEditorMainWidget::slotUpperCase() 0462 { 0463 QWidget *w = mTabWidget->currentWidget(); 0464 if (w) { 0465 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0466 if (page) { 0467 page->upperCase(); 0468 } 0469 } 0470 } 0471 0472 void SieveEditorMainWidget::slotSentenceCase() 0473 { 0474 QWidget *w = mTabWidget->currentWidget(); 0475 if (w) { 0476 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0477 if (page) { 0478 page->sentenceCase(); 0479 } 0480 } 0481 } 0482 0483 void SieveEditorMainWidget::slotLowerCase() 0484 { 0485 QWidget *w = mTabWidget->currentWidget(); 0486 if (w) { 0487 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0488 if (page) { 0489 page->lowerCase(); 0490 } 0491 } 0492 } 0493 0494 void SieveEditorMainWidget::slotScriptModified(bool modified, SieveEditorPageWidget *page) 0495 { 0496 const int index = mTabWidget->indexOf(page); 0497 if (index >= 0) { 0498 if (!mScriptColor.isValid()) { 0499 updatePaletteColor(); 0500 } 0501 mTabWidget->tabBar()->setTabTextColor(index, modified ? mModifiedScriptColor : mScriptColor); 0502 } 0503 } 0504 0505 void SieveEditorMainWidget::slotGeneralPaletteChanged() 0506 { 0507 updatePaletteColor(); 0508 for (int i = mTabWidget->count() - 1; i >= 0; --i) { 0509 auto page = qobject_cast<SieveEditorPageWidget *>(mTabWidget->widget(i)); 0510 if (page) { 0511 mTabWidget->tabBar()->setTabTextColor(i, page->isModified() ? mModifiedScriptColor : mScriptColor); 0512 } 0513 } 0514 } 0515 0516 void SieveEditorMainWidget::slotZoomIn() 0517 { 0518 QWidget *w = mTabWidget->currentWidget(); 0519 if (w) { 0520 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0521 if (page) { 0522 page->zoomIn(); 0523 } 0524 } 0525 } 0526 0527 void SieveEditorMainWidget::slotZoomOut() 0528 { 0529 QWidget *w = mTabWidget->currentWidget(); 0530 if (w) { 0531 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0532 if (page) { 0533 page->zoomOut(); 0534 } 0535 } 0536 } 0537 0538 void SieveEditorMainWidget::slotZoomReset() 0539 { 0540 QWidget *w = mTabWidget->currentWidget(); 0541 if (w) { 0542 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0543 if (page) { 0544 page->zoomReset(); 0545 } 0546 } 0547 } 0548 0549 void SieveEditorMainWidget::slotWordWrap(bool state) 0550 { 0551 QWidget *w = mTabWidget->currentWidget(); 0552 if (w) { 0553 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0554 if (page) { 0555 page->setWordWrap(state); 0556 } 0557 } 0558 } 0559 0560 void SieveEditorMainWidget::slotPrintPreview() 0561 { 0562 QWidget *w = mTabWidget->currentWidget(); 0563 if (w) { 0564 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0565 if (page) { 0566 page->printPreview(); 0567 } 0568 } 0569 } 0570 0571 void SieveEditorMainWidget::slotPrint() 0572 { 0573 QWidget *w = mTabWidget->currentWidget(); 0574 if (w) { 0575 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0576 if (page) { 0577 page->print(); 0578 } 0579 } 0580 } 0581 0582 void SieveEditorMainWidget::updatePaletteColor() 0583 { 0584 const KColorScheme scheme(QPalette::Active, KColorScheme::View); 0585 mScriptColor = scheme.foreground(KColorScheme::NormalText).color(); 0586 0587 mModifiedScriptColor = scheme.foreground(KColorScheme::NegativeText).color(); 0588 } 0589 0590 void SieveEditorMainWidget::forceCloseTab(int index) 0591 { 0592 auto page = qobject_cast<SieveEditorPageWidget *>(mTabWidget->widget(index)); 0593 if (page) { 0594 mTabWidget->removeTab(index); 0595 delete page; 0596 updateStackedWidget(); 0597 } 0598 } 0599 0600 void SieveEditorMainWidget::slotTabCloseRequested(int index) 0601 { 0602 auto page = qobject_cast<SieveEditorPageWidget *>(mTabWidget->widget(index)); 0603 if (page) { 0604 if (page->isModified()) { 0605 const int result = KMessageBox::questionTwoActionsCancel(this, 0606 i18n("Script was modified. Do you want to save before closing?"), 0607 i18nc("@title:window", "Close script"), 0608 KStandardGuiItem::save(), 0609 KStandardGuiItem::close(), 0610 KStandardGuiItem::cancel()); 0611 if (result == KMessageBox::ButtonCode::PrimaryAction) { 0612 if (page->uploadScriptAndCloseTab(index)) { 0613 return; 0614 } 0615 } else if (result == KMessageBox::Cancel) { 0616 return; 0617 } 0618 } 0619 mTabWidget->removeTab(index); 0620 delete page; 0621 } 0622 updateStackedWidget(); 0623 } 0624 0625 void SieveEditorMainWidget::slotTabCloseAllRequested() 0626 { 0627 for (int i = mTabWidget->count() - 1; i >= 0; --i) { 0628 slotTabCloseRequested(i); 0629 } 0630 } 0631 0632 void SieveEditorMainWidget::slotTabRemoveAllExclude(int index) 0633 { 0634 for (int i = mTabWidget->count() - 1; i >= 0; --i) { 0635 if (i == index) { 0636 continue; 0637 } 0638 slotTabCloseRequested(i); 0639 } 0640 } 0641 0642 KSieveUi::SieveEditorWidget::EditorMode SieveEditorMainWidget::pageMode() const 0643 { 0644 QWidget *w = mTabWidget->currentWidget(); 0645 if (w) { 0646 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0647 if (page) { 0648 return page->pageMode(); 0649 } 0650 } 0651 return KSieveUi::SieveEditorWidget::Unknown; 0652 } 0653 0654 void SieveEditorMainWidget::openBookmarkUrl(const QUrl &url) 0655 { 0656 QWidget *w = mTabWidget->currentWidget(); 0657 if (w) { 0658 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0659 if (page) { 0660 page->openBookmarkUrl(url); 0661 } 0662 } 0663 } 0664 0665 QString SieveEditorMainWidget::currentHelpTitle() const 0666 { 0667 QWidget *w = mTabWidget->currentWidget(); 0668 if (w) { 0669 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0670 if (page) { 0671 return page->currentHelpTitle(); 0672 } 0673 } 0674 return {}; 0675 } 0676 0677 QUrl SieveEditorMainWidget::currentHelpUrl() const 0678 { 0679 QWidget *w = mTabWidget->currentWidget(); 0680 if (w) { 0681 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0682 if (page) { 0683 return page->currentHelpUrl(); 0684 } 0685 } 0686 return {}; 0687 } 0688 0689 bool SieveEditorMainWidget::printSupportEnabled() const 0690 { 0691 QWidget *w = mTabWidget->currentWidget(); 0692 if (w) { 0693 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0694 if (page) { 0695 return page->printSupportEnabled(); 0696 } 0697 } 0698 return false; 0699 } 0700 0701 bool SieveEditorMainWidget::isTextEditor() const 0702 { 0703 QWidget *w = mTabWidget->currentWidget(); 0704 if (w) { 0705 auto page = qobject_cast<SieveEditorPageWidget *>(w); 0706 if (page) { 0707 return page->isTextEditor(); 0708 } 0709 } 0710 return false; 0711 } 0712 0713 bool SieveEditorMainWidget::event(QEvent *e) 0714 { 0715 if (e->type() == QEvent::ApplicationPaletteChange) { 0716 slotGeneralPaletteChanged(); 0717 } 0718 return QSplitter::event(e); 0719 } 0720 0721 #include "moc_sieveeditormainwidget.cpp"