kio: minor KACLListViewItem::calcEffectiveRights() optimization

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-06-21 20:39:18 +03:00
parent 9c4bc997c4
commit 2db8c10c1c

View file

@ -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 );