Module pedgoto

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

# Action Handler for goto

from __future__ import absolute_import

import warnings

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

from pedlib import pedconfig

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

def gotodlg(self2):

    warnings.simplefilter("ignore")

    dialog = Gtk.Dialog("pyedpro: Goto Line",
                   None,
                   Gtk.DialogFlags.MODAL | \
                   Gtk.DialogFlags.DESTROY_WITH_PARENT,
                   (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
                   Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
    dialog.set_default_response(Gtk.ResponseType.ACCEPT)
    dialog.set_transient_for(self2.mained.mywin)
    dialog.self2 = self2
    dialog.alt = self2.keyh.alt

    # Spacers
    #label1 = Gtk.Label("   ");  label2 = Gtk.Label("   ")
    #label3 = Gtk.Label("   ");  label4 = Gtk.Label("   ")
    label5 = Gtk.Label("   ");  label6 = Gtk.Label("   ")
    label7 = Gtk.Label("   ");  label8 = Gtk.Label("   ")
    label9 = Gtk.Label("   ");

    labela = Gtk.Label("   ")
    labelb = Gtk.Label("  Top of File: ALT-A   End of File: ALT-Z  ");
    labelc = Gtk.Label("  Line Start: ALT-S    Line End: ALT-E  ");
    labeld = Gtk.Label("  Exit Dialog: ESC or ALT-X  ");
    labele = Gtk.Label("   ")

    dialog.connect("key-press-event", area_key)
    dialog.connect("key-release-event", area_key)

    #warnings.simplefilter("ignore")
    entry = Gtk.Entry();
    #warnings.simplefilter("default")

    entry.set_activates_default(True)

    if  self2.oldgoto == "":
        self2.oldgoto = pedconfig.conf.sql.get_str("goto")
        if  self2.oldgoto == None:
            self2.oldgoto = ""

    entry.set_text(self2.oldgoto)
    entry.set_width_chars(24)

    # Assemble it all

    dialog.vbox.pack_start(labela, 0, 0, 0)
    dialog.vbox.pack_start(labelb, 0, 0, 0)
    dialog.vbox.pack_start(labelc, 0, 0, 0)
    dialog.vbox.pack_start(labele, 0, 0, 0)

    hbox2 = Gtk.HBox()
    hbox2.pack_start(label6, 0, 0, 0)
    hbox2.pack_start(entry, 1, 1, 0)
    hbox2.pack_start(label7, 0, 0, 0)
    dialog.vbox.pack_start(hbox2, 0, 0, 0)
    dialog.vbox.pack_start(label5, 0, 0, 0)

    hbox = Gtk.HBox()
    dialog.vbox.pack_start(hbox, 0, 0, 0)
    #dialog.vbox.pack_start(label8, 0, 0, 0)
    dialog.vbox.pack_start(labeld, 0, 0, 0)

    dialog.show_all()
    response = dialog.run()
    gotxt = entry.get_text()
    dialog.destroy()

    if response == Gtk.ResponseType.ACCEPT:
        # Save it for later use
        self2.oldgoto = gotxt
        pedconfig.conf.sql.put("goto", gotxt)

        if gotxt == "":
            self2.mained.update_statusbar("Must specify line to goto.")
            return
        try:
            num = int(gotxt)
        except:
            self2.mained.update_statusbar("Invalid line number.")
            return

        if num > len(self2.text):
            num = len(self2.text)
            self2.gotoxy(0, num - 1)
            self2.mained.update_statusbar("Goto line passed end, landed on %d" %  num)
        else:
            self2.gotoxy(self2.xpos + self2.caret[0], num -1)
            self2.mained.update_statusbar("Done goto line %d" % num)

    warnings.simplefilter("default")

def  area_key(dialog, event):
    #print(keypress)
    if  event.type == Gdk.EventType.KEY_PRESS:
       if event.keyval == Gdk.KEY_Alt_L or \
                event.keyval == Gdk.KEY_Alt_R:
            dialog.alt = True;

    elif  event.type == Gdk.EventType.KEY_RELEASE:
        if event.keyval == Gdk.KEY_Alt_L or \
              event.keyval == Gdk.KEY_Alt_R:
            dialog.alt = False;
    else:
        print("Unk keytype")

    if  event.type == Gdk.EventType.KEY_PRESS:
        if event.keyval == Gdk.KEY_x or \
                event.keyval == Gdk.KEY_X:
            if dialog.alt:
                dialog.destroy()

        if event.keyval == Gdk.KEY_a or \
                event.keyval == Gdk.KEY_A:
            if dialog.alt:
                dialog.self2.gotoxy(0, 0)
                dialog.destroy()

        if event.keyval == Gdk.KEY_Z or \
                event.keyval == Gdk.KEY_z:
            if dialog.alt:
                last = len(dialog.self2.text) - 1
                xlen = len(dialog.self2.text[last])
                dialog.self2.set_caret(xlen, last)
                dialog.destroy()

        if event.keyval == Gdk.KEY_E or \
                event.keyval == Gdk.KEY_e:
            if dialog.alt:
                xidx = dialog.self2.caret[0] + dialog.self2.xpos;
                yidx = dialog.self2.caret[1] + dialog.self2.ypos
                xlen = len(dialog.self2.text[yidx])
                dialog.self2.set_caret(xlen, yidx)
                dialog.destroy()

        if event.keyval == Gdk.KEY_S or \
                event.keyval == Gdk.KEY_s:
            if dialog.alt:
                xidx = dialog.self2.caret[0] + dialog.self2.xpos;
                yidx = dialog.self2.caret[1] + dialog.self2.ypos
                dialog.self2.set_caret(0, yidx)
                dialog.destroy()

# EOF

Functions

def area_key(dialog, event)
Expand source code
def  area_key(dialog, event):
    #print(keypress)
    if  event.type == Gdk.EventType.KEY_PRESS:
       if event.keyval == Gdk.KEY_Alt_L or \
                event.keyval == Gdk.KEY_Alt_R:
            dialog.alt = True;

    elif  event.type == Gdk.EventType.KEY_RELEASE:
        if event.keyval == Gdk.KEY_Alt_L or \
              event.keyval == Gdk.KEY_Alt_R:
            dialog.alt = False;
    else:
        print("Unk keytype")

    if  event.type == Gdk.EventType.KEY_PRESS:
        if event.keyval == Gdk.KEY_x or \
                event.keyval == Gdk.KEY_X:
            if dialog.alt:
                dialog.destroy()

        if event.keyval == Gdk.KEY_a or \
                event.keyval == Gdk.KEY_A:
            if dialog.alt:
                dialog.self2.gotoxy(0, 0)
                dialog.destroy()

        if event.keyval == Gdk.KEY_Z or \
                event.keyval == Gdk.KEY_z:
            if dialog.alt:
                last = len(dialog.self2.text) - 1
                xlen = len(dialog.self2.text[last])
                dialog.self2.set_caret(xlen, last)
                dialog.destroy()

        if event.keyval == Gdk.KEY_E or \
                event.keyval == Gdk.KEY_e:
            if dialog.alt:
                xidx = dialog.self2.caret[0] + dialog.self2.xpos;
                yidx = dialog.self2.caret[1] + dialog.self2.ypos
                xlen = len(dialog.self2.text[yidx])
                dialog.self2.set_caret(xlen, yidx)
                dialog.destroy()

        if event.keyval == Gdk.KEY_S or \
                event.keyval == Gdk.KEY_s:
            if dialog.alt:
                xidx = dialog.self2.caret[0] + dialog.self2.xpos;
                yidx = dialog.self2.caret[1] + dialog.self2.ypos
                dialog.self2.set_caret(0, yidx)
                dialog.destroy()
def gotodlg(self2)
Expand source code
def gotodlg(self2):

    warnings.simplefilter("ignore")

    dialog = Gtk.Dialog("pyedpro: Goto Line",
                   None,
                   Gtk.DialogFlags.MODAL | \
                   Gtk.DialogFlags.DESTROY_WITH_PARENT,
                   (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
                   Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
    dialog.set_default_response(Gtk.ResponseType.ACCEPT)
    dialog.set_transient_for(self2.mained.mywin)
    dialog.self2 = self2
    dialog.alt = self2.keyh.alt

    # Spacers
    #label1 = Gtk.Label("   ");  label2 = Gtk.Label("   ")
    #label3 = Gtk.Label("   ");  label4 = Gtk.Label("   ")
    label5 = Gtk.Label("   ");  label6 = Gtk.Label("   ")
    label7 = Gtk.Label("   ");  label8 = Gtk.Label("   ")
    label9 = Gtk.Label("   ");

    labela = Gtk.Label("   ")
    labelb = Gtk.Label("  Top of File: ALT-A   End of File: ALT-Z  ");
    labelc = Gtk.Label("  Line Start: ALT-S    Line End: ALT-E  ");
    labeld = Gtk.Label("  Exit Dialog: ESC or ALT-X  ");
    labele = Gtk.Label("   ")

    dialog.connect("key-press-event", area_key)
    dialog.connect("key-release-event", area_key)

    #warnings.simplefilter("ignore")
    entry = Gtk.Entry();
    #warnings.simplefilter("default")

    entry.set_activates_default(True)

    if  self2.oldgoto == "":
        self2.oldgoto = pedconfig.conf.sql.get_str("goto")
        if  self2.oldgoto == None:
            self2.oldgoto = ""

    entry.set_text(self2.oldgoto)
    entry.set_width_chars(24)

    # Assemble it all

    dialog.vbox.pack_start(labela, 0, 0, 0)
    dialog.vbox.pack_start(labelb, 0, 0, 0)
    dialog.vbox.pack_start(labelc, 0, 0, 0)
    dialog.vbox.pack_start(labele, 0, 0, 0)

    hbox2 = Gtk.HBox()
    hbox2.pack_start(label6, 0, 0, 0)
    hbox2.pack_start(entry, 1, 1, 0)
    hbox2.pack_start(label7, 0, 0, 0)
    dialog.vbox.pack_start(hbox2, 0, 0, 0)
    dialog.vbox.pack_start(label5, 0, 0, 0)

    hbox = Gtk.HBox()
    dialog.vbox.pack_start(hbox, 0, 0, 0)
    #dialog.vbox.pack_start(label8, 0, 0, 0)
    dialog.vbox.pack_start(labeld, 0, 0, 0)

    dialog.show_all()
    response = dialog.run()
    gotxt = entry.get_text()
    dialog.destroy()

    if response == Gtk.ResponseType.ACCEPT:
        # Save it for later use
        self2.oldgoto = gotxt
        pedconfig.conf.sql.put("goto", gotxt)

        if gotxt == "":
            self2.mained.update_statusbar("Must specify line to goto.")
            return
        try:
            num = int(gotxt)
        except:
            self2.mained.update_statusbar("Invalid line number.")
            return

        if num > len(self2.text):
            num = len(self2.text)
            self2.gotoxy(0, num - 1)
            self2.mained.update_statusbar("Goto line passed end, landed on %d" %  num)
        else:
            self2.gotoxy(self2.xpos + self2.caret[0], num -1)
            self2.mained.update_statusbar("Done goto line %d" % num)

    warnings.simplefilter("default")