Browse Source

Unified widget code for trash property dialog and TDE control module.

This resolves bug 1923.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/34/head
Michele Calgaro 5 months ago
parent
commit
85e0371c0e
Signed by: Michele Calgaro <michele.calgaro@yahoo.it> GPG Key ID: 2A75B7CA8ADED5CF

+ 1
- 1
tdeioslave/trash/kcm_trash.cpp View File

@@ -50,7 +50,7 @@ TrashModule::TrashModule(TQWidget *parent, const char *name)
tab = new TQTabWidget(this);

policyWidget = new KTrashPropsWidget(this);
tab->addTab(policyWidget, i18n("Trash Polic&y"));
tab->addTab(policyWidget, i18n("&Trash Policy"));
connect(policyWidget, TQT_SIGNAL(changed(bool)), TQT_SIGNAL(changed(bool)));

TQVBoxLayout *top = new TQVBoxLayout(this);

+ 6
- 379
tdeioslave/trash/ktrashpropsdlgplugin.cpp View File

@@ -70,393 +70,20 @@ KTrashPropsDlgPlugin::KTrashPropsDlgPlugin( KPropertiesDialog *dialog, const cha

TDEGlobal::locale()->insertCatalogue( "tdeio_trash" );

mTrashImpl = new TrashImpl();
mTrashImpl->init();

readConfig();

TQFrame *frame = dialog->addPage(i18n("Polic&y"));
policyWidget = NULL;

setupGui( frame );

mUseTimeLimit->setChecked( mConfigMap[ mCurrentTrash ].useTimeLimit );
mUseSizeLimit->setChecked( mConfigMap[ mCurrentTrash ].useSizeLimit );
mSizeLimitType = mConfigMap[ mCurrentTrash ].sizeLimitType;
if ( mSizeLimitType == SIZE_LIMIT_FIXED )
{
mRbFixedSize->setChecked( true );
}
else
{
mRbPercentSize->setChecked( true );
}
mDays->setValue( mConfigMap[ mCurrentTrash ].days );
mPercentSize->setValue( mConfigMap[ mCurrentTrash ].percent );
mFixedSize->setValue( mConfigMap[ mCurrentTrash ].fixedSize );
mFixedSizeUnit->setCurrentItem( mConfigMap[ mCurrentTrash ].fixedSizeUnit );
mLimitReachedAction->setCurrentItem( mConfigMap[ mCurrentTrash ].actionType );
percentSizeChanged(mPercentSize->value());
fixedSizeChanged(mFixedSize->value());

useTypeChanged();

connect( mUseTimeLimit, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( setDirty() ) );
connect( mUseTimeLimit, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( useTypeChanged() ) );
connect( mDays, TQT_SIGNAL( valueChanged( int ) ),
this, TQT_SLOT( setDirty() ) );
connect( mUseSizeLimit, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( setDirty() ) );
connect( mUseSizeLimit, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( useTypeChanged() ) );
connect( mPercentSize, TQT_SIGNAL( valueChanged( double ) ),
this, TQT_SLOT( percentSizeChanged( double ) ) );
connect( mFixedSize, TQT_SIGNAL( valueChanged( double ) ),
this, TQT_SLOT( fixedSizeChanged( double ) ) );
connect( mPercentSize, TQT_SIGNAL( valueChanged( double ) ),
this, TQT_SLOT( setDirty() ) );
connect( mFixedSize, TQT_SIGNAL( valueChanged( double ) ),
this, TQT_SLOT( setDirty() ) );
connect( mFixedSizeUnit, TQT_SIGNAL( activated( int ) ),
this, TQT_SLOT( fixedSizeUnitActivated( int ) ) );
connect( mRbPercentSize, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( rbPercentSizeToggled( bool ) ) );
connect( mRbPercentSize, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( setDirty() ) );
connect( mRbFixedSize, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( rbFixedSizeToggled( bool ) ) );
connect( mRbFixedSize, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( setDirty() ) );
connect( mLimitReachedAction, TQT_SIGNAL( activated( int ) ),
this, TQT_SLOT( setDirty() ) );

trashChanged( 0 );
TQFrame *frame = dialog->addPage(i18n("&Trash Policy"));
policyWidget = new KTrashPropsWidget(frame);
TQVBoxLayout *vLayout = new TQVBoxLayout(frame, 0, 0);
vLayout->addWidget(policyWidget);
connect(policyWidget, TQT_SIGNAL(changed(bool)), TQT_SLOT(setDirty()));
}

KTrashPropsDlgPlugin::~KTrashPropsDlgPlugin()
{
}

