diff options
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/findbar.cpp | 13 | ||||
| -rw-r--r-- | src/findbar.h | 5 | ||||
| -rw-r--r-- | src/mainview.cpp | 5 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 92 | ||||
| -rw-r--r-- | src/mainwindow.h | 12 | ||||
| -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 | 
10 files changed, 300 insertions, 91 deletions
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/findbar.cpp b/src/findbar.cpp index 10b63186..5d88dc1b 100644 --- a/src/findbar.cpp +++ b/src/findbar.cpp @@ -185,3 +185,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 1965e321..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())); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9207f6ec..5d0d1d0c 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 @@ -163,6 +166,7 @@ MainWindow::~MainWindow()      delete m_view;      delete m_findBar; +    delete m_zoomBar;      delete m_historyPanel;      delete m_bookmarksPanel; @@ -173,8 +177,6 @@ MainWindow::~MainWindow()      delete m_encodingMenu;      delete m_bookmarksBar; -     -    delete m_zoomSlider;      delete m_popup;      delete m_hidePopup; @@ -251,6 +253,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 +295,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 +339,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 +460,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 +820,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/webview.cpp b/src/webview.cpp index 188216f8..a1b39805 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -543,7 +543,7 @@ void WebView::wheelEvent(QWheelEvent *event)          if ((zoomFactor() * 10 - newFactor) > 0.5)              newFactor++; -        emit zoomChanged((qreal)newFactor / 10); +        emit zoomChanged(newFactor);      }  } diff --git a/src/webview.h b/src/webview.h index a4ba676c..1fd40f92 100644 --- a/src/webview.h +++ b/src/webview.h @@ -74,7 +74,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..14e88cf5 --- /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  | 
