00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include <limits.h>
00023
00024
#include <qframe.h>
00025
#include <qlabel.h>
00026
#include <qlineedit.h>
00027
#include <qvbuttongroup.h>
00028
#include <qcheckbox.h>
00029
#include <qlayout.h>
00030
#include <qpushbutton.h>
00031
#include <qhbox.h>
00032
#include <qpopupmenu.h>
00033
00034
#include <kapplication.h>
00035
#include <kcombobox.h>
00036
#include <knuminput.h>
00037
#include <kmessagebox.h>
00038
#include <knotifyclient.h>
00039
#include <klocale.h>
00040
#include <kdebug.h>
00041
#include <kiconloader.h>
00042
00043
#include "keditcl.h"
00044
00045
00047
00048
00049
00050
00051 void KEdit::search(){
00052
00053
if( replace_dialog && replace_dialog->isVisible() )
00054 {
00055 replace_dialog->hide();
00056 }
00057
00058
if( !srchdialog )
00059 {
00060 srchdialog =
new KEdFind(
this,
"searchdialog",
false);
00061 connect(srchdialog,SIGNAL(
search()),
this,SLOT(search_slot()));
00062 connect(srchdialog,SIGNAL(done()),
this,SLOT(searchdone_slot()));
00063 }
00064
00065
00066
00067
00068
QString string;
00069 string = srchdialog->getText();
00070 srchdialog->setText(string.isEmpty() ? pattern : string);
00071
00072 deselect();
00073 last_search = NONE;
00074
00075 srchdialog->show();
00076 srchdialog->result();
00077 }
00078
00079
00080
void KEdit::search_slot(){
00081
00082
int line, col;
00083
00084
if (!srchdialog)
00085
return;
00086
00087
QString to_find_string = srchdialog->getText();
00088 getCursorPosition(&line,&col);
00089
00090
00091
00092
if (last_search != NONE && srchdialog->get_direction()){
00093 col = col - pattern.length() - 1 ;
00094 }
00095
00096 again:
00097
int result = doSearch(to_find_string, srchdialog->case_sensitive(),
00098
false, (!srchdialog->get_direction()),line,col);
00099
00100
if(!result){
00101
if(!srchdialog->get_direction()){
00102
00103
int query =
KMessageBox::questionYesNo(
00104 srchdialog,
00105 i18n(
"End of document reached.\n"\
00106
"Continue from the beginning?"),
00107 i18n(
"Find"));
00108
if (query == KMessageBox::Yes){
00109 line = 0;
00110 col = 0;
00111
goto again;
00112 }
00113 }
00114
else{
00115
00116
int query =
KMessageBox::questionYesNo(
00117 srchdialog,
00118 i18n(
"Beginning of document reached.\n"\
00119
"Continue from the end?"),
00120 i18n(
"Find"));
00121
if (query == KMessageBox::Yes){
00122
QString string = textLine( numLines() - 1 );
00123 line = numLines() - 1;
00124 col = string.length();
00125 last_search = BACKWARD;
00126
goto again;
00127 }
00128 }
00129 }
00130
else{
00131 emit
CursorPositionChanged();
00132 }
00133 }
00134
00135
00136
00137
void KEdit::searchdone_slot(){
00138
00139
if (!srchdialog)
00140
return;
00141
00142 srchdialog->hide();
00143 setFocus();
00144 last_search = NONE;
00145 }
00146
00147
00148
int KEdit::doSearch(
QString s_pattern,
bool case_sensitive,
00149
bool wildcard,
bool forward,
int line,
int col){
00150
00151 (
void) wildcard;
00152
00153
00154
int i, length;
00155
int pos = -1;
00156
00157
if(
forward){
00158
00159
QString string;
00160
00161
for(i = line; i < numLines(); i++) {
00162
00163 string = textLine(i);
00164
00165 pos = string.find(s_pattern, i == line ? col : 0, case_sensitive);
00166
00167
if( pos != -1){
00168
00169 length = s_pattern.length();
00170
00171 setCursorPosition(i,pos,
false);
00172
00173
for(
int l = 0 ; l < length; l++){
00174 cursorRight(
true);
00175 }
00176
00177 setCursorPosition( i , pos + length,
true );
00178 pattern = s_pattern;
00179 last_search = FORWARD;
00180
00181
return 1;
00182 }
00183 }
00184 }
00185
else{
00186
00187
QString string;
00188
00189
for(i = line; i >= 0; i--) {
00190
00191 string = textLine(i);
00192
int line_length = string.length();
00193
00194 pos = string.findRev(s_pattern, line == i ? col : line_length , case_sensitive);
00195
00196
if (pos != -1){
00197
00198 length = s_pattern.length();
00199
00200
if( ! (line == i && pos > col ) ){
00201
00202 setCursorPosition(i ,pos ,
false );
00203
00204
for(
int l = 0 ; l < length; l++){
00205 cursorRight(
true);
00206 }
00207
00208 setCursorPosition(i ,pos + length ,
true );
00209 pattern = s_pattern;
00210 last_search = BACKWARD;
00211
return 1;
00212
00213 }
00214 }
00215
00216 }
00217 }
00218
00219
return 0;
00220
00221 }
00222
00223
00224
00225 bool KEdit::repeatSearch() {
00226
00227
if(!srchdialog || pattern.isEmpty())
00228 {
00229
search();
00230
return true;
00231 }
00232
00233 search_slot();
00234
00235 setFocus();
00236
return true;
00237
00238 }
00239
00240
00242
00243
00244
00245
00246
00247 void KEdit::replace()
00248 {
00249
if( srchdialog && srchdialog->isVisible() )
00250 {
00251 srchdialog->hide();
00252 }
00253
00254
if( !replace_dialog )
00255 {
00256 replace_dialog =
new KEdReplace(
this,
"replace_dialog",
false );
00257 connect(replace_dialog,SIGNAL(find()),
this,SLOT(replace_search_slot()));
00258 connect(replace_dialog,SIGNAL(
replace()),
this,SLOT(replace_slot()));
00259 connect(replace_dialog,SIGNAL(replaceAll()),
this,SLOT(replace_all_slot()));
00260 connect(replace_dialog,SIGNAL(done()),
this,SLOT(replacedone_slot()));
00261 }
00262
00263
QString string = replace_dialog->getText();
00264 replace_dialog->setText(string.isEmpty() ? pattern : string);
00265
00266
00267 deselect();
00268 last_replace = NONE;
00269
00270 replace_dialog->show();
00271 replace_dialog->result();
00272 }
00273
00274
00275
void KEdit::replace_slot(){
00276
00277
if (!replace_dialog)
00278
return;
00279
00280
if(!can_replace){
00281
KNotifyClient::beep();
00282
return;
00283 }
00284
00285
int line,col, length;
00286
00287
QString string = replace_dialog->getReplaceText();
00288 length = string.length();
00289
00290 this->
cut();
00291
00292 getCursorPosition(&line,&col);
00293
00294 insertAt(string,line,col);
00295 setModified(
true);
00296 can_replace =
false;
00297
00298
if (replace_dialog->get_direction())
00299 {
00300
00301 setCursorPosition(line,col+length);
00302
for(
int k = 0; k < length; k++){
00303 cursorLeft(
true);
00304 }
00305 }
00306
else
00307 {
00308
00309 setCursorPosition(line,col);
00310
for(
int k = 0; k < length; k++){
00311 cursorRight(
true);
00312 }
00313 }
00314 }
00315
00316
void KEdit::replace_all_slot(){
00317
00318
if (!replace_dialog)
00319
return;
00320
00321
QString to_find_string = replace_dialog->getText();
00322
00323
int lineFrom, lineTo, colFrom, colTo;
00324 getSelection(&lineFrom, &colFrom, &lineTo, &colTo);
00325
00326
00327
if (replace_dialog->get_direction())
00328 {
00329
if (colTo != -1)
00330 {
00331 replace_all_col = colTo - to_find_string.length();
00332 replace_all_line = lineTo;
00333 }
00334
else
00335 {
00336 getCursorPosition(&replace_all_line,&replace_all_col);
00337 replace_all_col--;
00338 }
00339 }
00340
else
00341 {
00342
if (colFrom != -1)
00343 {
00344 replace_all_col = colFrom;
00345 replace_all_line = lineFrom;
00346 }
00347
else
00348 {
00349 getCursorPosition(&replace_all_line,&replace_all_col);
00350 }
00351 }
00352
00353
deselect();
00354
00355 again:
00356
00357 setAutoUpdate(
false);
00358
int result = 1;
00359
00360
while(result){
00361
00362 result = doReplace(to_find_string, replace_dialog->case_sensitive(),
00363
false, (!replace_dialog->get_direction()),
00364 replace_all_line,replace_all_col,
true);
00365
00366 }
00367
00368 setAutoUpdate(
true);
00369 update();
00370
00371
if(!replace_dialog->get_direction()){
00372
00373
int query =
KMessageBox::questionYesNo(
00374 srchdialog,
00375 i18n(
"End of document reached.\n"\
00376
"Continue from the beginning?"),
00377 i18n(
"Find"));
00378
if (query == KMessageBox::Yes){
00379 replace_all_line = 0;
00380 replace_all_col = 0;
00381
goto again;
00382 }
00383 }
00384
else{
00385
00386
int query =
KMessageBox::questionYesNo(
00387 srchdialog,
00388 i18n(
"Beginning of document reached.\n"\
00389
"Continue from the end?"),
00390 i18n(
"Find"));
00391
if (query == KMessageBox::Yes){
00392
QString string = textLine( numLines() - 1 );
00393 replace_all_line = numLines() - 1;
00394 replace_all_col = string.length();
00395 last_replace = BACKWARD;
00396
goto again;
00397 }
00398 }
00399
00400 emit
CursorPositionChanged();
00401
00402 }
00403
00404
00405
void KEdit::replace_search_slot(){
00406
00407
int line, col;
00408
00409
if (!replace_dialog)
00410
return;
00411
00412
QString to_find_string = replace_dialog->getText();
00413
00414
int lineFrom, lineTo, colFrom, colTo;
00415 getSelection(&lineFrom, &colFrom, &lineTo, &colTo);
00416
00417
00418
if (replace_dialog->get_direction())
00419 {
00420
if (colFrom != -1)
00421 {
00422 col = colFrom - to_find_string.length();
00423 line = lineFrom;
00424 }
00425
else
00426 {
00427 getCursorPosition(&line,&col);
00428 col--;
00429 }
00430 }
00431
else
00432 {
00433
if (colTo != -1)
00434 {
00435 col = colTo;
00436 line = lineTo;
00437 }
00438
else
00439 {
00440 getCursorPosition(&line,&col);
00441 }
00442 }
00443
00444 again:
00445
00446
int result = doReplace(to_find_string, replace_dialog->case_sensitive(),
00447
false, (!replace_dialog->get_direction()), line, col,
false );
00448
00449
if(!result){
00450
if(!replace_dialog->get_direction()){
00451
00452
int query =
KMessageBox::questionYesNo(
00453 replace_dialog,
00454 i18n(
"End of document reached.\n"\
00455
"Continue from the beginning?"),
00456 i18n(
"Replace"));
00457
if (query == KMessageBox::Yes){
00458 line = 0;
00459 col = 0;
00460
goto again;
00461 }
00462 }
00463
else{
00464
00465
int query =
KMessageBox::questionYesNo(
00466 replace_dialog,
00467 i18n(
"Beginning of document reached.\n"\
00468
"Continue from the end?"),
00469 i18n(
"Replace"));
00470
if (query == KMessageBox::Yes){
00471
QString string = textLine( numLines() - 1 );
00472 line = numLines() - 1;
00473 col = string.length();
00474 last_replace = BACKWARD;
00475
goto again;
00476 }
00477 }
00478 }
00479
else{
00480
00481 emit
CursorPositionChanged();
00482 }
00483 }
00484
00485
00486
00487
void KEdit::replacedone_slot(){
00488
00489
if (!replace_dialog)
00490
return;
00491
00492 replace_dialog->hide();
00493
00494
00495 setFocus();
00496
00497 last_replace = NONE;
00498 can_replace =
false;
00499
00500 }
00501
00502
00503
00504
00505
int KEdit::doReplace(
QString s_pattern,
bool case_sensitive,
00506
bool wildcard,
bool forward,
int line,
int col,
bool replace_all){
00507
00508
00509 (
void) wildcard;
00510
00511
int line_counter, length;
00512
int pos = -1;
00513
00514
QString string;
00515
QString stringnew;
00516
QString replacement;
00517
00518 replacement = replace_dialog->getReplaceText();
00519 line_counter = line;
00520 replace_all_col = col;
00521
00522
if(
forward){
00523
00524
int num_lines = numLines();
00525
00526
while (line_counter < num_lines){
00527
00528 string = textLine(line_counter);
00529
00530
if (replace_all){
00531 pos = string.find(s_pattern, replace_all_col, case_sensitive);
00532 }
00533
else{
00534 pos = string.find(s_pattern, line_counter == line ? col : 0, case_sensitive);
00535 }
00536
00537
if (pos == -1 ){
00538 line_counter++;
00539 replace_all_col = 0;
00540 replace_all_line = line_counter;
00541 }
00542
00543
if( pos != -1){
00544
00545 length = s_pattern.length();
00546
00547
if(replace_all){
00548
00549 stringnew = string.copy();
00550
do
00551 {
00552 stringnew.replace(pos,length,replacement);
00553
00554 replace_all_col = pos + replacement.length();
00555 replace_all_line = line_counter;
00556
00557 pos = stringnew.find(s_pattern, replace_all_col, case_sensitive);
00558 }
00559
while( pos != -1);
00560
00561 removeLine(line_counter);
00562 insertLine(stringnew,line_counter);
00563
00564 setModified(
true);
00565 }
00566
else{
00567
00568 setCursorPosition( line_counter , pos,
false );
00569
00570
for(
int l = 0 ; l < length; l++){
00571 cursorRight(
true);
00572 }
00573
00574 setCursorPosition( line_counter , pos + length,
true );
00575 pattern = s_pattern;
00576 last_replace = FORWARD;
00577 can_replace =
true;
00578
00579
return 1;
00580
00581 }
00582
00583 }
00584 }
00585 }
00586
else{
00587
00588
while(line_counter >= 0){
00589
00590 string = textLine(line_counter);
00591
00592
int line_length = string.length();
00593
00594
if( replace_all ){
00595
if (replace_all_col < 0)
00596 pos = -1;
00597
else
00598 pos = string.findRev(s_pattern, replace_all_col , case_sensitive);
00599 }
00600
else{
00601
if ((line == line_counter) && (col < 0))
00602 pos = -1;
00603
else
00604 pos = string.findRev(s_pattern,
00605 line == line_counter ? col : line_length , case_sensitive);
00606 }
00607
00608
if (pos == -1 ){
00609 line_counter--;
00610
00611 replace_all_col = 0;
00612
if(line_counter >= 0){
00613 string = textLine(line_counter);
00614 replace_all_col = string.length();
00615
00616 }
00617 replace_all_line = line_counter;
00618 }
00619
00620
00621
if (pos != -1){
00622 length = s_pattern.length();
00623
00624
if(replace_all){
00625
00626 stringnew = string.copy();
00627 stringnew.replace(pos,length,replacement);
00628
00629 removeLine(line_counter);
00630 insertLine(stringnew,line_counter);
00631
00632 replace_all_col = pos-length;
00633 replace_all_line = line_counter;
00634
if (replace_all_col < 0)
00635 {
00636 line_counter--;
00637
00638
if(line_counter >= 0){
00639 string = textLine(line_counter);
00640 replace_all_col = string.length();
00641 }
00642 replace_all_line = line_counter;
00643 }
00644
00645 setModified(
true);
00646 }
00647
else{
00648
00649
00650
if( ! (line == line_counter && pos > col ) ){
00651
00652 setCursorPosition(line_counter, pos + length ,
false );
00653
00654
for(
int l = 0 ; l < length; l++){
00655 cursorLeft(
true);
00656 }
00657
00658 setCursorPosition(line_counter, pos ,
true );
00659 pattern = s_pattern;
00660
00661 last_replace = BACKWARD;
00662 can_replace =
true;
00663
00664
return 1;
00665 }
00666 }
00667 }
00668 }
00669 }
00670
00671
return 0;
00672
00673 }
00674
00675
00676
00677
00678
00680
00681
00682
00683
00684
class KEdFind::KEdFindPrivate
00685 {
00686
public:
00687 KEdFindPrivate(
QWidget *parent ) {
00688 combo =
new KHistoryCombo( parent,
"value" );
00689 combo->setMaxCount( 20 );
00690 }
00691 ~KEdFindPrivate() {
00692
delete combo;
00693 }
00694
00695
KHistoryCombo *combo;
00696 };
00697
00698
00699 KEdFind::KEdFind(
QWidget *parent,
const char *name,
bool modal )
00700 :
KDialogBase( parent,
name, modal, i18n("Find"),
00701 modal ? User1|Cancel : User1|Close, User1, false,
KGuiItem( i18n("&Find"), "
find") )
00702 {
00703 setWFlags( WType_TopLevel );
00704
00705
QWidget *page =
new QWidget(
this );
00706 setMainWidget(page);
00707
QVBoxLayout *topLayout =
new QVBoxLayout( page, 0, spacingHint() );
00708
00709 d =
new KEdFindPrivate( page );
00710
00711
QString text = i18n(
"Find:");
00712
QLabel *
label =
new QLabel( text, page ,
"find" );
00713 topLayout->addWidget( label );
00714
00715 d->combo->setMinimumWidth(fontMetrics().maxWidth()*20);
00716 d->combo->setFocus();
00717
00718 connect(d->combo, SIGNAL(textChanged (
const QString & )),
00719
this,SLOT(textSearchChanged (
const QString & )));
00720
00721 topLayout->addWidget(d->combo);
00722
00723 group =
new QVButtonGroup( i18n(
"Options"), page );
00724 topLayout->addWidget( group );
00725
00726
QHBox* row1 =
new QHBox( group );
00727
00728 text = i18n(
"Case &sensitive");
00729 sensitive =
new QCheckBox( text, row1,
"case");
00730 text = i18n(
"Find &backwards");
00731 direction =
new QCheckBox( text, row1,
"direction" );
00732
00733
00734 enableButton( KDialogBase::User1, !d->combo->currentText().isEmpty() );
00735
00736
if ( !modal )
00737 connect(
this, SIGNAL( closeClicked() ),
this, SLOT( slotCancel() ) );
00738 }
00739
00740 KEdFind::~KEdFind()
00741 {
00742
delete d;
00743 }
00744
00745
void KEdFind::textSearchChanged (
const QString &text )
00746 {
00747 enableButton( KDialogBase::User1, !text.isEmpty() );
00748 }
00749
00750
void KEdFind::slotCancel(
void )
00751 {
00752 emit done();
00753
KDialogBase::slotCancel();
00754 }
00755
00756
void KEdFind::slotUser1(
void )
00757 {
00758
if( !d->combo->currentText().isEmpty() )
00759 {
00760 d->combo->addToHistory( d->combo->currentText() );
00761 emit
search();
00762 }
00763 }
00764
00765
00766 QString KEdFind::getText()
const
00767
{
00768
return d->combo->currentText();
00769 }
00770
00771
00772
00773
void KEdFind::setText(QString string)
00774 {
00775 d->combo->setEditText(string);
00776 d->combo->lineEdit()->selectAll();
00777 }
00778
00779
void KEdFind::setCaseSensitive(
bool b )
00780 {
00781 sensitive->setChecked( b );
00782 }
00783
00784
bool KEdFind::case_sensitive()
const
00785
{
00786
return sensitive->isChecked();
00787 }
00788
00789
void KEdFind::setDirection(
bool b )
00790 {
00791 direction->setChecked( b );
00792 }
00793
00794
bool KEdFind::get_direction()
const
00795
{
00796
return direction->isChecked();
00797 }
00798
00799
KHistoryCombo * KEdFind::searchCombo()
const
00800
{
00801
return d->combo;
00802 }
00803
00804
00805
00807
00808
00809
00810
00811
class KEdReplace::KEdReplacePrivate
00812 {
00813
public:
00814 KEdReplacePrivate( QWidget *parent ) {
00815 searchCombo =
new KHistoryCombo( parent,
"value" );
00816 replaceCombo =
new KHistoryCombo( parent,
"replace_value" );
00817
00818 searchCombo->setMaxCount( 20 );
00819 replaceCombo->setMaxCount( 20 );
00820 }
00821 ~KEdReplacePrivate() {
00822
delete searchCombo;
00823
delete replaceCombo;
00824 }
00825
00826
KHistoryCombo *searchCombo, *replaceCombo;
00827 };
00828
00829 KEdReplace::KEdReplace( QWidget *parent,
const char *name,
bool modal )
00830 :
KDialogBase( parent,
name, modal, i18n("Replace"),
00831 modal ? User3|User2|User1|Cancel : User3|User2|User1|Close,
00832 User3, false,
00833 i18n("Replace &All"), i18n("&Replace"),
KGuiItem( i18n("&Find"), "
find") )
00834 {
00835 setWFlags( WType_TopLevel );
00836
00837 setButtonBoxOrientation( Vertical );
00838
00839
QFrame *page = makeMainWidget();
00840 QVBoxLayout *topLayout =
new QVBoxLayout( page, 0, spacingHint() );
00841
00842 d =
new KEdReplacePrivate( page );
00843
00844 QString text = i18n(
"Find:");
00845 QLabel *
label =
new QLabel( text, page,
"find" );
00846 topLayout->addWidget( label );
00847
00848 d->searchCombo->setMinimumWidth(fontMetrics().maxWidth()*20);
00849 d->searchCombo->setFocus();
00850 topLayout->addWidget(d->searchCombo);
00851
00852 text = i18n(
"Replace with:");
00853
label =
new QLabel( text, page,
"replace" );
00854 topLayout->addWidget( label );
00855
00856 d->replaceCombo->setMinimumWidth(fontMetrics().maxWidth()*20);
00857 topLayout->addWidget(d->replaceCombo);
00858
00859 connect(d->searchCombo, SIGNAL(textChanged (
const QString & )),
00860
this,SLOT(textSearchChanged (
const QString & )));
00861
00862
QButtonGroup *group =
new QButtonGroup( i18n(
"Options"), page );
00863 topLayout->addWidget( group );
00864
00865
QGridLayout *gbox =
new QGridLayout( group, 3, 2, spacingHint() );
00866 gbox->addRowSpacing( 0, fontMetrics().lineSpacing() );
00867
00868 text = i18n(
"Case &sensitive");
00869 sensitive =
new QCheckBox( text, group,
"case");
00870 text = i18n(
"Find &backwards");
00871 direction =
new QCheckBox( text, group,
"direction" );
00872 gbox->addWidget( sensitive, 1, 0 );
00873 gbox->addWidget( direction, 1, 1 );
00874 gbox->setRowStretch( 2, 10 );
00875 }
00876
00877
00878 KEdReplace::~KEdReplace()
00879 {
00880
delete d;
00881 }
00882
00883
void KEdReplace::textSearchChanged (
const QString &text )
00884 {
00885
bool state=text.isEmpty();
00886 enableButton( KDialogBase::User1, !state );
00887 enableButton( KDialogBase::User2, !state );
00888 enableButton( KDialogBase::User3, !state );
00889 }
00890
00891
void KEdReplace::slotCancel(
void )
00892 {
00893 emit done();
00894 d->searchCombo->clearEdit();
00895 d->replaceCombo->clearEdit();
00896
KDialogBase::slotCancel();
00897 }
00898
00899
void KEdReplace::slotClose(
void )
00900 {
00901 slotCancel();
00902 }
00903
00904
void KEdReplace::slotUser1(
void )
00905 {
00906
if( !d->searchCombo->currentText().isEmpty() )
00907 {
00908 d->replaceCombo->addToHistory( d->replaceCombo->currentText() );
00909 emit replaceAll();
00910 }
00911 }
00912
00913
00914
void KEdReplace::slotUser2(
void )
00915 {
00916
if( !d->searchCombo->currentText().isEmpty() )
00917 {
00918 d->replaceCombo->addToHistory( d->replaceCombo->currentText() );
00919 emit
replace();
00920 }
00921 }
00922
00923
void KEdReplace::slotUser3(
void )
00924 {
00925
if( !d->searchCombo->currentText().isEmpty() )
00926 {
00927 d->searchCombo->addToHistory( d->searchCombo->currentText() );
00928 emit
find();
00929 }
00930 }
00931
00932
00933 QString KEdReplace::getText()
00934 {
00935
return d->searchCombo->currentText();
00936 }
00937
00938
00939 QString KEdReplace::getReplaceText()
00940 {
00941
return d->replaceCombo->currentText();
00942 }
00943
00944
00945
00946
void KEdReplace::setText(QString string)
00947 {
00948 d->searchCombo->setEditText(string);
00949 d->searchCombo->lineEdit()->selectAll();
00950 }
00951
00952
00953
bool KEdReplace::case_sensitive()
00954 {
00955
return sensitive->isChecked();
00956 }
00957
00958
00959
bool KEdReplace::get_direction()
00960 {
00961
return direction->isChecked();
00962 }
00963
00964
KHistoryCombo * KEdReplace::searchCombo()
const
00965
{
00966
return d->searchCombo;
00967 }
00968
00969
KHistoryCombo * KEdReplace::replaceCombo()
const
00970
{
00971
return d->replaceCombo;
00972 }
00973
00974
00975 KEdGotoLine::KEdGotoLine( QWidget *parent,
const char *name,
bool modal )
00976 :
KDialogBase( parent,
name, modal, i18n("Go to Line"), modal ? Ok|Cancel : Ok|Close, Ok, false )
00977 {
00978 QWidget *page =
new QWidget(
this );
00979 setMainWidget(page);
00980 QVBoxLayout *topLayout =
new QVBoxLayout( page, 0, spacingHint() );
00981
00982 lineNum =
new KIntNumInput( 1, page);
00983 lineNum->setRange(1, 1000000, 1,
false);
00984 lineNum->setLabel(i18n(
"Go to line:"), AlignVCenter | AlignLeft);
00985
00986 topLayout->addWidget( lineNum );
00987
00988 topLayout->addStretch(10);
00989 lineNum->setFocus();
00990 }
00991
00992
00993
void KEdGotoLine::selected(
int)
00994 {
00995 accept();
00996 }
00997
00998
00999
int KEdGotoLine::getLineNumber()
01000 {
01001
return lineNum->value();
01002 }
01003
01004
01006
01007
01008
01009
01010 void KEdit::spellcheck_start()
01011 {
01012 saved_readonlystate = isReadOnly();
01013 setReadOnly(
true);
01014 }
01015
01016
void KEdit::misspelling (
const QString &word,
const QStringList &,
unsigned int pos)
01017 {
01018
01019
unsigned int l = 0;
01020
unsigned int cnt = 0;
01021 posToRowCol (pos, l, cnt);
01022 setSelection(l, cnt, l, cnt+word.length());
01023
01024
01025
01026
01027
01028
01029
01030
01031 }
01032
01033
01034
void KEdit::corrected (
const QString &originalword,
const QString &newword,
unsigned int pos)
01035 {
01036
01037
01038
01039
unsigned int l = 0;
01040
unsigned int cnt = 0;
01041
01042
if( newword != originalword )
01043 {
01044
posToRowCol (pos, l, cnt);
01045 setSelection(l, cnt, l, cnt+originalword.length());
01046
01047 setReadOnly (
false );
01048 removeSelectedText();
01049
insert(newword);
01050 setReadOnly (
true );
01051 }
01052
else
01053 {
01054
deselect();
01055 }
01056 }
01057
01058 void KEdit::posToRowCol(
unsigned int pos,
unsigned int &line,
unsigned int &col)
01059 {
01060
for (line = 0; line < static_cast<uint>(numLines()) && col <= pos; line++)
01061 {
01062 col += lineLength(line)+1;
01063 }
01064 line--;
01065 col = pos - col + lineLength(line) + 1;
01066 }
01067
01068 void KEdit::spellcheck_stop()
01069 {
01070 deselect();
01071
01072 setReadOnly ( saved_readonlystate);
01073 }
01074
01075 QString KEdit::selectWordUnderCursor( )
01076 {
01077
int parag;
01078
int pos;
01079
01080 getCursorPosition(¶g, &pos);
01081
01082 QString txt = text(parag);
01083
01084
01085
int start = pos;
01086
while( start > 0 )
01087 {
01088
const QChar &ch = txt[start-1];
01089
if (ch.isSpace() || ch.isPunct())
01090
break;
01091 start--;
01092 }
01093
01094
01095
int end = pos;
01096
int len = txt.length();
01097
while(
end < len )
01098 {
01099
const QChar &ch = txt[
end];
01100
if (ch.isSpace() || ch.isPunct())
01101
break;
01102
end++;
01103 }
01104 setSelection(parag, start, parag, end);
01105
return txt.mid(start, end-start);
01106 }
01107
01108 QPopupMenu *
KEdit::createPopupMenu(
const QPoint& pos )
01109 {
01110
enum { IdUndo, IdRedo, IdSep1, IdCut, IdCopy, IdPaste, IdClear, IdSep2, IdSelectAll };
01111
01112
QPopupMenu *menu = QMultiLineEdit::createPopupMenu( pos );
01113
01114
if ( isReadOnly() )
01115 menu->changeItem( menu->idAt(0), SmallIconSet(
"editcopy"), menu->text( menu->idAt(0) ) );
01116
else {
01117
int id = menu->idAt(0);
01118 menu->changeItem(
id - IdUndo, SmallIconSet(
"undo"), menu->text(
id - IdUndo) );
01119 menu->changeItem(
id - IdRedo, SmallIconSet(
"redo"), menu->text(
id - IdRedo) );
01120 menu->changeItem(
id - IdCut, SmallIconSet(
"editcut"), menu->text(
id - IdCut) );
01121 menu->changeItem(
id - IdCopy, SmallIconSet(
"editcopy"), menu->text(
id - IdCopy) );
01122 menu->changeItem(
id - IdPaste, SmallIconSet(
"editpaste"), menu->text(
id - IdPaste) );
01123 menu->changeItem(
id - IdClear, SmallIconSet(
"editclear"), menu->text(
id - IdClear) );
01124 }
01125
01126
return menu;
01127 }