/* This file is part of the KDE libraries
Copyright ( C ) 2002 , 2003 Anders Lund < anders . lund @ lund . tdcadsl . dk >
Copyright ( C ) 2003 Christoph Cullmann < cullmann @ kde . org >
Copyright ( C ) 2001 Joseph Wenninger < jowenn @ kde . org >
Based on work of :
Copyright ( C ) 1999 Jochen Wilhelmy < digisnap @ cs . tu - berlin . de >
This library is free software ; you can redistribute it and / or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation .
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 .
*/
//BEGIN Includes
# include "katedialogs.h"
# include "katedialogs.moc"
# include "kateautoindent.h"
# include "katebuffer.h"
# include "kateconfig.h"
# include "katedocument.h"
# include "katefactory.h"
# include "kateschema.h"
# include "katesyntaxdocument.h"
# include "kateview.h"
# include <ktexteditor/configinterfaceextension.h>
# include <ktexteditor/plugin.h>
# include <kio/job.h>
# include <kio/jobclasses.h>
# include <kio/netaccess.h>
# include <kaccel.h>
# include <kapplication.h>
# include <kbuttonbox.h>
# include <kcharsets.h>
# include <kcolorbutton.h>
# include <kcolorcombo.h>
# include <kcolordialog.h>
# include <kcombobox.h>
# include <kconfig.h>
# include <kdebug.h>
# include <kfontdialog.h>
# include <kglobal.h>
# include <kglobalsettings.h>
# include <kiconloader.h>
# include <kkeybutton.h>
# include <kkeydialog.h>
# include <klineedit.h>
# include <klistview.h>
# include <klocale.h>
# include <kmessagebox.h>
# include <kmimetypechooser.h>
# include <knuminput.h>
# include <kparts/componentfactory.h>
# include <kpopupmenu.h>
# include <kprocess.h>
# include <kprocio.h>
# include <kregexpeditorinterface.h>
# include <krun.h>
# include <kseparator.h>
# include <kstandarddirs.h>
# include <ktempfile.h>
# include <tqbuttongroup.h>
# include <tqcheckbox.h>
# include <tqcombobox.h>
# include <tqdialog.h>
# include <tqdom.h>
# include <tqfile.h>
# include <tqgrid.h>
# include <tqgroupbox.h>
# include <tqhbox.h>
# include <tqheader.h>
# include <tqhgroupbox.h>
# include <tqlabel.h>
# include <tqlayout.h>
# include <tqlineedit.h>
# include <tqlistbox.h>
# include <tqlistview.h>
# include <tqmap.h>
# include <tqobjectlist.h>
# include <tqpainter.h>
# include <tqpointarray.h>
# include <tqptrcollection.h>
# include <tqpushbutton.h>
# include <tqradiobutton.h>
# include <tqslider.h>
# include <tqspinbox.h>
# include <tqstringlist.h>
# include <tqtabwidget.h>
# include <tqtextcodec.h>
# include <tqtoolbutton.h>
# include <tqvbox.h>
# include <tqvgroupbox.h>
# include <tqwhatsthis.h>
# include <tqwidgetstack.h>
// trailing slash is important
# define HLDOWNLOADPATH "http: //kate.kde.org/syntax/"
//END
//BEGIN KateConfigPage
KateConfigPage : : KateConfigPage ( TQWidget * parent , const char * name )
: Kate : : ConfigPage ( parent , name )
, m_changed ( false )
{
connect ( this , TQT_SIGNAL ( changed ( ) ) , this , TQT_SLOT ( somethingHasChanged ( ) ) ) ;
}
KateConfigPage : : ~ KateConfigPage ( )
{
}
void KateConfigPage : : somethingHasChanged ( )
{
m_changed = true ;
kdDebug ( 13000 ) < < " TEST: something changed on the config page: " < < this < < endl ;
}
//END KateConfigPage
//BEGIN KateIndentConfigTab
const int KateIndentConfigTab : : flags [ ] = {
KateDocument : : cfSpaceIndent ,
KateDocument : : cfKeepIndentProfile ,
KateDocument : : cfKeepExtraSpaces ,
KateDocument : : cfTabIndents ,
KateDocument : : cfBackspaceIndents ,
KateDocumentConfig : : cfDoxygenAutoTyping ,
KateDocumentConfig : : cfMixedIndent ,
KateDocumentConfig : : cfIndentPastedText
} ;
KateIndentConfigTab : : KateIndentConfigTab ( TQWidget * parent )
: KateConfigPage ( parent )
{
TQVBoxLayout * layout = new TQVBoxLayout ( this , 0 , KDialog : : spacingHint ( ) ) ;
int configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
TQVGroupBox * gbAuto = new TQVGroupBox ( i18n ( " Automatic Indentation " ) , this ) ;
TQHBox * indentLayout = new TQHBox ( gbAuto ) ;
indentLayout - > setSpacing ( KDialog : : spacingHint ( ) ) ;
TQLabel * indentLabel = new TQLabel ( i18n ( " &Indentation mode: " ) , indentLayout ) ;
m_indentMode = new KComboBox ( indentLayout ) ;
m_indentMode - > insertStringList ( KateAutoIndent : : listModes ( ) ) ;
indentLabel - > setBuddy ( m_indentMode ) ;
m_configPage = new TQPushButton ( SmallIconSet ( " configure " ) , i18n ( " Configure... " ) , indentLayout ) ;
opt [ 5 ] = new TQCheckBox ( i18n ( " Insert leading Doxygen \" * \" when typing " ) , gbAuto ) ;
opt [ 7 ] = new TQCheckBox ( i18n ( " Adjust indentation of code pasted from the clipboard " ) , gbAuto ) ;
TQVGroupBox * gbSpaces = new TQVGroupBox ( i18n ( " Indentation with Spaces " ) , this ) ;
TQVBox * spaceLayout = new TQVBox ( gbSpaces ) ;
opt [ 0 ] = new TQCheckBox ( i18n ( " Use &spaces instead of tabs to indent " ) , spaceLayout ) ;
opt [ 6 ] = new TQCheckBox ( i18n ( " Emacs style mixed mode " ) , spaceLayout ) ;
indentationWidth = new KIntNumInput ( KateDocumentConfig : : global ( ) - > indentationWidth ( ) , spaceLayout ) ;
indentationWidth - > setRange ( 1 , 16 , 1 , false ) ;
indentationWidth - > setLabel ( i18n ( " Number of spaces: " ) , AlignVCenter ) ;
opt [ 1 ] = new TQCheckBox ( i18n ( " Keep indent &profile " ) , this ) ;
opt [ 2 ] = new TQCheckBox ( i18n ( " &Keep extra spaces " ) , this ) ;
TQVGroupBox * keys = new TQVGroupBox ( i18n ( " Keys to Use " ) , this ) ;
opt [ 3 ] = new TQCheckBox ( i18n ( " &Tab key indents " ) , keys ) ;
opt [ 4 ] = new TQCheckBox ( i18n ( " &Backspace key indents " ) , keys ) ;
TQRadioButton * rb1 , * rb2 , * rb3 ;
m_tabs = new TQButtonGroup ( 1 , Qt : : Horizontal , i18n ( " Tab Key Mode if Nothing Selected " ) , this ) ;
m_tabs - > setRadioButtonExclusive ( true ) ;
m_tabs - > insert ( rb1 = new TQRadioButton ( i18n ( " Insert indent &characters " ) , m_tabs ) , 0 ) ;
m_tabs - > insert ( rb2 = new TQRadioButton ( i18n ( " I&nsert tab character " ) , m_tabs ) , 1 ) ;
m_tabs - > insert ( rb3 = new TQRadioButton ( i18n ( " Indent current &line " ) , m_tabs ) , 2 ) ;
opt [ 0 ] - > setChecked ( configFlags & flags [ 0 ] ) ;
opt [ 1 ] - > setChecked ( configFlags & flags [ 1 ] ) ;
opt [ 2 ] - > setChecked ( configFlags & flags [ 2 ] ) ;
opt [ 3 ] - > setChecked ( configFlags & flags [ 3 ] ) ;
opt [ 4 ] - > setChecked ( configFlags & flags [ 4 ] ) ;
opt [ 5 ] - > setChecked ( configFlags & flags [ 5 ] ) ;
opt [ 6 ] - > setChecked ( configFlags & flags [ 6 ] ) ;
opt [ 7 ] - > setChecked ( configFlags & flags [ 7 ] ) ;
layout - > addWidget ( gbAuto ) ;
layout - > addWidget ( gbSpaces ) ;
layout - > addWidget ( opt [ 1 ] ) ;
layout - > addWidget ( opt [ 2 ] ) ;
layout - > addWidget ( keys ) ;
layout - > addWidget ( m_tabs , 0 ) ;
layout - > addStretch ( ) ;
// What is this? help
TQWhatsThis : : add ( opt [ 0 ] , i18n (
" Check this if you want to indent with spaces rather than tabs. " ) ) ;
TQWhatsThis : : add ( opt [ 2 ] , i18n (
" Indentations of more than the selected number of spaces will not be "
" shortened. " ) ) ;
TQWhatsThis : : add ( opt [ 3 ] , i18n (
" This allows the <b>Tab</b> key to be used to increase the indentation "
" level. " ) ) ;
TQWhatsThis : : add ( opt [ 4 ] , i18n (
" This allows the <b>Backspace</b> key to be used to decrease the "
" indentation level. " ) ) ;
TQWhatsThis : : add ( opt [ 5 ] , i18n (
" Automatically inserts a leading \" * \" while typing within a Doxygen "
" style comment. " ) ) ;
TQWhatsThis : : add ( opt [ 6 ] , i18n (
" Use a mix of tab and space characters for indentation. " ) ) ;
TQWhatsThis : : add ( opt [ 7 ] , i18n (
" If this option is selected, pasted code from the clipboard is indented. "
" Triggering the <b>undo</b>-action removes the indentation. " ) ) ;
TQWhatsThis : : add ( indentationWidth , i18n ( " The number of spaces to indent with. " ) ) ;
TQWhatsThis : : add ( m_configPage , i18n (
" If this button is enabled, additional indenter specific options are "
" available and can be configured in an extra dialog. " ) ) ;
reload ( ) ;
//
// after initial reload, connect the stuff for the changed () signal
//
connect ( m_indentMode , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_indentMode , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( indenterSelected ( int ) ) ) ;
connect ( opt [ 0 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( somethingToggled ( ) ) ) ;
connect ( opt [ 0 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( opt [ 1 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( opt [ 2 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( opt [ 3 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( opt [ 4 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( opt [ 5 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( opt [ 6 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( opt [ 7 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( indentationWidth , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( rb1 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( rb2 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( rb3 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_configPage , TQT_SIGNAL ( clicked ( ) ) , this , TQT_SLOT ( configPage ( ) ) ) ;
}
void KateIndentConfigTab : : somethingToggled ( ) {
indentationWidth - > setEnabled ( opt [ 0 ] - > isChecked ( ) ) ;
opt [ 6 ] - > setEnabled ( opt [ 0 ] - > isChecked ( ) ) ;
}
void KateIndentConfigTab : : indenterSelected ( int index )
{
if ( index = = KateDocumentConfig : : imCStyle | | index = = KateDocumentConfig : : imCSAndS )
opt [ 5 ] - > setEnabled ( true ) ;
else
opt [ 5 ] - > setEnabled ( false ) ;
m_configPage - > setEnabled ( KateAutoIndent : : hasConfigPage ( index ) ) ;
}
void KateIndentConfigTab : : configPage ( )
{
uint index = m_indentMode - > currentItem ( ) ;
if ( KateAutoIndent : : hasConfigPage ( index ) )
{
KDialogBase dlg ( this , " indenter_config_dialog " , true , i18n ( " Configure Indenter " ) ,
KDialogBase : : Ok | KDialogBase : : Cancel , KDialogBase : : Cancel , true ) ;
TQVBox * box = new TQVBox ( & dlg ) ;
box - > setSpacing ( KDialog : : spacingHint ( ) ) ;
dlg . setMainWidget ( box ) ;
new TQLabel ( " <qt><b> " + KateAutoIndent : : modeDescription ( index ) + " </b></qt> " , box ) ;
new KSeparator ( KSeparator : : HLine , box ) ;
IndenterConfigPage * page = KateAutoIndent : : configPage ( box , index ) ;
if ( ! page ) return ;
box - > setStretchFactor ( page , 1 ) ;
connect ( & dlg , TQT_SIGNAL ( okClicked ( ) ) , page , TQT_SLOT ( apply ( ) ) ) ;
dlg . resize ( 400 , 300 ) ;
dlg . exec ( ) ;
}
}
void KateIndentConfigTab : : apply ( )
{
// nothing changed, no need to apply stuff
if ( ! changed ( ) )
return ;
m_changed = false ;
KateDocumentConfig : : global ( ) - > configStart ( ) ;
int configFlags , z ;
configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
for ( z = 0 ; z < numFlags ; z + + ) {
configFlags & = ~ flags [ z ] ;
if ( opt [ z ] - > isChecked ( ) ) configFlags | = flags [ z ] ;
}
KateDocumentConfig : : global ( ) - > setConfigFlags ( configFlags ) ;
KateDocumentConfig : : global ( ) - > setIndentationWidth ( indentationWidth - > value ( ) ) ;
KateDocumentConfig : : global ( ) - > setIndentationMode ( m_indentMode - > currentItem ( ) ) ;
KateDocumentConfig : : global ( ) - > setConfigFlags ( KateDocumentConfig : : cfTabIndentsMode , 2 = = m_tabs - > id ( m_tabs - > selected ( ) ) ) ;
KateDocumentConfig : : global ( ) - > setConfigFlags ( KateDocumentConfig : : cfTabInsertsTab , 1 = = m_tabs - > id ( m_tabs - > selected ( ) ) ) ;
KateDocumentConfig : : global ( ) - > configEnd ( ) ;
}
void KateIndentConfigTab : : reload ( )
{
if ( KateDocumentConfig : : global ( ) - > configFlags ( ) & KateDocumentConfig : : cfTabIndentsMode )
m_tabs - > setButton ( 2 ) ;
else if ( KateDocumentConfig : : global ( ) - > configFlags ( ) & KateDocumentConfig : : cfTabInsertsTab )
m_tabs - > setButton ( 1 ) ;
else
m_tabs - > setButton ( 0 ) ;
m_indentMode - > setCurrentItem ( KateDocumentConfig : : global ( ) - > indentationMode ( ) ) ;
somethingToggled ( ) ;
indenterSelected ( m_indentMode - > currentItem ( ) ) ;
}
//END KateIndentConfigTab
//BEGIN KateSelectConfigTab
const int KateSelectConfigTab : : flags [ ] = { } ;
KateSelectConfigTab : : KateSelectConfigTab ( TQWidget * parent )
: KateConfigPage ( parent )
{
int configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
TQVBoxLayout * layout = new TQVBoxLayout ( this , 0 , KDialog : : spacingHint ( ) ) ;
TQVGroupBox * gbCursor = new TQVGroupBox ( i18n ( " Text Cursor Movement " ) , this ) ;
opt [ 0 ] = new TQCheckBox ( i18n ( " Smart ho&me and smart end " ) , gbCursor ) ;
opt [ 0 ] - > setChecked ( configFlags & KateDocumentConfig : : cfSmartHome ) ;
connect ( opt [ 0 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
opt [ 1 ] = new TQCheckBox ( i18n ( " Wrap c&ursor " ) , gbCursor ) ;
opt [ 1 ] - > setChecked ( configFlags & KateDocumentConfig : : cfWrapCursor ) ;
connect ( opt [ 1 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
e6 = new TQCheckBox ( i18n ( " &PageUp/PageDown moves cursor " ) , gbCursor ) ;
e6 - > setChecked ( KateDocumentConfig : : global ( ) - > pageUpDownMovesCursor ( ) ) ;
connect ( e6 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
e4 = new KIntNumInput ( KateViewConfig : : global ( ) - > autoCenterLines ( ) , gbCursor ) ;
e4 - > setRange ( 0 , 1000000 , 1 , false ) ;
e4 - > setLabel ( i18n ( " Autocenter cursor (lines): " ) , AlignVCenter ) ;
connect ( e4 , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
layout - > addWidget ( gbCursor ) ;
TQRadioButton * rb1 , * rb2 ;
m_tabs = new TQButtonGroup ( 1 , Qt : : Horizontal , i18n ( " Selection Mode " ) , this ) ;
layout - > add ( m_tabs ) ;
m_tabs - > setRadioButtonExclusive ( true ) ;
m_tabs - > insert ( rb1 = new TQRadioButton ( i18n ( " &Normal " ) , m_tabs ) , 0 ) ;
m_tabs - > insert ( rb2 = new TQRadioButton ( i18n ( " &Persistent " ) , m_tabs ) , 1 ) ;
layout - > addStretch ( ) ;
TQWhatsThis : : add ( rb1 , i18n (
" Selections will be overwritten by typed text and will be lost on "
" cursor movement. " ) ) ;
TQWhatsThis : : add ( rb2 , i18n (
" Selections will stay even after cursor movement and typing. " ) ) ;
TQWhatsThis : : add ( e4 , i18n (
" Sets the number of lines to maintain visible above and below the "
" cursor when possible. " ) ) ;
TQWhatsThis : : add ( opt [ 0 ] , i18n (
" When selected, pressing the home key will cause the cursor to skip "
" whitespace and go to the start of a line's text. "
" The same applies for the end key. " ) ) ;
TQWhatsThis : : add ( opt [ 1 ] , i18n (
" When on, moving the insertion cursor using the <b>Left</b> and "
" <b>Right</b> keys will go on to previous/next line at beginning/end of "
" the line, similar to most editors.<p>When off, the insertion cursor "
" cannot be moved left of the line start, but it can be moved off the "
" line end, which can be very handy for programmers. " ) ) ;
TQWhatsThis : : add ( e6 , i18n ( " Selects whether the PageUp and PageDown keys should alter the vertical position of the cursor relative to the top of the view. " ) ) ;
reload ( ) ;
//
// after initial reload, connect the stuff for the changed () signal
//
connect ( rb1 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( rb2 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
}
void KateSelectConfigTab : : apply ( )
{
// nothing changed, no need to apply stuff
if ( ! changed ( ) )
return ;
m_changed = false ;
KateViewConfig : : global ( ) - > configStart ( ) ;
KateDocumentConfig : : global ( ) - > configStart ( ) ;
int configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
configFlags & = ~ KateDocumentConfig : : cfSmartHome ;
configFlags & = ~ KateDocumentConfig : : cfWrapCursor ;
if ( opt [ 0 ] - > isChecked ( ) ) configFlags | = KateDocumentConfig : : cfSmartHome ;
if ( opt [ 1 ] - > isChecked ( ) ) configFlags | = KateDocumentConfig : : cfWrapCursor ;
KateDocumentConfig : : global ( ) - > setConfigFlags ( configFlags ) ;
KateViewConfig : : global ( ) - > setAutoCenterLines ( kMax ( 0 , e4 - > value ( ) ) ) ;
KateDocumentConfig : : global ( ) - > setPageUpDownMovesCursor ( e6 - > isChecked ( ) ) ;
KateViewConfig : : global ( ) - > setPersistentSelection ( m_tabs - > id ( m_tabs - > selected ( ) ) = = 1 ) ;
KateDocumentConfig : : global ( ) - > configEnd ( ) ;
KateViewConfig : : global ( ) - > configEnd ( ) ;
}
void KateSelectConfigTab : : reload ( )
{
if ( KateViewConfig : : global ( ) - > persistentSelection ( ) )
m_tabs - > setButton ( 1 ) ;
else
m_tabs - > setButton ( 0 ) ;
}
//END KateSelectConfigTab
//BEGIN KateEditConfigTab
const int KateEditConfigTab : : flags [ ] = { KateDocument : : cfWordWrap ,
KateDocument : : cfAutoBrackets , KateDocument : : cfShowTabs ,
KateDocumentConfig : : cfReplaceTabsDyn , KateDocumentConfig : : cfRemoveTrailingDyn } ;
KateEditConfigTab : : KateEditConfigTab ( TQWidget * parent )
: KateConfigPage ( parent )
{
TQVBoxLayout * mainLayout = new TQVBoxLayout ( this , 0 , KDialog : : spacingHint ( ) ) ;
int configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
TQVGroupBox * gbWhiteSpace = new TQVGroupBox ( i18n ( " Tabulators " ) , this ) ;
opt [ 3 ] = new TQCheckBox ( i18n ( " &Insert spaces instead of tabulators " ) , gbWhiteSpace ) ;
opt [ 3 ] - > setChecked ( configFlags & KateDocumentConfig : : cfReplaceTabsDyn ) ;
connect ( opt [ 3 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
opt [ 2 ] = new TQCheckBox ( i18n ( " &Show tabulators " ) , gbWhiteSpace ) ;
opt [ 2 ] - > setChecked ( configFlags & flags [ 2 ] ) ;
connect ( opt [ 2 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
e2 = new KIntNumInput ( KateDocumentConfig : : global ( ) - > tabWidth ( ) , gbWhiteSpace ) ;
e2 - > setRange ( 1 , 16 , 1 , false ) ;
e2 - > setLabel ( i18n ( " Tab width: " ) , AlignVCenter ) ;
connect ( e2 , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
mainLayout - > addWidget ( gbWhiteSpace ) ;
TQVGroupBox * gbWordWrap = new TQVGroupBox ( i18n ( " Static Word Wrap " ) , this ) ;
opt [ 0 ] = new TQCheckBox ( i18n ( " Enable static &word wrap " ) , gbWordWrap ) ;
opt [ 0 ] - > setChecked ( KateDocumentConfig : : global ( ) - > wordWrap ( ) ) ;
connect ( opt [ 0 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
m_wwmarker = new TQCheckBox ( i18n ( " &Show static word wrap marker (if applicable) " ) , gbWordWrap ) ;
m_wwmarker - > setChecked ( KateRendererConfig : : global ( ) - > wordWrapMarker ( ) ) ;
connect ( m_wwmarker , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
e1 = new KIntNumInput ( KateDocumentConfig : : global ( ) - > wordWrapAt ( ) , gbWordWrap ) ;
e1 - > setRange ( 20 , 200 , 1 , false ) ;
e1 - > setLabel ( i18n ( " Wrap words at: " ) , AlignVCenter ) ;
connect ( e1 , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
mainLayout - > addWidget ( gbWordWrap ) ;
opt [ 4 ] = new TQCheckBox ( i18n ( " Remove &trailing spaces " ) , this ) ;
mainLayout - > addWidget ( opt [ 4 ] ) ;
opt [ 4 ] - > setChecked ( configFlags & KateDocumentConfig : : cfRemoveTrailingDyn ) ;
connect ( opt [ 4 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
opt [ 1 ] = new TQCheckBox ( i18n ( " Auto &brackets " ) , this ) ;
mainLayout - > addWidget ( opt [ 1 ] ) ;
opt [ 1 ] - > setChecked ( configFlags & flags [ 1 ] ) ;
connect ( opt [ 1 ] , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
e3 = new KIntNumInput ( e2 , KateDocumentConfig : : global ( ) - > undoSteps ( ) , this ) ;
e3 - > setRange ( 0 , 1000000 , 1 , false ) ;
e3 - > setSpecialValueText ( i18n ( " Unlimited " ) ) ;
e3 - > setLabel ( i18n ( " Maximum undo steps: " ) , AlignVCenter ) ;
mainLayout - > addWidget ( e3 ) ;
connect ( e3 , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
TQHBoxLayout * e5Layout = new TQHBoxLayout ( mainLayout ) ;
TQLabel * e5Label = new TQLabel ( i18n ( " Smart search t&ext from: " ) , this ) ;
e5Layout - > addWidget ( e5Label ) ;
e5 = new KComboBox ( this ) ;
e5 - > insertItem ( i18n ( " Nowhere " ) ) ;
e5 - > insertItem ( i18n ( " Selection Only " ) ) ;
e5 - > insertItem ( i18n ( " Selection, then Current Word " ) ) ;
e5 - > insertItem ( i18n ( " Current Word Only " ) ) ;
e5 - > insertItem ( i18n ( " Current Word, then Selection " ) ) ;
e5 - > setCurrentItem ( KateViewConfig : : global ( ) - > textToSearchMode ( ) ) ;
e5Layout - > addWidget ( e5 ) ;
e5Label - > setBuddy ( e5 ) ;
connect ( e5 , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
mainLayout - > addStretch ( ) ;
// What is this? help
TQWhatsThis : : add ( opt [ 0 ] , i18n (
" Automatically start a new line of text when the current line exceeds "
" the length specified by the <b>Wrap words at:</b> option. "
" <p>This option does not wrap existing lines of text - use the <b>Apply "
" Static Word Wrap</b> option in the <b>Tools</b> menu for that purpose. "
" <p>If you want lines to be <i>visually wrapped</i> instead, according "
" to the width of the view, enable <b>Dynamic Word Wrap</b> in the "
" <b>View Defaults</b> config page. " ) ) ;
TQWhatsThis : : add ( e1 , i18n (
" If the Word Wrap option is selected this entry determines the length "
" (in characters) at which the editor will automatically start a new line. " ) ) ;
TQWhatsThis : : add ( opt [ 1 ] , i18n (
" When the user types a left bracket ([,(, or {) KateView automatically "
" enters the right bracket (}, ), or ]) to the right of the cursor. " ) ) ;
TQWhatsThis : : add ( opt [ 2 ] , i18n (
" The editor will display a symbol to indicate the presence of a tab in "
" the text. " ) ) ;
TQWhatsThis : : add ( e3 , i18n (
" Sets the number of undo/redo steps to record. More steps uses more memory. " ) ) ;
TQString gstfwt = i18n (
" This determines where KateView will get the search text from "
" (this will be automatically entered into the Find Text dialog): "
" <br> "
" <ul> "
" <li><b>Nowhere:</b> Don't guess the search text. "
" </li> "
" <li><b>Selection Only:</b> Use the current text selection, "
" if available. "
" </li> "
" <li><b>Selection, then Current Word:</b> Use the current "
" selection if available, otherwise use the current word. "
" </li> "
" <li><b>Current Word Only:</b> Use the word that the cursor "
" is currently resting on, if available. "
" </li> "
" <li><b>Current Word, then Selection:</b> Use the current "
" word if available, otherwise use the current selection. "
" </li> "
" </ul> "
" Note that, in all the above modes, if a search string has "
" not been or cannot be determined, then the Find Text Dialog "
" will fall back to the last search text. " ) ;
TQWhatsThis : : add ( e5Label , gstfwt ) ;
TQWhatsThis : : add ( e5 , gstfwt ) ;
TQWhatsThis : : add ( opt [ 3 ] , i18n (
" If this is enabled, the editor will calculate the number of spaces up to "
" the next tab position as defined by the tab width, and insert that number "
" of spaces instead of a TAB character. " ) ) ;
TQWhatsThis : : add ( opt [ 4 ] , i18n (
" If this is enabled, the editor will remove any trailing whitespace on "
" lines when they are left by the insertion cursor. " ) ) ;
TQWhatsThis : : add ( m_wwmarker , i18n (
" <p>If this option is checked, a vertical line will be drawn at the word "
" wrap column as defined in the <strong>Editing</strong> properties. "
" <p>Note that the word wrap marker is only drawn if you use a fixed "
" pitch font. " ) ) ;
}
void KateEditConfigTab : : apply ( )
{
// nothing changed, no need to apply stuff
if ( ! changed ( ) )
return ;
m_changed = false ;
KateViewConfig : : global ( ) - > configStart ( ) ;
KateDocumentConfig : : global ( ) - > configStart ( ) ;
int configFlags , z ;
configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
for ( z = 1 ; z < numFlags ; z + + ) {
configFlags & = ~ flags [ z ] ;
if ( opt [ z ] - > isChecked ( ) ) configFlags | = flags [ z ] ;
}
KateDocumentConfig : : global ( ) - > setConfigFlags ( configFlags ) ;
KateDocumentConfig : : global ( ) - > setWordWrapAt ( e1 - > value ( ) ) ;
KateDocumentConfig : : global ( ) - > setWordWrap ( opt [ 0 ] - > isChecked ( ) ) ;
KateDocumentConfig : : global ( ) - > setTabWidth ( e2 - > value ( ) ) ;
if ( e3 - > value ( ) < = 0 )
KateDocumentConfig : : global ( ) - > setUndoSteps ( 0 ) ;
else
KateDocumentConfig : : global ( ) - > setUndoSteps ( e3 - > value ( ) ) ;
KateViewConfig : : global ( ) - > setTextToSearchMode ( e5 - > currentItem ( ) ) ;
KateRendererConfig : : global ( ) - > setWordWrapMarker ( m_wwmarker - > isChecked ( ) ) ;
KateDocumentConfig : : global ( ) - > configEnd ( ) ;
KateViewConfig : : global ( ) - > configEnd ( ) ;
}
void KateEditConfigTab : : reload ( )
{
}
//END KateEditConfigTab
//BEGIN KateViewDefaultsConfig
KateViewDefaultsConfig : : KateViewDefaultsConfig ( TQWidget * parent )
: KateConfigPage ( parent )
{
TQRadioButton * rb1 ;
TQRadioButton * rb2 ;
TQVBoxLayout * blay = new TQVBoxLayout ( this , 0 , KDialog : : spacingHint ( ) ) ;
TQVGroupBox * gbWordWrap = new TQVGroupBox ( i18n ( " Word Wrap " ) , this ) ;
m_dynwrap = new TQCheckBox ( i18n ( " &Dynamic word wrap " ) , gbWordWrap ) ;
TQHBox * m_dynwrapIndicatorsLay = new TQHBox ( gbWordWrap ) ;
m_dynwrapIndicatorsLabel = new TQLabel ( i18n ( " Dynamic word wrap indicators (if applicable): " ) , m_dynwrapIndicatorsLay ) ;
m_dynwrapIndicatorsCombo = new KComboBox ( m_dynwrapIndicatorsLay ) ;
m_dynwrapIndicatorsCombo - > insertItem ( i18n ( " Off " ) ) ;
m_dynwrapIndicatorsCombo - > insertItem ( i18n ( " Follow Line Numbers " ) ) ;
m_dynwrapIndicatorsCombo - > insertItem ( i18n ( " Always On " ) ) ;
m_dynwrapIndicatorsLabel - > setBuddy ( m_dynwrapIndicatorsCombo ) ;
m_dynwrapAlignLevel = new KIntNumInput ( gbWordWrap ) ;
m_dynwrapAlignLevel - > setLabel ( i18n ( " Vertically align dynamically wrapped lines to indentation depth: " ) ) ;
m_dynwrapAlignLevel - > setRange ( 0 , 80 , 10 ) ;
// xgettext:no-c-format
m_dynwrapAlignLevel - > setSuffix ( i18n ( " % of View Width " ) ) ;
m_dynwrapAlignLevel - > setSpecialValueText ( i18n ( " Disabled " ) ) ;
blay - > addWidget ( gbWordWrap ) ;
TQVGroupBox * gbFold = new TQVGroupBox ( i18n ( " Code Folding " ) , this ) ;
m_folding = new TQCheckBox ( i18n ( " Show &folding markers (if available) " ) , gbFold ) ;
m_collapseTopLevel = new TQCheckBox ( i18n ( " Collapse toplevel folding nodes " ) , gbFold ) ;
m_collapseTopLevel - > hide ( ) ;
blay - > addWidget ( gbFold ) ;
TQVGroupBox * gbBar = new TQVGroupBox ( i18n ( " Borders " ) , this ) ;
m_icons = new TQCheckBox ( i18n ( " Show &icon border " ) , gbBar ) ;
m_line = new TQCheckBox ( i18n ( " Show &line numbers " ) , gbBar ) ;
m_scrollBarMarks = new TQCheckBox ( i18n ( " Show &scrollbar marks " ) , gbBar ) ;
blay - > addWidget ( gbBar ) ;
m_bmSort = new TQButtonGroup ( 1 , Qt : : Horizontal , i18n ( " Sort Bookmarks Menu " ) , this ) ;
m_bmSort - > setRadioButtonExclusive ( true ) ;
m_bmSort - > insert ( rb1 = new TQRadioButton ( i18n ( " By &position " ) , m_bmSort ) , 0 ) ;
m_bmSort - > insert ( rb2 = new TQRadioButton ( i18n ( " By c&reation " ) , m_bmSort ) , 1 ) ;
blay - > addWidget ( m_bmSort , 0 ) ;
m_showIndentLines = new TQCheckBox ( i18n ( " Show indentation lines " ) , this ) ;
m_showIndentLines - > setChecked ( KateRendererConfig : : global ( ) - > showIndentationLines ( ) ) ;
blay - > addWidget ( m_showIndentLines ) ;
blay - > addStretch ( 1000 ) ;
TQWhatsThis : : add ( m_dynwrap , i18n (
" If this option is checked, the text lines will be wrapped at the view "
" border on the screen. " ) ) ;
TQString wtstr = i18n ( " Choose when the Dynamic Word Wrap Indicators should be displayed " ) ;
TQWhatsThis : : add ( m_dynwrapIndicatorsLabel , wtstr ) ;
TQWhatsThis : : add ( m_dynwrapIndicatorsCombo , wtstr ) ;
// xgettext:no-c-format
TQWhatsThis : : add ( m_dynwrapAlignLevel , i18n (
" <p>Enables the start of dynamically wrapped lines to be aligned "
" vertically to the indentation level of the first line. This can help "
" to make code and markup more readable.</p><p>Additionally, this allows "
" you to set a maximum width of the screen, as a percentage, after which "
" dynamically wrapped lines will no longer be vertically aligned. For "
" example, at 50%, lines whose indentation levels are deeper than 50% of "
" the width of the screen will not have vertical tqalignment applied to "
" subsequent wrapped lines.</p> " ) ) ;
TQWhatsThis : : add ( m_line , i18n (
" If this option is checked, every new view will display line numbers "
" on the left hand side. " ) ) ;
TQWhatsThis : : add ( m_icons , i18n (
" If this option is checked, every new view will display an icon border "
" on the left hand side.<br><br>The icon border shows bookmark signs, "
" for instance. " ) ) ;
TQWhatsThis : : add ( m_scrollBarMarks , i18n (
" If this option is checked, every new view will show marks on the "
" vertical scrollbar.<br><br>These marks will, for instance, show "
" bookmarks. " ) ) ;
TQWhatsThis : : add ( m_folding , i18n (
" If this option is checked, every new view will display marks for code "
" folding, if code folding is available. " ) ) ;
TQWhatsThis : : add ( m_bmSort , i18n (
" Choose how the bookmarks should be ordered in the <b>Bookmarks</b> menu. " ) ) ;
TQWhatsThis : : add ( rb1 , i18n (
" The bookmarks will be ordered by the line numbers they are placed at. " ) ) ;
TQWhatsThis : : add ( rb2 , i18n (
" Each new bookmark will be added to the bottom, independently from "
" where it is placed in the document. " ) ) ;
TQWhatsThis : : add ( m_showIndentLines , i18n (
" If this is enabled, the editor will display vertical lines to help "
" identify indent lines. " ) ) ;
reload ( ) ;
//
// after initial reload, connect the stuff for the changed () signal
//
connect ( m_dynwrap , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_dynwrapIndicatorsCombo , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_dynwrapAlignLevel , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_icons , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_scrollBarMarks , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_line , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_folding , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_collapseTopLevel , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( rb1 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( rb2 , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_showIndentLines , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
}
KateViewDefaultsConfig : : ~ KateViewDefaultsConfig ( )
{
}
void KateViewDefaultsConfig : : apply ( )
{
// nothing changed, no need to apply stuff
if ( ! changed ( ) )
return ;
m_changed = false ;
KateViewConfig : : global ( ) - > configStart ( ) ;
KateRendererConfig : : global ( ) - > configStart ( ) ;
KateViewConfig : : global ( ) - > setDynWordWrap ( m_dynwrap - > isChecked ( ) ) ;
KateViewConfig : : global ( ) - > setDynWordWrapIndicators ( m_dynwrapIndicatorsCombo - > currentItem ( ) ) ;
KateViewConfig : : global ( ) - > setDynWordWrapAlignIndent ( m_dynwrapAlignLevel - > value ( ) ) ;
KateViewConfig : : global ( ) - > setLineNumbers ( m_line - > isChecked ( ) ) ;
KateViewConfig : : global ( ) - > setIconBar ( m_icons - > isChecked ( ) ) ;
KateViewConfig : : global ( ) - > setScrollBarMarks ( m_scrollBarMarks - > isChecked ( ) ) ;
KateViewConfig : : global ( ) - > setFoldingBar ( m_folding - > isChecked ( ) ) ;
KateViewConfig : : global ( ) - > setBookmarkSort ( m_bmSort - > id ( m_bmSort - > selected ( ) ) ) ;
KateRendererConfig : : global ( ) - > setShowIndentationLines ( m_showIndentLines - > isChecked ( ) ) ;
KateRendererConfig : : global ( ) - > configEnd ( ) ;
KateViewConfig : : global ( ) - > configEnd ( ) ;
}
void KateViewDefaultsConfig : : reload ( )
{
m_dynwrap - > setChecked ( KateViewConfig : : global ( ) - > dynWordWrap ( ) ) ;
m_dynwrapIndicatorsCombo - > setCurrentItem ( KateViewConfig : : global ( ) - > dynWordWrapIndicators ( ) ) ;
m_dynwrapAlignLevel - > setValue ( KateViewConfig : : global ( ) - > dynWordWrapAlignIndent ( ) ) ;
m_line - > setChecked ( KateViewConfig : : global ( ) - > lineNumbers ( ) ) ;
m_icons - > setChecked ( KateViewConfig : : global ( ) - > iconBar ( ) ) ;
m_scrollBarMarks - > setChecked ( KateViewConfig : : global ( ) - > scrollBarMarks ( ) ) ;
m_folding - > setChecked ( KateViewConfig : : global ( ) - > foldingBar ( ) ) ;
m_bmSort - > setButton ( KateViewConfig : : global ( ) - > bookmarkSort ( ) ) ;
m_showIndentLines - > setChecked ( KateRendererConfig : : global ( ) - > showIndentationLines ( ) ) ;
}
void KateViewDefaultsConfig : : reset ( ) { ; }
void KateViewDefaultsConfig : : defaults ( ) { ; }
//END KateViewDefaultsConfig
//BEGIN KateEditKeyConfiguration
KateEditKeyConfiguration : : KateEditKeyConfiguration ( TQWidget * parent , KateDocument * doc )
: KateConfigPage ( parent )
{
m_doc = doc ;
m_ready = false ;
}
void KateEditKeyConfiguration : : showEvent ( TQShowEvent * )
{
if ( ! m_ready )
{
( new TQVBoxLayout ( this ) ) - > setAutoAdd ( true ) ;
KateView * view = ( KateView * ) m_doc - > views ( ) . at ( 0 ) ;
m_ac = view - > editActionCollection ( ) ;
m_keyChooser = new KKeyChooser ( m_ac , this , false ) ;
connect ( m_keyChooser , TQT_SIGNAL ( keyChange ( ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
m_keyChooser - > show ( ) ;
m_ready = true ;
}
TQWidget : : show ( ) ;
}
void KateEditKeyConfiguration : : apply ( )
{
if ( ! changed ( ) )
return ;
m_changed = false ;
if ( m_ready )
{
m_keyChooser - > commitChanges ( ) ;
m_ac - > writeShortcutSettings ( " Katepart Shortcuts " ) ;
}
}
//END KateEditKeyConfiguration
//BEGIN KateSaveConfigTab
KateSaveConfigTab : : KateSaveConfigTab ( TQWidget * parent )
: KateConfigPage ( parent )
{
int configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
TQVBoxLayout * layout = new TQVBoxLayout ( this , 0 , KDialog : : spacingHint ( ) ) ;
TQVGroupBox * gbEnc = new TQVGroupBox ( i18n ( " File Format " ) , this ) ;
layout - > addWidget ( gbEnc ) ;
TQHBox * e5Layout = new TQHBox ( gbEnc ) ;
TQLabel * e5Label = new TQLabel ( i18n ( " &Encoding: " ) , e5Layout ) ;
m_encoding = new KComboBox ( e5Layout ) ;
e5Label - > setBuddy ( m_encoding ) ;
e5Layout = new TQHBox ( gbEnc ) ;
e5Label = new TQLabel ( i18n ( " End &of line: " ) , e5Layout ) ;
m_eol = new KComboBox ( e5Layout ) ;
e5Label - > setBuddy ( m_eol ) ;
allowEolDetection = new TQCheckBox ( i18n ( " &Automatic end of line detection " ) , gbEnc ) ;
m_eol - > insertItem ( i18n ( " UNIX " ) ) ;
m_eol - > insertItem ( i18n ( " DOS/Windows " ) ) ;
m_eol - > insertItem ( i18n ( " Macintosh " ) ) ;
TQVGroupBox * gbMem = new TQVGroupBox ( i18n ( " Memory Usage " ) , this ) ;
layout - > addWidget ( gbMem ) ;
e5Layout = new TQHBox ( gbMem ) ;
e5Layout - > setSpacing ( 32 ) ;
blockCountLabel = new TQLabel ( i18n ( " Maximum loaded &blocks per file: " ) , e5Layout ) ;
blockCount = new TQSpinBox ( 4 , 512 , 4 , e5Layout ) ;
blockCount - > setValue ( KateBuffer : : maxLoadedBlocks ( ) ) ;
blockCountLabel - > setBuddy ( blockCount ) ;
TQVGroupBox * gbWhiteSpace = new TQVGroupBox ( i18n ( " Automatic Cleanups on Load/Save " ) , this ) ;
layout - > addWidget ( gbWhiteSpace ) ;
removeSpaces = new TQCheckBox ( i18n ( " Re&move trailing spaces " ) , gbWhiteSpace ) ;
removeSpaces - > setChecked ( configFlags & KateDocument : : cfRemoveSpaces ) ;
TQVGroupBox * dirConfigBox = new TQVGroupBox ( i18n ( " Folder Config File " ) , this ) ;
layout - > addWidget ( dirConfigBox ) ;
dirSearchDepth = new KIntNumInput ( KateDocumentConfig : : global ( ) - > searchDirConfigDepth ( ) , dirConfigBox ) ;
dirSearchDepth - > setRange ( - 1 , 64 , 1 , false ) ;
dirSearchDepth - > setSpecialValueText ( i18n ( " Do not use config file " ) ) ;
dirSearchDepth - > setLabel ( i18n ( " Se&arch depth for config file: " ) , AlignVCenter ) ;
TQGroupBox * gb = new TQGroupBox ( 1 , Qt : : Horizontal , i18n ( " Backup on Save " ) , this ) ;
layout - > addWidget ( gb ) ;
cbLocalFiles = new TQCheckBox ( i18n ( " &Local files " ) , gb ) ;
cbRemoteFiles = new TQCheckBox ( i18n ( " &Remote files " ) , gb ) ;
TQHBox * hbBuPrefix = new TQHBox ( gb ) ;
TQLabel * lBuPrefix = new TQLabel ( i18n ( " &Prefix: " ) , hbBuPrefix ) ;
leBuPrefix = new TQLineEdit ( hbBuPrefix ) ;
lBuPrefix - > setBuddy ( leBuPrefix ) ;
TQHBox * hbBuSuffix = new TQHBox ( gb ) ;
TQLabel * lBuSuffix = new TQLabel ( i18n ( " &Suffix: " ) , hbBuSuffix ) ;
leBuSuffix = new TQLineEdit ( hbBuSuffix ) ;
lBuSuffix - > setBuddy ( leBuSuffix ) ;
layout - > addStretch ( ) ;
TQWhatsThis : : add ( removeSpaces , i18n (
" The editor will automatically eliminate extra spaces at the ends of "
" lines of text while loading/saving the file. " ) ) ;
TQWhatsThis : : add ( gb , i18n (
" <p>Backing up on save will cause Kate to copy the disk file to "
" '<prefix><filename><suffix>' before saving changes. "
" <p>The suffix defaults to <strong>~</strong> and prefix is empty by default " ) ) ;
TQWhatsThis : : add ( allowEolDetection , i18n (
" Check this if you want the editor to autodetect the end of line type. "
" The first found end of line type will be used for the whole file. " ) ) ;
TQWhatsThis : : add ( cbLocalFiles , i18n (
" Check this if you want backups of local files when saving " ) ) ;
TQWhatsThis : : add ( cbRemoteFiles , i18n (
" Check this if you want backups of remote files when saving " ) ) ;
TQWhatsThis : : add ( leBuPrefix , i18n (
" Enter the prefix to prepend to the backup file names " ) ) ;
TQWhatsThis : : add ( leBuSuffix , i18n (
" Enter the suffix to add to the backup file names " ) ) ;
TQWhatsThis : : add ( dirSearchDepth , i18n (
" The editor will search the given number of folder levels upwards for .kateconfig file "
" and load the settings line from it. " ) ) ;
TQWhatsThis : : add ( blockCount , i18n (
" The editor will load given number of blocks (of around 2048 lines) of text into memory; "
" if the filesize is bigger than this the other blocks are swapped "
" to disk and loaded transparently as-needed.<br> "
" This can cause little delays while navigating in the document; a larger block count "
" increases the editing speed at the cost of memory. <br>For normal usage, just choose the highest possible "
" block count: limit it only if you have problems with the memory usage. " ) ) ;
reload ( ) ;
//
// after initial reload, connect the stuff for the changed () signal
//
connect ( m_encoding , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( m_eol , TQT_SIGNAL ( activated ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( allowEolDetection , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( blockCount , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( removeSpaces , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( cbLocalFiles , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( cbRemoteFiles , TQT_SIGNAL ( toggled ( bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( dirSearchDepth , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( leBuPrefix , TQT_SIGNAL ( textChanged ( const TQString & ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( leBuSuffix , TQT_SIGNAL ( textChanged ( const TQString & ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
}
void KateSaveConfigTab : : apply ( )
{
// nothing changed, no need to apply stuff
if ( ! changed ( ) )
return ;
m_changed = false ;
KateBuffer : : setMaxLoadedBlocks ( blockCount - > value ( ) ) ;
KateDocumentConfig : : global ( ) - > configStart ( ) ;
if ( leBuSuffix - > text ( ) . isEmpty ( ) & & leBuPrefix - > text ( ) . isEmpty ( ) ) {
KMessageBox : : information (
this ,
i18n ( " You did not provide a backup suffix or prefix. Using default suffix: '~' " ) ,
i18n ( " No Backup Suffix or Prefix " )
) ;
leBuSuffix - > setText ( " ~ " ) ;
}
uint f ( 0 ) ;
if ( cbLocalFiles - > isChecked ( ) )
f | = KateDocumentConfig : : LocalFiles ;
if ( cbRemoteFiles - > isChecked ( ) )
f | = KateDocumentConfig : : RemoteFiles ;
KateDocumentConfig : : global ( ) - > setBackupFlags ( f ) ;
KateDocumentConfig : : global ( ) - > setBackupPrefix ( leBuPrefix - > text ( ) ) ;
KateDocumentConfig : : global ( ) - > setBackupSuffix ( leBuSuffix - > text ( ) ) ;
KateDocumentConfig : : global ( ) - > setSearchDirConfigDepth ( dirSearchDepth - > value ( ) ) ;
int configFlags = KateDocumentConfig : : global ( ) - > configFlags ( ) ;
configFlags & = ~ KateDocument : : cfRemoveSpaces ; // clear flag
if ( removeSpaces - > isChecked ( ) ) configFlags | = KateDocument : : cfRemoveSpaces ; // set flag if checked
KateDocumentConfig : : global ( ) - > setConfigFlags ( configFlags ) ;
KateDocumentConfig : : global ( ) - > setEncoding ( ( m_encoding - > currentItem ( ) = = 0 ) ? " " : KGlobal : : charsets ( ) - > encodingForName ( m_encoding - > currentText ( ) ) ) ;
KateDocumentConfig : : global ( ) - > setEol ( m_eol - > currentItem ( ) ) ;
KateDocumentConfig : : global ( ) - > setAllowEolDetection ( allowEolDetection - > isChecked ( ) ) ;
KateDocumentConfig : : global ( ) - > configEnd ( ) ;
}
void KateSaveConfigTab : : reload ( )
{
// encoding
m_encoding - > clear ( ) ;
m_encoding - > insertItem ( i18n ( " KDE Default " ) ) ;
m_encoding - > setCurrentItem ( 0 ) ;
TQStringList encodings ( KGlobal : : charsets ( ) - > descriptiveEncodingNames ( ) ) ;
int insert = 1 ;
for ( uint i = 0 ; i < encodings . count ( ) ; i + + )
{
bool found = false ;
TQTextCodec * codecForEnc = KGlobal : : charsets ( ) - > codecForName ( KGlobal : : charsets ( ) - > encodingForName ( encodings [ i ] ) , found ) ;
if ( found )
{
m_encoding - > insertItem ( encodings [ i ] ) ;
if ( codecForEnc - > name ( ) = = KateDocumentConfig : : global ( ) - > encoding ( ) )
{
m_encoding - > setCurrentItem ( insert ) ;
}
insert + + ;
}
}
// eol
m_eol - > setCurrentItem ( KateDocumentConfig : : global ( ) - > eol ( ) ) ;
allowEolDetection - > setChecked ( KateDocumentConfig : : global ( ) - > allowEolDetection ( ) ) ;
dirSearchDepth - > setValue ( KateDocumentConfig : : global ( ) - > searchDirConfigDepth ( ) ) ;
// other stuff
uint f ( KateDocumentConfig : : global ( ) - > backupFlags ( ) ) ;
cbLocalFiles - > setChecked ( f & KateDocumentConfig : : LocalFiles ) ;
cbRemoteFiles - > setChecked ( f & KateDocumentConfig : : RemoteFiles ) ;
leBuPrefix - > setText ( KateDocumentConfig : : global ( ) - > backupPrefix ( ) ) ;
leBuSuffix - > setText ( KateDocumentConfig : : global ( ) - > backupSuffix ( ) ) ;
}
void KateSaveConfigTab : : reset ( )
{
}
void KateSaveConfigTab : : defaults ( )
{
cbLocalFiles - > setChecked ( true ) ;
cbRemoteFiles - > setChecked ( false ) ;
leBuPrefix - > setText ( " " ) ;
leBuSuffix - > setText ( " ~ " ) ;
}
//END KateSaveConfigTab
//BEGIN PluginListItem
class KatePartPluginListItem : public TQCheckListItem
{
public :
KatePartPluginListItem ( bool checked , uint i , const TQString & name , TQListView * parent ) ;
uint pluginIndex ( ) const { return index ; }
protected :
void stateChange ( bool ) ;
private :
uint index ;
bool silentStateChange ;
} ;
KatePartPluginListItem : : KatePartPluginListItem ( bool checked , uint i , const TQString & name , TQListView * parent )
: TQCheckListItem ( parent , name , CheckBox )
, index ( i )
, silentStateChange ( false )
{
silentStateChange = true ;
setOn ( checked ) ;
silentStateChange = false ;
}
void KatePartPluginListItem : : stateChange ( bool b )
{
if ( ! silentStateChange )
static_cast < KatePartPluginListView * > ( listView ( ) ) - > stateChanged ( this , b ) ;
}
//END
//BEGIN PluginListView
KatePartPluginListView : : KatePartPluginListView ( TQWidget * parent , const char * name )
: KListView ( parent , name )
{
}
void KatePartPluginListView : : stateChanged ( KatePartPluginListItem * item , bool b )
{
emit stateChange ( item , b ) ;
}
//END
//BEGIN KatePartPluginConfigPage
KatePartPluginConfigPage : : KatePartPluginConfigPage ( TQWidget * parent ) : KateConfigPage ( parent , " " )
{
// sizemanagment
TQGridLayout * grid = new TQGridLayout ( this , 1 , 1 ) ;
grid - > setSpacing ( KDialogBase : : spacingHint ( ) ) ;
listView = new KatePartPluginListView ( this ) ;
listView - > addColumn ( i18n ( " Name " ) ) ;
listView - > addColumn ( i18n ( " Comment " ) ) ;
grid - > addWidget ( listView , 0 , 0 ) ;
for ( uint i = 0 ; i < KateFactory : : self ( ) - > plugins ( ) . count ( ) ; i + + )
{
KatePartPluginListItem * item = new KatePartPluginListItem ( KateDocumentConfig : : global ( ) - > plugin ( i ) , i , ( KateFactory : : self ( ) - > plugins ( ) ) [ i ] - > name ( ) , listView ) ;
item - > setText ( 0 , ( KateFactory : : self ( ) - > plugins ( ) ) [ i ] - > name ( ) ) ;
item - > setText ( 1 , ( KateFactory : : self ( ) - > plugins ( ) ) [ i ] - > comment ( ) ) ;
m_items . append ( item ) ;
}
// configure button
btnConfigure = new TQPushButton ( i18n ( " Configure... " ) , this ) ;
btnConfigure - > setEnabled ( false ) ;
grid - > addWidget ( btnConfigure , 1 , 0 , Qt : : AlignRight ) ;
connect ( btnConfigure , TQT_SIGNAL ( clicked ( ) ) , this , TQT_SLOT ( slotConfigure ( ) ) ) ;
connect ( listView , TQT_SIGNAL ( selectionChanged ( TQListViewItem * ) ) , this , TQT_SLOT ( slotCurrentChanged ( TQListViewItem * ) ) ) ;
connect ( listView , TQT_SIGNAL ( stateChange ( KatePartPluginListItem * , bool ) ) ,
this , TQT_SLOT ( slotStateChanged ( KatePartPluginListItem * , bool ) ) ) ;
connect ( listView , TQT_SIGNAL ( stateChange ( KatePartPluginListItem * , bool ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
}
KatePartPluginConfigPage : : ~ KatePartPluginConfigPage ( )
{
}
void KatePartPluginConfigPage : : apply ( )
{
// nothing changed, no need to apply stuff
if ( ! changed ( ) )
return ;
m_changed = false ;
KateDocumentConfig : : global ( ) - > configStart ( ) ;
for ( uint i = 0 ; i < m_items . count ( ) ; i + + )
KateDocumentConfig : : global ( ) - > setPlugin ( m_items . at ( i ) - > pluginIndex ( ) , m_items . at ( i ) - > isOn ( ) ) ;
KateDocumentConfig : : global ( ) - > configEnd ( ) ;
}
void KatePartPluginConfigPage : : slotStateChanged ( KatePartPluginListItem * item , bool b )
{
if ( b )
slotCurrentChanged ( ( TQListViewItem * ) item ) ;
}
void KatePartPluginConfigPage : : slotCurrentChanged ( TQListViewItem * i )
{
KatePartPluginListItem * item = static_cast < KatePartPluginListItem * > ( i ) ;
if ( ! item ) return ;
bool b = false ;
if ( item - > isOn ( ) )
{
// load this plugin, and see if it has config pages
KTextEditor : : Plugin * plugin = KTextEditor : : createPlugin ( TQFile : : encodeName ( ( KateFactory : : self ( ) - > plugins ( ) ) [ item - > pluginIndex ( ) ] - > library ( ) ) ) ;
if ( plugin ) {
KTextEditor : : ConfigInterfaceExtension * cie = KTextEditor : : configInterfaceExtension ( plugin ) ;
b = ( cie & & cie - > configPages ( ) ) ;
}
}
btnConfigure - > setEnabled ( b ) ;
}
void KatePartPluginConfigPage : : slotConfigure ( )
{
KatePartPluginListItem * item = static_cast < KatePartPluginListItem * > ( listView - > currentItem ( ) ) ;
KTextEditor : : Plugin * plugin =
KTextEditor : : createPlugin ( TQFile : : encodeName ( ( KateFactory : : self ( ) - > plugins ( ) ) [ item - > pluginIndex ( ) ] - > library ( ) ) ) ;
if ( ! plugin ) return ;
KTextEditor : : ConfigInterfaceExtension * cife =
KTextEditor : : configInterfaceExtension ( plugin ) ;
if ( ! cife )
return ;
if ( ! cife - > configPages ( ) )
return ;
// If we have only one page, we use a simple dialog, else an icon list type
KDialogBase : : DialogType dt =
cife - > configPages ( ) > 1 ?
KDialogBase : : IconList : // still untested
KDialogBase : : Plain ;
TQString name = ( KateFactory : : self ( ) - > plugins ( ) ) [ item - > pluginIndex ( ) ] - > name ( ) ;
KDialogBase * kd = new KDialogBase ( dt ,
i18n ( " Configure %1 " ) . arg ( name ) ,
KDialogBase : : Ok | KDialogBase : : Cancel | KDialogBase : : Help ,
KDialogBase : : Ok ,
this ) ;
TQPtrList < KTextEditor : : ConfigPage > editorPages ;
for ( uint i = 0 ; i < cife - > configPages ( ) ; i + + )
{
TQWidget * page ;
if ( dt = = KDialogBase : : IconList )
{
TQStringList path ;
path . clear ( ) ;
path < < cife - > configPageName ( i ) ;
page = kd - > addVBoxPage ( path , cife - > configPageFullName ( i ) ,
cife - > configPagePixmap ( i , KIcon : : SizeMedium ) ) ;
}
else
{
page = kd - > plainPage ( ) ;
TQVBoxLayout * _l = new TQVBoxLayout ( page ) ;
_l - > setAutoAdd ( true ) ;
}
editorPages . append ( cife - > configPage ( i , page ) ) ;
}
if ( kd - > exec ( ) )
{
for ( uint i = 0 ; i < editorPages . count ( ) ; i + + )
{
editorPages . at ( i ) - > apply ( ) ;
}
}
delete kd ;
}
//END KatePartPluginConfigPage
//BEGIN KateHlConfigPage
KateHlConfigPage : : KateHlConfigPage ( TQWidget * parent , KateDocument * doc )
: KateConfigPage ( parent , " " )
, hlData ( 0 )
, m_doc ( doc )
{
TQVBoxLayout * layout = new TQVBoxLayout ( this , 0 , KDialog : : spacingHint ( ) ) ;
// hl chooser
TQHBox * hbHl = new TQHBox ( this ) ;
layout - > add ( hbHl ) ;
hbHl - > setSpacing ( KDialog : : spacingHint ( ) ) ;
TQLabel * lHl = new TQLabel ( i18n ( " H&ighlight: " ) , hbHl ) ;
hlCombo = new TQComboBox ( false , hbHl ) ;
lHl - > setBuddy ( hlCombo ) ;
connect ( hlCombo , TQT_SIGNAL ( activated ( int ) ) ,
this , TQT_SLOT ( hlChanged ( int ) ) ) ;
for ( int i = 0 ; i < KateHlManager : : self ( ) - > highlights ( ) ; i + + ) {
if ( KateHlManager : : self ( ) - > hlSection ( i ) . length ( ) > 0 )
hlCombo - > insertItem ( KateHlManager : : self ( ) - > hlSection ( i ) + TQString ( " / " ) + KateHlManager : : self ( ) - > hlNameTranslated ( i ) ) ;
else
hlCombo - > insertItem ( KateHlManager : : self ( ) - > hlNameTranslated ( i ) ) ;
}
TQGroupBox * gbInfo = new TQGroupBox ( 1 , Qt : : Horizontal , i18n ( " Information " ) , this ) ;
layout - > add ( gbInfo ) ;
// author
TQHBox * hb1 = new TQHBox ( gbInfo ) ;
new TQLabel ( i18n ( " Author: " ) , hb1 ) ;
author = new TQLabel ( hb1 ) ;
author - > setTextFormat ( TQt : : RichText ) ;
// license
TQHBox * hb2 = new TQHBox ( gbInfo ) ;
new TQLabel ( i18n ( " License: " ) , hb2 ) ;
license = new TQLabel ( hb2 ) ;
TQGroupBox * gbProps = new TQGroupBox ( 1 , Qt : : Horizontal , i18n ( " Properties " ) , this ) ;
layout - > add ( gbProps ) ;
// file & mime types
TQHBox * hbFE = new TQHBox ( gbProps ) ;
TQLabel * lFileExts = new TQLabel ( i18n ( " File e&xtensions: " ) , hbFE ) ;
wildcards = new TQLineEdit ( hbFE ) ;
lFileExts - > setBuddy ( wildcards ) ;
TQHBox * hbMT = new TQHBox ( gbProps ) ;
TQLabel * lMimeTypes = new TQLabel ( i18n ( " MIME &types: " ) , hbMT ) ;
mimetypes = new TQLineEdit ( hbMT ) ;
lMimeTypes - > setBuddy ( mimetypes ) ;
TQHBox * hbMT2 = new TQHBox ( gbProps ) ;
TQLabel * lprio = new TQLabel ( i18n ( " Prio&rity: " ) , hbMT2 ) ;
priority = new KIntNumInput ( hbMT2 ) ;
lprio - > setBuddy ( priority ) ;
TQToolButton * btnMTW = new TQToolButton ( hbMT ) ;
btnMTW - > setIconSet ( TQIconSet ( SmallIcon ( " wizard " ) ) ) ;
connect ( btnMTW , TQT_SIGNAL ( clicked ( ) ) , this , TQT_SLOT ( showMTDlg ( ) ) ) ;
// download/new buttons
TQHBox * hbBtns = new TQHBox ( this ) ;
layout - > add ( hbBtns ) ;
( ( TQBoxLayout * ) hbBtns - > layout ( ) ) - > addStretch ( 1 ) ; // hmm.
hbBtns - > setSpacing ( KDialog : : spacingHint ( ) ) ;
TQPushButton * btnDl = new TQPushButton ( i18n ( " Do&wnload... " ) , hbBtns ) ;
connect ( btnDl , TQT_SIGNAL ( clicked ( ) ) , this , TQT_SLOT ( hlDownload ( ) ) ) ;
int currentHl = m_doc ? m_doc - > hlMode ( ) : 0 ;
hlCombo - > setCurrentItem ( currentHl ) ;
hlChanged ( currentHl ) ;
TQWhatsThis : : add ( hlCombo , i18n (
" Choose a <em>Syntax Highlight mode</em> from this list to view its "
" properties below. " ) ) ;
TQWhatsThis : : add ( wildcards , i18n (
" The list of file extensions used to determine which files to highlight "
" using the current syntax highlight mode. " ) ) ;
TQWhatsThis : : add ( mimetypes , i18n (
" The list of Mime Types used to determine which files to highlight "
" using the current highlight mode.<p>Click the wizard button on the "
" left of the entry field to display the MimeType selection dialog. " ) ) ;
TQWhatsThis : : add ( btnMTW , i18n (
" Display a dialog with a list of all available mime types to choose from. "
" <p>The <strong>File Extensions</strong> entry will automatically be "
" edited as well. " ) ) ;
TQWhatsThis : : add ( btnDl , i18n (
" Click this button to download new or updated syntax highlight "
" descriptions from the Kate website. " ) ) ;
layout - > addStretch ( ) ;
connect ( wildcards , TQT_SIGNAL ( textChanged ( const TQString & ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( mimetypes , TQT_SIGNAL ( textChanged ( const TQString & ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
connect ( priority , TQT_SIGNAL ( valueChanged ( int ) ) , this , TQT_SLOT ( slotChanged ( ) ) ) ;
}
KateHlConfigPage : : ~ KateHlConfigPage ( )
{
}
void KateHlConfigPage : : apply ( )
{
// nothing changed, no need to apply stuff
if ( ! changed ( ) )
return ;
m_changed = false ;
writeback ( ) ;
for ( TQIntDictIterator < KateHlData > it ( hlDataDict ) ; it . current ( ) ; + + it )
KateHlManager : : self ( ) - > getHl ( it . currentKey ( ) ) - > setData ( it . current ( ) ) ;
KateHlManager : : self ( ) - > getKConfig ( ) - > sync ( ) ;
}
void KateHlConfigPage : : reload ( )
{
}
void KateHlConfigPage : : hlChanged ( int z )
{
writeback ( ) ;
KateHighlighting * hl = KateHlManager : : self ( ) - > getHl ( z ) ;
if ( ! hl )
{
hlData = 0 ;
return ;
}
if ( ! hlDataDict . tqfind ( z ) )
hlDataDict . insert ( z , hl - > getData ( ) ) ;
hlData = hlDataDict . tqfind ( z ) ;
wildcards - > setText ( hlData - > wildcards ) ;
mimetypes - > setText ( hlData - > mimetypes ) ;
priority - > setValue ( hlData - > priority ) ;
// split author string if needed into multiple lines !
TQStringList l = TQStringList : : split ( TQRegExp ( " [,;] " ) , hl - > author ( ) ) ;
author - > setText ( l . join ( " <br> " ) ) ;
license - > setText ( hl - > license ( ) ) ;
}
void KateHlConfigPage : : writeback ( )
{
if ( hlData )
{
hlData - > wildcards = wildcards - > text ( ) ;
hlData - > mimetypes = mimetypes - > text ( ) ;
hlData - > priority = priority - > value ( ) ;
}
}
void KateHlConfigPage : : hlDownload ( )
{
KateHlDownloadDialog diag ( this , " hlDownload " , true ) ;
diag . exec ( ) ;
}
void KateHlConfigPage : : showMTDlg ( )
{
TQString text = i18n ( " Select the MimeTypes you want highlighted using the '%1' syntax highlight rules. \n Please note that this will automatically edit the associated file extensions as well. " ) . arg ( hlCombo - > currentText ( ) ) ;
TQStringList list = TQStringList : : split ( TQRegExp ( " \\ s*; \\ s* " ) , mimetypes - > text ( ) ) ;
KMimeTypeChooserDialog d ( i18n ( " Select Mime Types " ) , text , list , " text " , this ) ;
if ( d . exec ( ) = = KDialogBase : : Accepted ) {
// do some checking, warn user if mime types or patterns are removed.
// if the lists are empty, and the fields not, warn.
wildcards - > setText ( d . chooser ( ) - > patterns ( ) . join ( " ; " ) ) ;
mimetypes - > setText ( d . chooser ( ) - > mimeTypes ( ) . join ( " ; " ) ) ;
}
}
//END KateHlConfigPage
//BEGIN KateHlDownloadDialog
KateHlDownloadDialog : : KateHlDownloadDialog ( TQWidget * parent , const char * name , bool modal )
: KDialogBase ( KDialogBase : : Swallow , i18n ( " Highlight Download " ) , User1 | Close , User1 , parent , name , modal , true , i18n ( " &Install " ) )
{
TQVBox * vbox = new TQVBox ( this ) ;
setMainWidget ( vbox ) ;
vbox - > setSpacing ( spacingHint ( ) ) ;
new TQLabel ( i18n ( " Select the syntax highlighting files you want to update: " ) , vbox ) ;
list = new TQListView ( vbox ) ;
list - > addColumn ( " " ) ;
list - > addColumn ( i18n ( " Name " ) ) ;
list - > addColumn ( i18n ( " Installed " ) ) ;
list - > addColumn ( i18n ( " Latest " ) ) ;
list - > setSelectionMode ( TQListView : : Multi ) ;
list - > setAllColumnsShowFocus ( true ) ;
new TQLabel ( i18n ( " <b>Note:</b> New versions are selected automatically. " ) , vbox ) ;
actionButton ( User1 ) - > setIconSet ( SmallIconSet ( " ok " ) ) ;
transferJob = KIO : : get (
KURL ( TQString ( HLDOWNLOADPATH )
+ TQString ( " update- " )
+ TQString ( KATEPART_VERSION )
+ TQString ( " .xml " ) ) , true , true ) ;
connect ( transferJob , TQT_SIGNAL ( data ( KIO : : Job * , const TQByteArray & ) ) ,
this , TQT_SLOT ( listDataReceived ( KIO : : Job * , const TQByteArray & ) ) ) ;
// void data( KIO::Job *, const TQByteArray &data);
resize ( 450 , 400 ) ;
}
KateHlDownloadDialog : : ~ KateHlDownloadDialog ( ) { }
void KateHlDownloadDialog : : listDataReceived ( KIO : : Job * , const TQByteArray & data )
{
if ( ! transferJob | | transferJob - > isErrorPage ( ) )
{
actionButton ( User1 ) - > setEnabled ( false ) ;
return ;
}
listData + = TQString ( data ) ;
kdDebug ( 13000 ) < < TQString ( " CurrentListData: " ) < < listData < < endl < < endl ;
kdDebug ( 13000 ) < < TQString ( TQString ( " Data length: %1 " ) . arg ( data . size ( ) ) ) < < endl ;
kdDebug ( 13000 ) < < TQString ( TQString ( " listData length: %1 " ) . arg ( listData . length ( ) ) ) < < endl ;
if ( data . size ( ) = = 0 )
{
if ( listData . length ( ) > 0 )
{
TQString installedVersion ;
KateHlManager * hlm = KateHlManager : : self ( ) ;
TQDomDocument doc ;
doc . setContent ( listData ) ;
TQDomElement DocElem = doc . documentElement ( ) ;
TQDomNode n = DocElem . firstChild ( ) ;
KateHighlighting * hl = 0 ;
if ( n . isNull ( ) ) kdDebug ( 13000 ) < < " There is no usable childnode " < < endl ;
while ( ! n . isNull ( ) )
{
installedVersion = " -- " ;
TQDomElement e = n . toElement ( ) ;
if ( ! e . isNull ( ) )
kdDebug ( 13000 ) < < TQString ( " NAME: " ) < < e . tagName ( ) < < TQString ( " - " ) < < e . attribute ( " name " ) < < endl ;
n = n . nextSibling ( ) ;
TQString Name = e . attribute ( " name " ) ;
for ( int i = 0 ; i < hlm - > highlights ( ) ; i + + )
{
hl = hlm - > getHl ( i ) ;
if ( hl & & hl - > name ( ) = = Name )
{
installedVersion = " " + hl - > version ( ) ;
break ;
}
else hl = 0 ;
}
// autoselect entry if new or updated.
TQListViewItem * entry = new TQListViewItem (
list , " " , e . attribute ( " name " ) , installedVersion ,
e . attribute ( " version " ) , e . attribute ( " url " ) ) ;
if ( ! hl | | hl - > version ( ) < e . attribute ( " version " ) )
{
entry - > setSelected ( true ) ;
entry - > setPixmap ( 0 , SmallIcon ( ( " knewstuff " ) ) ) ;
}
}
}
}
}
void KateHlDownloadDialog : : slotUser1 ( )
{
TQString destdir = KGlobal : : dirs ( ) - > saveLocation ( " data " , " katepart/syntax/ " ) ;
for ( TQListViewItem * it = list - > firstChild ( ) ; it ; it = it - > nextSibling ( ) )
{
if ( list - > isSelected ( it ) )
{
KURL src ( it - > text ( 4 ) ) ;
TQString filename = src . fileName ( false ) ;
TQString dest = destdir + filename ;
KIO : : NetAccess : : download ( src , dest , this ) ;
}
}
// update Config !!
KateSyntaxDocument doc ( true ) ;
}
//END KateHlDownloadDialog
//BEGIN KateGotoLineDialog
KateGotoLineDialog : : KateGotoLineDialog ( TQWidget * parent , int line , int max )
: KDialogBase ( parent , 0L , true , i18n ( " Go to Line " ) , Ok | Cancel , Ok ) {
TQWidget * page = new TQWidget ( this ) ;
setMainWidget ( page ) ;
TQVBoxLayout * topLayout = new TQVBoxLayout ( page , 0 , spacingHint ( ) ) ;
e1 = new KIntNumInput ( line , page ) ;
e1 - > setRange ( 1 , max ) ;
e1 - > setEditFocus ( true ) ;
TQLabel * label = new TQLabel ( e1 , i18n ( " &Go to line: " ) , page ) ;
topLayout - > addWidget ( label ) ;
topLayout - > addWidget ( e1 ) ;
topLayout - > addSpacing ( spacingHint ( ) ) ; // A little bit extra space
topLayout - > addStretch ( 10 ) ;
e1 - > setFocus ( ) ;
}
int KateGotoLineDialog : : getLine ( ) {
return e1 - > value ( ) ;
}
//END KateGotoLineDialog
//BEGIN KateModOnHdPrompt
KateModOnHdPrompt : : KateModOnHdPrompt ( KateDocument * doc ,
int modtype ,
const TQString & reason ,
TQWidget * parent )
: KDialogBase ( parent , " " , true , " " , Ok | Apply | Cancel | User1 ) ,
m_doc ( doc ) ,
m_modtype ( modtype ) ,
m_tmpfile ( 0 )
{
TQString title , btnOK , whatisok ;
if ( modtype = = 3 ) // deleted
{
title = i18n ( " File Was Deleted on Disk " ) ;
btnOK = i18n ( " &Save File As... " ) ;
whatisok = i18n ( " Lets you select a location and save the file again. " ) ;
} else {
title = i18n ( " File Changed on Disk " ) ;
btnOK = i18n ( " &Reload File " ) ;
whatisok = i18n ( " Reload the file from disk. If you have unsaved changes, "
" they will be lost. " ) ;
}
setButtonText ( Ok , btnOK ) ;
setButtonText ( Apply , i18n ( " &Ignore " ) ) ;
setButtonWhatsThis ( Ok , whatisok ) ;
setButtonWhatsThis ( Apply , i18n ( " Ignore the changes. You will not be prompted again. " ) ) ;
setButtonWhatsThis ( Cancel , i18n ( " Do nothing. Next time you focus the file, "
" or try to save it or close it, you will be prompted again. " ) ) ;
enableButtonSeparator ( true ) ;
setCaption ( title ) ;
TQFrame * w = makeMainWidget ( ) ;
TQVBoxLayout * lo = new TQVBoxLayout ( w ) ;
TQHBoxLayout * lo1 = new TQHBoxLayout ( lo ) ;
TQLabel * icon = new TQLabel ( w ) ;
icon - > setPixmap ( DesktopIcon ( " messagebox_warning " ) ) ;
lo1 - > addWidget ( icon ) ;
lo1 - > addWidget ( new TQLabel ( reason + " \n \n " + i18n ( " What do you want to do? " ) , w ) ) ;
// If the file isn't deleted, present a diff button, and a overwrite action.
if ( modtype ! = 3 )
{
TQHBoxLayout * lo2 = new TQHBoxLayout ( lo ) ;
TQPushButton * btnDiff = new TQPushButton ( i18n ( " &View Difference " ) , w ) ;
lo2 - > addStretch ( 1 ) ;
lo2 - > addWidget ( btnDiff ) ;
connect ( btnDiff , TQT_SIGNAL ( clicked ( ) ) , this , TQT_SLOT ( slotDiff ( ) ) ) ;
TQWhatsThis : : add ( btnDiff , i18n (
" Calculates the difference between the editor contents and the disk "
" file using diff(1) and opens the diff file with the default application "
" for that. " ) ) ;
setButtonText ( User1 , i18n ( " Overwrite " ) ) ;
setButtonWhatsThis ( User1 , i18n ( " Overwrite the disk file with the editor content. " ) ) ;
}
else
showButton ( User1 , false ) ;
}
KateModOnHdPrompt : : ~ KateModOnHdPrompt ( )
{
}
void KateModOnHdPrompt : : slotDiff ( )
{
// Start a KProcess that creates a diff
KProcIO * p = new KProcIO ( ) ;
p - > setComm ( KProcess : : All ) ;
* p < < " diff " < < " -u " < < " - " < < m_doc - > url ( ) . path ( ) ;
connect ( p , TQT_SIGNAL ( processExited ( KProcess * ) ) , this , TQT_SLOT ( slotPDone ( KProcess * ) ) ) ;
connect ( p , TQT_SIGNAL ( readReady ( KProcIO * ) ) , this , TQT_SLOT ( slotPRead ( KProcIO * ) ) ) ;
setCursor ( WaitCursor ) ;
p - > start ( KProcess : : NotifyOnExit , true ) ;
uint lastln = m_doc - > numLines ( ) ;
for ( uint l = 0 ; l < lastln ; l + + )
p - > writeStdin ( m_doc - > textLine ( l ) ) ;
p - > closeWhenDone ( ) ;
}
void KateModOnHdPrompt : : slotPRead ( KProcIO * p )
{
// create a file for the diff if we haven't one allready
if ( ! m_tmpfile )
m_tmpfile = new KTempFile ( ) ;
// put all the data we have in it
TQString stmp ;
bool dataRead = false ;
while ( p - > readln ( stmp , false ) > - 1 )
{
* m_tmpfile - > textStream ( ) < < stmp < < endl ;
dataRead = true ;
}
// dominik: only ackRead(), when we *really* read data, otherwise, this slot
// is called initity times, which leads to a crash
if ( dataRead )
p - > ackRead ( ) ;
}
void KateModOnHdPrompt : : slotPDone ( KProcess * p )
{
setCursor ( ArrowCursor ) ;
if ( ! m_tmpfile )
{
// dominik: there were only whitespace changes, so that the diff returned by
// diff(1) has 0 bytes. So slotPRead() is never called, as there is
// no data, so that m_tmpfile was never created and thus is NULL.
// NOTE: would be nice, if we could produce a fake-diff, so that kompare
// tells us "The files are identical". Right now, we get an ugly
// "Could not parse diff output".
m_tmpfile = new KTempFile ( ) ;
}
m_tmpfile - > close ( ) ;
if ( ! p - > normalExit ( ) /*|| p->exitStatus()*/ )
{
KMessageBox : : sorry ( this ,
i18n ( " The diff command failed. Please make sure that "
" diff(1) is installed and in your PATH. " ) ,
i18n ( " Error Creating Diff " ) ) ;
delete m_tmpfile ;
m_tmpfile = 0 ;
return ;
}
KRun : : runURL ( m_tmpfile - > name ( ) , " text/x-diff " , true ) ;
delete m_tmpfile ;
m_tmpfile = 0 ;
}
void KateModOnHdPrompt : : slotApply ( )
{
if ( KMessageBox : : warningContinueCancel (
this ,
i18n ( " Ignoring means that you will not be warned again (unless "
" the disk file changes once more): if you save the document, you "
" will overwrite the file on disk; if you do not save then the disk file "
" (if present) is what you have. " ) ,
i18n ( " You Are on Your Own " ) ,
KStdGuiItem : : cont ( ) ,
" kate_ignore_modonhd " ) ! = KMessageBox : : Continue )
return ;
done ( Ignore ) ;
}
void KateModOnHdPrompt : : slotOk ( )
{
done ( m_modtype = = 3 ? Save : Reload ) ;
}
void KateModOnHdPrompt : : slotUser1 ( )
{
done ( Overwrite ) ;
}
//END KateModOnHdPrompt
// kate: space-indent on; indent-width 2; replace-tabs on;