diff options
Diffstat (limited to 'src/app/Konfigurator/kgcolors.cpp')
-rw-r--r-- | src/app/Konfigurator/kgcolors.cpp | 633 |
1 files changed, 633 insertions, 0 deletions
diff --git a/src/app/Konfigurator/kgcolors.cpp b/src/app/Konfigurator/kgcolors.cpp new file mode 100644 index 0000000..974d933 --- /dev/null +++ b/src/app/Konfigurator/kgcolors.cpp @@ -0,0 +1,633 @@ +/*************************************************************************** + kgcolors.cpp - description + ------------------- + copyright : (C) 2004 + by Csaba Karai + e-mail : krusader@users.sourceforge.net + web site : http://krusader.sourceforge.net + --------------------------------------------------------------------------- + Description + *************************************************************************** + + A + + db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b. + 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D + 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY' + 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b + 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88. + YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD + + S o u r c e F i l e + + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "kgcolors.h" +#include "../defaults.h" +#include "../Panel/krcolorcache.h" +#include <tdemessagebox.h> +#include <tdelocale.h> +#include <tdefiledialog.h> +#include <tdeglobalsettings.h> +#include <tdestandarddirs.h> +#include <tqhbox.h> +#include <tqheader.h> +#include <tqtabwidget.h> + +KgColors::KgColors( bool first, TQWidget* parent, const char* name ) : + KonfiguratorPage( first, parent, name ), offset( 0 ) +{ + TQGridLayout *kgColorsLayout = new TQGridLayout( parent ); + kgColorsLayout->setSpacing( 6 ); + + // -------------------------- GENERAL GROUPBOX ---------------------------------- + + TQGroupBox *generalGrp = createFrame( i18n( "General" ), parent, "kgColorsGeneralGrp" ); + TQGridLayout *generalGrid = createGridLayout( generalGrp->layout() ); + + generalGrid->setSpacing( 0 ); + generalGrid->setMargin( 5 ); + + KONFIGURATOR_CHECKBOX_PARAM generalSettings[] = + // cfg_class cfg_name default text restart tooltip + {{"Colors","KDE Default", _KDEDefaultColors, i18n( "Use the default TDE colors" ), false, "<p><img src='toolbar|kcontrol'></p>" + i18n( "<p>Use TDE's global color configuration.</p><p><i>Trinity Control Center -> Appearance & Themes -> Colors</i></p>") }, + {"Colors","Enable Alternate Background", _AlternateBackground, i18n( "Use alternate background color" ), false, i18n( "<p>The <b>background color</b> and the <b>alternate background</b> color alternates line by line.</p><p>When you don't use the <i>TDE default colors</i>, you can configure the alternate colors in the <i>colors</i> box.</p>") }, + {"Colors","Show Current Item Always", _ShowCurrentItemAlways, i18n( "Show current item even if not focused" ), false, i18n( "<p>Shows the last cursor position in the non active list panel.</p><p>This option is only available when you don't use the <i>TDE default colors</i>.</p>" ) }, + {"Colors","Dim Inactive Colors", _DimInactiveColors, i18n( "Dim the colors of the inactive panel" ), false, i18n( "<p>The colors of the inactive panel are calculated by a dim color and a dim factor.</p>" ) }}; + + generals = createCheckBoxGroup( 0, 2, generalSettings, sizeof(generalSettings)/sizeof(generalSettings[0]), generalGrp ); + generalGrid->addWidget( generals, 1, 0 ); + + generals->layout()->setSpacing( 5 ); + + connect( generals->find( "KDE Default" ), TQ_SIGNAL( stateChanged( int ) ), this, TQ_SLOT( slotDisable() ) ); + connect( generals->find( "Enable Alternate Background" ), TQ_SIGNAL( stateChanged( int ) ), this, TQ_SLOT( generatePreview() ) ); + connect( generals->find( "Show Current Item Always" ), TQ_SIGNAL( stateChanged( int ) ), this, TQ_SLOT( slotDisable() ) ); + connect( generals->find( "Dim Inactive Colors" ), TQ_SIGNAL( stateChanged( int ) ), this, TQ_SLOT( slotDisable() ) ); + + kgColorsLayout->addMultiCellWidget( generalGrp, 0 ,0, 0, 2 ); + TQHBox *hbox = new TQHBox( parent ); + + // -------------------------- COLORS GROUPBOX ---------------------------------- + + TQGroupBox *colorsFrameGrp = createFrame( i18n( "Colors" ), hbox, "kgColorsColorsGrp" ); + TQGridLayout *colorsFrameGrid = createGridLayout( colorsFrameGrp->layout() ); + colorsFrameGrid->setSpacing( 0 ); + colorsFrameGrid->setMargin( 3 ); + + colorTabWidget = new TQTabWidget( colorsFrameGrp, "colorTabWidget" ); + + connect( colorTabWidget, TQ_SIGNAL( currentChanged ( TQWidget * ) ), this, TQ_SLOT( generatePreview() ) ); + + colorsGrp = new TQWidget( colorTabWidget, "colorTab" ); + colorTabWidget->insertTab( colorsGrp, i18n( "Active" ) ); + + colorsGrid = new TQGridLayout( colorsGrp ); + colorsGrid->setSpacing( 0 ); + colorsGrid->setMargin( 2 ); + + ADDITIONAL_COLOR transparent = { i18n("Transparent"), TQt::white, "transparent" }; + + addColorSelector( "Foreground", i18n( "Foreground:" ), TDEGlobalSettings::textColor() ); + addColorSelector( "Directory Foreground", i18n( "Directory foreground:" ), getColorSelector( "Foreground" )->getColor(), i18n( "Same as foreground" ) ); + addColorSelector( "Executable Foreground", i18n( "Executable foreground:" ), getColorSelector( "Foreground" )->getColor(), i18n( "Same as foreground" ) ); + addColorSelector( "Symlink Foreground", i18n( "Symbolic link foreground:" ), getColorSelector( "Foreground" )->getColor(), i18n( "Same as foreground" ) ); + addColorSelector( "Invalid Symlink Foreground", i18n( "Invalid symlink foreground:" ), getColorSelector( "Foreground" )->getColor(), i18n( "Same as foreground" ) ); + addColorSelector( "Background", i18n( "Background:" ), TDEGlobalSettings::baseColor() ); + ADDITIONAL_COLOR sameAsBckgnd = { i18n("Same as background"), getColorSelector( "Background" )->getColor(), "Background" }; + addColorSelector( "Alternate Background", i18n( "Alternate background:" ), TDEGlobalSettings::alternateBackgroundColor(),"", &sameAsBckgnd, 1 ); + addColorSelector( "Marked Foreground", i18n( "Selected foreground:" ), TDEGlobalSettings::highlightedTextColor(), "", &transparent, 1 ); + addColorSelector( "Marked Background", i18n( "Selected background:" ), TDEGlobalSettings::highlightColor(), "", &sameAsBckgnd, 1 ); + ADDITIONAL_COLOR sameAsAltern = { i18n("Same as alt. background"), getColorSelector( "Alternate Background" )->getColor(), "Alternate Background" }; + addColorSelector( "Alternate Marked Background",i18n( "Alternate selected background:" ), getColorSelector( "Marked Background" )->getColor(), i18n( "Same as selected background" ), &sameAsAltern, 1 ); + addColorSelector( "Current Foreground", i18n( "Current foreground:" ), TQt::white, i18n( "Not used" ) ); + ADDITIONAL_COLOR sameAsMarkedForegnd = { i18n("Same as selected foreground"), getColorSelector( "Marked Foreground" )->getColor(), "Marked Foreground" }; + addColorSelector( "Marked Current Foreground", i18n( "Selected current foreground:" ), TQt::white, i18n( "Not used" ), &sameAsMarkedForegnd, 1); + addColorSelector( "Current Background", i18n( "Current background:" ), TQt::white, i18n( "Not used" ), &sameAsBckgnd, 1 ); + + colorsGrid->addWidget(createSpacer(colorsGrp, ""), itemList.count() - offset, 1); + + connect( getColorSelector( "Foreground" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotForegroundChanged() ) ); + connect( getColorSelector( "Background" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotBackgroundChanged() ) ); + connect( getColorSelector( "Alternate Background" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotAltBackgroundChanged() ) ); + connect( getColorSelector( "Marked Background" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotMarkedBackgroundChanged() ) ); + + inactiveColorStack = new TQWidgetStack( colorTabWidget, "colorTab2" ); + colorTabWidget->insertTab( inactiveColorStack, i18n( "Inactive" ) ); + + colorsGrp = normalInactiveWidget = new TQWidget( inactiveColorStack, "colorTab2" ); + + colorsGrid = new TQGridLayout( normalInactiveWidget ); + colorsGrid->setSpacing( 0 ); + colorsGrid->setMargin( 2 ); + + offset = endOfActiveColors = itemList.count(); + + addColorSelector( "Inactive Foreground", i18n( "Foreground:" ), getColorSelector( "Foreground" )->getColor(), i18n( "Same as active" ) ); + ADDITIONAL_COLOR sameAsInactForegnd = { i18n("Same as foreground"), getColorSelector( "Inactive Foreground" )->getColor(), "Inactive Foreground" }; + addColorSelector( "Inactive Directory Foreground", i18n( "Directory foreground:" ), getColorSelector( "Directory Foreground" )->getColor(), i18n( "Same as active" ), &sameAsInactForegnd, 1 ); + addColorSelector( "Inactive Executable Foreground", i18n( "Executable foreground:" ), getColorSelector( "Executable Foreground" )->getColor(), i18n( "Same as active" ), &sameAsInactForegnd, 1 ); + addColorSelector( "Inactive Symlink Foreground", i18n( "Symbolic link foreground:" ), getColorSelector( "Symlink Foreground" )->getColor(), i18n( "Same as active" ), &sameAsInactForegnd, 1 ); + addColorSelector( "Inactive Invalid Symlink Foreground", i18n( "Invalid symlink foreground:" ), getColorSelector( "Invalid Symlink Foreground" )->getColor(), i18n( "Same as active" ), &sameAsInactForegnd, 1 ); + addColorSelector( "Inactive Background", i18n( "Background:" ), getColorSelector( "Background" )->getColor(), i18n( "Same as active" ) ); + ADDITIONAL_COLOR sameAsInactBckgnd = { i18n("Same as background"), getColorSelector( "Inactive Background" )->getColor(), "Inactive Background" }; + addColorSelector( "Inactive Alternate Background", i18n( "Alternate background:" ), getColorSelector( "Alternate Background" )->getColor(), i18n( "Same as active" ), &sameAsInactBckgnd, 1 ); + addColorSelector( "Inactive Marked Foreground", i18n( "Selected foreground:" ), getColorSelector( "Marked Foreground" )->getColor(), i18n( "Same as active" ), &transparent, 1 ); + addColorSelector( "Inactive Marked Background", i18n( "Selected background:" ), getColorSelector( "Marked Background" )->getColor(), i18n( "Same as active" ), &sameAsInactBckgnd, 1 ); + ADDITIONAL_COLOR sameAsInactAltern[] = {{ i18n("Same as alt. background"), getColorSelector( "Inactive Alternate Background" )->getColor(), "Inactive Alternate Background" }, + { i18n("Same as selected background"), getColorSelector( "Inactive Marked Background" )->getColor(), "Inactive Marked Background" } }; + addColorSelector( "Inactive Alternate Marked Background", i18n( "Alternate selected background:" ), getColorSelector( "Alternate Marked Background" )->getColor(), i18n( "Same as active" ), sameAsInactAltern, 2 ); + addColorSelector( "Inactive Current Foreground", i18n( "Current foreground:" ), getColorSelector( "Current Foreground" )->getColor(), i18n( "Same as active" ) ); + ADDITIONAL_COLOR sameAsInactMarkedForegnd = { i18n("Same as selected foreground"), getColorSelector( "Inactive Marked Foreground" )->getColor(), "Inactive Marked Foreground" }; + addColorSelector( "Inactive Marked Current Foreground", i18n( "Selected current foreground:" ), getColorSelector( "Marked Current Foreground" )->getColor(), i18n( "Same as active" ), &sameAsInactMarkedForegnd, 1 ); + addColorSelector( "Inactive Current Background", i18n( "Current background:" ), getColorSelector( "Current Background" )->getColor(), i18n( "Same as active" ), &sameAsInactBckgnd, 1 ); + + colorsGrid->addWidget(createSpacer(normalInactiveWidget, ""), itemList.count() - offset, 1); + + connect( getColorSelector( "Inactive Foreground" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotInactiveForegroundChanged() ) ); + connect( getColorSelector( "Inactive Background" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotInactiveBackgroundChanged() ) ); + connect( getColorSelector( "Inactive Alternate Background" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotInactiveAltBackgroundChanged() ) ); + connect( getColorSelector( "Inactive Marked Background" ), TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotInactiveMarkedBackgroundChanged() ) ); + + offset = endOfPanelColors = itemList.count(); + + inactiveColorStack->addWidget( normalInactiveWidget ); + + colorsGrp = dimmedInactiveWidget = new TQWidget( inactiveColorStack, "colorTab2dimmed" ); + + colorsGrid = new TQGridLayout( dimmedInactiveWidget ); + colorsGrid->setSpacing( 0 ); + colorsGrid->setMargin( 2 ); + + addColorSelector( "Dim Target Color", i18n( "Dim target color:" ), TQt::white); + + int index = itemList.count() - offset; + labelList.append( addLabel( colorsGrid, index, 0, i18n("Dim factor:"), colorsGrp, TQString( "ColorsLabel%1" ).arg( index ).ascii() ) ); + dimFactor = createSpinBox("Colors", "Dim Factor", 100, 0, 100, colorsGrp); + dimFactor->setSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ); + connect( dimFactor, TQ_SIGNAL( valueChanged( int ) ), this, TQ_SLOT( generatePreview() ) ); + colorsGrid->addWidget( dimFactor, index++, 1 ); + + colorsGrid->addWidget(createSpacer(dimmedInactiveWidget, ""), itemList.count() + 1 - offset, 1); + + inactiveColorStack->addWidget( dimmedInactiveWidget ); + + inactiveColorStack->raiseWidget( normalInactiveWidget ); + + colorsGrp = new TQWidget( colorTabWidget, "colorTab3" ); + colorTabWidget->insertTab( colorsGrp, i18n( "Synchronizer" ) ); + + colorsGrid = new TQGridLayout( colorsGrp ); + colorsGrid->setSpacing( 0 ); + colorsGrid->setMargin( 2 ); + + ADDITIONAL_COLOR KDEDefaultBase = { i18n("TDE default"), TDEGlobalSettings::baseColor(), "KDE default" }; + ADDITIONAL_COLOR KDEDefaultFore = { i18n("TDE default"), TDEGlobalSettings::textColor(), "KDE default" }; + + offset = endOfPanelColors = itemList.count(); + + addColorSelector( "Synchronizer Equals Foreground", i18n( "Equals foreground:" ), TQt::black, TQString(), &KDEDefaultFore, 1 ); + addColorSelector( "Synchronizer Equals Background", i18n( "Equals background:" ), TDEGlobalSettings::baseColor(), TQString(), &KDEDefaultBase, 1 ); + addColorSelector( "Synchronizer Differs Foreground", i18n( "Differing foreground:" ), TQt::red, TQString(), &KDEDefaultFore, 1 ); + addColorSelector( "Synchronizer Differs Background", i18n( "Differing background:" ), TDEGlobalSettings::baseColor(), TQString(), &KDEDefaultBase, 1 ); + addColorSelector( "Synchronizer LeftCopy Foreground", i18n( "Copy to left foreground:" ), TQt::blue, TQString(), &KDEDefaultFore, 1 ); + addColorSelector( "Synchronizer LeftCopy Background", i18n( "Copy to left background:" ), TDEGlobalSettings::baseColor(), TQString(), &KDEDefaultBase, 1 ); + addColorSelector( "Synchronizer RightCopy Foreground", i18n( "Copy to right foreground:" ), TQt::darkGreen, TQString(), &KDEDefaultFore, 1 ); + addColorSelector( "Synchronizer RightCopy Background", i18n( "Copy to right background:" ), TDEGlobalSettings::baseColor(), TQString(), &KDEDefaultBase, 1 ); + addColorSelector( "Synchronizer Delete Foreground", i18n( "Delete foreground:" ), TQt::white, TQString(), &KDEDefaultFore, 1 ); + addColorSelector( "Synchronizer Delete Background", i18n( "Delete background:" ), TQt::red, TQString(), &KDEDefaultBase, 1 ); + + colorsGrid->addWidget(createSpacer(colorsGrp, ""), itemList.count() - offset, 1); + + colorsFrameGrid->addWidget( colorTabWidget, 0, 0 ); + + // -------------------------- PREVIEW GROUPBOX ---------------------------------- + + previewGrp = createFrame( i18n( "Preview" ), hbox, "kgColorsPreviewGrp" ); + previewGrid = createGridLayout( previewGrp->layout() ); + + preview = new TQListView( previewGrp, "colorPreView" ); + + preview->setShowSortIndicator(false); + preview->setSorting(-1); + preview->setEnabled( false ); + + preview->addColumn( i18n("Colors") ); + preview->header()->setStretchEnabled( true, 0 ); + + previewGrid->addWidget( preview, 0 ,0 ); + + kgColorsLayout->addMultiCellWidget( hbox, 1 ,1, 0, 2 ); + + importBtn = new KPushButton(i18n("Import color-scheme"),parent); + kgColorsLayout->addWidget(importBtn,2,0); + exportBtn = new KPushButton(i18n("Export color-scheme"),parent); + kgColorsLayout->addWidget(exportBtn,2,1); + kgColorsLayout->addWidget(createSpacer(parent, ""), 2,2); + connect(importBtn, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotImportColors())); + connect(exportBtn, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotExportColors())); + + slotDisable(); +} + +int KgColors::addColorSelector( TQString cfgName, TQString name, TQColor dflt, TQString dfltName, + ADDITIONAL_COLOR *addColor, int addColNum ) +{ + int index = itemList.count() - offset; + + labelList.append( addLabel( colorsGrid, index, 0, name, colorsGrp, TQString( "ColorsLabel%1" ).arg( index ).ascii() ) ); + KonfiguratorColorChooser *chooser = createColorChooser( "Colors", cfgName, dflt, colorsGrp, false, addColor, addColNum ); + chooser->setSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ); + + if( !dfltName.isEmpty() ) + chooser->setDefaultText( dfltName ); + + colorsGrid->addWidget( chooser, index, 1 ); + + connect( chooser, TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( generatePreview() ) ); + if( !offset ) + connect( chooser, TQ_SIGNAL( colorChanged() ), this, TQ_SLOT( slotActiveChanged() ) ); + + itemList.append( chooser ); + itemNames.append( cfgName ); + + return index; +} + +KonfiguratorColorChooser *KgColors::getColorSelector( TQString name ) +{ + TQValueList<TQString>::iterator it; + int position = 0; + + for( it = itemNames.begin(); it != itemNames.end(); it++, position++ ) + if( *it == name ) + return itemList.at( position ); + + return 0; +} + +TQLabel *KgColors::getSelectorLabel( TQString name ) +{ + TQValueList<TQString>::iterator it; + int position = 0; + + for( it = itemNames.begin(); it != itemNames.end(); it++, position++ ) + if( *it == name ) + return labelList.at( position ); + + return 0; +} + +void KgColors::slotDisable() +{ + bool enabled = generals->find( "KDE Default" )->isChecked(); + + importBtn->setEnabled(!enabled); + exportBtn->setEnabled(!enabled); + + for( int i = 0; labelList.at( i ) && i < endOfPanelColors ; i++ ) + labelList.at( i )->setEnabled( !enabled ); + + for( int j = 0; itemList.at( j ) && j < endOfPanelColors ; j++ ) + itemList.at( j )->setEnabled( !enabled ); + + generals->find("Enable Alternate Background")->setEnabled( enabled ); + generals->find("Show Current Item Always")->setEnabled( !enabled ); + generals->find("Dim Inactive Colors")->setEnabled( !enabled ); + + bool dimmed = !enabled && generals->find("Dim Inactive Colors")->isChecked(); + if( dimmed ) + inactiveColorStack->raiseWidget( dimmedInactiveWidget ); + else + inactiveColorStack->raiseWidget( normalInactiveWidget ); + + enabled = enabled || !generals->find( "Show Current Item Always" )->isChecked(); + + getColorSelector( "Inactive Current Foreground" )->setEnabled( !enabled ); + getColorSelector( "Inactive Current Background" )->setEnabled( !enabled ); + + generatePreview(); +} + +void KgColors::slotActiveChanged() +{ + for( int i = 0; i != endOfActiveColors; i++ ) + itemList.at( endOfActiveColors + i )->setDefaultColor( itemList.at( i )->getColor() ); +} + +void KgColors::slotForegroundChanged() +{ + TQColor color = getColorSelector( "Foreground" )->getColor(); + + getColorSelector( "Directory Foreground" )->setDefaultColor( color ); + getColorSelector( "Executable Foreground" )->setDefaultColor( color ); + getColorSelector( "Symlink Foreground" )->setDefaultColor( color ); + getColorSelector( "Invalid Symlink Foreground" )->setDefaultColor( color ); +} + +void KgColors::slotBackgroundChanged() +{ + TQColor color = getColorSelector( "Background" )->getColor(); + + getColorSelector( "Alternate Background" )->changeAdditionalColor( 0, color ); + getColorSelector( "Marked Background" )->changeAdditionalColor( 0, color ); + getColorSelector( "Current Background" )->changeAdditionalColor( 0, color ); +} + +void KgColors::slotAltBackgroundChanged() +{ + TQColor color = getColorSelector( "Alternate Background" )->getColor(); + getColorSelector( "Alternate Marked Background" )->changeAdditionalColor( 0, color ); +} + +void KgColors::slotMarkedBackgroundChanged() +{ + TQColor color = getColorSelector( "Marked Background" )->getColor(); + getColorSelector( "Alternate Marked Background" )->setDefaultColor( color ); +} + +void KgColors::slotInactiveForegroundChanged() +{ + TQColor color = getColorSelector( "Inactive Foreground" )->getColor(); + + getColorSelector( "Inactive Directory Foreground" )->changeAdditionalColor( 0, color ); + getColorSelector( "Inactive Executable Foreground" )->changeAdditionalColor( 0, color ); + getColorSelector( "Inactive Symlink Foreground" )->changeAdditionalColor( 0, color ); + getColorSelector( "Inactive Invalid Symlink Foreground" )->changeAdditionalColor( 0, color ); +} + +void KgColors::slotInactiveBackgroundChanged() +{ + TQColor color = getColorSelector( "Inactive Background" )->getColor(); + + getColorSelector( "Inactive Alternate Background" )->changeAdditionalColor( 0, color ); + getColorSelector( "Inactive Marked Background" )->changeAdditionalColor( 0, color ); + getColorSelector( "Inactive Current Background" )->changeAdditionalColor( 0, color ); +} + +void KgColors::slotInactiveAltBackgroundChanged() +{ + TQColor color = getColorSelector( "Inactive Alternate Background" )->getColor(); + getColorSelector( "Inactive Alternate Marked Background" )->changeAdditionalColor( 0, color ); +} + +void KgColors::slotInactiveMarkedBackgroundChanged() +{ + TQColor color = getColorSelector( "Inactive Marked Background" )->getColor(); + getColorSelector( "Inactive Alternate Marked Background" )->changeAdditionalColor( 1, color ); +} + +void KgColors::setColorWithDimming(PreviewItem * item, TQColor foreground, TQColor background, bool dimmed ) +{ + if ( dimmed && dimFactor->value() < 100) + { + int dim = dimFactor->value(); + TQColor dimColor = getColorSelector("Dim Target Color")->getColor(); + + foreground = TQColor((dimColor.red() * (100 - dim) + foreground.red() * dim) / 100, + (dimColor.green() * (100 - dim) + foreground.green() * dim) / 100, + (dimColor.blue() * (100 - dim) + foreground.blue() * dim) / 100); + background = TQColor((dimColor.red() * (100 - dim) + background.red() * dim) / 100, + (dimColor.green() * (100 - dim) + background.green() * dim) / 100, + (dimColor.blue() * (100 - dim) + background.blue() * dim) / 100); + } + item->setColor(foreground, background); +} + +void KgColors::generatePreview() +{ + int currentPage = colorTabWidget->currentPageIndex(); + + preview->clear(); + + if( currentPage == 0 || currentPage == 1 ) + { + PreviewItem *pwMarkCur = new PreviewItem( preview, i18n( "Selected + Current" ) ); + PreviewItem *pwMark2 = new PreviewItem( preview, i18n( "Selected 2" ) ); + PreviewItem *pwMark1 = new PreviewItem( preview, i18n( "Selected 1" ) ); + PreviewItem *pwCurrent = new PreviewItem( preview, i18n( "Current" ) ); + PreviewItem *pwInvLink = new PreviewItem( preview, i18n( "Invalid symlink" ) ); + PreviewItem *pwSymLink = new PreviewItem( preview, i18n( "Symbolic link" ) ); + PreviewItem *pwApp = new PreviewItem( preview, i18n( "Application" ) ); + PreviewItem *pwFile = new PreviewItem( preview, i18n( "File" ) ); + PreviewItem *pwDir = new PreviewItem( preview, i18n( "Directory" ) ); + + bool isActive = currentPage == 0; + + // create local color cache instance, which does NOT affect the color cache instance using to paint the panels + KrColorCache colCache; + + // create local color settings instance, which initially contains the setings from krConfig + KrColorSettings colorSettings; + + // copy over local settings to color settings instance, which does not affect the persisted krConfig settings + TQValueList<TQString> names = KrColorSettings::getColorNames(); + for ( TQStringList::Iterator it = names.begin(); it != names.end(); ++it ) + { + KonfiguratorColorChooser * chooser = getColorSelector( *it ); + if (!chooser) + continue; + colorSettings.setColorTextValue( *it, chooser->getValue()); + if (chooser->isValueRGB()) + colorSettings.setColorValue( *it, chooser->getColor()); + else + colorSettings.setColorValue( *it, TQColor()); + } + + colorSettings.setBoolValue("KDE Default", generals->find( "KDE Default" )->isChecked()); + colorSettings.setBoolValue("Enable Alternate Background", generals->find( "Enable Alternate Background" )->isChecked()); + colorSettings.setBoolValue("Show Current Item Always", generals->find( "Show Current Item Always" )->isChecked()); + colorSettings.setBoolValue("Dim Inactive Colors", generals->find( "Dim Inactive Colors" )->isChecked()); + colorSettings.setNumValue("Dim Factor", dimFactor->value()); + + // let the color cache use the local color settings + colCache.setColors( colorSettings ); + + // ask the local color cache for certain color groups and use them to color the preview + TQColorGroup cg; + colCache.getColors(cg, KrColorItemType(KrColorItemType::Directory, false, isActive, false, false)); + pwDir->setColor( cg.text(), cg.background() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::File, true, isActive, false, false)); + pwFile->setColor( cg.text(), cg.background() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::Executable, false, isActive, false, false)); + pwApp->setColor( cg.text(), cg.background() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::Symlink, true, isActive, false, false)); + pwSymLink->setColor( cg.text(), cg.background() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::InvalidSymlink, false, isActive, false, false)); + pwInvLink->setColor( cg.text(), cg.background() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::File, true, isActive, true, false)); + pwCurrent->setColor( cg.highlightedText(), cg.highlight() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::File, false, isActive, false, true)); + pwMark1->setColor( cg.highlightedText(), cg.highlight() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::File, true, isActive, false, true)); + pwMark2->setColor( cg.highlightedText(), cg.highlight() ); + colCache.getColors(cg, KrColorItemType(KrColorItemType::File, false, isActive, true, true)); + pwMarkCur->setColor( cg.highlightedText(), cg.highlight() ); + }else if( currentPage == 2 ) + { + PreviewItem *pwDelete = new PreviewItem( preview, i18n( "Delete" ) ); + PreviewItem *pwRightCopy = new PreviewItem( preview, i18n( "Copy to right" ) ); + PreviewItem *pwLeftCopy = new PreviewItem( preview, i18n( "Copy to left" ) ); + PreviewItem *pwDiffers = new PreviewItem( preview, i18n( "Differing" ) ); + PreviewItem *pwEquals = new PreviewItem( preview, i18n( "Equals" ) ); + + pwEquals->setColor( getColorSelector( "Synchronizer Equals Foreground" )->getColor(), + getColorSelector( "Synchronizer Equals Background" )->getColor() ); + pwDiffers->setColor( getColorSelector( "Synchronizer Differs Foreground" )->getColor(), + getColorSelector( "Synchronizer Differs Background" )->getColor() ); + pwLeftCopy->setColor ( getColorSelector( "Synchronizer LeftCopy Foreground" )->getColor(), + getColorSelector( "Synchronizer LeftCopy Background" )->getColor() ); + pwRightCopy->setColor( getColorSelector( "Synchronizer RightCopy Foreground" )->getColor(), + getColorSelector( "Synchronizer RightCopy Background" )->getColor() ); + pwDelete->setColor( getColorSelector( "Synchronizer Delete Foreground" )->getColor(), + getColorSelector( "Synchronizer Delete Background" )->getColor() ); + } +} + +bool KgColors::apply() +{ + bool result = KonfiguratorPage::apply(); + KrColorCache::getColorCache().refreshColors(); + return result; +} + +void KgColors::slotImportColors() { + // find $TDEDIR/share/apps/krusader + TQString basedir = TDEGlobal::dirs()->findResourceDir("appdata", "total_commander.keymap"); + // let the user select a file to load + TQString file = KFileDialog::getOpenFileName(basedir, "*.color", 0, i18n("Select a color-scheme file")); + if (file == TQString()) return; + TQFile f(file); + if (!f.open(IO_ReadOnly)) { + KMessageBox::error(this, i18n("Error: unable to read from file"), i18n("Error")); + return; + } + TQDataStream stream(&f); + // ok, import away + deserialize(stream); + generatePreview(); +} + +void KgColors::slotExportColors() { + TQString file = KFileDialog::getSaveFileName(TQString(), "*", 0, i18n("Select a color scheme file")); + if (file == TQString()) return; + TQFile f(file); + if (f.exists() && KMessageBox::warningContinueCancel(this, + i18n("File ")+file+i18n(" already exists. Are you sure you want to overwrite it?"), + i18n("Warning"), i18n("Overwrite")) != KMessageBox::Continue) return; + if (!f.open(IO_WriteOnly)) { + KMessageBox::error(this, i18n("Error: unable to write to file"), i18n("Error")); + return; + } + TQDataStream stream(&f); + serialize(stream); +} + +void KgColors::serialize(TQDataStream & stream) +{ + serializeItem(stream, "Alternate Background"); + serializeItem(stream, "Alternate Marked Background"); + serializeItem(stream, "Background"); + serializeItem(stream, "Current Background"); + serializeItem(stream, "Current Foreground"); + serializeItem(stream, "Enable Alternate Background"); + serializeItem(stream, "Foreground"); + serializeItem(stream, "Directory Foreground"); + serializeItem(stream, "Executable Foreground"); + serializeItem(stream, "Symlink Foreground"); + serializeItem(stream, "Invalid Symlink Foreground"); + serializeItem(stream, "Inactive Alternate Background"); + serializeItem(stream, "Inactive Alternate Marked Background"); + serializeItem(stream, "Inactive Background"); + serializeItem(stream, "Inactive Current Foreground"); + serializeItem(stream, "Inactive Current Background"); + serializeItem(stream, "Inactive Marked Background"); + serializeItem(stream, "Inactive Marked Current Foreground"); + serializeItem(stream, "Inactive Marked Foreground"); + serializeItem(stream, "Inactive Foreground"); + serializeItem(stream, "Inactive Directory Foreground"); + serializeItem(stream, "Inactive Executable Foreground"); + serializeItem(stream, "Inactive Symlink Foreground"); + serializeItem(stream, "Inactive Invalid Symlink Foreground"); + serializeItem(stream, "Dim Inactive Colors"); + serializeItem(stream, "Dim Target Color"); + serializeItem(stream, "Dim Factor"); + serializeItem(stream, "KDE Default"); + serializeItem(stream, "Marked Background"); + serializeItem(stream, "Marked Current Foreground"); + serializeItem(stream, "Marked Foreground"); + serializeItem(stream, "Show Current Item Always"); + serializeItem(stream, "Synchronizer Equals Foreground"); + serializeItem(stream, "Synchronizer Equals Background"); + serializeItem(stream, "Synchronizer Differs Foreground"); + serializeItem(stream, "Synchronizer Differs Background"); + serializeItem(stream, "Synchronizer LeftCopy Foreground"); + serializeItem(stream, "Synchronizer LeftCopy Background"); + serializeItem(stream, "Synchronizer RightCopy Foreground"); + serializeItem(stream, "Synchronizer RightCopy Background"); + serializeItem(stream, "Synchronizer Delete Foreground"); + serializeItem(stream, "Synchronizer Delete Background"); + stream << TQString("") << TQString(""); +} + +void KgColors::deserialize(TQDataStream & stream) +{ + for (;;) + { + TQString name, value; + stream >> name >> value; + if (name == "") + break; + + if (name == "KDE Default" || name == "Enable Alternate Background" || + name == "Show Current Item Always" || name == "Dim Inactive Colors" ) + { + bool bValue = false; + value = value.lower(); + if( value == "true" || value == "yes" || value == "on" || value == "1" ) + bValue = true; + + generals->find( name )->setChecked( bValue ); + continue; + } + + if( name == "Dim Factor" ) + { + dimFactor->setValue( value.toInt() ); + continue; + } + + KonfiguratorColorChooser *selector = getColorSelector( name ); + if( selector == 0 ) + break; + selector->setValue( value ); + } +} + +void KgColors::serializeItem(class TQDataStream & stream, const char * name) +{ + stream << TQString(name); + if( (strcmp( name, "KDE Default") == 0) + || (strcmp( name, "Enable Alternate Background") == 0) + || (strcmp( name, "Show Current Item Always") == 0) + || (strcmp( name, "Dim Inactive Colors") == 0) ) + { + bool bValue = generals->find( name )->isChecked(); + stream << TQString( bValue ? "true" : "false" ); + } + else if( strcmp( name, "Dim Factor") == 0 ) + stream << TQString::number(dimFactor->value()); + else + { + KonfiguratorColorChooser *selector = getColorSelector( name ); + stream << selector->getValue(); + } +} + +#include "kgcolors.moc" |