beremiz

Parents c89fc366bebd
Children 3d736248ab3b
Preliminary support for WxPython 4.1.0. Needs more testing. Grid selection/focus seems broken, and probably many other bugs hidden in dialogs and editors.
  • +16 -16
    BeremizIDE.py
  • +13 -17
    IDEFrame.py
  • +7 -5
    bacnet/BacnetSlaveEditor.py
  • +1 -1
    canfestival/NetworkEditor.py
  • +3 -3
    connectors/SchemeEditor.py
  • +4 -4
    controls/CustomEditableListBox.py
  • +2 -2
    controls/CustomStyledTextCtrl.py
  • +2 -2
    controls/CustomTable.py
  • +1 -3
    controls/CustomToolTip.py
  • +2 -2
    controls/CustomTree.py
  • +8 -8
    controls/DebugVariablePanel/DebugVariableGraphicViewer.py
  • +17 -17
    controls/DebugVariablePanel/DebugVariablePanel.py
  • +2 -6
    controls/DebugVariablePanel/DebugVariableTextViewer.py
  • +1 -1
    controls/DebugVariablePanel/GraphButton.py
  • +5 -5
    controls/DiscoveryPanel.py
  • +2 -2
    controls/DurationCellEditor.py
  • +3 -3
    controls/EnhancedStatusBar.py
  • +2 -2
    controls/FolderTree.py
  • +4 -4
    controls/LibraryPanel.py
  • +2 -2
    controls/LocationCellEditor.py
  • +12 -17
    controls/LogViewer.py
  • +7 -7
    controls/PouInstanceVariablesPanel.py
  • +14 -14
    controls/ProjectPropertiesPanel.py
  • +5 -5
    controls/SearchResultPanel.py
  • +1 -1
    controls/TextCtrlAutoComplete.py
  • +20 -23
    controls/VariablePanel.py
  • +13 -18
    dialogs/ActionBlockDialog.py
  • +9 -9
    dialogs/ArrayTypeDialog.py
  • +4 -5
    dialogs/BlockPreviewDialog.py
  • +10 -10
    dialogs/BrowseLocationsDialog.py
  • +4 -4
    dialogs/BrowseValuesLibraryDialog.py
  • +9 -9
    dialogs/ConnectionDialog.py
  • +5 -5
    dialogs/DurationEditorDialog.py
  • +14 -14
    dialogs/FBDBlockDialog.py
  • +10 -10
    dialogs/FBDVariableDialog.py
  • +16 -16
    dialogs/FindInPouDialog.py
  • +7 -7
    dialogs/ForceVariableDialog.py
  • +4 -4
    dialogs/IDMergeDialog.py
  • +10 -9
    dialogs/LDElementDialog.py
  • +7 -7
    dialogs/LDPowerRailDialog.py
  • +7 -8
    dialogs/PouActionDialog.py
  • +9 -9
    dialogs/PouDialog.py
  • +1 -2
    dialogs/PouNameDialog.py
  • +7 -7
    dialogs/PouTransitionDialog.py
  • +3 -4
    dialogs/ProjectDialog.py
  • +7 -7
    dialogs/SFCDivergenceDialog.py
  • +7 -7
    dialogs/SFCStepDialog.py
  • +1 -2
    dialogs/SFCStepNameDialog.py
  • +8 -8
    dialogs/SFCTransitionDialog.py
  • +13 -13
    dialogs/SearchInProjectDialog.py
  • +14 -16
    editors/CodeFileEditor.py
  • +32 -32
    editors/ConfTreeNodeEditor.py
  • +48 -48
    editors/DataTypeEditor.py
  • +9 -9
    editors/FileManagementPanel.py
  • +1 -1
    editors/ProjectNodeEditor.py
  • +25 -33
    editors/ResourceEditor.py
  • +17 -11
    editors/TextViewer.py
  • +12 -14
    editors/Viewer.py
  • +40 -39
    etherlab/ConfigEditor.py
  • +11 -11
    etherlab/EtherCATManagementEditor.py
  • +3 -3
    graphics/FBD_Objects.py
  • +8 -8
    graphics/GraphicCommons.py
  • +1 -1
    graphics/RubberBand.py
  • +3 -3
    graphics/SFC_Objects.py
  • +6 -6
    svghmi/ui.py
  • +1 -1
    util/BitmapLibrary.py
  • +1 -1
    util/ExceptionHandler.py
  • --- a/BeremizIDE.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/BeremizIDE.py Thu Sep 02 22:18:14 2021 +0200
    @@ -92,7 +92,7 @@
    return os.path.join(beremiz_dir, *args)
    def AppendMenu(parent, help, id, kind, text):
    - return parent.Append(help=help, id=id, kind=kind, text=text)
    + return parent.Append(wx.MenuItem(helpString=help, id=id, kind=kind, text=text))
    MAX_RECENT_PROJECTS = 9
    @@ -179,7 +179,7 @@
    if style is None:
    style = self.black_white
    if style != self.black_white:
    - self.output.StartStyling(self.output.GetLength(), 0xff)
    + self.output.StartStyling(self.output.GetLength())
    # Temporary deactivate read only mode on StyledTextCtrl for
    # adding text. It seems that text modifications, even
    @@ -249,7 +249,7 @@
    kind=wx.ITEM_NORMAL, text=_(u'New') + '\tCTRL+N')
    AppendMenu(parent, help='', id=wx.ID_OPEN,
    kind=wx.ITEM_NORMAL, text=_(u'Open') + '\tCTRL+O')
    - parent.AppendMenu(ID_FILEMENURECENTPROJECTS, _("&Recent Projects"), self.RecentProjectsMenu)
    + parent.Append(ID_FILEMENURECENTPROJECTS, _("&Recent Projects"), self.RecentProjectsMenu)
    parent.AppendSeparator()
    AppendMenu(parent, help='', id=wx.ID_SAVE,
    kind=wx.ITEM_NORMAL, text=_(u'Save') + '\tCTRL+S')
    @@ -291,10 +291,10 @@
    for name, text, helpstr, children in items:
    if len(children) > 0:
    new_menu = wx.Menu(title='')
    - menu.AppendMenu(wx.ID_ANY, text, new_menu)
    + menu.AppendSubMenu(new_menu, text)
    self._RecursiveAddMenuItems(new_menu, children)
    else:
    - item = menu.Append(wx.ID_ANY, text, helpstr)
    + item = menu.Append(wx.MenuItem(text=text, helpString=helpstr))
    self.Bind(wx.EVT_MENU, self.GetAddConfNodeFunction(name), item)
    def _init_coll_AddMenu_Items(self, parent):
    @@ -311,16 +311,16 @@
    item = parent.Append(wx.ID_ANY, _(u'Community support'), '')
    self.Bind(wx.EVT_MENU, handler, item)
    - parent.Append(help='', id=wx.ID_ABOUT,
    - kind=wx.ITEM_NORMAL, text=_(u'About'))
    + parent.Append(wx.MenuItem(helpString='', id=wx.ID_ABOUT,
    + kind=wx.ITEM_NORMAL, text=_(u'About')))
    self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT)
    def _init_coll_ConnectionStatusBar_Fields(self, parent):
    parent.SetFieldsCount(3)
    - parent.SetStatusText(number=0, text='')
    - parent.SetStatusText(number=1, text='')
    - parent.SetStatusText(number=2, text='')
    + parent.SetStatusText(i=0, text='')
    + parent.SetStatusText(i=1, text='')
    + parent.SetStatusText(i=2, text='')
    parent.SetStatusWidths([-1, 300, 200])
    @@ -397,7 +397,7 @@
    self.AUIManager.Update()
    - self.ConnectionStatusBar = esb.EnhancedStatusBar(self, style=wx.ST_SIZEGRIP)
    + self.ConnectionStatusBar = esb.EnhancedStatusBar(self, style=wx.STB_SIZEGRIP)
    self._init_coll_ConnectionStatusBar_Fields(self.ConnectionStatusBar)
    self.ProgressStatusBar = wx.Gauge(self.ConnectionStatusBar, -1, range=100)
    self.ConnectionStatusBar.AddWidget(self.ProgressStatusBar, esb.ESB_EXACT_FIT, esb.ESB_EXACT_FIT, 2)
    @@ -699,7 +699,7 @@
    while self.RecentProjectsMenu.GetMenuItemCount() > 0:
    item = self.RecentProjectsMenu.FindItemByPosition(0)
    - self.RecentProjectsMenu.RemoveItem(item)
    + self.RecentProjectsMenu.Remove(item)
    self.FileMenu.Enable(ID_FILEMENURECENTPROJECTS, len(recent_projects) > 0)
    for idx, projectpath in enumerate(recent_projects):
    @@ -746,9 +746,9 @@
    for confnode_method in self.CTR.StatusMethods:
    if "method" in confnode_method and confnode_method.get("shown", True):
    - tool = StatusToolBar.AddSimpleTool(
    - wx.ID_ANY, GetBitmap(confnode_method.get("bitmap", "Unknown")),
    - confnode_method["tooltip"])
    + tool = StatusToolBar.AddTool(
    + wx.ID_ANY, confnode_method["tooltip"],
    + GetBitmap(confnode_method.get("bitmap", "Unknown")))
    self.Bind(wx.EVT_MENU, self.GetMenuCallBackFunction(confnode_method["method"]), tool)
    StatusToolBar.Realize()
    @@ -798,7 +798,7 @@
    else:
    self.EditMenu.Delete(item.GetId())
    self.LastPanelSelected = None
    - self.MenuBar.UpdateMenus()
    + self.MenuBar.Refresh()
    def RefreshAll(self):
    self.RefreshStatusToolBar()
    --- a/IDEFrame.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/IDEFrame.py Thu Sep 02 22:18:14 2021 +0200
    @@ -115,7 +115,7 @@
    def AppendMenu(parent, help, kind, text, id=wx.ID_ANY):
    - return parent.Append(help=help, kind=kind, text=text, id=id)
    + return parent.Append(wx.MenuItem(helpString=help, kind=kind, text=text, id=id))
    [
    @@ -391,7 +391,7 @@
    parent.AppendSeparator()
    add_menu = wx.Menu(title='')
    self._init_coll_AddMenu_Items(add_menu)
    - parent.AppendMenu(wx.ID_ADD, _(u"&Add Element"), add_menu)
    + parent.Append(wx.ID_ADD, _(u"&Add Element"), add_menu)
    AppendMenu(parent, help='', id=wx.ID_SELECTALL,
    kind=wx.ITEM_NORMAL, text=_(u'Select All') + '\tCTRL+A')
    AppendMenu(parent, help='', id=wx.ID_DELETE,
    @@ -442,7 +442,7 @@
    kind=wx.ITEM_NORMAL, text=_(u'Clear Errors') + '\tCTRL+K')
    parent.AppendSeparator()
    zoommenu = wx.Menu(title='')
    - parent.AppendMenu(wx.ID_ZOOM_FIT, _("Zoom"), zoommenu)
    + parent.Append(wx.ID_ZOOM_FIT, _("Zoom"), zoommenu)
    for idx, value in enumerate(ZOOM_FACTORS):
    new_item = AppendMenu(zoommenu, help='',
    kind=wx.ITEM_RADIO, text=str(int(round(value * 100))) + "%")
    @@ -569,8 +569,8 @@
    self.ProjectPanel = wx.SplitterWindow(
    id=ID_PLCOPENEDITORPROJECTPANEL,
    - name='ProjectPanel', parent=self.LeftNoteBook, point=wx.Point(0, 0),
    - size=wx.Size(0, 0), style=wx.SP_3D)
    + name='ProjectPanel', parent=self.LeftNoteBook,
    + size=wx.Size(0, 0))
    self.ProjectTree = CustomTree(id=ID_PLCOPENEDITORPROJECTTREE,
    name='ProjectTree',
    @@ -631,9 +631,9 @@
    wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
    EditorToolBar.SetToolBitmapSize(wx.Size(25, 25))
    EditorToolBar.AddRadioTool(ID_PLCOPENEDITOREDITORTOOLBARSELECTION,
    + _("Select an object"),
    GetBitmap("select"),
    - wx.NullBitmap,
    - _("Select an object"))
    + wx.NullBitmap)
    EditorToolBar.Realize()
    self.Panes["EditorToolBar"] = EditorToolBar
    self.AUIManager.AddPane(EditorToolBar, wx.aui.AuiPaneInfo().
    @@ -919,12 +919,8 @@
    :param elements: List of elements to refresh.
    """
    - try:
    - for element in elements:
    - self.RefreshFunctions[element]()
    - except wx.PyDeadObjectError:
    - # ignore exceptions caused by refresh while quitting
    - pass
    + for element in elements:
    + self.RefreshFunctions[element]()
    def OnPageClose(self, event):
    """Callback function when AUINotebook Page closed with CloseButton
    @@ -1803,7 +1799,7 @@
    else:
    block_type = "Action"
    self.LastToolTipItem = item
    - wx.CallAfter(self.ProjectTree.SetToolTipString,
    + wx.CallAfter(self.ProjectTree.SetToolTip,
    "%s : %s : %s" % (
    block_type, bodytype, item_infos["name"]))
    elif self.LastToolTipItem is not None:
    @@ -2113,7 +2109,7 @@
    MenuToolBar.AddSeparator()
    else:
    id, bitmap, help, callback = toolbar_item
    - MenuToolBar.AddSimpleTool(id=id, shortHelpString=help, bitmap=GetBitmap(bitmap))
    + MenuToolBar.AddTool(id, help, GetBitmap(bitmap))
    if callback is not None:
    self.Bind(wx.EVT_TOOL, callback, id=id)
    MenuToolBar.Realize()
    @@ -2153,9 +2149,9 @@
    for radio, modes, id, method, picture, help in self.EditorToolBarItems[menu]:
    if modes & self.DrawingMode:
    if radio or self.DrawingMode == FREEDRAWING_MODE:
    - EditorToolBar.AddRadioTool(id, GetBitmap(picture), wx.NullBitmap, help)
    + EditorToolBar.AddRadioTool(id, help, GetBitmap(picture), wx.NullBitmap)
    else:
    - EditorToolBar.AddSimpleTool(id, GetBitmap(picture), help)
    + EditorToolBar.AddTool(id, help, GetBitmap(picture))
    self.Bind(wx.EVT_MENU, getattr(self, method), id=id)
    self.CurrentEditorToolBar.append(id)
    EditorToolBar.Realize()
    --- a/bacnet/BacnetSlaveEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/bacnet/BacnetSlaveEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -367,8 +367,7 @@
    "Engineering Units": {"GridCellEditor": wx.grid.GridCellChoiceEditor,
    # use string renderer with choice editor!
    "GridCellRenderer": wx.grid.GridCellStringRenderer,
    - # syntax for GridCellChoiceEditor -> comma separated values
    - "GridCellEditorParam": ','.join([x[0] for x in BACnetEngineeringUnits])}
    + "GridCellEditorConstructorArgs": [x[0] for x in BACnetEngineeringUnits]}
    }
    # obj_properties should be a dictionary, with keys "Object Identifier",
    @@ -576,7 +575,10 @@
    PropertyName = self.BACnetObjectType.PropertyNames[col]
    PropertyConfig = self.BACnetObjectType.PropertyConfig[PropertyName]
    grid.SetReadOnly(row, col, False)
    - grid.SetCellEditor(row, col, PropertyConfig["GridCellEditor"]())
    + GridCellEditorConstructorArgs = \
    + PropertyConfig["GridCellEditorConstructorArgs"]
    + if "GridCellEditorConstructorArgs" in PropertyConfig else []
    + grid.SetCellEditor(row, col, PropertyConfig["GridCellEditor"](*GridCellEditorConstructorArgs))
    grid.SetCellRenderer(row, col, PropertyConfig["GridCellRenderer"]())
    grid.SetCellBackgroundColour(row, col, wx.WHITE)
    grid.SetCellTextColour(row, col, wx.BLACK)
    @@ -816,7 +818,7 @@
    self, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28),
    style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    controls_sizer.Add(button)
    @@ -826,7 +828,7 @@
    # use only to enable drag'n'drop
    # self.VariablesGrid.SetDropTarget(VariableDropTarget(self))
    self.VariablesGrid.Bind(
    - wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
    + wx.grid.EVT_GRID_CELL_CHANGING, self.OnVariablesGridCellChange)
    # self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick)
    # self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnVariablesGridEditorShown)
    self.MainSizer.Add(self.VariablesGrid, flag=wx.GROW)
    --- a/canfestival/NetworkEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/canfestival/NetworkEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -68,7 +68,7 @@
    main_sizer.AddGrowableCol(0)
    main_sizer.AddGrowableRow(0)
    - main_sizer.AddWindow(self.NetworkNodes, 0, border=5, flag=wx.GROW | wx.ALL)
    + main_sizer.Add(self.NetworkNodes, 0, border=5, flag=wx.GROW | wx.ALL)
    self.NetworkEditor.SetSizer(main_sizer)
    --- a/connectors/SchemeEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/connectors/SchemeEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -28,19 +28,19 @@
    (wx.StaticText(self, label=label),
    wx.ALIGN_CENTER_VERTICAL),
    (txtctrl, wx.GROW)]:
    - self.fieldsizer.AddWindow(win, flag=flag)
    + self.fieldsizer.Add(win, flag=flag)
    self.fieldsizer.AddSpacer(20)
    if self.EnableIDSelector:
    self.mainsizer = wx.FlexGridSizer(cols=2, hgap=10, vgap=10)
    - self.mainsizer.AddSizer(self.fieldsizer)
    + self.mainsizer.Add(self.fieldsizer)
    self.idselector = IDBrowser(
    self, parent.ctr,
    # use a callafter, as editor can be deleted by calling SetURI
    partial(wx.CallAfter, parent.SetURI),
    self.txtctrls["ID"].SetValue)
    - self.mainsizer.AddWindow(self.idselector)
    + self.mainsizer.Add(self.idselector)
    self.SetSizer(self.mainsizer)
    else:
    self.SetSizer(self.fieldsizer)
    --- a/controls/CustomEditableListBox.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/CustomEditableListBox.py Thu Sep 02 22:18:14 2021 +0200
    @@ -25,13 +25,13 @@
    from __future__ import absolute_import
    import wx
    -import wx.gizmos
    +import wx.adv
    -class CustomEditableListBox(wx.gizmos.EditableListBox):
    +class CustomEditableListBox(wx.adv.EditableListBox):
    def __init__(self, *args, **kwargs):
    - wx.gizmos.EditableListBox.__init__(self, *args, **kwargs)
    + wx.adv.EditableListBox.__init__(self, *args, **kwargs)
    listbox = self.GetListCtrl()
    listbox.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
    @@ -44,7 +44,7 @@
    (self.GetDelButton(), _("Delete item"), "_OnDelButton"),
    (self.GetUpButton(), _("Move up"), "_OnUpButton"),
    (self.GetDownButton(), _("Move down"), "_OnDownButton")]:
    - button.SetToolTipString(tooltip)
    + button.SetToolTip(tooltip)
    button.Bind(wx.EVT_BUTTON, self.GetButtonPressedFunction(call_function))
    self.Editing = False
    --- a/controls/CustomStyledTextCtrl.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/CustomStyledTextCtrl.py Thu Sep 02 22:18:14 2021 +0200
    @@ -105,9 +105,9 @@
    [self.GetMarginWidth(i) for i in xrange(3)],
    0)
    if x <= margin_width:
    - self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
    + self.SetCursor(wx.Cursor(wx.CURSOR_ARROW))
    else:
    - self.SetCursor(wx.StockCursor(wx.CURSOR_IBEAM))
    + self.SetCursor(wx.Cursor(wx.CURSOR_IBEAM))
    else:
    event.Skip()
    else:
    --- a/controls/CustomTable.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/CustomTable.py Thu Sep 02 22:18:14 2021 +0200
    @@ -40,7 +40,7 @@
    """
    def __init__(self, parent, data, colnames):
    # The base class must be initialized *first*
    - wx.grid.PyGridTableBase.__init__(self)
    + wx.grid.GridTableBase.__init__(self)
    self.data = data
    self.colnames = colnames
    self.Highlights = {}
    @@ -64,7 +64,7 @@
    return self.colnames[col]
    def GetRowLabelValue(self, row, translate=True):
    - return row
    + return str(row)
    def GetValue(self, row, col):
    if row < self.GetNumberRows():
    --- a/controls/CustomToolTip.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/CustomToolTip.py Thu Sep 02 22:18:14 2021 +0200
    @@ -137,7 +137,7 @@
    max_width = max_height = 0
    # Create a memory DC for calculating text extent
    - dc = wx.MemoryDC(wx.EmptyBitmap(1, 1))
    + dc = wx.MemoryDC(wx.Bitmap(1, 1))
    dc.SetFont(self.Font)
    # Compute max tip text size
    @@ -175,7 +175,6 @@
    dc.SetFont(self.Font)
    # Draw Tool tip
    - dc.BeginDrawing()
    tip_width, tip_height = self.GetToolTipSize()
    # Draw background rectangle
    @@ -188,6 +187,5 @@
    _line_width, line_height = dc.GetTextExtent(line)
    line_offset += line_height
    - dc.EndDrawing()
    event.Skip()
    --- a/controls/CustomTree.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/CustomTree.py Thu Sep 02 22:18:14 2021 +0200
    @@ -120,9 +120,9 @@
    _item, flags = self.HitTest(pos)
    bitmap_rect = self.GetBitmapRect()
    - if ((bitmap_rect.InsideXY(pos.x, pos.y) or
    + if ((bitmap_rect.Contains(pos.x, pos.y) or
    flags & wx.TREE_HITTEST_NOWHERE) and self.AddMenu is not None):
    - wx.CallAfter(self.PopupMenuXY, self.AddMenu, pos.x, pos.y)
    + wx.CallAfter(self.PopupMenu, self.AddMenu, pos.x, pos.y)
    event.Skip()
    def OnEraseBackground(self, event):
    --- a/controls/DebugVariablePanel/DebugVariableGraphicViewer.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/DebugVariablePanel/DebugVariableGraphicViewer.py Thu Sep 02 22:18:14 2021 +0200
    @@ -174,7 +174,7 @@
    # If mouse is dropped in graph canvas bounding box and graph is
    # not 3D canvas, graphs will be merged
    rect = self.ParentControl.GetAxesBoundingBox()
    - if not self.ParentControl.Is3DCanvas() and rect.InsideXY(x, y):
    + if not self.ParentControl.Is3DCanvas() and rect.Contains(x, y):
    # Default merge type is parallel
    merge_type = GRAPH_PARALLEL
    @@ -182,7 +182,7 @@
    # wall be merged orthogonally
    merge_rect = wx.Rect(rect.x, rect.y,
    rect.width / 2., rect.height)
    - if merge_rect.InsideXY(x, y):
    + if merge_rect.Contains(x, y):
    merge_type = GRAPH_ORTHOGONAL
    # Merge graphs
    @@ -625,7 +625,7 @@
    (x0, y0), (x1, y1) = t.get_window_extent().get_points()
    rect = wx.Rect(x0, height - y1, x1 - x0, y1 - y0)
    # Check if mouse was over label
    - if rect.InsideXY(x, y):
    + if rect.Contains(x, y):
    item_idx = i
    break
    @@ -736,7 +736,7 @@
    (x0, y0), (x1, y1) = t.get_window_extent().get_points()
    rect = wx.Rect(x0, height - y1, x1 - x0, y1 - y0)
    # Check if mouse was over label
    - if rect.InsideXY(event.x, height - event.y):
    + if rect.Contains(event.x, height - event.y):
    item_idx = i
    menu_direction = dir
    break
    @@ -756,7 +756,7 @@
    # Update resize highlight
    if event.y <= 5:
    if self.SetHighlight(HIGHLIGHT_RESIZE):
    - self.SetCursor(wx.StockCursor(wx.CURSOR_SIZENS))
    + self.SetCursor(wx.Cursor(wx.CURSOR_SIZENS))
    self.ParentWindow.ForceRefresh()
    else:
    if self.SetHighlight(HIGHLIGHT_NONE):
    @@ -832,7 +832,7 @@
    # Check that double click was done inside figure
    pos = event.GetPosition()
    rect = self.GetAxesBoundingBox()
    - if rect.InsideXY(pos.x, pos.y):
    + if rect.Contains(pos.x, pos.y):
    # Reset Cursor tick to value before starting clicking
    self.ParentWindow.SetCursorTick(self.StartCursorTick)
    # Toggle to text Viewer(s)
    @@ -926,10 +926,10 @@
    # Mouse is over Viewer figure and graph is not 3D
    bbox = self.GetAxesBoundingBox()
    - if bbox.InsideXY(x, y) and not self.Is3DCanvas():
    + if bbox.Contains(x, y) and not self.Is3DCanvas():
    rect = wx.Rect(bbox.x, bbox.y, bbox.width // 2, bbox.height)
    # Mouse is over Viewer left part of figure
    - if rect.InsideXY(x, y):
    + if rect.Contains(x, y):
    self.SetHighlight(HIGHLIGHT_LEFT)
    # Mouse is over Viewer right part of figure
    --- a/controls/DebugVariablePanel/DebugVariablePanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/DebugVariablePanel/DebugVariablePanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -221,14 +221,14 @@
    self.GraphicPanels = []
    graphics_button_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - main_sizer.AddSizer(graphics_button_sizer, border=5, flag=wx.GROW | wx.ALL)
    + main_sizer.Add(graphics_button_sizer, border=5, flag=wx.GROW | wx.ALL)
    range_label = wx.StaticText(self, label=_('Range:'))
    - graphics_button_sizer.AddWindow(range_label, flag=wx.ALIGN_CENTER_VERTICAL)
    + graphics_button_sizer.Add(range_label, flag=wx.ALIGN_CENTER_VERTICAL)
    self.CanvasRange = wx.ComboBox(self, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange)
    - graphics_button_sizer.AddWindow(self.CanvasRange, 1,
    + graphics_button_sizer.Add(self.CanvasRange, 1,
    border=5,
    flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
    @@ -246,10 +246,10 @@
    button = wx.lib.buttons.GenBitmapButton(
    self, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button)
    - graphics_button_sizer.AddWindow(button, border=5, flag=wx.LEFT)
    + graphics_button_sizer.Add(button, border=5, flag=wx.LEFT)
    self.CanvasPosition = wx.ScrollBar(
    self, size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
    @@ -263,19 +263,19 @@
    self.OnPositionChanging, self.CanvasPosition)
    self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN,
    self.OnPositionChanging, self.CanvasPosition)
    - main_sizer.AddWindow(self.CanvasPosition, border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
    + main_sizer.Add(self.CanvasPosition, border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
    self.TickSizer = wx.BoxSizer(wx.HORIZONTAL)
    - main_sizer.AddSizer(self.TickSizer, border=5, flag=wx.ALL | wx.GROW)
    + main_sizer.Add(self.TickSizer, border=5, flag=wx.ALL | wx.GROW)
    self.TickLabel = wx.StaticText(self)
    - self.TickSizer.AddWindow(self.TickLabel, border=5, flag=wx.RIGHT)
    + self.TickSizer.Add(self.TickLabel, border=5, flag=wx.RIGHT)
    self.MaskLabel = wx.TextCtrl(self, style=wx.TE_READONLY | wx.TE_CENTER | wx.NO_BORDER)
    - self.TickSizer.AddWindow(self.MaskLabel, 1, border=5, flag=wx.RIGHT | wx.GROW)
    + self.TickSizer.Add(self.MaskLabel, 1, border=5, flag=wx.RIGHT | wx.GROW)
    self.TickTimeLabel = wx.StaticText(self)
    - self.TickSizer.AddWindow(self.TickTimeLabel)
    + self.TickSizer.Add(self.TickTimeLabel)
    self.GraphicsWindow = wx.ScrolledWindow(self, style=wx.HSCROLL | wx.VSCROLL)
    self.GraphicsWindow.SetBackgroundColour(wx.WHITE)
    @@ -284,7 +284,7 @@
    self.GraphicsWindow.Bind(wx.EVT_SIZE, self.OnGraphicsWindowResize)
    self.GraphicsWindow.Bind(wx.EVT_MOUSEWHEEL, self.OnGraphicsWindowMouseWheel)
    - main_sizer.AddWindow(self.GraphicsWindow, 1, flag=wx.GROW)
    + main_sizer.Add(self.GraphicsWindow, 1, flag=wx.GROW)
    self.GraphicsSizer = wx.BoxSizer(wx.VERTICAL)
    self.GraphicsWindow.SetSizer(self.GraphicsSizer)
    @@ -441,7 +441,7 @@
    x, y = panel.GetPosition()
    width, height = panel.GetSize()
    rect = wx.Rect(x, y, width, height)
    - if rect.InsideXY(x_mouse, y_mouse) or \
    + if rect.Contains(x_mouse, y_mouse) or \
    idx == 0 and y_mouse < 0 or \
    idx == len(self.GraphicPanels) - 1 and y_mouse > panel.GetPosition()[1]:
    panel.RefreshHighlight(x_mouse - x, y_mouse - y)
    @@ -488,7 +488,7 @@
    xw, yw = panel.GetPosition()
    width, height = panel.GetSize()
    bbox = wx.Rect(xw, yw, width, height)
    - if bbox.InsideXY(x_mouse, y_mouse):
    + if bbox.Contains(x_mouse, y_mouse):
    panel.ShowButtons(True)
    merge_type = GRAPH_PARALLEL
    if isinstance(panel, DebugVariableTextViewer) or panel.Is3DCanvas():
    @@ -497,9 +497,9 @@
    wx.CallAfter(self.MoveValue, variable, idx, True)
    else:
    rect = panel.GetAxesBoundingBox(True)
    - if rect.InsideXY(x_mouse, y_mouse):
    + if rect.Contains(x_mouse, y_mouse):
    merge_rect = wx.Rect(rect.x, rect.y, rect.width // 2, rect.height)
    - if merge_rect.InsideXY(x_mouse, y_mouse):
    + if merge_rect.Contains(x_mouse, y_mouse):
    merge_type = GRAPH_ORTHOGONAL
    wx.CallAfter(self.MergeGraphs, variable, idx, merge_type, force=True)
    else:
    @@ -510,7 +510,7 @@
    return
    width, height = self.GraphicsWindow.GetVirtualSize()
    rect = wx.Rect(0, 0, width, height)
    - if rect.InsideXY(x_mouse, y_mouse):
    + if rect.Contains(x_mouse, y_mouse):
    wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels), True)
    self.ForceRefresh()
    @@ -518,7 +518,7 @@
    self.GraphicsSizer.Clear()
    for panel in self.GraphicPanels:
    - self.GraphicsSizer.AddWindow(panel, flag=wx.GROW)
    + self.GraphicsSizer.Add(panel, flag=wx.GROW)
    self.GraphicsSizer.Layout()
    self.RefreshGraphicsWindowScrollbars()
    --- a/controls/DebugVariablePanel/DebugVariableTextViewer.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/DebugVariablePanel/DebugVariableTextViewer.py Thu Sep 02 22:18:14 2021 +0200
    @@ -195,7 +195,7 @@
    # Create buffered DC for drawing in panel
    width, height = self.GetSize()
    - bitmap = wx.EmptyBitmap(width, height)
    + bitmap = wx.Bitmap(width, height)
    dc = wx.BufferedDC(wx.PaintDC(self), bitmap)
    dc.Clear()
    @@ -203,8 +203,6 @@
    # rendering
    gc = wx.GCDC(dc)
    - gc.BeginDrawing()
    -
    # Get first item
    item = self.ItemsDict.values()[0]
    @@ -232,8 +230,6 @@
    # Draw other Viewer common elements
    self.DrawCommonElements(gc)
    - gc.EndDrawing()
    -
    def OnLeftDown(self, event):
    """
    Function called when mouse left button is pressed
    @@ -252,7 +248,7 @@
    # start a move drag'n drop of item variable
    x, y = event.GetPosition()
    item_path_bbox = wx.Rect(20, (height - h) / 2, w, h)
    - if item_path_bbox.InsideXY(x, y):
    + if item_path_bbox.Contains(x, y):
    self.ShowButtons(False)
    data = wx.TextDataObject(str((item.GetVariable(), "debug", "move")))
    dragSource = wx.DropSource(self)
    --- a/controls/DebugVariablePanel/GraphButton.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/DebugVariablePanel/GraphButton.py Thu Sep 02 22:18:14 2021 +0200
    @@ -146,7 +146,7 @@
    # Test if point is inside button
    w, h = self.Bitmap.GetSize()
    rect = wx.Rect(self.Position.x, self.Position.y, w, h)
    - return rect.InsideXY(x, y)
    + return rect.Contains(x, y)
    def ProcessCallback(self):
    """
    --- a/controls/DiscoveryPanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/DiscoveryPanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -44,17 +44,17 @@
    class DiscoveryPanel(wx.Panel, listmix.ColumnSorterMixin):
    def _init_coll_MainSizer_Items(self, parent):
    - parent.AddWindow(self.staticText1, 0, border=20, flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.GROW)
    - parent.AddWindow(self.ServicesList, 0, border=20, flag=wx.LEFT | wx.RIGHT | wx.GROW)
    - parent.AddSizer(self.ButtonGridSizer, 0, border=20, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.GROW)
    + parent.Add(self.staticText1, 0, border=20, flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.GROW)
    + parent.Add(self.ServicesList, 0, border=20, flag=wx.LEFT | wx.RIGHT | wx.GROW)
    + parent.Add(self.ButtonGridSizer, 0, border=20, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.GROW)
    def _init_coll_MainSizer_Growables(self, parent):
    parent.AddGrowableCol(0)
    parent.AddGrowableRow(1)
    def _init_coll_ButtonGridSizer_Items(self, parent):
    - parent.AddWindow(self.RefreshButton, 0, border=0, flag=0)
    - # parent.AddWindow(self.ByIPCheck, 0, border=0, flag=0)
    + parent.Add(self.RefreshButton, 0, border=0, flag=0)
    + # parent.Add(self.ByIPCheck, 0, border=0, flag=0)
    def _init_coll_ButtonGridSizer_Growables(self, parent):
    parent.AddGrowableCol(0)
    --- a/controls/DurationCellEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/DurationCellEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -46,12 +46,12 @@
    self.Duration = wx.TextCtrl(self, size=wx.Size(0, -1),
    style=wx.TE_PROCESS_ENTER)
    self.Duration.Bind(wx.EVT_KEY_DOWN, self.OnDurationChar)
    - main_sizer.AddWindow(self.Duration, flag=wx.GROW)
    + main_sizer.Add(self.Duration, flag=wx.GROW)
    # create browse button
    self.EditButton = wx.Button(self, label='...', size=wx.Size(30, -1))
    self.Bind(wx.EVT_BUTTON, self.OnEditButtonClick, self.EditButton)
    - main_sizer.AddWindow(self.EditButton, flag=wx.GROW)
    + main_sizer.Add(self.EditButton, flag=wx.GROW)
    self.Bind(wx.EVT_SIZE, self.OnSize)
    --- a/controls/EnhancedStatusBar.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/EnhancedStatusBar.py Thu Sep 02 22:18:14 2021 +0200
    @@ -85,12 +85,12 @@
    class EnhancedStatusBar(wx.StatusBar):
    - def __init__(self, parent, id=wx.ID_ANY, style=wx.ST_SIZEGRIP,
    + def __init__(self, parent, id=wx.ID_ANY, style=wx.STB_SIZEGRIP,
    name="EnhancedStatusBar"):
    """Default Class Constructor.
    EnhancedStatusBar.__init__(self, parent, id=wx.ID_ANY,
    - style=wx.ST_SIZEGRIP,
    + style=wx.STB_SIZEGRIP,
    name="EnhancedStatusBar")
    """
    @@ -100,7 +100,7 @@
    self._curPos = 0
    self._parent = parent
    - wx.EVT_SIZE(self, self.OnSize)
    + self.Bind(wx.EVT_SIZE, self.OnSize)
    wx.CallAfter(self.OnSize, None)
    def OnSize(self, event):
    --- a/controls/FolderTree.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/FolderTree.py Thu Sep 02 22:18:14 2021 +0200
    @@ -74,12 +74,12 @@
    self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnTreeItemCollapsed, self.Tree)
    self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnTreeBeginLabelEdit, self.Tree)
    self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnTreeEndLabelEdit, self.Tree)
    - main_sizer.AddWindow(self.Tree, 1, flag=wx.GROW)
    + main_sizer.Add(self.Tree, 1, flag=wx.GROW)
    if filter is not None:
    self.Filter = wx.ComboBox(self, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnFilterChanged, self.Filter)
    - main_sizer.AddWindow(self.Filter, flag=wx.GROW)
    + main_sizer.Add(self.Filter, flag=wx.GROW)
    else:
    self.Filter = None
    --- a/controls/LibraryPanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/LibraryPanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -77,12 +77,12 @@
    search_textctrl = self.SearchCtrl.GetChildren()[0]
    search_textctrl.Bind(wx.EVT_CHAR, self.OnKeyDown)
    - main_sizer.AddWindow(self.SearchCtrl, flag=wx.GROW)
    + main_sizer.Add(self.SearchCtrl, flag=wx.GROW)
    # Add Splitter window for tree and block comment to main sizer
    splitter_window = wx.SplitterWindow(self)
    splitter_window.SetSashGravity(1.0)
    - main_sizer.AddWindow(splitter_window, flag=wx.GROW)
    + main_sizer.Add(splitter_window, flag=wx.GROW)
    # Add TreeCtrl for functions and function blocks library in splitter
    # window
    @@ -216,7 +216,7 @@
    # Set data associated to tree item (only save that item is a
    # category)
    - self.Tree.SetPyData(category_item, {"type": CATEGORY})
    + self.Tree.SetItemData(category_item, {"type": CATEGORY})
    # Iterate over functions and function blocks defined in library
    # category add a tree item to category tree item for each of
    @@ -253,7 +253,7 @@
    if blocktype["extensible"] else None),
    "comment": _(comment) + blocktype.get("usage", "")
    }
    - self.Tree.SetPyData(blocktype_item, block_data)
    + self.Tree.SetItemData(blocktype_item, block_data)
    # Select block tree item in tree if it corresponds to
    # previously selected one
    --- a/controls/LocationCellEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/LocationCellEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -46,12 +46,12 @@
    self.Location = wx.TextCtrl(self, size=wx.Size(0, -1),
    style=wx.TE_PROCESS_ENTER)
    self.Location.Bind(wx.EVT_KEY_DOWN, self.OnLocationChar)
    - main_sizer.AddWindow(self.Location, flag=wx.GROW)
    + main_sizer.Add(self.Location, flag=wx.GROW)
    # create browse button
    self.BrowseButton = wx.Button(self, label='...', size=wx.Size(30, -1))
    self.BrowseButton.Bind(wx.EVT_BUTTON, self.OnBrowseButtonClick)
    - main_sizer.AddWindow(self.BrowseButton, flag=wx.GROW)
    + main_sizer.Add(self.BrowseButton, flag=wx.GROW)
    self.Bind(wx.EVT_SIZE, self.OnSize)
    --- a/controls/LogViewer.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/LogViewer.py Thu Sep 02 22:18:14 2021 +0200
    @@ -99,8 +99,8 @@
    width, height = self.GetClientSize()
    range_rect = self.GetRangeRect()
    thumb_rect = self.GetThumbRect()
    - if range_rect.InsideXY(posx, posy):
    - if thumb_rect.InsideXY(posx, posy):
    + if range_rect.Contains(posx, posy):
    + if thumb_rect.Contains(posx, posy):
    self.ThumbScrollingStartPos = wx.Point(posx, posy)
    elif posy < thumb_rect.y:
    self.Parent.ScrollToLast()
    @@ -139,7 +139,6 @@
    def OnPaint(self, event):
    dc = wx.BufferedPaintDC(self)
    dc.Clear()
    - dc.BeginDrawing()
    gc = wx.GCDC(dc)
    @@ -179,7 +178,6 @@
    gc.DrawRectangle(thumb_rect.x, thumb_rect.y,
    thumb_rect.width, thumb_rect.height)
    - dc.EndDrawing()
    event.Skip()
    @@ -207,7 +205,7 @@
    def HitTest(self, x, y):
    rect = wx.Rect(self.Position.x, self.Position.y,
    self.Size.width, self.Size.height)
    - if rect.InsideXY(x, y):
    + if rect.Contains(x, y):
    return True
    return False
    @@ -303,7 +301,7 @@
    main_sizer.AddGrowableRow(1)
    filter_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - main_sizer.AddSizer(filter_sizer, border=5, flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.GROW)
    + main_sizer.Add(filter_sizer, border=5, flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.GROW)
    self.MessageFilter = wx.ComboBox(self, style=wx.CB_READONLY)
    self.MessageFilter.Append(_("All"))
    @@ -312,7 +310,7 @@
    for level in levels:
    self.MessageFilter.Append(_(level))
    self.Bind(wx.EVT_COMBOBOX, self.OnMessageFilterChanged, self.MessageFilter)
    - filter_sizer.AddWindow(self.MessageFilter, 1, border=5, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
    + filter_sizer.Add(self.MessageFilter, 1, border=5, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
    self.SearchMessage = wx.SearchCtrl(self, style=wx.TE_PROCESS_ENTER)
    self.SearchMessage.ShowSearchButton(True)
    @@ -322,18 +320,18 @@
    self.OnSearchMessageSearchButtonClick, self.SearchMessage)
    self.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN,
    self.OnSearchMessageCancelButtonClick, self.SearchMessage)
    - filter_sizer.AddWindow(self.SearchMessage, 3, border=5, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
    + filter_sizer.Add(self.SearchMessage, 3, border=5, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
    self.CleanButton = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap("Clean"),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - self.CleanButton.SetToolTipString(_("Clean log messages"))
    + self.CleanButton.SetToolTip(_("Clean log messages"))
    self.Bind(wx.EVT_BUTTON, self.OnCleanButton, self.CleanButton)
    - filter_sizer.AddWindow(self.CleanButton)
    + filter_sizer.Add(self.CleanButton)
    message_panel_sizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0)
    message_panel_sizer.AddGrowableCol(0)
    message_panel_sizer.AddGrowableRow(0)
    - main_sizer.AddSizer(message_panel_sizer, border=5, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.GROW)
    + main_sizer.Add(message_panel_sizer, border=5, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.GROW)
    self.MessagePanel = wx.Panel(self)
    if wx.Platform == '__WXMSW__':
    @@ -349,10 +347,10 @@
    self.MessagePanel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnMessagePanelEraseBackground)
    self.MessagePanel.Bind(wx.EVT_PAINT, self.OnMessagePanelPaint)
    self.MessagePanel.Bind(wx.EVT_SIZE, self.OnMessagePanelResize)
    - message_panel_sizer.AddWindow(self.MessagePanel, flag=wx.GROW)
    + message_panel_sizer.Add(self.MessagePanel, flag=wx.GROW)
    self.MessageScrollBar = LogScrollBar(self, wx.Size(16, -1))
    - message_panel_sizer.AddWindow(self.MessageScrollBar, flag=wx.GROW)
    + message_panel_sizer.Add(self.MessageScrollBar, flag=wx.GROW)
    self.SetSizer(main_sizer)
    @@ -534,10 +532,9 @@
    def RefreshView(self):
    width, height = self.MessagePanel.GetClientSize()
    - bitmap = wx.EmptyBitmap(width, height)
    + bitmap = wx.Bitmap(width, height)
    dc = wx.BufferedDC(wx.ClientDC(self.MessagePanel), bitmap)
    dc.Clear()
    - dc.BeginDrawing()
    if self.CurrentMessage is not None:
    @@ -559,8 +556,6 @@
    draw_date = message.Date != previous_message.Date
    message = previous_message
    - dc.EndDrawing()
    -
    self.MessageScrollBar.RefreshThumbPosition()
    def IsPLCLogEmpty(self):
    --- a/controls/PouInstanceVariablesPanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/PouInstanceVariablesPanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -132,7 +132,7 @@
    self.ParentButton = wx.lib.buttons.GenBitmapButton(
    self, bitmap=GetBitmap("top"), size=wx.Size(28, 28), style=wx.NO_BORDER)
    - self.ParentButton.SetToolTipString(_("Parent instance"))
    + self.ParentButton.SetToolTip(_("Parent instance"))
    self.Bind(wx.EVT_BUTTON, self.OnParentButtonClick,
    self.ParentButton)
    @@ -142,7 +142,7 @@
    self.DebugButton = wx.lib.buttons.GenBitmapButton(
    self, bitmap=GetBitmap("debug_instance"), size=wx.Size(28, 28), style=wx.NO_BORDER)
    - self.DebugButton.SetToolTipString(_("Debug instance"))
    + self.DebugButton.SetToolTip(_("Debug instance"))
    self.Bind(wx.EVT_BUTTON, self.OnDebugButtonClick,
    self.DebugButton)
    @@ -175,15 +175,15 @@
    self.DebugButtonCallback, self.DebugButtonDClickCallback)}
    buttons_sizer = wx.FlexGridSizer(cols=3, hgap=0, rows=1, vgap=0)
    - buttons_sizer.AddWindow(self.ParentButton)
    - buttons_sizer.AddWindow(self.InstanceChoice, flag=wx.GROW)
    - buttons_sizer.AddWindow(self.DebugButton)
    + buttons_sizer.Add(self.ParentButton)
    + buttons_sizer.Add(self.InstanceChoice, flag=wx.GROW)
    + buttons_sizer.Add(self.DebugButton)
    buttons_sizer.AddGrowableCol(1)
    buttons_sizer.AddGrowableRow(0)
    main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
    - main_sizer.AddSizer(buttons_sizer, flag=wx.GROW)
    - main_sizer.AddWindow(self.VariablesList, flag=wx.GROW)
    + main_sizer.Add(buttons_sizer, flag=wx.GROW)
    + main_sizer.Add(self.VariablesList, flag=wx.GROW)
    main_sizer.AddGrowableCol(0)
    main_sizer.AddGrowableRow(1)
    --- a/controls/ProjectPropertiesPanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/ProjectPropertiesPanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -57,7 +57,7 @@
    border |= wx.BOTTOM
    st = wx.StaticText(parent, label=label)
    - sizer.AddWindow(st, border=10,
    + sizer.Add(st, border=10,
    flag=wx.ALIGN_CENTER_VERTICAL | border | wx.LEFT)
    tc = wx.TextCtrl(parent, style=wx.TE_PROCESS_ENTER)
    @@ -65,7 +65,7 @@
    callback = self.GetTextCtrlChangedFunction(tc, name)
    self.Bind(wx.EVT_TEXT_ENTER, callback, tc)
    tc.Bind(wx.EVT_KILL_FOCUS, callback)
    - sizer.AddWindow(tc, border=10,
    + sizer.Add(tc, border=10,
    flag=wx.GROW | border | wx.RIGHT)
    def __init__(self, parent, controller=None, window=None, enable_required=True, scrolling=True):
    @@ -125,19 +125,19 @@
    pageSize_st = wx.StaticText(self.GraphicsPanel,
    label=_('Page Size (optional):'))
    - graphicpanel_sizer.AddWindow(
    + graphicpanel_sizer.Add(
    pageSize_st, border=10,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.LEFT | wx.RIGHT)
    pageSize_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5)
    pageSize_sizer.AddGrowableCol(1)
    - graphicpanel_sizer.AddSizer(pageSize_sizer, border=10,
    + graphicpanel_sizer.Add(pageSize_sizer, border=10,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    for name, label in [('PageWidth', _('Width:')),
    ('PageHeight', _('Height:'))]:
    st = wx.StaticText(self.GraphicsPanel, label=label)
    - pageSize_sizer.AddWindow(st, border=12,
    + pageSize_sizer.Add(st, border=12,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT)
    sp = wx.SpinCtrl(self.GraphicsPanel,
    @@ -146,15 +146,15 @@
    callback = self.GetPageSizeChangedFunction(sp, name)
    self.Bind(wx.EVT_TEXT_ENTER, callback, sp)
    sp.Bind(wx.EVT_KILL_FOCUS, callback)
    - pageSize_sizer.AddWindow(sp, flag=wx.GROW)
    + pageSize_sizer.Add(sp, flag=wx.GROW)
    scaling_st = wx.StaticText(self.GraphicsPanel,
    label=_('Grid Resolution:'))
    - graphicpanel_sizer.AddWindow(scaling_st, border=10,
    + graphicpanel_sizer.Add(scaling_st, border=10,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    scaling_nb = wx.Notebook(self.GraphicsPanel)
    - graphicpanel_sizer.AddWindow(scaling_nb, border=10,
    + graphicpanel_sizer.Add(scaling_nb, border=10,
    flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.Scalings = {}
    @@ -173,7 +173,7 @@
    border = wx.BOTTOM
    st = wx.StaticText(scaling_panel, label=label)
    - scalingpanel_sizer.AddWindow(
    + scalingpanel_sizer.Add(
    st, border=10,
    flag=wx.ALIGN_CENTER_VERTICAL | border | wx.LEFT)
    @@ -183,7 +183,7 @@
    callback = self.GetScalingChangedFunction(sp, language, name)
    self.Bind(wx.EVT_TEXT_ENTER, callback, sp)
    sp.Bind(wx.EVT_KILL_FOCUS, callback)
    - scalingpanel_sizer.AddWindow(sp, border=10,
    + scalingpanel_sizer.Add(sp, border=10,
    flag=wx.GROW | border | wx.RIGHT)
    self.Scalings[language] = scaling_controls
    @@ -206,18 +206,18 @@
    language_label = wx.StaticText(self.MiscellaneousPanel,
    label=_('Language (optional):'))
    - miscellaneouspanel_sizer.AddWindow(language_label, border=10,
    + miscellaneouspanel_sizer.Add(language_label, border=10,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.LEFT)
    self.Language = wx.ComboBox(self.MiscellaneousPanel,
    style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnLanguageChanged, self.Language)
    - miscellaneouspanel_sizer.AddWindow(self.Language, border=10,
    + miscellaneouspanel_sizer.Add(self.Language, border=10,
    flag=wx.GROW | wx.TOP | wx.RIGHT)
    description_label = wx.StaticText(
    self.MiscellaneousPanel, label=_('Content Description (optional):'))
    - miscellaneouspanel_sizer.AddWindow(description_label, border=10,
    + miscellaneouspanel_sizer.Add(description_label, border=10,
    flag=wx.BOTTOM | wx.LEFT)
    self.ContentDescription = wx.TextCtrl(
    @@ -227,7 +227,7 @@
    self.ContentDescription)
    self.ContentDescription.Bind(wx.EVT_KILL_FOCUS,
    self.OnContentDescriptionChanged)
    - miscellaneouspanel_sizer.AddWindow(self.ContentDescription, border=10,
    + miscellaneouspanel_sizer.Add(self.ContentDescription, border=10,
    flag=wx.GROW | wx.BOTTOM | wx.RIGHT)
    self.AddPage(self.MiscellaneousPanel, _("Miscellaneous"))
    --- a/controls/SearchResultPanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/SearchResultPanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -52,16 +52,16 @@
    class SearchResultPanel(wx.Panel):
    def _init_coll_MainSizer_Items(self, parent):
    - parent.AddSizer(self.HeaderSizer, 0, border=0, flag=wx.GROW)
    - parent.AddWindow(self.SearchResultsTree, 1, border=0, flag=wx.GROW)
    + parent.Add(self.HeaderSizer, 0, border=0, flag=wx.GROW)
    + parent.Add(self.SearchResultsTree, 1, border=0, flag=wx.GROW)
    def _init_coll_MainSizer_Growables(self, parent):
    parent.AddGrowableCol(0)
    parent.AddGrowableRow(1)
    def _init_coll_HeaderSizer_Items(self, parent):
    - parent.AddWindow(self.HeaderLabel, 1, border=5, flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
    - parent.AddWindow(self.ResetButton, 0, border=0, flag=0)
    + parent.Add(self.HeaderLabel, 1, border=5, flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
    + parent.Add(self.ResetButton, 0, border=0, flag=0)
    def _init_coll_HeaderSizer_Growables(self, parent):
    parent.AddGrowableCol(0)
    @@ -90,7 +90,7 @@
    self.ResetButton = wx.lib.buttons.GenBitmapButton(
    self, bitmap=GetBitmap("reset"),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - self.ResetButton.SetToolTipString(_("Reset search result"))
    + self.ResetButton.SetToolTip(_("Reset search result"))
    self.Bind(wx.EVT_BUTTON, self.OnResetButton, self.ResetButton)
    self._init_sizers()
    --- a/controls/TextCtrlAutoComplete.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/TextCtrlAutoComplete.py Thu Sep 02 22:18:14 2021 +0200
    @@ -97,7 +97,7 @@
    parent_rect = wx.Rect(0, -parent_size[1], parent_size[0], parent_size[1])
    if selected != wx.NOT_FOUND:
    wx.CallAfter(self.Parent.SetValueFromSelected, self.ListBox.GetString(selected))
    - elif parent_rect.InsideXY(event.GetX(), event.GetY()):
    + elif parent_rect.Contains(event.GetX(), event.GetY()):
    result, x, y = self.Parent.HitTest(wx.Point(event.GetX(), event.GetY() + parent_size[1]))
    if result != wx.TE_HT_UNKNOWN:
    self.Parent.SetInsertionPoint(self.Parent.XYToPosition(x, y))
    --- a/controls/VariablePanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/controls/VariablePanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -200,8 +200,7 @@
    retain=self.Parent.ElementType != "function" and var_class in ["Local", "Input", "Output", "Global"],
    non_retain=self.Parent.ElementType != "function" and var_class in ["Local", "Input", "Output"])
    if len(options) > 1:
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(",".join(map(_, options)))
    + editor = wx.grid.GridCellChoiceEditor(map(_, options))
    else:
    grid.SetReadOnly(row, col, True)
    elif col != 0 and self._GetRowEdit(row):
    @@ -212,8 +211,7 @@
    elif colname == "Initial Value":
    if var_class not in ["External", "InOut"]:
    if self.Parent.Controler.IsEnumeratedType(var_type):
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(",".join([""] + self.Parent.Controler.GetEnumeratedDataValues(var_type)))
    + editor = wx.grid.GridCellChoiceEditor([""] + self.Parent.Controler.GetEnumeratedDataValues(var_type))
    else:
    editor = wx.grid.GridCellTextEditor()
    renderer = wx.grid.GridCellStringRenderer()
    @@ -229,11 +227,10 @@
    if len(self.Parent.ClassList) == 1:
    grid.SetReadOnly(row, col, True)
    else:
    - editor = wx.grid.GridCellChoiceEditor()
    excluded = []
    if self.Parent.IsFunctionBlockType(var_type):
    excluded.extend(["Local", "Temp"])
    - editor.SetParameters(",".join([_(choice) for choice in self.Parent.ClassList if choice not in excluded]))
    + editor = wx.grid.GridCellChoiceEditor([_(choice) for choice in self.Parent.ClassList if choice not in excluded])
    elif colname != "Documentation":
    grid.SetReadOnly(row, col, True)
    @@ -456,32 +453,32 @@
    controls_sizer = wx.FlexGridSizer(cols=10, hgap=5, rows=1, vgap=5)
    controls_sizer.AddGrowableCol(5)
    controls_sizer.AddGrowableRow(0)
    - self.MainSizer.AddSizer(controls_sizer, border=5, flag=wx.GROW | wx.ALL)
    + self.MainSizer.Add(controls_sizer, border=5, flag=wx.GROW | wx.ALL)
    self.ReturnTypeLabel = wx.StaticText(self, label=_('Return Type:'))
    - controls_sizer.AddWindow(self.ReturnTypeLabel, flag=wx.ALIGN_CENTER_VERTICAL)
    + controls_sizer.Add(self.ReturnTypeLabel, flag=wx.ALIGN_CENTER_VERTICAL)
    self.ReturnType = wx.ComboBox(self,
    size=wx.Size(145, -1), style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnReturnTypeChanged, self.ReturnType)
    - controls_sizer.AddWindow(self.ReturnType)
    + controls_sizer.Add(self.ReturnType)
    self.DescriptionLabel = wx.StaticText(self, label=_('Description:'))
    - controls_sizer.AddWindow(self.DescriptionLabel, flag=wx.ALIGN_CENTER_VERTICAL)
    + controls_sizer.Add(self.DescriptionLabel, flag=wx.ALIGN_CENTER_VERTICAL)
    self.Description = wx.TextCtrl(self,
    size=wx.Size(250, -1), style=wx.TE_PROCESS_ENTER)
    self.Bind(wx.EVT_TEXT_ENTER, self.OnDescriptionChanged, self.Description)
    self.Description.Bind(wx.EVT_KILL_FOCUS, self.OnDescriptionChanged)
    - controls_sizer.AddWindow(self.Description)
    + controls_sizer.Add(self.Description)
    class_filter_label = wx.StaticText(self, label=_('Class Filter:'))
    - controls_sizer.AddWindow(class_filter_label, flag=wx.ALIGN_CENTER_VERTICAL)
    + controls_sizer.Add(class_filter_label, flag=wx.ALIGN_CENTER_VERTICAL)
    self.ClassFilter = wx.ComboBox(self,
    size=wx.Size(145, -1), style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnClassFilter, self.ClassFilter)
    - controls_sizer.AddWindow(self.ClassFilter)
    + controls_sizer.Add(self.ClassFilter)
    for name, bitmap, help in [
    ("AddButton", "add_element", _("Add variable")),
    @@ -490,19 +487,19 @@
    ("DownButton", "down", _("Move variable down"))]:
    button = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - controls_sizer.AddWindow(button)
    + controls_sizer.Add(button)
    self.VariablesGrid = CustomGrid(self, style=wx.VSCROLL | wx.HSCROLL)
    self.VariablesGrid.SetDropTarget(VariableDropTarget(self))
    - self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
    + self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING,
    self.OnVariablesGridCellChange)
    self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK,
    self.OnVariablesGridCellLeftClick)
    self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
    self.OnVariablesGridEditorShown)
    - self.MainSizer.AddWindow(self.VariablesGrid, flag=wx.GROW)
    + self.MainSizer.Add(self.VariablesGrid, flag=wx.GROW)
    self.SetSizer(self.MainSizer)
    @@ -848,7 +845,7 @@
    # build a submenu containing standard IEC types
    base_menu = wx.Menu(title='')
    for base_type in self.Controler.GetBaseTypes():
    - item = base_menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=base_type)
    + item = base_menu.Append(wx.ID_ANY, helpString='', kind=wx.ITEM_NORMAL, item=base_type)
    self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(base_type), item)
    type_menu.AppendMenu(wx.ID_ANY, _("Base Types"), base_menu)
    @@ -858,7 +855,7 @@
    datatype_menu = wx.Menu(title='')
    datatypes = self.Controler.GetDataTypes(basetypes=False, confnodetypes=False)
    for datatype in datatypes:
    - item = datatype_menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=datatype)
    + item = datatype_menu.Append(wx.ID_ANY, helpString='', kind=wx.ITEM_NORMAL, item=datatype)
    self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), item)
    type_menu.AppendMenu(wx.ID_ANY, _("User Data Types"), datatype_menu)
    @@ -869,7 +866,7 @@
    # build a submenu containing confnode types
    confnode_datatype_menu = wx.Menu(title='')
    for datatype in category["list"]:
    - item = confnode_datatype_menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=datatype)
    + item = confnode_datatype_menu.Append(wx.ID_ANY, helpString='', kind=wx.ITEM_NORMAL, item=datatype)
    self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), item)
    type_menu.AppendMenu(wx.ID_ANY, category["name"], confnode_datatype_menu)
    @@ -883,13 +880,13 @@
    functionblock_menu = wx.Menu(title='')
    fbtypes = self.Controler.GetFunctionBlockTypes(self.TagName)
    for functionblock_type in fbtypes:
    - item = functionblock_menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=functionblock_type)
    + item = functionblock_menu.Append(wx.ID_ANY, helpString='', kind=wx.ITEM_NORMAL, item=functionblock_type)
    self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(functionblock_type), item)
    type_menu.AppendMenu(wx.ID_ANY, _("Function Block Types"), functionblock_menu)
    def BuildArrayTypesMenu(self, type_menu):
    - item = type_menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=_("Array"))
    + item = type_menu.Append(wx.ID_ANY, helpString='', kind=wx.ITEM_NORMAL, item=_("Array"))
    self.Bind(wx.EVT_MENU, self.VariableArrayTypeFunction, item)
    def OnVariablesGridEditorShown(self, event):
    @@ -916,7 +913,7 @@
    corner_y = rect.y + self.VariablesGrid.GetColLabelSize()
    # pop up this new menu
    - self.VariablesGrid.PopupMenuXY(type_menu, corner_x, corner_y)
    + self.VariablesGrid.PopupMenu(type_menu, corner_x, corner_y)
    type_menu.Destroy()
    event.Veto()
    value = self.Values[row].Type
    --- a/dialogs/ActionBlockDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/ActionBlockDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -85,29 +85,24 @@
    readonly = False
    colname = self.GetColLabelValue(col, False)
    if colname == "Qualifier":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(self.Parent.QualifierList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.QualifierList)
    if colname == "Duration":
    editor = wx.grid.GridCellTextEditor()
    renderer = wx.grid.GridCellStringRenderer()
    readonly = not self.Parent.DurationList[self.data[row].qualifier]
    elif colname == "Type":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(self.Parent.TypeList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.TypeList)
    elif colname == "Value":
    value_type = self.data[row].type
    if value_type == "Action":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(self.Parent.ActionList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.ActionList)
    elif value_type == "Variable":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(self.Parent.VariableList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.VariableList)
    elif value_type == "Inline":
    editor = wx.grid.GridCellTextEditor()
    renderer = wx.grid.GridCellStringRenderer()
    elif colname == "Indicator":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(self.Parent.VariableList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.VariableList)
    grid.SetCellEditor(row, col, editor)
    grid.SetCellRenderer(row, col, renderer)
    @@ -133,11 +128,11 @@
    top_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
    top_sizer.AddGrowableCol(0)
    top_sizer.AddGrowableRow(0)
    - main_sizer.AddSizer(top_sizer, border=20,
    + main_sizer.Add(top_sizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    actions_label = wx.StaticText(self, label=_('Actions:'))
    - top_sizer.AddWindow(actions_label, flag=wx.ALIGN_BOTTOM)
    + top_sizer.Add(actions_label, flag=wx.ALIGN_BOTTOM)
    for name, bitmap, help in [
    ("AddButton", "add_element", _("Add action")),
    @@ -147,21 +142,21 @@
    button = wx.lib.buttons.GenBitmapButton(
    self, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - top_sizer.AddWindow(button)
    + top_sizer.Add(button)
    self.ActionsGrid = CustomGrid(self, size=wx.Size(-1, 250), style=wx.VSCROLL)
    self.ActionsGrid.DisableDragGridSize()
    self.ActionsGrid.EnableScrolling(False, True)
    - self.ActionsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
    + self.ActionsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING,
    self.OnActionsGridCellChange)
    - main_sizer.AddSizer(self.ActionsGrid, border=20,
    + main_sizer.Add(self.ActionsGrid, border=20,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
    - main_sizer.AddSizer(button_sizer, border=20,
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + main_sizer.Add(button_sizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/ArrayTypeDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/ArrayTypeDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -50,31 +50,31 @@
    main_sizer.AddGrowableRow(1)
    top_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - main_sizer.AddSizer(top_sizer, border=20,
    + main_sizer.Add(top_sizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    basetype_label = wx.StaticText(self, label=_('Base Type:'))
    - top_sizer.AddWindow(basetype_label, 1, flag=wx.ALIGN_BOTTOM)
    + top_sizer.Add(basetype_label, 1, flag=wx.ALIGN_BOTTOM)
    self.BaseType = wx.ComboBox(self, style=wx.CB_READONLY)
    - top_sizer.AddWindow(self.BaseType, 1, flag=wx.GROW)
    + top_sizer.Add(self.BaseType, 1, flag=wx.GROW)
    self.Dimensions = CustomEditableListBox(self, label=_("Dimensions:"),
    - style=(wx.gizmos.EL_ALLOW_NEW |
    - wx.gizmos.EL_ALLOW_EDIT |
    - wx.gizmos.EL_ALLOW_DELETE))
    + style=(wx.adv.EL_ALLOW_NEW |
    + wx.adv.EL_ALLOW_EDIT |
    + wx.adv.EL_ALLOW_DELETE))
    for func in ["_OnLabelEndEdit",
    "_OnAddButton",
    "_OnDelButton",
    "_OnUpButton",
    "_OnDownButton"]:
    setattr(self.Dimensions, func, self.OnDimensionsChanged)
    - main_sizer.AddSizer(self.Dimensions, border=20,
    + main_sizer.Add(self.Dimensions, border=20,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
    - main_sizer.AddSizer(button_sizer, border=20,
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + main_sizer.Add(button_sizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/BlockPreviewDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/BlockPreviewDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -75,8 +75,7 @@
    # Add default dialog buttons sizer
    self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK,
    - self.ButtonSizer.GetAffirmativeButton())
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    self.Element = None # Graphic element to display in preview
    self.MinElementSize = None # Graphic element minimal size
    @@ -120,7 +119,7 @@
    # Create a sizer for dividing parameters in two columns
    self.ColumnSizer = wx.BoxSizer(wx.HORIZONTAL)
    - self.MainSizer.AddSizer(self.ColumnSizer, border=20,
    + self.MainSizer.Add(self.ColumnSizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    # Create a sizer for left column
    @@ -129,7 +128,7 @@
    self.LeftGridSizer.AddGrowableCol(0)
    if left_growable_row is not None:
    self.LeftGridSizer.AddGrowableRow(left_growable_row)
    - self.ColumnSizer.AddSizer(self.LeftGridSizer, 1, border=5,
    + self.ColumnSizer.Add(self.LeftGridSizer, 1, border=5,
    flag=wx.GROW | wx.RIGHT | wx.EXPAND)
    # Create a sizer for right column
    @@ -138,7 +137,7 @@
    self.RightGridSizer.AddGrowableCol(0)
    if right_growable_row is not None:
    self.RightGridSizer.AddGrowableRow(right_growable_row)
    - self.ColumnSizer.AddSizer(self.RightGridSizer, 1, border=5,
    + self.ColumnSizer.Add(self.RightGridSizer, 1, border=5,
    flag=wx.GROW | wx.LEFT)
    self.SetSizer(self.MainSizer)
    --- a/dialogs/BrowseLocationsDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/BrowseLocationsDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -76,7 +76,7 @@
    main_sizer.AddGrowableRow(1)
    locations_label = wx.StaticText(self, label=_('Locations available:'))
    - main_sizer.AddWindow(locations_label, border=20,
    + main_sizer.Add(locations_label, border=20,
    flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.GROW)
    self.LocationsTree = wx.TreeCtrl(self,
    @@ -88,7 +88,7 @@
    self.LocationsTree.SetInitialSize(wx.Size(-1, 300))
    self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnLocationsTreeItemActivated,
    self.LocationsTree)
    - main_sizer.AddWindow(self.LocationsTree, border=20,
    + main_sizer.Add(self.LocationsTree, border=20,
    flag=wx.LEFT | wx.RIGHT | wx.GROW)
    self.RenameCheckBox = wx.CheckBox(self, label=_("Rename variable to signal name"))
    @@ -97,37 +97,37 @@
    self.RenameCheckBox.SetValue(default_checked)
    self.do_rename = default_checked
    - main_sizer.AddWindow(self.RenameCheckBox, border=20,
    + main_sizer.Add(self.RenameCheckBox, border=20,
    flag=wx.LEFT | wx.RIGHT | wx.GROW)
    button_gridsizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
    button_gridsizer.AddGrowableCol(1)
    button_gridsizer.AddGrowableCol(3)
    button_gridsizer.AddGrowableRow(0)
    - main_sizer.AddSizer(button_gridsizer, border=20,
    + main_sizer.Add(button_gridsizer, border=20,
    flag=wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.GROW)
    direction_label = wx.StaticText(self, label=_('Direction:'))
    - button_gridsizer.AddWindow(direction_label,
    + button_gridsizer.Add(direction_label,
    flag=wx.ALIGN_CENTER_VERTICAL)
    self.DirFilterChoice = wx.ComboBox(self, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnFilterChoice, self.DirFilterChoice)
    - button_gridsizer.AddWindow(self.DirFilterChoice,
    + button_gridsizer.Add(self.DirFilterChoice,
    flag=wx.GROW | wx.ALIGN_CENTER_VERTICAL)
    filter_label = wx.StaticText(self, label=_('Type:'))
    - button_gridsizer.AddWindow(filter_label,
    + button_gridsizer.Add(filter_label,
    flag=wx.ALIGN_CENTER_VERTICAL)
    self.TypeFilterChoice = wx.ComboBox(self, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnFilterChoice, self.TypeFilterChoice)
    - button_gridsizer.AddWindow(self.TypeFilterChoice,
    + button_gridsizer.Add(self.TypeFilterChoice,
    flag=wx.GROW | wx.ALIGN_CENTER_VERTICAL)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
    - button_gridsizer.AddSizer(button_sizer, flag=wx.ALIGN_RIGHT)
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + button_gridsizer.Add(button_sizer, flag=wx.ALIGN_RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/BrowseValuesLibraryDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/BrowseValuesLibraryDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -51,13 +51,13 @@
    self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10)
    - self.flexGridSizer1.AddWindow(self.staticText1, 0, border=20, flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    - self.flexGridSizer1.AddWindow(self.ValuesLibrary, 0, border=20, flag=wx.GROW | wx.LEFT | wx.RIGHT)
    - self.flexGridSizer1.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    + self.flexGridSizer1.Add(self.staticText1, 0, border=20, flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    + self.flexGridSizer1.Add(self.ValuesLibrary, 0, border=20, flag=wx.GROW | wx.LEFT | wx.RIGHT)
    + self.flexGridSizer1.Add(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.flexGridSizer1.AddGrowableCol(0)
    self.flexGridSizer1.AddGrowableRow(1)
    --- a/dialogs/ConnectionDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/ConnectionDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -59,7 +59,7 @@
    # Create label for connection type
    type_label = wx.StaticText(self, label=_('Type:'))
    - self.LeftGridSizer.AddWindow(type_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(type_label, flag=wx.GROW)
    # Create radio buttons for selecting connection type
    self.TypeRadioButtons = {}
    @@ -70,27 +70,27 @@
    style=(wx.RB_GROUP if first else 0))
    radio_button.SetValue(first)
    self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, radio_button)
    - self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW)
    + self.LeftGridSizer.Add(radio_button, flag=wx.GROW)
    self.TypeRadioButtons[type] = radio_button
    first = False
    # Create label for connection name
    name_label = wx.StaticText(self, label=_('Name:'))
    - self.LeftGridSizer.AddWindow(name_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(name_label, flag=wx.GROW)
    # Create text control for defining connection name
    self.ConnectionName = wx.TextCtrl(self)
    self.ConnectionName.SetMinSize(wx.Size(200, -1))
    self.Bind(wx.EVT_TEXT, self.OnNameChanged, self.ConnectionName)
    - self.LeftGridSizer.AddWindow(self.ConnectionName, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.ConnectionName, flag=wx.GROW)
    # Add preview panel and associated label to sizers
    self.Preview.SetMinSize(wx.Size(-1, 100))
    - self.LeftGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    - self.LeftGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.PreviewLabel, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.Preview, flag=wx.GROW)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(
    + self.MainSizer.Add(
    self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.ColumnSizer.RemoveSizer(self.RightGridSizer)
    @@ -99,10 +99,10 @@
    # of POU
    if apply_button:
    self.ApplyToAllButton = wx.Button(self, label=_("Propagate Name"))
    - self.ApplyToAllButton.SetToolTipString(
    + self.ApplyToAllButton.SetToolTip(
    _("Apply name modification to all continuations with the same name"))
    self.Bind(wx.EVT_BUTTON, self.OnApplyToAll, self.ApplyToAllButton)
    - self.ButtonSizer.AddWindow(self.ApplyToAllButton, flag=wx.LEFT)
    + self.ButtonSizer.Add(self.ApplyToAllButton, flag=wx.LEFT)
    else:
    self.ConnectionName.ChangeValue(
    controller.GenerateNewName(
    --- a/dialogs/DurationEditorDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/DurationEditorDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -68,7 +68,7 @@
    main_sizer.AddGrowableRow(0)
    controls_sizer = wx.FlexGridSizer(cols=len(CONTROLS), hgap=10, rows=2, vgap=10)
    - main_sizer.AddSizer(controls_sizer, border=20,
    + main_sizer.Add(controls_sizer, border=20,
    flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.GROW)
    controls = []
    @@ -85,14 +85,14 @@
    controls.append((st, txtctrl))
    for st, txtctrl in controls:
    - controls_sizer.AddWindow(st, flag=wx.GROW)
    + controls_sizer.Add(st, flag=wx.GROW)
    for st, txtctrl in controls:
    - controls_sizer.AddWindow(txtctrl, flag=wx.GROW)
    + controls_sizer.Add(txtctrl, flag=wx.GROW)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
    - main_sizer.AddSizer(button_sizer, border=20,
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + main_sizer.Add(button_sizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/FBDBlockDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/FBDBlockDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -68,7 +68,7 @@
    # Create static box around library panel
    type_staticbox = wx.StaticBox(self, label=_('Type:'))
    left_staticboxsizer = wx.StaticBoxSizer(type_staticbox, wx.VERTICAL)
    - self.LeftGridSizer.AddSizer(left_staticboxsizer, border=5, flag=wx.GROW)
    + self.LeftGridSizer.Add(left_staticboxsizer, border=5, flag=wx.GROW)
    # Create Library panel and add it to static box
    self.LibraryPanel = LibraryPanel(self)
    @@ -77,65 +77,65 @@
    # Set function to call when selection in Library panel changed
    setattr(self.LibraryPanel, "_OnTreeItemSelected",
    self.OnLibraryTreeItemSelected)
    - left_staticboxsizer.AddWindow(self.LibraryPanel, 1, border=5,
    + left_staticboxsizer.Add(self.LibraryPanel, 1, border=5,
    flag=wx.GROW | wx.TOP)
    # Create sizer for other block parameters
    top_right_gridsizer = wx.FlexGridSizer(cols=2, hgap=0, rows=4, vgap=5)
    top_right_gridsizer.AddGrowableCol(1)
    - self.RightGridSizer.AddSizer(top_right_gridsizer, flag=wx.GROW)
    + self.RightGridSizer.Add(top_right_gridsizer, flag=wx.GROW)
    # Create label for block name
    name_label = wx.StaticText(self, label=_('Name:'))
    - top_right_gridsizer.AddWindow(name_label,
    + top_right_gridsizer.Add(name_label,
    flag=wx.ALIGN_CENTER_VERTICAL)
    # Create text control for defining block name
    self.BlockName = wx.TextCtrl(self)
    self.Bind(wx.EVT_TEXT, self.OnNameChanged, self.BlockName)
    - top_right_gridsizer.AddWindow(self.BlockName, flag=wx.GROW)
    + top_right_gridsizer.Add(self.BlockName, flag=wx.GROW)
    # Create label for extended block input number
    inputs_label = wx.StaticText(self, label=_('Inputs:'))
    - top_right_gridsizer.AddWindow(inputs_label,
    + top_right_gridsizer.Add(inputs_label,
    flag=wx.ALIGN_CENTER_VERTICAL)
    # Create spin control for defining extended block input number
    self.Inputs = wx.SpinCtrl(self, min=2, max=20,
    style=wx.SP_ARROW_KEYS)
    self.Bind(wx.EVT_SPINCTRL, self.OnInputsChanged, self.Inputs)
    - top_right_gridsizer.AddWindow(self.Inputs, flag=wx.GROW)
    + top_right_gridsizer.Add(self.Inputs, flag=wx.GROW)
    # Create label for block execution order
    execution_order_label = wx.StaticText(self,
    label=_('Execution Order:'))
    - top_right_gridsizer.AddWindow(execution_order_label,
    + top_right_gridsizer.Add(execution_order_label,
    flag=wx.ALIGN_CENTER_VERTICAL)
    # Create spin control for defining block execution order
    self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS)
    self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged,
    self.ExecutionOrder)
    - top_right_gridsizer.AddWindow(self.ExecutionOrder, flag=wx.GROW)
    + top_right_gridsizer.Add(self.ExecutionOrder, flag=wx.GROW)
    # Create label for block execution control
    execution_control_label = wx.StaticText(self,
    label=_('Execution Control:'))
    - top_right_gridsizer.AddWindow(execution_control_label,
    + top_right_gridsizer.Add(execution_control_label,
    flag=wx.ALIGN_CENTER_VERTICAL)
    # Create check box to enable block execution control
    self.ExecutionControl = wx.CheckBox(self)
    self.Bind(wx.EVT_CHECKBOX, self.OnExecutionOrderChanged,
    self.ExecutionControl)
    - top_right_gridsizer.AddWindow(self.ExecutionControl, flag=wx.GROW)
    + top_right_gridsizer.Add(self.ExecutionControl, flag=wx.GROW)
    # Add preview panel and associated label to sizers
    - self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    - self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    + self.RightGridSizer.Add(self.PreviewLabel, flag=wx.GROW)
    + self.RightGridSizer.Add(self.Preview, flag=wx.GROW)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(self.ButtonSizer, border=20,
    + self.MainSizer.Add(self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    # Dictionary containing correspondence between parameter exchanged and
    --- a/dialogs/FBDVariableDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/FBDVariableDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -73,49 +73,49 @@
    # Create label for variable class
    class_label = wx.StaticText(self, label=_('Class:'))
    - self.LeftGridSizer.AddWindow(class_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(class_label, flag=wx.GROW)
    # Create a combo box for defining variable class
    self.Class = wx.ComboBox(self, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class)
    - self.LeftGridSizer.AddWindow(self.Class, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.Class, flag=wx.GROW)
    # Create label for variable execution order
    execution_order_label = wx.StaticText(self,
    label=_('Execution Order:'))
    - self.LeftGridSizer.AddWindow(execution_order_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(execution_order_label, flag=wx.GROW)
    # Create spin control for defining variable execution order
    self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS)
    self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged,
    self.ExecutionOrder)
    - self.LeftGridSizer.AddWindow(self.ExecutionOrder, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.ExecutionOrder, flag=wx.GROW)
    # Create label for variable expression
    name_label = wx.StaticText(self, label=_('Expression:'))
    - self.RightGridSizer.AddWindow(name_label, border=5,
    + self.RightGridSizer.Add(name_label, border=5,
    flag=wx.GROW | wx.BOTTOM)
    # Create text control for defining variable expression
    self.Expression = wx.TextCtrl(self)
    self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression)
    - self.RightGridSizer.AddWindow(self.Expression, flag=wx.GROW)
    + self.RightGridSizer.Add(self.Expression, flag=wx.GROW)
    # Create a list box to selected variable expression in the list of
    # variables defined in POU
    self.VariableName = wx.ListBox(self, size=wx.Size(-1, 120),
    style=wx.LB_SINGLE | wx.LB_SORT)
    self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName)
    - self.RightGridSizer.AddWindow(self.VariableName, border=4, flag=wx.GROW | wx.TOP)
    + self.RightGridSizer.Add(self.VariableName, border=4, flag=wx.GROW | wx.TOP)
    # Add preview panel and associated label to sizers
    - self.MainSizer.AddWindow(self.PreviewLabel, border=20,
    + self.MainSizer.Add(self.PreviewLabel, border=20,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    - self.MainSizer.AddWindow(self.Preview, border=20,
    + self.MainSizer.Add(self.Preview, border=20,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(
    + self.MainSizer.Add(
    self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    --- a/dialogs/FindInPouDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/FindInPouDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -48,76 +48,76 @@
    main_sizer.AddGrowableRow(0)
    controls_sizer = wx.BoxSizer(wx.VERTICAL)
    - main_sizer.AddSizer(controls_sizer, border=20,
    + main_sizer.Add(controls_sizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    patterns_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=5)
    patterns_sizer.AddGrowableCol(1)
    - controls_sizer.AddSizer(patterns_sizer, border=5, flag=wx.GROW | wx.BOTTOM)
    + controls_sizer.Add(patterns_sizer, border=5, flag=wx.GROW | wx.BOTTOM)
    find_label = wx.StaticText(panel, label=_("Find:"))
    - patterns_sizer.AddWindow(find_label, flag=wx.ALIGN_CENTER_VERTICAL)
    + patterns_sizer.Add(find_label, flag=wx.ALIGN_CENTER_VERTICAL)
    self.FindPattern = wx.TextCtrl(panel)
    self.Bind(wx.EVT_TEXT, self.OnFindPatternChanged, self.FindPattern)
    self.Bind(wx.EVT_CHAR_HOOK, self.OnEscapeKey)
    - patterns_sizer.AddWindow(self.FindPattern, flag=wx.GROW)
    + patterns_sizer.Add(self.FindPattern, flag=wx.GROW)
    params_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - controls_sizer.AddSizer(params_sizer, border=5, flag=wx.GROW | wx.BOTTOM)
    + controls_sizer.Add(params_sizer, border=5, flag=wx.GROW | wx.BOTTOM)
    direction_staticbox = wx.StaticBox(panel, label=_("Direction"))
    direction_staticboxsizer = wx.StaticBoxSizer(
    direction_staticbox, wx.VERTICAL)
    - params_sizer.AddSizer(direction_staticboxsizer, 1, border=5,
    + params_sizer.Add(direction_staticboxsizer, 1, border=5,
    flag=wx.GROW | wx.RIGHT)
    self.Forward = wx.RadioButton(panel, label=_("Forward"),
    style=wx.RB_GROUP)
    - direction_staticboxsizer.AddWindow(self.Forward, border=5,
    + direction_staticboxsizer.Add(self.Forward, border=5,
    flag=wx.ALL | wx.GROW)
    self.Backward = wx.RadioButton(panel, label=_("Backward"))
    - direction_staticboxsizer.AddWindow(self.Backward, border=5,
    + direction_staticboxsizer.Add(self.Backward, border=5,
    flag=wx.ALL | wx.GROW)
    options_staticbox = wx.StaticBox(panel, label=_("Options"))
    options_staticboxsizer = wx.StaticBoxSizer(
    options_staticbox, wx.VERTICAL)
    - params_sizer.AddSizer(options_staticboxsizer, 1, flag=wx.GROW)
    + params_sizer.Add(options_staticboxsizer, 1, flag=wx.GROW)
    self.CaseSensitive = wx.CheckBox(panel, label=_("Case sensitive"))
    self.CaseSensitive.SetValue(True)
    - options_staticboxsizer.AddWindow(self.CaseSensitive, border=5,
    + options_staticboxsizer.Add(self.CaseSensitive, border=5,
    flag=wx.ALL | wx.GROW)
    self.WrapSearch = wx.CheckBox(panel, label=_("Wrap search"))
    self.WrapSearch.SetValue(True)
    - options_staticboxsizer.AddWindow(self.WrapSearch, border=5,
    + options_staticboxsizer.Add(self.WrapSearch, border=5,
    flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.GROW)
    self.RegularExpressions = wx.CheckBox(panel, label=_("Regular expressions"))
    - options_staticboxsizer.AddWindow(self.RegularExpressions, border=5,
    + options_staticboxsizer.Add(self.RegularExpressions, border=5,
    flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.GROW)
    buttons_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - main_sizer.AddSizer(buttons_sizer, border=20,
    + main_sizer.Add(buttons_sizer, border=20,
    flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.ALIGN_RIGHT)
    self.FindButton = wx.Button(panel, label=_("Find"))
    self.FindButton.SetDefault()
    self.Bind(wx.EVT_BUTTON, self.OnFindButton, self.FindButton)
    - buttons_sizer.AddWindow(self.FindButton, border=5, flag=wx.RIGHT)
    + buttons_sizer.Add(self.FindButton, border=5, flag=wx.RIGHT)
    self.CloseButton = wx.Button(panel, label=_("Close"))
    self.Bind(wx.EVT_BUTTON, self.OnCloseButton, self.CloseButton)
    - buttons_sizer.AddWindow(self.CloseButton)
    + buttons_sizer.Add(self.CloseButton)
    # set the longest message here, to use it length to calculate
    # optimal size of dialog window
    self.RegExpSyntaxErrMsg = _("Syntax error in regular expression of pattern to search!")
    self.StatusLabel = wx.StaticText(panel, label=self.RegExpSyntaxErrMsg)
    - controls_sizer.AddWindow(self.StatusLabel, flag=wx.ALIGN_CENTER_VERTICAL)
    + controls_sizer.Add(self.StatusLabel)
    panel.SetSizer(main_sizer)
    main_sizer.Fit(self)
    --- a/dialogs/ForceVariableDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/ForceVariableDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -189,7 +189,7 @@
    info_sizer = wx.BoxSizer(wx.VERTICAL)
    message_label = wx.StaticText(self, label=_("Forcing Variable Value"))
    - info_sizer.AddWindow(message_label, border=10,
    + info_sizer.Add(message_label, border=10,
    flag=wx.ALIGN_LEFT | wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    if GetTypeValue[self.IEC_Type] in [getinteger, getfloat]:
    @@ -201,8 +201,8 @@
    self.GetEnteredValue = self.GetValueDefault
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
    - info_sizer.AddSizer(button_sizer, border=10, flag=wx.ALIGN_RIGHT | wx.ALL)
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + info_sizer.Add(button_sizer, border=10, flag=wx.ALIGN_RIGHT | wx.ALL)
    self.SetSizer(info_sizer)
    self.Fit()
    @@ -216,7 +216,7 @@
    """Add simple text control to change variable of any type"""
    self.ValueCtrl = wx.TextCtrl(self)
    self.ValueCtrl.SetValue(defaultValue)
    - info_sizer.AddWindow(self.ValueCtrl, border=10, proportion=1,
    + info_sizer.Add(self.ValueCtrl, border=10, proportion=1,
    flag=wx.ALIGN_LEFT | wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    def GetValueDefault(self):
    @@ -235,11 +235,11 @@
    sizer = wx.BoxSizer(wx.HORIZONTAL)
    self.InitCtrlDefault(sizer, defaultValue)
    self.SpinButtonCtrl = wx.SpinButton(self, style=wx.HORIZONTAL | wx.SP_WRAP)
    - sizer.AddWindow(self.SpinButtonCtrl, border=10,
    + sizer.Add(self.SpinButtonCtrl, border=10,
    flag=wx.ALIGN_LEFT | wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND)
    self.Bind(wx.EVT_SPIN_UP, self.SpinButtonChanged)
    self.Bind(wx.EVT_SPIN_DOWN, self.SpinButtonChanged)
    - info_sizer.AddWindow(sizer, proportion=1, flag=wx.EXPAND)
    + info_sizer.Add(sizer, proportion=1, flag=wx.EXPAND)
    def SpinButtonChanged(self, evt):
    """Increment/decrement variable value"""
    @@ -261,7 +261,7 @@
    if value is not None:
    self.ValueCtrl.SetValue(value)
    - info_sizer.AddWindow(self.ValueCtrl, border=10,
    + info_sizer.Add(self.ValueCtrl, border=10,
    flag=wx.ALIGN_LEFT | wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT | wx.GROW)
    def OnOK(self, event):
    --- a/dialogs/IDMergeDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/IDMergeDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -15,11 +15,11 @@
    main_sizer = wx.BoxSizer(wx.VERTICAL)
    message = wx.StaticText(self, label=question)
    - main_sizer.AddWindow(message, border=20,
    + main_sizer.Add(message, border=20,
    flag=wx.ALIGN_CENTER_HORIZONTAL | wx.TOP | wx.LEFT | wx.RIGHT)
    self.check = wx.CheckBox(self, label=optiontext)
    - main_sizer.AddWindow(self.check, border=20,
    + main_sizer.Add(self.check, border=20,
    flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL)
    buttons_sizer = wx.BoxSizer(wx.HORIZONTAL)
    @@ -30,9 +30,9 @@
    return lambda event: self.EndModal(_wxID)
    self.Bind(wx.EVT_BUTTON, OnButtonFactory(wxID), Button)
    - buttons_sizer.AddWindow(Button)
    + buttons_sizer.Add(Button)
    - main_sizer.AddSizer(buttons_sizer, border=20,
    + main_sizer.Add(buttons_sizer, border=20,
    flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.ALIGN_RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/LDElementDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/LDElementDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -63,7 +63,7 @@
    # Create label for LD element modifier
    modifier_label = wx.StaticText(self, label=_('Modifier:'))
    - self.LeftGridSizer.AddWindow(modifier_label, border=5,
    + self.LeftGridSizer.Add(modifier_label, border=5,
    flag=wx.GROW | wx.BOTTOM)
    # Create radio buttons for selecting LD element modifier
    @@ -84,13 +84,13 @@
    style=(wx.RB_GROUP if first else 0))
    radio_button.SetValue(first)
    self.Bind(wx.EVT_RADIOBUTTON, self.OnModifierChanged, radio_button)
    - self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW)
    + self.LeftGridSizer.Add(radio_button, flag=wx.GROW)
    self.ModifierRadioButtons[modifier] = radio_button
    first = False
    # Create label for LD element variable
    element_variable_label = wx.StaticText(self, label=_('Variable:'))
    - self.LeftGridSizer.AddWindow(element_variable_label, border=5,
    + self.LeftGridSizer.Add(element_variable_label, border=5,
    flag=wx.GROW | wx.TOP)
    # Create a combo box for defining LD element variable
    @@ -99,15 +99,15 @@
    self.ElementVariable)
    self.Bind(wx.EVT_TEXT, self.OnVariableChanged,
    self.ElementVariable)
    - self.LeftGridSizer.AddWindow(self.ElementVariable, border=5,
    + self.LeftGridSizer.Add(self.ElementVariable, border=5,
    flag=wx.GROW | wx.TOP)
    # Add preview panel and associated label to sizers
    - self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    - self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    + self.RightGridSizer.Add(self.PreviewLabel, flag=wx.GROW)
    + self.RightGridSizer.Add(self.Preview, flag=wx.GROW)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(self.ButtonSizer, border=20,
    + self.MainSizer.Add(self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    # Save LD element class
    @@ -198,8 +198,9 @@
    self.GetElementModifier(),
    value)
    - button = self.ButtonSizer.GetAffirmativeButton()
    - button.Enable(value != "")
    + # FIXME : how to disable OK button when content is not valid
    + # button = self.ButtonSizer.GetAffirmativeButton()
    + # button.Enable(value != "")
    # Call BlockPreviewDialog function
    BlockPreviewDialog.DrawPreview(self)
    --- a/dialogs/LDPowerRailDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/LDPowerRailDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -56,7 +56,7 @@
    # Create label for connection type
    type_label = wx.StaticText(self, label=_('Type:'))
    - self.LeftGridSizer.AddWindow(type_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(type_label, flag=wx.GROW)
    # Create radio buttons for selecting power rail type
    self.TypeRadioButtons = {}
    @@ -67,27 +67,27 @@
    style=(wx.RB_GROUP if first else 0))
    radio_button.SetValue(first)
    self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, radio_button)
    - self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW)
    + self.LeftGridSizer.Add(radio_button, flag=wx.GROW)
    self.TypeRadioButtons[type] = radio_button
    first = False
    # Create label for power rail pin number
    pin_number_label = wx.StaticText(self, label=_('Pin number:'))
    - self.LeftGridSizer.AddWindow(pin_number_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(pin_number_label, flag=wx.GROW)
    # Create spin control for defining power rail pin number
    self.PinNumber = wx.SpinCtrl(self, min=1, max=50,
    style=wx.SP_ARROW_KEYS)
    self.PinNumber.SetValue(1)
    self.Bind(wx.EVT_SPINCTRL, self.OnPinNumberChanged, self.PinNumber)
    - self.LeftGridSizer.AddWindow(self.PinNumber, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.PinNumber, flag=wx.GROW)
    # Add preview panel and associated label to sizers
    - self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    - self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    + self.RightGridSizer.Add(self.PreviewLabel, flag=wx.GROW)
    + self.RightGridSizer.Add(self.Preview, flag=wx.GROW)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(
    + self.MainSizer.Add(
    self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.Fit()
    --- a/dialogs/PouActionDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/PouActionDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -50,27 +50,26 @@
    infos_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=3, vgap=15)
    infos_sizer.AddGrowableCol(1)
    - main_sizer.AddSizer(infos_sizer, border=20,
    + main_sizer.Add(infos_sizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    actionname_label = wx.StaticText(self, label=_('Action Name:'))
    - infos_sizer.AddWindow(actionname_label, border=4,
    + infos_sizer.Add(actionname_label, border=4,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
    self.ActionName = wx.TextCtrl(self, size=wx.Size(180, -1))
    - infos_sizer.AddWindow(self.ActionName, flag=wx.GROW)
    + infos_sizer.Add(self.ActionName, flag=wx.GROW)
    language_label = wx.StaticText(self, label=_('Language:'))
    - infos_sizer.AddWindow(language_label, border=4,
    + infos_sizer.Add(language_label, border=4,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
    self.Language = wx.ComboBox(self, style=wx.CB_READONLY)
    - infos_sizer.AddWindow(self.Language, flag=wx.GROW)
    + infos_sizer.Add(self.Language, flag=wx.GROW)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK,
    - button_sizer.GetAffirmativeButton())
    - main_sizer.AddSizer(button_sizer, border=20,
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + main_sizer.Add(button_sizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/PouDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/PouDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -58,34 +58,34 @@
    infos_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=3, vgap=15)
    infos_sizer.AddGrowableCol(1)
    - main_sizer.AddSizer(infos_sizer, border=20,
    + main_sizer.Add(infos_sizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    pouname_label = wx.StaticText(self, label=_('POU Name:'))
    - infos_sizer.AddWindow(pouname_label, border=4,
    + infos_sizer.Add(pouname_label, border=4,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
    self.PouName = wx.TextCtrl(self)
    - infos_sizer.AddWindow(self.PouName, flag=wx.GROW)
    + infos_sizer.Add(self.PouName, flag=wx.GROW)
    poutype_label = wx.StaticText(self, label=_('POU Type:'))
    - infos_sizer.AddWindow(poutype_label, border=4,
    + infos_sizer.Add(poutype_label, border=4,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
    self.PouType = wx.ComboBox(self, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnTypeChanged, self.PouType)
    - infos_sizer.AddWindow(self.PouType, flag=wx.GROW)
    + infos_sizer.Add(self.PouType, flag=wx.GROW)
    language_label = wx.StaticText(self, label=_('Language:'))
    - infos_sizer.AddWindow(language_label, border=4,
    + infos_sizer.Add(language_label, border=4,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
    self.Language = wx.ComboBox(self, style=wx.CB_READONLY)
    - infos_sizer.AddWindow(self.Language, flag=wx.GROW)
    + infos_sizer.Add(self.Language, flag=wx.GROW)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
    - main_sizer.AddSizer(button_sizer, border=20,
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + main_sizer.Add(button_sizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/PouNameDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/PouNameDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -40,8 +40,7 @@
    self.PouNames = []
    - self.Bind(wx.EVT_BUTTON, self.OnOK,
    - self.GetSizer().GetItem(2).GetSizer().GetItem(1).GetSizer().GetAffirmativeButton())
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    def OnOK(self, event):
    message = None
    --- a/dialogs/PouTransitionDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/PouTransitionDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -53,26 +53,26 @@
    infos_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=3, vgap=10)
    infos_sizer.AddGrowableCol(1)
    - main_sizer.AddSizer(infos_sizer, border=20,
    + main_sizer.Add(infos_sizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    transitionname_label = wx.StaticText(self, label=_('Transition Name:'))
    - infos_sizer.AddWindow(transitionname_label, border=4,
    + infos_sizer.Add(transitionname_label, border=4,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
    self.TransitionName = wx.TextCtrl(self, size=wx.Size(180, -1))
    - infos_sizer.AddWindow(self.TransitionName, flag=wx.GROW)
    + infos_sizer.Add(self.TransitionName, flag=wx.GROW)
    language_label = wx.StaticText(self, label=_('Language:'))
    - infos_sizer.AddWindow(language_label, border=4,
    + infos_sizer.Add(language_label, border=4,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
    self.Language = wx.ComboBox(self, style=wx.CB_READONLY)
    - infos_sizer.AddWindow(self.Language, flag=wx.GROW)
    + infos_sizer.Add(self.Language, flag=wx.GROW)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
    - main_sizer.AddSizer(button_sizer, border=20, flag=wx.ALIGN_RIGHT | wx.BOTTOM)
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + main_sizer.Add(button_sizer, border=20, flag=wx.ALIGN_RIGHT | wx.BOTTOM)
    self.SetSizer(main_sizer)
    --- a/dialogs/ProjectDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/ProjectDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -42,12 +42,11 @@
    self.ProjectProperties = ProjectPropertiesPanel(
    self, enable_required=enable_required, scrolling=False)
    - main_sizer.AddWindow(self.ProjectProperties, flag=wx.GROW)
    + main_sizer.Add(self.ProjectProperties, flag=wx.GROW)
    self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - self.Bind(wx.EVT_BUTTON, self.OnOK,
    - self.ButtonSizer.GetAffirmativeButton())
    - main_sizer.AddSizer(self.ButtonSizer, border=20,
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    + main_sizer.Add(self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.SetSizer(main_sizer)
    --- a/dialogs/SFCDivergenceDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/SFCDivergenceDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -58,7 +58,7 @@
    # Create label for divergence type
    type_label = wx.StaticText(self, label=_('Type:'))
    - self.LeftGridSizer.AddWindow(type_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(type_label, flag=wx.GROW)
    # Create radio buttons for selecting divergence type
    divergence_buttons = [
    @@ -80,7 +80,7 @@
    style=(wx.RB_GROUP if first else 0))
    radio_button.SetValue(first)
    self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, radio_button)
    - self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW)
    + self.LeftGridSizer.Add(radio_button, flag=wx.GROW)
    self.TypeRadioButtons[type] = radio_button
    if first:
    focusbtn = type
    @@ -89,19 +89,19 @@
    # Create label for number of divergence sequences
    sequences_label = wx.StaticText(self,
    label=_('Number of sequences:'))
    - self.LeftGridSizer.AddWindow(sequences_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(sequences_label, flag=wx.GROW)
    # Create spin control for defining number of divergence sequences
    self.Sequences = wx.SpinCtrl(self, min=2, max=20, initial=2)
    self.Bind(wx.EVT_SPINCTRL, self.OnSequencesChanged, self.Sequences)
    - self.LeftGridSizer.AddWindow(self.Sequences, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.Sequences, flag=wx.GROW)
    # Add preview panel and associated label to sizers
    - self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    - self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    + self.RightGridSizer.Add(self.PreviewLabel, flag=wx.GROW)
    + self.RightGridSizer.Add(self.Preview, flag=wx.GROW)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(
    + self.MainSizer.Add(
    self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    --- a/dialogs/SFCStepDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/SFCStepDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -57,16 +57,16 @@
    # Create label for SFC step name
    name_label = wx.StaticText(self, label=_('Name:'))
    - self.LeftGridSizer.AddWindow(name_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(name_label, flag=wx.GROW)
    # Create text control for defining SFC step name
    self.StepName = wx.TextCtrl(self)
    self.Bind(wx.EVT_TEXT, self.OnNameChanged, self.StepName)
    - self.LeftGridSizer.AddWindow(self.StepName, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.StepName, flag=wx.GROW)
    # Create label for SFC step connectors
    connectors_label = wx.StaticText(self, label=_('Connectors:'))
    - self.LeftGridSizer.AddWindow(connectors_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(connectors_label, flag=wx.GROW)
    # Create check boxes for defining connectors available on SFC step
    self.ConnectorsCheckBox = {}
    @@ -77,15 +77,15 @@
    if name == "output" or (name == "input" and not initial):
    check_box.SetValue(True)
    self.Bind(wx.EVT_CHECKBOX, self.OnConnectorsChanged, check_box)
    - self.LeftGridSizer.AddWindow(check_box, flag=wx.GROW)
    + self.LeftGridSizer.Add(check_box, flag=wx.GROW)
    self.ConnectorsCheckBox[name] = check_box
    # Add preview panel and associated label to sizers
    - self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    - self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    + self.RightGridSizer.Add(self.PreviewLabel, flag=wx.GROW)
    + self.RightGridSizer.Add(self.Preview, flag=wx.GROW)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(
    + self.MainSizer.Add(
    self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    --- a/dialogs/SFCStepNameDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/SFCStepNameDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -42,8 +42,7 @@
    self.Variables = []
    self.StepNames = []
    - self.Bind(wx.EVT_BUTTON, self.OnOK,
    - self.GetSizer().GetItem(2).GetSizer().GetItem(1).GetSizer().GetAffirmativeButton())
    + self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
    def OnOK(self, event):
    message = None
    --- a/dialogs/SFCTransitionDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/SFCTransitionDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -57,7 +57,7 @@
    # Create label for transition type
    type_label = wx.StaticText(self, label=_('Type:'))
    - self.LeftGridSizer.AddWindow(type_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(type_label, flag=wx.GROW)
    # Create combo box for selecting reference value
    reference = wx.ComboBox(self, style=wx.CB_READONLY)
    @@ -80,28 +80,28 @@
    style=(wx.RB_GROUP if first else 0))
    radio_button.SetValue(first)
    self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, radio_button)
    - self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW)
    + self.LeftGridSizer.Add(radio_button, flag=wx.GROW)
    if control is not None:
    control.Enable(first)
    - self.LeftGridSizer.AddWindow(control, flag=wx.GROW)
    + self.LeftGridSizer.Add(control, flag=wx.GROW)
    self.TypeRadioButtons[type] = (radio_button, control)
    first = False
    # Create label for transition priority
    priority_label = wx.StaticText(self, label=_('Priority:'))
    - self.LeftGridSizer.AddWindow(priority_label, flag=wx.GROW)
    + self.LeftGridSizer.Add(priority_label, flag=wx.GROW)
    # Create spin control for defining priority value
    self.Priority = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS)
    self.Bind(wx.EVT_TEXT, self.OnPriorityChanged, self.Priority)
    - self.LeftGridSizer.AddWindow(self.Priority, flag=wx.GROW)
    + self.LeftGridSizer.Add(self.Priority, flag=wx.GROW)
    # Add preview panel and associated label to sizers
    - self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
    - self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
    + self.RightGridSizer.Add(self.PreviewLabel, flag=wx.GROW)
    + self.RightGridSizer.Add(self.Preview, flag=wx.GROW)
    # Add buttons sizer to sizers
    - self.MainSizer.AddSizer(
    + self.MainSizer.Add(
    self.ButtonSizer, border=20,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    --- a/dialogs/SearchInProjectDialog.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/dialogs/SearchInProjectDialog.py Thu Sep 02 22:18:14 2021 +0200
    @@ -54,59 +54,59 @@
    pattern_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5)
    pattern_sizer.AddGrowableCol(0)
    - main_sizer.AddSizer(pattern_sizer, border=20,
    + main_sizer.Add(pattern_sizer, border=20,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    pattern_label = wx.StaticText(self, label=_('Pattern to search:'))
    - pattern_sizer.AddWindow(pattern_label, flag=wx.ALIGN_BOTTOM)
    + pattern_sizer.Add(pattern_label, flag=wx.ALIGN_BOTTOM)
    self.CaseSensitive = wx.CheckBox(self, label=_('Case sensitive'))
    - pattern_sizer.AddWindow(self.CaseSensitive, flag=wx.GROW)
    + pattern_sizer.Add(self.CaseSensitive, flag=wx.GROW)
    self.Pattern = wx.TextCtrl(self, size=wx.Size(250, -1))
    self.Bind(wx.EVT_TEXT, self.FindPatternChanged, self.Pattern)
    - pattern_sizer.AddWindow(self.Pattern, flag=wx.GROW)
    + pattern_sizer.Add(self.Pattern, flag=wx.GROW)
    self.Bind(wx.EVT_CHAR_HOOK, self.OnEscapeKey)
    self.RegularExpression = wx.CheckBox(self, label=_('Regular expression'))
    - pattern_sizer.AddWindow(self.RegularExpression, flag=wx.GROW)
    + pattern_sizer.Add(self.RegularExpression, flag=wx.GROW)
    scope_staticbox = wx.StaticBox(self, label=_('Scope'))
    scope_sizer = wx.StaticBoxSizer(scope_staticbox, wx.HORIZONTAL)
    - main_sizer.AddSizer(scope_sizer, border=20,
    + main_sizer.Add(scope_sizer, border=20,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    scope_selection_sizer = wx.BoxSizer(wx.VERTICAL)
    - scope_sizer.AddSizer(scope_selection_sizer, 1, border=5,
    + scope_sizer.Add(scope_selection_sizer, 1, border=5,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.BOTTOM)
    self.WholeProject = wx.RadioButton(self, label=_('Whole Project'), style=wx.RB_GROUP)
    self.WholeProject.SetValue(True)
    self.Bind(wx.EVT_RADIOBUTTON, self.OnScopeChanged, self.WholeProject)
    - scope_selection_sizer.AddWindow(self.WholeProject, border=5,
    + scope_selection_sizer.Add(self.WholeProject, border=5,
    flag=wx.GROW | wx.BOTTOM)
    self.OnlyElements = wx.RadioButton(self, label=_('Only Elements'))
    self.Bind(wx.EVT_RADIOBUTTON, self.OnScopeChanged, self.OnlyElements)
    self.OnlyElements.SetValue(False)
    - scope_selection_sizer.AddWindow(self.OnlyElements, flag=wx.GROW)
    + scope_selection_sizer.Add(self.OnlyElements, flag=wx.GROW)
    self.ElementsList = wx.CheckListBox(self)
    self.ElementsList.Enable(False)
    - scope_sizer.AddWindow(self.ElementsList, 1, border=5,
    + scope_sizer.Add(self.ElementsList, 1, border=5,
    flag=wx.GROW | wx.TOP | wx.RIGHT | wx.BOTTOM)
    buttons_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - main_sizer.AddSizer(buttons_sizer, border=20,
    + main_sizer.Add(buttons_sizer, border=20,
    flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.ALIGN_RIGHT)
    self.FindButton = wx.Button(self, label=_("Find"))
    self.FindButton.SetDefault()
    self.Bind(wx.EVT_BUTTON, self.OnFindButton, self.FindButton)
    - buttons_sizer.AddWindow(self.FindButton, border=5, flag=wx.RIGHT)
    + buttons_sizer.Add(self.FindButton, border=5, flag=wx.RIGHT)
    self.CloseButton = wx.Button(self, label=_("Close"))
    self.Bind(wx.EVT_BUTTON, self.OnCloseButton, self.CloseButton)
    - buttons_sizer.AddWindow(self.CloseButton)
    + buttons_sizer.Add(self.CloseButton)
    self.SetSizer(main_sizer)
    --- a/editors/CodeFileEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/CodeFileEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -291,17 +291,16 @@
    doc_end_pos = self.GetLength()
    for section in self.Controler.SECTIONS_NAMES:
    section_comments = self.SectionsComments[section]
    - start_pos = self.FindText(0, doc_end_pos, section_comments["comment"])
    - end_pos = start_pos + len(section_comments["comment"])
    - self.StartStyling(start_pos, 0xff)
    + start_pos, end_pos = self.FindText(0, doc_end_pos, section_comments["comment"])
    + self.StartStyling(start_pos)
    self.SetStyling(end_pos - start_pos, STC_CODE_SECTION)
    self.SetLineState(self.LineFromPosition(start_pos), 1)
    - self.StartStyling(end_pos, 0x00)
    + self.StartStyling(end_pos)
    self.SetStyling(doc_end_pos - end_pos, stc.STC_STYLE_DEFAULT)
    def DoGetBestSize(self):
    - return self.ParentWindow.GetPanelBestSize()
    + return self.ParentWindow.GetBestSize()
    def RefreshModel(self):
    text = self.GetText()
    @@ -597,9 +596,9 @@
    highlight_end_pos = end[1] + 1
    else:
    highlight_end_pos = self.GetLineEndPosition(end[0] - 1) + end[1] + 2
    - self.StartStyling(highlight_start_pos, 0xff)
    + self.StartStyling(highlight_start_pos)
    self.SetStyling(highlight_end_pos - highlight_start_pos, highlight_type)
    - self.StartStyling(highlight_end_pos, 0x00)
    + self.StartStyling(highlight_end_pos)
    self.SetStyling(len(self.GetText()) - highlight_end_pos, stc.STC_STYLE_DEFAULT)
    @@ -614,8 +613,7 @@
    class ClassGridCellEditor(wx.grid.GridCellChoiceEditor):
    def __init__(self, table, row, col):
    - wx.grid.GridCellChoiceEditor.__init__(self)
    - self.SetParameters("input,memory,output")
    + wx.grid.GridCellChoiceEditor.__init__(self,["input","memory","output"])
    class VariablesTable(CustomTable):
    @@ -678,7 +676,7 @@
    main_sizer.AddGrowableRow(0)
    controls_sizer = wx.BoxSizer(wx.VERTICAL)
    - main_sizer.AddSizer(controls_sizer, border=5, flag=wx.ALL)
    + main_sizer.Add(controls_sizer, border=5, flag=wx.ALL)
    for name, bitmap, help in [
    ("AddVariableButton", "add_element", _("Add variable")),
    @@ -687,15 +685,15 @@
    ("DownVariableButton", "down", _("Move variable down"))]:
    button = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - controls_sizer.AddWindow(button, border=5, flag=wx.BOTTOM)
    + controls_sizer.Add(button, border=5, flag=wx.BOTTOM)
    self.VariablesGrid = CustomGrid(self, style=wx.VSCROLL)
    - self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
    + self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING, self.OnVariablesGridCellChange)
    self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick)
    self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnVariablesGridEditorShown)
    - main_sizer.AddWindow(self.VariablesGrid, flag=wx.GROW)
    + main_sizer.Add(self.VariablesGrid, flag=wx.GROW)
    self.SetSizer(main_sizer)
    @@ -785,7 +783,7 @@
    self.VariablesGrid.RefreshButtons()
    def DoGetBestSize(self):
    - return self.ParentWindow.GetPanelBestSize()
    + return self.ParentWindow.GetBestSize()
    def ShowErrorMessage(self, message):
    dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
    @@ -836,7 +834,7 @@
    type_menu.AppendMenu(wx.ID_ANY, "User Data Types", datatype_menu)
    rect = self.VariablesGrid.BlockToDeviceRect((row, col), (row, col))
    - self.VariablesGrid.PopupMenuXY(type_menu, rect.x + rect.width, rect.y + self.VariablesGrid.GetColLabelSize())
    + self.VariablesGrid.PopupMenu(type_menu, rect.x + rect.width, rect.y + self.VariablesGrid.GetColLabelSize())
    type_menu.Destroy()
    event.Veto()
    else:
    --- a/editors/ConfTreeNodeEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/ConfTreeNodeEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -120,7 +120,7 @@
    bitmap = GetBitmap(bitmapname)
    if bitmap is None:
    - bitmap = wx.EmptyBitmap(0, 0)
    + bitmap = wx.Bitmap()
    wx.StaticBitmap.__init__(self, parent, ID,
    bitmap,
    @@ -148,18 +148,18 @@
    if self.SHOW_BASE_PARAMS:
    baseparamseditor_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - self.MainSizer.AddSizer(baseparamseditor_sizer, border=5,
    + self.MainSizer.Add(baseparamseditor_sizer, border=5,
    flag=wx.GROW | wx.ALL)
    self.FullIECChannel = wx.StaticText(self.Editor, -1)
    self.FullIECChannel.SetFont(
    wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL,
    wx.BOLD, faceName=faces["helv"]))
    - baseparamseditor_sizer.AddWindow(self.FullIECChannel,
    + baseparamseditor_sizer.Add(self.FullIECChannel,
    flag=wx.ALIGN_CENTER_VERTICAL)
    updownsizer = wx.BoxSizer(wx.VERTICAL)
    - baseparamseditor_sizer.AddSizer(updownsizer, border=5,
    + baseparamseditor_sizer.Add(updownsizer, border=5,
    flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
    self.IECCUpButton = wx.lib.buttons.GenBitmapTextButton(
    @@ -169,14 +169,14 @@
    style=wx.NO_BORDER)
    self.IECCUpButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(1),
    self.IECCUpButton)
    - updownsizer.AddWindow(self.IECCUpButton, flag=wx.ALIGN_LEFT)
    + updownsizer.Add(self.IECCUpButton, flag=wx.ALIGN_LEFT)
    self.IECCDownButton = wx.lib.buttons.GenBitmapButton(
    self.Editor, bitmap=GetBitmap('IECCUp'),
    size=wx.Size(16, 16), style=wx.NO_BORDER)
    self.IECCDownButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(-1),
    self.IECCDownButton)
    - updownsizer.AddWindow(self.IECCDownButton, flag=wx.ALIGN_LEFT)
    + updownsizer.Add(self.IECCDownButton, flag=wx.ALIGN_LEFT)
    self.ConfNodeName = wx.TextCtrl(self.Editor,
    size=wx.Size(150, 25))
    @@ -187,17 +187,17 @@
    wx.EVT_TEXT,
    self.GetTextCtrlCallBackFunction(self.ConfNodeName, "BaseParams.Name", True),
    self.ConfNodeName)
    - baseparamseditor_sizer.AddWindow(
    + baseparamseditor_sizer.Add(
    self.ConfNodeName, border=5,
    flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
    buttons_sizer = self.GenerateMethodButtonSizer()
    - baseparamseditor_sizer.AddSizer(buttons_sizer, flag=wx.ALIGN_CENTER)
    + baseparamseditor_sizer.Add(buttons_sizer, flag=wx.ALIGN_CENTER)
    if tabs_num > 1:
    self.ConfNodeNoteBook = wx.Notebook(self.Editor)
    parent = self.ConfNodeNoteBook
    - self.MainSizer.AddWindow(self.ConfNodeNoteBook, 1, flag=wx.GROW)
    + self.MainSizer.Add(self.ConfNodeNoteBook, 1, flag=wx.GROW)
    else:
    parent = self.Editor
    self.ConfNodeNoteBook = None
    @@ -212,7 +212,7 @@
    if self.ConfNodeNoteBook is not None:
    self.ConfNodeNoteBook.AddPage(editor, title)
    elif self.SHOW_BASE_PARAMS:
    - self.MainSizer.AddWindow(editor, 1, flag=wx.GROW)
    + self.MainSizer.Add(editor, 1, flag=wx.GROW)
    else:
    self.Editor = editor
    @@ -232,7 +232,7 @@
    self.ParamsEditor.SetSizer(self.ParamsEditorSizer)
    self.ConfNodeParamsSizer = wx.BoxSizer(wx.VERTICAL)
    - self.ParamsEditorSizer.AddSizer(self.ConfNodeParamsSizer, border=5,
    + self.ParamsEditorSizer.Add(self.ConfNodeParamsSizer, border=5,
    flag=wx.LEFT | wx.RIGHT | wx.BOTTOM)
    self.RefreshConfNodeParamsSizer()
    @@ -240,7 +240,7 @@
    if self.ConfNodeNoteBook is not None:
    self.ConfNodeNoteBook.AddPage(self.ParamsEditor, _("Config"))
    elif self.SHOW_BASE_PARAMS:
    - self.MainSizer.AddWindow(self.ParamsEditor, 1, flag=wx.GROW)
    + self.MainSizer.Add(self.ParamsEditor, 1, flag=wx.GROW)
    else:
    self.Editor = self.ParamsEditor
    else:
    @@ -317,7 +317,7 @@
    label=confnode_method["name"],
    style=wx.NO_BORDER)
    button.SetFont(normal_bt_font)
    - button.SetToolTipString(confnode_method["tooltip"])
    + button.SetToolTip(confnode_method["tooltip"])
    if confnode_method.get("push", False):
    button.Bind(wx.EVT_LEFT_DOWN, self.GetButtonCallBackFunction(confnode_method["method"], True))
    else:
    @@ -335,7 +335,7 @@
    # hack to force size to mini
    if not confnode_method.get("enabled", True):
    button.Disable()
    - msizer.AddWindow(button, flag=wx.ALIGN_CENTER)
    + msizer.Add(button, flag=wx.ALIGN_CENTER)
    return msizer
    def UriOptions(self, event):
    @@ -380,32 +380,32 @@
    flags = (wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    if first:
    flags |= wx.TOP
    - sizer.AddSizer(staticboxsizer, border=5, flag=flags)
    + sizer.Add(staticboxsizer, border=5, flag=flags)
    self.GenerateSizerElements(staticboxsizer,
    element_infos["children"],
    element_path)
    else:
    - boxsizer = wx.FlexGridSizer(cols=4, rows=1)
    + boxsizer = wx.FlexGridSizer(cols=4, rows=1, gap=wx.Size(0,0))
    boxsizer.AddGrowableCol(1)
    flags = (wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    if first:
    flags |= wx.TOP
    - sizer.AddSizer(boxsizer, border=5, flag=flags)
    + sizer.Add(boxsizer, border=5, flag=flags)
    staticbitmap = GenStaticBitmap(
    ID=-1, bitmapname=element_infos["name"],
    name="%s_bitmap" % element_infos["name"], parent=self.ParamsEditor,
    pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
    - boxsizer.AddWindow(staticbitmap, border=5, flag=wx.RIGHT)
    + boxsizer.Add(staticbitmap, border=5, flag=wx.RIGHT)
    statictext = wx.StaticText(self.ParamsEditor,
    label="%s:" % _(element_infos["name"]))
    - boxsizer.AddWindow(statictext, border=5,
    + boxsizer.Add(statictext, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
    if isinstance(element_infos["type"], list):
    if isinstance(element_infos["value"], tuple):
    browse_boxsizer = wx.BoxSizer(wx.HORIZONTAL)
    - boxsizer.AddSizer(browse_boxsizer)
    + boxsizer.Add(browse_boxsizer)
    textctrl = wx.TextCtrl(self.ParamsEditor,
    size=wx.Size(275, -1), style=wx.TE_READONLY)
    @@ -414,10 +414,10 @@
    value_infos = element_infos["value"][1]
    else:
    value_infos = None
    - browse_boxsizer.AddWindow(textctrl)
    + browse_boxsizer.Add(textctrl)
    button = wx.Button(self.ParamsEditor, label="...")
    - browse_boxsizer.AddWindow(button)
    + browse_boxsizer.Add(button)
    button.Bind(wx.EVT_BUTTON,
    self.GetBrowseCallBackFunction(element_infos["name"], textctrl, element_infos["type"],
    value_infos, element_path),
    @@ -425,7 +425,7 @@
    else:
    combobox = wx.ComboBox(self.ParamsEditor,
    size=wx.Size(300, -1), style=wx.CB_READONLY)
    - boxsizer.AddWindow(combobox)
    + boxsizer.Add(combobox)
    if element_infos["use"] == "optional":
    combobox.Append("")
    @@ -439,7 +439,7 @@
    label="%s - %s" % (_(name), _(value)),
    size=wx.Size(10, 0))
    staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
    - sizer.AddSizer(staticboxsizer, border=5, flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    + sizer.Add(staticboxsizer, border=5, flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.GenerateSizerElements(staticboxsizer, element_infos["children"], element_path)
    callback = self.GetChoiceContentCallBackFunction(combobox, staticboxsizer, element_path)
    else:
    @@ -463,7 +463,7 @@
    size=wx.Size(300, -1),
    style=wx.SP_ARROW_KEYS | wx.ALIGN_RIGHT)
    spinctrl.SetRange(scmin, scmax)
    - boxsizer.AddWindow(spinctrl)
    + boxsizer.Add(spinctrl)
    if element_infos["value"] is not None:
    spinctrl.SetValue(element_infos["value"])
    spinctrl.Bind(wx.EVT_SPINCTRL,
    @@ -473,7 +473,7 @@
    else:
    if element_infos["type"] == "boolean":
    checkbox = wx.CheckBox(self.ParamsEditor)
    - boxsizer.AddWindow(checkbox, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
    + boxsizer.Add(checkbox, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
    if element_infos["value"] is not None:
    checkbox.SetValue(element_infos["value"])
    checkbox.Bind(wx.EVT_CHECKBOX,
    @@ -490,7 +490,7 @@
    size=wx.Size(300, -1),
    style=wx.SP_ARROW_KEYS | wx.ALIGN_RIGHT)
    spinctrl.SetRange(scmin, scmax)
    - boxsizer.AddWindow(spinctrl)
    + boxsizer.Add(spinctrl)
    if element_infos["value"] is not None:
    spinctrl.SetValue(element_infos["value"])
    spinctrl.Bind(wx.EVT_SPINCTRL,
    @@ -513,12 +513,12 @@
    self.EditButton = wx.Button(self.ParamsEditor, label='...', size=wx.Size(30, -1))
    self.Bind(wx.EVT_BUTTON, self.UriOptions, self.EditButton)
    - uriSizer.AddWindow(textctrl, flag=wx.GROW)
    - uriSizer.AddWindow(self.EditButton, flag=wx.GROW)
    + uriSizer.Add(textctrl, flag=wx.GROW)
    + uriSizer.Add(self.EditButton, flag=wx.GROW)
    - boxsizer.AddWindow(uriSizer)
    + boxsizer.Add(uriSizer)
    else:
    - boxsizer.AddWindow(textctrl)
    + boxsizer.Add(textctrl)
    if element_infos["value"] is not None:
    textctrl.ChangeValue(str(element_infos["value"]))
    @@ -535,7 +535,7 @@
    self.GetResetFunction(element_path),
    bt)
    - boxsizer.AddWindow(bt, border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT)
    + boxsizer.Add(bt, border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT)
    first = False
    sizer.Layout()
    self.RefreshScrollbars()
    --- a/editors/DataTypeEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/DataTypeEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -155,49 +155,49 @@
    self.MainSizer.AddGrowableRow(1)
    top_sizer = wx.BoxSizer(wx.HORIZONTAL)
    - self.MainSizer.AddSizer(top_sizer, border=5,
    + self.MainSizer.Add(top_sizer, border=5,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:'))
    - top_sizer.AddWindow(derivation_type_label, border=5,
    + top_sizer.Add(derivation_type_label, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT)
    self.DerivationType = wx.ComboBox(self.Editor,
    size=wx.Size(200, -1), style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType)
    - top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW | wx.RIGHT)
    + top_sizer.Add(self.DerivationType, border=5, flag=wx.GROW | wx.RIGHT)
    typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:'))
    typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL)
    - self.MainSizer.AddSizer(typeinfos_sizer, border=5,
    + self.MainSizer.Add(typeinfos_sizer, border=5,
    flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    # Panel for Directly derived data types
    self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
    - typeinfos_sizer.AddWindow(self.DirectlyPanel, 1)
    + typeinfos_sizer.Add(self.DirectlyPanel, 1)
    directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
    directly_basetype_label = wx.StaticText(self.DirectlyPanel,
    label=_('Base Type:'))
    - directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5,
    + directly_panel_sizer.Add(directly_basetype_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyBaseType)
    - directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5,
    + directly_panel_sizer.Add(self.DirectlyBaseType, 1, border=5,
    flag=wx.GROW | wx.ALL)
    directly_initialvalue_label = wx.StaticText(self.DirectlyPanel,
    label=_('Initial Value:'))
    - directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5,
    + directly_panel_sizer.Add(directly_initialvalue_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel,
    style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
    self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue)
    - directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5,
    + directly_panel_sizer.Add(self.DirectlyInitialValue, 1, border=5,
    flag=wx.ALL)
    self.DirectlyPanel.SetSizer(directly_panel_sizer)
    @@ -205,52 +205,52 @@
    # Panel for Subrange data types
    self.SubrangePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
    - typeinfos_sizer.AddWindow(self.SubrangePanel, 1)
    + typeinfos_sizer.Add(self.SubrangePanel, 1)
    subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0)
    subrange_basetype_label = wx.StaticText(self.SubrangePanel,
    label=_('Base Type:'))
    - subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5,
    + subrange_panel_sizer.Add(subrange_basetype_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged,
    self.SubrangeBaseType)
    - subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5,
    + subrange_panel_sizer.Add(self.SubrangeBaseType, 1, border=5,
    flag=wx.GROW | wx.ALL)
    subrange_initialvalue_label = wx.StaticText(self.SubrangePanel,
    label=_('Initial Value:'))
    - subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5,
    + subrange_panel_sizer.Add(subrange_initialvalue_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.SubrangeInitialValue = CustomIntCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
    self.SubrangeInitialValue.Bind(CustomIntCtrl.EVT_CUSTOM_INT, self.OnInfosChanged)
    - subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5,
    + subrange_panel_sizer.Add(self.SubrangeInitialValue, 1, border=5,
    flag=wx.GROW | wx.ALL)
    subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:'))
    - subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5,
    + subrange_panel_sizer.Add(subrange_minimum_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.SubrangeMinimum = CustomIntCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
    self.SubrangeMinimum.Bind(CustomIntCtrl.EVT_CUSTOM_INT, self.OnSubrangeMinimumChanged)
    - subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5,
    + subrange_panel_sizer.Add(self.SubrangeMinimum, 1, border=5,
    flag=wx.GROW | wx.ALL)
    for dummy in xrange(2):
    - subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1)
    + subrange_panel_sizer.Add(wx.Size(0, 0), 1)
    subrange_maximum_label = wx.StaticText(self.SubrangePanel,
    label=_('Maximum:'))
    - subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5,
    + subrange_panel_sizer.Add(subrange_maximum_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.SubrangeMaximum = CustomIntCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
    self.SubrangeMaximum.Bind(CustomIntCtrl.EVT_CUSTOM_INT, self.OnSubrangeMaximumChanged)
    - subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5,
    + subrange_panel_sizer.Add(self.SubrangeMaximum, 1, border=5,
    flag=wx.GROW | wx.ALL)
    self.SubrangePanel.SetSizer(subrange_panel_sizer)
    @@ -258,35 +258,35 @@
    # Panel for Enumerated data types
    self.EnumeratedPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
    - typeinfos_sizer.AddWindow(self.EnumeratedPanel, 1)
    + typeinfos_sizer.Add(self.EnumeratedPanel, 1)
    enumerated_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
    self.EnumeratedValues = CustomEditableListBox(
    self.EnumeratedPanel,
    label=_("Values:"),
    - style=(wx.gizmos.EL_ALLOW_NEW |
    - wx.gizmos.EL_ALLOW_EDIT |
    - wx.gizmos.EL_ALLOW_DELETE))
    + style=(wx.adv.EL_ALLOW_NEW |
    + wx.adv.EL_ALLOW_EDIT |
    + wx.adv.EL_ALLOW_DELETE))
    setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit)
    for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]:
    setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged)
    - enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5,
    + enumerated_panel_sizer.Add(self.EnumeratedValues, 1, border=5,
    flag=wx.GROW | wx.ALL)
    enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
    - enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1)
    + enumerated_panel_sizer.Add(enumerated_panel_rightsizer, 1)
    enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel,
    label=_('Initial Value:'))
    - enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1,
    + enumerated_panel_rightsizer.Add(enumerated_initialvalue_label, 1,
    border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel,
    style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue)
    - enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1,
    + enumerated_panel_rightsizer.Add(self.EnumeratedInitialValue, 1,
    border=5, flag=wx.ALL)
    self.EnumeratedPanel.SetSizer(enumerated_panel_sizer)
    @@ -294,7 +294,7 @@
    # Panel for Array data types
    self.ArrayPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
    - typeinfos_sizer.AddWindow(self.ArrayPanel, 1)
    + typeinfos_sizer.Add(self.ArrayPanel, 1)
    array_panel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
    array_panel_sizer.AddGrowableCol(0)
    @@ -302,41 +302,41 @@
    array_panel_sizer.AddGrowableRow(1)
    array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL)
    - array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW)
    + array_panel_sizer.Add(array_panel_leftSizer, flag=wx.GROW)
    array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:'))
    - array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5,
    + array_panel_leftSizer.Add(array_basetype_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY)
    self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType)
    - array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5,
    + array_panel_leftSizer.Add(self.ArrayBaseType, 1, border=5,
    flag=wx.GROW | wx.ALL)
    array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
    - array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW)
    + array_panel_sizer.Add(array_panel_rightsizer, flag=wx.GROW)
    array_initialvalue_label = wx.StaticText(self.ArrayPanel,
    label=_('Initial Value:'))
    - array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5,
    + array_panel_rightsizer.Add(array_initialvalue_label, 1, border=5,
    flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel,
    style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
    self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue)
    - array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5,
    + array_panel_rightsizer.Add(self.ArrayInitialValue, 1, border=5,
    flag=wx.ALL)
    self.ArrayDimensions = CustomEditableListBox(
    self.ArrayPanel,
    label=_("Dimensions:"),
    - style=(wx.gizmos.EL_ALLOW_NEW |
    - wx.gizmos.EL_ALLOW_EDIT |
    - wx.gizmos.EL_ALLOW_DELETE))
    + style=(wx.adv.EL_ALLOW_NEW |
    + wx.adv.EL_ALLOW_EDIT |
    + wx.adv.EL_ALLOW_DELETE))
    for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton",
    "_OnUpButton", "_OnDownButton"]:
    setattr(self.ArrayDimensions, func, self.OnDimensionsChanged)
    - array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5,
    + array_panel_sizer.Add(self.ArrayDimensions, 0, border=5,
    flag=wx.GROW | wx.ALL)
    self.ArrayPanel.SetSizer(array_panel_sizer)
    @@ -344,7 +344,7 @@
    # Panel for Structure data types
    self.StructurePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
    - typeinfos_sizer.AddWindow(self.StructurePanel, 1)
    + typeinfos_sizer.Add(self.StructurePanel, 1)
    structure_panel_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
    structure_panel_sizer.AddGrowableCol(0)
    @@ -353,12 +353,12 @@
    structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
    structure_button_sizer.AddGrowableCol(0)
    structure_button_sizer.AddGrowableRow(0)
    - structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5,
    + structure_panel_sizer.Add(structure_button_sizer, 0, border=5,
    flag=wx.ALL | wx.GROW)
    structure_elements_label = wx.StaticText(self.StructurePanel,
    label=_('Elements :'))
    - structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM)
    + structure_button_sizer.Add(structure_elements_label, flag=wx.ALIGN_BOTTOM)
    for name, bitmap, help in [
    ("StructureAddButton", "add_element", _("Add element")),
    @@ -369,17 +369,17 @@
    bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28),
    style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - structure_button_sizer.AddWindow(button)
    + structure_button_sizer.Add(button)
    self.StructureElementsGrid = CustomGrid(self.StructurePanel,
    size=wx.Size(0, 150), style=wx.VSCROLL)
    - self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
    + self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING,
    self.OnStructureElementsGridCellChange)
    self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
    self.OnStructureElementsGridEditorShown)
    - structure_panel_sizer.AddWindow(self.StructureElementsGrid, flag=wx.GROW)
    + structure_panel_sizer.Add(self.StructureElementsGrid, flag=wx.GROW)
    self.StructurePanel.SetSizer(structure_panel_sizer)
    @@ -647,7 +647,7 @@
    self.Bind(wx.EVT_MENU, self.ElementArrayTypeFunction, new_entry)
    rect = self.StructureElementsGrid.BlockToDeviceRect((row, col), (row, col))
    - self.StructureElementsGrid.PopupMenuXY(type_menu, rect.x + rect.width, rect.y + self.StructureElementsGrid.GetColLabelSize())
    + self.StructureElementsGrid.PopupMenu(type_menu, rect.x + rect.width, rect.y + self.StructureElementsGrid.GetColLabelSize())
    type_menu.Destroy()
    event.Veto()
    else:
    @@ -786,7 +786,7 @@
    value = control.GetValueStr() if isinstance(control, CustomIntCtrl) else \
    control.GetValue()
    control.SetStyle(0, len(value), wx.TextAttr(wx.NullColour))
    - elif isinstance(control, wx.gizmos.EditableListBox):
    + elif isinstance(control, wx.adv.EditableListBox):
    listctrl = control.GetListCtrl()
    for i in xrange(listctrl.GetItemCount()):
    listctrl.SetItemBackgroundColour(i, wx.NullColour)
    @@ -811,7 +811,7 @@
    control.SetForegroundColour(highlight_type[1])
    elif isinstance(control, wx.TextCtrl):
    control.SetStyle(start[1], end[1] + 1, wx.TextAttr(highlight_type[1], highlight_type[0]))
    - elif isinstance(control, wx.gizmos.EditableListBox):
    + elif isinstance(control, wx.adv.EditableListBox):
    listctrl = control.GetListCtrl()
    listctrl.SetItemBackgroundColour(infos[1], highlight_type[0])
    listctrl.SetItemTextColour(infos[1], highlight_type[1])
    --- a/editors/FileManagementPanel.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/FileManagementPanel.py Thu Sep 02 22:18:14 2021 +0200
    @@ -43,14 +43,14 @@
    main_sizer = wx.BoxSizer(wx.HORIZONTAL)
    left_sizer = wx.BoxSizer(wx.VERTICAL)
    - main_sizer.AddSizer(left_sizer, 1, border=5, flag=wx.GROW | wx.ALL)
    + main_sizer.Add(left_sizer, 1, border=5, flag=wx.GROW | wx.ALL)
    managed_dir_label = wx.StaticText(self.Editor, label=_(self.TagName) + ":")
    - left_sizer.AddWindow(managed_dir_label, border=5, flag=wx.GROW | wx.BOTTOM)
    + left_sizer.Add(managed_dir_label, border=5, flag=wx.GROW | wx.BOTTOM)
    FILTER = _("All files (*.*)|*.*|CSV files (*.csv)|*.csv")
    self.ManagedDir = FolderTree(self.Editor, self.Folder, FILTER)
    - left_sizer.AddWindow(self.ManagedDir, 1, flag=wx.GROW)
    + left_sizer.Add(self.ManagedDir, 1, flag=wx.GROW)
    managed_treectrl = self.ManagedDir.GetTreeCtrl()
    self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, managed_treectrl)
    @@ -58,7 +58,7 @@
    self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTreeBeginDrag, managed_treectrl)
    button_sizer = wx.BoxSizer(wx.VERTICAL)
    - main_sizer.AddSizer(button_sizer, border=5,
    + main_sizer.Add(button_sizer, border=5,
    flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
    for idx, (name, bitmap, help) in enumerate([
    @@ -70,26 +70,26 @@
    self.Editor,
    bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    if idx > 0:
    flag = wx.TOP
    else:
    flag = 0
    self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button)
    - button_sizer.AddWindow(button, border=20, flag=flag)
    + button_sizer.Add(button, border=20, flag=flag)
    right_sizer = wx.BoxSizer(wx.VERTICAL)
    - main_sizer.AddSizer(right_sizer, 1, border=5, flag=wx.GROW | wx.ALL)
    + main_sizer.Add(right_sizer, 1, border=5, flag=wx.GROW | wx.ALL)
    if wx.Platform == '__WXMSW__':
    system_dir_label = wx.StaticText(self.Editor, label=_("My Computer:"))
    else:
    system_dir_label = wx.StaticText(self.Editor, label=_("Home Directory:"))
    - right_sizer.AddWindow(system_dir_label, border=5, flag=wx.GROW | wx.BOTTOM)
    + right_sizer.Add(system_dir_label, border=5, flag=wx.GROW | wx.BOTTOM)
    self.SystemDir = FolderTree(self.Editor, self.HomeDirectory, FILTER, False)
    - right_sizer.AddWindow(self.SystemDir, 1, flag=wx.GROW)
    + right_sizer.Add(self.SystemDir, 1, flag=wx.GROW)
    system_treectrl = self.SystemDir.GetTreeCtrl()
    self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, system_treectrl)
    --- a/editors/ProjectNodeEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/ProjectNodeEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -60,7 +60,7 @@
    ConfTreeNodeEditor.__init__(self, parent, controler, window, tagname)
    buttons_sizer = self.GenerateMethodButtonSizer()
    - self.MainSizer.InsertSizer(0, buttons_sizer, 0, border=5, flag=wx.ALL)
    + self.MainSizer.Insert(0, buttons_sizer, 0, border=5, flag=wx.ALL)
    self.MainSizer.Layout()
    self.VariableEditor = self.VariableEditorPanel
    --- a/editors/ResourceEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/ResourceEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -76,10 +76,6 @@
    return [_("Interrupt"), _("Cyclic")]
    -def SingleCellEditor(*x):
    - return wx.grid.GridCellChoiceEditor()
    -
    -
    def CheckSingle(single, varlist):
    return single in varlist
    @@ -162,25 +158,21 @@
    if interval != "" and IEC_TIME_MODEL.match(interval.upper()) is None:
    error = True
    elif colname == "Single":
    - editor = SingleCellEditor(self, colname)
    - editor.SetParameters(self.Parent.VariableList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.VariableList)
    if self.GetValueByName(row, "Triggering") != "Interrupt":
    grid.SetReadOnly(row, col, True)
    single = self.GetValueByName(row, colname)
    if single != "" and not CheckSingle(single, self.Parent.VariableList):
    error = True
    elif colname == "Triggering":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(",".join(map(_, GetTaskTriggeringOptions())))
    + editor = wx.grid.GridCellChoiceEditor(map(_, GetTaskTriggeringOptions()))
    elif colname == "Type":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(self.Parent.TypeList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.TypeList)
    elif colname == "Priority":
    editor = wx.grid.GridCellNumberEditor()
    editor.SetParameters("0,65535")
    elif colname == "Task":
    - editor = wx.grid.GridCellChoiceEditor()
    - editor.SetParameters(self.Parent.TaskList)
    + editor = wx.grid.GridCellChoiceEditor(self.Parent.TaskList)
    grid.SetCellEditor(row, col, editor)
    grid.SetCellRenderer(row, col, renderer)
    @@ -230,16 +222,16 @@
    tasks_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
    tasks_sizer.AddGrowableCol(0)
    tasks_sizer.AddGrowableRow(1)
    - main_sizer.AddSizer(tasks_sizer, border=5,
    + main_sizer.Add(tasks_sizer, border=5,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    tasks_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
    tasks_buttons_sizer.AddGrowableCol(0)
    tasks_buttons_sizer.AddGrowableRow(0)
    - tasks_sizer.AddSizer(tasks_buttons_sizer, flag=wx.GROW)
    + tasks_sizer.Add(tasks_buttons_sizer, flag=wx.GROW)
    tasks_label = wx.StaticText(self.Editor, label=_(u'Tasks:'))
    - tasks_buttons_sizer.AddWindow(tasks_label, flag=wx.ALIGN_BOTTOM)
    + tasks_buttons_sizer.Add(tasks_label, flag=wx.ALIGN_BOTTOM)
    for name, bitmap, help in [
    ("AddTaskButton", "add_element", _("Add task")),
    @@ -250,27 +242,27 @@
    bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28),
    style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - tasks_buttons_sizer.AddWindow(button)
    + tasks_buttons_sizer.Add(button)
    self.TasksGrid = CustomGrid(self.Editor, style=wx.VSCROLL)
    - self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange)
    - tasks_sizer.AddWindow(self.TasksGrid, flag=wx.GROW)
    + self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING, self.OnTasksGridCellChange)
    + tasks_sizer.Add(self.TasksGrid, flag=wx.GROW)
    instances_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
    instances_sizer.AddGrowableCol(0)
    instances_sizer.AddGrowableRow(1)
    - main_sizer.AddSizer(instances_sizer, border=5,
    + main_sizer.Add(instances_sizer, border=5,
    flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    instances_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
    instances_buttons_sizer.AddGrowableCol(0)
    instances_buttons_sizer.AddGrowableRow(0)
    - instances_sizer.AddSizer(instances_buttons_sizer, flag=wx.GROW)
    + instances_sizer.Add(instances_buttons_sizer, flag=wx.GROW)
    instances_label = wx.StaticText(self.Editor, label=_(u'Instances:'))
    - instances_buttons_sizer.AddWindow(instances_label, flag=wx.ALIGN_BOTTOM)
    + instances_buttons_sizer.Add(instances_label, flag=wx.ALIGN_BOTTOM)
    for name, bitmap, help in [
    ("AddInstanceButton", "add_element", _("Add instance")),
    @@ -280,13 +272,13 @@
    button = wx.lib.buttons.GenBitmapButton(
    self.Editor, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - instances_buttons_sizer.AddWindow(button)
    + instances_buttons_sizer.Add(button)
    self.InstancesGrid = CustomGrid(self.Editor, style=wx.VSCROLL)
    - self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange)
    - instances_sizer.AddWindow(self.InstancesGrid, flag=wx.GROW)
    + self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING, self.OnInstancesGridCellChange)
    + instances_sizer.Add(self.InstancesGrid, flag=wx.GROW)
    self.Editor.SetSizer(main_sizer)
    @@ -405,20 +397,20 @@
    self.RefreshHighlightsTimer.Stop()
    def RefreshTypeList(self):
    - self.TypeList = ""
    + self.TypeList = []
    blocktypes = self.Controler.GetBlockResource()
    for blocktype in blocktypes:
    - self.TypeList += ",%s" % blocktype
    + self.TypeList.append(blocktype)
    def RefreshTaskList(self):
    - self.TaskList = ""
    + self.TaskList = []
    for row in xrange(self.TasksTable.GetNumberRows()):
    - self.TaskList += ",%s" % self.TasksTable.GetValueByName(row, "Name")
    + self.TaskList.append(self.TasksTable.GetValueByName(row, "Name"))
    def RefreshVariableList(self):
    - self.VariableList = ""
    + self.VariableList = []
    for variable in self.Controler.GetEditedResourceVariables(self.TagName):
    - self.VariableList += ",%s" % variable
    + self.VariableList.append(variable)
    def RefreshModel(self):
    self.Controler.SetEditedResourceInfos(self.TagName, self.TasksTable.GetData(), self.InstancesTable.GetData())
    @@ -481,7 +473,7 @@
    wx.CallAfter(self.ShowErrorMessage, message)
    return
    - tasklist = [name for name in self.TaskList.split(",") if name != ""]
    + tasklist = [name for name in self.TaskList if name != ""]
    for i in xrange(self.TasksTable.GetNumberRows()):
    task = self.TasksTable.GetValueByName(i, "Name")
    if task in tasklist:
    --- a/editors/TextViewer.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/TextViewer.py Thu Sep 02 22:18:14 2021 +0200
    @@ -198,12 +198,20 @@
    def Colourise(self, start, end):
    self.Editor.Colourise(start, end)
    - def StartStyling(self, pos, mask):
    - self.Editor.StartStyling(pos, mask)
    + def StartStyling(self, pos):
    + self.Editor.StartStyling(pos)
    +
    + INDIC0 = 0
    + INDIC1 = 1
    + INDIC2 = 2
    def SetStyling(self, length, style):
    self.Editor.SetStyling(length, style)
    + def SetIndicatorCurrentFillRange(start, length, indic):
    + self.Editor.SetIndicatorCurrent(indic)
    + self.Editor.IndicatorFillRange(start, length)
    +
    def GetCurrentPos(self):
    return self.Editor.GetCurrentPos()
    @@ -559,7 +567,7 @@
    start_pos = last_styled_pos = self.Editor.GetLineEndPosition(line_number - 1) + 1
    self.RefreshLineFolding(line_number)
    end_pos = event.GetPosition()
    - self.StartStyling(start_pos, 0xff)
    + self.StartStyling(start_pos)
    current_context = self.Variables
    current_call = None
    @@ -594,9 +602,8 @@
    else:
    self.SetStyling(current_pos - last_styled_pos, STC_PLC_EMPTY)
    if word not in ["]", ")"] and (self.GetCurrentPos() < last_styled_pos or self.GetCurrentPos() > current_pos):
    - self.StartStyling(last_styled_pos, wx.stc.STC_INDICS_MASK)
    - self.SetStyling(current_pos - last_styled_pos, wx.stc.STC_INDIC0_MASK)
    - self.StartStyling(current_pos, 0xff)
    + self.SetIndicatorCurrentFillRange(last_styled_pos, current_pos - last_styled_pos, self.INDIC0)
    + self.StartStyling(current_pos)
    else:
    self.SetStyling(current_pos - last_styled_pos, STC_PLC_EMPTY)
    last_styled_pos = current_pos
    @@ -697,9 +704,8 @@
    else:
    self.SetStyling(current_pos - last_styled_pos, STC_PLC_EMPTY)
    if word not in ["]", ")"] and (self.GetCurrentPos() < last_styled_pos or self.GetCurrentPos() > current_pos):
    - self.StartStyling(last_styled_pos, wx.stc.STC_INDICS_MASK)
    - self.SetStyling(current_pos - last_styled_pos, wx.stc.STC_INDIC0_MASK)
    - self.StartStyling(current_pos, 0xff)
    + self.SetIndicatorCurrentFillRange(last_styled_pos, current_pos - last_styled_pos, self.INDIC0)
    + self.StartStyling(current_pos)
    if char == '.':
    if word != "]":
    if current_context is not None:
    @@ -955,8 +961,8 @@
    else:
    highlight_end_pos = self.Editor.GetLineEndPosition(end[0] - 1) + end[1] - indent + 2
    if highlight_start_pos < end_pos and highlight_end_pos > start_pos:
    - self.StartStyling(highlight_start_pos, 0xff)
    + self.StartStyling(highlight_start_pos)
    self.SetStyling(highlight_end_pos - highlight_start_pos, highlight_type)
    - self.StartStyling(highlight_start_pos, 0x00)
    + self.StartStyling(highlight_start_pos)
    until_end = max(0, len(self.Editor.GetText()) - highlight_end_pos)
    self.SetStyling(until_end, wx.stc.STC_STYLE_DEFAULT)
    --- a/editors/Viewer.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/editors/Viewer.py Thu Sep 02 22:18:14 2021 +0200
    @@ -60,11 +60,11 @@
    global CURSORS
    if CURSORS is None:
    CURSORS = [wx.NullCursor,
    - wx.StockCursor(wx.CURSOR_HAND),
    - wx.StockCursor(wx.CURSOR_SIZENWSE),
    - wx.StockCursor(wx.CURSOR_SIZENESW),
    - wx.StockCursor(wx.CURSOR_SIZEWE),
    - wx.StockCursor(wx.CURSOR_SIZENS)]
    + wx.Cursor(wx.CURSOR_HAND),
    + wx.Cursor(wx.CURSOR_SIZENWSE),
    + wx.Cursor(wx.CURSOR_SIZENESW),
    + wx.Cursor(wx.CURSOR_SIZEWE),
    + wx.Cursor(wx.CURSOR_SIZENS)]
    if wx.Platform == '__WXMSW__':
    @@ -410,7 +410,7 @@
    if len(tree[0]) > 0:
    menu = wx.Menu(title='')
    self.GenerateTreeMenu(x, y, scaling, menu, "", var_class, [(values[0], values[2], tree)])
    - self.ParentWindow.PopupMenuXY(menu)
    + self.ParentWindow.PopupMenu(menu)
    else:
    self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, values[0], values[2])
    else:
    @@ -712,7 +712,7 @@
    break
    faces["size"] -= 1
    self.Editor.SetFont(font)
    - self.MiniTextDC = wx.MemoryDC(wx.EmptyBitmap(1, 1))
    + self.MiniTextDC = wx.MemoryDC(wx.Bitmap(1, 1))
    self.MiniTextDC.SetFont(wx.Font(faces["size"] * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["helv"]))
    self.CurrentScale = None
    @@ -827,7 +827,7 @@
    def GetLogicalDC(self, buffered=False):
    if buffered:
    - bitmap = wx.EmptyBitmap(*self.Editor.GetClientSize())
    + bitmap = wx.Bitmap(*self.Editor.GetClientSize())
    dc = wx.MemoryDC(bitmap)
    else:
    dc = wx.ClientDC(self.Editor)
    @@ -1058,7 +1058,7 @@
    self.SelectedElement.SetSelected(False)
    self.SelectedElement = None
    if self.Mode == MODE_MOTION:
    - wx.CallAfter(self.Editor.SetCursor, wx.StockCursor(wx.CURSOR_HAND))
    + wx.CallAfter(self.Editor.SetCursor, wx.Cursor(wx.CURSOR_HAND))
    self.SavedMode = True
    # Return current drawing mode
    @@ -1116,13 +1116,13 @@
    if self.DrawGrid:
    width = max(2, int(scaling[0] * self.ViewScale[0]))
    height = max(2, int(scaling[1] * self.ViewScale[1]))
    - bitmap = wx.EmptyBitmap(width, height)
    + bitmap = wx.Bitmap(width, height)
    dc = wx.MemoryDC(bitmap)
    dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour()))
    dc.Clear()
    dc.SetPen(MiterPen(wx.Colour(180, 180, 180)))
    dc.DrawPoint(0, 0)
    - self.GridBrush = wx.BrushFromBitmap(bitmap)
    + self.GridBrush = wx.Brush(bitmap)
    else:
    self.GridBrush = wx.TRANSPARENT_BRUSH
    else:
    @@ -3379,7 +3379,7 @@
    element = self.ParentWindow.GetCopyBuffer()
    if bbx is None:
    mouse_pos = self.Editor.ScreenToClient(wx.GetMousePosition())
    - middle = wx.Rect(0, 0, *self.Editor.GetClientSize()).InsideXY(mouse_pos.x, mouse_pos.y)
    + middle = wx.Rect(0, 0, *self.Editor.GetClientSize()).Contains(mouse_pos.x, mouse_pos.y)
    if middle:
    x, y = self.CalcUnscrolledPosition(mouse_pos.x, mouse_pos.y)
    else:
    @@ -3633,7 +3633,6 @@
    else:
    dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour()))
    dc.Clear()
    - dc.BeginDrawing()
    if self.Scaling is not None and self.DrawGrid and not printing:
    dc.SetPen(wx.TRANSPARENT_PEN)
    dc.SetBrush(self.GridBrush)
    @@ -3680,7 +3679,6 @@
    self.InstanceName.Draw(dc)
    if self.rubberBand.IsShown():
    self.rubberBand.Draw(dc)
    - dc.EndDrawing()
    def OnPaint(self, event):
    dc = self.GetLogicalDC(True)
    --- a/etherlab/ConfigEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/etherlab/ConfigEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -16,7 +16,7 @@
    import wx
    import wx.grid
    -import wx.gizmos
    +import wx.adv
    import wx.lib.buttons
    from plcopen.structures import IEC_KEYWORDS, TestIdentifier
    @@ -81,9 +81,9 @@
    self.VariablesFilter.Bind(wx.EVT_COMBOBOX, self.OnVariablesFilterChanged)
    self.VariablesFilter.Bind(wx.EVT_TEXT_ENTER, self.OnVariablesFilterChanged)
    self.VariablesFilter.Bind(wx.EVT_CHAR, self.OnVariablesFilterKeyDown)
    - self.AddWindow(self.VariablesFilter, flag=wx.GROW)
    + self.Add(self.VariablesFilter, flag=wx.GROW)
    - self.VariablesGrid = wx.gizmos.TreeListCtrl(parent,
    + self.VariablesGrid = wx.adv.TreeListCtrl(parent,
    style=wx.TR_DEFAULT_STYLE |
    wx.TR_ROW_LINES |
    wx.TR_COLUMN_LINES |
    @@ -91,7 +91,7 @@
    wx.TR_FULL_ROW_HIGHLIGHT)
    self.VariablesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN,
    self.OnVariablesGridLeftClick)
    - self.AddWindow(self.VariablesGrid, flag=wx.GROW)
    + self.Add(self.VariablesGrid, flag=wx.GROW)
    self.Filters = []
    for desc, value in VARIABLES_FILTERS:
    @@ -274,10 +274,10 @@
    variables_label = wx.StaticText(self.EthercatNodeEditor,
    label=_('Variable entries:'))
    - main_sizer.AddWindow(variables_label, border=10, flag=wx.TOP | wx.LEFT | wx.RIGHT)
    + main_sizer.Add(variables_label, border=10, flag=wx.TOP | wx.LEFT | wx.RIGHT)
    self.NodeVariables = NodeVariablesSizer(self.EthercatNodeEditor, self.Controler)
    - main_sizer.AddSizer(self.NodeVariables, border=10,
    + main_sizer.Add(self.NodeVariables, border=10,
    flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.EthercatNodeEditor.SetSizer(main_sizer)
    @@ -310,7 +310,7 @@
    self.EtherCATManagementTreebook = EtherCATManagementTreebook(self.EtherCATManagementEditor, self.Controler, self)
    - self.EtherCATManagermentEditor_Main_Sizer.AddSizer(self.EtherCATManagementTreebook, border=10, flag=wx.GROW)
    + self.EtherCATManagermentEditor_Main_Sizer.Add(self.EtherCATManagementTreebook, border=10, flag=wx.GROW)
    self.EtherCATManagementEditor.SetSizer(self.EtherCATManagermentEditor_Main_Sizer)
    return self.EtherCATManagementEditor
    @@ -617,7 +617,7 @@
    self.MasterStateEditor_Panel = MasterStatePanelClass(self.MasterStateEditor, self.Controler)
    - self.MasterStateEditor_Panel_Main_Sizer.AddSizer(self.MasterStateEditor_Panel, border=10, flag=wx.GROW)
    + self.MasterStateEditor_Panel_Main_Sizer.Add(self.MasterStateEditor_Panel, border=10, flag=wx.GROW)
    self.MasterStateEditor.SetSizer(self.MasterStateEditor_Panel_Main_Sizer)
    return self.MasterStateEditor
    @@ -651,7 +651,7 @@
    process_variables_label = wx.StaticText(self.EthercatMasterEditor,
    label=_("Process variables mapped between nodes:"))
    - process_variables_header.AddWindow(process_variables_label, 1,
    + process_variables_header.Add(process_variables_label, 1,
    flag=wx.ALIGN_CENTER_VERTICAL)
    for name, bitmap, help in [
    @@ -661,14 +661,14 @@
    ("DownVariableButton", "down", _("Move process variable down"))]:
    button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - process_variables_header.AddWindow(button, border=5, flag=wx.LEFT)
    + process_variables_header.Add(button, border=5, flag=wx.LEFT)
    self.ProcessVariablesGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
    self.ProcessVariablesGrid.SetMinSize(wx.Size(0, 150))
    self.ProcessVariablesGrid.SetDropTarget(ProcessVariableDropTarget(self))
    - self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
    + self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING,
    self.OnProcessVariablesGridCellChange)
    self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK,
    self.OnProcessVariablesGridCellLeftClick)
    @@ -678,7 +678,7 @@
    startup_commands_label = wx.StaticText(self.EthercatMasterEditor,
    label=_("Startup service variables assignments:"))
    - startup_commands_header.AddWindow(startup_commands_label, 1,
    + startup_commands_header.Add(startup_commands_label, 1,
    flag=wx.ALIGN_CENTER_VERTICAL)
    for name, bitmap, help in [
    @@ -686,14 +686,14 @@
    ("DeleteCommandButton", "remove_element", _("Remove startup service variable"))]:
    button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28), style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    - startup_commands_header.AddWindow(button, border=5, flag=wx.LEFT)
    + startup_commands_header.Add(button, border=5, flag=wx.LEFT)
    self.StartupCommandsGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
    self.StartupCommandsGrid.SetDropTarget(StartupCommandDropTarget(self))
    self.StartupCommandsGrid.SetMinSize(wx.Size(0, 150))
    - self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
    + self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING,
    self.OnStartupCommandsGridCellChange)
    self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
    self.OnStartupCommandsGridEditorShow)
    @@ -702,29 +702,29 @@
    main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:"))
    staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL)
    - self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW | wx.ALL)
    + self.EthercatMasterEditorSizer.Add(staticbox_sizer, 0, border=10, flag=wx.GROW | wx.ALL)
    main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0)
    main_staticbox_sizer.AddGrowableCol(0)
    main_staticbox_sizer.AddGrowableRow(2)
    main_staticbox_sizer.AddGrowableRow(4)
    main_staticbox_sizer.AddGrowableRow(5)
    - staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW)
    - main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW | wx.ALL)
    - main_staticbox_sizer.AddSizer(process_variables_header, border=5,
    + staticbox_sizer.Add(main_staticbox_sizer, 1, flag=wx.GROW)
    + main_staticbox_sizer.Add(self.NodesFilter, border=5, flag=wx.GROW | wx.ALL)
    + main_staticbox_sizer.Add(process_variables_header, border=5,
    flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
    - main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1,
    + main_staticbox_sizer.Add(self.ProcessVariablesGrid, 1,
    border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
    - main_staticbox_sizer.AddSizer(startup_commands_header,
    + main_staticbox_sizer.Add(startup_commands_header,
    border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
    - main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1,
    + main_staticbox_sizer.Add(self.StartupCommandsGrid, 1,
    border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
    second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
    second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
    - second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW | wx.ALL)
    + second_staticbox_sizer.Add(self.NodesVariables, 1, border=5, flag=wx.GROW | wx.ALL)
    - main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1,
    + main_staticbox_sizer.Add(second_staticbox_sizer, 1,
    border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
    self.EthercatMasterEditor.SetSizer(self.EthercatMasterEditorSizer)
    @@ -1113,21 +1113,21 @@
    ESI_files_label = wx.StaticText(parent,
    label=_("ESI Files:"))
    - self.AddWindow(ESI_files_label, border=10,
    + self.Add(ESI_files_label, border=10,
    flag=wx.TOP | wx.LEFT | wx.RIGHT)
    folder_tree_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=0)
    folder_tree_sizer.AddGrowableCol(0)
    folder_tree_sizer.AddGrowableRow(0)
    - self.AddSizer(folder_tree_sizer, border=10,
    + self.Add(folder_tree_sizer, border=10,
    flag=wx.GROW | wx.LEFT | wx.RIGHT)
    self.ESIFiles = FolderTree(parent, self.GetPath(), editable=False)
    self.ESIFiles.SetFilter(".xml")
    - folder_tree_sizer.AddWindow(self.ESIFiles, flag=wx.GROW)
    + folder_tree_sizer.Add(self.ESIFiles, flag=wx.GROW)
    buttons_sizer = wx.BoxSizer(wx.VERTICAL)
    - folder_tree_sizer.AddSizer(buttons_sizer,
    + folder_tree_sizer.Add(buttons_sizer,
    flag=wx.ALIGN_CENTER_VERTICAL)
    for idx, (name, bitmap, help, callback) in enumerate(buttons):
    @@ -1135,7 +1135,7 @@
    bitmap=GetBitmap(bitmap),
    size=wx.Size(28, 28),
    style=wx.NO_BORDER)
    - button.SetToolTipString(help)
    + button.SetToolTip(help)
    setattr(self, name, button)
    if idx > 0:
    flag = wx.TOP
    @@ -1145,14 +1145,14 @@
    callback = getattr(self, "On" + name, None)
    if callback is not None:
    parent.Bind(wx.EVT_BUTTON, callback, button)
    - buttons_sizer.AddWindow(button, border=10, flag=flag)
    + buttons_sizer.Add(button, border=10, flag=flag)
    modules_label = wx.StaticText(parent,
    label=_("Modules library:"))
    - self.AddSizer(modules_label, border=10,
    + self.Add(modules_label, border=10,
    flag=wx.LEFT | wx.RIGHT)
    - self.ModulesGrid = wx.gizmos.TreeListCtrl(parent,
    + self.ModulesGrid = wx.adv.TreeListCtrl(parent,
    style=wx.TR_DEFAULT_STYLE |
    wx.TR_ROW_LINES |
    wx.TR_COLUMN_LINES |
    @@ -1166,7 +1166,7 @@
    self.OnModulesGridEndLabelEdit)
    self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION,
    self.OnModulesGridHeaderMotion)
    - self.AddWindow(self.ModulesGrid, border=10,
    + self.Add(self.ModulesGrid, border=10,
    flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    for colname, colsize, colalign in zip(
    @@ -1335,7 +1335,7 @@
    if col > 0 and self.LastToolTipCol != col:
    self.LastToolTipCol = col
    _param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1]
    - wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString,
    + wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTip,
    param_infos["description"])
    event.Skip()
    @@ -1359,13 +1359,14 @@
    ("DeleteButton", "remove_element", _("Remove file from database"), None)
    ])
    self.DatabaseSizer.SetControlMinSize(wx.Size(0, 0))
    - main_sizer.AddSizer(self.DatabaseSizer, border=10,
    + main_sizer.Add(self.DatabaseSizer, border=10,
    flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
    button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
    - button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project"))
    - button_sizer.GetCancelButton().SetLabel(_("Close"))
    - main_sizer.AddSizer(button_sizer, border=10,
    + # FIXME: find a way to change buttons label compatible with wxPython 4.x
    + # button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project"))
    + # button_sizer.GetCancelButton().SetLabel(_("Close"))
    + main_sizer.Add(button_sizer, border=10,
    flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
    self.SetSizer(main_sizer)
    --- a/etherlab/EtherCATManagementEditor.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/etherlab/EtherCATManagementEditor.py Thu Sep 02 22:18:14 2021 +0200
    @@ -15,7 +15,7 @@
    import wx
    import wx.grid
    -import wx.gizmos
    +import wx.adv
    import wx.lib.buttons
    # --------------------------------------------------------------------
    @@ -135,7 +135,7 @@
    self.SizerDic["SlaveInfosDetailsInnerSizer"].AddMany([self.StaticTextDic[statictext_name],
    self.TextCtrlDic[textctrl_name]])
    - self.SizerDic["SlaveInfosDetailsBox"].AddSizer(self.SizerDic["SlaveInfosDetailsInnerSizer"])
    + self.SizerDic["SlaveInfosDetailsBox"].Add(self.SizerDic["SlaveInfosDetailsInnerSizer"])
    self.SyncManagersGrid = CustomGrid(self, size=wx.Size(605, 155), style=wx.VSCROLL)
    @@ -153,7 +153,7 @@
    for button_name, button_id, button_label, button_tooltipstring, event_method, sub_item in buttons:
    self.ButtonDic[button_name] = wx.Button(self, id=button_id, label=_(button_label))
    self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method)
    - self.ButtonDic[button_name].SetToolTipString(button_tooltipstring)
    + self.ButtonDic[button_name].SetToolTip(button_tooltipstring)
    self.SizerDic["SlaveState_up_sizer"].Add(self.ButtonDic[button_name])
    for statictext_name, statictext_label, textctrl_name in sub_item:
    self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label))
    @@ -166,7 +166,7 @@
    ("StopTimerButton", "Stop State Monitoring", "Slave State Update Stop", self.CurrentStateThreadStop)]:
    self.ButtonDic[button_name] = wx.Button(self, label=_(button_label))
    self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method)
    - self.ButtonDic[button_name].SetToolTipString(button_tooltipstring)
    + self.ButtonDic[button_name].SetToolTip(button_tooltipstring)
    self.SizerDic["SlaveState_down_sizer"].Add(self.ButtonDic[button_name])
    self.SizerDic["SlaveState_sizer"].AddMany([self.SizerDic["SlaveState_up_sizer"],
    @@ -1729,7 +1729,7 @@
    wx.Panel.__init__(self, parent, -1, size=(350, 500))
    - self.Tree = wx.gizmos.TreeListCtrl(self, -1, size=(350, 500),
    + self.Tree = wx.adv.TreeListCtrl(self, -1, size=(350, 500),
    style=(wx.TR_DEFAULT_STYLE |
    wx.TR_FULL_ROW_HIGHLIGHT |
    wx.TR_HIDE_ROOT |
    @@ -2692,7 +2692,7 @@
    self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
    self.MasterStateSizer['innerMasterState'].AddMany([self.StaticText[key], self.TextCtrl[key]])
    - self.MasterStateSizer['masterState'].AddSizer(self.MasterStateSizer['innerMasterState'])
    + self.MasterStateSizer['masterState'].Add(self.MasterStateSizer['innerMasterState'])
    # ----------------------- Ethernet Network Card Information ---------------------------------------
    for key, label in [
    @@ -2705,7 +2705,7 @@
    self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
    self.MasterStateSizer['innerDeviceInfo'].AddMany([self.StaticText[key], self.TextCtrl[key]])
    - self.MasterStateSizer['deviceInfo'].AddSizer(self.MasterStateSizer['innerDeviceInfo'])
    + self.MasterStateSizer['deviceInfo'].Add(self.MasterStateSizer['innerDeviceInfo'])
    # ----------------------- Network Frame Information -----------------------------------------------
    for key, label in [
    @@ -2722,13 +2722,13 @@
    self.TextCtrl[key][index] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
    self.MasterStateSizer['innerFrameInfo'].Add(self.TextCtrl[key][index])
    - self.MasterStateSizer['frameInfo'].AddSizer(self.MasterStateSizer['innerFrameInfo'])
    + self.MasterStateSizer['frameInfo'].Add(self.MasterStateSizer['innerFrameInfo'])
    # ------------------------------- Slave Information -----------------------------------------------
    self.SITreeListCtrl = SITreeListCtrl(self, self.Controler)
    self.MasterStateSizer["innerSlaveInfo"].AddMany([self.SIUpdateButton,
    self.SITreeListCtrl])
    - self.MasterStateSizer["slaveInfo"].AddSizer(
    + self.MasterStateSizer["slaveInfo"].Add(
    self.MasterStateSizer["innerSlaveInfo"])
    # --------------------------------- Main Sizer ----------------------------------------------------
    @@ -2743,7 +2743,7 @@
    ("main", [
    "innerTop", "innerMiddle", "innerBottom"])]:
    for key2 in sub:
    - self.MasterStateSizer[key].AddSizer(self.MasterStateSizer[key2])
    + self.MasterStateSizer[key].Add(self.MasterStateSizer[key2])
    self.SetSizer(self.MasterStateSizer["main"])
    @@ -2798,7 +2798,7 @@
    self.Controler=controler
    - self.Tree = wx.gizmos.TreeListCtrl(self, -1, size=wx.Size(750,350),
    + self.Tree = wx.adv.TreeListCtrl(self, -1, size=wx.Size(750,350),
    style=wx.TR_HAS_BUTTONS
    |wx.TR_HIDE_ROOT
    |wx.TR_ROW_LINES
    --- a/graphics/FBD_Objects.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/graphics/FBD_Objects.py Thu Sep 02 22:18:14 2021 +0200
    @@ -122,10 +122,10 @@
    # Returns if the point given is in the bounding box
    def HitTest(self, pt, connectors=True):
    if self.Name != "":
    - test_text = self.GetTextBoundingBox().InsideXY(pt.x, pt.y)
    + test_text = self.GetTextBoundingBox().Contains(pt.x, pt.y)
    else:
    test_text = False
    - test_block = self.GetBlockBoundingBox(connectors).InsideXY(pt.x, pt.y)
    + test_block = self.GetBlockBoundingBox(connectors).Contains(pt.x, pt.y)
    return test_text or test_block
    # Returns the bounding box of the name outside the block
    @@ -392,7 +392,7 @@
    # pos = event.GetLogicalPosition(dc)
    # for input in self.Inputs:
    # rect = input.GetRedrawRect()
    -# if rect.InsideXY(pos.x, pos.y):
    +# if rect.Contains(pos.x, pos.y):
    # print "Find input"
    # tip = wx.TipWindow(self.Parent, "Test")
    # tip.SetBoundingRect(rect)
    --- a/graphics/GraphicCommons.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/graphics/GraphicCommons.py Thu Sep 02 22:18:14 2021 +0200
    @@ -388,11 +388,11 @@
    rect = self.BoundingBox
    else:
    rect = wx.Rect(self.Pos.x, self.Pos.y, self.Size[0], self.Size[1])
    - return rect.InsideXY(pt.x, pt.y)
    + return rect.Contains(pt.x, pt.y)
    # Returns if the point given is in the bounding box
    def IsInSelection(self, rect):
    - return rect.InsideXY(self.BoundingBox.x, self.BoundingBox.y) and rect.InsideXY(self.BoundingBox.x + self.BoundingBox.width, self.BoundingBox.y + self.BoundingBox.height)
    + return rect.Contains(self.BoundingBox.x, self.BoundingBox.y) and rect.Contains(self.BoundingBox.x + self.BoundingBox.width, self.BoundingBox.y + self.BoundingBox.height)
    # Override this method for refreshing the bounding box
    def RefreshBoundingBox(self):
    @@ -448,7 +448,7 @@
    intern_rect = wx.Rect(left + HANDLE_SIZE, top + HANDLE_SIZE, right - left - HANDLE_SIZE, bottom - top - HANDLE_SIZE)
    # Verify that this element is selected
    - if self.Selected and extern_rect.InsideXY(pt.x, pt.y) and not intern_rect.InsideXY(pt.x, pt.y):
    + if self.Selected and extern_rect.Contains(pt.x, pt.y) and not intern_rect.Contains(pt.x, pt.y):
    # Find if point is on a handle horizontally
    if left <= pt.x < left + HANDLE_SIZE:
    handle_x = 1
    @@ -1399,7 +1399,7 @@
    width = ANCHOR_DISTANCE * 2 + abs(self.Direction[0]) * CONNECTOR_SIZE
    height = ANCHOR_DISTANCE * 2 + abs(self.Direction[1]) * CONNECTOR_SIZE
    rect = wx.Rect(x, y, width, height)
    - inside = rect.InsideXY(pt.x, pt.y)
    + inside = rect.Contains(pt.x, pt.y)
    return inside
    @@ -1931,7 +1931,7 @@
    # Calculate a rectangle around the segment
    rect = wx.Rect(min(x1, x2) - ANCHOR_DISTANCE, min(y1, y2) - ANCHOR_DISTANCE,
    abs(x1 - x2) + 2 * ANCHOR_DISTANCE, abs(y1 - y2) + 2 * ANCHOR_DISTANCE)
    - test |= rect.InsideXY(pt.x, pt.y)
    + test |= rect.Contains(pt.x, pt.y)
    return test
    # Returns the wire start or end point if the point given is on one of them
    @@ -1939,13 +1939,13 @@
    # Test the wire start point
    rect = wx.Rect(self.Points[0].x - ANCHOR_DISTANCE, self.Points[0].y - ANCHOR_DISTANCE,
    2 * ANCHOR_DISTANCE, 2 * ANCHOR_DISTANCE)
    - if rect.InsideXY(pt.x, pt.y):
    + if rect.Contains(pt.x, pt.y):
    return 0
    # Test the wire end point
    if len(self.Points) > 1:
    rect = wx.Rect(self.Points[-1].x - ANCHOR_DISTANCE, self.Points[-1].y - ANCHOR_DISTANCE,
    2 * ANCHOR_DISTANCE, 2 * ANCHOR_DISTANCE)
    - if rect.InsideXY(pt.x, pt.y):
    + if rect.Contains(pt.x, pt.y):
    return -1
    return None
    @@ -1959,7 +1959,7 @@
    # Calculate a rectangle around the segment
    rect = wx.Rect(min(x1, x2) - ANCHOR_DISTANCE, min(y1, y2) - ANCHOR_DISTANCE,
    abs(x1 - x2) + 2 * ANCHOR_DISTANCE, abs(y1 - y2) + 2 * ANCHOR_DISTANCE)
    - if rect.InsideXY(pt.x, pt.y):
    + if rect.Contains(pt.x, pt.y):
    return i, self.Segments[i]
    return None
    --- a/graphics/RubberBand.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/graphics/RubberBand.py Thu Sep 02 22:18:14 2021 +0200
    @@ -94,7 +94,7 @@
    # Change viewer mouse cursor to reflect a rubberband bounding box is
    # edited
    - self.DrawingSurface.SetCursor(wx.StockCursor(wx.CURSOR_CROSS))
    + self.DrawingSurface.SetCursor(wx.Cursor(wx.CURSOR_CROSS))
    self.Redraw()
    --- a/graphics/SFC_Objects.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/graphics/SFC_Objects.py Thu Sep 02 22:18:14 2021 +0200
    @@ -719,7 +719,7 @@
    self.Pos.y + (self.Size[1] - text_height) // 2,
    text_width,
    text_height)
    - test_text = text_bbx.InsideXY(pt.x, pt.y)
    + test_text = text_bbx.Contains(pt.x, pt.y)
    else:
    test_text = False
    return test_text or Graphic_Element.HitTest(self, pt, connectors)
    @@ -1204,7 +1204,7 @@
    # Returns if the point given is in the bounding box
    def HitTest(self, pt, connectors=True):
    - return self.BoundingBox.InsideXY(pt.x, pt.y) or self.TestConnector(pt, exclude=False) is not None
    + return self.BoundingBox.Contains(pt.x, pt.y) or self.TestConnector(pt, exclude=False) is not None
    # Refresh the divergence bounding box
    def RefreshBoundingBox(self):
    @@ -1592,7 +1592,7 @@
    self.Pos.y + (self.Size[1] - text_height) // 2,
    text_width,
    text_height)
    - return text_bbx.InsideXY(pt.x, pt.y) or Graphic_Element.HitTest(self, pt, connectors)
    + return text_bbx.Contains(pt.x, pt.y) or Graphic_Element.HitTest(self, pt, connectors)
    # Refresh the jump bounding box
    def RefreshBoundingBox(self):
    --- a/svghmi/ui.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/svghmi/ui.py Thu Sep 02 22:18:14 2021 +0200
    @@ -57,13 +57,13 @@
    display_name = ('{} (class={})'.format(c.name, c.hmiclass)) \
    if c.hmiclass is not None else c.name
    tc_child = self.AppendItem(current_tc_root, display_name)
    - self.SetPyData(tc_child, c)
    + self.SetItemData(tc_child, c)
    self._recurseTree(c,tc_child)
    else:
    display_name = '{} {}'.format(c.nodetype[4:], c.name)
    tc_child = self.AppendItem(current_tc_root, display_name)
    - self.SetPyData(tc_child, c)
    + self.SetItemData(tc_child, c)
    def OnTreeNodeSelection(self, event):
    items = self.GetSelections()
    @@ -105,7 +105,7 @@
    root_display_name = _("Please build to see HMI Tree") \
    if hmi_tree_root is None else "HMI"
    self.root = self.AddRoot(root_display_name)
    - self.SetPyData(self.root, hmi_tree_root)
    + self.SetItemData(self.root, hmi_tree_root)
    if hmi_tree_root is not None:
    self._recurseTree(hmi_tree_root, self.root)
    @@ -145,11 +145,11 @@
    for d in dirlist:
    current_tc_root = self.AppendItem(current_tc_root, d)
    res.append(current_tc_root)
    - self.SetPyData(current_tc_root, None)
    + self.SetItemData(current_tc_root, None)
    dirlist = []
    res.pop()
    tc_child = self.AppendItem(current_tc_root, f)
    - self.SetPyData(tc_child, p)
    + self.SetItemData(tc_child, p)
    return res
    def MakeTree(self, lib_dir = None):
    @@ -162,7 +162,7 @@
    root_display_name = _("Please select widget library directory") \
    if lib_dir is None else os.path.basename(lib_dir)
    self.root = self.AddRoot(root_display_name)
    - self.SetPyData(self.root, None)
    + self.SetItemData(self.root, None)
    if lib_dir is not None and os.path.exists(lib_dir):
    self._recurseTree(lib_dir, self.root, [])
    --- a/util/BitmapLibrary.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/util/BitmapLibrary.py Thu Sep 02 22:18:14 2021 +0200
    @@ -71,7 +71,7 @@
    height = max(bmp1.GetHeight(), bmp2.GetHeight())
    # Create bitmap with both icons
    - bmp = wx.EmptyBitmap(width, height)
    + bmp = wx.Bitmap(width, height)
    dc = wx.MemoryDC()
    dc.SelectObject(bmp)
    dc.Clear()
    --- a/util/ExceptionHandler.py Thu Sep 02 21:36:29 2021 +0200
    +++ b/util/ExceptionHandler.py Thu Sep 02 22:18:14 2021 +0200
    @@ -49,7 +49,7 @@
    trcbck_lst.append(trcbck)
    # Allow clicking....
    - cap = wx.Window_GetCapture()
    + cap = wx.Window.GetCapture()
    if cap:
    cap.ReleaseMouse()