Subversion Repositories Scribus

Rev

Rev 22095 | Rev 22521 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
164 Franz 7
#include "search.h"
8
 
9928 fschmid 9
#include <QHBoxLayout>
10
#include <QGridLayout>
11
#include <QVBoxLayout>
12
#include <QListView>
13
#include <QGroupBox>
14
#include <QCheckBox>
15
#include <QLineEdit>
16
#include <QComboBox>
17
#include <QPushButton>
18
#include <QLabel>
8501 cbradney 19
#include <QPixmap>
9928 fschmid 20
#include <QMessageBox>
3759 cbradney 21
 
19067 craig 22
#include "appmodes.h"
16736 jghali 23
#include "colorcombo.h"
7747 jghali 24
#include "colorlistbox.h"
3759 cbradney 25
#include "commonstrings.h"
26
#include "fontcombo.h"
20185 craig 27
#include "iconmanager.h"
3759 cbradney 28
#include "prefscontext.h"
29
#include "prefsfile.h"
2856 cbradney 30
#include "prefsmanager.h"
16736 jghali 31
#include "scpage.h"
3759 cbradney 32
#include "scribus.h"
16736 jghali 33
#include "scrspinbox.h"
173 Franz 34
#include "shadebutton.h"
16736 jghali 35
#include "styleselect.h"
13576 cbradney 36
#include "ui/storyeditor.h"
3809 cbradney 37
#include "util.h"
12277 cbradney 38
#include "util_text.h"
838 cbradney 39
 
2834 cbradney 40
SearchReplace::SearchReplace( QWidget* parent, ScribusDoc *doc, PageItem* ite, bool mode )
9928 fschmid 41
        : QDialog( parent ),
4118 craig 42
        matchesFound(0)
