TiPhotoLocator 2.2
A tiny application to easily geotag your photos
Chargement...
Recherche...
Aucune correspondance
Référence de la classe PhotoModel

The PhotoModel class manages a list of photo data. Plus de détails...

#include <PhotoModel.h>

Graphe d'héritage de PhotoModel:

Types publics

enum  Roles {
  FilenameRole = Qt::UserRole , ImageUrlRole , LatitudeRole , LongitudeRole ,
  HasGPSRole , IsCurrentRole , IsSelectedRole , IsMarkerRole ,
  InsideCircleRole , IsOnTrackRole , OnTrackLatitudeRole , OnTrackLongitudeRole ,
  ToBeSavedRole , DateTimeOriginalRole , CamModelRole , MakeRole ,
  ImageWidthRole , ImageHeightRole , OrientationRole , ShutterSpeedRole ,
  FNumberRole , CreatorRole , CityRole , CountryRole ,
  LocationRole , DescriptionRole , CaptionWriterRole , SoftwareRole ,
  MetadataRole , KeywordsRole , WriteErrorRole
}
 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 setWriteError (QModelIndex idx, const QString &message)
 Enregistre un message d'erreur d'écriture ExifTool pour une photo. Si message est vide, l'erreur précédente est effacée (écriture réussie). Si message est non-vide, émet writeErrorOccurred pour la snackbar QML.
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 readTaskFinished ()
 Appelé par chaque ExifReadTask à la fin de son exécution. Décrémente le compteur et arrête le BusyIndicator quand toutes les tâches sont terminées.
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, const QString &value, const 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 même 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 applyCreatorToSelection ()
 Applique le "photographe" aux photos sélectionnées 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 ()
void writeErrorOccurred (const QString &filename, const QString &message)
 Signal émis quand ExifTool échoue à écrire une photo. //!< 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.
void trackCountChanged ()
 Signal émis quand le nombre de photos on-track change.
void trackDeactivated ()
 Signal émis quand l'utilisateur clique une photo hors-track alors qu'une track était active.
void countChanged ()
 Signal émis quand le nombre total de photos 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=QModelIndex()) 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
 Retourne les flags Qt d'un élément (éditable, activé, sélectionnable).
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 unselectAllOther=false, bool keepOnTrack=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 resetCircle ()
 Enleve le flag "insideCircle" à toutes les photos.
Q_INVOKABLE void resetOnTrack ()
 Efface le flag isOnTrack sur toutes les photos du modèle.
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 selectOnTrack ()
 Sélectionne toutes les photos flagguées isOnTrack et désélectionne les autres.
Q_INVOKABLE int nextOnTrackRow (int currentRow) const
 Retourne le row de la prochaine photo isOnTrack après currentRow (avec wrap-around).
Q_INVOKABLE int previousOnTrackRow (int currentRow) const
 Retourne le row de la photo précédente isOnTrack avant currentRow (avec wrap-around).
Q_INVOKABLE void applyTrackPointCoordsToAll ()
 Applique les coordonnées interpolées de la track à toutes les photos isOnTrack.
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 selectionCount ()
Q_INVOKABLE void removePhotoKeyword (const QString &keyword)
 Enlève un des mots-clef descriptif de la photo.
Q_INVOKABLE void replaceKeywordForCurrent (const QString &keyword, int index)
 Remplace un keyword (mots-clef descriptif) par un autre dans la photo courante.
Q_INVOKABLE void replaceKeywordForSelection (const QString &oldKeyword, const QString &newKeyword)
 Remplace un keyword par un autre dans toutes les photos sélectionnées. Recherche par valeur (pas par index) pour gérer les listes de longueurs différentes.
Q_INVOKABLE void addKeywordToAll (const QString &keyword)
 Ajoute un mot-clef à toutes les photos qui ne le possèdent pas déjà.
Q_INVOKABLE void addKeywordToSelection (const QString &keyword)
 Ajoute un mot-clef aux photos sélectionnées qui ne le possèdent pas déjà.
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 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 int scanFolder (const QString &folderUrl)
 Scanne un dossier directement via QDir (fallback pour les chemins UNC que FolderListModel ne supporte pas).
Q_INVOKABLE void setSelectedItemsCoords (QGeoCoordinate coords)
 Affecte les coordonnées GPS fournies à toutes les photos sélectionnées.
Q_INVOKABLE void setSavedPositionCoords (double latitude, double longitude)
 Ajoute une entrée spéciale dans le modèle avec des coordonnées GPS explicites (marker jaune). Utilisé par l'identification IA pour sauvegarder la position du lieu reconnu.