void KTrashPropsDlgPlugin::setupGui( TQFrame *frame )
{
TQVBoxLayout *layout = new TQVBoxLayout( frame, 11, 6 );

TrashImpl::TrashDirMap map = mTrashImpl->trashDirectories();
if ( map.count() != 1 ) {
// If we have multiple trashes, we setup a widget to choose
// which trash to configure
TQListBox *mountPoints = new TQListBox( frame );
layout->addWidget( mountPoints );

const TQPixmap folderPixmap = TDEGlobal::iconLoader()->loadIcon( "folder", TDEIcon::Small );
TQMapConstIterator<int, TQString> it;
for ( it = map.begin(); it != map.end(); ++it ) {
DiscSpaceUtil util( it.data() );
mountPoints->insertItem( folderPixmap, util.mountPoint(), it.key() );
}

mountPoints->setCurrentItem( 0 );

connect( mountPoints, TQT_SIGNAL( highlighted( int ) ), TQT_SLOT( trashChanged( int ) ) );
} else {
mCurrentTrash = map[0];
}

TQHBoxLayout *daysLayout = new TQHBoxLayout( layout );

mUseTimeLimit = new TQCheckBox( i18n( "Delete files older than:" ), frame );
daysLayout->addWidget( mUseTimeLimit );
mDays = new TQSpinBox( 1, 365, 1, frame );
mDays->setSuffix( " days" );
daysLayout->addWidget( mDays );

TQGridLayout *sizeLayout = new TQGridLayout( layout, 2, 2 );
mUseSizeLimit = new TQCheckBox( i18n( "Limit to maximum size" ), frame );
sizeLayout->addMultiCellWidget( mUseSizeLimit, 0, 0, 0, 1 );

mSizeWidget = new TQWidget( frame );
sizeLayout->setColSpacing( 0, 30 );
sizeLayout->addWidget( mSizeWidget, 1, 1 );

TQGridLayout *sizeWidgetLayout = new TQGridLayout( mSizeWidget, 3, 3, 11, 6 );
mRbPercentSize = new TQRadioButton( i18n("&Percentage:"), mSizeWidget );
mRbFixedSize = new TQRadioButton( i18n("&Fixed size:"), mSizeWidget );
sizeWidgetLayout->addWidget( mRbPercentSize, 0, 0 );
sizeWidgetLayout->addWidget( mRbFixedSize, 1, 0 );

mPercentSize = new KDoubleSpinBox( 0, 100, 0.1, 10, 2, mSizeWidget );
mPercentSize->setSuffix( " %" );
sizeWidgetLayout->addWidget( mPercentSize, 0, 1 );
mSizeLabel = new TQLabel( mSizeWidget );
sizeWidgetLayout->addWidget( mSizeLabel, 0, 2 );

mFixedSize = new KDoubleSpinBox( 0, 1024*1024, 1, 500, 2, mSizeWidget );
sizeWidgetLayout->addWidget( mFixedSize, 1, 1 );
mFixedSizeUnit = new TQComboBox( mSizeWidget );
mFixedSizeUnit->setEditable( false );
mFixedSizeUnit->insertItem( i18n( "Bytes" ), SIZE_ID_B );
mFixedSizeUnit->insertItem( i18n( "KBytes" ), SIZE_ID_KB );
mFixedSizeUnit->insertItem( i18n( "MBytes" ), SIZE_ID_MB );
mFixedSizeUnit->insertItem( i18n( "GBytes" ), SIZE_ID_GB );
mFixedSizeUnit->insertItem( i18n( "TBytes" ), SIZE_ID_TB );
mFixedSizeUnit->setCurrentItem( 2 );
sizeWidgetLayout->addWidget( mFixedSizeUnit, 1, 2 );
TQLabel *label = new TQLabel( i18n( "When limit reached:" ), mSizeWidget );
sizeWidgetLayout->addWidget( label, 2, 0 );

mLimitReachedAction = new TQComboBox( mSizeWidget );
mLimitReachedAction->insertItem( i18n( "Warn me" ) );
mLimitReachedAction->insertItem( i18n( "Delete oldest files from trash" ) );
mLimitReachedAction->insertItem( i18n( "Delete biggest files from trash" ) );
sizeWidgetLayout->addMultiCellWidget( mLimitReachedAction, 2, 2, 1, 2 );

layout->addStretch();
}

void KTrashPropsDlgPlugin::applyChanges()
{
if ( !mCurrentTrash.isEmpty() ) {
ConfigEntry entry;
entry.useTimeLimit = mUseTimeLimit->isChecked();
entry.days = mDays->value();
entry.useSizeLimit = mUseSizeLimit->isChecked();
if (mRbFixedSize->isChecked())
{
entry.sizeLimitType = SIZE_LIMIT_FIXED;
}
else
{
entry.sizeLimitType = SIZE_LIMIT_PERCENT;
}
entry.percent = mPercentSize->value();
entry.fixedSize = mFixedSize->value();
entry.fixedSizeUnit = mFixedSizeUnit->currentItem();
entry.actionType = mLimitReachedAction->currentItem();
mConfigMap.insert( mCurrentTrash, entry );
}

writeConfig();

// Adjust trash size if necessary
TrashImpl::TrashDirMap trashDirs = mTrashImpl->trashDirectories();
for (TrashImpl::TrashDirMap::ConstIterator it = trashDirs.begin(); it != trashDirs.end(); ++it)
{
mTrashImpl->resizeTrash(it.key());
}
}

