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