Module pedweb

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

from __future__ import absolute_import, print_function
import signal, os, time, sys, subprocess, platform
import ctypes, datetime, sqlite3, warnings

#import gi;
#from gi.repository import Gtk
#from gi.repository import Gdk
#from gi.repository import GObject
#from gi.repository import GLib

#gi.require_version('WebKit2', '4.0')

from pedlib import pedconfig

# Into our name space
from    pedlib.pedmenu import *
from    pedlib.pedui import *
from    pedlib.pedutil import *

from pycommon.pggui import *
from pycommon.pgsimp import *
from pycommon.pgbutt import *
from pycommon.browsewin import *

try:
    # This will change once the pydbase is out of dev stage
    np = os.path.split(__file__)[0] + os.sep + '..' + os.sep + ".." + os.sep + ".."
    #print(np)
    #np =  '..' + os.sep + "pydbase"
    sys.path.append(np)
    np += os.sep + "pydbase"
    sys.path.append(np)

    #print(sys.path)
    #print(os.getcwd())
    from pydbase import twincore
except:
    np =  os.path.split(__file__)[0] + os.sep + '..' + os.sep + "pydbase"
    sys.path.append(np)
    print(sys.path[-3:])

    from pydbase import twincore
    #put_exception("Cannot Load twincore")

# ------------------------------------------------------------------------