Q_INVOKABLE void applyTrackPointCoords ()
 Applique les coords.
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.
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 setOnTrack (int row, double lat, double lon)
 Marque la photo comme étant sur le track GPX et stocke ses coordonnées interpolées.
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.
int getCount () const

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.
int onTrackCount
 Le nombre de photos matchant le track GPX courant.
int count
 Le nombre total de photos dans le modèle.

Fonctions membres privées

void addTestItem ()
 Adds a test item to the PhotoModel. (only if DebugMode is enabled in the Registry)
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.
int getOnTrackCount () const
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, double rLa, double 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< Photom_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écédente du rayon de recherche.
double m_lastCircleLat = -1000.0
 Latitude du dernier centre de cercle calculé (-1000 = jamais calculé)
double m_lastCircleLong = -1000.0
 Longitude du dernier centre de cercle calculé
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.
int m_pendingReadTasks = 0
 Nombre de ExifReadTask encore en cours d'exécution.
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.
int m_onTrackCount = 0
 Nombre de photos matchant le track GPX courant.

Description détaillée

The PhotoModel class manages a list of photo data.


Documentation des énumérations membres

◆ Roles

The Roles enum lists the roles associated to each attribute of a Photo.


Documentation des constructeurs et destructeur

◆ PhotoModel()

PhotoModel::PhotoModel ( QObject * parent = nullptr)
explicit

Constructor. Just add the welcome item in the list. If the debug mode is active, a second item is added for testing purpose.


Paramètres
parent: paramètre classique pour les QAbstractListModel.

Documentation des fonctions membres

◆ addKeywordToAll()

void PhotoModel::addKeywordToAll ( const QString & keyword)

Ajoute un mot-clef à toutes les photos qui ne le possèdent pas déjà.


Paramètres
keyword: le mot-clef à ajouter.

◆ addKeywordToSelection()

void PhotoModel::addKeywordToSelection ( const QString & keyword)

Ajoute un mot-clef aux photos sélectionnées qui ne le possèdent pas déjà.


Paramètres
keyword: le mot-clef à ajouter.

◆ addTestItem()

void PhotoModel::addTestItem ( )
private

Adds a test item to the PhotoModel. (only if DebugMode is enabled in the Registry)


Note
For testing purpose.

◆ addToSelection()

void PhotoModel::addToSelection ( int row,
bool unselectAllOther = false,
bool keepOnTrack = false )

Cette méthode (invocable par QML) ajoute la photo désignée aux photos sélectionnées.


Paramètres
row: indice de la photo dans la listView
unselectAllOther: if True, all other photos are unselected.
keepOnTrack: if True, all other photos are unselected except photo on the Track (that stay selected).

◆ append [1/2]

void PhotoModel::append ( const QString & filename,
const QString & url )
slot

Adds a Photo to the model, with just a name and a path (url). Other data should be filled later, from exif metadata.


Paramètres
filename: filename of the photo
url: full path of the photo (in Qt format)

◆ append() [2/2]

void PhotoModel::append ( const QVariantMap & data)

Adds a Photo item to the model, from a list of metadata.


Paramètres
data: a 'key-value' dictionnary of metadata.
Note
Accepts only 2 keys: filename and imageUrl.
QVariantMap map;
map.insert("filename", QVariant(filename));
map.insert(roleNames().value(ImageUrlRole), QVariant(url));
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.
Definition PhotoModel.cpp:98

◆ appendSavedPosition

void PhotoModel::appendSavedPosition ( )
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.


◆ applyCreatorToAll

void PhotoModel::applyCreatorToAll ( )
slot

Applique le "photographe" à toutes les photos du modèle.


Le nom du photographe est configuré dans les Settings.

◆ applyCreatorToSelection

void PhotoModel::applyCreatorToSelection ( )
slot

Applique le "photographe" aux photos sélectionnées du modèle.


Le nom du photographe est configuré dans les Settings.

◆ applyTrackPointCoords()

void PhotoModel::applyTrackPointCoords ( )

Applique les coords.


◆ applyTrackPointCoordsToAll()

void PhotoModel::applyTrackPointCoordsToAll ( )

Applique les coordonnées interpolées de la track à toutes les photos isOnTrack.


◆ belong()

bool PhotoModel::belong ( double pLa,
double pLo,
double oLa,
double oLo,
double rLa,
double rLo )
private

Indique si le point P de coordonnées (pX, pY) appartient au cercle de centre O (oX, oY) et de rayon R.


