From d0ecd4c042b81f0eb732a6702f9d1a83d6f4144e Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Tue, 19 May 2009 12:29:32 +0200 Subject: Cookie System Refactoring. Step 1.. --- src/cookiedialog.cpp | 218 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 src/cookiedialog.cpp (limited to 'src/cookiedialog.cpp') diff --git a/src/cookiedialog.cpp b/src/cookiedialog.cpp new file mode 100644 index 00000000..1628a0c6 --- /dev/null +++ b/src/cookiedialog.cpp @@ -0,0 +1,218 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini +* +* +* 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" + + +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 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 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" + + +CookiesDialog::CookiesDialog(CookieJar *cookieJar, QWidget *parent) + : KDialog(parent) +{ + setWindowFlags(Qt::Sheet); + setCaption("Cookies"); + setButtons( KDialog::Ok ); + + 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->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); + + QFont f = font(); + f.setPointSize(10); + QFontMetrics fm(f); + int height = fm.height() + fm.height() / 3; + cookieWidget->cookiesTable->verticalHeader()->setDefaultSectionSize(height); + cookieWidget->cookiesTable->verticalHeader()->setMinimumSectionSize(-1); + + for (int i = 0; i < model->columnCount(); ++i) + { + int header = cookieWidget->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; + cookieWidget->cookiesTable->horizontalHeader()->resizeSection(i, header); + } + cookieWidget->cookiesTable->horizontalHeader()->setStretchLastSection(true); +} -- cgit v1.2.1