mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-25 05:55:34 +00:00
Edwins f&r GUII patch with a small fix.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1678 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
7e53337ef1
commit
f88cee29f6
@ -1,3 +1,7 @@
|
|||||||
|
2001-03-05 Edwin Leuven <leuven@fee.uva.nl>
|
||||||
|
|
||||||
|
* form1.fd: search_form deleted
|
||||||
|
|
||||||
2001-02-26 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
|
2001-02-26 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
|
||||||
|
|
||||||
* layout_forms.fd: delete
|
* layout_forms.fd: delete
|
||||||
|
214
forms/form1.fd
214
forms/form1.fd
@ -3,7 +3,7 @@ Magic: 13000
|
|||||||
Internal Form Definition File
|
Internal Form Definition File
|
||||||
(do not change)
|
(do not change)
|
||||||
|
|
||||||
Number of forms: 4
|
Number of forms: 3
|
||||||
Unit of measure: FL_COORD_PIXEL
|
Unit of measure: FL_COORD_PIXEL
|
||||||
|
|
||||||
=============== FORM ===============
|
=============== FORM ===============
|
||||||
@ -249,7 +249,7 @@ argument:
|
|||||||
--------------------
|
--------------------
|
||||||
class: FL_BEGIN_GROUP
|
class: FL_BEGIN_GROUP
|
||||||
type: 0
|
type: 0
|
||||||
box: 0 10 10 0
|
box: 0 0 0 0
|
||||||
boxtype: FL_NO_BOX
|
boxtype: FL_NO_BOX
|
||||||
colors: FL_COL1 FL_MCOL
|
colors: FL_COL1 FL_MCOL
|
||||||
alignment: FL_ALIGN_CENTER
|
alignment: FL_ALIGN_CENTER
|
||||||
@ -687,7 +687,7 @@ argument: 2
|
|||||||
--------------------
|
--------------------
|
||||||
class: FL_BEGIN_GROUP
|
class: FL_BEGIN_GROUP
|
||||||
type: 0
|
type: 0
|
||||||
box: 0 10 10 0
|
box: 0 0 0 0
|
||||||
boxtype: FL_NO_BOX
|
boxtype: FL_NO_BOX
|
||||||
colors: FL_COL1 FL_MCOL
|
colors: FL_COL1 FL_MCOL
|
||||||
alignment: FL_ALIGN_CENTER
|
alignment: FL_ALIGN_CENTER
|
||||||
@ -867,7 +867,7 @@ argument:
|
|||||||
--------------------
|
--------------------
|
||||||
class: FL_BEGIN_GROUP
|
class: FL_BEGIN_GROUP
|
||||||
type: 0
|
type: 0
|
||||||
box: 0 10 10 0
|
box: 0 0 0 0
|
||||||
boxtype: FL_NO_BOX
|
boxtype: FL_NO_BOX
|
||||||
colors: FL_COL1 FL_MCOL
|
colors: FL_COL1 FL_MCOL
|
||||||
alignment: FL_ALIGN_CENTER
|
alignment: FL_ALIGN_CENTER
|
||||||
@ -975,7 +975,7 @@ argument:
|
|||||||
--------------------
|
--------------------
|
||||||
class: FL_BEGIN_GROUP
|
class: FL_BEGIN_GROUP
|
||||||
type: 0
|
type: 0
|
||||||
box: 0 10 10 0
|
box: 0 0 0 0
|
||||||
boxtype: FL_NO_BOX
|
boxtype: FL_NO_BOX
|
||||||
colors: FL_COL1 FL_MCOL
|
colors: FL_COL1 FL_MCOL
|
||||||
alignment: FL_ALIGN_CENTER
|
alignment: FL_ALIGN_CENTER
|
||||||
@ -1392,209 +1392,5 @@ name: timer
|
|||||||
callback:
|
callback:
|
||||||
argument:
|
argument:
|
||||||
|
|
||||||
=============== FORM ===============
|
|
||||||
Name: form_search
|
|
||||||
Width: 440
|
|
||||||
Height: 160
|
|
||||||
Number of Objects: 11
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_BOX
|
|
||||||
type: UP_BOX
|
|
||||||
box: 0 0 440 160
|
|
||||||
boxtype: FL_UP_BOX
|
|
||||||
colors: FL_COL1 FL_COL1
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_DEFAULT_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label:
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_ALL
|
|
||||||
gravity: FL_NoGravity FL_NoGravity
|
|
||||||
name:
|
|
||||||
callback:
|
|
||||||
argument:
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_FRAME
|
|
||||||
type: ENGRAVED_FRAME
|
|
||||||
box: 300 10 130 80
|
|
||||||
boxtype: FL_NO_BOX
|
|
||||||
colors: FL_BLACK FL_COL1
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_DEFAULT_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label:
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_NorthEast FL_NorthEast
|
|
||||||
name:
|
|
||||||
callback:
|
|
||||||
argument:
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_INPUT
|
|
||||||
type: NORMAL_INPUT
|
|
||||||
box: 110 10 180 30
|
|
||||||
boxtype: FL_DOWN_BOX
|
|
||||||
colors: FL_COL1 FL_MCOL
|
|
||||||
alignment: FL_ALIGN_LEFT
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_NORMAL_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: Find|#n
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_X
|
|
||||||
gravity: FL_NorthWest FL_NorthEast
|
|
||||||
name: input_search
|
|
||||||
callback:
|
|
||||||
argument:
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_INPUT
|
|
||||||
type: NORMAL_INPUT
|
|
||||||
box: 110 40 180 30
|
|
||||||
boxtype: FL_DOWN_BOX
|
|
||||||
colors: FL_COL1 FL_MCOL
|
|
||||||
alignment: FL_ALIGN_LEFT
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_NORMAL_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: Replace with|#W
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_X
|
|
||||||
gravity: FL_NorthWest FL_NorthEast
|
|
||||||
name: input_replace
|
|
||||||
callback:
|
|
||||||
argument:
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_BUTTON
|
|
||||||
type: NORMAL_BUTTON
|
|
||||||
box: 200 80 90 30
|
|
||||||
boxtype: FL_UP_BOX
|
|
||||||
colors: FL_COL1 FL_COL1
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_NORMAL_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: @>|#F^s
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_SouthEast FL_SouthEast
|
|
||||||
name:
|
|
||||||
callback: SearchForwardCB
|
|
||||||
argument: 0
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_BUTTON
|
|
||||||
type: NORMAL_BUTTON
|
|
||||||
box: 110 80 90 30
|
|
||||||
boxtype: FL_UP_BOX
|
|
||||||
colors: FL_COL1 FL_COL1
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_NORMAL_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: @<|#B^r
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_SouthEast FL_SouthEast
|
|
||||||
name:
|
|
||||||
callback: SearchBackwardCB
|
|
||||||
argument: 0
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_BUTTON
|
|
||||||
type: NORMAL_BUTTON
|
|
||||||
box: 110 120 90 30
|
|
||||||
boxtype: FL_UP_BOX
|
|
||||||
colors: FL_COL1 FL_COL1
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_NORMAL_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: Replace|#R#r
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_SouthEast FL_SouthEast
|
|
||||||
name: replace_button
|
|
||||||
callback: SearchReplaceCB
|
|
||||||
argument: 0
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_BUTTON
|
|
||||||
type: NORMAL_BUTTON
|
|
||||||
box: 350 120 80 30
|
|
||||||
boxtype: FL_UP_BOX
|
|
||||||
colors: FL_COL1 FL_COL1
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_NORMAL_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: Close|^[
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_SouthEast FL_SouthEast
|
|
||||||
name:
|
|
||||||
callback: SearchCancelCB
|
|
||||||
argument: 0
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_CHECKBUTTON
|
|
||||||
type: PUSH_BUTTON
|
|
||||||
box: 300 20 150 30
|
|
||||||
boxtype: FL_NO_BOX
|
|
||||||
colors: FL_COL1 FL_YELLOW
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_DEFAULT_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: Case sensitive|#s#S
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_NorthEast FL_NorthEast
|
|
||||||
name: btnCaseSensitive
|
|
||||||
callback:
|
|
||||||
argument: 0
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_CHECKBUTTON
|
|
||||||
type: PUSH_BUTTON
|
|
||||||
box: 300 50 150 30
|
|
||||||
boxtype: FL_NO_BOX
|
|
||||||
colors: FL_COL1 FL_YELLOW
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_DEFAULT_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: Match word|#M#m
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_NorthEast FL_NorthEast
|
|
||||||
name: btnMatchWord
|
|
||||||
callback:
|
|
||||||
argument: 0
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
class: FL_BUTTON
|
|
||||||
type: NORMAL_BUTTON
|
|
||||||
box: 200 120 90 30
|
|
||||||
boxtype: FL_UP_BOX
|
|
||||||
colors: FL_COL1 FL_COL1
|
|
||||||
alignment: FL_ALIGN_CENTER
|
|
||||||
style: FL_NORMAL_STYLE
|
|
||||||
size: FL_NORMAL_SIZE
|
|
||||||
lcol: FL_BLACK
|
|
||||||
label: Replace All|#A#a
|
|
||||||
shortcut:
|
|
||||||
resize: FL_RESIZE_NONE
|
|
||||||
gravity: FL_SouthEast FL_SouthEast
|
|
||||||
name: replaceall_button
|
|
||||||
callback: SearchReplaceAllCB
|
|
||||||
argument: 0
|
|
||||||
|
|
||||||
==============================
|
==============================
|
||||||
--------------------
|
--------------------
|
||||||
|
@ -64,6 +64,7 @@ src/frontends/kde/refdlg.C
|
|||||||
src/frontends/kde/tabcreatedlg.C
|
src/frontends/kde/tabcreatedlg.C
|
||||||
src/frontends/kde/tocdlg.C
|
src/frontends/kde/tocdlg.C
|
||||||
src/frontends/kde/urldlg.C
|
src/frontends/kde/urldlg.C
|
||||||
|
src/frontends/qt2/FormCharacter.C
|
||||||
src/frontends/qt2/FormCopyright.C
|
src/frontends/qt2/FormCopyright.C
|
||||||
src/frontends/qt2/FormParagraph.C
|
src/frontends/qt2/FormParagraph.C
|
||||||
src/frontends/qt2/FormPrint.C
|
src/frontends/qt2/FormPrint.C
|
||||||
@ -71,52 +72,54 @@ src/frontends/qt2/FormTabularCreate.C
|
|||||||
src/frontends/qt2/paragraphdlgimpl.C
|
src/frontends/qt2/paragraphdlgimpl.C
|
||||||
src/frontends/qt2/tabularcreatedlgimpl.C
|
src/frontends/qt2/tabularcreatedlgimpl.C
|
||||||
src/frontends/xforms/FormBase.h
|
src/frontends/xforms/FormBase.h
|
||||||
src/frontends/xforms/FormBibitem.C
|
|
||||||
src/frontends/xforms/form_bibitem.C
|
src/frontends/xforms/form_bibitem.C
|
||||||
src/frontends/xforms/FormBibtex.C
|
src/frontends/xforms/FormBibitem.C
|
||||||
src/frontends/xforms/form_bibtex.C
|
src/frontends/xforms/form_bibtex.C
|
||||||
|
src/frontends/xforms/FormBibtex.C
|
||||||
src/frontends/xforms/form_browser.C
|
src/frontends/xforms/form_browser.C
|
||||||
src/frontends/xforms/FormCharacter.C
|
|
||||||
src/frontends/xforms/form_character.C
|
src/frontends/xforms/form_character.C
|
||||||
src/frontends/xforms/FormCitation.C
|
src/frontends/xforms/FormCharacter.C
|
||||||
src/frontends/xforms/form_citation.C
|
src/frontends/xforms/form_citation.C
|
||||||
src/frontends/xforms/FormCopyright.C
|
src/frontends/xforms/FormCitation.C
|
||||||
src/frontends/xforms/form_copyright.C
|
src/frontends/xforms/form_copyright.C
|
||||||
src/frontends/xforms/FormDocument.C
|
src/frontends/xforms/FormCopyright.C
|
||||||
src/frontends/xforms/form_document.C
|
src/frontends/xforms/form_document.C
|
||||||
src/frontends/xforms/FormError.C
|
src/frontends/xforms/FormDocument.C
|
||||||
src/frontends/xforms/form_error.C
|
src/frontends/xforms/form_error.C
|
||||||
src/frontends/xforms/FormGraphics.C
|
src/frontends/xforms/FormError.C
|
||||||
src/frontends/xforms/form_graphics.C
|
src/frontends/xforms/form_graphics.C
|
||||||
src/frontends/xforms/FormInclude.C
|
src/frontends/xforms/FormGraphics.C
|
||||||
src/frontends/xforms/form_include.C
|
src/frontends/xforms/form_include.C
|
||||||
src/frontends/xforms/FormIndex.C
|
src/frontends/xforms/FormInclude.C
|
||||||
src/frontends/xforms/form_index.C
|
src/frontends/xforms/form_index.C
|
||||||
|
src/frontends/xforms/FormIndex.C
|
||||||
src/frontends/xforms/FormInset.h
|
src/frontends/xforms/FormInset.h
|
||||||
src/frontends/xforms/FormLog.C
|
src/frontends/xforms/FormLog.C
|
||||||
src/frontends/xforms/FormParagraph.C
|
|
||||||
src/frontends/xforms/form_paragraph.C
|
src/frontends/xforms/form_paragraph.C
|
||||||
src/frontends/xforms/FormPreamble.C
|
src/frontends/xforms/FormParagraph.C
|
||||||
src/frontends/xforms/form_preamble.C
|
src/frontends/xforms/form_preamble.C
|
||||||
src/frontends/xforms/FormPreferences.C
|
src/frontends/xforms/FormPreamble.C
|
||||||
src/frontends/xforms/form_preferences.C
|
src/frontends/xforms/form_preferences.C
|
||||||
src/frontends/xforms/FormPrint.C
|
src/frontends/xforms/FormPreferences.C
|
||||||
src/frontends/xforms/form_print.C
|
src/frontends/xforms/form_print.C
|
||||||
src/frontends/xforms/FormRef.C
|
src/frontends/xforms/FormPrint.C
|
||||||
src/frontends/xforms/form_ref.C
|
src/frontends/xforms/form_ref.C
|
||||||
|
src/frontends/xforms/FormRef.C
|
||||||
|
src/frontends/xforms/form_search.C
|
||||||
|
src/frontends/xforms/FormSearch.C
|
||||||
src/frontends/xforms/FormSplash.C
|
src/frontends/xforms/FormSplash.C
|
||||||
src/frontends/xforms/FormTabular.C
|
|
||||||
src/frontends/xforms/form_tabular.C
|
src/frontends/xforms/form_tabular.C
|
||||||
src/frontends/xforms/FormTabularCreate.C
|
src/frontends/xforms/FormTabular.C
|
||||||
src/frontends/xforms/form_tabular_create.C
|
src/frontends/xforms/form_tabular_create.C
|
||||||
src/frontends/xforms/FormToc.C
|
src/frontends/xforms/FormTabularCreate.C
|
||||||
src/frontends/xforms/form_toc.C
|
src/frontends/xforms/form_toc.C
|
||||||
src/frontends/xforms/FormUrl.C
|
src/frontends/xforms/FormToc.C
|
||||||
src/frontends/xforms/form_url.C
|
src/frontends/xforms/form_url.C
|
||||||
|
src/frontends/xforms/FormUrl.C
|
||||||
src/frontends/xforms/FormVCLog.C
|
src/frontends/xforms/FormVCLog.C
|
||||||
src/frontends/xforms/input_validators.C
|
src/frontends/xforms/input_validators.C
|
||||||
src/frontends/xforms/Menubar_pimpl.C
|
src/frontends/xforms/Menubar_pimpl.C
|
||||||
src/frontends/xforms/xform_helpers.C
|
src/frontends/xforms/xforms_helpers.C
|
||||||
src/gettext.h
|
src/gettext.h
|
||||||
src/importer.C
|
src/importer.C
|
||||||
src/insets/figinset.C
|
src/insets/figinset.C
|
||||||
@ -151,6 +154,7 @@ src/LColor.C
|
|||||||
src/LyXAction.C
|
src/LyXAction.C
|
||||||
src/lyx.C
|
src/lyx.C
|
||||||
src/lyx_cb.C
|
src/lyx_cb.C
|
||||||
|
src/lyxfind.C
|
||||||
src/lyxfont.C
|
src/lyxfont.C
|
||||||
src/lyxfr0.C
|
src/lyxfr0.C
|
||||||
src/lyxfr1.C
|
src/lyxfr1.C
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-03-06 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* lyxfind.C (IsStringInText): put parentes around expressions.
|
||||||
|
|
||||||
|
2001-03-05 Edwin Leuven <leuven@fee.uva.nl>
|
||||||
|
|
||||||
|
* lyxfind.[Ch]: find stuff moved out of text2.C/lyxtext.h
|
||||||
|
|
||||||
2001-02-23 John Levon <moz@compsoc.man.ac.uk>
|
2001-02-23 John Levon <moz@compsoc.man.ac.uk>
|
||||||
|
|
||||||
* lyx_main.C: add ISO_Left_Tab as bind synonym for Tab
|
* lyx_main.C: add ISO_Left_Tab as bind synonym for Tab
|
||||||
|
@ -151,10 +151,8 @@ lyx_SOURCES = \
|
|||||||
lyxcursor.h \
|
lyxcursor.h \
|
||||||
lyxfont.C \
|
lyxfont.C \
|
||||||
lyxfont.h \
|
lyxfont.h \
|
||||||
lyxfr0.C \
|
lyxfind.C \
|
||||||
lyxfr0.h \
|
lyxfind.h \
|
||||||
lyxfr1.C \
|
|
||||||
lyxfr1.h \
|
|
||||||
lyxfunc.C \
|
lyxfunc.C \
|
||||||
lyxfunc.h \
|
lyxfunc.h \
|
||||||
lyxlex.C \
|
lyxlex.C \
|
||||||
|
49
src/form1.C
49
src/form1.C
@ -274,52 +274,3 @@ FD_FileDlg *create_form_FileDlg(void)
|
|||||||
}
|
}
|
||||||
/*---------------------------------------*/
|
/*---------------------------------------*/
|
||||||
|
|
||||||
FD_form_search *create_form_form_search(void)
|
|
||||||
{
|
|
||||||
FL_OBJECT *obj;
|
|
||||||
FD_form_search *fdui = (FD_form_search *) fl_calloc(1, sizeof(FD_form_search));
|
|
||||||
|
|
||||||
fdui->form_search = fl_bgn_form(FL_NO_BOX, 440, 160);
|
|
||||||
obj = fl_add_box(FL_UP_BOX, 0, 0, 440, 160, "");
|
|
||||||
obj = fl_add_frame(FL_ENGRAVED_FRAME, 300, 10, 130, 80, "");
|
|
||||||
fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
|
|
||||||
fdui->input_search = obj = fl_add_input(FL_NORMAL_INPUT, 110, 10, 180, 30, idex(_("Find|#n")));fl_set_button_shortcut(obj, scex(_("Find|#n")), 1);
|
|
||||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
|
||||||
fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
|
|
||||||
fl_set_object_resize(obj, FL_RESIZE_X);
|
|
||||||
fdui->input_replace = obj = fl_add_input(FL_NORMAL_INPUT, 110, 40, 180, 30, idex(_("Replace with|#W")));fl_set_button_shortcut(obj, scex(_("Replace with|#W")), 1);
|
|
||||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
|
||||||
fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
|
|
||||||
fl_set_object_resize(obj, FL_RESIZE_X);
|
|
||||||
obj = fl_add_button(FL_NORMAL_BUTTON, 200, 80, 90, 30, idex(_("@>|#F^s")));fl_set_button_shortcut(obj, scex(_("@>|#F^s")), 1);
|
|
||||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
|
||||||
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
|
||||||
fl_set_object_callback(obj, SearchForwardCB, 0);
|
|
||||||
obj = fl_add_button(FL_NORMAL_BUTTON, 110, 80, 90, 30, idex(_("@<|#B^r")));fl_set_button_shortcut(obj, scex(_("@<|#B^r")), 1);
|
|
||||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
|
||||||
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
|
||||||
fl_set_object_callback(obj, SearchBackwardCB, 0);
|
|
||||||
fdui->replace_button = obj = fl_add_button(FL_NORMAL_BUTTON, 110, 120, 90, 30, idex(_("Replace|#R#r")));fl_set_button_shortcut(obj, scex(_("Replace|#R#r")), 1);
|
|
||||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
|
||||||
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
|
||||||
fl_set_object_callback(obj, SearchReplaceCB, 0);
|
|
||||||
obj = fl_add_button(FL_NORMAL_BUTTON, 350, 120, 80, 30, idex(_("Close|^[")));fl_set_button_shortcut(obj, scex(_("Close|^[")), 1);
|
|
||||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
|
||||||
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
|
||||||
fl_set_object_callback(obj, SearchCancelCB, 0);
|
|
||||||
fdui->btnCaseSensitive = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 300, 20, 150, 30, idex(_("Case sensitive|#s#S")));fl_set_button_shortcut(obj, scex(_("Case sensitive|#s#S")), 1);
|
|
||||||
fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
|
|
||||||
fdui->btnMatchWord = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 300, 50, 150, 30, idex(_("Match word|#M#m")));fl_set_button_shortcut(obj, scex(_("Match word|#M#m")), 1);
|
|
||||||
fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
|
|
||||||
fdui->replaceall_button = obj = fl_add_button(FL_NORMAL_BUTTON, 200, 120, 90, 30, idex(_("Replace All|#A#a")));fl_set_button_shortcut(obj, scex(_("Replace All|#A#a")), 1);
|
|
||||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
|
||||||
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
|
||||||
fl_set_object_callback(obj, SearchReplaceAllCB, 0);
|
|
||||||
fl_end_form();
|
|
||||||
|
|
||||||
fdui->form_search->fdui = fdui;
|
|
||||||
|
|
||||||
return fdui;
|
|
||||||
}
|
|
||||||
/*---------------------------------------*/
|
|
||||||
|
|
||||||
|
@ -8,13 +8,6 @@
|
|||||||
extern "C" void GraphicsCB(FL_OBJECT *, long);
|
extern "C" void GraphicsCB(FL_OBJECT *, long);
|
||||||
|
|
||||||
|
|
||||||
extern "C" void SearchForwardCB(FL_OBJECT *, long);
|
|
||||||
extern "C" void SearchBackwardCB(FL_OBJECT *, long);
|
|
||||||
extern "C" void SearchReplaceCB(FL_OBJECT *, long);
|
|
||||||
extern "C" void SearchCancelCB(FL_OBJECT *, long);
|
|
||||||
extern "C" void SearchReplaceAllCB(FL_OBJECT *, long);
|
|
||||||
|
|
||||||
|
|
||||||
/**** Forms and Objects ****/
|
/**** Forms and Objects ****/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
FL_FORM *KeyMap;
|
FL_FORM *KeyMap;
|
||||||
@ -107,6 +100,4 @@ typedef struct {
|
|||||||
FL_OBJECT *replaceall_button;
|
FL_OBJECT *replaceall_button;
|
||||||
} FD_form_search;
|
} FD_form_search;
|
||||||
|
|
||||||
extern FD_form_search * create_form_form_search(void);
|
|
||||||
|
|
||||||
#endif /* FD_KeyMap_h_ */
|
#endif /* FD_KeyMap_h_ */
|
||||||
|
@ -134,6 +134,8 @@ public:
|
|||||||
Signal1<void, InsetCommand *> showRef;
|
Signal1<void, InsetCommand *> showRef;
|
||||||
///
|
///
|
||||||
Signal1<void, string const &> createRef;
|
Signal1<void, string const &> createRef;
|
||||||
|
///
|
||||||
|
Signal0<void> showSearch;
|
||||||
/// pop up the splash
|
/// pop up the splash
|
||||||
Signal0<void> showSplash;
|
Signal0<void> showSplash;
|
||||||
/// hide the splash immediately
|
/// hide the splash immediately
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2001-03-05 Edwin Leuven <leuven@fee.uva.nl>
|
||||||
|
|
||||||
|
* added find/replace dialog:
|
||||||
|
* FormSearch.*: added
|
||||||
|
* form_search.*: added
|
||||||
|
* forms/form_search.fd: added
|
||||||
|
|
||||||
2001-03-05 Angus Leeming <a.leeming@ic.ac.uk>
|
2001-03-05 Angus Leeming <a.leeming@ic.ac.uk>
|
||||||
|
|
||||||
* xform_helpers.[Ch]: renamed as xforms_helpers.[Ch].
|
* xform_helpers.[Ch]: renamed as xforms_helpers.[Ch].
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "FormPreferences.h"
|
#include "FormPreferences.h"
|
||||||
#include "FormPrint.h"
|
#include "FormPrint.h"
|
||||||
#include "FormRef.h"
|
#include "FormRef.h"
|
||||||
|
#include "FormSearch.h"
|
||||||
#include "FormSplash.h"
|
#include "FormSplash.h"
|
||||||
#include "FormTabular.h"
|
#include "FormTabular.h"
|
||||||
#include "FormTabularCreate.h"
|
#include "FormTabularCreate.h"
|
||||||
@ -68,6 +69,7 @@ Dialogs::Dialogs(LyXView * lv)
|
|||||||
dialogs_.push_back(new FormPreferences(lv, this));
|
dialogs_.push_back(new FormPreferences(lv, this));
|
||||||
dialogs_.push_back(new FormPrint(lv, this));
|
dialogs_.push_back(new FormPrint(lv, this));
|
||||||
dialogs_.push_back(new FormRef(lv, this));
|
dialogs_.push_back(new FormRef(lv, this));
|
||||||
|
dialogs_.push_back(new FormSearch(lv, this));
|
||||||
dialogs_.push_back(new FormSplash(lv, this));
|
dialogs_.push_back(new FormSplash(lv, this));
|
||||||
dialogs_.push_back(new FormTabular(lv, this));
|
dialogs_.push_back(new FormTabular(lv, this));
|
||||||
dialogs_.push_back(new FormTabularCreate(lv, this));
|
dialogs_.push_back(new FormTabularCreate(lv, this));
|
||||||
|
127
src/frontends/xforms/FormSearch.C
Normal file
127
src/frontends/xforms/FormSearch.C
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/**
|
||||||
|
* \file FormSearch.C
|
||||||
|
* Copyright 2001 The LyX Team.
|
||||||
|
* See the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Edwin Leuven
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "FormSearch.h"
|
||||||
|
#include "form_search.h"
|
||||||
|
#include "gettext.h"
|
||||||
|
#include "Dialogs.h"
|
||||||
|
#include "Liason.h"
|
||||||
|
#include "LyXView.h"
|
||||||
|
#include "buffer.h"
|
||||||
|
#include "gettext.h"
|
||||||
|
#include "lyxfind.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
#ifdef CXX_WORKING_NAMESPACES
|
||||||
|
using Liason::setMinibuffer;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
FormSearch::FormSearch(LyXView * lv, Dialogs * d)
|
||||||
|
: FormBaseBD(lv, d, _("LyX: Find and Replace"), new NoRepeatedApplyReadOnlyPolicy),
|
||||||
|
dialog_(0)
|
||||||
|
{
|
||||||
|
// let the popup be shown
|
||||||
|
// This is a permanent connection so we won't bother
|
||||||
|
// storing a copy because we won't be disconnecting.
|
||||||
|
d->showSearch.connect(slot(this, &FormSearch::show));
|
||||||
|
// perhaps in the future we'd like a
|
||||||
|
// "search again" button/keybinding
|
||||||
|
// d->searchAgain.connect(slot(this, &FormSearch::FindNext));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FormSearch::~FormSearch()
|
||||||
|
{
|
||||||
|
delete dialog_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FL_FORM * FormSearch::form() const
|
||||||
|
{
|
||||||
|
if (dialog_)
|
||||||
|
return dialog_->form;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FormSearch::build()
|
||||||
|
{
|
||||||
|
dialog_ = build_search();
|
||||||
|
// Workaround dumb xforms sizing bug
|
||||||
|
minw_ = form()->w;
|
||||||
|
minh_ = form()->h;
|
||||||
|
|
||||||
|
// Manage the ok, apply and cancel/close buttons
|
||||||
|
bc_.setCancel(dialog_->button_cancel);
|
||||||
|
bc_.addReadOnly(dialog_->input_replace);
|
||||||
|
bc_.addReadOnly(dialog_->replace);
|
||||||
|
bc_.addReadOnly(dialog_->replaceall);
|
||||||
|
bc_.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FormSearch::update()
|
||||||
|
{
|
||||||
|
if (!dialog_)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bc_.readOnly(lv_->buffer()->isReadonly());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FormSearch::input(FL_OBJECT * obj, long)
|
||||||
|
{
|
||||||
|
if (obj == dialog_->findnext)
|
||||||
|
Find();
|
||||||
|
else if (obj == dialog_->findprev)
|
||||||
|
Find(false);
|
||||||
|
else if (obj == dialog_->replace)
|
||||||
|
Replace();
|
||||||
|
else if (obj == dialog_->replaceall)
|
||||||
|
Replace(true);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FormSearch::Find(bool const next = true)
|
||||||
|
{
|
||||||
|
bool found = LyXFind(lv_->view(),
|
||||||
|
fl_get_input(dialog_->input_search),
|
||||||
|
fl_get_button(dialog_->casesensitive),
|
||||||
|
fl_get_button(dialog_->matchword),
|
||||||
|
next);
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
setMinibuffer(lv_, _("String not found!"));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void FormSearch::Replace(bool const all = false)
|
||||||
|
{
|
||||||
|
int replace_count = LyXReplace(lv_->view(),
|
||||||
|
fl_get_input(dialog_->input_search),
|
||||||
|
fl_get_input(dialog_->input_replace),
|
||||||
|
fl_get_button(dialog_->casesensitive),
|
||||||
|
fl_get_button(dialog_->matchword),
|
||||||
|
true,
|
||||||
|
all);
|
||||||
|
|
||||||
|
if (replace_count == 0) {
|
||||||
|
setMinibuffer(lv_, _("String not found!"));
|
||||||
|
} else {
|
||||||
|
if (replace_count == 1) {
|
||||||
|
setMinibuffer(lv_, _("String has been replaced."));
|
||||||
|
} else {
|
||||||
|
string str = tostr(replace_count);
|
||||||
|
str += _(" strings have been replaced.");
|
||||||
|
setMinibuffer(lv_, str.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
58
src/frontends/xforms/FormSearch.h
Normal file
58
src/frontends/xforms/FormSearch.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
* \file FormSearch.h
|
||||||
|
* Copyright 2001 The LyX Team.
|
||||||
|
* See the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Edwin Leuven
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FORMSEARCH_H
|
||||||
|
#define FORMSEARCH_H
|
||||||
|
|
||||||
|
#include "FormBase.h"
|
||||||
|
|
||||||
|
struct FD_form_search;
|
||||||
|
class LyXView;
|
||||||
|
class Dialogs;
|
||||||
|
|
||||||
|
/** This class provides an XForms implementation of the FormSearch Dialog.
|
||||||
|
*/
|
||||||
|
class FormSearch : public FormBaseBD {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
FormSearch(LyXView *, Dialogs *);
|
||||||
|
///
|
||||||
|
~FormSearch();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/** Redraw the form (on receipt of a Signal indicating, for example,
|
||||||
|
* that the xform colours have been re-mapped).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// Filter the inputs
|
||||||
|
virtual bool input(FL_OBJECT *, long);
|
||||||
|
|
||||||
|
/// Build the popup
|
||||||
|
virtual void build();
|
||||||
|
|
||||||
|
/// Update the popup
|
||||||
|
virtual void update();
|
||||||
|
|
||||||
|
/// Searches occurance of string
|
||||||
|
/// if argument=true forward search otherwise backward search
|
||||||
|
void Find(bool const = true);
|
||||||
|
/// if argument=false replace once otherwise replace all
|
||||||
|
/// Replaces occurance of string
|
||||||
|
void Replace(bool const = false);
|
||||||
|
|
||||||
|
///
|
||||||
|
virtual FL_FORM * form() const;
|
||||||
|
|
||||||
|
/// Typedefinitions from the fdesign produced Header file
|
||||||
|
FD_form_search * build_search();
|
||||||
|
|
||||||
|
/// Real GUI implementation.
|
||||||
|
FD_form_search * dialog_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -88,6 +88,10 @@ libxforms_la_SOURCES = \
|
|||||||
FormRef.h \
|
FormRef.h \
|
||||||
form_ref.C \
|
form_ref.C \
|
||||||
form_ref.h \
|
form_ref.h \
|
||||||
|
FormSearch.C \
|
||||||
|
FormSearch.h \
|
||||||
|
form_search.C \
|
||||||
|
form_search.h \
|
||||||
FormSplash.C \
|
FormSplash.C \
|
||||||
FormSplash.h \
|
FormSplash.h \
|
||||||
form_splash.C \
|
form_splash.C \
|
||||||
|
109
src/frontends/xforms/form_search.C
Normal file
109
src/frontends/xforms/form_search.C
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
// File modified by fdfix.sh for use by lyx (with xforms >= 0.88) and gettext
|
||||||
|
#include <config.h>
|
||||||
|
#include "lyx_gui_misc.h"
|
||||||
|
#include "gettext.h"
|
||||||
|
|
||||||
|
/* Form definition file generated with fdesign. */
|
||||||
|
|
||||||
|
#include FORMS_H_LOCATION
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "form_search.h"
|
||||||
|
#include "FormSearch.h"
|
||||||
|
|
||||||
|
FD_form_search::~FD_form_search()
|
||||||
|
{
|
||||||
|
if ( form->visible ) fl_hide_form( form );
|
||||||
|
fl_free_form( form );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FD_form_search * FormSearch::build_search()
|
||||||
|
{
|
||||||
|
FL_OBJECT *obj;
|
||||||
|
FD_form_search *fdui = new FD_form_search;
|
||||||
|
|
||||||
|
fdui->form = fl_bgn_form(FL_NO_BOX, 440, 160);
|
||||||
|
fdui->form->u_vdata = this;
|
||||||
|
obj = fl_add_box(FL_UP_BOX, 0, 0, 440, 160, "");
|
||||||
|
obj = fl_add_frame(FL_ENGRAVED_FRAME, 300, 10, 130, 80, "");
|
||||||
|
fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_("Find|#n");
|
||||||
|
fdui->input_search = obj = fl_add_input(FL_NORMAL_INPUT, 110, 10, 180, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||||
|
fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
|
||||||
|
fl_set_object_resize(obj, FL_RESIZE_X);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_("Replace with|#W");
|
||||||
|
fdui->input_replace = obj = fl_add_input(FL_NORMAL_INPUT, 110, 40, 180, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||||
|
fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
|
||||||
|
fl_set_object_resize(obj, FL_RESIZE_X);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_(" >|#F^s");
|
||||||
|
fdui->findnext = obj = fl_add_button(FL_NORMAL_BUTTON, 200, 80, 90, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||||
|
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_(" <|#B^r");
|
||||||
|
fdui->findprev = obj = fl_add_button(FL_NORMAL_BUTTON, 110, 80, 90, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||||
|
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_("Replace|#R#r");
|
||||||
|
fdui->replace = obj = fl_add_button(FL_NORMAL_BUTTON, 110, 120, 90, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||||
|
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_("Close|^[");
|
||||||
|
fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON, 350, 120, 80, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||||
|
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseCancelCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_("Case sensitive|#s#S");
|
||||||
|
fdui->casesensitive = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 300, 20, 150, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_("Match word|#M#m");
|
||||||
|
fdui->matchword = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 300, 50, 150, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
{
|
||||||
|
char const * const dummy = N_("Replace All|#A#a");
|
||||||
|
fdui->replaceall = obj = fl_add_button(FL_NORMAL_BUTTON, 200, 120, 90, 30, idex(_(dummy)));
|
||||||
|
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||||
|
}
|
||||||
|
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||||
|
fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
|
||||||
|
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||||
|
fl_end_form();
|
||||||
|
|
||||||
|
fdui->form->fdui = fdui;
|
||||||
|
|
||||||
|
return fdui;
|
||||||
|
}
|
||||||
|
/*---------------------------------------*/
|
||||||
|
|
28
src/frontends/xforms/form_search.h
Normal file
28
src/frontends/xforms/form_search.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// File modified by fdfix.sh for use by lyx (with xforms >= 0.88) and gettext
|
||||||
|
/** Header file generated with fdesign **/
|
||||||
|
|
||||||
|
#ifndef FD_form_search_h_
|
||||||
|
#define FD_form_search_h_
|
||||||
|
|
||||||
|
/** Callbacks, globals and object handlers **/
|
||||||
|
extern "C" void C_FormBaseInputCB(FL_OBJECT *, long);
|
||||||
|
extern "C" void C_FormBaseCancelCB(FL_OBJECT *, long);
|
||||||
|
|
||||||
|
|
||||||
|
/**** Forms and Objects ****/
|
||||||
|
struct FD_form_search {
|
||||||
|
~FD_form_search();
|
||||||
|
|
||||||
|
FL_FORM *form;
|
||||||
|
FL_OBJECT *input_search;
|
||||||
|
FL_OBJECT *input_replace;
|
||||||
|
FL_OBJECT *findnext;
|
||||||
|
FL_OBJECT *findprev;
|
||||||
|
FL_OBJECT *replace;
|
||||||
|
FL_OBJECT *button_cancel;
|
||||||
|
FL_OBJECT *casesensitive;
|
||||||
|
FL_OBJECT *matchword;
|
||||||
|
FL_OBJECT *replaceall;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FD_form_search_h_ */
|
214
src/frontends/xforms/forms/form_search.fd
Normal file
214
src/frontends/xforms/forms/form_search.fd
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
Magic: 13000
|
||||||
|
|
||||||
|
Internal Form Definition File
|
||||||
|
(do not change)
|
||||||
|
|
||||||
|
Number of forms: 1
|
||||||
|
Unit of measure: FL_COORD_PIXEL
|
||||||
|
|
||||||
|
=============== FORM ===============
|
||||||
|
Name: form_search
|
||||||
|
Width: 440
|
||||||
|
Height: 160
|
||||||
|
Number of Objects: 11
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BOX
|
||||||
|
type: UP_BOX
|
||||||
|
box: 0 0 440 160
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_DEFAULT_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label:
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name:
|
||||||
|
callback:
|
||||||
|
argument:
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_FRAME
|
||||||
|
type: ENGRAVED_FRAME
|
||||||
|
box: 300 10 130 80
|
||||||
|
boxtype: FL_NO_BOX
|
||||||
|
colors: FL_BLACK FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_DEFAULT_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label:
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_NorthEast FL_NorthEast
|
||||||
|
name:
|
||||||
|
callback:
|
||||||
|
argument:
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_INPUT
|
||||||
|
type: NORMAL_INPUT
|
||||||
|
box: 110 10 180 30
|
||||||
|
boxtype: FL_DOWN_BOX
|
||||||
|
colors: FL_COL1 FL_MCOL
|
||||||
|
alignment: FL_ALIGN_LEFT
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Find|#n
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_X
|
||||||
|
gravity: FL_NorthWest FL_NorthEast
|
||||||
|
name: input_search
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_INPUT
|
||||||
|
type: NORMAL_INPUT
|
||||||
|
box: 110 40 180 30
|
||||||
|
boxtype: FL_DOWN_BOX
|
||||||
|
colors: FL_COL1 FL_MCOL
|
||||||
|
alignment: FL_ALIGN_LEFT
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Replace with|#W
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_X
|
||||||
|
gravity: FL_NorthWest FL_NorthEast
|
||||||
|
name: input_replace
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: NORMAL_BUTTON
|
||||||
|
box: 200 80 90 30
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: >|#F^s
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_SouthEast FL_SouthEast
|
||||||
|
name: findnext
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: NORMAL_BUTTON
|
||||||
|
box: 110 80 90 30
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: <|#B^r
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_SouthEast FL_SouthEast
|
||||||
|
name: findprev
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: NORMAL_BUTTON
|
||||||
|
box: 110 120 90 30
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Replace|#R#r
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_SouthEast FL_SouthEast
|
||||||
|
name: replace
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: NORMAL_BUTTON
|
||||||
|
box: 350 120 80 30
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Close|^[
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_SouthEast FL_SouthEast
|
||||||
|
name: button_cancel
|
||||||
|
callback: C_FormBaseCancelCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHECKBUTTON
|
||||||
|
type: PUSH_BUTTON
|
||||||
|
box: 300 20 150 30
|
||||||
|
boxtype: FL_NO_BOX
|
||||||
|
colors: FL_COL1 FL_YELLOW
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_DEFAULT_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Case sensitive|#s#S
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_NorthEast FL_NorthEast
|
||||||
|
name: casesensitive
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHECKBUTTON
|
||||||
|
type: PUSH_BUTTON
|
||||||
|
box: 300 50 150 30
|
||||||
|
boxtype: FL_NO_BOX
|
||||||
|
colors: FL_COL1 FL_YELLOW
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_DEFAULT_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Match word|#M#m
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_NorthEast FL_NorthEast
|
||||||
|
name: matchword
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: NORMAL_BUTTON
|
||||||
|
box: 200 120 90 30
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Replace All|#A#a
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_NONE
|
||||||
|
gravity: FL_SouthEast FL_SouthEast
|
||||||
|
name: replaceall
|
||||||
|
callback: C_FormBaseInputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
==============================
|
||||||
|
--------------------
|
@ -33,6 +33,7 @@ SRCS := form_bibitem.fd \
|
|||||||
form_preferences.fd \
|
form_preferences.fd \
|
||||||
form_print.fd \
|
form_print.fd \
|
||||||
form_ref.fd \
|
form_ref.fd \
|
||||||
|
form_search.fd \
|
||||||
form_splash.fd \
|
form_splash.fd \
|
||||||
form_tabular.fd \
|
form_tabular.fd \
|
||||||
form_tabular_create.fd \
|
form_tabular_create.fd \
|
||||||
|
195
src/lyxfind.C
Normal file
195
src/lyxfind.C
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma implementation
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "lyxtext.h"
|
||||||
|
#include "lyxfind.h"
|
||||||
|
#include "LyXView.h"
|
||||||
|
#include "minibuffer.h"
|
||||||
|
#include "lyx_gui_misc.h"
|
||||||
|
#include "support/textutils.h"
|
||||||
|
#include "support/lstrings.h"
|
||||||
|
#include "BufferView.h"
|
||||||
|
#include "buffer.h"
|
||||||
|
|
||||||
|
int LyXReplace(BufferView * bv,
|
||||||
|
string const & searchstr,
|
||||||
|
string const & replacestr,
|
||||||
|
bool const & casesens,
|
||||||
|
bool const & matchwrd,
|
||||||
|
bool const & forward,
|
||||||
|
bool const & replaceall=false)
|
||||||
|
{
|
||||||
|
int replace_count = 0;
|
||||||
|
|
||||||
|
if (!bv->available() || bv->buffer()->isReadonly())
|
||||||
|
return replace_count;
|
||||||
|
|
||||||
|
// CutSelection cannot cut a single space, so we have to stop
|
||||||
|
// in order to avoid endless loop :-(
|
||||||
|
if (searchstr.length() == 0
|
||||||
|
|| (searchstr.length() == 1 && searchstr[0] == ' ')) {
|
||||||
|
WriteAlert(_("Sorry!"), _("You cannot replace a single space, "
|
||||||
|
"nor an empty character."));
|
||||||
|
return replace_count;
|
||||||
|
}
|
||||||
|
// now we can start searching for the first
|
||||||
|
// start at top if replaceall
|
||||||
|
bool fw = forward;
|
||||||
|
if (replaceall) {
|
||||||
|
bv->text->ClearSelection(bv);
|
||||||
|
bv->text->CursorTop(bv);
|
||||||
|
// override search direction because we search top to bottom
|
||||||
|
fw = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if nothing selected or selection does not equal search string
|
||||||
|
// search and select next occurance and return if no replaceall
|
||||||
|
if (searchstr!=bv->text->selectionAsString(bv->buffer())) {
|
||||||
|
LyXFind(bv, searchstr, casesens, matchwrd, fw);
|
||||||
|
if (!replaceall)
|
||||||
|
return replace_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool found;
|
||||||
|
do {
|
||||||
|
bv->hideCursor();
|
||||||
|
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
|
||||||
|
bv->toggleSelection(false);
|
||||||
|
bv->text->ReplaceSelectionWithString(bv, replacestr);
|
||||||
|
bv->text->SetSelectionOverString(bv, replacestr);
|
||||||
|
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
|
||||||
|
++replace_count;
|
||||||
|
found = LyXFind(bv, searchstr, casesens, matchwrd, fw);
|
||||||
|
} while (replaceall && found);
|
||||||
|
|
||||||
|
if (bv->focus())
|
||||||
|
bv->showCursor();
|
||||||
|
|
||||||
|
return replace_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LyXFind(BufferView * bv,
|
||||||
|
string const & searchstr,
|
||||||
|
bool const & casesens,
|
||||||
|
bool const & matchwrd,
|
||||||
|
bool const & forward)
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
if (!bv->available() || searchstr.empty())
|
||||||
|
return found;
|
||||||
|
|
||||||
|
bv->hideCursor();
|
||||||
|
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
|
||||||
|
|
||||||
|
LyXText * ltCur = bv->text;
|
||||||
|
if (ltCur->selection)
|
||||||
|
ltCur->cursor = forward ? ltCur->sel_end_cursor
|
||||||
|
: ltCur->sel_start_cursor;
|
||||||
|
|
||||||
|
if (forward
|
||||||
|
? SearchForward(bv, searchstr, casesens, matchwrd)
|
||||||
|
: SearchBackward(bv, searchstr, casesens, matchwrd)) {
|
||||||
|
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
|
||||||
|
bv->toggleSelection();
|
||||||
|
bv->text->ClearSelection(bv);
|
||||||
|
bv->text->SetSelectionOverString(bv, searchstr);
|
||||||
|
bv->toggleSelection(false);
|
||||||
|
found = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (bv->focus())
|
||||||
|
bv->showCursor();
|
||||||
|
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// returns true if the specified string is at the specified position
|
||||||
|
bool IsStringInText(LyXParagraph * par, LyXParagraph::size_type pos,
|
||||||
|
string const & str, bool const & cs = true,
|
||||||
|
bool const & mw = false)
|
||||||
|
{
|
||||||
|
if (!par)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
string::size_type size = str.length();
|
||||||
|
LyXParagraph::size_type i = 0;
|
||||||
|
while (((pos + i) < par->Last())
|
||||||
|
&& (string::size_type(i) < size)
|
||||||
|
&& (cs ? (str[i] == par->GetChar(pos + i))
|
||||||
|
: (toupper(str[i]) == toupper(par->GetChar(pos + i)))))
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
if (size == string::size_type(i)) {
|
||||||
|
// if necessary, check whether string matches word
|
||||||
|
if (!mw ||
|
||||||
|
(mw && ((pos <= 0 || !IsLetterCharOrDigit(par->GetChar(pos - 1)))
|
||||||
|
&& (pos + size >= par->Last()
|
||||||
|
|| !IsLetterCharOrDigit(par->GetChar(pos + size))))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// forward search:
|
||||||
|
// if the string can be found: return true and set the cursor to
|
||||||
|
// the new position, cs = casesensitive, mw = matchword
|
||||||
|
bool SearchForward(BufferView * bv, string const & str,
|
||||||
|
bool const & cs = true, bool const & mw = false)
|
||||||
|
{
|
||||||
|
LyXParagraph * par = bv->text->cursor.par();
|
||||||
|
LyXParagraph::size_type pos = bv->text->cursor.pos();
|
||||||
|
|
||||||
|
while (par && !IsStringInText(par, pos, str, cs, mw)) {
|
||||||
|
if (pos < par->Last() - 1)
|
||||||
|
++pos;
|
||||||
|
else {
|
||||||
|
pos = 0;
|
||||||
|
par = par->Next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (par) {
|
||||||
|
bv->text->SetCursor(bv, par, pos);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// backward search:
|
||||||
|
// if the string can be found: return true and set the cursor to
|
||||||
|
// the new position, cs = casesensitive, mw = matchword
|
||||||
|
bool SearchBackward(BufferView * bv, string const & str,
|
||||||
|
bool const & cs = true, bool const & mw = false)
|
||||||
|
{
|
||||||
|
LyXParagraph * par = bv->text->cursor.par();
|
||||||
|
LyXParagraph::size_type pos = bv->text->cursor.pos();
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (pos > 0)
|
||||||
|
--pos;
|
||||||
|
else {
|
||||||
|
// We skip empty paragraphs (Asger)
|
||||||
|
do {
|
||||||
|
par = par->Previous();
|
||||||
|
if (par)
|
||||||
|
pos = par->Last() - 1;
|
||||||
|
} while (par && pos < 0);
|
||||||
|
}
|
||||||
|
} while (par && !IsStringInText(par, pos, str, cs, mw));
|
||||||
|
|
||||||
|
if (par) {
|
||||||
|
bv->text->SetCursor(bv, par, pos);
|
||||||
|
return true;
|
||||||
|
} else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
32
src/lyxfind.h
Normal file
32
src/lyxfind.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#ifndef LYXFIND_H
|
||||||
|
#define LYXFIND_H
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma interface
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "LString.h"
|
||||||
|
#include "lyxparagraph.h"
|
||||||
|
|
||||||
|
class BufferView;
|
||||||
|
|
||||||
|
int LyXReplace(BufferView * bv, string const &, string const &,
|
||||||
|
bool const &, bool const &, bool const &, bool const & = false);
|
||||||
|
|
||||||
|
bool LyXFind(BufferView * bv, string const &, bool const &, bool const &,
|
||||||
|
bool const &);
|
||||||
|
|
||||||
|
/// returns true if the specified string is at the specified position
|
||||||
|
bool IsStringInText(LyXParagraph * par, LyXParagraph::size_type pos,
|
||||||
|
string const & str, bool const & = true,
|
||||||
|
bool const & = false);
|
||||||
|
|
||||||
|
/// if the string is found: return true and set the cursor to the new position
|
||||||
|
bool SearchForward(BufferView *, string const & str, bool const & = true,
|
||||||
|
bool const & = false);
|
||||||
|
///
|
||||||
|
bool SearchBackward(BufferView *, string const & str, bool const & = true,
|
||||||
|
bool const & = false);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
149
src/lyxfr0.C
149
src/lyxfr0.C
@ -1,149 +0,0 @@
|
|||||||
/* This file is part of
|
|
||||||
* ======================================================
|
|
||||||
*
|
|
||||||
* LyX, The Document Processor
|
|
||||||
*
|
|
||||||
* Copyright 1995 Matthias Ettrich,
|
|
||||||
* Copyright 1995-2000 The LyX Team.
|
|
||||||
*
|
|
||||||
* ====================================================== */
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma implementation
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "lyxfr0.h"
|
|
||||||
#include "lyxfr1.h"
|
|
||||||
#include "lyx_gui_misc.h"
|
|
||||||
#include "frontends/Dialogs.h" // redrawGUI
|
|
||||||
|
|
||||||
#ifdef SIGC_CXX_NAMESPACES
|
|
||||||
using SigC::slot;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// callbacks for form form_search
|
|
||||||
void SearchCancelCB(FL_OBJECT * ob, long)
|
|
||||||
{
|
|
||||||
fl_hide_form(ob->form);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchForwardCB(FL_OBJECT * ob, long)
|
|
||||||
{
|
|
||||||
LyXFindReplace * lfr = static_cast<LyXFindReplace*>(ob->form->u_vdata);
|
|
||||||
lfr->SearchCB(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchBackwardCB(FL_OBJECT * ob, long)
|
|
||||||
{
|
|
||||||
LyXFindReplace * lfr = static_cast<LyXFindReplace*>(ob->form->u_vdata);
|
|
||||||
lfr->SearchCB(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchReplaceAllCB(FL_OBJECT * ob, long)
|
|
||||||
{
|
|
||||||
LyXFindReplace * lfr = static_cast<LyXFindReplace*>(ob->form->u_vdata);
|
|
||||||
lfr->SearchReplaceAllCB();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchReplaceCB(FL_OBJECT * ob, long)
|
|
||||||
{
|
|
||||||
LyXFindReplace * lfr = static_cast<LyXFindReplace*>(ob->form->u_vdata);
|
|
||||||
lfr->SearchReplaceCB();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SearchForm::SearchForm()
|
|
||||||
: search_form(0)
|
|
||||||
{
|
|
||||||
r_ = Dialogs::redrawGUI.connect(slot(this, &SearchForm::redraw));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SearchForm::~SearchForm()
|
|
||||||
{
|
|
||||||
// The search_form should be closed and freed when SearchForm
|
|
||||||
// is destructed.
|
|
||||||
r_.disconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchForm::redraw()
|
|
||||||
{
|
|
||||||
if (search_form && search_form->form_search->visible)
|
|
||||||
fl_redraw_form(search_form->form_search);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchForm::SearchCancelCB()
|
|
||||||
{
|
|
||||||
fl_hide_form(search_form->form_search);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchForm::StartSearch(LyXFindReplace * lfr)
|
|
||||||
{
|
|
||||||
static int ow = -1, oh;
|
|
||||||
|
|
||||||
if (!search_form) {
|
|
||||||
search_form = create_form_form_search();
|
|
||||||
fl_set_form_atclose(search_form->form_search,
|
|
||||||
CancelCloseBoxCB, 0);
|
|
||||||
}
|
|
||||||
// Set the u_vdata
|
|
||||||
search_form->form_search->u_vdata = lfr;
|
|
||||||
|
|
||||||
|
|
||||||
if (search_form->form_search->visible) {
|
|
||||||
fl_raise_form(search_form->form_search);
|
|
||||||
} else {
|
|
||||||
fl_show_form(search_form->form_search,
|
|
||||||
FL_PLACE_MOUSE | FL_FREE_SIZE, FL_TRANSIENT,
|
|
||||||
_("Find & Replace")); // RVDK_PATCH_5
|
|
||||||
if (ow < 0) {
|
|
||||||
ow = search_form->form_search->w;
|
|
||||||
oh = search_form->form_search->h;
|
|
||||||
}
|
|
||||||
fl_set_form_minsize(search_form->form_search, ow, oh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Returns the value of the replace string in the form
|
|
||||||
string const SearchForm::ReplaceString() const
|
|
||||||
{
|
|
||||||
return fl_get_input(search_form->input_replace);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchForm::replaceEnabled(bool fEnable)
|
|
||||||
{
|
|
||||||
fReplaceEnabled = fEnable;
|
|
||||||
if (fEnable) {
|
|
||||||
fl_activate_object(search_form->replace_button);
|
|
||||||
fl_activate_object(search_form->replaceall_button);
|
|
||||||
fl_activate_object(search_form->input_replace);
|
|
||||||
fl_set_object_lcol(search_form->replace_button, FL_BLACK);
|
|
||||||
fl_set_object_lcol(search_form->replaceall_button, FL_BLACK);
|
|
||||||
fl_set_object_lcol(search_form->input_replace, FL_BLACK);
|
|
||||||
} else {
|
|
||||||
fl_deactivate_object(search_form->replace_button);
|
|
||||||
fl_deactivate_object(search_form->replaceall_button);
|
|
||||||
fl_deactivate_object(search_form->input_replace);
|
|
||||||
fl_set_object_lcol(search_form->replace_button, FL_INACTIVE);
|
|
||||||
fl_set_object_lcol(search_form->replaceall_button, FL_INACTIVE);
|
|
||||||
fl_set_object_lcol(search_form->input_replace, FL_INACTIVE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SearchForm::SetSearchString(string const & ls)
|
|
||||||
{
|
|
||||||
fl_set_input(search_form->input_search, ls.c_str());
|
|
||||||
}
|
|
97
src/lyxfr0.h
97
src/lyxfr0.h
@ -1,97 +0,0 @@
|
|||||||
// -*- C++ -*-
|
|
||||||
#ifndef LYXFR0_H
|
|
||||||
#define LYXFR0_H
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma interface
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "LString.h"
|
|
||||||
#include FORMS_H_LOCATION
|
|
||||||
#include "form1.h"
|
|
||||||
#include <sigc++/signal_system.h>
|
|
||||||
|
|
||||||
class LyXFindReplace;
|
|
||||||
|
|
||||||
#ifdef SIGC_CXX_NAMESPACES
|
|
||||||
using SigC::Object;
|
|
||||||
using SigC::Connection;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
The comments below are most likely not valied anymore since
|
|
||||||
the rewrite of LyXFindReplace0 and LyXFindReplace1. (Lgb)
|
|
||||||
|
|
||||||
LyXFindReplace0
|
|
||||||
|
|
||||||
This is a virtual base class. It does not handle text specific
|
|
||||||
items. It only manages the Find & Replace form and the variables.
|
|
||||||
|
|
||||||
To be added:
|
|
||||||
|
|
||||||
- Confirm replace lightbutton (checkbox)
|
|
||||||
|
|
||||||
- A history list for search and replace strings.
|
|
||||||
These 2 stringlists should match, so that you can replay previous replaces.
|
|
||||||
If you select another search string, then the first choice should be the
|
|
||||||
replace string you have typed before.
|
|
||||||
|
|
||||||
- regex searches (I'm working on that -- dnaber, 1999-02-24)
|
|
||||||
|
|
||||||
*/
|
|
||||||
class SearchForm : public Object {
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
SearchForm();
|
|
||||||
///
|
|
||||||
~SearchForm();
|
|
||||||
|
|
||||||
///
|
|
||||||
bool CaseSensitive() const {
|
|
||||||
return fl_get_button(search_form->btnCaseSensitive);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
bool MatchWord() const {
|
|
||||||
return fl_get_button(search_form->btnMatchWord);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
string const SearchString() const {
|
|
||||||
return fl_get_input(search_form->input_search);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Initialize internal variables and dialog
|
|
||||||
void StartSearch(LyXFindReplace *);
|
|
||||||
|
|
||||||
///
|
|
||||||
void replaceEnabled(bool fEnabled);
|
|
||||||
///
|
|
||||||
bool replaceEnabled() const { return fReplaceEnabled; }
|
|
||||||
|
|
||||||
// Callbacks from form
|
|
||||||
///
|
|
||||||
void SearchCancelCB();
|
|
||||||
|
|
||||||
// Return values
|
|
||||||
///
|
|
||||||
void SetSearchString(string const & ls);
|
|
||||||
///
|
|
||||||
string const ReplaceString() const;
|
|
||||||
|
|
||||||
///
|
|
||||||
bool ValidSearchData() const { return !(SearchString().empty()); }
|
|
||||||
private:
|
|
||||||
/** Redraw the form (on receipt of a Signal indicating, for example,
|
|
||||||
that the xform colors have been re-mapped).
|
|
||||||
*/
|
|
||||||
void redraw();
|
|
||||||
///
|
|
||||||
FD_form_search * search_form;
|
|
||||||
/// replace buttons enabled?
|
|
||||||
bool fReplaceEnabled;
|
|
||||||
/// Redraw connection.
|
|
||||||
Connection r_;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
358
src/lyxfr1.C
358
src/lyxfr1.C
@ -1,358 +0,0 @@
|
|||||||
/* This file is part of
|
|
||||||
* ======================================================
|
|
||||||
*
|
|
||||||
* LyX, The Document Processor
|
|
||||||
*
|
|
||||||
* Copyright 1995 Matthias Ettrich,
|
|
||||||
* Copyright 1995-2000 The LyX Team.
|
|
||||||
*
|
|
||||||
* ====================================================== */
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma implementation
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "lyxfr1.h"
|
|
||||||
|
|
||||||
#include "lyxtext.h"
|
|
||||||
#include "LyXView.h"
|
|
||||||
#include "minibuffer.h"
|
|
||||||
#include "lyx_gui_misc.h"
|
|
||||||
#include "support/textutils.h"
|
|
||||||
#include "support/lstrings.h"
|
|
||||||
#include "BufferView.h"
|
|
||||||
#include "buffer.h"
|
|
||||||
|
|
||||||
// Returns the current selection. If nothing is selected or if the selection
|
|
||||||
// spans 2 paragraphs, an empty string is returned.
|
|
||||||
static
|
|
||||||
string GetCurrentSelectionAsString(LyXText * lt)
|
|
||||||
{
|
|
||||||
string sz;
|
|
||||||
|
|
||||||
LyXParagraph * par = lt->cursor.par();
|
|
||||||
if (lt->selection && lt->sel_cursor.par() == par) {
|
|
||||||
// (selected) and (begin/end in same paragraph)
|
|
||||||
LyXParagraph::size_type pos =
|
|
||||||
lt->sel_start_cursor.pos();
|
|
||||||
LyXParagraph::size_type endpos =
|
|
||||||
lt->sel_end_cursor.pos();
|
|
||||||
bool fPrevIsSpace = false;
|
|
||||||
char ch;
|
|
||||||
while (pos < par->Last() && pos < endpos) {
|
|
||||||
ch = par->GetChar(pos);
|
|
||||||
|
|
||||||
//HB??: Maybe (ch <= ' ')
|
|
||||||
if ((ch == ' ') || (ch <= LyXParagraph::META_INSET)) {
|
|
||||||
// consecutive spaces --> 1 space char
|
|
||||||
if (fPrevIsSpace) {
|
|
||||||
++pos; // Next text pos
|
|
||||||
continue; // same search pos
|
|
||||||
}
|
|
||||||
sz += ' ';
|
|
||||||
fPrevIsSpace = true;
|
|
||||||
} else {
|
|
||||||
sz += ch;
|
|
||||||
fPrevIsSpace = false;
|
|
||||||
}
|
|
||||||
++pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sz;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// If nothing selected, select the word at the cursor.
|
|
||||||
// Returns the current selection
|
|
||||||
static inline
|
|
||||||
string GetSelectionOrWordAtCursor(BufferView * bv)
|
|
||||||
{
|
|
||||||
bv->text->SelectWordWhenUnderCursor(bv);
|
|
||||||
return GetCurrentSelectionAsString(bv->text);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// This is a copy of SetSelectionOverString from text.C
|
|
||||||
// It does the same, but uses only the length as a parameter
|
|
||||||
static inline
|
|
||||||
void SetSelectionOverLenChars(BufferView * bv, int len)
|
|
||||||
{
|
|
||||||
bv->text->sel_cursor = bv->text->cursor;
|
|
||||||
for (int i = 0; i < len; ++i)
|
|
||||||
bv->text->CursorRight(bv);
|
|
||||||
bv->text->SetSelection(bv);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
LyXFindReplace::LyXFindReplace()
|
|
||||||
: bv(0)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
LyXFindReplace::~LyXFindReplace()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
void LyXFindReplace::StartSearch(BufferView * b)
|
|
||||||
{
|
|
||||||
bv = b;
|
|
||||||
SF.StartSearch(this);
|
|
||||||
SF.replaceEnabled(!bv->buffer()->isReadonly());
|
|
||||||
searchForward = true;
|
|
||||||
if (SF.SearchString().empty())
|
|
||||||
SF.SetSearchString(GetSelectionOrWordAtCursor(bv));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// TODO?: the user can insert multiple spaces with this
|
|
||||||
// routine (1999-01-11, dnaber)
|
|
||||||
void LyXFindReplace::SearchReplaceCB()
|
|
||||||
{
|
|
||||||
if (!bv->available()) return;
|
|
||||||
if (bv->buffer()->isReadonly()) return;
|
|
||||||
|
|
||||||
// CutSelection cannot cut a single space, so we have to stop
|
|
||||||
// in order to avoid endless loop :-(
|
|
||||||
if (SF.SearchString().length() == 0
|
|
||||||
|| (SF.SearchString().length() == 1
|
|
||||||
&& SF.SearchString()[0] == ' ')) {
|
|
||||||
WriteAlert(_("Sorry!"), _("You cannot replace a single space, "
|
|
||||||
"nor an empty character."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string const replacestring = SF.ReplaceString();
|
|
||||||
|
|
||||||
bv->hideCursor();
|
|
||||||
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
|
|
||||||
|
|
||||||
LyXText * ltCur = bv->text;
|
|
||||||
if (ltCur->selection) {
|
|
||||||
// clear the selection (if there is any)
|
|
||||||
bv->toggleSelection(false);
|
|
||||||
bv->text->
|
|
||||||
ReplaceSelectionWithString(bv, replacestring);
|
|
||||||
bv->text->
|
|
||||||
SetSelectionOverString(bv, replacestring);
|
|
||||||
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// jump to next match:
|
|
||||||
SearchCB(searchForward);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// replaces all occurences of a string (1999-01-15, dnaber@mini.gt.owl.de)
|
|
||||||
void LyXFindReplace::SearchReplaceAllCB()
|
|
||||||
{
|
|
||||||
if (!bv->available()) return;
|
|
||||||
if (bv->buffer()->isReadonly()) return;
|
|
||||||
|
|
||||||
// CutSelection cannot cut a single space, so we have to stop
|
|
||||||
// in order to avoid endless loop :-(
|
|
||||||
if (SF.SearchString().length() == 0
|
|
||||||
|| (SF.SearchString().length() == 1
|
|
||||||
&& SF.SearchString()[0] == ' ')) {
|
|
||||||
WriteAlert(_("Sorry!"), _("You cannot replace a single space, "
|
|
||||||
"nor an empty character."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string const replacestring = SF.ReplaceString();
|
|
||||||
|
|
||||||
bv->hideCursor();
|
|
||||||
|
|
||||||
// start at top
|
|
||||||
bv->text->ClearSelection(bv);
|
|
||||||
bv->text->CursorTop(bv);
|
|
||||||
|
|
||||||
int replace_count = 0;
|
|
||||||
LyXText * ltCur;
|
|
||||||
do {
|
|
||||||
ltCur = bv->text;
|
|
||||||
if (ltCur->selection) {
|
|
||||||
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
|
|
||||||
bv->toggleSelection(false);
|
|
||||||
bv->text->
|
|
||||||
ReplaceSelectionWithString(bv, replacestring);
|
|
||||||
bv->text->
|
|
||||||
SetSelectionOverString(bv, replacestring);
|
|
||||||
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
|
|
||||||
++replace_count;
|
|
||||||
}
|
|
||||||
} while (SearchCB(true));
|
|
||||||
if (replace_count == 0) {
|
|
||||||
bv->owner()->getMiniBuffer()->Set(
|
|
||||||
_("String not found!"));
|
|
||||||
} else {
|
|
||||||
if (replace_count == 1) {
|
|
||||||
bv->owner()->getMiniBuffer()->Set(
|
|
||||||
_("1 string has been replaced."));
|
|
||||||
} else {
|
|
||||||
string str = tostr(replace_count);
|
|
||||||
str += _(" strings have been replaced.");
|
|
||||||
bv->owner()->getMiniBuffer()->Set(str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool LyXFindReplace::SearchCB(bool fForward)
|
|
||||||
{
|
|
||||||
// store search direction
|
|
||||||
searchForward = fForward;
|
|
||||||
|
|
||||||
if (!bv->available())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bv->hideCursor();
|
|
||||||
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
|
|
||||||
LyXText * ltCur = bv->text;
|
|
||||||
if (ltCur->selection)
|
|
||||||
ltCur->cursor = fForward ? ltCur->sel_end_cursor :
|
|
||||||
ltCur->sel_start_cursor;
|
|
||||||
|
|
||||||
iLenSelected = SF.SearchString().length();
|
|
||||||
bool result;
|
|
||||||
|
|
||||||
if (!SF.ValidSearchData() ||
|
|
||||||
(fForward ? SearchForward(bv):SearchBackward(bv))) {
|
|
||||||
bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
|
|
||||||
|
|
||||||
// clear the selection (if there is any)
|
|
||||||
bv->toggleSelection();
|
|
||||||
bv->text->ClearSelection(bv);
|
|
||||||
|
|
||||||
// set the new selection
|
|
||||||
SetSelectionOverLenChars(bv, iLenSelected);
|
|
||||||
bv->toggleSelection(false);
|
|
||||||
bv->owner()->getMiniBuffer()->Set(_("Found."));
|
|
||||||
result = true;
|
|
||||||
} else {
|
|
||||||
bv->owner()->getMiniBuffer()->Set(_("String not found!"));
|
|
||||||
result = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bv->focus())
|
|
||||||
bv->showCursor();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// if the string can be found: return true and set the cursor to
|
|
||||||
// the new position
|
|
||||||
// (was: LyXText::SearchForward(char const* string) in text2.C )
|
|
||||||
bool LyXFindReplace::SearchForward(BufferView * bv)
|
|
||||||
{
|
|
||||||
LyXParagraph * par = bv->text->cursor.par();
|
|
||||||
LyXParagraph::size_type pos = bv->text->cursor.pos();
|
|
||||||
|
|
||||||
while (par && !IsSearchStringInText(par, pos)) {
|
|
||||||
if (pos < par->Last() - 1)
|
|
||||||
++pos;
|
|
||||||
else {
|
|
||||||
pos = 0;
|
|
||||||
par = par->Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (par) {
|
|
||||||
bv->text->SetCursor(bv, par, pos);
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// if the string can be found: return true and set the cursor to
|
|
||||||
// the new position
|
|
||||||
// (was: LyXText::SearchBackward(char const* string) in text2.C )
|
|
||||||
bool LyXFindReplace::SearchBackward(BufferView * bv)
|
|
||||||
{
|
|
||||||
LyXParagraph * par = bv->text->cursor.par();
|
|
||||||
int pos = bv->text->cursor.pos();
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (pos > 0)
|
|
||||||
--pos;
|
|
||||||
else {
|
|
||||||
// We skip empty paragraphs (Asger)
|
|
||||||
do {
|
|
||||||
par = par->Previous();
|
|
||||||
if (par)
|
|
||||||
pos = par->Last() - 1;
|
|
||||||
} while (par && pos < 0);
|
|
||||||
}
|
|
||||||
} while (par && !IsSearchStringInText(par, pos));
|
|
||||||
|
|
||||||
if (par) {
|
|
||||||
bv->text->SetCursor(bv, par, pos);
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Compares 2 char values.
|
|
||||||
return value is
|
|
||||||
> 0 if chSearch > ch2
|
|
||||||
= 0 if chSearch == ch2
|
|
||||||
< 0 if chSearch < ch2
|
|
||||||
*/
|
|
||||||
int LyXFindReplace::CompareChars(char chSearch, char chText) const
|
|
||||||
{
|
|
||||||
if (SF.CaseSensitive())
|
|
||||||
return (chSearch - chText);
|
|
||||||
return (toupper(chSearch) - toupper(chText));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// returns true if the search string is at the specified position
|
|
||||||
// (Copied from the original "LyXText::IsStringInText" in text2.C )
|
|
||||||
bool LyXFindReplace::IsSearchStringInText(LyXParagraph * par,
|
|
||||||
LyXParagraph::size_type pos) const
|
|
||||||
{
|
|
||||||
if (!par) return false;
|
|
||||||
|
|
||||||
char chSrch = 0;
|
|
||||||
char chText;
|
|
||||||
bool fPrevIsSpace = false;
|
|
||||||
int iText = 0;
|
|
||||||
string::size_type iSrch = 0;
|
|
||||||
while (pos + iText < par->Last() &&
|
|
||||||
iSrch < SF.SearchString().length()) {
|
|
||||||
chSrch = SF.SearchString()[iSrch];
|
|
||||||
chText = par->GetChar(pos+iText);
|
|
||||||
if (chText == ' ') {
|
|
||||||
if (fPrevIsSpace) {
|
|
||||||
++iText; // next Text pos
|
|
||||||
continue; // same search pos
|
|
||||||
}
|
|
||||||
fPrevIsSpace = true;
|
|
||||||
} else
|
|
||||||
fPrevIsSpace = false;
|
|
||||||
if (CompareChars(chSrch, chText) != 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
++iSrch;
|
|
||||||
++iText;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iSrch < SF.SearchString().length())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!SF.MatchWord()
|
|
||||||
|| ((pos <= 0 || !IsLetterCharOrDigit(par->GetChar(pos - 1)))
|
|
||||||
&& (pos + iText >= par->Last()
|
|
||||||
|| !IsLetterCharOrDigit(par->GetChar(pos + iText))))) {
|
|
||||||
iLenSelected = iText;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
64
src/lyxfr1.h
64
src/lyxfr1.h
@ -1,64 +0,0 @@
|
|||||||
// -*- C++ -*-
|
|
||||||
#ifndef LYXFR1_H
|
|
||||||
#define LYXFR1_H
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma interface
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "lyxparagraph.h"
|
|
||||||
#include "lyxfr0.h"
|
|
||||||
|
|
||||||
class LyXText;
|
|
||||||
|
|
||||||
/** Find and replace in LyXText texts.
|
|
||||||
|
|
||||||
This class implements Find & Replace in LyXText texts. It is based on
|
|
||||||
LyXFindReplace0, which implements the form related stuff. (see lyxfr0.h)
|
|
||||||
*/
|
|
||||||
class LyXFindReplace {
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
LyXFindReplace();
|
|
||||||
///
|
|
||||||
~LyXFindReplace();
|
|
||||||
|
|
||||||
/// Initialize internal variables and search form
|
|
||||||
void StartSearch(BufferView *);
|
|
||||||
|
|
||||||
///
|
|
||||||
bool SearchCB(bool fForward);
|
|
||||||
///
|
|
||||||
void SearchReplaceCB();
|
|
||||||
///
|
|
||||||
void SearchReplaceAllCB();
|
|
||||||
private:
|
|
||||||
/// Set by IsSearchStringInText:
|
|
||||||
mutable int iLenSelected;
|
|
||||||
|
|
||||||
/// Direction we are searching:
|
|
||||||
bool searchForward;
|
|
||||||
|
|
||||||
///
|
|
||||||
bool SearchForward(BufferView *);
|
|
||||||
///
|
|
||||||
bool SearchBackward(BufferView *);
|
|
||||||
|
|
||||||
/** Compares 2 char values.
|
|
||||||
return value is
|
|
||||||
\begin{itemize}
|
|
||||||
\item > 0 if ch1 > ch2
|
|
||||||
\item = 0 if ch1 == ch2
|
|
||||||
\item < 0 if ch1 < ch2
|
|
||||||
\end{itemize}
|
|
||||||
*/
|
|
||||||
int CompareChars(char chSearch, char chText) const;
|
|
||||||
/// returns true if the specified string is at the specified position
|
|
||||||
bool IsSearchStringInText(LyXParagraph * par,
|
|
||||||
LyXParagraph::size_type pos) const;
|
|
||||||
///
|
|
||||||
SearchForm SF;
|
|
||||||
///
|
|
||||||
BufferView * bv;
|
|
||||||
};
|
|
||||||
#endif
|
|
@ -75,7 +75,6 @@
|
|||||||
#include "trans_mgr.h"
|
#include "trans_mgr.h"
|
||||||
#include "layout.h"
|
#include "layout.h"
|
||||||
#include "WorkArea.h"
|
#include "WorkArea.h"
|
||||||
#include "lyxfr1.h"
|
|
||||||
#include "bufferview_funcs.h"
|
#include "bufferview_funcs.h"
|
||||||
#include "frontends/Dialogs.h"
|
#include "frontends/Dialogs.h"
|
||||||
#include "frontends/Toolbar.h"
|
#include "frontends/Toolbar.h"
|
||||||
@ -86,6 +85,7 @@
|
|||||||
#include "importer.h"
|
#include "importer.h"
|
||||||
#include "FontLoader.h"
|
#include "FontLoader.h"
|
||||||
#include "TextCache.h"
|
#include "TextCache.h"
|
||||||
|
#include "lyxfind.h"
|
||||||
|
|
||||||
using std::pair;
|
using std::pair;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
@ -708,8 +708,8 @@ string const LyXFunc::Dispatch(int ac,
|
|||||||
|
|
||||||
if (!searched_string.empty() &&
|
if (!searched_string.empty() &&
|
||||||
((action == LFUN_WORDFINDBACKWARD) ?
|
((action == LFUN_WORDFINDBACKWARD) ?
|
||||||
TEXT()->SearchBackward(owner->view(), searched_string) :
|
SearchBackward(owner->view(), searched_string) :
|
||||||
TEXT()->SearchForward(owner->view(), searched_string))) {
|
SearchForward(owner->view(), searched_string))) {
|
||||||
|
|
||||||
// ??? What is that ???
|
// ??? What is that ???
|
||||||
owner->view()->update(TEXT(), BufferView::SELECT|BufferView::FITCUR);
|
owner->view()->update(TEXT(), BufferView::SELECT|BufferView::FITCUR);
|
||||||
@ -903,11 +903,8 @@ string const LyXFunc::Dispatch(int ac,
|
|||||||
|
|
||||||
case LFUN_MENUSEARCH:
|
case LFUN_MENUSEARCH:
|
||||||
{
|
{
|
||||||
// Ok this is one _very_ bad solution, but I think that some
|
owner->getDialogs()->showSearch();
|
||||||
// of this will be rewritten as part of GUI indep anyway.
|
break;
|
||||||
// Lgb
|
|
||||||
static LyXFindReplace FR_;
|
|
||||||
FR_.StartSearch(owner->view());
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -402,12 +402,6 @@ public:
|
|||||||
|
|
||||||
/* these things are for search and replace */
|
/* these things are for search and replace */
|
||||||
|
|
||||||
/** returns true if the specified string is at the specified
|
|
||||||
position
|
|
||||||
*/
|
|
||||||
bool IsStringInText(LyXParagraph * par,
|
|
||||||
LyXParagraph::size_type pos,
|
|
||||||
string const & str) const;
|
|
||||||
/** sets the selection over the number of characters of string,
|
/** sets the selection over the number of characters of string,
|
||||||
no check!!
|
no check!!
|
||||||
*/
|
*/
|
||||||
@ -418,12 +412,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
void ReplaceSelectionWithString(BufferView *, string const & str);
|
void ReplaceSelectionWithString(BufferView *, string const & str);
|
||||||
|
|
||||||
/** if the string can be found: return true and set the cursor to
|
|
||||||
the new position */
|
|
||||||
bool SearchForward(BufferView *, string const & str) const;
|
|
||||||
///
|
|
||||||
bool SearchBackward(BufferView *, string const & str) const;
|
|
||||||
|
|
||||||
/// needed to insert the selection
|
/// needed to insert the selection
|
||||||
void InsertStringA(BufferView *, string const & str);
|
void InsertStringA(BufferView *, string const & str);
|
||||||
/// needed to insert the selection
|
/// needed to insert the selection
|
||||||
|
69
src/text2.C
69
src/text2.C
@ -2383,26 +2383,6 @@ LyXParagraph * LyXText::FirstParagraph() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// returns true if the specified string is at the specified position
|
|
||||||
bool LyXText::IsStringInText(LyXParagraph * par,
|
|
||||||
LyXParagraph::size_type pos,
|
|
||||||
string const & str) const
|
|
||||||
{
|
|
||||||
if (!par)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
LyXParagraph::size_type i = 0;
|
|
||||||
while (pos + i < par->Last()
|
|
||||||
&& string::size_type(i) < str.length()
|
|
||||||
&& str[i] == par->GetChar(pos + i)) {
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
if (str.length() == string::size_type(i))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// sets the selection over the number of characters of string, no check!!
|
// sets the selection over the number of characters of string, no check!!
|
||||||
void LyXText::SetSelectionOverString(BufferView * bview, string const & str)
|
void LyXText::SetSelectionOverString(BufferView * bview, string const & str)
|
||||||
{
|
{
|
||||||
@ -2444,55 +2424,6 @@ void LyXText::ReplaceSelectionWithString(BufferView * bview,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// if the string can be found: return true and set the cursor to
|
|
||||||
// the new position
|
|
||||||
bool LyXText::SearchForward(BufferView * bview, string const & str) const
|
|
||||||
{
|
|
||||||
LyXParagraph * par = cursor.par();
|
|
||||||
LyXParagraph::size_type pos = cursor.pos();
|
|
||||||
while (par && !IsStringInText(par, pos, str)) {
|
|
||||||
if (pos < par->Last() - 1)
|
|
||||||
++pos;
|
|
||||||
else {
|
|
||||||
pos = 0;
|
|
||||||
par = par->Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (par) {
|
|
||||||
SetCursor(bview, par, pos);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool LyXText::SearchBackward(BufferView * bview, string const & str) const
|
|
||||||
{
|
|
||||||
LyXParagraph * par = cursor.par();
|
|
||||||
int pos = cursor.pos();
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (pos > 0)
|
|
||||||
--pos;
|
|
||||||
else {
|
|
||||||
// We skip empty paragraphs (Asger)
|
|
||||||
do {
|
|
||||||
par = par->Previous();
|
|
||||||
if (par)
|
|
||||||
pos = par->Last() - 1;
|
|
||||||
} while (par && pos < 0);
|
|
||||||
}
|
|
||||||
} while (par && !IsStringInText(par, pos, str));
|
|
||||||
|
|
||||||
if (par) {
|
|
||||||
SetCursor(bview, par, pos);
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// needed to insert the selection
|
// needed to insert the selection
|
||||||
void LyXText::InsertStringA(BufferView * bview, string const & str)
|
void LyXText::InsertStringA(BufferView * bview, string const & str)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user