def __init__(self):
        '''
        Constructor.
        '''
        theClass = 'Object'

        wx.RegisterFirstCallerClassName(self, theClass)

        id = wx.ID_ANY

        # Establish connection with application logger and log the beginning
        # of class registration. Then establish application access to display
        # top-level window and to curses screen and windows.

        if Object.TheLogger is None:

            Object.PyApp_Object = self

            Object.PyApp_EventQueue = wxDoubleLinkedList()

            self.tsBeginClassRegistration(theClass, id)

            self.tsEndClassRegistration(theClass)
    def __init__(self,
                 parent,                 # Should be None unless modal mode
                 message,                # Alias for user prompt output
                 caption=wx.EmptyString, # Alias for title
                 value=wx.EmptyString,   # Option for default user input
                 style=wx.TEXT_ENTRY_DIALOG_STYLE, # Options for ClientRect
                 size=wx.DefaultSize,    # Extension for application use
                 pos=wx.DefaultPosition  # Option for application use
                 ):
        '''
        '''
        theClass = 'TextEntry'

        # Capture initial caller parametsrs before they are changed
        self.caller_caption = caption
        self.caller_message = message
        self.caller_name = name
        self.caller_parent = parent
        self.caller_pos = pos
        self.caller_size = size
        self.caller_style = style
        self.caller_title = title
        self.caller_value = value

##        wx.RegisterFirstCallerClassName(self, theClass)

##        Dialog.__init__(self,
##                        parent, # self.GetParentForModalDialog(parent, style),
##                        id=wx.ID_ANY,
##                        title=title,
##                        pos=pos,
##                        size=size,
##                        # Apply Default Dialog Style to Top-Level Window
##                        # (defer TextEntryDialog style for internal layout)
##                        style=wx.DEFAULT_DIALOG_STYLE,
##                        name=name)

        # Capture parameters.
        self.ts_Caption = self.backup_caption
        self.ts_Message = self.backup_message
        self.ts_Parent = self.backup_parent    # Should be None unless modal mode
        self.ts_Pos = self.backup_pos
        self.ts_Size = self.backup_size
        self.ts_Style = self.backup_style
        self.ts_Title = self.backup_title
        self.ts_Value = self.backup_value