164 Franz 43
{
18330 jghali 44
        m_item = ite;
45
        m_doc = doc;
46
        m_notFound = false;
47
        m_itemMode = mode;
20441 craig 48
        m_firstMatchPosition = -1;
18330 jghali 49
 
9928 fschmid 50
        setModal(true);
51
        setWindowTitle( tr( "Search/Replace" ) );
20185 craig 52
        setWindowIcon(IconManager::instance()->loadIcon("AppIcon.png"));
18330 jghali 53
 
9928 fschmid 54
        SearchReplaceLayout = new QVBoxLayout( this );
55
        SearchReplaceLayout->setMargin(10);
56
        SearchReplaceLayout->setSpacing(5);
57
        SelLayout = new QHBoxLayout;
58
        SelLayout->setMargin(0);
59
        SelLayout->setSpacing(5);
60
        Search = new QGroupBox( this );
356 Franz 61
        Search->setTitle( tr( "Search for:" ) );
9928 fschmid 62
        SearchLayout = new QGridLayout( Search );
63
        SearchLayout->setMargin(5);
64
        SearchLayout->setSpacing(2);
356 Franz 65
        SearchLayout->setAlignment( Qt::AlignTop );
9928 fschmid 66
        SText = new QCheckBox( Search );
356 Franz 67
        SText->setText( tr( "Text" ) );
68
        SearchLayout->addWidget( SText, 0, 0 );
9928 fschmid 69
        SStyle = new QCheckBox( Search );
16785 jghali 70
        SStyle->setText( tr( "Style" ) );
356 Franz 71
        SearchLayout->addWidget( SStyle, 1, 0 );
16785 jghali 72
        SAlign = new QCheckBox( Search );
73
        SAlign->setText( tr( "Alignment" ) );
74
        SearchLayout->addWidget( SAlign, 2, 0 );
9928 fschmid 75
        SFont = new QCheckBox( Search );
356 Franz 76
        SFont->setText( tr( "Font" ) );
16785 jghali 77
        SearchLayout->addWidget( SFont, 3, 0 );
9928 fschmid 78
        SSize = new QCheckBox( Search );
356 Franz 79
        SSize->setText( tr( "Font Size" ) );
16785 jghali 80
        SearchLayout->addWidget( SSize, 4, 0 );
9928 fschmid 81
        SEffect = new QCheckBox( Search );
356 Franz 82
        SEffect->setText( tr( "Font Effects" ) );
16785 jghali 83
        SearchLayout->addWidget( SEffect, 5, 0 );
10581 cbradney 84
        SFill = new QCheckBox( Search);
356 Franz 85
        SFill->setText( tr( "Fill Color" ) );
16785 jghali 86
        SearchLayout->addWidget( SFill, 6, 0 );
10581 cbradney 87
        SFillS = new QCheckBox( Search );
356 Franz 88
        SFillS->setText( tr( "Fill Shade" ) );
16785 jghali 89
        SearchLayout->addWidget( SFillS, 7, 0 );
9928 fschmid 90
        SStroke = new QCheckBox( Search );
356 Franz 91
        SStroke->setText( tr( "Stroke Color" ) );
16785 jghali 92
        SearchLayout->addWidget( SStroke, 8, 0 );
9928 fschmid 93
        SStrokeS = new QCheckBox( Search );
356 Franz 94
        SStrokeS->setText( tr( "Stroke Shade" ) );
16785 jghali 95
        SearchLayout->addWidget( SStrokeS, 9, 0 );
9928 fschmid 96
        STextVal = new QLineEdit( Search );
356 Franz 97
        STextVal->setEnabled(false);
98
        SearchLayout->addWidget( STextVal, 0, 1 );
9928 fschmid 99
        SStyleVal = new QComboBox( Search );
356 Franz 100
        SStyleVal->setEditable(false);
16785 jghali 101
        for (int x = 0; x < doc->paragraphStyles().count(); ++x)
102
                SStyleVal->addItem(doc->paragraphStyles()[x].name());
8642 tsoots 103
        QListView *tmpView = dynamic_cast<QListView*>(SStyleVal->view()); Q_ASSERT(tmpView);
104
        int tmpWidth = tmpView->sizeHintForColumn(0);
105
        if (tmpWidth > 0)
106
                tmpView->setMinimumWidth(tmpWidth + 24);
9928 fschmid 107
        SStyleVal->setCurrentIndex(findParagraphStyle(doc, doc->currentStyle));
356 Franz 108
        SStyleVal->setEnabled(false);
109
        SearchLayout->addWidget( SStyleVal, 1, 1 );
16785 jghali 110
        SAlignVal = new QComboBox( Search );
111
        SAlignVal->setEditable(false);
112
        QString tmp_sty[] = { tr("Left"), tr("Center"), tr("Right"), tr("Block"), tr("Forced")};
113
        size_t ar_sty = sizeof(tmp_sty) / sizeof(*tmp_sty);
114
        for (uint a = 0; a < ar_sty; ++a)
115
                SAlignVal->addItem( tmp_sty[a] );
116
        tmpView = dynamic_cast<QListView*>(SAlignVal->view()); Q_ASSERT(tmpView);
117
        tmpWidth = tmpView->sizeHintForColumn(0);
118
        if (tmpWidth > 0)
119
                tmpView->setMinimumWidth(tmpWidth + 24);
120
        SAlignVal->setEnabled(false);
121
        SearchLayout->addWidget( SAlignVal, 2, 1 );
2834 cbradney 122
        SFontVal = new FontCombo(Search);
356 Franz 123
        SFontVal->setMaximumSize(190, 30);
10648 fschmid 124
        setCurrentComboItem(SFontVal, doc->currentStyle.charStyle().font().scName());
356 Franz 125
        SFontVal->setEnabled(false);
16785 jghali 126
        SearchLayout->addWidget( SFontVal, 3, 1 );
15964 craig 127
        SSizeVal = new ScrSpinBox( 0.5, 2048, Search, 0 );
5559 avox 128
        SSizeVal->setValue( doc->currentStyle.charStyle().fontSize() / 10.0 );
356 Franz 129
        SSizeVal->setEnabled(false);
16785 jghali 130
        SearchLayout->addWidget( SSizeVal, 4, 1 );
356 Franz 131
        SEffVal = new StyleSelect( Search );
132
        SEffVal->setStyle(0);
133
        SEffVal->setEnabled(false);
16785 jghali 134
        SearchLayout->addWidget( SEffVal, 5, 1, Qt::AlignLeft );
9928 fschmid 135
        SFillVal = new ColorCombo( Search );
356 Franz 136
        SFillVal->setEditable(false);
21664 jghali 137
        SFillVal->setPixmapType(ColorCombo::fancyPixmaps);
21855 jghali 138
        SFillVal->setColors(doc->PageColors, true);
9874 avox 139
        SFillVal->setMinimumWidth(SFillVal->view()->maximumViewportSize().width() + 24);
10648 fschmid 140
        setCurrentComboItem(SFillVal, doc->currentStyle.charStyle().fillColor());
356 Franz 141
        SFillVal->setEnabled(false);
16785 jghali 142
        SearchLayout->addWidget( SFillVal, 6, 1 );
356 Franz 143
        SFillSVal = new ShadeButton(Search);
144
        SFillSVal->setEnabled(false);
16785 jghali 145
        SearchLayout->addWidget( SFillSVal, 7, 1, Qt::AlignLeft );
9928 fschmid 146
        SStrokeVal = new ColorCombo( Search );
356 Franz 147
        SStrokeVal->setEditable(false);
21664 jghali 148
        SStrokeVal->setPixmapType(ColorCombo::fancyPixmaps);
21855 jghali 149
        SStrokeVal->setColors(doc->PageColors, true);
9874 avox 150
        SStrokeVal->view()->setMinimumWidth(SStrokeVal->view()->maximumViewportSize().width() + 24);
10648 fschmid 151
        setCurrentComboItem(SStrokeVal, doc->currentStyle.charStyle().strokeColor());
356 Franz 152
        SStrokeVal->setEnabled(false);
16785 jghali 153
        SearchLayout->addWidget( SStrokeVal, 8, 1 );
356 Franz 154
        SStrokeSVal =  new ShadeButton(Search);
155
        SStrokeSVal->setEnabled(false);
16785 jghali 156
        SearchLayout->addWidget( SStrokeSVal, 9, 1, Qt::AlignLeft );
356 Franz 157
        SelLayout->addWidget( Search );
164 Franz 158
 
9928 fschmid 159
        Replace = new QGroupBox( this );
356 Franz 160
        Replace->setTitle( tr( "Replace with:" ) );
9928 fschmid 161
        ReplaceLayout = new QGridLayout( Replace );
162
        ReplaceLayout->setSpacing( 2 );
163
        ReplaceLayout->setMargin( 5 );
356 Franz 164
        ReplaceLayout->setAlignment( Qt::AlignTop );
9928 fschmid 165
        RText = new QCheckBox( Replace );
356 Franz 166
        RText->setText( tr( "Text" ) );
167
        ReplaceLayout->addWidget( RText, 0, 0 );
9928 fschmid 168
        RStyle = new QCheckBox( Replace );
16785 jghali 169
        RStyle->setText( tr( "Style" ) );
356 Franz 170
        ReplaceLayout->addWidget( RStyle, 1, 0 );
16785 jghali 171
        RAlign = new QCheckBox( Replace );
172
        RAlign->setText( tr( "Alignment" ) );
173
        ReplaceLayout->addWidget( RAlign, 2, 0 );
9928 fschmid 174
        RFont = new QCheckBox( Replace );
356 Franz 175
        RFont->setText( tr( "Font" ) );
16785 jghali 176
        ReplaceLayout->addWidget( RFont, 3, 0 );
9928 fschmid 177
        RSize = new QCheckBox( Replace );
356 Franz 178
        RSize->setText( tr( "Font Size" ) );
16785 jghali 179
        ReplaceLayout->addWidget( RSize, 4, 0 );
9928 fschmid 180
        REffect = new QCheckBox( Replace );
356 Franz 181
        REffect->setText( tr( "Font Effects" ) );
16785 jghali 182
        ReplaceLayout->addWidget( REffect, 5, 0 );
9928 fschmid 183
        RFill = new QCheckBox( Replace );
356 Franz 184
        RFill->setText( tr( "Fill Color" ) );
16785 jghali 185
        ReplaceLayout->addWidget( RFill, 6, 0 );
9928 fschmid 186
        RFillS = new QCheckBox( Replace );
356 Franz 187
        RFillS->setText( tr( "Fill Shade" ) );
16785 jghali 188
        ReplaceLayout->addWidget( RFillS, 7, 0 );
9928 fschmid 189
        RStroke = new QCheckBox( Replace );
356 Franz 190
        RStroke->setText( tr( "Stroke Color" ) );
16785 jghali 191
        ReplaceLayout->addWidget( RStroke, 8, 0 );
9928 fschmid 192
        RStrokeS = new QCheckBox( Replace );
356 Franz 193
        RStrokeS->setText( tr( "Stroke Shade" ) );
16785 jghali 194
        ReplaceLayout->addWidget( RStrokeS, 9, 0 );
9928 fschmid 195
        RTextVal = new QLineEdit( Replace );
356 Franz 196
        RTextVal->setEnabled(false);
197
        ReplaceLayout->addWidget( RTextVal, 0, 1 );
9928 fschmid 198
        RStyleVal = new QComboBox( Replace );
356 Franz 199
        RStyleVal->setEditable(false);
16785 jghali 200
        for (int x = 0; x < doc->paragraphStyles().count(); ++x)
201
                RStyleVal->addItem(doc->paragraphStyles()[x].name());
8642 tsoots 202
        tmpView = dynamic_cast<QListView*>(RStyleVal->view()); Q_ASSERT(tmpView);
203
        tmpWidth = tmpView->sizeHintForColumn(0);
204
        if (tmpWidth > 0)
205
                tmpView->setMinimumWidth(tmpWidth + 24);
9928 fschmid 206
        RStyleVal->setCurrentIndex(findParagraphStyle(doc, doc->currentStyle));
356 Franz 207
        RStyleVal->setEnabled(false);
208
        ReplaceLayout->addWidget( RStyleVal, 1, 1 );
16785 jghali 209
        RAlignVal = new QComboBox( Replace );
210
        RAlignVal->setEditable(false);
211
        for (uint a = 0; a < ar_sty; ++a)
212
                RAlignVal->addItem(tmp_sty[a]);
213
        tmpView = dynamic_cast<QListView*>(RAlignVal->view()); Q_ASSERT(tmpView);
214
        tmpWidth = tmpView->sizeHintForColumn(0);
215
        if (tmpWidth > 0)
216
                tmpView->setMinimumWidth(tmpWidth + 24);
217
        RAlignVal->setEnabled(false);
218
        ReplaceLayout->addWidget( RAlignVal, 2, 1 );
2834 cbradney 219
        RFontVal = new FontCombo(Replace);
356 Franz 220
        RFontVal->setMaximumSize(190, 30);
10648 fschmid 221
        setCurrentComboItem(RFontVal, doc->currentStyle.charStyle().font().scName());
356 Franz 222
        RFontVal->setEnabled(false);
16785 jghali 223
        ReplaceLayout->addWidget( RFontVal, 3, 1 );
15964 craig 224
        RSizeVal = new ScrSpinBox( 0.5, 2048, Replace, 0 );
5559 avox 225
        RSizeVal->setValue( doc->currentStyle.charStyle().fontSize() / 10.0 );
356 Franz 226
        RSizeVal->setEnabled(false);
16785 jghali 227
        ReplaceLayout->addWidget( RSizeVal, 4, 1 );
356 Franz 228
        REffVal = new StyleSelect( Replace );
229
        REffVal->setStyle(0);
230
        REffVal->setEnabled(false);
16785 jghali 231
        ReplaceLayout->addWidget( REffVal, 5, 1, Qt::AlignLeft );
10469 cbradney 232
        RFillVal = new ColorCombo( true, Replace );
356 Franz 233
        RFillVal->setEditable(false);
21664 jghali 234
        RFillVal->setPixmapType(ColorCombo::fancyPixmaps);
21855 jghali 235
        RFillVal->setColors(doc->PageColors, true);
9874 avox 236
        RFillVal->view()->setMinimumWidth(RFillVal->view()->maximumViewportSize().width() + 24);
10648 fschmid 237
        setCurrentComboItem(RFillVal, doc->currentStyle.charStyle().fillColor());
356 Franz 238
        RFillVal->setEnabled(false);
16785 jghali 239
        ReplaceLayout->addWidget( RFillVal, 6, 1 );
356 Franz 240
        RFillSVal = new ShadeButton(Replace);
241
        RFillSVal->setEnabled(false);
16785 jghali 242
        ReplaceLayout->addWidget( RFillSVal, 7, 1, Qt::AlignLeft );
10469 cbradney 243
        RStrokeVal = new ColorCombo( true, Replace );
356 Franz 244
        RStrokeVal->setEditable(false);
21664 jghali 245
        RStrokeVal->setPixmapType(ColorCombo::fancyPixmaps);
21855 jghali 246
        RStrokeVal->setColors(doc->PageColors, true);
9874 avox 247
        RStrokeVal->view()->setMinimumWidth(RStrokeVal->view()->maximumViewportSize().width() + 24);
10648 fschmid 248
        setCurrentComboItem(RStrokeVal, doc->currentStyle.charStyle().strokeColor());
356 Franz 249
        RStrokeVal->setEnabled(false);
16785 jghali 250
        ReplaceLayout->addWidget( RStrokeVal, 8, 1 );
356 Franz 251
        RStrokeSVal = new ShadeButton(Replace);;
252
        RStrokeSVal->setEnabled(false);
16785 jghali 253
        ReplaceLayout->addWidget( RStrokeSVal, 9, 1, Qt::AlignLeft );
356 Franz 254
        SelLayout->addWidget( Replace );
255
        SearchReplaceLayout->addLayout( SelLayout );
164 Franz 256
 
9928 fschmid 257
        OptsLayout = new QHBoxLayout;
258
        OptsLayout->setSpacing( 5 );
259
        OptsLayout->setMargin( 0 );
260
        Word = new QCheckBox( tr( "&Whole Word" ), this );
189 Franz 261
        if (mode)
262
                Word->setEnabled(false);
263
        OptsLayout->addWidget( Word );
22127 jghali 264
        CaseIgnore = new QCheckBox( tr( "&Ignore Case, Diacritics and Kashida" ), this );
189 Franz 265
        if (mode)
266
                CaseIgnore->setEnabled(false);
267
        OptsLayout->addWidget( CaseIgnore );
268
        SearchReplaceLayout->addLayout( OptsLayout );
173 Franz 269
 
9928 fschmid 270
        ButtonsLayout = new QHBoxLayout;
271
        ButtonsLayout->setSpacing( 5 );
272
        ButtonsLayout->setMargin( 0 );
273
        DoSearch = new QPushButton( tr( "&Search" ), this );
189 Franz 274
        DoSearch->setDefault( true );
275
        ButtonsLayout->addWidget( DoSearch );
9928 fschmid 276
        DoReplace = new QPushButton( tr( "&Replace" ), this );
189 Franz 277
        DoReplace->setEnabled(false);
278
        ButtonsLayout->addWidget( DoReplace );
9928 fschmid 279
        AllReplace = new QPushButton( tr( "Replace &All" ), this );
189 Franz 280
        AllReplace->setEnabled(false);
281
        ButtonsLayout->addWidget( AllReplace );
9928 fschmid 282
        clearButton = new QPushButton( tr("C&lear"), this);
843 tsoots 283
        ButtonsLayout->addWidget(clearButton);
9928 fschmid 284
        Leave = new QPushButton( tr( "&Close" ), this );
189 Franz 285
        ButtonsLayout->addWidget( Leave );
286
        SearchReplaceLayout->addLayout( ButtonsLayout );
164 Franz 287
 
189 Franz 288
        resize(minimumSizeHint());
164 Franz 289
 
189 Franz 290
 // signals and slots connections
843 tsoots 291
        connect( Leave, SIGNAL( clicked() ), this, SLOT( writePrefs() ) );
189 Franz 292
        connect( DoSearch, SIGNAL( clicked() ), this, SLOT( slotSearch() ) );
293
        connect( DoReplace, SIGNAL( clicked() ), this, SLOT( slotReplace() ) );
294
        connect( AllReplace, SIGNAL( clicked() ), this, SLOT( slotReplaceAll() ) );
20569 jghali 295
        connect( STextVal, SIGNAL( textChanged(QString) ), this, SLOT( updateSearchButtonState() ) );
356 Franz 296
        connect( SText, SIGNAL( clicked() ), this, SLOT( enableTxSearch() ) );
297
        connect( SStyle, SIGNAL( clicked() ), this, SLOT( enableStyleSearch() ) );
16785 jghali 298
        connect( SAlign, SIGNAL( clicked() ), this, SLOT( enableAlignSearch() ) );
356 Franz 299
        connect( SFont, SIGNAL( clicked() ), this, SLOT( enableFontSearch() ) );
300
        connect( SSize, SIGNAL( clicked() ), this, SLOT( enableSizeSearch() ) );
301
        connect( SEffect, SIGNAL( clicked() ), this, SLOT( enableEffSearch() ) );
302
        connect( SFill, SIGNAL( clicked() ), this, SLOT( enableFillSearch() ) );
303
        connect( SFillS, SIGNAL( clicked() ), this, SLOT( enableFillSSearch() ) );
304
        connect( SStrokeS, SIGNAL( clicked() ), this, SLOT( enableStrokeSSearch() ) );
305
        connect( SStroke, SIGNAL( clicked() ), this, SLOT( enableStrokeSearch() ) );
306
        connect( RText, SIGNAL( clicked() ), this, SLOT( enableTxReplace() ) );
307
        connect( RStyle, SIGNAL( clicked() ), this, SLOT( enableStyleReplace() ) );
16785 jghali 308
        connect( RAlign, SIGNAL( clicked() ), this, SLOT( enableAlignReplace() ) );
356 Franz 309
        connect( RFont, SIGNAL( clicked() ), this, SLOT( enableFontReplace() ) );
310
        connect( RSize, SIGNAL( clicked() ), this, SLOT( enableSizeReplace() ) );
311
        connect( REffect, SIGNAL( clicked() ), this, SLOT( enableEffReplace() ) );
312
        connect( RFill, SIGNAL( clicked() ), this, SLOT( enableFillReplace() ) );
313
        connect( RStroke, SIGNAL( clicked() ), this, SLOT( enableStrokeReplace() ) );
314
        connect( RFillS, SIGNAL( clicked() ), this, SLOT( enableFillSReplace() ) );
315
        connect( RStrokeS, SIGNAL( clicked() ), this, SLOT( enableStrokeSReplace() ) );
843 tsoots 316
        connect(clearButton, SIGNAL(clicked()), this, SLOT(clear()));
18524 avox 317
 
12208 cbradney 318
        //tooltips
319
        DoSearch->setToolTip( tr( "Search for text or formatting in the current text" ) );
320
        DoReplace->setToolTip( tr( "Replace the searched for formatting with the replacement values" ) );
321
        AllReplace->setToolTip( tr( "Replace all found instances" ) );
322
        clearButton->setToolTip( tr( "Clear all search and replace options" ) );
323
        Leave->setToolTip( tr( "Close search and replace" ) );
164 Franz 324
 
189 Franz 325
 // tab order
356 Franz 326
        setTabOrder( SText, SStyle );
327
        setTabOrder( SStyle, SFont );
328
        setTabOrder( SFont, SSize );
329
        setTabOrder( SSize, SEffect );
330
        setTabOrder( SEffect, SFill );
331
        setTabOrder( SFill, SStroke );
332
        setTabOrder( SStroke, STextVal );
333
        setTabOrder( STextVal, SStyleVal );
16785 jghali 334
        setTabOrder( SStyleVal, SAlignVal );
335
        setTabOrder( SAlignVal, SFontVal );
356 Franz 336
        setTabOrder( SFontVal, SSizeVal );
337
        setTabOrder( SSizeVal, SEffVal );
338
        setTabOrder( SEffVal, SFillVal );
339
        setTabOrder( SFillVal, SStrokeVal );
340
        setTabOrder( SStrokeVal, RText );
341
        setTabOrder( RText, RStyle );
342
        setTabOrder( RStyle, RFont );
343
        setTabOrder( RFont, RSize );
344
        setTabOrder( RSize, REffect );
345
        setTabOrder( REffect, RFill );
346
        setTabOrder( RFill, RStroke );
347
        setTabOrder( RStroke, RTextVal );
348
        setTabOrder( RTextVal, RStyleVal );
16785 jghali 349
        setTabOrder( RStyleVal, RAlignVal );
350
        setTabOrder( RAlignVal, RFontVal );
356 Franz 351
        setTabOrder( RFontVal, RSizeVal );
352
        setTabOrder( RSizeVal, REffVal );
353
        setTabOrder( REffVal, RFillVal );
354
        setTabOrder( RFillVal, RStrokeVal );
355
        setTabOrder( RStrokeVal, Word );
356
        setTabOrder( Word, CaseIgnore );
357
        setTabOrder( CaseIgnore, DoSearch );
358
        setTabOrder( DoSearch, DoReplace );
359
        setTabOrder( DoReplace, AllReplace );
360
        setTabOrder( AllReplace, Leave );
4729 subik 361
 
18330 jghali 362
        m_prefs = PrefsManager::instance()->prefsFile->getContext("SearchReplace");
843 tsoots 363
        readPrefs();
164 Franz 364
}
365
 
