/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to annotate/config.py

  • Committer: Jelmer Vernooij
  • Date: 2006-05-19 16:56:46 UTC
  • mfrom: (0.1.25 gannotate)
  • Revision ID: jelmer@samba.org-20060519165646-0d867938fdbc9097
Merge in Dan Loda's gannotate plugin and put it in annotate/

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import os
18
18
 
19
 
from gi.repository import Gdk
20
 
 
21
 
from bzrlib import config
22
 
try:
23
 
    import bzrlib.util.configobj.configobj as configobj
24
 
except ImportError:
25
 
    import configobj
26
 
 
27
 
 
28
 
def gannotate_config_filename():
29
 
    return os.path.join(config.config_dir(), "gannotate.conf")
 
19
import gtk.gdk
 
20
 
 
21
from bzrlib.config import config_dir
 
22
import bzrlib.util.configobj.configobj as configobj
 
23
from bzrlib.util.configobj.validate import Validator
 
24
 
 
25
 
 
26
gannotate_configspec = (
 
27
    "[window]",
 
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)",
 
34
    "[spans]",
 
35
    "max_custom_spans = integer(default=4)",
 
36
    "custom_spans = float_list()"
 
37
)
 
38
 
 
39
gannotate_config_filename = os.path.join(config_dir(), "gannotate.conf")
30
40
 
31
41
 
32
42
class GAnnotateConfig(configobj.ConfigObj):
38
48
    """
39
49
 
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
44
 
 
45
 
        if 'window' not in self:
46
 
            # Set default values, configobj expects strings here
47
 
            self.initial_comment = ["gannotate plugin configuration"]
48
 
            self['window'] = {}
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
 
56
        
 
57
        self.initial_comment = ["gannotate plugin configuration"]
 
58
        self.validate(Validator())
55
59
 
56
60
        self.apply()
57
61
        self._connect_signals()
59
63
    def apply(self):
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'))
65
 
        self.window.move(
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"])
67
70
 
68
 
        if self['window'].as_bool('maximized'):
 
71
        if self["window"]["maximized"]:
69
72
            self.window.maximize()
70
73
 
 
74
        self.span_selector.max_custom_spans =\
 
75
                self["spans"]["max_custom_spans"]
 
76
 
 
77
        # XXX Don't know how to set an empty list as default in
 
78
        # gannotate_configspec.
 
79
        try:
 
80
            for span in self["spans"]["custom_spans"]:
 
81
                self.span_selector.add_custom_span(span)
 
82
        except KeyError:
 
83
            pass
 
84
 
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)
75
92
 
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:
78
95
            maximized = True
79
96
        else:
80
97
            self["window"]["width"], self["window"]["height"] = w.get_size()
81
98
            self["window"]["x"], self["window"]["y"] = w.get_position()
82
99
            maximized = False
 
100
 
83
101
        self["window"]["maximized"] = maximized
84
 
        return False
85
 
 
86
 
    def _save_pane_props(self):
87
 
        self["window"]["pane_position"] = self.pane.get_position()
 
102
        
 
103
        return False
 
104
 
 
105
    def _save_pane_props(self, w, gparam):
 
106
        if gparam.name == "position":
 
107
            self["window"]["pane_position"] = w.get_position()
 
108
 
 
109
        return False
 
110
 
 
111
    def _save_custom_spans(self, w, *args):
 
112
        self["spans"]["custom_spans"] = w.custom_spans
 
113
 
 
114
        return False
88
115
 
89
116
    def _write(self, *args):
90
 
        self._save_pane_props()
91
 
        config.ensure_config_dir_exists()
92
117
        self.write()
 
118
 
93
119
        return False
 
120