From 544094302a51b919b1eea86b313ec10d47533a08 Mon Sep 17 00:00:00 2001
From: matgic78 <matgic78@gmail.com>
Date: Fri, 15 Jan 2010 17:20:51 +0100
Subject: A new approach for choosing previews : a bar appears, then you browse
 to the page you want to preview, and then you click a button

---
 src/CMakeLists.txt                    |   2 +-
 src/mainwindow.cpp                    |   5 ++
 src/mainwindow.h                      |   8 +-
 src/protocolhandler.cpp               |  33 +------
 src/rekonqpage/newtabpage.cpp         |  36 +++++---
 src/rekonqpage/newtabpage.h           |  11 ++-
 src/rekonqpage/previewchooser.cpp     | 157 ----------------------------------
 src/rekonqpage/previewchooser.h       |  70 ---------------
 src/rekonqpage/previewselectorbar.cpp | 138 ++++++++++++++++++++++++++++++
 src/rekonqpage/previewselectorbar.h   |  60 +++++++++++++
 src/webpage.cpp                       |  16 ++--
 src/webpage.h                         |   2 +
 src/websnap.cpp                       |  11 ++-
 src/websnap.h                         |   7 +-
 14 files changed, 268 insertions(+), 288 deletions(-)
 delete mode 100644 src/rekonqpage/previewchooser.cpp
 delete mode 100644 src/rekonqpage/previewchooser.h
 create mode 100644 src/rekonqpage/previewselectorbar.cpp
 create mode 100644 src/rekonqpage/previewselectorbar.h

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2ad18a02..00cfbf77 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -31,7 +31,7 @@ SET( rekonq_KDEINIT_SRCS
     history/historypanel.cpp
     #----------------------------------------
     rekonqpage/newtabpage.cpp
-    rekonqpage/previewchooser.cpp
+    rekonqpage/previewselectorbar.cpp
     #----------------------------------------
     settings/settingsdialog.cpp
     #----------------------------------------
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index ffc9f508..e11f6d19 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -98,6 +98,7 @@ MainWindow::MainWindow()
     : KMainWindow()
     , m_view( new MainView(this) )
     , m_findBar( new FindBar(this) )
+    , m_previewSelectorBar( new PreviewSelectorBar(this) )
     , m_historyPanel(0)
     , m_bookmarksPanel(0)
     , m_webInspectorPanel(0)
@@ -122,6 +123,7 @@ MainWindow::MainWindow()
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
     layout->addWidget(m_view);
+    layout->addWidget(m_previewSelectorBar);
     layout->addWidget(m_findBar);
     centralWidget->setLayout(layout);
 
@@ -617,6 +619,9 @@ void MainWindow::updateActions()
 
     QAction *historyForwardAction = actionByName(KStandardAction::name(KStandardAction::Forward));
     historyForwardAction->setEnabled(currentTab()->view()->history()->canGoForward());
+    
+    if(m_previewSelectorBar->isVisible())
+        m_previewSelectorBar->setPage(currentTab()->page());
 }
 
 
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 7083591d..3a828afe 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -1,4 +1,5 @@
-/* ============================================================
+
+class PreviewSelectorBar;/* ============================================================
 *
 * This file is a part of the rekonq project
 *
@@ -32,6 +33,7 @@
 
 // Local Includes
 #include "application.h"
+#include "previewselectorbar.h"
 
 // KDE Includes
 #include <KMainWindow>
@@ -152,7 +154,9 @@ private slots:
 private:
     MainView *m_view;
     FindBar *m_findBar;
-    
+
+    PreviewSelectorBar *m_previewSelectorBar;
+
     HistoryPanel *m_historyPanel;
     BookmarksPanel *m_bookmarksPanel;
     WebInspectorPanel *m_webInspectorPanel;
diff --git a/src/protocolhandler.cpp b/src/protocolhandler.cpp
index c90afd19..a9339cfa 100644
--- a/src/protocolhandler.cpp
+++ b/src/protocolhandler.cpp
@@ -108,36 +108,9 @@ bool ProtocolHandler::preHandling(const QNetworkRequest &request, QWebFrame *fra
     // "about" handling
     if ( _url.protocol() == QLatin1String("about") )
     {
-        if( _url == KUrl("about:home") )
-        {
-            switch(ReKonfig::newTabStartPage())
-            {
-            case 0: // favorites
-                _url = KUrl("about:favorites");
-                break;
-            case 1: // closed tabs
-                _url = KUrl("about:closedTabs");
-                break;
-            case 2: // history
-                _url = KUrl("about:history");
-                break;
-            case 3: // bookmarks
-                _url = KUrl("about:bookmarks");
-                break;
-            default: // unuseful
-                break;
-            }
-        }
-        if( _url == KUrl("about:closedTabs")
-            || _url == KUrl("about:history")
-            || _url == KUrl("about:bookmarks")
-            || _url == KUrl("about:favorites")
-            )
-        {
-            NewTabPage p(frame);
-            p.generate(_url);
-            return true;
-        }
+        NewTabPage p(frame);
+        p.generate(_url);
+        return true;
     }
     
     return false;
diff --git a/src/rekonqpage/newtabpage.cpp b/src/rekonqpage/newtabpage.cpp
index 78928bca..b075c186 100644
--- a/src/rekonqpage/newtabpage.cpp
+++ b/src/rekonqpage/newtabpage.cpp
@@ -36,7 +36,8 @@
 #include "application.h"
 #include "mainwindow.h"
 #include "mainview.h"
-#include "previewchooser.h"
+#include "websnap.h"
+#include "previewselectorbar.h"
 
 // KDE Includes
 #include <KStandardDirs>
@@ -48,7 +49,6 @@
 
 // Qt Includes
 #include <QFile>
-#include <websnap.h>
 
 
 NewTabPage::NewTabPage(QWebFrame *frame)
@@ -86,10 +86,8 @@ void NewTabPage::generate(KUrl url)
         if(url.directory() == QString("preview/modify"))
         {
             int index = url.fileName().toInt();
-            QString url = m_root.findFirst("#preview" + QVariant(index).toString() + " > a").attribute("href");
-            PreviewChooser *pc = new PreviewChooser(index, url);
-            connect(pc, SIGNAL(urlChoosed(int,KUrl)), SLOT(setPreview(int,KUrl)));
-            pc->show();
+            Application::instance()->mainWindow()->findChild<PreviewSelectorBar *>()
+                        ->enable(index, qobject_cast< WebPage* >(m_root.webFrame()->page()));
             return;
         }
     }
@@ -260,9 +258,6 @@ void NewTabPage::snapFinished()
 
 void NewTabPage::removePreview(int index)
 {
-    QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString());
-    
-    
     QStringList names = ReKonfig::previewNames();
     QStringList urls = ReKonfig::previewUrls();
     
@@ -272,9 +267,9 @@ void NewTabPage::removePreview(int index)
     ReKonfig::setPreviewNames(names);
     ReKonfig::setPreviewUrls(urls);
     
-    // sync file data
     ReKonfig::self()->writeConfig();
     
+    QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString());
     prev.replace(emptyPreview(index));
 }
 
@@ -285,18 +280,33 @@ void NewTabPage::setPreview(int index, KUrl url)
         return;
     
     QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString());
+    prev.replace(loadingPreview(index, url));
+    
+}
+
+
+void NewTabPage::setPreview(int index, WebPage* page)
+{
+    KUrl url = page->mainFrame()->url();
     
+    WebSnap::savePreview(WebSnap::renderPreview(*page), url);
+    
+    QStringList names = ReKonfig::previewNames();
     QStringList urls = ReKonfig::previewUrls();
+    
     urls.replace(index, url.toMimeDataString());
+    names.replace(index, page->mainFrame()->title());
+    
+    ReKonfig::setPreviewNames(names);
     ReKonfig::setPreviewUrls(urls);
+    
     ReKonfig::self()->writeConfig();
-
-    prev.replace(loadingPreview(index, url));
-
     
+    setPreview(index, url);
 }
 
 
+
 void NewTabPage::browsingMenu(const KUrl &currentUrl)
 {
     QList<QWebElement> navItems;
diff --git a/src/rekonqpage/newtabpage.h b/src/rekonqpage/newtabpage.h
index cdc3cb31..742d9209 100644
--- a/src/rekonqpage/newtabpage.h
+++ b/src/rekonqpage/newtabpage.h
@@ -55,10 +55,19 @@ public:
      */
     void generate(KUrl url = KUrl("about:home"));
     
