/[antiright]/antiright/src/arshell/search.c
ViewVC logotype

Diff of /antiright/src/arshell/search.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by jefbed, Mon Aug 16 17:27:05 2004 UTC revision 1.3 by jefbed, Mon Aug 23 01:15:56 2004 UTC
# Line 20  Line 20 
20  */  */
21    
22  #include "arshell.h"  #include "arshell.h"
23    #include <ctype.h>
24    
25  XmTextPosition  XmTextPosition
26  arshell_end_of_word(XmTextPosition start)  arshell_end_of_word(XmTextPosition start)
# Line 92  arshell_find_at_cursor_cb() Line 93  arshell_find_at_cursor_cb()
93  }  }
94    
95  void  void
96  arshell_wrap_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data)  arshell_wrap_toggle_cb()
97  {  {
98    arshell.edit.search_options.wrap=    arshell.edit.search_options.wrap=
99      XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle);      XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle);
# Line 100  arshell_wrap_toggle_cb(Widget widget, Xt Line 101  arshell_wrap_toggle_cb(Widget widget, Xt
101                           arshell.edit.search_options.wrap, True);                           arshell.edit.search_options.wrap, True);
102  }  }
103  void  void
104  arshell_preserve_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data)  arshell_preserve_toggle_cb()
105  {  {
106    arshell.edit.search_options.preserve=    arshell.edit.search_options.preserve=
107      XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle);      XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle);
108  }  }
109  void  void
110  arshell_replace_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data)  arshell_replace_toggle_cb()
111  {  {
112    arshell.edit.search_options.replace=    arshell.edit.search_options.replace=
113      XmToggleButtonGetState(arshell.edit.search_options.replace_toggle);      XmToggleButtonGetState(arshell.edit.search_options.replace_toggle);
114    ARBUG;    
115    if(arshell.edit.search_options.replace)    if(arshell.edit.search_options.replace)
116      {      {
117        ARBUG;        
118        ARCLARG;        ARCLARG;
119        antiright_set(XmNsensitive, True);        antiright_set(XmNsensitive, True);
120        antiright_set_values(arshell.edit.replace_widget);        antiright_set_values(arshell.edit.replace_widget);
121        ARBUG;        
122        antiright_set_values(arshell.edit.search_options.replace_label);        antiright_set_values(arshell.edit.search_options.replace_label);
123        ARCLARG;        ARCLARG;
124        ARBUG;        
125      }      }
126    else    else
127      {      {
# Line 132  arshell_replace_toggle_cb(Widget widget, Line 133  arshell_replace_toggle_cb(Widget widget,
133      }      }
134  }  }
135  void  void
136  arshell_replace_all_toggle_cb(Widget widget, XtPointer client_data, XtPointer call_data)  arshell_ignore_case_toggle_cb()
137  {  {
138    arshell.edit.search_options.replace_all=    arshell.edit.search_options.ignore_case=
139      XmToggleButtonGetState(arshell.edit.search_options.replace_all_toggle);      XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle);
   XmToggleButtonSetState(arshell.edit.search_options.replace_toggle,  
                          arshell.edit.search_options.replace_all, True);  
   arshell_replace_toggle_cb(widget, client_data, call_data);  
140  }  }
141    
142  void  void
# Line 148  arshell_search_replace_ok_cb(Widget widg Line 146  arshell_search_replace_ok_cb(Widget widg
146  {  {
147    XmTextPosition position;    XmTextPosition position;
148    char *search_string;    char *search_string;
149    ARBUG;    char *backup_text=NULL;
150      /* The find widget is always used.  */
151      search_string=XmTextFieldGetString(arshell.edit.find_widget);
152      assert(search_string != NULL);
153      if(XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle))
154        {
155          /* Convert the text buffer and search string to lower case so
156             that case is not a factor in the search.  */
157          int counter=0;
158          char *lowered_buffer;
159          while(search_string[counter]!='\0')
160            {
161              search_string[counter]=tolower(search_string[counter]);
162              counter++;
163            }
164          backup_text=XmTextGetString(arshell.gui.widgets.work);
165          lowered_buffer=XmTextGetString(arshell.gui.widgets.work);
166          counter=0;
167          while(lowered_buffer[counter]!='\0')
168            {
169              lowered_buffer[counter]=tolower(lowered_buffer[counter]);
170              counter++;
171            }
172          XmTextSetString(arshell.gui.widgets.work, lowered_buffer);
173        }
174      client_data=NULL;
175      
176    if(arshell.edit.search_options.replace)    if(arshell.edit.search_options.replace)
177      {      {
178        XmTextPosition end_position;        XmTextPosition end_position;
179        char *replacement_string;        char *replacement_string;
180        Boolean search_status;        
       ARBUG;  
       search_string=XmTextFieldGetString(arshell.edit.find_widget);  
       ARBUG;  
181        XmTextFindString(arshell.gui.widgets.work,        XmTextFindString(arshell.gui.widgets.work,
182                         XmTextGetInsertionPosition(arshell.gui.widgets.work),                         XmTextGetInsertionPosition(arshell.gui.widgets.work),
183                         search_string,                         search_string,
184                         arshell.edit.search_options.direction,                         arshell.edit.search_options.direction,
185                         &position);                         &position);
186        ARBUG;        /* Restore the buffer if it was converted to lower case during a
187             search with "Ignore Case" set.  */
188          if(XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle))
189            {
190              XmTextSetString(arshell.gui.widgets.work, backup_text);
191              XtFree(backup_text);
192            }
193          
194        XtFree(search_string);        XtFree(search_string);
195        ARBUG;        
196        XmTextFindString(arshell.gui.widgets.work,        XmTextFindString(arshell.gui.widgets.work,
197                         position,                         position,
198                         " ",                         " ",
199                         XmTEXT_FORWARD,                         XmTEXT_FORWARD,
200                         &end_position);                         &end_position);
201        ARBUG;        
202        replacement_string=XmTextFieldGetString(arshell.edit.replace_widget);        replacement_string=XmTextFieldGetString(arshell.edit.replace_widget);
203        if(end_position>position)        if(end_position>position)
204          {          {
205            ARBUG;            
206            XmTextReplace(arshell.gui.widgets.work, position, end_position,            XmTextReplace(arshell.gui.widgets.work, position, end_position,
207                          replacement_string);                          replacement_string);
208            ARBUG;            
209          }          }
210        else        else
211          {          {
212            ARBUG;            
213            if(arshell.edit.search_options.wrap && !arshell.edit.search_options.wrapped)            if(arshell.edit.search_options.wrap
214                 && !arshell.edit.search_options.wrapped)
215              {              {
216                ARBUG;                
217                arshell.edit.search_options.direction=XmTEXT_BACKWARD;                arshell.edit.search_options.direction=XmTEXT_BACKWARD;
218                arshell.edit.search_options.wrapped=True;                arshell.edit.search_options.wrapped=True;
219                ARBUG;                
220              }              }
221            else            else
222              {              {
223                arshell.edit.search_options.preserve=False;                arshell.edit.search_options.preserve=False;
224              }              }
225            ARBUG;            
226          }          }
227        ARBUG;        
228        XtFree(replacement_string);        XtFree(replacement_string);
229        XmTextSetInsertionPosition(arshell.gui.widgets.work, position);        if(arshell.edit.search_options.direction==XmTEXT_FORWARD)
230            XmTextSetInsertionPosition(arshell.gui.widgets.work,
231                                       arshell_end_of_word(position));
232          else
233            XmTextSetInsertionPosition(arshell.gui.widgets.work, position-1);
234          /* The above use of the position before POSITION prevents
235             the current word from being the highlighted search result
236             when the search directoion is BACKWARD.  */
237          XmTextSetSelection(arshell.gui.widgets.work, position,
238                             arshell_end_of_word(position),
239                             XtLastTimestampProcessed(antiright.display));
240        if(arshell.edit.search_options.preserve)        if(arshell.edit.search_options.preserve)
241          XtManageChild(widget);          XtManageChild(widget);
242        call_data=NULL;        call_data=NULL;
243        ARBUG;        
244      }      }
245    else    else
246      {      {
       XmSelectionBoxCallbackStruct *prompt_data;  
247        Boolean result;        Boolean result;
248        ARBUG;        
249        search_string=XmTextFieldGetString(arshell.edit.find_widget);        
250        assert(search_string != NULL);        
       ARBUG;  
251        assert(arshell.gui.widgets.work != NULL);        assert(arshell.gui.widgets.work != NULL);
252                
253        result=XmTextFindString(arshell.gui.widgets.work,        result=XmTextFindString(arshell.gui.widgets.work,
254                                XmTextGetInsertionPosition(arshell.gui.widgets.work),                                XmTextGetInsertionPosition
255                                  (arshell.gui.widgets.work),
256                                search_string,                                search_string,
257                                arshell.edit.search_options.direction,                                arshell.edit.search_options.direction,
258                                &position);                                &position);
259        ARBUG;        /* Restore the buffer if it was converted to lower case during a
260             search with "Ignore Case" set.  */
261          if(XmToggleButtonGetState(arshell.edit.search_options.ignore_case_toggle))
262            {
263              XmTextSetString(arshell.gui.widgets.work, backup_text);
264              XtFree(backup_text);
265            }
266          
267        if(result)        if(result)
268          {          {
269            ARBUG;            
270            XmTextSetInsertionPosition(arshell.gui.widgets.work, position);            XmTextSetSelection(arshell.gui.widgets.work, position,
271                                 arshell_end_of_word(position),
272                                 XtLastTimestampProcessed(antiright.display));
273              if(arshell.edit.search_options.direction==XmTEXT_FORWARD)
274                XmTextSetInsertionPosition(arshell.gui.widgets.work,
275                                           arshell_end_of_word(position));
276              else
277                XmTextSetInsertionPosition(arshell.gui.widgets.work, position-1);
278              /* The above use of the position before POSITION prevents
279                 the current word from being the highlighted search result
280                 when the search directoion is BACKWARD.  */
281          }          }
282        else        else
283          {          {
284            ARBUG;            
285            if(XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle))            if(XmToggleButtonGetState(arshell.edit.search_options.wrap_toggle))
286              {              {
287                ARBUG;                
288                arshell.edit.search_options.direction=XmTEXT_BACKWARD;                arshell.edit.search_options.direction=XmTEXT_BACKWARD;
289                XmToggleButtonSetState(arshell.edit.search_options.preserve_toggle,                XmToggleButtonSetState
290                                       True, False);                  (arshell.edit.search_options.preserve_toggle, True, False);
291                XmToggleButtonSetState(arshell.edit.search_options.wrap_toggle,                XmToggleButtonSetState(arshell.edit.search_options.wrap_toggle,
292                                       False, False);                                       False, False);
293              }              }
294            ARBUG;            
295          }          }
296        ARBUG;        
297        if(XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle))        if(XmToggleButtonGetState(arshell.edit.search_options.preserve_toggle))
298          XtManageChild(widget);          XtManageChild(widget);
299        ARBUG;        
300        XtFree(search_string);        XtFree(search_string);
301        ARBUG;        
302      }      }
303  }  }
304        
# Line 297  arshell_search_replace_cb(Widget widget, Line 352  arshell_search_replace_cb(Widget widget,
352    arshell.edit.search_options.replace_toggle=    arshell.edit.search_options.replace_toggle=
353      XmCreateToggleButton(form, "Replace", ARARGS);      XmCreateToggleButton(form, "Replace", ARARGS);
354    XtManageChild(arshell.edit.search_options.replace_toggle);    XtManageChild(arshell.edit.search_options.replace_toggle);
355    XtAddCallback(arshell.edit.search_options.replace_toggle, XmNvalueChangedCallback,    XtAddCallback(arshell.edit.search_options.replace_toggle,
356                  arshell_replace_toggle_cb, NULL);                  XmNvalueChangedCallback, arshell_replace_toggle_cb, NULL);
357    ARCLARG;    ARCLARG;
358    antiright_form_positions(50, 75, 50, 100);    antiright_form_positions(50, 75, 50, 100);
359    arshell.edit.search_options.wrap_toggle=XmCreateToggleButton(form, "Wrap", ARARGS);    arshell.edit.search_options.wrap_toggle=XmCreateToggleButton(form, "Wrap",
360                                                                   ARARGS);
361    XtManageChild(arshell.edit.search_options.wrap_toggle);    XtManageChild(arshell.edit.search_options.wrap_toggle);
362    XtAddCallback(arshell.edit.search_options.wrap_toggle, XmNvalueChangedCallback,    XtAddCallback(arshell.edit.search_options.wrap_toggle,
363                  arshell_wrap_toggle_cb, NULL);                  XmNvalueChangedCallback, arshell_wrap_toggle_cb, NULL);
364    ARCLARG;    ARCLARG;
365    antiright_form_positions(75, 100, 0, 50);    antiright_form_positions(75, 100, 0, 50);
366    arshell.edit.search_options.replace_all_toggle=    arshell.edit.search_options.ignore_case_toggle=
367      XmCreateToggleButton(form, "Replace All", ARARGS);      XmCreateToggleButton(form, "Ignore Case", ARARGS);
368    XtManageChild(arshell.edit.search_options.replace_all_toggle);    XtManageChild(arshell.edit.search_options.ignore_case_toggle);
369    XtAddCallback(arshell.edit.search_options.replace_all_toggle, XmNvalueChangedCallback,    XtAddCallback(arshell.edit.search_options.ignore_case_toggle,
370                  arshell_replace_all_toggle_cb, NULL);                  XmNvalueChangedCallback, arshell_ignore_case_toggle_cb, NULL);
371    ARCLARG;    ARCLARG;
372    antiright_form_positions(75, 100, 50, 100);    antiright_form_positions(75, 100, 50, 100);
373    arshell.edit.search_options.preserve_toggle=    arshell.edit.search_options.preserve_toggle=
374      XmCreateToggleButton(form, "Preserve Dialog", ARARGS);      XmCreateToggleButton(form, "Preserve Dialog", ARARGS);
375    XtManageChild(arshell.edit.search_options.preserve_toggle);    XtManageChild(arshell.edit.search_options.preserve_toggle);
376    XtAddCallback(arshell.edit.search_options.preserve_toggle, XmNvalueChangedCallback,    XtAddCallback(arshell.edit.search_options.preserve_toggle,
377                  arshell_preserve_toggle_cb, NULL);                  XmNvalueChangedCallback, arshell_preserve_toggle_cb, NULL);
378    
379    XtAddCallback(prompt,    XtAddCallback(prompt,
380                  XmNokCallback,                  XmNokCallback,

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26