Paramètres
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).
Renvoie
true si le point est dans le cercle.

◆ clear()

void PhotoModel::clear ( )

Deletes all the items of the Model.


On utilise cette fonction quand on scanne un nouveau répertoire de photos.

◆ currentItemCoords()

void PhotoModel::currentItemCoords ( const QGeoCoordinate coords)
private

Mémorise les coordonnées dans la photo sélectionnée.


Paramètres
coords: Coordonnées GPS à appliquer.

◆ currentItemRow()

void PhotoModel::currentItemRow ( const int row)
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.

Paramètres
row: l'indice de l'item courant de la ListView.

◆ data()

QVariant PhotoModel::data ( const QModelIndex & index,
int role = Qt::DisplayRole ) const
override

Returns the role value of an element of the model.


Note
Implémentation obligatoire.
Paramètres
index: index of the element of the model.
role: the requested role (enum).
Renvoie
the requested role value

◆ dumpData()

void PhotoModel::dumpData ( )

Debug function that print (in the console) one line of the model at every call.


Note
Debug function.

◆ duplicateData

void PhotoModel::duplicateData ( int row)
slot

Duplicates an item of the model, and add it at the end of the vector.


Paramètres
row: item row to be duplicated.

◆ fetchExifMetadata

void PhotoModel::fetchExifMetadata ( int photo = -1)
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().


Paramètres
photo: l'indice de la photo (vide ou -1 = toutes les photos du répertoire)

◆ findInCirclePhotos()

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).


Paramètres
circle_radiusLe 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).

Voir également
PhotoModel::resetCircle et PhotoModel::belong
Note
: les appels rapprochés sont protégés par Mutex au niveau de PhotoModel

◆ flags()

Qt::ItemFlags PhotoModel::flags ( const QModelIndex & index) const
override

Retourne les flags Qt d'un élément (éditable, activé, sélectionnable).


Paramètres
index: index de l'élément dans le modèle.
Renvoie
Qt::NoItemFlags si index invalide, sinon ItemIsEditable | ItemIsEnabled | ItemIsSelectable.

◆ get()

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;


Paramètres
row: indice.
Renvoie
une Map contenant toutes les propriétés de l'item, dont la propriété spéciale: "row".

◆ getCurrentItemCoords()

QGeoCoordinate PhotoModel::getCurrentItemCoords ( )
private

Returns the GPS Coords of the selected row.


Renvoie
QGeoCoordinate (latitude, longitude) de la photo courante.

◆ getCurrentItemHasGPS()

bool PhotoModel::getCurrentItemHasGPS ( )
private

Returns if the selected photo has GPS coordinates.


Renvoie
true si la photo courante possède latitude ET longitude non nulles.

◆ getCurrentItemRow()

int PhotoModel::getCurrentItemRow ( )
private

Returns the last selected row.


Renvoie
Indice de la dernière photo sélectionnée dans m_photos.

◆ getRoleName()

QString PhotoModel::getRoleName ( int role)

Retourne le nom du role dans le modèle.


Paramètres
rolela valeur numérique du role.
Renvoie
la valeur texte du role.

◆ getUrl()

QVariant PhotoModel::getUrl ( int row)

Returns the full name of the photo. This is an example of unitary getter method.


Paramètres
row: Indice de l'élément à lire.
Renvoie
a QVariant containing the absolute path and full name (image URL) of the photo.

◆ nextOnTrackRow()

int PhotoModel::nextOnTrackRow ( int currentRow) const

Retourne le row de la prochaine photo isOnTrack après currentRow (avec wrap-around).


Paramètres
currentRow: row de départ dans m_photos (exclu de la recherche).
Renvoie
Le row dans le sourceModel, ou -1 si aucune photo isOnTrack.

◆ previousOnTrackRow()

int PhotoModel::previousOnTrackRow ( int currentRow) const

Retourne le row de la photo précédente isOnTrack avant currentRow (avec wrap-around).


Paramètres
currentRow: row de départ dans m_photos (exclu de la recherche).
Renvoie
Le row dans le sourceModel, ou -1 si aucune photo isOnTrack.

◆ readTaskFinished

void PhotoModel::readTaskFinished ( )
slot

Appelé par chaque ExifReadTask à la fin de son exécution. Décrémente le compteur et arrête le BusyIndicator quand toutes les tâches sont terminées.


◆ removeData

void PhotoModel::removeData ( int row)
slot

Fonction typique qui supprime l'item désigné du modèle.