class pgweb(Gtk.VBox):

    def __init__(self):

        self. wasin = True

        #vbox = Gtk.VBox()
        Gtk.VBox.__init__(self)

        self.popwin = None
        self.lastsel = None;  self.lastkey = None
        self.cnt = 0
        self.web_dir = pedconfig.conf.web_dir
        if pedconfig.conf.verbose:
            print("Using webdir:", self.web_dir)
        try:
            if not os.path.isdir(self.web_dir):
                os.mkdir(self.web_dir)
        except:
            print("Cannot make web data dir")
        try:
            self.core = twincore.TwinCore(self.web_dir + os.sep + "pedweb.pydb")
            if pedconfig.conf.pgdebug > 2:
                print("core", self.core, self.core.fname)
        except:
            put_exception("Cannot open / make web notes py database")

        #message("Cannot make  database")

        self.popwin = None

        #hbox = Gtk.HBox()
        #self.pack_start(Gtk.Label("ccc"), 0, 0, 0)
        #self.pack_start(pggui.xSpacer(), 0, 0, 0)
        self.lsel = pgsimp.LetterNumberSel(self.letterfilter, font="Mono 12")
        self.lsel.set_tooltip_text("Filter entries by letter / number")
        self.pack_start(self.lsel, 0, 0, 2)

        #self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#dd8822"))

        #hbox3 = Gtk.HBox()
        #hbox3.pack_start(Gtk.Label(""), 0, 0, 0)
        #hbox3.pack_start(pggui.xSpacer(4), 0, 0, 0)
        #hbox3.pack_start(Gtk.Label(""), 0, 0, 0)
        #self.edit = Gtk.Entry()
        #hbox3.pack_start(Gtk.Label(" Find: "), 0, 0, 0)
        #hbox3.pack_start(self.edit, 1, 1, 0)
        #butt2 = Gtk.Button.new_with_mnemonic("Find")
        #butt2.connect("pressed", self.find)
        #hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        #hbox3.pack_start(butt2, 0, 0, 0)
        #hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        #hbox3.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#668822"))
        #self.pack_start(hbox3, 0, 0, 2)

        #self.treeview2 = pgsimp.SimpleTree(("Header", "Subject", "Description"), skipedit=0)
        self.treeview2 = pgsimp.SimpleTree(("Header",))
        self.treeview2.setcallb(self.treesel)
        #self.treeview2.setCHcallb(self.treechange)

        scroll2 = Gtk.ScrolledWindow()
        scroll2.add(self.treeview2)
        #scroll2.set_policy (Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)

        vpaned = Gtk.VPaned()

        frame3 = Gtk.Frame();
        frame3.add(scroll2)
        vpaned.add(frame3)

        vpaned.set_position(150)

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

        #self.edview = pgsimp.TextViewWin()
        #self.edview =  pgTextView()

        self.fname = os.path.dirname(__file__) + os.sep + "home.html"
        #print("fname", self.fname)

        hbox = Gtk.HBox()
        self.lastsel = ""

        hbox3 = Gtk.HBox()
        #scroll12 = Gtk.ScrolledWindow()
        self.edit = Gtk.Entry()
        #scroll12.add(self.edit)
        self.edit.set_width_chars(12)
        #self.edit.set_size_request(96,96)

        self.edit.set_activates_default(True)
        self.edit.connect("activate", self.go)

        hbox3.pack_start(Gtk.Label(" URL: "), 0, 0, 0)
        hbox3.pack_start(self.edit, 1, 1, 0)
        #hbox3.pack_start(scroll12, 1, 1, 0)
        hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)

        butt2 = Gtk.Button("Go")
        butt2.connect("pressed", self.go)
        hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox3.pack_start(butt2, 0, 0, 0)

        #self.pack_start(hbox3, 0, 0, 2)

        hbox4 = Gtk.HBox()
        lab1  = Gtk.Label("  Note: This is a Live Browser ")
        lab1.set_halign(Gtk.Align.END)
        hbox4.pack_start(lab1,  1, 1, 0)

        butt3 = Gtk.Button("<")
        butt3.connect("pressed", self.backurl)
        butt3.set_tooltip_text("Back")

        hbox4.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox4.pack_start(butt3, 0, 0, 0)

        butt4 = Gtk.Button(">")
        butt4.connect("pressed", self.forwurl)
        butt4.set_tooltip_text("Forward")
        hbox4.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox4.pack_start(butt4, 0, 0, 0)

        butt5 = Gtk.Button("~")
        butt5.connect("pressed", self.anchor)
        butt5.set_tooltip_text("Goto local anchor page")
        hbox4.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox4.pack_start(butt5, 0, 0, 0)

        #hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        #self.pack_start(hbox4, 0, 0, 2)

        self.treeview3 = SimpleTree(("Hour", "Subject", "Alarm", "Notes"))
        self.treeview3.setcallb(self.treesel)

        scroll2a = Gtk.ScrolledWindow()
        scroll2a.add(self.treeview3)
        frame3 = Gtk.Frame(); frame3.add(scroll2a)
        #self.pack_start(frame3, 1, 1, 2)

        #self.edview = SimpleEdit()
        #self.edview.setsavecb(self.savetext)
        #scroll3 = Gtk.ScrolledWindow()
        #scroll3.add(self.edview)
        #frame4 = Gtk.Frame(); frame4.add(scroll3)

        scrolled_window = Gtk.ScrolledWindow()
        try:
            #self.brow_win = WebKit2.WebView()
            #self.brow_win = pgwkit.pgwebw(self)
            self.brow_win = brow_win()
            #self.brow_win = Gtk.Label("No WebView Available.")
            #print("dir", dir(self.brow_win))
            #self.brow_win.load_uri("file://" + self.fname)
            pass
        except:
            #self.brow_win = Gtk.Label("No WebView Available.")
            put_exception("WebView load")

        vbox5 = Gtk.VBox()
        frame4 = Gtk.Frame();
        frame4.add(scrolled_window)
        vbox5.pack_start(frame4, 1, 1, 0)
        vpaned.add(vbox5)

        #self.brow_win.override_background_color(
        #                Gtk.StateFlags.NORMAL, Gdk.RGBA(1, .5, .5) )

        #webview.load_uri("https://google.com")
        scrolled_window.add(self.brow_win)
        #self.pack_start(scrolled_window, 1, 1, 2)
        #self.status = Gtk.Label(" Status: ")
        #self.pack_start(self.status, 0, 0, 2)

        hbox13 = Gtk.HBox()
        hbox13.pack_start(Gtk.Label(label=""), 1, 1, 0)

        #hbox13.pack_start(Gtk.Label(" | "), 0, 0, 0)
        butt3 = smallbutt(" _New Item ", self.newitem, "Create new item / record")

        hbox13.pack_start(butt3, 0, 0, 2)

        butt3a = smallbutt(" _Find in Text ", self.search, "Search this record")
        hbox13.pack_start(butt3a, 0, 0, 0)

        butt3b = smallbutt(" Search in All ", self.searchall, "Search all records")

        hbox13.pack_start(butt3b, 0, 0, 0)
        hbox13.pack_start(Gtk.Label(label=" "), 1, 1, 0)

        hbox13a = Gtk.HBox()
        hbox13a.pack_start(Gtk.Label(label=" "), 1, 1, 0)

        butt11 = smallbutt(" Del Item ", self.delitem, "Delete One Rec")
        hbox13a.pack_start(butt11, 0, 0, 0)

        butt12 = smallbutt(" _Export ", self.export, "Export all items")
        hbox13a.pack_start(butt12, 0, 0, 2)

        butt12a = smallbutt(" Impo_rt ", self.searchall, "Import items")
        hbox13a.pack_start(butt12a, 0, 0, 0)

        butt12a = smallbutt(" PopOu_t ", self.popx, "Pop Out to window")
        hbox13a.pack_start(butt12a, 0, 0, 0)

        hbox13a.pack_start(Gtk.Label(label=" "), 1, 1, 0)

        #butt22 = Gtk.Button.new_with_mnemonic("Save")
        #butt22.connect("pressed", self.save)
        #hbox13.pack_start(butt22, 0, 0, 0)
        #hbox13.pack_start(Gtk.Label("  "), 0, 0, 0)

        vbox5.pack_start(hbox13, 0, 0, 0)
        vbox5.pack_start(hbox13a, 0, 0, 0)

        try:
            self.load()
        except:
            put_exception("Cannot load")

        #Gtk.connect
        #self.connect("window_state_event", self.eventx)

    def popx(self, arg):

        txt = self.brow_win.get_content()
        print ("popx txt", txt)

        # Create if not there
        if self.popwin:
            self.popwin.destroy()

        self.popwin = PopWebWin()
        self.popwin.lastsel = self.lastsel
        self.popwin.savefunc = self.savefunc
        self.popwin.set_popwin_text(txt)
        self.popwin.show_all()

    def switched(self, pageto):
        #print("SW page signal web", pageto)
        if pageto == self:
            #print("Web in")
            self.wasin = True
        else:
            if self.wasin:
                self.wasin = False
                self.savetext()
                #print("Web out")

    def __del__(self):
        # Did not happen automatically ... force it from outside
        if pedconfig.conf.verbose:
            print("pedweb __del__")
        #self.savetext()
        #if self.core:
        #    self.core.__del__()

    def newitem(self, arg):
        self.savetext()
        rrr = HeadDialog("New Item %d" % self.cnt, None)
        ret = rrr.run()
        if ret != Gtk.ResponseType.OK:
            rrr.destroy()
            return

        ttt = rrr.entry.get_text()
        rrr.destroy()
        #print("store", self.treeview2.treestore)

        ret = self.treeview2.find_item(ttt)
        if ret:
            message("\nThis record already exists. \n\n %s" % ttt)
            return

        #itemx = (ttt, "", "")
        itemx = (ttt, )
        self.cnt += 1
        self.treeview2.insert(None, 0, itemx)

        #newtext = "Enter text here";
        #self.core.save_data(ttt, newtext)

        #self.edview.set_text(newtext)
        #self.treeview2.sel_first()

    def delitem(self, arg):
        #print ("delitem", self.lastkey, self.lastsel)
        if not self.lastsel:
            print("Nothing to delete")
            pedconfig.conf.pedwin.update_statusbar("Nothing selected for deletion.");
            return

        rrr = yes_no_cancel("   Delete Item ?   ", "'" + str(self.lastsel[0]) + "'", False)
        if rrr != Gtk.ResponseType.YES:
            return

        #print("Removing", self.lastsel[0])
        # Remove all of them including shadow entried
        #delx = self.core.del_recs(self.lastsel[0].encode(""), 0, twincore.INT_MAX)

        dbsize = self.core.getdbsize()
        # Remove all of them including shadow entried
        delx = self.core.del_rec_bykey(self.lastsel[0], dbsize)

        pedconfig.conf.pedwin.update_statusbar("Removed %s %d records." % \
                            (self.lastsel[0], delx) )

        # Refresh list in main sel window
        self.treeview2.clear()
        usleep(10)
        self.load()

    def savefunc(self, item, text):
        #print("savefunc", item, text[:12])
        self.core.save_data(item[0], text)
        if item[0] == self.lastsel[0]:
            #print("re-read current")
            self._readrec(item)

    def search(self, arg):
        print("search", time.time())
        pass

    def searchall(self, arg):
        #print("searchall", arg)
        print("searchall", time.time())
        pass

    def export(self, arg):
        #print("Exporting", arg)

        base = "pedwebdata";  cnt = 0; fff = ""
        while True:
            fff =  "%s%s%s_%d.bak" % (self.web_dir, os.sep, base, cnt)
            #print("trying:", fff)
            if not os.path.isfile(fff):
                break
            cnt += 1

        try:
            fp = open(fff, "wt")
        except:
            print("Cannot backup notes data", sys.exc_info());
            pedconfig.conf.pedwin.update_statusbar("Cannot export notes")
            return

        try:
            datax = []
            cnt = 0
            dbsize = self.core.getdbsize()
            for aa in range(dbsize-1, 0, -1):
                try:
                    ddd = self.core.get_rec(aa)
                    if len(ddd) > 1:
                        kkk = ddd[0]
                        vvv = ddd[1]
                    #print("Item", type(ddd[0]), ddd[0], "Data:", ddd[1][:16] + b" ..." )
                    fp.write("\n ------------------------------------------------------------------\n")
                    fp.write(str(kkk))
                    fp.write("\n ------------------------------------------------------------------\n")
                    fp.write(str(vvv))
                    cnt += 1
                except:
                    print("Cannot backup record\n", aa, sys.exc_info());
        except:
            print("Cannot backup database\n");

        fp.close()
        pedconfig.conf.pedwin.update_statusbar("Exported %d/%d web notes to %s" % \
                                (dbsize, cnt, os.path.basename(fff)))


    def load(self):

        ''' Load from file;
            This is more complex than it should be ... dealing with old data
        '''

        self.lastsel = None; self.lastkey = None
        datax = []
        try:
            dbsize = self.core.getdbsize()
            if not dbsize:
                return

            try:
                self.treeview2.freeze_child_notify()
                for aa in range(dbsize-1, 0, -1):
                    ddd = self.core.get_rec(aa)
                    if len(ddd) < 2:
                        continue        # Deleted record
                    #print("ddd", ddd)
                    hhh = ddd[0].decode()
                    if hhh not in datax:
                        datax.append(hhh)
                        #print("adding", hhh)
                        #self.treeview2.append((hhh, "", ""))
                        self.treeview2.append((hhh,))
            finally:
                self.treeview2.thaw_child_notify()

        except:
            put_exception("load web data")
            print("Cannot load notes Data at", cnt, qqq)

        #try:
        #    self.treeview2.sel_first()
        #    print("Select first")
        #except:
        #    if pedconfig.conf.verbose:
        #        put_exception("sel firs")
        #    pass

        # Update new counter
        for aa in datax:
            if aa[:9] == "New Item ":
                try:
                    ccc = int(aa[9:])
                    #print("new", ccc)
                    if ccc > self.cnt:
                        self.cnt = ccc
                except:
                    pass
        self.cnt += 1
        #print("self.cnt", self.cnt)

    def backurl(self, arg1): #, url, parm, buff):
        self.brow_win.go_back()

    def forwurl(self, arg1): #, url, parm, buff):
        self.brow_win.go_forward()

    def  letterfilter(self, letter):
        #print("letterfilter", letter)
        if letter == "All":
            self.treeview2.clear()
            print("Erase selection")
        else:
            aaa = self.sql.getall(letter + "%")
            print("all->", aaa)

            self.treeview2.clear()
            for aa in aaa:
                try:
                    #aa.append("ddd")
                    #aa.append("eee")
                    #aa.append("fff")
                    self.treeview2.append(aa[1:])
                except:
                    put_exception("Letter Filter")


    def go(self, arg):
        txt = self.edit.get_text()
        #print ("go", txt)
        self.brow_win.load_uri(txt)

    def anchor(self, arg):
        self.brow_win.load_uri("file://" + self.fname)

    def _completion_function(self, html, user_data):

        #print("completion:", html)

        if not html:
            return

        #print( "Save ttt:", ttt, "html:", html)

        try:
            self.core.save_data(user_data, html)
        except:
            put_exception("Cannot load")

        pedconfig.conf.pedwin.update_statusbar("Saved item for '%s'" % user_data[:12])

    # --------------------------------------------------------------------

    def  microsleep(msec, flag = [0,]):

        if sys.version_info[0] < 3 or \
            (sys.version_info[0] == 3 and sys.version_info[1] < 3):
            timefunc = time.clock
        else:
            timefunc = time.process_time

        got_clock = timefunc() + float(msec) / 1000
        #print( got_clock)
        while True:
            if timefunc() > got_clock:
                break
            if flag[0]:
                break
            #print ("Sleeping")
            Gtk.main_iteration_do(False)

    def save(self):
        #print ("web save automatic (unimplemented)")
        self.savetext()
        pass

    def savetext(self):

        if not self.lastsel:
            return

        try:
            ttt = self.lastsel[0]
        except:
            if pedconfig.conf.verbose:
                put_exception("savetext")
            return

        if self.brow_win.is_modified():
            newtext =  self.brow_win.get_content()
            #print("web Savetext", ttt, "nt:", newtext)
            self.core.save_data(ttt, newtext)
            #print("newtext", newtext)
        else:
            #print("Not saving", ttt)
            pass

        try:
            #self.brow_win.load_html(self._completion_function, ttt)
            self.brow_win.load_html(ttt)
        except:
            if pedconfig.conf.verbose:
                put_exception("savetext")

    # --------------------------------------------------------------------

    def treesel(self, args):

        #print("treesel", args[0])

        self.savetext()
        self.lastsel = args

        hhh = ""

        try:
            #ddd = self.core.retrieve(args[0])[0]
            dbsize = self.core.getdbsize()
            for aa in range(dbsize-1, 0, -1):
                #ddd = self.core.retrieve(aa)
                #ddd = self.core.findrecpos(aa, 1)
                ddd = self.core.get_rec(aa)
                if not ddd:
                    continue
                #print(ddd)
                if ddd[0].decode() == args[0]:
                    #print("found", ddd[0])
                    #print(ddd[0], args[0])
                    hhh = ddd[1].decode()
                    break
        except:
            if pedconfig.conf.verbose:
                put_exception("treesel")
            pass

        #print("Content", hhh)

        try:
            self.brow_win.load_html(hhh)
            #usleep(10)
            #self.treeview2.grab_focus()
            #usleep(10)

        except:
            put_exception("Load Data")
            pass

        #if args:
        #    pedconfig.conf.pedwin.update_statusbar("Saved item for '%s'" % args[0][:12])

