Upgrade to wxPython 4.0.3 (Phoenix) (#7104)
* wxPython4: initial foundations with wx.adv.TaskbarIcon and others. re #7077.
One of the biggest benefits of using wxPython 4 is easier route for upgrading to Python 3.x. Due to changes made in wxPython 4, NvDA source code (at least wx routines) must be modified. This provides some foundations, namely wx.adv.TaskbarIcon and replacing wx.SpinCtrlNameStr with a string literal.
* wxPython 4/Python Console: use wx.TextCtrl.WriteText instead of wx.TextCtrl.write. re #7077.
wx.TextCtrl.write is no more - wx.TextCtrl.WriteText should be used instead.
* wxPython 4/Python Console: use AppendText instead of WriteText for cursor tracking. re #7077.
If wx.TextCtrl.WriteText is used and if the cursor is located at the top of the output window for the console, newly typed text will be inserted instead of being appended, thus wx.TextCtrl.AppendText will be used.
* wxPython 4/various dialogs: wx.CENTER_ON_SCREEN is no more, use wx.Center instead. re #7077.
Somehow, documentation says wx.CENTRE_ON_SCREEN is included but it isn't there at runtime. Instead, wx.Center is used (does not follow variable naming convention though), so using it for now.
* wxPython 4/Welcome dialog: wx.NORMAL cannot be used as a font family anymore, replaced with wx.FONTFAMILY_DEFAULT. re #7077
* wxPython 4/cursor manager/Find dialog: use sizer.Add instead of sizer.AddSizer. re #7077.
* wxPython 4/Launcher: spell out GridSizer gaps, prevents overload error. re #7077.
In wxPython 4, when instantiating wx.GridSizer, horizontal and vertical gaps in pixels must be specified.
* wxPython 4/speech viewer: few tweaks to constructor, save position before the dialog is destroyed. re #7077.
Due to changes to how dialog sizes are constructed, keyword arguments cannot be used.
Also, if Window.Destroy is called, somehow text controls and what not are gone, so save speech viewer position before destroying the window.
* wxPython 4/Input gestures dialog: when Cancel button is clicked, make sure to check if the treeview is alive. re #7077.
Somehow, when Cancel button is licked, treeview is removed first, yet item selection event is run. Make sure to catch this.
* Readme: mention new wxPython and Six compatibility layer requirements. re #7077
* wx.Menu: AppendMenu is deprecated, use Append instead. re #7077
* Add-ons Manager: make sure to nullify dialog instance flag and prevent issues when installing more than one add-on remotely. re #7077.
Here 'remotely' refers to letting people install add-ons via Windows Explorer and other means. Without nullifying instance flag when the add-ons manager closes, instance flag will be kept, which causes wxPython to think (and correctly) that the dialog is still active, resulting in runtime error on add-on list control being thrown.
* gui/Config profiles dialog/wxPython 4: nullify instance flag. re #7077.
Just like add-ons manager, if the instance flag for config profiles dialog isn't nullified, wxWidgets will think that the dialog is active when it is gone. Thus nullify it in two places: when the actual dialog closes and when a new profile is activated right away (for the latter, it is parent.Destroy).
* Python console: revert to wx.TextCtrl.write function. re #7077.
Due to request from a tester, wxPython 4 developer has decided to restore wx.TextCtrl.write. This means the AppendText workaround in place is no longer needed.
* Settings/voice sliders: replace wx.WXK_PRIOR and wx.WXK_NEXT with wx.WXK_pAGEUP and wx.WXK_PAGEDOWN, respectively. re #7077.
wx.WXK_PRIOR and wx.WXK_NEXT are no more, replaced by direct definition of page up and page down keys. This fixes the problem where sliders couldn't be changed in Voice Settings dialog.
* core.CorePump: block this timer from firing recursively. This could never happen before wxPython 4, but now it is possible.
* miscDeps now contains wxPython 4.
* Core: update copyright years, corrected issue number
* Comment spelling fix
* wxPython 4.0.1 in miscDeps
* gui: add a NonRe-entrant timer to replace use of wx.Timer and wx.PyTimer.
* Replace usage of wx.PyTimer with gui.NonReentrantTimer for all core code in NVDA. This does not change any braille display drivers.
* Clarify comment
* Clarify docstring
* Spelling
* Readme: mention wxPython 4.0.1
* wxPython 4: use wx.ID_ANY instead of NewID function. Re #8121.
Becasue NewID may raise assertion error, use wx.ID_ANY instead.
* GUI/SettingsDialogs: remove extra space at ends of lines
* Settings screen: wx.Center again.
* add a new submodule for wxPython dep
* Use `CenterOnScreen()` rather than `Center`
Use the explicit function rather than `Center()` with the CENTER_ON_SCREEN constant.
Also supply CENTER_ON_SCREEN for addons which may still rely on it.
* Define both missing constants
Despite being referred to in the documentation for wxPython,
CENTER_ON_SCREEN and CENTRE_ON_SCREEN constants are missing.
Here we redefine them to stop errors in addons. Addons should migrate to
using the explicit functions CenterOnParent or CenterOnScreen.
* Update copyright years and headers.
* Settings dialog: clear instances set when all settings instances are gone. Re #7077.
Previously, when closing settings dialog, instances would be cleared. It turns out that might not be the case with wxPython 4, so manually clear instances set if the only thing remaining is the SettingsDialog object.
* wxPython 4: revert instances checking in SettingsDialog thanks to mitigation about circular references. Re #7077.
* Dictionary dilaog: use wx.NewId for add, edit, and remove buttons. Re #7077.
Somehow, using wx.ID_ANY for speech dictionary buttons causes the buttons to not work. This is because the button is added directly to the helper sizer. Thus use NewID instead.
* Get rid of unnecessary ID usage
* Log viewer: wx.SAVE -> wx.FD_SAVE, wx.OVERWRITE_PROMPT -> wx.FD_OVERWRITE_PROMPT. Re #7077.
Yet another change of attribute names: wx.SAVE is now wx.FD_SAVE, wx.OVERWRITE_PROMPT is fwx.FD_OVERWRITE_PROMPT. This resolves an issue where Log Viewer does not let users save logs (issue #8385).
* Log viewer: add copyright headers.
* wxPython4/settings dialogs: deleteWindows -> delete_windows in sizer.Clear method. Re #7077
* What's new: add wxPython 4.0.1 entry in changes for developers section. Re #7077
* Upgrade to wxPython 4.0.3
* Touch intewraction/touch typing mode checkbox: no more wx.NewId function for this checkbox just like others. re #7077.
Somehow, for touch interaction/touch typing mode checkbox, wx.NewId function was called, whereas other checkboxes do not do this. Thus make it consistent with other fellows by not calling this function in this particular checkbox.
* Settings panels: use wx.NewIdRef function to retrieve global ID's for panels. Re #7077.
Reported by several people and subsequently confirmed: in wxPython 4.0.0 to 4.0.2, there exists a wrap-around bug in wx.NewId function that prevents programs calling this function from working normally after the ID's are exhausted. This is now fixed in wxPython 4.0.3 via wx.NewIdRef function. Thus use this function to keep an eye on panel ID's, used for announcing new categories as they become visible in multi-category NVDA Settings screen.
* Readme: mention Python 2.7.15 and wxPython 4.0.3 dependencies.
* What's new: wxPython 4.0.1 -> 4.0.3. Re #7077.