view selected now uses boundboxes of dupli-objects and ignores centerpoints of the...
[blender.git] / release / scripts / ui / space_console.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20 import bpy
21 from bpy.props import *
22
23
24 class CONSOLE_HT_header(bpy.types.Header):
25     bl_space_type = 'CONSOLE'
26
27     def draw(self, context):
28         sc = context.space_data
29         # text = sc.text
30         layout = self.layout
31
32         row = layout.row(align=True)
33         row.template_header()
34
35         if context.area.show_menus:
36             sub = row.row(align=True)
37
38             if sc.console_type == 'REPORT':
39                 sub.menu("CONSOLE_MT_report")
40             else:
41                 sub.menu("CONSOLE_MT_console")
42
43         layout.separator()
44         layout.prop(sc, "console_type", expand=True)
45
46         if sc.console_type == 'REPORT':
47             row = layout.row(align=True)
48             row.prop(sc, "show_report_debug", text="Debug")
49             row.prop(sc, "show_report_info", text="Info")
50             row.prop(sc, "show_report_operator", text="Operators")
51             row.prop(sc, "show_report_warn", text="Warnings")
52             row.prop(sc, "show_report_error", text="Errors")
53
54             row = layout.row()
55             row.enabled = sc.show_report_operator
56             row.operator("console.report_replay")
57         else:
58             row = layout.row(align=True)
59             row.operator("console.autocomplete", text="Autocomplete")
60
61
62 class CONSOLE_MT_console(bpy.types.Menu):
63     bl_label = "Console"
64
65     def draw(self, context):
66         layout = self.layout
67         layout.column()
68         layout.operator("console.clear")
69         layout.operator("console.copy")
70         layout.operator("console.paste")
71         layout.menu("CONSOLE_MT_language")
72
73         layout.separator()
74
75         layout.operator("screen.area_dupli")
76         layout.operator("screen.screen_full_area")
77
78
79 class CONSOLE_MT_report(bpy.types.Menu):
80     bl_label = "Report"
81
82     def draw(self, context):
83         layout = self.layout
84         layout.column()
85         layout.operator("console.select_all_toggle")
86         layout.operator("console.select_border")
87         layout.operator("console.report_delete")
88         layout.operator("console.report_copy")
89
90
91 class CONSOLE_MT_language(bpy.types.Menu):
92     bl_label = "Languages..."
93
94     def draw(self, context):
95         import sys
96
97         layout = self.layout
98         layout.column()
99
100         # Collect modules with 'console_*.execute'
101         languages = []
102         for modname, mod in sys.modules.items():
103             if modname.startswith("console_") and hasattr(mod, "execute"):
104                 languages.append(modname.split('_', 1)[-1])
105
106         languages.sort()
107
108         for language in languages:
109             layout.operator("console.language", text=language[0].upper() + language[1:]).language = language
110
111
112 def add_scrollback(text, text_type):
113     for l in text.split('\n'):
114         bpy.ops.console.scrollback_append(text=l.replace('\t', '    '),
115             type=text_type)
116
117
118 class ConsoleExec(bpy.types.Operator):
119     '''Execute the current console line as a python expression'''
120     bl_idname = "console.execute"
121     bl_label = "Console Execute"
122     bl_register = False
123
124     def execute(self, context):
125         sc = context.space_data
126
127         module = __import__("console_" + sc.language)
128         execute = getattr(module, "execute", None)
129
130         if execute:
131             return execute(context)
132         else:
133             print("Error: bpy.ops.console.execute_" + sc.language + " - not found")
134             return {'FINISHED'}
135
136
137 class ConsoleAutocomplete(bpy.types.Operator):
138     '''Evaluate the namespace up until the cursor and give a list of options or complete the name if there is only one'''
139     bl_idname = "console.autocomplete"
140     bl_label = "Console Autocomplete"
141     bl_register = False
142
143     def poll(self, context):
144         return context.space_data.console_type != 'REPORT'
145
146     def execute(self, context):
147         sc = context.space_data
148         module = __import__("console_" + sc.language)
149         autocomplete = getattr(module, "autocomplete", None)
150
151         if autocomplete:
152             return autocomplete(context)
153         else:
154             print("Error: bpy.ops.console.autocomplete_" + sc.language + " - not found")
155             return {'FINISHED'}
156
157
158 class ConsoleBanner(bpy.types.Operator):
159     '''Print a message whem the terminal initializes'''
160     bl_idname = "console.banner"
161     bl_label = "Console Banner"
162
163     def execute(self, context):
164         sc = context.space_data
165
166         # default to python
167         if not sc.language:
168             sc.language = 'python'
169
170         module = __import__("console_" + sc.language)
171         banner = getattr(module, "banner", None)
172
173         if banner:
174             return banner(context)
175         else:
176             print("Error: bpy.ops.console.banner_" + sc.language + " - not found")
177             return {'FINISHED'}
178
179
180 class ConsoleLanguage(bpy.types.Operator):
181     '''Set the current language for this console'''
182     bl_idname = "console.language"
183     bl_label = "Console Language"
184     language = StringProperty(name="Language", maxlen=32, default="")
185
186     def execute(self, context):
187         sc = context.space_data
188
189         # defailt to python
190         sc.language = self.properties.language
191
192         bpy.ops.console.banner()
193
194         # insert a new blank line
195         bpy.ops.console.history_append(text="", current_character=0,
196             remove_duplicates=True)
197
198         return {'FINISHED'}
199
200
201 classes = [
202     CONSOLE_HT_header,
203     CONSOLE_MT_console,
204     CONSOLE_MT_report,
205     CONSOLE_MT_language,
206
207     # Stubs that call the language operators
208     ConsoleExec,
209     ConsoleAutocomplete,
210     ConsoleBanner,
211
212     # Set the language and call the banner
213     ConsoleLanguage]
214
215
216 def register():
217     register = bpy.types.register
218     for cls in classes:
219         register(cls)
220
221
222 def unregister():
223     unregister = bpy.types.unregister
224     for cls in classes:
225         unregister(cls)
226
227 if __name__ == "__main__":
228     register()