# ------------------------------------------------------------------------

class   PopWebWin(Gtk.Window):

    def __init__(self):

        Gtk.Window.__init__(self)

        #self.win2 = Gtk.Window()
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_default_size(800, 600)

        tit = "pyedpro:title"
        self.set_title(tit)
        try:
            self.set_icon_from_file(get_img_path("pyedpro_sub.png"))
        except:
            print( "Cannot load log icon:", "pyedpro_sub.png", sys.exc_info())

        self.set_events(Gdk.EventMask.ALL_EVENTS_MASK )

        self.connect("key-press-event", self._area_key, self)
        self.connect("key-release-event", self._area_key, self)
        self.connect("destroy", self._area_destroy)

        #self.connect("focus-out-event", self._focus)
        #self.view = pgTextView(True)
        self.view = brow_win()
        #self.view.textview.set_editable(False)

        self.scroll = Gtk.ScrolledWindow();
        self.scroll.add(self.view)
        frame = Gtk.Frame(); frame.add(self.scroll)
        self.add(frame)
        self.show_all()

    # Gdk.EventFocus
    def _focus(self, win, to):
        #print("focusx", win, to.window)
        pass

    def closewin(self, win):
        #print("close", win)
        pass

    def _area_destroy(self, area):
        #print("destroy", area)
        #print("Saving", self.lastsel)
        if self.view.is_modified():
            txt = self.view.get_content()
            self.savefunc(self.lastsel, txt)
        # if we do not want it to close
        #return True

    #def _area_focus(self, area, event, dialog):
    #    print("focus", event)

    def set_popwin_text(self, text):
        #self.view.deser_buff(text)
        self.view.load_html(text)

    # ------------------------------------------------------------------------

    def _area_key(self, area, event, dialog):

        if  event.type == Gdk.EventType.KEY_PRESS:
            if event.keyval == Gdk.KEY_Escape:
                #print "Esc"
                area.destroy()

        if  event.type == Gdk.EventType.KEY_PRESS:
            if event.keyval == Gdk.KEY_Return:
                #print "Ret"
                area.destroy()

            if event.keyval == Gdk.KEY_Alt_L or \
                    event.keyval == Gdk.KEY_Alt_R:
                area.alt = True;

            if event.keyval == Gdk.KEY_x or \
                    event.keyval == Gdk.KEY_X:
                if area.alt:
                    area.destroy()

        elif  event.type == Gdk.EventType.KEY_RELEASE:
            if event.keyval == Gdk.KEY_Alt_L or \
                  event.keyval == Gdk.KEY_Alt_R:
                area.alt = False;

