summaryrefslogtreecommitdiff
path: root/src/urlbar/urlbar.cpp
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2010-03-29 11:47:42 +0200
committerAndrea Diamantini <adjam7@gmail.com>2010-03-29 11:47:42 +0200
commit942c55b945443a2e6dd9a2d3660347fc2176630a (patch)
treeea0eb7355c0358eafe30730636c21fa9d86889c4 /src/urlbar/urlbar.cpp
parentupdate is better than repaint :) (diff)
downloadrekonq-942c55b945443a2e6dd9a2d3660347fc2176630a.tar.xz
This commit merge all our work about new UrlBar.
DISCLAIMER: this is far from perfect, but we finally have a good starting point to work on.. :) Jonas Gastal started working on it in the 0.3 times, startin from CompletionBase code .. .. I did some work on another idea, proposing (in code) a new "suggest engine" created from scratch... Lionel Chauvin finally merged our ideas and implemented what you are seeing (and improved it, too!).. - New suggestion items (Firefox style) - a mockup on the known urls (rekonq style) - for now, automatic Google and Wikipedia searches (more coming).. - a beautiful animation :) - quite all rough edges smoothed -------------------------------------------------------- Squashed commit of the following: commit d9cf43da421c7f6c71f78444ff1935c414468b98 commit 9dcb6e18f8a3e9ae8ef1cd1299d47d37393aa6e5 commit 6c4bf2b2040ea20c78c5703f20c6bc88b7e40169 commit 8488df67115d186489f34210b638c150c66f62d3 commit 066ab907661282b1ffa4cf640739c20b4c7b6556 commit c23e23cbca7ab3197c570651a95d3f8fea270d78 commit 60655b0a8685a76e2b8b7a457bfded974bc98b4c commit 9a8817db124b55f501c9e5d3415a975ee6f92d68 commit 61312b6b577a535a4d56758b3bd3ea38812d5139 commit b6a3f4ea12423a063eafa641cedd13b890b9d392 commit 5e8e2f851edb42bc2deed296c26c58c3d7570381 commit 2904d828f71ac8ff46a53e58da8f45b5aa16e7ef ---------------------------------------------------------
Diffstat (limited to 'src/urlbar/urlbar.cpp')
-rw-r--r--src/urlbar/urlbar.cpp200
1 files changed, 95 insertions, 105 deletions
diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp
index 189d19fe..54a0a02d 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,44 @@
#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)
+ , m_box(new CompletionWidget(this))
{
- setUrlDropsEnabled(true);
- setAutoDeleteCompletionObject(true);
-
//cosmetic
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setMinimumWidth(180);
-
- setTrapReturnKey(true);
-
- setupLineEdit();
- // 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&)));
+ // 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);
- connect(this, SIGNAL(cleared()), SLOT(cleared()));
+ if (!s_defaultBaseColor.isValid())
+ {
+ s_defaultBaseColor = palette().color(QPalette::Base);
+ }
- // setup completion box
- setCompletionObject( Application::historyManager()->completionObject() );
-
- // set dropdown list background
- QPalette p = view()->palette();
- p.setColor(QPalette::Base, palette().color(QPalette::Base));
- view()->setPalette(p);
+ setLineEdit(m_lineEdit);
+ // clear the URL bar
+ m_lineEdit->clear();
// 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&)));
+
+ installEventFilter(m_box);
+ connect(m_box, SIGNAL(chosenUrl(const QString&)), SLOT(activated(const QString&)));
}
@@ -96,7 +96,7 @@ UrlBar::~UrlBar()
void UrlBar::selectAll() const
{
- lineEdit()->selectAll();
+ m_lineEdit->selectAll();
}
@@ -106,42 +106,12 @@ 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
+ updateUrl();
setFocus();
}
else
@@ -149,6 +119,7 @@ void UrlBar::setUrl(const QUrl& url)
m_currentUrl = KUrl(url);
updateUrl();
}
+
}
@@ -195,29 +166,21 @@ void UrlBar::updateUrl()
// Must be AFTER setCurrentIndex
if (!hasFocus())
{
- lineEdit()->setCursorPosition(0);
+ m_lineEdit->setCursorPosition(0);
}
}
void UrlBar::activated(const QString& urlString)
{
+ disconnect(this, SIGNAL(editTextChanged(const QString &)), this, SLOT(suggestUrls(const QString &)));
+
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) );
-}
-
-
-void UrlBar::cleared()
-{
- // clear the history on user's request from context menu
- clear();
+ clearFocus();
+ setUrl(urlString);
+ Application::instance()->loadUrl(m_currentUrl);
}
@@ -243,7 +206,7 @@ void UrlBar::paintEvent(QPaintEvent *event)
p.setColor(QPalette::Base, s_defaultBaseColor);
setPalette(p);
- KHistoryComboBox::paintEvent(event);
+ KComboBox::paintEvent(event);
if (!hasFocus())
{
@@ -261,7 +224,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 +235,7 @@ void UrlBar::paintEvent(QPaintEvent *event)
QSize UrlBar::sizeHint() const
{
- return lineEdit()->sizeHint();
+ return m_lineEdit->sizeHint();
}
@@ -308,43 +271,70 @@ bool UrlBar::isLoading()
return true;
}
-
void UrlBar::keyPressEvent(QKeyEvent *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))
+ {
+ 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))
{
- // fill lineEdit with its stripped contents to remove trailing spaces
- m_lineEdit->setText(currentText);
+ host += append;
+ url.setHost(host);
+ m_lineEdit->setText(url.toString());
}
}
+
+ KComboBox::keyPressEvent(event);
+}
+
+
+void UrlBar::suggestUrls(const QString &text)
+{
+ if (!hasFocus())
+ {
+ return;
+ }
+
+ if(text.isEmpty())
+ {
+ m_box->hide();
+ return;
+ }
+
+ UrlResolver res(text);
+ UrlSearchList list = res.orderedSearchItems();
+
+ if(list.count() > 0)
+ {
+ m_box->clear();
+ m_box->insertSearchList(list);
+ m_box->popup();
+ }
+}
- KHistoryComboBox::keyPressEvent(event);
+void UrlBar::focusInEvent(QFocusEvent *event)
+{
+ // activate suggestions on edit text
+ connect(this, SIGNAL(editTextChanged(const QString &)), this, SLOT(suggestUrls(const QString &)));
+
+ KComboBox::focusInEvent(event);
}