1 /* 2 ** Copyright (c) 2008 - present, Alexis Megas. 3 ** All rights reserved. 4 ** 5 ** Redistribution and use in source and binary forms, with or without 6 ** modification, are permitted provided that the following conditions 7 ** are met: 8 ** 1. Redistributions of source code must retain the above copyright 9 ** notice, this list of conditions and the following disclaimer. 10 ** 2. Redistributions in binary form must reproduce the above copyright 11 ** notice, this list of conditions and the following disclaimer in the 12 ** documentation and/or other materials provided with the distribution. 13 ** 3. The name of the author may not be used to endorse or promote products 14 ** derived from Dooble without specific prior written permission. 15 ** 16 ** DOOBLE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 ** DOOBLE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifndef dooble_address_widget_completer_h 29 #define dooble_address_widget_completer_h 30 31 #include <QCompleter> 32 #include <QTimer> 33 34 class QStandardItem; 35 class QStandardItemModel; 36 class dooble_address_widget_completer_popup; 37 38 class dooble_address_widget_completer: public QCompleter 39 { 40 Q_OBJECT 41 42 public: 43 dooble_address_widget_completer(QWidget *parent); 44 ~dooble_address_widget_completer(); 45 static void add_item(const QIcon &icon, const QUrl &url); 46 static void remove_item(const QUrl &url); 47 void complete(void); 48 void set_item_icon(const QIcon &icon, const QUrl &url); 49 50 private: 51 QStandardItemModel *m_model; 52 QTimer m_text_edited_timer; 53 dooble_address_widget_completer_popup *m_popup; 54 static QHash<QUrl, QStandardItem *> s_urls; 55 static QStandardItemModel *s_model; 56 int levenshtein_distance(const QString &str1, const QString &str2) const; 57 void complete(const QString &text); 58 59 private slots: 60 void slot_clicked(const QModelIndex &index); 61 void slot_history_cleared(void); 62 void slot_text_edited_timeout(void); 63 }; 64 65 #endif 66