# EOF

Classes

class PopWebWin

:Constructors:

::

Window(**properties)
new(type:Gtk.WindowType) -> Gtk.Widget
Expand source code
class   PopWebWin(Gtk.Window):

    def __init__(self):

        Gtk.Window.__init__(self)

        #self.win2 = Gtk.Window()
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_default_size(800, 600)

        tit = "pyedpro:title"
        self.set_title(tit)
        try:
            self.set_icon_from_file(get_img_path("pyedpro_sub.png"))
        except:
            print( "Cannot load log icon:", "pyedpro_sub.png", sys.exc_info())

        self.set_events(Gdk.EventMask.ALL_EVENTS_MASK )

        self.connect("key-press-event", self._area_key, self)
        self.connect("key-release-event", self._area_key, self)
        self.connect("destroy", self._area_destroy)

        #self.connect("focus-out-event", self._focus)
        #self.view = pgTextView(True)
        self.view = brow_win()
        #self.view.textview.set_editable(False)

        self.scroll = Gtk.ScrolledWindow();
        self.scroll.add(self.view)
        frame = Gtk.Frame(); frame.add(self.scroll)
        self.add(frame)
        self.show_all()

    # Gdk.EventFocus
    def _focus(self, win, to):
        #print("focusx", win, to.window)
        pass

    def closewin(self, win):
        #print("close", win)
        pass

    def _area_destroy(self, area):
        #print("destroy", area)
        #print("Saving", self.lastsel)
        if self.view.is_modified():
            txt = self.view.get_content()
            self.savefunc(self.lastsel, txt)
        # if we do not want it to close
        #return True

    #def _area_focus(self, area, event, dialog):
    #    print("focus", event)

    def set_popwin_text(self, text):
        #self.view.deser_buff(text)
        self.view.load_html(text)

    # ------------------------------------------------------------------------

    def _area_key(self, area, event, dialog):

        if  event.type == Gdk.EventType.KEY_PRESS:
            if event.keyval == Gdk.KEY_Escape:
                #print "Esc"
                area.destroy()

        if  event.type == Gdk.EventType.KEY_PRESS:
            if event.keyval == Gdk.KEY_Return:
                #print "Ret"
                area.destroy()

            if event.keyval == Gdk.KEY_Alt_L or \
                    event.keyval == Gdk.KEY_Alt_R:
                area.alt = True;

            if event.keyval == Gdk.KEY_x or \
                    event.keyval == Gdk.KEY_X:
                if area.alt:
                    area.destroy()

        elif  event.type == Gdk.EventType.KEY_RELEASE:
            if event.keyval == Gdk.KEY_Alt_L or \
                  event.keyval == Gdk.KEY_Alt_R:
                area.alt = False;

Ancestors

  • gi.overrides.Gtk.Window
  • gi.repository.Gtk.Window
  • gi.repository.Gtk.Bin
  • 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
  • gobject.GInterface

Methods

def closewin(self, win)
Expand source code
def closewin(self, win):
    #print("close", win)
    pass
def set_popwin_text(self, text)
Expand source code
def set_popwin_text(self, text):
    #self.view.deser_buff(text)
    self.view.load_html(text)
class pgweb

:Constructors:

::

VBox(**properties)
new(homogeneous:bool, spacing:int) -> Gtk.Widget

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

