Module pgsimp

Expand source code
#!/usr/bin/python

import  sys

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GObject
from gi.repository import Pango

''' Simplified controls '''

gui_testmode = False

import pgutils

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

class   SimpleTree(Gtk.TreeView):

    ''' Simplified Tree control '''

    def __init__(self, head = [], editx = [], skipedit = 0, xalign = 0.5):

        Gtk.TreeView.__init__(self)

        self.callb = None
        self.chcallb = None
        self.actcallb = None

        # repair missing column
        if len(head) == 0:
            head.append("")

        if len(editx) == 0:
            editx.append("")

        self.types = []
        for aa in head:
            self.types.append(str)

        self.treestore = Gtk.TreeStore()
        self.treestore.set_column_types(self.types)

        cnt = 0
        for aa in head:
            # Create a CellRendererText to render the data
            cell = Gtk.CellRendererText()
            cell.set_property("alignment", Pango.Alignment.LEFT)
            cell.set_property("align-set", True)
            cell.set_property("xalign", xalign)

            if cnt > skipedit:
                cell.set_property("editable", True)
                cell.connect("edited", self.text_edited, cnt)

            tvcolumn = Gtk.TreeViewColumn(aa)
            tvcolumn.pack_start(cell, True)
            tvcolumn.add_attribute(cell, 'text', cnt)
            self.append_column(tvcolumn)
            cnt += 1

        self.set_model(self.treestore)
        self.connect("cursor-changed", self.selection)
        self.connect("row-activated", self.activate)

    def activate(self, xtree, arg2, arg3):
        #print("Activated", row, arg2, arg3)
        sel = xtree.get_selection()
        xmodel, xiter = sel.get_selected()
        if xiter:
            xstr = xmodel.get_value(xiter, 0)
            #print("Activated str", xstr)
            if self.actcallb:
                self.actcallb(xstr)

    def text_edited(self, widget, path, text, idx):
        #print ("edited", widget, path, text, idx)
        self.treestore[path][idx] = text
        args = []
        for aa in self.treestore[path]:
            args.append(aa)
        if self.chcallb:
            self.chcallb(args)

    def selection(self, xtree):
        #print("simple tree sel", xtree)
        sel = xtree.get_selection()
        xmodel, xiter = sel.get_selected()
        if xiter:
            self.args = []
            for aa in range(len(self.types)):
                xstr = xmodel.get_value(xiter, aa)
                self.args.append(xstr)
            #print("selection", self.args)
            if self.callb:
                self.callb(self.args)

    def setcallb(self, callb):
        self.callb = callb

    def setCHcallb(self, callb):
        self.chcallb = callb

    def setActcallb(self, callb):
        self.actcallb = callb

    def append(self, args):
        #print("append", args)
        piter = self.treestore.append(None, args)

    # TreeStore
    def insert(self, parent, pos, args):
        print("insert", parent, pos, args)
        piter = self.treestore.insert(parent, pos, args)

    def sel_first(self):
        #print("sel first ...")
        sel = self.get_selection()
        xmodel, xiter = sel.get_selected()
        iterx = self.treestore.get_iter_first()
        sel.select_iter(iterx)
        ppp = self.treestore.get_path(iterx)
        self.set_cursor(ppp, self.get_column(0), False)
        pgutils.usleep(5)
        self.scroll_to_cell(ppp, None, 0, 0, 0 )

    def sel_last(self):
        #print("sel last ...")
        sel = self.get_selection()
        xmodel, xiter = sel.get_selected()
        iterx = self.treestore.get_iter_first()
        if not iterx:
            return
        while True:
            iter2 = self.treestore.iter_next(iterx)
            if not iter2:
                break
            iterx = iter2.copy()
        sel.select_iter(iterx)
        ppp = self.treestore.get_path(iterx)
        self.set_cursor(ppp, self.get_column(0), False)
        pgutils.usleep(5)
        self.scroll_to_cell(ppp, None, True, 0., 0. )
        #sel.select_path(self.treestore.get_path(iterx))

    def find_item(self, item):

        ''' find if we already have an item like that '''

        #print("find", item)
        found = 0
        iterx = self.treestore.get_iter_first()
        if not iterx:
            return found
        while True:
            value = self.treestore.get_value(iterx, 0)
            #print("item:", value)
            if item == value:
                found = True
                break
            iter2 = self.treestore.iter_next(iterx)
            if not iter2:
                break
            iterx = iter2.copy()
        return found

    def clear(self):
        self.treestore.clear()

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

