1from Foundation import * 2from AppKit import * 3from PyObjCTools import NibClassBuilder 4from FileSettings import * 5 6class PreferencesWindowController(NSWindowController): 7 commandline = objc.IBOutlet() 8 debug = objc.IBOutlet() 9 filetype = objc.IBOutlet() 10 honourhashbang = objc.IBOutlet() 11 inspect = objc.IBOutlet() 12 interpreter = objc.IBOutlet() 13 nosite = objc.IBOutlet() 14 optimize = objc.IBOutlet() 15 others = objc.IBOutlet() 16 tabs = objc.IBOutlet() 17 verbose = objc.IBOutlet() 18 with_terminal = objc.IBOutlet() 19 _singleton = None 20 settings = None 21 22 def getPreferencesWindow(cls): 23 if not cls._singleton: 24 cls._singleton = PreferencesWindowController.alloc().init() 25 cls._singleton.showWindow_(cls._singleton) 26 return cls._singleton 27 getPreferencesWindow = classmethod(getPreferencesWindow) 28 29 def init(self): 30 return self.initWithWindowNibName_(u'PreferenceWindow') 31 32 def load_defaults(self): 33 title = self.filetype.titleOfSelectedItem() 34 self.settings = FileSettings.getDefaultsForFileType_(title) 35 36 def updateDisplay(self): 37 if self.settings is None: 38 return 39 dct = self.settings.fileSettingsAsDict() 40 self.interpreter.reloadData() 41 self.interpreter.setStringValue_(dct['interpreter']) 42 self.honourhashbang.setState_(dct['honourhashbang']) 43 self.debug.setState_(dct['debug']) 44 self.verbose.setState_(dct['verbose']) 45 self.inspect.setState_(dct['inspect']) 46 self.optimize.setState_(dct['optimize']) 47 self.nosite.setState_(dct['nosite']) 48 self.tabs.setState_(dct['tabs']) 49 self.others.setStringValue_(dct['others']) 50 self.with_terminal.setState_(dct['with_terminal']) 51 self.commandline.setStringValue_(self.settings.commandLineForScript_(u'<your script here>')) 52 53 def windowDidLoad(self): 54 super(PreferencesWindowController, self).windowDidLoad() 55 try: 56 self.load_defaults() 57 self.updateDisplay() 58 except: 59 import traceback 60 traceback.print_exc() 61 import pdb, sys 62 pdb.post_mortem(sys.exc_info()[2]) 63 64 def updateSettings(self): 65 self.settings.updateFromSource_(self) 66 67 @objc.IBAction 68 def doFiletype_(self, sender): 69 self.load_defaults() 70 self.updateDisplay() 71 72 @objc.IBAction 73 def doReset_(self, sender): 74 self.settings.reset() 75 self.updateDisplay() 76 77 @objc.IBAction 78 def doApply_(self, sender): 79 self.updateSettings() 80 self.updateDisplay() 81 82 def fileSettingsAsDict(self): 83 return dict( 84 interpreter=self.interpreter.stringValue(), 85 honourhashbang=self.honourhashbang.state(), 86 debug=self.debug.state(), 87 verbose=self.verbose.state(), 88 inspect=self.inspect.state(), 89 optimize=self.optimize.state(), 90 nosite=self.nosite.state(), 91 tabs=self.tabs.state(), 92 others=self.others.stringValue(), 93 with_terminal=self.with_terminal.state(), 94 scriptargs=u'', 95 ) 96 97 def controlTextDidChange_(self, aNotification): 98 self.updateSettings() 99 self.updateDisplay() 100 101 def comboBox_indexOfItemWithStringValue_(self, aComboBox, aString): 102 if self.settings is None: 103 return -1 104 dct = self.settings.fileSettingsAsDict() 105 return dct['interpreter_list'].indexOfObject_(aString) 106 107 def comboBox_objectValueForItemAtIndex_(self, aComboBox, index): 108 if self.settings is None: 109 return None 110 return self.settings.fileSettingsAsDict()['interpreter_list'][index] 111 112 def numberOfItemsInComboBox_(self, aComboBox): 113 if self.settings is None: 114 return 0 115 return len(self.settings.fileSettingsAsDict()['interpreter_list']) 116