Text Editor: Add an option "Tabs as Spaces".
authorDalai Felinto <dfelinto@gmail.com>
Thu, 14 Jan 2010 21:30:51 +0000 (21:30 +0000)
committerDalai Felinto <dfelinto@gmail.com>
Thu, 14 Jan 2010 21:30:51 +0000 (21:30 +0000)
So now tab is not ALWAYS converted to spaces.
This is stored by text datablock (what allows to do nice things in the future, as automatic check for the indentation type of the file).

Ideally we should redraw the other Text Editor windows after changing that (in case the same file is opened and the Property panel is also open). Not sure how to do that though.

I'm using TABSTOSPACES as the DEFINE flag because TABSASSPACES sounds too ugly.

(also fix for interface divisor bug)

release/scripts/ui/space_text.py
source/blender/blenkernel/intern/text.c
source/blender/editors/interface/interface_widgets.c
source/blender/makesdna/DNA_text_types.h
source/blender/makesrna/intern/rna_text.c

index 5df937aacde3cb3bd3db1072f2e514c04025ff8c..9ec723b51f1f45b05268076d1fe3bedc7cb5da94 100644 (file)
@@ -78,6 +78,7 @@ class TEXT_PT_properties(bpy.types.Panel):
         layout = self.layout
 
         st = context.space_data
+        text = st.text
 
         flow = layout.column_flow()
         flow.prop(st, "line_numbers")
@@ -88,6 +89,7 @@ class TEXT_PT_properties(bpy.types.Panel):
         flow = layout.column_flow()
         flow.prop(st, "font_size")
         flow.prop(st, "tab_width")
+        flow.prop(text, "tabs_as_spaces")
 
 
 class TEXT_PT_find(bpy.types.Panel):
index c5c23c8b6c72d7e12b52e9b61e4cc92d47832885..9af0d11c1624a8750956b96710b0c860dfc7b8c6 100644 (file)
@@ -2380,7 +2380,7 @@ int txt_add_char (Text *text, char add)
        }
        
        /* insert spaces rather then tabs */
-       if (add == '\t') {
+       if (add == '\t' && text->flags & TXT_TABSTOSPACES) {
                txt_convert_tab_to_spaces(text);
                return 1;
        }
index b5d656bc2b60b5b86ca99e609aa86cc3b89fb7ce..fee0ee04f2ed679a064ee772e833962fa9ff1cbe 100644 (file)
@@ -1800,7 +1800,7 @@ static void ui_draw_but_HSV_v(uiBut *but, rcti *rect)
 static void ui_draw_separator(uiBut *but, rcti *rect,  uiWidgetColors *wcol)
 {
        int y = rect->ymin + (rect->ymax - rect->ymin)/2 - 1;
-       unsigned char col[3];
+       unsigned char col[4];
        
        col[0] = wcol->text[0];
        col[1] = wcol->text[1];
index 5793f061f06cb94e77136017a9e3c7507caf4387..9a9daf56e8a0667d325c6b08c97dd2f622d4d99d 100644 (file)
@@ -84,6 +84,7 @@ typedef struct Text {
 #define TXT_ISSCRIPT            0x0010 /* used by space handler scriptlinks */
 #define TXT_READONLY            0x0100
 #define TXT_FOLLOW              0x0200 /* always follow cursor (console) */
+#define TXT_TABSTOSPACES        0x0400 /* use space instead of tabs */
 
 /* format continuation flags */
 #define TXT_NOCONT                             0x00 /* no continuation */
index bed686ed3607a434e3b9702aa28fef2572bd393a..3445933a3dc8a40085d0ca2ac9705255f48842bc 100644 (file)
@@ -198,6 +198,10 @@ static void rna_def_text(BlenderRNA *brna)
        RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISSCRIPT);
        RNA_def_property_ui_text(prop, "Register", "Register this text as a module on loading.");
 
+       prop= RNA_def_property(srna, "tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_TABSTOSPACES);
+       RNA_def_property_ui_text(prop, "Tabs as Spaces", "Automatically converts all new tabs into spaces.");
+
        prop= RNA_def_property(srna, "lines", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_struct_type(prop, "TextLine");
        RNA_def_property_ui_text(prop, "Lines", "Lines of text.");