<commit_before>
# TODO: Create a class that makes it easy to deal with a single window
#       (e.g. no application)

# TODO: Allow apps to be started in a different thread so we don't lock up
#  - this is being done already - the problem is that some messages cannot
#    be sent across processes if they have pointers (so we need to send a 
#    synchronous message which waits for the other process to respond 
#    before returning)

# TODO: Message traps - how to handle unwanted message boxes popping up?
# a) Wait for an Exception then handle it there
# b) set a trap waiting for a specific dialog

# TODO: Implement an opional timing/config module so that all timing can 
#       be customized

# TODO: Handle adding reference controls

# TODO: Add referencing by closes static (or surrounding group box?)

# TODO: find the reference name of a variable .e.g so that in Dialog._write() we 
#       can know the variable name that called the _write on (this we don't have
#       to repeat the XML file name!)


# investigate using any of the following
# BringWindowToTop
# EnumThreadWindows
# GetGUIThreadInfo
# GetTopWindow
# 




# a) Dialogs returned from App (dialog)
#    should respond to _ctrl and their own actions
# b) Controls returned from Dialogs
#    should respond to _ctrl and their own actions
# c) Dialogs should be able to respond to calls of
#    FindControl
# d) Apps should be able to respond to calls of
#    FindDialog
# e) Dialogs need to be able to respond to MenuSelect

# app.dlgTitle
# app._Dialog(dlgSearchParams): raises WindowNotFound, WindowAmbiguous

# dlg.ControlTitle
# dlg._Control(ctrlSearchParams)

# dlg._Menu(menupath).Select()
# OR???
# dlg._Menu.File.Open.Select()

# dlg._.IsVisible
# dlg.Close()

# ctrl._.IsVisible
# ctrl.Click()<commit_msg>slightly updated todo<commit_after>
============================================================================
APPLICATION TODO's
============================================================================
* Create a class that makes it easy to deal with a single window  (e.g. no application)

* Allow apps to be started in a different thread so we don't lock up
  - this is being done already - the problem is that some messages cannot
    be sent across processes if they have pointers (so we need to send a 
    synchronous message which waits for the other process to respond 
    before returning)

* Message traps - how to handle unwanted message boxes popping up?
  a) Wait for an Exception then handle it there
  b) set a trap waiting for a specific dialog

*  Implement an opional timing/config module so that all timing can be customized

* Handle adding reference controls (in that they should be the controls used for finding windows)

* Add referencing by closest static (or surrounding group box?)

* Find the reference name of a variable .e.g so that in Dialog._write() we 
  can know the variable name that called the _write on (this we don't have
  to repeat the XML file name!)

Investigate using any of the following
  BringWindowToTop
  EnumThreadWindows
  GetGUIThreadInfo
  GetTopWindow
 


============================================================================

============================================================================


# a) Dialogs returned from App (dialog)
#    should respond to _ctrl and their own actions
# b) Controls returned from Dialogs
#    should respond to _ctrl and their own actions
# c) Dialogs should be able to respond to calls of
#    FindControl
# d) Apps should be able to respond to calls of
#    FindDialog
# e) Dialogs need to be able to respond to MenuSelect

# app.dlgTitle
# app._Dialog(dlgSearchParams): raises WindowNotFound, WindowAmbiguous

# dlg.ControlTitle
# dlg._Control(ctrlSearchParams)

# dlg._Menu(menupath).Select()
# OR???
# dlg._Menu.File.Open.Select()

# dlg._.IsVisible
# dlg.Close()

# ctrl._.IsVisible
# ctrl.Click()
{'fraction_non_alphanumeric': 0.13456126886671782, 'fraction_numerical': 0.0, 'mean_word_length': 4.137976346911958, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4845167', 'n_tokens_mistral': 1057, 'n_tokens_neox': 1003, 'n_words': 499}