1
from gi.repository import Gtk, Gio
3
class SettingsManager(Gtk.Dialog):
4
def __init__(self, handler):
5
super(SettingsManager, self).__init__()
7
self.SETTINGS = Gio.Settings.new('apps.tahrir')
8
self.set_title('Tahrir - Settings Manager')
9
#self.SETTINGS.connect('changed::show-line-numbers', self.ChangeSLN)
10
#self.SETTINGS.connect('changed::highlight-current-line', self.ChangeHCL)
11
self.set_default_size(400,250)
12
content_area = self.get_content_area()
13
notebook = Gtk.Notebook()
14
label1, child1 = self.SetViewPage()
15
label2, child2 = self.SetEditorPage()
16
label3, child3 = self.SetFontPage()
17
notebook.append_page(child1, label1)
18
notebook.append_page(child2, label2)
19
notebook.append_page(child3, label3)
21
content_area.pack_start(notebook, True, True, 5)
24
def SetViewPage(self):
25
label = Gtk.Label('View')
28
sln = Gtk.CheckButton('Show Line Numbers')
29
sln.set_active(self.SETTINGS.get_boolean('show-line-numbers'))
30
sln.connect('clicked', self.OnClickSLN)
31
child.attach(sln, 0, 0, 1, 1)
32
#Highlight Current Line
33
hcl = Gtk.CheckButton('Highlight Current Line')
34
hcl.set_active(self.SETTINGS.get_boolean('highlight-current-line'))
35
hcl.connect('clicked', self.OnClickHCL)
36
child.attach(hcl, 0, 1, 1, 1)
38
ai = Gtk.CheckButton('Enable Auto Indentation')
39
ai.set_active(self.SETTINGS.get_boolean('auto-indent'))
40
child.attach(ai, 0, 2, 1, 1)
41
#ai.connect('clicked', self.OnClickAI)
43
rm = Gtk.CheckButton('Display right margin at column: ')
44
rm.set_active(self.SETTINGS.get_boolean('show-right-margin'))
45
rm_spin = Gtk.SpinButton()
46
rm_value = self.SETTINGS.get_int('right-margin-position')
47
rm_spin.set_increments(1, 50)
48
rm_spin.set_range(1, 1000)
49
rm_spin.set_value(rm_value)
50
child.attach(rm , 0, 3, 1, 1)
51
child.attach(rm_spin, 1, 3, 1, 1)
52
rm.connect('clicked', self.OnClickRM)
53
rm_spin.connect('value-changed', self.OnChangeRM)
56
def SetEditorPage(self):
57
label = Gtk.Label('Editor')
60
tw_label = Gtk.Label('Tab Width')
61
tw_label.set_justify(Gtk.Justification.LEFT)
62
tw_entry = Gtk.SpinButton()
63
tw_entry.set_range(1,24)
64
tw_entry.set_increments(1,3)
65
tw_value = self.SETTINGS.get_int('tab-width')
66
tw_entry.set_value(tw_value)
67
tw_entry.connect('value-changed', self.OnChangeTabWidth)
68
grid.attach(tw_label, 0, 2, 1, 1)
69
grid.attach(tw_entry, 1, 2, 1, 1)
71
backup = Gtk.CheckButton('Create a backup of files before saving.')
72
auto_save = Gtk.CheckButton('Autosave files every ')
73
time_spin = Gtk.SpinButton()
74
time_spin.set_range(1, 100)
75
time_spin.set_increments(1, 5)
76
time_spin.set_value(10)
77
minutes_label = Gtk.Label(' minutes.')
78
grid.attach(backup, 0, 3, 3, 1)
79
grid.attach(auto_save, 0, 4, 2, 1)
80
grid.attach(time_spin, 2, 4, 1, 1)
81
grid.attach(minutes_label, 3, 4, 1, 1)
84
def SetFontPage(self):
85
label = Gtk.Label('Font')
87
#grid.set_row_spacing(10)
88
grid.set_column_spacing(30)
89
#grid.set_column_homogeneous(True)
90
font_label = Gtk.Label('Editor Font:')
91
font_label.set_justify(Gtk.Justification.LEFT)
92
spacer = Gtk.Label(' ')
93
font_button = Gtk.FontButton()
94
font_button.set_size_request(160, 30)
95
grid.attach(font_label, 0, 0, 1, 1)
96
grid.attach(font_button, 2, 0, 1, 1)
99
def OnClickSLN(self, sln):
100
self.SETTINGS.set_boolean('show-line-numbers', sln.get_active())
101
if self.handler.notebook.get_n_pages() != 0:
102
for doc in self.handler.notebook.GetOpenedDocuments():
103
doc.set_show_line_numbers(self.SETTINGS.get_boolean('show-line-numbers'))
105
def OnClickHCL(self, hcl):
106
self.SETTINGS.set_boolean('highlight-current-line', hcl.get_active())
107
if self.handler.notebook.get_n_pages() != 0:
108
for doc in self.handler.notebook.GetOpenedDocuments():
109
doc.set_highlight_current_line(self.SETTINGS.get_boolean('highlight-current-line'))
111
def OnChangeTabWidth(self, tw_entry):
112
self.SETTINGS.set_int('tab-width', tw_entry.get_value_as_int())
113
if self.handler.notebook.get_n_pages() != 0:
114
for doc in self.handler.notebook.GetOpenedDocuments():
115
doc.set_tab_width(tw_entry.get_value_as_int())
117
def OnClickAI(self, ai):
118
self.SETTINGS.set_boolean('auto-indent', ai.get_active())
119
if self.handler.notebook.get_n_pages() != 0:
120
for doc in self.handler.notebook.GetOpenedDocuments():
121
doc.set_auto_indent(ai.get_active())
123
def OnClickRM(self, rm):
124
self.SETTINGS.set_boolean('show-right-margin', rm.get_active())
125
if self.handler.notebook.get_n_pages() != 0:
126
for doc in self.handler.notebook.GetOpenedDocuments():
127
doc.set_show_right_margin(rm.get_active())
129
def OnChangeRM(self, rm_spin):
130
self.SETTINGS.set_int('right-margin-position', rm_spin.get_value_as_int())
131
if self.handler.notebook.get_n_pages() != 0:
132
for doc in self.handler.notebook.GetOpenedDocuments():
133
doc.set_right_margin_position(rm_spin.get_value_as_int())