//Includes{{{ #include "picture.h" //}}} //Decleration{{{ Picture::Picture(QWidget *parent) : QMainWindow(parent), ui(new Ui::Picture){ ui->setupUi(this); connect(ui->actionOpen_Files,SIGNAL(triggered()),this,SLOT(changeDirectory())); setAcceptDrops(true); //changeDirectory(); fillList(); } Picture::~Picture(){ delete ui; } //}}} //Drag and Drop{{{ void Picture::dragEnterEvent(QDragEnterEvent *event){ if(event->mimeData()->hasUrls()){ ui->tabField->setCurrentIndex(0); event->acceptProposedAction(); } } void Picture::dropEvent(QDropEvent *event){ foreach (const QUrl &url, event->mimeData()->urls()) { const QString &fileName = url.toLocalFile(); ui->fileList->addItem(fileName); } } //}}} //Fill List{{{ void Picture::fillList() { ui->fileList->clear(); foreach(const QString &str,directory.entryList()){ QImageReader reader(directory.absolutePath()+"/"+str); if(!reader.format().isEmpty()){ QString itemString=directory.path()+"/"+str; ui->fileList->addItem(itemString); } } } //}}} //Change Directory{{{ void Picture::on_cd_clicked(){ changeDirectory(); } void Picture::changeDirectory(){ QString path=QFileDialog::getExistingDirectory(this,tr("Directory"),directory.path()); if(path.isNull()==false){ directory.setPath(path); fillList(); ui->log->append("Changed directory to: "+path+"/"); }else{ ui->log->append("Could not change directory"); } } //}}} //Clear File List{{{ void Picture::on_refresh_clicked(){ ui->fileList->clear(); ui->log->append("Cleared File List"); } //}}} //Clear Log{{{ void Picture::on_clearLog_clicked(){ ui->log->setText(""); ui->tabField->setCurrentIndex(0); } //}}} //Process Images{{{ //Switch Tab{{{ void Picture::on_processButton_pressed(){ ui->log->append("Processing images..."); ui->tabField->setCurrentIndex(1); on_processButton_clicked(); } //}}} void Picture::on_processButton_clicked(){ bool ignored=false; //Populate File List{{{ QStringList myStringList; for(int i=0;ifileList->count();++i){ myStringList.append(ui->fileList->item(i)->text()); } //}}} if (ui->labelImagesRadio->isChecked()) { ui->log->append("Writing label"); ui->log->append(ui->labelText->text()); } else { ui->log->append("Not writing labels"); } foreach(const QString &str,myStringList){ QImageReader reader(str); if(!reader.format().isEmpty()){ QString fullPath=str; try{ //Label Images{{{ if(ui->labelImagesRadio->isChecked()){ Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(fullPath.toStdString()); assert (image.get()!=0); image->readMetadata(); if(ui->eraseOtherMetadata->isChecked()){ ui->log->append("Erasing all other image metadata"); image->clearMetadata(); } Exiv2::ExifData &exifData=image->exifData(); exifData["Exif.Photo.UserComment"] = "charset=Ascii "+ui->labelText->text().toStdString(); image->writeMetadata(); //}}} //Erase Metadata{{{ }else{ Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(fullPath.toStdString()); assert(image.get()!=0); image->readMetadata(); image->clearMetadata(); image->writeMetadata(); } //}}} //Catch{{{ }catch(Exiv2::AnyError& e){ QMessageBox msgBox; msgBox.setInformativeText("The program could not process the file: "+fullPath); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.exec(); } //}}} //List Ignored Files{{{ }else{ if(!ignored){ ignored=true; ui->log->append("Ignored Files:"); } ui->log->append(str); } //}}} } ui->log->append("Done processing metadata"); } //}}} void Picture::on_fileList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { ui->gpsData->clear(); QString tmp=current->text(); std::string tmp2=tmp.toStdString(); Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(tmp2); assert(image.get()!=0); image->readMetadata(); Exiv2::ExifData &exifData=image->exifData(); std::string arrStr[7]={"GPSLatitudeRef","GPSLatitude","GPSLongitudeRef","GPSLongitude","GPSAltitudeRef","GPSAltitude","GPSTimeStamp"}; for(int i=0;i<7;i++){ Exiv2::Exifdatum gps=exifData["Exif.GPSInfo."+arrStr[i]]; std::string a; a=gps.toString(); ui->gpsData->append(QString::fromStdString(a)); //qDebug()<gpsData->append(GPSLatitudeRef.toString()); */ }