void KTrashPropsDlgPlugin::percentSizeChanged( double percent )
{
DiscSpaceUtil util( mCurrentTrash );
double partitionSize = util.size() * 1024.0; // convert to byte
double size = partitionSize*(percent/100.0);

TQString unit = i18n( "Bytes" );
if ( size >= 1024 ) {
unit = i18n( "KBytes" );
size = size/1024.0;
}
if ( size >= 1024 ) {
unit = i18n( "MBytes" );
size = size/1024.0;
}
if ( size >= 1024 ) {
unit = i18n( "GBytes" );
size = size/1024.0;
}
if ( size >= 1024 ) {
unit = i18n( "TBytes" );
size = size/1024.0;
}

mSizeLabel->setText( i18n( "(%1 %2)" ).arg( TQString::number( size, 'f', 2 ) ).arg( unit ) );
}

void KTrashPropsDlgPlugin::fixedSizeChanged( double value )
{
int currItem = mFixedSizeUnit->currentItem();
if (value > 1023.999 && currItem >= SIZE_ID_TB)
{
// Max limit 1024 TBytes
mFixedSizeUnit->setCurrentItem(SIZE_ID_TB);
mFixedSize->setValue(1024.0);
}
else if (value > 1023.999 && currItem < SIZE_ID_TB)
{
// Scale up to higher measure unit
while (value > 1023.999 && currItem < SIZE_ID_TB)
{
++currItem;
value /= 1024.0;
}
mFixedSizeUnit->setCurrentItem(currItem);
mFixedSize->setValue(value);
}
else if (value < 0.001)
{
// Scale down to lower measure unit
int currItem = mFixedSizeUnit->currentItem();
if (currItem > SIZE_ID_B)
{
mFixedSizeUnit->setCurrentItem(currItem - 1);
mFixedSize->setValue(1023.0);
}
}
// Need to call this manually because "activated" is not emitted by "mFixedSizeUnit"
// when the index is changed programmatically (see TQComboBox API docs)
fixedSizeUnitActivated(mFixedSizeUnit->currentItem());
}

void KTrashPropsDlgPlugin::fixedSizeUnitActivated(int index)
{
// Bytes can not be split into fractions
if (index == SIZE_ID_B)
{
mFixedSize->setPrecision(0);
}
else
{
mFixedSize->setPrecision(2);
}
}
void KTrashPropsDlgPlugin::rbPercentSizeToggled( bool buttonOn)
{
if (buttonOn)
{
mRbFixedSize->setChecked(false);
mSizeLimitType = SIZE_LIMIT_PERCENT;
}
else if (!mRbFixedSize->isChecked())
{
// Set the button back on if the user clicked it twice
mRbPercentSize->setChecked(true);
}
}
void KTrashPropsDlgPlugin::rbFixedSizeToggled( bool buttonOn)
{
if (buttonOn)
{
mRbPercentSize->setChecked(false);
mSizeLimitType = SIZE_LIMIT_FIXED;
}
else if (!mRbPercentSize->isChecked())
{
// Set the button back on if the user clicked it twice
mRbFixedSize->setChecked(true);
}
}

void KTrashPropsDlgPlugin::trashChanged( int value )
{
const TrashImpl::TrashDirMap map = mTrashImpl->trashDirectories();

if ( !mCurrentTrash.isEmpty() ) {
ConfigEntry entry;
entry.useTimeLimit = mUseTimeLimit->isChecked();
entry.days = mDays->value();
entry.useSizeLimit = mUseSizeLimit->isChecked();
entry.sizeLimitType = mSizeLimitType;
entry.percent = mPercentSize->value(),
entry.fixedSize = mFixedSize->value();
entry.fixedSizeUnit = mFixedSizeUnit->currentItem();
entry.actionType = mLimitReachedAction->currentItem();
mConfigMap.insert( mCurrentTrash, entry );
}

mCurrentTrash = map[ value ];

if ( mConfigMap.contains( mCurrentTrash ) ) {
const ConfigEntry entry = mConfigMap[ mCurrentTrash ];
mUseTimeLimit->setChecked( entry.useTimeLimit );
mDays->setValue( entry.days );
mUseSizeLimit->setChecked( entry.useSizeLimit );
if ( entry.sizeLimitType == SIZE_LIMIT_FIXED )
{
mRbFixedSize->setChecked( true );
}
else
{
mRbPercentSize->setChecked( true );
}
mPercentSize->setValue( entry.percent );
mFixedSize->setValue( entry.fixedSize );
mFixedSizeUnit->setCurrentItem( entry.fixedSizeUnit );
mLimitReachedAction->setCurrentItem( entry.actionType );
} else {
mUseTimeLimit->setChecked( false );
mDays->setValue( 7 );
mUseSizeLimit->setChecked( true );
mRbPercentSize->setChecked( true );
mPercentSize->setValue( 10.0 );
mFixedSize->setValue( 500 );
mFixedSizeUnit->setCurrentItem( SIZE_ID_MB );
mLimitReachedAction->setCurrentItem( 0 );
}

percentSizeChanged( mPercentSize->value() );
fixedSizeChanged( mFixedSize->value() );
}

