/***************************************************************************
abbreviation . cpp - description
- - - - - - - - - - - - - - - - - - -
copyright : ( C ) 2003 by Andras Mantia < amantia @ 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 ; version 2 of the License . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//qt includes
# include <tqdom.h>
# include <tqfile.h>
# include <tqfileinfo.h>
# include <tqlineedit.h>
# include <tqtextedit.h>
# include <tqtextstream.h>
# include <tqtimer.h>
//kde includes
# include <kcombobox.h>
# include <kdebug.h>
# include <kdialogbase.h>
# include <kglobal.h>
# include <kinputdialog.h>
# include <klistbox.h>
# include <klistview.h>
# include <klocale.h>
# include <kmessagebox.h>
# include <kstandarddirs.h>
//app includes
# include "abbreviation.h"
# include "codetemplatedlgs.h"
# include "resource.h"
# include "quantacommon.h"
# include "dtds.h"
AbbreviationDlg : : AbbreviationDlg ( TQWidget * tqparent , const char * name ) :
AbbreviationDlgS ( tqparent , name )
{
m_oldItem = 0L ;
m_currentAbbrev = 0L ;
TQMapConstIterator < TQString , Abbreviation > it ;
for ( it = qConfig . abbreviations . constBegin ( ) ; it ! = qConfig . abbreviations . constEnd ( ) ; + + it )
{
groupCombo - > insertItem ( it . key ( ) ) ;
}
slotGroupChanged ( groupCombo - > currentText ( ) ) ;
}
AbbreviationDlg : : ~ AbbreviationDlg ( )
{
}
void AbbreviationDlg : : slotGroupChanged ( const TQString & newGroupName )
{
//save the current template
TQListViewItem * item = templatesList - > currentItem ( ) ;
if ( item & & m_currentAbbrev )
m_currentAbbrev - > abbreviations . insert ( item - > text ( 0 ) + " " + item - > text ( 1 ) , codeEdit - > text ( ) ) ;
dtepList - > clear ( ) ;
templatesList - > clear ( ) ;
codeEdit - > clear ( ) ;
m_oldItem = 0L ;
m_currentAbbrev = & qConfig . abbreviations [ newGroupName ] ;
TQString templateStr ;
TQString templateName ;
TQMap < TQString , TQString > : : ConstIterator it ;
for ( it = m_currentAbbrev - > abbreviations . constBegin ( ) ; it ! = m_currentAbbrev - > abbreviations . constEnd ( ) ; + + it )
{
templateStr = it . key ( ) ;
templateName = templateStr . mid ( templateStr . tqfind ( ' ' ) + 1 ) ;
templateStr = templateStr . left ( templateStr . tqfind ( ' ' ) ) ;
new KListViewItem ( templatesList , templateStr , templateName ) ;
}
for ( TQStringList : : ConstIterator dtepit = m_currentAbbrev - > dteps . constBegin ( ) ; dtepit ! = m_currentAbbrev - > dteps . constEnd ( ) ; + + dtepit )
{
dtepList - > insertItem ( DTDs : : ref ( ) - > getDTDNickNameFromName ( * dtepit ) ) ;
}
templatesList - > sort ( ) ;
templatesList - > setCurrentItem ( templatesList - > firstChild ( ) ) ;
templatesList - > setSelected ( templatesList - > firstChild ( ) , true ) ;
}
void AbbreviationDlg : : slotNewGroup ( )
{
bool ok ;
TQString groupName = KInputDialog : : getText ( i18n ( " New Abbreviation Group " ) , i18n ( " Group name: " ) , " " , & ok , this ) ;
if ( ok & & ! groupName . isEmpty ( ) )
{
if ( qConfig . abbreviations . tqcontains ( groupName ) )
{
KMessageBox : : error ( this , i18n ( " <qt>There is already an abbreviation group called <b>%1</b>. Choose an unique name for the new group.</qt> " ) . tqarg ( groupName ) , i18n ( " Group already exists " ) ) ;
TQTimer : : singleShot ( 0 , this , TQT_SLOT ( slotNewGroup ( ) ) ) ;
} else
{
groupCombo - > insertItem ( groupName ) ;
groupCombo - > setCurrentItem ( groupCombo - > count ( ) - 1 ) ;
slotGroupChanged ( groupName ) ;
}
}
}
void AbbreviationDlg : : slotAddDTEP ( )
{
TQStringList lst = DTDs : : ref ( ) - > nickNameList ( false ) ;
for ( uint i = 0 ; i < dtepList - > count ( ) ; i + + )
lst . remove ( dtepList - > text ( i ) ) ;
bool ok = false ;
TQStringList res = KInputDialog : : getItemList (
i18n ( " Add DTEP " ) ,
i18n ( " Select a DTEP: " ) , lst , 0 , true , & ok , this ) ;
if ( ok )
{
dtepList - > insertStringList ( res ) ;
for ( TQStringList : : ConstIterator it = res . constBegin ( ) ; it ! = res . constEnd ( ) ; + + it )
{
m_currentAbbrev - > dteps . append ( DTDs : : ref ( ) - > getDTDNameFromNickName ( * it ) ) ;
}
}
}
void AbbreviationDlg : : slotRemoveDTEP ( )
{
bool hasSelected = false ;
for ( uint i = 0 ; i < dtepList - > count ( ) ; i + + )
{
if ( dtepList - > isSelected ( i ) )
{
m_currentAbbrev - > dteps . remove ( DTDs : : ref ( ) - > getDTDNameFromNickName ( dtepList - > text ( i ) ) ) ;
dtepList - > removeItem ( i ) ;
i - - ;
hasSelected = true ;
}
}
if ( ! hasSelected )
{
KMessageBox : : error ( this , i18n ( " <qt>Select a DTEP from the list before using <b>Remove</b>.</qt> " ) , i18n ( " No DTEP Selected " ) ) ;
}
}
void AbbreviationDlg : : slotTemplateSelectionChanged ( TQListViewItem * item )
{
if ( ! item )
return ;
//TQListViewItem *m_oldItem = templatesList->currentItem();
if ( m_oldItem )
{
TQString key = m_oldItem - > text ( 0 ) + " " + m_oldItem - > text ( 1 ) ;
m_currentAbbrev - > abbreviations . insert ( key , codeEdit - > text ( ) ) ;
}
TQString code = m_currentAbbrev - > abbreviations [ item - > text ( 0 ) + " " + item - > text ( 1 ) ] ;
codeEdit - > setText ( code ) ;
m_oldItem = item ;
}
void AbbreviationDlg : : slotAddTemplate ( )
{
KDialogBase dlg ( this , 0 , true , i18n ( " Add Code Template " ) , KDialogBase : : Ok | KDialogBase : : Cancel ) ;
CodeTemplateDlgS w ( & dlg ) ;
dlg . setMainWidget ( & w ) ;
w . templateEdit - > setFocus ( ) ;
if ( dlg . exec ( ) )
{
TQString templateName = w . templateEdit - > text ( ) ;
TQString description = w . descriptionEdit - > text ( ) ;
if ( ! templateName . isEmpty ( ) )
{
TQListViewItem * item = new KListViewItem ( templatesList , templateName , description ) ;
templatesList - > setCurrentItem ( item ) ;
templatesList - > setSelected ( item , true ) ;
templatesList - > ensureItemVisible ( item ) ;
codeEdit - > setFocus ( ) ;
}
}
}
void AbbreviationDlg : : slotRemoveTemplate ( )
{
TQListViewItem * item = templatesList - > currentItem ( ) ;
if ( item & &
KMessageBox : : warningContinueCancel ( this , i18n ( " <qt>Do you really want to remove the <b>%1</b> template?</qt> " ) . tqarg ( item - > text ( 1 ) ) , TQString ( ) , KStdGuiItem : : del ( ) ) = = KMessageBox : : Continue )
{
m_currentAbbrev - > abbreviations . remove ( item - > text ( 0 ) + " " + item - > text ( 1 ) ) ;
delete item ;
m_oldItem = 0L ;
slotTemplateSelectionChanged ( templatesList - > currentItem ( ) ) ;
}
}
void AbbreviationDlg : : slotEditTemplate ( )
{
TQListViewItem * item = templatesList - > currentItem ( ) ;
if ( ! item )
return ;
KDialogBase dlg ( this , 0 , true , i18n ( " Edit Code Template " ) , KDialogBase : : Ok | KDialogBase : : Cancel ) ;
CodeTemplateDlgS w ( & dlg ) ;
dlg . setMainWidget ( & w ) ;
w . templateEdit - > setText ( item - > text ( 0 ) ) ;
w . descriptionEdit - > setText ( item - > text ( 1 ) ) ;
if ( dlg . exec ( ) )
{
m_currentAbbrev - > abbreviations . remove ( item - > text ( 0 ) + " " + item - > text ( 1 ) ) ;
item - > setText ( 0 , w . templateEdit - > text ( ) ) ;
item - > setText ( 1 , w . descriptionEdit - > text ( ) ) ;
m_currentAbbrev - > abbreviations . insert ( item - > text ( 0 ) + " " + item - > text ( 1 ) , codeEdit - > text ( ) ) ;
}
}
void AbbreviationDlg : : saveTemplates ( )
{
TQListViewItem * item = templatesList - > currentItem ( ) ;
if ( item & & m_currentAbbrev )
m_currentAbbrev - > abbreviations . insert ( item - > text ( 0 ) + " " + item - > text ( 1 ) , codeEdit - > text ( ) ) ;
TQString abbrevFile = KGlobal : : dirs ( ) - > saveLocation ( " data " ) + resourceDir + " abbreviations.xml " ;
TQString s = " <!DOCTYPE Templates> \n <Templates> \n </Templates> \n " ;
TQString s2 ;
TQDomDocument doc ;
doc . setContent ( s ) ;
TQDomNode firstNode = doc . firstChild ( ) ;
Abbreviation abbrev ;
TQMap < TQString , Abbreviation > : : ConstIterator abbrevIt ;
for ( abbrevIt = qConfig . abbreviations . constBegin ( ) ; abbrevIt ! = qConfig . abbreviations . constEnd ( ) ; + + abbrevIt )
{
TQDomElement groupEl = doc . createElement ( " Group " ) ;
groupEl . setAttribute ( " name " , abbrevIt . key ( ) ) ;
abbrev = abbrevIt . data ( ) ;
for ( TQStringList : : ConstIterator dtepIt = abbrev . dteps . constBegin ( ) ; dtepIt ! = abbrev . dteps . constEnd ( ) ; + + dtepIt )
{
TQDomElement el = doc . createElement ( " DTEP " ) ;
el . setAttribute ( " name " , * dtepIt ) ;
groupEl . appendChild ( el ) ;
}
int pos ;
TQMap < TQString , TQString > : : ConstIterator it ;
for ( it = abbrev . abbreviations . constBegin ( ) ; it ! = abbrev . abbreviations . constEnd ( ) ; + + it )
{
TQDomElement el = doc . createElement ( " Template " ) ;
el . setAttribute ( " code " , it . data ( ) ) ;
s = it . key ( ) ;
s2 = " " ;
pos = s . tqfind ( ' ' ) ;
if ( pos ! = - 1 )
{
s2 = s . mid ( pos + 1 ) ;
s = s . left ( pos ) ;
}
el . setAttribute ( " name " , s ) ;
el . setAttribute ( " description " , s2 ) ;
groupEl . appendChild ( el ) ;
}
firstNode . appendChild ( groupEl ) ;
}
TQFile f ( abbrevFile ) ;
if ( f . open ( IO_WriteOnly | IO_Truncate ) )
{
TQTextStream str ( & f ) ;
str . setEncoding ( TQTextStream : : UnicodeUTF8 ) ;
str < < doc . toString ( ) ;
f . close ( ) ;
} else
{
KMessageBox : : error ( this , i18n ( " <qt>Cannot open the file <b>%1</b> for writing. \n Modified abbreviations will be lost when you quit Quanta.</qt> " ) . tqarg ( s ) ) ;
}
}
# include "abbreviation.moc"