summaryrefslogtreecommitdiff
path: root/src/webwindow/webwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webwindow/webwindow.cpp')
-rw-r--r--src/webwindow/webwindow.cpp310
1 files changed, 301 insertions, 9 deletions
diff --git a/src/webwindow/webwindow.cpp b/src/webwindow/webwindow.cpp
index 758807b7..8a87ca90 100644
--- a/src/webwindow/webwindow.cpp
+++ b/src/webwindow/webwindow.cpp
@@ -27,16 +27,23 @@
#include "webwindow.h"
#include "webwindow.moc"
+#include "bookmarkmanager.h"
+#include "iconmanager.h"
+
#include "webpage.h"
#include "webtab.h"
+#include "bookmarkstoolbar.h"
+#include "rekonqmenu.h"
#include "urlbar.h"
#include "websnap.h"
#include <KUrl>
+#include <KToolBar>
#include <QWebView>
+#include <QWebHistory>
#include <QVBoxLayout>
@@ -45,6 +52,11 @@ WebWindow::WebWindow(QWidget *parent)
, _progress(0)
, _tab(new WebTab(this))
, _bar(new UrlBar(_tab))
+ , _mainToolBar(new KToolBar(this, false, false))
+ , _bookmarksBar(0)
+ , m_loadStopReloadAction(0)
+ , m_rekonqMenu(0)
+ , _ac(new KActionCollection(this))
{
init();
}
@@ -54,6 +66,11 @@ WebWindow::WebWindow(WebPage *page, QWidget *parent)
: QWidget(parent)
, _tab(new WebTab(this))
, _bar(new UrlBar(_tab))
+ , _mainToolBar(new KToolBar(this, false, false))
+ , _bookmarksBar(0)
+ , m_loadStopReloadAction(0)
+ , m_rekonqMenu(0)
+ , _ac(new KActionCollection(this))
{
_tab->view()->setPage(page);
page->setParent(_tab->view());
@@ -61,31 +78,107 @@ WebWindow::WebWindow(WebPage *page, QWidget *parent)
init();
}
+// ---------------------------------------------------------------------------------------------------
void WebWindow::init()
{
+ // then, setup our actions
+ setupActions();
+
+ // setting up rekonq tools
+ setupTools();
+
+ // main toolbar
+ _mainToolBar->addAction(actionByName(QL1S("go_back")));
+ _mainToolBar->addAction(actionByName(QL1S("go_forward")));
+ _mainToolBar->addAction(actionByName(QL1S("url_bar")));
+ _mainToolBar->addAction(actionByName(QL1S("load_stop_reload")));
+ _mainToolBar->addAction(actionByName(QL1S("rekonq_tools")));
+
+ // bookmarks toolbar
+ if (_bookmarksBar)
+ {
+ BookmarkManager::self()->removeBookmarkBar(_bookmarksBar);
+ delete _bookmarksBar;
+ }
+ KToolBar *XMLGUIBkBar = new KToolBar(this);
+ _bookmarksBar = new BookmarkToolBar(XMLGUIBkBar, this);
+ BookmarkManager::self()->registerBookmarkBar(_bookmarksBar);
+
// layout
- QVBoxLayout *l = new QVBoxLayout;
- l->addWidget(_bar);
+ QVBoxLayout *l = new QVBoxLayout(this);
+ l->addWidget(_mainToolBar);
+ l->addWidget(XMLGUIBkBar);
l->addWidget(_tab);
l->setContentsMargins(0, 0, 0, 0);
- setLayout(l);
setContentsMargins(0, 0, 0, 0);
// things changed signals
connect(_tab->view(), SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString)));
- // load signals
- connect(_tab->view(), SIGNAL(loadStarted()), this, SIGNAL(loadStarted()));
- connect(_tab->view(), SIGNAL(loadFinished(bool)), this, SIGNAL(loadFinished(bool)));
-
- connect(_tab->view(), SIGNAL(loadProgress(int)), this, SLOT(checkLoadProgress(int)));
+ // check view signals
+ connect(_tab->view(), SIGNAL(loadStarted()), this, SLOT(webLoadStarted()));
+ connect(_tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(webLoadFinished(bool)));
+ connect(_tab->view(), SIGNAL(loadProgress(int)), this, SLOT(webLoadProgress(int)));
// page signals
connect(page(), SIGNAL(pageCreated(WebPage *)), this, SIGNAL(pageCreated(WebPage *)));
}
+void WebWindow::setupActions()
+{
+ KAction *a;
+
+ // ========================= History related actions ==============================
+ a = _ac->addAction(KStandardAction::Back);
+ connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)),
+ this, SLOT(openPrevious(Qt::MouseButtons, Qt::KeyboardModifiers)));
+
+ m_historyBackMenu = new KMenu(this);
+ a->setMenu(m_historyBackMenu);
+ connect(m_historyBackMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowBackMenu()));
+ connect(m_historyBackMenu, SIGNAL(triggered(QAction*)), this, SLOT(openActionUrl(QAction*)));
+
+ a = _ac->addAction(KStandardAction::Forward);
+ connect(a, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)),
+ this, SLOT(openNext(Qt::MouseButtons, Qt::KeyboardModifiers)));
+
+ m_historyForwardMenu = new KMenu(this);
+ a->setMenu(m_historyForwardMenu);
+ connect(m_historyForwardMenu, SIGNAL(aboutToShow()), this, SLOT(aboutToShowForwardMenu()));
+ connect(m_historyForwardMenu, SIGNAL(triggered(QAction*)), this, SLOT(openActionUrl(QAction*)));
+
+ // urlbar
+ a = new KAction(i18n("Location Bar"), this);
+ a->setDefaultWidget(_bar);
+ _ac->addAction(QL1S("url_bar"), a);
+
+ // load stop reload Action
+ m_loadStopReloadAction = new KAction(this);
+ _ac->addAction(QL1S("load_stop_reload") , m_loadStopReloadAction);
+ m_loadStopReloadAction->setShortcutConfigurable(false);
+
+ m_loadStopReloadAction->setIcon(KIcon("go-jump-locationbar"));
+ m_loadStopReloadAction->setToolTip(i18n("Go"));
+ m_loadStopReloadAction->setText(i18n("Go"));
+}
+
+
+void WebWindow::setupTools()
+{
+ KActionMenu *toolsAction = new KActionMenu(KIcon("configure"), i18n("&Tools"), this);
+ toolsAction->setDelayed(false);
+ toolsAction->setShortcutConfigurable(true);
+ toolsAction->setShortcut(KShortcut(Qt::ALT + Qt::Key_T));
+ m_rekonqMenu = new RekonqMenu(this);
+ toolsAction->setMenu(m_rekonqMenu); // dummy menu to have the dropdown arrow
+
+ // adding rekonq_tools to rekonq actionCollection
+ _ac->addAction(QL1S("rekonq_tools"), toolsAction);
+}
+
+// ---------------------------------------------------------------------------------------------------
void WebWindow::load(const QUrl &url)
{
@@ -99,13 +192,212 @@ WebPage *WebWindow::page()
}
-void WebWindow::checkLoadProgress(int p)
+void WebWindow::webLoadProgress(int p)
{
_progress = p;
emit loadProgress(p);
}
+void WebWindow::webLoadStarted()
+{
+ emit loadStarted();
+
+ m_loadStopReloadAction->setIcon(KIcon("process-stop"));
+ m_loadStopReloadAction->setToolTip(i18n("Stop loading the current page"));
+ m_loadStopReloadAction->setText(i18n("Stop"));
+ connect(m_loadStopReloadAction, SIGNAL(triggered(bool)), _tab->view(), SLOT(stop()));
+
+ updateHistoryActions();
+}
+
+
+void WebWindow::webLoadFinished(bool b)
+{
+ emit loadFinished(b);
+
+ m_loadStopReloadAction->setIcon(KIcon("view-refresh"));
+ m_loadStopReloadAction->setToolTip(i18n("Reload the current page"));
+ m_loadStopReloadAction->setText(i18n("Reload"));
+ connect(m_loadStopReloadAction, SIGNAL(triggered(bool)), _tab->view(), SLOT(reload()));
+
+ updateHistoryActions();
+}
+
+
+void WebWindow::aboutToShowBackMenu()
+{
+ m_historyBackMenu->clear();
+
+ QWebHistory *history = _tab->view()->history();
+ int pivot = history->currentItemIndex();
+ int offset = 0;
+ const int maxItemNumber = 8; // no more than 8 elements in the Back History Menu!
+ QList<QWebHistoryItem> historyList = history->backItems(maxItemNumber);
+ int listCount = historyList.count();
+ if (pivot >= maxItemNumber)
+ offset = pivot - maxItemNumber;
+
+ if (_tab->page()->isOnRekonqPage())
+ {
+ QWebHistoryItem item = history->currentItem();
+ KAction *action = new KAction(this);
+ action->setData(listCount + offset++);
+ KIcon icon = IconManager::self()->iconForUrl(item.url());
+ action->setIcon(icon);
+ action->setText(item.title());
+ m_historyBackMenu->addAction(action);
+ }
+
+ for (int i = listCount - 1; i >= 0; --i)
+ {
+ QWebHistoryItem item = historyList.at(i);
+ KAction *action = new KAction(this);
+ action->setData(i + offset);
+ KIcon icon = IconManager::self()->iconForUrl(item.url());
+ action->setIcon(icon);
+ action->setText(item.title());
+ m_historyBackMenu->addAction(action);
+ }
+}
+
+
+void WebWindow::aboutToShowForwardMenu()
+{
+ m_historyForwardMenu->clear();
+
+ QWebHistory *history = _tab->view()->history();
+ const int pivot = history->currentItemIndex();
+ int offset = 0;
+ const int maxItemNumber = 8; // no more than 8 elements in the Forward History Menu!
+ QList<QWebHistoryItem> historyList = history->forwardItems(maxItemNumber);
+ int listCount = historyList.count();
+
+ if (pivot >= maxItemNumber)
+ offset = pivot - maxItemNumber;
+
+ if (_tab->page()->isOnRekonqPage())
+ {
+ QWebHistoryItem item = history->currentItem();
+ KAction *action = new KAction(this);
+ action->setData(listCount + offset++);
+ KIcon icon = IconManager::self()->iconForUrl(item.url());
+ action->setIcon(icon);
+ action->setText(item.title());
+ m_historyForwardMenu->addAction(action);
+ }
+
+ for (int i = 1; i <= listCount; i++)
+ {
+ QWebHistoryItem item = historyList.at(i - 1);
+ KAction *action = new KAction(this);
+ action->setData(pivot + i + offset);
+ KIcon icon = IconManager::self()->iconForUrl(item.url());
+ action->setIcon(icon);
+ action->setText(item.title());
+ m_historyForwardMenu->addAction(action);
+ }
+}
+
+
+void WebWindow::openActionUrl(QAction *action)
+{
+ int index = action->data().toInt();
+
+ QWebHistory *history = _tab->view()->history();
+ if (!history->itemAt(index).isValid())
+ {
+ kDebug() << "Invalid Index!: " << index;
+ return;
+ }
+
+ history->goToItem(history->itemAt(index));
+}
+
+
+void WebWindow::openPrevious(Qt::MouseButtons mouseButtons, Qt::KeyboardModifiers keyboardModifiers)
+{
+ QWebHistory *history = _tab->view()->history();
+ QWebHistoryItem *item = 0;
+
+ if (_tab->page()->isOnRekonqPage())
+ {
+ item = new QWebHistoryItem(history->currentItem());
+ }
+ else
+ {
+ if (history->canGoBack())
+ {
+ item = new QWebHistoryItem(history->backItem());
+ }
+ }
+
+ if (!item)
+ return;
+
+ if (mouseButtons == Qt::MidButton || keyboardModifiers == Qt::ControlModifier)
+ {
+// FIXME rApp->loadUrl(item->url(), Rekonq::NewTab);
+ }
+ else
+ {
+ history->goToItem(*item);
+ }
+
+ updateHistoryActions();
+}
+
+
+void WebWindow::openNext(Qt::MouseButtons mouseButtons, Qt::KeyboardModifiers keyboardModifiers)
+{
+ QWebHistory *history = _tab->view()->history();
+ QWebHistoryItem *item = 0;
+
+ if (_tab->page()->isOnRekonqPage())
+ {
+ item = new QWebHistoryItem(history->currentItem());
+ }
+ else
+ {
+ if (history->canGoForward())
+ {
+ item = new QWebHistoryItem(history->forwardItem());
+ }
+ }
+
+ if (!item)
+ return;
+
+ if (mouseButtons == Qt::MidButton || keyboardModifiers == Qt::ControlModifier)
+ {
+// FIXME rApp->loadUrl(item->url(), Rekonq::NewTab);
+ }
+ else
+ {
+ history->goToItem(*item);
+ }
+
+ updateHistoryActions();
+}
+
+
+void WebWindow::updateHistoryActions()
+{
+ QWebHistory *history = _tab->view()->history();
+
+ bool rekonqPage = _tab->page()->isOnRekonqPage();
+
+ QAction *historyBackAction = actionByName(KStandardAction::name(KStandardAction::Back));
+ if (rekonqPage && history->count() > 0)
+ historyBackAction->setEnabled(true);
+ else
+ historyBackAction->setEnabled(history->canGoBack());
+
+ QAction *historyForwardAction = actionByName(KStandardAction::name(KStandardAction::Forward));
+ historyForwardAction->setEnabled(history->canGoForward());
+}
+
+
KUrl WebWindow::url() const
{
return _tab->url();