doc: Use $(SED) where appropriate
[git-cola.git] / cola / settings.py
blob7f7da1c5a617867565dfe315c7189ad52980bbc3
1 # Copyright (c) 2008 David Aguilar
2 """This handles saving complex settings such as bookmarks, etc.
3 """
5 import os
6 import user
8 from cola import serializer
9 from cola.models import observable
11 # Here we store settings
12 _rcfile = os.path.join(user.home, '.cola')
15 class SettingsModel(observable.ObservableModel):
16 def __init__(self):
17 """Load existing settings if they exist"""
18 observable.ObservableModel.__init__(self)
19 self.bookmarks = []
20 self.gui_state = {}
22 def add_bookmark(self, bookmark):
23 """Adds a bookmark to the saved settings"""
24 if bookmark not in self.bookmarks:
25 self.bookmarks.append(bookmark)
27 def remove_bookmark(self, bookmark):
28 """Removes a bookmark from the saved settings"""
29 if bookmark in self.bookmarks:
30 self.bookmarks.remove(bookmark)
33 class SettingsManager(object):
34 """Manages a SettingsModel singleton
35 """
36 _settings = None
38 @staticmethod
39 def settings():
40 """Returns the SettingsModel singleton"""
41 if not SettingsManager._settings:
42 if os.path.exists(_rcfile):
43 SettingsManager._settings = serializer.load(_rcfile)
44 else:
45 SettingsManager._settings = SettingsModel()
46 return SettingsManager._settings
48 @staticmethod
49 def save_gui_state(gui):
50 """Saves settings for a cola view"""
51 name = gui.name()
52 state = gui.export_state()
53 model = SettingsManager.settings()
54 model.gui_state[name] = state
55 SettingsManager.save()
57 @staticmethod
58 def gui_state(gui):
59 """Returns the state for a gui"""
60 return SettingsManager.settings().gui_state.get(gui.name(), {})
62 @staticmethod
63 def save():
64 model = SettingsManager.settings()
65 serializer.save(model, _rcfile)