summaryrefslogtreecommitdiffstats
path: root/kdeui/keditcl.h
blob: 289919b3e37ccfec0f758bfa2a70ef602b9cdfcf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
/* This file is part of the KDE libraries

   Copyright (C) 1996 Bernd Johannes Wuebben <[email protected]>
   Copyright (C) 2000 Waldo Bastian <[email protected]>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   Boston, MA 02110-1301, USA.
*/
#ifndef __KEDITCL_H__
#define __KEDITCL_H__

#include <tqmultilineedit.h>
#include <tqstring.h>
#include <kdialogbase.h>

class TQDropEvent;
class TQPushButton;
class TQCheckBox;
class TQRadioButton;
class TQTextStream;
class KHistoryCombo;
class KIntNumInput;
class TQVButtonGroup;

class KDEUI_EXPORT KEdGotoLine : public KDialogBase
{
    Q_OBJECT

public:
    KEdGotoLine( TQWidget *parent=0, const char *name=0, bool modal=true );
    int getLineNumber();

public slots:
    void selected( int );

private:
    KIntNumInput *lineNum;

protected:
    virtual void virtual_hook( int id, void* data );
private:
    class KEdGotoLinePrivate;
    KEdGotoLinePrivate *d;
};

///
class KDEUI_EXPORT KEdFind : public KDialogBase
{
    Q_OBJECT
    Q_PROPERTY( TQString text READ getText WRITE setText )
    Q_PROPERTY( bool caseSensitivity READ case_sensitive WRITE setCaseSensitive )
    Q_PROPERTY( bool direction READ get_direction WRITE setDirection )
public:

    KEdFind( TQWidget *parent = 0, const char *name=0, bool modal=true);
    ~KEdFind();

    TQString getText() const;
    void setText(TQString string);
    void setCaseSensitive( bool b );
    bool case_sensitive() const;
    void setDirection( bool b );
    bool get_direction() const;

    /**
     * @returns the combobox containing the history of searches. Can be used
     * to save and restore the history.
     */
    KHistoryCombo *searchCombo() const;

protected slots:
    void slotCancel( void );
    void slotUser1( void );
    void textSearchChanged ( const TQString & );

protected:
  TQVButtonGroup* group;

private:
    TQCheckBox *sensitive;
    TQCheckBox *direction;

    virtual void done(int i ) { KDialogBase::done(i); }

signals:

    void search();
    void done();
protected:
    virtual void virtual_hook( int id, void* data );
private:
    class KEdFindPrivate;
    KEdFindPrivate *d;
};

///
class KDEUI_EXPORT KEdReplace : public KDialogBase
{
    Q_OBJECT

public:

    KEdReplace ( TQWidget *parent = 0, const char *name=0, bool modal=true );
    ~KEdReplace();

    TQString 	getText();
    TQString 	getReplaceText();
    void 	setText(TQString);

    /**
     * @returns the combobox containing the history of searches. Can be used
     * to save and restore the history.
     */
    KHistoryCombo *searchCombo() const;

    /**
     * @returns the combobox containing the history of replaces. Can be used
     * to save and restore the history.
     */
    KHistoryCombo *replaceCombo() const;

    bool 	case_sensitive();
    bool 	get_direction();

protected slots:
    void slotCancel( void );
    void slotClose( void );
    void slotUser1( void );
    void slotUser2( void );
    void slotUser3( void );
    void textSearchChanged ( const TQString & );

private:
    TQCheckBox 	*sensitive;
    TQCheckBox 	*direction;

	virtual void done(int i ) { KDialogBase::done(i); }

signals:
    void replace();
    void find();
    void replaceAll();
    void done();
protected:
  virtual void virtual_hook( int id, void* data );
private:
    class KEdReplacePrivate;
    KEdReplacePrivate *d;
};


/**
 * A simple text editor for the %KDE project.
 * @deprecated Use KTextEditor::Editor or KTextEdit instead.
 *
 * @author Bernd Johannes Wuebben <[email protected]>, Waldo Bastian <[email protected]>
 **/

class KDEUI_EXPORT_DEPRECATED KEdit : public TQMultiLineEdit
{
    Q_OBJECT

public:
    /**
     * The usual constructor.
     **/
    KEdit (TQWidget *_parent=NULL, const char *name=NULL);

    ~KEdit();

    /**
     * Search directions.
     * @internal
     **/
    enum { NONE,
	   FORWARD,
	   BACKWARD };
    /**
     * Insert text from the text stream into the edit widget.
     **/
    void insertText(TQTextStream *);

    /**
     * Save text from the edit widget to a text stream.
     * If @p softWrap is false soft line wrappings are replaced with line-feeds
     * If @p softWrap is true soft line wrappings are ignored.
     * @since 3.1
     **/
    void saveText(TQTextStream *, bool softWrap);
    void saveText(TQTextStream *); // KDE 4.0: remove

    /**
     *  Let the user select a font and set the font of the textwidget to that
     * selected font.
     **/
    void 	selectFont();

    /**
     * Present a search dialog to the user
     **/
    void 	search();

    /**
     * Repeat the last search specified on the search dialog.
     *
     *  If the user hasn't searched for anything until now, this method
     *   will simply return without doing anything.
     *
     * @return @p true if a search was done. @p false if no search was done.
     **/
    bool 	repeatSearch();

