21
from bzrlib.config import config_dir
21
from bzrlib import config
22
22
import bzrlib.util.configobj.configobj as configobj
25
gannotate_configspec = (
27
"width = integer(default=750)",
28
"height = integer(default=550)",
29
"maximized = boolean(default=False)",
30
"x = integer(default=0)",
31
"y = integer(default=0)",
32
"pane_position = integer(default=325)",
34
"max_custom_spans = integer(default=4)",
35
"custom_spans = float_list()"
38
gannotate_config_filename = os.path.join(config_dir(), "gannotate.conf")
25
def gannotate_config_filename():
26
return os.path.join(config.config_dir(), "gannotate.conf")
41
29
class GAnnotateConfig(configobj.ConfigObj):
49
37
def __init__(self, window):
50
configobj.ConfigObj.__init__(self, gannotate_config_filename,
51
configspec=gannotate_configspec)
38
configobj.ConfigObj.__init__(self, gannotate_config_filename())
52
39
self.window = window
53
40
self.pane = window.pane
54
self.span_selector = window.span_selector
56
self.initial_comment = ["gannotate plugin configuration"]
57
self['window']['width'] = 750
58
self['window']['height'] = 550
59
self['window']['maximized'] = False
60
self['window']['x'] = 0
61
self['window']['y'] = 0
62
self['window']['pane_position'] = 325
63
self['spans']['max_custom_spans'] = 4
64
self['spans']['custom_spans'] = []
42
if 'window' not in self:
43
# Set default values, configobj expects strings here
44
self.initial_comment = ["gannotate plugin configuration"]
46
self['window']['width'] = '750'
47
self['window']['height'] = '550'
48
self['window']['maximized'] = 'False'
49
self['window']['x'] = '0'
50
self['window']['y'] = '0'
51
self['window']['pane_position'] = '325'
67
54
self._connect_signals()
70
57
"""Apply properties and such from gannotate.conf, or
71
58
gannotate_configspec defaults."""
72
self.pane.set_position(self["window"]["pane_position"])
73
self.window.set_default_size(self["window"]["width"],
74
self["window"]["height"])
75
self.window.move(self["window"]["x"], self["window"]["y"])
59
self.pane.set_position(self['window'].as_int('pane_position'))
60
self.window.set_default_size(self['window'].as_int('width'),
61
self['window'].as_int('height'))
62
self.window.move(self['window'].as_int('x'), self['window'].as_int('y'))
77
if self["window"]["maximized"]:
64
if self['window'].as_bool('maximized'):
78
65
self.window.maximize()
80
self.span_selector.max_custom_spans =\
81
self["spans"]["max_custom_spans"]
83
# XXX Don't know how to set an empty list as default in
84
# gannotate_configspec.
86
for span in self["spans"]["custom_spans"]:
87
self.span_selector.add_custom_span(span)
91
67
def _connect_signals(self):
92
68
self.window.connect("destroy", self._write)
93
69
self.window.connect("configure-event", self._save_window_props)
94
70
self.window.connect("window-state-event", self._save_window_props)
95
71
self.pane.connect("notify", self._save_pane_props)
96
self.span_selector.connect("custom-span-added",
97
self._save_custom_spans)
99
73
def _save_window_props(self, w, e, *args):
100
74
if e.window.get_state() & gtk.gdk.WINDOW_STATE_MAXIMIZED:
103
77
self["window"]["width"], self["window"]["height"] = w.get_size()
104
78
self["window"]["x"], self["window"]["y"] = w.get_position()
107
80
self["window"]["maximized"] = maximized
111
83
def _save_pane_props(self, w, gparam):