File indexing completed on 2024-04-21 16:32:33
0001 /*************************************************************************** 0002 krenamewindow.cpp - description 0003 ------------------- 0004 begin : Sat Mar 24 2007 0005 copyright : (C) 2007 by Dominik Seichter 0006 email : domseichter@web.de 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * * 0011 * This program is free software; you can redistribute it and/or modify * 0012 * it under the terms of the GNU General Public License as published by * 0013 * the Free Software Foundation; either version 2 of the License, or * 0014 * (at your option) any later version. * 0015 * * 0016 ***************************************************************************/ 0017 0018 #include "krenamewindow.h" 0019 0020 #include "krenamemodel.h" 0021 #include "plugin.h" 0022 #include "pluginloader.h" 0023 #include "richtextitemdelegate.h" 0024 #include "startupinfo.h" 0025 #include "tokensortmodedialog.h" 0026 0027 #include "ui_krenamefiles.h" 0028 #include "ui_krenamedestination.h" 0029 //#include "ui_krenamesimple.h" 0030 #include "ui_krenameplugins.h" 0031 #include "ui_krenamefilename.h" 0032 0033 #include <QAction> 0034 #include <QIcon> 0035 #include <QMenu> 0036 #include <QPushButton> 0037 #include <kseparator.h> 0038 0039 #include <QDialogButtonBox> 0040 #include <QStackedWidget> 0041 #include <QTabBar> 0042 #include <QVBoxLayout> 0043 0044 #include <KHelpMenu> 0045 0046 static const KRenameWindow::TGuiMode tAdvancedMode = { 0047 4, 0048 { 0049 I18N_NOOP("&1. Files"), 0050 I18N_NOOP("&2. Destination"), 0051 I18N_NOOP("&3. Plugins"), 0052 I18N_NOOP("&4. Filename") 0053 }, 0054 { 0055 0, 1, 2, 3 0056 }, 0057 { 0058 "document-open-folder", 0059 "document-save", 0060 "configure", 0061 "edit-rename" 0062 } 0063 }; 0064 0065 KRenameWindow::KRenameWindow(QWidget *parent) 0066 : KMainWindow(parent), 0067 m_curPage(0), m_guiMode(nullptr), 0068 m_fileCount(0) 0069 { 0070 QWidget *center = new QWidget(); 0071 QVBoxLayout *layout = new QVBoxLayout(center); 0072 0073 m_delegate = new RichTextItemDelegate(this); 0074 m_tabBar = new QTabBar(center); 0075 m_stack = new QStackedWidget(center); 0076 m_buttons = new QDialogButtonBox(center); 0077 0078 layout->addWidget(m_tabBar); 0079 layout->addWidget(m_stack); 0080 layout->addWidget(new KSeparator(Qt::Horizontal, center)); 0081 layout->addWidget(m_buttons); 0082 layout->setStretchFactor(m_stack, 2); 0083 0084 this->setCentralWidget(center); 0085 0086 for (int i = 0; i < tAdvancedMode.numPages; i++) { 0087 const QIcon &icon = QIcon::fromTheme(tAdvancedMode.pageIcons[i]); 0088 m_tabBar->addTab(icon, i18n(tAdvancedMode.pageTitles[i])); 0089 } 0090 0091 m_pageFiles = new Ui::KRenameFiles(); 0092 m_pageDests = new Ui::KRenameDestination(); 0093 m_pagePlugins = new Ui::KRenamePlugins(); 0094 m_pageFilename = new Ui::KRenameFilename(); 0095 0096 // add files page 0097 QWidget *page = new QWidget(m_stack); 0098 m_pageFiles->setupUi(page); 0099 m_stack->addWidget(page); 0100 0101 // add destination page 0102 page = new QWidget(m_stack); 0103 m_pageDests->setupUi(page); 0104 m_stack->addWidget(page); 0105 0106 // add plugin page 0107 page = new QWidget(m_stack); 0108 m_pagePlugins->setupUi(page); 0109 m_stack->addWidget(page); 0110 0111 // add filename page 0112 page = new QWidget(m_stack); 0113 m_pageFilename->setupUi(page); 0114 m_stack->addWidget(page); 0115 0116 setupGui(); 0117 setupPlugins(); 0118 setupIcons(); 0119 0120 StartUpInfo *startUp = new StartUpInfo(); 0121 connect(startUp, &StartUpInfo::addFiles, this, &KRenameWindow::addFiles); 0122 connect(startUp, &StartUpInfo::enterTemplate, 0123 this, &KRenameWindow::slotGotoTemplatesPage); 0124 0125 m_pageDests->urlrequester->setMode(KFile::Directory | KFile::ExistingOnly); 0126 m_pageFiles->fileList->setItemDelegate(m_delegate); 0127 m_pageFiles->fileList->setInfoWidget(startUp); 0128 0129 // Make sure that now signal occurs before setupGui was called 0130 connect(m_tabBar, &QTabBar::currentChanged, 0131 this, &KRenameWindow::showPage); 0132 connect(m_buttonClose, &QPushButton::clicked, 0133 this, &KRenameWindow::close); 0134 connect(m_buttons, &QDialogButtonBox::accepted, 0135 this, &KRenameWindow::slotFinish); 0136 0137 this->setAutoSaveSettings("KRenameWindowSettings", true); 0138 0139 // If there is a huge entry in the history of filenameTemplate that size 0140 // apparently gets used as minimal size of the window. Setting it to some 0141 // value here works around that. 0142 // https://bugs.kde.org/show_bug.cgi?id=398980 0143 // TODO: Find a solution without a magic number 0144 setMinimumWidth(200); 0145 0146 // Show the first page in any mode 0147 showPage(0); 0148 } 0149 0150 KRenameWindow::~KRenameWindow() 0151 { 0152 } 0153 0154 void KRenameWindow::loadConfig() 0155 { 0156 // ExtHistoryCombo needs an object name 0157 m_pageFilename->filenameTemplate->setObjectName("FILENAME_TEMPLATE"); 0158 m_pageFilename->extensionTemplate->setObjectName("EXTENSION_TEMPLATE"); 0159 m_pageFilename->comboFilenameCustom->setObjectName("FILENAME_CUSTOM_TEMPLATE"); 0160 m_pageFilename->comboExtensionCustom->setObjectName("EXTENSION_CUSTOM_TEMPLATE"); 0161 m_pageFilename->comboPrefixCustom->setObjectName("PREVIX_CUSTOM_TEMPLATE"); 0162 m_pageFilename->comboSuffixCustom->setObjectName("SUFFIX_CUSTOM_TEMPLATE"); 0163 0164 m_pageFilename->filenameTemplate->loadConfig(); 0165 m_pageFilename->extensionTemplate->loadConfig(); 0166 m_pageFilename->comboFilenameCustom->loadConfig(); 0167 m_pageFilename->comboExtensionCustom->loadConfig(); 0168 m_pageFilename->comboPrefixCustom->loadConfig(); 0169 m_pageFilename->comboSuffixCustom->loadConfig(); 0170 0171 KSharedConfigPtr config = KSharedConfig::openConfig(); 0172 KConfigGroup groupGui = config->group(QString("GUISettings")); 0173 0174 int width = groupGui.readEntry("Column0", QVariant(this->previewColumnWidth(0))).toInt(); 0175 if (width > 0) { 0176 this->setPreviewColumnWidth(0, width); 0177 } 0178 0179 width = groupGui.readEntry("Column1", QVariant(this->previewColumnWidth(1))).toInt(); 0180 if (width > 0) { 0181 this->setPreviewColumnWidth(1, width); 0182 } 0183 } 0184 0185 void KRenameWindow::saveConfig() 0186 { 0187 m_pageFilename->filenameTemplate->saveConfig(); 0188 m_pageFilename->extensionTemplate->saveConfig(); 0189 m_pageFilename->comboFilenameCustom->saveConfig(); 0190 m_pageFilename->comboExtensionCustom->saveConfig(); 0191 m_pageFilename->comboPrefixCustom->saveConfig(); 0192 m_pageFilename->comboSuffixCustom->saveConfig(); 0193 0194 KSharedConfigPtr config = KSharedConfig::openConfig(); 0195 KConfigGroup groupGui = config->group(QString("GUISettings")); 0196 0197 groupGui.writeEntry("Column0", this->previewColumnWidth(0)); 0198 groupGui.writeEntry("Column1", this->previewColumnWidth(1)); 0199 } 0200 0201 void KRenameWindow::setupGui() 0202 { 0203 m_buttons->clear(); 0204 0205 m_guiMode = &tAdvancedMode; 0206 0207 m_buttonFinish = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-ok")), i18n("&Finish")); 0208 0209 m_buttons->setStandardButtons(QDialogButtonBox::Help | QDialogButtonBox::Close); 0210 m_buttons->addButton(m_buttonFinish, QDialogButtonBox::AcceptRole); 0211 m_buttonClose = m_buttons->button(QDialogButtonBox::Close); 0212 m_buttonClose->setShortcut(QKeySequence(QKeySequence::Quit)); 0213 0214 KHelpMenu *helpMenu = new KHelpMenu(this, QString(), false); 0215 helpMenu->menu()->removeAction(helpMenu->action(KHelpMenu::menuHelpContents)); 0216 m_buttons->button(QDialogButtonBox::Help)->setMenu(helpMenu->menu()); 0217 0218 setupSlots(); 0219 slotEnableControls(); 0220 } 0221 0222 void KRenameWindow::setupPlugins() 0223 { 0224 PluginLoader *loader = PluginLoader::Instance(); 0225 0226 const QList<Plugin *> &list = loader->plugins(); 0227 QList<Plugin *>::const_iterator it = list.begin(); 0228 0229 m_pluginsWidgetHash.reserve(list.count()); 0230 m_pluginsHash.reserve(list.count()); 0231 0232 m_pagePlugins->searchPlugins->searchLine()->setTreeWidget(m_pagePlugins->listPlugins); 0233 0234 while (it != list.end()) { 0235 // create plugin gui 0236 QWidget *widget = new QWidget(m_pagePlugins->stackPlugins); 0237 (*it)->createUI(widget); 0238 int idx = m_pagePlugins->stackPlugins->addWidget(widget); 0239 m_pagePlugins->stackPlugins->setCurrentIndex(idx); 0240 0241 m_pluginsHash[(*it)->name()] = (*it); 0242 m_pluginsWidgetHash[(*it)->name()] = widget; 0243 0244 // add to list of all plugins 0245 QTreeWidgetItem *item = new QTreeWidgetItem(m_pagePlugins->listPlugins); 0246 item->setText(0, (*it)->name()); 0247 item->setIcon(0, (*it)->icon()); 0248 0249 slotPluginChanged(item); 0250 0251 ++it; 0252 } 0253 0254 m_pagePlugins->splitter->setStretchFactor(0, 0); 0255 m_pagePlugins->splitter->setStretchFactor(1, 8); 0256 m_pagePlugins->listPlugins->sortColumn(); 0257 } 0258 0259 void KRenameWindow::setupIcons() 0260 { 0261 QPixmap upIcon = QIcon::fromTheme("arrow-up").pixmap(KIconLoader::SizeSmall); 0262 QPixmap downIcon = QIcon::fromTheme("arrow-down").pixmap(KIconLoader::SizeSmall); 0263 0264 // Page 1 icons 0265 0266 QPixmap openIcon = QIcon::fromTheme("document-open").pixmap(KIconLoader::SizeSmall); 0267 QPixmap removeIcon = QIcon::fromTheme("list-remove").pixmap(KIconLoader::SizeSmall); 0268 0269 m_pageFiles->buttonAdd->setIcon(openIcon); 0270 m_pageFiles->buttonRemove->setIcon(removeIcon); 0271 m_pageFiles->buttonUp->setIcon(upIcon); 0272 m_pageFiles->buttonDown->setIcon(downIcon); 0273 0274 // Page 4 icons 0275 0276 QPixmap helpIcon = QIcon::fromTheme("help-hint").pixmap(KIconLoader::SizeSmall); 0277 QPixmap findIcon = QIcon::fromTheme("edit-find").pixmap(KIconLoader::SizeSmall); 0278 0279 m_pageFilename->buttonHelp1->setIcon(helpIcon); 0280 m_pageFilename->buttonHelp2->setIcon(helpIcon); 0281 m_pageFilename->buttonHelp3->setIcon(helpIcon); 0282 m_pageFilename->buttonHelp4->setIcon(helpIcon); 0283 m_pageFilename->buttonFunctions->setIcon(helpIcon); 0284 0285 m_pageFilename->buttonFind->setIcon(findIcon); 0286 m_pageFilename->buttonFindSimple->setIcon(findIcon); 0287 0288 m_pageFilename->buttonUp->setIcon(upIcon); 0289 m_pageFilename->buttonDown->setIcon(downIcon); 0290 0291 } 0292 0293 void KRenameWindow::setupSlots() 0294 { 0295 connect(m_pageFiles->buttonAdd, &QPushButton::clicked, 0296 this, &KRenameWindow::addFiles); 0297 connect(m_pageFiles->buttonRemove, &QPushButton::clicked, 0298 this, &KRenameWindow::removeFiles); 0299 connect(m_pageFiles->buttonRemoveAll, &QPushButton::clicked, 0300 this, &KRenameWindow::removeAllFiles); 0301 connect(m_pageFiles->checkPreview, &QCheckBox::clicked, 0302 this, &KRenameWindow::slotPreviewChanged); 0303 connect(m_pageFiles->checkName, &QCheckBox::clicked, 0304 this, &KRenameWindow::slotPreviewChanged); 0305 connect(m_pageFiles->comboSort, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0306 this, &KRenameWindow::slotSortChanged); 0307 connect(m_pageFiles->fileList, &KRenameListView::doubleClicked, 0308 this, &KRenameWindow::slotOpenFile); 0309 connect(m_pageFiles->buttonUp, &QPushButton::clicked, 0310 this, &KRenameWindow::slotMoveUp); 0311 connect(m_pageFiles->buttonDown, &QPushButton::clicked, 0312 this, &KRenameWindow::slotMoveDown); 0313 0314 connect(m_pageDests->optionRename, &QRadioButton::clicked, 0315 this, &KRenameWindow::slotRenameModeChanged); 0316 connect(m_pageDests->optionCopy, &QRadioButton::clicked, 0317 this, &KRenameWindow::slotRenameModeChanged); 0318 connect(m_pageDests->optionMove, &QRadioButton::clicked, 0319 this, &KRenameWindow::slotRenameModeChanged); 0320 connect(m_pageDests->optionLink, &QRadioButton::clicked, 0321 this, &KRenameWindow::slotRenameModeChanged); 0322 connect(m_pageDests->checkOverwrite, &QCheckBox::clicked, 0323 this, &KRenameWindow::overwriteFilesChanged); 0324 0325 connect(m_pagePlugins->listPlugins, &QTreeWidget::currentItemChanged, 0326 this, &KRenameWindow::slotPluginChanged); 0327 connect(m_pagePlugins->checkEnablePlugin, &QCheckBox::clicked, 0328 this, &KRenameWindow::slotPluginEnabled); 0329 0330 connect(m_pageFilename->checkExtension, &QCheckBox::clicked, 0331 this, &KRenameWindow::slotEnableControls); 0332 connect(m_pageFilename->buttonNumbering, &QPushButton::clicked, 0333 this, &KRenameWindow::showAdvancedNumberingDialog); 0334 connect(m_pageFilename->buttonInsert, &QPushButton::clicked, 0335 this, &KRenameWindow::showInsertPartFilenameDialog); 0336 connect(m_pageFilename->buttonFind, &QPushButton::clicked, 0337 this, &KRenameWindow::showFindReplaceDialog); 0338 0339 connect(m_pageFilename->filenameTemplate, &ExtHistoryCombo::delayedTextChanged, 0340 this, &KRenameWindow::slotTemplateChanged); 0341 connect(m_pageFilename->extensionTemplate, &ExtHistoryCombo::delayedTextChanged, 0342 this, &KRenameWindow::slotTemplateChanged); 0343 connect(m_pageFilename->checkExtension, &QCheckBox::clicked, 0344 this, &KRenameWindow::slotTemplateChanged); 0345 connect(m_pageFilename->buttonFunctions, &QPushButton::clicked, 0346 this, &KRenameWindow::slotTokenHelpRequested); 0347 connect(m_pageFilename->comboExtension, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0348 this, &KRenameWindow::slotExtensionSplitModeChanged); 0349 0350 connect(m_pageFilename->buttonUp, &QPushButton::clicked, 0351 this, &KRenameWindow::slotMoveUpPreview); 0352 connect(m_pageFilename->buttonDown, &QPushButton::clicked, 0353 this, &KRenameWindow::slotMoveDownPreview); 0354 0355 connect(m_pageFilename->listPreview, &PreviewList::addFiles, 0356 this, &KRenameWindow::addFiles); 0357 connect(m_pageFilename->listPreview, &PreviewList::updateCount, 0358 this, &KRenameWindow::updateCount); 0359 0360 connect(m_pageFilename->comboFilenameCustom, &ExtHistoryCombo::delayedTextChanged, 0361 this, &KRenameWindow::slotSimpleTemplateChanged); 0362 connect(m_pageFilename->comboSuffixCustom, &ExtHistoryCombo::delayedTextChanged, 0363 this, &KRenameWindow::slotSimpleTemplateChanged); 0364 connect(m_pageFilename->comboPrefixCustom, &ExtHistoryCombo::delayedTextChanged, 0365 this, &KRenameWindow::slotSimpleTemplateChanged); 0366 connect(m_pageFilename->comboExtensionCustom, &ExtHistoryCombo::delayedTextChanged, 0367 this, &KRenameWindow::slotSimpleTemplateChanged); 0368 0369 connect(m_pageFilename->comboPrefix, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0370 this, &KRenameWindow::slotSimpleTemplateChanged); 0371 connect(m_pageFilename->comboSuffix, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0372 this, &KRenameWindow::slotSimpleTemplateChanged); 0373 connect(m_pageFilename->comboFilenameSimple, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0374 this, &KRenameWindow::slotSimpleTemplateChanged); 0375 connect(m_pageFilename->comboExtensionSimple, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0376 this, &KRenameWindow::slotSimpleTemplateChanged); 0377 0378 connect(m_pageFilename->comboExtensionSimple, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0379 this, &KRenameWindow::slotEnableControls); 0380 connect(m_pageFilename->comboFilenameSimple, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), 0381 this, &KRenameWindow::slotEnableControls); 0382 0383 connect(m_pageFilename->buttonHelp1, &QPushButton::clicked, this, &KRenameWindow::slotTokenHelpRequestedWizard1); 0384 connect(m_pageFilename->buttonHelp2, &QPushButton::clicked, this, &KRenameWindow::slotTokenHelpRequestedWizard2); 0385 connect(m_pageFilename->buttonHelp3, &QPushButton::clicked, this, &KRenameWindow::slotTokenHelpRequestedWizard3); 0386 connect(m_pageFilename->buttonHelp4, &QPushButton::clicked, this, &KRenameWindow::slotTokenHelpRequestedWizard4); 0387 connect(m_pageFilename->buttonFindSimple, &QPushButton::clicked, 0388 this, &KRenameWindow::showFindReplaceDialog); 0389 0390 connect(m_pageFilename->spinDigits, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 0391 this, &KRenameWindow::slotSimpleTemplateChanged); 0392 connect(m_pageFilename->spinIndex, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 0393 this, &KRenameWindow::slotSimpleStartIndexChanged); 0394 } 0395 0396 void KRenameWindow::showPage(int index) 0397 { 0398 if (index >= 0 && index < m_guiMode->numPages) { 0399 m_curPage = index; 0400 m_stack->setCurrentIndex(m_guiMode->mapIndex[index]); 0401 0402 slotEnableControls(); 0403 } 0404 } 0405 0406 void KRenameWindow::slotEnableControls() 0407 { 0408 // TODO: 0409 // Disable all extension widgets 0410 // if splitMode is NOEXTENSION 0411 0412 if (m_buttonFinish) { 0413 bool enable = (m_curPage == m_guiMode->numPages - 1) 0414 && m_fileCount > 0; 0415 m_buttonFinish->setEnabled(enable); 0416 } 0417 0418 // enable gui controls 0419 m_pageFiles->buttonRemove->setEnabled(m_fileCount); 0420 m_pageFiles->buttonRemoveAll->setEnabled(m_fileCount); 0421 m_pageFiles->checkName->setEnabled(m_pageFiles->checkPreview->isChecked()); 0422 0423 m_pageFiles->buttonUp->setEnabled(m_fileCount); 0424 m_pageFiles->buttonDown->setEnabled(m_fileCount); 0425 0426 m_pageDests->urlrequester->setEnabled(!m_pageDests->optionRename->isChecked()); 0427 0428 m_pageFilename->extensionTemplate->setEnabled(!m_pageFilename->checkExtension->isChecked()); 0429 m_pageFilename->buttonFind->setEnabled(m_fileCount != 0); 0430 m_pageFilename->buttonNumbering->setEnabled(m_fileCount != 0); 0431 m_pageFilename->buttonInsert->setEnabled(m_fileCount != 0); 0432 0433 m_pageFilename->buttonFindSimple->setEnabled(m_fileCount != 0); 0434 m_pageFilename->buttonHelp3->setEnabled(m_pageFilename->comboFilenameSimple->currentIndex() == 0435 m_pageFilename->comboFilenameSimple->count() - 1); 0436 m_pageFilename->comboFilenameCustom->setEnabled(m_pageFilename->comboFilenameSimple->currentIndex() == 0437 m_pageFilename->comboFilenameSimple->count() - 1); 0438 0439 m_pageFilename->buttonHelp4->setEnabled(m_pageFilename->comboExtensionSimple->currentIndex() == 0440 m_pageFilename->comboExtensionSimple->count() - 1); 0441 m_pageFilename->comboExtensionCustom->setEnabled(m_pageFilename->comboExtensionSimple->currentIndex() == 0442 m_pageFilename->comboExtensionSimple->count() - 1); 0443 0444 m_pageFilename->buttonUp->setEnabled(m_fileCount); 0445 m_pageFilename->buttonDown->setEnabled(m_fileCount); 0446 } 0447 0448 void KRenameWindow::setCount(unsigned int count) 0449 { 0450 m_fileCount = count; 0451 m_pageFiles->labelCount->setText(i18n("<b>Files:</b> %1", m_fileCount)); 0452 0453 m_pageFiles->fileList->slotUpdateCount(); 0454 this->slotEnableControls(); 0455 } 0456 0457 void KRenameWindow::setFilenameTemplate(const QString &templ, bool insert) 0458 { 0459 if (insert) { 0460 m_pageFilename->filenameTemplate->lineEdit()->insert(templ); 0461 } else { 0462 m_pageFilename->filenameTemplate->lineEdit()->setText(templ); 0463 } 0464 } 0465 0466 void KRenameWindow::setExtensionTemplate(const QString &templ, bool insert) 0467 { 0468 m_pageFilename->checkExtension->setChecked(true); 0469 m_pageFilename->comboExtensionSimple->setCurrentIndex( 0470 m_pageFilename->comboExtensionSimple->count() - 1); 0471 0472 if (insert) { 0473 m_pageFilename->extensionTemplate->lineEdit()->insert(templ); 0474 } else { 0475 m_pageFilename->extensionTemplate->lineEdit()->setText(templ); 0476 } 0477 } 0478 0479 void KRenameWindow::setRenameMode(ERenameMode eMode) 0480 { 0481 m_pageDests->optionRename->setChecked(false); 0482 m_pageDests->optionCopy->setChecked(false); 0483 m_pageDests->optionMove->setChecked(false); 0484 m_pageDests->optionLink->setChecked(false); 0485 0486 switch (eMode) { 0487 case eRenameMode_Rename: 0488 m_pageDests->optionRename->setChecked(true); 0489 break; 0490 case eRenameMode_Copy: 0491 m_pageDests->optionCopy->setChecked(true); 0492 break; 0493 case eRenameMode_Move: 0494 m_pageDests->optionMove->setChecked(true); 0495 break; 0496 case eRenameMode_Link: 0497 m_pageDests->optionLink->setChecked(true); 0498 break; 0499 default: 0500 // Default 0501 m_pageDests->optionRename->setChecked(true); 0502 break; 0503 } 0504 0505 this->slotEnableControls(); 0506 emit renameModeChanged(eMode); 0507 } 0508 0509 void KRenameWindow::setDestinationUrl(const QUrl &url) 0510 { 0511 m_pageDests->urlrequester->setUrl(url); 0512 } 0513 0514 void KRenameWindow::resetFileList() 0515 { 0516 m_pageFiles->fileList->reset(); 0517 } 0518 0519 void KRenameWindow::setModel(KRenameModel *model) 0520 { 0521 m_pageFiles->fileList->setModel(model); 0522 0523 m_pageFilename->listPreview->setKRenameModel(model); 0524 0525 connect(model, &KRenameModel::maxDotsChanged, 0526 this, &KRenameWindow::slotMaxDotsChanged); 0527 } 0528 0529 void KRenameWindow::setPreviewModel(KRenamePreviewModel *model) 0530 { 0531 m_pageFilename->listPreview->setModel(model); 0532 } 0533 0534 const QUrl KRenameWindow::destinationUrl() const 0535 { 0536 return m_pageDests->urlrequester->url(); 0537 } 0538 0539 QList<int> KRenameWindow::selectedFileItems() const 0540 { 0541 QList<int> selected; 0542 0543 QItemSelectionModel *selection = m_pageFiles->fileList->selectionModel(); 0544 QModelIndexList indices = selection->selectedIndexes(); 0545 QModelIndexList::const_iterator it = indices.constBegin(); 0546 0547 while (it != indices.constEnd()) { 0548 selected.append((*it).row()); 0549 ++it; 0550 } 0551 0552 return selected; 0553 } 0554 0555 QList<int> KRenameWindow::selectedFileItemsPreview() const 0556 { 0557 QList<int> selected; 0558 0559 QItemSelectionModel *selection = m_pageFilename->listPreview->selectionModel(); 0560 0561 QModelIndexList indices = selection->selectedIndexes(); 0562 QModelIndexList::const_iterator it = indices.constBegin(); 0563 0564 while (it != indices.constEnd()) { 0565 selected.append((*it).row()); 0566 ++it; 0567 } 0568 0569 return selected; 0570 } 0571 0572 bool KRenameWindow::isPreviewEnabled() const 0573 { 0574 return m_pageFiles->checkPreview->isChecked(); 0575 } 0576 0577 void KRenameWindow::setPreviewEnabled(bool bPreview) 0578 { 0579 m_pageFiles->checkPreview->setChecked(bPreview); 0580 0581 slotPreviewChanged(); 0582 } 0583 0584 bool KRenameWindow::isPreviewNamesEnabled() const 0585 { 0586 return m_pageFiles->checkName->isChecked(); 0587 } 0588 0589 void KRenameWindow::setPreviewNamesEnabled(bool bPreview) 0590 { 0591 m_pageFiles->checkName->setChecked(bPreview); 0592 0593 slotPreviewChanged(); 0594 } 0595 0596 int KRenameWindow::numberStartIndex() const 0597 { 0598 return m_pageFilename->spinIndex->value(); 0599 } 0600 0601 void KRenameWindow::setNumberStartIndex(int index) 0602 { 0603 m_pageFilename->spinIndex->setValue(index); 0604 } 0605 0606 int KRenameWindow::sortMode() const 0607 { 0608 return m_pageFiles->comboSort->currentIndex(); 0609 } 0610 0611 void KRenameWindow::setSortMode(int sortMode, const QString &customToken, int customSortMode) 0612 { 0613 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 0614 bool bPrevious = m_pageFiles->comboSort->blockSignals(true); 0615 0616 QString customTokenText; 0617 if (sortMode == eSortMode_Token) { 0618 customTokenText = customToken; 0619 } 0620 0621 m_pageFiles->comboSort->setCurrentIndex(sortMode); 0622 m_pageFiles->labelCustomSort->setText(customTokenText); 0623 0624 model->sortFiles(static_cast<ESortMode>(sortMode), 0625 customToken, 0626 static_cast<KRenameTokenSorter::ESimpleSortMode>(customSortMode)); 0627 0628 m_pageFiles->comboSort->blockSignals(bPrevious); 0629 } 0630 0631 int KRenameWindow::previewColumnWidth(int index) 0632 { 0633 return m_pageFilename->listPreview->columnWidth(index); 0634 } 0635 0636 void KRenameWindow::setPreviewColumnWidth(int index, int width) 0637 { 0638 m_pageFilename->listPreview->setColumnWidth(index, width); 0639 } 0640 0641 bool KRenameWindow::isAdvancedMode() const 0642 { 0643 return (m_pageFilename->tabWidget->currentIndex() == 0); 0644 } 0645 0646 void KRenameWindow::setAdvancedMode(bool bAdvanced) 0647 { 0648 m_pageFilename->tabWidget->setCurrentIndex(bAdvanced ? 0 : 1); 0649 } 0650 0651 void KRenameWindow::showFilenameTab() 0652 { 0653 m_tabBar->setCurrentIndex(MAX_PAGES - 1); 0654 if (this->isAdvancedMode()) { 0655 m_pageFilename->filenameTemplate->setFocus(); 0656 m_pageFilename->filenameTemplate->selectAll(); 0657 } else { 0658 m_pageFilename->comboPrefixCustom->setFocus(); 0659 m_pageFilename->comboPrefixCustom->selectAll(); 0660 } 0661 } 0662 0663 void KRenameWindow::setPrefixSuffixSimple(QComboBox *combo, QComboBox *comboCustom, const QString &templ) 0664 { 0665 if (templ.isEmpty()) { 0666 comboCustom->lineEdit()->setText(templ); 0667 combo->setCurrentIndex(0); 0668 } else { 0669 QString number('#'); 0670 int c = m_pageFilename->spinDigits->value() - 1; 0671 0672 while (c-- > 0) { 0673 number += '#'; 0674 } 0675 0676 number += QString("{%1}").arg(m_pageFilename->spinIndex->value()); 0677 0678 if (templ.startsWith(number)) { 0679 QString value = templ.right(templ.length() - number.length()); 0680 combo->setCurrentIndex(1); 0681 comboCustom->lineEdit()->setText(value); 0682 } else if (templ.startsWith(QLatin1String("[date]"))) { 0683 QString value = templ.right(templ.length() - 6); 0684 combo->setCurrentIndex(2); 0685 comboCustom->lineEdit()->setText(value); 0686 } else { 0687 combo->setCurrentIndex(0); 0688 comboCustom->lineEdit()->setText(templ); 0689 } 0690 } 0691 } 0692 0693 QString KRenameWindow::getPrefixSuffixSimple(QComboBox *combo, QComboBox *comboCustom) 0694 { 0695 QString str; 0696 QString number('#'); 0697 int c = m_pageFilename->spinDigits->value() - 1; 0698 0699 while (c-- > 0) { 0700 number += '#'; 0701 } 0702 0703 number += QString("{%1}").arg(m_pageFilename->spinIndex->value()); 0704 0705 if (combo->currentIndex() == 1) { 0706 str = number; 0707 } else if (combo->currentIndex() == 2) { 0708 str = "[date]"; // TODO date 0709 } 0710 0711 str += comboCustom->currentText(); 0712 0713 return str; 0714 } 0715 0716 QString KRenameWindow::getFilenameSimple(QComboBox *combo, QComboBox *comboCustom) 0717 { 0718 QString str; 0719 0720 // TODO: Replace strings with constants 0721 switch (combo->currentIndex()) { 0722 default: 0723 case 0: 0724 str = '$'; break; 0725 case 1: 0726 str = '%'; break; 0727 case 2: 0728 str = '&'; break; 0729 case 3: 0730 str = '*'; break; 0731 case 4: 0732 str = comboCustom->currentText(); 0733 } 0734 0735 return str; 0736 } 0737 0738 void KRenameWindow::slotBack() 0739 { 0740 this->showPage(m_curPage - 1); 0741 } 0742 0743 void KRenameWindow::slotNext() 0744 { 0745 this->showPage(m_curPage + 1); 0746 } 0747 0748 void KRenameWindow::slotFinish() 0749 { 0750 emit accepted(); 0751 } 0752 0753 void KRenameWindow::slotRenameModeChanged() 0754 { 0755 ERenameMode mode = eRenameMode_Rename; 0756 0757 if (m_pageDests->optionRename->isChecked()) { 0758 mode = eRenameMode_Rename; 0759 } else if (m_pageDests->optionCopy->isChecked()) { 0760 mode = eRenameMode_Copy; 0761 } else if (m_pageDests->optionMove->isChecked()) { 0762 mode = eRenameMode_Move; 0763 } else if (m_pageDests->optionLink->isChecked()) { 0764 mode = eRenameMode_Link; 0765 } 0766 0767 emit renameModeChanged(mode); 0768 0769 this->slotEnableControls(); 0770 } 0771 0772 void KRenameWindow::slotGotoTemplatesPage() 0773 { 0774 m_tabBar->setCurrentIndex(3); 0775 } 0776 0777 void KRenameWindow::slotSimpleStartIndexChanged() 0778 { 0779 emit startIndexChanged(m_pageFilename->spinIndex->value()); 0780 0781 slotSimpleTemplateChanged(); 0782 } 0783 0784 void KRenameWindow::slotTemplateChanged() 0785 { 0786 QString filename; 0787 QString extension; 0788 0789 filename = m_pageFilename->filenameTemplate->currentText(); 0790 extension = m_pageFilename->checkExtension->isChecked() ? "$" : 0791 m_pageFilename->extensionTemplate->currentText(); 0792 0793 // set the new templates also for simple mode 0794 blockSignalsRecursive(this, true); 0795 this->setSimpleTemplate(filename, extension); 0796 blockSignalsRecursive(this, false); 0797 0798 this->templatesChanged(filename, extension); 0799 } 0800 0801 void KRenameWindow::slotSimpleTemplateChanged() 0802 { 0803 QString filename = getFilenameSimple(m_pageFilename->comboFilenameSimple, m_pageFilename->comboFilenameCustom); 0804 QString extension = getFilenameSimple(m_pageFilename->comboExtensionSimple, m_pageFilename->comboExtensionCustom); 0805 QString prefix = getPrefixSuffixSimple(m_pageFilename->comboPrefix, m_pageFilename->comboPrefixCustom); 0806 QString suffix = getPrefixSuffixSimple(m_pageFilename->comboSuffix, m_pageFilename->comboSuffixCustom); 0807 0808 filename = prefix + filename + suffix; 0809 0810 // set the new templates, but make sure signals 0811 // are blockes so that slotTemplateChanged emits updatePreview() 0812 // which is calculation intensive only once! 0813 blockSignalsRecursive(this, true); 0814 m_pageFilename->filenameTemplate->lineEdit()->setText(filename); 0815 m_pageFilename->extensionTemplate->lineEdit()->setText(extension); 0816 m_pageFilename->checkExtension->setChecked(false); 0817 blockSignalsRecursive(this, false); 0818 0819 this->templatesChanged(filename, extension); 0820 } 0821 0822 void KRenameWindow::templatesChanged(const QString &filename, const QString &extension) 0823 { 0824 emit filenameTemplateChanged(filename); 0825 emit extensionTemplateChanged(extension); 0826 0827 emit updatePreview(); 0828 0829 m_pageFilename->buttonNumbering->setEnabled(filename.contains('#') || extension.contains('#')); 0830 this->slotEnableControls(); 0831 } 0832 0833 void KRenameWindow::setSimpleTemplate(const QString &filename, const QString &extension) 0834 { 0835 // First set the simple extension from a template string 0836 if (extension == "$") { 0837 m_pageFilename->comboExtensionSimple->setCurrentIndex(0); 0838 } else if (extension == "%") { 0839 m_pageFilename->comboExtensionSimple->setCurrentIndex(1); 0840 } else if (extension == "&") { 0841 m_pageFilename->comboExtensionSimple->setCurrentIndex(2); 0842 } else if (extension == "*") { 0843 m_pageFilename->comboExtensionSimple->setCurrentIndex(3); 0844 } else { 0845 m_pageFilename->comboExtensionSimple->setCurrentIndex(4); 0846 m_pageFilename->comboExtensionCustom->lineEdit()->setText(extension); 0847 } 0848 0849 // Now split the filename in prefix and suffix and set it as template 0850 // TODO: Make sure we do not find something like [*5-] or \$ 0851 int index = 4; 0852 int pos = filename.indexOf("$"); 0853 if (pos == -1) { 0854 pos = filename.indexOf("%"); 0855 if (pos == -1) { 0856 pos = filename.indexOf("&"); 0857 if (pos == -1) { 0858 pos = filename.indexOf("*"); 0859 if (pos != -1) { 0860 index = 3; 0861 } 0862 } else { 0863 index = 2; 0864 } 0865 } else { 0866 index = 1; 0867 } 0868 } else { 0869 index = 0; 0870 } 0871 0872 m_pageFilename->comboFilenameSimple->setCurrentIndex(index); 0873 if (pos == -1) { 0874 // No token found, so we have no prefix or suffix but 0875 // a custom name. 0876 m_pageFilename->comboPrefixCustom->lineEdit()->setText(QString()); 0877 m_pageFilename->comboPrefix->setCurrentIndex(0); 0878 0879 m_pageFilename->comboSuffixCustom->lineEdit()->setText(QString()); 0880 m_pageFilename->comboSuffix->setCurrentIndex(0); 0881 0882 m_pageFilename->comboFilenameCustom->lineEdit()->setText(filename); 0883 } else { 0884 QString prefix = (pos > 0 ? filename.left(pos) : QString()); 0885 QString suffix = (pos < filename.length() ? filename.right(filename.length() - pos - 1) : QString()); 0886 0887 setPrefixSuffixSimple(m_pageFilename->comboPrefix, m_pageFilename->comboPrefixCustom, prefix); 0888 setPrefixSuffixSimple(m_pageFilename->comboSuffix, m_pageFilename->comboSuffixCustom, suffix); 0889 } 0890 } 0891 0892 void KRenameWindow::slotTokenHelpRequested() 0893 { 0894 emit showTokenHelpDialog(m_pageFilename->filenameTemplate->lineEdit()); 0895 } 0896 0897 void KRenameWindow::slotTokenHelpRequestedWizard1() 0898 { 0899 emit showTokenHelpDialog(m_pageFilename->comboPrefixCustom->lineEdit()); 0900 } 0901 0902 void KRenameWindow::slotTokenHelpRequestedWizard2() 0903 { 0904 emit showTokenHelpDialog(m_pageFilename->comboSuffixCustom->lineEdit()); 0905 } 0906 0907 void KRenameWindow::slotTokenHelpRequestedWizard3() 0908 { 0909 emit showTokenHelpDialog(m_pageFilename->comboFilenameCustom->lineEdit()); 0910 } 0911 0912 void KRenameWindow::slotTokenHelpRequestedWizard4() 0913 { 0914 emit showTokenHelpDialog(m_pageFilename->comboExtensionCustom->lineEdit()); 0915 } 0916 0917 void KRenameWindow::setExtensionSplitMode(ESplitMode splitMode, int dot) 0918 { 0919 int index; 0920 switch (splitMode) { 0921 default: 0922 case eSplitMode_FirstDot: 0923 index = 0; 0924 break; 0925 case eSplitMode_LastDot: 0926 index = 1; 0927 break; 0928 case eSplitMode_NoExtension: 0929 index = 2; 0930 break; 0931 case eSplitMode_CustomDot: 0932 index = dot + 1; 0933 break; 0934 } 0935 0936 m_pageFilename->comboExtension->setCurrentIndex(index); 0937 } 0938 0939 void KRenameWindow::slotExtensionSplitModeChanged(int index) 0940 { 0941 ESplitMode splitMode; 0942 switch (index) { 0943 case 0: 0944 splitMode = eSplitMode_FirstDot; 0945 break; 0946 case 1: 0947 splitMode = eSplitMode_LastDot; 0948 break; 0949 case 2: 0950 splitMode = eSplitMode_NoExtension; 0951 break; 0952 default: 0953 splitMode = eSplitMode_CustomDot; 0954 break; 0955 } 0956 0957 emit extensionSplitModeChanged(splitMode, index - 1); 0958 } 0959 0960 void KRenameWindow::slotPreviewChanged() 0961 { 0962 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 0963 0964 if (m_pageFiles->checkPreview->isChecked() && !m_pageFiles->checkName->isChecked()) { 0965 m_pageFiles->fileList->setViewMode(QListView::IconMode); 0966 } else { 0967 m_pageFiles->fileList->setViewMode(QListView::ListMode); 0968 } 0969 0970 model->setEnablePreview(m_pageFiles->checkPreview->isChecked(), m_pageFiles->checkName->isChecked()); 0971 emit filePreviewChanged(m_pageFiles->checkPreview->isChecked(), m_pageFiles->checkName->isChecked()); 0972 0973 m_pageFiles->fileList->setAcceptDrops(true); 0974 m_pageFiles->fileList->repaint(); 0975 this->slotEnableControls(); 0976 } 0977 0978 void KRenameWindow::slotSortChanged(int index) 0979 { 0980 ESortMode eMode; 0981 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 0982 KRenameTokenSorter::ESimpleSortMode eCustomSortMode = model->getSortModeCustomMode(); 0983 QString customToken; 0984 0985 switch (index) { 0986 default: 0987 case 0: 0988 eMode = eSortMode_Unsorted; break; 0989 case 1: 0990 eMode = eSortMode_Ascending; break; 0991 case 2: 0992 eMode = eSortMode_Descending; break; 0993 case 3: 0994 eMode = eSortMode_Numeric; break; 0995 case 4: 0996 eMode = eSortMode_Random; break; 0997 case 5: 0998 eMode = eSortMode_AscendingDate; break; 0999 case 6: 1000 eMode = eSortMode_DescendingDate; break; 1001 case 7: { 1002 eMode = eSortMode_Token; 1003 QPointer<TokenSortModeDialog> dlg = new TokenSortModeDialog(eCustomSortMode, this); 1004 if (dlg->exec() == QDialog::Accepted) { 1005 customToken = dlg->getToken(); 1006 eCustomSortMode = dlg->getSortMode(); 1007 } else { 1008 eMode = model->getSortMode(); 1009 // Do not change anything 1010 // Reset combo box 1011 m_pageFiles->comboSort->setCurrentIndex(eMode); 1012 return; 1013 } 1014 delete dlg; 1015 break; 1016 } 1017 } 1018 1019 m_pageFiles->labelCustomSort->setText(customToken); 1020 model->sortFiles(eMode, customToken, eCustomSortMode); 1021 } 1022 1023 void KRenameWindow::slotMaxDotsChanged(int dots) 1024 { 1025 int i; 1026 const int FILE_EXTENSION_VARIABLE_ITEMS_START = 3; 1027 1028 for (i = FILE_EXTENSION_VARIABLE_ITEMS_START; 1029 i < m_pageFilename->comboExtension->count(); 1030 i++) { 1031 m_pageFilename->comboExtension->removeItem(i); 1032 } 1033 1034 for (i = 1; i <= dots; ++i) { 1035 m_pageFilename->comboExtension->addItem(QString::number(i)); 1036 } 1037 } 1038 1039 void KRenameWindow::slotOpenFile(const QModelIndex &index) 1040 { 1041 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 1042 model->run(index, this); 1043 } 1044 1045 void KRenameWindow::slotMoveUp() 1046 { 1047 QList<int> sel = this->selectedFileItems(); 1048 1049 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 1050 model->moveFilesUp(sel); 1051 1052 QItemSelectionModel *selection = m_pageFiles->fileList->selectionModel(); 1053 QList<int>::const_iterator it = sel.constBegin(); 1054 while (it != sel.constEnd()) { 1055 if (*it - 1 > 0) { 1056 selection->select(model->createIndex(*it - 1), QItemSelectionModel::Select); 1057 } 1058 1059 ++it; 1060 } 1061 1062 // make sure that the first item is visible 1063 // TODO: Maybe it is better to calculate the minimum index here 1064 if (sel.size()) { 1065 m_pageFiles->fileList->scrollTo(model->createIndex(sel.front() - 1), QAbstractItemView::EnsureVisible); 1066 } 1067 } 1068 1069 void KRenameWindow::slotMoveDown() 1070 { 1071 QList<int> sel = this->selectedFileItems(); 1072 1073 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 1074 model->moveFilesDown(sel); 1075 1076 QItemSelectionModel *selection = m_pageFiles->fileList->selectionModel(); 1077 QList<int>::const_iterator it = sel.constBegin(); 1078 while (it != sel.constEnd()) { 1079 if (*it + 1 < model->rowCount()) { 1080 selection->select(model->createIndex(*it + 1), QItemSelectionModel::Select); 1081 } 1082 1083 ++it; 1084 } 1085 1086 // make sure that the last item is visible 1087 // TODO: Maybe it is better to calculate the maximum index here 1088 if (sel.size()) { 1089 m_pageFiles->fileList->scrollTo(model->createIndex(sel.back() + 1), QAbstractItemView::EnsureVisible); 1090 } 1091 } 1092 1093 void KRenameWindow::slotMoveUpPreview() 1094 { 1095 QList<int> sel = this->selectedFileItemsPreview(); 1096 QAbstractItemView *view = m_pageFilename->listPreview; 1097 1098 moveUp(sel, view); 1099 } 1100 1101 void KRenameWindow::slotMoveDownPreview() 1102 { 1103 QList<int> sel = this->selectedFileItemsPreview(); 1104 QAbstractItemView *view = m_pageFilename->listPreview; 1105 1106 moveDown(sel, view); 1107 } 1108 1109 void KRenameWindow::moveUp(const QList<int> &selected, QAbstractItemView *view) 1110 { 1111 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 1112 model->moveFilesUp(selected); 1113 1114 updatePreview(); 1115 1116 QItemSelectionModel *selection = view->selectionModel(); 1117 QList<int>::const_iterator it = selected.begin(); 1118 while (it != selected.end()) { 1119 if (*it - 1 > 0) { 1120 selection->select(model->createIndex(*it - 1), QItemSelectionModel::Select); 1121 } 1122 1123 ++it; 1124 } 1125 1126 // make sure that the first item is visible 1127 // TODO: Maybe it is better to calculate the minimum index here 1128 if (selected.size()) { 1129 view->scrollTo(model->createIndex(selected.front() - 1), QAbstractItemView::EnsureVisible); 1130 } 1131 } 1132 1133 void KRenameWindow::moveDown(const QList<int> &selected, QAbstractItemView *view) 1134 { 1135 KRenameModel *model = static_cast<KRenameModel *>(m_pageFiles->fileList->model()); 1136 model->moveFilesDown(selected); 1137 1138 updatePreview(); 1139 1140 QItemSelectionModel *selection = view->selectionModel(); 1141 QList<int>::const_iterator it = selected.begin(); 1142 while (it != selected.end()) { 1143 if (*it + 1 < model->rowCount()) { 1144 selection->select(model->createIndex(*it + 1), QItemSelectionModel::Select); 1145 } 1146 1147 ++it; 1148 } 1149 1150 // make sure that the last item is visible 1151 // TODO: Maybe it is better to calculate the maximum index here 1152 if (selected.size()) { 1153 view->scrollTo(model->createIndex(selected.back() + 1), QAbstractItemView::EnsureVisible); 1154 } 1155 } 1156 1157 void KRenameWindow::slotPluginChanged(QTreeWidgetItem *selected) 1158 { 1159 QWidget *w = m_pluginsWidgetHash[selected->text(0)]; 1160 Plugin *p = m_pluginsHash[selected->text(0)]; 1161 1162 if (p->alwaysEnabled()) { 1163 m_pagePlugins->checkEnablePlugin->setChecked(true); 1164 } else { 1165 m_pagePlugins->checkEnablePlugin->setChecked(p->isEnabled()); 1166 } 1167 1168 m_pagePlugins->checkEnablePlugin->setEnabled(!p->alwaysEnabled()); 1169 m_pagePlugins->stackPlugins->setCurrentWidget(w); 1170 1171 slotPluginEnabled(); 1172 } 1173 1174 void KRenameWindow::slotPluginEnabled() 1175 { 1176 QTreeWidgetItem *selected = m_pagePlugins->listPlugins->currentItem(); 1177 if (selected) { 1178 QWidget *w = m_pluginsWidgetHash[selected->text(0)]; 1179 Plugin *p = m_pluginsHash[selected->text(0)]; 1180 1181 p->setEnabled(m_pagePlugins->checkEnablePlugin->isChecked()); 1182 w->setEnabled(p->alwaysEnabled() || m_pagePlugins->checkEnablePlugin->isChecked()); 1183 } 1184 } 1185 1186 void KRenameWindow::blockSignalsRecursive(QObject *obj, bool b) 1187 { 1188 if (obj) { 1189 obj->blockSignals(b); 1190 1191 QList<QObject *> list = obj->children(); 1192 QList<QObject *>::iterator it = list.begin(); 1193 QObject *o = nullptr; 1194 1195 while (it != list.end()) { 1196 o = *it; 1197 if (o && o != obj) { 1198 blockSignalsRecursive(o, b); 1199 } 1200 1201 ++it; 1202 } 1203 } 1204 }