void KTrashPropsDlgPlugin::useTypeChanged()
{
mDays->setEnabled( mUseTimeLimit->isChecked() );
mSizeWidget->setEnabled( mUseSizeLimit->isChecked() );
}

void KTrashPropsDlgPlugin::readConfig()
{
TDEConfig config( "trashrc" );
mConfigMap.clear();

const TQStringList groups = config.groupList();
for ( uint i = 0; i < groups.count(); ++i ) {
if ( groups[ i ].startsWith( "/" ) ) {
config.setGroup( groups[ i ] );
ConfigEntry entry;
entry.useTimeLimit = config.readBoolEntry( "UseTimeLimit", false );
entry.days = config.readNumEntry( "Days", 32000 );
entry.useSizeLimit = config.readBoolEntry( "UseSizeLimit", true );
entry.sizeLimitType = config.readNumEntry( "SizeLimitType", SIZE_LIMIT_PERCENT );
entry.percent = config.readDoubleNumEntry( "Percent", 10 );
entry.fixedSize = config.readDoubleNumEntry( "FixedSize", 500 );
entry.fixedSizeUnit = config.readNumEntry( "FixedSizeUnit", SIZE_ID_MB );
entry.actionType = config.readNumEntry( "LimitReachedAction", TrashConstant::ACTION_WARNING );
mConfigMap.insert( groups[ i ], entry );
}
}
}

void KTrashPropsDlgPlugin::writeConfig()
{
TDEConfig config( "trashrc" );

// first delete all existing groups
const TQStringList groups = config.groupList();
for ( uint i = 0; i < groups.count(); ++i )
if ( groups[ i ].startsWith( "/" ) )
config.deleteGroup( groups[ i ] );

TQMapConstIterator<TQString, ConfigEntry> it;
for ( it = mConfigMap.begin(); it != mConfigMap.end(); ++it ) {
config.setGroup( it.key() );
config.writeEntry( "UseTimeLimit", it.data().useTimeLimit );
config.writeEntry( "Days", it.data().days );
config.writeEntry( "UseSizeLimit", it.data().useSizeLimit );
config.writeEntry( "SizeLimitType", it.data().sizeLimitType );
config.writeEntry( "Percent", it.data().percent );
config.writeEntry( "FixedSize", it.data().fixedSize );
config.writeEntry( "FixedSizeUnit", it.data().fixedSizeUnit );
config.writeEntry( "LimitReachedAction", it.data().actionType );
}

config.sync();
policyWidget->save();
}

#include "ktrashpropsdlgplugin.moc"

+ 0
- 42
tdeioslave/trash/ktrashpropsdlgplugin.h View File

@@ -44,50 +44,8 @@ class KTrashPropsDlgPlugin : public KPropsDlgPlugin

virtual void applyChanges();

private slots:
void percentSizeChanged( double );
void fixedSizeChanged( double );
void fixedSizeUnitActivated ( int );
void rbPercentSizeToggled( bool );
void rbFixedSizeToggled( bool );
void trashChanged( int );
void useTypeChanged();

private:
KTrashPropsWidget *policyWidget;

void readConfig();
void writeConfig();
void setupGui( TQFrame *frame );

TQCheckBox *mUseTimeLimit;
TQSpinBox *mDays;
TQCheckBox *mUseSizeLimit;
int mSizeLimitType;
TQWidget *mSizeWidget;
TQRadioButton *mRbPercentSize, *mRbFixedSize;
KDoubleSpinBox *mPercentSize;
KDoubleSpinBox *mFixedSize;
TQComboBox *mFixedSizeUnit;
TQLabel *mSizeLabel;
TQComboBox *mLimitReachedAction;

TrashImpl *mTrashImpl;
TQString mCurrentTrash;

typedef struct {
bool useTimeLimit;
int days;
bool useSizeLimit;
int sizeLimitType;
double percent;
double fixedSize;
int fixedSizeUnit;
int actionType;
} ConfigEntry;

typedef TQMap<TQString, ConfigEntry> ConfigMap;
ConfigMap mConfigMap;
};

#endif

Loading…
Cancel
Save