##        (self.ts_Rect,
##         self.ts_ClientRect) = self.tsTextEntryDialogLayout(
##             parent, pos, size, style, caption)

        thePosition = self.Position
        theSize = self.Size

        if DEBUG:
            self.logger.debug('               self: %s' % self)
            self.logger.debug('             parent: %s' % parent)
            self.logger.debug('                 id: %s' % self.ts_Id)
            self.logger.debug('         AssignedId: %s' % self.ts_AssignedId)
            self.logger.debug('              title: %s' % title)
            self.logger.debug('                pos: %s' % thePosition)
            self.logger.debug('               size: %s' % theSize)
            self.logger.debug('              style: 0x%X' % style)
            self.logger.debug('               name: %s' % name)

        self.ts_Name = name
        self.ts_Parent = parent

        if True:
            self.ts_BackgroundColour = wx.ThemeToUse[
                'TextEntryDialog']['BackgroundColour'].lower()
            self.ts_ForegroundColour = wx.ThemeToUse[
                'TextEntryDialog']['ForegroundColour'].lower()
        else:
            self.ts_BackgroundColour = wx.ThemeToUse[
                'Dialog']['BackgroundColour'].lower()
            self.ts_ForegroundColour = wx.ThemeToUse[
                'Dialog']['ForegroundColour'].lower()

        self.ts_TextPad = None
        self.ts_IdleTimeQueue = wxDoubleLinkedList(lifoMode=False)
        self.ts_RealTimeQueue = wxDoubleLinkedList(lifoMode=False)

        self.ts_DescendantOrderOfShow = [self.ts_AssignedId]

        # The following redefines the usage of the style wx.CENTRE.
        # Intended only to govern the alignment of the buttons within
        # the dialog, we also apply it the centering of the dialog
        # itself within the desktop because the layout process cannot
        # wait for the application to initiate centering.
        if (self.ts_Style & wx.CENTRE) == wx.CENTRE:

            if DEBUG:

                msg = 'tsWxTextEntryDialog.__init__: ' + \
                      'Proceeding with tsDialogFeatureLayout. ' + \
                      'Style contains wx.CENTRE.'
                self.logger.debug(msg)
                print('DEBUG: %s\n' % msg)

            self.Center()

            self.ts_TextPad = self.tsDialogFeatureLayout()

            self.Show()

        else:

            msg = 'tsWxTextEntryDialog.__init__: ' + \
                  'Skipped tsDialogFeatureLayout. ' + \
                  'Style did NOT contain wx.CENTRE.'
            self.logger.error(msg)
            print('ERROR: %s\n' % msg)

        self.ts_ButtonUserPressed = wx.ID_CANCEL

        self.tsEndClassRegistration(theClass)
    def __init__(self,
                 parent,
                 id=wx.ID_ANY,
                 title=wx.EmptyString,
                 pos=wx.DefaultPosition,
                 size=wx.DefaultSize,
                 style=wx.DEFAULT_DIALOG_STYLE,
                 name=wx.DialogNameStr):
        '''
        '''
        theClass = 'Dialog'

        # Capture initial caller parametsrs before they are changed
        self.caller_parent = parent
        self.caller_id = id
        self.caller_title = title
        self.caller_pos = pos
        self.caller_size = size
        self.caller_style = style
        self.caller_name = name

        wx.RegisterFirstCallerClassName(self, theClass)

        TopLevelWindow.__init__(self)

        self.tsBeginClassRegistration(theClass, id)

        self.ts_oldFocus = None
        self.ts_isShown = False
        self.ts_modalData = None
        self.ts_endModalCalled = False
        self.ts_dialogToolBar = None

        self.ts_ButtonSizerFlags = 32926
        self.ts_returnCode = 0
        self.ts_sizeSet = False
        self.ts_modalShowing = False
        self.ts_themeEnabled = True

        myRect, myClientRect = self.tsDialogWindowLayout(
            parent, pos, size, style, name)
        self.ts_Rect = myRect
        self.ts_ClientRect = myClientRect

        thePosition = self.Position
        theSize = self.Size

        if DEBUG:
            self.logger.debug('               self: %s' % self)
            self.logger.debug('             parent: %s' % parent)
            self.logger.debug('                 id: %s' % self.ts_Id)
            self.logger.debug('         AssignedId: %s' % self.ts_AssignedId)
            self.logger.debug('              title: %s' % title)
            self.logger.debug('                pos: %s' % thePosition)
            self.logger.debug('               size: %s' % theSize)
            self.logger.debug('              style: 0x%X' % style)
            self.logger.debug('               name: %s' % name)

        self.ts_Name = name
        self.ts_Parent = parent

        self.ts_IdleTimeQueue = wxDoubleLinkedList(lifoMode=False)
        self.ts_RealTimeQueue = wxDoubleLinkedList(lifoMode=False)

        self.ts_DescendantOrderOfShow = [self.ts_AssignedId]

        theTopLevelClass = self
        self.SetTopLevelAncestor(theTopLevelClass)

        if parent is None:
            self.ts_GrandParent = None
        else:
            self.ts_GrandParent = parent.Parent

        if True:
            self.ts_BackgroundColour = wx.ThemeToUse[
                'Dialog']['BackgroundColour'].lower()
            self.ts_ForegroundColour = wx.ThemeToUse[
                'Dialog']['ForegroundColour'].lower()
        else:
            self.ts_BackgroundColour = wx.ThemeToUse[
                'ForegroundColour'].lower()
            self.ts_ForegroundColour = wx.ThemeToUse[
                'BackgroundColour'].lower()

