change python scripts so modules which register with blender have a register() functi...
[blender.git] / release / scripts / ui / space_text.py
index 117033c50a1d63dc3ce355791f7151437b8f82c1..cbc7ce9244b688ad281b41146779aa2767f47c1c 100644 (file)
-
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
 import bpy
 
 import bpy
 
+
 class TEXT_HT_header(bpy.types.Header):
 class TEXT_HT_header(bpy.types.Header):
-       __space_type__ = 'TEXT_EDITOR'
-
-       def draw(self, context):
-               layout = self.layout
-               
-               st = context.space_data
-               text = st.text
-
-               row = layout.row(align=True)
-               row.template_header()
-
-               if context.area.show_menus:
-                       sub = row.row(align=True)
-                       sub.itemM("TEXT_MT_text")
-                       if text:
-                               sub.itemM("TEXT_MT_edit")
-                               sub.itemM("TEXT_MT_format")
-
-               if text and text.modified:
-                       row = layout.row()
-                       # row.color(redalert)
-                       row.itemO("text.resolve_conflict", text="", icon='ICON_HELP')
-
-               layout.template_ID(st, "text", new="text.new", unlink="text.unlink")
-
-               row = layout.row(align=True)
-               row.itemR(st, "line_numbers", text="")
-               row.itemR(st, "word_wrap", text="")
-               row.itemR(st, "syntax_highlight", text="")
-
-               if text:
-                       row = layout.row()
-                       if text.filename != "":
-                               if text.dirty:
-                                       row.itemL(text="File: *%s (unsaved)" % text.filename)
-                               else:
-                                       row.itemL(text="File: %s" % text.filename )
-                       else:
-                               if text.library:
-                                       row.itemL(text="Text: External")
-                               else:
-                                       row.itemL(text="Text: Internal")
+    bl_space_type = 'TEXT_EDITOR'
+
+    def draw(self, context):
+        layout = self.layout
+
+        st = context.space_data
+        text = st.text
+
+        row = layout.row(align=True)
+        row.template_header()
+
+        if context.area.show_menus:
+            sub = row.row(align=True)
+            sub.menu("TEXT_MT_text")
+            if text:
+                sub.menu("TEXT_MT_edit")
+                sub.menu("TEXT_MT_format")
+
+        if text and text.modified:
+            row = layout.row()
+            # row.color(redalert)
+            row.operator("text.resolve_conflict", text="", icon='HELP')
+
+        layout.template_ID(st, "text", new="text.new", unlink="text.unlink")
+
+        row = layout.row(align=True)
+        row.prop(st, "line_numbers", text="")
+        row.prop(st, "word_wrap", text="")
+        row.prop(st, "syntax_highlight", text="")
+
+        if text:
+            row = layout.row()
+            row.operator("text.run_script")
+            row.prop(text, "use_module")
+
+            row = layout.row()
+            if text.filename != "":
+                if text.dirty:
+                    row.label(text="File: *%s (unsaved)" % text.filename)
+                else:
+                    row.label(text="File: %s" % text.filename)
+            else:
+                if text.library:
+                    row.label(text="Text: External")
+                else:
+                    row.label(text="Text: Internal")
+
 
 class TEXT_PT_properties(bpy.types.Panel):
 
 class TEXT_PT_properties(bpy.types.Panel):
