21
from bzrlib.config import config_dir
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")
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")
41
32
class GAnnotateConfig(configobj.ConfigObj):
49
40
def __init__(self, window):
50
configobj.ConfigObj.__init__(self, gannotate_config_filename,
51
configspec=gannotate_configspec)
41
super(GAnnotateConfig, self).__init__(gannotate_config_filename())
52
42
self.window = window
53
43
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'] = []
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'
67
57
self._connect_signals()
70
60
"""Apply properties and such from gannotate.conf, or
71
61
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"])
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'))
77
if self["window"]["maximized"]:
68
if self['window'].as_bool('maximized'):
78
69
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
71
def _connect_signals(self):
92
72
self.window.connect("destroy", self._write)
93
73
self.window.connect("configure-event", self._save_window_props)
94
74
self.window.connect("window-state-event", self._save_window_props)
95
self.pane.connect("notify", self._save_pane_props)
96
self.span_selector.connect("custom-span-added",
97
self._save_custom_spans)
99
76
def _save_window_props(self, w, e, *args):
100
if e.window.get_state() & gtk.gdk.WINDOW_STATE_MAXIMIZED:
77
if e.window.get_state() & Gdk.WindowState.MAXIMIZED:
103
80
self["window"]["width"], self["window"]["height"] = w.get_size()
104
81
self["window"]["x"], self["window"]["y"] = w.get_position()
107
83
self["window"]["maximized"] = maximized
111
def _save_pane_props(self, w, gparam):
112
if gparam.name == "position":
113
self["window"]["pane_position"] = w.get_position()
117
def _save_custom_spans(self, w, *args):
118
self["spans"]["custom_spans"] = w.custom_spans
86
def _save_pane_props(self):
87
self["window"]["pane_position"] = self.pane.get_position()
122
89
def _write(self, *args):
90
self._save_pane_props()
91
config.ensure_config_dir_exists()