from Cocoa import *
from InstallerPlugins import *
import objc
# Important: be aware that informed end-users can remove your package's
# Plugins directory and/or change your package's InstallerSections.plist file
# to remove custom plugins from its flow.
# So plugins cannot serve as effective gatekeepers to prevent installation.
class RegistrationPane (InstallerPane):
uiFirstNameField = objc.IBOutlet()
uiLastNameField = objc.IBOutlet()
uiOrganizationField = objc.IBOutlet()
uiSerialNumberField = objc.IBOutlet()
def _entriesAreValid(self):
"test all textfields to if they all have at least one character in them"
if (len(self.uiFirstNameField.stringValue()) == 0
or len(self.uiLastNameField.stringValue()) == 0
or len(self.uiOrganizationField.stringValue()) == 0
or len(self.uiSerialNumberField.stringValue()) == 0):
return False
return True
def _serialNumberIsValid(self):
"""
perform a simple string compare to validate the serial number
entered by the user
"""
return self.uiSerialNumberField.stringValue() == '123-456-789'
def _updateNextButtonState(self):
"enable the 'Continue' button if '_entriesAreValid' returns 'True'"
self.setNextEnabled_(self._entriesAreValid())
def _localizedStringForKey_(self, key):
'''
localization helper method: This pulls localized strings from the import
plugin's bundle
'''
return NSBundle.bundleForClass_(type(self
)).localizedStringForKey_value_table_(key, '', None)
def title(self):
''' return the title of this pane '''
return self._localizedStringForKey_("Title")
def didEnterPane_(self, dir):
''' pane's entry point: code called when user enters this pane '''
NSLog("DIDENTER")
self._updateNextButtonState()
def shouldExitPane_(self, dir):
'''
called when user clicks "Continue" -- return value indicates
if application should exit pane
'''
if dir == InstallerDirectionForward and not self._serialNumberIsValid():
self._updateNextButtonState()
NSBeginInformationalAlertSheet(
None,
self._localizedStringForKey_("OK_BUTTON"),
None,
None,
self.uiFirstNameField.window(),
None,
None,
None,
0,
self._localizedStringForKey_("InvalidSerialNumberAlertMessage"));
return False
return True
def controlTextDidChange_(self, notification):
"""
updates the state of the next button when the contents of the
delegate textfields change
"""
self._updateNextButtonState()
|