diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/application.cpp | 3 | ||||
-rw-r--r-- | src/bookmarks/bookmarkcontextmenu.cpp | 10 | ||||
-rw-r--r-- | src/bookmarks/bookmarkspanel.cpp | 5 | ||||
-rw-r--r-- | src/bookmarks/bookmarkstreemodel.cpp | 4 | ||||
-rw-r--r-- | src/data/rekonq.desktop | 2 | ||||
-rw-r--r-- | src/findbar.cpp | 14 | ||||
-rw-r--r-- | src/findbar.h | 5 | ||||
-rw-r--r-- | src/mainview.cpp | 13 | ||||
-rw-r--r-- | src/mainview.h | 7 | ||||
-rw-r--r-- | src/mainwindow.cpp | 95 | ||||
-rw-r--r-- | src/mainwindow.h | 12 | ||||
-rw-r--r-- | src/newtabpage.cpp | 134 | ||||
-rw-r--r-- | src/newtabpage.h | 5 | ||||
-rw-r--r-- | src/urlbar/completionwidget.cpp | 69 | ||||
-rw-r--r-- | src/urlbar/completionwidget.h | 6 | ||||
-rw-r--r-- | src/urlbar/urlbar.cpp | 18 | ||||
-rw-r--r-- | src/webview.cpp | 2 | ||||
-rw-r--r-- | src/webview.h | 2 | ||||
-rw-r--r-- | src/zoombar.cpp | 181 | ||||
-rw-r--r-- | src/zoombar.h | 78 |
22 files changed, 443 insertions, 225 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c25b8234..8de22b5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ PROJECT( rekonq ) # Informations to update before to release this package. # rekonq info -SET(REKONQ_VERSION "0.5.53" ) +SET(REKONQ_VERSION "0.5.54" ) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9d691d36..46e9240c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,6 +11,7 @@ SET( rekonq_KDEINIT_SRCS clicktoflash.cpp filterurljob.cpp findbar.cpp + zoombar.cpp mainview.cpp mainwindow.cpp networkaccessmanager.cpp diff --git a/src/application.cpp b/src/application.cpp index 71693a7a..8a24014d 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -224,7 +224,8 @@ int Application::newInstance() if(isFirstLoad) { - QTimer::singleShot(0, this, SLOT(postLaunch())); + // give me some time to do the other things.. + QTimer::singleShot(100, this, SLOT(postLaunch())); } return exitValue; diff --git a/src/bookmarks/bookmarkcontextmenu.cpp b/src/bookmarks/bookmarkcontextmenu.cpp index e731d982..96668003 100644 --- a/src/bookmarks/bookmarkcontextmenu.cpp +++ b/src/bookmarks/bookmarkcontextmenu.cpp @@ -214,7 +214,7 @@ void BookmarkContextMenu::deleteBookmark() KBookmark bm = bookmark(); KBookmarkGroup bmg = bm.parentGroup(); bool folder = bm.isGroup(); - QString name = QString(bm.text()).replace("&&", "&"); + QString name = QString(bm.fullText()).replace("&&", "&"); if (KMessageBox::warningContinueCancel( QApplication::activeWindow(), @@ -237,10 +237,10 @@ void BookmarkContextMenu::deleteBookmark() void BookmarkContextMenu::editBookmark() { KBookmark selected = bookmark(); - selected.setFullText(selected.text().replace("&&", "&")); + selected.setFullText(selected.fullText().replace("&&", "&")); KBookmarkDialog *dialog = owner()->bookmarkDialog(manager(), QApplication::activeWindow()); dialog->editBookmark(selected); - selected.setFullText(selected.text().replace('&', "&&")); + selected.setFullText(selected.fullText().replace('&', "&&")); delete dialog; } @@ -322,13 +322,13 @@ void BookmarkContextMenu::bookmarkCurrentPage() if (selected.isGroup()) parent = selected.toGroup(); - KBookmark newBk = parent.addBookmark(owner()->currentTitle().replace('&', "&&"), KUrl(owner()->currentUrl()), "text-html"); + KBookmark newBk = parent.addBookmark(owner()->currentTitle().replace('&', "&&"), KUrl(owner()->currentUrl())); parent.moveBookmark(newBk, selected.parentGroup().previous(selected)); } else { - parent.addBookmark(owner()->currentTitle(), KUrl(owner()->currentUrl()), "text-html"); + parent.addBookmark(owner()->currentTitle(), KUrl(owner()->currentUrl())); } manager()->emitChanged(parent); diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp index 5e11601a..75d8faf3 100644 --- a/src/bookmarks/bookmarkspanel.cpp +++ b/src/bookmarks/bookmarkspanel.cpp @@ -220,11 +220,12 @@ void BookmarksPanel::deleteBookmark() KBookmark bm = bookmarkForIndex(index); KBookmarkGroup bmg = bm.parentGroup(); bool folder = bm.isGroup(); + QString name = QString(bm.fullText()).replace("&&", "&"); if (KMessageBox::warningContinueCancel( QApplication::activeWindow(), - folder ? i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?", bm.text()) - : i18n("Are you sure you wish to remove the bookmark\n\"%1\"?", bm.text()), + folder ? i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?", name) + : i18n("Are you sure you wish to remove the bookmark\n\"%1\"?", name), folder ? i18n("Bookmark Folder Deletion") : i18n("Bookmark Deletion"), KStandardGuiItem::del(), diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp index b58b66e9..7063bf9b 100644 --- a/src/bookmarks/bookmarkstreemodel.cpp +++ b/src/bookmarks/bookmarkstreemodel.cpp @@ -69,9 +69,9 @@ QVariant BtmItem::data(int role) const { QString tooltip = ""; - if (!m_kbm.text().isEmpty()) + if (!m_kbm.fullText().isEmpty()) { - tooltip += m_kbm.text(); + tooltip += m_kbm.fullText(); } if (m_kbm.isGroup()) { diff --git a/src/data/rekonq.desktop b/src/data/rekonq.desktop index 64ab8421..a29d37e5 100644 --- a/src/data/rekonq.desktop +++ b/src/data/rekonq.desktop @@ -30,6 +30,8 @@ Name[zh_CN]=rekonq Name[zh_TW]=rekonq GenericName=Web Browser GenericName[da]=Webbrowser +GenericName[de]=Webbrowser +GenericName[en_GB]=Web Browser GenericName[es]=Navegador web GenericName[fr]=Navigateur web GenericName[pt]=Navegador Web diff --git a/src/findbar.cpp b/src/findbar.cpp index 10b63186..495e4f96 100644 --- a/src/findbar.cpp +++ b/src/findbar.cpp @@ -75,6 +75,7 @@ FindBar::FindBar(QWidget *parent) // hide timer connect(m_hideTimer, SIGNAL(timeout()), this, SLOT(hide())); + m_hideTimer->setSingleShot(true); // label QLabel *label = new QLabel(i18n("Find:")); @@ -185,3 +186,16 @@ void FindBar::hide() QWidget::hide(); emit(searchString(m_lineEdit->text())); } + + +void FindBar::setVisible(bool visible) +{ + emit visibilityChanged(visible); + QWidget::setVisible(visible); +} + + +void FindBar::toggleVisibility() +{ + setVisible(!isVisible()); +} diff --git a/src/findbar.h b/src/findbar.h index 83334b4f..63b2949b 100644 --- a/src/findbar.h +++ b/src/findbar.h @@ -58,9 +58,14 @@ public: public slots: void show(); void hide(); + void toggleVisibility(); signals: void searchString(const QString &); + void visibilityChanged(bool); + +protected: + void setVisible(bool visible); private: KLineEdit *m_lineEdit; diff --git a/src/mainview.cpp b/src/mainview.cpp index 335bcfae..dc759c9e 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -293,10 +293,6 @@ void MainView::currentChanged(int index) else emit browserTabLoading(true); - // update zoom slider - if (!Application::instance()->mainWindowList().isEmpty()) - Application::instance()->mainWindow()->setZoomSliderFactor(tab->view()->zoomFactor()); - // set focus to the current webview if (tab->url().scheme() == QL1S("about")) _widgetBar->currentWidget()->setFocus(); @@ -329,7 +325,6 @@ WebTab *MainView::newWebTab(bool focused) connect(tab->view(), SIGNAL(iconChanged()), this, SLOT(webViewIconChanged())); connect(tab->view(), SIGNAL(titleChanged(const QString &)), this, SLOT(webViewTitleChanged(const QString &))); connect(tab->view(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(webViewUrlChanged(const QUrl &))); - connect(tab->view(), SIGNAL(zoomChanged(qreal)), m_parentWindow, SLOT(setZoomSliderFactor(qreal))); // connecting webPage signals with mainview connect(tab->view()->page(), SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested())); @@ -704,7 +699,7 @@ void MainView::resizeEvent(QResizeEvent *event) } -void MainView::detachTab(int index) +void MainView::detachTab(int index, MainWindow *toWindow) { if (index < 0) index = currentIndex(); @@ -725,7 +720,11 @@ void MainView::detachTab(int index) UrlBar *bar = _widgetBar->urlBar(index); closeTab(index, false); - MainWindow *w = Application::instance()->newMainWindow(false); + MainWindow *w; + if( toWindow == NULL ) + w = Application::instance()->newMainWindow(false); + else + w = toWindow; w->mainView()->addTab(tab, Application::icon(u), label); w->mainView()->widgetBar()->insertWidget(0, bar); w->mainView()->updateTabBar(); diff --git a/src/mainview.h b/src/mainview.h index 2ece6fe4..cc7eb8da 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -129,7 +129,12 @@ public slots: void closeTab(int index = -1, bool del = true); void closeOtherTabs(int index = -1); void reloadTab(int index = -1); - void detachTab(int index = -1); + /** + * Detaches tab at @c index to a new window. + * If @c toWindow is not null, the tab is instead + * added to existing MainWindow @c toWindow. + */ + void detachTab(int index = -1, MainWindow *toWindow = NULL); void reloadAllTabs(); void nextTab(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9207f6ec..cbef274a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -41,6 +41,7 @@ #include "webtab.h" #include "mainview.h" #include "findbar.h" +#include "zoombar.h" #include "historypanel.h" #include "bookmarkspanel.h" #include "webinspectorpanel.h" @@ -97,6 +98,7 @@ MainWindow::MainWindow() : KXmlGuiWindow() , m_view(new MainView(this)) , m_findBar(new FindBar(this)) + , m_zoomBar(new ZoomBar(this)) , m_historyPanel(0) , m_bookmarksPanel(0) , m_webInspectorPanel(0) @@ -116,6 +118,7 @@ MainWindow::MainWindow() layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_view); layout->addWidget(m_findBar); + layout->addWidget(m_zoomBar); centralWidget->setLayout(layout); // central widget @@ -149,7 +152,8 @@ MainWindow::MainWindow() // no more status bar.. setStatusBar(0); - QTimer::singleShot(0, this, SLOT(postLaunch())); + // give me some time to do all the other stuffs... + QTimer::singleShot(100, this, SLOT(postLaunch())); kDebug() << "MainWindow ctor...DONE"; } @@ -163,6 +167,7 @@ MainWindow::~MainWindow() delete m_view; delete m_findBar; + delete m_zoomBar; delete m_historyPanel; delete m_bookmarksPanel; @@ -173,8 +178,6 @@ MainWindow::~MainWindow() delete m_encodingMenu; delete m_bookmarksBar; - - delete m_zoomSlider; delete m_popup; delete m_hidePopup; @@ -251,6 +254,11 @@ void MainWindow::postLaunch() // Find Bar signal connect(m_findBar, SIGNAL(searchString(const QString &)), this, SLOT(find(const QString &))); + // Zoom Bar signal + connect(m_view, SIGNAL(currentChanged(int)), m_zoomBar, SLOT(updateSlider(int))); + // Ctrl + wheel handling + connect(this->currentTab()->view(), SIGNAL(zoomChanged(int)), m_zoomBar, SLOT(setValue(int))); + // setting up toolbars to NOT have context menu enabled setContextMenuPolicy(Qt::DefaultContextMenu); @@ -288,10 +296,12 @@ void MainWindow::setupActions() KStandardAction::print(this, SLOT(printRequested()), actionCollection()); KStandardAction::quit(this , SLOT(close()), actionCollection()); - a = KStandardAction::find(m_findBar, SLOT(show()), actionCollection()); + a = KStandardAction::find(m_findBar, SLOT(toggleVisibility()), actionCollection()); KShortcut findShortcut = KStandardShortcut::find(); findShortcut.setAlternate(Qt::Key_Slash); a->setShortcut(findShortcut); + a->setCheckable(true); + connect(m_findBar, SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool))); KStandardAction::findNext(this, SLOT(findNext()) , actionCollection()); KStandardAction::findPrev(this, SLOT(findPrevious()) , actionCollection()); @@ -330,12 +340,8 @@ void MainWindow::setupActions() actionCollection()->addAction(QL1S("open_location"), a); connect(a, SIGNAL(triggered(bool)) , this, SLOT(openLocation())); - - // ============================= Zoom Actions =================================== - actionCollection()->addAction(KStandardAction::ZoomIn, this, SLOT(zoomIn())); - a = actionCollection()->addAction(KStandardAction::ActualSize, this, SLOT(zoomNormal())); - a->setShortcut(KShortcut(Qt::CTRL | Qt::Key_0)); - actionCollection()->addAction(KStandardAction::ZoomOut, this, SLOT(zoomOut())); + // set zoom bar actions + m_zoomBar->setupActions(this); // =============================== Tools Actions ================================= a = new KAction(i18n("Page S&ource"), this); @@ -455,39 +461,10 @@ void MainWindow::setupTools() toolsMenu->addAction(actionByName(KStandardAction::name(KStandardAction::Print))); toolsMenu->addAction(actionByName(KStandardAction::name(KStandardAction::Find))); - // setup zoom widget - QWidget *zoomWidget = new QWidget(this); - - QToolButton *zoomOut = new QToolButton(zoomWidget); - zoomOut->setDefaultAction(actionByName(KStandardAction::name(KStandardAction::ZoomOut))); - zoomOut->setAutoRaise(true); - - m_zoomSlider = new QSlider(Qt::Horizontal, zoomWidget); - m_zoomSlider->setTracking(true); - m_zoomSlider->setRange(1, 19); // divide by 10 to obtain a qreal for zoomFactor() - m_zoomSlider->setValue(10); - m_zoomSlider->setPageStep(3); - connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(setZoomFactor(int))); - - QToolButton *zoomIn = new QToolButton(zoomWidget); - zoomIn->setDefaultAction(actionByName(KStandardAction::name(KStandardAction::ZoomIn))); - zoomIn->setAutoRaise(true); - - QToolButton *zoomNormal = new QToolButton(zoomWidget); - zoomNormal->setDefaultAction(actionByName(KStandardAction::name(KStandardAction::ActualSize))); - zoomNormal->setAutoRaise(true); - - QHBoxLayout* zoomWidgetLayout = new QHBoxLayout(zoomWidget); - zoomWidgetLayout->setSpacing(0); - zoomWidgetLayout->setMargin(0); - zoomWidgetLayout->addWidget(zoomOut); - zoomWidgetLayout->addWidget(m_zoomSlider); - zoomWidgetLayout->addWidget(zoomIn); - zoomWidgetLayout->addWidget(zoomNormal); - - QWidgetAction *zoomAction = new QWidgetAction(this); - zoomAction->setDefaultWidget(zoomWidget); - toolsMenu->addAction(zoomAction); + QAction *action = actionByName(KStandardAction::name(KStandardAction::Zoom)); + action->setCheckable(true); + connect (m_zoomBar, SIGNAL(visibilityChanged(bool)), action, SLOT(setChecked(bool))); + toolsMenu->addAction(action); toolsMenu->addAction(actionByName(QL1S("encodings"))); @@ -844,38 +821,6 @@ void MainWindow::highlightAll() } -void MainWindow::zoomIn() -{ - m_zoomSlider->setValue(m_zoomSlider->value() + 1); -} - - -void MainWindow::zoomNormal() -{ - m_zoomSlider->setValue(10); -} - - -void MainWindow::zoomOut() -{ - m_zoomSlider->setValue(m_zoomSlider->value() - 1); -} - - -void MainWindow::setZoomFactor(int factor) -{ - if (!currentTab()) - return; - currentTab()->view()->setZoomFactor(QVariant(factor).toReal() / 10); -} - - -void MainWindow::setZoomSliderFactor(qreal factor) -{ - m_zoomSlider->setValue(factor * 10); -} - - void MainWindow::viewFullScreen(bool makeFullScreen) { setWidgetsVisible(!makeFullScreen); diff --git a/src/mainwindow.h b/src/mainwindow.h index 96fe0f2d..e5a43649 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -45,6 +45,7 @@ // Forward Declarations class FindBar; +class ZoomBar; class HistoryPanel; class BookmarksPanel; class WebInspectorPanel; @@ -102,8 +103,6 @@ public slots: void updateActions(); - void setZoomSliderFactor(qreal factor); - signals: // switching tabs void ctrlTabPressed(); @@ -135,12 +134,6 @@ private slots: void findPrevious(); void highlightAll(); - // Zoom slots - void zoomIn(); - void zoomNormal(); - void zoomOut(); - void setZoomFactor(int factor); - // File Menu slots void openLocation(); void fileOpen(); @@ -170,6 +163,7 @@ private slots: private: MainView *m_view; FindBar *m_findBar; + ZoomBar *m_zoomBar; HistoryPanel *m_historyPanel; BookmarksPanel *m_bookmarksPanel; @@ -181,8 +175,6 @@ private: KMenu *m_encodingMenu; BookmarkToolBar *m_bookmarksBar; - - QSlider *m_zoomSlider; QString m_lastSearch; diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index bbf6714e..78496bc2 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -44,7 +44,6 @@ // KDE Includes #include <KStandardDirs> -#include <KIconLoader> #include <KConfig> #include <KDialog> #include <KCalendarSystem> @@ -167,11 +166,10 @@ void NewTabPage::favoritesPage() { m_root.addClass("favorites"); - QWebElement add = markup(".link"); - add.findFirst("a").setAttribute("href", "about:preview/add"); - add.findFirst("img").setAttribute("src" , QString("file:///" + - KIconLoader::global()->iconPath("list-add", KIconLoader::Small || KIconLoader::SizeSmall))); - add.findFirst("span").appendInside(i18n("Add Preview")); + const QWebElement add = createLinkItem(i18n("Add Favorite"), + QLatin1String("about:preview/add"), + QLatin1String("list-add"), + KIconLoader::Toolbar); m_root.document().findFirst("#actions").appendInside(add); QStringList names = ReKonfig::previewNames(); @@ -180,7 +178,7 @@ void NewTabPage::favoritesPage() if (urls.isEmpty()) { m_root.addClass("empty"); - m_root.setPlainText(i18n("You can add a preview by clicking the \"Add Preview\" button in the top-right corner of this page")); + m_root.setPlainText(i18n("You can add a favorite by clicking the \"Add Favorite\" button in the top-right corner of this page")); return; } @@ -338,55 +336,50 @@ void NewTabPage::removePreview(int index) ReKonfig::self()->writeConfig(); } - void NewTabPage::browsingMenu(const KUrl ¤tUrl) { QList<QWebElement> navItems; - KIconLoader *loader = KIconLoader::global(); - - QWebElement nav = markup(".link"); // Favorites - nav.findFirst("a").setAttribute("href", "about:favorites"); - nav.findFirst("img").setAttribute("src" , QString("file:///" + - loader->iconPath("emblem-favorite", KIconLoader::Desktop || KIconLoader::SizeSmall))); - nav.findFirst("span").appendInside(i18n("Favorites")); - navItems.append(nav); - - nav = markup(".link"); // Closed Tabs - nav.findFirst("a").setAttribute("href", "about:closedTabs"); - nav.findFirst("img").setAttribute("src" , QString("file:///" + - loader->iconPath("tab-close", KIconLoader::Desktop || KIconLoader::SizeSmall))); - nav.findFirst("span").appendInside(i18n("Closed Tabs")); - navItems.append(nav); - - nav = markup(".link"); // Bookmarks - nav.findFirst("a").setAttribute("href", "about:bookmarks"); - nav.findFirst("img").setAttribute("src" , QString("file:///" + - loader->iconPath("bookmarks", KIconLoader::Desktop || KIconLoader::SizeSmall))); - nav.findFirst("span").appendInside(i18n("Bookmarks")); - navItems.append(nav); - - nav = markup(".link"); // History - nav.findFirst("a").setAttribute("href", "about:history"); - nav.findFirst("img").setAttribute("src" , QString("file:///" + - loader->iconPath("view-history", KIconLoader::Desktop || KIconLoader::SizeSmall))); - nav.findFirst("span").appendInside(i18n("History")); - navItems.append(nav); - - nav = markup(".link"); // Downloads - nav.findFirst("a").setAttribute("href", "about:downloads"); - nav.findFirst("img").setAttribute("src" , QString("file:///" + - loader->iconPath("download", KIconLoader::Desktop || KIconLoader::SizeSmall))); - nav.findFirst("span").appendInside(i18n("Downloads")); - navItems.append(nav); + // Favorites + navItems.append(createLinkItem(i18n("Favorites"), + QLatin1String("about:favorites"), + QLatin1String("emblem-favorite"), + KIconLoader::Toolbar)); + + // Closed Tabs + navItems.append(createLinkItem(i18n("Closed Tabs"), + QLatin1String("about:closedTabs"), + QLatin1String("tab-close"), + KIconLoader::Toolbar)); + + // Bookmarks + navItems.append(createLinkItem(i18n("Bookmarks"), + QLatin1String("about:bookmarks"), + QLatin1String("bookmarks"), + KIconLoader::Toolbar)); + + // History + navItems.append(createLinkItem(i18n("History"), + QLatin1String("about:history"), + QLatin1String("view-history"), + KIconLoader::Toolbar)); + + // Downloads + navItems.append(createLinkItem(i18n("Downloads"), + QLatin1String("about:downloads"), + QLatin1String("download"), + KIconLoader::Toolbar)); foreach(QWebElement it, navItems) { - if (it.findFirst("a").attribute("href") == currentUrl.toMimeDataString()) - it.addClass("current"); - else if (currentUrl == "about:home" && it.findFirst("a").attribute("href") == "about:favorites") - it.addClass("current"); - m_root.document().findFirst("#navigation").appendInside(it); + const QString aTagString('a'); + const QString hrefAttributeString(QLatin1String("href")); + + if (it.findFirst(aTagString).attribute(hrefAttributeString) == currentUrl.toMimeDataString()) + it.addClass(QLatin1String("current")); + else if (currentUrl == QLatin1String("about:home") && it.findFirst(aTagString).attribute(hrefAttributeString) == QLatin1String("about:favorites")) + it.addClass(QLatin1String("current")); + m_root.document().findFirst(QLatin1String("#navigation")).appendInside(it); } } @@ -395,11 +388,10 @@ void NewTabPage::historyPage() { m_root.addClass("history"); - QWebElement clearData = markup(".link"); - clearData.findFirst("a").setAttribute("href", "about:history/clear"); - QString iconPath = QString("file:///" + KIconLoader::global()->iconPath("edit-clear", KIconLoader::SizeSmall || KIconLoader::Small)); - clearData.findFirst("img").setAttribute("src" , iconPath); - clearData.findFirst("span").appendInside(i18n("Clear Private Data")); + const QWebElement clearData = createLinkItem(i18n("Clear Private Data"), + QLatin1String("about:history/clear"), + QLatin1String("edit-clear"), + KIconLoader::Toolbar); m_root.document().findFirst("#actions").appendInside(clearData); HistoryTreeModel *model = Application::historyManager()->historyTreeModel(); @@ -441,11 +433,10 @@ void NewTabPage::bookmarksPage() { m_root.addClass("bookmarks"); - QWebElement editBookmarks = markup(".link"); - editBookmarks.findFirst("a").setAttribute("href", "about:bookmarks/edit"); - QString iconPath = QString("file:///" + KIconLoader::global()->iconPath("bookmarks-organize", KIconLoader::SizeSmall || KIconLoader::Small)); - editBookmarks.findFirst("img").setAttribute("src" , iconPath); - editBookmarks.findFirst("span").appendInside(i18n("Edit Bookmarks")); + const QWebElement editBookmarks = createLinkItem(i18n("Edit Bookmarks"), + QLatin1String("about:bookmarks/edit"), + QLatin1String("bookmarks-organize"), + KIconLoader::Toolbar); m_root.document().findFirst("#actions").appendInside(editBookmarks); KBookmarkGroup bookGroup = Application::bookmarkProvider()->rootGroup(); @@ -472,7 +463,7 @@ void NewTabPage::createBookItem(const KBookmark &bookmark, QWebElement parent) KBookmarkGroup group = bookmark.toGroup(); KBookmark bm = group.first(); parent.appendInside(markup("h3")); - parent.lastChild().setPlainText(group.text()); + parent.lastChild().setPlainText(group.fullText()); parent.appendInside(markup(".bookfolder")); while (!bm.isNull()) { @@ -488,7 +479,7 @@ void NewTabPage::createBookItem(const KBookmark &bookmark, QWebElement parent) { parent.appendInside(markup("a")); parent.lastChild().setAttribute("href" , bookmark.url().prettyUrl()); - parent.lastChild().setPlainText(bookmark.text()); + parent.lastChild().setPlainText(bookmark.fullText()); parent.appendInside("<br/>"); } } @@ -542,11 +533,10 @@ void NewTabPage::downloadsPage() { m_root.addClass("downloads"); - QWebElement clearData = markup(".link"); - clearData.findFirst("a").setAttribute("href", "about:downloads/clear"); - QString iconPath = QString("file:///" + KIconLoader::global()->iconPath("edit-clear", KIconLoader::SizeSmall || KIconLoader::Small)); - clearData.findFirst("img").setAttribute("src" , iconPath); - clearData.findFirst("span").appendInside(i18n("Clear Private Data")); + const QWebElement clearData = createLinkItem(i18n("Clear Private Data"), + QLatin1String("about:downloads/clear"), + QLatin1String("edit-clear"), + KIconLoader::Toolbar); m_root.document().findFirst("#actions").appendInside(clearData); DownloadList list = Application::instance()->downloads(); @@ -595,3 +585,15 @@ void NewTabPage::downloadsPage() div.lastChild().setPlainText(i18n("Open file")); } } + +QWebElement NewTabPage::createLinkItem(const QString &title, const QString &urlString, const QString &iconPath, int groupOrSize) const +{ + const KIconLoader * const loader = KIconLoader::global(); + + QWebElement nav = markup(QLatin1String(".link")); + nav.findFirst(QString('a')).setAttribute(QLatin1String("href"), urlString); + nav.findFirst(QLatin1String("img")).setAttribute(QLatin1String("src"), + QString::fromLatin1("file://") + loader->iconPath(iconPath, groupOrSize)); + nav.findFirst(QLatin1String("span")).appendInside(title); + return nav; +} diff --git a/src/newtabpage.h b/src/newtabpage.h index ad4941d3..2560beb2 100644 --- a/src/newtabpage.h +++ b/src/newtabpage.h @@ -33,6 +33,7 @@ #include "rekonq_defines.h" // KDE Includes +#include <KIconLoader> #include <KUrl> // Qt Includes @@ -107,7 +108,7 @@ private: * It works for all elements defined here. * */ - inline QWebElement markup(const QString &selector) + inline QWebElement markup(const QString &selector) const { return m_root.document().findFirst("#models > " + selector).clone(); } @@ -115,6 +116,8 @@ private: QString checkTitle(const QString &title); private: + QWebElement createLinkItem(const QString &title, const QString &urlString, const QString &iconPath, int groupOrSize) const; + QString m_html; QWebElement m_root; }; diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index 62eb72a6..b77e2d7c 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -54,7 +54,7 @@ CompletionWidget::CompletionWidget(QWidget *parent) : QFrame(parent, Qt::ToolTip) , _parent(parent) - , _currentIndex(-1) + , _currentIndex(0) , _searchEngine(SearchEngine::defaultEngine()) { setFrameStyle(QFrame::Panel); @@ -107,6 +107,7 @@ void CompletionWidget::sizeAndPosition() void CompletionWidget::popup() { + findChild<ListItem *>(QString::number(0))->activate(); //activate first listitem sizeAndPosition(); if (!isVisible()) show(); @@ -116,65 +117,47 @@ void CompletionWidget::popup() void CompletionWidget::up() { // deactivate previous - if (_currentIndex != -1) - { - ListItem *widget = findChild<ListItem *>(QString::number(_currentIndex)); - widget->deactivate(); - } + findChild<ListItem *>(QString::number(_currentIndex))->deactivate(); // deactivate previous - if (_currentIndex >= 0) + if (_currentIndex > 0) _currentIndex--; else _currentIndex = layout()->count() - 1; - kDebug() << _currentIndex; - kDebug() << _typedString; - UrlBar *bar = qobject_cast<UrlBar *>(_parent); - if(_currentIndex != -1) - { - // activate "new" current - ListItem *widget = findChild<ListItem *>(QString::number(_currentIndex)); - widget->activate(); - bar->setQUrl( widget->url() ); - } - else - { - bar->setText(_typedString); - } - bar->setFocus(); - bar->setCursorPosition( bar->text().length() ); + activateCurrentListItem(); } void CompletionWidget::down() { - // deactivate previous - if (_currentIndex != -1) - { - ListItem *widget = findChild<ListItem *>(QString::number(_currentIndex)); - widget->deactivate(); - } + findChild<ListItem *>(QString::number(_currentIndex))->deactivate(); // deactivate previous if (_currentIndex < _list.count() - 1) _currentIndex++; else - _currentIndex = -1; + _currentIndex = 0; + + activateCurrentListItem(); +} + - +void CompletionWidget::activateCurrentListItem() +{ kDebug() << _currentIndex; kDebug() << _typedString; UrlBar *bar = qobject_cast<UrlBar *>(_parent); - if(_currentIndex != -1) - { - // activate "new" current - ListItem *widget = findChild<ListItem *>(QString::number(_currentIndex)); - widget->activate(); + + // activate "new" current + ListItem *widget = findChild<ListItem *>(QString::number(_currentIndex)); + widget->activate(); + + //update text of the url bar + bar->blockSignals(true); //without compute suggestions + if (!widget->inherits("SearchListItem")) bar->setQUrl( widget->url() ); - } else - { - bar->setText(_typedString); - } + bar->setQUrl( _typedString ); + bar->blockSignals(false); bar->setFocus(); bar->setCursorPosition( bar->text().length() ); } @@ -188,7 +171,7 @@ void CompletionWidget::clear() delete child->widget(); delete child; } - _currentIndex = -1; + _currentIndex = 0; } @@ -309,10 +292,6 @@ void CompletionWidget::itemChosen(ListItem *item, Qt::MouseButton button, Qt::Ke void CompletionWidget::suggestUrls(const QString &text) { - if(_currentIndex != -1) - return; - - kDebug() << "suggesting..."; _typedString = text; QWidget *w = qobject_cast<QWidget *>(parent()); diff --git a/src/urlbar/completionwidget.h b/src/urlbar/completionwidget.h index fbca5b81..e14535f4 100644 --- a/src/urlbar/completionwidget.h +++ b/src/urlbar/completionwidget.h @@ -78,16 +78,12 @@ private: void sizeAndPosition(); void up(); void down(); + void activateCurrentListItem(); QWidget *_parent; UrlSearchList _list; - /** - * The current index of the pointed out item - * - * -1 means no item, so the actual typed text is considered - */ int _currentIndex; KService::Ptr _searchEngine; diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index 5c3cba28..d924a30d 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -185,9 +185,23 @@ void UrlBar::paintEvent(QPaintEvent *event) } else { - QColor loadingColor = Application::palette().color(QPalette::ToolTipBase); + QColor highlight = Application::palette().color(QPalette::Highlight); - QLinearGradient gradient( QPoint(0, 0), QPoint(width(), height()) ); + int r = (highlight.red()+2*backgroundColor.red())/3; + int g = (highlight.green()+2*backgroundColor.green())/3; + int b = (highlight.blue()+2*backgroundColor.blue())/3; + + QColor loadingColor(r, g, b); + + if (abs(loadingColor.lightness() - backgroundColor.lightness()) < 20) //eg. Gaia color scheme + { + r = (2*highlight.red()+backgroundColor.red())/3; + g = (2*highlight.green()+backgroundColor.green())/3; + b = (2*highlight.blue()+backgroundColor.blue())/3; + loadingColor = QColor(r, g, b); + } + + QLinearGradient gradient( QPoint(0, 0), QPoint(width(), 0) ); gradient.setColorAt(0, loadingColor); gradient.setColorAt(((double)progr) / 100 - .000001, loadingColor); gradient.setColorAt(((double)progr) / 100, backgroundColor); diff --git a/src/webview.cpp b/src/webview.cpp index 7fcb3ecb..441225af 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -558,7 +558,7 @@ void WebView::wheelEvent(QWheelEvent *event) if ((zoomFactor() * 10 - newFactor) > 0.5) newFactor++; - emit zoomChanged((qreal)newFactor / 10); + emit zoomChanged(newFactor); } else if ( ReKonfig::smoothScrolling() && !page()->currentFrame()->hitTestContent(event->pos()).isContentEditable()) { diff --git a/src/webview.h b/src/webview.h index b17940c7..b9c04e47 100644 --- a/src/webview.h +++ b/src/webview.h @@ -82,7 +82,7 @@ private slots: signals: void loadUrl(const KUrl &, const Rekonq::OpenType &); - void zoomChanged(qreal); + void zoomChanged(int); private: QPoint _mousePos; diff --git a/src/zoombar.cpp b/src/zoombar.cpp new file mode 100644 index 00000000..485d71a9 --- /dev/null +++ b/src/zoombar.cpp @@ -0,0 +1,181 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "zoombar.h" +#include "zoombar.moc" + +// local includes +#include "mainview.h" + +// KDE Includes +#include <KIcon> +#include <KStandardAction> +#include <KAction> + +// Qt Includes +#include <QtGui/QHBoxLayout> +#include <QtGui/QLabel> +#include <QtCore/QString> + + +ZoomBar::ZoomBar(QWidget *parent) + : QWidget(parent) + ,m_zoomIn(new QToolButton(this)) + ,m_zoomOut(new QToolButton(this)) + ,m_zoomNormal(new QToolButton(this)) + ,m_zoomSlider(new QSlider(Qt::Horizontal, this)) +{ + QHBoxLayout *layout = new QHBoxLayout; + + // cosmetic + layout->setContentsMargins(2, 0, 2, 0); + + QToolButton *hideButton = new QToolButton(this); + hideButton->setAutoRaise(true); + hideButton->setIcon(KIcon("dialog-close")); + connect(hideButton, SIGNAL(clicked()), this, SLOT(hide())); + + layout->addWidget(hideButton); + layout->setAlignment(hideButton, Qt::AlignLeft | Qt::AlignTop); + + // label + QLabel *label = new QLabel(i18n("Zoom:")); + layout->addWidget(label); + + m_zoomSlider->setTracking(true); + m_zoomSlider->setRange(1, 19); // divide by 10 to obtain a qreal for zoomFactor() + m_zoomSlider->setValue(10); + m_zoomSlider->setPageStep(3); + connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); + + m_zoomIn->setAutoRaise(true); + m_zoomOut->setAutoRaise(true); + m_zoomNormal->setAutoRaise(true); + + // layout->setSpacing(0); + // layout->setMargin(0); + layout->addWidget(m_zoomOut); + layout->addWidget(m_zoomSlider); + layout->addWidget(m_zoomIn); + layout->addWidget(m_zoomNormal); + + layout->addStretch(); + + setLayout(layout); + + // we start off hidden + hide(); +} + + +void ZoomBar::setupActions(MainWindow *window) +{ + KAction *a; + a = window->actionCollection()->addAction(KStandardAction::ZoomIn, this, SLOT(zoomIn())); + a = window->actionCollection()->addAction(KStandardAction::ZoomOut, this, SLOT(zoomOut())); + a = window->actionCollection()->addAction(KStandardAction::ActualSize, this, SLOT(zoomNormal())); + a->setShortcut(KShortcut(Qt::CTRL | Qt::Key_0)); + a = window->actionCollection()->addAction(KStandardAction::Zoom, this, SLOT(toggleVisibility())); + a->setIcon(KIcon("page-zoom")); + a->setShortcut(KShortcut(Qt::CTRL | Qt::Key_Y)); + + m_zoomIn->setDefaultAction(window->actionByName(KStandardAction::name(KStandardAction::ZoomIn))); + m_zoomOut->setDefaultAction(window->actionByName(KStandardAction::name(KStandardAction::ZoomOut))); + m_zoomNormal->setDefaultAction(window->actionByName(KStandardAction::name(KStandardAction::ActualSize))); +} + + +ZoomBar::~ZoomBar() +{ + delete m_zoomIn; + delete m_zoomOut; + delete m_zoomNormal; + delete m_zoomSlider; +} + + +void ZoomBar::show() +{ + // show findbar if not visible + if (isHidden()) + { + QWidget::show(); + } +} + + +void ZoomBar::zoomIn() +{ + setValue(m_zoomSlider->value() + 1); +} + + +void ZoomBar::zoomOut() +{ + setValue(m_zoomSlider->value() - 1); +} + + +void ZoomBar::zoomNormal() +{ + setValue(10); +} + + +void ZoomBar::updateSlider(int webview) +{ + WebTab *tab = 0; + if (!Application::instance()->mainWindowList().isEmpty()) + tab = Application::instance()->mainWindow()->mainView()->webTab(webview); + + if (!tab) + return; + + m_zoomSlider->setValue(tab->view()->zoomFactor() * 10); +} + + +void ZoomBar::setValue(int value) +{ + m_zoomSlider->setValue(value); + // Don't allox max +1 values + Application::instance()->mainWindow()->currentTab()->view()->setZoomFactor(QVariant(m_zoomSlider->value()).toReal() / 10); +} + + +void ZoomBar::setVisible(bool visible) +{ + emit visibilityChanged(visible); + QWidget::setVisible(visible); +} + + +void ZoomBar::toggleVisibility() +{ + setVisible(!isVisible()); +} diff --git a/src/zoombar.h b/src/zoombar.h new file mode 100644 index 00000000..8e8d9aba --- /dev/null +++ b/src/zoombar.h @@ -0,0 +1,78 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef ZOOMBAR_H +#define ZOOMBAR_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Local Includes +#include "mainwindow.h" + +// Qt Includes +#include <QtGui/QWidget> +#include <QtGui/QSlider> +#include <QtGui/QToolButton> + +// Forward Declarations +class QString; + + +class REKONQ_TESTS_EXPORT ZoomBar : public QWidget +{ + Q_OBJECT + +public: + ZoomBar(QWidget *parent); + ~ZoomBar(); + +public slots: + void show(); + void zoomIn(); + void zoomOut(); + void zoomNormal(); + void setupActions(MainWindow *window); + void updateSlider(int webview); + void setValue(int value); + void toggleVisibility(); + +signals: + void visibilityChanged(bool); + +protected: + void setVisible(bool visible); + +private: + QToolButton *m_zoomIn; + QToolButton *m_zoomOut; + QToolButton *m_zoomNormal; + QSlider *m_zoomSlider; +}; + +#endif |