19
from gi.repository import Gdk
21
from bzrlib import config
23
import bzrlib.util.configobj.configobj as configobj
28
def gannotate_config_filename():
29
return os.path.join(config.config_dir(), "gannotate.conf")
21
from bzrlib.config import config_dir
22
import bzrlib.util.configobj.configobj as configobj
23
from bzrlib.util.configobj.validate import Validator
26
gannotate_configspec = (
28
"width = integer(default=750)",
29
"height = integer(default=550)",
30
"maximized = boolean(default=False)",
31
"x = integer(default=0)",
32
"y = integer(default=0)",
33
"pane_position = integer(default=325)",
35
"max_custom_spans = integer(default=4)",
36
"custom_spans = float_list()"
39
gannotate_config_filename = os.path.join(config_dir(), "gannotate.conf")
32
42
class GAnnotateConfig(configobj.ConfigObj):
40
50
def __init__(self, window):
41
super(GAnnotateConfig, self).__init__(gannotate_config_filename())
51
configobj.ConfigObj.__init__(self, gannotate_config_filename,
52
configspec=gannotate_configspec)
42
53
self.window = window
43
54
self.pane = window.pane
45
if 'window' not in self:
46
# Set default values, configobj expects strings here
47
self.initial_comment = ["gannotate plugin configuration"]
49
self['window']['width'] = '750'
50
self['window']['height'] = '550'
51
self['window']['maximized'] = 'False'
52
self['window']['x'] = '0'
53
self['window']['y'] = '0'
54
self['window']['pane_position'] = '325'
55
self.span_selector = window.span_selector
57
self.initial_comment = ["gannotate plugin configuration"]
58
self.validate(Validator())
57
61
self._connect_signals()
60
64
"""Apply properties and such from gannotate.conf, or
61
65
gannotate_configspec defaults."""
62
self.pane.set_position(self['window'].as_int('pane_position'))
63
self.window.set_default_size(self['window'].as_int('width'),
64
self['window'].as_int('height'))
66
self['window'].as_int('x'), self['window'].as_int('y'))
66
self.pane.set_position(self["window"]["pane_position"])
67
self.window.set_default_size(self["window"]["width"],
68
self["window"]["height"])
69
self.window.move(self["window"]["x"], self["window"]["y"])
68
if self['window'].as_bool('maximized'):
71
if self["window"]["maximized"]:
69
72
self.window.maximize()
74
self.span_selector.max_custom_spans =\
75
self["spans"]["max_custom_spans"]
77
# XXX Don't know how to set an empty list as default in
78
# gannotate_configspec.
80
for span in self["spans"]["custom_spans"]:
81
self.span_selector.add_custom_span(span)
71
85
def _connect_signals(self):
72
86
self.window.connect("destroy", self._write)
73
87
self.window.connect("configure-event", self._save_window_props)
74
88
self.window.connect("window-state-event", self._save_window_props)
89
self.pane.connect("notify", self._save_pane_props)
90
self.span_selector.connect("custom-span-added",
91
self._save_custom_spans)
76
93
def _save_window_props(self, w, e, *args):
77
if e.window.get_state() & Gdk.WindowState.MAXIMIZED:
94
if e.window.get_state() & gtk.gdk.WINDOW_STATE_MAXIMIZED:
80
97
self["window"]["width"], self["window"]["height"] = w.get_size()
81
98
self["window"]["x"], self["window"]["y"] = w.get_position()
83
101
self["window"]["maximized"] = maximized
86
def _save_pane_props(self):
87
self["window"]["pane_position"] = self.pane.get_position()
105
def _save_pane_props(self, w, gparam):
106
if gparam.name == "position":
107
self["window"]["pane_position"] = w.get_position()
111
def _save_custom_spans(self, w, *args):
112
self["spans"]["custom_spans"] = w.custom_spans
89
116
def _write(self, *args):
90
self._save_pane_props()
91
config.ensure_config_dir_exists()