/***************************************************************************
* Copyright ( C ) 2003 by S <EFBFBD> astien Laot *
* slaout @ linux62 . org *
* *
* 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 . *
* *
* 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 ; if not , write to the *
* Free Software Foundation , Inc . , *
* 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA . *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include <kicondialog.h>
# include <tqlineedit.h>
# include <tqcombobox.h>
# include <tqvbuttongroup.h>
# include <knuminput.h>
# include <kkeybutton.h>
# include <tqlayout.h>
# include <tqlabel.h>
# include <tqbuttongroup.h>
# include <tqradiobutton.h>
# include <tqstringlist.h>
# include <tdelocale.h>
# include <tqstyle.h>
# include <tdeapplication.h>
# include <kiconloader.h>
# include <tdeglobalsettings.h>
# include "basketproperties.h"
# include "basket.h"
# include "kcolorcombo2.h"
# include "variouswidgets.h"
# include "global.h"
# include "backgroundmanager.h"
BasketPropertiesDialog : : BasketPropertiesDialog ( Basket * basket , TQWidget * parent )
: KDialogBase ( KDialogBase : : Swallow , i18n ( " Basket Properties " ) , KDialogBase : : Ok | KDialogBase : : Apply | KDialogBase : : Cancel ,
KDialogBase : : Ok , parent , /*name=*/ " BasketProperties " , /*modal=*/ true , /*separator=*/ false ) ,
m_basket ( basket )
{
TQWidget * page = new TQWidget ( this ) ;
TQVBoxLayout * topLayout = new TQVBoxLayout ( page , /*margin=*/ 0 , spacingHint ( ) ) ;
// Icon and Name:
TQHBoxLayout * nameLayout = new TQHBoxLayout ( 0 , marginHint ( ) * 2 / 3 , spacingHint ( ) ) ;
m_icon = new TDEIconButton ( page ) ;
m_icon - > setIconType ( TDEIcon : : NoGroup , TDEIcon : : Action ) ;
m_icon - > setIconSize ( 16 ) ;
m_icon - > setIcon ( m_basket - > icon ( ) ) ;
int size = TQMAX ( m_icon - > sizeHint ( ) . width ( ) , m_icon - > sizeHint ( ) . height ( ) ) ;
m_icon - > setFixedSize ( size , size ) ; // Make it square!
TQToolTip : : add ( m_icon , i18n ( " Icon " ) ) ;
m_name = new TQLineEdit ( m_basket - > basketName ( ) , page ) ;
m_name - > setMinimumWidth ( m_name - > fontMetrics ( ) . maxWidth ( ) * 20 ) ;
TQToolTip : : add ( m_name , i18n ( " Name " ) ) ;
nameLayout - > addWidget ( m_icon ) ;
nameLayout - > addWidget ( m_name ) ;
topLayout - > addLayout ( nameLayout ) ;
// Appearance:
TQGroupBox * appearance = new TQGroupBox ( 1 , Qt : : Horizontal , i18n ( " Appearance " ) , page ) ;
TQWidget * appearanceWidget = new TQWidget ( appearance ) ;
TQGridLayout * grid = new TQGridLayout ( appearanceWidget , /*nRows=*/ 3 , /*nCols=*/ 2 , /*margin=*/ 0 , spacingHint ( ) ) ;
m_backgroundImage = new TQComboBox ( appearanceWidget ) ;
m_backgroundColor = new KColorCombo2 ( m_basket - > backgroundColorSetting ( ) , TDEGlobalSettings : : baseColor ( ) , appearanceWidget ) ;
m_textColor = new KColorCombo2 ( m_basket - > textColorSetting ( ) , TDEGlobalSettings : : textColor ( ) , appearanceWidget ) ;
TQLabel * label1 = new TQLabel ( m_backgroundImage , i18n ( " Background &image: " ) , appearanceWidget ) ;
TQLabel * label2 = new TQLabel ( m_backgroundColor , i18n ( " &Background color: " ) , appearanceWidget ) ;
TQLabel * label3 = new TQLabel ( m_textColor , i18n ( " &Text color: " ) , appearanceWidget ) ;
grid - > addWidget ( label1 , 0 , 0 , TQt : : AlignVCenter ) ;
grid - > addWidget ( label2 , 1 , 0 , TQt : : AlignVCenter ) ;
grid - > addWidget ( label3 , 2 , 0 , TQt : : AlignVCenter ) ;
grid - > addWidget ( m_backgroundImage , 0 , 1 , TQt : : AlignVCenter ) ;
grid - > addWidget ( m_backgroundColor , 1 , 1 , TQt : : AlignVCenter ) ;
grid - > addWidget ( m_textColor , 2 , 1 , TQt : : AlignVCenter ) ;
topLayout - > addWidget ( appearance ) ;
m_backgroundImage - > insertItem ( i18n ( " (None) " ) , 0 ) ;
m_backgroundImagesMap . insert ( 0 , " " ) ;
TQStringList backgrounds = Global : : backgroundManager - > imageNames ( ) ;
int index = 1 ;
for ( TQStringList : : Iterator it = backgrounds . begin ( ) ; it ! = backgrounds . end ( ) ; + + it ) {
TQPixmap * preview = Global : : backgroundManager - > preview ( * it ) ;
if ( preview ) {
m_backgroundImagesMap . insert ( index , * it ) ;
m_backgroundImage - > insertItem ( * preview , index ) ;
if ( m_basket - > backgroundImageName ( ) = = * it )
m_backgroundImage - > setCurrentItem ( index ) ;
index + + ;
}
}
// m_backgroundImage->insertItem(i18n("Other..."), -1);
int BUTTON_MARGIN = kapp - > style ( ) . pixelMetric ( TQStyle : : PM_ButtonMargin ) ;
m_backgroundImage - > setSizeLimit ( 50 /*75 * 6 / m_backgroundImage->sizeHint().height()*/ ) ;
m_backgroundImage - > setMinimumHeight ( 75 + 2 * BUTTON_MARGIN ) ;
// Disposition:
m_disposition = new TQVButtonGroup ( i18n ( " Disposition " ) , page ) ;
TQWidget * columnsWidget = new TQWidget ( m_disposition ) ;
TQHBoxLayout * dispoLayout = new TQHBoxLayout ( columnsWidget , /*margin=*/ 0 , spacingHint ( ) ) ;
TQRadioButton * radio = new TQRadioButton ( i18n ( " Col&umns: " ) , columnsWidget ) ;
m_columnCount = new KIntNumInput ( m_basket - > columnsCount ( ) , columnsWidget ) ;
m_columnCount - > setRange ( 1 , 20 , /*step=*/ 1 , /*slider=*/ false ) ;
m_columnCount - > setValue ( m_basket - > columnsCount ( ) ) ;
connect ( m_columnCount , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( selectColumnsLayout ( ) ) ) ;
dispoLayout - > addWidget ( radio ) ;
dispoLayout - > addWidget ( m_columnCount ) ;
m_disposition - > insert ( radio ) ;
new TQRadioButton ( i18n ( " &Free-form " ) , m_disposition ) ;
TQRadioButton * mindMap = new TQRadioButton ( i18n ( " &Mind map " ) , m_disposition ) ; // TODO: "Learn more..."
int height = TQMAX ( mindMap - > sizeHint ( ) . height ( ) , m_columnCount - > sizeHint ( ) . height ( ) ) ; // Make all radioButtons vertically equaly-spaced!
mindMap - > setMinimumSize ( mindMap - > sizeHint ( ) . width ( ) , height ) ; // Because the m_columnCount can be heigher, and make radio1 and radio2 more spaced than radio2 and radio3.
m_disposition - > setButton ( m_basket - > isFreeLayout ( ) ? ( m_basket - > isMindMap ( ) ? 2 : 1 ) : 0 ) ;
topLayout - > addWidget ( m_disposition ) ;
mindMap - > hide ( ) ;
// Keyboard Shortcut:
m_shortcutRole = new TQVButtonGroup ( i18n ( " &Keyboard Shortcut " ) , page ) ;
TQWidget * shortcutWidget = new TQWidget ( m_shortcutRole ) ;
TQHBoxLayout * shortcutLayout = new TQHBoxLayout ( shortcutWidget , /*margin=*/ 0 , spacingHint ( ) ) ;
m_shortcut = new KKeyButton ( shortcutWidget ) ;
m_shortcut - > setShortcut ( m_basket - > shortcut ( ) , /*bTQtShortcut=*/ true ) ;
HelpLabel * helpLabel = new HelpLabel ( i18n ( " Learn some tips... " ) , i18n (
" <p><strong>Easily Remember your Shortcuts</strong>:<br> "
" With the first option, giving the basket a shortcut of the form <strong>Alt+Letter</strong> will underline that letter in the basket tree.<br> "
" For instance, if you are assigning the shortcut <i>Alt+T</i> to a basket named <i>Tips</i>, the basket will be displayed as <i><u>T</u>ips</i> in the tree. "
" It helps you visualize the shortcuts to remember them more quickly.</p> "
" <p><strong>Local vs Global</strong>:<br> "
" The first option allows to show the basket while the main window is active. "
" Global shortcuts are valid from anywhere, even if the window is hidden.</p> "
" <p><strong>Show vs Switch</strong>:<br> "
" The last option makes this basket the current one without opening the main window. "
" It is useful in addition to the configurable global shortcuts, eg. to paste the clipboard or the selection into the current basket from anywhere.</p> " ) ,
shortcutWidget ) ;
shortcutLayout - > addWidget ( m_shortcut ) ;
shortcutLayout - > addStretch ( ) ;
shortcutLayout - > addWidget ( helpLabel ) ;
connect ( m_shortcut , TQT_SIGNAL ( capturedShortcut ( const TDEShortcut & ) ) , this , TQT_SLOT ( capturedShortcut ( const TDEShortcut & ) ) ) ;
new TQRadioButton ( i18n ( " S&how this basket " ) , m_shortcutRole ) ;
new TQRadioButton ( i18n ( " Show this basket (&global shortcut) " ), m_shortcutRole) ;
new TQRadioButton ( i18n ( " S&witch to this basket (global shortcut) " ), m_shortcutRole) ;
m_shortcutRole - > setButton ( m_basket - > shortcutAction ( ) /* + 1*/ ) ; // Id 0 is the KKeyButton!
topLayout - > addWidget ( m_shortcutRole ) ;
topLayout - > addSpacing ( marginHint ( ) ) ;
topLayout - > addStretch ( 10 ) ;
setMainWidget ( page ) ;
}
BasketPropertiesDialog : : ~ BasketPropertiesDialog ( )
{
}
void BasketPropertiesDialog : : polish ( )
{
KDialogBase : : polish ( ) ;
m_name - > setFocus ( ) ;
}
void BasketPropertiesDialog : : applyChanges ( )
{
m_basket - > setDisposition ( m_disposition - > selectedId ( ) , m_columnCount - > value ( ) ) ;
m_basket - > setShortcut ( m_shortcut - > shortcut ( ) , m_shortcutRole - > selectedId ( ) ) ;
// Should be called LAST, because it will emit the propertiesChanged() signal and the tree will be able to show the newly set Alt+Letter shortcut:
m_basket - > setAppearance ( m_icon - > icon ( ) , m_name - > text ( ) , m_backgroundImagesMap [ m_backgroundImage - > currentItem ( ) ] , m_backgroundColor - > color ( ) , m_textColor - > color ( ) ) ;
m_basket - > save ( ) ;
}
void BasketPropertiesDialog : : slotApply ( )
{
applyChanges ( ) ;
KDialogBase : : slotApply ( ) ;
}
void BasketPropertiesDialog : : slotOk ( )
{
applyChanges ( ) ;
KDialogBase : : slotOk ( ) ;
}
void BasketPropertiesDialog : : capturedShortcut ( const TDEShortcut & shortcut )
{
// TODO: Validate it!
m_shortcut - > setShortcut ( shortcut , /*bTQtShortcut=*/ true ) ;
}
void BasketPropertiesDialog : : selectColumnsLayout ( )
{
m_disposition - > setButton ( 0 ) ;
}
# include "basketproperties.moc"