00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include <qvbox.h>
00023
#include <qfile.h>
00024
#include <qtextstream.h>
00025
#include <qregexp.h>
00026
#include <qlayout.h>
00027
#include <private/qrichtext_p.h>
00028
00029
#include <kinstance.h>
00030
#include <kaction.h>
00031
#include <kstdaction.h>
00032
#include <kfiledialog.h>
00033
#include <kconfig.h>
00034
#include <kdebug.h>
00035
#include <kdialogbase.h>
00036
#include <klocale.h>
00037
#include <kxmlguifactory.h>
00038
00039
#include "qeditor_part.h"
00040
#include "qeditor_view.h"
00041
#include "qeditor_settings.h"
00042
#include "qeditor_browserextension.h"
00043
#include "qeditor.h"
00044
#include "paragdata.h"
00045
#include "qsourcecolorizer.h"
00046
#include "qeditor_indenter.h"
00047
#include "highlightingconfigpage.h"
00048
#include "generalconfigpage.h"
00049
#include "markerwidget.h"
00050
00051
#include "qeditor_part.moc"
00052
00053
00054 struct HLMode{
00055 QString name;
00056 QString section;
00057 QStringList extensions;
00058 };
00059
00060
00061 class CursorImpl:
public KTextEditor::Cursor
00062 {
00063
public:
00064 CursorImpl( QTextDocument* doc ):
m_doc( doc ) {
00065
m_cursor =
new QTextCursor( doc );
00066 }
00067
00068 virtual ~CursorImpl(){
00069
delete(
m_cursor );
00070 }
00071
00072 virtual void position (
unsigned int *line,
unsigned int *col )
const{
00073 *line =
m_cursor->paragraph()->paragId();
00074 *col =
m_cursor->index();
00075 }
00076
00077 virtual bool setPosition (
unsigned int line,
unsigned int col ){
00078
m_cursor->setParagraph(
m_cursor->document()->paragAt( line ) );
00079
m_cursor->setIndex( col );
00080
return TRUE;
00081 }
00082
00083 virtual bool insertText (
const QString& text ){
00084
m_cursor->paragraph()->insert(
m_cursor->index(),
text );
00085
return TRUE;
00086 }
00087
00088 virtual bool removeText (
unsigned int numberOfCharacters ){
00089
m_cursor->paragraph()->remove(
m_cursor->index(), numberOfCharacters );
00090
return TRUE;
00091 }
00092
00093 virtual QChar currentChar ()
const{
00094
return m_cursor->paragraph()->at(
m_cursor->index() )->c;
00095 }
00096
00097
private:
00098 QTextDocument*
m_doc;
00099 QTextCursor*
m_cursor;
00100 };
00101
00102
using namespace std;
00103
00104 QEditorPart::QEditorPart(
QWidget *parentWidget,
const char *widgetName,
00105
QObject *parent,
const char *name,
00106
const QStringList & )
00107 : KTextEditor::Document( parent, name == 0 ? "
QEditorPart" : name ), m_currentView( 0 )
00108 {
00109
kdDebug(9032) <<
"QEditorPart::QEditorPart()" <<
endl;
00110
00111 setInstance( QEditorPartFactory::instance() );
00112
00113 QEditorPartFactory::registerDocument(
this );
00114
00115
m_views.setAutoDelete( FALSE );
00116
m_cursors.setAutoDelete( TRUE );
00117
m_marks.setAutoDelete( TRUE );
00118
00119 (
void)
createView( parentWidget, widgetName );
00120
m_extension =
new QEditorBrowserExtension(
this );
00121
00122
setupHighlighting();
00123
00124
00125
setReadWrite(
true);
00126
00127
00128
setModified(
false);
00129
00130 }
00131
00132 QEditorPart::~QEditorPart()
00133 {
00134 QEditorPartFactory::deregisterDocument(
this );
00135 }
00136
00137 void QEditorPart::setReadWrite(
bool rw)
00138 {
00139
00140
m_currentView->
editor()->setReadOnly(!rw);
00141
if (rw){
00142 connect(
m_currentView->
editor(), SIGNAL(
textChanged()),
00143
this, SLOT(
setModified()));
00144 }
else {
00145 disconnect(
m_currentView->
editor(), SIGNAL(
textChanged()),
00146
this, SLOT(
setModified()));
00147 }
00148
00149 ReadWritePart::setReadWrite(rw);
00150 }
00151
00152 void QEditorPart::setModified(
bool modified)
00153 {
00154
if ( modified == ReadWritePart::isModified() )
00155
return;
00156
00157
m_currentView->
editor()->setModified( modified );
00158
00159
00160 ReadWritePart::setModified(modified);
00161
00162
00163
KAction *save =
m_currentView->
actionCollection()->
action(KStdAction::stdName(KStdAction::Save));
00164
if (save)
00165
00166
00167 save->setEnabled(modified);
00168
00169
00170
KAction *reload =
m_currentView->
actionCollection()->
action(
"Reload");
00171
if ( reload )
00172 reload->setEnabled(modified);
00173
00174 emit
newStatus();
00175 }
00176
00177 bool QEditorPart::openFile()
00178 {
00179
00180
QFile file(m_file);
00181
if (
file.open(IO_ReadOnly) ==
false)
00182
return false;
00183
00184
00185
00186
QTextStream stream(&
file);
00187
QString str;
00188
while (!stream.eof())
00189 str += stream.readLine() +
"\n";
00190
00191
file.close();
00192
00193
m_currentView->
editor()->
setText( str );
00194
int hl =
findMode( m_file );
00195
setHlMode( hl>=0 ? hl : 0 );
00196
00197
setModified(
false );
00198 emit
fileNameChanged();
00199
00200
return true;
00201 }
00202
00203 bool QEditorPart::saveFile()
00204 {
00205
00206
if (
isReadWrite() ==
false)
00207
return false;
00208
00209
if( m_file.isEmpty() ){
00210
fileSaveAs();
00211
return true;
00212 }
00213
00214
00215
QFile file(m_file);
00216
if (
file.open(IO_WriteOnly) ==
false)
00217
return false;
00218
00219
00220
QTextStream stream(&
file);
00221 stream <<
m_currentView->
editor()->text();
00222
00223
file.close();
00224
00225
int hl =
findMode( m_file );
00226
setHlMode( hl>=0 ? hl : 0 );
00227
00228
setModified(
false );
00229 emit
fileNameChanged();
00230
00231
return true;
00232 }
00233
00234 void QEditorPart::fileReload()
00235 {
00236
if (openURL(
url())) {
00237
setModified(
false );
00238 emit
newStatus();
00239 }
00240 }
00241
00242 void QEditorPart::fileOpen()
00243 {
00244
00245
00246
00247
QString file_name = KFileDialog::getOpenFileName();
00248
00249
if (file_name.isEmpty() ==
false)
00250 openURL(file_name);
00251 }
00252
00253 void QEditorPart::fileSaveAs()
00254 {
00255
00256
QString file_name = KFileDialog::getSaveFileName();
00257
if (file_name.isEmpty() ==
false)
00258 saveAs(file_name);
00259 }
00260
00261
00262 QString QEditorPart::text()
const
00263
{
00264
return m_currentView->
editor()->text();
00265 }
00266
00267 QString QEditorPart::text(
unsigned int startLine,
unsigned int startCol,
00268
unsigned int endLine,
unsigned int endCol )
const
00269
{
00270
int selNum = 1000;
00271 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00272
00273
m_currentView->
editor()->setSelection( startLine, startCol, endLine, endCol, selNum );
00274
QString txt = textDoc->selectedText( selNum );
00275 textDoc->removeSelection( selNum );
00276
00277
return textDoc->selectedText( selNum );
00278 }
00279
00280 QString QEditorPart::textLine(
unsigned int line )
const
00281
{
00282
return m_currentView->
editor()->
textLine( line );
00283 }
00284
00285 unsigned int QEditorPart::numLines()
const
00286
{
00287
return m_currentView->
editor()->lines();
00288 }
00289
00290 unsigned int QEditorPart::length()
const
00291
{
00292
return m_currentView->
editor()->length();
00293 }
00294
00295 int QEditorPart::lineLength(
unsigned int line )
const
00296
{
00297
if( int(line) <
m_currentView->
editor()->lines() ){
00298
return m_currentView->
editor()->paragraphLength( line );
00299 }
00300
return -1;
00301 }
00302
00303 bool QEditorPart::setText(
const QString &text )
00304 {
00305
m_currentView->
editor()->
setText(
text );
00306
return TRUE;
00307 }
00308
00309 bool QEditorPart::clear()
00310 {
00311
m_currentView->
editor()->clear();
00312
return TRUE;
00313 }
00314
00315 bool QEditorPart::insertText(
unsigned int line,
unsigned int col,
const QString &text )
00316 {
00317
m_currentView->
editor()->insertAt(
text, line, col );
00318
return TRUE;
00319 }
00320
00321 bool QEditorPart::removeText(
unsigned int startLine,
unsigned int startCol,
00322
unsigned int endLine,
unsigned int endCol )
00323 {
00324
int selNum = 10;
00325
m_currentView->
editor()->setSelection( startLine, startCol, endLine, endCol, selNum );
00326
m_currentView->
editor()->removeSelectedText( selNum );
00327
return TRUE;
00328 }
00329
00330 bool QEditorPart::insertLine(
unsigned int line,
const QString &text )
00331 {
00332
m_currentView->
editor()->insertParagraph(
text, line );
00333
return TRUE;
00334 }
00335
00336 bool QEditorPart::removeLine(
unsigned int line )
00337 {
00338
m_currentView->
editor()->removeParagraph( line );
00339
return TRUE;
00340 }
00341
00342 KTextEditor::View*
QEditorPart::createView(
QWidget* parentWidget,
const char* widgetName )
00343 {
00344
kdDebug(9032) <<
"QEditorPart::createView()" <<
endl;
00345
00346
if( !
m_currentView ){
00347
m_currentView =
new QEditorView(
this, parentWidget, widgetName );
00348
m_views.append(
m_currentView );
00349 insertChildClient(
m_currentView );
00350 setWidget(
m_currentView );
00351 }
00352
else
00353
m_currentView->reparent( parentWidget,
QPoint(0,0) );
00354
00355
return m_currentView;
00356 }
00357
00358 QPtrList<KTextEditor::View> QEditorPart::views()
const
00359
{
00360
return m_views;
00361 }
00362
00363
00364 void QEditorPart::clearUndo()
00365 {
00366
#warning "TODO: void QEditorPart::clearUndo()"
00367
kdDebug(9032) <<
"QEditorPart::clearUndo() -- not implemented yet!!" <<
endl;
00368 }
00369
00370 void QEditorPart::clearRedo()
00371 {
00372
#warning "TODO: void QEditorPart::clearRedo()"
00373
kdDebug(9032) <<
"QEditorPart::clearRedo() -- not implemented yet!!" <<
endl;
00374 }
00375
00376 unsigned int QEditorPart::undoCount()
const
00377
{
00378
#warning "TODO: unsigned int QEditorPart::undoCount() const"
00379
kdDebug(9032) <<
"QEditorPart::undoCount() -- not implemented yet!!" <<
endl;
00380
return 0;
00381 }
00382
00383 unsigned int QEditorPart::redoCount()
const
00384
{
00385
#warning "TODO: unsigned int QEditorPart::redoCount() const"
00386
kdDebug(9032) <<
"QEditorPart::redoCount() -- not implemented yet!!" <<
endl;
00387
return 0;
00388 }
00389
00390 unsigned int QEditorPart::undoSteps()
const
00391
{
00392 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00393
return textDoc->commands()->undoDepth();
00394 }
00395
00396 void QEditorPart::setUndoSteps(
unsigned int steps )
00397 {
00398 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00399 textDoc->commands()->setUndoDepth( steps );
00400 }
00401
00402 void QEditorPart::undo()
00403 {
00404
m_currentView->
editor()->undo();
00405 }
00406
00407 void QEditorPart::redo()
00408 {
00409
m_currentView->
editor()->redo();
00410 }
00411
00412 KTextEditor::Cursor*
QEditorPart::createCursor( )
00413 {
00414
KTextEditor::Cursor* c =
new CursorImpl(
m_currentView->
editor()->
document() );
00415
m_cursors.append( c );
00416
return c;
00417 }
00418
00419 QPtrList<KTextEditor::Cursor> QEditorPart::cursors()
const
00420
{
00421
return m_cursors;
00422 }
00423
00424 bool QEditorPart::setSelection(
unsigned int startLine,
unsigned int startCol,
00425
unsigned int endLine,
unsigned int endCol )
00426 {
00427
m_currentView->
editor()->setSelection( startLine, startCol, endLine, endCol );
00428
return TRUE;
00429 }
00430
00431 bool QEditorPart::clearSelection()
00432 {
00433
m_currentView->
editor()->removeSelection();
00434
return TRUE;
00435 }
00436
00437 bool QEditorPart::hasSelection()
const
00438
{
00439
return m_currentView->
editor()->hasSelectedText();
00440 }
00441
00442 QString QEditorPart::selection()
const
00443
{
00444
return m_currentView->
editor()->selectedText();
00445 }
00446
00447 bool QEditorPart::removeSelectedText()
00448 {
00449
m_currentView->
editor()->removeSelectedText();
00450
return TRUE;
00451 }
00452
00453 bool QEditorPart::selectAll()
00454 {
00455
m_currentView->
editor()->selectAll();
00456
return TRUE;
00457 }
00458
00459 void QEditorPart::setupHighlighting()
00460 {
00461
m_currentMode = 0;
00462
00463
HLMode* mode = 0;
00464
m_modes.setAutoDelete( TRUE );
00465
00466 mode =
new HLMode;
00467 mode->
name =
"normal";
00468 mode->
section =
"Normal";
00469 mode->
extensions =
QStringList() <<
"*.txt" <<
"*.doc";
00470
m_modes.append( mode );
00471
00472 mode =
new HLMode;
00473 mode->
name =
"c++";
00474 mode->
section =
"Programming";
00475 mode->
extensions =
QStringList() <<
"*.cpp" <<
"*.cxx" <<
"*.cc" <<
"*.C" <<
"*.c++" <<
"*.c" <<
"*.tcc" <<
00476
"*.m" <<
"*.mm" <<
"*.M" <<
"*.inl" <<
"*.tlh" <<
"*.diff" <<
"*.patch" <<
"*.moc" <<
"*.xpm" <<
00477
"*.h" <<
"*.hpp" <<
"*.hh" <<
"*.hxx" <<
"*.h++" <<
"*.H";
00478
m_modes.append( mode );
00479
00480 mode =
new HLMode;
00481 mode->
name =
"java";
00482 mode->
section =
"Programming";
00483 mode->
extensions =
QStringList() <<
"*.java";
00484
m_modes.append( mode );
00485
00486 mode =
new HLMode;
00487 mode->
name =
"javascript";
00488 mode->
section =
"Programming";
00489 mode->
extensions =
QStringList() <<
"*.js" <<
"*.qs";
00490
m_modes.append( mode );
00491
00492 mode =
new HLMode;
00493 mode->
name =
"csharp";
00494 mode->
section =
"Programming";
00495 mode->
extensions =
QStringList() <<
"*.cs";
00496
m_modes.append( mode );
00497
00498
#if defined(HAVE_PERL_MODE)
00499
mode =
new HLMode;
00500 mode->
name =
"perl";
00501 mode->
section =
"Programming";
00502 mode->
extensions =
QStringList() <<
"*.pl";
00503
m_modes.append( mode );
00504
#endif
00505
00506 mode =
new HLMode;
00507 mode->
name =
"python";
00508 mode->
section =
"Programming";
00509 mode->
extensions =
QStringList() <<
"*.py" <<
"*.pyw";
00510
m_modes.append( mode );
00511
00512 mode =
new HLMode;
00513 mode->
name =
"xml";
00514 mode->
section =
"Markup";
00515 mode->
extensions =
QStringList() <<
"*.xml" <<
"*.xslt" <<
"*.rc" <<
"*rc" <<
"*.ui" <<
00516
"*.html" <<
"*.htm" <<
"*.kdevelop" <<
"*.kdevses" ;
00517
m_modes.append( mode );
00518
00519 mode =
new HLMode;
00520 mode->
name =
"qmake";
00521 mode->
section =
"Programming";
00522 mode->
extensions =
QStringList() <<
"*.pro" <<
"*.sh" <<
"*Makefile" <<
"*Makefile.am" <<
"*Makefile.in";
00523
m_modes.append( mode );
00524
00525 mode =
new HLMode;
00526 mode->
name =
"jsp";
00527 mode->
section =
"Programming";
00528 mode->
extensions =
QStringList() <<
"*.jsp";
00529
m_modes.append( mode );
00530
00531 mode =
new HLMode;
00532 mode->
name =
"ocaml";
00533 mode->
section =
"Programming";
00534 mode->
extensions =
QStringList() <<
"*.ml" <<
"*.mli";
00535
m_modes.append( mode );
00536
00537 mode =
new HLMode;
00538 mode->
name =
"pascal";
00539 mode->
section =
"Programming";
00540 mode->
extensions =
QStringList() <<
"*.pp" <<
"*.p" <<
"*.pas" <<
"*.dpr";
00541
m_modes.append( mode );
00542
00543 mode =
new HLMode;
00544 mode->
name =
"ada";
00545 mode->
section =
"Programming";
00546 mode->
extensions =
QStringList() <<
"*.adb" <<
"*.ads";
00547
m_modes.append( mode );
00548
00549 mode =
new HLMode;
00550 mode->
name =
"sql";
00551 mode->
section =
"Programming";
00552 mode->
extensions =
QStringList() <<
"*.sql" <<
"*.SQL";
00553
m_modes.append( mode );
00554 }
00555
00556 unsigned int QEditorPart::hlMode()
00557 {
00558
return m_currentMode;
00559 }
00560
00561 bool QEditorPart::setHlMode(
unsigned int mode)
00562 {
00563
if(
m_currentMode != mode ){
00564
m_currentMode = mode;
00565
HLMode* m =
m_modes.at(
m_currentMode );
00566
if( m ){
00567
m_currentView->
setLanguage( m->
name );
00568 }
00569 emit
hlChanged();
00570 }
00571
return TRUE;
00572 }
00573
00574 unsigned int QEditorPart::hlModeCount()
00575 {
00576
return m_modes.count();
00577 }
00578
00579 QString QEditorPart::hlModeName(
unsigned int mode)
00580 {
00581
HLMode* m =
m_modes.at( mode );
00582
return m ? m->
name : QString::null;
00583 }
00584
00585 QString QEditorPart::hlModeSectionName(
unsigned int mode)
00586 {
00587
HLMode* m =
m_modes.at( mode );
00588
return m ? m->
section : QString::null;
00589 }
00590
00591 int QEditorPart::findMode(
const QString& filename )
00592 {
00593
for(
unsigned int modeNum=0; modeNum<
m_modes.count(); ++modeNum ){
00594
HLMode* mode =
m_modes.at( modeNum );
00595 QStringList::Iterator itExt = mode->
extensions.begin();
00596
while( itExt != mode->
extensions.end() ){
00597
if(
QRegExp(*itExt, TRUE, TRUE).exactMatch(filename) ){
00598
return modeNum;
00599 }
00600 ++itExt;
00601 }
00602 }
00603
return -1;
00604 }
00605
00606 bool QEditorPart::searchText (
unsigned int startLine,
unsigned int startCol,
00607
const QString &text,
unsigned int *foundAtLine,
unsigned int *foundAtCol,
00608
unsigned int *matchLen,
bool casesensitive,
bool backwards )
00609 {
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
if(
text.isEmpty() ){
00621
return false;
00622 }
00623
00624
unsigned int tmpline = startLine;
00625
int foundCol;
00626
QString oneline;
00627
bool firstTestedLine=
true;
00628
00629
if( !backwards ){
00630
while( tmpline <=
numLines() ){
00631
00632 oneline =
textLine( tmpline );
00633
kdDebug()<<oneline<<
endl;
00634
00635
00636
if( firstTestedLine ){
00637
int index = (
int)startCol;
00638 foundCol = oneline.find(
text, index, casesensitive );
00639 firstTestedLine =
false;
00640 }
else{
00641 foundCol = oneline.find(
text, 0, casesensitive );
00642 }
00643
00644
if( foundCol != -1 ){
00645 (*foundAtLine) = tmpline;
00646 (*foundAtCol) = foundCol;
00647 (*matchLen) =
text.length();
00648
return true;
00649 }
00650
00651 tmpline++;
00652 }
00653
00654
return false;
00655
00656 }
else{
00657
while( tmpline != 0 ){
00658 oneline =
textLine( tmpline );
00659
kdDebug()<<oneline<<
endl;
00660
if( firstTestedLine ){
00661
int index = (
int)startCol;
00662 foundCol = oneline.findRev(
text, index, casesensitive );
00663 firstTestedLine =
false;
00664 }
else{
00665 foundCol = oneline.findRev(
text, -1, casesensitive );
00666 }
00667
00668
00669
if( foundCol != -1 ){
00670 (*foundAtLine) = tmpline;
00671 (*foundAtCol) = foundCol;
00672 (*matchLen) =
text.length();
00673
return true;
00674 }
00675 tmpline--;
00676 }
00677
return false;
00678 }
00679 }
00680
00681 bool QEditorPart::searchText (
unsigned int startLine,
unsigned int startCol,
00682
const QRegExp ®exp,
unsigned int *foundAtLine,
00683
unsigned int *foundAtCol,
unsigned int *matchLen,
bool backwards )
00684 {
00685
unsigned int line = startLine;
00686
while( line<=
numLines() ){
00687
QString str =
textLine( line );
00688
int pos = -1;
00689
if( backwards ){
00690 pos = regexp.searchRev( str, line == startLine ? startCol : str.length() );
00691 }
else {
00692 pos = regexp.search( str, line == startLine ? startCol : 0 );
00693 }
00694
00695
if( pos != -1 ){
00696 *foundAtLine = line;
00697 *foundAtCol = pos;
00698 *matchLen = regexp.matchedLength();
00699
return true;
00700 }
00701
00702
if( backwards ){
00703 --line;
00704 }
else {
00705 ++line;
00706 }
00707 }
00708
return false;
00709 }
00710
00711 uint
QEditorPart::mark (uint line)
00712 {
00713 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00714 QTextParagraph* parag = textDoc->paragAt( line );
00715
if( parag ){
00716
ParagData* data = (
ParagData*) parag->extraData();
00717
if( data ){
00718
return data->
mark();
00719 }
00720 }
00721
return 0;
00722 }
00723
00724 void QEditorPart::setMark (uint line, uint markType)
00725 {
00726 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00727 QTextParagraph* parag = textDoc->paragAt( line );
00728
if( parag ){
00729
ParagData* data = (
ParagData*) parag->extraData();
00730
if( data ){
00731 data->
setMark( markType );
00732 emit
marksChanged();
00733 }
00734 }
00735 }
00736
00737 void QEditorPart::clearMark (uint line)
00738 {
00739
setMark( line, 0 );
00740 }
00741
00742 void QEditorPart::addMark (uint line, uint markType)
00743 {
00744 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00745 QTextParagraph* parag = textDoc->paragAt( line );
00746
if( parag ){
00747
ParagData* data = (
ParagData*) parag->extraData();
00748
if( data ){
00749 data->
setMark( data->
mark() | markType );
00750 emit
marksChanged();
00751 }
00752 }
00753 }
00754
00755 void QEditorPart::removeMark (uint line, uint markType)
00756 {
00757 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00758 QTextParagraph* parag = textDoc->paragAt( line );
00759
if( parag ){
00760
ParagData* data = (
ParagData*) parag->extraData();
00761
if( data ){
00762 data->
setMark( data->
mark() & ~markType );
00763 emit
marksChanged();
00764 }
00765 }
00766 }
00767
00768 QPtrList<KTextEditor::Mark> QEditorPart::marks ()
00769 {
00770
00771
00772
QPtrList<KTextEditor::Mark> marks;
00773 marks.setAutoDelete(
true );
00774
00775 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00776 QTextParagraph* p = textDoc->firstParagraph();
00777
while( p ){
00778
ParagData* data = (
ParagData*) p->extraData();
00779
if( data && data->
mark() ){
00780 KTextEditor::Mark*
mark =
new KTextEditor::Mark;
00781 mark->type = data->
mark();
00782 mark->line = p->paragId();
00783
00784 marks.append( mark );
00785 }
00786 p = p->next();
00787 }
00788
return marks;
00789 }
00790
00791 void QEditorPart::clearMarks ()
00792 {
00793 QTextDocument* textDoc =
m_currentView->
editor()->
document();
00794 QTextParagraph* p = textDoc->firstParagraph();
00795
while( p ){
00796
ParagData* data = (
ParagData*) p->extraData();
00797
if( data ){
00798 data->
setMark( 0 );
00799 }
00800 p = p->next();
00801 }
00802 }
00803
00804 void QEditorPart::setPixmap(KTextEditor::MarkInterface::MarkTypes mt,
const QPixmap & pm)
00805 {
00806
m_currentView->
markerWidget()->
setPixmap(mt, pm);
00807 }
00808
00809 void QEditorPart::setDescription(KTextEditor::MarkInterface::MarkTypes mt,
const QString & s)
00810 {
00811
m_currentView->
markerWidget()->
setDescription(mt, s);
00812 }
00813
00814 void QEditorPart::setMarksUserChangable(uint markMask)
00815 {
00816
m_currentView->
markerWidget()->
setMarksUserChangable(markMask);
00817 }
00818
00819
00820
00821 void QEditorPart::readConfig()
00822 {
00823
QEditorSettings::self()->
readConfig();
00824
m_currentView->
configChanged();
00825 }
00826
00827 void QEditorPart::writeConfig()
00828 {
00829
kdDebug(9032) <<
"QEditorPart::writeConfig() - not implemented yet!" <<
endl;
00830 }
00831
00832 void QEditorPart::readConfig(
KConfig *)
00833 {
00834
kdDebug(9032) <<
"QEditorPart::readConfig(KConfig *) - not implemented yet!" <<
endl;
00835 }
00836
00837 void QEditorPart::writeConfig(
KConfig *)
00838 {
00839
kdDebug(9032) <<
"QEditorPart::writeConfig(KConfig *) - not implemented yet!" <<
endl;
00840 }
00841
00842 void QEditorPart::readSessionConfig(
KConfig *)
00843 {
00844
kdDebug(9032) <<
"QEditorPart::readSessionConfig(KConfig *) - not implemented yet!" <<
endl;
00845 }
00846
00847 void QEditorPart::writeSessionConfig(
KConfig *)
00848 {
00849
kdDebug(9032) <<
"QEditorPart::writeSessionConfig(KConfig *) - not implemented yet!" <<
endl;
00850 }
00851
00852 void QEditorPart::configDialog()
00853 {
00854
KDialogBase dlg(KDialogBase::Tabbed, i18n(
"QEditor Options"),
00855 KDialogBase::Ok|KDialogBase::Cancel,
00856 KDialogBase::Ok, 0,
00857
"qeditor options dialog");
00858
00859
GeneralConfigPage* generalPage =
new GeneralConfigPage( dlg.
addVBoxPage(i18n(
"General")) );
00860 generalPage->
setPart(
this );
00861 connect( &dlg, SIGNAL(okClicked()), generalPage, SLOT(accept()) );
00862
00863
00864
if(
colorizer() ){
00865
HighlightingConfigPage* hlPage =
new HighlightingConfigPage( dlg.
addVBoxPage(i18n(
"Highlighting")) );
00866 hlPage->
setEditor(
this );
00867 connect( &dlg, SIGNAL(okClicked()), hlPage, SLOT(accept()) );
00868 }
00869
00870
if(
indenter() ){
00871 (
void)
indenter()->
createConfigPage(
this, &dlg );
00872 }
00873
00874 emit
configWidget( &dlg );
00875
00876
if ( dlg.exec() )
00877 {
00878
QEditorSettings::self()->
config()->
sync();
00879
m_currentView->
configChanged();
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889 }
00890 }
00891
00892
00893
00894 QSourceColorizer*
QEditorPart::colorizer()
const
00895
{
00896
return m_currentView->
editor()->
colorizer();
00897 }
00898
00899 QEditorIndenter*
QEditorPart::indenter()
const
00900
{
00901
return m_currentView->
editor()->
indenter();
00902 }
00903