File indexing completed on 2024-12-08 13:34:32
0001 /*************************************************************************** 0002 krenameimpl.h - description 0003 ------------------- 0004 begin : Die Mai 20 2003 0005 copyright : (C) 2003 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 #ifndef KRENAMEIMPL_H 0019 #define KRENAMEIMPL_H 0020 0021 #include <QObject> 0022 0023 #include <QUrl> 0024 0025 #include <KSharedConfig> 0026 0027 #include "batchrenamer.h" 0028 #include "krenamefile.h" 0029 0030 class KRenameModel; 0031 class KRenamePreviewModel; 0032 class KRenameWindow; 0033 class ThreadedLister; 0034 class PluginLoader; 0035 class QLineEdit; 0036 class QCommandLineParser; 0037 0038 class KRenameImpl : public QObject 0039 { 0040 Q_OBJECT 0041 0042 public: 0043 ~KRenameImpl(); 0044 0045 static QWidget *launch(const QRect &rect, const KRenameFile::List &list, QCommandLineParser *commandLine = 0); 0046 0047 public Q_SLOTS: 0048 /** Updates the preview of the filenames after renaming 0049 */ 0050 void slotUpdatePreview(); 0051 0052 private: 0053 KRenameImpl(KRenameWindow *window, const KRenameFile::List &list , QCommandLineParser *commandLine = 0); 0054 0055 /** Connect all gui components with their slots 0056 */ 0057 void setupSlots(); 0058 0059 /** Adds a single url to the list of files which will 0060 * be renamed. 0061 * 0062 * If you have a QList<QUrl> use addFilesOrDirs which is 0063 * faster. 0064 * 0065 * \param url must be an existing file or directory. 0066 * 0067 * \see addFilesOrDirs 0068 */ 0069 void addFileOrDir(const QUrl &url); 0070 0071 /** Adds a list of urls to the list of files which will 0072 * be renamed. 0073 * 0074 * Adding a whole list is much faster than adding single 0075 * files. 0076 * 0077 * \param list of existing files or directories 0078 * \param filter only add files or directories matching this filter 0079 * \param recursively if true all directories will be added recursively 0080 * \param dirsWithFiles add directory names along with their contents 0081 * \param dirsOnly add only directories and no files 0082 * \param hidden add also hidden files and directories 0083 * 0084 * \see addFileOrDir 0085 */ 0086 void addFilesOrDirs(const QList<QUrl> &list, const QString &filter = "*", 0087 bool recursively = false, bool dirsWithFiles = false, 0088 bool dirsOnly = false, bool hidden = false); 0089 0090 /** Parses commandline options 0091 */ 0092 void parseCmdLineOptions(QCommandLineParser *parser); 0093 0094 /** Load configuration 0095 */ 0096 void loadConfig(); 0097 0098 private Q_SLOTS: 0099 /** Save configuration 0100 */ 0101 void saveConfig(); 0102 0103 /** Start KRename's selftest: 0104 * I.e several unit tests. 0105 */ 0106 void selfTest(); 0107 0108 /** Called when the user clicks the "Add..." button. 0109 * open a dialog to select files for adding to KRename. 0110 */ 0111 void slotAddFiles(); 0112 0113 /** Called when the user clicks the "Remove" buttons. 0114 * Remove selected files from the list. 0115 */ 0116 void slotRemoveFiles(); 0117 0118 /** Called when the user clicks the "Remove All..." buttons. 0119 * Remove all files from the list. 0120 */ 0121 void slotRemoveAllFiles(); 0122 0123 /** Updates the count of files 0124 * in the file list of KRename 0125 */ 0126 void slotUpdateCount(); 0127 0128 /** This slot shows a dialog with advanced numbering settings 0129 * - start index 0130 * - stepping 0131 * - reset counter on each new directory 0132 * - skip numbers list 0133 * 0134 */ 0135 void slotAdvancedNumberingDlg(); 0136 0137 /** This slots shows a dialog which allows the user 0138 * to confortably insert a part of an oldfilename into the 0139 * new filename (part is to be understood as "substring") 0140 */ 0141 void slotInsertPartFilenameDlg(); 0142 0143 /** This slot shows a dialog which allows the user to configure find and replace 0144 */ 0145 void slotFindReplaceDlg(); 0146 0147 /** Start the actual renaming 0148 * with the current settings 0149 */ 0150 void slotStart(); 0151 0152 /** Clean's up and deletes the lister after he has done 0153 * all his work. 0154 * 0155 * \param lister a ThreadedLister which has done his work 0156 */ 0157 void slotListerDone(ThreadedLister *lister); 0158 0159 /** Show a TokenHelpDialog that works on a QLineEdit 0160 * 0161 * \param edit insert user selected tokens into this linedit 0162 */ 0163 void slotTokenHelpDialog(QLineEdit *edit); 0164 0165 /** Called when the user selects another extension split mode 0166 * 0167 * @param splitMode the mode which is used to split filename and extension 0168 * @param dot the n-th dot to use for splitting if splitMode = eSplitMode_CustomDot 0169 */ 0170 void slotExtensionSplitModeChanged(ESplitMode splitMode, int dot); 0171 0172 private: 0173 KRenameWindow *m_window; 0174 KRenameModel *m_model; 0175 KRenamePreviewModel *m_previewModel; 0176 0177 KRenameFile::List m_vector; 0178 0179 BatchRenamer m_renamer; 0180 0181 ESplitMode m_lastSplitMode; ///< The last used split mode 0182 int m_lastDot; ///< The last used dot value for splitmode 0183 0184 PluginLoader *m_pluginLoader; ///< Global plugin loader instance 0185 0186 int m_runningThreadedListersCount; ///< Count of running threaded listers 0187 }; 0188 0189 #if 0 0190 // Own includes 0191 /* 0192 #include "batchrenamer.h" 0193 #include "krenamedcop.h" 0194 */ 0195 class HelpDialog; 0196 class HelpDialogData; 0197 class KAction; 0198 class KComboBox; 0199 class KJanusWidget; 0200 class KMyHistoryCombo; 0201 class KMyListBox; 0202 class KMyListView; 0203 class KMenuBar; 0204 class KPopupMenu; 0205 class QPushButton; 0206 class KURL; 0207 class KURLRequester; 0208 class KIntNumInput; 0209 class MyHelpCombo; 0210 class Plugin; 0211 class PluginLoader; 0212 class QButtonGroup; 0213 class QCheckBox; 0214 class QGroupBox; 0215 class QFileInfo; 0216 class QHBoxLayout; 0217 class QLabel; 0218 class QLineEdit; 0219 class QPushButton; 0220 class QRect; 0221 class QWidgetStack; 0222 class QRadioButton; 0223 class QVBoxLayout; 0224 class QVGroupBox; 0225 class QWidget; 0226 0227 #include <kguiitem.h> 0228 QPushButton *createButton(KGuiItem item, QWidget *parent); 0229 0230 class KRenameImpl : public QObject, public KRenameDCOP 0231 { 0232 Q_OBJECT 0233 0234 friend class ProfileManager; 0235 friend class ProfileDlg; 0236 friend class tabs; 0237 0238 public: 0239 KRenameImpl(QWidget *p, KMenuBar *m, QPushButton *finish); 0240 ~KRenameImpl(); 0241 0242 void setWizardMode(bool mode); 0243 0244 /* 0245 * public because both get called from KRenameImpl::launch() 0246 */ 0247 void updatePre(); 0248 void addFileOrDir(const KURL &name); 0249 0250 void setup(bool wizardmode); 0251 void changeParent(QWidget *p, KMenuBar *m, QPushButton *finish, QRect r); 0252 static QWidget *launch(QRect rect, const KURL::List &list, KRenameImpl *impl = 0, bool loadprofile = true); 0253 0254 /** DCOP functions we have to implement 0255 */ 0256 void addFileOrDir(const QString &name); 0257 const QString fileNameTemplate() const; 0258 inline int counterStart() const; 0259 0260 void setExtensionTemplate(const QString &t); 0261 const QString extensionTemplate() const; 0262 0263 void setUseExtension(bool b); 0264 bool useExtension() const; 0265 0266 QStringList tokens() const; 0267 0268 QString parseString(const QString &token, const QString &string); 0269 void addDir(const QString &name, const QString &filter, bool recursive, bool hidden, bool dirnames); 0270 0271 const QString title(int index) const; 0272 0273 /** @returns true if the user has specified a profile on the commandline 0274 * other wise false is returned 0275 */ 0276 inline bool hasCommandlineProfile() const; 0277 0278 public Q_SLOTS: 0279 void setFileNameTemplate(const QString &t); 0280 void setCounterStart(int index); 0281 0282 Q_SIGNALS: 0283 void pageDone(QWidget *page, const QString &title); 0284 void showPage(int page); 0285 void enableFinish(bool b); 0286 0287 private Q_SLOTS: 0288 void about(); 0289 void addFile(); 0290 bool checkErrors(); 0291 void clearList(); 0292 void enableControls(); 0293 void toggleImagePreview(); 0294 void moveUp(); 0295 void moveDown(); 0296 void help(); 0297 void removeFile(); 0298 void removeFile(int index); 0299 void preferences(); 0300 void replace(); 0301 void saveConfig(); 0302 void start(); 0303 void updateCount(); 0304 void undo(); 0305 void changeUndoScriptName(); 0306 void pluginHelpChanged(); 0307 void getCoordinates(); 0308 void changeNumbers(); 0309 void updateDots(); 0310 void updatePreview(); 0311 void showTokenHelp(); 0312 void toggleName(); 0313 void changed(); 0314 void loadFilePlugins(); 0315 void reloadFilePluginData(); 0316 void manageProfiles(); 0317 QString easyOptions(KComboBox *combo, KMyHistoryCombo *custom); 0318 void slotEasy1(); 0319 void slotEasy2(); 0320 void slotEasy3(); 0321 void slotEasy4(); 0322 0323 /** Update the preview only if the passed 0324 * plugin is enabled for use. 0325 */ 0326 void updatePluginPreview(Plugin *p); 0327 0328 private: 0329 static int numRealTimePreview; 0330 0331 /** Change the GUI mode according to the current setting of m_wizard 0332 */ 0333 void changeGUIMode(); 0334 0335 /** Returns COPY if optionCopy is checked, RENAME if optionRename is checked 0336 * ... 0337 */ 0338 int currentRenameMode(); 0339 0340 void loadConfig(); 0341 void fillStructures(BatchRenamer *b, bool preview); 0342 bool setupBatchRenamer(BatchRenamer *b, bool preview); 0343 void splitFilename(QFileInfo *fi, QString *base, QString *extension); 0344 0345 void setupPage1(); 0346 void setupPage2(); 0347 void setupPage3(); 0348 void setupPage4(); 0349 void setupTab1(); 0350 void setupFileTab1(); 0351 void setupFileTab2(); 0352 void setupPages(); 0353 void updateHist(); 0354 void parseCommandline(); 0355 void addTitle(QWidget *p, QVBoxLayout *layout, QString title); 0356 0357 QValueList<manualchanges> changes; 0358 void refreshColumnMode(); 0359 void parseWizardMode(); 0360 void getHelpDialogString(QLineEdit *edit); 0361 0362 protected: 0363 QWidget *parent; 0364 KMenuBar *menuBar; 0365 KPopupMenu *mnuSort; 0366 KAction *loadPlugins; 0367 0368 QPushButton *finishButton; 0369 0370 PluginLoader *plugin; 0371 0372 QWidgetStack *fileTab; 0373 0374 QWidget *page_1; 0375 QWidget *page_2; 0376 KJanusWidget *page_3; 0377 QWidget *page_4; 0378 0379 bool m_wizard; 0380 bool m_loadplugins; 0381 bool m_switching; 0382 bool m_autosize; 0383 int m_hist; 0384 int m_index; 0385 int m_step; 0386 bool m_reset; 0387 0388 bool m_hasCommandlineProfile; 0389 0390 QPushButton *buttonUp; 0391 QPushButton *buttonDown; 0392 QPushButton *buttonUp2; 0393 QPushButton *buttonDown2; 0394 QPushButton *buttonAdd; 0395 QPushButton *buttonRemove; 0396 QPushButton *buttonRemoveAll; 0397 QPushButton *buttonReplace; 0398 QPushButton *buttonEasyReplace; 0399 QPushButton *buttonHelp; 0400 QPushButton *buttonMove; 0401 QPushButton *buttonCoord; 0402 QPushButton *buttonNumber; 0403 0404 QPushButton *buttonEasy1; 0405 QPushButton *buttonEasy2; 0406 QPushButton *buttonEasy3; 0407 QPushButton *buttonEasy4; 0408 KComboBox *comboSort; 0409 0410 QLabel *description; 0411 QLabel *description2; 0412 QLabel *description3; 0413 QLabel *description4; 0414 0415 QLabel *labelTemplate; 0416 QLabel *labelHelp; 0417 QLabel *labelCount; 0418 QLabel *labelPoint; 0419 0420 KMyListBox *fileList; 0421 KMyListView *preview; 0422 QButtonGroup *groupOptions; 0423 0424 QRadioButton *optionCopy; 0425 QRadioButton *optionMove; 0426 QRadioButton *optionRename; 0427 QRadioButton *optionLink; 0428 0429 QGroupBox *groupExtension; 0430 QVGroupBox *groupUndo; 0431 0432 KMyHistoryCombo *dirname; 0433 KURLRequester *urlrequester; 0434 KURLRequester *undorequester; 0435 KMyHistoryCombo *filename; 0436 KMyHistoryCombo *extemplate; 0437 0438 QCheckBox *checkName; 0439 QCheckBox *checkExtension; 0440 QCheckBox *checkOverwrite; 0441 QCheckBox *checkPreview; 0442 QCheckBox *checkUndoScript; 0443 0444 KComboBox *comboExtension; 0445 0446 MyHelpCombo *comboHelp; 0447 HelpDialog *helpDialog; 0448 HelpDialogData *helpDialogData; 0449 0450 BatchRenamer *b; 0451 QValueList<int> skip; 0452 QValueList<replacestrings> rep; 0453 0454 // ========== 0455 // Easy mode: 0456 // ========== 0457 0458 KComboBox *comboKRenamePrefix; 0459 KComboBox *comboKRenameSuffix; 0460 KComboBox *comboKRenameFilename; 0461 KComboBox *comboKRenameExtension; 0462 0463 KMyHistoryCombo *comboPrefix; 0464 KMyHistoryCombo *comboSuffix; 0465 KMyHistoryCombo *comboCustom; 0466 KMyHistoryCombo *comboCustomExtension; 0467 0468 KIntNumInput *spinStart; 0469 KIntNumInput *spinNull; 0470 0471 // =========== 0472 // Layout: 0473 // =========== 0474 0475 QHBoxLayout *pageLayout; 0476 QVBoxLayout *pageLayout_2; 0477 QVBoxLayout *pageLayout_3; 0478 QVBoxLayout *pageLayout_4; 0479 0480 QHBoxLayout *tabLayout_0; 0481 QHBoxLayout *tabLayout_1; 0482 QHBoxLayout *tabLayout_2; 0483 QVBoxLayout *tabLayout_3; 0484 QVBoxLayout *groupAdvancedExtensionLayout; 0485 QVBoxLayout *groupOptionsLayout; 0486 QHBoxLayout *groupDirLayout; 0487 QVBoxLayout *groupNumberLayout; 0488 QHBoxLayout *groupExtensionLayout; 0489 0490 // page1 0491 QHBoxLayout *Layout2; 0492 QVBoxLayout *Layout3; 0493 QHBoxLayout *Layout4; 0494 QVBoxLayout *Layout5; 0495 0496 // page4 0497 QVBoxLayout *Layout10; 0498 QHBoxLayout *Layout15; 0499 QVBoxLayout *Layout16; 0500 QHBoxLayout *Layout22; 0501 QVBoxLayout *Layout23; 0502 0503 // tab 0504 QHBoxLayout *Layout100; 0505 QHBoxLayout *Layout101; 0506 }; 0507 0508 int KRenameImpl::counterStart() const 0509 { 0510 return m_index; 0511 } 0512 0513 bool KRenameImpl::hasCommandlineProfile() const 0514 { 0515 return m_hasCommandlineProfile; 0516 } 0517 #endif // 0 0518 #endif