From f45e39322dd7561bc1cd2756b4c9223bc586425b Mon Sep 17 00:00:00 2001
From: megabigbug <megabigbug@arrakis.(none)>
Date: Wed, 24 Mar 2010 22:49:57 +0100
Subject: derivation of the lastbar branch: UltimateLastBar :)

what work ?
better themes for list items
hide list correctly

what doesn't work
focus of the qcombobox is lost when a key is pressed
move in the list
---
 src/urlbar/lineedit.cpp |   4 +-
 src/urlbar/lineedit.h   |  12 +--
 src/urlbar/urlbar.cpp   | 237 ++++++++++++++++++++++++++----------------------
 src/urlbar/urlbar.h     |  26 +++---
 4 files changed, 150 insertions(+), 129 deletions(-)

(limited to 'src/urlbar')

diff --git a/src/urlbar/lineedit.cpp b/src/urlbar/lineedit.cpp
index db36bd0c..f3c93e8e 100644
--- a/src/urlbar/lineedit.cpp
+++ b/src/urlbar/lineedit.cpp
@@ -2,9 +2,9 @@
 *
 * This file is a part of the rekonq project
 *
-* Copyright (C) 2009-2010 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/urlbar/lineedit.h b/src/urlbar/lineedit.h
index 1ac3af2e..d76a5fcb 100644
--- a/src/urlbar/lineedit.h
+++ b/src/urlbar/lineedit.h
@@ -2,9 +2,9 @@
 *
 * This file is a part of the rekonq project
 *
-* Copyright (C) 2009-2010 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
 *
 *
 * This program is free software; you can redistribute it and/or
@@ -30,9 +30,6 @@
 #define LINEEDIT_H
 
 
-// Local Includes
-#include "rekonqprivate_export.h"
-
 // KDE Includes
 #include <KLineEdit>
 
@@ -42,7 +39,7 @@ class QFocusEvent;
 class QKeyEvent;
 
 
-class REKONQ_TESTS_EXPORT LineEdit : public KLineEdit
+class LineEdit : public KLineEdit
 {
     Q_OBJECT
 
@@ -50,9 +47,12 @@ public:
     explicit LineEdit(QWidget *parent = 0);
     virtual ~LineEdit();
 
+    
 protected:
     virtual void keyPressEvent(QKeyEvent*);
     virtual void mouseDoubleClickEvent(QMouseEvent *);
+
+
 };
 
 #endif // LINEEDIT_H
diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp
index 718d9f67..270cdc5e 100644
--- a/src/urlbar/urlbar.cpp
+++ b/src/urlbar/urlbar.cpp
@@ -2,10 +2,10 @@
 *
 * This file is a part of the rekonq project
 *
-* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
 *
 *
 * This program is free software; you can redistribute it and/or
@@ -36,8 +36,7 @@
 #include "lineedit.h"
 #include "mainwindow.h"
 #include "webview.h"
-#include "historymanager.h"
-#include "webtab.h"
+#include "urlresolver.h"
 
 // KDE Includes
 #include <KDebug>
@@ -49,43 +48,41 @@
 #include <QPaintEvent>
 #include <QPalette>
 #include <QTimer>
-
+#include <QVBoxLayout>
 
 QColor UrlBar::s_defaultBaseColor;
 
 
 UrlBar::UrlBar(QWidget *parent)
-        : KHistoryComboBox(true, parent)
-        , m_lineEdit(new LineEdit)
-        , m_progress(0)
+    : KComboBox(true, parent)
+    , m_lineEdit(new LineEdit)
+    , m_progress(0)
 {
-    setUrlDropsEnabled(true);
-    setAutoDeleteCompletionObject(true);
-
     //cosmetic
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
     setMinimumWidth(180);
-    
-    setTrapReturnKey(true);
 
-    setupLineEdit();
+    // signal handlings
+    setTrapReturnKey(true);
+    setUrlDropsEnabled(true);
+    
+    // Make m_lineEdit background transparent
+    QPalette p = m_lineEdit->palette();
+    p.setColor(QPalette::Base, Qt::transparent);
+    m_lineEdit->setPalette(p);
 
-    // add every item to history
-    connect(this, SIGNAL(returnPressed(const QString&)), SLOT(activated(const QString&)));
-    connect(completionBox(), SIGNAL(activated(const QString&)), SLOT(activated(const QString&)));
+    if (!s_defaultBaseColor.isValid())
+    {
+        s_defaultBaseColor = palette().color(QPalette::Base);
+    }
 
-    connect(this, SIGNAL(cleared()), SLOT(cleared()));
+    setLineEdit(m_lineEdit);
 
-    // setup completion box
-    setCompletionObject( Application::historyManager()->completionObject() );
+    // clear the URL bar
+    m_lineEdit->clear();
     
-    // set dropdown list background
-    QPalette p = view()->palette();
-    p.setColor(QPalette::Base, palette().color(QPalette::Base));
-    view()->setPalette(p);
-
     // load urls on activated urlbar signal
-    connect(this, SIGNAL(activated(const KUrl&)), Application::instance(), SLOT(loadUrl(const KUrl&)));
+    connect(this, SIGNAL(returnPressed(const QString&)), SLOT(activated(const QString&)));    
 }
 
 
