diff options
| author | Teddy Wing | 2015-12-24 18:26:03 -0800 |
|---|---|---|
| committer | Teddy Wing | 2015-12-24 18:26:03 -0800 |
| commit | 8778928a0989ea938fb06f0dd4c6639a6f9148ca (patch) | |
| tree | c74529b901ff2dcb9883f293218b81ee8bbcfd58 | |
| parent | 78cb02c8b70c037eda31e5a40b33da71067c8435 (diff) | |
| download | RoboFont-Equalize-Sidebearings-Key-8778928a0989ea938fb06f0dd4c6639a6f9148ca.tar.bz2 | |
Make hotkey preference work
Separate preference handling into a new class and have the previous
preferences class handle only the preferences window.
We rename the old file to `preferences_window.py` and adjust the
`info.plist` key for the menu item accordingly.
Our new `Preference` class can now be imported from both
`equalize_sidebearings.py` and `preferences_window.py` without causing
confusion. I extracted it because asking for the
`DEFAULT_ACTIVATION_KEY` from `preferences_window.py` from
`equalize_sidebearings.py` would open the preferences window (bad).
We now save the preferred key using RoboFont's extension preferences
API.
When the text input in the preferences window is modified, the new key
preference gets saved.
BUG:
There's an issue with this implementation where the preferred key
doesn't become active until the next launch of RoboFont because
`EqualizeSidebearings` has its own instance of `Preferences` which has a
stale `activation_key`.
| -rw-r--r-- | equalize_sidebearings.py | 6 | ||||
| -rw-r--r-- | info.plist | 2 | ||||
| -rw-r--r-- | preferences.py | 33 | ||||
| -rw-r--r-- | preferences_window.py | 26 |
4 files changed, 57 insertions, 10 deletions
diff --git a/equalize_sidebearings.py b/equalize_sidebearings.py index 18515ad..5660330 100644 --- a/equalize_sidebearings.py +++ b/equalize_sidebearings.py @@ -1,6 +1,8 @@ from mojo.events import addObserver from lib.doodleMenus import SpaceCenterMenuForGlyph +from preferences import Preferences + class CustomSpaceCenterMenuForGlyph(SpaceCenterMenuForGlyph): @@ -10,13 +12,13 @@ class CustomSpaceCenterMenuForGlyph(SpaceCenterMenuForGlyph): class EqualizeSidebearings(object): - DEFAULT_ACTIVATION_KEY = 'e' def __init__(self): addObserver(self, 'equalize', 'spaceCenterKeyUp') + self.preferences = Preferences() def equalize(self, info): - if info['event'].characters() == self.DEFAULT_ACTIVATION_KEY: + if info['event'].characters() == self.preferences.activation_key: space_center_menu = CustomSpaceCenterMenuForGlyph( info['glyph'].naked()) space_center_menu.equalSideBearings_(self) @@ -6,7 +6,7 @@ <array> <dict> <key>path</key> - <string>preferences.py</string> + <string>preferences_window.py</string> <key>preferredName</key> <string>Preferences</string> <key>shortKey</key> diff --git a/preferences.py b/preferences.py index 7f6434c..637ad64 100644 --- a/preferences.py +++ b/preferences.py @@ -1,12 +1,31 @@ -import vanilla +from mojo.extensions import getExtensionDefault, setExtensionDefault +# from lib.doodlePreferences import HotKeyItem -class EqualizeSidebearingsPreferences(object): + +class Preferences(object): + DEFAULT_ACTIVATION_KEY = 'e' + PREFERENCES_DOMAIN = 'com.teddywing.EqualizeSidebearings' def __init__(self): - self.w = vanilla.Window((150, 50), 'Equalize Sidebearings') - self.w.activation_key_label = vanilla.TextBox((10, 15, -10, 22), 'Short Key:') - self.w.activation_key = vanilla.EditText((82, 12, -10, 25), 'e') - self.w.open() + self.load() + + def preference_key(self, key): + return '{0}.{1}'.format(self.PREFERENCES_DOMAIN, key) + + def load(self): + self._activation_key = getExtensionDefault( + self.preference_key('activation_key'), + self.DEFAULT_ACTIVATION_KEY) + + def save(self): + setExtensionDefault( + self.preference_key('activation_key'), + self.activation_key) + @property + def activation_key(self): + return self._activation_key -EqualizeSidebearingsPreferences() + @activation_key.setter + def activation_key(self, value): + self._activation_key = value diff --git a/preferences_window.py b/preferences_window.py new file mode 100644 index 0000000..11d3b52 --- /dev/null +++ b/preferences_window.py @@ -0,0 +1,26 @@ +import vanilla + +from preferences import Preferences + + +class PreferencesWindow(object): + + def __init__(self): + self.preferences = Preferences() + + self.w = vanilla.Window((150, 50), 'Equalize Sidebearings') + self.w.activation_key_label = vanilla.TextBox( + (10, 15, -10, 22), + 'Short Key:') + self.w.activation_key = vanilla.EditText( + posSize=(82, 12, -10, 25), + text=self.preferences.activation_key, + callback=self.edit_text_callback) + self.w.open() + + def edit_text_callback(self, sender): + self.preferences.activation_key = sender.get() + self.preferences.save() + + +PreferencesWindow() |
