This repository has been archived by the owner on Oct 3, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrestore_minimap.py
129 lines (104 loc) · 4.55 KB
/
restore_minimap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
from gi.repository import GObject, Gedit, GtkSource, Gtk, Pango, PeasGtk, Gio
import os
BASE_PATH = os.path.dirname(os.path.realpath(__file__))
SCHEMAS_PATH = os.path.join(BASE_PATH, 'schemas')
try:
schema_source = Gio.SettingsSchemaSource.new_from_directory(
SCHEMAS_PATH,
Gio.SettingsSchemaSource.get_default(),
False)
schema = schema_source.lookup(
'org.gnome.gedit.plugins.restore_minimap',
False)
settings = Gio.Settings.new_full(
schema,
None,
'/org/gnome/gedit/plugins/restore_minimap/')
except:
settings = None
class RestoreMinimapPluginPreferences(GObject.Object, Gedit.WindowActivatable, PeasGtk.Configurable):
window = GObject.property(type=Gedit.Window)
def __init__(self):
GObject.Object.__init__(self)
def do_create_configure_widget(self):
if not settings:
return Gtk.Label(label='Error: could not load settings schema')
check = Gtk.CheckButton.new_with_label('Display minimap on the left side')
check2 = Gtk.CheckButton.new_with_label('Show separator')
flag = Gio.SettingsBindFlags.DEFAULT
settings.bind('display-on-left', check, 'active', flag)
settings.bind('show-separator', check2, 'active', flag)
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, border_width=10)
box.pack_start(check, False, True, 0)
box.pack_start(check2, False, True, 0)
return box
class RestoreMinimapPlugin(GObject.Object, Gedit.ViewActivatable):
view = GObject.property(type=Gedit.View)
def __init__(self):
GObject.Object.__init__(self)
def update_display_on_left(self):
display_on_left = False
if settings is not None:
display_on_left = settings.get_boolean('display-on-left')
if display_on_left:
self.tab.set_direction(Gtk.TextDirection.LTR)
else:
self.tab.set_direction(Gtk.TextDirection.RTL)
def on_display_on_left_changed(self, *args):
self.update_display_on_left()
# force the tab to redraw
self.tab.hide()
self.tab.show()
def on_separator_changed(self, *args):
show_separator = True
if settings is not None:
show_separator = settings.get_boolean('show-separator')
if show_separator: self.sep.show()
else: self.sep.hide()
def set_font_desc(self):
if not self.source_map: return
default_font = 'Monospace 1'
try:
editor_schema = 'org.gnome.gedit.preferences.editor'
editor_settings = Gio.Settings.new(editor_schema)
use_default_font = editor_settings.get_boolean('use-default-font')
if use_default_font:
desktop_schema = 'org.gnome.desktop.interface'
desktop_settings = Gio.Settings.new(desktop_schema)
default_font = desktop_settings.get_string('monospace-font-name')
else:
default_font = editor_settings.get_string('editor-font')
except:
pass
desc = Pango.FontDescription(default_font)
desc.set_size(Pango.SCALE) # set size to 1pt
desc.set_family('BuilderBlocks,' + desc.get_family())
self.source_map.set_property('font-desc', desc)
def do_activate(self):
self.tab = self.view.get_parent().get_parent().get_parent()
self.tab.set_orientation(Gtk.Orientation.HORIZONTAL)
# hide vertical scrollbar
self.scrolled = self.view.get_parent()
self.scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.EXTERNAL)
self.source_map = GtkSource.Map()
self.set_font_desc()
self.source_map.set_view(self.view)
self.source_map.show()
self.sep = Gtk.Separator()
self.tab.pack_end(self.sep, False, True, 0)
self.tab.pack_end(self.source_map, False, True, 0)
self.update_display_on_left()
self.on_separator_changed()
if settings is not None:
self.settings_handlers = [
settings.connect('changed::display-on-left', self.on_display_on_left_changed),
settings.connect('changed::show-separator', self.on_separator_changed)
]
def do_deactivate(self):
self.tab.remove(self.source_map)
self.tab.remove(self.sep)
self.tab.set_orientation(Gtk.Orientation.VERTICAL)
self.scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
if settings is not None:
for handler in self.settings_handlers:
settings.disconnect(handler)