@@ -96,7 +93,7 @@ UrlBar::~UrlBar()
 
 void UrlBar::selectAll() const
 {
-    lineEdit()->selectAll();
+    m_lineEdit->selectAll();
 }
 
 
@@ -106,49 +103,18 @@ KUrl UrlBar::url() const
 }
 
 
-KLineEdit *UrlBar::lineEdit() const
-{
-    return m_lineEdit;
-}
-
-
-void UrlBar::setupLineEdit()
-{
-    // Make m_lineEdit background transparent
-    QPalette p = m_lineEdit->palette();
-    p.setColor(QPalette::Base, Qt::transparent);
-    m_lineEdit->setPalette(p);
-
-    if (!s_defaultBaseColor.isValid())
-    {
-        s_defaultBaseColor = palette().color(QPalette::Base);
-    }
-
-    setLineEdit(m_lineEdit);
-
-    // Make the lineedit consume the Qt::Key_Enter event...
-    lineEdit()->setTrapReturnKey(true);
-
-    lineEdit()->setHandleSignals(true);
-
-    // clear the URL bar
-    lineEdit()->clear();
-}
-
-
 void UrlBar::setUrl(const QUrl& url)
 {
     if(url.scheme() == "about")
     {
         m_currentUrl = KUrl();
-        updateUrl();    // updateUrl before setFocus        
         setFocus();
     }
     else
     {
         m_currentUrl = KUrl(url);
-        updateUrl();
     }
+    updateUrl();
 }
 
 
@@ -195,29 +161,30 @@ void UrlBar::updateUrl()
     // Must be AFTER setCurrentIndex
     if (!hasFocus())
     {
-        lineEdit()->setCursorPosition(0);
+        m_lineEdit->setCursorPosition(0);
     }
 }
 
 
 void UrlBar::activated(const QString& urlString)
 {
-    if (urlString.isEmpty())
-        return;
-
-    // this fix urlbar behaviour, removing focus from there and enabling
-    // loading animation. Temporary fix??
-    Application::instance()->mainWindow()->currentTab()->setFocus();
-
-    setUrl( KUrl(urlString) );
-    emit activated( KUrl(urlString) );
-}
-
+    disconnect(this, SIGNAL(editTextChanged(const QString &)), this, SLOT(suggestUrls(const QString &)));
 
-void UrlBar::cleared()
-{
-    // clear the history on user's request from context menu
-    clear();
+    
+    if(!m_suggestedUrl.isEmpty())
+    {
+        kDebug() << "+++++++++++++++++ suggested url NOT empty +++++++++++++++++++++++";
+        m_currentUrl = m_suggestedUrl;
+        updateUrl();
+        m_suggestedUrl = KUrl();
+    }
+    else
+    {
+        if (urlString.isEmpty())
+            return;
+        setUrl(urlString);
+    }
+    Application::instance()->loadUrl(m_currentUrl);
 }
 
 
@@ -243,7 +210,7 @@ void UrlBar::paintEvent(QPaintEvent *event)
     p.setColor(QPalette::Base, s_defaultBaseColor);
     setPalette(p);
 
-    KHistoryComboBox::paintEvent(event);
+    KComboBox::paintEvent(event);
 
     if (!hasFocus())
     {
@@ -261,7 +228,7 @@ void UrlBar::paintEvent(QPaintEvent *event)
         painter.setBrush(generateGradient(loadingColor, height()));
         painter.setPen(Qt::transparent);
 
-        QRect backgroundRect = lineEdit()->frameGeometry();
+        QRect backgroundRect = m_lineEdit->frameGeometry();
         int mid = backgroundRect.width() * m_progress / 100;
         QRect progressRect(backgroundRect.x(), backgroundRect.y(), mid, backgroundRect.height());
         painter.drawRect(progressRect);
@@ -272,7 +239,7 @@ void UrlBar::paintEvent(QPaintEvent *event)
 
 QSize UrlBar::sizeHint() const
 {
-    return lineEdit()->sizeHint();
+    return m_lineEdit->sizeHint();
 }
 
 
@@ -308,43 +275,99 @@ bool UrlBar::isLoading()
     return true;
 }
 
