pyvguicom 1.1.1__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyvguicom might be problematic. Click here for more details.

@@ -0,0 +1,903 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
6
+ <meta name="generator" content="pdoc 0.10.0" />
7
+ <title>htmledit API documentation</title>
8
+ <meta name="description" content="" />
9
+ <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
10
+ <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
11
+ <link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
12
+ <style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
13
+ <style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
14
+ <style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
15
+ <script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
16
+ <script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
17
+ </head>
18
+ <body>
19
+ <main>
20
+ <article id="content">
21
+ <header>
22
+ <h1 class="title">Module <code>htmledit</code></h1>
23
+ </header>
24
+ <section id="section-intro">
25
+ <details class="source">
26
+ <summary>
27
+ <span>Expand source code</span>
28
+ </summary>
29
+ <pre><code class="python">import os
30
+ import gi
31
+
32
+ gi.require_version(&#34;Gtk&#34;, &#34;3.0&#34;)
33
+ gi.require_version(&#39;WebKit2&#39;, &#39;4.0&#39;)
34
+ from gi.repository import Gtk, Gdk, WebKit2
35
+
36
+ class HtmlEditor(Gtk.Widget):
37
+
38
+ def __init__(self):
39
+ super().__init__()
40
+
41
+ #self.set_title(&#34;Html Editor&#34;)
42
+ #self.connect(&#34;destroy&#34;, Gtk.main_quit)
43
+ self.resize(500, 500)
44
+ self.filename = None
45
+
46
+ self.editor = WebKit2.WebView()
47
+ self.editor.set_editable(True)
48
+ self.editor.load_html(&#34;&#34;, &#34;file:///&#34;)
49
+
50
+ self.scroll = Gtk.ScrolledWindow()
51
+ self.scroll.add(self.editor)
52
+ self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
53
+
54
+ self.ui = self.generate_ui()
55
+ self.add_accel_group(self.ui.get_accel_group())
56
+ self.toolbar1 = self.ui.get_widget(&#34;/toolbar_main&#34;)
57
+ self.toolbar2 = self.ui.get_widget(&#34;/toolbar_format&#34;)
58
+ self.menubar = self.ui.get_widget(&#34;/menubar_main&#34;)
59
+
60
+ self.layout = Gtk.VBox()
61
+ self.layout.pack_start(self.menubar, False, False, 0)
62
+ self.layout.pack_start(self.toolbar1, False, False, 0)
63
+ self.layout.pack_start(self.toolbar2, False, False, 0)
64
+ self.layout.pack_start(self.scroll, True, True, 0)
65
+ self.add(self.layout)
66
+
67
+ #self.layout.pack_start(self.editor.get_inspector(), True, True, 0)
68
+ #self.inspect = WebKit2.WebInspector()
69
+ #self.inspect.attach()
70
+ #self.editor.get_inspector().attach()
71
+
72
+ self.editor.get_settings().set_property(&#34;enable_developer_extras&#34;, True)
73
+ #self.editor.get_inspector().set_property(&#34;height&#34;, 200)
74
+ #self.editor.get_inspector().show()
75
+ #print(&#34;hhh&#34;, self.editor.get_inspector().get_attached_height())
76
+
77
+ def generate_ui(self):
78
+ ui_def = &#34;&#34;&#34;
79
+ &lt;ui&gt;
80
+ &lt;menubar name=&#34;menubar_main&#34;&gt;
81
+ &lt;menu action=&#34;menuFile&#34;&gt;
82
+ &lt;menuitem action=&#34;new&#34; /&gt;
83
+ &lt;menuitem action=&#34;open&#34; /&gt;
84
+ &lt;menuitem action=&#34;save&#34; /&gt;
85
+ &lt;/menu&gt;
86
+ &lt;menu action=&#34;menuEdit&#34;&gt;
87
+ &lt;menuitem action=&#34;cut&#34; /&gt;
88
+ &lt;menuitem action=&#34;copy&#34; /&gt;
89
+ &lt;menuitem action=&#34;paste&#34; /&gt;
90
+ &lt;/menu&gt;
91
+ &lt;menu action=&#34;menuInsert&#34;&gt;
92
+ &lt;menuitem action=&#34;insertimage&#34; /&gt;
93
+ &lt;/menu&gt;
94
+ &lt;menu action=&#34;menuFormat&#34;&gt;
95
+ &lt;menuitem action=&#34;bold&#34; /&gt;
96
+ &lt;menuitem action=&#34;italic&#34; /&gt;
97
+ &lt;menuitem action=&#34;underline&#34; /&gt;
98
+ &lt;menuitem action=&#34;strikethrough&#34; /&gt;
99
+ &lt;separator /&gt;
100
+ &lt;menuitem action=&#34;font&#34; /&gt;
101
+ &lt;menuitem action=&#34;color&#34; /&gt;
102
+ &lt;separator /&gt;
103
+ &lt;menuitem action=&#34;justifyleft&#34; /&gt;
104
+ &lt;menuitem action=&#34;justifyright&#34; /&gt;
105
+ &lt;menuitem action=&#34;justifycenter&#34; /&gt;
106
+ &lt;menuitem action=&#34;justifyfull&#34; /&gt;
107
+ &lt;/menu&gt;
108
+ &lt;/menubar&gt;
109
+ &lt;toolbar name=&#34;toolbar_main&#34;&gt;
110
+ &lt;toolitem action=&#34;new&#34; /&gt;
111
+ &lt;toolitem action=&#34;open&#34; /&gt;
112
+ &lt;toolitem action=&#34;save&#34; /&gt;
113
+ &lt;separator /&gt;
114
+ &lt;toolitem action=&#34;undo&#34; /&gt;
115
+ &lt;toolitem action=&#34;redo&#34; /&gt;
116
+ &lt;separator /&gt;
117
+ &lt;toolitem action=&#34;cut&#34; /&gt;
118
+ &lt;toolitem action=&#34;copy&#34; /&gt;
119
+ &lt;toolitem action=&#34;paste&#34; /&gt;
120
+ &lt;/toolbar&gt;
121
+ &lt;toolbar name=&#34;toolbar_format&#34;&gt;
122
+ &lt;toolitem action=&#34;bold&#34; /&gt;
123
+ &lt;toolitem action=&#34;italic&#34; /&gt;
124
+ &lt;toolitem action=&#34;underline&#34; /&gt;
125
+ &lt;toolitem action=&#34;strikethrough&#34; /&gt;
126
+ &lt;separator /&gt;
127
+ &lt;toolitem action=&#34;font&#34; /&gt;
128
+ &lt;toolitem action=&#34;color&#34; /&gt;
129
+ &lt;separator /&gt;
130
+ &lt;toolitem action=&#34;justifyleft&#34; /&gt;
131
+ &lt;toolitem action=&#34;justifyright&#34; /&gt;
132
+ &lt;toolitem action=&#34;justifycenter&#34; /&gt;
133
+ &lt;toolitem action=&#34;justifyfull&#34; /&gt;
134
+ &lt;separator /&gt;
135
+ &lt;toolitem action=&#34;insertimage&#34; /&gt;
136
+ &lt;toolitem action=&#34;insertlink&#34; /&gt;
137
+ &lt;/toolbar&gt;
138
+ &lt;/ui&gt;
139
+ &#34;&#34;&#34;
140
+
141
+ actions = Gtk.ActionGroup(&#34;Actions&#34;)
142
+ actions.add_actions([
143
+ (&#34;menuFile&#34;, None, &#34;_File&#34;),
144
+ (&#34;menuEdit&#34;, None, &#34;_Edit&#34;),
145
+ (&#34;menuInsert&#34;, None, &#34;_Insert&#34;),
146
+ (&#34;menuFormat&#34;, None, &#34;_Format&#34;),
147
+
148
+ (&#34;new&#34;, Gtk.STOCK_NEW, &#34;_New&#34;, None, None, self.on_new),
149
+ (&#34;open&#34;, Gtk.STOCK_OPEN, &#34;_Open&#34;, None, None, self.on_open),
150
+ (&#34;save&#34;, Gtk.STOCK_SAVE, &#34;_Save&#34;, None, None, self.on_save),
151
+
152
+ (&#34;undo&#34;, Gtk.STOCK_UNDO, &#34;_Undo&#34;, None, None, self.on_action),
153
+ (&#34;redo&#34;, Gtk.STOCK_REDO, &#34;_Redo&#34;, None, None, self.on_action),
154
+
155
+ (&#34;cut&#34;, Gtk.STOCK_CUT, &#34;_Cut&#34;, None, None, self.on_action),
156
+ (&#34;copy&#34;, Gtk.STOCK_COPY, &#34;_Copy&#34;, None, None, self.on_action),
157
+ (&#34;paste&#34;, Gtk.STOCK_PASTE, &#34;_Paste&#34;, None, None, self.on_paste),
158
+
159
+ (&#34;bold&#34;, Gtk.STOCK_BOLD, &#34;_Bold&#34;, &#34;&lt;ctrl&gt;B&#34;, None, self.on_action),
160
+ (&#34;italic&#34;, Gtk.STOCK_ITALIC, &#34;_Italic&#34;, &#34;&lt;ctrl&gt;I&#34;, None, self.on_action),
161
+ (&#34;underline&#34;, Gtk.STOCK_UNDERLINE, &#34;_Underline&#34;, &#34;&lt;ctrl&gt;U&#34;, None, self.on_action),
162
+ (&#34;strikethrough&#34;, Gtk.STOCK_STRIKETHROUGH, &#34;_Strike&#34;, &#34;&lt;ctrl&gt;T&#34;, None, self.on_action),
163
+ (&#34;font&#34;, Gtk.STOCK_SELECT_FONT, &#34;Select _Font&#34;, &#34;&lt;ctrl&gt;F&#34;, None, self.on_select_font),
164
+ (&#34;color&#34;, Gtk.STOCK_SELECT_COLOR, &#34;Select _Color&#34;, None, None, self.on_select_color),
165
+
166
+ (&#34;justifyleft&#34;, Gtk.STOCK_JUSTIFY_LEFT, &#34;Justify _Left&#34;, None, None, self.on_action),
167
+ (&#34;justifyright&#34;, Gtk.STOCK_JUSTIFY_RIGHT, &#34;Justify _Right&#34;, None, None, self.on_action),
168
+ (&#34;justifycenter&#34;, Gtk.STOCK_JUSTIFY_CENTER, &#34;Justify _Center&#34;, None, None, self.on_action),
169
+ (&#34;justifyfull&#34;, Gtk.STOCK_JUSTIFY_FILL, &#34;Justify _Full&#34;, None, None, self.on_action),
170
+
171
+ (&#34;insertimage&#34;, &#34;insert-image&#34;, &#34;Insert _Image&#34;, None, None, self.on_insert_image),
172
+ (&#34;insertlink&#34;, &#34;insert-link&#34;, &#34;Insert _Link&#34;, None, None, self.on_insert_link),
173
+ ])
174
+
175
+ actions.get_action(&#34;insertimage&#34;).set_property(&#34;icon-name&#34;, &#34;insert-image&#34;)
176
+ actions.get_action(&#34;insertlink&#34;).set_property(&#34;icon-name&#34;, &#34;insert-link&#34;)
177
+
178
+ ui = Gtk.UIManager()
179
+ ui.insert_action_group(actions)
180
+ ui.add_ui_from_string(ui_def)
181
+ return ui
182
+
183
+ def on_action(self, action):
184
+ self.editor.run_javascript(&#34;document.execCommand(&#39;%s&#39;, false, false);&#34; % action.get_name())
185
+
186
+ def on_paste(self, action):
187
+ self.editor.execute_editing_command(WebKit2.EDITING_COMMAND_PASTE)
188
+
189
+ def on_new(self, action):
190
+ self.editor.load_html(&#34;&#34;, &#34;file:///&#34;)
191
+
192
+ def on_select_font(self, action):
193
+ dialog = Gtk.FontChooserDialog(&#34;Select a font&#34;)
194
+ if dialog.run() == Gtk.ResponseType.OK:
195
+ fname = dialog.get_font_desc().get_family()
196
+ fsize = dialog.get_font_desc().get_size()
197
+ self.editor.run_javascript(&#34;document.execCommand(&#39;fontname&#39;, null, &#39;%s&#39;);&#34; % fname)
198
+ self.editor.run_javascript(&#34;document.execCommand(&#39;fontsize&#39;, null, &#39;%s&#39;);&#34; % fsize)
199
+ dialog.destroy()
200
+
201
+ def on_select_color(self, action):
202
+ dialog = Gtk.ColorChooserDialog(&#34;Select Color&#34;)
203
+ if dialog.run() == Gtk.ResponseType.OK:
204
+ (r, g, b, a) = dialog.get_rgba()
205
+ color = &#34;#%0.2x%0.2x%0.2x%0.2x&#34; % (
206
+ int(r * 255),
207
+ int(g * 255),
208
+ int(b * 255),
209
+ int(a * 255))
210
+ self.editor.run_javascript(&#34;document.execCommand(&#39;forecolor&#39;, null, &#39;%s&#39;);&#34; % color)
211
+ dialog.destroy()
212
+
213
+ def on_insert_link(self, action):
214
+ dialog = Gtk.Dialog(&#34;Enter a URL:&#34;, self, 0,
215
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK))
216
+
217
+ entry = Gtk.Entry()
218
+ dialog.vbox.pack_start(entry, False, False, 0)
219
+ dialog.show_all()
220
+
221
+ if dialog.run() == Gtk.ResponseType.OK:
222
+ self.editor.run_javascript(
223
+ &#34;document.execCommand(&#39;createLink&#39;, true, &#39;%s&#39;);&#34; % entry.get_text())
224
+ dialog.destroy()
225
+
226
+ def on_insert_image(self, action):
227
+ dialog = Gtk.FileChooserDialog(&#34;Select an image file&#34;, self, Gtk.FileChooserAction.OPEN,
228
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
229
+
230
+ if dialog.run() == Gtk.ResponseType.OK:
231
+ fn = dialog.get_filename()
232
+ if os.path.exists(fn):
233
+ self.editor.run_javascript(
234
+ &#34;document.execCommand(&#39;insertImage&#39;, null, &#39;%s&#39;);&#34; % fn)
235
+ dialog.destroy()
236
+
237
+ def on_open(self, action):
238
+ dialog = Gtk.FileChooserDialog(&#34;Select an HTML file&#34;, self, Gtk.FileChooserAction.OPEN,
239
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
240
+
241
+ if dialog.run() == Gtk.ResponseType.OK:
242
+ fn = dialog.get_filename()
243
+ if os.path.exists(fn):
244
+ self.filename = fn
245
+ with open(fn) as fd:
246
+ self.editor.load_html(fd.read(), &#34;file:///&#34;)
247
+ dialog.destroy()
248
+
249
+ def on_save(self, action):
250
+ def completion(html, user_data):
251
+ open_mode = user_data
252
+ with open(self.filename, open_mode) as fd:
253
+ fd.write(html)
254
+
255
+ if self.filename:
256
+ self.get_html(completion, &#39;w&#39;)
257
+ else:
258
+ dialog = Gtk.FileChooserDialog(&#34;Select an HTML file&#34;, self, Gtk.FileChooserAction.SAVE,
259
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
260
+
261
+ if dialog.run() == Gtk.ResponseType.OK:
262
+ self.filename = dialog.get_filename()
263
+ self.get_html(completion, &#34;w+&#34;)
264
+ dialog.destroy()
265
+
266
+ def get_html(self, completion_function, user_data):
267
+ def javascript_completion(obj, result, user_data):
268
+ html = self.editor.get_title()
269
+ completion_function(html, user_data)
270
+ self.editor.run_javascript(&#34;document.title=document.documentElement.innerHTML;&#34;,
271
+ None,
272
+ javascript_completion,
273
+ user_data)
274
+
275
+ #e = HtmlEditor()
276
+ #e.show_all()
277
+ #e.scroll.grab_focus()
278
+ #Gtk.main()
279
+
280
+ # EOF</code></pre>
281
+ </details>
282
+ </section>
283
+ <section>
284
+ </section>
285
+ <section>
286
+ </section>
287
+ <section>
288
+ </section>
289
+ <section>
290
+ <h2 class="section-title" id="header-classes">Classes</h2>
291
+ <dl>
292
+ <dt id="htmledit.HtmlEditor"><code class="flex name class">
293
+ <span>class <span class="ident">HtmlEditor</span></span>
294
+ </code></dt>
295
+ <dd>
296
+ <div class="desc"><p>:Constructors:</p>
297
+ <p>::</p>
298
+ <pre><code>Widget(**properties)
299
+ </code></pre></div>
300
+ <details class="source">
301
+ <summary>
302
+ <span>Expand source code</span>
303
+ </summary>
304
+ <pre><code class="python">class HtmlEditor(Gtk.Widget):
305
+
306
+ def __init__(self):
307
+ super().__init__()
308
+
309
+ #self.set_title(&#34;Html Editor&#34;)
310
+ #self.connect(&#34;destroy&#34;, Gtk.main_quit)
311
+ self.resize(500, 500)
312
+ self.filename = None
313
+
314
+ self.editor = WebKit2.WebView()
315
+ self.editor.set_editable(True)
316
+ self.editor.load_html(&#34;&#34;, &#34;file:///&#34;)
317
+
318
+ self.scroll = Gtk.ScrolledWindow()
319
+ self.scroll.add(self.editor)
320
+ self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
321
+
322
+ self.ui = self.generate_ui()
323
+ self.add_accel_group(self.ui.get_accel_group())
324
+ self.toolbar1 = self.ui.get_widget(&#34;/toolbar_main&#34;)
325
+ self.toolbar2 = self.ui.get_widget(&#34;/toolbar_format&#34;)
326
+ self.menubar = self.ui.get_widget(&#34;/menubar_main&#34;)
327
+
328
+ self.layout = Gtk.VBox()
329
+ self.layout.pack_start(self.menubar, False, False, 0)
330
+ self.layout.pack_start(self.toolbar1, False, False, 0)
331
+ self.layout.pack_start(self.toolbar2, False, False, 0)
332
+ self.layout.pack_start(self.scroll, True, True, 0)
333
+ self.add(self.layout)
334
+
335
+ #self.layout.pack_start(self.editor.get_inspector(), True, True, 0)
336
+ #self.inspect = WebKit2.WebInspector()
337
+ #self.inspect.attach()
338
+ #self.editor.get_inspector().attach()
339
+
340
+ self.editor.get_settings().set_property(&#34;enable_developer_extras&#34;, True)
341
+ #self.editor.get_inspector().set_property(&#34;height&#34;, 200)
342
+ #self.editor.get_inspector().show()
343
+ #print(&#34;hhh&#34;, self.editor.get_inspector().get_attached_height())
344
+
345
+ def generate_ui(self):
346
+ ui_def = &#34;&#34;&#34;
347
+ &lt;ui&gt;
348
+ &lt;menubar name=&#34;menubar_main&#34;&gt;
349
+ &lt;menu action=&#34;menuFile&#34;&gt;
350
+ &lt;menuitem action=&#34;new&#34; /&gt;
351
+ &lt;menuitem action=&#34;open&#34; /&gt;
352
+ &lt;menuitem action=&#34;save&#34; /&gt;
353
+ &lt;/menu&gt;
354
+ &lt;menu action=&#34;menuEdit&#34;&gt;
355
+ &lt;menuitem action=&#34;cut&#34; /&gt;
356
+ &lt;menuitem action=&#34;copy&#34; /&gt;
357
+ &lt;menuitem action=&#34;paste&#34; /&gt;
358
+ &lt;/menu&gt;
359
+ &lt;menu action=&#34;menuInsert&#34;&gt;
360
+ &lt;menuitem action=&#34;insertimage&#34; /&gt;
361
+ &lt;/menu&gt;
362
+ &lt;menu action=&#34;menuFormat&#34;&gt;
363
+ &lt;menuitem action=&#34;bold&#34; /&gt;
364
+ &lt;menuitem action=&#34;italic&#34; /&gt;
365
+ &lt;menuitem action=&#34;underline&#34; /&gt;
366
+ &lt;menuitem action=&#34;strikethrough&#34; /&gt;
367
+ &lt;separator /&gt;
368
+ &lt;menuitem action=&#34;font&#34; /&gt;
369
+ &lt;menuitem action=&#34;color&#34; /&gt;
370
+ &lt;separator /&gt;
371
+ &lt;menuitem action=&#34;justifyleft&#34; /&gt;
372
+ &lt;menuitem action=&#34;justifyright&#34; /&gt;
373
+ &lt;menuitem action=&#34;justifycenter&#34; /&gt;
374
+ &lt;menuitem action=&#34;justifyfull&#34; /&gt;
375
+ &lt;/menu&gt;
376
+ &lt;/menubar&gt;
377
+ &lt;toolbar name=&#34;toolbar_main&#34;&gt;
378
+ &lt;toolitem action=&#34;new&#34; /&gt;
379
+ &lt;toolitem action=&#34;open&#34; /&gt;
380
+ &lt;toolitem action=&#34;save&#34; /&gt;
381
+ &lt;separator /&gt;
382
+ &lt;toolitem action=&#34;undo&#34; /&gt;
383
+ &lt;toolitem action=&#34;redo&#34; /&gt;
384
+ &lt;separator /&gt;
385
+ &lt;toolitem action=&#34;cut&#34; /&gt;
386
+ &lt;toolitem action=&#34;copy&#34; /&gt;
387
+ &lt;toolitem action=&#34;paste&#34; /&gt;
388
+ &lt;/toolbar&gt;
389
+ &lt;toolbar name=&#34;toolbar_format&#34;&gt;
390
+ &lt;toolitem action=&#34;bold&#34; /&gt;
391
+ &lt;toolitem action=&#34;italic&#34; /&gt;
392
+ &lt;toolitem action=&#34;underline&#34; /&gt;
393
+ &lt;toolitem action=&#34;strikethrough&#34; /&gt;
394
+ &lt;separator /&gt;
395
+ &lt;toolitem action=&#34;font&#34; /&gt;
396
+ &lt;toolitem action=&#34;color&#34; /&gt;
397
+ &lt;separator /&gt;
398
+ &lt;toolitem action=&#34;justifyleft&#34; /&gt;
399
+ &lt;toolitem action=&#34;justifyright&#34; /&gt;
400
+ &lt;toolitem action=&#34;justifycenter&#34; /&gt;
401
+ &lt;toolitem action=&#34;justifyfull&#34; /&gt;
402
+ &lt;separator /&gt;
403
+ &lt;toolitem action=&#34;insertimage&#34; /&gt;
404
+ &lt;toolitem action=&#34;insertlink&#34; /&gt;
405
+ &lt;/toolbar&gt;
406
+ &lt;/ui&gt;
407
+ &#34;&#34;&#34;
408
+
409
+ actions = Gtk.ActionGroup(&#34;Actions&#34;)
410
+ actions.add_actions([
411
+ (&#34;menuFile&#34;, None, &#34;_File&#34;),
412
+ (&#34;menuEdit&#34;, None, &#34;_Edit&#34;),
413
+ (&#34;menuInsert&#34;, None, &#34;_Insert&#34;),
414
+ (&#34;menuFormat&#34;, None, &#34;_Format&#34;),
415
+
416
+ (&#34;new&#34;, Gtk.STOCK_NEW, &#34;_New&#34;, None, None, self.on_new),
417
+ (&#34;open&#34;, Gtk.STOCK_OPEN, &#34;_Open&#34;, None, None, self.on_open),
418
+ (&#34;save&#34;, Gtk.STOCK_SAVE, &#34;_Save&#34;, None, None, self.on_save),
419
+
420
+ (&#34;undo&#34;, Gtk.STOCK_UNDO, &#34;_Undo&#34;, None, None, self.on_action),
421
+ (&#34;redo&#34;, Gtk.STOCK_REDO, &#34;_Redo&#34;, None, None, self.on_action),
422
+
423
+ (&#34;cut&#34;, Gtk.STOCK_CUT, &#34;_Cut&#34;, None, None, self.on_action),
424
+ (&#34;copy&#34;, Gtk.STOCK_COPY, &#34;_Copy&#34;, None, None, self.on_action),
425
+ (&#34;paste&#34;, Gtk.STOCK_PASTE, &#34;_Paste&#34;, None, None, self.on_paste),
426
+
427
+ (&#34;bold&#34;, Gtk.STOCK_BOLD, &#34;_Bold&#34;, &#34;&lt;ctrl&gt;B&#34;, None, self.on_action),
428
+ (&#34;italic&#34;, Gtk.STOCK_ITALIC, &#34;_Italic&#34;, &#34;&lt;ctrl&gt;I&#34;, None, self.on_action),
429
+ (&#34;underline&#34;, Gtk.STOCK_UNDERLINE, &#34;_Underline&#34;, &#34;&lt;ctrl&gt;U&#34;, None, self.on_action),
430
+ (&#34;strikethrough&#34;, Gtk.STOCK_STRIKETHROUGH, &#34;_Strike&#34;, &#34;&lt;ctrl&gt;T&#34;, None, self.on_action),
431
+ (&#34;font&#34;, Gtk.STOCK_SELECT_FONT, &#34;Select _Font&#34;, &#34;&lt;ctrl&gt;F&#34;, None, self.on_select_font),
432
+ (&#34;color&#34;, Gtk.STOCK_SELECT_COLOR, &#34;Select _Color&#34;, None, None, self.on_select_color),
433
+
434
+ (&#34;justifyleft&#34;, Gtk.STOCK_JUSTIFY_LEFT, &#34;Justify _Left&#34;, None, None, self.on_action),
435
+ (&#34;justifyright&#34;, Gtk.STOCK_JUSTIFY_RIGHT, &#34;Justify _Right&#34;, None, None, self.on_action),
436
+ (&#34;justifycenter&#34;, Gtk.STOCK_JUSTIFY_CENTER, &#34;Justify _Center&#34;, None, None, self.on_action),
437
+ (&#34;justifyfull&#34;, Gtk.STOCK_JUSTIFY_FILL, &#34;Justify _Full&#34;, None, None, self.on_action),
438
+
439
+ (&#34;insertimage&#34;, &#34;insert-image&#34;, &#34;Insert _Image&#34;, None, None, self.on_insert_image),
440
+ (&#34;insertlink&#34;, &#34;insert-link&#34;, &#34;Insert _Link&#34;, None, None, self.on_insert_link),
441
+ ])
442
+
443
+ actions.get_action(&#34;insertimage&#34;).set_property(&#34;icon-name&#34;, &#34;insert-image&#34;)
444
+ actions.get_action(&#34;insertlink&#34;).set_property(&#34;icon-name&#34;, &#34;insert-link&#34;)
445
+
446
+ ui = Gtk.UIManager()
447
+ ui.insert_action_group(actions)
448
+ ui.add_ui_from_string(ui_def)
449
+ return ui
450
+
451
+ def on_action(self, action):
452
+ self.editor.run_javascript(&#34;document.execCommand(&#39;%s&#39;, false, false);&#34; % action.get_name())
453
+
454
+ def on_paste(self, action):
455
+ self.editor.execute_editing_command(WebKit2.EDITING_COMMAND_PASTE)
456
+
457
+ def on_new(self, action):
458
+ self.editor.load_html(&#34;&#34;, &#34;file:///&#34;)
459
+
460
+ def on_select_font(self, action):
461
+ dialog = Gtk.FontChooserDialog(&#34;Select a font&#34;)
462
+ if dialog.run() == Gtk.ResponseType.OK:
463
+ fname = dialog.get_font_desc().get_family()
464
+ fsize = dialog.get_font_desc().get_size()
465
+ self.editor.run_javascript(&#34;document.execCommand(&#39;fontname&#39;, null, &#39;%s&#39;);&#34; % fname)
466
+ self.editor.run_javascript(&#34;document.execCommand(&#39;fontsize&#39;, null, &#39;%s&#39;);&#34; % fsize)
467
+ dialog.destroy()
468
+
469
+ def on_select_color(self, action):
470
+ dialog = Gtk.ColorChooserDialog(&#34;Select Color&#34;)
471
+ if dialog.run() == Gtk.ResponseType.OK:
472
+ (r, g, b, a) = dialog.get_rgba()
473
+ color = &#34;#%0.2x%0.2x%0.2x%0.2x&#34; % (
474
+ int(r * 255),
475
+ int(g * 255),
476
+ int(b * 255),
477
+ int(a * 255))
478
+ self.editor.run_javascript(&#34;document.execCommand(&#39;forecolor&#39;, null, &#39;%s&#39;);&#34; % color)
479
+ dialog.destroy()
480
+
481
+ def on_insert_link(self, action):
482
+ dialog = Gtk.Dialog(&#34;Enter a URL:&#34;, self, 0,
483
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK))
484
+
485
+ entry = Gtk.Entry()
486
+ dialog.vbox.pack_start(entry, False, False, 0)
487
+ dialog.show_all()
488
+
489
+ if dialog.run() == Gtk.ResponseType.OK:
490
+ self.editor.run_javascript(
491
+ &#34;document.execCommand(&#39;createLink&#39;, true, &#39;%s&#39;);&#34; % entry.get_text())
492
+ dialog.destroy()
493
+
494
+ def on_insert_image(self, action):
495
+ dialog = Gtk.FileChooserDialog(&#34;Select an image file&#34;, self, Gtk.FileChooserAction.OPEN,
496
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
497
+
498
+ if dialog.run() == Gtk.ResponseType.OK:
499
+ fn = dialog.get_filename()
500
+ if os.path.exists(fn):
501
+ self.editor.run_javascript(
502
+ &#34;document.execCommand(&#39;insertImage&#39;, null, &#39;%s&#39;);&#34; % fn)
503
+ dialog.destroy()
504
+
505
+ def on_open(self, action):
506
+ dialog = Gtk.FileChooserDialog(&#34;Select an HTML file&#34;, self, Gtk.FileChooserAction.OPEN,
507
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
508
+
509
+ if dialog.run() == Gtk.ResponseType.OK:
510
+ fn = dialog.get_filename()
511
+ if os.path.exists(fn):
512
+ self.filename = fn
513
+ with open(fn) as fd:
514
+ self.editor.load_html(fd.read(), &#34;file:///&#34;)
515
+ dialog.destroy()
516
+
517
+ def on_save(self, action):
518
+ def completion(html, user_data):
519
+ open_mode = user_data
520
+ with open(self.filename, open_mode) as fd:
521
+ fd.write(html)
522
+
523
+ if self.filename:
524
+ self.get_html(completion, &#39;w&#39;)
525
+ else:
526
+ dialog = Gtk.FileChooserDialog(&#34;Select an HTML file&#34;, self, Gtk.FileChooserAction.SAVE,
527
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
528
+
529
+ if dialog.run() == Gtk.ResponseType.OK:
530
+ self.filename = dialog.get_filename()
531
+ self.get_html(completion, &#34;w+&#34;)
532
+ dialog.destroy()
533
+
534
+ def get_html(self, completion_function, user_data):
535
+ def javascript_completion(obj, result, user_data):
536
+ html = self.editor.get_title()
537
+ completion_function(html, user_data)
538
+ self.editor.run_javascript(&#34;document.title=document.documentElement.innerHTML;&#34;,
539
+ None,
540
+ javascript_completion,
541
+ user_data)</code></pre>
542
+ </details>
543
+ <h3>Ancestors</h3>
544
+ <ul class="hlist">
545
+ <li>gi.overrides.Gtk.Widget</li>
546
+ <li>gi.repository.Gtk.Widget</li>
547
+ <li>gi.repository.GObject.InitiallyUnowned</li>
548
+ <li>gi.overrides.GObject.Object</li>
549
+ <li>gi.repository.GObject.Object</li>
550
+ <li>gi._gi.GObject</li>
551
+ <li>gi.repository.Atk.ImplementorIface</li>
552
+ <li>gi.repository.Gtk.Buildable</li>
553
+ <li>gobject.GInterface</li>
554
+ </ul>
555
+ <h3>Methods</h3>
556
+ <dl>
557
+ <dt id="htmledit.HtmlEditor.generate_ui"><code class="name flex">
558
+ <span>def <span class="ident">generate_ui</span></span>(<span>self)</span>
559
+ </code></dt>
560
+ <dd>
561
+ <div class="desc"></div>
562
+ <details class="source">
563
+ <summary>
564
+ <span>Expand source code</span>
565
+ </summary>
566
+ <pre><code class="python">def generate_ui(self):
567
+ ui_def = &#34;&#34;&#34;
568
+ &lt;ui&gt;
569
+ &lt;menubar name=&#34;menubar_main&#34;&gt;
570
+ &lt;menu action=&#34;menuFile&#34;&gt;
571
+ &lt;menuitem action=&#34;new&#34; /&gt;
572
+ &lt;menuitem action=&#34;open&#34; /&gt;
573
+ &lt;menuitem action=&#34;save&#34; /&gt;
574
+ &lt;/menu&gt;
575
+ &lt;menu action=&#34;menuEdit&#34;&gt;
576
+ &lt;menuitem action=&#34;cut&#34; /&gt;
577
+ &lt;menuitem action=&#34;copy&#34; /&gt;
578
+ &lt;menuitem action=&#34;paste&#34; /&gt;
579
+ &lt;/menu&gt;
580
+ &lt;menu action=&#34;menuInsert&#34;&gt;
581
+ &lt;menuitem action=&#34;insertimage&#34; /&gt;
582
+ &lt;/menu&gt;
583
+ &lt;menu action=&#34;menuFormat&#34;&gt;
584
+ &lt;menuitem action=&#34;bold&#34; /&gt;
585
+ &lt;menuitem action=&#34;italic&#34; /&gt;
586
+ &lt;menuitem action=&#34;underline&#34; /&gt;
587
+ &lt;menuitem action=&#34;strikethrough&#34; /&gt;
588
+ &lt;separator /&gt;
589
+ &lt;menuitem action=&#34;font&#34; /&gt;
590
+ &lt;menuitem action=&#34;color&#34; /&gt;
591
+ &lt;separator /&gt;
592
+ &lt;menuitem action=&#34;justifyleft&#34; /&gt;
593
+ &lt;menuitem action=&#34;justifyright&#34; /&gt;
594
+ &lt;menuitem action=&#34;justifycenter&#34; /&gt;
595
+ &lt;menuitem action=&#34;justifyfull&#34; /&gt;
596
+ &lt;/menu&gt;
597
+ &lt;/menubar&gt;
598
+ &lt;toolbar name=&#34;toolbar_main&#34;&gt;
599
+ &lt;toolitem action=&#34;new&#34; /&gt;
600
+ &lt;toolitem action=&#34;open&#34; /&gt;
601
+ &lt;toolitem action=&#34;save&#34; /&gt;
602
+ &lt;separator /&gt;
603
+ &lt;toolitem action=&#34;undo&#34; /&gt;
604
+ &lt;toolitem action=&#34;redo&#34; /&gt;
605
+ &lt;separator /&gt;
606
+ &lt;toolitem action=&#34;cut&#34; /&gt;
607
+ &lt;toolitem action=&#34;copy&#34; /&gt;
608
+ &lt;toolitem action=&#34;paste&#34; /&gt;
609
+ &lt;/toolbar&gt;
610
+ &lt;toolbar name=&#34;toolbar_format&#34;&gt;
611
+ &lt;toolitem action=&#34;bold&#34; /&gt;
612
+ &lt;toolitem action=&#34;italic&#34; /&gt;
613
+ &lt;toolitem action=&#34;underline&#34; /&gt;
614
+ &lt;toolitem action=&#34;strikethrough&#34; /&gt;
615
+ &lt;separator /&gt;
616
+ &lt;toolitem action=&#34;font&#34; /&gt;
617
+ &lt;toolitem action=&#34;color&#34; /&gt;
618
+ &lt;separator /&gt;
619
+ &lt;toolitem action=&#34;justifyleft&#34; /&gt;
620
+ &lt;toolitem action=&#34;justifyright&#34; /&gt;
621
+ &lt;toolitem action=&#34;justifycenter&#34; /&gt;
622
+ &lt;toolitem action=&#34;justifyfull&#34; /&gt;
623
+ &lt;separator /&gt;
624
+ &lt;toolitem action=&#34;insertimage&#34; /&gt;
625
+ &lt;toolitem action=&#34;insertlink&#34; /&gt;
626
+ &lt;/toolbar&gt;
627
+ &lt;/ui&gt;
628
+ &#34;&#34;&#34;
629
+
630
+ actions = Gtk.ActionGroup(&#34;Actions&#34;)
631
+ actions.add_actions([
632
+ (&#34;menuFile&#34;, None, &#34;_File&#34;),
633
+ (&#34;menuEdit&#34;, None, &#34;_Edit&#34;),
634
+ (&#34;menuInsert&#34;, None, &#34;_Insert&#34;),
635
+ (&#34;menuFormat&#34;, None, &#34;_Format&#34;),
636
+
637
+ (&#34;new&#34;, Gtk.STOCK_NEW, &#34;_New&#34;, None, None, self.on_new),
638
+ (&#34;open&#34;, Gtk.STOCK_OPEN, &#34;_Open&#34;, None, None, self.on_open),
639
+ (&#34;save&#34;, Gtk.STOCK_SAVE, &#34;_Save&#34;, None, None, self.on_save),
640
+
641
+ (&#34;undo&#34;, Gtk.STOCK_UNDO, &#34;_Undo&#34;, None, None, self.on_action),
642
+ (&#34;redo&#34;, Gtk.STOCK_REDO, &#34;_Redo&#34;, None, None, self.on_action),
643
+
644
+ (&#34;cut&#34;, Gtk.STOCK_CUT, &#34;_Cut&#34;, None, None, self.on_action),
645
+ (&#34;copy&#34;, Gtk.STOCK_COPY, &#34;_Copy&#34;, None, None, self.on_action),
646
+ (&#34;paste&#34;, Gtk.STOCK_PASTE, &#34;_Paste&#34;, None, None, self.on_paste),
647
+
648
+ (&#34;bold&#34;, Gtk.STOCK_BOLD, &#34;_Bold&#34;, &#34;&lt;ctrl&gt;B&#34;, None, self.on_action),
649
+ (&#34;italic&#34;, Gtk.STOCK_ITALIC, &#34;_Italic&#34;, &#34;&lt;ctrl&gt;I&#34;, None, self.on_action),
650
+ (&#34;underline&#34;, Gtk.STOCK_UNDERLINE, &#34;_Underline&#34;, &#34;&lt;ctrl&gt;U&#34;, None, self.on_action),
651
+ (&#34;strikethrough&#34;, Gtk.STOCK_STRIKETHROUGH, &#34;_Strike&#34;, &#34;&lt;ctrl&gt;T&#34;, None, self.on_action),
652
+ (&#34;font&#34;, Gtk.STOCK_SELECT_FONT, &#34;Select _Font&#34;, &#34;&lt;ctrl&gt;F&#34;, None, self.on_select_font),
653
+ (&#34;color&#34;, Gtk.STOCK_SELECT_COLOR, &#34;Select _Color&#34;, None, None, self.on_select_color),
654
+
655
+ (&#34;justifyleft&#34;, Gtk.STOCK_JUSTIFY_LEFT, &#34;Justify _Left&#34;, None, None, self.on_action),
656
+ (&#34;justifyright&#34;, Gtk.STOCK_JUSTIFY_RIGHT, &#34;Justify _Right&#34;, None, None, self.on_action),
657
+ (&#34;justifycenter&#34;, Gtk.STOCK_JUSTIFY_CENTER, &#34;Justify _Center&#34;, None, None, self.on_action),
658
+ (&#34;justifyfull&#34;, Gtk.STOCK_JUSTIFY_FILL, &#34;Justify _Full&#34;, None, None, self.on_action),
659
+
660
+ (&#34;insertimage&#34;, &#34;insert-image&#34;, &#34;Insert _Image&#34;, None, None, self.on_insert_image),
661
+ (&#34;insertlink&#34;, &#34;insert-link&#34;, &#34;Insert _Link&#34;, None, None, self.on_insert_link),
662
+ ])
663
+
664
+ actions.get_action(&#34;insertimage&#34;).set_property(&#34;icon-name&#34;, &#34;insert-image&#34;)
665
+ actions.get_action(&#34;insertlink&#34;).set_property(&#34;icon-name&#34;, &#34;insert-link&#34;)
666
+
667
+ ui = Gtk.UIManager()
668
+ ui.insert_action_group(actions)
669
+ ui.add_ui_from_string(ui_def)
670
+ return ui</code></pre>
671
+ </details>
672
+ </dd>
673
+ <dt id="htmledit.HtmlEditor.get_html"><code class="name flex">
674
+ <span>def <span class="ident">get_html</span></span>(<span>self, completion_function, user_data)</span>
675
+ </code></dt>
676
+ <dd>
677
+ <div class="desc"></div>
678
+ <details class="source">
679
+ <summary>
680
+ <span>Expand source code</span>
681
+ </summary>
682
+ <pre><code class="python">def get_html(self, completion_function, user_data):
683
+ def javascript_completion(obj, result, user_data):
684
+ html = self.editor.get_title()
685
+ completion_function(html, user_data)
686
+ self.editor.run_javascript(&#34;document.title=document.documentElement.innerHTML;&#34;,
687
+ None,
688
+ javascript_completion,
689
+ user_data)</code></pre>
690
+ </details>
691
+ </dd>
692
+ <dt id="htmledit.HtmlEditor.on_action"><code class="name flex">
693
+ <span>def <span class="ident">on_action</span></span>(<span>self, action)</span>
694
+ </code></dt>
695
+ <dd>
696
+ <div class="desc"></div>
697
+ <details class="source">
698
+ <summary>
699
+ <span>Expand source code</span>
700
+ </summary>
701
+ <pre><code class="python">def on_action(self, action):
702
+ self.editor.run_javascript(&#34;document.execCommand(&#39;%s&#39;, false, false);&#34; % action.get_name())</code></pre>
703
+ </details>
704
+ </dd>
705
+ <dt id="htmledit.HtmlEditor.on_insert_image"><code class="name flex">
706
+ <span>def <span class="ident">on_insert_image</span></span>(<span>self, action)</span>
707
+ </code></dt>
708
+ <dd>
709
+ <div class="desc"></div>
710
+ <details class="source">
711
+ <summary>
712
+ <span>Expand source code</span>
713
+ </summary>
714
+ <pre><code class="python">def on_insert_image(self, action):
715
+ dialog = Gtk.FileChooserDialog(&#34;Select an image file&#34;, self, Gtk.FileChooserAction.OPEN,
716
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
717
+
718
+ if dialog.run() == Gtk.ResponseType.OK:
719
+ fn = dialog.get_filename()
720
+ if os.path.exists(fn):
721
+ self.editor.run_javascript(
722
+ &#34;document.execCommand(&#39;insertImage&#39;, null, &#39;%s&#39;);&#34; % fn)
723
+ dialog.destroy()</code></pre>
724
+ </details>
725
+ </dd>
726
+ <dt id="htmledit.HtmlEditor.on_insert_link"><code class="name flex">
727
+ <span>def <span class="ident">on_insert_link</span></span>(<span>self, action)</span>
728
+ </code></dt>
729
+ <dd>
730
+ <div class="desc"></div>
731
+ <details class="source">
732
+ <summary>
733
+ <span>Expand source code</span>
734
+ </summary>
735
+ <pre><code class="python">def on_insert_link(self, action):
736
+ dialog = Gtk.Dialog(&#34;Enter a URL:&#34;, self, 0,
737
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK))
738
+
739
+ entry = Gtk.Entry()
740
+ dialog.vbox.pack_start(entry, False, False, 0)
741
+ dialog.show_all()
742
+
743
+ if dialog.run() == Gtk.ResponseType.OK:
744
+ self.editor.run_javascript(
745
+ &#34;document.execCommand(&#39;createLink&#39;, true, &#39;%s&#39;);&#34; % entry.get_text())
746
+ dialog.destroy()</code></pre>
747
+ </details>
748
+ </dd>
749
+ <dt id="htmledit.HtmlEditor.on_new"><code class="name flex">
750
+ <span>def <span class="ident">on_new</span></span>(<span>self, action)</span>
751
+ </code></dt>
752
+ <dd>
753
+ <div class="desc"></div>
754
+ <details class="source">
755
+ <summary>
756
+ <span>Expand source code</span>
757
+ </summary>
758
+ <pre><code class="python">def on_new(self, action):
759
+ self.editor.load_html(&#34;&#34;, &#34;file:///&#34;)</code></pre>
760
+ </details>
761
+ </dd>
762
+ <dt id="htmledit.HtmlEditor.on_open"><code class="name flex">
763
+ <span>def <span class="ident">on_open</span></span>(<span>self, action)</span>
764
+ </code></dt>
765
+ <dd>
766
+ <div class="desc"></div>
767
+ <details class="source">
768
+ <summary>
769
+ <span>Expand source code</span>
770
+ </summary>
771
+ <pre><code class="python">def on_open(self, action):
772
+ dialog = Gtk.FileChooserDialog(&#34;Select an HTML file&#34;, self, Gtk.FileChooserAction.OPEN,
773
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
774
+
775
+ if dialog.run() == Gtk.ResponseType.OK:
776
+ fn = dialog.get_filename()
777
+ if os.path.exists(fn):
778
+ self.filename = fn
779
+ with open(fn) as fd:
780
+ self.editor.load_html(fd.read(), &#34;file:///&#34;)
781
+ dialog.destroy()</code></pre>
782
+ </details>
783
+ </dd>
784
+ <dt id="htmledit.HtmlEditor.on_paste"><code class="name flex">
785
+ <span>def <span class="ident">on_paste</span></span>(<span>self, action)</span>
786
+ </code></dt>
787
+ <dd>
788
+ <div class="desc"></div>
789
+ <details class="source">
790
+ <summary>
791
+ <span>Expand source code</span>
792
+ </summary>
793
+ <pre><code class="python">def on_paste(self, action):
794
+ self.editor.execute_editing_command(WebKit2.EDITING_COMMAND_PASTE)</code></pre>
795
+ </details>
796
+ </dd>
797
+ <dt id="htmledit.HtmlEditor.on_save"><code class="name flex">
798
+ <span>def <span class="ident">on_save</span></span>(<span>self, action)</span>
799
+ </code></dt>
800
+ <dd>
801
+ <div class="desc"></div>
802
+ <details class="source">
803
+ <summary>
804
+ <span>Expand source code</span>
805
+ </summary>
806
+ <pre><code class="python">def on_save(self, action):
807
+ def completion(html, user_data):
808
+ open_mode = user_data
809
+ with open(self.filename, open_mode) as fd:
810
+ fd.write(html)
811
+
812
+ if self.filename:
813
+ self.get_html(completion, &#39;w&#39;)
814
+ else:
815
+ dialog = Gtk.FileChooserDialog(&#34;Select an HTML file&#34;, self, Gtk.FileChooserAction.SAVE,
816
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
817
+
818
+ if dialog.run() == Gtk.ResponseType.OK:
819
+ self.filename = dialog.get_filename()
820
+ self.get_html(completion, &#34;w+&#34;)
821
+ dialog.destroy()</code></pre>
822
+ </details>
823
+ </dd>
824
+ <dt id="htmledit.HtmlEditor.on_select_color"><code class="name flex">
825
+ <span>def <span class="ident">on_select_color</span></span>(<span>self, action)</span>
826
+ </code></dt>
827
+ <dd>
828
+ <div class="desc"></div>
829
+ <details class="source">
830
+ <summary>
831
+ <span>Expand source code</span>
832
+ </summary>
833
+ <pre><code class="python">def on_select_color(self, action):
834
+ dialog = Gtk.ColorChooserDialog(&#34;Select Color&#34;)
835
+ if dialog.run() == Gtk.ResponseType.OK:
836
+ (r, g, b, a) = dialog.get_rgba()
837
+ color = &#34;#%0.2x%0.2x%0.2x%0.2x&#34; % (
838
+ int(r * 255),
839
+ int(g * 255),
840
+ int(b * 255),
841
+ int(a * 255))
842
+ self.editor.run_javascript(&#34;document.execCommand(&#39;forecolor&#39;, null, &#39;%s&#39;);&#34; % color)
843
+ dialog.destroy()</code></pre>
844
+ </details>
845
+ </dd>
846
+ <dt id="htmledit.HtmlEditor.on_select_font"><code class="name flex">
847
+ <span>def <span class="ident">on_select_font</span></span>(<span>self, action)</span>
848
+ </code></dt>
849
+ <dd>
850
+ <div class="desc"></div>
851
+ <details class="source">
852
+ <summary>
853
+ <span>Expand source code</span>
854
+ </summary>
855
+ <pre><code class="python">def on_select_font(self, action):
856
+ dialog = Gtk.FontChooserDialog(&#34;Select a font&#34;)
857
+ if dialog.run() == Gtk.ResponseType.OK:
858
+ fname = dialog.get_font_desc().get_family()
859
+ fsize = dialog.get_font_desc().get_size()
860
+ self.editor.run_javascript(&#34;document.execCommand(&#39;fontname&#39;, null, &#39;%s&#39;);&#34; % fname)
861
+ self.editor.run_javascript(&#34;document.execCommand(&#39;fontsize&#39;, null, &#39;%s&#39;);&#34; % fsize)
862
+ dialog.destroy()</code></pre>
863
+ </details>
864
+ </dd>
865
+ </dl>
866
+ </dd>
867
+ </dl>
868
+ </section>
869
+ </article>
870
+ <nav id="sidebar">
871
+ <h1>Index</h1>
872
+ <div class="toc">
873
+ <ul></ul>
874
+ </div>
875
+ <ul id="index">
876
+ <li><h3><a href="#header-classes">Classes</a></h3>
877
+ <ul>
878
+ <li>
879
+ <h4><code><a title="htmledit.HtmlEditor" href="#htmledit.HtmlEditor">HtmlEditor</a></code></h4>
880
+ <ul class="two-column">
881
+ <li><code><a title="htmledit.HtmlEditor.generate_ui" href="#htmledit.HtmlEditor.generate_ui">generate_ui</a></code></li>
882
+ <li><code><a title="htmledit.HtmlEditor.get_html" href="#htmledit.HtmlEditor.get_html">get_html</a></code></li>
883
+ <li><code><a title="htmledit.HtmlEditor.on_action" href="#htmledit.HtmlEditor.on_action">on_action</a></code></li>
884
+ <li><code><a title="htmledit.HtmlEditor.on_insert_image" href="#htmledit.HtmlEditor.on_insert_image">on_insert_image</a></code></li>
885
+ <li><code><a title="htmledit.HtmlEditor.on_insert_link" href="#htmledit.HtmlEditor.on_insert_link">on_insert_link</a></code></li>
886
+ <li><code><a title="htmledit.HtmlEditor.on_new" href="#htmledit.HtmlEditor.on_new">on_new</a></code></li>
887
+ <li><code><a title="htmledit.HtmlEditor.on_open" href="#htmledit.HtmlEditor.on_open">on_open</a></code></li>
888
+ <li><code><a title="htmledit.HtmlEditor.on_paste" href="#htmledit.HtmlEditor.on_paste">on_paste</a></code></li>
889
+ <li><code><a title="htmledit.HtmlEditor.on_save" href="#htmledit.HtmlEditor.on_save">on_save</a></code></li>
890
+ <li><code><a title="htmledit.HtmlEditor.on_select_color" href="#htmledit.HtmlEditor.on_select_color">on_select_color</a></code></li>
891
+ <li><code><a title="htmledit.HtmlEditor.on_select_font" href="#htmledit.HtmlEditor.on_select_font">on_select_font</a></code></li>
892
+ </ul>
893
+ </li>
894
+ </ul>
895
+ </li>
896
+ </ul>
897
+ </nav>
898
+ </main>
899
+ <footer id="footer">
900
+ <p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
901
+ </footer>
902
+ </body>
903
+ </html>