![]() |
TiPhotoLocator 1.4
A tiny application to easily geotag your photos
|
The PhotoModel class manages a list of photo data. Plus de détails...
#include <PhotoModel.h>
Types publics | |
| enum | Roles { FilenameRole = Qt::UserRole , ImageUrlRole , LatitudeRole , LongitudeRole , HasGPSRole , IsCurrentRole , IsSelectedRole , IsMarkerRole , IsWelcomeRole , InsideCircleRole , ToBeSavedRole , DateTimeOriginalRole , CamModelRole , MakeRole , ImageWidthRole , ImageHeightRole , OrientationRole , ShutterSpeedRole , FNumberRole , CreatorRole , CityRole , CountryRole , LocationRole , DescriptionRole , CaptionWriterRole , SoftwareRole , KeywordsRole } |
| The Roles enum lists the roles associated to each attribute of a Photo. Plus de détails... | |
Connecteurs publics | |
| void | append (const QString filename, const QString url) |
| Adds a Photo to the model, with just a name and a path (url). Other data should be filled later, from exif metadata. | |
| void | appendSavedPosition () |
| Ajoute une entrée spéciale dans le Modèle, correspondant à une position GPS mémorisée (marker jaune). Ses coordonnées GPS sont celles de la photo sélectionnée. | |
| void | fetchExifMetadata (int row=-1) |
| Ce slot lit des données EXIF d'une (ou de toutes les) photos du répertoire, en utilisant la tache asynchrone ExifReadTask. A la fin de chaque lecture, la tache appelle setData(). | |
| void | saveMetadata () |
| Ce slot écrit dans les fichiers JPG (de façon asynchrone) les metadonnées IPTC des photos qui ont été modifiées. Ce slot est connecté au signal QML saveMetadata émis par ToolBarBottom. | |
| void | setData (int row, QString value, QString property) |
| Ce slot ajoute ou modifie une propriété d'une Photo, par exemple quand on clique sur une suggestion. | |
| void | setInCircleItemCoords (const double latitude, const double longitude) |
| Ce slot affecte les coordonnées GPS fournies à toutes les photos géographiquement situées à l'interieur du cercle rouge. | |
| void | setPhotoProperty (const int photo, const QString value, const QString property) |
| Ce slot affecte le role fourni à toutes les photos demandées. | |
| void | applyCreatorToAll () |
| Applique le "photographe" à toutes les photos du modèle. | |
| void | removeSavedPosition () |
| Supprime du modèle l'item correspondant à la position sauvegardée. | |
| void | duplicateData (int row) |
| Duplicates an item of the model, and add it at the end of the vector. | |
| void | removeData (int row) |
| Fonction typique qui supprime l'item désigné du modèle. | |
Signaux | |
| void | sendSuggestion (QString text, QString target, QString category, int row) |
| Ce signal envoie une Suggestion au SuggestionModel. | |
| void | writeProgressChanged () |
| Ce signal est émis chaque fois qu'une nouvelle donnée Exif est écrite dans un JPG. | |
| void | currentItemRowChanged (const int row) |
| Signal émis quand la Photo courante change. | |
| void | currentItemCoordsChanged () |
| Signal émis quand les coordonnées GPS de la Photo courante changent. | |
| void | currentItemHasGPSChanged () |
| Signal émis quand le flag hasGPS de la photo courante change. | |
| void | dataCleared () |
| Signal émis quand le modèle a été vidé. | |
| void | dataSaved () |
| Signal émis quand les données ont été enregistrées sur le disque. | |
| void | firstCoordsReady () |
| Signal émis quand les coordonnées GPS de la première photo sont disponibles. | |
| void | savedPositionExistsChanged () |
| Signal émis quand une SavedPosition est créée ou supprimée. | |
| void | loadingChanged () |
| Signal émis quand le status loading change. | |
| void | selectionCountChanged () |
| Signal émis quand le nombre de photos sélectionnées change. | |
Fonctions membres publiques | |
| PhotoModel (QObject *parent=nullptr) | |
| Constructor. Just add the welcome item in the list. If the debug mode is active, a second item is added for testing purpose. | |
| int | rowCount (const QModelIndex &parent) const override |
| Returns the number of items in the model. | |
| QVariant | data (const QModelIndex &index, int role=Qt::DisplayRole) const override |
| Returns the role value of an element of the model. | |
| Qt::ItemFlags | flags (const QModelIndex &index) const override |
| PhotoModel::flags. | |
| QHash< int, QByteArray > | roleNames () const override |
| Table of Role names. C'est la correspondance entre le role C++ et le nom de la property dans QML. | |
| Q_INVOKABLE QString | getRoleName (int role) |
| Retourne le nom du role dans le modèle. | |
| Q_INVOKABLE QVariant | getUrl (int row) |
| Returns the full name of the photo. This is an example of unitary getter method. | |
| Q_INVOKABLE QVariantMap | get (int row) |
| La méthode get() (invocable par QML) renvoie les données de la photo demandée. Usage dans QML: titre = myModel.get(1).title; | |
| Q_INVOKABLE void | addToSelection (int row, bool exclusive=false) |
| Cette méthode (invocable par QML) ajoute la photo désignée aux photos sélectionnées. | |
| Q_INVOKABLE void | removeFromSelection (int row) |
| Cette méthode enlève la photo désignée des photos sélectionnées. | |
| Q_INVOKABLE void | resetSelection () |
| Enleve le flag "isSelected" à toutes les photos. | |
| Q_INVOKABLE void | selectUnlocalized () |
| Ajoute le flag "isSelected" à toutes les photos qui n'ont pas de coordonnées GPS. | |
| Q_INVOKABLE void | selectUndated () |
| Ajoute le flag "isSelected" à toutes les photos qui n'ont pas de date. | |
| Q_INVOKABLE void | selectAll () |
| Ajoute le flag "isSelected" à toutes les photos. | |
| Q_INVOKABLE void | dumpData () |
| Debug function that print (in the console) one line of the model at every call. | |
| Q_INVOKABLE void | clear () |
| Deletes all the items of the Model. | |
| Q_INVOKABLE void | removePhotoKeyword (QString keyword) |
| Enlève un des mots-clef descriptif de la photo. | |
| Q_INVOKABLE void | updatePhotoKeyword (QString keyword, int index) |
| Modifie un des mots-clef descriptif de la photo. | |
| Q_INVOKABLE void | setSelectedItemsCoords (QGeoCoordinate coords) |
| Affecte les coordonnées GPS fournies à toutes les photos sélectionnées. | |
| Q_INVOKABLE void | findInCirclePhotos (int circle_radius=-1) |
| Parcourt toutes les Photo du modèle, et flague celles qui sont à l'interieur du cercle demandé. Fonction avec mécanisme de Mutuelle Exclusion (MUTEX). | |
| Q_INVOKABLE void | suggestFromSelection () |
| Cherche des suggestions de keywords, country, city, location pour la photo courante, en allant regarder dans les tags des autres photos de la selection. | |
| Q_INVOKABLE void | suggestFromPrevious () |
| Cherche des suggestions de geotags (country, city, location) pour la photo courante, en allant regarder dans les tags des photos précédentes. | |
| Q_INVOKABLE void | suggestFromPhoto (const int row) |
| Envoie des suggestions de keywords, country, city, location pour la photo courante, en allant regarder dans les tags de la photo fournie. | |
| Q_INVOKABLE void | selectionCount () |
| void | append (const QVariantMap data) |
| Adds a Photo item to the model, from a list of metadata. | |
| bool | setData (const QModelIndex &index, const QVariant &value, int role) override |
| Surcharge qui permet de modifier unitairement un Role d'un item du modèle. | |
| void | setData (const QVariantMap &value_list) |
| Cette méthode permet de modifier plusieurs roles d'un item du modèle, avec comme clef le role FilenameRole. Elle est appelée lors de la lecture (ou relecture) globale des tags Exif des photos originales. | |
| void | selectFirstPhoto () |
| Active la première photo de la liste (preview de l'image et pinpoint géographique). Cette méthode est appelée une fois que l'on a lu les données Exif de la première photo de la liste. | |
| void | setWriteProgress (const int total=0) |
| PhotoModel::setWriteProgress. | |
Attributs publics | |
| QModelIndex | m_markerIndex = QModelIndex() |
| Index du marker SavedPosition. Initialisé à une valeur invalide. | |
Attributs protégés | |
| int | m_markerRow = -1 |
| Position du marker SavedPosition. | |
Propriétés | |
| int | currentItemRow |
| currentItemRow is the Photo row in the model corresponding to the current photo in the ListView. | |
| QGeoCoordinate | currentItemCoords |
| currentItemCoords is the GPS coordinates of the current Photo. | |
| bool | currentItemHasGPS |
| currentItemHasGPS indicate if the current Photo has GPS coordinates. | |
| bool | savedPositionExists |
| Indique si un SavedPosition existe dans le modèle. | |
| bool | loading |
| Indique si le modele est en train de lire les données Exif. | |
| qreal | writeProgress |
| Indique si le modele est en train d'écrire les données Exif. | |
| int | selectionCount |
| Le nombre de photos dans la sélection. | |
Fonctions membres privées | |
| void | addTestItem () |
| Adds a test item to the PhotoModel. (only if DebugMode is enabled in the *Settingss) | |
| void | resetCircle () |
| Enleve le flag "insideCircle" à toutes les photos. | |
| void | setLoading (const bool state) |
| Positionne le flag "loading" qui indique que le modèle est en train de se remplir avec les données EXIF. | |
| void | currentItemRow (const int row) |
| Mémorise la photo indiquée comme étant la photo courante de la ListView. | |
| void | currentItemCoords (const QGeoCoordinate coords) |
| Mémorise les coordonnées dans la photo sélectionnée. | |
| int | getCurrentItemRow () |
| Returns the last selected row. | |
| bool | getCurrentItemHasGPS () |
| Returns if the selected photo has GPS coordinates. | |
| QGeoCoordinate | getCurrentItemCoords () |
| Returns the GPS Coords of the selected row. | |
| bool | belong (double pLa, double pLo, double oLa, double oLo, float rLa, float rLo) |
| Indique si le point P de coordonnées (pX, pY) appartient au cercle de centre O (oX, oY) et de rayon R. | |
Attributs privés | |
| QVector< Photo > | m_photos |
| La liste des Photo du modèle. | |
| int | m_lastCurrentRow = 0 |
| L'indice de la précédente photo sélectionnée. (initialisé à 0 car au départ, on a un item: le Welcome Rolleyflex) | |
| int | m_dumpedRow = 0 |
| Compteur pour le dump de debug. | |
| int | m_lastCircleRadius = 0 |
| Valeur précdente du rayon de recherche. | |
| bool | m_circleResetted = true |
| True si le rayon du cercle est à 0, et que le flag insideCircle a été resetté sur toutes les photos. | |
| bool | m_savedPositionExists = false |
| True si le marker SavedPosition existe. | |
| bool | m_loading = false |
| True si le modèle est en train de scanner le répertoire. | |
| qreal | m_writeProgress = 0 |
| Progression de l'écriture des données Exif dans les JPG. Varie de 0 à 1. | |
| int | m_totalWrite = 1 |
| Nombre de fichiers JPEG à modifier avec de nouvelles metadata. | |
| int | m_countWrite = 0 |
| Nombre de fichiers JPEG modifiés avec de nouvelles metadata. | |
| int | m_selectionCount = 0 |
| Nombre de photos dans la sélection. | |
The PhotoModel class manages a list of photo data.
| enum PhotoModel::Roles |
|
explicit |
Constructor. Just add the welcome item in the list. If the debug mode is active, a second item is added for testing purpose.
| parent | : paramètre classique pour les QAbstractListModel. |
|
private |
Adds a test item to the PhotoModel. (only if DebugMode is enabled in the *Settingss)
| void PhotoModel::addToSelection | ( | int | row, |
| bool | exclusive = false ) |
Cette méthode (invocable par QML) ajoute la photo désignée aux photos sélectionnées.
| row | : indice de la photo dans la listView |
| exclusive | : if True, all other Photos are unselected. |
|
slot |
Adds a Photo to the model, with just a name and a path (url). Other data should be filled later, from exif metadata.
| filename | : filename of the photo |
| url | : full path of the photo (in Qt format) |
| void PhotoModel::append | ( | const QVariantMap | data | ) |
Adds a Photo item to the model, from a list of metadata.
| data | : a 'key-value' dictionnary of metadata. |
|
slot |
Ajoute une entrée spéciale dans le Modèle, correspondant à une position GPS mémorisée (marker jaune). Ses coordonnées GPS sont celles de la photo sélectionnée.
|
slot |
Applique le "photographe" à toutes les photos du modèle.
Le nom du photographe est configuré dans les Settings.
|
private |
Indique si le point P de coordonnées (pX, pY) appartient au cercle de centre O (oX, oY) et de rayon R.
| pLa | : Latitude du point à tester. |
| pLo | : Longitude du point à tester. |
| oLa | : Latitude de l'origine du cercle. |
| oLo | : Longitude de l'origine du cercle. |
| rLa | : le rayon du cercle sur l'axe des Latitudes N-S(en degrés). |
| rLo | : le rayon du cercle sur l'axe des Longitudes E-W (en degrés). |
| void PhotoModel::clear | ( | ) |
Deletes all the items of the Model.
On utilise cette fonction quand on scanne un nouveau répertoire de photos.
|
private |
Mémorise les coordonnées dans la photo sélectionnée.
| coords | : Coordonnées GPS à appliquer. |
|
private |
Mémorise la photo indiquée comme étant la photo courante de la ListView.
Met le flag isCurrent du précédent item à False et le nouveau à True. On fait aussi le traitement si le numéro de row est le même, car il s'agit peut-être d'une autre liste de photos.
| row | : l'indice de l'item courant de la ListView. |
|
override |
Returns the role value of an element of the model.
| index | : index of the element of the model. |
| role | : the requested role (enum). |
| void PhotoModel::dumpData | ( | ) |
Debug function that print (in the console) one line of the model at every call.
|
slot |
Duplicates an item of the model, and add it at the end of the vector.
| row | : item row to be duplicated. |
|
slot |
Ce slot lit des données EXIF d'une (ou de toutes les) photos du répertoire, en utilisant la tache asynchrone ExifReadTask. A la fin de chaque lecture, la tache appelle setData().
| photo | : l'indice de la photo (vide ou -1 = toutes les photos du répertoire) |
| void PhotoModel::findInCirclePhotos | ( | int | circle_radius = -1 | ) |
Parcourt toutes les Photo du modèle, et flague celles qui sont à l'interieur du cercle demandé. Fonction avec mécanisme de Mutuelle Exclusion (MUTEX).
| circle_radius | Le rayon du cercle (en mètres). Si circle_radius vaut 0, alors on enleve les pictos "circle". Si circle_radius vaut -1, (default value) alors on réutilise la dernière valeur de rayon reçue. |
On utilise les conversions: 1°lat = 111km et 1°long = 111km x cos(lat).
|
override |
| QVariantMap PhotoModel::get | ( | int | row | ) |
La méthode get() (invocable par QML) renvoie les données de la photo demandée. Usage dans QML: titre = myModel.get(1).title;
| row | : indice. |
|
private |
Returns the GPS Coords of the selected row.
|
private |
Returns if the selected photo has GPS coordinates.
|
private |
Returns the last selected row.
| QString PhotoModel::getRoleName | ( | int | role | ) |
Retourne le nom du role dans le modèle.
| role | la valeur numérique du role. |
| QVariant PhotoModel::getUrl | ( | int | row | ) |
Returns the full name of the photo. This is an example of unitary getter method.
| row | : Indice de l'élément à lire. |
|
slot |
Fonction typique qui supprime l'item désigné du modèle.
| row | : la position dans le vecteur de l'item à supprimer. |
| void PhotoModel::removeFromSelection | ( | int | row | ) |
Cette méthode enlève la photo désignée des photos sélectionnées.
| row | : indice de la photo dans la listView |
| void PhotoModel::removePhotoKeyword | ( | QString | keyword | ) |
Enlève un des mots-clef descriptif de la photo.
| keyword | : le mot-clef à retirer de la liste. |
|
slot |
Supprime du modèle l'item correspondant à la position sauvegardée.
L'item SavedPosition, de type isMarker est supprimé du modèle.
|
private |
Enleve le flag "insideCircle" à toutes les photos.
| void PhotoModel::resetSelection | ( | ) |
Enleve le flag "isSelected" à toutes les photos.
|
override |
Table of Role names. C'est la correspondance entre le role C++ et le nom de la property dans QML.
|
override |
Returns the number of items in the model.
| parent | : parent of the model. |
|
slot |
Ce slot écrit dans les fichiers JPG (de façon asynchrone) les metadonnées IPTC des photos qui ont été modifiées. Ce slot est connecté au signal QML saveMetadata émis par ToolBarBottom.
| void PhotoModel::selectAll | ( | ) |
Ajoute le flag "isSelected" à toutes les photos.
| void PhotoModel::selectFirstPhoto | ( | ) |
Active la première photo de la liste (preview de l'image et pinpoint géographique). Cette méthode est appelée une fois que l'on a lu les données Exif de la première photo de la liste.
| void PhotoModel::selectUndated | ( | ) |
Ajoute le flag "isSelected" à toutes les photos qui n'ont pas de date.
| void PhotoModel::selectUnlocalized | ( | ) |
Ajoute le flag "isSelected" à toutes les photos qui n'ont pas de coordonnées GPS.
|
override |
Surcharge qui permet de modifier unitairement un Role d'un item du modèle.
Cette fonction met aussi à True le flag To Be Saved quand il s'agit d'une action opérateur. Cette fonction est appelée quand on clique sur un Chips, pour modifier une des propriétés de la Photo. Certains roles ne sont pas modifiables: imageUrl, isCurrent, hasGPS, filename, shutterSpeed, F-number, etc.
| index | : l'index (au sens QModelIndex) de l'item à modifier. |
| value | : la nouvelle valeur. |
| role | : le Role à modifier (LatitudeRole, LongitudeRole, ToBeSavedRole, city, country). |
| void PhotoModel::setData | ( | const QVariantMap & | value_list | ) |
Cette méthode permet de modifier plusieurs roles d'un item du modèle, avec comme clef le role FilenameRole. Elle est appelée lors de la lecture (ou relecture) globale des tags Exif des photos originales.
Roles non modifiables (ignorés): imageUrl, insideCircle.
Roles non modifiables (recalculés): hasGPS, toBeSaved.
| value_list | : la liste des données à modifier. Attention: les keys sont les noms des balises EXIF. FileName est obligatoire. |
|
slot |
Ce slot ajoute ou modifie une propriété d'une Photo, par exemple quand on clique sur une suggestion.
| row | : indice de la photo. |
| value | : valeur de la propriété. |
| property | : nom de la propriété. |
|
slot |
Ce slot affecte les coordonnées GPS fournies à toutes les photos géographiquement situées à l'interieur du cercle rouge.
| latitude | : Latitude GPS à affecter aux photos |
| longitude | : Longitude GPS à affecter aux photos |
|
private |
Positionne le flag "loading" qui indique que le modèle est en train de se remplir avec les données EXIF.
| state | True pour indiquer que la lecture est en cours. |
|
slot |
Ce slot affecte le role fourni à toutes les photos demandées.
| photo | : l'indice de la Photo à modifier. Voir la note pour les valeurs particulières. |
| value | : la valeur de la property. |
| property | : le nom de la property (correspondant à un Role). |
| void PhotoModel::setSelectedItemsCoords | ( | QGeoCoordinate | coords | ) |
Affecte les coordonnées GPS fournies à toutes les photos sélectionnées.
| coords | des coordonnées GPS. |
| void PhotoModel::setWriteProgress | ( | const int | total = 0 | ) |
| total | : Nombre de photos dont on veut écrire les exifs. Si 0 ou non fourni, alors c'est que l'on vient de faire une écriture. |
| void PhotoModel::suggestFromPhoto | ( | const int | row | ) |
Envoie des suggestions de keywords, country, city, location pour la photo courante, en allant regarder dans les tags de la photo fournie.
| void PhotoModel::suggestFromPrevious | ( | ) |
Cherche des suggestions de geotags (country, city, location) pour la photo courante, en allant regarder dans les tags des photos précédentes.
| void PhotoModel::suggestFromSelection | ( | ) |
Cherche des suggestions de keywords, country, city, location pour la photo courante, en allant regarder dans les tags des autres photos de la selection.
| void PhotoModel::updatePhotoKeyword | ( | QString | keyword, |
| int | index ) |
Modifie un des mots-clef descriptif de la photo.
| keyword | : la nouvelle valeur du mot-clef. |
| index | : la position du mot-clef dans la liste. |
| void PhotoModel::selectionCount |
Le nombre de photos dans la sélection.
Compte le nombre de photos sélectionnées.