-       __space_type__ = 'TEXT_EDITOR'
-       __region_type__ = 'UI'
-       __label__ = "Properties"
+    bl_space_type = 'TEXT_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Properties"
+
+    def draw(self, context):
+        layout = self.layout
 
 
-       def draw(self, context):
-               layout = self.layout
-               
-               st = context.space_data
+        st = context.space_data
 
 
-               flow = layout.column_flow()
-               flow.itemR(st, "line_numbers")
-               flow.itemR(st, "word_wrap")
-               flow.itemR(st, "syntax_highlight")
-               flow.itemR(st, "live_edit")
+        flow = layout.column_flow()
+        flow.prop(st, "line_numbers")
+        flow.prop(st, "word_wrap")
+        flow.prop(st, "syntax_highlight")
+        flow.prop(st, "live_edit")
+
+        flow = layout.column_flow()
+        flow.prop(st, "font_size")
+        flow.prop(st, "tab_width")
+
+        text = st.text
+        if text:
+            flow.prop(text, "tabs_as_spaces")
 
 
-               flow = layout.column_flow()
-               flow.itemR(st, "font_size")
-               flow.itemR(st, "tab_width")
 
 class TEXT_PT_find(bpy.types.Panel):
 
 class TEXT_PT_find(bpy.types.Panel):
-       __space_type__ = 'TEXT_EDITOR'
-       __region_type__ = 'UI'
-       __label__ = "Find"
-
-       def draw(self, context):
-               layout = self.layout
-               
-               st = context.space_data
-
-               # find
-               col = layout.column(align=True)
-               row = col.row()
-               row.itemR(st, "find_text", text="")
-               row.itemO("text.find_set_selected", text="", icon='ICON_TEXT')
-               col.itemO("text.find")
-
-               # replace
-               col = layout.column(align=True)
-               row = col.row()
-               row.itemR(st, "replace_text", text="")
-               row.itemO("text.replace_set_selected", text="", icon='ICON_TEXT')
-               col.itemO("text.replace")
-
-               # mark
-               layout.itemO("text.mark_all")
-
-               # settings
-               row = layout.row()
-               row.itemR(st, "find_wrap", text="Wrap")
-               row.itemR(st, "find_all", text="All")
+    bl_space_type = 'TEXT_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Find"
+
+    def draw(self, context):
+        layout = self.layout
+
+        st = context.space_data
+
+        # find
+        col = layout.column(align=True)
+        row = col.row()
+        row.prop(st, "find_text", text="")
+        row.operator("text.find_set_selected", text="", icon='TEXT')
+        col.operator("text.find")
+
+        # replace
+        col = layout.column(align=True)
+        row = col.row()
+        row.prop(st, "replace_text", text="")
+        row.operator("text.replace_set_selected", text="", icon='TEXT')
+        col.operator("text.replace")
+
+        # mark
+        layout.operator("text.mark_all")
+
+        # settings
+        row = layout.row()
+        row.prop(st, "find_wrap", text="Wrap")
+        row.prop(st, "find_all", text="All")
+
 
 class TEXT_MT_text(bpy.types.Menu):
 
 class TEXT_MT_text(bpy.types.Menu):
-       __space_type__ = 'TEXT_EDITOR'
-       __label__ = "Text"
+    bl_label = "Text"
+
+    def draw(self, context):
+        layout = self.layout
+
+        st = context.space_data
+        text = st.text
 
 
-       def draw(self, context):
-               layout = self.layout
-               
-               st = context.space_data
-               text = st.text
+        layout.column()
+        layout.operator("text.new")
+        layout.operator("text.open")
 
 
-               layout.column()
-               layout.itemO("text.new")
-               layout.itemO("text.open")
+        if text:
+            layout.operator("text.reload")
 
 
-               if text:
-                       layout.itemO("text.reload")
+            layout.column()
+            layout.operator("text.save")
+            layout.operator("text.save_as")
 
 
-                       layout.column()
-                       layout.itemO("text.save")
-                       layout.itemO("text.save_as")
+            if text.filename != "":
+                layout.operator("text.make_internal")
 
 
-                       if text.filename != "":
-                               layout.itemO("text.make_internal")
+            layout.column()
+            layout.operator("text.run_script")
 
 
-                       layout.column()
-                       layout.itemO("text.run_script")
+            #ifndef DISABLE_PYTHON
+            # XXX if(BPY_is_pyconstraint(text))
+            # XXX   uiMenuItemO(head, 0, "text.refresh_pyconstraints");
+            #endif
 
 
-                       #ifndef DISABLE_PYTHON
-                       # XXX if(BPY_is_pyconstraint(text))
-                       # XXX   uiMenuItemO(head, 0, "text.refresh_pyconstraints");
-                       #endif
+        layout.separator()
 
 
-               layout.itemS()
+        layout.operator("text.properties", icon='MENU_PANEL')
+
+        layout.menu("TEXT_MT_templates")
+
+        layout.separator()
+
+        layout.operator("screen.area_dupli")
+        layout.operator("screen.screen_full_area")
+
+
+class TEXT_MT_templates(bpy.types.Menu):
+    '''
+    Creates the menu items by scanning scripts/templates
+    '''
+    bl_label = "Script Templates"
+
+    def draw(self, context):
+        self.path_menu(bpy.utils.script_paths("templates"), "text.open")
 
 
-               layout.itemO("text.properties", icon='ICON_MENU_PANEL')
-               
-               #ifndef DISABLE_PYTHON
-               # XXX layout.column()
-               # XXX uiDefIconTextBlockBut(block, text_template_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Script Templates", 0, yco-=20, 120, 19, "");
-               # XXX uiDefIconTextBlockBut(block, text_plugin_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Text Plugins", 0, yco-=20, 120, 19, "");
-               #endif
 
 class TEXT_MT_edit_view(bpy.types.Menu):
 
 class TEXT_MT_edit_view(bpy.types.Menu):
-       __space_type__ = 'TEXT_EDITOR'
-       __label__ = "View"
+    bl_label = "View"
 
 
-       def draw(self, context):
-               layout = self.layout
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("text.move", text="Top of File").type = 'FILE_TOP'
+        layout.operator("text.move", text="Bottom of File").type = 'FILE_BOTTOM'
 
 
-               layout.item_enumO("text.move", "type", 'FILE_TOP', text="Top of File")
-               layout.item_enumO("text.move", "type", 'FILE_BOTTOM', text="Bottom of File")
 
 class TEXT_MT_edit_select(bpy.types.Menu):
 
 class TEXT_MT_edit_select(bpy.types.Menu):
-       __space_type__ = 'TEXT_EDITOR'
-       __label__ = "Select"
+    bl_label = "Select"
+
+    def draw(self, context):
+        layout = self.layout
 
 
-       def draw(self, context):
-               layout = self.layout
+        layout.operator("text.select_all")
+        layout.operator("text.select_line")
 
 
-               layout.itemO("text.select_all")
-               layout.itemO("text.select_line")
 
 class TEXT_MT_edit_markers(bpy.types.Menu):
 
 class TEXT_MT_edit_markers(bpy.types.Menu):
-       __space_type__ = 'TEXT_EDITOR'
-       __label__ = "Markers"
+    bl_label = "Markers"
 
 
-       def draw(self, context):
-               layout = self.layout
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("text.markers_clear")
+        layout.operator("text.next_marker")
+        layout.operator("text.previous_marker")
 
 
-               layout.itemO("text.markers_clear")
-               layout.itemO("text.next_marker")
-               layout.itemO("text.previous_marker")
 
 class TEXT_MT_format(bpy.types.Menu):
 
 class TEXT_MT_format(bpy.types.Menu):
-       __space_type__ = 'TEXT_EDITOR'
-       __label__ = "Format"
+    bl_label = "Format"
+
+    def draw(self, context):
+        layout = self.layout
 
 
-       def draw(self, context):
-               layout = self.layout
+        layout.operator("text.indent")
+        layout.operator("text.unindent")
 
 
-               layout.itemO("text.indent")
-               layout.itemO("text.unindent")
+        layout.separator()
 
 
-               layout.itemS()
+        layout.operator("text.comment")
+        layout.operator("text.uncomment")
 
 
-               layout.itemO("text.comment")
-               layout.itemO("text.uncomment")
+        layout.separator()
 
 
-               layout.itemS()
+        layout.operator_menu_enum("text.convert_whitespace", "type")
 
 
-               layout.item_menu_enumO("text.convert_whitespace", "type")
 
 class TEXT_MT_edit_to3d(bpy.types.Menu):
 
 class TEXT_MT_edit_to3d(bpy.types.Menu):
