From 1db7f2f93d9d7a119be7998f5acb4a8f9547d8b9 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 5 Jan 2014 01:24:29 +1300 Subject: [PATCH] Quick fix for system info text always being scrolled out of view when loaded for the first time Added an API method to Text datablocks for moving the cursor to a specific line in the file. This makes it possible to reset the cursor position at the end of the sysinfo operator. --- release/scripts/modules/sys_info.py | 3 +++ source/blender/makesrna/intern/rna_text_api.c | 22 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py index 1785ab59a5f..f284ba475e3 100644 --- a/release/scripts/modules/sys_info.py +++ b/release/scripts/modules/sys_info.py @@ -163,4 +163,7 @@ def write_sysinfo(op): for l in glext: output.write("\t\t%r\n" % (l)) + # Back to first line, so everything is still in sight + output.jump(1) + op.report({'INFO'}, "System information generated in 'system-info.txt'") diff --git a/source/blender/makesrna/intern/rna_text_api.c b/source/blender/makesrna/intern/rna_text_api.c index de398bc10a6..4d88430fab0 100644 --- a/source/blender/makesrna/intern/rna_text_api.c +++ b/source/blender/makesrna/intern/rna_text_api.c @@ -50,6 +50,20 @@ static void rna_Text_write(Text *text, const char *str) WM_main_add_notifier(NC_TEXT | NA_EDITED, text); } +static void rna_Text_jump(Text *text, int line) +{ + short nlines = txt_get_span(text->lines.first, text->lines.last) + 1; + + if (line < 1) + txt_move_toline(text, 1, 0); + else if (line > nlines) + txt_move_toline(text, nlines - 1, 0); + else + txt_move_toline(text, line - 1, 0); + + WM_main_add_notifier(NC_TEXT | ND_CURSOR, text); +} + #else void RNA_api_text(StructRNA *srna) @@ -61,9 +75,15 @@ void RNA_api_text(StructRNA *srna) RNA_def_function_ui_description(func, "clear the text block"); func = RNA_def_function(srna, "write", "rna_Text_write"); - RNA_def_function_ui_description(func, "write text at the cursor location and advance to the end of the text block"); + RNA_def_function_ui_description(func, "Write text at the cursor location and advance to the end of the text block"); prop = RNA_def_string(func, "text", "Text", 0, "", "New text for this datablock"); RNA_def_property_flag(prop, PROP_REQUIRED); + + func = RNA_def_function(srna, "jump", "rna_Text_jump"); + RNA_def_function_ui_description(func, "Move cursor location to the start of the specified line"); + prop = RNA_def_int(func, "line_number", 1, 1, INT_MAX, "Line", "Line number to jump to", 1, 10000); + RNA_def_property_flag(prop, PROP_REQUIRED); + /* TODO: include optional parameter for character on line to jump to? */ } #endif