366
void SearchReplace::slotSearch()
367
{
18330 jghali 368
//      if (m_itemMode)
369
//              m_doc->view()->slotDoCurs(false);
357 Franz 370
        slotDoSearch();
18330 jghali 371
        if (m_itemMode)
189 Franz 372
        {
18330 jghali 373
//              m_doc->view()->slotDoCurs(true);
374
                m_item->update();
189 Franz 375
        }
169 Franz 376
}
377
 
378
void SearchReplace::slotDoSearch()
379
{
18330 jghali 380
        int maxChar = m_item->itemText.length() - 1;
164 Franz 381
        DoReplace->setEnabled(false);
382
        AllReplace->setEnabled(false);
18330 jghali 383
        if (m_itemMode)
356 Franz 384
        {
18330 jghali 385
                m_item->itemText.deselectAll();
386
                m_item->HasSel = false;
356 Franz 387
        }
164 Franz 388
        QString fCol = "";
389
        QString sCol = "";
390
        QString sFont = "";
391
        QString sText = "";
18330 jghali 392
        m_notFound = true;
164 Franz 393
        int sStyle = 0;
16785 jghali 394
        int sAlign = 0;
164 Franz 395
        int sSize = 0;
167 Franz 396
        int sEff = 0;
173 Franz 397
        int sFillSh = 100;
398
        int sStrokeSh = 100;
20569 jghali 399
        bool searchForReplace = false;
164 Franz 400
        bool rep = false;
401
        bool found = true;
167 Franz 402
        if ((RFill->isChecked()) || (RStroke->isChecked()) || (RStyle->isChecked()) || (RFont->isChecked())
173 Franz 403
                || (RStrokeS->isChecked()) || (RFillS->isChecked()) || (RSize->isChecked()) || (RText->isChecked())
20569 jghali 404
                || (REffect->isChecked())  || (RAlign->isChecked()))
164 Franz 405
                rep = true;
20569 jghali 406
        if ((SFill->isChecked()) || (SStroke->isChecked()) || (SStyle->isChecked()) || (SFont->isChecked())
407
                        || (SStrokeS->isChecked()) || (SFillS->isChecked()) || (SSize->isChecked()) || (SText->isChecked())
408
                        || (SEffect->isChecked())  || (SAlign->isChecked()))
409
                searchForReplace = true;
164 Franz 410
        if (SText->isChecked())
411
                sText = STextVal->text();
412
        if (CaseIgnore->isChecked())
10398 cbradney 413
                sText = sText.toLower();
167 Franz 414
        if (SEffect->isChecked())
415
                sEff = SEffVal->getStyle();
164 Franz 416
        if (SFill->isChecked())
417
                fCol = SFillVal->currentText();
173 Franz 418
        if (SFillS->isChecked())
419
                sFillSh = SFillSVal->getValue();
164 Franz 420
        if (SStroke->isChecked())
421
                sCol = SStrokeVal->currentText();
173 Franz 422
        if (SStrokeS->isChecked())
423
                sStrokeSh = SStrokeSVal->getValue();
164 Franz 424
        if (SFont->isChecked())
425
                sFont = SFontVal->currentText();
426
        if (SStyle->isChecked())
10585 fschmid 427
                sStyle = SStyleVal->currentIndex();
16785 jghali 428
        if (SAlign->isChecked())
429
                sAlign = SAlignVal->currentIndex();
164 Franz 430
        if (SSize->isChecked())
431
                sSize = qRound(SSizeVal->value() * 10);
432
        if (sText.length() > 0)
433
                found = false;
17541 jghali 434
 
18330 jghali 435
        uint as = m_item->itemText.cursorPosition();
436
        m_replStart = as;
22127 jghali 437
        int a, textLen(0);
18330 jghali 438
        if (m_itemMode)
168 Franz 439
        {
17541 jghali 440
                Qt::CaseSensitivity cs = Qt::CaseSensitive;
441
                if (CaseIgnore->isChecked())
442
                        cs = Qt::CaseInsensitive;
443
 
18330 jghali 444
                for (a = as; a < m_item->itemText.length(); ++a)
164 Franz 445
                {
17541 jghali 446
                        found = true;
356 Franz 447
                        if (SText->isChecked())
448
                        {
22127 jghali 449
                                a = m_item->itemText.indexOf(sText, a, cs, &textLen);
17541 jghali 450
                                found = (a >= 0);
451
                                if (!found) break;
452
 
22127 jghali 453
                                if (Word->isChecked() && (a > 0) && m_item->itemText.text(a - 1).isLetterOrNumber())
17541 jghali 454
                                        found = false;
455
                                if (Word->isChecked())
456
                                {
22127 jghali 457
                                        int lastChar = qMin(a + textLen, maxChar);
458
                                        found = ((lastChar == maxChar) || !m_item->itemText.text(lastChar).isLetterOrNumber());
17541 jghali 459
                                }
460
                                if (!found) continue;
356 Franz 461
                        }
462
                        if (SSize->isChecked())
167 Franz 463
                        {
18330 jghali 464
                                if (m_item->itemText.charStyle(a).fontSize() != sSize)
356 Franz 465
                                        found = false;
167 Franz 466
                        }
356 Franz 467
                        if (SFont->isChecked())
168 Franz 468
                        {
18330 jghali 469
                                if (m_item->itemText.charStyle(a).font().scName() != sFont)
356 Franz 470
                                        found = false;
168 Franz 471
                        }
18524 avox 472
 
356 Franz 473
                        if (SStyle->isChecked())
168 Franz 474
                        {
18330 jghali 475
                                if (m_item->itemText.paragraphStyle(a).parent() != m_doc->paragraphStyles()[sStyle].name())
16785 jghali 476
                                        found = false;
356 Franz 477
                        }
18524 avox 478
 
16785 jghali 479
                        if (SAlign->isChecked())
480
                        {
18330 jghali 481
                                if (m_item->itemText.paragraphStyle(a).alignment() != sAlign)
16785 jghali 482
                                        found = false;
483
                        }
356 Franz 484
                        if (SStroke->isChecked())
485
                        {
18330 jghali 486
                                if (m_item->itemText.charStyle(a).strokeColor() != sCol)
356 Franz 487
                                        found = false;
488
                        }
489
                        if (SStrokeS->isChecked())
490
                        {
18330 jghali 491
                                if (m_item->itemText.charStyle(a).strokeShade() != sStrokeSh)
356 Franz 492
                                        found = false;
493
                        }
494
                        if (SFillS->isChecked())
495
                        {
18330 jghali 496
                                if (m_item->itemText.charStyle(a).fillShade() != sFillSh)
356 Franz 497
                                        found = false;
498
                        }
499
                        if (SEffect->isChecked())
16785 jghali 500
                        {
18987 avox 501
                                if ((m_item->itemText.charStyle(a).effects() & ScStyle_UserStyles) != sEff)
356 Franz 502
                                        found = false;
16785 jghali 503
                        }
356 Franz 504
                        if (SFill->isChecked())
4729 subik 505
                        {
18330 jghali 506
                                if (m_item->itemText.charStyle(a).fillColor() != fCol)
356 Franz 507
                                        found = false;
508
                        }
20569 jghali 509
                        if (found && searchForReplace)
356 Franz 510
                        {
22127 jghali 511
                                m_item->itemText.select(a, textLen);
18330 jghali 512
                                m_item->HasSel = true;
356 Franz 513
                                if (rep)
168 Franz 514
                                {
356 Franz 515
                                        DoReplace->setEnabled(true);
516
                                        AllReplace->setEnabled(true);
517
                                }
22127 jghali 518
                                m_item->itemText.setCursorPosition(a + textLen);
17541 jghali 519
 
520
                                if (!SText->isChecked())
356 Franz 521
                                        break;
17541 jghali 522
 
18330 jghali 523
                                m_replStart = a;
17541 jghali 524
                                break;
356 Franz 525
                        }
526
                        else
527
                        {
528
                                if (SText->isChecked())
529
                                {
18330 jghali 530
                                        for (int xx = m_replStart; xx < a+1; ++xx)
531
                                                m_item->itemText.select(qMin(xx, maxChar), 1, false);
532
                                        m_item->HasSel = false;
168 Franz 533
                                }
534
                        }
535
                }
18330 jghali 536
                if ((!found) || (a == m_item->itemText.length()))
168 Franz 537
                {
18330 jghali 538
                        m_doc->DoDrawing = true;
539
                        m_item->update();
356 Franz 540
                        DoReplace->setEnabled(false);
541
                        AllReplace->setEnabled(false);
19605 jghali 542
                        ScMessageBox::information(this, tr("Search/Replace"), tr("Search finished"));
18330 jghali 543
                        m_item->itemText.setCursorPosition(0);
544
                        m_notFound = false;
356 Franz 545
                }
546
        }
18330 jghali 547
        else if (m_doc->scMW()->CurrStED != NULL)
356 Franz 548
        {
17654 jghali 549
                found = false;
18330 jghali 550
                SEditor* storyTextEdit = m_doc->scMW()->CurrStED->Editor;
17654 jghali 551
                if (storyTextEdit->StyledText.length() == 0)
552
                        return;
553
 
22127 jghali 554
                QTextCursor cursor = storyTextEdit->textCursor();
555
                int position  = cursor.position();
556
                StoryText& styledText = storyTextEdit->StyledText;
557
                int firstChar = -1, lastChar = styledText.length();
17654 jghali 558
                if (SText->isChecked())
356 Franz 559
                {
22127 jghali 560
                        Qt::CaseSensitivity cs = Qt::CaseSensitive;
561
                        if (CaseIgnore->isChecked())
562
                                cs = Qt::CaseInsensitive;
563
 
564
                        for (int i = position; i < styledText.length(); ++i)
164 Franz 565
                        {
22127 jghali 566
                                i = styledText.indexOf(sText, i, cs, &textLen);
567
                                found = (i >= 0);
20441 craig 568
                                if (!found)
569
                                        break;
22127 jghali 570
 
571
                                if (Word->isChecked() && (i > 0) && styledText.text(i - 1).isLetterOrNumber())
572
                                        found = false;
573
                                if (Word->isChecked())
356 Franz 574
                                {
22127 jghali 575
                                        int lastChar = qMin(i + textLen, maxChar);
576
                                        found = ((lastChar == maxChar) || !styledText.text(lastChar).isLetterOrNumber());
577
                                }
578
                                if (!found) continue;
579
 
580
                                int selStart = i;
581
                                for (int ap = 0; ap < textLen; ++ap)
582
                                {
17654 jghali 583
                                        const ParagraphStyle& parStyle = storyTextEdit->StyledText.paragraphStyle(selStart + ap);
584
                                        const CharStyle& charStyle = storyTextEdit->StyledText.charStyle(selStart + ap);
585
                                        if (SSize->isChecked() && (charStyle.fontSize() != sSize))
586
                                                found = false;
587
                                        if (SFont->isChecked() && (charStyle.font().scName() != sFont))
588
                                                found = false;
18330 jghali 589
                                        if (SStyle->isChecked() && (parStyle.parent() != m_doc->paragraphStyles()[sStyle].name()))
17654 jghali 590
                                                found = false;
591
                                        if (SAlign->isChecked() && (parStyle.alignment() != sAlign))
592
                                                found = false;
593
                                        if (SFill->isChecked() && (charStyle.fillColor() != fCol))
594
                                                found = false;
595
                                        if (SStroke->isChecked() && (charStyle.strokeColor() != sCol))
596
                                                found = false;
597
                                        if (SStrokeS->isChecked() && (charStyle.strokeShade() != sStrokeSh))
598
                                                found = false;
599
                                        if (SFillS->isChecked() && (charStyle.fillShade() != sFillSh))
600
                                                found = false;
18987 avox 601
                                        if (SEffect->isChecked() && ((charStyle.effects() & ScStyle_UserStyles) != sEff))
17654 jghali 602
                                                found = false;
11647 jghali 603
                                }
22127 jghali 604
 
605
                                if (found)
606
                                {
607
                                        firstChar = i;
608
                                        lastChar = i + textLen;
609
                                        break;
610
                                }
611
                        }
17654 jghali 612
                }
613
                else
614
                {
615
                        for (int i = position; i < styledText.length(); ++i)
616
                        {
617
                                found = true;
618
                                const ParagraphStyle& parStyle = storyTextEdit->StyledText.paragraphStyle(i);
619
                                const CharStyle& charStyle = styledText.charStyle(i);
620
                                if (SSize->isChecked() && (charStyle.fontSize() != sSize))
621
                                        found = false;
622
                                if (SFont->isChecked() && (charStyle.font().scName() != sFont))
623
                                        found = false;
18330 jghali 624
                                if (SStyle->isChecked() && (parStyle.parent() != m_doc->paragraphStyles()[sStyle].name()))
17654 jghali 625
                                        found = false;
626
                                if (SAlign->isChecked() && (parStyle.alignment() != sAlign))
627
                                        found = false;
628
                                if (SFill->isChecked() && (charStyle.fillColor() != fCol))
629
                                        found = false;
630
                                if (SFillS->isChecked() && (charStyle.fillShade() != sFillSh))
631
                                        found = false;
632
                                if (SStroke->isChecked() && (charStyle.strokeColor() != sCol))
633
                                        found = false;
634
                                if (SStrokeS->isChecked() && (charStyle.strokeShade() != sStrokeSh))
635
                                        found = false;
18987 avox 636
                                if (SEffect->isChecked() && ((charStyle.effects() & ScStyle_UserStyles) != sEff))
17654 jghali 637
                                        found = false;
638
                                if (found && (firstChar < 0))
639
                                        firstChar = i;
640
                                else if ((firstChar >= 0) && !found)
11647 jghali 641
                                {
17654 jghali 642
                                        lastChar = i;
643
                                        break;
356 Franz 644
                                }
17654 jghali 645
                                // When searching paragraph styles break at the end of each found paragraph
646
                                if (SStyle->isChecked() && (firstChar >= 0) && styledText.text(i) == SpecialChars::PARSEP)
357 Franz 647
                                {
17654 jghali 648
                                        lastChar = i;
649
                                        break;
357 Franz 650
                                }
168 Franz 651
                        }
164 Franz 652
                }
22127 jghali 653
                found = (firstChar >= 0);
654
                if (found)
655
                {
656
                        cursor.setPosition(firstChar);
657
                        cursor.setPosition(lastChar, QTextCursor::KeepAnchor);
658
                        storyTextEdit->setTextCursor(cursor);
659
                }
20569 jghali 660
                if (found && searchForReplace)
17654 jghali 661
                {
18330 jghali 662
                        // m_doc->scMW()->CurrStED->updateProps(); FIXME
17654 jghali 663
                        if (rep)
664
                        {
665
                                DoReplace->setEnabled(true);
666
                                AllReplace->setEnabled(true);
667
                        }
668
                        matchesFound++;
20441 craig 669
                        m_firstMatchPosition = storyTextEdit->textCursor().selectionStart();
17654 jghali 670
                }
671
                else
672
                {
19605 jghali 673
                        ScMessageBox::information(this, tr("Search/Replace"),
674
                                        tr("Search finished, found %1 matches").arg(matchesFound));
17654 jghali 675
                        matchesFound = 0;
18330 jghali 676
                        m_notFound = false;
17654 jghali 677
                        QTextCursor cursor = storyTextEdit->textCursor();
678
                        cursor.clearSelection();
679
                        cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
680
                        storyTextEdit->setTextCursor(cursor);
681
                }
168 Franz 682
        }
169 Franz 683
}
684
 
