[Digikam-devel] [Bug 103255] wish: *add* (not edit) EXIF headers like date, comment etc

Gilles Caulier caulier.gilles at free.fr
Fri Oct 20 12:12:04 BST 2006


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
http://bugs.kde.org/show_bug.cgi?id=103255         




------- Additional Comments From caulier.gilles free fr  2006-10-20 13:12 -------
SVN commit 597432 by cgilles:

kipiplugins from trunk : MetadataEdit plugin: Exif Exposure informations editor: added lens Focal Length settings.

CCBUGS: 103255

 M  +68 -36    exifexposure.cpp  


--- trunk/extragear/libs/kipi-plugins/metadataedit/exifexposure.cpp #597431:597432
 @ -75,6 +75,7  @
         ISOSpeedCheck        = 0;
         meteringModeCheck    = 0;
         lightSourceCheck     = 0;
+        focalLengthCheck     = 0;
         apertureCB           = 0;
         exposureProgramCB    = 0;
         exposureModeCB       = 0;
 @ -83,6 +84,7  @
         lightSourceCB        = 0;
         exposureTimeNumEdit  = 0;
         exposureTimeDenEdit  = 0;
+        focalLengthEdit      = 0;
 
 /*        apertureMap.insert( 1.0,  Aperture(1, 1) );
         apertureMap.insert( 1.1,  Aperture(1, 1) );
 @ -119,23 +121,26  @
 
     ApertureMap apertureMap;*/
 
-    QCheckBox   *apertureCheck;
-    QCheckBox   *exposureTimeCheck;
-    QCheckBox   *exposureProgramCheck;
-    QCheckBox   *exposureModeCheck;
-    QCheckBox   *ISOSpeedCheck;
-    QCheckBox   *meteringModeCheck;
-    QCheckBox   *lightSourceCheck;
+    QCheckBox      *apertureCheck;
+    QCheckBox      *exposureTimeCheck;
+    QCheckBox      *exposureProgramCheck;
+    QCheckBox      *exposureModeCheck;
+    QCheckBox      *ISOSpeedCheck;
+    QCheckBox      *meteringModeCheck;
+    QCheckBox      *lightSourceCheck;
+    QCheckBox      *focalLengthCheck;
+   
+    QComboBox      *apertureCB;
+    QComboBox      *exposureProgramCB;
+    QComboBox      *exposureModeCB;
+    QComboBox      *ISOSpeedCB;
+    QComboBox      *meteringModeCB;
+    QComboBox      *lightSourceCB;
 
-    QComboBox   *apertureCB;
-    QComboBox   *exposureProgramCB;
-    QComboBox   *exposureModeCB;
-    QComboBox   *ISOSpeedCB;
-    QComboBox   *meteringModeCB;
-    QComboBox   *lightSourceCB;
+    KIntSpinBox    *exposureTimeNumEdit;
+    KIntSpinBox    *exposureTimeDenEdit;
 
-    KIntSpinBox *exposureTimeNumEdit;
-    KIntSpinBox *exposureTimeDenEdit;
+    KDoubleSpinBox *focalLengthEdit;
 };
 
 EXIFExposure::EXIFExposure(QWidget* parent, QByteArray& exifData)
 @ -147,6 +152,15  @
 
     // --------------------------------------------------------
 
+    d->focalLengthCheck = new QCheckBox(i18n("Focal Length (mm):"), parent);
+    d->focalLengthEdit  = new KDoubleSpinBox(1, 10000, 1, 50, 1, parent);
+    grid->addMultiCellWidget(d->focalLengthCheck, 0, 0, 0, 0);
+    grid->addMultiCellWidget(d->focalLengthEdit, 0, 0, 2, 2);
+    QWhatsThis::add(d->focalLengthEdit, i18n("<p>Set here the lens focal lenght in milimeters "
+                                             "used by camera to take the picture."));
+
+    // --------------------------------------------------------
+
     d->apertureCheck = new QCheckBox(i18n("Aperture (f-number):"), parent);
     d->apertureCB    = new QComboBox(false, parent);
     d->apertureCB->insertItem("1.0");
 @ -207,8 +221,8  @
     d->apertureCB->insertItem("72.0");
     d->apertureCB->insertItem("81.0");
     d->apertureCB->insertItem("91.0");