Expand source code
class pgweb(Gtk.VBox):

    def __init__(self):

        self. wasin = True

        #vbox = Gtk.VBox()
        Gtk.VBox.__init__(self)

        self.popwin = None
        self.lastsel = None;  self.lastkey = None
        self.cnt = 0
        self.web_dir = pedconfig.conf.web_dir
        if pedconfig.conf.verbose:
            print("Using webdir:", self.web_dir)
        try:
            if not os.path.isdir(self.web_dir):
                os.mkdir(self.web_dir)
        except:
            print("Cannot make web data dir")
        try:
            self.core = twincore.TwinCore(self.web_dir + os.sep + "pedweb.pydb")
            if pedconfig.conf.pgdebug > 2:
                print("core", self.core, self.core.fname)
        except:
            put_exception("Cannot open / make web notes py database")

        #message("Cannot make  database")

        self.popwin = None

        #hbox = Gtk.HBox()
        #self.pack_start(Gtk.Label("ccc"), 0, 0, 0)
        #self.pack_start(pggui.xSpacer(), 0, 0, 0)
        self.lsel = pgsimp.LetterNumberSel(self.letterfilter, font="Mono 12")
        self.lsel.set_tooltip_text("Filter entries by letter / number")
        self.pack_start(self.lsel, 0, 0, 2)

        #self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#dd8822"))

        #hbox3 = Gtk.HBox()
        #hbox3.pack_start(Gtk.Label(""), 0, 0, 0)
        #hbox3.pack_start(pggui.xSpacer(4), 0, 0, 0)
        #hbox3.pack_start(Gtk.Label(""), 0, 0, 0)
        #self.edit = Gtk.Entry()
        #hbox3.pack_start(Gtk.Label(" Find: "), 0, 0, 0)
        #hbox3.pack_start(self.edit, 1, 1, 0)
        #butt2 = Gtk.Button.new_with_mnemonic("Find")
        #butt2.connect("pressed", self.find)
        #hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        #hbox3.pack_start(butt2, 0, 0, 0)
        #hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        #hbox3.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#668822"))
        #self.pack_start(hbox3, 0, 0, 2)

        #self.treeview2 = pgsimp.SimpleTree(("Header", "Subject", "Description"), skipedit=0)
        self.treeview2 = pgsimp.SimpleTree(("Header",))
        self.treeview2.setcallb(self.treesel)
        #self.treeview2.setCHcallb(self.treechange)

        scroll2 = Gtk.ScrolledWindow()
        scroll2.add(self.treeview2)
        #scroll2.set_policy (Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)

        vpaned = Gtk.VPaned()

        frame3 = Gtk.Frame();
        frame3.add(scroll2)
        vpaned.add(frame3)

        vpaned.set_position(150)

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

        #self.edview = pgsimp.TextViewWin()
        #self.edview =  pgTextView()

        self.fname = os.path.dirname(__file__) + os.sep + "home.html"
        #print("fname", self.fname)

        hbox = Gtk.HBox()
        self.lastsel = ""

        hbox3 = Gtk.HBox()
        #scroll12 = Gtk.ScrolledWindow()
        self.edit = Gtk.Entry()
        #scroll12.add(self.edit)
        self.edit.set_width_chars(12)
        #self.edit.set_size_request(96,96)

        self.edit.set_activates_default(True)
        self.edit.connect("activate", self.go)

        hbox3.pack_start(Gtk.Label(" URL: "), 0, 0, 0)
        hbox3.pack_start(self.edit, 1, 1, 0)
        #hbox3.pack_start(scroll12, 1, 1, 0)
        hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)

        butt2 = Gtk.Button("Go")
        butt2.connect("pressed", self.go)
        hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox3.pack_start(butt2, 0, 0, 0)

        #self.pack_start(hbox3, 0, 0, 2)

        hbox4 = Gtk.HBox()
        lab1  = Gtk.Label("  Note: This is a Live Browser ")
        lab1.set_halign(Gtk.Align.END)
        hbox4.pack_start(lab1,  1, 1, 0)

        butt3 = Gtk.Button("<")
        butt3.connect("pressed", self.backurl)
        butt3.set_tooltip_text("Back")

        hbox4.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox4.pack_start(butt3, 0, 0, 0)

        butt4 = Gtk.Button(">")
        butt4.connect("pressed", self.forwurl)
        butt4.set_tooltip_text("Forward")
        hbox4.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox4.pack_start(butt4, 0, 0, 0)

        butt5 = Gtk.Button("~")
        butt5.connect("pressed", self.anchor)
        butt5.set_tooltip_text("Goto local anchor page")
        hbox4.pack_start(Gtk.Label(" "), 0, 0, 0)
        hbox4.pack_start(butt5, 0, 0, 0)

        #hbox3.pack_start(Gtk.Label(" "), 0, 0, 0)
        #self.pack_start(hbox4, 0, 0, 2)

        self.treeview3 = SimpleTree(("Hour", "Subject", "Alarm", "Notes"))
        self.treeview3.setcallb(self.treesel)

        scroll2a = Gtk.ScrolledWindow()
        scroll2a.add(self.treeview3)
        frame3 = Gtk.Frame(); frame3.add(scroll2a)
        #self.pack_start(frame3, 1, 1, 2)

        #self.edview = SimpleEdit()
        #self.edview.setsavecb(self.savetext)
        #scroll3 = Gtk.ScrolledWindow()
        #scroll3.add(self.edview)
        #frame4 = Gtk.Frame(); frame4.add(scroll3)

        scrolled_window = Gtk.ScrolledWindow()
        try:
            #self.brow_win = WebKit2.WebView()
            #self.brow_win = pgwkit.pgwebw(self)
            self.brow_win = brow_win()
            #self.brow_win = Gtk.Label("No WebView Available.")
            #print("dir", dir(self.brow_win))
            #self.brow_win.load_uri("file://" + self.fname)
            pass
        except:
            #self.brow_win = Gtk.Label("No WebView Available.")
            put_exception("WebView load")

        vbox5 = Gtk.VBox()
        frame4 = Gtk.Frame();
        frame4.add(scrolled_window)
        vbox5.pack_start(frame4, 1, 1, 0)
        vpaned.add(vbox5)

        #self.brow_win.override_background_color(
        #                Gtk.StateFlags.NORMAL, Gdk.RGBA(1, .5, .5) )

        #webview.load_uri("https://google.com")
        scrolled_window.add(self.brow_win)
        #self.pack_start(scrolled_window, 1, 1, 2)
        #self.status = Gtk.Label(" Status: ")
        #self.pack_start(self.status, 0, 0, 2)

        hbox13 = Gtk.HBox()
        hbox13.pack_start(Gtk.Label(label=""), 1, 1, 0)

        #hbox13.pack_start(Gtk.Label(" | "), 0, 0, 0)
        butt3 = smallbutt(" _New Item ", self.newitem, "Create new item / record")

        hbox13.pack_start(butt3, 0, 0, 2)

        butt3a = smallbutt(" _Find in Text ", self.search, "Search this record")
        hbox13.pack_start(butt3a, 0, 0, 0)

        butt3b = smallbutt(" Search in All ", self.searchall, "Search all records")

        hbox13.pack_start(butt3b, 0, 0, 0)
        hbox13.pack_start(Gtk.Label(label=" "), 1, 1, 0)

        hbox13a = Gtk.HBox()
        hbox13a.pack_start(Gtk.Label(label=" "), 1, 1, 0)

        butt11 = smallbutt(" Del Item ", self.delitem, "Delete One Rec")
        hbox13a.pack_start(butt11, 0, 0, 0)

        butt12 = smallbutt(" _Export ", self.export, "Export all items")
        hbox13a.pack_start(butt12, 0, 0, 2)

        butt12a = smallbutt(" Impo_rt ", self.searchall, "Import items")
        hbox13a.pack_start(butt12a, 0, 0, 0)

        butt12a = smallbutt(" PopOu_t ", self.popx, "Pop Out to window")
        hbox13a.pack_start(butt12a, 0, 0, 0)

        hbox13a.pack_start(Gtk.Label(label=" "), 1, 1, 0)

        #butt22 = Gtk.Button.new_with_mnemonic("Save")
        #butt22.connect("pressed", self.save)
        #hbox13.pack_start(butt22, 0, 0, 0)
        #hbox13.pack_start(Gtk.Label("  "), 0, 0, 0)

        vbox5.pack_start(hbox13, 0, 0, 0)
        vbox5.pack_start(hbox13a, 0, 0, 0)

        try:
            self.load()
        except:
            put_exception("Cannot load")

        #Gtk.connect
        #self.connect("window_state_event", self.eventx)

    def popx(self, arg):

        txt = self.brow_win.get_content()
        print ("popx txt", txt)

        # Create if not there
        if self.popwin:
            self.popwin.destroy()

        self.popwin = PopWebWin()
        self.popwin.lastsel = self.lastsel
        self.popwin.savefunc = self.savefunc
        self.popwin.set_popwin_text(txt)
        self.popwin.show_all()

    def switched(self, pageto):
        #print("SW page signal web", pageto)
        if pageto == self:
            #print("Web in")
            self.wasin = True
        else:
            if self.wasin:
                self.wasin = False
                self.savetext()
                #print("Web out")

    def __del__(self):
        # Did not happen automatically ... force it from outside
        if pedconfig.conf.verbose:
            print("pedweb __del__")
        #self.savetext()
        #if self.core:
        #    self.core.__del__()

    def newitem(self, arg):
        self.savetext()
        rrr = HeadDialog("New Item %d" % self.cnt, None)
        ret = rrr.run()
        if ret != Gtk.ResponseType.OK:
            rrr.destroy()
            return

        ttt = rrr.entry.get_text()
        rrr.destroy()
        #print("store", self.treeview2.treestore)

        ret = self.treeview2.find_item(ttt)
        if ret:
            message("\nThis record already exists. \n\n %s" % ttt)
            return

        #itemx = (ttt, "", "")
        itemx = (ttt, )
        self.cnt += 1
        self.treeview2.insert(None, 0, itemx)

        #newtext = "Enter text here";
        #self.core.save_data(ttt, newtext)

        #self.edview.set_text(newtext)
        #self.treeview2.sel_first()

    def delitem(self, arg):
        #print ("delitem", self.lastkey, self.lastsel)
        if not self.lastsel:
            print("Nothing to delete")
            pedconfig.conf.pedwin.update_statusbar("Nothing selected for deletion.");
            return

        rrr = yes_no_cancel("   Delete Item ?   ", "'" + str(self.lastsel[0]) + "'", False)
        if rrr != Gtk.ResponseType.YES:
            return

        #print("Removing", self.lastsel[0])
        # Remove all of them including shadow entried
        #delx = self.core.del_recs(self.lastsel[0].encode(""), 0, twincore.INT_MAX)

        dbsize = self.core.getdbsize()
        # Remove all of them including shadow entried
        delx = self.core.del_rec_bykey(self.lastsel[0], dbsize)

        pedconfig.conf.pedwin.update_statusbar("Removed %s %d records." % \
                            (self.lastsel[0], delx) )

        # Refresh list in main sel window
        self.treeview2.clear()
        usleep(10)
        self.load()

    def savefunc(self, item, text):
        #print("savefunc", item, text[:12])
        self.core.save_data(item[0], text)
        if item[0] == self.lastsel[0]:
            #print("re-read current")
            self._readrec(item)

    def search(self, arg):
        print("search", time.time())
        pass

    def searchall(self, arg):
        #print("searchall", arg)
        print("searchall", time.time())
        pass

    def export(self, arg):
        #print("Exporting", arg)

        base = "pedwebdata";  cnt = 0; fff = ""
        while True:
            fff =  "%s%s%s_%d.bak" % (self.web_dir, os.sep, base, cnt)
            #print("trying:", fff)
            if not os.path.isfile(fff):
                break
            cnt += 1

        try:
            fp = open(fff, "wt")
        except:
            print("Cannot backup notes data", sys.exc_info());
            pedconfig.conf.pedwin.update_statusbar("Cannot export notes")
            return

        try:
            datax = []
            cnt = 0
            dbsize = self.core.getdbsize()
            for aa in range(dbsize-1, 0, -1):
                try:
                    ddd = self.core.get_rec(aa)
                    if len(ddd) > 1:
                        kkk = ddd[0]
                        vvv = ddd[1]
                    #print("Item", type(ddd[0]), ddd[0], "Data:", ddd[1][:16] + b" ..." )
                    fp.write("\n ------------------------------------------------------------------\n")
                    fp.write(str(kkk))
                    fp.write("\n ------------------------------------------------------------------\n")
                    fp.write(str(vvv))
                    cnt += 1
                except:
                    print("Cannot backup record\n", aa, sys.exc_info());
        except:
            print("Cannot backup database\n");

        fp.close()
        pedconfig.conf.pedwin.update_statusbar("Exported %d/%d web notes to %s" % \
                                (dbsize, cnt, os.path.basename(fff)))


    def load(self):

        ''' Load from file;
            This is more complex than it should be ... dealing with old data
        '''

        self.lastsel = None; self.lastkey = None
        datax = []
        try:
            dbsize = self.core.getdbsize()
            if not dbsize:
                return

            try:
                self.treeview2.freeze_child_notify()
                for aa in range(dbsize-1, 0, -1):
                    ddd = self.core.get_rec(aa)
                    if len(ddd) < 2:
                        continue        # Deleted record
                    #print("ddd", ddd)
                    hhh = ddd[0].decode()
                    if hhh not in datax:
                        datax.append(hhh)
                        #print("adding", hhh)
                        #self.treeview2.append((hhh, "", ""))
                        self.treeview2.append((hhh,))
            finally:
                self.treeview2.thaw_child_notify()

        except:
            put_exception("load web data")
            print("Cannot load notes Data at", cnt, qqq)

        #try:
        #    self.treeview2.sel_first()
        #    print("Select first")
        #except:
        #    if pedconfig.conf.verbose:
        #        put_exception("sel firs")
        #    pass

        # Update new counter
        for aa in datax:
            if aa[:9] == "New Item ":
                try:
                    ccc = int(aa[9:])
                    #print("new", ccc)
                    if ccc > self.cnt:
                        self.cnt = ccc
                except:
                    pass
        self.cnt += 1
        #print("self.cnt", self.cnt)

    def backurl(self, arg1): #, url, parm, buff):
        self.brow_win.go_back()

    def forwurl(self, arg1): #, url, parm, buff):
        self.brow_win.go_forward()

    def  letterfilter(self, letter):
        #print("letterfilter", letter)
        if letter == "All":
            self.treeview2.clear()
            print("Erase selection")
        else:
            aaa = self.sql.getall(letter + "%")
            print("all->", aaa)

            self.treeview2.clear()
            for aa in aaa:
                try:
                    #aa.append("ddd")
                    #aa.append("eee")
                    #aa.append("fff")
                    self.treeview2.append(aa[1:])
                except:
                    put_exception("Letter Filter")


    def go(self, arg):
        txt = self.edit.get_text()
        #print ("go", txt)
        self.brow_win.load_uri(txt)

    def anchor(self, arg):
        self.brow_win.load_uri("file://" + self.fname)

    def _completion_function(self, html, user_data):

        #print("completion:", html)

        if not html:
            return

        #print( "Save ttt:", ttt, "html:", html)

        try:
            self.core.save_data(user_data, html)
        except:
            put_exception("Cannot load")

        pedconfig.conf.pedwin.update_statusbar("Saved item for '%s'" % user_data[:12])

    # --------------------------------------------------------------------

    def  microsleep(msec, flag = [0,]):

        if sys.version_info[0] < 3 or \
            (sys.version_info[0] == 3 and sys.version_info[1] < 3):
            timefunc = time.clock
        else:
            timefunc = time.process_time

        got_clock = timefunc() + float(msec) / 1000
        #print( got_clock)
        while True:
            if timefunc() > got_clock:
                break
            if flag[0]:
                break
            #print ("Sleeping")
            Gtk.main_iteration_do(False)

    def save(self):
        #print ("web save automatic (unimplemented)")
        self.savetext()
        pass

    def savetext(self):

        if not self.lastsel:
            return

        try:
            ttt = self.lastsel[0]
        except:
            if pedconfig.conf.verbose:
                put_exception("savetext")
            return

        if self.brow_win.is_modified():
            newtext =  self.brow_win.get_content()
            #print("web Savetext", ttt, "nt:", newtext)
            self.core.save_data(ttt, newtext)
            #print("newtext", newtext)
        else:
            #print("Not saving", ttt)
            pass

        try:
            #self.brow_win.load_html(self._completion_function, ttt)
            self.brow_win.load_html(ttt)
        except:
            if pedconfig.conf.verbose:
                put_exception("savetext")

    # --------------------------------------------------------------------

    def treesel(self, args):

        #print("treesel", args[0])

        self.savetext()
        self.lastsel = args

        hhh = ""

        try:
            #ddd = self.core.retrieve(args[0])[0]
            dbsize = self.core.getdbsize()
            for aa in range(dbsize-1, 0, -1):
                #ddd = self.core.retrieve(aa)
                #ddd = self.core.findrecpos(aa, 1)
                ddd = self.core.get_rec(aa)
                if not ddd:
                    continue
                #print(ddd)
                if ddd[0].decode() == args[0]:
                    #print("found", ddd[0])
                    #print(ddd[0], args[0])
                    hhh = ddd[1].decode()
                    break
        except:
            if pedconfig.conf.verbose:
                put_exception("treesel")
            pass

        #print("Content", hhh)

        try:
            self.brow_win.load_html(hhh)
            #usleep(10)
            #self.treeview2.grab_focus()
            #usleep(10)

        except:
            put_exception("Load Data")
            pass

        #if args:
        #    pedconfig.conf.pedwin.update_statusbar("Saved item for '%s'" % args[0][:12])

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 anchor(self, arg)
Expand source code
def anchor(self, arg):
    self.brow_win.load_uri("file://" + self.fname)