Paramètres
row: la position dans le vecteur de l'item à supprimer.

◆ removeFromSelection()

void PhotoModel::removeFromSelection ( int row)

Cette méthode enlève la photo désignée des photos sélectionnées.


Paramètres
row: indice de la photo dans la listView

◆ removePhotoKeyword()

void PhotoModel::removePhotoKeyword ( const QString & keyword)

Enlève un des mots-clef descriptif de la photo.


Paramètres
keyword: le mot-clef à retirer de la liste.
Note
Cette méthode modifie la Photo actuellement sélectionée.

◆ removeSavedPosition

void PhotoModel::removeSavedPosition ( )
slot

Supprime du modèle l'item correspondant à la position sauvegardée.


L'item SavedPosition, de type isMarker est supprimé du modèle.

◆ replaceKeywordForCurrent()

void PhotoModel::replaceKeywordForCurrent ( const QString & keyword,
int index )

Remplace un keyword (mots-clef descriptif) par un autre dans la photo courante.


Paramètres
keyword: la nouvelle valeur du mot-clef.
index: la position du mot-clef dans la liste.
Note
Cette méthode modifie la Photo actuellement sélectionée.

◆ replaceKeywordForSelection()

void PhotoModel::replaceKeywordForSelection ( const QString & oldKeyword,
const QString & newKeyword )

Remplace un keyword par un autre dans toutes les photos sélectionnées. Recherche par valeur (pas par index) pour gérer les listes de longueurs différentes.


Paramètres
oldKeyword: le mot-clef à remplacer.
newKeyword: le nouveau mot-clef.

◆ resetCircle()

void PhotoModel::resetCircle ( )

Enleve le flag "insideCircle" à toutes les photos.


◆ resetOnTrack()

void PhotoModel::resetOnTrack ( )

Efface le flag isOnTrack sur toutes les photos du modèle.


◆ resetSelection()

void PhotoModel::resetSelection ( )

Enleve le flag "isSelected" à toutes les photos.


◆ roleNames()

QHash< int, QByteArray > PhotoModel::roleNames ( ) const
override

Table of Role names. C'est la correspondance entre le role C++ et le nom de la property dans QML.


Note
Implémentation obligatoire.
Un appel à roleNames().value(role); renvoie la property (string) correspondant au role demandé.
Un appel à roleNames().key(property.toUtf8()); renvoie le role (int) correspondant à la property demandée.

◆ rowCount()

int PhotoModel::rowCount ( const QModelIndex & parent = QModelIndex()) const
override

Returns the number of items in the model.


Note
Implémentation obligatoire.
Paramètres
parent: parent of the model.
Renvoie
the number of elements in the model.

◆ saveMetadata

void PhotoModel::saveMetadata ( )
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.


Note
Tag obligatoire: imageUrl.
Tags modifiés: GPS coords, Creator, City, Country, Location, DateTimeOriginal.
Tags automatiques: GPS Ref, MetadataEditingSoftware.

◆ scanFolder()

int PhotoModel::scanFolder ( const QString & folderUrl)

Scanne un dossier directement via QDir (fallback pour les chemins UNC que FolderListModel ne supporte pas).


Paramètres
folderUrlURL du dossier (format "file:////serveur/chemin" ou "file:///C:/chemin")
Renvoie
nombre de photos ajoutées au modèle

◆ selectAll()

void PhotoModel::selectAll ( )

Ajoute le flag "isSelected" à toutes les photos.


◆ selectFirstPhoto()

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.


◆ selectOnTrack()

void PhotoModel::selectOnTrack ( )

Sélectionne toutes les photos flagguées isOnTrack et désélectionne les autres.


◆ selectUndated()

void PhotoModel::selectUndated ( )

Ajoute le flag "isSelected" à toutes les photos qui n'ont pas de date.


◆ selectUnlocalized()

void PhotoModel::selectUnlocalized ( )

Ajoute le flag "isSelected" à toutes les photos qui n'ont pas de coordonnées GPS.


◆ setData() [1/3]

bool PhotoModel::setData ( const QModelIndex & index,
const QVariant & value,
int role )
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.

Voir également
https://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html#qabstractitemmodel-subclass
Note
: Il est important d'émettre le signal dataChanged() after saving the changes.
Paramètres
index: l'index (au sens QModelIndex) de l'item à modifier.
value: la nouvelle valeur.
role: le Role à modifier (LatitudeRole, LongitudeRole, ToBeSavedRole, city, country).
Renvoie
true si la modification a réussi. False si l'index n'est pas valide, ou si la nouvelle valeur est identique à l'existante.

