From a9107d70e55c345339a22e1d29f5667e04c4b397 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Fri, 19 Mar 2010 15:37:27 +0100 Subject: removed unuseful rekonqpage dir (we are using just a class for it) --- src/newtabpage.cpp | 443 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 443 insertions(+) create mode 100644 src/newtabpage.cpp (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp new file mode 100644 index 00000000..6fd5160d --- /dev/null +++ b/src/newtabpage.cpp @@ -0,0 +1,443 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009-2010 by Andrea Diamantini +* Copyright (C) 2010 by Matthieu Gicquel +* +* +* 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 . +* +* ============================================================ */ + + +// Self Includes +#include "newtabpage.h" +#include "newtabpage.moc" + +// Auto Includes +#include "rekonq.h" + +// Local Includes +#include "historymodels.h" +#include "bookmarksmanager.h" +#include "application.h" +#include "mainwindow.h" +#include "mainview.h" +#include "websnap.h" +#include "previewselectorbar.h" +#include "webtab.h" + +// KDE Includes +#include +#include +#include +#include +#include +#include + +// Qt Includes +#include + + +NewTabPage::NewTabPage(QWebFrame *frame) + : m_root(frame->documentElement()) +{ + QString htmlFilePath = KStandardDirs::locate("data", "rekonq/htmls/home.html"); + QString imagesPath = QString("file://") + KGlobal::dirs()->findResourceDir("data", "rekonq/pics/bg.png") + QString("rekonq/pics"); + + QFile file(htmlFilePath); + bool isOpened = file.open(QIODevice::ReadOnly); + if (!isOpened) + { + kDebug() << "Couldn't open the home.html file"; + } + else + { + m_html = file.readAll(); + m_html.replace(QString("%2"), imagesPath); + } +} + + +NewTabPage::~NewTabPage() +{ +} + + +void NewTabPage::generate(KUrl url) +{ + if(KUrl("about:preview").isParentOf(url)) + { + if(url.directory() == QString("preview/remove")) + { + removePreview(url.fileName().toInt()); + return; + } + if(url.directory() == QString("preview/modify")) + { + int index = url.fileName().toInt(); + Application::instance()->mainWindow()->currentTab()->createPreviewSelectorBar(index); + return; + } + } + + QWebPage *page = m_root.webFrame()->page(); + page->mainFrame()->setHtml(m_html); + + m_root = page->mainFrame()->documentElement().findFirst("#content"); + + browsingMenu(url); + + QString title; + if(url == KUrl("about:favorites")) + { + favoritesPage(); + title = i18n("Favorites"); + } + else if(url == KUrl("about:closedTabs")) + { + closedTabsPage(); + title = i18n("Closed Tabs"); + } + else if(url == KUrl("about:history")) + { + historyPage(); + title = i18n("History"); + } + else if(url == KUrl("about:bookmarks")) + { + bookmarksPage(); + title = i18n("Bookmarks"); + } + + m_root.document().findFirst("title").setPlainText(title); +} + + +void NewTabPage::favoritesPage() +{ + m_root.addClass("favorites"); + + QStringList names = ReKonfig::previewNames(); + QStringList urls = ReKonfig::previewUrls(); + + for(int i=0; i<8; ++i) + { + KUrl url = urls.at(i); + QWebElement prev; + + if(url.isEmpty()) + prev = emptyPreview(i); + else if(!QFile::exists(WebSnap::fileForUrl(url).toLocalFile())) + prev = loadingPreview(i, url); + else + prev = validPreview(i, url, names.at(i)); + + setupPreview(prev, i); + + m_root.appendInside(prev); + } +} + + +QWebElement NewTabPage::emptyPreview(int index) +{ + QWebElement prev = markup(".thumbnail"); + + prev.findFirst(".preview img").setAttribute("src" , QString("file:///") + + KIconLoader::global()->iconPath("insert-image", KIconLoader::Desktop)); + prev.findFirst("span a").setPlainText(i18n("Set a Preview...")); + prev.findFirst("a").setAttribute("href", QString("about:preview/modify/" + QVariant(index).toString())); + + setupPreview(prev, index); + hideControls(prev); + + return prev; +} + + +QWebElement NewTabPage::loadingPreview(int index, KUrl url) +{ + QWebElement prev = markup(".thumbnail"); + + prev.findFirst(".preview img").setAttribute("src" , + QString("file:///") + KStandardDirs::locate("appdata", "pics/busywidget.gif")); + prev.findFirst("span a").setPlainText(i18n("Loading Preview...")); + prev.findFirst("a").setAttribute("href", url.toMimeDataString()); + + setupPreview(prev, index); + showControls(prev); + + new WebSnap(url, m_root.webFrame(), index); + + return prev; +} + + +QWebElement NewTabPage::validPreview(int index, KUrl url, QString title) +{ + QWebElement prev = markup(".thumbnail"); + KUrl previewPath = WebSnap::fileForUrl(url); + QString iString = QVariant(index).toString(); + + prev.findFirst(".preview img").setAttribute("src" , previewPath.toMimeDataString()); + prev.findFirst("a").setAttribute("href", url.toMimeDataString()); + prev.findFirst("span a").setAttribute("href", url.toMimeDataString()); + prev.findFirst("span a").setPlainText(checkTitle(title)); + + setupPreview(prev, index); + showControls(prev); + + return prev; +} + + +void NewTabPage::hideControls(QWebElement e) +{ + e.findFirst(".remove").setStyleProperty("visibility", "hidden"); + e.findFirst(".modify").setStyleProperty("visibility", "hidden"); +} + + +void NewTabPage::showControls(QWebElement e) +{ + e.findFirst(".remove").setStyleProperty("visibility", "visible"); + e.findFirst(".modify").setStyleProperty("visibility", "visible"); +} + + +void NewTabPage::setupPreview(QWebElement e, int index) +{ + e.findFirst(".remove img").setAttribute("src", QString("file:///") + + KIconLoader::global()->iconPath("edit-delete", KIconLoader::DefaultState)); + e.findFirst(".remove").setAttribute("title", "Remove favorite"); + e.findFirst(".modify img").setAttribute("src", QString("file:///") + + KIconLoader::global()->iconPath("insert-image", KIconLoader::DefaultState)); + e.findFirst(".modify").setAttribute("title", "Set new favorite"); + + e.findFirst(".modify").setAttribute("href", QString("about:preview/modify/" + QVariant(index).toString())); + e.findFirst(".remove").setAttribute("href", QString("about:preview/remove/" + QVariant(index).toString())); + + e.setAttribute("id", "preview" + QVariant(index).toString()); +} + + +void NewTabPage::snapFinished(int index, KUrl url, QString title) +{ + // do not try to modify the page if it isn't the newTabPage + if(m_root.document().findAll("#rekonq-newtabpage").count() == 0) + return; + + QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString()); + QWebElement newPrev = validPreview(index, url, title); + + if(m_root.findAll(".closedTabs").count() != 0) + hideControls(newPrev); + + prev.replace(newPrev); + + // update title + if(m_root.findAll(".favorites").count() != 0) + { + QStringList names = ReKonfig::previewNames(); + names.replace(index, title); + ReKonfig::setPreviewNames(names); + + ReKonfig::self()->writeConfig(); + } +} + + +void NewTabPage::removePreview(int index) +{ + QStringList names = ReKonfig::previewNames(); + QStringList urls = ReKonfig::previewUrls(); + + urls.replace(index, QString("")); + names.replace(index, QString("")); + + ReKonfig::setPreviewNames(names); + ReKonfig::setPreviewUrls(urls); + + ReKonfig::self()->writeConfig(); + + QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString()); + prev.replace(emptyPreview(index)); +} + + +void NewTabPage::browsingMenu(const KUrl ¤tUrl) +{ + QList 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("a").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("a").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("a").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("a").appendInside(i18n("History")); + navItems.append(nav); + + QWebElement it; + foreach(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); + } +} + + +void NewTabPage::historyPage() +{ + m_root.addClass("history"); + + HistoryTreeModel *model = Application::historyManager()->historyTreeModel(); + + int i = 0; + do + { + QModelIndex index = model->index(i, 0, QModelIndex() ); + if(model->hasChildren(index)) + { + m_root.appendInside(markup("h3")); + m_root.lastChild().setPlainText(index.data().toString()); + + for(int j=0; j< model->rowCount(index); ++j) + { + QModelIndex son = model->index(j, 0, index ); + m_root.appendInside(son.data(HistoryModel::DateTimeRole).toDateTime().toString("hh:mm")); + m_root.appendInside(" "); + m_root.appendInside(markup("a")); + m_root.lastChild().setAttribute("href" , son.data(HistoryModel::UrlStringRole).toString()); + m_root.lastChild().appendInside(son.data().toString()); + m_root.appendInside("
"); + } + } + i++; + } + while( model->hasIndex( i , 0 , QModelIndex() ) ); +} + + +void NewTabPage::bookmarksPage() +{ + m_root.addClass("bookmarks"); + + KBookmarkGroup bookGroup = Application::bookmarkProvider()->rootGroup(); + if (bookGroup.isNull()) + { + return; + } + + KBookmark bookmark = bookGroup.first(); + while (!bookmark.isNull()) + { + createBookItem(bookmark, m_root); + bookmark = bookGroup.next(bookmark); + } +} + + +void NewTabPage::createBookItem(const KBookmark &bookmark, QWebElement parent) +{ + if (bookmark.isGroup()) + { + KBookmarkGroup group = bookmark.toGroup(); + KBookmark bm = group.first(); + parent.appendInside(markup("h3")); + parent.lastChild().setPlainText(group.text()); + parent.appendInside(markup(".bookfolder")); + while (!bm.isNull()) + { + createBookItem(bm, parent.lastChild()); // it is .bookfolder + bm = group.next(bm); + } + } + else if(bookmark.isSeparator()) + { + parent.appendInside("
"); + } + else + { + parent.appendInside(markup("a")); + parent.lastChild().setAttribute("href" , bookmark.url().prettyUrl()); + parent.lastChild().setPlainText(bookmark.text()); + parent.appendInside("
"); + } +} + + +void NewTabPage::closedTabsPage() +{ + m_root.addClass("closedTabs"); + + QList links = Application::instance()->mainWindow()->mainView()->recentlyClosedTabs(); + + for(int i=0; i < links.count(); ++i) + { + HistoryItem item = links.at(i); + QWebElement prev; + + if(item.url.isEmpty()) + continue; + else if(!QFile::exists(WebSnap::fileForUrl(item.url).toLocalFile())) + prev = loadingPreview(i, item.url); + else + prev = validPreview(i, item.url, item.title); + + prev.setAttribute("id", "preview" + QVariant(i).toString()); + hideControls(prev); + m_root.appendInside(prev); + } +} + + +QString NewTabPage::checkTitle(QString title) +{ + if(title.length() > 23) + { + title.truncate(20); + title += "..."; + } + return title; +} -- cgit v1.2.1 From 9905c8c2a2c4f3ec27e2cc55cbfde83ddd35c5ce Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Fri, 19 Mar 2010 15:50:33 +0100 Subject: NewTabPage: clean API --- src/newtabpage.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index 6fd5160d..69a80b29 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -79,7 +79,7 @@ NewTabPage::~NewTabPage() } -void NewTabPage::generate(KUrl url) +void NewTabPage::generate(const KUrl &url) { if(KUrl("about:preview").isParentOf(url)) { @@ -171,7 +171,7 @@ QWebElement NewTabPage::emptyPreview(int index) } -QWebElement NewTabPage::loadingPreview(int index, KUrl url) +QWebElement NewTabPage::loadingPreview(int index, const KUrl &url) { QWebElement prev = markup(".thumbnail"); @@ -189,7 +189,7 @@ QWebElement NewTabPage::loadingPreview(int index, KUrl url) } -QWebElement NewTabPage::validPreview(int index, KUrl url, QString title) +QWebElement NewTabPage::validPreview(int index, const KUrl &url, const QString &title) { QWebElement prev = markup(".thumbnail"); KUrl previewPath = WebSnap::fileForUrl(url); @@ -237,7 +237,7 @@ void NewTabPage::setupPreview(QWebElement e, int index) } -void NewTabPage::snapFinished(int index, KUrl url, QString title) +void NewTabPage::snapFinished(int index, const KUrl &url, const QString &title) { // do not try to modify the page if it isn't the newTabPage if(m_root.document().findAll("#rekonq-newtabpage").count() == 0) @@ -432,12 +432,13 @@ void NewTabPage::closedTabsPage() } -QString NewTabPage::checkTitle(QString title) +QString NewTabPage::checkTitle(const QString &title) { - if(title.length() > 23) + QString t(title); + if(t.length() > 23) { - title.truncate(20); - title += "..."; + t.truncate(20); + t += "..."; } - return title; + return t; } -- cgit v1.2.1 From a6ef003dd4c1b6ad08eca4f5adaa4679bbc20bce Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sat, 20 Mar 2010 22:54:21 +0100 Subject: Downloads Page This commit implements the downloads history page. While it is in an horrible shape, its slots seem working well It needs just some love.. --- src/newtabpage.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index 69a80b29..36ddafed 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -53,6 +53,9 @@ // Qt Includes #include +// Defines +#define QL1S(x) QLatin1String(x) + NewTabPage::NewTabPage(QWebFrame *frame) : m_root(frame->documentElement()) @@ -124,6 +127,11 @@ void NewTabPage::generate(const KUrl &url) bookmarksPage(); title = i18n("Bookmarks"); } + else if(url == KUrl("about:downloads")) + { + downloadsPage(); + title = i18n("Downloads"); + } m_root.document().findFirst("title").setPlainText(title); } @@ -315,6 +323,13 @@ void NewTabPage::browsingMenu(const KUrl ¤tUrl) nav.findFirst("a").appendInside(i18n("History")); navItems.append(nav); + nav = markup(".link"); // History + nav.findFirst("a").setAttribute("href", "about:downloads"); + nav.findFirst("img").setAttribute("src" , QString("file:///" + + loader->iconPath("download", KIconLoader::Desktop ||KIconLoader::SizeSmall))); + nav.findFirst("a").appendInside(i18n("Downloads")); + navItems.append(nav); + QWebElement it; foreach(it, navItems) { @@ -442,3 +457,39 @@ QString NewTabPage::checkTitle(const QString &title) } return t; } + + +void NewTabPage::downloadsPage() +{ + m_root.addClass("downloads"); + + DownloadList list = Application::historyManager()->downloads(); + + foreach(const DownloadItem &item, list) + { + m_root.appendInside(markup("h3")); + m_root.lastChild().setPlainText(""); + + KUrl u = KUrl(item.destUrlString); + QString fName = u.fileName(); + QString dir = QL1S("file://") + u.directory(); + + m_root.appendInside( item.dateTime.toString("dddd") ); + m_root.appendInside("
"); + m_root.appendInside( item.dateTime.toString("dd MMMM yyyy") ); + m_root.appendInside(", "); + m_root.appendInside( item.dateTime.toString("hh:mm:ss") ); + m_root.appendInside("
"); + + m_root.appendInside(fName); + m_root.appendInside("
"); + + m_root.appendInside(item.srcUrlString); + m_root.appendInside("
"); + + m_root.appendInside(markup("a")); + m_root.lastChild().setAttribute("href" , dir); + m_root.lastChild().setPlainText("browse dir"); + m_root.appendInside("
"); + } +} -- cgit v1.2.1 From d9796c992638d4c4d740415e29a0766a92d2e101 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Sat, 27 Mar 2010 15:25:38 +0100 Subject: Improve Downloads page appearance : the downloads info are shown on 3 lines with the icon of the file --- src/newtabpage.cpp | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index 36ddafed..c61eb60d 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -467,29 +467,37 @@ void NewTabPage::downloadsPage() foreach(const DownloadItem &item, list) { - m_root.appendInside(markup("h3")); - m_root.lastChild().setPlainText(""); + m_root.prependInside(markup("div")); + + QWebElement div = m_root.firstChild(); + div.addClass("download"); KUrl u = KUrl(item.destUrlString); QString fName = u.fileName(); QString dir = QL1S("file://") + u.directory(); - m_root.appendInside( item.dateTime.toString("dddd") ); - m_root.appendInside("
"); - m_root.appendInside( item.dateTime.toString("dd MMMM yyyy") ); - m_root.appendInside(", "); - m_root.appendInside( item.dateTime.toString("hh:mm:ss") ); - m_root.appendInside("
"); + KIconLoader *loader = KIconLoader::global(); + QString iconPath = "file://" + loader->iconPath(KMimeType::iconNameForUrl(u), KIconLoader::Desktop); + + div.appendInside(markup("img")); + div.lastChild().setAttribute("src", iconPath ); - m_root.appendInside(fName); - m_root.appendInside("
"); + div.appendInside("" + fName + ""); + div.appendInside(" - "); + div.appendInside( item.dateTime.toString("''dd MMMM yyyy hh:mm''") ); + div.appendInside("
"); - m_root.appendInside(item.srcUrlString); - m_root.appendInside("
"); + div.appendInside(item.srcUrlString); + div.appendInside("
"); - m_root.appendInside(markup("a")); - m_root.lastChild().setAttribute("href" , dir); - m_root.lastChild().setPlainText("browse dir"); - m_root.appendInside("
"); + div.appendInside(markup("a")); + div.lastChild().setAttribute("href" , dir); + div.lastChild().setPlainText("Browse dir"); + + /* TODO : make this link work + div.appendInside(" - "); + div.appendInside(markup("a")); + div.lastChild().setAttribute("href" , u.toMimeDataString()); + div.lastChild().setPlainText("Open file");*/ } } -- cgit v1.2.1 From df47feec690a840eb2633672f7ab36d53ab192b3 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Mon, 29 Mar 2010 19:30:27 +0200 Subject: Remove limitation to the number of favorites. You are now able to add and remove favorites. Some work needed on the "add favorite" button --- src/newtabpage.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 10 deletions(-) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index c61eb60d..7d8787d7 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -86,6 +86,23 @@ void NewTabPage::generate(const KUrl &url) { if(KUrl("about:preview").isParentOf(url)) { + if(url.fileName() == QString("add")) + { + QStringList names = ReKonfig::previewNames(); + QStringList urls = ReKonfig::previewUrls(); + + names.append(""); + urls.append(""); + + ReKonfig::setPreviewNames(names); + ReKonfig::setPreviewUrls(urls); + + // Why doesn't it work well ? + // m_root.appendInside(emptyPreview(names.length() - 1)); + // Replacing with this : + generate(KUrl("about:favorites")); + return; + } if(url.directory() == QString("preview/remove")) { removePreview(url.fileName().toInt()); @@ -141,10 +158,13 @@ void NewTabPage::favoritesPage() { m_root.addClass("favorites"); + // TODO : create a nice button to replace this ugly link + m_root.document().findFirst("#navigation").appendOutside("Add Preview"); + QStringList names = ReKonfig::previewNames(); QStringList urls = ReKonfig::previewUrls(); - for(int i=0; i<8; ++i) + for(int i=0; i < urls.count() ; ++i) { KUrl url = urls.at(i); QWebElement prev; @@ -173,7 +193,7 @@ QWebElement NewTabPage::emptyPreview(int index) prev.findFirst("a").setAttribute("href", QString("about:preview/modify/" + QVariant(index).toString())); setupPreview(prev, index); - hideControls(prev); + //hideControls(prev); return prev; } @@ -276,16 +296,31 @@ void NewTabPage::removePreview(int index) QStringList names = ReKonfig::previewNames(); QStringList urls = ReKonfig::previewUrls(); - urls.replace(index, QString("")); - names.replace(index, QString("")); - - ReKonfig::setPreviewNames(names); - ReKonfig::setPreviewUrls(urls); + if(urls.at(index) == "") + { + urls.removeAt(index); + names.removeAt(index); + + // modify config before + ReKonfig::setPreviewNames(names); + ReKonfig::setPreviewUrls(urls); + + // reload to update index + generate(KUrl("about:favorites")); + } + else + { + urls.replace(index, QString("")); + names.replace(index, QString("")); + + QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString()); + prev.replace(emptyPreview(index)); + + ReKonfig::setPreviewNames(names); + ReKonfig::setPreviewUrls(urls); + } ReKonfig::self()->writeConfig(); - - QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString()); - prev.replace(emptyPreview(index)); } -- cgit v1.2.1 From bdc95a7a090c2cff888cc96dd612ba9449b01329 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Wed, 31 Mar 2010 15:15:31 +0200 Subject: Button on top-right to add a preview --- src/newtabpage.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index 7d8787d7..98377d8a 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -158,8 +158,12 @@ void NewTabPage::favoritesPage() { m_root.addClass("favorites"); - // TODO : create a nice button to replace this ugly link - m_root.document().findFirst("#navigation").appendOutside("Add Preview"); + 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")); + m_root.document().findFirst("#actions").appendInside(add); QStringList names = ReKonfig::previewNames(); QStringList urls = ReKonfig::previewUrls(); @@ -334,35 +338,35 @@ void NewTabPage::browsingMenu(const KUrl ¤tUrl) nav.findFirst("a").setAttribute("href", "about:favorites"); nav.findFirst("img").setAttribute("src" , QString("file:///" + loader->iconPath("emblem-favorite", KIconLoader::Desktop ||KIconLoader::SizeSmall))); - nav.findFirst("a").appendInside(i18n("Favorites")); + 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("a").appendInside(i18n("Closed Tabs")); + 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("a").appendInside(i18n("Bookmarks")); + 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("a").appendInside(i18n("History")); + nav.findFirst("span").appendInside(i18n("History")); navItems.append(nav); - nav = markup(".link"); // History + 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("a").appendInside(i18n("Downloads")); + nav.findFirst("span").appendInside(i18n("Downloads")); navItems.append(nav); QWebElement it; -- cgit v1.2.1 From 7f2ed90b03d28dca82fb38ceb43a2866d0d19a69 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Thu, 1 Apr 2010 19:35:00 +0200 Subject: Previews are now always completely removed when clicking the x --- src/newtabpage.cpp | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index 98377d8a..3e21d0fe 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -300,30 +300,14 @@ void NewTabPage::removePreview(int index) QStringList names = ReKonfig::previewNames(); QStringList urls = ReKonfig::previewUrls(); - if(urls.at(index) == "") - { - urls.removeAt(index); - names.removeAt(index); - - // modify config before - ReKonfig::setPreviewNames(names); - ReKonfig::setPreviewUrls(urls); - - // reload to update index - generate(KUrl("about:favorites")); - } - else - { - urls.replace(index, QString("")); - names.replace(index, QString("")); - - QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString()); - prev.replace(emptyPreview(index)); - - ReKonfig::setPreviewNames(names); - ReKonfig::setPreviewUrls(urls); - } + urls.removeAt(index); + names.removeAt(index); + + ReKonfig::setPreviewNames(names); + ReKonfig::setPreviewUrls(urls); + generate(KUrl("about:favorites")); + ReKonfig::self()->writeConfig(); } -- cgit v1.2.1 From 7f5321462a87329b0429b1c34274bef40eef510b Mon Sep 17 00:00:00 2001 From: matgic78 Date: Mon, 5 Apr 2010 11:26:02 +0200 Subject: NewTabPage : add buttons in #actions : "Clear Private Data" for history and bookmarks, "Edit Downloads" --- src/newtabpage.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index 3e21d0fe..e2837f94 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -115,6 +115,17 @@ void NewTabPage::generate(const KUrl &url) return; } } + if(url.fileName() == QString("clear")) + { + Application::instance()->mainWindow()->actionByName("clear_private_data")->trigger(); + generate(QString("about:" + url.directory())); + return; + } + if(url == KUrl("about:bookmarks/edit")) + { + Application::bookmarkProvider()->bookmarkManager()->slotEditBookmarks(); + return; + } QWebPage *page = m_root.webFrame()->page(); page->mainFrame()->setHtml(m_html); @@ -369,6 +380,13 @@ 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")); + m_root.document().findFirst("#actions").appendInside(clearData); + HistoryTreeModel *model = Application::historyManager()->historyTreeModel(); int i = 0; @@ -401,6 +419,13 @@ 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")); + m_root.document().findFirst("#actions").appendInside(editBookmarks); + KBookmarkGroup bookGroup = Application::bookmarkProvider()->rootGroup(); if (bookGroup.isNull()) { @@ -485,6 +510,13 @@ QString NewTabPage::checkTitle(const QString &title) 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")); + m_root.document().findFirst("#actions").appendInside(clearData); DownloadList list = Application::historyManager()->downloads(); -- cgit v1.2.1 From 5f4f46a2ca51cd2d05a7c3cbb082f395462c7f7f Mon Sep 17 00:00:00 2001 From: matgic78 Date: Fri, 9 Apr 2010 18:11:00 +0200 Subject: Better datetime for downloads page --- src/newtabpage.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index e2837f94..043648e7 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -49,6 +49,7 @@ #include #include #include +#include // Qt Includes #include @@ -539,7 +540,8 @@ void NewTabPage::downloadsPage() div.appendInside("" + fName + ""); div.appendInside(" - "); - div.appendInside( item.dateTime.toString("''dd MMMM yyyy hh:mm''") ); + QString date = KGlobal::locale()->formatDateTime(item.dateTime, KLocale::FancyLongDate); + div.appendInside("" + date + ""); div.appendInside("
"); div.appendInside(item.srcUrlString); -- cgit v1.2.1 From d8ea755c2b4ce9c22bf7543b3f345d90f434e8cf Mon Sep 17 00:00:00 2001 From: matgic78 Date: Fri, 16 Apr 2010 17:32:38 +0200 Subject: Fix a bug in NewTabPage::snapFinished When you started to load closedTabs and opened favorites, previews were replaced when background load of previews finished. Changes : - preview titles are saved only when urls match - previews are replaced only when urls match - added some checks to prevent NewTabPage to have strange behaviour in the future --- src/newtabpage.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index 043648e7..d7671937 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -283,20 +283,9 @@ void NewTabPage::setupPreview(QWebElement e, int index) void NewTabPage::snapFinished(int index, const KUrl &url, const QString &title) { - // do not try to modify the page if it isn't the newTabPage - if(m_root.document().findAll("#rekonq-newtabpage").count() == 0) - return; - - QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString()); - QWebElement newPrev = validPreview(index, url, title); - - if(m_root.findAll(".closedTabs").count() != 0) - hideControls(newPrev); - - prev.replace(newPrev); - - // update title - if(m_root.findAll(".favorites").count() != 0) + // Update title if necessary + QStringList urls = ReKonfig::previewUrls(); + if(KUrl(urls.at(index)) == url) { QStringList names = ReKonfig::previewNames(); names.replace(index, title); @@ -304,6 +293,23 @@ void NewTabPage::snapFinished(int index, const KUrl &url, const QString &title) ReKonfig::self()->writeConfig(); } + + // Update page, but only if open + if(m_root.document().findAll("#rekonq-newtabpage").count() == 0) + return; + if(m_root.findAll(".favorites").count() == 0 && m_root.findAll(".closedTabs").count() == 0) + return; + + QWebElement prev = m_root.findFirst("#preview" + QVariant(index).toString()); + if(KUrl(prev.findFirst("a").attribute("href")) == url) + { + QWebElement newPrev = validPreview(index, url, title); + + if(m_root.findAll(".closedTabs").count() != 0) + hideControls(newPrev); + + prev.replace(newPrev); + } } -- cgit v1.2.1 From 01ba6c12f56b3ce87be9cc654d2e5336d7697fe0 Mon Sep 17 00:00:00 2001 From: matgic78 Date: Mon, 19 Apr 2010 12:29:55 +0200 Subject: Add some text when a newtabpage is empty for users to know that this isn't a bug --- src/newtabpage.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/newtabpage.cpp') diff --git a/src/newtabpage.cpp b/src/newtabpage.cpp index d7671937..b709375a 100644 --- a/src/newtabpage.cpp +++ b/src/newtabpage.cpp @@ -180,6 +180,13 @@ void NewTabPage::favoritesPage() QStringList names = ReKonfig::previewNames(); QStringList urls = ReKonfig::previewUrls(); + 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")); + return; + } + for(int i=0; i < urls.count() ; ++i) { KUrl url = urls.at(i); @@ -396,6 +403,13 @@ void NewTabPage::historyPage() HistoryTreeModel *model = Application::historyManager()->historyTreeModel(); + if(model->rowCount() == 0) + { + m_root.addClass("empty"); + m_root.setPlainText(i18n("Your browsing history is empty")); + return; + } + int i = 0; do { @@ -436,6 +450,8 @@ void NewTabPage::bookmarksPage() KBookmarkGroup bookGroup = Application::bookmarkProvider()->rootGroup(); if (bookGroup.isNull()) { + m_root.addClass("empty"); + m_root.setPlainText(i18n("You have no bookmarks")); return; } @@ -483,6 +499,13 @@ void NewTabPage::closedTabsPage() QList links = Application::instance()->mainWindow()->mainView()->recentlyClosedTabs(); + if(links.isEmpty()) + { + m_root.addClass("empty"); + m_root.setPlainText(i18n("There are no recently closed tabs")); + return; + } + for(int i=0; i < links.count(); ++i) { HistoryItem item = links.at(i); @@ -527,6 +550,13 @@ void NewTabPage::downloadsPage() DownloadList list = Application::historyManager()->downloads(); + if(list.isEmpty()) + { + m_root.addClass("empty"); + m_root.setPlainText(i18n("There are no recently downloaded files to show")); + return; + } + foreach(const DownloadItem &item, list) { m_root.prependInside(markup("div")); -- cgit v1.2.1