685
void SearchReplace::slotReplace()
686
{
18330 jghali 687
//      if (m_itemMode)
688
//              m_doc->view()->slotDoCurs(false);
357 Franz 689
        slotDoReplace();
18330 jghali 690
        if (m_itemMode)
189 Franz 691
        {
18330 jghali 692
//              m_doc->view()->slotDoCurs(true);
693
                m_item->update();
189 Franz 694
        }
164 Franz 695
}
696
 
169 Franz 697
void SearchReplace::slotDoReplace()
164 Franz 698
{
18330 jghali 699
        if (m_itemMode)
168 Franz 700
        {
357 Franz 701
                QString repl, sear;
8546 cbradney 702
                int cs, cx;
22127 jghali 703
                int textLen = 0;
357 Franz 704
                if (RText->isChecked())
168 Franz 705
                {
357 Franz 706
                        repl = RTextVal->text();
707
                        sear = STextVal->text();
22127 jghali 708
                        textLen = m_item->itemText.lengthOfSelection();
709
                        if (textLen == repl.length())
166 Franz 710
                        {
22127 jghali 711
                                for (cs = 0; cs < textLen; ++cs)
18330 jghali 712
                                        m_item->itemText.replaceChar(m_replStart+cs, repl[cs]);
357 Franz 713
                        }
714
                        else
715
                        {
22127 jghali 716
                                if (textLen < repl.length())
168 Franz 717
                                {
22127 jghali 718
                                        for (cs = 0; cs < textLen; ++cs)
18330 jghali 719
                                                m_item->itemText.replaceChar(m_replStart+cs, repl[cs]);
357 Franz 720
                                        for (cx = cs; cx < repl.length(); ++cx)
18524 avox 721
                                                m_item->itemText.insertChars(m_replStart+cx, repl.mid(cx,1), true);
168 Franz 722
                                }
357 Franz 723
                                else
724
                                {
725
                                        for (cs = 0; cs < repl.length(); ++cs)
18330 jghali 726
                                                m_item->itemText.replaceChar(m_replStart+cs, repl[cs]);
22127 jghali 727
                                        m_item->itemText.removeChars(m_replStart+cs, textLen - cs);
357 Franz 728
                                }
168 Franz 729
                        }
22127 jghali 730
                        m_item->itemText.deselectAll();
731
                        if (repl.length() > 0)
732
                        {
733
                                m_item->itemText.select(m_replStart, repl.length());
734
                                m_item->itemText.setCursorPosition(m_replStart + repl.length());
735
                        }
166 Franz 736
                }
357 Franz 737
                if (RStyle->isChecked())
16785 jghali 738
                {
18330 jghali 739
                        int oldMode = m_doc->appMode;
740
                        m_doc->appMode = modeEdit;
741
                        m_doc->itemSelection_SetNamedParagraphStyle(m_doc->paragraphStyles()[RStyleVal->currentIndex()].name());
742
                        m_doc->appMode = oldMode;
16785 jghali 743
                }
744
                if (RAlign->isChecked())
745
                {
18330 jghali 746
                        int oldMode = m_doc->appMode;
747
                        m_doc->appMode = modeEdit;
748
                        m_doc->itemSelection_SetAlignment(RAlignVal->currentIndex());
749
                        m_doc->appMode = oldMode;
16785 jghali 750
                }
357 Franz 751
                if (RFill->isChecked())
18330 jghali 752
                        m_doc->itemSelection_SetFillColor(RFillVal->currentText());
357 Franz 753
                if (RFillS->isChecked())
18330 jghali 754
                        m_doc->itemSelection_SetFillShade(RFillSVal->getValue());
357 Franz 755
                if (RStroke->isChecked())
18330 jghali 756
                        m_doc->itemSelection_SetStrokeColor(RStrokeVal->currentText());
357 Franz 757
                if (RStrokeS->isChecked())
18330 jghali 758
                        m_doc->itemSelection_SetStrokeShade(RStrokeSVal->getValue());
357 Franz 759
                if (RFont->isChecked())
18330 jghali 760
                        m_doc->itemSelection_SetFont(RFontVal->currentText());
357 Franz 761
                if (RSize->isChecked())
18330 jghali 762
                        m_doc->itemSelection_SetFontSize(qRound(RSizeVal->value() * 10.0));
22095 jghali 763
                if (REffect->isChecked() && (m_item->itemText.lengthOfSelection() > 0))
5184 avox 764
                {
18524 avox 765
                        int s = REffVal->getStyle() & ScStyle_UserStyles;
18330 jghali 766
                        m_doc->currentStyle.charStyle().setFeatures(static_cast<StyleFlag>(s).featureList()); // ???
767
                        for (int a = 0; a < m_item->itemText.length(); ++a)
5184 avox 768
                        {
18330 jghali 769
                                if (m_item->itemText.selected(a))
167 Franz 770
                                {
18524 avox 771
//                    StyleFlag fl = m_item->itemText.charStyle(a).effects();
772
//                                      fl &= static_cast<StyleFlag>(~1919);
773
//                                      fl |= static_cast<StyleFlag>(s);
774
//                                      m_item->itemText.item(a)->setFeatures(fl.featureList());
775
                                        CharStyle newFeatures;
776
                                        newFeatures.setFeatures(static_cast<StyleFlag>(s).featureList());
777
                                        m_item->itemText.applyCharStyle(a, 1, newFeatures);
167 Franz 778
                                }
779
                        }
5184 avox 780
                }
18330 jghali 781
                m_item->itemText.deselectAll();
357 Franz 782
        }
18330 jghali 783
        else if (m_doc->scMW()->CurrStED != NULL)
357 Franz 784
        {
18330 jghali 785
                StoryEditor* se = m_doc->scMW()->CurrStED;
17654 jghali 786
                if (RText->isChecked())
357 Franz 787
                {
17654 jghali 788
                        disconnect(se->Editor, SIGNAL(cursorPositionChanged()), se, SLOT(updateProps()));
789
                        int SelStart = se->Editor->textCursor().selectionStart();
790
                        int SelEnd = se->Editor->textCursor().selectionEnd();
791
//                      se->Editor->insChars(RTextVal->text());
792
                        se->Editor->textCursor().setPosition(SelStart);
793
                        se->Editor->textCursor().setPosition(SelEnd, QTextCursor::KeepAnchor);
794
                        se->Editor->textCursor().removeSelectedText();
795
//FIXME         se->Editor->setEffects(se->Editor->CurrentEffects);
796
                        QString newText = RTextVal->text();
797
                        se->Editor->insertPlainText(newText);
798
                        if (newText.length() > 0)
16472 jghali 799
                        {
17654 jghali 800
                                QTextCursor textCursor = se->Editor->textCursor();
801
                                textCursor.setPosition(SelStart);
802
                                textCursor.setPosition(SelStart + newText.length(), QTextCursor::KeepAnchor);
803
                                se->Editor->setTextCursor(textCursor);
16472 jghali 804
                        }
17654 jghali 805
                        connect(se->Editor, SIGNAL(cursorPositionChanged()), se, SLOT(updateProps()));
806
//                      se->newAlign(se->Editor->currentParaStyle);
167 Franz 807
                }
17654 jghali 808
                if (RStyle->isChecked())
18330 jghali 809
                        se->newStyle(m_doc->paragraphStyles()[RStyleVal->currentIndex()].name());
17654 jghali 810
                if (RAlign->isChecked())
811
                        se->newAlign(RAlignVal->currentIndex());
812
                if (RFill->isChecked())
813
                        se->newTxFill(RFillVal->currentIndex(), -1);
814
                if (RFillS->isChecked())
815
                        se->newTxFill(-1, RFillSVal->getValue());
816
                if (RStroke->isChecked())
817
                        se->newTxStroke(RStrokeVal->currentIndex(), -1);
818
                if (RStrokeS->isChecked())
819
                        se->newTxStroke(-1, RStrokeSVal->getValue());
820
                if (RFont->isChecked())
821
                        se->newTxFont(RFontVal->currentText());
822
                if (RSize->isChecked())
823
                        se->newTxSize(RSizeVal->value());
824
                if (REffect->isChecked())
825
                        se->newTxStyle(REffVal->getStyle());
826
 
827
                QTextCursor textCursor = se->Editor->textCursor();
828
                int selStart = textCursor.selectionStart();
829
                int selEnd   = textCursor.selectionEnd();
830
                int selPos   = qMax(selStart, selEnd);
831
                textCursor.setPosition(selPos);
832
                se->Editor->setTextCursor(textCursor);
357 Franz 833
        }
164 Franz 834
        DoReplace->setEnabled(false);
835
        AllReplace->setEnabled(false);
11647 jghali 836
        slotDoSearch();
164 Franz 837
}
838
 
