1
from gi.repository import Gtk, GtkSource
3
class Document(Gtk.ScrolledWindow):
4
def __init__(self, window, filename):
5
Gtk.ScrolledWindow.__init__(self)
7
self.filename = filename
8
self.box = box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
9
self.textview = textview = GtkSource.View()
10
box.pack_start(textview, True, True, 0)
11
self.add_with_viewport(box)
12
self.buffer = buffer = GtkSource.Buffer()
13
textview.set_buffer(buffer)
14
buffer.set_highlight_syntax(True)
16
textview.set_tab_width(window.SETTINGS.get_int('tab-width'))
17
textview.set_highlight_current_line(window.SETTINGS.get_boolean('highlight-current-line'))
18
textview.set_show_line_numbers(window.SETTINGS.get_boolean('show-line-numbers'))
19
textview.set_auto_indent(window.SETTINGS.get_boolean('auto-indent'))
20
textview.set_show_right_margin(window.SETTINGS.get_boolean('show-right-margin'))
21
textview.set_right_margin_position(window.SETTINGS.get_int('right-margin-position'))
23
textview.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
24
self.lm = language_manager = GtkSource.LanguageManager()
27
content = self.get_file_content(filename)
30
buffer.set_text(content)
31
self.buffer.connect('modified-changed', self._on_changed_buffer)
32
self.buffer.set_modified(False)
34
def set_filename(self, filename):
35
self.filename = filename
37
def get_file_content(self, filename):
38
f = open(filename, 'r')
43
def request_save(self):
44
if self.filename != None:
45
f = open(self.filename, 'w')
46
content = self.buffer.get_text(self.buffer.get_start_iter(), self.buffer.get_end_iter(), -1)
53
def detect_lang(self):
54
lang = self.lm.guess_language(self.filename, None)
55
self.buffer.set_language(lang)
63
def _on_changed_buffer(self, data):
64
m = self.buffer.get_modified()
66
self.window.toolbar.save.show()
68
self.window.toolbar.save.hide()