class   SimpleEdit(Gtk.TextView):

    ''' Simplified Edit controol '''

    def __init__(self, head = []):

        Gtk.TextView.__init__(self)
        self.buffer = Gtk.TextBuffer()
        self.set_buffer(self.buffer)
        self.set_editable(True)
        self.connect("unmap", self.unmapx)
        #self.connect("focus-out-event", self.focus_out)
        self.connect("key-press-event", self.area_key)
        self.modified = False
        self.text = ""
        self.savecb = None
        self.single_line = False

    def focus_out(self, win, arg):
        #print("SimpleEdit focus_out")
        self.check_saved()
        #self.mefocus = False

    def check_saved(self):
        if not self.buffer.get_modified():
            return
        #print("Saving")
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        self.text = self.buffer.get_text(startt, endd, False)
        if self.savecb:
            self.savecb(self.text)

    def focus_in(self, win, arg):
        pass
        #self.buffer.set_modified(False)
        #self.mefocus = True
        #print("SimpleEdit focus_in")

    def unmapx(self, widget):
        #print("SimpleEdit unmap", widget)
        pass

    def area_key(self, widget, event):
        #print("SimpleEdit keypress", event.string)
        #self.buffer.set_modified(True)

        if self.single_line:
            if event.string == "\r":
                #print("newline")
                if self.savecb:
                    try:
                        self.savecb(self.get_text())
                    except:
                        print("Error simpledit callback")
                return True

    def append(self, strx):
        self.check_saved()
        iterx = self.buffer.get_end_iter()
        self.buffer.insert(iterx, strx)
        self.buffer.set_modified(False)

    def clear(self):
        self.check_saved()
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        self.buffer.delete(startt, endd)
        self.buffer.set_modified(False)

    def setsavecb(self, callb):
        self.savecb = callb

    def get_text(self):
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        return self.buffer.get_text(startt, endd, False)

    def set_text(self, txt, eventx = False):
        if eventx:
            self.check_saved()
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        self.buffer.delete(startt, endd)
        self.buffer.insert(startt, txt)
        self.buffer.set_modified(True)


# EOF

Classes

class SimpleEdit (head=[])

Simplified Edit controol

Expand source code
class   SimpleEdit(Gtk.TextView):

    ''' Simplified Edit controol '''

    def __init__(self, head = []):

        Gtk.TextView.__init__(self)
        self.buffer = Gtk.TextBuffer()
        self.set_buffer(self.buffer)
        self.set_editable(True)
        self.connect("unmap", self.unmapx)
        #self.connect("focus-out-event", self.focus_out)
        self.connect("key-press-event", self.area_key)
        self.modified = False
        self.text = ""
        self.savecb = None
        self.single_line = False

    def focus_out(self, win, arg):
        #print("SimpleEdit focus_out")
        self.check_saved()
        #self.mefocus = False

    def check_saved(self):
        if not self.buffer.get_modified():
            return
        #print("Saving")
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        self.text = self.buffer.get_text(startt, endd, False)
        if self.savecb:
            self.savecb(self.text)

    def focus_in(self, win, arg):
        pass
        #self.buffer.set_modified(False)
        #self.mefocus = True
        #print("SimpleEdit focus_in")

    def unmapx(self, widget):
        #print("SimpleEdit unmap", widget)
        pass

    def area_key(self, widget, event):
        #print("SimpleEdit keypress", event.string)
        #self.buffer.set_modified(True)

        if self.single_line:
            if event.string == "\r":
                #print("newline")
                if self.savecb:
                    try:
                        self.savecb(self.get_text())
                    except:
                        print("Error simpledit callback")
                return True

    def append(self, strx):
        self.check_saved()
        iterx = self.buffer.get_end_iter()
        self.buffer.insert(iterx, strx)
        self.buffer.set_modified(False)

    def clear(self):
        self.check_saved()
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        self.buffer.delete(startt, endd)
        self.buffer.set_modified(False)

    def setsavecb(self, callb):
        self.savecb = callb

    def get_text(self):
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        return self.buffer.get_text(startt, endd, False)

    def set_text(self, txt, eventx = False):
        if eventx:
            self.check_saved()
        startt = self.buffer.get_start_iter()
        endd = self.buffer.get_end_iter()
        self.buffer.delete(startt, endd)
        self.buffer.insert(startt, txt)
        self.buffer.set_modified(True)

Ancestors

  • gi.repository.Gtk.TextView
  • 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.Scrollable
  • gobject.GInterface

Methods

def append(self, strx)
Expand source code
def append(self, strx):
    self.check_saved()
    iterx = self.buffer.get_end_iter()
    self.buffer.insert(iterx, strx)
    self.buffer.set_modified(False)
def area_key(self, widget, event)
Expand source code
def area_key(self, widget, event):
    #print("SimpleEdit keypress", event.string)
    #self.buffer.set_modified(True)

    if self.single_line:
        if event.string == "\r":
            #print("newline")
            if self.savecb:
                try:
                    self.savecb(self.get_text())
                except:
                    print("Error simpledit callback")
            return True