20441 craig 839
int SearchReplace::firstMatchCursorPosition()
840
{
841
        return m_firstMatchPosition;
842
}
843
 
164 Franz 844
void SearchReplace::slotReplaceAll()
845
{
18330 jghali 846
        if (m_itemMode)
168 Franz 847
        {
18330 jghali 848
//              m_doc->view()->slotDoCurs(false);
849
                m_doc->DoDrawing = false;
357 Franz 850
        }
851
        do
852
        {
853
                slotDoReplace();
854
//              slotDoSearch();
855
        }
18330 jghali 856
        while (m_notFound);
857
        if (m_itemMode)
357 Franz 858
        {
18330 jghali 859
                m_doc->DoDrawing = true;
860
//              m_doc->view()->slotDoCurs(true);
861
                m_item->update();
168 Franz 862
        }
164 Franz 863
}
864
 
865
void SearchReplace::enableTxSearch()
866
{
867
        bool setter = SText->isChecked();
868
        STextVal->setEnabled(setter);
166 Franz 869
        Word->setEnabled(setter);
164 Franz 870
        CaseIgnore->setEnabled(setter);
357 Franz 871
        if (setter)
872
                STextVal->setFocus();
20569 jghali 873
        updateSearchButtonState();
164 Franz 874
}
875
 
