From kde-commits Sat Feb 20 20:40:44 2010 From: Dario Freddi Date: Sat, 20 Feb 2010 20:40:44 +0000 To: kde-commits Subject: extragear/base/polkit-kde-1/kcmodules Message-Id: <1266698444.896665.9819.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=126669845125798 SVN commit 1093417 by dafre: Further work on KCMs Signed-off-by: Dario Freddi M +40 -0 PKLAEntry.cpp M +6 -0 PKLAEntry.h M +62 -18 polkitactions/ActionWidget.cpp M +2 -1 polkitactions/ActionWidget.h M +1 -0 polkitactions/CMakeLists.txt M +1 -15 polkitactions/actionwidget.ui M +87 -0 polkitactions/pkitemdelegate.cpp M +13 -0 polkitactions/pkitemdelegate.h --- trunk/extragear/base/polkit-kde-1/kcmodules/PKLAEntry.cpp #1093416:1093417 @@ -29,3 +29,43 @@ return argument; } +PolkitQt1::ActionDescription::ImplicitAuthorization PKLAEntry::implFromText(const QString& text) +{ + if (text == "yes") { + return PolkitQt1::ActionDescription::Authorized; + } else if (text == "no") { + return PolkitQt1::ActionDescription::NotAuthorized; + } else if (text == "auth_admin") { + return PolkitQt1::ActionDescription::AdministratorAuthenticationRequired; + } else if (text == "auth_admin_keep") { + return PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained; + } else if (text == "auth_self") { + return PolkitQt1::ActionDescription::AuthenticationRequired; + } else if (text == "auth_self_keep") { + return PolkitQt1::ActionDescription::AuthenticationRequiredRetained; + } else { + return PolkitQt1::ActionDescription::Unknown; + } +} + +QString PKLAEntry::textFromImpl(PolkitQt1::ActionDescription::ImplicitAuthorization implicit) +{ + switch (implicit) { + case PolkitQt1::ActionDescription::Authorized: + return "yes"; + case PolkitQt1::ActionDescription::NotAuthorized: + return "no"; + case PolkitQt1::ActionDescription::AdministratorAuthenticationRequired: + return "auth_admin"; + case PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained: + return "auth_admin_keep"; + case PolkitQt1::ActionDescription::AuthenticationRequired: + return "auth_self"; + case PolkitQt1::ActionDescription::AuthenticationRequiredRetained: + return "auth_self_keep"; + default: + return QString(); + } +} + + --- trunk/extragear/base/polkit-kde-1/kcmodules/PKLAEntry.h #1093416:1093417 @@ -10,7 +10,9 @@ #ifndef PKLAENTRY_H #define PKLAENTRY_H + #include +#include class QDBusArgument; @@ -25,6 +27,10 @@ int filePriority; int fileOrder; + + // Static utils for PKLA + static PolkitQt1::ActionDescription::ImplicitAuthorization implFromText(const QString& text); + static QString textFromImpl(PolkitQt1::ActionDescription::ImplicitAuthorization implicit); }; Q_DECLARE_METATYPE(PKLAEntry) --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/ActionWidget.cpp #1093416:1093417 @@ -18,6 +18,9 @@ #include #include #include +#include "LocalAuthorization.h" +#include +#include "pkitemdelegate.h" namespace PolkitKde { @@ -32,6 +35,7 @@ reloadPKLAs(); setAction(action); + m_ui->localAuthListWidget->setItemDelegate(new PKLAItemDelegate); } ActionWidget::~ActionWidget() @@ -66,41 +70,79 @@ void ActionWidget::computeActionPolicies() { + kDebug(); + m_ui->localAuthListWidget->clear(); foreach (const PKLAEntry &entry, m_entries) { QStringList realActions = entry.action.split(';'); + kDebug() << entry.action << m_action->actionId(); if (realActions.contains(m_action->actionId())) { // Match! Is it, actually, an implicit override? if (entry.title == "PolkitKdeOverrideImplicit") { // It is! - setImplicitAuthorization(implFromText(entry.resultActive), m_ui->activeComboBox); - setImplicitAuthorization(implFromText(entry.resultInactive), m_ui->inactiveComboBox); - setImplicitAuthorization(implFromText(entry.resultAny), m_ui->anyComboBox); + kDebug() << "Found implicit override"; + setImplicitAuthorization(PKLAEntry::implFromText(entry.resultActive), m_ui->activeComboBox); + setImplicitAuthorization(PKLAEntry::implFromText(entry.resultInactive), m_ui->inactiveComboBox); + setImplicitAuthorization(PKLAEntry::implFromText(entry.resultAny), m_ui->anyComboBox); } else { // TODO: Add it to the local auths + //LocalAuthorization *auth = new LocalAuthorization(entry); + kDebug() << "Found PKLA override"; + QListWidgetItem *item = new QListWidgetItem(entry.title); + item->setData(Qt::UserRole, formatPKLAEntry(entry)); + m_ui->localAuthListWidget->addItem(item); } } } } -PolkitQt1::ActionDescription::ImplicitAuthorization ActionWidget::implFromText(const QString& text) +QString ActionWidget::formatPKLAEntry(const PKLAEntry& entry) { - if (text == "yes") { - return PolkitQt1::ActionDescription::Authorized; - } else if (text == "no") { - return PolkitQt1::ActionDescription::NotAuthorized; - } else if (text == "auth_admin") { - return PolkitQt1::ActionDescription::AdministratorAuthenticationRequired; - } else if (text == "auth_admin_keep") { - return PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained; - } else if (text == "auth_self") { - return PolkitQt1::ActionDescription::AuthenticationRequired; - } else if (text == "auth_self_keep") { - return PolkitQt1::ActionDescription::AuthenticationRequiredRetained; - } else { - return PolkitQt1::ActionDescription::Unknown; + QString authorizationText; + + if (PKLAEntry::implFromText(entry.resultActive) != m_action->implicitActive()) { + authorizationText.append(i18n("'%1' on active console", entry.resultActive)); + authorizationText.append(", "); } + if (PKLAEntry::implFromText(entry.resultInactive) != m_action->implicitInactive()) { + authorizationText.append(i18n("'%1' on inactive console", entry.resultActive)); + authorizationText.append(", "); + } + if (PKLAEntry::implFromText(entry.resultAny) != m_action->implicitAny()) { + authorizationText.append(i18n("'%1' on any console", entry.resultActive)); + authorizationText.append(", "); + } + + if (authorizationText.endsWith(", ")) { + authorizationText.remove(-1, 2); + } + + return i18np("%2 has the following policy: %3", "%2 have the following policy: %3", + entry.identity.split(';').count(), formatIdentities(entry.identity), authorizationText); } +QString ActionWidget::formatIdentities(const QString& identities) +{ + QString rettext; + QStringList realIdentities = identities.split(';'); + + foreach (const QString &identity, realIdentities) { + if (identity.startsWith("unix-user:")) { + rettext.append(identity.split("unix-user:").last()); + rettext.append(", "); + } + if (identity.startsWith("unix-group:")) { + rettext.append(i18n("%1 group", identity.split("unix-group:").last())); + rettext.append(", "); + } + } + + if (rettext.endsWith(", ")) { + rettext = rettext.remove(rettext.length() - 2, 2); + } + + return rettext; +} + void ActionWidget::setImplicitAuthorization(PolkitQt1::ActionDescription::ImplicitAuthorization auth, QComboBox* box) { switch (auth) { @@ -122,6 +164,8 @@ case PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained: box->setCurrentIndex(3); break; + default: + break; } } --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/ActionWidget.h #1093416:1093417 @@ -37,8 +37,9 @@ void reloadPKLAs(); private: - PolkitQt1::ActionDescription::ImplicitAuthorization implFromText(const QString &text); void setImplicitAuthorization(PolkitQt1::ActionDescription::ImplicitAuthorization auth, QComboBox *box); + QString formatPKLAEntry(const PKLAEntry &entry); + QString formatIdentities(const QString &identities); Ui::ActionWidget *m_ui; PolkitQt1::ActionDescription *m_action; --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/CMakeLists.txt #1093416:1093417 @@ -4,6 +4,7 @@ PoliciesModel.cpp PolicyItem.cpp ActionWidget.cpp + LocalAuthorization.cpp ../PKLAEntry.cpp pkitemdelegate.cpp ) --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/actionwidget.ui #1093416:1093417 @@ -210,21 +210,7 @@ - - - true - - - - - 0 - 0 - 380 - 223 - - - - + --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/pkitemdelegate.cpp #1093416:1093417 @@ -139,4 +139,91 @@ qMax(ITEM_ROW_HEIGHT, d_fm.height() + r_fm.height())); } +///////////////////////////// + +PKLAItemDelegate::PKLAItemDelegate(QObject *parent) : QStyledItemDelegate(parent) +{} + +PKLAItemDelegate::~PKLAItemDelegate() +{} + +void PKLAItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + QStyleOptionViewItemV4 opt(option); + + QStyle *style = QApplication::style(); + style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); + + QPixmap pixmap(opt.rect.size()); + pixmap.fill(Qt::transparent); + QPainter p(&pixmap); + p.translate(-opt.rect.topLeft()); + + QRect clipRect(opt.rect); + p.setClipRect(clipRect); + + // here we draw the icon + KIcon icon("dialog-password"); + + QIcon::Mode iconMode = QIcon::Normal; + + if (opt.state & QStyle::State_MouseOver) { + iconMode = QIcon::Active; + } + + const int height = (opt.rect.height() > ITEM_ROW_HEIGHT) ? opt.rect.height() : ITEM_ROW_HEIGHT; + + QRect iconRect(opt.rect.topLeft(), QSize(ICON_SIZE, ICON_SIZE)); + const QRect iconPlaceRect(opt.rect.topLeft(), QSize(height, height)); + iconRect.moveCenter(iconPlaceRect.center()); + icon.paint(&p, iconRect, Qt::AlignCenter, iconMode); + + QColor foregroundColor = (opt.state.testFlag(QStyle::State_Selected)) ? + opt.palette.color(QPalette::HighlightedText) : opt.palette.color(QPalette::Text); + + p.setPen(foregroundColor); + + // here we draw the action description + clipRect.setSize(QSize(opt.rect.width() - height - MARGIN, height / 2)); + clipRect.translate(height + MARGIN, 0); + p.setClipRect(clipRect); + + QFont descriptionFont = opt.font; + if (index.model()->hasChildren(index)) { + descriptionFont.setBold(true); + } + descriptionFont.setPointSize(descriptionFont.pointSize()); + p.setFont(descriptionFont); + + p.drawText(clipRect, Qt::AlignLeft | Qt::AlignBottom, index.data(Qt::DisplayRole).toString()); + + // here we draw the action raw name + clipRect.translate(0, qApp->fontMetrics().height()); + p.setClipRect(clipRect); + + QFont actionNameFont = KGlobalSettings::smallestReadableFont(); + actionNameFont.setItalic(true); + p.setFont(actionNameFont); + p.drawText(clipRect, Qt::AlignLeft | Qt::AlignVCenter, index.data(Qt::UserRole).toString()); + + p.end(); + + painter->drawPixmap(opt.rect.topLeft(), pixmap); } + +QSize PKLAItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QFont dFont = option.font; + + const QFont rFont = KGlobalSettings::smallestReadableFont(); + + QFontMetrics d_fm(dFont); // description font + QFontMetrics r_fm(rFont); // raw string font + + return QSize(qMax(d_fm.width(index.data(Qt::DisplayRole).toString()), + d_fm.width(index.data(PolkitKde::PoliciesModel::PathRole).toString())), + qMax(ITEM_ROW_HEIGHT, d_fm.height() + r_fm.height())); +} + +} --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/pkitemdelegate.h #1093416:1093417 @@ -38,6 +38,19 @@ }; +class PKLAItemDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + PKLAItemDelegate(QObject *parent = 0); + ~PKLAItemDelegate(); + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + +}; + } #endif