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
|
import _sw_app_utils
|
||||||
from gnucash import *
|
from gnucash import *
|
||||||
from _sw_core_utils import gnc_prefs_is_extra_enabled
|
from _sw_core_utils import gnc_prefs_is_extra_enabled
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
import os
|
import os
|
||||||
sys.path.append(os.path.dirname(__file__))
|
sys.path.append(os.path.dirname(__file__))
|
||||||
noisy = gnc_prefs_is_extra_enabled()
|
noisy = gnc_prefs_is_extra_enabled()
|
||||||
@ -44,7 +44,7 @@ class Console (cons.Console):
|
|||||||
filename=None, size=100):
|
filename=None, size=100):
|
||||||
cons.Console.__init__(self, argv, shelltype, banner, filename, size)
|
cons.Console.__init__(self, argv, shelltype, banner, filename, size)
|
||||||
self.buffer.create_tag('center',
|
self.buffer.create_tag('center',
|
||||||
justification=gtk.JUSTIFY_CENTER,
|
justification=Gtk.Justification.CENTER,
|
||||||
font='Mono 4')
|
font='Mono 4')
|
||||||
self.figures = []
|
self.figures = []
|
||||||
self.callbacks = []
|
self.callbacks = []
|
||||||
@ -86,14 +86,14 @@ class Console (cons.Console):
|
|||||||
if False:
|
if False:
|
||||||
console = Console(argv = [], shelltype = 'python', banner = [['woop', 'title']], size = 100)
|
console = Console(argv = [], shelltype = 'python', banner = [['woop', 'title']], size = 100)
|
||||||
|
|
||||||
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
window = Gtk.Window(Gtk.WindowType.TOPLEVEL)
|
||||||
window.set_position(gtk.WIN_POS_CENTER)
|
window.set_position(Gtk.WindowPosition.CENTER)
|
||||||
window.set_default_size(800,600)
|
window.set_default_size(800,600)
|
||||||
window.set_border_width(0)
|
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.
|
# properly. That's kinda bad.
|
||||||
window.connect('destroy-event', gtk.main_quit)
|
window.connect('destroy-event', Gtk.main_quit)
|
||||||
window.connect('delete-event', gtk.main_quit)
|
window.connect('delete-event', Gtk.main_quit)
|
||||||
window.add (console)
|
window.add (console)
|
||||||
window.show_all()
|
window.show_all()
|
||||||
console.grab_focus()
|
console.grab_focus()
|
||||||
|
@ -31,9 +31,9 @@ import sys
|
|||||||
import re
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
import readline
|
import readline
|
||||||
import gobject
|
from gi.repository import GObject
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
import pango
|
from gi.repository import Pango
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
import shell
|
import shell
|
||||||
try: import ishell
|
try: import ishell
|
||||||
@ -105,8 +105,8 @@ class ConsoleIn:
|
|||||||
iter = buffer.get_iter_at_mark(buffer.get_insert())
|
iter = buffer.get_iter_at_mark(buffer.get_insert())
|
||||||
buffer.move_mark (buffer.get_mark('linestart'), iter)
|
buffer.move_mark (buffer.get_mark('linestart'), iter)
|
||||||
while self.console.input_mode:
|
while self.console.input_mode:
|
||||||
#while gtk.events_pending():
|
#while Gtk.events_pending():
|
||||||
gtk.main_iteration()
|
Gtk.main_iteration()
|
||||||
s = self.console.input
|
s = self.console.input
|
||||||
self.console.input = ''
|
self.console.input = ''
|
||||||
return s+'\n'
|
return s+'\n'
|
||||||
@ -119,7 +119,7 @@ class ConsoleIn:
|
|||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------- class Console
|
# ---------------------------------------------------------------- class Console
|
||||||
class Console (gtk.ScrolledWindow):
|
class Console (Gtk.ScrolledWindow):
|
||||||
""" GTK python console """
|
""" GTK python console """
|
||||||
|
|
||||||
def __init__(self, argv=[], shelltype='python', banner=[],
|
def __init__(self, argv=[], shelltype='python', banner=[],
|
||||||
@ -129,12 +129,12 @@ class Console (gtk.ScrolledWindow):
|
|||||||
|
|
||||||
# GTK interface
|
# GTK interface
|
||||||
self.do_quit = False
|
self.do_quit = False
|
||||||
gtk.ScrolledWindow.__init__(self)
|
GObject.GObject.__init__(self)
|
||||||
self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
|
self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||||
self.set_shadow_type (gtk.SHADOW_NONE)
|
self.set_shadow_type (Gtk.ShadowType.NONE)
|
||||||
self.set_border_width(0)
|
self.set_border_width(0)
|
||||||
self.view = gtk.TextView()
|
self.view = Gtk.TextView()
|
||||||
self.view.modify_font (pango.FontDescription("Mono 10"))
|
self.view.modify_font (Pango.FontDescription("Mono 10"))
|
||||||
self.view.set_editable (True)
|
self.view.set_editable (True)
|
||||||
self.view.set_wrap_mode(True)
|
self.view.set_wrap_mode(True)
|
||||||
self.view.set_left_margin(0)
|
self.view.set_left_margin(0)
|
||||||
@ -142,7 +142,7 @@ class Console (gtk.ScrolledWindow):
|
|||||||
self.buffer = self.view.get_buffer()
|
self.buffer = self.view.get_buffer()
|
||||||
self.buffer.create_tag ('title',
|
self.buffer.create_tag ('title',
|
||||||
indent = 2,
|
indent = 2,
|
||||||
weight=pango.WEIGHT_BOLD,
|
weight=Pango.Weight.BOLD,
|
||||||
foreground='blue',
|
foreground='blue',
|
||||||
font='Mono 12')
|
font='Mono 12')
|
||||||
self.buffer.create_tag ('subtitle',
|
self.buffer.create_tag ('subtitle',
|
||||||
@ -154,11 +154,11 @@ class Console (gtk.ScrolledWindow):
|
|||||||
font='Mono 10')
|
font='Mono 10')
|
||||||
self.buffer.create_tag ('error',
|
self.buffer.create_tag ('error',
|
||||||
foreground='red',
|
foreground='red',
|
||||||
style=pango.STYLE_OBLIQUE,
|
style=Pango.Style.OBLIQUE,
|
||||||
font='Mono 10')
|
font='Mono 10')
|
||||||
self.buffer.create_tag ('prompt',
|
self.buffer.create_tag ('prompt',
|
||||||
foreground='blue',
|
foreground='blue',
|
||||||
weight=pango.WEIGHT_BOLD,
|
weight=Pango.Weight.BOLD,
|
||||||
font='Mono 10')
|
font='Mono 10')
|
||||||
self.buffer.create_tag('0')
|
self.buffer.create_tag('0')
|
||||||
self.color_pat = re.compile('\x01?\x1b\[(.*?)m\x02?')
|
self.color_pat = re.compile('\x01?\x1b\[(.*?)m\x02?')
|
||||||
@ -170,7 +170,7 @@ class Console (gtk.ScrolledWindow):
|
|||||||
self.write (text, style)
|
self.write (text, style)
|
||||||
iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
|
iter = self.buffer.get_iter_at_mark(self.buffer.get_insert())
|
||||||
self.buffer.create_mark ('linestart', iter, True)
|
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.view.connect ('key-press-event', self.key_press_event)
|
||||||
self.add(self.view)
|
self.add(self.view)
|
||||||
self.show_all()
|
self.show_all()
|
||||||
@ -294,13 +294,13 @@ class Console (gtk.ScrolledWindow):
|
|||||||
self.buffer.move_mark (self.buffer.get_mark('linestart'), iter)
|
self.buffer.move_mark (self.buffer.get_mark('linestart'), iter)
|
||||||
self.history_reset()
|
self.history_reset()
|
||||||
self.view.scroll_mark_onscreen(self.buffer.get_insert())
|
self.view.scroll_mark_onscreen(self.buffer.get_insert())
|
||||||
while gtk.events_pending():
|
while Gtk.events_pending():
|
||||||
gtk.main_iteration()
|
Gtk.main_iteration()
|
||||||
|
|
||||||
def key_press_event (self, widget, event):
|
def key_press_event (self, widget, event):
|
||||||
""" Handle key press event """
|
""" Handle key press event """
|
||||||
|
|
||||||
keyname = gtk.gdk.keyval_name (event.keyval)
|
keyname = Gdk.keyval_name (event.keyval)
|
||||||
|
|
||||||
# New command
|
# New command
|
||||||
if keyname in ['Return', 'KP_Enter']:
|
if keyname in ['Return', 'KP_Enter']:
|
||||||
@ -358,7 +358,7 @@ class Console (gtk.ScrolledWindow):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
# Controls
|
# Controls
|
||||||
elif event.state & gtk.gdk.CONTROL_MASK:
|
elif event.get_state() & Gdk.ModifierType.CONTROL_MASK:
|
||||||
if keyname in ['a','A']:
|
if keyname in ['a','A']:
|
||||||
mark = self.buffer.get_mark('linestart')
|
mark = self.buffer.get_mark('linestart')
|
||||||
linestart = self.buffer.get_iter_at_mark(mark)
|
linestart = self.buffer.get_iter_at_mark(mark)
|
||||||
@ -413,8 +413,8 @@ class Console (gtk.ScrolledWindow):
|
|||||||
|
|
||||||
self.shell.eval(self)
|
self.shell.eval(self)
|
||||||
self.view.scroll_mark_onscreen(self.buffer.get_insert())
|
self.view.scroll_mark_onscreen(self.buffer.get_insert())
|
||||||
while gtk.events_pending():
|
while Gtk.events_pending():
|
||||||
gtk.main_iteration()
|
Gtk.main_iteration()
|
||||||
|
|
||||||
# Get system output and remove system redirection
|
# Get system output and remove system redirection
|
||||||
os.dup2 (sys_stdout, 1)
|
os.dup2 (sys_stdout, 1)
|
||||||
@ -431,7 +431,7 @@ class Console (gtk.ScrolledWindow):
|
|||||||
def quit(self):
|
def quit(self):
|
||||||
""" Quit console """
|
""" Quit console """
|
||||||
|
|
||||||
gtk.main_quit()
|
Gtk.main_quit()
|
||||||
self.history_save()
|
self.history_save()
|
||||||
try:
|
try:
|
||||||
os.close (self.piperead)
|
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/equity-statement.scm
|
||||||
gnucash/report/standard-reports/general-journal.scm
|
gnucash/report/standard-reports/general-journal.scm
|
||||||
gnucash/report/standard-reports/general-ledger.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/income-statement.scm
|
||||||
gnucash/report/standard-reports/net-barchart.scm
|
gnucash/report/standard-reports/net-barchart.scm
|
||||||
gnucash/report/standard-reports/net-linechart.scm
|
gnucash/report/standard-reports/net-linechart.scm
|
||||||
|
Loading…
Reference in New Issue
Block a user