876
void SearchReplace::enableStyleSearch()
877
{
16785 jghali 878
        SStyleVal->setEnabled(SStyleVal->count() ? SStyle->isChecked() : false);
20569 jghali 879
        updateSearchButtonState();
164 Franz 880
}
881
 
16785 jghali 882
void SearchReplace::enableAlignSearch()
883
{
884
        SAlignVal->setEnabled(SAlign->isChecked());
20569 jghali 885
        updateSearchButtonState();
16785 jghali 886
}
887
 
164 Franz 888
void SearchReplace::enableFontSearch()
889
{
890
        SFontVal->setEnabled(SFont->isChecked());
20569 jghali 891
        updateSearchButtonState();
164 Franz 892
}
893
 
894
void SearchReplace::enableSizeSearch()
895
{
896
        SSizeVal->setEnabled(SSize->isChecked());
20569 jghali 897
        updateSearchButtonState();
164 Franz 898
}
899
 
167 Franz 900
void SearchReplace::enableEffSearch()
901
{
902
        SEffVal->setEnabled(SEffect->isChecked());
20569 jghali 903
        updateSearchButtonState();
167 Franz 904
}
905
 
164 Franz 906
void SearchReplace::enableFillSearch()
907
{
908
        SFillVal->setEnabled(SFill->isChecked());
20569 jghali 909
        updateSearchButtonState();
164 Franz 910
}
911
 
