diff options
Diffstat (limited to 'src')
40 files changed, 1337 insertions, 1304 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 064fc0e6..2ddf1117 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,7 +8,8 @@ SET( rekonq_SRCS edittableview.cpp edittreeview.cpp history.cpp - download.cpp + historydialog.cpp + historymenu.cpp bookmarks.cpp modelmenu.cpp networkaccessmanager.cpp @@ -23,6 +24,8 @@ SET( rekonq_SRCS lineedit.cpp stackedurlbar.cpp webpage.cpp + cookiedialog.cpp + cookieexceptiondialog.cpp ) KDE4_ADD_UI_FILES( rekonq_SRCS diff --git a/src/application.cpp b/src/application.cpp index 5f7892c4..09a8a087 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -34,7 +34,6 @@ #include "networkaccessmanager.h" #include "mainview.h" #include "webview.h" -#include "download.h" // KDE Includes #include <KCmdLineArgs> @@ -52,7 +51,6 @@ QPointer<HistoryManager> Application::s_historyManager; QPointer<NetworkAccessManager> Application::s_networkAccessManager; -QPointer<DownloadManager> Application::s_downloadManager; QPointer<BookmarkProvider> Application::s_bookmarkProvider; @@ -93,7 +91,7 @@ int Application::newInstance() { for (int i = 0; i < args->count(); ++i) { - KUrl url = MainWindow::guessUrlFromString(args->arg(i)); + KUrl url = guessUrlFromString(args->arg(i)); newWebView(); mainWindow()->loadUrl(url); } @@ -150,7 +148,7 @@ WebView *Application::newWebView(Rekonq::OpenType type) CookieJar *Application::cookieJar() { - return (CookieJar*)networkAccessManager()->cookieJar(); + return (CookieJar *)networkAccessManager()->cookieJar(); } @@ -176,16 +174,6 @@ HistoryManager *Application::historyManager() } -DownloadManager *Application::downloadManager() -{ - if (!s_downloadManager) - { - s_downloadManager = new DownloadManager(); - } - return s_downloadManager; -} - - BookmarkProvider *Application::bookmarkProvider() { if (!s_bookmarkProvider) @@ -206,3 +194,61 @@ KIcon Application::icon(const KUrl &url) const return icon; } + +KUrl Application::guessUrlFromString(const QString &string) +{ + QString urlStr = string.trimmed(); + QRegExp test(QLatin1String("^[a-zA-Z]+\\:.*")); + + // Check if it looks like a qualified URL. Try parsing it and see. + bool hasSchema = test.exactMatch(urlStr); + + if (hasSchema) + { + QUrl qurl(urlStr, QUrl::TolerantMode); + KUrl url(qurl); + + if (url.isValid()) + { + return url; + } + } + + // Might be a file. + if (QFile::exists(urlStr)) + { + QFileInfo info(urlStr); + return KUrl::fromPath(info.absoluteFilePath()); + } + + // Might be a shorturl - try to detect the schema. + if (!hasSchema) + { + int dotIndex = urlStr.indexOf(QLatin1Char('.')); + + if (dotIndex != -1) + { + QString prefix = urlStr.left(dotIndex).toLower(); + QString schema = (prefix == QLatin1String("ftp")) ? prefix : QLatin1String("http"); + QUrl qurl(schema + QLatin1String("://") + urlStr, QUrl::TolerantMode); + KUrl url(qurl); + + if (url.isValid()) + { + return url; + } + } + } + + // Fall back to QUrl's own tolerant parser. + QUrl qurl = QUrl(string, QUrl::TolerantMode); + KUrl url(qurl); + + // finally for cases where the user just types in a hostname add http + if (qurl.scheme().isEmpty()) + { + qurl = QUrl(QLatin1String("http://") + string, QUrl::TolerantMode); + url = KUrl(qurl); + } + return url; +} diff --git a/src/application.h b/src/application.h index e0c7a21c..e61b2a31 100644 --- a/src/application.h +++ b/src/application.h @@ -40,7 +40,6 @@ class KIcon; class KUrl; class BookmarkProvider; class CookieJar; -class DownloadManager; class HistoryManager; class MainWindow; class NetworkAccessManager; @@ -76,14 +75,15 @@ public: static Application *instance(); MainWindow *mainWindow(); - WebView* newWebView(Rekonq::OpenType type = Rekonq::Default); + WebView *newWebView(Rekonq::OpenType type = Rekonq::Default); KIcon icon(const KUrl &url) const; + static KUrl guessUrlFromString(const QString &url); + static HistoryManager *historyManager(); static CookieJar *cookieJar(); static NetworkAccessManager *networkAccessManager(); - static DownloadManager *downloadManager(); static BookmarkProvider *bookmarkProvider(); public slots: @@ -105,7 +105,6 @@ private slots: private: static QPointer<HistoryManager> s_historyManager; static QPointer<NetworkAccessManager> s_networkAccessManager; - static QPointer<DownloadManager> s_downloadManager; static QPointer<BookmarkProvider> s_bookmarkProvider; QPointer<MainWindow> m_mainWindow; diff --git a/src/bookmarks.cpp b/src/bookmarks.cpp index 9490ed0f..bddacab4 100644 --- a/src/bookmarks.cpp +++ b/src/bookmarks.cpp @@ -44,8 +44,9 @@ #include <KUrl> // Qt Includes -#include <QActionGroup> -#include <QFile> +#include <QtCore/QFile> +#include <QtGui/QActionGroup> + BookmarkOwner::BookmarkOwner(QObject *parent) diff --git a/src/cookiedialog.cpp b/src/cookiedialog.cpp new file mode 100644 index 00000000..e48d9c02 --- /dev/null +++ b/src/cookiedialog.cpp @@ -0,0 +1,211 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + +// Self Includes +#include "cookiedialog.h" +#include "cookiedialog.moc" + +// Local Includes +#include "cookiejar.h" + +// KDE Includes +#include <KLocalizedString> + + +CookieModel::CookieModel(CookieJar *cookieJar, QObject *parent) + : QAbstractTableModel(parent) + , m_cookieJar(cookieJar) +{ + connect(m_cookieJar, SIGNAL(cookiesChanged()), this, SLOT(cookiesChanged())); +} + + +QVariant CookieModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (role == Qt::SizeHintRole) + { + QFont font; + font.setPointSize(10); + QFontMetrics fm(font); + int height = fm.height() + fm.height() / 3; + int width = fm.width(headerData(section, orientation, Qt::DisplayRole).toString()); + return QSize(width, height); + } + + if (orientation == Qt::Horizontal) + { + if (role != Qt::DisplayRole) + return QVariant(); + + switch (section) + { + case 0: + return i18n("Website"); + case 1: + return i18n("Name"); + case 2: + return i18n("Path"); + case 3: + return i18n("Secure"); + case 4: + return i18n("Expires"); + case 5: + return i18n("Contents"); + default: + return QVariant(); + } + } + return QAbstractTableModel::headerData(section, orientation, role); +} + + +QVariant CookieModel::data(const QModelIndex &index, int role) const +{ + QList<QNetworkCookie> lst; + if (m_cookieJar) + lst = m_cookieJar->allCookies(); + if (index.row() < 0 || index.row() >= lst.size()) + return QVariant(); + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + { + QNetworkCookie cookie = lst.at(index.row()); + switch (index.column()) + { + case 0: + return cookie.domain(); + case 1: + return cookie.name(); + case 2: + return cookie.path(); + case 3: + return cookie.isSecure(); + case 4: + return cookie.expirationDate(); + case 5: + return cookie.value(); + } + } + case Qt::FontRole: + { + QFont font; + font.setPointSize(10); + return font; + } + } + + return QVariant(); +} + + +int CookieModel::columnCount(const QModelIndex &parent) const +{ + return (parent.isValid()) ? 0 : 6; +} + + +int CookieModel::rowCount(const QModelIndex &parent) const +{ + return (parent.isValid() || !m_cookieJar) ? 0 : m_cookieJar->allCookies().count(); +} + + +bool CookieModel::removeRows(int row, int count, const QModelIndex &parent) +{ + if (parent.isValid() || !m_cookieJar) + return false; + int lastRow = row + count - 1; + beginRemoveRows(parent, row, lastRow); + QList<QNetworkCookie> lst = m_cookieJar->allCookies(); + for (int i = lastRow; i >= row; --i) + { + lst.removeAt(i); + } + m_cookieJar->setAllCookies(lst); + endRemoveRows(); + return true; +} + + +void CookieModel::cookiesChanged() +{ + reset(); +} + + +// --------------------------------------------------------------------------------------- + + +// Ui Includes +#include "ui_cookies.h" + +// Qt Includes +#include <QtCore/QRect> +#include <QtCore/QSize> + +#include <QtGui/QDesktopWidget> + + +CookiesDialog::CookiesDialog(CookieJar *cookieJar, QWidget *parent) + : KDialog(parent) +{ + setWindowFlags(Qt::Sheet); + setCaption("Cookies"); + setButtons( KDialog::Close ); + + Ui::CookiesWidget *cookieWidget = new Ui::CookiesWidget; + QWidget *widget = new QWidget(this); + cookieWidget->setupUi(widget); + setMainWidget(widget); + + CookieModel *model = new CookieModel(cookieJar, this); + m_proxyModel = new QSortFilterProxyModel(this); + + // connecting signals and slots + connect(cookieWidget->search, SIGNAL(textChanged(QString)), m_proxyModel, SLOT(setFilterFixedString(QString))); + connect(cookieWidget->removeButton, SIGNAL(clicked()), cookieWidget->cookiesTable, SLOT(removeOne())); + connect(cookieWidget->removeAllButton, SIGNAL(clicked()), cookieWidget->cookiesTable, SLOT(removeAll())); + + m_proxyModel->setSourceModel(model); + + cookieWidget->cookiesTable->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + cookieWidget->cookiesTable->verticalHeader()->hide(); + cookieWidget->cookiesTable->setSelectionBehavior(QAbstractItemView::SelectRows); + cookieWidget->cookiesTable->setModel(m_proxyModel); + cookieWidget->cookiesTable->setAlternatingRowColors(true); + cookieWidget->cookiesTable->setTextElideMode(Qt::ElideMiddle); + cookieWidget->cookiesTable->setShowGrid(false); + cookieWidget->cookiesTable->setSortingEnabled(true); + + // Fixing header dimension + QHeaderView *headerView = cookieWidget->cookiesTable->horizontalHeader(); + headerView->setResizeMode(QHeaderView::Stretch); +} + + +QSize CookiesDialog::sizeHint() const +{ + QRect desktopRect = QApplication::desktop()->screenGeometry(); + QSize size = desktopRect.size() * 0.8; + return size; +} diff --git a/src/cookiedialog.h b/src/cookiedialog.h new file mode 100644 index 00000000..e1b17356 --- /dev/null +++ b/src/cookiedialog.h @@ -0,0 +1,79 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + + +#ifndef COOKIEDIALOG_H +#define COOKIEDIALOG_H + +// Local Includes +#include "cookiejar.h" + +// KDE Includes +#include <KDialog> + +// Qt Includes +#include <QtCore/QStringList> +#include <QtCore/QAbstractItemModel> + +#include <QtGui/QTableView> +#include <QtGui/QSortFilterProxyModel> + +#include <QtNetwork/QNetworkCookieJar> + + +class CookieModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + explicit CookieModel(CookieJar *jar, QObject *parent = 0); + + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + +private slots: + void cookiesChanged(); + +private: + CookieJar *m_cookieJar; +}; + + + +// ----------------------------------------------------------------------------------------------------------------- + + +class CookiesDialog : public KDialog +{ + Q_OBJECT + +public: + explicit CookiesDialog(CookieJar *cookieJar, QWidget *parent = 0); + + QSize sizeHint() const; + +private: + QSortFilterProxyModel *m_proxyModel; +}; + +#endif diff --git a/src/cookieexceptiondialog.cpp b/src/cookieexceptiondialog.cpp new file mode 100644 index 00000000..b4ad555f --- /dev/null +++ b/src/cookieexceptiondialog.cpp @@ -0,0 +1,270 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + +// Self Includes +#include "cookieexceptiondialog.h" +#include "cookieexceptiondialog.moc" + +// Local Includes + +// Qt Includes +#include <QtGui/QSortFilterProxyModel> + + +CookieExceptionsModel::CookieExceptionsModel(CookieJar *cookiejar, QObject *parent) + : QAbstractTableModel(parent) + , m_cookieJar(cookiejar) +{ + m_allowedCookies = m_cookieJar->allowedCookies(); + m_blockedCookies = m_cookieJar->blockedCookies(); + m_sessionCookies = m_cookieJar->allowForSessionCookies(); +} + + +QVariant CookieExceptionsModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (role == Qt::SizeHintRole) + { + QFont font; + font.setPointSize(10); + QFontMetrics fm(font); + int height = fm.height() + fm.height() / 3; + int width = fm.width(headerData(section, orientation, Qt::DisplayRole).toString()); + return QSize(width, height); + } + + if (orientation == Qt::Horizontal + && role == Qt::DisplayRole) + { + switch (section) + { + case 0: + return i18n("Website"); + case 1: + return i18n("Status"); + } + } + return QAbstractTableModel::headerData(section, orientation, role); +} + + +QVariant CookieExceptionsModel::data(const QModelIndex &index, int role) const +{ + if (index.row() < 0 || index.row() >= rowCount()) + return QVariant(); + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + { + int row = index.row(); + if (row < m_allowedCookies.count()) + { + switch (index.column()) + { + case 0: + return m_allowedCookies.at(row); + case 1: + return i18n("Allow"); + } + } + row = row - m_allowedCookies.count(); + if (row < m_blockedCookies.count()) + { + switch (index.column()) + { + case 0: + return m_blockedCookies.at(row); + case 1: + return i18n("Block"); + } + } + row = row - m_blockedCookies.count(); + if (row < m_sessionCookies.count()) + { + switch (index.column()) + { + case 0: + return m_sessionCookies.at(row); + case 1: + return i18n("Allow For Session"); + } + } + } + case Qt::FontRole: + { + QFont font; + font.setPointSize(10); + return font; + } + } + return QVariant(); +} + + +int CookieExceptionsModel::columnCount(const QModelIndex &parent) const +{ + return (parent.isValid()) ? 0 : 2; +} + + +int CookieExceptionsModel::rowCount(const QModelIndex &parent) const +{ + return (parent.isValid() || !m_cookieJar) ? 0 : m_allowedCookies.count() + m_blockedCookies.count() + m_sessionCookies.count(); +} + + +bool CookieExceptionsModel::removeRows(int row, int count, const QModelIndex &parent) +{ + if (parent.isValid() || !m_cookieJar) + return false; + + int lastRow = row + count - 1; + beginRemoveRows(parent, row, lastRow); + for (int i = lastRow; i >= row; --i) + { + if (i < m_allowedCookies.count()) + { + m_allowedCookies.removeAt(row); + continue; + } + i = i - m_allowedCookies.count(); + if (i < m_blockedCookies.count()) + { + m_blockedCookies.removeAt(row); + continue; + } + i = i - m_blockedCookies.count(); + if (i < m_sessionCookies.count()) + { + m_sessionCookies.removeAt(row); + continue; + } + } + m_cookieJar->setAllowedCookies(m_allowedCookies); + m_cookieJar->setBlockedCookies(m_blockedCookies); + m_cookieJar->setAllowForSessionCookies(m_sessionCookies); + endRemoveRows(); + return true; +} + + + + +// ---------------------------------------------------------------------------------------------------------------- + + +// Qt Includes +#include <QtCore/QRect> +#include <QtCore/QSize> + +#include <QtGui/QDesktopWidget> +#include <QtGui/QHeaderView> + + +CookiesExceptionsDialog::CookiesExceptionsDialog(CookieJar *cookieJar, QWidget *parent) + : KDialog(parent) + , m_cookieJar(cookieJar) + , m_exceptionsWidget(new Ui::CookiesExceptionsWidget) +{ + setWindowFlags(Qt::Sheet); + setCaption("Cookies Exceptions"); + setButtons( KDialog::Close ); + + QWidget *widget = new QWidget(this); + m_exceptionsWidget->setupUi(widget); + setMainWidget(widget); + + connect(m_exceptionsWidget->removeButton, SIGNAL(clicked()), m_exceptionsWidget->exceptionTable, SLOT(removeOne())); + connect(m_exceptionsWidget->removeAllButton, SIGNAL(clicked()), m_exceptionsWidget->exceptionTable, SLOT(removeAll())); + + m_exceptionsWidget->exceptionTable->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + m_exceptionsWidget->exceptionTable->verticalHeader()->hide(); + m_exceptionsWidget->exceptionTable->setSelectionBehavior(QAbstractItemView::SelectRows); + m_exceptionsWidget->exceptionTable->setAlternatingRowColors(true); + m_exceptionsWidget->exceptionTable->setTextElideMode(Qt::ElideMiddle); + m_exceptionsWidget->exceptionTable->setShowGrid(false); + m_exceptionsWidget->exceptionTable->setSortingEnabled(true); + m_exceptionsModel = new CookieExceptionsModel(cookieJar, this); + m_proxyModel = new QSortFilterProxyModel(this); + m_proxyModel->setSourceModel(m_exceptionsModel); + + connect(m_exceptionsWidget->search, SIGNAL(textChanged(QString)), m_proxyModel, SLOT(setFilterFixedString(QString))); + + m_exceptionsWidget->exceptionTable->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + m_exceptionsWidget->exceptionTable->setModel(m_proxyModel); + + connect(m_exceptionsWidget->domainLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(textChanged(const QString &))); + connect(m_exceptionsWidget->blockButton, SIGNAL(clicked()), this, SLOT(block())); + connect(m_exceptionsWidget->allowButton, SIGNAL(clicked()), this, SLOT(allow())); + connect(m_exceptionsWidget->allowForSessionButton, SIGNAL(clicked()), this, SLOT(allowForSession())); + + // Fixing header dimension + QHeaderView *headerView = m_exceptionsWidget->exceptionTable->horizontalHeader(); + headerView->setResizeMode(QHeaderView::Stretch); +} + + +void CookiesExceptionsDialog::textChanged(const QString &text) +{ + bool enabled = !text.isEmpty(); + m_exceptionsWidget->blockButton->setEnabled(enabled); + m_exceptionsWidget->allowButton->setEnabled(enabled); + m_exceptionsWidget->allowForSessionButton->setEnabled(enabled); +} + + +void CookiesExceptionsDialog::block() +{ + if (m_exceptionsWidget->domainLineEdit->text().isEmpty()) + return; + m_exceptionsModel->m_blockedCookies.append(m_exceptionsWidget->domainLineEdit->text()); + m_cookieJar->setBlockedCookies(m_exceptionsModel->m_blockedCookies); + m_exceptionsModel->reset(); +} + + +void CookiesExceptionsDialog::allow() +{ + if (m_exceptionsWidget->domainLineEdit->text().isEmpty()) + return; + m_exceptionsModel->m_allowedCookies.append(m_exceptionsWidget->domainLineEdit->text()); + m_cookieJar->setAllowedCookies(m_exceptionsModel->m_allowedCookies); + m_exceptionsModel->reset(); +} + + +void CookiesExceptionsDialog::allowForSession() +{ + if (m_exceptionsWidget->domainLineEdit->text().isEmpty()) + return; + m_exceptionsModel->m_sessionCookies.append(m_exceptionsWidget->domainLineEdit->text()); + m_cookieJar->setAllowForSessionCookies(m_exceptionsModel->m_sessionCookies); + m_exceptionsModel->reset(); +} + + +QSize CookiesExceptionsDialog::sizeHint() const +{ + QRect desktopRect = QApplication::desktop()->screenGeometry(); + QSize size = desktopRect.size() * 0.6; + return size; +} diff --git a/src/cookieexceptiondialog.h b/src/cookieexceptiondialog.h new file mode 100644 index 00000000..eb0608d1 --- /dev/null +++ b/src/cookieexceptiondialog.h @@ -0,0 +1,94 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + +#ifndef COOKIEEXCEPTIONDIALOG_H +#define COOKIEEXCEPTIONDIALOG_H + + +// Local Includes +#include "cookiejar.h" + +// Qt Includes +#include <QtCore/QAbstractTableModel> + +// Forward Declarations +class QString; +class QStringList; +class QModelIndex; +class QVariant; + +class CookieExceptionsModel : public QAbstractTableModel +{ + Q_OBJECT + friend class CookiesExceptionsDialog; + +public: + explicit CookieExceptionsModel(CookieJar *cookieJar, QObject *parent = 0); + + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + +private: + CookieJar *m_cookieJar; + + // Domains we allow, Domains we block, Domains we allow for this session + QStringList m_allowedCookies; + QStringList m_blockedCookies; + QStringList m_sessionCookies; +}; + + +// ----------------------------------------------------------------------------------------------- + + +// Ui Includes +#include "ui_cookiesexceptions.h" + +//Forward Declarations +class QSortFilterProxyModel; + + +class CookiesExceptionsDialog : public KDialog +{ + Q_OBJECT + +public: + explicit CookiesExceptionsDialog(CookieJar *cookieJar, QWidget *parent = 0); + + QSize sizeHint() const; + +private slots: + void block(); + void allow(); + void allowForSession(); + void textChanged(const QString &text); + +private: + CookieExceptionsModel *m_exceptionsModel; + QSortFilterProxyModel *m_proxyModel; + CookieJar *m_cookieJar; + + Ui::CookiesExceptionsWidget *m_exceptionsWidget; +}; + +#endif diff --git a/src/cookiejar.cpp b/src/cookiejar.cpp index fd823553..4e4ef2c2 100644 --- a/src/cookiejar.cpp +++ b/src/cookiejar.cpp @@ -49,54 +49,37 @@ static const unsigned int JAR_VERSION = 23; +static const char cookieFileName[] = "cookies"; -QDataStream &operator<<(QDataStream &stream, const QList<QNetworkCookie> &list) -{ - stream << JAR_VERSION; - stream << quint32(list.size()); - for (int i = 0; i < list.size(); ++i) - stream << list.at(i).toRawForm(); - return stream; -} - -QDataStream &operator>>(QDataStream &stream, QList<QNetworkCookie> &list) +CookieJar::CookieJar(QObject *parent) + : QNetworkCookieJar(parent) + , m_acceptCookies(AcceptOnlyFromSitesNavigatedTo) { - list.clear(); - - quint32 version; - stream >> version; + // load cookies and exceptions + QString filepath = KStandardDirs::locateLocal("appdata", cookieFileName); + KConfig iniconfig(filepath); - if (version != JAR_VERSION) - return stream; + KConfigGroup inigroup1 = iniconfig.group("cookielist"); - quint32 count; - stream >> count; - for (quint32 i = 0; i < count; ++i) + QStringList cookieStringList = inigroup1.readEntry( QString("cookies"), QStringList() ); + QList<QNetworkCookie> cookieNetworkList; + foreach( QString str, cookieStringList ) { - QByteArray value; - stream >> value; - QList<QNetworkCookie> newCookies = QNetworkCookie::parseCookies(value); - if (newCookies.count() == 0 && value.length() != 0) - { - kWarning() << "CookieJar: Unable to parse saved cookie:" << value; - } - for (int j = 0; j < newCookies.count(); ++j) - list.append(newCookies.at(j)); - if (stream.atEnd()) - break; + cookieNetworkList << QNetworkCookie( str.toLocal8Bit() ); } - return stream; -} + setAllCookies( cookieNetworkList ); + KConfigGroup inigroup2 = iniconfig.group("exceptions"); + m_exceptions_block = inigroup2.readEntry( QString("block") , QStringList() ); + m_exceptions_allow = inigroup2.readEntry( QString("allow"), QStringList() ); + m_exceptions_allowForSession = inigroup2.readEntry( QString("allowForSession"), QStringList() ); -CookieJar::CookieJar(QObject *parent) - : QNetworkCookieJar(parent) - , m_loaded(false) - , m_saveTimer(new AutoSaver(this)) - , m_acceptCookies(AcceptOnlyFromSitesNavigatedTo) -{ - load(); + qSort( m_exceptions_block.begin(), m_exceptions_block.end() ); + qSort( m_exceptions_allow.begin(), m_exceptions_allow.end() ); + qSort( m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end() ); + + loadSettings(); } @@ -104,39 +87,18 @@ CookieJar::~CookieJar() { if (m_keepCookies == KeepUntilExit) clear(); - m_saveTimer->saveIfNeccessary(); + + save(); } void CookieJar::clear() { setAllCookies(QList<QNetworkCookie>()); - m_saveTimer->changeOccurred(); - emit cookiesChanged(); -} - - -void CookieJar::load() -{ - if (m_loaded) - return; - - // load cookies and exceptions - QString filepath = KStandardDirs::locateLocal("appdata", "cookies.ini"); - qRegisterMetaTypeStreamOperators<QList<QNetworkCookie> >("QList<QNetworkCookie>"); - QSettings cookieSettings(filepath, QSettings::IniFormat); - setAllCookies(qvariant_cast<QList<QNetworkCookie> >(cookieSettings.value(QLatin1String("cookies")))); - cookieSettings.beginGroup(QLatin1String("Exceptions")); - m_exceptions_block = cookieSettings.value(QLatin1String("block")).toStringList(); - m_exceptions_allow = cookieSettings.value(QLatin1String("allow")).toStringList(); - m_exceptions_allowForSession = cookieSettings.value(QLatin1String("allowForSession")).toStringList(); - qSort(m_exceptions_block.begin(), m_exceptions_block.end()); - qSort(m_exceptions_allow.begin(), m_exceptions_allow.end()); - qSort(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end()); - - loadSettings(); save(); + + emit cookiesChanged(); } @@ -175,19 +137,18 @@ void CookieJar::loadSettings() break; } - m_loaded = true; emit cookiesChanged(); } void CookieJar::save() { - if (!m_loaded) - return; purgeOldCookies(); - QString filepath = KStandardDirs::locateLocal("appdata", "cookies.ini"); - QSettings cookieSettings(filepath, QSettings::IniFormat); + QString filepath = KStandardDirs::locateLocal("appdata", cookieFileName); + KConfig iniconfig( filepath ); + + KConfigGroup inigroup1 = iniconfig.group("cookielist"); QList<QNetworkCookie> cookies = allCookies(); for (int i = cookies.count() - 1; i >= 0; --i) { @@ -195,11 +156,17 @@ void CookieJar::save() cookies.removeAt(i); } - cookieSettings.setValue(QLatin1String("cookies"), qVariantFromValue<QList<QNetworkCookie> >(cookies)); - cookieSettings.beginGroup(QLatin1String("Exceptions")); - cookieSettings.setValue(QLatin1String("block"), m_exceptions_block); - cookieSettings.setValue(QLatin1String("allow"), m_exceptions_allow); - cookieSettings.setValue(QLatin1String("allowForSession"), m_exceptions_allowForSession); + QStringList cookieStringList; + foreach( QNetworkCookie cookie, cookies ) + { + cookieStringList << QString( cookie.toRawForm() ); + } + inigroup1.writeEntry( QString("cookies"), cookieStringList ); + + KConfigGroup inigroup2 = iniconfig.group("exceptions"); + inigroup2.writeEntry( QString("block"), m_exceptions_block ); + inigroup2.writeEntry( QString("allow"), m_exceptions_allow ); + inigroup2.writeEntry( QString("allowForSession"), m_exceptions_allowForSession ); // save cookie settings int n; @@ -251,16 +218,13 @@ void CookieJar::purgeOldCookies() if (oldCount == cookies.count()) return; setAllCookies(cookies); + emit cookiesChanged(); } QList<QNetworkCookie> CookieJar::cookiesForUrl(const QUrl &url) const { - CookieJar *that = const_cast<CookieJar*>(this); - if (!m_loaded) - that->load(); - QWebSettings *globalSettings = QWebSettings::globalSettings(); if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { @@ -274,9 +238,6 @@ QList<QNetworkCookie> CookieJar::cookiesForUrl(const QUrl &url) const bool CookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url) { - if (!m_loaded) - load(); - QWebSettings *globalSettings = QWebSettings::globalSettings(); if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) return false; @@ -318,17 +279,13 @@ bool CookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const setAllCookies(cookies); addedCookies = true; } -#if 0 - else - kWarning() << "setCookiesFromUrl failed" << url << cookieList.value(0).toRawForm(); -#endif } } } if (addedCookies) { - m_saveTimer->changeOccurred(); + save(); emit cookiesChanged(); } return addedCookies; @@ -337,510 +294,76 @@ bool CookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const CookieJar::AcceptPolicy CookieJar::acceptPolicy() const { - if (!m_loaded) - (const_cast<CookieJar*>(this))->load(); return m_acceptCookies; } void CookieJar::setAcceptPolicy(AcceptPolicy policy) { - if (!m_loaded) - load(); if (policy == m_acceptCookies) return; m_acceptCookies = policy; - m_saveTimer->changeOccurred(); + + save(); } CookieJar::KeepPolicy CookieJar::keepPolicy() const { - if (!m_loaded) - (const_cast<CookieJar*>(this))->load(); return m_keepCookies; } void CookieJar::setKeepPolicy(KeepPolicy policy) { - if (!m_loaded) - load(); if (policy == m_keepCookies) return; m_keepCookies = policy; - m_saveTimer->changeOccurred(); + + save(); } QStringList CookieJar::blockedCookies() const { - if (!m_loaded) - (const_cast<CookieJar*>(this))->load(); return m_exceptions_block; } QStringList CookieJar::allowedCookies() const { - if (!m_loaded) - (const_cast<CookieJar*>(this))->load(); return m_exceptions_allow; } QStringList CookieJar::allowForSessionCookies() const { - if (!m_loaded) - (const_cast<CookieJar*>(this))->load(); return m_exceptions_allowForSession; } void CookieJar::setBlockedCookies(const QStringList &list) { - if (!m_loaded) - load(); m_exceptions_block = list; qSort(m_exceptions_block.begin(), m_exceptions_block.end()); - m_saveTimer->changeOccurred(); + + save(); } void CookieJar::setAllowedCookies(const QStringList &list) { - if (!m_loaded) - load(); m_exceptions_allow = list; qSort(m_exceptions_allow.begin(), m_exceptions_allow.end()); - m_saveTimer->changeOccurred(); + + save(); } void CookieJar::setAllowForSessionCookies(const QStringList &list) { - if (!m_loaded) - load(); m_exceptions_allowForSession = list; qSort(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end()); - m_saveTimer->changeOccurred(); -} - - -// ------------------------------------------------------------------------------------------- - - -CookieModel::CookieModel(CookieJar *cookieJar, QObject *parent) - : QAbstractTableModel(parent) - , m_cookieJar(cookieJar) -{ - connect(m_cookieJar, SIGNAL(cookiesChanged()), this, SLOT(cookiesChanged())); - m_cookieJar->load(); -} - - -QVariant CookieModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - if (role == Qt::SizeHintRole) - { - QFont font; - font.setPointSize(10); - QFontMetrics fm(font); - int height = fm.height() + fm.height() / 3; - int width = fm.width(headerData(section, orientation, Qt::DisplayRole).toString()); - return QSize(width, height); - } - - if (orientation == Qt::Horizontal) - { - if (role != Qt::DisplayRole) - return QVariant(); - - switch (section) - { - case 0: - return i18n("Website"); - case 1: - return i18n("Name"); - case 2: - return i18n("Path"); - case 3: - return i18n("Secure"); - case 4: - return i18n("Expires"); - case 5: - return i18n("Contents"); - default: - return QVariant(); - } - } - return QAbstractTableModel::headerData(section, orientation, role); -} - - -QVariant CookieModel::data(const QModelIndex &index, int role) const -{ - QList<QNetworkCookie> lst; - if (m_cookieJar) - lst = m_cookieJar->allCookies(); - if (index.row() < 0 || index.row() >= lst.size()) - return QVariant(); - - switch (role) - { - case Qt::DisplayRole: - case Qt::EditRole: - { - QNetworkCookie cookie = lst.at(index.row()); - switch (index.column()) - { - case 0: - return cookie.domain(); - case 1: - return cookie.name(); - case 2: - return cookie.path(); - case 3: - return cookie.isSecure(); - case 4: - return cookie.expirationDate(); - case 5: - return cookie.value(); - } - } - case Qt::FontRole: - { - QFont font; - font.setPointSize(10); - return font; - } - } - - return QVariant(); -} - - -int CookieModel::columnCount(const QModelIndex &parent) const -{ - return (parent.isValid()) ? 0 : 6; -} - - -int CookieModel::rowCount(const QModelIndex &parent) const -{ - return (parent.isValid() || !m_cookieJar) ? 0 : m_cookieJar->allCookies().count(); -} - - -bool CookieModel::removeRows(int row, int count, const QModelIndex &parent) -{ - if (parent.isValid() || !m_cookieJar) - return false; - int lastRow = row + count - 1; - beginRemoveRows(parent, row, lastRow); - QList<QNetworkCookie> lst = m_cookieJar->allCookies(); - for (int i = lastRow; i >= row; --i) - { - lst.removeAt(i); - } - m_cookieJar->setAllCookies(lst); - endRemoveRows(); - return true; -} - - -void CookieModel::cookiesChanged() -{ - reset(); -} - - -// ------------------------------------------------------------------------------------------------ - - -CookiesDialog::CookiesDialog(CookieJar *cookieJar, QWidget *parent) - : QDialog(parent) -{ - setupUi(this); - setWindowFlags(Qt::Sheet); - CookieModel *model = new CookieModel(cookieJar, this); - m_proxyModel = new QSortFilterProxyModel(this); - connect(search, SIGNAL(textChanged(QString)), - m_proxyModel, SLOT(setFilterFixedString(QString))); - connect(removeButton, SIGNAL(clicked()), cookiesTable, SLOT(removeOne())); - connect(removeAllButton, SIGNAL(clicked()), cookiesTable, SLOT(removeAll())); - m_proxyModel->setSourceModel(model); - cookiesTable->verticalHeader()->hide(); - cookiesTable->setSelectionBehavior(QAbstractItemView::SelectRows); - cookiesTable->setModel(m_proxyModel); - cookiesTable->setAlternatingRowColors(true); - cookiesTable->setTextElideMode(Qt::ElideMiddle); - cookiesTable->setShowGrid(false); - cookiesTable->setSortingEnabled(true); - QFont f = font(); - f.setPointSize(10); - QFontMetrics fm(f); - int height = fm.height() + fm.height() / 3; - cookiesTable->verticalHeader()->setDefaultSectionSize(height); - cookiesTable->verticalHeader()->setMinimumSectionSize(-1); - for (int i = 0; i < model->columnCount(); ++i) - { - int header = cookiesTable->horizontalHeader()->sectionSizeHint(i); - switch (i) - { - case 0: - header = fm.width(QLatin1String("averagehost.domain.com")); - break; - case 1: - header = fm.width(QLatin1String("_session_id")); - break; - case 4: - header = fm.width(QDateTime::currentDateTime().toString(Qt::LocalDate)); - break; - } - int buffer = fm.width(QLatin1String("xx")); - header += buffer; - cookiesTable->horizontalHeader()->resizeSection(i, header); - } - cookiesTable->horizontalHeader()->setStretchLastSection(true); -} - - -// --------------------------------------------------------------------------------------------------- - - -CookieExceptionsModel::CookieExceptionsModel(CookieJar *cookiejar, QObject *parent) - : QAbstractTableModel(parent) - , m_cookieJar(cookiejar) -{ - m_allowedCookies = m_cookieJar->allowedCookies(); - m_blockedCookies = m_cookieJar->blockedCookies(); - m_sessionCookies = m_cookieJar->allowForSessionCookies(); -} - - -QVariant CookieExceptionsModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - if (role == Qt::SizeHintRole) - { - QFont font; - font.setPointSize(10); - QFontMetrics fm(font); - int height = fm.height() + fm.height() / 3; - int width = fm.width(headerData(section, orientation, Qt::DisplayRole).toString()); - return QSize(width, height); - } - - if (orientation == Qt::Horizontal - && role == Qt::DisplayRole) - { - switch (section) - { - case 0: - return i18n("Website"); - case 1: - return i18n("Status"); - } - } - return QAbstractTableModel::headerData(section, orientation, role); -} - - -QVariant CookieExceptionsModel::data(const QModelIndex &index, int role) const -{ - if (index.row() < 0 || index.row() >= rowCount()) - return QVariant(); - - switch (role) - { - case Qt::DisplayRole: - case Qt::EditRole: - { - int row = index.row(); - if (row < m_allowedCookies.count()) - { - switch (index.column()) - { - case 0: - return m_allowedCookies.at(row); - case 1: - return i18n("Allow"); - } - } - row = row - m_allowedCookies.count(); - if (row < m_blockedCookies.count()) - { - switch (index.column()) - { - case 0: - return m_blockedCookies.at(row); - case 1: - return i18n("Block"); - } - } - row = row - m_blockedCookies.count(); - if (row < m_sessionCookies.count()) - { - switch (index.column()) - { - case 0: - return m_sessionCookies.at(row); - case 1: - return i18n("Allow For Session"); - } - } - } - case Qt::FontRole: - { - QFont font; - font.setPointSize(10); - return font; - } - } - return QVariant(); -} - - -int CookieExceptionsModel::columnCount(const QModelIndex &parent) const -{ - return (parent.isValid()) ? 0 : 2; -} - - -int CookieExceptionsModel::rowCount(const QModelIndex &parent) const -{ - return (parent.isValid() || !m_cookieJar) ? 0 : m_allowedCookies.count() + m_blockedCookies.count() + m_sessionCookies.count(); -} - - -bool CookieExceptionsModel::removeRows(int row, int count, const QModelIndex &parent) -{ - if (parent.isValid() || !m_cookieJar) - return false; - - int lastRow = row + count - 1; - beginRemoveRows(parent, row, lastRow); - for (int i = lastRow; i >= row; --i) - { - if (i < m_allowedCookies.count()) - { - m_allowedCookies.removeAt(row); - continue; - } - i = i - m_allowedCookies.count(); - if (i < m_blockedCookies.count()) - { - m_blockedCookies.removeAt(row); - continue; - } - i = i - m_blockedCookies.count(); - if (i < m_sessionCookies.count()) - { - m_sessionCookies.removeAt(row); - continue; - } - } - m_cookieJar->setAllowedCookies(m_allowedCookies); - m_cookieJar->setBlockedCookies(m_blockedCookies); - m_cookieJar->setAllowForSessionCookies(m_sessionCookies); - endRemoveRows(); - return true; -} - - -// ---------------------------------------------------------------------------------------------------------------- - - -CookiesExceptionsDialog::CookiesExceptionsDialog(CookieJar *cookieJar, QWidget *parent) - : QDialog(parent) - , m_cookieJar(cookieJar) -{ - setupUi(this); - setWindowFlags(Qt::Sheet); - connect(removeButton, SIGNAL(clicked()), exceptionTable, SLOT(removeOne())); - connect(removeAllButton, SIGNAL(clicked()), exceptionTable, SLOT(removeAll())); - exceptionTable->verticalHeader()->hide(); - exceptionTable->setSelectionBehavior(QAbstractItemView::SelectRows); - exceptionTable->setAlternatingRowColors(true); - exceptionTable->setTextElideMode(Qt::ElideMiddle); - exceptionTable->setShowGrid(false); - exceptionTable->setSortingEnabled(true); - m_exceptionsModel = new CookieExceptionsModel(cookieJar, this); - m_proxyModel = new QSortFilterProxyModel(this); - m_proxyModel->setSourceModel(m_exceptionsModel); - connect(search, SIGNAL(textChanged(QString)), - m_proxyModel, SLOT(setFilterFixedString(QString))); - exceptionTable->setModel(m_proxyModel); - - CookieModel *cookieModel = new CookieModel(cookieJar, this); - domainLineEdit->setCompleter(new QCompleter(cookieModel, domainLineEdit)); - - connect(domainLineEdit, SIGNAL(textChanged(const QString &)), - this, SLOT(textChanged(const QString &))); - connect(blockButton, SIGNAL(clicked()), this, SLOT(block())); - connect(allowButton, SIGNAL(clicked()), this, SLOT(allow())); - connect(allowForSessionButton, SIGNAL(clicked()), this, SLOT(allowForSession())); - - QFont f = font(); - f.setPointSize(10); - QFontMetrics fm(f); - int height = fm.height() + fm.height() / 3; - exceptionTable->verticalHeader()->setDefaultSectionSize(height); - exceptionTable->verticalHeader()->setMinimumSectionSize(-1); - for (int i = 0; i < m_exceptionsModel->columnCount(); ++i) - { - int header = exceptionTable->horizontalHeader()->sectionSizeHint(i); - switch (i) - { - case 0: - header = fm.width(QLatin1String("averagebiglonghost.domain.com")); - break; - case 1: - header = fm.width(QLatin1String("Allow For Session")); - break; - } - int buffer = fm.width(QLatin1String("xx")); - header += buffer; - exceptionTable->horizontalHeader()->resizeSection(i, header); - } -} - - -void CookiesExceptionsDialog::textChanged(const QString &text) -{ - bool enabled = !text.isEmpty(); - blockButton->setEnabled(enabled); - allowButton->setEnabled(enabled); - allowForSessionButton->setEnabled(enabled); -} - - -void CookiesExceptionsDialog::block() -{ - if (domainLineEdit->text().isEmpty()) - return; - m_exceptionsModel->m_blockedCookies.append(domainLineEdit->text()); - m_cookieJar->setBlockedCookies(m_exceptionsModel->m_blockedCookies); - m_exceptionsModel->reset(); -} - - -void CookiesExceptionsDialog::allow() -{ - if (domainLineEdit->text().isEmpty()) - return; - m_exceptionsModel->m_allowedCookies.append(domainLineEdit->text()); - m_cookieJar->setAllowedCookies(m_exceptionsModel->m_allowedCookies); - m_exceptionsModel->reset(); -} - - -void CookiesExceptionsDialog::allowForSession() -{ - if (domainLineEdit->text().isEmpty()) - return; - m_exceptionsModel->m_sessionCookies.append(domainLineEdit->text()); - m_cookieJar->setAllowForSessionCookies(m_exceptionsModel->m_sessionCookies); - m_exceptionsModel->reset(); + save(); } diff --git a/src/cookiejar.h b/src/cookiejar.h index 03802df1..08c65218 100644 --- a/src/cookiejar.h +++ b/src/cookiejar.h @@ -25,14 +25,10 @@ // Qt Includes -#include <QNetworkCookieJar> -#include <QAbstractItemModel> -#include <QStringList> -#include <QTableView> +#include <QtCore/QStringList> +#include <QtNetwork/QNetworkCookieJar> // Forward Declarations -class QSortFilterProxyModel; -class QKeyEvent; class AutoSaver; class QUrl; @@ -41,11 +37,13 @@ class CookieJar : public QNetworkCookieJar { friend class CookieModel; Q_OBJECT + Q_PROPERTY(AcceptPolicy acceptPolicy READ acceptPolicy WRITE setAcceptPolicy) Q_PROPERTY(KeepPolicy keepPolicy READ keepPolicy WRITE setKeepPolicy) Q_PROPERTY(QStringList blockedCookies READ blockedCookies WRITE setBlockedCookies) Q_PROPERTY(QStringList allowedCookies READ allowedCookies WRITE setAllowedCookies) Q_PROPERTY(QStringList allowForSessionCookies READ allowForSessionCookies WRITE setAllowForSessionCookies) + Q_ENUMS(KeepPolicy) Q_ENUMS(AcceptPolicy) @@ -96,9 +94,6 @@ private slots: private: void purgeOldCookies(); - void load(); - bool m_loaded; - AutoSaver *m_saveTimer; AcceptPolicy m_acceptCookies; KeepPolicy m_keepCookies; @@ -108,98 +103,4 @@ private: QStringList m_exceptions_allowForSession; }; - -// ------------------------------------------------------------------------------------------------------------- - - -class CookieModel : public QAbstractTableModel -{ - Q_OBJECT - -public: - explicit CookieModel(CookieJar *jar, QObject *parent = 0); - - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - -private slots: - void cookiesChanged(); - -private: - CookieJar *m_cookieJar; -}; - - -// ---------------------------------------------------------------------------------------------------------------------- - - -#include "ui_cookies.h" - -class CookiesDialog : public QDialog, public Ui_CookiesDialog -{ - Q_OBJECT - -public: - explicit CookiesDialog(CookieJar *cookieJar, QWidget *parent = 0); - -private: - QSortFilterProxyModel *m_proxyModel; -}; - - -// ---------------------------------------------------------------------------------------------------------------------- - - -class CookieExceptionsModel : public QAbstractTableModel -{ - Q_OBJECT - friend class CookiesExceptionsDialog; - -public: - explicit CookieExceptionsModel(CookieJar *cookieJar, QObject *parent = 0); - - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - -private: - CookieJar *m_cookieJar; - - // Domains we allow, Domains we block, Domains we allow for this session - QStringList m_allowedCookies; - QStringList m_blockedCookies; - QStringList m_sessionCookies; -}; - - -// ----------------------------------------------------------------------------------------------------------------- - - -#include "ui_cookiesexceptions.h" - -class CookiesExceptionsDialog : public QDialog, public Ui_CookiesExceptionsDialog -{ - Q_OBJECT - -public: - explicit CookiesExceptionsDialog(CookieJar *cookieJar, QWidget *parent = 0); - -private slots: - void block(); - void allow(); - void allowForSession(); - void textChanged(const QString &text); - -private: - CookieExceptionsModel *m_exceptionsModel; - QSortFilterProxyModel *m_proxyModel; - CookieJar *m_cookieJar; -}; - #endif // COOKIEJAR_H - diff --git a/src/cookies.ui b/src/cookies.ui index 49ad3a96..ae1c4a2b 100644 --- a/src/cookies.ui +++ b/src/cookies.ui @@ -1,39 +1,53 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>CookiesDialog</class> - <widget class="QDialog" name="CookiesDialog"> + <class>CookiesWidget</class> + <widget class="QWidget" name="CookiesWidget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>550</width> - <height>370</height> + <width>859</width> + <height>478</height> </rect> </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="windowTitle"> - <string>Cookies</string> + <string>Form</string> </property> - <layout class="QGridLayout"> - <item row="0" column="0"> - <spacer> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>252</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item row="0" column="1"> - <widget class="KLineEdit" name="search"/> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Search:</string> + </property> + </widget> + </item> + <item> + <widget class="KLineEdit" name="search"> + <property name="showClearButton" stdset="0"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> </item> - <item row="1" column="0" colspan="2"> + <item> <widget class="EditTableView" name="cookiesTable"/> </item> - <item row="2" column="0" colspan="2"> + <item> <layout class="QHBoxLayout"> <item> <widget class="QPushButton" name="removeButton"> @@ -62,13 +76,6 @@ </property> </spacer> </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="standardButtons"> - <set>QDialogButtonBox::Ok</set> - </property> - </widget> - </item> </layout> </item> </layout> @@ -86,22 +93,5 @@ </customwidget> </customwidgets> <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>CookiesDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel"> - <x>472</x> - <y>329</y> - </hint> - <hint type="destinationlabel"> - <x>461</x> - <y>356</y> - </hint> - </hints> - </connection> - </connections> + <connections/> </ui> diff --git a/src/cookiesexceptions.ui b/src/cookiesexceptions.ui index de59eee0..3e28b42a 100644 --- a/src/cookiesexceptions.ui +++ b/src/cookiesexceptions.ui @@ -1,46 +1,51 @@ -<ui version="4.0" > - <class>CookiesExceptionsDialog</class> - <widget class="QDialog" name="CookiesExceptionsDialog" > - <property name="geometry" > +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>CookiesExceptionsWidget</class> + <widget class="QWidget" name="CookiesExceptionsWidget"> + <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>466</width> - <height>446</height> + <width>1000</width> + <height>400</height> </rect> </property> - <property name="windowTitle" > - <string>Cookie Exceptions</string> + <property name="windowTitle"> + <string>Form</string> </property> - <layout class="QVBoxLayout" > + <layout class="QVBoxLayout" name="verticalLayout_2"> <item> - <widget class="QGroupBox" name="newExceptionGroupBox" > - <property name="title" > + <widget class="QGroupBox" name="CookiesExceptionWidget"> + <property name="title"> <string>New Exception</string> </property> - <layout class="QGridLayout" > - <item row="0" column="0" > - <layout class="QHBoxLayout" > + <layout class="QGridLayout"> + <item row="0" column="0"> + <layout class="QHBoxLayout" name="_2"> <item> - <widget class="QLabel" name="label" > - <property name="text" > + <widget class="QLabel" name="label"> + <property name="text"> <string>Domain:</string> </property> </widget> </item> <item> - <widget class="KLineEdit" name="domainLineEdit" /> + <widget class="KLineEdit" name="domainLineEdit"> + <property name="showClearButton" stdset="0"> + <bool>true</bool> + </property> + </widget> </item> </layout> </item> - <item row="1" column="0" > - <layout class="QHBoxLayout" > + <item row="1" column="0"> + <layout class="QHBoxLayout" name="_3"> <item> <spacer> - <property name="orientation" > + <property name="orientation"> <enum>Qt::Horizontal</enum> </property> - <property name="sizeHint" stdset="0" > + <property name="sizeHint" stdset="0"> <size> <width>81</width> <height>25</height> @@ -49,31 +54,31 @@ </spacer> </item> <item> - <widget class="QPushButton" name="blockButton" > - <property name="enabled" > + <widget class="QPushButton" name="blockButton"> + <property name="enabled"> <bool>false</bool> </property> - <property name="text" > + <property name="text"> <string>Block</string> </property> </widget> </item> <item> - <widget class="QPushButton" name="allowForSessionButton" > - <property name="enabled" > + <widget class="QPushButton" name="allowForSessionButton"> + <property name="enabled"> <bool>false</bool> </property> - <property name="text" > + <property name="text"> <string>Allow For Session</string> </property> </widget> </item> <item> - <widget class="QPushButton" name="allowButton" > - <property name="enabled" > + <widget class="QPushButton" name="allowButton"> + <property name="enabled"> <bool>false</bool> </property> - <property name="text" > + <property name="text"> <string>Allow</string> </property> </widget> @@ -84,96 +89,86 @@ </widget> </item> <item> - <widget class="QGroupBox" name="ExceptionsGroupBox" > - <property name="title" > + <widget class="QGroupBox" name="ExceptionsGroupBox"> + <property name="title"> <string>Exceptions</string> </property> - <layout class="QGridLayout" > - <item row="0" column="0" colspan="3" > - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>252</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item row="0" column="3" > - <widget class="KLineEdit" name="search" /> - </item> - <item row="1" column="0" colspan="4" > - <widget class="EditTableView" name="exceptionTable" /> - </item> - <item row="2" column="0" > - <widget class="QPushButton" name="removeButton" > - <property name="text" > - <string>&Remove</string> - </property> - </widget> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Search:</string> + </property> + </widget> + </item> + <item> + <widget class="KLineEdit" name="search"> + <property name="showClearButton" stdset="0"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> </item> - <item row="2" column="1" > - <widget class="QPushButton" name="removeAllButton" > - <property name="text" > - <string>Remove &All</string> - </property> - </widget> + <item> + <widget class="EditTableView" name="exceptionTable"/> </item> - <item row="2" column="2" colspan="2" > - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QPushButton" name="removeButton"> + <property name="text"> + <string>&Remove</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeAllButton"> + <property name="text"> + <string>Remove &All</string> + </property> + </widget> + </item> + <item> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> </item> </layout> </widget> </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox" > - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons" > - <set>QDialogButtonBox::Ok</set> - </property> - </widget> - </item> </layout> </widget> <customwidgets> <customwidget> + <class>KLineEdit</class> + <extends>QLineEdit</extends> + <header>klineedit.h</header> + </customwidget> + <customwidget> <class>EditTableView</class> <extends>QTableView</extends> <header>edittableview.h</header> </customwidget> </customwidgets> <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>CookiesExceptionsDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel" > - <x>381</x> - <y>428</y> - </hint> - <hint type="destinationlabel" > - <x>336</x> - <y>443</y> - </hint> - </hints> - </connection> - </connections> + <connections/> </ui> diff --git a/src/download.cpp b/src/download.cpp index c365d3c5..2f98d5a4 100644 --- a/src/download.cpp +++ b/src/download.cpp @@ -21,7 +21,7 @@ * ============================================================ */ -// local Includes +// Self Includes #include "download.h" #include "download.moc" diff --git a/src/download.h b/src/download.h deleted file mode 100644 index 0502d500..00000000 --- a/src/download.h +++ /dev/null @@ -1,141 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2007 Lukas Appelhans <l.appelhans@gmx.de> -* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com> -* Copyright (C) 2009 by Domrachev Alexandr <alexandr.domrachev@gmail.com> -* -* -* 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, 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. -* -* ============================================================ */ - - -#ifndef DOWNLOAD_H -#define DOWNLOAD_H - -// Auto Includes -#include "rekonq.h" - -// KDE Includes -#include <KIO/FileCopyJob> - -// Qt Includes -#include <QtCore/QObject> - -// Forward Declarations -class KJob; - -namespace KIO -{ -class Job; -} - - -/** - * This class lets rekonq to download an object from the network. - * Creating a new object, you can continue downloading a file also - * when rekonq is closed. - * - */ -class Download : public QObject -{ - Q_OBJECT - -public: - enum DownloadType { Save, Open }; - - /** - * Class constructor. This is the unique method we need to - * use this class. In fact Download class needs to know just - * "where" catch the file to download and where it has to put it - * - * @param srcUrl the source url - * @param destUrl the destination url - * - */ - Download(const KUrl &srcUrl, const KUrl &destUrl, DownloadType type); - - /** - * class destructor - */ - ~Download(); - - KUrl srcUrl() const - { - return m_srcUrl; - } - KUrl destUrl() const - { - return m_destUrl; - } - DownloadType type() const - { - return m_type; - } - void cancel(); - -signals: - void downloadFinished(int errorCode); - -private slots: - void slotResult(KJob *job); - -private: - KIO::FileCopyJob *m_copyJob; - KUrl m_srcUrl; - KUrl m_destUrl; - KUrl m_destFile; - QByteArray m_data; - DownloadType m_type; -}; - - -// ---------------------- - - -class DownloadManager : public QObject -{ - Q_OBJECT - -public: - DownloadManager(); - ~DownloadManager(); - - /** - * @short Creates new download job. - * This method lets you to download a file from a remote source url - * to a local destination url. - * - * @param srcUrl the source url - * @param destUrl the destination url (default value is your default download destination setting) - * - */ - void newDownload(const KUrl &srcUrl, const KUrl &destUrl = KUrl()); - - const QList<Download *> &downloads() const; - -public slots: - void slotDownloadFinished(int errorCode); - -private: - KUrl downloadDestination(const QString &filename); - - QList<Download *> m_downloads; -}; - - -//-- - - -#endif diff --git a/src/edittableview.cpp b/src/edittableview.cpp index 8b9bb12d..9ecf8958 100644 --- a/src/edittableview.cpp +++ b/src/edittableview.cpp @@ -21,6 +21,7 @@ // Self Includes #include "edittableview.h" +#include "edittableview.moc" // Qt Includes #include <QtGui/QKeyEvent> diff --git a/src/edittreeview.cpp b/src/edittreeview.cpp index 5547cdb0..8ca18d13 100644 --- a/src/edittreeview.cpp +++ b/src/edittreeview.cpp @@ -21,6 +21,7 @@ // Self Includes #include "edittreeview.h" +#include "edittreeview.moc" // Qt includes #include <QtGui/QKeyEvent> diff --git a/src/history.cpp b/src/history.cpp index fac13b48..795bc14e 100644 --- a/src/history.cpp +++ b/src/history.cpp @@ -669,74 +669,6 @@ QModelIndex HistoryMenuModel::parent(const QModelIndex &index) const } -// ------------------------------------------------------------------------------------------------------------- - - -HistoryMenu::HistoryMenu(QWidget *parent) - : ModelMenu(parent) - , m_history(0) -{ - connect(this, SIGNAL(activated(const QModelIndex &)), this, SLOT(activated(const QModelIndex &))); - setHoverRole(HistoryModel::UrlStringRole); -} - - -void HistoryMenu::activated(const QModelIndex &index) -{ - emit openUrl(index.data(HistoryModel::UrlRole).toUrl()); -} - - -bool HistoryMenu::prePopulated() -{ - if (!m_history) - { - m_history = Application::historyManager(); - m_historyMenuModel = new HistoryMenuModel(m_history->historyTreeModel(), this); - setModel(m_historyMenuModel); - } - // initial actions - for (int i = 0; i < m_initialActions.count(); ++i) - addAction(m_initialActions.at(i)); - if (!m_initialActions.isEmpty()) - addSeparator(); - setFirstSeparator(m_historyMenuModel->bumpedRows()); - - return false; -} - - -void HistoryMenu::postPopulated() -{ - if (m_history->history().count() > 0) - addSeparator(); - - KAction *showAllAction = new KAction(i18n("Show All History"), this); - connect(showAllAction, SIGNAL(triggered()), this, SLOT(showHistoryDialog())); - addAction(showAllAction); - - KAction *clearAction = new KAction(i18n("Clear History"), this); - connect(clearAction, SIGNAL(triggered()), m_history, SLOT(clear())); - addAction(clearAction); -} - - -void HistoryMenu::showHistoryDialog() -{ - HistoryDialog *dialog = new HistoryDialog(this); - connect(dialog, SIGNAL(openUrl(const KUrl&)), this, SIGNAL(openUrl(const KUrl&))); - dialog->show(); -} - - -void HistoryMenu::setInitialActions(QList<QAction*> actions) -{ - m_initialActions = actions; - for (int i = 0; i < m_initialActions.count(); ++i) - addAction(m_initialActions.at(i)); -} - - // -------------------------------------------------------------------------------------------------------------- @@ -755,78 +687,8 @@ bool TreeProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_ } -// ----------------------------------------------------------------------------------------------------- - - -HistoryDialog::HistoryDialog(QWidget *parent, HistoryManager *setHistory) : QDialog(parent) -{ - HistoryManager *history = setHistory; - if (!history) - history = Application::historyManager(); - setupUi(this); - tree->setUniformRowHeights(true); - tree->setSelectionBehavior(QAbstractItemView::SelectRows); - tree->setTextElideMode(Qt::ElideMiddle); - QAbstractItemModel *model = history->historyTreeModel(); - TreeProxyModel *proxyModel = new TreeProxyModel(this); - connect(search, SIGNAL(textChanged(QString)), - proxyModel, SLOT(setFilterFixedString(QString))); - connect(removeButton, SIGNAL(clicked()), tree, SLOT(removeOne())); - connect(removeAllButton, SIGNAL(clicked()), history, SLOT(clear())); - proxyModel->setSourceModel(model); - tree->setModel(proxyModel); - tree->setExpanded(proxyModel->index(0, 0), true); - tree->setAlternatingRowColors(true); - QFontMetrics fm(font()); - int header = fm.width(QLatin1Char('m')) * 40; - tree->header()->resizeSection(0, header); - tree->header()->setStretchLastSection(true); - connect(tree, SIGNAL(activated(const QModelIndex&)), - this, SLOT(open())); - tree->setContextMenuPolicy(Qt::CustomContextMenu); - connect(tree, SIGNAL(customContextMenuRequested(const QPoint &)), - this, SLOT(customContextMenuRequested(const QPoint &))); -} - - -void HistoryDialog::customContextMenuRequested(const QPoint &pos) -{ - QMenu menu; - QModelIndex index = tree->indexAt(pos); - index = index.sibling(index.row(), 0); - if (index.isValid() && !tree->model()->hasChildren(index)) - { - menu.addAction(i18n("Open"), this, SLOT(open())); - menu.addSeparator(); - menu.addAction(i18n("Copy"), this, SLOT(copy())); - } - menu.addAction(i18n("Delete"), tree, SLOT(removeOne())); - menu.exec(QCursor::pos()); -} - - -void HistoryDialog::open() -{ - QModelIndex index = tree->currentIndex(); - if (!index.parent().isValid()) - return; - emit openUrl(index.data(HistoryModel::UrlRole).toUrl()); -} - - -void HistoryDialog::copy() -{ - QModelIndex index = tree->currentIndex(); - if (!index.parent().isValid()) - return; - QString url = index.data(HistoryModel::UrlStringRole).toString(); - - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(url); -} - +// ------------------------------------------------------------------------------------------------------------- -// --------------------------------------------------------------------------------------------------------------- HistoryFilterModel::HistoryFilterModel(QAbstractItemModel *sourceModel, QObject *parent) : QAbstractProxyModel(parent), diff --git a/src/history.h b/src/history.h index 7b3cbec9..7586ff9d 100644 --- a/src/history.h +++ b/src/history.h @@ -27,7 +27,6 @@ #include "modelmenu.h" // KDE Includes -#include <KAction> #include <KUrl> // Qt Includes @@ -256,39 +255,6 @@ private: }; -// --------------------------------------------------------------------------------------------- - -/** - * Menu that is dynamically populated from the history - * - */ - -class HistoryMenu : public ModelMenu -{ - Q_OBJECT - -signals: - void openUrl(const KUrl &url); - -public: - HistoryMenu(QWidget *parent = 0); - void setInitialActions(QList<QAction*> actions); - -protected: - bool prePopulated(); - void postPopulated(); - -private slots: - void activated(const QModelIndex &index); - void showHistoryDialog(); - -private: - HistoryManager *m_history; - HistoryMenuModel *m_historyMenuModel; - QList<QAction*> m_initialActions; -}; - - // ---------------------------------------------------------------------------------------- /** @@ -383,27 +349,4 @@ protected: }; -// ------------------------------------------------------------------------------------------ - - -// Ui includes -#include "ui_history.h" - -class HistoryDialog : public QDialog, public Ui_HistoryDialog -{ - Q_OBJECT - -signals: - void openUrl(const KUrl &url); - -public: - explicit HistoryDialog(QWidget *parent = 0, HistoryManager *history = 0); - -private slots: - void customContextMenuRequested(const QPoint &pos); - void open(); - void copy(); - -}; - #endif // HISTORY_H diff --git a/src/history.ui b/src/history.ui index 806bc9ad..fb694f8f 100644 --- a/src/history.ui +++ b/src/history.ui @@ -1,59 +1,41 @@ -<ui version="4.0" > - <class>HistoryDialog</class> - <widget class="QDialog" name="HistoryDialog" > - <property name="geometry" > +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>historyWidget</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>758</width> - <height>450</height> + <width>584</width> + <height>381</height> </rect> </property> - <property name="windowTitle" > - <string>History</string> + <property name="windowTitle"> + <string>Form</string> </property> - <layout class="QGridLayout" name="gridLayout" > - <item row="0" column="0" > - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0" > - <size> - <width>252</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item row="0" column="1" > - <widget class="KLineEdit" name="search" /> - </item> - <item row="1" column="0" colspan="2" > - <widget class="EditTreeView" name="tree" /> - </item> - <item row="2" column="0" colspan="2" > - <layout class="QHBoxLayout" > + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout"> <item> - <widget class="QPushButton" name="removeButton" > - <property name="text" > + <widget class="QPushButton" name="removeButton"> + <property name="text"> <string>&Remove</string> </property> </widget> </item> <item> - <widget class="QPushButton" name="removeAllButton" > - <property name="text" > + <widget class="QPushButton" name="removeAllButton"> + <property name="text"> <string>Remove &All</string> </property> </widget> </item> <item> <spacer> - <property name="orientation" > + <property name="orientation"> <enum>Qt::Horizontal</enum> </property> - <property name="sizeHint" stdset="0" > + <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> @@ -62,40 +44,34 @@ </spacer> </item> <item> - <widget class="QDialogButtonBox" name="buttonBox" > - <property name="standardButtons" > - <set>QDialogButtonBox::Ok</set> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Search:</string> </property> </widget> </item> + <item> + <widget class="KLineEdit" name="search"/> + </item> </layout> </item> + <item> + <widget class="EditTreeView" name="tree"/> + </item> </layout> </widget> <customwidgets> <customwidget> + <class>KLineEdit</class> + <extends>QLineEdit</extends> + <header>klineedit.h</header> + </customwidget> + <customwidget> <class>EditTreeView</class> <extends>QTreeView</extends> <header>edittreeview.h</header> </customwidget> </customwidgets> <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>HistoryDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel" > - <x>472</x> - <y>329</y> - </hint> - <hint type="destinationlabel" > - <x>461</x> - <y>356</y> - </hint> - </hints> - </connection> - </connections> + <connections/> </ui> diff --git a/src/historydialog.cpp b/src/historydialog.cpp new file mode 100644 index 00000000..7b0d6bc0 --- /dev/null +++ b/src/historydialog.cpp @@ -0,0 +1,129 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + +// Auto Includes +#include "historydialog.h" +#include "historydialog.moc" + +// Local Includes +#include "history.h" +#include "application.h" + +// KDE Includes +#include <KAction> +#include <KUrl> + +// Qt Includes +#include <QtCore/QPoint> + +#include <QtGui/QWidget> +#include <QtGui/QClipboard> +#include <QtGui/QDesktopWidget> + + +HistoryDialog::HistoryDialog(QWidget *parent, HistoryManager *setHistory) + : KDialog(parent) + , m_historyWidg(new Ui::historyWidget) +{ + HistoryManager *history = setHistory; + if (!history) + history = Application::historyManager(); + + setCaption( i18n("History") ); + setButtons( KDialog::Close ); + + QWidget *widget = new QWidget; + m_historyWidg->setupUi(widget); + setMainWidget(widget); + + m_historyWidg->search->setClearButtonShown(true); + + m_historyWidg->tree->setUniformRowHeights(true); + m_historyWidg->tree->setSelectionBehavior(QAbstractItemView::SelectRows); + m_historyWidg->tree->setTextElideMode(Qt::ElideMiddle); + + QAbstractItemModel *model = history->historyTreeModel(); + TreeProxyModel *proxyModel = new TreeProxyModel(this); + + connect(m_historyWidg->search, SIGNAL(textChanged(QString)), proxyModel, SLOT(setFilterFixedString(QString))); + connect(m_historyWidg->removeButton, SIGNAL(clicked()), m_historyWidg->tree, SLOT(removeOne())); + connect(m_historyWidg->removeAllButton, SIGNAL(clicked()), history, SLOT(clear())); + + proxyModel->setSourceModel(model); + m_historyWidg->tree->setModel(proxyModel); + m_historyWidg->tree->setExpanded(proxyModel->index(0, 0), true); + m_historyWidg->tree->setAlternatingRowColors(true); + + QFontMetrics fm(font()); + int header = fm.width(QLatin1Char('m')) * 25; + m_historyWidg->tree->header()->resizeSection(0, header); + m_historyWidg->tree->header()->setStretchLastSection(true); + + m_historyWidg->tree->setContextMenuPolicy(Qt::CustomContextMenu); + + connect(m_historyWidg->tree, SIGNAL(customContextMenuRequested(const QPoint &)), + this, SLOT(customContextMenuRequested(const QPoint &))); + + connect(m_historyWidg->tree, SIGNAL(activated(const QModelIndex&)), this, SLOT(open())); +} + + +void HistoryDialog::customContextMenuRequested(const QPoint &pos) +{ + KMenu menu; + QModelIndex index = m_historyWidg->tree->indexAt(pos); + index = index.sibling(index.row(), 0); + if (index.isValid() && !m_historyWidg->tree->model()->hasChildren(index)) + { + menu.addAction(i18n("Open"), this, SLOT(open())); + menu.addSeparator(); + menu.addAction(i18n("Copy"), this, SLOT(copy())); + } + menu.addAction(i18n("Delete"), m_historyWidg->tree, SLOT(removeOne())); + menu.exec(QCursor::pos()); +} + + +void HistoryDialog::open() +{ + QModelIndex index = m_historyWidg->tree->currentIndex(); + if (!index.parent().isValid()) + return; + emit openUrl(index.data(HistoryModel::UrlRole).toUrl()); +} + + +void HistoryDialog::copy() +{ + QModelIndex index = m_historyWidg->tree->currentIndex(); + if (!index.parent().isValid()) + return; + QString url = index.data(HistoryModel::UrlStringRole).toString(); + + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(url); +} + +QSize HistoryDialog::sizeHint() const +{ + QRect desktopRect = Application::desktop()->screenGeometry(); + QSize size = desktopRect.size() * 0.7; + return size; +} diff --git a/src/historydialog.h b/src/historydialog.h new file mode 100644 index 00000000..6436eda3 --- /dev/null +++ b/src/historydialog.h @@ -0,0 +1,57 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + + +#ifndef HISTORYDIALOG_H +#define HISTORYDIALOG_H + + +// Ui includes +#include "ui_history.h" + +// KDE Includes +#include <KDialog> + +class KUrl; +class QPoint; +class QWidget; +class HistoryManager; + +class HistoryDialog : public KDialog +{ + Q_OBJECT + +signals: + void openUrl(const KUrl &url); + +public: + explicit HistoryDialog(QWidget *parent = 0, HistoryManager *history = 0); + QSize sizeHint() const; + +private slots: + void customContextMenuRequested(const QPoint &pos); + void open(); + void copy(); + +private: + Ui::historyWidget *m_historyWidg; +}; + +#endif diff --git a/src/historymenu.cpp b/src/historymenu.cpp new file mode 100644 index 00000000..74b37db0 --- /dev/null +++ b/src/historymenu.cpp @@ -0,0 +1,95 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved +* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + +#include "historymenu.h" +#include "historymenu.moc" + +#include "application.h" +#include "historydialog.h" + +#include <QtGui/QWidget> +#include <QtCore/QModelIndex> + +#include <KUrl> + +HistoryMenu::HistoryMenu(QWidget *parent) + : ModelMenu(parent) + , m_history(0) +{ + connect(this, SIGNAL(activated(const QModelIndex &)), this, SLOT(activated(const QModelIndex &))); + setHoverRole(HistoryModel::UrlStringRole); +} + + +void HistoryMenu::activated(const QModelIndex &index) +{ + emit openUrl(index.data(HistoryModel::UrlRole).toUrl()); +} + + +bool HistoryMenu::prePopulated() +{ + if (!m_history) + { + m_history = Application::historyManager(); + m_historyMenuModel = new HistoryMenuModel(m_history->historyTreeModel(), this); + setModel(m_historyMenuModel); + } + // initial actions + for (int i = 0; i < m_initialActions.count(); ++i) + addAction(m_initialActions.at(i)); + if (!m_initialActions.isEmpty()) + addSeparator(); + setFirstSeparator(m_historyMenuModel->bumpedRows()); + + return false; +} + + +void HistoryMenu::postPopulated() +{ + if (m_history->history().count() > 0) + addSeparator(); + + KAction *showAllAction = new KAction(i18n("Show All History"), this); + connect(showAllAction, SIGNAL(triggered()), this, SLOT(showHistoryDialog())); + addAction(showAllAction); + + KAction *clearAction = new KAction(i18n("Clear History"), this); + connect(clearAction, SIGNAL(triggered()), m_history, SLOT(clear())); + addAction(clearAction); +} + + +void HistoryMenu::showHistoryDialog() +{ + HistoryDialog *dialog = new HistoryDialog(this); + connect(dialog, SIGNAL(openUrl(const KUrl&)), this, SIGNAL(openUrl(const KUrl&))); + dialog->show(); +} + + +void HistoryMenu::setInitialActions(QList<QAction*> actions) +{ + m_initialActions = actions; + for (int i = 0; i < m_initialActions.count(); ++i) + addAction(m_initialActions.at(i)); +} diff --git a/src/historymenu.h b/src/historymenu.h new file mode 100644 index 00000000..06d85ffa --- /dev/null +++ b/src/historymenu.h @@ -0,0 +1,65 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved +* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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, 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. +* +* ============================================================ */ + + +#ifndef HISTORYMENU_H +#define HISTORYMENU_H + +#include "history.h" + +#include <QtCore/QList> +#include <QtGui/QAction> + +class ModelMenu; +class QWidget; +class QModelIndex; +class KUrl; + +/** + * Menu that is dynamically populated from the history + * + */ + +class HistoryMenu : public ModelMenu +{ + Q_OBJECT + +signals: + void openUrl(const KUrl &url); + +public: + HistoryMenu(QWidget *parent = 0); + void setInitialActions(QList<QAction*> actions); + +protected: + bool prePopulated(); + void postPopulated(); + +private slots: + void activated(const QModelIndex &index); + void showHistoryDialog(); + +private: + HistoryManager *m_history; + HistoryMenuModel *m_historyMenuModel; + QList<QAction*> m_initialActions; +}; + +#endif diff --git a/src/lineedit.cpp b/src/lineedit.cpp index dd90ce5a..e3185fc2 100644 --- a/src/lineedit.cpp +++ b/src/lineedit.cpp @@ -79,6 +79,3 @@ void LineEdit::focusOutEvent(QFocusEvent *event) setCursorPosition(0); deselect(); } - - - diff --git a/src/main.cpp b/src/main.cpp index 38c30b53..009fc4b3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,15 +18,17 @@ * ============================================================ */ +// Local Includes #include "application.h" +// KDE Includes #include <KAboutData> #include <KCmdLineArgs> #include <KDebug> static const char description[] = - I18N_NOOP("Webkit Based Browser for KDE"); + I18N_NOOP("WebKit-based Web Browser for KDE"); static const char version[] = "0.1.1"; diff --git a/src/mainview.cpp b/src/mainview.cpp index d8d1c2b5..ea56527d 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -362,10 +362,8 @@ WebView *MainView::newWebView(Rekonq::OpenType type) connect(webView, SIGNAL(shiftCtrlTabPressed()), this, SLOT(previousTab())); // connecting webPage signals with mainview - connect(webView->page(), SIGNAL(windowCloseRequested()), - this, SLOT(windowCloseRequested())); - connect(webView->page(), SIGNAL(printRequested(QWebFrame *)), - this, SIGNAL(printRequested(QWebFrame *))); + connect(webView->page(), SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested())); + connect(webView->page(), SIGNAL(printRequested(QWebFrame *)), this, SIGNAL(printRequested(QWebFrame *))); addTab(webView, i18n("(Untitled)")); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 73ec3d6d..26ffbc11 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -30,14 +30,13 @@ // Local Includes #include "application.h" #include "settings.h" -#include "history.h" +#include "historymenu.h" #include "cookiejar.h" #include "networkaccessmanager.h" #include "bookmarks.h" #include "webview.h" #include "mainview.h" #include "bookmarks.h" -#include "download.h" #include "findbar.h" #include "sidepanel.h" #include "urlbar.h" @@ -410,65 +409,6 @@ void MainWindow::slotUpdateBrowser() } -KUrl MainWindow::guessUrlFromString(const QString &string) -{ - QString urlStr = string.trimmed(); - QRegExp test(QLatin1String("^[a-zA-Z]+\\:.*")); - - // Check if it looks like a qualified URL. Try parsing it and see. - bool hasSchema = test.exactMatch(urlStr); - - if (hasSchema) - { - QUrl qurl(urlStr, QUrl::TolerantMode); - KUrl url(qurl); - - if (url.isValid()) - { - return url; - } - } - - // Might be a file. - if (QFile::exists(urlStr)) - { - QFileInfo info(urlStr); - return KUrl::fromPath(info.absoluteFilePath()); - } - - // Might be a shorturl - try to detect the schema. - if (!hasSchema) - { - int dotIndex = urlStr.indexOf(QLatin1Char('.')); - - if (dotIndex != -1) - { - QString prefix = urlStr.left(dotIndex).toLower(); - QString schema = (prefix == QLatin1String("ftp")) ? prefix : QLatin1String("http"); - QUrl qurl(schema + QLatin1String("://") + urlStr, QUrl::TolerantMode); - KUrl url(qurl); - - if (url.isValid()) - { - return url; - } - } - } - - // Fall back to QUrl's own tolerant parser. - QUrl qurl = QUrl(string, QUrl::TolerantMode); - KUrl url(qurl); - - // finally for cases where the user just types in a hostname add http - if (qurl.scheme().isEmpty()) - { - qurl = QUrl(QLatin1String("http://") + string, QUrl::TolerantMode); - url = KUrl(qurl); - } - return url; -} - - void MainWindow::loadUrl(const KUrl &url) { m_view->loadUrl(url); @@ -485,7 +425,7 @@ void MainWindow::slotOpenLocation() void MainWindow::slotFileSaveAs() { KUrl srcUrl = currentTab()->url(); - Application::downloadManager()->newDownload(srcUrl); + // FIXME implement download file } @@ -544,7 +484,7 @@ void MainWindow::slotFileOpen() if (filePath.isEmpty()) return; - loadUrl(guessUrlFromString(filePath)); + loadUrl(Application::guessUrlFromString(filePath)); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 7d0b2e5c..cc0aa2e8 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -62,7 +62,6 @@ public: MainWindow(); ~MainWindow(); - static KUrl guessUrlFromString(const QString &url); MainView *mainView() const; WebView *currentTab() const; QAction *actionByName(const QString name); diff --git a/src/modelmenu.cpp b/src/modelmenu.cpp index 57b094ab..9ac9c512 100644 --- a/src/modelmenu.cpp +++ b/src/modelmenu.cpp @@ -21,6 +21,7 @@ // Self Includes #include "modelmenu.h" +#include "modelmenu.moc" ModelMenu::ModelMenu(QWidget * parent) diff --git a/src/panelhistory.cpp b/src/panelhistory.cpp index 72507663..1282454a 100644 --- a/src/panelhistory.cpp +++ b/src/panelhistory.cpp @@ -22,17 +22,16 @@ #include "panelhistory.h" #include "panelhistory.moc" -// QT Includes -#include <QLabel> +// Qt Includes +#include <QtGui/QLabel> +#include <QtGui/QHBoxLayout> +#include <QtGui/QHeaderView> // KDE Includes #include <KLocalizedString> #include <KLineEdit> #include <KUrl> -// Local Includes -#include "history.h" - PanelHistory::PanelHistory(QWidget *parent) : QWidget(parent) diff --git a/src/panelhistory.h b/src/panelhistory.h index c6fe1380..20152c64 100644 --- a/src/panelhistory.h +++ b/src/panelhistory.h @@ -22,14 +22,14 @@ // Local Includes #include "application.h" +#include "history.h" // Qt Includes -#include <QWidget> +#include <QtGui/QWidget> +#include <QtGui/QTreeView> // Forward Declarations -class QTreeView; class KUrl; -class TreeProxyModel; class PanelHistory : public QWidget diff --git a/src/searchbar.cpp b/src/searchbar.cpp index 48e9290a..6d118a7d 100644 --- a/src/searchbar.cpp +++ b/src/searchbar.cpp @@ -129,4 +129,3 @@ void SearchBar::handleNetworkData(QNetworkReply *networkReply) networkReply->deleteLater(); } - diff --git a/src/settings.cpp b/src/settings.cpp index 198ab3e0..f6e73412 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -30,7 +30,8 @@ // Local Includes #include "application.h" #include "mainwindow.h" -#include "cookiejar.h" +#include "cookiedialog.h" +#include "cookieexceptiondialog.h" #include "history.h" #include "networkaccessmanager.h" #include "webview.h" @@ -102,7 +103,7 @@ Private::Private(SettingsDialog *parent) widget = new QWidget; webkitUi.setupUi(widget); widget->layout()->setMargin(0); - pageItem = parent->addPage(widget , i18n("Webkit")); + pageItem = parent->addPage(widget , i18n("WebKit")); QString webkitIconPath = KStandardDirs::locate("appdata", "pics/webkit-icon.png"); kWarning() << webkitIconPath; KIcon webkitIcon = KIcon(QIcon(webkitIconPath)); @@ -120,7 +121,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) setFaceType(KPageDialog::List); showButtonSeparator(true); - setWindowTitle(i18n("rekonfig..")); + setWindowTitle(i18n("rekonfig...")); setModal(true); readConfig(); @@ -214,4 +215,3 @@ void SettingsDialog::setHomeToCurrentPage() d->generalUi.kcfg_homePage->setText(webView->url().prettyUrl()); } } - diff --git a/src/settings_fonts.ui b/src/settings_fonts.ui index de258cad..3a00358d 100644 --- a/src/settings_fonts.ui +++ b/src/settings_fonts.ui @@ -25,14 +25,14 @@ <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> - <string>Standard Font</string> + <string>Standard font</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> - <string>Fixed Font</string> + <string>Fixed font</string> </property> </widget> </item> @@ -58,7 +58,7 @@ <item> <widget class="QLabel" name="label_3"> <property name="text"> - <string>Font Size</string> + <string>Font size</string> </property> </widget> </item> diff --git a/src/settings_general.ui b/src/settings_general.ui index f9d272c6..95723e78 100644 --- a/src/settings_general.ui +++ b/src/settings_general.ui @@ -45,7 +45,7 @@ <item> <widget class="QPushButton" name="setHomeToCurrentPageButton"> <property name="text"> - <string>Set to current page</string> + <string>Set to Current Page</string> </property> </widget> </item> @@ -80,7 +80,7 @@ <item row="3" column="1"> <widget class="QCheckBox" name="kcfg_downloadToDefaultDir"> <property name="text"> - <string>ask where to save downloads</string> + <string>Ask where to save downloads</string> </property> </widget> </item> diff --git a/src/settings_privacy.ui b/src/settings_privacy.ui index 78202688..114743dd 100644 --- a/src/settings_privacy.ui +++ b/src/settings_privacy.ui @@ -76,7 +76,7 @@ <item row="0" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> - <string>Accept Cookies:</string> + <string>Accept cookies:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> diff --git a/src/settings_webkit.ui b/src/settings_webkit.ui index 32a9c0c9..a28ce915 100644 --- a/src/settings_webkit.ui +++ b/src/settings_webkit.ui @@ -20,7 +20,7 @@ <item row="0" column="0"> <widget class="QCheckBox" name="kcfg_autoLoadImages"> <property name="text"> - <string>Autoload Images</string> + <string>Autoload images</string> </property> </widget> </item> @@ -41,14 +41,14 @@ <item row="1" column="0"> <widget class="QCheckBox" name="kcfg_javascriptEnabled"> <property name="text"> - <string>Javascript support</string> + <string>JavaScript support</string> </property> </widget> </item> <item row="1" column="2"> <widget class="QCheckBox" name="kcfg_zoomTextOnly"> <property name="text"> - <string>Zoom Text Only</string> + <string>Zoom text only</string> </property> </widget> </item> @@ -62,7 +62,7 @@ <item row="2" column="2"> <widget class="QCheckBox" name="kcfg_printElementBackgrounds"> <property name="text"> - <string>Print element Backgrounds</string> + <string>Print element backgrounds</string> </property> </widget> </item> @@ -76,28 +76,28 @@ <item row="3" column="2"> <widget class="QCheckBox" name="kcfg_offlineStorageDatabaseEnabled"> <property name="text"> - <string>Offline storage Database</string> + <string>Offline storage database</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QCheckBox" name="kcfg_javascriptCanOpenWindows"> <property name="text"> - <string>Javascript can open windows</string> + <string>JavaScript can open windows</string> </property> </widget> </item> <item row="4" column="2"> <widget class="QCheckBox" name="kcfg_offlineWebApplicationCacheEnabled"> <property name="text"> - <string>Offline Web Application Cache </string> + <string>Offline web application cache</string> </property> </widget> </item> <item row="5" column="0"> <widget class="QCheckBox" name="kcfg_javascriptCanAccessClipboard"> <property name="text"> - <string>Javascript can access clipboard</string> + <string>JavaScript can access clipboard</string> </property> </widget> </item> diff --git a/src/stackedurlbar.cpp b/src/stackedurlbar.cpp index 113c8769..53a974fe 100644 --- a/src/stackedurlbar.cpp +++ b/src/stackedurlbar.cpp @@ -22,14 +22,14 @@ #include "stackedurlbar.h" #include "stackedurlbar.moc" -// KDE Includes -#include "kdebug.h" - // Local Includes #include "application.h" #include "history.h" #include "urlbar.h" +// KDE Includes +#include <KDebug> + StackedUrlBar::StackedUrlBar(QWidget *parent) : QStackedWidget(parent) diff --git a/src/webpage.cpp b/src/webpage.cpp index cfbc32cf..193f2a82 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -32,7 +32,6 @@ #include "mainview.h" #include "cookiejar.h" #include "networkaccessmanager.h" -#include "download.h" #include "history.h" #include "webview.h" diff --git a/src/webview.cpp b/src/webview.cpp index 216c2bd1..0ba33682 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -34,7 +34,6 @@ #include "mainview.h" #include "cookiejar.h" #include "networkaccessmanager.h" -#include "download.h" #include "history.h" #include "webpage.h" |