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
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")
32
41
class GAnnotateConfig(configobj.ConfigObj):
40
49
def __init__(self, window):
41
super(GAnnotateConfig, self).__init__(gannotate_config_filename())
50
configobj.ConfigObj.__init__(self, gannotate_config_filename,
51
configspec=gannotate_configspec)
42
52
self.window = window
43
53
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.initial_comment = ["gannotate plugin configuration"]
56
self['window']['width'] = 750
57
self['window']['height'] = 550
58
self['window']['maximized'] = False
59
self['window']['x'] = 0
60
self['window']['y'] = 0
61
self['window']['pane_position'] = 325
62
self['spans']['max_custom_spans'] = 4
63
self['spans']['custom_spans'] = []
57
66
self._connect_signals()
60
69
"""Apply properties and such from gannotate.conf, or
61
70
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'))
71
self.pane.set_position(self["window"]["pane_position"])
72
self.window.set_default_size(self["window"]["width"],
73
self["window"]["height"])
74
self.window.move(self["window"]["x"], self["window"]["y"])
68
if self['window'].as_bool('maximized'):
76
if self["window"]["maximized"]:
69
77
self.window.maximize()
79
# XXX Don't know how to set an empty list as default in
80
# gannotate_configspec.
71
81
def _connect_signals(self):
72
82
self.window.connect("destroy", self._write)
73
83
self.window.connect("configure-event", self._save_window_props)
74
84
self.window.connect("window-state-event", self._save_window_props)
85
self.pane.connect("notify", self._save_pane_props)
76
87
def _save_window_props(self, w, e, *args):
77
if e.window.get_state() & Gdk.WindowState.MAXIMIZED:
88
if e.window.get_state() & gtk.gdk.WINDOW_STATE_MAXIMIZED:
80
91
self["window"]["width"], self["window"]["height"] = w.get_size()
81
92
self["window"]["x"], self["window"]["y"] = w.get_position()
83
95
self["window"]["maximized"] = maximized
86
def _save_pane_props(self):
87
self["window"]["pane_position"] = self.pane.get_position()
99
def _save_pane_props(self, w, gparam):
100
if gparam.name == "position":
101
self["window"]["pane_position"] = w.get_position()
105
def _save_custom_spans(self, w, *args):
106
self["spans"]["custom_spans"] = w.custom_spans
89
110
def _write(self, *args):
90
self._save_pane_props()
91
config.ensure_config_dir_exists()