Merging r59113 through r59129 from trunk into soc-2013-depsgraph_mt
[blender-staging.git] / release / scripts / startup / bl_operators / 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-80 compliant>
20
21 import bpy
22 from bpy.types import Operator
23 from bpy.props import (BoolProperty,
24                        StringProperty,
25                        )
26
27
28 def _lang_module_get(sc):
29     return __import__("console_" + sc.language,
30                       # for python 3.3, maybe a bug???
31                       level=0)
32
33
34 class ConsoleExec(Operator):
35     """Execute the current console line as a python expression"""
36     bl_idname = "console.execute"
37     bl_label = "Console Execute"
38
39     interactive = BoolProperty(
40             options={'SKIP_SAVE'},
41             )
42
43     @classmethod
44     def poll(cls, context):
45         return (context.area and context.area.type == 'CONSOLE')
46
47     def execute(self, context):
48         sc = context.space_data
49
50         module = _lang_module_get(sc)
51         execute = getattr(module, "execute", None)
52
53         if execute is not None:
54             return execute(context, self.interactive)
55         else:
56             print("Error: bpy.ops.console.execute_%s - not found" %
57                   sc.language)
58             return {'FINISHED'}
59
60
61 class ConsoleAutocomplete(Operator):
62     """Evaluate the namespace up until the cursor and give a list of """ \
63     """options or complete the name if there is only one"""
64     bl_idname = "console.autocomplete"
65     bl_label = "Console Autocomplete"
66
67     @classmethod
68     def poll(cls, context):
69         return (context.area and context.area.type == 'CONSOLE')
70
71     def execute(self, context):
72         sc = context.space_data
73         module = _lang_module_get(sc)
74         autocomplete = getattr(module, "autocomplete", None)
75
76         if autocomplete:
77             return autocomplete(context)
78         else:
79             print("Error: bpy.ops.console.autocomplete_%s - not found" %
80                   sc.language)
81             return {'FINISHED'}
82
83
84 class ConsoleCopyAsScript(Operator):
85     """Copy the console contents for use in a script"""
86     bl_idname = "console.copy_as_script"
87     bl_label = "Copy to Clipboard (as script)"
88
89     @classmethod
90     def poll(cls, context):
91         return (context.area and context.area.type == 'CONSOLE')
92
93     def execute(self, context):
94         sc = context.space_data
95
96         module = _lang_module_get(sc)
97         copy_as_script = getattr(module, "copy_as_script", None)
98
99         if copy_as_script:
100             return copy_as_script(context)
101         else:
102             print("Error: copy_as_script - not found for %r" %
103                   sc.language)
104             return {'FINISHED'}
105
106
107 class ConsoleBanner(Operator):
108     """Print a message when the terminal initializes"""
109     bl_idname = "console.banner"
110     bl_label = "Console Banner"
111
112     @classmethod
113     def poll(cls, context):
114         return (context.area and context.area.type == 'CONSOLE')
115
116     def execute(self, context):
117         sc = context.space_data
118
119         # default to python
120         if not sc.language:
121             sc.language = "python"
122
123         module = _lang_module_get(sc)
124         banner = getattr(module, "banner", None)
125
126         if banner:
127             return banner(context)
128         else:
129             print("Error: bpy.ops.console.banner_%s - not found" %
130                   sc.language)
131             return {'FINISHED'}
132
133
134 class ConsoleLanguage(Operator):
135     """Set the current language for this console"""
136     bl_idname = "console.language"
137     bl_label = "Console Language"
138
139     language = StringProperty(
140             name="Language",
141             maxlen=32,
142             )
143
144     @classmethod
145     def poll(cls, context):
146         return (context.area and context.area.type == 'CONSOLE')
147
148     def execute(self, context):
149         sc = context.space_data
150
151         # default to python
152         sc.language = self.language
153
154         bpy.ops.console.banner()
155
156         # insert a new blank line
157         bpy.ops.console.history_append(text="", current_character=0,
158                                        remove_duplicates=True)
159
160         return {'FINISHED'}