[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16030] branches/soc-2008-quorn/source/ blender/src/drawtext.c: Improvements to the suggestion and doc listing events ( when to update and when to remove).

Ian Thompson quornian at googlemail.com
Fri Aug 8 22:30:55 CEST 2008


Revision: 16030
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16030
Author:   quorn
Date:     2008-08-08 22:30:55 +0200 (Fri, 08 Aug 2008)

Log Message:
-----------
Improvements to the suggestion and doc listing events (when to update and when to remove).

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-08 16:49:14 UTC (rev 16029)
+++ branches/soc-2008-quorn/source/blender/src/drawtext.c	2008-08-08 20:30:55 UTC (rev 16030)
@@ -145,7 +145,7 @@
 
 static int get_wrap_width(SpaceText *st);
 static int get_wrap_points(SpaceText *st, char *line);
-static void get_suggest_prefix(Text *text);
+static void get_suggest_prefix(Text *text, int offset);
 static void confirm_suggestion(Text *text, int skipleft);
 
 #define TXT_MAXFINDSTR 255
@@ -2168,7 +2168,7 @@
 	}
 }
 
-static void get_suggest_prefix(Text *text) {
+static void get_suggest_prefix(Text *text, int offset) {
 	int i, len;
 	char *line, tmp[256];
 
@@ -2176,11 +2176,11 @@
 	if (!texttool_text_is_active(text)) return;
 
 	line= text->curl->line;
-	for (i=text->curc-1; i>=0; i--)
+	for (i=text->curc-1+offset; i>=0; i--)
 		if (!check_identifier(line[i]))
 			break;
 	i++;
-	len= text->curc-i;
+	len= text->curc-i+offset;
 	if (len > 255) {
 		printf("Suggestion prefix too long\n");
 		len = 255;
@@ -2224,7 +2224,7 @@
 }
 
 static short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val) {
-	int draw=0, swallow=0, tools=0, tools_cancel=0, tools_update=0, scroll=1;
+	int draw=0, tools=0, swallow=0, scroll=1;
 	if (!texttool_text_is_active(st->text)) return 0;
 	if (!st->text || st->text->id.lib) return 0;
 
@@ -2239,18 +2239,22 @@
 				confirm_suggestion(st->text, 0);
 				if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
 			} else if ((st->overwrite && txt_replace_char(st->text, ascii)) || txt_add_char(st->text, ascii)) {
-				tools_update |= TOOL_SUGG_LIST;
+				get_suggest_prefix(st->text, 0);
 				swallow= 1;
 				draw= 1;
 			}
 		}
-		tools_cancel |= TOOL_DOCUMENT;
+		if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
 
-	} else if (val) {
+	} else if (val==1) {
 		switch (evnt) {
 			case LEFTMOUSE:
-				if (do_suggest_select(st)) swallow= 1;
-				else tools_cancel |= TOOL_SUGG_LIST | TOOL_DOCUMENT;
+				if (do_suggest_select(st))
+					swallow= 1;
+				else {
+					if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+					if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+				}
 				draw= 1;
 				break;
 			case MIDDLEMOUSE:
@@ -2258,18 +2262,17 @@
 					confirm_suggestion(st->text, 0);
 					if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
 					swallow= 1;
-				} else
-					tools_cancel |= TOOL_SUGG_LIST | TOOL_DOCUMENT;
+				} else {
+					if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+					if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+				}
 				draw= 1;
 				break;
 			case ESCKEY:
-				swallow= 1;
-				if (tools & TOOL_SUGG_LIST)
-					tools_cancel |= TOOL_SUGG_LIST;
-				else if (tools & TOOL_DOCUMENT)
-					tools_cancel |= TOOL_DOCUMENT;
-				else
-					swallow= 0;
+				draw= swallow= 1;
+				if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+				else if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+				else draw= swallow= 0;
 				break;
 			case RETKEY:
 				if (tools & TOOL_SUGG_LIST) {
@@ -2278,24 +2281,45 @@
 					swallow= 1;
 					draw= 1;
 				}
-				tools_cancel |= TOOL_DOCUMENT;
+				if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
 				break;
+			case LEFTARROWKEY:
 			case BACKSPACEKEY:
 				if (tools & TOOL_SUGG_LIST) {
-					if (G.qual) tools_cancel |= TOOL_SUGG_LIST;
+					if (G.qual)
+						texttool_suggest_clear();
 					else {
-						/* Work out which char we are about to delete */
+						/* Work out which char we are about to delete/pass */
 						if (st->text->curl && st->text->curc > 0) {
 							char ch= st->text->curl->line[st->text->curc-1];
 							if ((ch=='_' || !ispunct(ch)) && !check_whitespace(ch))
-								tools_update |= TOOL_SUGG_LIST;
+								get_suggest_prefix(st->text, -1);
 							else
-								tools_cancel |= TOOL_SUGG_LIST;
-						}
+								texttool_suggest_clear();
+						} else
+							texttool_suggest_clear();
 					}
 				}
-				tools_cancel |= TOOL_DOCUMENT;
+				if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
 				break;
+			case RIGHTARROWKEY:
+				if (tools & TOOL_SUGG_LIST) {
+					if (G.qual)
+						texttool_suggest_clear();
+					else {
+						/* Work out which char we are about to pass */
+						if (st->text->curl && st->text->curc < st->text->curl->len) {
+							char ch= st->text->curl->line[st->text->curc+1];
+							if ((ch=='_' || !ispunct(ch)) && !check_whitespace(ch))
+								get_suggest_prefix(st->text, 1);
+							else
+								texttool_suggest_clear();
+						} else
+							texttool_suggest_clear();
+					}
+				}
+				if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+				break;
 			case PAGEDOWNKEY:
 				scroll= SUGG_LIST_SIZE-1;
 			case WHEELDOWNMOUSE:
@@ -2337,27 +2361,11 @@
 					break;
 				}
 			default:
-				if (G.qual!=0 && G.qual!=LR_SHIFTKEY)
-					tools_cancel |= TOOL_SUGG_LIST | TOOL_DOCUMENT;
+				if (tools & TOOL_SUGG_LIST) texttool_suggest_clear(), draw= 1;
+				if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
 		}
 	}
 
-	if (tools & TOOL_SUGG_LIST) {
-		if (tools_update & TOOL_SUGG_LIST) {
-			get_suggest_prefix(st->text);
-		} else if (tools_cancel & TOOL_SUGG_LIST) {
-			texttool_suggest_clear();
-		}
-		draw= 1;
-	}
-	if (tools & TOOL_DOCUMENT) {
-		if (tools_cancel & TOOL_DOCUMENT) {
-			texttool_docs_clear();
-			doc_scroll= 0;
-		}
-		draw= 1;
-	}
-
 	if (draw) {
 		ScrArea *sa;
 		





More information about the Bf-blender-cvs mailing list