/***************************************************************************
ksig . cpp - description
- - - - - - - - - - - - - - - - - - -
begin : Tue Jul 9 23 : 14 : 22 EDT 2002
copyright : ( C ) 2002 by Scott Wheeler
email : wheeler @ kde . 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 . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include <kapplication.h>
# include <kstdaction.h>
# include <kaction.h>
# include <kconfig.h>
# include <kglobalsettings.h>
# include <kmessagebox.h>
# include <kstatusbar.h>
# include <ktextedit.h>
# include <klistviewsearchline.h>
# include <klocale.h>
# include <tqsplitter.h>
# include "ksig.h"
# include "siglistviewitem.h"
# include "standardtext.h"
////////////////////////////////////////////////////////////////////////////////
// public methods
////////////////////////////////////////////////////////////////////////////////
KSig : : KSig ( TQWidget * parent , const char * name ) : KMainWindow ( parent , name ) ,
changed ( false )
{
setupActions ( ) ;
setupLayout ( ) ;
setupSearchLine ( ) ;
if ( ! initialGeometrySet ( ) )
resize ( 640 , 480 ) ;
setupGUI ( ToolBar | Keys | StatusBar | Create ) ;
setAutoSaveSettings ( ) ;
readConfig ( ) ;
loadData ( ) ;
}
KSig : : ~ KSig ( )
{
}
////////////////////////////////////////////////////////////////////////////////
// private methods
////////////////////////////////////////////////////////////////////////////////
void KSig : : setupActions ( )
{
KStdAction : : openNew ( TQT_TQOBJECT ( this ) , TQT_SLOT ( add ( ) ) , actionCollection ( ) ) ;
new KAction ( i18n ( " Remove " ) , " editdelete " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( remove ( ) ) , actionCollection ( ) , " remove " ) ;
KStdAction : : save ( TQT_TQOBJECT ( this ) , TQT_SLOT ( save ( ) ) , actionCollection ( ) ) ;
KStdAction : : quit ( TQT_TQOBJECT ( this ) , TQT_SLOT ( quit ( ) ) , actionCollection ( ) ) ;
KStdAction : : cut ( TQT_TQOBJECT ( kapp ) , TQT_SLOT ( cut ( ) ) , actionCollection ( ) ) ;
KStdAction : : copy ( TQT_TQOBJECT ( kapp ) , TQT_SLOT ( copy ( ) ) , actionCollection ( ) ) ;
KStdAction : : paste ( TQT_TQOBJECT ( kapp ) , TQT_SLOT ( paste ( ) ) , actionCollection ( ) ) ;
new KAction ( i18n ( " C&lear " ) , " editclear " , 0 , TQT_TQOBJECT ( kapp ) , TQT_SLOT ( clear ( ) ) , actionCollection ( ) , " clear " ) ;
new KAction ( i18n ( " Edit Standard Header " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( editHeader ( ) ) , actionCollection ( ) , " editHeader " ) ;
new KAction ( i18n ( " Edit Standard Footer " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( editFooter ( ) ) , actionCollection ( ) , " editFooter " ) ;
}
void KSig : : setupLayout ( )
{
splitter = new TQSplitter ( Qt : : Vertical , this ) ;
setCentralWidget ( splitter ) ;
sigList = SigListView : : instance ( splitter , " sigList " ) ;
sigEdit = new KTextEdit ( splitter , " sigEdit " ) ;
sigEdit - > setTextFormat ( TQt : : PlainText ) ;
sigEdit - > setFont ( KGlobalSettings : : fixedFont ( ) ) ;
sigEdit - > setEnabled ( false ) ;
sigEdit - > setCheckSpellingEnabled ( true ) ;
statusBar ( ) - > insertItem ( i18n ( " Line: %1 " ) . arg ( 0 ) , LineNumber , 0 , true ) ;
statusBar ( ) - > insertItem ( i18n ( " Col: %1 " ) . arg ( 0 ) , ColumnNumber , 0 , true ) ;
statusBar ( ) - > show ( ) ;
updateListLock = false ;
connect ( sigEdit , TQT_SIGNAL ( textChanged ( ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( updateList ( ) ) ) ;
connect ( sigList , TQT_SIGNAL ( selectionChanged ( ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( updateEdit ( ) ) ) ;
connect ( sigEdit , TQT_SIGNAL ( cursorPositionChanged ( int , int ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( updateStatus ( int , int ) ) ) ;
}
void KSig : : setupSearchLine ( )
{
KListViewSearchLineWidget * searchWidget = new KListViewSearchLineWidget ( sigList , this ) ;
new KWidgetAction ( searchWidget , i18n ( " Search " ) , KShortcut ( ) , 0 , 0 , actionCollection ( ) , " search " ) ;
}
void KSig : : loadData ( )
{
if ( sigList - > childCount ( ) > 0 ) {
sigList - > setCurrentItem ( sigList - > firstChild ( ) ) ;
sigList - > setSelected ( sigList - > firstChild ( ) , true ) ;
sigEdit - > setEnabled ( true ) ;
}
else {
updateListLock = true ;
sigEdit - > setText ( i18n ( " To get started, first create a new signature by selecting "
" \" New \" above. You will then be able to edit and save "
" your collection of signatures. " ) ) ;
updateListLock = false ;
}
setDataChanged ( false ) ;
}
void KSig : : readConfig ( )
{
setAutoSaveSettings ( ) ;
KConfig * config = KGlobal : : config ( ) ;
{
KConfigGroupSaver saver ( config , " Settings " ) ;
if ( splitter ) {
TQValueList < int > sizes ;
sizes . append ( config - > readNumEntry ( " ListSize " , - 1 ) ) ;
sizes . append ( config - > readNumEntry ( " EditSize " , - 1 ) ) ;
if ( sizes [ 0 ] > 0 & & sizes [ 1 ] > 0 )
splitter - > setSizes ( sizes ) ;
}
header = config - > readEntry ( " Header " ) ;
footer = config - > readEntry ( " Footer " ) ;
}
}
void KSig : : writeConfig ( )
{
KConfig * config = KGlobal : : config ( ) ;
{
KConfigGroupSaver saver ( config , " Settings " ) ;
if ( splitter ) {
TQValueList < int > sizes = splitter - > sizes ( ) ;
config - > writeEntry ( " ListSize " , sizes [ 0 ] ) ;
config - > writeEntry ( " EditSize " , sizes [ 1 ] ) ;
}
config - > writeEntry ( " Header " , header ) ;
config - > writeEntry ( " Footer " , footer ) ;
}
config - > sync ( ) ;
}
bool KSig : : queryClose ( )
{
if ( changed ) {
int saveChanges = KMessageBox : : questionYesNoCancel ( this , i18n ( " Do you want to save your changes before exiting? " ) , TQString ( ) , KStdGuiItem : : save ( ) , KStdGuiItem : : discard ( ) ) ;
if ( saveChanges = = KMessageBox : : Cancel )
return ( false ) ;
else if ( saveChanges = = KMessageBox : : Yes )
save ( ) ;
}
writeConfig ( ) ;
return ( true ) ;
}
////////////////////////////////////////////////////////////////////////////////
// private slots
////////////////////////////////////////////////////////////////////////////////
void KSig : : add ( )
{
setDataChanged ( ) ;
SigListViewItem * sigItem = sigList - > createItem ( ) ;
sigList - > setCurrentItem ( sigItem ) ;
sigEdit - > setEnabled ( true ) ;
sigEdit - > setFocus ( ) ;
sigEdit - > clear ( ) ;
}
void KSig : : remove ( )
{
setDataChanged ( ) ;
sigEdit - > clear ( ) ;
delete ( sigList - > currentItem ( ) ) ;
}
void KSig : : save ( )
{
sigList - > save ( ) ;
setDataChanged ( false ) ;
}
void KSig : : setDataChanged ( bool value )
{
changed = value ;
if ( changed )
setCaption ( kapp - > makeStdCaption ( TQString ( ) , true , true ) ) ;
else
setCaption ( kapp - > makeStdCaption ( TQString ( ) , true , false ) ) ;
}
void KSig : : editHeader ( )
{
StandardText * t = new StandardText ( 0 , 0 , true ) ;
t - > setLabel ( i18n ( " Standard signature header: " ) ) ;
t - > setText ( header ) ;
connect ( t , TQT_SIGNAL ( textUpdated ( const TQString & ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( setHeader ( const TQString & ) ) ) ;
t - > exec ( ) ;
}
void KSig : : editFooter ( )
{
StandardText * t = new StandardText ( 0 , 0 , true ) ;
t - > setLabel ( i18n ( " Standard signature footer: " ) ) ;
t - > setText ( footer ) ;
connect ( t , TQT_SIGNAL ( textUpdated ( const TQString & ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( setFooter ( const TQString & ) ) ) ;
t - > exec ( ) ;
}
void KSig : : updateList ( )
{
if ( ! updateListLock ) {
setDataChanged ( ) ;
SigListViewItem * item = sigList - > currentItem ( ) ;
if ( item )
item - > setText ( sigEdit - > text ( ) ) ;
}
}
void KSig : : updateEdit ( )
{
updateListLock = true ;
SigListViewItem * item = sigList - > currentItem ( ) ;
if ( item )
sigEdit - > setText ( item - > text ( ) ) ;
updateListLock = false ;
}
void KSig : : updateStatus ( int line , int column )
{
statusBar ( ) - > changeItem ( i18n ( " Line: %1 " ) . arg ( line + 1 ) , LineNumber ) ;
statusBar ( ) - > changeItem ( i18n ( " Col: %1 " ) . arg ( column + 1 ) , ColumnNumber ) ;
}
void KSig : : quit ( )
{
close ( ) ;
}
# include "ksig.moc"