Revision: 36539
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36539
Author:   nazgul
Date:     2011-05-07 17:52:44 +0000 (Sat, 07 May 2011)
Log Message:
-----------
Fix #27319: Text editor "Find" does not locate words.

Added new option to find panel of space text which toggles
case-esensitive search.

Additional changes:
- Send NC_TEXT|NA_EDITED when removing markers in find_and_replace modifier
  this prevents "sticked" markers which disappears on first redraw when
  search text wasn't found
- Do not show "Text wasn't found" error when text to be searched is contained
  in the end of buffer and it's selected. Replacing/marking used to happen, but
  this popup message was really annoying for this case.

TODO: It's incorrect to use UI_GetThemeColor4ubv from this operator

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_text.py
    trunk/blender/source/blender/blenkernel/BKE_text.h
    trunk/blender/source/blender/blenkernel/intern/text.c
    trunk/blender/source/blender/editors/space_text/text_ops.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_text.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_text.py   2011-05-07 
13:55:32 UTC (rev 36538)
+++ trunk/blender/release/scripts/startup/bl_ui/space_text.py   2011-05-07 
17:52:44 UTC (rev 36539)
@@ -129,6 +129,7 @@
         layout.operator("text.mark_all")
 
         # settings
+        layout.prop(st, "use_match_case")
         row = layout.row()
         row.prop(st, "use_find_wrap", text="Wrap")
         row.prop(st, "use_find_all", text="All")

Modified: trunk/blender/source/blender/blenkernel/BKE_text.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_text.h  2011-05-07 13:55:32 UTC 
(rev 36538)
+++ trunk/blender/source/blender/blenkernel/BKE_text.h  2011-05-07 17:52:44 UTC 
(rev 36539)
@@ -58,7 +58,7 @@
 char*  txt_to_buf                      (struct Text *text);
 void   txt_clean_text          (struct Text *text);
 void   txt_order_cursors       (struct Text *text);
-int            txt_find_string         (struct Text *text, char *findstr, int 
wrap);
+int            txt_find_string         (struct Text *text, char *findstr, int 
wrap, int match_case);
 int            txt_has_sel                     (struct Text *text);
 int            txt_get_span            (struct TextLine *from, struct TextLine 
*to);
 void   txt_move_up                     (struct Text *text, short sel);

Modified: trunk/blender/source/blender/blenkernel/intern/text.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/text.c       2011-05-07 
13:55:32 UTC (rev 36538)
+++ trunk/blender/source/blender/blenkernel/intern/text.c       2011-05-07 
17:52:44 UTC (rev 36539)
@@ -1232,7 +1232,7 @@
        return buf;
 }
 
-int txt_find_string(Text *text, char *findstr, int wrap)
+int txt_find_string(Text *text, char *findstr, int wrap, int match_case)
 {
        TextLine *tl, *startl;
        char *s= NULL;
@@ -1246,7 +1246,8 @@
        oldsl= txt_get_span(text->lines.first, text->sell);
        tl= startl= text->sell;
        
-       s= strstr(&tl->line[text->selc], findstr);
+       if(match_case) s= strstr(&tl->line[text->selc], findstr);
+       else s= BLI_strcasestr(&tl->line[text->selc], findstr);
        while (!s) {
                tl= tl->next;
                if (!tl) {
@@ -1256,7 +1257,8 @@
                                break;
                }
 
-               s= strstr(tl->line, findstr);
+               if(match_case) s= strstr(tl->line, findstr);
+               else s= BLI_strcasestr(tl->line, findstr);
                if (tl==startl)
                        break;
        }

Modified: trunk/blender/source/blender/editors/space_text/text_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_ops.c  2011-05-07 
13:55:32 UTC (rev 36538)
+++ trunk/blender/source/blender/editors/space_text/text_ops.c  2011-05-07 
17:52:44 UTC (rev 36539)
@@ -2841,8 +2841,14 @@
                flags ^= ST_FIND_WRAP;
 
        do {
-               if(first)
+               int proceed= 0;
+
+               if(first) {
+                       if(text->markers.first)
+                               WM_event_add_notifier(C, NC_TEXT|NA_EDITED, 
text);
+
                        txt_clear_markers(text, TMARK_GRP_FINDALL, 0);
+               }
 
                first= 0;
                
@@ -2850,7 +2856,10 @@
                if(mode!=TEXT_FIND && txt_has_sel(text)) {
                        tmp= txt_sel_to_buf(text);
 
-                       if(strcmp(st->findstr, tmp)==0) {
+                       if(flags & ST_MATCH_CASE) proceed= strcmp(st->findstr, 
tmp)==0;
+                       else proceed= BLI_strcasecmp(st->findstr, tmp)==0;
+
+                       if(proceed) {
                                if(mode==TEXT_REPLACE) {
                                        txt_insert_buf(text, st->replacestr);
                                        if(text->curl && text->curl->format) {
@@ -2880,7 +2889,7 @@
                }
 
                /* Find next */
-               if(txt_find_string(text, st->findstr, flags & ST_FIND_WRAP)) {
+               if(txt_find_string(text, st->findstr, flags & ST_FIND_WRAP, 
flags & ST_MATCH_CASE)) {
                        text_update_cursor_moved(C);
                        WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, text);
                }
@@ -2897,7 +2906,7 @@
                        first= 1;
                }
                else {
-                       if(!found) BKE_reportf(op->reports, RPT_ERROR, "Text 
not found: %s", st->findstr);
+                       if(!found && !proceed) BKE_reportf(op->reports, 
RPT_ERROR, "Text not found: %s", st->findstr);
                        break;
                }
                found = 1;

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h     2011-05-07 
13:55:32 UTC (rev 36538)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h     2011-05-07 
17:52:44 UTC (rev 36539)
@@ -824,6 +824,7 @@
 #define        ST_FIND_WRAP                    0x0020
 #define        ST_FIND_ALL                             0x0040
 #define        ST_SHOW_MARGIN                  0x0080
+#define        ST_MATCH_CASE                   0x0100
 
 
 /* stext->findstr/replacestr */

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c    2011-05-07 
13:55:32 UTC (rev 36538)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c    2011-05-07 
17:52:44 UTC (rev 36539)
@@ -1825,6 +1825,11 @@
        RNA_def_property_ui_text(prop, "Find Wrap", "Search again from the 
start of the file when reaching the end");
        RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
 
+       prop= RNA_def_property(srna, "use_match_case", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_MATCH_CASE);
+       RNA_def_property_ui_text(prop, "Match case", "Search string is 
sensitive to uppercase and lowercase letters");
+       RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+
        prop= RNA_def_property(srna, "find_text", PROP_STRING, PROP_NONE);
        RNA_def_property_string_sdna(prop, NULL, "findstr");
        RNA_def_property_ui_text(prop, "Find Text", "Text to search for with 
the find tool");

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to