-    grid->addMultiCellWidget(d->apertureCheck, 0, 0, 0, 0);
-    grid->addMultiCellWidget(d->apertureCB, 0, 0, 2, 2);
+    grid->addMultiCellWidget(d->apertureCheck, 1, 1, 0, 0);
+    grid->addMultiCellWidget(d->apertureCB, 1, 1, 2, 2);
     QWhatsThis::add(d->apertureCB, i18n("<p>Select here the lens aperture used by camera "
                                         "to take the picture."));
 
 @ -219,10 +233,10  @
     d->exposureTimeDenEdit = new KIntSpinBox(1, 100000, 1, 1, 10, parent);
     QLabel *exposureLabel  = new QLabel("/", parent);
     exposureLabel->setAlignment (Qt::AlignRight|Qt::AlignVCenter);
-    grid->addMultiCellWidget(d->exposureTimeCheck, 1, 1, 0, 0);
-    grid->addMultiCellWidget(d->exposureTimeNumEdit, 1, 1, 2, 2);
-    grid->addMultiCellWidget(exposureLabel, 1, 1, 3, 3);
-    grid->addMultiCellWidget(d->exposureTimeDenEdit, 1, 1, 4, 4);
+    grid->addMultiCellWidget(d->exposureTimeCheck, 2, 2, 0, 0);
+    grid->addMultiCellWidget(d->exposureTimeNumEdit, 2, 2, 2, 2);
+    grid->addMultiCellWidget(exposureLabel, 2, 2, 3, 3);
+    grid->addMultiCellWidget(d->exposureTimeDenEdit, 2, 2, 4, 4);
     QWhatsThis::add(d->exposureTimeCheck, i18n("<p>Set on this option to set the exposure time "
                     "of picture, given in seconds."));
 
 @ -239,8 +253,8  @
     d->exposureProgramCB->insertItem(i18n("Action program"),    6);
     d->exposureProgramCB->insertItem(i18n("Portrait mode"),     7);
     d->exposureProgramCB->insertItem(i18n("Landscape mode"),    8);
-    grid->addMultiCellWidget(d->exposureProgramCheck, 2, 2, 0, 0);
-    grid->addMultiCellWidget(d->exposureProgramCB, 2, 2, 2, 5);
+    grid->addMultiCellWidget(d->exposureProgramCheck, 3, 3, 0, 0);
+    grid->addMultiCellWidget(d->exposureProgramCB, 3, 3, 2, 5);
     QWhatsThis::add(d->exposureProgramCB, i18n("<p>Select here the program used by the camera "
                                           "to set exposure when the picture have been taken."));
 
 @ -251,8 +265,8  @
     d->exposureModeCB->insertItem(i18n("Auto"),         0);
     d->exposureModeCB->insertItem(i18n("Manual"),       1);
     d->exposureModeCB->insertItem(i18n("Auto bracket"), 2);
