Revision: 16177
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16177
Author:   quorn
Date:     2008-08-18 19:08:25 +0200 (Mon, 18 Aug 2008)

Log Message:
-----------
Made modification alert slightly less intrusive and added Ignore option.

Modified Paths:
--------------
    branches/soc-2008-quorn/source/blender/src/drawtext.c

Modified: branches/soc-2008-quorn/source/blender/src/drawtext.c
===================================================================
--- branches/soc-2008-quorn/source/blender/src/drawtext.c       2008-08-18 
14:41:24 UTC (rev 16176)
+++ branches/soc-2008-quorn/source/blender/src/drawtext.c       2008-08-18 
17:08:25 UTC (rev 16177)
@@ -1792,6 +1792,26 @@
        return 0;
 }
 
+void txt_ignore_modified(Text *text) {
+       struct stat st;
+       int result;
+       char file[FILE_MAXDIR+FILE_MAXFILE];
+
+       if (!text || !text->name) return;
+
+       BLI_strncpy(file, text->name, FILE_MAXDIR+FILE_MAXFILE);
+       BLI_convertstringcode(file, G.sce);
+
+       if (!BLI_exists(file)) return;
+
+       result = stat(file, &st);
+       
+       if(result == -1 || (st.st_mode & S_IFMT) != S_IFREG)
+               return;
+
+       text->mtime= st.st_mtime;
+}
+
 static void save_mem_text(char *str)
 {
        SpaceText *st= curarea->spacedata.first;
@@ -2621,6 +2641,65 @@
        return swallow;
 }
 
+static short do_modification_check(SpaceText *st) {
+       Text *text= st->text;
+
+       if (last_check_time < PIL_check_seconds_timer() - 2.0) {
+               switch (txt_file_modified(text)) {
+               case 1:
+                       /* Modified locally and externally, ahhh. Offer more 
possibilites. */
+                       if (text->flags & TXT_ISDIRTY) {
+                               switch (pupmenu("File Modified Outside and 
Inside Blender %t|Load outside changes (ignore local changes) %x0|Save local 
changes (ignore outside changes) %x1|Make text internal (separate copy) %x2")) {
+                               case 0:
+                                       reopen_text(text);
+                                       if (st->showsyntax) txt_format_text(st);
+                                       return 1;
+                               case 1:
+                                       txt_write_file(text);
+                                       return 1;
+                               case 2:
+                                       text->flags |= TXT_ISMEM | TXT_ISDIRTY 
| TXT_ISTMP;
+                                       MEM_freeN(text->name);
+                                       text->name= NULL;
+                                       return 1;
+                               }
+                       } else {
+                               switch (pupmenu("File Modified Outside Blender 
%t|Reload from disk %x0|Make text internal (separate copy) %x1|Ignore %x2")) {
+                               case 0:
+                                       reopen_text(text);
+                                       if (st->showsyntax) txt_format_text(st);
+                                       return 1;
+                               case 1:
+                                       text->flags |= TXT_ISMEM | TXT_ISDIRTY 
| TXT_ISTMP;
+                                       MEM_freeN(text->name);
+                                       text->name= NULL;
+                                       return 1;
+                               case 2:
+                                       txt_ignore_modified(text);
+                                       return 1;
+                               }
+                       }
+                       break;
+               case 2:
+                       switch (pupmenu("File Deleted Outside Blender %t|Make 
text internal %x0|Recreate file %x1")) {
+                       case 0:
+                               text->flags |= TXT_ISMEM | TXT_ISDIRTY | 
TXT_ISTMP;
+                               MEM_freeN(text->name);
+                               text->name= NULL;
+                               return 1;
+                       case 1:
+                               txt_write_file(text);
+                               return 1;
+                       }
+                       break;
+               default:
+                       break;
+               }
+               last_check_time = PIL_check_seconds_timer();
+       }
+       return 0;
+}
+
 void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
 {
        unsigned short event= evt->event;
@@ -3229,62 +3308,7 @@
                }
        }
 
-       if (last_check_time < PIL_check_seconds_timer() - 10.0) {
-               switch (txt_file_modified(text)) {
-               case 1:
-                       /* Modified locally and externally, ahhh. Offer more 
possibilites. */
-                       if (text->flags & TXT_ISDIRTY) {
-                               switch (pupmenu("File Modified Outside and 
Inside Blender %t|Load outside changes (ignore local changes) %x0|Save local 
changes (ignore outside changes) %x1|Make text internal (separate copy) %x2")) {
-                               case 0:
-                                       reopen_text(text);
-                                       if (st->showsyntax) txt_format_text(st);
-                                       do_draw= 1;
-                                       break;
-                               case 1:
-                                       txt_write_file(text);
-                                       do_draw= 1;
-                                       break;
-                               case 2:
-                                       text->flags |= TXT_ISMEM | TXT_ISDIRTY 
| TXT_ISTMP;
-                                       MEM_freeN(text->name);
-                                       text->name= NULL;
-                                       do_draw= 1;
-                                       break;
-                               }
-                       } else {
-                               switch (pupmenu("File Modified Outside Blender 
%t|Reload from disk %x0|Make text internal (separate copy) %x1")) {
-                               case 0:
-                                       reopen_text(text);
-                                       if (st->showsyntax) txt_format_text(st);
-                                       do_draw= 1;
-                                       break;
-                               case 1:
-                                       text->flags |= TXT_ISMEM | TXT_ISDIRTY 
| TXT_ISTMP;
-                                       MEM_freeN(text->name);
-                                       text->name= NULL;
-                                       do_draw= 1;
-                                       break;
-                               }
-                       }
-                       break;
-               case 2:
-                       switch (pupmenu("File Deleted Outside Blender %t|Make 
text internal %x0|Recreate file %x1")) {
-                       case 0:
-                               text->flags |= TXT_ISMEM | TXT_ISDIRTY | 
TXT_ISTMP;
-                               MEM_freeN(text->name);
-                               text->name= NULL;
-                               do_draw= 1;
-                               break;
-                       case 1:
-                               txt_write_file(text);
-                               do_draw= 1;
-                               break;
-                       }
-                       break;
-               default:
-                       last_check_time = PIL_check_seconds_timer();
-               }
-       }
+       if (do_modification_check(st)) do_draw= 1;
 
        if (do_draw) {
                ScrArea *sa;


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

Reply via email to