-protected slots:
+public slots:
     void snapFinished();
     void removePreview(int index);
+    
+    /**
+        Used for recently closed tabs
+    */
     void setPreview(int index, KUrl url);
+    
+    /**
+        Used for favorites
+    */
+    void setPreview(int index, WebPage *page);
      
 protected:  // these are the function to build the new tab page
     void browsingMenu(const KUrl &currentUrl);
diff --git a/src/rekonqpage/previewchooser.cpp b/src/rekonqpage/previewchooser.cpp
deleted file mode 100644
index 79bdb068..00000000
--- a/src/rekonqpage/previewchooser.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/* ============================================================
-*
-* This file is a part of the rekonq project
-*
-* 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 "previewchooser.h"
-
-// Local Includes
-#include "rekonq.h"
-#include <bookmarkstreemodel.h>
-#include <bookmarksproxy.h>
-#include <mainview.h>
-#include <webtab.h>
-
-// Qt Includes
-#include <QLabel>
-#include <QVBoxLayout>
-
-// KDE Includes
-#include <KLineEdit>
-#include <KLocalizedString>
-
-
-PreviewChooser::PreviewChooser(int previewIndex, QString url)
-        : KDialog(0)
-        , m_treeView(new QTreeView)
-        , m_model(new QStandardItemModel)
-        , m_previewIndex(previewIndex)
-{
-    setMinimumSize(350, 100);
-    setWindowTitle(i18n("Set Page to preview"));
-    setModal(true);
-    
-    setButtons(KDialog::Cancel | KDialog::Apply | KDialog::Ok);
-    //setDefaultButton(KDialog::Ok);
-    connect(this, SIGNAL(buttonClicked(KDialog::ButtonCode)), this, SLOT(buttonClicked(KDialog::ButtonCode)));
-    
-    m_treeView->setUniformRowHeights(true);
-    m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
-    m_treeView->setTextElideMode(Qt::ElideRight);
-    m_treeView->setHeaderHidden(true);
-    m_treeView->setIndentation(0);
-    
-    QWidget *mainWidget = new QWidget(this);
-
-    // add url bar
-    QHBoxLayout *urlLayout = new QHBoxLayout;
-    urlLayout->setContentsMargins(5, 0, 0, 0);
-    QLabel *searchLabel = new QLabel(i18n("adress:"));
-    urlLayout->addWidget(searchLabel);
-    m_line = new KLineEdit;
-    
-    // setup view
-    QVBoxLayout *vBoxLayout = new QVBoxLayout;
-    vBoxLayout->setContentsMargins(0, 0, 0, 0);
-    vBoxLayout->addLayout(urlLayout);
-    vBoxLayout->addWidget(m_treeView);
-    mainWidget->setLayout(vBoxLayout);
-    setMainWidget(mainWidget);
-    
-    refreshModel();
-    connect(Application::instance()->mainWindow()->mainView(), SIGNAL(tabsChanged()), SLOT(refreshModel()));
-    
-    m_treeView->setModel(m_model);
-    
-    connect(m_treeView, SIGNAL(activated(QModelIndex)), SLOT(setUrl(QModelIndex)));
-    
-    connect(m_line, SIGNAL(textChanged(QString)), SLOT(urlChanged()));
-    urlLayout->addWidget(m_line);
-    
-    if(url.isEmpty() || url.startsWith("about:"))
-        m_line->setText(QString("http://"));
-    else
-    {
-        m_line->setText(url);
-        m_line->setSelection(8, m_line->text().size());
-    }
-    
-    enableButtonApply(false);
-    setFocusProxy(mainWidget);
-    mainWidget->setFocusProxy(m_line);
-}
-
-
-PreviewChooser::~PreviewChooser()
-{
-    delete m_model;
-}
-
-
-
-void PreviewChooser::refreshModel()
-{
-    m_model->clear();
-    MainView *mv = Application::instance()->mainWindow()->mainView();
-    for(int i=0; i < mv->count(); ++i)
-    {
-        WebView *view = qobject_cast<WebView *>(mv->webTab(i)->view());
-        
-        if(view->url().scheme() != "about")
-        {
-            QStandardItem *it = new QStandardItem(Application::icon(view->url()), view->title());
-            it->setData(QVariant(view->url()), Qt::ToolTipRole);
-            m_model->appendRow(it);
-        }
-    }
-}
-
-void PreviewChooser::setUrl(QModelIndex i)
-{
-    if(!i.data().canConvert(QVariant::String))
-        return;
-    
-    m_line->setText(i.data(Qt::ToolTipRole).toString());
-}
-
-
-void PreviewChooser::buttonClicked(KDialog::ButtonCode code)
-{
-    if(code == KDialog::Apply || (code == KDialog::Ok && isButtonEnabled(KDialog::Apply)))
-    {
-        emit urlChoosed(m_previewIndex, KUrl(m_line->text()));
-        enableButtonApply(false);
-    }
-    
-    if(code == KDialog::Cancel || code == KDialog::Ok)
-    {
-        close();
-        deleteLater();
-    }
-}
-
-
-void PreviewChooser::urlChanged()
-{
-    enableButtonApply(true);
-}
-
diff --git a/src/rekonqpage/previewchooser.h b/src/rekonqpage/previewchooser.h
deleted file mode 100644
index 3eae71db..00000000
--- a/src/rekonqpage/previewchooser.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ============================================================
-*
-* This file is a part of the rekonq project
-*
-* 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 PREVIEWCHOOSER_H
-#define PREVIEWCHOOSER_H
-
-
-// Local Includes
-#include "application.h"
-
-// KDE Includes
-#include <KLineEdit>
-#include <KDialog>
-
-// Qt Includes
-#include <QWidget>
-#include <QTreeView>
-#include <QStandardItemModel>
-
-// Forward Declarations
-class KUrl;
-
-
-class PreviewChooser : public KDialog
-{
-Q_OBJECT
-
-public:
-    explicit PreviewChooser(int previewIndex, QString url);
-    virtual ~PreviewChooser();
-
-signals:
-    void urlChoosed(int, const KUrl &);
-    
-public slots:
-    void refreshModel();
-    void setUrl(QModelIndex i);
-    void buttonClicked(KDialog::ButtonCode code);
-    void urlChanged();
-
-private:
-    QTreeView *m_treeView;
-    QStandardItemModel *m_model;
-    
-    KLineEdit *m_line;
-    
-    int m_previewIndex;
-};
-
-#endif // PREVIEWCHOOSER_H
diff --git a/src/rekonqpage/previewselectorbar.cpp b/src/rekonqpage/previewselectorbar.cpp
new file mode 100644
index 00000000..04e7f0ac
--- /dev/null
+++ b/src/rekonqpage/previewselectorbar.cpp
@@ -0,0 +1,138 @@
+/*
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 3 of the License, or
+    (at your option) any later version.
+
+    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/>.
+
+*/
+
+
+// Auto Includes
+#include "previewselectorbar.h"
+
+// KDE Includes
+#include <KIcon>
+#include <KLocalizedString>
+
+// Qt Includes
+#include <QToolButton>
+#include <QHBoxLayout>
+#include <QString>
+
+
+PreviewSelectorBar::PreviewSelectorBar(QWidget* parent)
+        : QWidget(parent)
+        , m_button(0)
+        , m_label(0)
+        , m_page(0)
+{
+    hide();
+}
+
+
+void PreviewSelectorBar::setup()
+{
+    if(m_button != 0)
+        return;
+    
+    m_label = new QLabel(i18n("Please go to the page you want to preview"), this);
+    m_label->setWordWrap(true);
+    
+    QToolButton *closeButton = new QToolButton(this);
+    closeButton->setAutoRaise(true);
+    closeButton->setIcon(KIcon("dialog-close"));
+    connect(closeButton, SIGNAL(clicked(bool)), SLOT(hide()));
+    
+    m_button = new QPushButton(KIcon("insert-image"), i18n("Set to this page"), this);
+    connect(m_button, SIGNAL(clicked(bool)), SLOT(clicked()));
+    
+    // layout
+    QHBoxLayout *layout = new QHBoxLayout(this);
+    layout->addWidget(closeButton);
+    layout->addStretch();
+    layout->addWidget(m_label);
+    layout->addWidget(m_button);
+    
+    setLayout(layout);
+}
+
+
+void PreviewSelectorBar::setPage(WebPage* page)
+{
+    m_page = page;
+    verifyUrl();
+}
+
+
+void PreviewSelectorBar::verifyUrl()
+{
+    if(m_page->mainFrame()->url().scheme() != "about")
+    {
+        m_button->setEnabled(true);
+        m_button->setToolTip("");
+    }
+    else
+    {
+        m_button->setEnabled(false);
+        m_button->setToolTip(i18n("You can't set this page as preview"));
+    }
+}
+
+
+void PreviewSelectorBar::enable(int previewIndex, WebPage* page)
+{
+    if(m_page != 0)
+        disconnect(m_page, 0, this, 0);
+
+    
+    setup();
+    m_previewIndex = previewIndex;
+    m_page = page;
+    
+    verifyUrl();
+    
+    show();
+    
+    connect(page, SIGNAL(loadStarted()), SLOT(loadProgress()));
+    connect(page, SIGNAL(loadProgress(int)), SLOT(loadProgress()));
+    connect(page, SIGNAL(loadFinished(bool)), SLOT(loadFinished()));
+    connect(page->mainFrame(), SIGNAL(urlChanged(QUrl)), SLOT(verifyUrl()));
+}
+
+
+void PreviewSelectorBar::loadProgress()
+{
+    m_button->setEnabled(false);
+    m_button->setToolTip(i18n("Page is loading..."));
+}
+
+
+
+void PreviewSelectorBar::loadFinished()
+{
+    m_button->setEnabled(true);
+    m_button->setToolTip("");
+    
+    verifyUrl();
+}
+
+
+void PreviewSelectorBar::clicked()
+{
+    m_page->newTabPage()->setPreview(m_previewIndex, m_page);
+    m_page->mainFrame()->load(KUrl("about:favorites"));
+    hide();
+}
+
+
diff --git a/src/rekonqpage/previewselectorbar.h b/src/rekonqpage/previewselectorbar.h
new file mode 100644
index 00000000..aa011fe4
--- /dev/null
+++ b/src/rekonqpage/previewselectorbar.h
@@ -0,0 +1,60 @@
+/*
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 3 of the License, or
+    (at your option) any later version.
+
+    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 PREVIEWSELECTORBAR_H
+#define PREVIEWSELECTORBAR_H
+
+// Local Includes
+#include "webpage.h"
+
+// Qt Includes
+#include <QWidget>
+#include <QPushButton>
+#include <QLabel>
+
+class PreviewSelectorBar : public QWidget
+{
+    Q_OBJECT
+    
+    public:
+        PreviewSelectorBar(QWidget *parent = 0);
+        
+        void setPage(WebPage *page);
+        
+    public slots:
+        void enable(int previewIndex, WebPage *page);
+        void clicked();
+        
+        void loadProgress();
+        void loadFinished();
+        
+        void verifyUrl();
+        
+    private:
+        void setup();
+        
+        QPushButton *m_button;
+        QLabel *m_label;
+        
+        int m_previewIndex;
+        WebPage *m_page;
+    
+};
+
+#endif // PREVIEWSELECTORBAR_H
diff --git a/src/webpage.cpp b/src/webpage.cpp
index 59df13e7..340e9805 100644
--- a/src/webpage.cpp
+++ b/src/webpage.cpp
@@ -72,7 +72,7 @@
 
 WebPage::WebPage(QObject *parent)
         : KWebPage(parent, KWalletIntegration)
-        , m_newTabPage(0)
+        , m_newTabPage(new NewTabPage(mainFrame() ))
 {
     setForwardUnsupportedContent(true);
 
@@ -104,6 +104,12 @@ WebPage::~WebPage()
 }
 
 
+NewTabPage* WebPage::newTabPage()
+{
+    return m_newTabPage;
+}
+
+
 bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type)
 {
     // advise users on resubmitting data
@@ -115,14 +121,6 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r
         if(risp == KMessageBox::Cancel)
             return false;
     }
-    
-    if (request.url().scheme() == QLatin1String("about"))
-    {
-        if(m_newTabPage == 0)
-            m_newTabPage = new NewTabPage(frame);
-        m_newTabPage->generate(request.url());
-        return false;
-    }
 
     if (frame && m_protHandler.preHandling( request, frame ))
     {
diff --git a/src/webpage.h b/src/webpage.h
index 5671b5d9..da91ea5c 100644
--- a/src/webpage.h
+++ b/src/webpage.h
@@ -55,6 +55,8 @@ class WebPage : public KWebPage
 public:
     explicit WebPage(QObject *parent = 0);
     ~WebPage();
+    
+    NewTabPage *newTabPage();
 
 public slots:
     void manageNetworkErrors(QNetworkReply *reply);
diff --git a/src/websnap.cpp b/src/websnap.cpp
index 0d72ef3a..ff4746ca 100644
--- a/src/websnap.cpp
+++ b/src/websnap.cpp
@@ -42,10 +42,6 @@
 #include <QFile>
 
 
-#define WIDTH  200
-#define HEIGHT 150
-
-
 WebSnap::WebSnap(const QUrl &url)
     : QObject()
 {
@@ -115,6 +111,13 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h)
 }
 
 
+void WebSnap::savePreview(QPixmap pm, KUrl url)
+{
+    QFile::remove(fileForUrl(url).toLocalFile());
+    pm.save(fileForUrl(url).toLocalFile());
+}
+
+
 KUrl WebSnap::fileForUrl(KUrl url)
 {
     QString filePath = 
diff --git a/src/websnap.h b/src/websnap.h
index 04fded57..b8ada30f 100644
--- a/src/websnap.h
+++ b/src/websnap.h
@@ -37,6 +37,9 @@
 #include <QImage>
 #include <QWebPage>
 
+#define WIDTH  200
+#define HEIGHT 150
+
 
 /**
  * This class renders a site producing an image based
@@ -53,12 +56,14 @@ public:
     
     QPixmap previewImage(); // TODO : remove
     
-    static QPixmap renderPreview(const QWebPage &page, int w, int h);
+    static QPixmap renderPreview(const QWebPage &page, int w = WIDTH, int h = HEIGHT);
     
     static KUrl fileForUrl(KUrl url);
     
     static QString guessNameFromUrl(QUrl url);
     
+    static void savePreview(QPixmap pm, KUrl url);
+    
     QString snapTitle();
     QUrl snapUrl();
     
-- 
cgit v1.2.1