-    grid->addMultiCellWidget(d->exposureModeCheck, 3, 3, 0, 0);
-    grid->addMultiCellWidget(d->exposureModeCB, 3, 3, 2, 5);
+    grid->addMultiCellWidget(d->exposureModeCheck, 4, 4, 0, 0);
+    grid->addMultiCellWidget(d->exposureModeCB, 4, 4, 2, 5);
     QWhatsThis::add(d->exposureModeCB, i18n("<p>Select here the mode used by the camera "
                                        "to set exposure when the picture have been shot. "
                                        "In auto-bracketing mode, the camera shoots a "
 @ -271,8 +285,8  @
     d->meteringModeCB->insertItem(i18n("Multi-segment"),           5);
     d->meteringModeCB->insertItem(i18n("Partial"),                 6);
     d->meteringModeCB->insertItem(i18n("Other"),                   7);
-    grid->addMultiCellWidget(d->meteringModeCheck, 4, 4, 0, 0);
-    grid->addMultiCellWidget(d->meteringModeCB, 4, 4, 2, 5);
+    grid->addMultiCellWidget(d->meteringModeCheck, 5, 5, 0, 0);
+    grid->addMultiCellWidget(d->meteringModeCB, 5, 5, 2, 5);
     QWhatsThis::add(d->meteringModeCB, i18n("<p>Select here the metering mode used by the camera "
                                        "to set exposure when the picture have been shot."));
 
 @ -316,8 +330,8  @
     d->ISOSpeedCB->insertItem("20000", 33);
     d->ISOSpeedCB->insertItem("25000", 34);
     d->ISOSpeedCB->insertItem("32000", 35);
-    grid->addMultiCellWidget(d->ISOSpeedCheck, 5, 5, 0, 0);
-    grid->addMultiCellWidget(d->ISOSpeedCB, 5, 5, 2, 5);
+    grid->addMultiCellWidget(d->ISOSpeedCheck, 6, 6, 0, 0);
+    grid->addMultiCellWidget(d->ISOSpeedCB, 6, 6, 2, 5);
     QWhatsThis::add(d->ISOSpeedCB, i18n("<p>Select here the ISO Speed of the digital still camera "
                     "witch have taken the picture."));
 
 @ -346,17 +360,20  @
     d->lightSourceCB->insertItem(i18n("D50"),                                     18);
     d->lightSourceCB->insertItem(i18n("ISO studio tungsten"),                     19);
     d->lightSourceCB->insertItem(i18n("Other light source"),                      20);
-    grid->addMultiCellWidget(d->lightSourceCheck, 6, 6, 0, 0);
-    grid->addMultiCellWidget(d->lightSourceCB, 6, 6, 2, 5);
+    grid->addMultiCellWidget(d->lightSourceCheck, 7, 7, 0, 0);
+    grid->addMultiCellWidget(d->lightSourceCB, 7, 7, 2, 5);
     QWhatsThis::add(d->lightSourceCB, i18n("<p>Select here the kind of light source used "
                                            "to take the picture."));
 
     grid->setColStretch(1, 10);                     
     grid->setColStretch(5, 10);                     
-    grid->setRowStretch(7, 10);                     
+    grid->setRowStretch(8, 10);                     
 
     // --------------------------------------------------------
 
+    connect(d->focalLengthCheck, SIGNAL(toggled(bool)),
+            d->focalLengthEdit, SLOT(setEnabled(bool)));
+
     connect(d->apertureCheck, SIGNAL(toggled(bool)),
             d->apertureCB, SLOT(setEnabled(bool)));
 
 @ -395,9 +412,16  @
 {
     KIPIPlugins::Exiv2Iface exiv2Iface;
     exiv2Iface.setExif(exifData);
-    long int  num=0, den=0;
-    long val=0;
+    long int num=1, den=1;
+    long     val=0;
 
+    if (exiv2Iface.getExifTagRational("Exif.Photo.FocalLength", num, den))
+    {
+        d->focalLengthEdit->setValue((double)(num) / (double)(den));
+        d->focalLengthCheck->setChecked(true);
+    }
+    d->exposureTimeNumEdit->setEnabled(d->focalLengthCheck->isChecked());
+
     if (exiv2Iface.getExifTagRational("Exif.Photo.FNumber", num, den))
     {
         QString aperture = QString::number((double)(num)/(double)(den), 'f', 1);
 @ -479,11 +503,19  @
 {
     KIPIPlugins::Exiv2Iface exiv2Iface;
     exiv2Iface.setExif(exifData);
+    long int num=1, den=1;
 
+    if (d->focalLengthCheck->isChecked())
+    {
+        exiv2Iface.convertToRational(d->focalLengthEdit->value(), &num, &den, 1);
+        exiv2Iface.setExifTagRational("Exif.Photo.FocalLength", num, den);
+    }
+    else
+        exiv2Iface.removeExifTag("Exif.Photo.FocalLength");
+
     if (d->exposureTimeCheck->isChecked())
     {
-        long int num=1, den=1;
-        exiv2Iface.convertToRational(d->apertureCB->currentText().toLong(), &num, &den, 1);
+        exiv2Iface.convertToRational(d->apertureCB->currentText().toDouble(), &num, &den, 1);
         exiv2Iface.setExifTagRational("Exif.Photo.FNumber", num, den);
     }
     else



More information about the Digikam-devel mailing list