-
 void UrlBar::keyPressEvent(QKeyEvent *event)
 {
+    
+    // this handles the up/down arrow with active suggestions
+    if(m_box)
+    {
+        switch(event->key())
+        {
+        case Qt::Key_Escape:
+            m_box->hide();
+            setFocus();
+            break;
+        case Qt::Key_Up:
+            m_suggestedUrl = m_box->activatePrevious();
+            kDebug() << "oooooooooooooooooo Up Arrow";
+            break;
+            
+        case Qt::Key_Down:
+            m_suggestedUrl = m_box->activateNext();
+            kDebug() << "oooooooooooooooooo Down Arrow";
+            break;
+            
+        default:
+            break;
+        }
+        return KComboBox::keyPressEvent(event);
+    }
+
+    // this handles the Modifiers + Return key combinations
     QString currentText = m_lineEdit->text().trimmed();
-    if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
+    if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
+        && !currentText.startsWith(QLatin1String("http://"), Qt::CaseInsensitive))
     {
-        if( !currentText.startsWith(QLatin1String("http://"), Qt::CaseInsensitive) )
+        QString append;
+        if (event->modifiers() == Qt::ControlModifier)
         {
-            QString append;
-            if (event->modifiers() == Qt::ControlModifier)
-            {
-                append = QLatin1String(".com");
-            }
-            else if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier))
-            {
-                append = QLatin1String(".org");
-            }
-            else if (event->modifiers() == Qt::ShiftModifier)
-            {
-                append = QLatin1String(".net");
-            }
-
-            QUrl url(QLatin1String("http://www.") + currentText);
-            QString host = url.host();
-            if (!host.endsWith(append, Qt::CaseInsensitive))
-            {
-                host += append;
-                url.setHost(host);
-                m_lineEdit->setText(url.toString());
-            }
+            append = QLatin1String(".com");
         }
-        else
+        else if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier))
         {
-            // fill lineEdit with its stripped contents to remove trailing spaces
-            m_lineEdit->setText(currentText);
+            append = QLatin1String(".org");
+        }
+        else if (event->modifiers() == Qt::ShiftModifier)
+        {
+            append = QLatin1String(".net");
+        }
+
+        QUrl url(QLatin1String("http://www.") + currentText);
+        QString host = url.host();
+        if (!host.endsWith(append, Qt::CaseInsensitive))
+        {
+            host += append;
+            url.setHost(host);
+            m_lineEdit->setText(url.toString());
         }
     }
+    
+    KComboBox::keyPressEvent(event);
+}
 
-    KHistoryComboBox::keyPressEvent(event);
+
+void UrlBar::suggestUrls(const QString &text)
+{    
+    if(text.isEmpty())
+        return;
+
+    UrlResolver res(text);
+    UrlSearchList list = res.orderedSearchItems();
+
+    if(list.count() > 0)
+    {
+        if (m_box) delete m_box;
+        m_box=new CompletionWidget(this);
+        m_box->insertSearchList(list);
+        m_box->popup();
+    }
+}
+
+
+void UrlBar::focusInEvent(QFocusEvent *event)
+{
+    // activate suggestions on edit text
+    connect(this, SIGNAL(editTextChanged(const QString &)), this, SLOT(suggestUrls(const QString &)));
+    
+    KComboBox::focusInEvent(event);
+}
+
+
+void UrlBar::changeEvent(QEvent *event)
+{
+    if (event->type()==QEvent::EnabledChange 
+        && !isEnabled() 
+        && m_box 
+        && m_box->isVisible()) m_box->hide();
+    KComboBox::changeEvent(event);
 }
diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h
index 39911bb2..18878e5f 100644
--- a/src/urlbar/urlbar.h
+++ b/src/urlbar/urlbar.h
@@ -2,10 +2,10 @@
 *
 * This file is a part of the rekonq project
 *
-* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
 *
 *
 * This program is free software; you can redistribute it and/or
@@ -32,23 +32,23 @@
 
 
 // Local Includes
-#include "rekonqprivate_export.h"
 #include "lineedit.h"
+#include "completionwidget.h"
 
 // KDE Includes
 #include <KUrl>
-#include <KHistoryComboBox>
+#include <KComboBox>
 
 // Qt Includes
 #include <QUrl>
+#include <QPointer>
 
 // Forward Declarations
 class QLinearGradient;
 class QWidget;
-class KCompletion;
 
 
-class REKONQ_TESTS_EXPORT UrlBar : public KHistoryComboBox
+class UrlBar : public KComboBox
 {
     Q_OBJECT
 
@@ -64,9 +64,6 @@ public:
     
     void setProgress(int progress);
 
-signals:
-    void activated(const KUrl&);
-
 public slots:
     void setUrl(const QUrl &url);
     void updateProgress(int progress);
@@ -75,17 +72,15 @@ public slots:
 private slots:
     void activated(const QString& url);
     void loadFinished(bool);
-    void cleared();
+    void suggestUrls(const QString &editedText);
 
 protected:
     virtual void paintEvent(QPaintEvent *event);
     virtual void keyPressEvent(QKeyEvent *event);
+    virtual void focusInEvent(QFocusEvent *event);
+    virtual void changeEvent (QEvent* event);
 
 private:
-    void setupLineEdit();
-
-    KLineEdit *lineEdit() const;
-
     static QLinearGradient generateGradient(const QColor &color, int height);
 
     static QColor s_defaultBaseColor;
@@ -94,6 +89,9 @@ private:
 
     KUrl m_currentUrl;
     int m_progress;
+
+    CompletionWidget *m_box;
+    KUrl m_suggestedUrl;
 };
 
 #endif
-- 
cgit v1.2.1