1 /* ============================================================
2  *
3  * This file is a part of digiKam project
4  * https://www.digikam.org
5  *
6  * Date        : 2021-03-20
7  * Description : a tool to export images to iNaturalist web service
8  *
9  * Copyright (C) 2021      by Joerg Lohse <joergmlpts at gmail dot com>
10  *
11  * This program is free software; you can redistribute it
12  * and/or modify it under the terms of the GNU General
13  * Public License as published by the Free Software Foundation;
14  * either version 2, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * ============================================================ */
22 
23 #ifndef DIGIKAM_INAT_SUGGEST_H
24 #define DIGIKAM_INAT_SUGGEST_H
25 
26 // Qt includes
27 
28 #include <QObject>
29 #include <QLineEdit>
30 #include <QEvent>
31 #include <QTreeWidget>
32 #include <QTreeWidgetItem>
33 #include <QTimer>
34 #include <QList>
35 #include <QVector>
36 #include <QHash>
37 
38 // Local includes
39 
40 #include "inattaxon.h"
41 #include "inattaxonedit.h"
42 #include "inatscore.h"
43 
44 namespace DigikamGenericINatPlugin
45 {
46 
47 class INatTalker;
48 
49 typedef QPair<QString, QList<Taxon> > AutoCompletions;
50 
51 class SuggestTaxonCompletion : public QObject
52 {
53     Q_OBJECT
54 
55 public:
56 
57     explicit SuggestTaxonCompletion(TaxonEdit* const parent);
58     ~SuggestTaxonCompletion();
59 
60     void setTalker(INatTalker* const talker);
61 
62 Q_SIGNALS:
63 
64     void signalTaxonSelected(const Taxon&, bool fromVision);
65     void signalTaxonDeselected();
66     void signalComputerVision();
67 
68 private Q_SLOTS:
69 
70     void slotDoneCompletion();
71     void slotPreventSuggest();
72     void slotAutoSuggest();
73     void slotInFocus();
74     void slotTaxonAutoCompletions(const AutoCompletions&);
75     void slotComputerVisionResults(const ImageScores&);
76     void slotImageLoaded(const QUrl&, const QByteArray&);
77     void slotTextEdited(const QString&);
78 
79 private:
80 
81     bool    eventFilter(QObject* obj, QEvent* ev) override;
82     void    showCompletion(const struct Completions&);
83     void    taxon2Item(const Taxon&, QTreeWidgetItem*, const QString&);
84     QString getText() const;
85 
86 private:
87 
88     class Private;
89     Private* const d;
90 };
91 
92 } // namespace DigikamGenericINatPlugin
93 
94 #endif // DIGIKAM_INAT_SUGGEST_H
95 
96