##        self.ts_FocusEnabled = True
        self.SetFocus()

        self.ts_Label = title
        self.ts_Style = style
        self.ts_Title = title

        self.ts_defaultDialogAcceleratorEntries = {
            '?': {'name': 'OnHelp',
                  'flags': wx.ACCEL_ALT,
                  'keyCode': ord('?'),
                  'cmdID': wx.ID_ANY},
            'X': {'name': 'OnClose',
                  'flags': wx.ACCEL_ALT,
                  'keyCode': ord('X'),
                  'cmdID': wx.ID_ANY}
            }

        # Automatically Bind all mouse events ASAP (now).
        # Will register event in the SystemEventTable.
        event = EVT_SET_FOCUS
        handler = self.SetFocusFromKbd
        source = self
        self.Bind(event,
                  handler,
                  source,
                  useSystemEventTable=True)

        self.tsEndClassRegistration(theClass)
    def __init__(self,
                 parent,                 # Should be None unless modal mode
                 message,                # Alias for user prompt output
                 caption=wx.EmptyString, # Alias for title
                 value=wx.EmptyString,   # Option for default user input
                 style=wx.TEXT_ENTRY_DIALOG_STYLE, # Options for ClientRect
                 size=wx.DefaultSize,    # Extension for application use
                 pos=wx.DefaultPosition  # Option for application use
                 ):
        '''
        Use ShowModal() to show the dialog.

        Parameters:

        parent  Parent window.

        message Message to show on the dialog.

        caption The caption of the dialog.

        value   The default value, which may be the empty string.

        style   A dialog style, specifying the buttons (wxOK, wxCANCEL)
                and an optional wxCENTRE style. Additionally, wxTextCtrl
                styles (such as wxTE_PASSWORD or wxTE_MULTILINE) may be
                specified here.

        pos     Dialog position.
        '''
        theClass = 'TextEntryDialog'

        # Capture initial caller parametsrs before Dialog makes changes
        self.backup_parent = parent
        self.backup_message = message
        self.backup_caption = caption
        self.backup_value = value
        self.backup_style = style
        self.backup_size = size
        self.backup_pos = pos

        name = wx.TextEntryDialogNameStr
        title = caption
        self.backup_name = name
        self.backup_size = size
        self.backup_title = title

        # Capture initial caller parametsrs before they are changed
        self.caller_caption = caption
        self.caller_message = message
        self.caller_name = name
        self.caller_parent = parent
        self.caller_pos = pos
        self.caller_size = size
        self.caller_style = style
        self.caller_title = title
        self.caller_value = value

        wx.RegisterFirstCallerClassName(self, theClass)

        Dialog.__init__(self,
                        parent, # self.GetParentForModalDialog(parent, style),
                        id=wx.ID_ANY,
                        title=title,
                        pos=pos,
                        size=size,
                        # Apply Default Dialog Style to Top-Level Window
                        # (defer TextEntryDialog style for internal layout)
                        style=wx.DEFAULT_DIALOG_STYLE,
                        name=name)

        # Capture parameters.
        self.ts_Caption = self.backup_caption
        self.ts_Message = self.backup_message
        self.ts_Parent = self.backup_parent    # Should be None unless modal mode
        self.ts_Pos = self.backup_pos
        self.ts_Size = self.backup_size
        self.ts_Style = self.backup_style
        self.ts_Title = self.backup_title
        self.ts_Value = self.backup_value

        self.ts_Completion = False
        self.ts_PasswordMode = False
        self.ts_StripSpaces = False