def backurl(self, arg1)
Expand source code
def backurl(self, arg1): #, url, parm, buff):
    self.brow_win.go_back()
def delitem(self, arg)
Expand source code
def delitem(self, arg):
    #print ("delitem", self.lastkey, self.lastsel)
    if not self.lastsel:
        print("Nothing to delete")
        pedconfig.conf.pedwin.update_statusbar("Nothing selected for deletion.");
        return

    rrr = yes_no_cancel("   Delete Item ?   ", "'" + str(self.lastsel[0]) + "'", False)
    if rrr != Gtk.ResponseType.YES:
        return

    #print("Removing", self.lastsel[0])
    # Remove all of them including shadow entried
    #delx = self.core.del_recs(self.lastsel[0].encode(""), 0, twincore.INT_MAX)

    dbsize = self.core.getdbsize()
    # Remove all of them including shadow entried
    delx = self.core.del_rec_bykey(self.lastsel[0], dbsize)

    pedconfig.conf.pedwin.update_statusbar("Removed %s %d records." % \
                        (self.lastsel[0], delx) )

    # Refresh list in main sel window
    self.treeview2.clear()
    usleep(10)
    self.load()
def export(self, arg)
Expand source code
def export(self, arg):
    #print("Exporting", arg)

    base = "pedwebdata";  cnt = 0; fff = ""
    while True:
        fff =  "%s%s%s_%d.bak" % (self.web_dir, os.sep, base, cnt)
        #print("trying:", fff)
        if not os.path.isfile(fff):
            break
        cnt += 1

    try:
        fp = open(fff, "wt")
    except:
        print("Cannot backup notes data", sys.exc_info());
        pedconfig.conf.pedwin.update_statusbar("Cannot export notes")
        return

    try:
        datax = []
        cnt = 0
        dbsize = self.core.getdbsize()
        for aa in range(dbsize-1, 0, -1):
            try:
                ddd = self.core.get_rec(aa)
                if len(ddd) > 1:
                    kkk = ddd[0]
                    vvv = ddd[1]
                #print("Item", type(ddd[0]), ddd[0], "Data:", ddd[1][:16] + b" ..." )
                fp.write("\n ------------------------------------------------------------------\n")
                fp.write(str(kkk))
                fp.write("\n ------------------------------------------------------------------\n")
                fp.write(str(vvv))
                cnt += 1
            except:
                print("Cannot backup record\n", aa, sys.exc_info());
    except:
        print("Cannot backup database\n");

    fp.close()
    pedconfig.conf.pedwin.update_statusbar("Exported %d/%d web notes to %s" % \
                            (dbsize, cnt, os.path.basename(fff)))