◆ setData() [2/3]

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.

Note
Cette fonction positionne le flag ToBeSaved à False.
Paramètres
value_list: la liste des données à modifier. Attention: les keys sont les noms des balises EXIF. FileName est obligatoire.

◆ setData [3/3]

void PhotoModel::setData ( int row,
const QString & value,
const QString & property )
slot

Ce slot ajoute ou modifie une propriété d'une Photo, par exemple quand on clique sur une suggestion.


Paramètres
row: indice de la photo.
value: valeur de la propriété.
property: nom de la propriété.

◆ setInCircleItemCoords

void PhotoModel::setInCircleItemCoords ( const double latitude,
const double longitude )
slot

Ce slot affecte les même coordonnées GPS fournies à toutes les photos géographiquement situées à l'interieur du cercle rouge.


Paramètres
latitude: Latitude GPS à affecter aux photos
longitude: Longitude GPS à affecter aux photos
Voir également
PhotoModel::findInCirclePhotos
Note
NOT USED

◆ setLoading()

void PhotoModel::setLoading ( const bool state)
private

Positionne le flag "loading" qui indique que le modèle est en train de se remplir avec les données EXIF.


Paramètres
stateTrue pour indiquer que la lecture est en cours.

◆ setOnTrack()

void PhotoModel::setOnTrack ( int row,
double lat,
double lon )

Marque la photo comme étant sur le track GPX et stocke ses coordonnées interpolées.


Note
Ces données sont temporaires (non sauvegardées sur disque). Elles disparaissent au prochain refresh.
Paramètres
row: indice de la photo.
lat: latitude GPS interpolée depuis le track GPX, en degrés décimaux.
lon: longitude GPS interpolée depuis le track GPX, en degrés décimaux.

◆ setPhotoProperty

void PhotoModel::setPhotoProperty ( const int photo,
const QString & value,
const QString & property )
slot

Ce slot affecte le role fourni à toutes les photos demandées.


Paramètres
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).
Note
Valeurs particulières du paramètre photo:
  • La valeur spéciale -1 signifie toutes les photos.
  • La valeur spéciale -2 signifie la photo courante.
  • La valeur spéciale -3 signifie les photos du cercle.
  • La valeur spéciale -4 signifie les photos sélectionées.

◆ setSavedPositionCoords()

void PhotoModel::setSavedPositionCoords ( double latitude,
double longitude )

Ajoute une entrée spéciale dans le modèle avec des coordonnées GPS explicites (marker jaune). Utilisé par l'identification IA pour sauvegarder la position du lieu reconnu.


Paramètres
latitude: latitude en degrés décimaux (WGS84).
longitude: longitude en degrés décimaux (WGS84).

◆ setSelectedItemsCoords()

void PhotoModel::setSelectedItemsCoords ( QGeoCoordinate coords)

Affecte les coordonnées GPS fournies à toutes les photos sélectionnées.


Paramètres
coordsdes coordonnées GPS. Il faut distinguer le cas des photos sélectionées manuellement, et les photos sélectionées parce qu'elles sont dans le cercle. A priori, on ne veut pas modifier les photos du cercle. Solution A: si Rayon>0 ; on modifie uniquement la photo courante (easiest). Solution B: On teste si la photo est dans le cercle avant de la modifier ou pas.

◆ setWriteError

void PhotoModel::setWriteError ( QModelIndex idx,
const QString & message )
slot

Enregistre un message d'erreur d'écriture ExifTool pour une photo. Si message est vide, l'erreur précédente est effacée (écriture réussie). Si message est non-vide, émet writeErrorOccurred pour la snackbar QML.


Paramètres
idx: index de la photo dans le modèle.
message: message d'erreur retourné par ExifTool, ou chaîne vide en cas de succès.

◆ setWriteProgress()

void PhotoModel::setWriteProgress ( const int total = 0)

PhotoModel::setWriteProgress.


Paramètres
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.

◆ suggestFromPhoto()

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.


Paramètres
row: indice de la photo source dans m_photos dont on extrait les tags.

◆ suggestFromSelection()

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.


Documentation des propriétés

◆ selectionCount

void PhotoModel::selectionCount

Le nombre de photos dans la sélection.

Compte le nombre de photos sélectionnées.



La documentation de cette classe a été générée à partir des fichiers suivants :
  • Sources/cpp/Models/PhotoModel.h
  • Sources/cpp/Models/PhotoModel.cpp