]> git.sur5r.net Git - minitube/blobdiff - src/autocomplete.cpp
Update my mail address
[minitube] / src / autocomplete.cpp
index badfd708092f685192ffd46f4b66e572a44dde98..2c8e5225ee2cbc670cf08b62c97a3ede1132793c 100644 (file)
@@ -19,36 +19,44 @@ along with Minitube.  If not, see <http://www.gnu.org/licenses/>.
 $END_LICENSE */
 #include "autocomplete.h"
 #include "suggester.h"
-#ifdef APP_MAC
+#ifdef APP_MAC_SEARCHFIELD
 #include "searchlineedit_mac.h"
-#include "macutils.h"
 #else
 #include "searchlineedit.h"
 #endif
 
+#ifdef APP_MAC
+#include "macutils.h"
+#endif
+
+#include <QListWidget>
+
 #ifndef QT_NO_DEBUG_OUTPUT
 /// Gives human-readable event type information.
-QDebug operator<<(QDebug str, const QEvent * ev) {
+QDebug operator<<(QDebug str, const QEvent *ev) {
     static int eventEnumIndex = QEvent::staticMetaObject.indexOfEnumerator("Type");
     str << "QEvent";
     if (ev) {
         QString name = QEvent::staticMetaObject.enumerator(eventEnumIndex).valueToKey(ev->type());
-        if (!name.isEmpty()) str << name; else str << ev->type();
+        if (!name.isEmpty())
+            str << name;
+        else
+            str << ev->type();
     } else {
-        str << (void*)ev;
+        str << (void *)ev;
     }
     return str.maybeSpace();
 }
 #endif
 
-AutoComplete::AutoComplete(SearchLineEdit *buddy, QLineEdit *lineEdit):
-    QObject(buddy), buddy(buddy), lineEdit(lineEdit), enabled(true), suggester(0), itemHovering(false) {
-
+AutoComplete::AutoComplete(SearchWidget *buddy, QLineEdit *lineEdit)
+    : QObject(lineEdit), buddy(buddy), lineEdit(lineEdit), enabled(true), suggester(0),
+      itemHovering(false) {
     popup = new QListWidget();
     popup->setWindowFlags(Qt::Popup);
-    popup->setFocusProxy(buddy);
+    popup->setFocusProxy(buddy->toWidget());
     popup->installEventFilter(this);
-    buddy->window()->installEventFilter(this);
+    buddy->toWidget()->window()->installEventFilter(this);
     popup->setMouseTracking(true);
 
     // style
@@ -57,20 +65,19 @@ AutoComplete::AutoComplete(SearchLineEdit *buddy, QLineEdit *lineEdit):
     popup->setWindowOpacity(.9);
     popup->setProperty("suggest", true);
 
-    connect(popup, SIGNAL(itemClicked(QListWidgetItem*)), SLOT(acceptSuggestion()));
-    connect(popup, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
-            SLOT(currentItemChanged(QListWidgetItem*)));
-    connect(popup, SIGNAL(itemEntered(QListWidgetItem*)), SLOT(itemEntered(QListWidgetItem *)));
+    connect(popup, SIGNAL(itemClicked(QListWidgetItem *)), SLOT(acceptSuggestion()));
+    connect(popup, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
+            SLOT(currentItemChanged(QListWidgetItem *)));
+    connect(popup, SIGNAL(itemEntered(QListWidgetItem *)), SLOT(itemEntered(QListWidgetItem *)));
 
     timer = new QTimer(this);
     timer->setSingleShot(true);
     timer->setInterval(500);
     connect(timer, SIGNAL(timeout()), SLOT(suggest()));
-    connect(buddy, SIGNAL(textEdited(QString)), timer, SLOT(start()));
+    connect(buddy->toWidget(), SIGNAL(textEdited(QString)), timer, SLOT(start()));
 }
 
 bool AutoComplete::eventFilter(QObject *obj, QEvent *ev) {
-
     if (obj != popup) {
         switch (ev->type()) {
         case QEvent::Move:
@@ -99,7 +106,7 @@ bool AutoComplete::eventFilter(QObject *obj, QEvent *ev) {
 
     if (ev->type() == QEvent::KeyPress) {
         bool consumed = false;
-        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(ev);
+        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
         // qWarning() << keyEvent->text();
         switch (keyEvent->key()) {
         case Qt::Key_Enter:
@@ -123,7 +130,7 @@ bool AutoComplete::eventFilter(QObject *obj, QEvent *ev) {
                 popup->setCurrentItem(0);
                 popup->clearSelection();
                 buddy->setText(originalText);
-                buddy->setFocus();
+                buddy->toWidget()->setFocus();
                 consumed = true;
             }
             break;
@@ -149,7 +156,7 @@ bool AutoComplete::eventFilter(QObject *obj, QEvent *ev) {
     return false;
 }
 
-void AutoComplete::showSuggestions(const QList<Suggestion *> &suggestions) {
+void AutoComplete::showSuggestions(const QVector<Suggestion *> &suggestions) {
     if (suggestions.isEmpty()) {
         hideSuggestions();
         return;
@@ -160,21 +167,20 @@ void AutoComplete::showSuggestions(const QList<Suggestion *> &suggestions) {
         QListWidgetItem *item = new QListWidgetItem(popup);
         Suggestion *s = suggestions[i];
         item->setText(s->value);
-        if (!s->type.isEmpty())
-            item->setIcon(QIcon(":/images/" + s->type + ".png"));
+        if (!s->type.isEmpty()) item->setIcon(QIcon(":/images/" + s->type + ".png"));
     }
-    popup->setCurrentItem(0);
+    popup->setCurrentItem(nullptr);
     int h = popup->frameWidth() * 2;
     for (int i = 0; i < suggestions.count(); ++i)
         h += popup->sizeHintForRow(i);
 
-    popup->resize(buddy->width(), h);
+    popup->resize(buddy->toWidget()->width(), h);
     adjustPosition();
     popup->setUpdatesEnabled(true);
 
     if (popup->isHidden()) {
         itemHovering = false;
-        popup->show();
+        popup->showNormal();
         QTimer::singleShot(100, this, SLOT(enableItemHovering()));
     }
 }
@@ -182,13 +188,14 @@ void AutoComplete::showSuggestions(const QList<Suggestion *> &suggestions) {
 void AutoComplete::acceptSuggestion() {
     int index = popup->currentIndex().row();
     if (index >= 0 && index < suggestions.size()) {
-        Suggestionsuggestion = suggestions.at(index);
+        Suggestion *suggestion = suggestions.at(index);
         buddy->setText(suggestion->value);
         emit suggestionAccepted(suggestion);
         emit suggestionAccepted(suggestion->value);
         originalText.clear();
         hideSuggestions();
-    } else qWarning() << "No suggestion for index" << index;
+    } else
+        qWarning() << "No suggestion for index" << index;
 }
 
 void AutoComplete::preventSuggest() {
@@ -201,16 +208,17 @@ void AutoComplete::enableSuggest() {
     enabled = true;
 }
 
-void AutoComplete::setSuggester(Suggestersuggester) {
+void AutoComplete::setSuggester(Suggester *suggester) {
     if (this->suggester) this->suggester->disconnect();
     this->suggester = suggester;
-    connect(suggester, SIGNAL(ready(QList<Suggestion*>)), SLOT(suggestionsReady(QList<Suggestion*>)));
+    connect(suggester, SIGNAL(ready(QVector<Suggestion *>)),
+            SLOT(suggestionsReady(QVector<Suggestion *>)));
 }
 
 void AutoComplete::suggest() {
     if (!enabled) return;
 
-    popup->setCurrentItem(0);
+    popup->setCurrentItem(nullptr);
     popup->clearSelection();
 
     originalText = buddy->text();
@@ -222,16 +230,16 @@ void AutoComplete::suggest() {
     if (suggester) suggester->suggest(originalText);
 }
 
-void AutoComplete::suggestionsReady(const QList<Suggestion *> &suggestions) {
+void AutoComplete::suggestionsReady(const QVector<Suggestion *> &suggestions) {
     qDeleteAll(this->suggestions);
     this->suggestions = suggestions;
     if (!enabled) return;
-    if (!buddy->hasFocus()) return;
+    if (!buddy->toWidget()->hasFocus() && buddy->toWidget()->isVisible()) return;
     showSuggestions(suggestions);
 }
 
 void AutoComplete::adjustPosition() {
-    popup->move(buddy->mapToGlobal(QPoint(0, buddy->height())));
+    popup->move(buddy->toWidget()->mapToGlobal(QPoint(0, buddy->toWidget()->height())));
 }
 
 void AutoComplete::enableItemHovering() {
@@ -240,7 +248,7 @@ void AutoComplete::enableItemHovering() {
 
 void AutoComplete::hideSuggestions() {
     itemHovering = false;
-#ifdef APP_MAC
+#ifdef APP_MAC_NO
     mac::fadeOutWindow(popup);
 #else
     popup->hide();
@@ -250,7 +258,7 @@ void AutoComplete::hideSuggestions() {
         buddy->setText(originalText);
         originalText.clear();
     }
-    buddy->setFocus();
+    buddy->toWidget()->setFocus();
     timer->stop();
 }