python-efl/examples/elementary/test_web.py

132 lines
3.6 KiB
Python

#!/usr/bin/env python
# encoding: utf-8
from efl import evas
from efl import ecore
from efl import elementary
from efl.elementary.window import Window
from efl.elementary.background import Background
from efl.elementary.box import Box
from efl.elementary.button import Button
from efl.elementary.entry import Entry
from efl.elementary.web import Web
def web_clicked(obj):
if not elementary.need_web():
print("EFL-webkit not available!")
return
win = Window("web", elementary.ELM_WIN_BASIC)
win.title_set("Web")
win.autodel_set(True)
if obj is None:
win.callback_delete_request_add(lambda o: elementary.exit())
bg = Background(win)
win.resize_object_add(bg)
bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bg.show()
vbx = Box(win)
win.resize_object_add(vbx)
vbx.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
vbx.show()
web = Web(win)
web.uri_set("http://enlightenment.org/")
web.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
web.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
web.size_hint_min_set(100, 100)
vbx.pack_end(web)
web.show()
# Debug:
def dbg(*args):
print(("DEBUG: %s" % args[-1], " ".join(repr(x) for x in args[1:-1])))
web.callback_link_hover_in_add(dbg, "link in")
web.callback_link_hover_out_add(dbg, "link out")
web.callback_uri_changed_add(dbg, "uri")
web.callback_title_changed_add(dbg, "title")
web.callback_load_finished_add(dbg, "load finished")
web.callback_load_finished_add(dbg, "load error")
web.callback_load_progress_add(dbg, "load progress")
web.callback_load_provisional_add(dbg, "load provisional")
web.callback_load_started_add(dbg, "load started")
# JS debug to console:
def console_msg(obj, msg, line, src):
print(("CONSOLE: %s:%d %r" % (src, line, msg)))
web.console_message_hook_set(console_msg)
# navigation bar:
hbx = Box(win)
hbx.horizontal_set(True)
hbx.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 0.0)
hbx.size_hint_align_set(evas.EVAS_HINT_FILL, 0.0)
vbx.pack_start(hbx)
hbx.show()
bt = Button(win)
bt.text_set("Back")
bt.callback_clicked_add(lambda x: web.back())
hbx.pack_end(bt)
bt.show()
bt = Button(win)
bt.text_set("Forward")
bt.callback_clicked_add(lambda x: web.forward())
hbx.pack_end(bt)
bt.show()
bt = Button(win)
bt.text_set("Reload")
bt.callback_clicked_add(lambda x: web.reload())
hbx.pack_end(bt)
bt.show()
bt = Button(win)
bt.text_set("Stop")
bt.callback_clicked_add(lambda x: web.stop())
hbx.pack_end(bt)
bt.show()
en = Entry(win)
en.scrollable_set(True)
en.editable_set(True)
en.single_line_set(True)
en.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 0.0)
en.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
hbx.pack_end(en)
en.show()
# Sync navigation entry and current URI
def do_change_uri(en):
web.uri = en.entry
def did_change_uri(web, uri, en):
en.entry = uri
en.callback_activated_add(do_change_uri)
web.callback_uri_changed_add(did_change_uri, en)
# Sync title
def did_change_title(web, title, win):
win.title_set("Web - %s" % title)
web.callback_title_changed_add(did_change_title, win)
win.resize(800, 600)
win.show()
if __name__ == "__main__":
elementary.init()
elementary.policy_set(elementary.ELM_POLICY_QUIT,
elementary.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
web_clicked(None)
elementary.run()
elementary.shutdown()