[indent=4] /* Author: Sublime Porte * * License: GPL v3 * * Usage: textview * * Description: A very simple text viewer/editor. * * compile with: valac --pkg gtk+-2.0 textview.gs */ uses Gtk Gdk init Gtk.init (ref args) var win = new MainWindow () if args.length != 2 print "\nusage: textview \n" else win.loadFile(args[1]) win.title = "textview - " + args[1] + " (Read)" win.show_all () Gtk.main (); class MainWindow : Gtk.Window editing : bool = false openfile : string init default_height = 600 default_width = 700 window_position = WindowPosition.CENTER destroy += Gtk.main_quit def loadFile (fname : string) openfile = fname var tview = new TextView() tview.editable = false text : string len : int try FileUtils.get_contents (fname, out text, out len) except ex : FileError print "%s\n", ex.message tview.buffer.set_text(text, len) var scroll = new ScrolledWindow(null, null) scroll.add(tview) tview.key_press_event += on_key_press_event add(scroll) def save_file (fname : string, contents : string) try FileUtils.set_contents (fname, contents) except ex : FileError print "%s\n", ex.message def on_key_press_event (tvw : TextView, event : EventKey) : bool key : string = Gdk.keyval_name (event.keyval) if key == "Escape" if tvw.get_editable() title = title.replace("(Write)", "(Read)") tvw.set_editable(false) else title = title.replace("(Read)", "(Write)") tvw.set_editable(true) if key == "w" if not tvw.get_editable() print "Saving file: %s", openfile start, end : Gtk.TextIter tvw.buffer.get_start_iter(out start) tvw.buffer.get_end_iter(out end) save_file(openfile, tvw.buffer.get_text(start, end, false)) return false