mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Update python bindings to use PyGI and Gtk3
While it doesn't fully fix the python bindings, gnucash now at least doesn't segfault on start up if built with python bindings enabled. There are still issues to fix though.
This commit is contained in:
parent
48483b1e3d
commit
8b1ebc5168
@ -2,7 +2,7 @@ import sys
|
||||
import _sw_app_utils
|
||||
from gnucash import *
|
||||
from _sw_core_utils import gnc_prefs_is_extra_enabled
|
||||
import gtk
|
||||
from gi.repository import Gtk
|
||||
import os
|
||||
sys.path.append(os.path.dirname(__file__))
|
||||
noisy = gnc_prefs_is_extra_enabled()
|
||||
@ -44,7 +44,7 @@ class Console (cons.Console):
|
||||
filename=None, size=100):
|
||||
cons.Console.__init__(self, argv, shelltype, banner, filename, size)
|
||||
self.buffer.create_tag('center',
|
||||
justification=gtk.JUSTIFY_CENTER,
|
||||
justification=Gtk.Justification.CENTER,
|
||||
font='Mono 4')
|
||||
self.figures = []
|
||||
self.callbacks = []
|
||||
@ -86,14 +86,14 @@ class Console (cons.Console):
|
||||
if False:
|
||||
console = Console(argv = [], shelltype = 'python', banner = [['woop', 'title']], size = 100)
|
||||
|
||||
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
window.set_position(gtk.WIN_POS_CENTER)
|
||||
window = Gtk.Window(Gtk.WindowType.TOPLEVEL)
|
||||
window.set_position(Gtk.WindowPosition.CENTER)
|
||||
window.set_default_size(800,600)
|
||||
window.set_border_width(0)
|
||||
# Hm. gtk.main_quit will kill gnucash without closing the file
|
||||
# Hm. Gtk.main_quit will kill gnucash without closing the file
|
||||
# properly. That's kinda bad.
|
||||
window.connect('destroy-event', gtk.main_quit)
|
||||
window.connect('delete-event', gtk.main_quit)
|
||||
window.connect('destroy-event', Gtk.main_quit)
|
||||
window.connect('delete-event', Gtk.main_quit)
|
||||
window.add (console)
|
||||
window.show_all()
|
||||
console.grab_focus()
|
||||
|
@ -31,9 +31,9 @@ import sys
|
||||
import re
|
||||
import tempfile
|
||||
import readline
|
||||
import gobject
|
||||
import gtk
|
||||
import pango
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import Pango
|
||||
from StringIO import StringIO
|
||||
import shell
|
||||
try: import ishell
|
||||
@ -105,8 +105,8 @@ class ConsoleIn:
|
||||
iter = buffer.get_iter_at_mark(buffer.get_insert())
|
||||
buffer.move_mark (buffer.get_mark('linestart'), iter)
|
||||
while self.console.input_mode:
|
||||
#while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
#while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
s = self.console.input
|
||||
self.console.input = ''
|
||||
return s+'\n'
|
||||
@ -119,7 +119,7 @@ class ConsoleIn:
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- class Console
|
||||
class Console (gtk.ScrolledWindow):
|
||||
class Console (Gtk.ScrolledWindow):
|
||||
""" GTK python console """
|
||||
|
||||
def __init__(self, argv=[], shelltype='python', banner=[],
|
||||
@ -129,12 +129,12 @@ class Console (gtk.ScrolledWindow):
|
||||
|
||||
# GTK interface
|
||||
self.do_quit = False
|
||||
gtk.ScrolledWindow.__init__(self)
|
||||
self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
|
||||
self.set_shadow_type (gtk.SHADOW_NONE)
|
||||
GObject.GObject.__init__(self)
|
||||
self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||
self.set_shadow_type (Gtk.ShadowType.NONE)
|
||||
self.set_border_width(0)
|
||||
self.view = gtk.TextView()
|
||||
self.view.modify_font (pango.FontDescription("Mono 10"))
|
||||
self.view = Gtk.TextView()
|
||||
self.view.modify_font (Pango.FontDescription("Mono 10"))
|
||||
self.view.set_editable (True)
|
||||
self.view.set_wrap_mode(True)
|
||||
self.view.set_left_margin(0)
|
||||
@ -142,7 +142,7 @@ class Console (gtk.ScrolledWindow):
|
||||
self.buffer = self.view.get_buffer()
|
||||
self.buffer.create_tag ('title',
|
||||
indent = 2,
|
||||
weight=pango.WEIGHT_BOLD,
|
||||
weight=Pango.Weight.BOLD,
|
||||
foreground='blue',
|
||||
font='Mono 12')
|
||||
self.buffer.create_tag ('subtitle',
|
||||
@ -154,11 +154,11 @@ class Console (gtk.ScrolledWindow):
|
||||
font='Mono 10')
|
||||
self.buffer.create_tag ('error',
|
||||
foreground='red',
|
||||
style=pango.STYLE_OBLIQUE,
|
||||
style=Pango.Style.OBLIQUE,
|
||||
font='Mono 10')
|
||||
self.buffer.create_tag ('prompt',
|
||||
foreground='blue',
|
||||
weight=pango.WEIGHT_BOLD,
|
||||
weight=Pango.Weight.BOLD,
|
||||
font='Mono 10')
|
||||
self.buffer.create_tag('0')
|
||||
self.color_pat = re.compile('\x01?\x1b\[(.*?)m\x02?')
|
||||
@ -170,7 +170,7 @@ class Console (gtk.ScrolledWindow):
|
||||
self.write (text, style)
|
||||
iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
|
||||
self.buffer.create_mark ('linestart', iter, True)
|
||||
self.view.add_events(gtk.gdk.KEY_PRESS_MASK)
|
||||
self.view.add_events(Gdk.EventMask.KEY_PRESS_MASK)
|
||||
self.view.connect ('key-press-event', self.key_press_event)
|
||||
self.add(self.view)
|
||||
self.show_all()
|
||||
@ -294,13 +294,13 @@ class Console (gtk.ScrolledWindow):
|
||||
self.buffer.move_mark (self.buffer.get_mark('linestart'), iter)
|
||||
self.history_reset()
|
||||
self.view.scroll_mark_onscreen(self.buffer.get_insert())
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
|
||||
def key_press_event (self, widget, event):
|
||||
""" Handle key press event """
|
||||
|
||||
keyname = gtk.gdk.keyval_name (event.keyval)
|
||||
keyname = Gdk.keyval_name (event.keyval)
|
||||
|
||||
# New command
|
||||
if keyname in ['Return', 'KP_Enter']:
|
||||
@ -358,7 +358,7 @@ class Console (gtk.ScrolledWindow):
|
||||
return True
|
||||
|
||||
# Controls
|
||||
elif event.state & gtk.gdk.CONTROL_MASK:
|
||||
elif event.get_state() & Gdk.ModifierType.CONTROL_MASK:
|
||||
if keyname in ['a','A']:
|
||||
mark = self.buffer.get_mark('linestart')
|
||||
linestart = self.buffer.get_iter_at_mark(mark)
|
||||
@ -413,8 +413,8 @@ class Console (gtk.ScrolledWindow):
|
||||
|
||||
self.shell.eval(self)
|
||||
self.view.scroll_mark_onscreen(self.buffer.get_insert())
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
while Gtk.events_pending():
|
||||
Gtk.main_iteration()
|
||||
|
||||
# Get system output and remove system redirection
|
||||
os.dup2 (sys_stdout, 1)
|
||||
@ -431,7 +431,7 @@ class Console (gtk.ScrolledWindow):
|
||||
def quit(self):
|
||||
""" Quit console """
|
||||
|
||||
gtk.main_quit()
|
||||
Gtk.main_quit()
|
||||
self.history_save()
|
||||
try:
|
||||
os.close (self.piperead)
|
||||
|
@ -470,6 +470,7 @@ gnucash/report/standard-reports/daily-reports.scm
|
||||
gnucash/report/standard-reports/equity-statement.scm
|
||||
gnucash/report/standard-reports/general-journal.scm
|
||||
gnucash/report/standard-reports/general-ledger.scm
|
||||
gnucash/report/standard-reports/income-gst-statement.scm
|
||||
gnucash/report/standard-reports/income-statement.scm
|
||||
gnucash/report/standard-reports/net-barchart.scm
|
||||
gnucash/report/standard-reports/net-linechart.scm
|
||||
|
Loading…
Reference in New Issue
Block a user