def check_saved(self)
Expand source code
def check_saved(self):
    if not self.buffer.get_modified():
        return
    #print("Saving")
    startt = self.buffer.get_start_iter()
    endd = self.buffer.get_end_iter()
    self.text = self.buffer.get_text(startt, endd, False)
    if self.savecb:
        self.savecb(self.text)
def clear(self)
Expand source code
def clear(self):
    self.check_saved()
    startt = self.buffer.get_start_iter()
    endd = self.buffer.get_end_iter()
    self.buffer.delete(startt, endd)
    self.buffer.set_modified(False)
def focus_in(self, win, arg)
Expand source code
def focus_in(self, win, arg):
    pass
    #self.buffer.set_modified(False)
    #self.mefocus = True
    #print("SimpleEdit focus_in")
def focus_out(self, win, arg)
Expand source code
def focus_out(self, win, arg):
    #print("SimpleEdit focus_out")
    self.check_saved()
    #self.mefocus = False
def get_text(self)
Expand source code
def get_text(self):
    startt = self.buffer.get_start_iter()
    endd = self.buffer.get_end_iter()
    return self.buffer.get_text(startt, endd, False)
def set_text(self, txt, eventx=False)
Expand source code
def set_text(self, txt, eventx = False):
    if eventx:
        self.check_saved()
    startt = self.buffer.get_start_iter()
    endd = self.buffer.get_end_iter()
    self.buffer.delete(startt, endd)
    self.buffer.insert(startt, txt)
    self.buffer.set_modified(True)
def setsavecb(self, callb)
Expand source code
def setsavecb(self, callb):
    self.savecb = callb
def unmapx(self, widget)
Expand source code
def unmapx(self, widget):
    #print("SimpleEdit unmap", widget)
    pass
class SimpleTree (head=[], editx=[], skipedit=0, xalign=0.5)

Simplified Tree control

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

Expand source code
class   SimpleTree(Gtk.TreeView):

    ''' Simplified Tree control '''

    def __init__(self, head = [], editx = [], skipedit = 0, xalign = 0.5):

        Gtk.TreeView.__init__(self)

        self.callb = None
        self.chcallb = None
        self.actcallb = None

        # repair missing column
        if len(head) == 0:
            head.append("")

        if len(editx) == 0:
            editx.append("")

        self.types = []
        for aa in head:
            self.types.append(str)

        self.treestore = Gtk.TreeStore()
        self.treestore.set_column_types(self.types)

        cnt = 0
        for aa in head:
            # Create a CellRendererText to render the data
            cell = Gtk.CellRendererText()
            cell.set_property("alignment", Pango.Alignment.LEFT)
            cell.set_property("align-set", True)
            cell.set_property("xalign", xalign)

            if cnt > skipedit:
                cell.set_property("editable", True)
                cell.connect("edited", self.text_edited, cnt)

            tvcolumn = Gtk.TreeViewColumn(aa)
            tvcolumn.pack_start(cell, True)
            tvcolumn.add_attribute(cell, 'text', cnt)
            self.append_column(tvcolumn)
            cnt += 1

        self.set_model(self.treestore)
        self.connect("cursor-changed", self.selection)
        self.connect("row-activated", self.activate)

    def activate(self, xtree, arg2, arg3):
        #print("Activated", row, arg2, arg3)
        sel = xtree.get_selection()
        xmodel, xiter = sel.get_selected()
        if xiter:
            xstr = xmodel.get_value(xiter, 0)
            #print("Activated str", xstr)
            if self.actcallb:
                self.actcallb(xstr)

    def text_edited(self, widget, path, text, idx):
        #print ("edited", widget, path, text, idx)
        self.treestore[path][idx] = text
        args = []
        for aa in self.treestore[path]:
            args.append(aa)
        if self.chcallb:
            self.chcallb(args)

    def selection(self, xtree):
        #print("simple tree sel", xtree)
        sel = xtree.get_selection()
        xmodel, xiter = sel.get_selected()
        if xiter:
            self.args = []
            for aa in range(len(self.types)):
                xstr = xmodel.get_value(xiter, aa)
                self.args.append(xstr)
            #print("selection", self.args)
            if self.callb:
                self.callb(self.args)

    def setcallb(self, callb):
        self.callb = callb

    def setCHcallb(self, callb):
        self.chcallb = callb

    def setActcallb(self, callb):
        self.actcallb = callb

    def append(self, args):
        #print("append", args)
        piter = self.treestore.append(None, args)

    # TreeStore
    def insert(self, parent, pos, args):
        print("insert", parent, pos, args)
        piter = self.treestore.insert(parent, pos, args)

    def sel_first(self):
        #print("sel first ...")
        sel = self.get_selection()
        xmodel, xiter = sel.get_selected()
        iterx = self.treestore.get_iter_first()
        sel.select_iter(iterx)
        ppp = self.treestore.get_path(iterx)
        self.set_cursor(ppp, self.get_column(0), False)
        pgutils.usleep(5)
        self.scroll_to_cell(ppp, None, 0, 0, 0 )

    def sel_last(self):
        #print("sel last ...")
        sel = self.get_selection()
        xmodel, xiter = sel.get_selected()
        iterx = self.treestore.get_iter_first()
        if not iterx:
            return
        while True:
            iter2 = self.treestore.iter_next(iterx)
            if not iter2:
                break
            iterx = iter2.copy()
        sel.select_iter(iterx)
        ppp = self.treestore.get_path(iterx)
        self.set_cursor(ppp, self.get_column(0), False)
        pgutils.usleep(5)
        self.scroll_to_cell(ppp, None, True, 0., 0. )
        #sel.select_path(self.treestore.get_path(iterx))

    def find_item(self, item):

        ''' find if we already have an item like that '''

        #print("find", item)
        found = 0
        iterx = self.treestore.get_iter_first()
        if not iterx:
            return found
        while True:
            value = self.treestore.get_value(iterx, 0)
            #print("item:", value)
            if item == value:
                found = True
                break
            iter2 = self.treestore.iter_next(iterx)
            if not iter2:
                break
            iterx = iter2.copy()
        return found

    def clear(self):
        self.treestore.clear()