def forwurl(self, arg1)
Expand source code
def forwurl(self, arg1): #, url, parm, buff):
    self.brow_win.go_forward()
def go(self, arg)
Expand source code
def go(self, arg):
    txt = self.edit.get_text()
    #print ("go", txt)
    self.brow_win.load_uri(txt)
def letterfilter(self, letter)
Expand source code
def  letterfilter(self, letter):
    #print("letterfilter", letter)
    if letter == "All":
        self.treeview2.clear()
        print("Erase selection")
    else:
        aaa = self.sql.getall(letter + "%")
        print("all->", aaa)

        self.treeview2.clear()
        for aa in aaa:
            try:
                #aa.append("ddd")
                #aa.append("eee")
                #aa.append("fff")
                self.treeview2.append(aa[1:])
            except:
                put_exception("Letter Filter")
def load(self)

Load from file; This is more complex than it should be … dealing with old data

Expand source code
def load(self):

    ''' Load from file;
        This is more complex than it should be ... dealing with old data
    '''

    self.lastsel = None; self.lastkey = None
    datax = []
    try:
        dbsize = self.core.getdbsize()
        if not dbsize:
            return

        try:
            self.treeview2.freeze_child_notify()
            for aa in range(dbsize-1, 0, -1):
                ddd = self.core.get_rec(aa)
                if len(ddd) < 2:
                    continue        # Deleted record
                #print("ddd", ddd)
                hhh = ddd[0].decode()
                if hhh not in datax:
                    datax.append(hhh)
                    #print("adding", hhh)
                    #self.treeview2.append((hhh, "", ""))
                    self.treeview2.append((hhh,))
        finally:
            self.treeview2.thaw_child_notify()

    except:
        put_exception("load web data")
        print("Cannot load notes Data at", cnt, qqq)

    #try:
    #    self.treeview2.sel_first()
    #    print("Select first")
    #except:
    #    if pedconfig.conf.verbose:
    #        put_exception("sel firs")
    #    pass

    # Update new counter
    for aa in datax:
        if aa[:9] == "New Item ":
            try:
                ccc = int(aa[9:])
                #print("new", ccc)
                if ccc > self.cnt:
                    self.cnt = ccc
            except:
                pass
    self.cnt += 1
    #print("self.cnt", self.cnt)
def microsleep(msec, flag=[0])
Expand source code
def  microsleep(msec, flag = [0,]):

    if sys.version_info[0] < 3 or \
        (sys.version_info[0] == 3 and sys.version_info[1] < 3):
        timefunc = time.clock
    else:
        timefunc = time.process_time

    got_clock = timefunc() + float(msec) / 1000
    #print( got_clock)
    while True:
        if timefunc() > got_clock:
            break
        if flag[0]:
            break
        #print ("Sleeping")
        Gtk.main_iteration_do(False)
def newitem(self, arg)
Expand source code
def newitem(self, arg):
    self.savetext()
    rrr = HeadDialog("New Item %d" % self.cnt, None)
    ret = rrr.run()
    if ret != Gtk.ResponseType.OK:
        rrr.destroy()
        return

    ttt = rrr.entry.get_text()
    rrr.destroy()
    #print("store", self.treeview2.treestore)

    ret = self.treeview2.find_item(ttt)
    if ret:
        message("\nThis record already exists. \n\n %s" % ttt)
        return

    #itemx = (ttt, "", "")
    itemx = (ttt, )
    self.cnt += 1
    self.treeview2.insert(None, 0, itemx)

    #newtext = "Enter text here";
    #self.core.save_data(ttt, newtext)

    #self.edview.set_text(newtext)
    #self.treeview2.sel_first()
def popx(self, arg)
Expand source code
def popx(self, arg):

    txt = self.brow_win.get_content()
    print ("popx txt", txt)

    # Create if not there
    if self.popwin:
        self.popwin.destroy()

    self.popwin = PopWebWin()
    self.popwin.lastsel = self.lastsel
    self.popwin.savefunc = self.savefunc
    self.popwin.set_popwin_text(txt)
    self.popwin.show_all()
def save(self)
Expand source code
def save(self):
    #print ("web save automatic (unimplemented)")
    self.savetext()
    pass
def savefunc(self, item, text)
Expand source code
def savefunc(self, item, text):
    #print("savefunc", item, text[:12])
    self.core.save_data(item[0], text)
    if item[0] == self.lastsel[0]:
        #print("re-read current")
        self._readrec(item)
def savetext(self)
Expand source code
def savetext(self):

    if not self.lastsel:
        return

    try:
        ttt = self.lastsel[0]
    except:
        if pedconfig.conf.verbose:
            put_exception("savetext")
        return

    if self.brow_win.is_modified():
        newtext =  self.brow_win.get_content()
        #print("web Savetext", ttt, "nt:", newtext)
        self.core.save_data(ttt, newtext)
        #print("newtext", newtext)
    else:
        #print("Not saving", ttt)
        pass

    try:
        #self.brow_win.load_html(self._completion_function, ttt)
        self.brow_win.load_html(ttt)
    except:
        if pedconfig.conf.verbose:
            put_exception("savetext")
def search(self, arg)
Expand source code
def search(self, arg):
    print("search", time.time())
    pass
def searchall(self, arg)
Expand source code
def searchall(self, arg):
    #print("searchall", arg)
    print("searchall", time.time())
    pass
def switched(self, pageto)
Expand source code
def switched(self, pageto):
    #print("SW page signal web", pageto)
    if pageto == self:
        #print("Web in")
        self.wasin = True
    else:
        if self.wasin:
            self.wasin = False
            self.savetext()
            #print("Web out")
def treesel(self, args)
Expand source code
def treesel(self, args):

    #print("treesel", args[0])

    self.savetext()
    self.lastsel = args

    hhh = ""

    try:
        #ddd = self.core.retrieve(args[0])[0]
        dbsize = self.core.getdbsize()
        for aa in range(dbsize-1, 0, -1):
            #ddd = self.core.retrieve(aa)
            #ddd = self.core.findrecpos(aa, 1)
            ddd = self.core.get_rec(aa)
            if not ddd:
                continue
            #print(ddd)
            if ddd[0].decode() == args[0]:
                #print("found", ddd[0])
                #print(ddd[0], args[0])
                hhh = ddd[1].decode()
                break
    except:
        if pedconfig.conf.verbose:
            put_exception("treesel")
        pass

    #print("Content", hhh)

    try:
        self.brow_win.load_html(hhh)
        #usleep(10)
        #self.treeview2.grab_focus()
        #usleep(10)

    except:
        put_exception("Load Data")
        pass

    #if args:
    #    pedconfig.conf.pedwin.update_statusbar("Saved item for '%s'" % args[0][:12])