/* ============================================================ * * 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 3, 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 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 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" // Qt Includes #include #include #include 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; }