Ancestors

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

Methods

def activate(self, xtree, arg2, arg3)

activate(self) -> bool

Expand source code
def activate(self, xtree, arg2, arg3):
    #print("Activated", row, arg2, arg3)
    sel = xtree.get_selection()
    xmodel, xiter = sel.get_selected()
    if xiter:
        xstr = xmodel.get_value(xiter, 0)
        #print("Activated str", xstr)
        if self.actcallb:
            self.actcallb(xstr)
def append(self, args)
Expand source code
def append(self, args):
    #print("append", args)
    piter = self.treestore.append(None, args)
def clear(self)
Expand source code
def clear(self):
    self.treestore.clear()
def find_item(self, item)

find if we already have an item like that

Expand source code
def find_item(self, item):

    ''' find if we already have an item like that '''

    #print("find", item)
    found = 0
    iterx = self.treestore.get_iter_first()
    if not iterx:
        return found
    while True:
        value = self.treestore.get_value(iterx, 0)
        #print("item:", value)
        if item == value:
            found = True
            break
        iter2 = self.treestore.iter_next(iterx)
        if not iter2:
            break
        iterx = iter2.copy()
    return found
def insert(self, parent, pos, args)
Expand source code
def insert(self, parent, pos, args):
    print("insert", parent, pos, args)
    piter = self.treestore.insert(parent, pos, args)
def sel_first(self)
Expand source code
def sel_first(self):
    #print("sel first ...")
    sel = self.get_selection()
    xmodel, xiter = sel.get_selected()
    iterx = self.treestore.get_iter_first()
    sel.select_iter(iterx)
    ppp = self.treestore.get_path(iterx)
    self.set_cursor(ppp, self.get_column(0), False)
    pgutils.usleep(5)
    self.scroll_to_cell(ppp, None, 0, 0, 0 )
def sel_last(self)
Expand source code
def sel_last(self):
    #print("sel last ...")
    sel = self.get_selection()
    xmodel, xiter = sel.get_selected()
    iterx = self.treestore.get_iter_first()
    if not iterx:
        return
    while True:
        iter2 = self.treestore.iter_next(iterx)
        if not iter2:
            break
        iterx = iter2.copy()
    sel.select_iter(iterx)
    ppp = self.treestore.get_path(iterx)
    self.set_cursor(ppp, self.get_column(0), False)
    pgutils.usleep(5)
    self.scroll_to_cell(ppp, None, True, 0., 0. )
    #sel.select_path(self.treestore.get_path(iterx))
def selection(self, xtree)
Expand source code
def selection(self, xtree):
    #print("simple tree sel", xtree)
    sel = xtree.get_selection()
    xmodel, xiter = sel.get_selected()
    if xiter:
        self.args = []
        for aa in range(len(self.types)):
            xstr = xmodel.get_value(xiter, aa)
            self.args.append(xstr)
        #print("selection", self.args)
        if self.callb:
            self.callb(self.args)
def setActcallb(self, callb)
Expand source code
def setActcallb(self, callb):
    self.actcallb = callb
def setCHcallb(self, callb)
Expand source code
def setCHcallb(self, callb):
    self.chcallb = callb
def setcallb(self, callb)
Expand source code
def setcallb(self, callb):
    self.callb = callb
def text_edited(self, widget, path, text, idx)
Expand source code
def text_edited(self, widget, path, text, idx):
    #print ("edited", widget, path, text, idx)
    self.treestore[path][idx] = text
    args = []
    for aa in self.treestore[path]:
        args.append(aa)
    if self.chcallb:
        self.chcallb(args)