• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /macosx-10.10.1/pyobjc-45/2.5/pyobjc/pyobjc-framework-Cocoa/Examples/AppKit/PyObjCLauncher/
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