    /**
     * Present a Search and Replace Dialog to the user.
     **/
    void 	replace();

    /**
     * Present a "Goto Line" dialog to the user.
     */
    void 	doGotoLine();

    /**
     * Clean up redundant whitespace from selected text.
     */
    void        cleanWhiteSpace();

    /**
     * Install a context menu for KEdit.
     *
     *  The Popup Menu will be activated on a right mouse button press event.
     */
    void 	installRBPopup( TQPopupMenu* );

    /**
     * Retrieve the current line number.
     *
     * The current line is the line the cursor is on.
     **/
    int 	currentLine();

    /**
     * Retrieve the actual column number the cursor is on.
     *
     *  This call differs
     *    from TQMultiLineEdit::getCursorPosition() in that it returns the actual cursor
     *    position and not the character position. Use currentLine() and currentColumn()
     *    if you want to display the current line or column in the status bar for
     *    example.
     */
    int 	currentColumn();


    /**
     * Start spellchecking mode.
     */
    void spellcheck_start();

    /**
     * Exit spellchecking mode.
     */
    void spellcheck_stop();

    /**
     * Allow the user to toggle between insert mode and overwrite mode with
     * the "Insert" key. See also toggle_overwrite_signal();
     *
     * The default is false: the user can not toggle.
     */
    void setOverwriteEnabled(bool b);

    TQString selectWordUnderCursor();

    /// @since 3.3
    TQPopupMenu *createPopupMenu( const TQPoint& pos );

    void setAutoUpdate(bool b);

signals:
    /** This signal is emitted if the user dropped a URL over the text editor
      * TQMultiLineEdit widget.
      *
      *  Note that the user can drop also Text on it, but
      * this is already handled internally by TQMultiLineEdit.
      */
    void        gotUrlDrop(TQDropEvent* e);

    /** This signal is emitted whenever the cursor position changes.
     *
     * Use this in conjunction with currentLine(), currentColumn()
     * if you need to know the cursor position.
     */
    void 	CursorPositionChanged();

    /**
     * This signal is emitted if the user toggles from insert to overwrite mode
     * or vice versa.
     *
     * The user can do so by pressing the "Insert" button on a PC keyboard.
     *
     * This feature must be activated by calling setOverwriteEnabled(true)
     * first.
     */
    void 	toggle_overwrite_signal();

public slots:
      /**
       * @internal
       **/
    void corrected (const TQString &originalword, const TQString &newword, unsigned int pos);
      /**
       * @internal
       **/
    void misspelling (const TQString &word, const TQStringList &, unsigned int pos);
private slots:

      /**
       * @internal
       * Called from search dialog.
       **/
    void search_slot();

      /**
       * @internal
       **/
    void searchdone_slot();

      /**
       * @internal
       **/
    void replace_slot();

      /**
       * @internal
       **/
    void replace_all_slot();

      /**
       * @internal
       **/
    void replace_search_slot();

      /**
       * @internal
       **/
    void replacedone_slot();

      /**
       * Cursor moved...
       */
    void slotCursorPositionChanged();

protected:
    void computePosition();
    int 	doSearch(TQString s_pattern, bool case_sensitive,
			 bool regex, bool forward,int line, int col);

    int 	doReplace(TQString s_pattern, bool case_sensitive,
			  bool regex, bool forward,int line, int col,bool replace);

      /**
       * Sets line and col to the position pos, considering word wrap.
       **/
    void	posToRowCol(unsigned int pos, unsigned int &line, unsigned int &col);

    /**
     * Reimplemented for internal reasons, the API is not affected.
     */
    virtual void create( WId = 0, bool initializeWindow = true,
                         bool destroyOldWindow = true );

    /**
     * Reimplemented for internal reasons, the API is not affected.
     */
    virtual void ensureCursorVisible();
    virtual void setCursor( const TQCursor & );
    virtual void viewportPaintEvent( TQPaintEvent* );

protected:

    void 	keyPressEvent 	 ( TQKeyEvent *  );

    // DnD interface
    void        dragMoveEvent(TQDragMoveEvent* e);
    void        dragEnterEvent(TQDragEnterEvent* e);
    void        dropEvent(TQDropEvent* e);
    void        contentsDragMoveEvent(TQDragMoveEvent* e);
    void        contentsDragEnterEvent(TQDragEnterEvent* e);
    void        contentsDropEvent(TQDropEvent* e);

private:
    TQTimer* tqrepaintTimer;

    QString	killbufferstring;
    TQWidget     *parent;
    KEdFind 	*srchdialog;
    KEdReplace 	*replace_dialog;
    KEdGotoLine *gotodialog;

    TQString     pattern;

    bool 	can_replace;
    bool	killing;
    bool 	killtrue;
    bool 	lastwasanewline;
    bool        saved_readonlystate;
    int 	last_search;
    int 	last_replace;
    int 	replace_all_line;
    int 	replace_all_col;

    int 	line_pos, col_pos;
    bool        fill_column_is_set;
    bool        word_wrap_is_set;
    int         fill_column_value;

protected:
    virtual void virtual_hook( int id, void* data );
private:
    class KEditPrivate;
    KEditPrivate *d;
};

#endif