[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/extragear/kde3/libs/kipi-plugins/batchprocessimages
From:       Aurélien Gâteau <aurelien.gateau () free ! fr>
Date:       2008-12-10 22:30:01
Message-ID: 1228948201.934023.18900.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 895529 by gateau:

Applied patches from Piotr Tarnowski and tomas to provide more formating
options to the batch renamer.
BUG:132982


 M  +9 -1      renameimagesbase.ui  
 M  +109 -15   renameimageswidget.cpp  


--- branches/extragear/kde3/libs/kipi-plugins/batchprocessimages/renameimagesbase.ui #895528:895529
@@ -62,7 +62,7 @@
                         <string>Add original file name</string>
                     </property>
                 </widget>
-                <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="2">
+                <widget class="QCheckBox" row="3" column="0">
                     <property name="name">
                         <cstring>m_addFileDateCheck</cstring>
                     </property>
@@ -70,6 +70,14 @@
                         <string>Add file date</string>
                     </property>
                 </widget>
+                <widget class="QCheckBox" row="3" column="1">
+                    <property name="name">
+                        <cstring>m_useExtraSymbolsCheck</cstring>
+                    </property>
+                    <property name="text">
+                        <string>Use extra [X*] symbols in date format field</string>
+                    </property>
+                </widget>
                 <widget class="QLineEdit" row="4" column="1">
                     <property name="name">
                         <cstring>m_formatDateEdit</cstring>
--- branches/extragear/kde3/libs/kipi-plugins/batchprocessimages/renameimageswidget.cpp #895528:895529
@@ -50,6 +50,9 @@
 #include <qprogressdialog.h>
 #include <qgroupbox.h>
 #include <qpopupmenu.h>
+#include <qregexp.h>
+#include <qdir.h>
+#include <qtooltip.h>
 
 // KDE includes.
 
@@ -97,6 +100,22 @@
     sortMenu->insertItem(i18n("Sort by Date"), BYDATE);
     m_sortButton->setPopup(sortMenu);
 
+    QToolTip::add(m_useExtraSymbolsCheck,
+            "[e] - extension (small one - after last '.')\n"
+            "[e-] - extension lower case\n"
+            "[e+] extension upper case\n"
+            "[i] - sequence number - no leading zeros\n"
+            "[i:4] - sequence number in 4 digit with leading zeros format\n"
+            "[n] - original file name\n"
+            "[n+] - original file name upper case\n"
+            "[n-] - original file name lower case\n"
+            "[n:5..-2] - substring of original filename from char 5 to second from the end\n"
+            "[n+:..5] - whole name (base + extension, characters from 1 to 5)\n"
+            "[a] - album name\n"
+            "[p+] - absolute path (uppercase)\n"
+            "[B:4..-2] - base name (big one - all before last ',', from 4-th to one before last characters)\n"
+            "[b-:-3..] - base name (small one - all before first '.', last 3 characters)");
+
     connect(m_listView, SIGNAL(doubleClicked(QListViewItem*)),
             SLOT(slotListViewDoubleClicked(QListViewItem*)));
     connect(m_listView, SIGNAL(selectionChanged(QListViewItem*)),
@@ -108,6 +127,8 @@
             SLOT(slotOptionsChanged()));
     connect(m_addFileNameCheck, SIGNAL(toggled(bool)),
             SLOT(slotOptionsChanged()));
+    connect(m_useExtraSymbolsCheck, SIGNAL(toggled(bool)),
+            SLOT(slotOptionsChanged()));
     connect(m_addFileDateCheck, SIGNAL(toggled(bool)),
             SLOT(slotOptionsChanged()));
     connect(m_formatDateCheck, SIGNAL(toggled(bool)),
@@ -169,6 +190,7 @@
     m_seqSpin->setValue(config.readNumEntry("FirstRenameValue", 1));
 
     m_addFileNameCheck->setChecked(config.readBoolEntry("AddOriginalFileName", false));
+    m_useExtraSymbolsCheck->setChecked(config.readBoolEntry("UseExtraSymbolsCheck", false));
     m_addFileDateCheck->setChecked(config.readBoolEntry("AddImageFileDate", false));
     m_formatDateCheck->setChecked(config.readBoolEntry("FormatDate", false));
     m_formatDateEdit->setText(config.readEntry("FormatDateString", "%Y-%m-%d"));
@@ -185,6 +207,7 @@
     config.writeEntry("FirstRenameValue", m_seqSpin->value());
 
     config.writeEntry("AddOriginalFileName", m_addFileNameCheck->isChecked());
+    config.writeEntry("UseExtraSymbolsCheck", m_useExtraSymbolsCheck->isChecked());
     config.writeEntry("AddImageFileDate", m_addFileDateCheck->isChecked());
     config.writeEntry("FormatDate", m_formatDateCheck->isChecked());
     config.writeEntry("FormatDateString", m_formatDateEdit->text());
@@ -195,6 +218,7 @@
 void RenameImagesWidget::slotOptionsChanged()
 {
     m_formatDateCheck->setEnabled(m_addFileDateCheck->isChecked());
+    m_useExtraSymbolsCheck->setEnabled(m_addFileDateCheck->isChecked());
     m_formatDateEdit->setEnabled(m_formatDateCheck->isEnabled() &&
                                  m_formatDateCheck->isChecked());
 
@@ -337,6 +361,9 @@
 
     KIPI::ImageInfo info = m_interface->info(url);
     
+    bool useExtraSymbols = m_addFileDateCheck->isChecked() && 
+        m_useExtraSymbolsCheck->isChecked();
+
     QString newName = m_prefixEdit->text();
     
     if (m_addFileNameCheck->isChecked())
@@ -345,13 +372,74 @@
         newName += "_";
     }
 
+    int seqNumber = itemPosition + m_seqSpin->value();
     if (m_addFileDateCheck->isChecked())
     {
         QString format = m_formatDateEdit->text();
         format = format.simplifyWhiteSpace();
+        if (useExtraSymbols)
+        {
+            QRegExp rxI("\\[i(:(\\d+))?\\]");
+            QRegExp rxN("\\[([anbBeEp])([-+]?)(:(\\d*|-\\d+)\\.\\.(\\d*|-\\d+))?\\]");
+
+            for(int watchDog = 0; watchDog < 100; watchDog++)
+            {
+                QString to;
+                int j, i = rxI.search(format);
+                if (i != -1)
+                {
+                    j = rxI.matchedLength();
+                    QString digits = rxI.cap(2);
+                    int k = (!digits || !digits.length()) ? 0 : digits.toInt();
+                    if (k < 2)
+                    {
+                        to = QString::number(seqNumber);
+                    }
+                    else
+                    {
+                        QString fmt;
+                        fmt.sprintf("0%dd", (k > 10 ? 10 : k));
+                        fmt = "%" + fmt;
+                        to.sprintf(fmt.latin1(), seqNumber);
+                    }
+                }
+                else
+                {
+                    if ((i = rxN.search(format)) == -1)
+                    { 
+                        break; 
+                    }
+                    j = rxN.matchedLength();
+                    QString from = rxN.cap(1);
+                    from = (from == "e") ? fi.extension(/*complete=*/FALSE) :
+                           (from == "E") ? fi.extension(/*complete=*/TRUE) :
+                           (from == "b") ? fi.baseName(/*complete=*/FALSE) :
+                           (from == "B") ? fi.baseName(/*complete=*/TRUE) :
+                           (from == "n") ? fi.fileName() :
+                           (from == "a") ? fi.dir(/*absPath=*/TRUE).dirName() :
+                           (from == "p") ? fi.dirPath(/*absPath=*/TRUE) :
+                           "";
+                    int len = from.length();
+                    QString start = rxN.cap(4);
+                    QString end = rxN.cap(5);
+                    int k = (!start || !start.length()) ? 1 : start.toInt();
+                    int l = (!end || !end.length()) ? len : end.toInt();
+                    k = (k < -len) ? 0 : (k < 0) ? (len + k) : (k > 0) ? (k - 1) : 0;
+                    l = (l < -len) ? -1 : (l < 0) ? (len + l) : (l > 0) ? (l - 1) : 0;
+                    to = l < k ? "" : from.mid(k, l - k + 1);
+                    QString changeCase = rxN.cap(2);
+                    if (!!changeCase && changeCase.length())
+                    {
+                        to = (changeCase == "+") ? to.upper() : to.lower();
+                    }
+                }
+                format.replace(i, j, to);
+            }
+        }
         format.replace("%%","%");
         format.replace("%s","");
-        format.replace("/", "");
+        format.replace("/", "!");
+        format.replace("%[","% [");
 
         time_t time = info.time().toTime_t();
         struct tm* time_tm = ::localtime(&time);
@@ -359,26 +447,32 @@
         ::strftime(s, 100, QFile::encodeName(format), time_tm);
 
         newName += QString::fromLatin1(s);
-        newName += "_";
+        if (!useExtraSymbols)
+        {
+            newName += "_";
+        }
     }
 
-    int count = m_listView->childCount();
-    int numDigits = 1;
-    while (count > 0)
+    if (!useExtraSymbols)
     {
-        numDigits++;
-        count = count / 10;
-    }
+        int numDigits = 1;
+        int count = m_listView->childCount();
+        while (count > 0)
+        {
+            numDigits++;
+            count = count / 10;
+        }
 
-    QString format;
-    format.sprintf("0%dd", numDigits);
-    format = "%" + format;
+        QString format;
+        format.sprintf("0%dd", numDigits);
+        format = "%" + format;
 
-    QString seq;
-    seq.sprintf(format.latin1(), itemPosition + m_seqSpin->value());
-    newName += seq;
+        QString seq;
+        seq.sprintf(format.latin1(), seqNumber);
+        newName += seq;
 
-    newName += QString::fromLatin1(".") + fi.extension();
+        newName += QString::fromLatin1(".") + fi.extension();
+    }
     
     return newName;
 }
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic