Newer
Older
# ##### 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 #####
bl_info = {
"name": "Class Viewer",
"author": "Mackraken", "batFinger"
"version": (0, 1, 2),
"location": "Text Editor > Toolbar, Text Editor > Right Click",
"warning": "",
"description": "List classes and definitions of a text block",
"wiki_url": "https://sites.google.com/site/aleonserra/home/scripts/class-viewer",
CoDEmanX
committed
"tracker_url": "https://developer.blender.org/T29463",
import bpy
#lists all defs, comment or classes
#space = current text editor
#sort = sort result
#tipo = kind of struct to look for
#escape = character right next to the class or def name
def getfunc(space, sort, tipo="def ", escape= ""):
defs = []
if space.type=="TEXT_EDITOR":
if space.text!=None:
txt = space.text
for i, l in enumerate(txt.lines):
try:
line = l.body
except:
line=""
if line[0:len(tipo)]==tipo:
end = line.find(escape)
if end==0:
func = line[len(tipo)::]
else:
func = line[len(tipo):end]
defs.append([func, i+1])
if sort: defs.sort()
return defs
class TEXT_OT_Jumptoline(bpy.types.Operator):
bl_label = "Jump"
bl_idname = "text.jumptoline"
__doc__ = "Jump to line"
line = bpy.props.IntProperty(default=-1)
@classmethod
def poll(cls, context):
if context.area.spaces[0].type!="TEXT_EDITOR":
return False
else:
return context.area.spaces[0].text!=None
def execute(self, context):
scn = context.scene
bl_idname = "OBJECT_MT_select_comments"
bl_label = "Select"
@classmethod
def poll(cls, context):
if context.area.spaces[0].type!="TEXT_EDITOR":
return False
else:
return context.area.spaces[0].text!=None
def draw(self, context):
layout = self.layout
space = context.area.spaces[0]
items = getfunc(space, 1, "### ", "")
for it in items:
layout.operator("text.jumptoline",text=it[0]).line = it[1]
bl_idname = "OBJECT_MT_select_defs"
bl_label = "Select"
tipo = bpy.props.BoolProperty(default=False)
@classmethod
def poll(cls, context):
if context.area.spaces[0].type!="TEXT_EDITOR":
return False
else:
return context.area.spaces[0].text!=None
def draw(self, context):
scn = context.scene
layout = self.layout
space = context.area.spaces[0]
tipo = self.tipo
items = getfunc(space, 1, "def ", "(")
for it in items:
layout.operator("text.jumptoline",text=it[0]).line = it[1]
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
bl_idname = "OBJECT_MT_select_classes"
bl_label = "Select"
@classmethod
def poll(cls, context):
if context.area.spaces[0].type!="TEXT_EDITOR":
return False
else:
return context.area.spaces[0].text!=None
def draw(self, context):
layout = self.layout
space = context.area.spaces[0]
items = getfunc(space, 1, "class ", "(")
for it in items:
layout.operator("text.jumptoline",text=it[0]).line = it[1]
self.layout.menu("OBJECT_MT_select_comments", text="Comments", icon='PLUGIN')
return False
self.layout.menu("OBJECT_MT_select_defs", text="Defs", icon='PLUGIN')
return False
self.layout.menu("OBJECT_MT_select_classes", text="Classes", icon='PLUGIN')
return False
classes = [TEXT_OT_Jumptoline, ClassesMenu, DefsMenu, CommentsMenu]
def register():
for c in classes:
bpy.utils.register_class(c)
bpy.types.TEXT_MT_toolbox.append(GotoComments)
bpy.types.TEXT_MT_toolbox.append(GotoDefs)
bpy.types.TEXT_MT_toolbox.append(GotoClasses)
for c in classes:
bpy.utils.unregister_class(c)
bpy.types.TEXT_MT_toolbox.remove(GotoComments)
bpy.types.TEXT_MT_toolbox.remove(GotoDefs)
bpy.types.TEXT_MT_toolbox.remove(GotoClasses)