Remove VTE use textview for terminal

This commit is contained in:
iabdalkader 2014-10-31 20:45:42 +02:00
parent f1fdf2e5ca
commit 97bf3d90fe
2 changed files with 33 additions and 29 deletions

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<interface> <interface>
<!-- interface-requires gtk+ 3.0 --> <!-- interface-requires gtk+ 3.0 -->
<!-- interface-requires vte 0.0 -->
<!-- interface-naming-policy toplevel-contextual --> <!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAdjustment" id="brightness_adjust"> <object class="GtkAdjustment" id="brightness_adjust">
<property name="lower">-2</property> <property name="lower">-2</property>
@ -1157,15 +1156,13 @@
<object class="GtkScrolledWindow" id="vte_scrolledwindow"> <object class="GtkScrolledWindow" id="vte_scrolledwindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<signal name="size-allocate" handler="on_vte_size_allocate" swapped="no"/>
<child> <child>
<object class="VteTerminal" id="terminal"> <object class="GtkTextView" id="vte_textview">
<property name="visible">True</property> <property name="visible">True</property>
<property name="app_paintable">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="background_tint_color">#ffff0fa0ffff</property> <property name="editable">False</property>
<property name="encoding">UTF-8</property> <property name="wrap_mode">word</property>
<property name="scroll_on_keystroke">True</property>
<property name="scroll_on_output">False</property>
</object> </object>
</child> </child>
</object> </object>

View File

@ -2,8 +2,8 @@
import pydfu import pydfu
import openmv import openmv
import gtk import gtk
import vte
import gobject import gobject
import pango
import serial import serial
import usb.core import usb.core
import usb.util import usb.util
@ -79,12 +79,17 @@ class OMVGtk:
# Configure source viewer # Configure source viewer
self.buffer = CodeBuffer(lang=SyntaxLoader("python")) self.buffer = CodeBuffer(lang=SyntaxLoader("python"))
self.buffer.connect("changed", self.text_changed) self.buffer.connect("changed", self.text_changed)
self.builder.get_object("src_scrolledwindow").add(gtk.TextView(self.buffer)) tabs = pango.TabArray(1, True)
tabs.set_tab(0, pango.TAB_LEFT, 8*4) #seems right
txtview = gtk.TextView(self.buffer)
txtview.set_tabs(tabs)
self.builder.get_object("src_scrolledwindow").add(txtview)
#configure the terminal # Configure terminal window
self.fd = -1 self.terminal_scroll = self.builder.get_object('vte_scrolledwindow')
self.terminal = self.builder.get_object('terminal') self.terminal = self.builder.get_object('vte_textview')
self.terminal.set_size(80,24) self.terminal.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse('black'))
self.terminal.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse('green'))
# get drawingarea # get drawingarea
self.pixbuf = None self.pixbuf = None
@ -125,6 +130,7 @@ class OMVGtk:
"on_zoomout_clicked" : self.zoomout_clicked, "on_zoomout_clicked" : self.zoomout_clicked,
"on_bestfit_clicked" : self.bestfit_clicked, "on_bestfit_clicked" : self.bestfit_clicked,
"on_updatefb_clicked" : self.updatefb_clicked, "on_updatefb_clicked" : self.updatefb_clicked,
"on_vte_size_allocate" : self.scroll_terminal,
} }
self.builder.connect_signals(signals) self.builder.connect_signals(signals)
@ -186,13 +192,10 @@ class OMVGtk:
sleep(wait) sleep(wait)
def connect(self): def connect(self):
self.terminal = self.builder.get_object('terminal')
try: try:
# open VCP and configure the terminal # open VCP and configure the terminal
self.fd = os.open(self.config.get("main", "serial_port"), os.O_RDWR) self.serial = serial.Serial(self.config.get("main", "serial_port"), 115200, timeout=0.001)
self.terminal.reset(True, True) gobject.gobject.idle_add(omvgtk.update_terminal)
self.terminal.set_size(80,24)
self.terminal.set_pty(self.fd)
except Exception as e: except Exception as e:
self.show_message_dialog(gtk.MESSAGE_ERROR, "Failed to connect to OpenMV\n%s"%e) self.show_message_dialog(gtk.MESSAGE_ERROR, "Failed to connect to OpenMV\n%s"%e)
return return
@ -214,15 +217,9 @@ class OMVGtk:
map(lambda x:x.set_sensitive(True), self.controls) map(lambda x:x.set_sensitive(True), self.controls)
def disconnect(self): def disconnect(self):
try:
# close VCP
os.close(self.fd)
except OSError:
pass
#reset terminal #reset terminal
self.terminal.set_pty(-1) #self.terminal.set_pty(-1)
self.terminal.reset(True, True) #self.terminal.reset(True, True)
try: try:
# stop running code # stop running code
@ -336,7 +333,7 @@ class OMVGtk:
# call dfu-util # call dfu-util
openmv.enter_dfu() openmv.enter_dfu()
sleep(1.0) sleep(1.0)
gobject.gobject.idle_add(self.fwupdate_task, state); gobject.gobject.idle_add(self.fwupdate_task, state)
else: else:
dialog.hide() dialog.hide()
@ -396,6 +393,16 @@ class OMVGtk:
self.statusbar.pop(self.statusbar_ctx) self.statusbar.pop(self.statusbar_ctx)
self.statusbar.push(self.statusbar_ctx, rgb) self.statusbar.push(self.statusbar_ctx, rgb)
def scroll_terminal(self, widget, event):
adj = self.terminal_scroll.get_vadjustment()
adj.set_value(adj.upper - adj.page_size)
def update_terminal(self):
if (self.serial.readable()):
buffer = self.terminal.get_buffer()
buffer.insert(buffer.get_end_iter(), self.serial.readline())
return True
def update_drawing(self): def update_drawing(self):
if (not self.connected): if (not self.connected):
return True return True
@ -410,7 +417,7 @@ class OMVGtk:
return True return True
if fb: if fb:
# create pixbuf from np array # create pixbuf from RGB888
self.pixbuf =gtk.gdk.pixbuf_new_from_data(fb[2], gtk.gdk.COLORSPACE_RGB, False, 8, fb[0], fb[1], fb[0]*3) self.pixbuf =gtk.gdk.pixbuf_new_from_data(fb[2], gtk.gdk.COLORSPACE_RGB, False, 8, fb[0], fb[1], fb[0]*3)
self.pixbuf = self.pixbuf.scale_simple(fb[0]*SCALE, fb[1]*SCALE, gtk.gdk.INTERP_BILINEAR) self.pixbuf = self.pixbuf.scale_simple(fb[0]*SCALE, fb[1]*SCALE, gtk.gdk.INTERP_BILINEAR)
@ -583,5 +590,5 @@ class OMVGtk:
if __name__ == "__main__": if __name__ == "__main__":
omvgtk = OMVGtk() omvgtk = OMVGtk()
omvgtk.window.show_all() omvgtk.window.show_all()
gobject.gobject.idle_add(omvgtk.update_drawing); gobject.gobject.idle_add(omvgtk.update_drawing)
gtk.main() gtk.main()