173 Franz 912
void SearchReplace::enableFillSSearch()
913
{
914
        SFillSVal->setEnabled(SFillS->isChecked());
20569 jghali 915
        updateSearchButtonState();
173 Franz 916
}
917
 
164 Franz 918
void SearchReplace::enableStrokeSearch()
919
{
920
        SStrokeVal->setEnabled(SStroke->isChecked());
20569 jghali 921
        updateSearchButtonState();
164 Franz 922
}
923
 
173 Franz 924
void SearchReplace::enableStrokeSSearch()
925
{
926
        SStrokeSVal->setEnabled(SStrokeS->isChecked());
20569 jghali 927
        updateSearchButtonState();
173 Franz 928
}
929
 
164 Franz 930
void SearchReplace::enableTxReplace()
931
{
932
        RTextVal->setEnabled(RText->isChecked());
357 Franz 933
        if (RText->isChecked())
934
                RTextVal->setFocus();
20569 jghali 935
        updateReplaceButtonsState();
164 Franz 936
}
937
 
938
void SearchReplace::enableStyleReplace()
939
{
940
        RStyleVal->setEnabled(RStyle->isChecked());
20569 jghali 941
        updateReplaceButtonsState();
164 Franz 942
}
943
 
16785 jghali 944
void SearchReplace::enableAlignReplace()
945
{
946
        RAlignVal->setEnabled(RAlign->isChecked());
20569 jghali 947
        updateReplaceButtonsState();
16785 jghali 948
}
949
 
164 Franz 950
void SearchReplace::enableFontReplace()
951
{
952
        RFontVal->setEnabled(RFont->isChecked());
20569 jghali 953
        updateReplaceButtonsState();
164 Franz 954
}
955
 
956
void SearchReplace::enableSizeReplace()
957
{
958
        RSizeVal->setEnabled(RSize->isChecked());
20569 jghali 959
        updateReplaceButtonsState();
164 Franz 960
}
961
 
167 Franz 962
void SearchReplace::enableEffReplace()
963
{
964
        REffVal->setEnabled(REffect->isChecked());
20569 jghali 965
        updateReplaceButtonsState();
167 Franz 966
}
967
 
164 Franz 968
void SearchReplace::enableFillReplace()
969
{
970
        RFillVal->setEnabled(RFill->isChecked());
20569 jghali 971
        updateReplaceButtonsState();
164 Franz 972
}
973
 
173 Franz 974
void SearchReplace::enableFillSReplace()
975
{
976
        RFillSVal->setEnabled(RFillS->isChecked());
20569 jghali 977
        updateReplaceButtonsState();
173 Franz 978
}
979
 
164 Franz 980
void SearchReplace::enableStrokeReplace()
981
{
982
        RStrokeVal->setEnabled(RStroke->isChecked());
20569 jghali 983
        updateReplaceButtonsState();
164 Franz 984
}
985
 
173 Franz 986
void SearchReplace::enableStrokeSReplace()
987
{
988
        RStrokeSVal->setEnabled(RStrokeS->isChecked());
20569 jghali 989
        updateReplaceButtonsState();
173 Franz 990
}
991
 
843 tsoots 992
void SearchReplace::clear()
993
{
16785 jghali 994
        SAlign->setChecked(false);
843 tsoots 995
        SStroke->setChecked(false);
996
        SFill->setChecked(false);
997
        SStrokeS->setChecked(false);
998
        SFillS->setChecked(false);
999
        SSize->setChecked(false);
1000
        SFont->setChecked(false);
1001
        SStyle->setChecked(false);
1002
        SText->setChecked(false);
1003
        SEffect->setChecked(false);
1004
        REffect->setChecked(false);
1005
        STextVal->setText("");
18330 jghali 1006
        int currentParaStyle = findParagraphStyle(m_doc, m_doc->currentStyle);
10585 fschmid 1007
        SStyleVal->setCurrentIndex(currentParaStyle);
18330 jghali 1008
        RAlignVal->setCurrentIndex(m_doc->currentStyle.alignment());
1009
        setCurrentComboItem(SFontVal, m_doc->currentStyle.charStyle().font().scName());
1010
        setCurrentComboItem(SFillVal, m_doc->currentStyle.charStyle().fillColor());
1011
        setCurrentComboItem(SStrokeVal, m_doc->currentStyle.charStyle().strokeColor());
1012
        SSizeVal->setValue(m_doc->currentStyle.charStyle().fontSize() / 10.0);
843 tsoots 1013
        RStroke->setChecked(false);
1014
        RStrokeS->setChecked(false);
1015
        RFill->setChecked(false);
1016
        RFillS->setChecked(false);
1017
        RSize->setChecked(false);
1018
        RFont->setChecked(false);
1019
        RStyle->setChecked(false);
1020
        RText->setChecked(false);
1021
        RTextVal->setText("");
10585 fschmid 1022
        RStyleVal->setCurrentIndex(currentParaStyle);
18330 jghali 1023
        RAlignVal->setCurrentIndex(m_doc->currentStyle.alignment());
1024
        setCurrentComboItem(RFontVal, m_doc->currentStyle.charStyle().font().scName());
1025
        setCurrentComboItem(RFillVal, m_doc->currentStyle.charStyle().fillColor());
1026
        setCurrentComboItem(RStrokeVal, m_doc->currentStyle.charStyle().strokeColor());
1027
        RSizeVal->setValue(m_doc->currentStyle.charStyle().fontSize() / 10.0);
843 tsoots 1028
        Word->setChecked(false);
1029
        CaseIgnore->setChecked(false);
1030
        enableTxSearch();
1031
        enableStyleSearch();
1032
        enableFontSearch();
1033
        enableSizeSearch();
1034
        enableEffSearch();
1035
        enableFillSearch();
1036
        enableFillSSearch();
1037
        enableStrokeSearch();
1038
        enableStrokeSSearch();
1039
        enableTxReplace();
1040
        enableStyleReplace();
1041
        enableFontReplace();
1042
        enableSizeReplace();
1043
        enableEffReplace();
1044
        enableFillReplace();
1045
        enableFillSReplace();
1046
        enableStrokeReplace();
1047
        enableStrokeSReplace();
1048
}
1049
 
20569 jghali 1050
void SearchReplace::updateReplaceButtonsState()
1051
{
1052
        bool replaceEnabled = false;
1053
        if (RFill->isChecked() || RStroke->isChecked() || RStyle->isChecked() || RFont->isChecked()  ||
1054
                RStrokeS->isChecked() || RFillS->isChecked() || RSize->isChecked() || REffect->isChecked() ||
1055
                RAlign->isChecked())
1056
        {
1057
                replaceEnabled = true;
1058
        }
1059
        replaceEnabled |= RText->isChecked();
1060
        if (m_itemMode)
1061
                replaceEnabled &= (m_item->itemText.lengthOfSelection() > 0);
1062
        else if (m_doc->scMW()->CurrStED != NULL)
1063
                replaceEnabled &= m_doc->scMW()->CurrStED->Editor->textCursor().hasSelection();
1064
        else
1065
                replaceEnabled = false;
1066
        replaceEnabled &= m_notFound;
1067
        DoReplace->setEnabled(replaceEnabled);
1068
        AllReplace->setEnabled(replaceEnabled);
1069
}
1070
 