-       __space_type__ = 'TEXT_EDITOR'
-       __label__ = "Text To 3D Object"
+    bl_label = "Text To 3D Object"
 
 
-       def draw(self, context):
-               layout = self.layout
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("text.to_3d_object", text="One Object").split_lines = False
+        layout.operator("text.to_3d_object", text="One Object Per Line").split_lines = True
 
 
-               layout.item_booleanO("text.to_3d_object", "split_lines", False, text="One Object");
-               layout.item_booleanO("text.to_3d_object", "split_lines", True, text="One Object Per Line");
 
 class TEXT_MT_edit(bpy.types.Menu):
 
 class TEXT_MT_edit(bpy.types.Menu):
-       __space_type__ = 'TEXT_EDITOR'
-       __label__ = "Edit"
+    bl_label = "Edit"
+
+    def poll(self, context):
+        return (context.space_data.text)
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("ed.undo")
+        layout.operator("ed.redo")
+
+        layout.separator()
 
 
-       def poll(self, context):
-               return (context.space_data.text)
+        layout.operator("text.cut")
+        layout.operator("text.copy")
+        layout.operator("text.paste")
 
 
-       def draw(self, context):
-               layout = self.layout
+        layout.separator()
 
 
-               layout.itemO("ed.undo")
-               layout.itemO("ed.redo")
+        layout.menu("TEXT_MT_edit_view")
+        layout.menu("TEXT_MT_edit_select")
+        layout.menu("TEXT_MT_edit_markers")
 
 
-               layout.itemS()
+        layout.separator()
 
 
-               layout.itemO("text.cut")
-               layout.itemO("text.copy")
-               layout.itemO("text.paste")
+        layout.operator("text.jump")
+        layout.operator("text.properties", text="Find...")
 
 
-               layout.itemS()
+        layout.separator()
 
 
-               layout.itemM("TEXT_MT_edit_view")
-               layout.itemM("TEXT_MT_edit_select")
-               layout.itemM("TEXT_MT_edit_markers")
+        layout.menu("TEXT_MT_edit_to3d")
 
 
-               layout.itemS()
 
 
-               layout.itemO("text.jump")
-               layout.itemO("text.properties", text="Find...")
+classes = [
+    TEXT_HT_header,
+    TEXT_PT_properties,
+    TEXT_PT_find,
+    TEXT_MT_text,
+    TEXT_MT_templates,
+    TEXT_MT_format,
+    TEXT_MT_edit,
+    TEXT_MT_edit_view,
+    TEXT_MT_edit_select,
+    TEXT_MT_edit_markers,
+    TEXT_MT_edit_to3d]
 
 
-               layout.itemS()
 
 
-               layout.itemM("TEXT_MT_edit_to3d")
+def register():
+    register = bpy.types.register
+    for cls in classes:
+        register(cls)
 
 
-bpy.types.register(TEXT_HT_header)
-bpy.types.register(TEXT_PT_properties)
-bpy.types.register(TEXT_PT_find)
-bpy.types.register(TEXT_MT_text)
-bpy.types.register(TEXT_MT_format)
-bpy.types.register(TEXT_MT_edit)
-bpy.types.register(TEXT_MT_edit_view)
-bpy.types.register(TEXT_MT_edit_select)
-bpy.types.register(TEXT_MT_edit_markers)
-bpy.types.register(TEXT_MT_edit_to3d)
+def unregister():
+    unregister = bpy.types.unregister
+    for cls in classes:
+        unregister(cls)