Module browsewin

This encapsulates the browser window wit the webkia an toolbars

Expand source code
#!/usr/bin/env python

''' This encapsulates the browser window wit the webkia an toolbars '''

import os, sys, getopt, signal, random, time, warnings

realinc = os.path.realpath(os.path.dirname(__file__) + os.sep + "../pycommon")
if realinc not in sys.path:
    sys.path.append(realinc)

from pgutils import  *
from pggui import  *
from pgsimp import  *

import gi
gi.require_version("Gtk", "3.0")

from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Pango

from pedlib import pedconfig

import pgwkit
#print("pgwkit:", pgwkit)

class  browserWin(Gtk.VBox):

    ''' Collection of URL bar, toolbar, status bar '''

    def __init__(self):

        try:
            Gtk.VBox.__init__(self)
        except:
            pass

        # TEST Mnemonic Label
        #bbb = Gtk.Button.new_with_mnemonic("_Hello")
        #self.pack_start(bbb, 0, 0, 0)

        hbox3 = self.urlbar()
        self.pack_start(hbox3, 0, 0, 0)

        #if not conf.kiosk:
        #    vbox.pack_start(hbox3, False, False, 2)

        self.scroll_win = Gtk.ScrolledWindow()

        try:
            self.webview = pgwkit.pgwebw(self)
        except:
            print("Please install WebKit2", sys.exc_info())
            #if pedconfig.conf.verbose:
            put_exception("start webview")
            #sys.exit(1)
            #raise

        #self.old_html = ""
        self.scroll_win.add(self.webview)
        self.webview.editor = self.webview

        self.toolbar2 = self.webview.ui.get_widget("/toolbar_format")
        self.pack_start(self.toolbar2, False, False, 0)

        self.pack_start(self.scroll_win, 1, 1, 2)

        hbox5 = Gtk.HBox()
        hbox5.pack_start(Gtk.Label("  "), 0, 0, 0)
        self.status = Gtk.Label(" Idle ");
        self.status.set_xalign(0)

        hbox5.pack_start(self.status, 1, 1, 0)
        hbox5.pack_start(Gtk.Label("  "), 0, 0, 0)
        self.set_status(" Idle State ")

        self.pack_start(hbox5, 0, 0, 2)

        #self.add_events(Gdk.EventMask.ALL_EVENTS_MASK)
        #self.set_sensitive(True)

        # Receive key presses
        self.set_can_focus(True)
        #self.grab_focus()

    def load_html(self, strx):
        self.webview.load_html(strx)

    def cut(self):
        #print("cut")
        self.webview.on_action("cut")

    def copy(self):
        #print("copy")
        self.webview.on_action("copy")

    def paste(self):
        #print("paste")
        self.webview.on_paste()
        #self.webview.on_action("paste")

    def open(self):
        dialog = Gtk.FileChooserDialog("Open an HTML file", None,
                Gtk.FileChooserAction.OPEN,
                    (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                        Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

        ret = dialog.run()
        fn = dialog.get_filename()
        dialog.destroy()

        if ret == Gtk.ResponseType.OK:
            if not fn:
                return
            if os.path.exists(fn):
                self.fname = fn
                with open(fn) as fd:
                    self.webview.load_html(fd.read(), "file:///")

    def save(self):

        #print("brow_win", "save", self.fname)
        def completion(html, user_data):
            #print("len html", len(html), len(self.webview.old_html) )
            #print("html", html, "old", self.webview.old_html )
            #if self.webview.old_html == html:

            if not self.webview.modified:
                self.set_status("File NOT modified.") # '%s'" % self.fname)
            else:
                #self.webview.old_html = html
                open_mode = user_data
                with open(self.fname, open_mode) as fd:
                    fd.write(html)
                self.set_status("Saved file '%s'" % self.fname)
                self.webview.modified = False
        self.webview.get_html(completion, 'w')

    def is_modified(self):
        return self.webview.modified

    def _completion(self, html, user_data):
        self.ret = html
        self.done = True
        self.webview.modified = False
        #print("retx", ret)

    def get_content(self):
        self.done = 0; self.ret = ""
        self.webview.get_html(self._completion, "w")
        # Wait until done is set
        for aa in range(1000):
            if self.done:
                break
            Gtk.main_iteration_do(False)
        return self.ret

    def saveas(self):
        def completion(html, user_data):
            open_mode = user_data
            with open(self.fname, open_mode) as fd:
                fd.write(html)
            self.set_status("Saved as '%s'" % self.fname)

        dialog = Gtk.FileChooserDialog("Select an HTML file", None,
                Gtk.FileChooserAction.SAVE,
                    (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                        Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

        if dialog.run() == Gtk.ResponseType.OK:
            self.fname = dialog.get_filename()
            #print("Saving", self.fname)
            self.webview.get_html(completion, "w+")
        dialog.destroy()

    def url_callb(self, xtxt):
        self.webview.go(xtxt)

    def url_callb(self, xtxt):
        self.go(xtxt)

    def backurl(self, url, parm, buff):
        self.webview.go_back()

    def baseurl(self, url, parm, buff):
        self.webview.load_uri("file://" + self.fname)

    def forwurl(self, url, parm, buff):
        self.webview.go_forward()

    #def gourl(self, url, parm, buff):
    def gourl(self, *url):
        print("gourl", *url)
        self.go(self.edit.get_text())

    def go(self, xstr):
        print("go", xstr)

        #  Leave known URL scemes alone
        if xstr[:7] == "file://":
            sss = os.path.realpath(xstr[7:])
            xstr = "file://" + sss
            pass
        elif xstr[:7] == "http://":
            pass
        elif xstr[:8] == "https://":
            pass
        elif xstr[:6] == "ftp://":
            pass
        elif str.isdecimal(xstr[0]):
            #print("Possible IP")
            pass
        else:
            # Yeah, padd it
            xstr = "https://" + xstr

        self.webview.load_uri(xstr)

    def stattime(self, *arg):
        self.status.set_text("Idle.")

    def set_status(self, xtxt):
        self.status.set_text(xtxt)
        GLib.timeout_add(3000, self.stattime, self, 0)

    def urlbar(self):

        self.edit = SimpleEdit();
        self.edit.setsavecb(self.url_callb)
        self.edit.single_line = True

        hbox3 = Gtk.HBox()
        uuu  = Gtk.Label("  URL:  ")
        uuu.set_tooltip_text("Current / New URL; press Enter to go")
        hbox3.pack_start(uuu, 0, 0, 0)

        hbox3.pack_start(self.edit, True, True, 2)

        bbb = LabelButt(" _Go ", self.gourl, "Go to speified URL")
        #bbb = Gtk.Button.new_with_mnemonic(" _Go ") #, self.gourl, "Go to speified URL")
        #bbb.connect("clicked", self.gourl)

        #bbb = LabelButt(" _Go ", self.gourl, "Go to speified URL")
        ccc = LabelButt(" <-_Back  ", self.backurl, "Go Back")
        ddd = LabelButt("  For_w-> ", self.forwurl, "Go Forw")
        eee = LabelButt("   B_ase  ", self.baseurl, "Go to base URL")

        hbox3.pack_start(Gtk.Label("  "), 0, 0, 0)

        hbox3.pack_start(bbb, 0, 0, 0)
        hbox3.pack_start(ccc, 0, 0, 0)
        hbox3.pack_start(ddd, 0, 0, 0)
        hbox3.pack_start(eee, 0, 0, 0)

        #hbox3.pack_start(Gtk.Label("  ^  "), 0, 0, 0)
        hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)

        return hbox3

# EOF

Classes

class browserWin

Collection of URL bar, toolbar, status bar

Initializer for a GObject based classes with support for property sets through the use of explicit keyword arguments.

Expand source code
class  browserWin(Gtk.VBox):

    ''' Collection of URL bar, toolbar, status bar '''

    def __init__(self):

        try:
            Gtk.VBox.__init__(self)
        except:
            pass

        # TEST Mnemonic Label
        #bbb = Gtk.Button.new_with_mnemonic("_Hello")
        #self.pack_start(bbb, 0, 0, 0)

        hbox3 = self.urlbar()
        self.pack_start(hbox3, 0, 0, 0)

        #if not conf.kiosk:
        #    vbox.pack_start(hbox3, False, False, 2)

        self.scroll_win = Gtk.ScrolledWindow()

        try:
            self.webview = pgwkit.pgwebw(self)
        except:
            print("Please install WebKit2", sys.exc_info())
            #if pedconfig.conf.verbose:
            put_exception("start webview")
            #sys.exit(1)
            #raise

        #self.old_html = ""
        self.scroll_win.add(self.webview)
        self.webview.editor = self.webview

        self.toolbar2 = self.webview.ui.get_widget("/toolbar_format")
        self.pack_start(self.toolbar2, False, False, 0)

        self.pack_start(self.scroll_win, 1, 1, 2)

        hbox5 = Gtk.HBox()
        hbox5.pack_start(Gtk.Label("  "), 0, 0, 0)
        self.status = Gtk.Label(" Idle ");
        self.status.set_xalign(0)

        hbox5.pack_start(self.status, 1, 1, 0)
        hbox5.pack_start(Gtk.Label("  "), 0, 0, 0)
        self.set_status(" Idle State ")

        self.pack_start(hbox5, 0, 0, 2)

        #self.add_events(Gdk.EventMask.ALL_EVENTS_MASK)
        #self.set_sensitive(True)

        # Receive key presses
        self.set_can_focus(True)
        #self.grab_focus()

    def load_html(self, strx):
        self.webview.load_html(strx)

    def cut(self):
        #print("cut")
        self.webview.on_action("cut")

    def copy(self):
        #print("copy")
        self.webview.on_action("copy")

    def paste(self):
        #print("paste")
        self.webview.on_paste()
        #self.webview.on_action("paste")

    def open(self):
        dialog = Gtk.FileChooserDialog("Open an HTML file", None,
                Gtk.FileChooserAction.OPEN,
                    (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                        Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

        ret = dialog.run()
        fn = dialog.get_filename()
        dialog.destroy()

        if ret == Gtk.ResponseType.OK:
            if not fn:
                return
            if os.path.exists(fn):
                self.fname = fn
                with open(fn) as fd:
                    self.webview.load_html(fd.read(), "file:///")

    def save(self):

        #print("brow_win", "save", self.fname)
        def completion(html, user_data):
            #print("len html", len(html), len(self.webview.old_html) )
            #print("html", html, "old", self.webview.old_html )
            #if self.webview.old_html == html:

            if not self.webview.modified:
                self.set_status("File NOT modified.") # '%s'" % self.fname)
            else:
                #self.webview.old_html = html
                open_mode = user_data
                with open(self.fname, open_mode) as fd:
                    fd.write(html)
                self.set_status("Saved file '%s'" % self.fname)
                self.webview.modified = False
        self.webview.get_html(completion, 'w')

    def is_modified(self):
        return self.webview.modified

    def _completion(self, html, user_data):
        self.ret = html
        self.done = True
        self.webview.modified = False
        #print("retx", ret)

    def get_content(self):
        self.done = 0; self.ret = ""
        self.webview.get_html(self._completion, "w")
        # Wait until done is set
        for aa in range(1000):
            if self.done:
                break
            Gtk.main_iteration_do(False)
        return self.ret

    def saveas(self):
        def completion(html, user_data):
            open_mode = user_data
            with open(self.fname, open_mode) as fd:
                fd.write(html)
            self.set_status("Saved as '%s'" % self.fname)

        dialog = Gtk.FileChooserDialog("Select an HTML file", None,
                Gtk.FileChooserAction.SAVE,
                    (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                        Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

        if dialog.run() == Gtk.ResponseType.OK:
            self.fname = dialog.get_filename()
            #print("Saving", self.fname)
            self.webview.get_html(completion, "w+")
        dialog.destroy()

    def url_callb(self, xtxt):
        self.webview.go(xtxt)

    def url_callb(self, xtxt):
        self.go(xtxt)

    def backurl(self, url, parm, buff):
        self.webview.go_back()

    def baseurl(self, url, parm, buff):
        self.webview.load_uri("file://" + self.fname)

    def forwurl(self, url, parm, buff):
        self.webview.go_forward()

    #def gourl(self, url, parm, buff):
    def gourl(self, *url):
        print("gourl", *url)
        self.go(self.edit.get_text())

    def go(self, xstr):
        print("go", xstr)

        #  Leave known URL scemes alone
        if xstr[:7] == "file://":
            sss = os.path.realpath(xstr[7:])
            xstr = "file://" + sss
            pass
        elif xstr[:7] == "http://":
            pass
        elif xstr[:8] == "https://":
            pass
        elif xstr[:6] == "ftp://":
            pass
        elif str.isdecimal(xstr[0]):
            #print("Possible IP")
            pass
        else:
            # Yeah, padd it
            xstr = "https://" + xstr

        self.webview.load_uri(xstr)

    def stattime(self, *arg):
        self.status.set_text("Idle.")

    def set_status(self, xtxt):
        self.status.set_text(xtxt)
        GLib.timeout_add(3000, self.stattime, self, 0)

    def urlbar(self):

        self.edit = SimpleEdit();
        self.edit.setsavecb(self.url_callb)
        self.edit.single_line = True

        hbox3 = Gtk.HBox()
        uuu  = Gtk.Label("  URL:  ")
        uuu.set_tooltip_text("Current / New URL; press Enter to go")
        hbox3.pack_start(uuu, 0, 0, 0)

        hbox3.pack_start(self.edit, True, True, 2)

        bbb = LabelButt(" _Go ", self.gourl, "Go to speified URL")
        #bbb = Gtk.Button.new_with_mnemonic(" _Go ") #, self.gourl, "Go to speified URL")
        #bbb.connect("clicked", self.gourl)

        #bbb = LabelButt(" _Go ", self.gourl, "Go to speified URL")
        ccc = LabelButt(" <-_Back  ", self.backurl, "Go Back")
        ddd = LabelButt("  For_w-> ", self.forwurl, "Go Forw")
        eee = LabelButt("   B_ase  ", self.baseurl, "Go to base URL")

        hbox3.pack_start(Gtk.Label("  "), 0, 0, 0)

        hbox3.pack_start(bbb, 0, 0, 0)
        hbox3.pack_start(ccc, 0, 0, 0)
        hbox3.pack_start(ddd, 0, 0, 0)
        hbox3.pack_start(eee, 0, 0, 0)

        #hbox3.pack_start(Gtk.Label("  ^  "), 0, 0, 0)
        hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)

        return hbox3

Ancestors

  • gi.repository.Gtk.VBox
  • gi.overrides.Gtk.Box
  • gi.repository.Gtk.Box
  • gi.overrides.Gtk.Container
  • gi.repository.Gtk.Container
  • gi.overrides.Gtk.Widget
  • gi.repository.Gtk.Widget
  • gi.repository.GObject.InitiallyUnowned
  • gi.overrides.GObject.Object
  • gi.repository.GObject.Object
  • gi._gi.GObject
  • gi.repository.Atk.ImplementorIface
  • gi.repository.Gtk.Buildable
  • gi.repository.Gtk.Orientable
  • gobject.GInterface

Methods

def backurl(self, url, parm, buff)
Expand source code
def backurl(self, url, parm, buff):
    self.webview.go_back()
def baseurl(self, url, parm, buff)
Expand source code
def baseurl(self, url, parm, buff):
    self.webview.load_uri("file://" + self.fname)
def copy(self)
Expand source code
def copy(self):
    #print("copy")
    self.webview.on_action("copy")
def cut(self)
Expand source code
def cut(self):
    #print("cut")
    self.webview.on_action("cut")
def forwurl(self, url, parm, buff)
Expand source code
def forwurl(self, url, parm, buff):
    self.webview.go_forward()
def get_content(self)
Expand source code
def get_content(self):
    self.done = 0; self.ret = ""
    self.webview.get_html(self._completion, "w")
    # Wait until done is set
    for aa in range(1000):
        if self.done:
            break
        Gtk.main_iteration_do(False)
    return self.ret
def go(self, xstr)
Expand source code
def go(self, xstr):
    print("go", xstr)

    #  Leave known URL scemes alone
    if xstr[:7] == "file://":
        sss = os.path.realpath(xstr[7:])
        xstr = "file://" + sss
        pass
    elif xstr[:7] == "http://":
        pass
    elif xstr[:8] == "https://":
        pass
    elif xstr[:6] == "ftp://":
        pass
    elif str.isdecimal(xstr[0]):
        #print("Possible IP")
        pass
    else:
        # Yeah, padd it
        xstr = "https://" + xstr

    self.webview.load_uri(xstr)
def gourl(self, *url)
Expand source code
def gourl(self, *url):
    print("gourl", *url)
    self.go(self.edit.get_text())
def is_modified(self)
Expand source code
def is_modified(self):
    return self.webview.modified
def load_html(self, strx)
Expand source code
def load_html(self, strx):
    self.webview.load_html(strx)
def open(self)
Expand source code
def open(self):
    dialog = Gtk.FileChooserDialog("Open an HTML file", None,
            Gtk.FileChooserAction.OPEN,
                (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                    Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

    ret = dialog.run()
    fn = dialog.get_filename()
    dialog.destroy()

    if ret == Gtk.ResponseType.OK:
        if not fn:
            return
        if os.path.exists(fn):
            self.fname = fn
            with open(fn) as fd:
                self.webview.load_html(fd.read(), "file:///")
def paste(self)
Expand source code
def paste(self):
    #print("paste")
    self.webview.on_paste()
    #self.webview.on_action("paste")
def save(self)
Expand source code
def save(self):

    #print("brow_win", "save", self.fname)
    def completion(html, user_data):
        #print("len html", len(html), len(self.webview.old_html) )
        #print("html", html, "old", self.webview.old_html )
        #if self.webview.old_html == html:

        if not self.webview.modified:
            self.set_status("File NOT modified.") # '%s'" % self.fname)
        else:
            #self.webview.old_html = html
            open_mode = user_data
            with open(self.fname, open_mode) as fd:
                fd.write(html)
            self.set_status("Saved file '%s'" % self.fname)
            self.webview.modified = False
    self.webview.get_html(completion, 'w')
def saveas(self)
Expand source code
def saveas(self):
    def completion(html, user_data):
        open_mode = user_data
        with open(self.fname, open_mode) as fd:
            fd.write(html)
        self.set_status("Saved as '%s'" % self.fname)

    dialog = Gtk.FileChooserDialog("Select an HTML file", None,
            Gtk.FileChooserAction.SAVE,
                (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                    Gtk.STOCK_SAVE, Gtk.ResponseType.OK))

    if dialog.run() == Gtk.ResponseType.OK:
        self.fname = dialog.get_filename()
        #print("Saving", self.fname)
        self.webview.get_html(completion, "w+")
    dialog.destroy()
def set_status(self, xtxt)
Expand source code
def set_status(self, xtxt):
    self.status.set_text(xtxt)
    GLib.timeout_add(3000, self.stattime, self, 0)
def stattime(self, *arg)
Expand source code
def stattime(self, *arg):
    self.status.set_text("Idle.")
def url_callb(self, xtxt)
Expand source code
def url_callb(self, xtxt):
    self.go(xtxt)
def urlbar(self)
Expand source code
def urlbar(self):

    self.edit = SimpleEdit();
    self.edit.setsavecb(self.url_callb)
    self.edit.single_line = True

    hbox3 = Gtk.HBox()
    uuu  = Gtk.Label("  URL:  ")
    uuu.set_tooltip_text("Current / New URL; press Enter to go")
    hbox3.pack_start(uuu, 0, 0, 0)

    hbox3.pack_start(self.edit, True, True, 2)

    bbb = LabelButt(" _Go ", self.gourl, "Go to speified URL")
    #bbb = Gtk.Button.new_with_mnemonic(" _Go ") #, self.gourl, "Go to speified URL")
    #bbb.connect("clicked", self.gourl)

    #bbb = LabelButt(" _Go ", self.gourl, "Go to speified URL")
    ccc = LabelButt(" <-_Back  ", self.backurl, "Go Back")
    ddd = LabelButt("  For_w-> ", self.forwurl, "Go Forw")
    eee = LabelButt("   B_ase  ", self.baseurl, "Go to base URL")

    hbox3.pack_start(Gtk.Label("  "), 0, 0, 0)

    hbox3.pack_start(bbb, 0, 0, 0)
    hbox3.pack_start(ccc, 0, 0, 0)
    hbox3.pack_start(ddd, 0, 0, 0)
    hbox3.pack_start(eee, 0, 0, 0)

    #hbox3.pack_start(Gtk.Label("  ^  "), 0, 0, 0)
    hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)

    return hbox3