diff --git a/cmake/version.cmake b/cmake/version.cmake index eb9ffa3..7555c30 100644 --- a/cmake/version.cmake +++ b/cmake/version.cmake @@ -3,8 +3,8 @@ # set (QT_UTIL_MAJOR_VERSION "6") -set (QT_UTIL_MINOR_VERSION "6") -set (QT_UTIL_RELEASE_VERSION "1") +set (QT_UTIL_MINOR_VERSION "7") +set (QT_UTIL_RELEASE_VERSION "0") set (QT_UTIL_VERSION ${QT_UTIL_MAJOR_VERSION}.${QT_UTIL_MINOR_VERSION}.${QT_UTIL_RELEASE_VERSION}) diff --git a/src/QtUtil/QtFileDialogUtilities.cpp b/src/QtUtil/QtFileDialogUtilities.cpp index d478323..841f29f 100644 --- a/src/QtUtil/QtFileDialogUtilities.cpp +++ b/src/QtUtil/QtFileDialogUtilities.cpp @@ -1,8 +1,38 @@ #include "QtUtil/QtFileDialogUtilities.h" +#include "QtUtil/QtUnicodeHelper.h" +#include +#include #include +#include +using namespace TkUtil; using namespace std; +static const Charset charset ("àéèùô"); +USE_ENCODING_AUTODETECTION + + +/** + * @return La première extension du filtre Qt reçu en argument (format NOM (*.ext1 *.ext2 ... *.extn). + */ +static string getFirstExtension (const string& filter) +{ + UTF8String prepared (filter); + prepared.replace (string ("("), string (" "), true); // => nom *.ext1) + prepared.replace (string ("*"), string (""), true); // => nom .ext1) + prepared.replace (string (")"), string (""), true); // => nom *.ext1 + istringstream stream (prepared.utf8 ( )); + string name, ext; + stream >> name >> ext; + + + if ((false == stream.fail ( )) && (false == stream.bad ( ))) + return ext; + + return string ( ); +} // getFirstExtension + + QtFileDialogUtilities::QtFileDialogUtilities ( ) { @@ -76,3 +106,18 @@ bool QtFileDialogUtilities::extensionMatches (const string& extension, const vec return false; } // QtFileDialogUtilities::extensionMatches + + +string QtFileDialogUtilities::completeFileName (const string& path, const string& filter) +{ + File file (path); + if (0 != file.getExtension ( ).length ( )) + return path; + + // Le fichier n'a pas d'extension, on rajoute la première du filtre + const string ext = getFirstExtension (filter); + UTF8String newPath (charset); + newPath << path << ext; + + return newPath.utf8 ( ); +} // QtFileDialogUtilities::completeFileName diff --git a/src/QtUtil/public/QtUtil/QtFileDialogUtilities.h b/src/QtUtil/public/QtUtil/QtFileDialogUtilities.h index 5a2b065..e9c238d 100644 --- a/src/QtUtil/public/QtUtil/QtFileDialogUtilities.h +++ b/src/QtUtil/public/QtUtil/QtFileDialogUtilities.h @@ -19,7 +19,7 @@ class QtFileDialogUtilities static std::string extensionTail (const std::string& extension); /** - * @return Un veteur contenant les parties terminales des extensions du filtre Qt transmis en argument. + * @return Un vecteur contenant les parties terminales des extensions du filtre Qt transmis en argument. */ static std::vector nameFilterToExtensions (const QString& filters); @@ -29,6 +29,14 @@ class QtFileDialogUtilities */ static bool extensionMatches (const std::string& extension, const std::vector& extensions); + /** + * @param Nom de fichier proposé + * @param Filtre Qt utilisé lors du choix du fichier + * @return Le nom de fichier avec extension. Si le nom proposé n'en n'a pas alors la première du filtre est ajoutée. + * @since 6.7.0 + */ + static std::string completeFileName (const std::string& path, const std::string& filter); + private : diff --git a/versions.txt b/versions.txt index 129dd07..bfb11b2 100644 --- a/versions.txt +++ b/versions.txt @@ -1,3 +1,10 @@ +Version 6.7.0 : 08/04/24 +=============== + +Méthode QtFileDialogUtilities::completeFileName qui ajoute si nécessaire à un nom de fichier une extension issue d'un filtre +Qt d'extensions. + + Version 6.6.1 : 29/11/24 =============== @@ -13,7 +20,6 @@ Classe ActionCompletionNotifier permettant d'afficher automatiquement une notifi Les notifications systèmes peuvent utiliser l'icône de l'application. - Version 6.5.0 : 16/09/24 ===============