mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 02:42:48 +00:00
kio: minor KACLListViewItem::calcEffectiveRights() optimization
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
9c4bc997c4
commit
2db8c10c1c
1 changed files with 139 additions and 123 deletions
|
@ -78,10 +78,11 @@ public:
|
||||||
QPushButton *m_DelBtn;
|
QPushButton *m_DelBtn;
|
||||||
};
|
};
|
||||||
|
|
||||||
KACLEditWidget::KACLEditWidget( QWidget *parent )
|
KACLEditWidget::KACLEditWidget(QWidget *parent)
|
||||||
: QWidget(parent), d(new KACLEditWidgetPrivate)
|
: QWidget(parent),
|
||||||
|
d(new KACLEditWidgetPrivate())
|
||||||
{
|
{
|
||||||
QHBoxLayout *hbox = new QHBoxLayout( this );
|
QHBoxLayout *hbox = new QHBoxLayout(this);
|
||||||
hbox->setMargin( 0 );
|
hbox->setMargin( 0 );
|
||||||
d->m_listView = new KACLListView(this);
|
d->m_listView = new KACLListView(this);
|
||||||
hbox->addWidget(d->m_listView);
|
hbox->addWidget(d->m_listView);
|
||||||
|
@ -118,17 +119,19 @@ void KACLEditWidget::KACLEditWidgetPrivate::_k_slotUpdateButtons()
|
||||||
bool atLeastOneIsNotAllowedToChangeType = false;
|
bool atLeastOneIsNotAllowedToChangeType = false;
|
||||||
int selectedCount = 0;
|
int selectedCount = 0;
|
||||||
QList<QTreeWidgetItem*> selected = m_listView->selectedItems();
|
QList<QTreeWidgetItem*> selected = m_listView->selectedItems();
|
||||||
QListIterator<QTreeWidgetItem*> it( selected );
|
QListIterator<QTreeWidgetItem*> it(selected);
|
||||||
while ( it.hasNext() ) {
|
while (it.hasNext()) {
|
||||||
KACLListViewItem *item = static_cast<KACLListViewItem*>( it.next() );
|
KACLListViewItem *item = static_cast<KACLListViewItem*>(it.next());
|
||||||
++selectedCount;
|
++selectedCount;
|
||||||
if ( !item->isDeletable() )
|
if (!item->isDeletable()) {
|
||||||
atLeastOneIsNotDeletable = true;
|
atLeastOneIsNotDeletable = true;
|
||||||
if ( !item->isAllowedToChangeType() )
|
}
|
||||||
|
if (!item->isAllowedToChangeType()) {
|
||||||
atLeastOneIsNotAllowedToChangeType = true;
|
atLeastOneIsNotAllowedToChangeType = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_EditBtn->setEnabled( selectedCount && !atLeastOneIsNotAllowedToChangeType );
|
m_EditBtn->setEnabled(selectedCount && !atLeastOneIsNotAllowedToChangeType);
|
||||||
m_DelBtn->setEnabled( selectedCount && !atLeastOneIsNotDeletable );
|
m_DelBtn->setEnabled(selectedCount && !atLeastOneIsNotDeletable);
|
||||||
}
|
}
|
||||||
|
|
||||||
KACL KACLEditWidget::getACL() const
|
KACL KACLEditWidget::getACL() const
|
||||||
|
@ -141,74 +144,80 @@ KACL KACLEditWidget::getDefaultACL() const
|
||||||
return d->m_listView->getDefaultACL();
|
return d->m_listView->getDefaultACL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void KACLEditWidget::setACL( const KACL &acl )
|
void KACLEditWidget::setACL(const KACL &acl)
|
||||||
{
|
{
|
||||||
return d->m_listView->setACL(acl);
|
return d->m_listView->setACL(acl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KACLEditWidget::setDefaultACL( const KACL &acl )
|
void KACLEditWidget::setDefaultACL(const KACL &acl)
|
||||||
{
|
{
|
||||||
return d->m_listView->setDefaultACL(acl);
|
return d->m_listView->setDefaultACL(acl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KACLEditWidget::setAllowDefaults( bool value )
|
void KACLEditWidget::setAllowDefaults(bool value)
|
||||||
{
|
{
|
||||||
d->m_listView->setAllowDefaults(value);
|
d->m_listView->setAllowDefaults(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
KACLListViewItem::KACLListViewItem( QTreeWidget* parent,
|
KACLListViewItem::KACLListViewItem(QTreeWidget *parent,
|
||||||
KACLListView::EntryType _type,
|
KACLListView::EntryType _type,
|
||||||
unsigned short _value, bool defaults,
|
unsigned short _value, bool defaults,
|
||||||
const QString& _qualifier )
|
const QString &_qualifier)
|
||||||
: QTreeWidgetItem( parent),
|
: QTreeWidgetItem(parent),
|
||||||
type( _type ), value( _value ), isDefault( defaults ),
|
type(_type), value(_value), isDefault(defaults),
|
||||||
qualifier( _qualifier ), isPartial( false )
|
qualifier(_qualifier), isPartial(false)
|
||||||
{
|
{
|
||||||
m_pACLListView = qobject_cast<KACLListView*>( parent );
|
m_pACLListView = qobject_cast<KACLListView*>(parent);
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
KACLListViewItem::~ KACLListViewItem()
|
KACLListViewItem::~ KACLListViewItem()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString KACLListViewItem::key() const
|
QString KACLListViewItem::key() const
|
||||||
{
|
{
|
||||||
QString key;
|
QString key;
|
||||||
if ( !isDefault )
|
if (!isDefault) {
|
||||||
key = 'A';
|
key = 'A';
|
||||||
else
|
} else {
|
||||||
key = 'B';
|
key = 'B';
|
||||||
switch ( type )
|
}
|
||||||
{
|
switch (type) {
|
||||||
case KACLListView::User:
|
case KACLListView::User: {
|
||||||
key += 'A';
|
key += 'A';
|
||||||
break;
|
break;
|
||||||
case KACLListView::Group:
|
}
|
||||||
|
case KACLListView::Group: {
|
||||||
key += 'B';
|
key += 'B';
|
||||||
break;
|
break;
|
||||||
case KACLListView::Others:
|
}
|
||||||
|
case KACLListView::Others: {
|
||||||
key += 'C';
|
key += 'C';
|
||||||
break;
|
break;
|
||||||
case KACLListView::Mask:
|
}
|
||||||
|
case KACLListView::Mask: {
|
||||||
key += 'D';
|
key += 'D';
|
||||||
break;
|
break;
|
||||||
case KACLListView::NamedUser:
|
}
|
||||||
key += 'E' + text( 1 );
|
case KACLListView::NamedUser: {
|
||||||
|
key += 'E' + text(1);
|
||||||
break;
|
break;
|
||||||
case KACLListView::NamedGroup:
|
}
|
||||||
key += 'F' + text( 1 );
|
case KACLListView::NamedGroup: {
|
||||||
|
key += 'F' + text(1);
|
||||||
break;
|
break;
|
||||||
default:
|
}
|
||||||
key += text( 0 );
|
default: {
|
||||||
|
key += text(0);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KACLListViewItem::operator< ( const QTreeWidgetItem& other ) const
|
bool KACLListViewItem::operator< (const QTreeWidgetItem &other) const
|
||||||
{
|
{
|
||||||
return key() < static_cast<const KACLListViewItem&>(other).key();
|
return key() < static_cast<const KACLListViewItem&>(other).key();
|
||||||
}
|
}
|
||||||
|
@ -217,144 +226,151 @@ void KACLListViewItem::updatePermPixmaps()
|
||||||
{
|
{
|
||||||
unsigned int partialPerms = value;
|
unsigned int partialPerms = value;
|
||||||
|
|
||||||
if ( value & ACL_READ )
|
if (value & ACL_READ)
|
||||||
setIcon( 2, m_pACLListView->getYesPixmap() );
|
setIcon( 2, m_pACLListView->getYesPixmap() );
|
||||||
else if ( partialPerms & ACL_READ )
|
else if (partialPerms & ACL_READ)
|
||||||
setIcon( 2, m_pACLListView->getYesPartialPixmap() );
|
setIcon(2, m_pACLListView->getYesPartialPixmap());
|
||||||
else
|
else
|
||||||
setIcon( 2, QIcon() );
|
setIcon(2, QIcon());
|
||||||
|
|
||||||
if ( value & ACL_WRITE )
|
if (value & ACL_WRITE) {
|
||||||
setIcon( 3, m_pACLListView->getYesPixmap() );
|
setIcon(3, m_pACLListView->getYesPixmap());
|
||||||
else if ( partialPerms & ACL_WRITE )
|
} else if (partialPerms & ACL_WRITE) {
|
||||||
setIcon( 3, m_pACLListView->getYesPartialPixmap() );
|
setIcon(3, m_pACLListView->getYesPartialPixmap());
|
||||||
else
|
} else {
|
||||||
setIcon( 3, QIcon() );
|
setIcon(3, QIcon());
|
||||||
|
}
|
||||||
|
|
||||||
if ( value & ACL_EXECUTE )
|
if (value & ACL_EXECUTE) {
|
||||||
setIcon( 4, m_pACLListView->getYesPixmap() );
|
setIcon(4, m_pACLListView->getYesPixmap());
|
||||||
else if ( partialPerms & ACL_EXECUTE )
|
} else if (partialPerms & ACL_EXECUTE) {
|
||||||
setIcon( 4, m_pACLListView->getYesPartialPixmap() );
|
setIcon(4, m_pACLListView->getYesPartialPixmap());
|
||||||
else
|
} else {
|
||||||
setIcon( 4, QIcon() );
|
setIcon(4, QIcon());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KACLListViewItem::repaint()
|
void KACLListViewItem::repaint()
|
||||||
{
|
{
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
switch ( type )
|
switch (type) {
|
||||||
{
|
case KACLListView::User: {
|
||||||
case KACLListView::User:
|
|
||||||
idx = KACLListView::OWNER_IDX;
|
idx = KACLListView::OWNER_IDX;
|
||||||
break;
|
break;
|
||||||
case KACLListView::Group:
|
}
|
||||||
|
case KACLListView::Group: {
|
||||||
idx = KACLListView::GROUP_IDX;
|
idx = KACLListView::GROUP_IDX;
|
||||||
break;
|
break;
|
||||||
case KACLListView::Others:
|
}
|
||||||
|
case KACLListView::Others: {
|
||||||
idx = KACLListView::OTHERS_IDX;
|
idx = KACLListView::OTHERS_IDX;
|
||||||
break;
|
break;
|
||||||
case KACLListView::Mask:
|
}
|
||||||
|
case KACLListView::Mask: {
|
||||||
idx = KACLListView::MASK_IDX;
|
idx = KACLListView::MASK_IDX;
|
||||||
break;
|
break;
|
||||||
case KACLListView::NamedUser:
|
}
|
||||||
|
case KACLListView::NamedUser: {
|
||||||
idx = KACLListView::NAMED_USER_IDX;
|
idx = KACLListView::NAMED_USER_IDX;
|
||||||
break;
|
break;
|
||||||
case KACLListView::NamedGroup:
|
}
|
||||||
|
case KACLListView::NamedGroup: {
|
||||||
idx = KACLListView::NAMED_GROUP_IDX;
|
idx = KACLListView::NAMED_GROUP_IDX;
|
||||||
break;
|
break;
|
||||||
default:
|
}
|
||||||
|
default: {
|
||||||
idx = KACLListView::OWNER_IDX;
|
idx = KACLListView::OWNER_IDX;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setText( 0, i18n(s_itemAttributes[idx].label) );
|
setText(0, i18n(s_itemAttributes[idx].label));
|
||||||
setIcon( 0, *s_itemAttributes[idx].pixmap );
|
setIcon(0, *s_itemAttributes[idx].pixmap);
|
||||||
if ( isDefault )
|
if (isDefault) {
|
||||||
setText( 0, text( 0 ) + i18n( " (Default)" ) );
|
setText(0, text(0) + i18n(" (Default)"));
|
||||||
setText( 1, qualifier );
|
}
|
||||||
|
setText(1, qualifier);
|
||||||
// Set the pixmaps for which of the perms are set
|
// Set the pixmaps for which of the perms are set
|
||||||
updatePermPixmaps();
|
updatePermPixmaps();
|
||||||
}
|
}
|
||||||
|
|
||||||
void KACLListViewItem::calcEffectiveRights()
|
void KACLListViewItem::calcEffectiveRights()
|
||||||
{
|
{
|
||||||
QString strEffective = QString( "---" );
|
QString strEffective = QString::fromLatin1("---");
|
||||||
|
|
||||||
// Do we need to worry about the mask entry? It applies to named users,
|
// Do we need to worry about the mask entry? It applies to named users,
|
||||||
// owning group, and named groups
|
// owning group, and named groups
|
||||||
if ( m_pACLListView->hasMaskEntry()
|
if (m_pACLListView->hasMaskEntry()
|
||||||
&& ( type == KACLListView::NamedUser
|
&& ( type == KACLListView::NamedUser
|
||||||
|| type == KACLListView::Group
|
|| type == KACLListView::Group
|
||||||
|| type == KACLListView::NamedGroup )
|
|| type == KACLListView::NamedGroup)
|
||||||
&& !isDefault )
|
&& !isDefault)
|
||||||
{
|
{
|
||||||
|
strEffective[0] = (m_pACLListView->maskPermissions() & value & ACL_READ) ? 'r' : '-';
|
||||||
strEffective[0] = ( m_pACLListView->maskPermissions() & value & ACL_READ ) ? 'r' : '-';
|
strEffective[1] = (m_pACLListView->maskPermissions() & value & ACL_WRITE) ? 'w' : '-';
|
||||||
strEffective[1] = ( m_pACLListView->maskPermissions() & value & ACL_WRITE ) ? 'w' : '-';
|
strEffective[2] = (m_pACLListView->maskPermissions() & value & ACL_EXECUTE) ? 'x' : '-';
|
||||||
strEffective[2] = ( m_pACLListView->maskPermissions() & value & ACL_EXECUTE ) ? 'x' : '-';
|
|
||||||
/*
|
/*
|
||||||
// What about any partial perms?
|
// What about any partial perms?
|
||||||
if ( maskPerms & partialPerms & ACL_READ || // Partial perms on entry
|
if (maskPerms & partialPerms & ACL_READ || // Partial perms on entry
|
||||||
maskPartialPerms & perms & ACL_READ || // Partial perms on mask
|
maskPartialPerms & perms & ACL_READ || // Partial perms on mask
|
||||||
maskPartialPerms & partialPerms & ACL_READ ) // Partial perms on mask and entry
|
maskPartialPerms & partialPerms & ACL_READ) // Partial perms on mask and entry
|
||||||
strEffective[0] = 'R';
|
strEffective[0] = 'R';
|
||||||
if ( maskPerms & partialPerms & ACL_WRITE || // Partial perms on entry
|
if (maskPerms & partialPerms & ACL_WRITE || // Partial perms on entry
|
||||||
maskPartialPerms & perms & ACL_WRITE || // Partial perms on mask
|
maskPartialPerms & perms & ACL_WRITE || // Partial perms on mask
|
||||||
maskPartialPerms & partialPerms & ACL_WRITE ) // Partial perms on mask and entry
|
maskPartialPerms & partialPerms & ACL_WRITE) // Partial perms on mask and entry
|
||||||
strEffective[1] = 'W';
|
strEffective[1] = 'W';
|
||||||
if ( maskPerms & partialPerms & ACL_EXECUTE || // Partial perms on entry
|
if (maskPerms & partialPerms & ACL_EXECUTE || // Partial perms on entry
|
||||||
maskPartialPerms & perms & ACL_EXECUTE || // Partial perms on mask
|
maskPartialPerms & perms & ACL_EXECUTE || // Partial perms on mask
|
||||||
maskPartialPerms & partialPerms & ACL_EXECUTE ) // Partial perms on mask and entry
|
maskPartialPerms & partialPerms & ACL_EXECUTE) // Partial perms on mask and entry
|
||||||
strEffective[2] = 'X';
|
strEffective[2] = 'X';
|
||||||
*/
|
*/
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
// No, the effective value are just the value in this entry
|
// No, the effective value are just the value in this entry
|
||||||
strEffective[0] = ( value & ACL_READ ) ? 'r' : '-';
|
strEffective[0] = (value & ACL_READ) ? 'r' : '-';
|
||||||
strEffective[1] = ( value & ACL_WRITE ) ? 'w' : '-';
|
strEffective[1] = (value & ACL_WRITE) ? 'w' : '-';
|
||||||
strEffective[2] = ( value & ACL_EXECUTE ) ? 'x' : '-';
|
strEffective[2] = (value & ACL_EXECUTE) ? 'x' : '-';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// What about any partial perms?
|
// What about any partial perms?
|
||||||
if ( partialPerms & ACL_READ )
|
if (partialPerms & ACL_READ)
|
||||||
strEffective[0] = 'R';
|
strEffective[0] = 'R';
|
||||||
if ( partialPerms & ACL_WRITE )
|
if (partialPerms & ACL_WRITE)
|
||||||
strEffective[1] = 'W';
|
strEffective[1] = 'W';
|
||||||
if ( partialPerms & ACL_EXECUTE )
|
if (partialPerms & ACL_EXECUTE)
|
||||||
strEffective[2] = 'X';
|
strEffective[2] = 'X';
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
setText( 5, strEffective );
|
setText(5, strEffective);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KACLListViewItem::isDeletable() const
|
bool KACLListViewItem::isDeletable() const
|
||||||
{
|
{
|
||||||
bool isMaskAndDeletable = false;
|
bool isMaskAndDeletable = false;
|
||||||
if (type == KACLListView::Mask ) {
|
if (type == KACLListView::Mask) {
|
||||||
if ( !isDefault && m_pACLListView->maskCanBeDeleted() )
|
if (!isDefault && m_pACLListView->maskCanBeDeleted()) {
|
||||||
isMaskAndDeletable = true;
|
isMaskAndDeletable = true;
|
||||||
else if ( isDefault && m_pACLListView->defaultMaskCanBeDeleted() )
|
} else if (isDefault && m_pACLListView->defaultMaskCanBeDeleted()) {
|
||||||
isMaskAndDeletable = true;
|
isMaskAndDeletable = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return type != KACLListView::User &&
|
return (type != KACLListView::User &&
|
||||||
type != KACLListView::Group &&
|
type != KACLListView::Group &&
|
||||||
type != KACLListView::Others &&
|
type != KACLListView::Others &&
|
||||||
( type != KACLListView::Mask || isMaskAndDeletable );
|
(type != KACLListView::Mask || isMaskAndDeletable));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KACLListViewItem::isAllowedToChangeType() const
|
bool KACLListViewItem::isAllowedToChangeType() const
|
||||||
{
|
{
|
||||||
return type != KACLListView::User &&
|
return (type != KACLListView::User &&
|
||||||
type != KACLListView::Group &&
|
type != KACLListView::Group &&
|
||||||
type != KACLListView::Others &&
|
type != KACLListView::Others &&
|
||||||
type != KACLListView::Mask;
|
type != KACLListView::Mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KACLListViewItem::togglePerm( acl_perm_t perm )
|
void KACLListViewItem::togglePerm(acl_perm_t perm)
|
||||||
{
|
{
|
||||||
value ^= perm; // Toggle the perm
|
value ^= perm; // Toggle the perm
|
||||||
if ( type == KACLListView::Mask && !isDefault ) {
|
if (type == KACLListView::Mask && !isDefault) {
|
||||||
m_pACLListView->setMaskPermissions( value );
|
m_pACLListView->setMaskPermissions(value);
|
||||||
}
|
}
|
||||||
calcEffectiveRights();
|
calcEffectiveRights();
|
||||||
updatePermPixmaps();
|
updatePermPixmaps();
|
||||||
|
@ -378,24 +394,24 @@ void KACLListViewItem::togglePerm( acl_perm_t perm )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EditACLEntryDialog::EditACLEntryDialog( KACLListView *listView, KACLListViewItem *item,
|
EditACLEntryDialog::EditACLEntryDialog(KACLListView *listView, KACLListViewItem *item,
|
||||||
const QStringList &users,
|
const QStringList &users,
|
||||||
const QStringList &groups,
|
const QStringList &groups,
|
||||||
const QStringList &defaultUsers,
|
const QStringList &defaultUsers,
|
||||||
const QStringList &defaultGroups,
|
const QStringList &defaultGroups,
|
||||||
int allowedTypes, int allowedDefaultTypes,
|
int allowedTypes, int allowedDefaultTypes,
|
||||||
bool allowDefaults )
|
bool allowDefaults)
|
||||||
: KDialog( listView ),
|
: KDialog(listView),
|
||||||
m_listView( listView ), m_item( item ), m_users( users ), m_groups( groups ),
|
m_listView(listView), m_item(item), m_users(users), m_groups(groups),
|
||||||
m_defaultUsers( defaultUsers ), m_defaultGroups( defaultGroups ),
|
m_defaultUsers(defaultUsers), m_defaultGroups(defaultGroups),
|
||||||
m_allowedTypes( allowedTypes ), m_allowedDefaultTypes( allowedDefaultTypes ),
|
m_allowedTypes(allowedTypes), m_allowedDefaultTypes(allowedDefaultTypes),
|
||||||
m_defaultCB( 0 )
|
m_defaultCB(0)
|
||||||
{
|
{
|
||||||
setObjectName( "edit_entry_dialog" );
|
setObjectName("edit_entry_dialog");
|
||||||
setModal( true );
|
setModal(true);
|
||||||
setCaption( i18n( "Edit ACL Entry" ) );
|
setCaption(i18n("Edit ACL Entry"));
|
||||||
setButtons( KDialog::Ok | KDialog::Cancel );
|
setButtons(KDialog::Ok | KDialog::Cancel);
|
||||||
setDefaultButton( KDialog::Ok );
|
setDefaultButton(KDialog::Ok);
|
||||||
|
|
||||||
QWidget *page = new QWidget( this );
|
QWidget *page = new QWidget( this );
|
||||||
setMainWidget( page );
|
setMainWidget( page );
|
||||||
|
|
Loading…
Add table
Reference in a new issue