[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/base/polkit-kde-1/kcmodules
From:       Dario Freddi <drf () kde ! org>
Date:       2010-02-20 20:40:44
Message-ID: 1266698444.896665.9819.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1093417 by dafre:

Further work on KCMs

Signed-off-by: Dario Freddi <drf@kde.org>

 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 <QMetaType>
+#include <PolkitQt1/ActionDescription>
 
 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 <QtDBus/qdbusmetatype.h>
 #include <PolkitQt1/ActionDescription>
 #include <QDebug>
+#include "LocalAuthorization.h"
+#include <KDebug>
+#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 @@
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_3">
       <item>
-       <widget class="QScrollArea" name="scrollArea">
-        <property name="widgetResizable">
-         <bool>true</bool>
-        </property>
-        <widget class="QWidget" name="scrollAreaWidgetContents">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>0</y>
-           <width>380</width>
-           <height>223</height>
-          </rect>
-         </property>
-        </widget>
-       </widget>
+       <widget class="QListWidget" name="localAuthListWidget"/>
       </item>
       <item>
        <layout class="QHBoxLayout" name="horizontalLayout_2">
--- 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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic