From 85e0371c0e2a969d01347ddb5ec8f0e273084994 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sun, 14 Apr 2019 21:43:08 +0900 Subject: Unified widget code for trash property dialog and TDE control module. This resolves bug 1923. Signed-off-by: Michele Calgaro --- tdeioslave/trash/kcm_trash.cpp | 2 +- tdeioslave/trash/ktrashpropsdlgplugin.cpp | 385 +----------------------------- tdeioslave/trash/ktrashpropsdlgplugin.h | 42 ---- 3 files changed, 7 insertions(+), 422 deletions(-) diff --git a/tdeioslave/trash/kcm_trash.cpp b/tdeioslave/trash/kcm_trash.cpp index abff4f612..3a915fac0 100644 --- a/tdeioslave/trash/kcm_trash.cpp +++ b/tdeioslave/trash/kcm_trash.cpp @@ -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); diff --git a/tdeioslave/trash/ktrashpropsdlgplugin.cpp b/tdeioslave/trash/ktrashpropsdlgplugin.cpp index 41c902b24..067c10b6e 100644 --- a/tdeioslave/trash/ktrashpropsdlgplugin.cpp +++ b/tdeioslave/trash/ktrashpropsdlgplugin.cpp @@ -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 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 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" diff --git a/tdeioslave/trash/ktrashpropsdlgplugin.h b/tdeioslave/trash/ktrashpropsdlgplugin.h index 9eab58eb1..b839f6428 100644 --- a/tdeioslave/trash/ktrashpropsdlgplugin.h +++ b/tdeioslave/trash/ktrashpropsdlgplugin.h @@ -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 ConfigMap; - ConfigMap mConfigMap; }; #endif -- cgit v1.2.1