bool BLocalDocumentDriver::getSaveAsFileName(QWidget *parent, const QString &fileName, QString &newName,
                                             QTextCodec *&codec, BeQt::LineFeed &lineFeed)
{
    if (!editor())
        return false;
    B_D(BLocalDocumentDriver);
    BExtendedFileDialog bfd(d->codecsComboBoxStyle, parent);
    bfd.restoreState(d->fileDialogState);
    if (!bfd.restoreGeometry(d->fileDialogGeometry))
        bfd.resize(700, 400);
    bfd.setFileTypes(editor()->fileTypes());
    bfd.selectCodec(codec);
    bfd.setAcceptMode(BExtendedFileDialog::AcceptSave);
    bfd.setFileMode(QFileDialog::AnyFile);
    QString dir = QFileInfo(fileName).path();
    if (dir != "." && QDir(dir).exists())
        bfd.setDirectory(dir); //TODO: Maybe should improve (needs testing)
    else if (d->fileDialogState.isEmpty())
        bfd.setDirectory(d->defaultDir);
    bfd.selectFile(fileName);
    //bfd.selectLineFeed(lineFeed);
    int ret = bfd.exec();
    d->fileDialogState = bfd.saveState();
    d->fileDialogGeometry = bfd.saveGeometry();
    if (BExtendedFileDialog::Accepted != ret)
        return false;
    newName = bfd.selectedFiles().first();
    codec = bfd.selectedCodec();
    lineFeed = bfd.selectedLineFeed();
    return true;
}
bool BLocalDocumentDriver::getOpenFileNames(QWidget *parent, QStringList &fileNames, QTextCodec *&codec)
{
    if (!editor())
        return false;
    B_D(BLocalDocumentDriver);
    BExtendedFileDialog bfd(d->codecsComboBoxStyle, parent);
    bfd.restoreState(d->fileDialogState);
    if (!bfd.restoreGeometry(d->fileDialogGeometry))
        bfd.resize(700, 400);
    if (d->fileDialogState.isEmpty())
        bfd.setDirectory(d->defaultDir);
    bfd.setFileTypes(editor()->fileTypes());
    bfd.selectFileType(d->lastFileType ? d->lastFileType : editor()->preferredFileType());
    if (codec)
        bfd.selectCodec(codec);
    bfd.setAcceptMode(BExtendedFileDialog::AcceptOpen);
    bfd.setFileMode(QFileDialog::ExistingFiles);
    int ret = bfd.exec();
    d->fileDialogState = bfd.saveState();
    d->fileDialogGeometry = bfd.saveGeometry();
    d->lastFileType = bfd.selectedFileType();
    if (BExtendedFileDialog::Accepted != ret)
        return false;
    fileNames = bfd.selectedFiles();
    codec = bfd.selectedCodec();
    return true;
}
void ImageImporter::importFiles(QFileInfoList* lstFiles, const QString& baseFolder,
                                const QString& subfolder, const QString& fileName,
                                bool lowercaseFileNames, bool moveFiles, DlgImageImporterStatus* dlgStatus)
{
    QRegExp re(m_txtSourceFilename->text(), !m_chkIgnoreCase->isChecked());
    if (!re.isValid()) {
        dlgStatus->appendErrorMessage(i18n("Invalid Regular Expression!"));
        dlgStatus->setCurrentMode(DlgImageImporterStatus::ModeAbort, i18n("Aborted!"));
        return;
    }


    //check if the basedir exists
    QDir bfd(baseFolder);
    if (!bfd.exists()) {
        if (!ImageImporter::mkpath(bfd.absPath())) {
            dlgStatus->appendErrorMessage(i18n("Could not create base path!"));
            dlgStatus->setCurrentMode(DlgImageImporterStatus::ModeAbort, i18n("Aborted!"));
            return;
        }
    }



    QFileInfo* fi;
    for ( fi = lstFiles->first(); fi; fi = lstFiles->next() )
    {
        dlgStatus->incProgress();

        QString sf = replaceStrings( subfolder, fi, re );
        if (sf.isEmpty()) {
            dlgStatus->appendErrorMessage(QString(i18n("Image \'%1\' does not contain exif data, skipping!"))
                                          .arg(fi->absFilePath()));
            continue;
        }
        QString fn = replaceStrings( fileName,  fi, re );

        if (lowercaseFileNames) {
            fn = fn.lower();
        }

        //now check if the directories exists ... or create them...
        QDir sfd(bfd.absPath() + "/" + sf);
        if (!sfd.exists()) {
            if (!ImageImporter::mkpath(sfd.absPath())) {
                dlgStatus->appendErrorMessage(QString(i18n("Could not create subfolder for image \'%1\'"))
                                              .arg(fi->absFilePath()));
                continue;
            }
        }

        QFileInfo toFile(sfd.absPath() + "/" + fn);
        if (toFile.exists()) {
            dlgStatus->appendErrorMessage(QString(i18n("Image \'%1\' already exists, not imported!"))
                                          .arg(fi->absFilePath()));
            continue;
        }

        if (moveFiles) {
            ImageImporter::move_file( fi->absFilePath(), toFile.absFilePath() );
        } else {
            ImageImporter::copy_file( fi->absFilePath(), toFile.absFilePath() );
        }

        if (dlgStatus->wasCanceled()) {
            return;
        }
    }
}