##        (self.ts_Rect,
##         self.ts_ClientRect) = self.tsTextEntryDialogLayout(
##             parent, pos, size, style, caption)

        thePosition = self.Position
        theSize = self.Size

        if DEBUG:
            self.logger.debug('               self: %s' % self)
            self.logger.debug('             parent: %s' % parent)
            self.logger.debug('                 id: %s' % self.ts_Id)
            self.logger.debug('         AssignedId: %s' % self.ts_AssignedId)
            self.logger.debug('              title: %s' % title)
            self.logger.debug('                pos: %s' % thePosition)
            self.logger.debug('               size: %s' % theSize)
            self.logger.debug('              style: 0x%X' % style)
            self.logger.debug('               name: %s' % name)

        self.ts_Name = name
        self.ts_Parent = parent

        if True:
            self.ts_BackgroundColour = wx.ThemeToUse[
                'TextEntryDialog']['BackgroundColour'].lower()
            self.ts_ForegroundColour = wx.ThemeToUse[
                'TextEntryDialog']['ForegroundColour'].lower()
        else:
            self.ts_BackgroundColour = wx.ThemeToUse[
                'Dialog']['BackgroundColour'].lower()
            self.ts_ForegroundColour = wx.ThemeToUse[
                'Dialog']['ForegroundColour'].lower()

        self.ts_ButtonSeparatorLine = wx.ThemeToUse[
            'TextEntryDialog']['ButtonSeparatorLine']

        self.ts_TextEntryStripSpaces = wx.ThemeToUse[
            'TextEntryDialog']['StripSpaces']

        self.ts_TextPad = None
        self.ts_IdleTimeQueue = wxDoubleLinkedList(lifoMode=False)
        self.ts_RealTimeQueue = wxDoubleLinkedList(lifoMode=False)

        self.ts_DescendantOrderOfShow = [self.ts_AssignedId]

        # The following redefines the usage of the style wx.CENTRE.
        # Intended only to govern the alignment of the buttons within
        # the dialog, we also apply it the centering of the dialog
        # itself within the desktop because the layout process cannot
        # wait for the application to initiate centering.
        if (self.ts_Style & wx.CENTRE) == wx.CENTRE:

            if DEBUG:

                msg = 'tsWxTextEntryDialog.__init__: ' + \
                      'Proceeding with tsDialogFeatureLayout. ' + \
                      'Style contains wx.CENTRE.'
                self.logger.debug(msg)
                print('DEBUG: %s\n' % msg)

            self.Center()

            self.theButtons = None
            self.theCancelButton = None
            self.theLine = None
            self.theMessage = None
            self.theOkButton = None
            self.theSpacer = None
            self.theTextBox = None
            self.theValue = None

            self.ts_TextPad = self.tsDialogFeatureLayout()

            self.Show()

        else:

            msg = 'tsWxTextEntryDialog.__init__: ' + \
                  'Skipped tsDialogFeatureLayout. ' + \
                  'Style did NOT contain wx.CENTRE.'
            self.logger.error(msg)
            print('ERROR: %s\n' % msg)

        self.ts_ButtonUserPressed = wx.ID_CANCEL

        self.tsEndClassRegistration(theClass)
    def __init__(self):
        '''
        Create a new application object, starting the bootstrap process.
        '''

        theClass = 'PyApp'

        wx.RegisterFirstCallerClassName(self, theClass)

        # Initiate bootstrap process

        EvtHandler.__init__(self)

        applicationId = wx.ID_ANY

        self.tsBeginClassRegistration(theClass, applicationId)

        self.ts_theTerminal = tsGTUI.GraphicalTextUserInterface(theClass)
        try:
            if True:
                PyApp._TheGeometry = self.ts_theTerminal.StdscrGeometryPixels
            else:
                (theScreenX,
                 theScreenY,
                 theScreenWidth,
                 theScreenHeight) = self.ts_theTerminal.StdscrGeometry

                PyApp._TheGeometry = wxRect(
                    theScreenX * wx.pixelWidthPerCharacter,
                    theScreenY * wx.pixelHeightPerCharacter,
                    theScreenWidth * wx.pixelWidthPerCharacter,
                    theScreenHeight * wx.pixelHeightPerCharacter)

        except AttributeError:
            PyApp._TheGeometry = wxRect(-1, -1, -1, -1)

        self.ts_Active = True
        self.ts_AppName = None
        self.ts_AssertMode = False
        self.ts_ClassName = theClass
        self.ts_EventLoop = None
        self.ts_Exit = False
        self.ts_ExitMainLoop = False
        self.ts_ExitOnFrameDelete = True
        self.ts_IdleEvents = False
        self.ts_IsActive = False
        self.ts_LayoutDirection = wx.Layout_Default

        self.ts_PrintMode = wx.UseDefaultValue

##        self.ts_thisown = None

        # Create a Frame that encompasses entire curses screen (stdscr).
        # It is the default for handling mouse clicks outside of those
        # top-level windows (frames and dialogs), and their children,
        # that do not fully occupy the curses screen.
        theParent = None
        self.ts_TheTopUserWindow = None
        self.ts_TheTopWindow = wxScreen(
            theParent,
            id=wx.ID_ANY,
            title='Screen',
            pos=wx.DefaultPosition,
            size=wx.DefaultSize,
            style=wx.DEFAULT_FRAME_STYLE,
            name=wx.ScreenNameStr)

        # Set default Window that will receive Keyboard Text Entry Input.
        # Must bypass use of self.tsRegisterKeyboardInputOrder()
        try:

            tsWxGTUI_DataBase.KeyboardInputRecipients[
                'lifoList'] = self.ts_TheTopWindow

        except Exception as errorCode:

            msg = 'txWxPyApp.__init__: errorCode=""%s"' % str(errorCode)
            self.logger.error(msg)
            print('ERROR: %s\n' % msg)
            raise tse.ProgramException(tse.APPLICATION_TRAP, msg)

        self.ts_Traits = None
        self.ts_UseBestVisual = True
        self.ts_VendorName = wx.ThemeToUse['VendorName']

        if wx.ThemeToUse['TaskBar']['Enable']:
            self.ts_TaskWin = self.tsCreateTaskBar()
            self.ts_TaskWin.Show()
            self.ts_TaskWin.tsShowTaskBar()
        else:
            self.ts_TaskWin = None

        # Set True for Event Handling
        PyApp._KeepGoing = True
        PyApp._OnExitCompleted = False
        self.ts_IdleQueue = wxDoubleLinkedList()

        self.logger.debug(
            'tsWxPyApp.keepGoing: %s for %s (0x%X).' % (PyApp._KeepGoing,
                                                theClass,
                                                id(self)))
 
        PyApp.ts_WxApp = self

##        self.ts_BootstrapApp()

        self.tsEndClassRegistration(theClass)