/* This file is part of the KDE project
Copyright ( C ) 2001 , 2002 , 2003 , 2004 Laurent Montel < montel @ kde . org >
This library is free software ; you can redistribute it and / or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation ; either
version 2 of the License , or ( at your option ) any later version .
This library 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
Library General Public License for more details .
You should have received a copy of the GNU Library General Public License
along with this library ; see the file COPYING . LIB . If not , write to
the Free Software Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
* Boston , MA 02110 - 1301 , USA .
*/
# include "kchartLegendConfigPage.h"
# include "kchartLegendConfigPage.moc"
# include <kapplication.h>
# include <klocale.h>
# include <kcolorbutton.h>
# include <kfontdialog.h>
# include <kiconloader.h>
# include <tqlabel.h>
# include <tqbuttongroup.h>
# include <tqvbuttongroup.h>
# include <tqradiobutton.h>
# include <tqlineedit.h>
# include <tqtooltip.h>
# include <tqwhatsthis.h>
# include "kchart_params.h"
# include "kchart_factory.h"
# include "KDFrameProfileSection.h"
namespace KChart
{
KChartLegendConfigPage : : KChartLegendConfigPage ( KChartParams * params ,
TQWidget * tqparent ) :
TQWidget ( tqparent ) , _params ( params )
{
//Layout for 4 blocks
TQGridLayout * tqlayout = new TQGridLayout ( this , 3 , 2 , KDialog : : marginHint ( ) , KDialog : : spacingHint ( ) ) ;
//1. Block: General settings
TQButtonGroup * gb = new TQButtonGroup ( 0 , Qt : : Vertical , i18n ( " General " ) , this ) ;
gb - > tqlayout ( ) - > setSpacing ( KDialog : : spacingHint ( ) ) ;
gb - > tqlayout ( ) - > setMargin ( KDialog : : marginHint ( ) ) ;
tqlayout - > addWidget ( gb , 0 , 0 ) ;
TQGridLayout * grid2 = new TQGridLayout ( gb - > tqlayout ( ) , 4 , 2 ) ;
TQLabel * lab = new TQLabel ( i18n ( " Title: " ) , gb ) ;
TQWhatsThis : : add ( lab , i18n ( " Write here the title of the legend, which is displayed at the top of the legend box. " ) ) ;
grid2 - > addWidget ( lab , 0 , 0 ) ;
title = new TQLineEdit ( gb ) ;
grid2 - > addWidget ( title , 0 , 1 ) ;
// 2. Block: Legend position
gb = new TQButtonGroup ( 0 , Qt : : Vertical , i18n ( " Legend Position " ) , this ) ;
TQWhatsThis : : add ( gb , i18n ( " <qt>Choose the location of the legend on the chart by "
" clicking a location button. \n Use the central button to <b>hide</b> the legend.</qt> " ) ) ;
gb - > tqlayout ( ) - > setSpacing ( KDialog : : spacingHint ( ) ) ;
gb - > tqlayout ( ) - > setMargin ( KDialog : : marginHint ( ) ) ;
gb - > setExclusive ( true ) ;
TQGridLayout * grid1 = new TQGridLayout ( gb - > tqlayout ( ) , 5 , 5 ) ;
lTopLeft = addButton ( grid1 , gb , i18n ( " Top-Left " ) , " chart_legend_topleft " , 0 , 0 ) ;
lTopLeftTop = addButton ( grid1 , gb , i18n ( " Top-Left-Top " ) , " chart_legend_toplefttop " , 0 , 1 ) ;
lTop = addButton ( grid1 , gb , i18n ( " Top " ) , " chart_legend_top " , 0 , 2 ) ;
lTopRightTop = addButton ( grid1 , gb , i18n ( " Top-Right-Top " ) , " chart_legend_toprighttop " , 0 , 3 ) ;
lTopRight = addButton ( grid1 , gb , i18n ( " Top-Right " ) , " chart_legend_topright " , 0 , 4 ) ;
lTopLeftLeft = addButton ( grid1 , gb , i18n ( " Top-Left-Left " ) , " chart_legend_topleftleft " , 1 , 0 ) ;
lTopRightRight = addButton ( grid1 , gb , i18n ( " Top-Right-Right " ) , " chart_legend_toprightright " , 1 , 4 ) ;
lLeft = addButton ( grid1 , gb , i18n ( " Left " ) , " chart_legend_left " , 2 , 0 ) ;
noLegend = addButton ( grid1 , gb , i18n ( " No Legend " ) , " chart_legend_nolegend " , 2 , 2 ) ;
lRight = addButton ( grid1 , gb , i18n ( " Right " ) , " chart_legend_right " , 2 , 4 ) ;
lBottomLeftLeft = addButton ( grid1 , gb , i18n ( " Bottom-Left-Left " ) , " chart_legend_bottomleftleft " , 3 , 0 ) ;
lBottomRightRight = addButton ( grid1 , gb , i18n ( " Bottom-Right-Right " ) , " chart_legend_bottomrightright " , 3 , 4 ) ;
lBottomLeft = addButton ( grid1 , gb , i18n ( " Bottom-Left " ) , " chart_legend_bottomleft " , 4 , 0 ) ;
lBottomLeftBottom = addButton ( grid1 , gb , i18n ( " Bottom-Left-Bottom " ) , " chart_legend_bottomleftbottom " , 4 , 1 ) ;
lBottom = addButton ( grid1 , gb , i18n ( " Bottom " ) , " chart_legend_bottom " , 4 , 2 ) ;
lBottomRightBottom = addButton ( grid1 , gb , i18n ( " Bottom-Right-Bottom " ) , " chart_legend_bottomrightbottom " , 4 , 3 ) ;
lBottomRight = addButton ( grid1 , gb , i18n ( " Bottom-Right " ) , " chart_legend_bottomright " , 4 , 4 ) ;
gb - > tqsetAlignment ( TQt : : AlignLeft ) ;
tqlayout - > addMultiCellWidget ( gb , 1 , 2 , 0 , 0 ) ;
// 3. Block: Font
gb = new TQButtonGroup ( 0 , Qt : : Vertical , i18n ( " Font " ) , this ) ;
TQWhatsThis : : add ( gb , i18n ( " This Font box can be used to set different fonts for the legend title and the individual entries. " ) ) ;
gb - > tqlayout ( ) - > setSpacing ( KDialog : : spacingHint ( ) ) ;
gb - > tqlayout ( ) - > setMargin ( KDialog : : marginHint ( ) ) ;
tqlayout - > addWidget ( gb , 0 , 1 ) ;
TQGridLayout * grid4 = new TQGridLayout ( gb - > tqlayout ( ) , 4 , 2 ) ;
titleLegendFontButton = new TQPushButton ( gb ) ;
lab = new TQLabel ( i18n ( " Legend title font: " ) , gb ) ;
grid4 - > addWidget ( lab , 0 , 0 ) ;
titleLegendFontButton - > setText ( i18n ( " Select Font... " ) ) ;
TQWhatsThis : : add ( titleLegendFontButton , i18n ( " Click here to display the KDE font chooser dialog. You will be able to change the font family, style and size for the legend title. " ) ) ;
grid4 - > addWidget ( titleLegendFontButton , 1 , 0 ) ;
lab = new TQLabel ( i18n ( " Legend text font: " ) , gb ) ;
grid4 - > addWidget ( lab , 2 , 0 ) ;
textLegendFontButton = new TQPushButton ( gb ) ;
textLegendFontButton - > setText ( i18n ( " Select Font... " ) ) ;
TQWhatsThis : : add ( textLegendFontButton , i18n ( " Click here to display the KDE font chooser dialog. You will be able to change the font family, style and size for the legend text. " ) ) ;
grid4 - > addWidget ( textLegendFontButton , 3 , 0 ) ;
connect ( titleLegendFontButton , TQT_SIGNAL ( clicked ( ) ) ,
this , TQT_SLOT ( changeTitleLegendFont ( ) ) ) ;
connect ( textLegendFontButton , TQT_SIGNAL ( clicked ( ) ) ,
this , TQT_SLOT ( changeTextLegendFont ( ) ) ) ;
// 4. Block: Qt::Orientation
orientationGroup = new TQVButtonGroup ( i18n ( " Qt::Orientation " ) , this ) ;
TQWhatsThis : : add ( orientationGroup , i18n ( " Select, if the legend's items should be drawn next to each other, or below each other. " ) ) ;
orientationGroup - > setRadioButtonExclusive ( true ) ;
orientationGroup - > tqlayout ( ) - > setSpacing ( KDialog : : spacingHint ( ) ) ;
orientationGroup - > tqlayout ( ) - > setMargin ( KDialog : : marginHint ( ) ) ;
tqlayout - > addWidget ( orientationGroup , 1 , 1 ) ;
TQRadioButton * orientation = new TQRadioButton ( i18n ( " Vertically " ) , orientationGroup ) ;
orientation = new TQRadioButton ( i18n ( " Horizontally " ) , orientationGroup ) ;
Q_UNUSED ( orientation ) ;
// 5. Block: Text Colors
gb = new TQButtonGroup ( 0 , Qt : : Vertical , i18n ( " Color " ) , this ) ;
TQWhatsThis : : add ( gb , i18n ( " This Color box can be used to set different colors for the legend title and text. " ) ) ;
gb - > tqlayout ( ) - > setSpacing ( KDialog : : spacingHint ( ) ) ;
gb - > tqlayout ( ) - > setMargin ( KDialog : : marginHint ( ) ) ;
tqlayout - > addWidget ( gb , 2 , 1 ) ;
TQGridLayout * grid3 = new TQGridLayout ( gb - > tqlayout ( ) , 6 , 2 ) ;
lab = new TQLabel ( i18n ( " Legend title color: " ) , gb ) ;
grid3 - > addWidget ( lab , 0 , 0 ) ;
legendTitleColor = new KColorButton ( gb ) ;
TQWhatsThis : : add ( legendTitleColor , i18n ( " Click here to display the KDE Select Color dialog. You will be able to change the color for the legend title. " ) ) ;
grid3 - > addWidget ( legendTitleColor , 1 , 0 ) ;
lab = new TQLabel ( i18n ( " Legend text color: " ) , gb ) ;
grid3 - > addWidget ( lab , 2 , 0 ) ;
legendTextColor = new KColorButton ( gb ) ;
TQWhatsThis : : add ( legendTextColor , i18n ( " Click here to display the KDE Select Color dialog. You will be able to change the color for the legend text. " ) ) ;
grid3 - > addWidget ( legendTextColor , 3 , 0 ) ;
lab = new TQLabel ( i18n ( " Legend frame color: " ) , gb ) ;
grid3 - > addWidget ( lab , 4 , 0 ) ;
legendFrameColor = new KColorButton ( gb ) ;
TQWhatsThis : : add ( legendFrameColor , i18n ( " Click here to display the KDE Select Color dialog. You will be able to change the color for the legend frame. " ) ) ;
grid3 - > addWidget ( legendFrameColor , 5 , 0 ) ;
//it's not good but I don't know how
//to reduce space
tqlayout - > addColSpacing ( 1 , 300 ) ;
}
void KChartLegendConfigPage : : init ( )
{
switch ( _params - > legendPosition ( ) )
{
case KDChartParams : : NoLegend :
noLegend - > setOn ( true ) ;
break ;
case KDChartParams : : LegendTop :
lTop - > setOn ( true ) ;
break ;
case KDChartParams : : LegendBottom :
lBottom - > setOn ( true ) ;
break ;
case KDChartParams : : LegendLeft :
lLeft - > setOn ( true ) ;
break ;
case KDChartParams : : LegendRight :
lRight - > setOn ( true ) ;
break ;
case KDChartParams : : LegendTopLeft :
lTopLeft - > setOn ( true ) ;
break ;
case KDChartParams : : LegendTopLeftTop :
lTopLeftTop - > setOn ( true ) ;
break ;
case KDChartParams : : LegendTopLeftLeft :
lTopLeftLeft - > setOn ( true ) ;
break ;
case KDChartParams : : LegendTopRight :
lTopRight - > setOn ( true ) ;
break ;
case KDChartParams : : LegendTopRightTop :
lTopRightTop - > setOn ( true ) ;
break ;
case KDChartParams : : LegendTopRightRight :
lTopRightRight - > setOn ( true ) ;
break ;
case KDChartParams : : LegendBottomRight :
lBottomRight - > setOn ( true ) ;
break ;
case KDChartParams : : LegendBottomRightBottom :
lBottomRightBottom - > setOn ( true ) ;
break ;
case KDChartParams : : LegendBottomRightRight :
lBottomRightRight - > setOn ( true ) ;
break ;
case KDChartParams : : LegendBottomLeft :
lBottomLeft - > setOn ( true ) ;
break ;
case KDChartParams : : LegendBottomLeftBottom :
lBottomLeftBottom - > setOn ( true ) ;
break ;
case KDChartParams : : LegendBottomLeftLeft :
lBottomLeftLeft - > setOn ( true ) ;
break ;
default :
lRight - > setOn ( true ) ;
break ;
}
title - > setText ( _params - > legendTitleText ( ) ) ;
legendTitleColor - > setColor ( _params - > legendTitleTextColor ( ) ) ;
legendTextColor - > setColor ( _params - > legendTextColor ( ) ) ;
TQColor frameColor ( TQt : : black ) ;
bool bFound ;
const KDChartParams : : KDChartFrameSettings * legendFrame =
_params - > frameSettings ( KDChartEnums : : AreaLegend , bFound ) ;
if ( bFound )
{
const KDFrameProfileSection * top =
const_cast < KDFrameProfile & > ( legendFrame - > frame ( ) . profile ( KDFrame : : ProfileTop ) ) . first ( ) ;
if ( top )
frameColor = top - > pen ( ) . color ( ) ;
}
legendFrameColor - > setColor ( frameColor ) ;
if ( _params - > legendOrientation ( ) = = Qt : : Vertical )
orientationGroup - > setButton ( 0 ) ;
else
orientationGroup - > setButton ( 1 ) ;
titleLegend = _params - > legendTitleFont ( ) ;
titleLegendIsRelative = _params - > legendTitleFontUseRelSize ( )
? TQButton : : On
: TQButton : : Off ;
if ( TQButton : : On = = titleLegendIsRelative )
titleLegend . setPointSize ( _params - > legendTitleFontRelSize ( ) ) ;
textLegend = _params - > legendFont ( ) ;
textLegendIsRelative = _params - > legendFontUseRelSize ( )
? TQButton : : On
: TQButton : : Off ;
if ( TQButton : : On = = textLegendIsRelative )
textLegend . setPointSize ( _params - > legendFontRelSize ( ) ) ;
}
void KChartLegendConfigPage : : changeTitleLegendFont ( )
{
TQButton : : ToggleState state = titleLegendIsRelative ;
if ( KFontDialog : : getFont ( titleLegend , false , this , true , & state ) ! = TQDialog : : Rejected
& & TQButton : : NoChange ! = state )
titleLegendIsRelative = state ;
}
void KChartLegendConfigPage : : changeTextLegendFont ( )
{
TQButton : : ToggleState state = textLegendIsRelative ;
if ( KFontDialog : : getFont ( textLegend , false , this , true , & state ) ! = TQDialog : : Rejected
& & TQButton : : NoChange ! = state )
textLegendIsRelative = state ;
}
void KChartLegendConfigPage : : apply ( )
{
if ( noLegend - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : NoLegend ) ;
else if ( lTop - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendTop ) ;
else if ( lBottom - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendBottom ) ;
else if ( lLeft - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendLeft ) ;
else if ( lRight - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendRight ) ;
else if ( lTopLeft - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendTopLeft ) ;
else if ( lTopLeftTop - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendTopLeftTop ) ;
else if ( lTopLeftLeft - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendTopLeftLeft ) ;
else if ( lTopRight - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendTopRight ) ;
else if ( lTopRightTop - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendTopRightTop ) ;
else if ( lTopRightRight - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendTopRightRight ) ;
else if ( lBottomRight - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendBottomRight ) ;
else if ( lBottomRightBottom - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendBottomRightBottom ) ;
else if ( lBottomRightRight - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendBottomRightRight ) ;
else if ( lBottomLeft - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendBottomLeft ) ;
else if ( lBottomLeftBottom - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendBottomLeftBottom ) ;
else if ( lBottomLeftLeft - > isOn ( ) )
_params - > setLegendPosition ( KDChartParams : : LegendBottomLeftLeft ) ;
else
_params - > setLegendPosition ( KDChartParams : : LegendRight ) ;
if ( orientationGroup - > selectedId ( ) = = 0 )
_params - > setLegendOrientation ( Qt : : Vertical ) ;
else
_params - > setLegendOrientation ( Qt : : Horizontal ) ;
_params - > setLegendTitleText ( title - > text ( ) ) ;
_params - > setLegendTitleTextColor ( legendTitleColor - > color ( ) ) ;
_params - > setLegendTextColor ( legendTextColor - > color ( ) ) ;
const TQColor frameColor ( legendFrameColor - > color ( ) ) ;
if ( frameColor = = TQt : : black )
_params - > removeFrame ( KDChartEnums : : AreaLegend ) ;
else
_params - > setSimpleFrame ( KDChartEnums : : AreaLegend ,
0 , 0 , 0 , 0 ,
true ,
true ,
KDFrame : : FrameFlat ,
1 ,
0 ,
frameColor ) ;
_params - > setLegendTitleFont ( titleLegend , TQButton : : Off = = titleLegendIsRelative ) ;
if ( TQButton : : On = = titleLegendIsRelative )
_params - > setLegendTitleFontRelSize ( titleLegend . pointSize ( ) ) ;
_params - > setLegendFont ( textLegend , TQButton : : Off = = textLegendIsRelative ) ;
if ( TQButton : : On = = textLegendIsRelative )
_params - > setLegendFontRelSize ( textLegend . pointSize ( ) ) ;
}
TQPushButton * KChartLegendConfigPage : : addButton ( TQGridLayout * tqlayout ,
TQButtonGroup * gb ,
const TQString & toolTipText ,
const TQString & icon ,
int posY ,
int posX )
{
TQPushButton * button = new TQPushButton ( gb ) ;
button - > setToggleButton ( true ) ;
button - > setPixmap ( BarIcon ( icon ,
KIcon : : SizeMedium ,
KIcon : : DefaultState ,
KChartFactory : : global ( ) ) ) ;
TQToolTip : : add ( button , toolTipText ) ;
tqlayout - > addWidget ( button , posY , posX ) ;
return button ;
}
} //KChart namespace