summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Huuhko <kai.huuhko@gmail.com>2015-04-19 17:29:12 +0300
committerKai Huuhko <kai.huuhko@gmail.com>2015-04-19 17:29:12 +0300
commite4d3924317298104faa69b6dd62ce8586ccc26a6 (patch)
treeb81017afc8989df1d8239f9a3b463dda5c511299
parentd3569bf1f188aed6c0610035370d8f0f09663bf3 (diff)
Elm: Fix docs and compat, add test that imports all modules
-rw-r--r--doc/elementary/bubble.rst4
-rw-r--r--doc/elementary/colorselector.rst2
-rw-r--r--doc/elementary/elementary.rst382
-rw-r--r--doc/elementary/flipselector.rst2
-rw-r--r--efl/elementary/__init__.py2
-rw-r--r--efl/elementary/__init__.pyx253
-rw-r--r--efl/elementary/flipselector.py2
-rw-r--r--examples/elementary/test_import_all_modules.py77
8 files changed, 394 insertions, 330 deletions
diff --git a/doc/elementary/bubble.rst b/doc/elementary/bubble.rst
index 62c4cc0..baaf69d 100644
--- a/doc/elementary/bubble.rst
+++ b/doc/elementary/bubble.rst
@@ -80,7 +80,7 @@ Bubble arrow positions
80Inheritance diagram 80Inheritance diagram
81=================== 81===================
82 82
83.. inheritance-diagram:: efl.elementary.bubble 83.. inheritance-diagram:: efl.elementary.Bubble
84 :parts: 2 84 :parts: 2
85 85
86.. automodule:: efl.elementary.bubble 86.. autoclass:: efl.elementary.Bubble
diff --git a/doc/elementary/colorselector.rst b/doc/elementary/colorselector.rst
index ab27f70..b9f1f12 100644
--- a/doc/elementary/colorselector.rst
+++ b/doc/elementary/colorselector.rst
@@ -54,7 +54,7 @@ Colorselector modes
54Inheritance diagram 54Inheritance diagram
55=================== 55===================
56 56
57.. inheritance-diagram:: efl.elementary.colorselector 57.. inheritance-diagram:: efl.elementary.Colorselector
58 :parts: 2 58 :parts: 2
59 59
60 60
diff --git a/doc/elementary/elementary.rst b/doc/elementary/elementary.rst
index c4030ac..28697f5 100644
--- a/doc/elementary/elementary.rst
+++ b/doc/elementary/elementary.rst
@@ -52,6 +52,251 @@ A sample Python Elementary program
52API Reference 52API Reference
53============= 53=============
54 54
55.. _Fingers:
56
57Fingers
58=======
59
60Elementary is designed to be finger-friendly for touchscreens,
61and so in addition to scaling for display resolution, it can
62also scale based on finger "resolution" (or size). You can then
63customize the granularity of the areas meant to receive clicks
64on touchscreens.
65
66Different profiles may have pre-set values for finger sizes.
67
68
69Enumerations
70============
71
72.. _Elm_Object_Layer:
73
74Object layers
75-------------
76
77.. versionadded:: 1.14
78
79.. data:: ELM_OBJECT_LAYER_BACKGROUND
80
81 where to place backgrounds
82
83.. data:: ELM_OBJECT_LAYER_DEFAULT
84
85 Evas_Object default layer (and thus for Elementary)
86
87.. data:: ELM_OBJECT_LAYER_FOCUS
88
89 where focus object visualization is
90
91.. data:: ELM_OBJECT_LAYER_TOOLTIP
92
93 where to show tooltips
94
95.. data:: ELM_OBJECT_LAYER_CURSOR
96
97 where to show cursors
98
99.. data:: ELM_OBJECT_LAYER_LAST
100
101 last layer known by Elementary
102
103
104.. _Elm_Policy:
105
106Policy types
107------------
108
109.. data:: ELM_POLICY_QUIT
110
111 Under which circumstances the application should quit automatically.
112
113.. data:: ELM_POLICY_EXIT
114
115 Defines elm_exit() behaviour. (since 1.8)
116
117.. data:: ELM_POLICY_THROTTLE
118
119 Defines how throttling should work (since 1.8)
120
121
122.. _Elm_Policy_Quit:
123
124Quit policy types
125-----------------
126
127.. data:: ELM_POLICY_QUIT_NONE
128
129 Never quit the application automatically
130
131.. data:: ELM_POLICY_QUIT_LAST_WINDOW_CLOSED
132
133 Quit when the application's last window is closed
134
135
136.. _Elm_Policy_Exit:
137
138Exit policy types
139-----------------
140
141Possible values for the ELM_POLICY_EXIT policy.
142
143.. data:: ELM_POLICY_EXIT_NONE
144
145 Just quit the main loop on exit().
146
147.. data:: ELM_POLICY_EXIT_WINDOWS_DEL
148
149 Delete all the windows after quitting the main loop.
150
151
152.. _Elm_Policy_Throttle:
153
154Throttle policy types
155---------------------
156
157Possible values for the #ELM_POLICY_THROTTLE policy.
158
159.. data:: ELM_POLICY_THROTTLE_CONFIG
160
161 Do whatever elementary config is configured to do.
162
163.. data:: ELM_POLICY_THROTTLE_HIDDEN_ALWAYS
164
165 Always throttle when all windows are no longer visible.
166
167.. data:: ELM_POLICY_THROTTLE_NEVER
168
169 Never throttle when windows are all hidden, regardless of config settings.
170
171
172.. _Elm_Process_State:
173
174Elm_Process_State
175-----------------
176
177.. data:: ELM_PROCESS_STATE_FOREGROUND
178
179 The process is in a foreground/active/running state - work as normal.
180
181 .. versionadded:: 1.12
182
183.. data:: ELM_PROCESS_STATE_BACKGROUND
184
185 The process is in the bacgkround, so you may want to stop animating,
186 fetching data as often etc.
187
188 .. versionadded:: 1.12
189
190
191.. _Elm_Sys_Notify_Closed_Reason:
192
193Notify close reasons
194--------------------
195
196The reason the notification was closed
197
198.. data:: ELM_SYS_NOTIFY_CLOSED_EXPIRED
199
200 The notification expired.
201
202 .. versionadded:: 1.10
203
204.. data:: ELM_SYS_NOTIFY_CLOSED_DISMISSED
205
206 The notification was dismissed by the user.
207
208 .. versionadded:: 1.10
209
210.. data:: ELM_SYS_NOTIFY_CLOSED_REQUESTED
211
212 The notification was closed by a call to CloseNotification method.
213
214 .. versionadded:: 1.10
215
216.. data:: ELM_SYS_NOTIFY_CLOSED_UNDEFINED
217
218 Undefined/reserved reasons.
219
220 .. versionadded:: 1.10
221
222
223.. _Elm_Sys_Notify_Urgency:
224
225Notify urgency levels
226---------------------
227
228Urgency levels of a notification
229
230:see: :py:func:`sys_notify_send`
231
232.. data:: ELM_SYS_NOTIFY_URGENCY_LOW
233
234 Low
235
236 .. versionadded:: 1.10
237
238.. data:: ELM_SYS_NOTIFY_URGENCY_NORMAL
239
240 Normal
241
242 .. versionadded:: 1.10
243
244.. data:: ELM_SYS_NOTIFY_URGENCY_CRITICAL
245
246 Critical
247
248 .. versionadded:: 1.10
249
250
251.. _Elm_Glob_Match_Flags:
252
253Glob matching
254-------------
255
256Glob matching bitfiled flags
257
258.. data:: ELM_GLOB_MATCH_NO_ESCAPE
259
260 Treat backslash as an ordinary character instead of escape.
261
262 .. versionadded:: 1.11
263
264.. data:: ELM_GLOB_MATCH_PATH
265
266 Match a slash in string only with a slash in pattern and not by an
267 asterisk (*) or a question mark (?) metacharacter, nor by a bracket
268 expression ([]) containing a slash.
269
270 .. versionadded:: 1.11
271
272.. data:: ELM_GLOB_MATCH_PERIOD
273
274 Leading period in string has to be matched exactly by a period in
275 pattern. A period is considered to be leading if it is the first
276 character in string, or if both ELM_GLOB_MATCH_PATH is set and the
277 period immediately follows a slash.
278
279 .. versionadded:: 1.11
280
281.. data:: ELM_GLOB_MATCH_NOCASE
282
283 The pattern is matched case-insensitively.
284
285 .. versionadded:: 1.11
286
287
288.. _General:
289
290General
291=======
292
293General Elementary API. Functions that don't relate to
294Elementary objects specifically.
295
296Here are documented functions which init/shutdown the library,
297that apply to generic Elementary objects, that deal with
298configuration, et cetera.
299
55.. autofunction:: init 300.. autofunction:: init
56.. autofunction:: shutdown 301.. autofunction:: shutdown
57.. autofunction:: run 302.. autofunction:: run
@@ -94,73 +339,70 @@ Inheritance diagram
94=================== 339===================
95 340
96.. inheritance-diagram:: 341.. inheritance-diagram::
97 efl.elementary.actionslider 342 efl.elementary.Actionslider
98 efl.elementary.background 343 efl.elementary.Background
99 efl.elementary.box 344 efl.elementary.Box
100 efl.elementary.bubble 345 efl.elementary.Bubble
101 efl.elementary.button 346 efl.elementary.Button
102 efl.elementary.calendar_elm 347 efl.elementary.Calendar
103 efl.elementary.check 348 efl.elementary.Check
104 efl.elementary.clock 349 efl.elementary.Clock
105 efl.elementary.colorselector 350 efl.elementary.Colorselector
106 efl.elementary.configuration 351 efl.elementary.Configuration
107 efl.elementary.conformant 352 efl.elementary.Conformant
108 efl.elementary.ctxpopup 353 efl.elementary.Ctxpopup
109 efl.elementary.datetime_elm 354 efl.elementary.Datetime
110 efl.elementary.dayselector 355 efl.elementary.Dayselector
111 efl.elementary.diskselector 356 efl.elementary.Diskselector
112 efl.elementary.entry 357 efl.elementary.Entry
113 efl.elementary.fileselector 358 efl.elementary.Fileselector
114 efl.elementary.fileselector_button 359 efl.elementary.FileselectorButton
115 efl.elementary.fileselector_entry 360 efl.elementary.FileselectorEntry
116 efl.elementary.flip 361 efl.elementary.Flip
117 efl.elementary.flipselector 362 efl.elementary.FlipSelector
118 efl.elementary.frame 363 efl.elementary.Frame
119 efl.elementary.general 364 efl.elementary.Gengrid
120 efl.elementary.gengrid 365 efl.elementary.Genlist
121 efl.elementary.genlist 366 efl.elementary.GestureLayer
122 efl.elementary.gesture_layer 367 efl.elementary.Grid
123 efl.elementary.grid 368 efl.elementary.Hover
124 efl.elementary.hover 369 efl.elementary.Hoversel
125 efl.elementary.hoversel 370 efl.elementary.Icon
126 efl.elementary.icon 371 efl.elementary.Image
127 efl.elementary.image 372 efl.elementary.Index
128 efl.elementary.index 373 efl.elementary.InnerWindow
129 efl.elementary.innerwindow 374 efl.elementary.Label
130 efl.elementary.label 375 efl.elementary.Layout
131 efl.elementary.layout 376 efl.elementary.List
132 efl.elementary.layout_class 377 efl.elementary.Map
133 efl.elementary.list 378 efl.elementary.Mapbuf
134 efl.elementary.map 379 efl.elementary.Menu
135 efl.elementary.mapbuf 380 efl.elementary.MultiButtonEntry
136 efl.elementary.menu 381 efl.elementary.Naviframe
137 efl.elementary.multibuttonentry 382 efl.elementary.Notify
138 efl.elementary.naviframe 383 efl.elementary.Object
139 efl.elementary.need 384 efl.elementary.ObjectItem
140 efl.elementary.notify 385 efl.elementary.Panel
141 efl.elementary.object 386 efl.elementary.Panes
142 efl.elementary.object_item 387 efl.elementary.Photo
143 efl.elementary.panel 388 efl.elementary.Photocam
144 efl.elementary.panes 389 efl.elementary.Plug
145 efl.elementary.photo 390 efl.elementary.Popup
146 efl.elementary.photocam 391 efl.elementary.Progressbar
147 efl.elementary.plug 392 efl.elementary.Radio
148 efl.elementary.popup 393 efl.elementary.Scroller
149 efl.elementary.progressbar 394 efl.elementary.SegmentControl
150 efl.elementary.radio 395 efl.elementary.Separator
151 efl.elementary.scroller 396 efl.elementary.Slider
152 efl.elementary.segment_control 397 efl.elementary.Slideshow
153 efl.elementary.separator 398 efl.elementary.Spinner
154 efl.elementary.slider 399 efl.elementary.Systray
155 efl.elementary.slideshow 400 efl.elementary.Table
156 efl.elementary.spinner 401 efl.elementary.Theme
157 efl.elementary.systray 402 efl.elementary.Thumb
158 efl.elementary.table 403 efl.elementary.Toolbar
159 efl.elementary.theme 404 efl.elementary.Transit
160 efl.elementary.thumb 405 efl.elementary.Video
161 efl.elementary.toolbar 406 efl.elementary.Web
162 efl.elementary.transit 407 efl.elementary.Window
163 efl.elementary.video 408 :parts: 1
164 efl.elementary.web
165 efl.elementary.window
166 :parts: 2
diff --git a/doc/elementary/flipselector.rst b/doc/elementary/flipselector.rst
index 1288595..dad39c8 100644
--- a/doc/elementary/flipselector.rst
+++ b/doc/elementary/flipselector.rst
@@ -40,7 +40,7 @@ Layout text parts
40Inheritance diagram 40Inheritance diagram
41=================== 41===================
42 42
43.. inheritance-diagram:: efl.elementary.Flipselector 43.. inheritance-diagram:: efl.elementary.FlipSelector
44 :parts: 2 44 :parts: 2
45 45
46 46
diff --git a/efl/elementary/__init__.py b/efl/elementary/__init__.py
index 0d5881c..8951a96 100644
--- a/efl/elementary/__init__.py
+++ b/efl/elementary/__init__.py
@@ -53,7 +53,6 @@ __all__ = (
53 "index", 53 "index",
54 "innerwindow", 54 "innerwindow",
55 "label", 55 "label",
56 "layout_class",
57 "layout", 56 "layout",
58 "list", 57 "list",
59 "map", 58 "map",
@@ -64,7 +63,6 @@ __all__ = (
64 "need", 63 "need",
65 "notify", 64 "notify",
66 "object", 65 "object",
67 "object_item",
68 "panel", 66 "panel",
69 "panes", 67 "panes",
70 "photo", 68 "photo",
diff --git a/efl/elementary/__init__.pyx b/efl/elementary/__init__.pyx
index a507226..4bc711b 100644
--- a/efl/elementary/__init__.pyx
+++ b/efl/elementary/__init__.pyx
@@ -16,259 +16,6 @@
16# along with this Python-EFL. If not, see <http://www.gnu.org/licenses/>. 16# along with this Python-EFL. If not, see <http://www.gnu.org/licenses/>.
17# 17#
18 18
19"""
20
21:mod:`elementary` Module
22########################
23
24
25.. _General:
26
27General
28=======
29
30General Elementary API. Functions that don't relate to
31Elementary objects specifically.
32
33Here are documented functions which init/shutdown the library,
34that apply to generic Elementary objects, that deal with
35configuration, et cetera.
36
37
38.. _Fingers:
39
40Fingers
41=======
42
43Elementary is designed to be finger-friendly for touchscreens,
44and so in addition to scaling for display resolution, it can
45also scale based on finger "resolution" (or size). You can then
46customize the granularity of the areas meant to receive clicks
47on touchscreens.
48
49Different profiles may have pre-set values for finger sizes.
50
51
52Enumerations
53============
54
55.. _Elm_Object_Layer:
56
57Object layers
58-------------
59
60.. versionadded:: 1.14
61
62.. data:: ELM_OBJECT_LAYER_BACKGROUND
63
64 where to place backgrounds
65
66.. data:: ELM_OBJECT_LAYER_DEFAULT
67
68 Evas_Object default layer (and thus for Elementary)
69
70.. data:: ELM_OBJECT_LAYER_FOCUS
71
72 where focus object visualization is
73
74.. data:: ELM_OBJECT_LAYER_TOOLTIP
75
76 where to show tooltips
77
78.. data:: ELM_OBJECT_LAYER_CURSOR
79
80 where to show cursors
81
82.. data:: ELM_OBJECT_LAYER_LAST
83
84 last layer known by Elementary
85
86
87.. _Elm_Policy:
88
89Policy types
90------------
91
92.. data:: ELM_POLICY_QUIT
93
94 Under which circumstances the application should quit automatically.
95
96.. data:: ELM_POLICY_EXIT
97
98 Defines elm_exit() behaviour. (since 1.8)
99
100.. data:: ELM_POLICY_THROTTLE
101
102 Defines how throttling should work (since 1.8)
103
104
105.. _Elm_Policy_Quit:
106
107Quit policy types
108-----------------
109
110.. data:: ELM_POLICY_QUIT_NONE
111
112 Never quit the application automatically
113
114.. data:: ELM_POLICY_QUIT_LAST_WINDOW_CLOSED
115
116 Quit when the application's last window is closed
117
118
119.. _Elm_Policy_Exit:
120
121Exit policy types
122-----------------
123
124Possible values for the ELM_POLICY_EXIT policy.
125
126.. data:: ELM_POLICY_EXIT_NONE
127
128 Just quit the main loop on exit().
129
130.. data:: ELM_POLICY_EXIT_WINDOWS_DEL
131
132 Delete all the windows after quitting the main loop.
133
134
135.. _Elm_Policy_Throttle:
136
137Throttle policy types
138---------------------
139
140Possible values for the #ELM_POLICY_THROTTLE policy.
141
142.. data:: ELM_POLICY_THROTTLE_CONFIG
143
144 Do whatever elementary config is configured to do.
145
146.. data:: ELM_POLICY_THROTTLE_HIDDEN_ALWAYS
147
148 Always throttle when all windows are no longer visible.
149
150.. data:: ELM_POLICY_THROTTLE_NEVER
151
152 Never throttle when windows are all hidden, regardless of config settings.
153
154
155.. _Elm_Process_State:
156
157Elm_Process_State
158-----------------
159
160.. data:: ELM_PROCESS_STATE_FOREGROUND
161
162 The process is in a foreground/active/running state - work as normal.
163
164 .. versionadded:: 1.12
165
166.. data:: ELM_PROCESS_STATE_BACKGROUND
167
168 The process is in the bacgkround, so you may want to stop animating,
169 fetching data as often etc.
170
171 .. versionadded:: 1.12
172
173
174.. _Elm_Sys_Notify_Closed_Reason:
175
176Notify close reasons
177--------------------
178
179The reason the notification was closed
180
181.. data:: ELM_SYS_NOTIFY_CLOSED_EXPIRED
182
183 The notification expired.
184
185 .. versionadded:: 1.10
186
187.. data:: ELM_SYS_NOTIFY_CLOSED_DISMISSED
188
189 The notification was dismissed by the user.
190
191 .. versionadded:: 1.10
192
193.. data:: ELM_SYS_NOTIFY_CLOSED_REQUESTED
194
195 The notification was closed by a call to CloseNotification method.
196
197 .. versionadded:: 1.10
198
199.. data:: ELM_SYS_NOTIFY_CLOSED_UNDEFINED
200
201 Undefined/reserved reasons.
202
203 .. versionadded:: 1.10
204
205
206.. _Elm_Sys_Notify_Urgency:
207
208Notify urgency levels
209---------------------
210
211Urgency levels of a notification
212
213:see: :py:func:`sys_notify_send`
214
215.. data:: ELM_SYS_NOTIFY_URGENCY_LOW
216
217 Low
218
219 .. versionadded:: 1.10
220
221.. data:: ELM_SYS_NOTIFY_URGENCY_NORMAL
222
223 Normal
224
225 .. versionadded:: 1.10
226
227.. data:: ELM_SYS_NOTIFY_URGENCY_CRITICAL
228
229 Critical
230
231 .. versionadded:: 1.10
232
233
234.. _Elm_Glob_Match_Flags:
235
236Glob matching
237-------------
238
239Glob matching bitfiled flags
240
241.. data:: ELM_GLOB_MATCH_NO_ESCAPE
242
243 Treat backslash as an ordinary character instead of escape.
244
245 .. versionadded:: 1.11
246
247.. data:: ELM_GLOB_MATCH_PATH
248
249 Match a slash in string only with a slash in pattern and not by an
250 asterisk (*) or a question mark (?) metacharacter, nor by a bracket
251 expression ([]) containing a slash.
252
253 .. versionadded:: 1.11
254
255.. data:: ELM_GLOB_MATCH_PERIOD
256
257 Leading period in string has to be matched exactly by a period in
258 pattern. A period is considered to be leading if it is the first
259 character in string, or if both ELM_GLOB_MATCH_PATH is set and the
260 period immediately follows a slash.
261
262 .. versionadded:: 1.11
263
264.. data:: ELM_GLOB_MATCH_NOCASE
265
266 The pattern is matched case-insensitively.
267
268 .. versionadded:: 1.11
269
270"""
271
272from cpython cimport PyUnicode_AsUTF8String, PyMem_Malloc, Py_DECREF, Py_INCREF 19from cpython cimport PyUnicode_AsUTF8String, PyMem_Malloc, Py_DECREF, Py_INCREF
273from libc.string cimport memcpy, strdup 20from libc.string cimport memcpy, strdup
274from libc.stdlib cimport malloc, free 21from libc.stdlib cimport malloc, free
diff --git a/efl/elementary/flipselector.py b/efl/elementary/flipselector.py
index 2fcc32e..7e2504a 100644
--- a/efl/elementary/flipselector.py
+++ b/efl/elementary/flipselector.py
@@ -1 +1 @@
from . import Flipselector, FlipselectorItem from . import FlipSelector, FlipSelectorItem
diff --git a/examples/elementary/test_import_all_modules.py b/examples/elementary/test_import_all_modules.py
new file mode 100644
index 0000000..c0cd762
--- /dev/null
+++ b/examples/elementary/test_import_all_modules.py
@@ -0,0 +1,77 @@
1from efl import elementary as elm
2
3from efl.elementary.actionslider import *
4from efl.elementary.background import *
5from efl.elementary.box import *
6from efl.elementary.bubble import *
7from efl.elementary.button import *
8from efl.elementary.calendar_elm import *
9from efl.elementary.check import *
10from efl.elementary.clock import *
11from efl.elementary.colorselector import *
12from efl.elementary.configuration import *
13from efl.elementary.conformant import *
14from efl.elementary.ctxpopup import *
15from efl.elementary.datetime_elm import *
16from efl.elementary.dayselector import *
17from efl.elementary.diskselector import *
18from efl.elementary.entry import *
19from efl.elementary.fileselector import *
20from efl.elementary.fileselector_button import *
21from efl.elementary.fileselector_entry import *
22from efl.elementary.flip import *
23from efl.elementary.flipselector import *
24from efl.elementary.frame import *
25from efl.elementary.general import *
26from efl.elementary.gengrid import *
27from efl.elementary.genlist import *
28from efl.elementary.gesture_layer import *
29from efl.elementary.grid import *
30from efl.elementary.hover import *
31from efl.elementary.hoversel import *
32from efl.elementary.icon import *
33from efl.elementary.image import *
34from efl.elementary.index import *
35from efl.elementary.innerwindow import *
36from efl.elementary.label import *
37from efl.elementary.layout import *
38from efl.elementary.list import *
39from efl.elementary.map import *
40from efl.elementary.mapbuf import *
41from efl.elementary.menu import *
42from efl.elementary.multibuttonentry import *
43from efl.elementary.naviframe import *
44from efl.elementary.need import *
45from efl.elementary.notify import *
46from efl.elementary.object import *
47from efl.elementary.panel import *
48from efl.elementary.panes import *
49from efl.elementary.photo import *
50from efl.elementary.photocam import *
51from efl.elementary.plug import *
52from efl.elementary.popup import *
53from efl.elementary.progressbar import *
54from efl.elementary.radio import *
55from efl.elementary.scroller import *
56from efl.elementary.segment_control import *
57from efl.elementary.separator import *
58from efl.elementary.slider import *
59from efl.elementary.slideshow import *
60from efl.elementary.spinner import *
61from efl.elementary.systray import *
62from efl.elementary.table import *
63from efl.elementary.theme import *
64from efl.elementary.thumb import *
65from efl.elementary.toolbar import *
66from efl.elementary.transit import *
67from efl.elementary.video import *
68from efl.elementary.web import *
69from efl.elementary.window import *
70
71
72elm.init()
73win = StandardWindow("test", "test", size=(320, 320))
74win.callback_delete_request_add(lambda x: elm.exit())
75win.show()
76elm.run()
77elm.shutdown()