[KimDaBa] Patch to read Exif information from files.

Marco Caldarelli caldarel at yahoo.it
Thu May 6 20:00:02 CEST 2004


On Thu, May 06, 2004 at 06:20:11PM +0200, Jesper K. Pedersen wrote:
> I haven't tried the patch yet, but could you please rework it in a minor way:
> If images are selected then work on these images only, otherwise work on 
> current context.
> The function MainView::getSelectedOnDisk will giev you exactly this.

Sure, I also added a 'sorry' dialog if none of the images is available.
I repost here the whole diff and the new files.

Cheers,
Marco




--- BEGIN DIFF ---

Index: Makefile.am
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/Makefile.am,v
retrieving revision 1.53
diff -r1.53 Makefile.am
39c39
< 	myimageinfo.cpp myimagecollection.cpp plugininterface.cpp
---
> 	myimageinfo.cpp myimagecollection.cpp plugininterface.cpp readinfodialog.cpp
Index: imagedb.cpp
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/imagedb.cpp,v
retrieving revision 1.38
diff -r1.38 imagedb.cpp
113c113
<             slotReread( missingTimes );
---
>             slotReread( missingTimes, EXIFMODE_TIME );
536c536
<     slotReread(missingTimes);
---
>     slotReread(missingTimes, EXIFMODE_TIME);
540c540
< void ImageDB::slotReread(ImageInfoList rereadList)
---
> void ImageDB::slotReread(ImageInfoList rereadList, int mode)
565c565
<             (*it)->readExif((*it)->fileName(),ImageInfo::Time);
---
>             (*it)->readExif((*it)->fileName(), mode);
Index: imagedb.h
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/imagedb.h,v
retrieving revision 1.22
diff -r1.22 imagedb.h
54c54
<     void slotReread(ImageInfoList rereadList);
---
>     void slotReread(ImageInfoList rereadList, int mode);
Index: imageinfo.cpp
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/imageinfo.cpp,v
retrieving revision 1.52
diff -r1.52 imageinfo.cpp
52c52
<     readExif(fullPath, ImageInfo::Init);
---
>     readExif(fullPath, EXIFMODE_INIT);
387c387
< void ImageInfo::readExif(const QString& fullPath, ExifMode mode)
---
> void ImageInfo::readExif(const QString& fullPath, int mode)
391a392
> 
403c404,405
<     if( mode == ImageInfo::Time ) {
---
>     //Time
>     if ( mode & EXIFMODE_TIME ) {
405d406
<             //Time
417,418c418,420
<     else if ( mode == ImageInfo::Init ) {
<         // Date
---
> 
>     // Date
>     if ( mode & EXIFMODE_DATE ) {
447,463d448
< 
< 
<             //Time
<             if (exif.contains( QString::fromLatin1( "CreationTime" ) ) ){
< 
<                 QTime time = exif[QString::fromLatin1( "CreationTime" )].toTime();
<                 if (time.isValid())
<                     _startDate.setTime( time );
< 
<             }
<             else{
< 
<                 QTime time = fi.lastModified().time();
<                 _startDate.setTime( time );
< 
<             }
< 
465c450,453
<         // Orientation
---
>     }
> 
>     // Orientation
>     if ( mode & EXIFMODE_ORIENTATION ) {
476a465
>     }
478c467,468
<         // Description
---
>     // Description
>     if ( mode & EXIFMODE_DESCRIPTION ) {
486d475
< 
Index: imageinfo.h
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/imageinfo.h,v
retrieving revision 1.32
diff -r1.32 imageinfo.h
33a34,39
> #define EXIFMODE_TIME          1
> #define EXIFMODE_DATE          2
> #define EXIFMODE_ORIENTATION   4
> #define EXIFMODE_DESCRIPTION   8
> #define EXIFMODE_INIT ( EXIFMODE_TIME | EXIFMODE_DATE | EXIFMODE_ORIENTATION | EXIFMODE_DESCRIPTION )
> 
37d42
<     enum ExifMode { Init, Time };
59c64
<     void readExif(const QString& fullPath, ExifMode mode);
---
>     void readExif(const QString& fullPath, int mode);
Index: kimdabaui.rc
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/kimdabaui.rc,v
retrieving revision 1.22
diff -r1.22 kimdabaui.rc
27a28
>       <Action name="readInfoSelected" />
49a51
>       <Action name="readInfo" />
Index: mainview.cpp
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/mainview.cpp,v
retrieving revision 1.119
diff -r1.119 mainview.cpp
72a73
> #include "readinfodialog.h"
78c79,80
<      _deleteDialog( 0 ), _dirtyIndicator(0), _htmlDialog(0)
---
>      _deleteDialog( 0 ), _readInfoDialog( 0 ), _dirtyIndicator(0),
>      _htmlDialog(0)
319a322,345
> void MainView::slotReadInfoSelected()
> {
>     ImageInfoList listOnDisk = getSelectedOnDisk();
> 
>     if ( listOnDisk.count() == 0 ) {
>         KMessageBox::sorry( this, i18n("None of the selected images were available on the disk.") );
>     } else {
>         if ( ! _readInfoDialog )
>             _readInfoDialog = new ReadInfoDialog( this );
>         if ( _readInfoDialog->exec( listOnDisk ) == QDialog::Accepted )
>             setDirty( true );
>     }
> }
> 
> 
> void MainView::slotReadInfo()
> {
>     if ( ! _readInfoDialog )
>         _readInfoDialog = new ReadInfoDialog( this );
>     if ( _readInfoDialog->exec( ImageDB::instance()->images() ) == QDialog::Accepted )
>         setDirty( true );
> }
> 
> 
584a611
>     _readInfoSelected = new KAction( i18n("Read EXIF info from selected files..."), 0, this, SLOT( slotReadInfoSelected() ), actionCollection(), "readInfoSelected" );
604a632
>     new KAction( i18n("Read EXIF info from all files..."), 0, this, SLOT( slotReadInfo() ), actionCollection(), "readInfo" );
1087a1116
>     _readInfoSelected->setEnabled( thumbNailView );
Index: mainview.h
===================================================================
RCS file: /home/kde/kdeextragear-2/kimdaba/mainview.h,v
retrieving revision 1.58
diff -r1.58 mainview.h
28a29
> class ReadInfoDialog;
56a58,59
>     void slotReadInfoSelected();
>     void slotReadInfo();
125a129
>     ReadInfoDialog* _readInfoDialog;
136a141
>     KAction* _readInfoSelected;


---- END DIFF ---





---- BEGIN NEW FILE readinfodialog.h ---

#ifndef READINFODIALOG_H
#define READINFODIALOG_H
#include "imageinfo.h"
#include <kdialogbase.h>
class QLabel;
class QCheckBox;
class QRadioButton;

class ReadInfoDialog :public KDialogBase {
    Q_OBJECT

public:
    ReadInfoDialog( QWidget* parent, const char* name = 0 );
    int exec( const ImageInfoList& );

protected slots:
    void readInfo();
private:
    ImageInfoList _list;
    QLabel* _label;
    QCheckBox* _time;
    QCheckBox* _date;
    QCheckBox* _orientation;
    QCheckBox* _description;
    QCheckBox* _init;
};


#endif /* READINFODIALOG_H */

---- END FILE readinfodialog.h ---





---- BEGIN NEW FILE readinfodialog.cpp ---

#include "readinfodialog.h"
#include <klocale.h>
#include <qlabel.h>
#include <qcheckbox.h>
#include <qradiobutton.h>
#include <qlayout.h>
#include <qbuttongroup.h>
#include <qfile.h>
#include <kmessagebox.h>
#include "imagedb.h"
#include "imageinfo.h"
#include "util.h"

ReadInfoDialog::ReadInfoDialog( QWidget* parent, const char* name )
    :KDialogBase( Plain, i18n("Read File Info"), Cancel|User1, User1, parent, name,
                  true, false, i18n("Read File Info"))
{
    QWidget* top = plainPage();
    QVBoxLayout* lay1 = new QVBoxLayout( top, 6 );

    _label = new QLabel( top );
    lay1->addWidget( _label );

    _time = new QCheckBox( i18n( "Read time" ), top );
    lay1->addWidget( _time );

    _date = new QCheckBox( i18n( "Read date" ), top );
    lay1->addWidget( _date );

    _orientation = new QCheckBox( i18n( "Read EXIF orientation" ), top );
    lay1->addWidget( _orientation );

    _description = new QCheckBox( i18n( "Read EXIF description" ), top );
    lay1->addWidget( _description );

    _init = new QCheckBox( i18n( "Read all (time, date, orientation and description)" ), top );
    lay1->addWidget( _init );

    connect( this, SIGNAL( user1Clicked() ), this, SLOT( readInfo() ) );
}

int ReadInfoDialog::exec( const ImageInfoList& list )
{
    _label->setText( i18n("<qt><b><center><font size=\"+3\">Read File Info<br>%1 selected</font></center></b></qt>").arg( list.count() ) );

    _init->setChecked( true );
    _time->setChecked( false );
    _date->setChecked( false );
    _orientation->setChecked( false );
    _description->setChecked( false );
    _list = list;

    return KDialogBase::exec();
}

void ReadInfoDialog::readInfo()
{
    int mode = 0;

    if ( _init->isChecked() )
            mode |= EXIFMODE_INIT;
    else {
            if ( _time->isChecked() )
                    mode |= EXIFMODE_TIME;
            if ( _date->isChecked() )
                    mode |= EXIFMODE_DATE;
            if ( _orientation->isChecked() )
                    mode |= EXIFMODE_ORIENTATION;
            if ( _description->isChecked() )
                    mode |= EXIFMODE_DESCRIPTION;
    }
    ImageDB::instance()->slotReread(_list, mode);
    accept();
}

#include "readinfodialog.moc"

---- END FILE readinfodialog.cpp ---



More information about the KimDaBa mailing list