1071
void SearchReplace::updateSearchButtonState()
1072
{
1073
        bool searchEnabled = false;
1074
        if (SFill->isChecked() || SStroke->isChecked() || SStyle->isChecked() || SFont->isChecked() ||
1075
                SStrokeS->isChecked() || SFillS->isChecked() || SSize->isChecked() || SEffect->isChecked() ||
1076
                SAlign->isChecked())
1077
        {
1078
                searchEnabled = true;
1079
        }
1080
        searchEnabled |= (SText->isChecked() && !STextVal->text().isEmpty());
1081
        DoSearch->setEnabled(searchEnabled);
1082
}
1083
 
843 tsoots 1084
void SearchReplace::readPrefs()
1085
{
18330 jghali 1086
        SStroke->setChecked(m_prefs->getBool("SStroke", false));
1087
        SFill->setChecked(m_prefs->getBool("SFill", false));
1088
        SStrokeS->setChecked(m_prefs->getBool("SStrokeS", false));
1089
        SFillS->setChecked(m_prefs->getBool("SFillS", false));
1090
        SSize->setChecked(m_prefs->getBool("SSize", false));
1091
        SFont->setChecked(m_prefs->getBool("SFont", false));
1092
        SStyle->setChecked(m_prefs->getBool("SStyle", false));
1093
        SAlign->setChecked(m_prefs->getBool("SAlign", false));
18841 craig 1094
        SText->setChecked(m_prefs->getBool("SText", true));
18330 jghali 1095
        SEffect->setChecked(m_prefs->getBool("SEffect", false));
1096
        REffect->setChecked(m_prefs->getBool("REffect", false));
1097
        STextVal->setText(m_prefs->get("STextVal", ""));
1098
        int tmp = m_prefs->getInt("SStyleVal", findParagraphStyle(m_doc, m_doc->currentStyle));
843 tsoots 1099
        if (tmp < 0 || tmp >= SStyleVal->count())
16785 jghali 1100
                tmp = 0;
1101
        SStyleVal->setCurrentIndex(tmp);
18330 jghali 1102
        tmp = m_prefs->getInt("SAlignVal", m_doc->currentStyle.alignment());
16785 jghali 1103
        if (tmp < 0 || tmp >= SAlignVal->count())
1104
                tmp = 0;
1105
        SAlignVal->setCurrentIndex(tmp);
18330 jghali 1106
        setCurrentComboItem(SFontVal, m_prefs->get("SFontVal", m_doc->currentStyle.charStyle().font().scName()));
1107
        setCurrentComboItem(SFillVal, m_prefs->get("SFillVal", m_doc->currentStyle.charStyle().fillColor()));
1108
        setCurrentComboItem(SStrokeVal, m_prefs->get("SStrokeVal", m_doc->currentStyle.charStyle().strokeColor()));
1109
        SSizeVal->setValue(m_prefs->getDouble("SSizeVal", m_doc->currentStyle.charStyle().fontSize() / 10.0));
1110
        RStroke->setChecked(m_prefs->getBool("RStroke", false));
1111
        RStrokeS->setChecked(m_prefs->getBool("RStrokeS", false));
1112
        RFill->setChecked(m_prefs->getBool("RFill", false));
1113
        RFillS->setChecked(m_prefs->getBool("RFillS", false));
1114
        RSize->setChecked(m_prefs->getBool("RSize", false));
1115
        RFont->setChecked(m_prefs->getBool("RFont", false));
1116
        RStyle->setChecked(m_prefs->getBool("RStyle", false));
1117
        RAlign->setChecked(m_prefs->getBool("RAlign", false));
18841 craig 1118
        RText->setChecked(m_prefs->getBool("RText", true));
18330 jghali 1119
        RTextVal->setText(m_prefs->get("RTextVal", ""));
1120
        tmp = m_prefs->getInt("RStyleVal", findParagraphStyle(m_doc, m_doc->currentStyle));
843 tsoots 1121
        if (tmp < 0 || tmp >= RStyleVal->count())
16785 jghali 1122
                tmp = 0;
1123
        RStyleVal->setCurrentIndex(tmp);
18330 jghali 1124
        tmp = m_prefs->getInt("RAlignVal", m_doc->currentStyle.alignment());
16785 jghali 1125
        if (tmp < 0 || tmp >= RAlignVal->count())
1126
                tmp = 0;
1127
        RAlignVal->setCurrentIndex(tmp);
18330 jghali 1128
        setCurrentComboItem(RFontVal, m_prefs->get("RFontVal", m_doc->currentStyle.charStyle().font().scName()));
1129
        setCurrentComboItem(RFillVal, m_prefs->get("RFillVal", m_doc->currentStyle.charStyle().fillColor()));
1130
        setCurrentComboItem(RStrokeVal, m_prefs->get("RStrokeVal", m_doc->currentStyle.charStyle().strokeColor()));
1131
        RSizeVal->setValue(m_prefs->getDouble("RSizeVal", m_doc->currentStyle.charStyle().fontSize() / 10.0));
1132
        Word->setChecked(m_prefs->getBool("Word", false));
1133
        CaseIgnore->setChecked(m_prefs->getBool("CaseIgnore", false));
21704 jghali 1134
 
843 tsoots 1135
        enableTxSearch();
1136
        enableStyleSearch();
16785 jghali 1137
        enableAlignSearch();
843 tsoots 1138
        enableFontSearch();
1139
        enableSizeSearch();
1140
        enableEffSearch();
1141
        enableFillSearch();
1142
        enableFillSSearch();
1143
        enableStrokeSearch();
1144
        enableStrokeSSearch();
1145
        enableTxReplace();
1146
        enableStyleReplace();
16785 jghali 1147
        enableAlignReplace();
843 tsoots 1148
        enableFontReplace();
1149
        enableSizeReplace();
1150
        enableEffReplace();
1151
        enableFillReplace();
1152
        enableFillSReplace();
1153
        enableStrokeReplace();
1154
        enableStrokeSReplace();
21704 jghali 1155
 
1156
        if (SText->isChecked() && RText->isChecked())
1157
                STextVal->setFocus();
843 tsoots 1158
}
1159
 
1160
void SearchReplace::writePrefs()
1161
{
18330 jghali 1162
        m_prefs->set("SStroke", SStroke->isChecked());
1163
        m_prefs->set("SFill", SFill->isChecked());
1164
        m_prefs->set("SStrokeS", SStrokeS->isChecked());
1165
        m_prefs->set("SFillS", SFillS->isChecked());
1166
        m_prefs->set("SSize", SSize->isChecked());
1167
        m_prefs->set("SFont", SFont->isChecked());
1168
        m_prefs->set("SStyle", SStyle->isChecked());
1169
        m_prefs->set("SAlign", SAlign->isChecked());
1170
        m_prefs->set("SText", SText->isChecked());
1171
        m_prefs->set("SEffect", SEffect->isChecked());
1172
        m_prefs->set("REffect", REffect->isChecked());
1173
        m_prefs->set("STextVal", STextVal->text());
1174
        m_prefs->set("SStyleVal", SStyleVal->currentIndex());
1175
        m_prefs->set("SAlignVal", SAlignVal->currentIndex());
1176
        m_prefs->set("SFontVal", SFontVal->currentText());
1177
        m_prefs->set("SSizeVal", SSizeVal->value());
1178
        m_prefs->set("SFillVal", SFillVal->currentText());
1179
        m_prefs->set("SStrokeVal", SStrokeVal->currentText());
1180
        m_prefs->set("RStroke", RStroke->isChecked());
1181
        m_prefs->set("RStrokeS", RStrokeS->isChecked());
1182
        m_prefs->set("RFill", RFill->isChecked());
1183
        m_prefs->set("RFillS", RFillS->isChecked());
1184
        m_prefs->set("RSize", RSize->isChecked());
1185
        m_prefs->set("RFont", RFont->isChecked());
1186
        m_prefs->set("RStyle", RStyle->isChecked());
1187
        m_prefs->set("RAlign", RAlign->isChecked());
1188
        m_prefs->set("RText", RText->isChecked());
1189
        m_prefs->set("RTextVal", RTextVal->text());
1190
        m_prefs->set("RStyleVal", RStyleVal->currentText());
1191
        m_prefs->set("RAlignVal", RAlignVal->currentIndex());
1192
        m_prefs->set("RFontVal", RFontVal->currentText());
1193
        m_prefs->set("RSizeVal", RSizeVal->value());
1194
        m_prefs->set("RFillVal", RFillVal->currentText());
1195
        m_prefs->set("RStrokeVal", RStrokeVal->currentText());
1196
        m_prefs->set("Word", Word->isChecked());
1197
        m_prefs->set("CaseIgnore", CaseIgnore->isChecked());
843 tsoots 1198
        accept();
1199
}