/*
* KCMStyle
* Copyright ( C ) 2002 Karol Szwed < gallium @ kde . org >
* Copyright ( C ) 2002 Daniel Molkentin < molkentin @ kde . org >
*
* Portions Copyright ( C ) 2000 TrollTech AS .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; see the file COPYING . If not , write to
* the Free Software Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
* Boston , MA 02110 - 1301 , USA .
*/
# ifdef HAVE_CONFIG_H
# include "config.h"
# endif
# include <tqcheckbox.h>
# include <kcombobox.h>
# include <tqlistbox.h>
# include <tqgroupbox.h>
# include <tqlabel.h>
# include <tqlayout.h>
# include <tqslider.h>
# include <tqstylefactory.h>
# include <tqtabwidget.h>
# include <tqvbox.h>
# include <tqfile.h>
# include <tqsettings.h>
# include <tqobjectlist.h>
# include <tqpixmapcache.h>
# include <tqwhatsthis.h>
# include <tqpushbutton.h>
# include <dcopclient.h>
# include <kapplication.h>
# include <kglobalsettings.h>
# include <kdebug.h>
# include <kipc.h>
# include <kaboutdata.h>
# include <kdialog.h>
# include <klibloader.h>
# include <klistview.h>
# include <kmessagebox.h>
# include <ksimpleconfig.h>
# include <kstyle.h>
# include <kstandarddirs.h>
# include "../krdb/krdb.h"
# include "kcmstyle.h"
# include "styleconfdialog.h"
# include <X11/Xlib.h>
// X11 namespace cleanup
# undef Below
# undef KeyPress
# undef KeyRelease
/**** DLL Interface for kcontrol ****/
// Plugin Interface
// Danimo: Why do we use the old interface?!
extern " C "
{
KDE_EXPORT KCModule * create_style ( TQWidget * parent , const char * )
{
KGlobal : : locale ( ) - > insertCatalogue ( " kcmstyle " ) ;
return new KCMStyle ( parent , " kcmstyle " ) ;
}
KDE_EXPORT void init_style ( )
{
uint flags = KRdbExportQtSettings | KRdbExportQtColors | KRdbExportXftSettings ;
KConfig config ( " kcmdisplayrc " , true /*readonly*/ , false /*don't read kdeglobals etc.*/ ) ;
config . setGroup ( " X11 " ) ;
// This key is written by the "colors" module.
bool exportKDEColors = config . readBoolEntry ( " exportKDEColors " , true ) ;
if ( exportKDEColors )
flags | = KRdbExportColors ;
runRdb ( flags ) ;
// Write some Qt root property.
# ifndef __osf__ // this crashes under Tru64 randomly -- will fix later
TQByteArray properties ;
TQDataStream d ( properties , IO_WriteOnly ) ;
d . setVersion ( 3 ) ; // Qt2 apps need this.
d < < kapp - > palette ( ) < < KGlobalSettings : : generalFont ( ) ;
Atom a = XInternAtom ( tqt_xdisplay ( ) , " _QT_DESKTOP_PROPERTIES " , false ) ;
// do it for all root windows - multihead support
int screen_count = ScreenCount ( tqt_xdisplay ( ) ) ;
for ( int i = 0 ; i < screen_count ; i + + )
XChangeProperty ( tqt_xdisplay ( ) , RootWindow ( tqt_xdisplay ( ) , i ) ,
a , a , 8 , PropModeReplace ,
( unsigned char * ) properties . data ( ) , properties . size ( ) ) ;
# endif
}
}
/*
typedef KGenericFactory < KWidgetSettingsModule , TQWidget > GeneralFactory ;
K_EXPORT_COMPONENT_FACTORY ( kcm_kcmstyle , GeneralFactory )
*/
KCMStyle : : KCMStyle ( TQWidget * parent , const char * name )
: KCModule ( parent , name ) , appliedStyle ( NULL )
{
setQuickHelp ( i18n ( " <h1>Style</h1> "
" This module allows you to modify the visual appearance "
" of user interface elements, such as the widget style "
" and effects. " ) ) ;
m_bEffectsDirty = false ;
m_bStyleDirty = false ;
m_bToolbarsDirty = false ;
KGlobal : : dirs ( ) - > addResourceType ( " themes " ,
KStandardDirs : : kde_default ( " data " ) + " kstyle/themes " ) ;
KAboutData * about =
new KAboutData ( I18N_NOOP ( " kcmstyle " ) ,
I18N_NOOP ( " TDE Style Module " ) ,
0 , 0 , KAboutData : : License_GPL ,
I18N_NOOP ( " (c) 2002 Karol Szwed, Daniel Molkentin " ) ) ;
about - > addAuthor ( " Karol Szwed " , 0 , " gallium@kde.org " ) ;
about - > addAuthor ( " Daniel Molkentin " , 0 , " molkentin@kde.org " ) ;
about - > addAuthor ( " Ralf Nolden " , 0 , " nolden@kde.org " ) ;
setAboutData ( about ) ;
// Setup pages and mainLayout
mainLayout = new TQVBoxLayout ( this ) ;
tabWidget = new TQTabWidget ( this ) ;
mainLayout - > addWidget ( tabWidget ) ;
page1 = new TQWidget ( tabWidget ) ;
page1Layout = new TQVBoxLayout ( page1 , KDialog : : marginHint ( ) , KDialog : : spacingHint ( ) ) ;
page2 = new TQWidget ( tabWidget ) ;
page2Layout = new TQVBoxLayout ( page2 , KDialog : : marginHint ( ) , KDialog : : spacingHint ( ) ) ;
page3 = new TQWidget ( tabWidget ) ;
page3Layout = new TQVBoxLayout ( page3 , KDialog : : marginHint ( ) , KDialog : : spacingHint ( ) ) ;
// Add Page1 (Style)
// -----------------
gbWidgetStyle = new TQGroupBox ( i18n ( " Widget Style " ) , page1 , " gbWidgetStyle " ) ;
gbWidgetStyle - > setColumnLayout ( 0 , Qt : : Vertical ) ;
gbWidgetStyle - > layout ( ) - > setMargin ( KDialog : : marginHint ( ) ) ;
gbWidgetStyle - > layout ( ) - > setSpacing ( KDialog : : spacingHint ( ) ) ;
gbWidgetStyleLayout = new TQVBoxLayout ( gbWidgetStyle - > layout ( ) ) ;
gbWidgetStyleLayout - > setAlignment ( Qt : : AlignTop ) ;
hbLayout = new TQHBoxLayout ( KDialog : : spacingHint ( ) , " hbLayout " ) ;
cbStyle = new KComboBox ( gbWidgetStyle , " cbStyle " ) ;
cbStyle - > setEditable ( FALSE ) ;
hbLayout - > addWidget ( cbStyle ) ;
pbConfigStyle = new TQPushButton ( i18n ( " Con&figure... " ) , gbWidgetStyle ) ;
pbConfigStyle - > setSizePolicy ( TQSizePolicy : : Maximum , TQSizePolicy : : Minimum ) ;
pbConfigStyle - > setEnabled ( FALSE ) ;
hbLayout - > addWidget ( pbConfigStyle ) ;
gbWidgetStyleLayout - > addLayout ( hbLayout ) ;
lblStyleDesc = new TQLabel ( gbWidgetStyle ) ;
lblStyleDesc - > setTextFormat ( TQt : : RichText ) ;
gbWidgetStyleLayout - > addWidget ( lblStyleDesc ) ;
cbIconsOnButtons = new TQCheckBox ( i18n ( " Sho&w icons on buttons " ) , gbWidgetStyle ) ;
gbWidgetStyleLayout - > addWidget ( cbIconsOnButtons ) ;
cbScrollablePopupMenus = new TQCheckBox ( i18n ( " Enable &scrolling in popup menus " ) , gbWidgetStyle ) ;
gbWidgetStyleLayout - > addWidget ( cbScrollablePopupMenus ) ;
cbAutoHideAccelerators = new TQCheckBox ( i18n ( " Hide &accelerators when not in use " ) , gbWidgetStyle ) ;
gbWidgetStyleLayout - > addWidget ( cbAutoHideAccelerators ) ;
cbEnableTooltips = new TQCheckBox ( i18n ( " E&nable tooltips " ) , gbWidgetStyle ) ;
gbWidgetStyleLayout - > addWidget ( cbEnableTooltips ) ;
cbTearOffHandles = new TQCheckBox ( i18n ( " Show tear-off handles in &popup menus " ) , gbWidgetStyle ) ;
gbWidgetStyleLayout - > addWidget ( cbTearOffHandles ) ;
cbTearOffHandles - > hide ( ) ; // reenable when the corresponding Qt method is virtual and properly reimplemented
TQGroupBox * gbPreview = new TQGroupBox ( i18n ( " Preview " ) , page1 ) ;
gbPreview - > setColumnLayout ( 0 , Qt : : Vertical ) ;
gbPreview - > layout ( ) - > setMargin ( 0 ) ;
gbPreview - > layout ( ) - > setSpacing ( KDialog : : spacingHint ( ) ) ;
gbPreview - > setFlat ( true ) ;
stylePreview = new StylePreview ( gbPreview ) ;
gbPreview - > layout ( ) - > add ( stylePreview ) ;
page1Layout - > addWidget ( gbWidgetStyle ) ;
page1Layout - > addWidget ( gbPreview ) ;
// Connect all required stuff
connect ( cbStyle , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( styleChanged ( ) ) ) ;
connect ( cbStyle , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( updateConfigButton ( ) ) ) ;
connect ( pbConfigStyle , TQT_SIGNAL ( clicked ( ) ) , this , TQT_SLOT ( styleSpecificConfig ( ) ) ) ;
// Add Page2 (Effects)
// -------------------
cbEnableEffects = new TQCheckBox ( i18n ( " &Enable GUI effects " ) , page2 ) ;
containerFrame = new TQFrame ( page2 ) ;
containerFrame - > setFrameStyle ( TQFrame : : NoFrame | TQFrame : : Plain ) ;
containerFrame - > setMargin ( 0 ) ;
containerLayout = new TQGridLayout ( containerFrame , 1 , 1 , // rows, columns
KDialog : : marginHint ( ) , KDialog : : spacingHint ( ) ) ;
comboComboEffect = new TQComboBox ( FALSE , containerFrame ) ;
comboComboEffect - > insertItem ( i18n ( " Disable " ) ) ;
comboComboEffect - > insertItem ( i18n ( " Animate " ) ) ;
lblComboEffect = new TQLabel ( i18n ( " Combobo&x effect: " ) , containerFrame ) ;
lblComboEffect - > setBuddy ( comboComboEffect ) ;
containerLayout - > addWidget ( lblComboEffect , 0 , 0 ) ;
containerLayout - > addWidget ( comboComboEffect , 0 , 1 ) ;
comboTooltipEffect = new TQComboBox ( FALSE , containerFrame ) ;
comboTooltipEffect - > insertItem ( i18n ( " Disable " ) ) ;
comboTooltipEffect - > insertItem ( i18n ( " Animate " ) ) ;
comboTooltipEffect - > insertItem ( i18n ( " Fade " ) ) ;
lblTooltipEffect = new TQLabel ( i18n ( " &Tool tip effect: " ) , containerFrame ) ;
lblTooltipEffect - > setBuddy ( comboTooltipEffect ) ;
containerLayout - > addWidget ( lblTooltipEffect , 1 , 0 ) ;
containerLayout - > addWidget ( comboTooltipEffect , 1 , 1 ) ;
comboRubberbandEffect = new TQComboBox ( FALSE , containerFrame ) ;
comboRubberbandEffect - > insertItem ( i18n ( " Disable " ) ) ;
comboRubberbandEffect - > insertItem ( i18n ( " Make translucent " ) ) ;
lblRubberbandEffect = new TQLabel ( i18n ( " &Rubberband effect: " ) , containerFrame ) ;
lblRubberbandEffect - > setBuddy ( comboRubberbandEffect ) ;
containerLayout - > addWidget ( lblRubberbandEffect , 2 , 0 ) ;
containerLayout - > addWidget ( comboRubberbandEffect , 2 , 1 ) ;
comboMenuEffect = new TQComboBox ( FALSE , containerFrame ) ;
comboMenuEffect - > insertItem ( i18n ( " Disable " ) ) ;
comboMenuEffect - > insertItem ( i18n ( " Animate " ) ) ;
comboMenuEffect - > insertItem ( i18n ( " Fade " ) ) ;
comboMenuEffect - > insertItem ( i18n ( " Make Translucent " ) ) ;
lblMenuEffect = new TQLabel ( i18n ( " &Menu effect: " ) , containerFrame ) ;
lblMenuEffect - > setBuddy ( comboMenuEffect ) ;
containerLayout - > addWidget ( lblMenuEffect , 3 , 0 ) ;
containerLayout - > addWidget ( comboMenuEffect , 3 , 1 ) ;
comboMenuHandle = new TQComboBox ( FALSE , containerFrame ) ;
comboMenuHandle - > insertItem ( i18n ( " Disable " ) ) ;
comboMenuHandle - > insertItem ( i18n ( " Application Level " ) ) ;
// comboMenuHandle->insertItem( i18n("Enable") );
lblMenuHandle = new TQLabel ( i18n ( " Me&nu tear-off handles: " ) , containerFrame ) ;
lblMenuHandle - > setBuddy ( comboMenuHandle ) ;
containerLayout - > addWidget ( lblMenuHandle , 4 , 0 ) ;
containerLayout - > addWidget ( comboMenuHandle , 4 , 1 ) ;
cbMenuShadow = new TQCheckBox ( i18n ( " Menu &drop shadow " ) , containerFrame ) ;
containerLayout - > addWidget ( cbMenuShadow , 5 , 0 ) ;
// Push the [label combo] to the left.
comboSpacer = new TQSpacerItem ( 20 , 20 , TQSizePolicy : : Expanding , TQSizePolicy : : Minimum ) ;
containerLayout - > addItem ( comboSpacer , 1 , 2 ) ;
// Separator.
TQFrame * hline = new TQFrame ( page2 ) ;
hline - > setFrameStyle ( TQFrame : : HLine | TQFrame : : Sunken ) ;
// Now implement the Menu Transparency container.
menuContainer = new TQFrame ( page2 ) ;
menuContainer - > setFrameStyle ( TQFrame : : NoFrame | TQFrame : : Plain ) ;
menuContainer - > setMargin ( 0 ) ;
menuContainerLayout = new TQGridLayout ( menuContainer , 1 , 1 , // rows, columns
KDialog : : marginHint ( ) , KDialog : : spacingHint ( ) ) ;
menuPreview = new MenuPreview ( menuContainer , /* opacity */ 90 , MenuPreview : : Blend ) ;
comboMenuEffectType = new TQComboBox ( FALSE , menuContainer ) ;
comboMenuEffectType - > insertItem ( i18n ( " Software Tint " ) ) ;
comboMenuEffectType - > insertItem ( i18n ( " Software Blend " ) ) ;
# ifdef HAVE_XRENDER
comboMenuEffectType - > insertItem ( i18n ( " XRender Blend " ) ) ;
# endif
// So much stuffing around for a simple slider..
sliderBox = new TQVBox ( menuContainer ) ;
sliderBox - > setSpacing ( KDialog : : spacingHint ( ) ) ;
sliderBox - > setMargin ( 0 ) ;
slOpacity = new TQSlider ( 0 , 100 , 5 , /*opacity*/ 90 , Qt : : Horizontal , sliderBox ) ;
slOpacity - > setTickmarks ( TQSlider : : Below ) ;
slOpacity - > setTickInterval ( 10 ) ;
TQHBox * box1 = new TQHBox ( sliderBox ) ;
box1 - > setSpacing ( KDialog : : spacingHint ( ) ) ;
box1 - > setMargin ( 0 ) ;
TQLabel * lbl = new TQLabel ( i18n ( " 0% " ) , box1 ) ;
lbl - > setAlignment ( AlignLeft ) ;
lbl = new TQLabel ( i18n ( " 50% " ) , box1 ) ;
lbl - > setAlignment ( AlignHCenter ) ;
lbl = new TQLabel ( i18n ( " 100% " ) , box1 ) ;
lbl - > setAlignment ( AlignRight ) ;
lblMenuEffectType = new TQLabel ( comboMenuEffectType , i18n ( " Menu trans&lucency type: " ) , menuContainer ) ;
lblMenuEffectType - > setAlignment ( AlignBottom | AlignLeft ) ;
lblMenuOpacity = new TQLabel ( slOpacity , i18n ( " Menu &opacity: " ) , menuContainer ) ;
lblMenuOpacity - > setAlignment ( AlignBottom | AlignLeft ) ;
menuContainerLayout - > addWidget ( lblMenuEffectType , 0 , 0 ) ;
menuContainerLayout - > addWidget ( comboMenuEffectType , 1 , 0 ) ;
menuContainerLayout - > addWidget ( lblMenuOpacity , 2 , 0 ) ;
menuContainerLayout - > addWidget ( sliderBox , 3 , 0 ) ;
menuContainerLayout - > addMultiCellWidget ( menuPreview , 0 , 3 , 1 , 1 ) ;
// Layout page2.
page2Layout - > addWidget ( cbEnableEffects ) ;
page2Layout - > addWidget ( containerFrame ) ;
page2Layout - > addWidget ( hline ) ;
page2Layout - > addWidget ( menuContainer ) ;
TQSpacerItem * sp1 = new TQSpacerItem ( 20 , 20 , TQSizePolicy : : Minimum , TQSizePolicy : : Expanding ) ;
page2Layout - > addItem ( sp1 ) ;
// Data flow stuff.
connect ( cbEnableEffects , TQT_SIGNAL ( toggled ( bool ) ) , containerFrame , TQT_SLOT ( setEnabled ( bool ) ) ) ;
connect ( cbEnableEffects , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( menuEffectChanged ( bool ) ) ) ;
connect ( slOpacity , TQT_SIGNAL ( valueChanged ( int ) ) , menuPreview , TQT_SLOT ( setOpacity ( int ) ) ) ;
connect ( comboMenuEffect , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( menuEffectChanged ( ) ) ) ;
connect ( comboMenuEffect , TQT_SIGNAL ( highlighted ( int ) ) , this , TQT_SLOT ( menuEffectChanged ( ) ) ) ;
connect ( comboMenuEffectType , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( menuEffectTypeChanged ( ) ) ) ;
connect ( comboMenuEffectType , TQT_SIGNAL ( highlighted ( int ) ) , this , TQT_SLOT ( menuEffectTypeChanged ( ) ) ) ;
// Add Page3 (Miscellaneous)
// -------------------------
cbHoverButtons = new TQCheckBox ( i18n ( " High&light buttons under mouse " ) , page3 ) ;
cbTransparentToolbars = new TQCheckBox ( i18n ( " Transparent tool&bars when moving " ) , page3 ) ;
TQWidget * dummy = new TQWidget ( page3 ) ;
TQHBoxLayout * box2 = new TQHBoxLayout ( dummy , 0 , KDialog : : spacingHint ( ) ) ;
lbl = new TQLabel ( i18n ( " Text pos&ition: " ) , dummy ) ;
comboToolbarIcons = new TQComboBox ( FALSE , dummy ) ;
comboToolbarIcons - > insertItem ( i18n ( " Icons Only " ) ) ;
comboToolbarIcons - > insertItem ( i18n ( " Text Only " ) ) ;
comboToolbarIcons - > insertItem ( i18n ( " Text Alongside Icons " ) ) ;
comboToolbarIcons - > insertItem ( i18n ( " Text Under Icons " ) ) ;
lbl - > setBuddy ( comboToolbarIcons ) ;
box2 - > addWidget ( lbl ) ;
box2 - > addWidget ( comboToolbarIcons ) ;
TQSpacerItem * sp2 = new TQSpacerItem ( 20 , 20 , TQSizePolicy : : Expanding , TQSizePolicy : : Minimum ) ;
box2 - > addItem ( sp2 ) ;
page3Layout - > addWidget ( cbHoverButtons ) ;
page3Layout - > addWidget ( cbTransparentToolbars ) ;
page3Layout - > addWidget ( dummy ) ;
// Layout page3.
TQSpacerItem * sp3 = new TQSpacerItem ( 20 , 20 , TQSizePolicy : : Minimum , TQSizePolicy : : Expanding ) ;
page3Layout - > addItem ( sp3 ) ;
// Load settings
load ( ) ;
// Do all the setDirty connections.
connect ( cbStyle , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
// Page2
connect ( cbEnableEffects , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( cbEnableEffects , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
connect ( comboTooltipEffect , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( comboRubberbandEffect , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
connect ( comboComboEffect , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( comboMenuEffect , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
connect ( comboMenuHandle , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
connect ( comboMenuEffectType , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
connect ( slOpacity , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
connect ( cbMenuShadow , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setStyleDirty ( ) ) ) ;
// Page3
connect ( cbHoverButtons , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setToolbarsDirty ( ) ) ) ;
connect ( cbTransparentToolbars , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setToolbarsDirty ( ) ) ) ;
connect ( cbEnableTooltips , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( cbIconsOnButtons , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( cbScrollablePopupMenus , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( cbAutoHideAccelerators , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( cbTearOffHandles , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( setEffectsDirty ( ) ) ) ;
connect ( comboToolbarIcons , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( setToolbarsDirty ( ) ) ) ;
addWhatsThis ( ) ;
// Insert the pages into the tabWidget
tabWidget - > insertTab ( page1 , i18n ( " &Style " ) ) ;
tabWidget - > insertTab ( page2 , i18n ( " &Effects " ) ) ;
tabWidget - > insertTab ( page3 , i18n ( " &Toolbar " ) ) ;
//Enable/disable the button for the initial style
updateConfigButton ( ) ;
}
KCMStyle : : ~ KCMStyle ( )
{
delete appliedStyle ;
}
void KCMStyle : : updateConfigButton ( )
{
if ( ! styleEntries [ currentStyle ( ) ] | | styleEntries [ currentStyle ( ) ] - > configPage . isEmpty ( ) ) {
pbConfigStyle - > setEnabled ( false ) ;
return ;
}
// We don't check whether it's loadable here -
// lets us report an error and not waste time
// loading things if the user doesn't click the button
pbConfigStyle - > setEnabled ( true ) ;
}
void KCMStyle : : styleSpecificConfig ( )
{
TQString libname = styleEntries [ currentStyle ( ) ] - > configPage ;
// Use KLibLoader to get the library, handling
// any errors that arise
KLibLoader * loader = KLibLoader : : self ( ) ;
KLibrary * library = loader - > library ( TQFile : : encodeName ( libname ) ) ;
if ( ! library )
{
KMessageBox : : detailedError ( this ,
i18n ( " There was an error loading the configuration dialog for this style. " ) ,
loader - > lastErrorMessage ( ) ,
i18n ( " Unable to Load Dialog " ) ) ;
return ;
}
void * allocPtr = library - > symbol ( " allocate_kstyle_config " ) ;
if ( ! allocPtr )
{
KMessageBox : : detailedError ( this ,
i18n ( " There was an error loading the configuration dialog for this style. " ) ,
loader - > lastErrorMessage ( ) ,
i18n ( " Unable to Load Dialog " ) ) ;
return ;
}
//Create the container dialog
StyleConfigDialog * dial = new StyleConfigDialog ( this , styleEntries [ currentStyle ( ) ] - > name ) ;
dial - > enableButtonSeparator ( true ) ;
typedef TQWidget * ( * factoryRoutine ) ( TQWidget * parent ) ;
//Get the factory, and make the widget.
factoryRoutine factory = ( factoryRoutine ) ( allocPtr ) ; //Grmbl. So here I am on my
//"never use C casts" moralizing streak, and I find that one can't go void* -> function ptr
//even with a reinterpret_cast.
TQWidget * pluginConfig = factory ( dial ) ;
//Insert it in...
dial - > setMainWidget ( pluginConfig ) ;
//..and connect it to the wrapper
connect ( pluginConfig , TQT_SIGNAL ( changed ( bool ) ) , dial , TQT_SLOT ( setDirty ( bool ) ) ) ;
connect ( dial , TQT_SIGNAL ( defaults ( ) ) , pluginConfig , TQT_SLOT ( defaults ( ) ) ) ;
connect ( dial , TQT_SIGNAL ( save ( ) ) , pluginConfig , TQT_SLOT ( save ( ) ) ) ;
if ( dial - > exec ( ) = = TQDialog : : Accepted & & dial - > isDirty ( ) ) {
// Force re-rendering of the preview, to apply settings
switchStyle ( currentStyle ( ) , true ) ;
//For now, ask all TDE apps to recreate their styles to apply the setitngs
KIPC : : sendMessageAll ( KIPC : : StyleChanged ) ;
// We call setStyleDirty here to make sure we force style re-creation
setStyleDirty ( ) ;
}
delete dial ;
}
void KCMStyle : : load ( )
{
load ( false ) ;
}
void KCMStyle : : load ( bool useDefaults )
{
KConfig config ( " kdeglobals " , true , false ) ;
config . setReadDefaults ( useDefaults ) ;
// Page1 - Build up the Style ListBox
loadStyle ( config ) ;
// Page2 - Effects
loadEffects ( config ) ;
// Page3 - Misc.
loadMisc ( config ) ;
m_bEffectsDirty = false ;
m_bStyleDirty = false ;
m_bToolbarsDirty = false ;
emit changed ( useDefaults ) ;
}
void KCMStyle : : save ( )
{
// Don't do anything if we don't need to.
if ( ! ( m_bToolbarsDirty | m_bEffectsDirty | m_bStyleDirty ) )
return ;
bool allowMenuTransparency = false ;
bool allowMenuDropShadow = false ;
// Read the KStyle flags to see if the style writer
// has enabled menu translucency in the style.
if ( appliedStyle & & appliedStyle - > inherits ( " KStyle " ) )
{
allowMenuDropShadow = true ;
KStyle * style = dynamic_cast < KStyle * > ( appliedStyle ) ;
if ( style ) {
KStyle : : KStyleFlags flags = style - > styleFlags ( ) ;
if ( flags & KStyle : : AllowMenuTransparency )
allowMenuTransparency = true ;
}
}
TQString warn_string ( i18n ( " <qt>Selected style: <b>%1</b><br><br> "
" One or more effects that you have chosen could not be applied because the selected "
" style does not support them; they have therefore been disabled.<br> "
" <br> " ) . arg ( cbStyle - > currentText ( ) ) ) ;
bool show_warning = false ;
// Warn the user if they're applying a style that doesn't support
// menu translucency and they enabled it.
if ( ( ! allowMenuTransparency ) & &
( cbEnableEffects - > isChecked ( ) ) & &
( comboMenuEffect - > currentItem ( ) = = 3 ) ) // Make Translucent
{
warn_string + = i18n ( " Menu translucency is not available.<br> " ) ;
comboMenuEffect - > setCurrentItem ( 0 ) ; // Disable menu effect.
show_warning = true ;
}
if ( ! allowMenuDropShadow & & cbMenuShadow - > isChecked ( ) )
{
warn_string + = i18n ( " Menu drop-shadows are not available. " ) ;
cbMenuShadow - > setChecked ( false ) ;
show_warning = true ;
}
// Tell the user what features we could not apply on their behalf.
if ( show_warning )
KMessageBox : : information ( this , warn_string ) ;
// Save effects.
KConfig config ( " kdeglobals " ) ;
config . setGroup ( " KDE " ) ;
config . writeEntry ( " EffectsEnabled " , cbEnableEffects - > isChecked ( ) ) ;
int item = comboComboEffect - > currentItem ( ) ;
config . writeEntry ( " EffectAnimateCombo " , item = = 1 ) ;
item = comboTooltipEffect - > currentItem ( ) ;
config . writeEntry ( " EffectAnimateTooltip " , item = = 1 ) ;
config . writeEntry ( " EffectFadeTooltip " , item = = 2 ) ;
item = comboRubberbandEffect - > currentItem ( ) ;
{
TQSettings settings ; // Only for KStyle stuff
settings . writeEntry ( " /KStyle/Settings/SemiTransparentRubberband " , item = = 1 ) ;
}
item = comboMenuHandle - > currentItem ( ) ;
config . writeEntry ( " InsertTearOffHandle " , item ) ;
item = comboMenuEffect - > currentItem ( ) ;
config . writeEntry ( " EffectAnimateMenu " , item = = 1 ) ;
config . writeEntry ( " EffectFadeMenu " , item = = 2 ) ;
// Handle KStyle's menu effects
TQString engine ( " Disabled " ) ;
if ( item = = 3 & & cbEnableEffects - > isChecked ( ) ) // Make Translucent
switch ( comboMenuEffectType - > currentItem ( ) )
{
case 1 : engine = " SoftwareBlend " ; break ;
case 2 : engine = " XRender " ; break ;
default :
case 0 : engine = " SoftwareTint " ; break ;
}
{ // Braces force a TQSettings::sync()
TQSettings settings ; // Only for KStyle stuff
settings . writeEntry ( " /KStyle/Settings/MenuTransparencyEngine " , engine ) ;
settings . writeEntry ( " /KStyle/Settings/MenuOpacity " , slOpacity - > value ( ) / 100.0 ) ;
settings . writeEntry ( " /KStyle/Settings/MenuDropShadow " ,
cbEnableEffects - > isChecked ( ) & & cbMenuShadow - > isChecked ( ) ) ;
}
// Misc page
config . writeEntry ( " ShowIconsOnPushButtons " , cbIconsOnButtons - > isChecked ( ) , true , true ) ;
{ // Braces force a TQSettings::sync()
TQSettings settings ; // Only for KStyle stuff
settings . writeEntry ( " /KStyle/Settings/ScrollablePopupMenus " , cbScrollablePopupMenus - > isChecked ( ) ) ;
settings . writeEntry ( " /KStyle/Settings/AutoHideAccelerators " , cbAutoHideAccelerators - > isChecked ( ) ) ;
}
config . writeEntry ( " EffectNoTooltip " , ! cbEnableTooltips - > isChecked ( ) , true , true ) ;
config . setGroup ( " General " ) ;
config . writeEntry ( " widgetStyle " , currentStyle ( ) ) ;
config . setGroup ( " Toolbar style " ) ;
config . writeEntry ( " Highlighting " , cbHoverButtons - > isChecked ( ) , true , true ) ;
config . writeEntry ( " TransparentMoving " , cbTransparentToolbars - > isChecked ( ) , true , true ) ;
TQString tbIcon ;
switch ( comboToolbarIcons - > currentItem ( ) )
{
case 1 : tbIcon = " TextOnly " ; break ;
case 2 : tbIcon = " IconTextRight " ; break ;
case 3 : tbIcon = " IconTextBottom " ; break ;
case 0 :
default : tbIcon = " IconOnly " ; break ;
}
config . writeEntry ( " IconText " , tbIcon , true , true ) ;
config . sync ( ) ;
// Export the changes we made to qtrc, and update all qt-only
// applications on the fly, ensuring that we still follow the user's
// export fonts/colors settings.
if ( m_bStyleDirty | m_bEffectsDirty ) // Export only if necessary
{
uint flags = KRdbExportQtSettings ;
KConfig kconfig ( " kcmdisplayrc " , true /*readonly*/ , false /*no globals*/ ) ;
kconfig . setGroup ( " X11 " ) ;
bool exportKDEColors = kconfig . readBoolEntry ( " exportKDEColors " , true ) ;
if ( exportKDEColors )
flags | = KRdbExportColors ;
runRdb ( flags ) ;
}
// Now allow TDE apps to reconfigure themselves.
if ( m_bStyleDirty )
KIPC : : sendMessageAll ( KIPC : : StyleChanged ) ;
if ( m_bToolbarsDirty )
// ##### FIXME - Doesn't apply all settings correctly due to bugs in
// KApplication/KToolbar
KIPC : : sendMessageAll ( KIPC : : ToolbarStyleChanged ) ;
if ( m_bEffectsDirty ) {
KIPC : : sendMessageAll ( KIPC : : SettingsChanged ) ;
kapp - > dcopClient ( ) - > send ( " twin* " , " " , " reconfigure() " , TQString ( " " ) ) ;
}
//update kicker to re-used tooltips kicker parameter otherwise, it overwritted
//by style tooltips parameters.
TQByteArray data ;
kapp - > dcopClient ( ) - > send ( " kicker " , " kicker " , " configure() " , data ) ;
// Clean up
m_bEffectsDirty = false ;
m_bToolbarsDirty = false ;
m_bStyleDirty = false ;
emit changed ( false ) ;
}
bool KCMStyle : : findStyle ( const TQString & str , int & combobox_item )
{
StyleEntry * se = styleEntries . find ( str . lower ( ) ) ;
TQString name = se ? se - > name : str ;
combobox_item = 0 ;
//look up name
for ( int i = 0 ; i < cbStyle - > count ( ) ; i + + )
{
if ( cbStyle - > text ( i ) = = name )
{
combobox_item = i ;
return TRUE ;
}
}
return FALSE ;
}
void KCMStyle : : defaults ( )
{
load ( true ) ;
}
void KCMStyle : : setEffectsDirty ( )
{
m_bEffectsDirty = true ;
emit changed ( true ) ;
}
void KCMStyle : : setToolbarsDirty ( )
{
m_bToolbarsDirty = true ;
emit changed ( true ) ;
}
void KCMStyle : : setStyleDirty ( )
{
m_bStyleDirty = true ;
emit changed ( true ) ;
}
// ----------------------------------------------------------------
// All the Style Switching / Preview stuff
// ----------------------------------------------------------------
void KCMStyle : : loadStyle ( KConfig & config )
{
cbStyle - > clear ( ) ;
// Create a dictionary of WidgetStyle to Name and Desc. mappings,
// as well as the config page info
styleEntries . clear ( ) ;
styleEntries . setAutoDelete ( true ) ;
TQString strWidgetStyle ;
TQStringList list = KGlobal : : dirs ( ) - > findAllResources ( " themes " , " *.themerc " , true , true ) ;
for ( TQStringList : : iterator it = list . begin ( ) ; it ! = list . end ( ) ; + + it )
{
KSimpleConfig config ( * it , true ) ;
if ( ! ( config . hasGroup ( " KDE " ) & & config . hasGroup ( " Misc " ) ) )
continue ;
config . setGroup ( " KDE " ) ;
strWidgetStyle = config . readEntry ( " WidgetStyle " ) ;
if ( strWidgetStyle . isNull ( ) )
continue ;
// We have a widgetstyle, so lets read the i18n entries for it...
StyleEntry * entry = new StyleEntry ;
config . setGroup ( " Misc " ) ;
entry - > name = config . readEntry ( " Name " ) ;
entry - > desc = config . readEntry ( " Comment " , i18n ( " No description available. " ) ) ;
entry - > configPage = config . readEntry ( " ConfigPage " , TQString : : null ) ;
// Check if this style should be shown
config . setGroup ( " Desktop Entry " ) ;
entry - > hidden = config . readBoolEntry ( " Hidden " , false ) ;
// Insert the entry into our dictionary.
styleEntries . insert ( strWidgetStyle . lower ( ) , entry ) ;
}
// Obtain all style names
TQStringList allStyles = TQStyleFactory : : keys ( ) ;
// Get translated names, remove all hidden style entries.
TQStringList styles ;
StyleEntry * entry ;
for ( TQStringList : : iterator it = allStyles . begin ( ) ; it ! = allStyles . end ( ) ; it + + )
{
TQString id = ( * it ) . lower ( ) ;
// Find the entry.
if ( ( entry = styleEntries . find ( id ) ) ! = 0 )
{
// Do not add hidden entries
if ( entry - > hidden )
continue ;
styles + = entry - > name ;
nameToStyleKey [ entry - > name ] = id ;
}
else
{
styles + = ( * it ) ; //Fall back to the key (but in original case)
nameToStyleKey [ * it ] = id ;
}
}
// Sort the style list, and add it to the combobox
styles . sort ( ) ;
cbStyle - > insertStringList ( styles ) ;
// Find out which style is currently being used
config . setGroup ( " General " ) ;
TQString defaultStyle = KStyle : : defaultStyle ( ) ;
TQString cfgStyle = config . readEntry ( " widgetStyle " , defaultStyle ) ;
// Select the current style
// Do not use cbStyle->listBox() as this may be NULL for some styles when
// they use QPopupMenus for the drop-down list!
// ##### Since Trolltech likes to seemingly copy & paste code,
// TQStringList::findItem() doesn't have a Qt::StringComparisonMode field.
// We roll our own (yuck)
cfgStyle = cfgStyle . lower ( ) ;
int item = 0 ;
for ( int i = 0 ; i < cbStyle - > count ( ) ; i + + )
{
TQString id = nameToStyleKey [ cbStyle - > text ( i ) ] ;
item = i ;
if ( id = = cfgStyle ) // ExactMatch
break ;
else if ( id . contains ( cfgStyle ) )
break ;
else if ( id . contains ( TQApplication : : style ( ) . className ( ) ) )
break ;
item = 0 ;
}
cbStyle - > setCurrentItem ( item ) ;
m_bStyleDirty = false ;
switchStyle ( currentStyle ( ) ) ; // make resets visible
}
TQString KCMStyle : : currentStyle ( )
{
return nameToStyleKey [ cbStyle - > currentText ( ) ] ;
}
void KCMStyle : : styleChanged ( )
{
switchStyle ( currentStyle ( ) ) ;
}
void KCMStyle : : switchStyle ( const TQString & styleName , bool force )
{
// Don't flicker the preview if the same style is chosen in the cb
if ( ! force & & appliedStyle & & TQT_TQOBJECT ( appliedStyle ) - > name ( ) = = styleName )
return ;
// Create an instance of the new style...
TQStyle * style = TQStyleFactory : : create ( styleName ) ;
if ( ! style )
return ;
// Prevent Qt from wrongly caching radio button images
TQPixmapCache : : clear ( ) ;
setStyleRecursive ( stylePreview , style ) ;
// this flickers, but reliably draws the widgets correctly.
stylePreview - > resize ( stylePreview - > sizeHint ( ) ) ;
delete appliedStyle ;
appliedStyle = style ;
// Set the correct style description
StyleEntry * entry = styleEntries . find ( styleName ) ;
TQString desc ;
desc = i18n ( " Description: %1 " ) . arg ( entry ? entry - > desc : i18n ( " No description available. " ) ) ;
lblStyleDesc - > setText ( desc ) ;
}
void KCMStyle : : setStyleRecursive ( TQWidget * w , TQStyle * s )
{
// Don't let broken styles kill the palette
// for other styles being previewed. (e.g SGI style)
w - > unsetPalette ( ) ;
TQPalette newPalette ( KApplication : : createApplicationPalette ( ) ) ;
s - > polish ( newPalette ) ;
w - > setPalette ( newPalette ) ;
// Apply the new style.
w - > setStyle ( s ) ;
// Recursively update all children.
const TQObjectList children = w - > childrenListObject ( ) ;
if ( children . isEmpty ( ) )
return ;
// Apply the style to each child widget.
TQPtrListIterator < TQObject > childit ( children ) ;
TQObject * child ;
while ( ( child = childit . current ( ) ) ! = 0 )
{
+ + childit ;
if ( child - > isWidgetType ( ) )
setStyleRecursive ( ( TQWidget * ) child , s ) ;
}
}
// ----------------------------------------------------------------
// All the Effects stuff
// ----------------------------------------------------------------
void KCMStyle : : loadEffects ( KConfig & config )
{
// Load effects.
config . setGroup ( " KDE " ) ;
cbEnableEffects - > setChecked ( config . readBoolEntry ( " EffectsEnabled " , false ) ) ;
if ( config . readBoolEntry ( " EffectAnimateCombo " , false ) )
comboComboEffect - > setCurrentItem ( 1 ) ;
else
comboComboEffect - > setCurrentItem ( 0 ) ;
if ( config . readBoolEntry ( " EffectAnimateTooltip " , false ) )
comboTooltipEffect - > setCurrentItem ( 1 ) ;
else if ( config . readBoolEntry ( " EffectFadeTooltip " , false ) )
comboTooltipEffect - > setCurrentItem ( 2 ) ;
else
comboTooltipEffect - > setCurrentItem ( 0 ) ;
TQSettings settings ;
bool semiTransparentRubberband = settings . readBoolEntry ( " /KStyle/Settings/SemiTransparentRubberband " , false ) ;
comboRubberbandEffect - > setCurrentItem ( semiTransparentRubberband ? 1 : 0 ) ;
if ( config . readBoolEntry ( " EffectAnimateMenu " , false ) )
comboMenuEffect - > setCurrentItem ( 1 ) ;
else if ( config . readBoolEntry ( " EffectFadeMenu " , false ) )
comboMenuEffect - > setCurrentItem ( 2 ) ;
else
comboMenuEffect - > setCurrentItem ( 0 ) ;
comboMenuHandle - > setCurrentItem ( config . readNumEntry ( " InsertTearOffHandle " , 0 ) ) ;
// KStyle Menu transparency and drop-shadow options...
TQString effectEngine = settings . readEntry ( " /KStyle/Settings/MenuTransparencyEngine " , " Disabled " ) ;
# ifdef HAVE_XRENDER
if ( effectEngine = = " XRender " ) {
comboMenuEffectType - > setCurrentItem ( 2 ) ;
comboMenuEffect - > setCurrentItem ( 3 ) ;
} else if ( effectEngine = = " SoftwareBlend " ) {
comboMenuEffectType - > setCurrentItem ( 1 ) ;
comboMenuEffect - > setCurrentItem ( 3 ) ;
# else
if ( effectEngine = = " XRender " | | effectEngine = = " SoftwareBlend " ) {
comboMenuEffectType - > setCurrentItem ( 1 ) ; // Software Blend
comboMenuEffect - > setCurrentItem ( 3 ) ;
# endif
} else if ( effectEngine = = " SoftwareTint " ) {
comboMenuEffectType - > setCurrentItem ( 0 ) ;
comboMenuEffect - > setCurrentItem ( 3 ) ;
} else
comboMenuEffectType - > setCurrentItem ( 0 ) ;
if ( comboMenuEffect - > currentItem ( ) ! = 3 ) // If not translucency...
menuPreview - > setPreviewMode ( MenuPreview : : Tint ) ;
else if ( comboMenuEffectType - > currentItem ( ) = = 0 )
menuPreview - > setPreviewMode ( MenuPreview : : Tint ) ;
else
menuPreview - > setPreviewMode ( MenuPreview : : Blend ) ;
slOpacity - > setValue ( ( int ) ( 100 * settings . readDoubleEntry ( " /KStyle/Settings/MenuOpacity " , 0.90 ) ) ) ;
// Menu Drop-shadows...
cbMenuShadow - > setChecked ( settings . readBoolEntry ( " /KStyle/Settings/MenuDropShadow " , false ) ) ;
if ( cbEnableEffects - > isChecked ( ) ) {
containerFrame - > setEnabled ( true ) ;
menuContainer - > setEnabled ( comboMenuEffect - > currentItem ( ) = = 3 ) ;
} else {
menuContainer - > setEnabled ( false ) ;
containerFrame - > setEnabled ( false ) ;
}
m_bEffectsDirty = false ;
}
void KCMStyle : : menuEffectTypeChanged ( )
{
MenuPreview : : PreviewMode mode ;
if ( comboMenuEffect - > currentItem ( ) ! = 3 )
mode = MenuPreview : : Tint ;
else if ( comboMenuEffectType - > currentItem ( ) = = 0 )
mode = MenuPreview : : Tint ;
else
mode = MenuPreview : : Blend ;
menuPreview - > setPreviewMode ( mode ) ;
m_bEffectsDirty = true ;
}
void KCMStyle : : menuEffectChanged ( )
{
menuEffectChanged ( cbEnableEffects - > isChecked ( ) ) ;
m_bEffectsDirty = true ;
}
void KCMStyle : : menuEffectChanged ( bool enabled )
{
if ( enabled & &
comboMenuEffect - > currentItem ( ) = = 3 ) {
menuContainer - > setEnabled ( true ) ;
} else
menuContainer - > setEnabled ( false ) ;
m_bEffectsDirty = true ;
}
// ----------------------------------------------------------------
// All the Miscellaneous stuff
// ----------------------------------------------------------------
void KCMStyle : : loadMisc ( KConfig & config )
{
// TDE's Part via KConfig
config . setGroup ( " Toolbar style " ) ;
cbHoverButtons - > setChecked ( config . readBoolEntry ( " Highlighting " , true ) ) ;
cbTransparentToolbars - > setChecked ( config . readBoolEntry ( " TransparentMoving " , true ) ) ;
TQString tbIcon = config . readEntry ( " IconText " , " IconOnly " ) ;
if ( tbIcon = = " TextOnly " )
comboToolbarIcons - > setCurrentItem ( 1 ) ;
else if ( tbIcon = = " IconTextRight " )
comboToolbarIcons - > setCurrentItem ( 2 ) ;
else if ( tbIcon = = " IconTextBottom " )
comboToolbarIcons - > setCurrentItem ( 3 ) ;
else
comboToolbarIcons - > setCurrentItem ( 0 ) ;
config . setGroup ( " KDE " ) ;
cbIconsOnButtons - > setChecked ( config . readBoolEntry ( " ShowIconsOnPushButtons " , false ) ) ;
cbEnableTooltips - > setChecked ( ! config . readBoolEntry ( " EffectNoTooltip " , false ) ) ;
cbTearOffHandles - > setChecked ( config . readBoolEntry ( " InsertTearOffHandle " , false ) ) ;
TQSettings settings ;
cbScrollablePopupMenus - > setChecked ( settings . readBoolEntry ( " /KStyle/Settings/ScrollablePopupMenus " , false ) ) ;
cbAutoHideAccelerators - > setChecked ( settings . readBoolEntry ( " /KStyle/Settings/AutoHideAccelerators " , false ) ) ;
m_bToolbarsDirty = false ;
}
void KCMStyle : : addWhatsThis ( )
{
// Page1
TQWhatsThis : : add ( cbStyle , i18n ( " Here you can choose from a list of "
" predefined widget styles (e.g. the way buttons are drawn) which "
" may or may not be combined with a theme (additional information "
" like a marble texture or a gradient). " ) ) ;
TQWhatsThis : : add ( stylePreview , i18n ( " This area shows a preview of the currently selected style "
" without having to apply it to the whole desktop. " ) ) ;
// Page2
TQWhatsThis : : add ( page2 , i18n ( " This page allows you to enable various widget style effects. "
" For best performance, it is advisable to disable all effects. " ) ) ;
TQWhatsThis : : add ( cbEnableEffects , i18n ( " If you check this box, you can select several effects "
" for different widgets like combo boxes, menus or tooltips. " ) ) ;
TQWhatsThis : : add ( comboComboEffect , i18n ( " <p><b>Disable: </b>do not use any combo box effects.</p> \n "
" <b>Animate: </b>Do some animation. " ) ) ;
TQWhatsThis : : add ( comboTooltipEffect , i18n ( " <p><b>Disable: </b>do not use any tooltip effects.</p> \n "
" <p><b>Animate: </b>Do some animation.</p> \n "
" <b>Fade: </b>Fade in tooltips using alpha-blending. " ) ) ;
TQWhatsThis : : add ( comboRubberbandEffect , i18n ( " <p><b>Disable: </b>do not use any rubberband effects.</p> \n "
" <b>Make Translucent: </b>Draw a translucent rubberband. " ) ) ;
TQWhatsThis : : add ( comboMenuEffect , i18n ( " <p><b>Disable: </b>do not use any menu effects.</p> \n "
" <p><b>Animate: </b>Do some animation.</p> \n "
" <p><b>Fade: </b>Fade in menus using alpha-blending.</p> \n "
" <b>Make Translucent: </b>Alpha-blend menus for a see-through effect. (TDE styles only) " ) ) ;
TQWhatsThis : : add ( cbMenuShadow , i18n ( " When enabled, all popup menus will have a drop-shadow, otherwise "
" drop-shadows will not be displayed. At present, only TDE styles can have this "
" effect enabled. " ) ) ;
TQWhatsThis : : add ( comboMenuEffectType , i18n ( " <p><b>Software Tint: </b>Alpha-blend using a flat color.</p> \n "
" <p><b>Software Blend: </b>Alpha-blend using an image.</p> \n "
" <b>XRender Blend: </b>Use the XFree RENDER extension for image blending (if available). "
" This method may be slower than the Software routines on non-accelerated displays, "
" but may however improve performance on remote displays.</p> \n " ) ) ;
TQWhatsThis : : add ( slOpacity , i18n ( " By adjusting this slider you can control the menu effect opacity. " ) ) ;
// Page3
TQWhatsThis : : add ( page3 , i18n ( " <b>Note:</b> that all widgets in this combobox "
" do not apply to Qt-only applications. " ) ) ;
TQWhatsThis : : add ( cbHoverButtons , i18n ( " If this option is selected, toolbar buttons will change "
" their color when the mouse cursor is moved over them. " ) ) ;
TQWhatsThis : : add ( cbTransparentToolbars , i18n ( " If you check this box, the toolbars will be "
" transparent when moving them around. " ) ) ;
TQWhatsThis : : add ( cbEnableTooltips , i18n ( " If you check this option, the TDE application "
" will offer tooltips when the cursor remains over items in the toolbar. " ) ) ;
TQWhatsThis : : add ( comboToolbarIcons , i18n ( " <p><b>Icons only:</b> Shows only icons on toolbar buttons. "
" Best option for low resolutions.</p> "
" <p><b>Text only: </b>Shows only text on toolbar buttons.</p> "
" <p><b>Text alongside icons: </b> Shows icons and text on toolbar buttons. "
" Text is aligned alongside the icon.</p> "
" <b>Text under icons: </b> Shows icons and text on toolbar buttons. "
" Text is aligned below the icon. " ) ) ;
TQWhatsThis : : add ( cbIconsOnButtons , i18n ( " If you enable this option, TDE Applications will "
" show small icons alongside some important buttons. " ) ) ;
TQWhatsThis : : add ( cbScrollablePopupMenus , i18n ( " If you enable this option, pop-up menus will scroll if vertical space is exhausted. " ) ) ;
TQWhatsThis : : add ( cbAutoHideAccelerators , i18n ( " If you enable this option, keyboard accelerator hints will be hidden unless the first accelerator key in the sequence (normally Alt) is depressed. " ) ) ;
TQWhatsThis : : add ( cbTearOffHandles , i18n ( " If you enable this option some pop-up menus will "
" show so called tear-off handles. If you click them, you get the menu "
" inside a widget. This can be very helpful when performing "
" the same action multiple times. " ) ) ;
}
# include "kcmstyle.moc"
// vim: set noet ts=4: