blob: eab7d22604517c761759c06259be3e15bbe6e393 [file] [log] [blame]
/*
Copyright (C) 2007 Trolltech ASA
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
This class provides all functionality needed for loading images, style sheets and html
pages from the web. It has a memory cache for these objects.
*/
#include "qwebhistory.h"
#include "qwebhistory_p.h"
#include "DeprecatedString.h"
#include "PlatformString.h"
#include "Image.h"
#include <QSharedData>
/*!
\class QWebHistoryItem
\since 4.4
\brief The QWebHistoryItem class represents one item in the history of a QWebPage
QWebHistoryItem represents on entry in the history stack of a web page.
\sa QWebPage::history() QWebHistory
QWebHistoryItem objects are value based and explicitly shared.
*/
/*!
Constructs a history item from \a other.
*/
QWebHistoryItem::QWebHistoryItem(const QWebHistoryItem &other)
: d(other.d)
{
}
/*!
Assigns the \a other history item to this.
*/
QWebHistoryItem &QWebHistoryItem::operator=(const QWebHistoryItem &other)
{
d = other.d;
return *this;
}
/*!
Destructs a history item.
*/
QWebHistoryItem::~QWebHistoryItem()
{
}
/*!
The original url associated with the history item.
*/
QUrl QWebHistoryItem::originalUrl() const
{
return QUrl(d->item->originalURL().string());
}
/*!
The current url associated with the history item.
*/
QUrl QWebHistoryItem::currentUrl() const
{
return QUrl(d->item->url().string());
}
/*!
The title of the page associated with the history item.
*/
QString QWebHistoryItem::title() const
{
return d->item->title();
}
/*!
The time when the apge associated with the item was last visited.
*/
QDateTime QWebHistoryItem::lastVisited() const
{
//FIXME : this will be wrong unless we correctly set lastVisitedTime ourselves
return QDateTime::fromTime_t((uint)d->item->lastVisitedTime());
}
/*!
The icon associated with the history item.
*/
QPixmap QWebHistoryItem::icon() const
{
return *d->item->icon()->getPixmap();
}
/*!
\internal
*/
QWebHistoryItem::QWebHistoryItem(QWebHistoryItemPrivate *priv)
{
d = priv;
}
/*!
\class QWebHistory
\since 4.4
\brief The QWebHistory class represents the history of a QWebPage
Each QWebPage contains a history of visited pages that can be accessed by QWebPage::history().
QWebHistory represents this history and makes it possible to navigate it.
*/
QWebHistory::QWebHistory()
: d(0)
{
}
QWebHistory::~QWebHistory()
{
delete d;
}
/*!
Clears the history.
*/
void QWebHistory::clear()
{
RefPtr<WebCore::HistoryItem> current = d->lst->currentItem();
int capacity = d->lst->capacity();
d->lst->setCapacity(0);
d->lst->setCapacity(capacity);
d->lst->addItem(current.get());
d->lst->goToItem(current.get());
}
/*!
returns a list of all items currently in the history.
*/
QList<QWebHistoryItem> QWebHistory::items() const
{
const WebCore::HistoryItemVector &items = d->lst->entries();
QList<QWebHistoryItem> ret;
for (int i = 0; i < items.size(); ++i) {
QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get());
ret.append(QWebHistoryItem(priv));
}
return ret;
}
/*!
Returns the list of items that are in the backwards history.
At most \a maxItems entries are returned.
*/
QList<QWebHistoryItem> QWebHistory::backItems(int maxItems) const
{
WebCore::HistoryItemVector items(maxItems);
d->lst->backListWithLimit(maxItems, items);
QList<QWebHistoryItem> ret;
for (int i = 0; i < items.size(); ++i) {
QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get());
ret.append(QWebHistoryItem(priv));
}
return ret;
}
/*!
Returns the list of items that are in the forward history.
At most \a maxItems entries are returned.
*/
QList<QWebHistoryItem> QWebHistory::forwardItems(int maxItems) const
{
WebCore::HistoryItemVector items(maxItems);
d->lst->forwardListWithLimit(maxItems, items);
QList<QWebHistoryItem> ret;
for (int i = 0; i < items.size(); ++i) {
QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get());
ret.append(QWebHistoryItem(priv));
}
return ret;
}
/*!
returns true if we have an item to go back to.
*/
bool QWebHistory::canGoBack() const
{
return d->lst->backListCount() > 0;
}
/*!
returns true if we have an item to go forward to.
*/
bool QWebHistory::canGoForward() const
{
return d->lst->forwardListCount() > 0;
}
/*!
goes back one history item.
*/
void QWebHistory::goBack()
{
d->lst->goBack();
}
/*!
goes forward one history item.
*/
void QWebHistory::goForward()
{
d->lst->goBack();
}
/*!
goes to item \a item in the history.
*/
void QWebHistory::goToItem(const QWebHistoryItem &item)
{
d->lst->goToItem(item.d->item);
}
/*!
returns the item before the current item.
*/
QWebHistoryItem QWebHistory::backItem() const
{
WebCore::HistoryItem *i = d->lst->backItem();
QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i);
return QWebHistoryItem(priv);
}
/*!
returns the current item.
*/
QWebHistoryItem QWebHistory::currentItem() const
{
WebCore::HistoryItem *i = d->lst->currentItem();
QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i);
return QWebHistoryItem(priv);
}
/*!
returns the item after the current item.
*/
QWebHistoryItem QWebHistory::forwardItem() const
{
WebCore::HistoryItem *i = d->lst->forwardItem();
QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i);
return QWebHistoryItem(priv);
}
/*!
returns the item at index \a i.
*/
QWebHistoryItem QWebHistory::itemAtIndex(int i) const
{
WebCore::HistoryItem *item = d->lst->itemAtIndex(i);
QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(item);
return QWebHistoryItem(priv);
}