# HG changeset patch
# User Andrey Skvortsov <andrej.skvortzov@gmail.com>
# Date 1497887383 -10800
# Node ID 8043f32de7b8fa86f19adbf687f4547ffd239921
# Parent  a63bb402585289fd17192a866e09ae773e8b51e4
make all dialog have non-fixed size

this fixes the problem, that some controls may be hidden in some cases, because
dialog size is too small. This can happen when system fonts are bigger
than expected, default system them controls are bigger or if localized
strings are bigger than in English.

diff -r a63bb4025852 -r 8043f32de7b8 controls/ProjectPropertiesPanel.py
--- a/controls/ProjectPropertiesPanel.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/controls/ProjectPropertiesPanel.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2012: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -61,7 +62,7 @@
                   flag=wx.GROW|border|wx.RIGHT)
 
     def __init__(self, parent, controller=None, window=None, enable_required=True):
-        wx.Notebook.__init__(self, parent, size=wx.Size(500, 300))
+        wx.Notebook.__init__(self, parent)
 
         self.Controller = controller
         self.ParentWindow = window
@@ -199,7 +200,7 @@
               flag=wx.BOTTOM|wx.LEFT)
         
         self.ContentDescription = wx.TextCtrl(self.MiscellaneousPanel, 
-              style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER)
+              size=wx.Size(240,150), style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER)
         self.Bind(wx.EVT_TEXT_ENTER, self.OnContentDescriptionChanged, 
               self.ContentDescription)
         self.ContentDescription.Bind(wx.EVT_KILL_FOCUS, 
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/ActionBlockDialog.py
--- a/dialogs/ActionBlockDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/ActionBlockDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -4,6 +4,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -117,8 +118,7 @@
 class ActionBlockDialog(wx.Dialog):
     
     def __init__(self, parent):
-        wx.Dialog.__init__(self, parent,
-              size=wx.Size(500, 300), title=_('Edit action block properties'))
+        wx.Dialog.__init__(self, parent, title=_('Edit action block properties'))
         
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10)
         main_sizer.AddGrowableCol(0)
@@ -144,7 +144,7 @@
             setattr(self, name, button)
             top_sizer.AddWindow(button)
         
-        self.ActionsGrid = CustomGrid(self, size=wx.Size(0, 0), style=wx.VSCROLL)
+        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, 
@@ -163,7 +163,7 @@
         typelist = GetTypeList()       
         self.TypeList = ",".join(map(_,typelist))
         self.TranslateType = dict([(_(value), value) for value in typelist])
-        self.ColSizes = [60, 90, 80, 110, 80]
+        self.ColSizes = [60, 90, 130, 200, 50]
         self.ColAlignements = [wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
         
         self.ActionsGrid.SetTable(self.Table)
@@ -184,6 +184,7 @@
         self.Table.ResetView(self.ActionsGrid)
         self.ActionsGrid.SetFocus()
         self.ActionsGrid.RefreshButtons()
+        self.Fit()
     
     def OnOK(self, event):
         self.ActionsGrid.CloseEditControl()
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/BlockPreviewDialog.py
--- a/dialogs/BlockPreviewDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/BlockPreviewDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2013: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -38,16 +39,15 @@
 
 class BlockPreviewDialog(wx.Dialog):
     
-    def __init__(self, parent, controller, tagname, size, title):
+    def __init__(self, parent, controller, tagname, title):
         """
         Constructor
         @param parent: Parent wx.Window of dialog for modal
         @param controller: Reference to project controller
         @param tagname: Tagname of project POU edited
-        @param size: wx.Size object containing size of dialog
         @param title: Title of dialog frame
         """
-        wx.Dialog.__init__(self, parent, size=size, title=title)
+        wx.Dialog.__init__(self, parent, title=title)
         
         # Save reference to
         self.Controller = controller
@@ -80,6 +80,7 @@
         
         # Variable containing the graphic element name when dialog is opened
         self.DefaultElementName = None
+        self.Fit()
         
         # List of variables defined in POU {var_name: (var_class, var_type),...}
         self.VariableList = {}
@@ -114,8 +115,8 @@
             self.MainSizer.AddGrowableRow(main_growable_row)
         
         # Create a sizer for dividing parameters in two columns
-        column_sizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.MainSizer.AddSizer(column_sizer, border=20, 
+        self.ColumnSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.MainSizer.AddSizer(self.ColumnSizer, border=20, 
               flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
         
         # Create a sizer for left column
@@ -124,8 +125,8 @@
         self.LeftGridSizer.AddGrowableCol(0)
         if left_growable_row is not None:
             self.LeftGridSizer.AddGrowableRow(left_growable_row)
-        column_sizer.AddSizer(self.LeftGridSizer, 1, border=5, 
-              flag=wx.GROW|wx.RIGHT)
+        self.ColumnSizer.AddSizer(self.LeftGridSizer, 1, border=5, 
+              flag=wx.GROW|wx.RIGHT|wx.EXPAND)
         
         # Create a sizer for right column
         self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, 
@@ -133,7 +134,7 @@
         self.RightGridSizer.AddGrowableCol(0)
         if right_growable_row is not None:
             self.RightGridSizer.AddGrowableRow(right_growable_row)
-        column_sizer.AddSizer(self.RightGridSizer, 1, border=5, 
+        self.ColumnSizer.AddSizer(self.RightGridSizer, 1, border=5, 
               flag=wx.GROW|wx.LEFT)
         
         self.SetSizer(self.MainSizer)
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/BrowseLocationsDialog.py
--- a/dialogs/BrowseLocationsDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/BrowseLocationsDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -61,8 +62,7 @@
 class BrowseLocationsDialog(wx.Dialog):
     
     def __init__(self, parent, var_type, controller):
-        wx.Dialog.__init__(self, parent,  
-              size=wx.Size(600, 400), title=_('Browse Locations'),
+        wx.Dialog.__init__(self, parent, title=_('Browse Locations'),
               style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
         
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10)
@@ -75,6 +75,7 @@
         
         self.LocationsTree = wx.TreeCtrl(self, 
               style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER|wx.TR_HIDE_ROOT|wx.TR_LINES_AT_ROOT)
+        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, 
@@ -91,7 +92,7 @@
         button_gridsizer.AddWindow(direction_label,
               flag=wx.ALIGN_CENTER_VERTICAL)
         
-        self.DirFilterChoice = wx.ComboBox(self, size=wx.Size(0, -1), style=wx.CB_READONLY)
+        self.DirFilterChoice = wx.ComboBox(self, style=wx.CB_READONLY)
         self.Bind(wx.EVT_COMBOBOX, self.OnFilterChoice, self.DirFilterChoice)
         button_gridsizer.AddWindow(self.DirFilterChoice,
               flag=wx.GROW|wx.ALIGN_CENTER_VERTICAL)
@@ -100,7 +101,7 @@
         button_gridsizer.AddWindow(filter_label,
               flag=wx.ALIGN_CENTER_VERTICAL)
         
-        self.TypeFilterChoice = wx.ComboBox(self, size=wx.Size(0, -1), style=wx.CB_READONLY)
+        self.TypeFilterChoice = wx.ComboBox(self, style=wx.CB_READONLY)
         self.Bind(wx.EVT_COMBOBOX, self.OnFilterChoice, self.TypeFilterChoice)
         button_gridsizer.AddWindow(self.TypeFilterChoice,
               flag=wx.GROW|wx.ALIGN_CENTER_VERTICAL)
@@ -144,6 +145,7 @@
         self.RefreshFilters()
         
         self.RefreshLocationsTree()
+        self.Fit()
     
     def RefreshFilters(self):
         self.DirFilter = DIRFILTERCHOICE_OPTIONS[self.DirFilterChoice.GetStringSelection()]
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/BrowseValuesLibraryDialog.py
--- a/dialogs/BrowseValuesLibraryDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/BrowseValuesLibraryDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -33,18 +34,16 @@
     def __init__(self, parent, name, library, default=None):
         wx.Dialog.__init__(self,
               name='BrowseValueDialog', parent=parent,
-              size=wx.Size(600, 400), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
+              style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
               title=_('Browse %s values library') % name)
 
-        self.SetClientSize(wx.Size(600, 400))
-
         self.staticText1 = wx.StaticText(
               label=_('Choose a value for %s:') % name, name='staticText1', parent=self,
               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
         
         self.ValuesLibrary = wx.TreeCtrl(
               name='ValuesLibrary', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 0), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER|wx.TR_HIDE_ROOT|wx.TR_LINES_AT_ROOT)
+              size=wx.Size(400, 200), style=wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER|wx.TR_HIDE_ROOT|wx.TR_LINES_AT_ROOT)
         
         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
 
@@ -60,6 +59,7 @@
         self.flexGridSizer1.AddGrowableRow(1)
         
         self.SetSizer(self.flexGridSizer1)
+        self.Fit()
         
         root = self.ValuesLibrary.AddRoot("")
         self.GenerateValuesLibraryBranch(root, library, default)
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/ConnectionDialog.py
--- a/dialogs/ConnectionDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/ConnectionDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -49,10 +50,10 @@
         to all connector having the same name in POU (default: False)
         """
         BlockPreviewDialog.__init__(self, parent, controller, tagname, 
-              size=wx.Size(350, 250), title=_('Connection Properties'))
+              title=_('Connection Properties'))
         
         # Init common sizers
-        self._init_sizers(2, 0, 5, None, 2, 1)
+        self._init_sizers(2, 0, 7, 1, 0, None)
         
         # Create label for connection type
         type_label = wx.StaticText(self, label=_('Type:'))
@@ -77,16 +78,19 @@
         
         # 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)
         
         # 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.Preview.SetMinSize(wx.Size(-1,100))
+        self.LeftGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
+        self.LeftGridSizer.AddWindow(self.Preview, flag=wx.GROW)
         
         # Add buttons sizer to sizers
         self.MainSizer.AddSizer(self.ButtonSizer, border=20, 
               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
+        self.ColumnSizer.RemoveSizer(self.RightGridSizer)
         
         # Add button for applying connection name modification to all connection
         # of POU
@@ -95,13 +99,12 @@
             self.ApplyToAllButton.SetToolTipString(
                 _("Apply name modification to all continuations with the same name"))
             self.Bind(wx.EVT_BUTTON, self.OnApplyToAll, self.ApplyToAllButton)
-            self.ButtonSizer.AddWindow(self.ApplyToAllButton, 
-                    border=(3 if wx.Platform == '__WXMSW__' else 10),
-                    flag=wx.LEFT)
+            self.ButtonSizer.AddWindow(self.ApplyToAllButton, flag=wx.LEFT)
         else:
             self.ConnectionName.ChangeValue(
                 controller.GenerateNewName(
                         tagname, None, "Connection%d", 0))
+        self.Fit()
         
         # Connector radio button is default control having keyboard focus
         self.TypeRadioButtons[CONNECTOR].SetFocus()
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/DiscoveryDialog.py
--- a/dialogs/DiscoveryDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/DiscoveryDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -77,8 +78,7 @@
     
     def _init_ctrls(self, prnt):
         wx.Dialog.__init__(self, id=ID_DISCOVERYDIALOG, 
-              name='DiscoveryDialog', parent=prnt,  
-              size=wx.Size(600, 600), style=wx.DEFAULT_DIALOG_STYLE,
+              name='DiscoveryDialog', parent=prnt, style=wx.DEFAULT_DIALOG_STYLE,
               title=_('Service Discovery'))
         
         self.staticText1 = wx.StaticText(id=ID_DISCOVERYDIALOGSTATICTEXT1,
@@ -97,6 +97,7 @@
         self.ServicesList.SetColumnWidth(1, 150)
         self.ServicesList.SetColumnWidth(2, 150)
         self.ServicesList.SetColumnWidth(3, 150)
+        self.ServicesList.SetInitialSize(wx.Size(-1, 300))
         self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, id=ID_DISCOVERYDIALOGSERVICESLIST)
         self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated, id=ID_DISCOVERYDIALOGSERVICESLIST)
         
@@ -120,6 +121,7 @@
         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTER)
         
         self._init_sizers()
+        self.Fit()
         
     def __init__(self, parent):
         self._init_ctrls(parent)
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/DurationEditorDialog.py
--- a/dialogs/DurationEditorDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/DurationEditorDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -55,8 +56,7 @@
 class DurationEditorDialog(wx.Dialog):
 
     def __init__(self, parent):
-        wx.Dialog.__init__(self, parent, 
-              size=wx.Size(700, 200), title=_('Edit Duration'))
+        wx.Dialog.__init__(self, parent, title=_('Edit Duration'))
         
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
         main_sizer.AddGrowableCol(0)
@@ -91,7 +91,7 @@
               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
         
         self.SetSizer(main_sizer)
-        
+        self.Fit()
         self.Days.SetFocus()
         
     def SetDuration(self, value):
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/FBDBlockDialog.py
--- a/dialogs/FBDBlockDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/FBDBlockDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -56,7 +57,7 @@
         @param tagname: Tagname of project POU edited
         """
         BlockPreviewDialog.__init__(self, parent, controller, tagname,
-              size=wx.Size(600, 450), title=_('Block Properties'))
+              title=_('Block Properties'))
         
         # Init common sizers
         self._init_sizers(2, 0, 1, 0, 3, 2)
@@ -68,6 +69,8 @@
         
         # Create Library panel and add it to static box
         self.LibraryPanel = LibraryPanel(self)
+        self.LibraryPanel.SetInitialSize(wx.Size(-1, 400))
+        
         # Set function to call when selection in Library panel changed
         setattr(self.LibraryPanel, "_OnTreeItemSelected", 
               self.OnLibraryTreeItemSelected)
@@ -150,6 +153,7 @@
         
         # Refresh Library panel values
         self.LibraryPanel.SetBlockList(controller.GetBlockTypes(tagname))
+        self.Fit()
         self.LibraryPanel.SetFocus()
     
     def SetValues(self, values):
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/FBDVariableDialog.py
--- a/dialogs/FBDVariableDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/FBDVariableDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -60,7 +61,7 @@
         @param exclude_input: Exclude input from variable class selection
         """
         BlockPreviewDialog.__init__(self, parent, controller, tagname,
-              size=wx.Size(400, 380), title=_('Variable Properties'))
+              title=_('Variable Properties'))
         
         # Init common sizers
         self._init_sizers(4, 2, 4, None, 3, 2)
@@ -97,10 +98,10 @@
         
         # Create a list box to selected variable expression in the list of
         # variables defined in POU
-        self.VariableName = wx.ListBox(self, size=wx.Size(0, 120), 
+        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, flag=wx.GROW)
+        self.RightGridSizer.AddWindow(self.VariableName, border=4, flag=wx.GROW|wx.TOP)
         
         # Add preview panel and associated label to sizers
         self.MainSizer.AddWindow(self.PreviewLabel, border=20,
@@ -124,6 +125,9 @@
         # Refresh values in name list box
         self.RefreshNameList()
         
+        self.Preview.SetInitialSize(wx.Size(-1, 60))
+        self.Fit()
+
         # Class combo box is default control having keyboard focus
         self.Class.SetFocus()
 
@@ -187,6 +191,7 @@
         
         # Refresh preview panel
         self.RefreshPreview()
+        self.Fit()
         
     def GetValues(self):
         """
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/FindInPouDialog.py
--- a/dialogs/FindInPouDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/FindInPouDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -34,10 +35,7 @@
     
     def __init__(self, parent):
         wx.Dialog.__init__(self, parent, title=_("Find"),         
-              size=wx.Size(500, 280), style=wx.CAPTION|
-                                            wx.CLOSE_BOX|
-                                            wx.CLIP_CHILDREN|
-                                            wx.RESIZE_BORDER)
+              style=wx.CAPTION|wx.CLOSE_BOX|wx.CLIP_CHILDREN|wx.RESIZE_BORDER)
         
         self._init_icon(parent)
         panel = wx.Panel(self, style=wx.TAB_TRAVERSAL)
@@ -112,11 +110,18 @@
         self.Bind(wx.EVT_BUTTON, self.OnCloseButton, self.CloseButton)
         buttons_sizer.AddWindow(self.CloseButton)
 
-        self.StatusLabel = wx.StaticText(panel, label= "")
+        # 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)
         
         panel.SetSizer(main_sizer)
         main_sizer.Fit(self)
+
+        # clear message after dialog size calculation
+        self.SetStatusText("")
+
         
         self.ParentWindow = parent
         
@@ -169,7 +174,7 @@
                 CompilePattern(self.criteria)
             except:
                 self.criteria.clear()
-                message = _("Syntax error in regular expression of pattern to search!")
+                message = self.RegExpSyntaxErrMsg
             self.SetStatusText(message)
         if len(self.criteria) > 0:
             wx.CallAfter(self.ParentWindow.FindInPou,
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/LDElementDialog.py
--- a/dialogs/LDElementDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/LDElementDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -50,7 +51,6 @@
         @param type: Type of LD element ('contact or 'coil')
         """
         BlockPreviewDialog.__init__(self, parent, controller, tagname, 
-              size=wx.Size(350, 320 if type == "contact" else 380),
               title=(_("Edit Contact Values")
                      if type == "contact"
                      else _("Edit Coil Values")))
@@ -118,6 +118,7 @@
                value_type == "BOOL":
                 self.ElementVariable.Append(name)
         
+        self.Fit()
         # Normal radio button is default control having keyboard focus
         self.ModifierRadioButtons[element_modifiers[0]].SetFocus()
     
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/LDPowerRailDialog.py
--- a/dialogs/LDPowerRailDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/LDPowerRailDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -47,7 +48,7 @@
         @param tagname: Tagname of project POU edited
         """
         BlockPreviewDialog.__init__(self, parent, controller, tagname,
-              size=wx.Size(350, 260), title=_('Power Rail Properties'))
+              title=_('Power Rail Properties'))
         
         # Init common sizers
         self._init_sizers(2, 0, 5, None, 2, 1)
@@ -87,6 +88,7 @@
         # Add buttons sizer to sizers
         self.MainSizer.AddSizer(self.ButtonSizer, border=20, 
               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
+        self.Fit()
         
         # Left Power Rail radio button is default control having keyboard focus
         self.TypeRadioButtons[LEFTRAIL].SetFocus()
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/PouActionDialog.py
--- a/dialogs/PouActionDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/PouActionDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2012: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -34,8 +35,7 @@
 class PouActionDialog(wx.Dialog):
     
     def __init__(self, parent):
-        wx.Dialog.__init__(self, parent, size=wx.Size(320, 200), 
-              title=_('Create a new action'))
+        wx.Dialog.__init__(self, parent, title=_('Create a new action'))
         
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
         main_sizer.AddGrowableCol(0)
@@ -50,7 +50,7 @@
         infos_sizer.AddWindow(actionname_label, border=4, 
               flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP)
         
-        self.ActionName = wx.TextCtrl(self)
+        self.ActionName = wx.TextCtrl(self, size=wx.Size(180,-1))
         infos_sizer.AddWindow(self.ActionName, flag=wx.GROW)
         
         language_label = wx.StaticText(self, label=_('Language:'))
@@ -71,6 +71,7 @@
         for option in GetActionLanguages():
             self.Language.Append(_(option))
         
+        self.Fit()
         self.PouNames = []
         self.PouElementNames = []
     
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/PouDialog.py
--- a/dialogs/PouDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/PouDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2012: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -43,8 +44,7 @@
     def __init__(self, parent, pou_type = None):
         wx.Dialog.__init__(self, id=-1, parent=parent,
               name='PouDialog', title=_('Create a new POU'),
-              size=wx.Size(300, 200), style=wx.DEFAULT_DIALOG_STYLE)
-        self.SetClientSize(wx.Size(300, 200))
+              style=wx.DEFAULT_DIALOG_STYLE)
 
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
         main_sizer.AddGrowableCol(0)
@@ -89,7 +89,7 @@
         if pou_type is not None:
             self.PouType.SetStringSelection(_(pou_type))
         self.RefreshLanguage()
-
+        self.Fit()
         self.PouNames = []
         self.PouElementNames = []
 
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/PouTransitionDialog.py
--- a/dialogs/PouTransitionDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/PouTransitionDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2012: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -38,14 +39,13 @@
 class PouTransitionDialog(wx.Dialog):
     
     def __init__(self, parent):
-        wx.Dialog.__init__(self, parent, size=wx.Size(350, 200),
-              title=_('Create a new transition'))
+        wx.Dialog.__init__(self, parent, title=_('Create a new transition'))
         
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
         main_sizer.AddGrowableCol(0)
         main_sizer.AddGrowableRow(0)
         
-        infos_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=3, vgap=15)
+        infos_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=3, vgap=10)
         infos_sizer.AddGrowableCol(1)
         main_sizer.AddSizer(infos_sizer, border=20, 
               flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
@@ -54,7 +54,7 @@
         infos_sizer.AddWindow(transitionname_label, border=4, 
               flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP)
 
-        self.TransitionName = wx.TextCtrl(self)
+        self.TransitionName = wx.TextCtrl(self, size=wx.Size(180,-1))
         infos_sizer.AddWindow(self.TransitionName, flag=wx.GROW)
 
         language_label = wx.StaticText(self, label=_('Language:'))
@@ -63,17 +63,17 @@
         
         self.Language = wx.ComboBox(self, style=wx.CB_READONLY)
         infos_sizer.AddWindow(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|wx.LEFT|wx.RIGHT)
+        main_sizer.AddSizer(button_sizer, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM)
         
         self.SetSizer(main_sizer)
         
         for language in GetTransitionLanguages():
             self.Language.Append(_(language))
             
+        self.Fit()
         self.PouNames = []
         self.PouElementNames = []
         
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/ProjectDialog.py
--- a/dialogs/ProjectDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/ProjectDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2012: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -30,7 +31,7 @@
     
     def __init__(self, parent, enable_required=True):
         wx.Dialog.__init__(self, parent, title=_('Project properties'), 
-              size=wx.Size(500, 350), style=wx.DEFAULT_DIALOG_STYLE)
+              style=wx.DEFAULT_DIALOG_STYLE)
         
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
         main_sizer.AddGrowableCol(0)
@@ -47,6 +48,8 @@
               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
         
         self.SetSizer(main_sizer)
+        self.ProjectProperties.Fit()
+        self.Fit()
         
     def OnOK(self, event):
         values = self.ProjectProperties.GetValues()
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/SFCDivergenceDialog.py
--- a/dialogs/SFCDivergenceDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/SFCDivergenceDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -48,8 +49,7 @@
         @param tagname: Tagname of project POU edited
         @param poss_div_types: Types of divergence that will be available in the dialog window
         """
-        BlockPreviewDialog.__init__(self, parent, controller, tagname, 
-              size=wx.Size(500, 300), 
+        BlockPreviewDialog.__init__(self, parent, controller, tagname,
               title=_('Create a new divergence or convergence'))
         
         # Init common sizers
@@ -102,6 +102,8 @@
         self.MainSizer.AddSizer(self.ButtonSizer, border=20, 
               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
         
+        self.Fit()
+
         # Selection divergence radio button is default control having keyboard
         # focus
         self.TypeRadioButtons[focusbtn].SetFocus()
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/SFCStepDialog.py
--- a/dialogs/SFCStepDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/SFCStepDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -47,7 +48,7 @@
         @param initial: True if step is initial (default: False)
         """
         BlockPreviewDialog.__init__(self,parent, controller, tagname,  
-              size=wx.Size(400, 280), title=_('Edit Step'))
+              title=_('Edit Step'))
         
         # Init common sizers
         self._init_sizers(2, 0, 6, None, 2, 1)
@@ -91,6 +92,8 @@
         # Set default name for step
         self.StepName.ChangeValue(controller.GenerateNewName(
                tagname, None, "Step%d", 0))
+
+        self.Fit()
         
         # Step name text control is default control having keyboard focus
         self.StepName.SetFocus()
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/SFCTransitionDialog.py
--- a/dialogs/SFCTransitionDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/SFCTransitionDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -48,7 +49,7 @@
         connection (default: True)
         """
         BlockPreviewDialog.__init__(self, parent, controller, tagname,
-              size=wx.Size(350, 350), title=_('Edit transition'))
+              title=_('Edit transition'))
         
         # Init common sizers
         self._init_sizers(2, 0, 8, None, 2, 1)
@@ -101,6 +102,8 @@
         # Add buttons sizer to sizers
         self.MainSizer.AddSizer(self.ButtonSizer, border=20, 
               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
+
+        self.Fit()
         
         # Reference radio button is default control having keyboard focus
         self.TypeRadioButtons["reference"][0].SetFocus()
diff -r a63bb4025852 -r 8043f32de7b8 dialogs/SearchInProjectDialog.py
--- a/dialogs/SearchInProjectDialog.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/dialogs/SearchInProjectDialog.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -41,8 +42,7 @@
 class SearchInProjectDialog(wx.Dialog):
     
     def __init__(self, parent):
-        wx.Dialog.__init__(self, parent, title=_('Search in Project'), 
-              size=wx.Size(600, 350))
+        wx.Dialog.__init__(self, parent, title=_('Search in Project'))
         
         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10)
         main_sizer.AddGrowableCol(0)
@@ -59,7 +59,7 @@
         self.CaseSensitive = wx.CheckBox(self, label=_('Case sensitive'))
         pattern_sizer.AddWindow(self.CaseSensitive, flag=wx.GROW)
         
-        self.Pattern = wx.TextCtrl(self)
+        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)
         self.Bind(wx.EVT_CHAR_HOOK, self.OnEscapeKey)
@@ -75,15 +75,13 @@
         scope_sizer.AddSizer(scope_selection_sizer, 1, border=5, 
               flag=wx.GROW|wx.TOP|wx.LEFT|wx.BOTTOM)
         
-        self.WholeProject = wx.RadioButton(self, label=_('Whole Project'), 
-              size=wx.Size(0, 24), style=wx.RB_GROUP)
+        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, 
               flag=wx.GROW|wx.BOTTOM)
         
-        self.OnlyElements = wx.RadioButton(self, 
-              label=_('Only Elements'), size=wx.Size(0, 24))
+        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)
@@ -110,6 +108,8 @@
         
         for name, label in GetElementsChoices():
             self.ElementsList.Append(_(label))
+
+        self.Fit()
         self.infosPrev = {}
         self.criteria = {}
         self.Pattern.SetFocus()
diff -r a63bb4025852 -r 8043f32de7b8 editors/ConfTreeNodeEditor.py
--- a/editors/ConfTreeNodeEditor.py	Fri Jun 09 18:12:12 2017 +0300
+++ b/editors/ConfTreeNodeEditor.py	Mon Jun 19 18:49:43 2017 +0300
@@ -5,6 +5,7 @@
 # programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
 #
 # Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
 #
 # See COPYING file for copyrights details.
 #
@@ -380,8 +381,7 @@
                             value_infos = None
                         browse_boxsizer.AddWindow(textctrl)
 
-                        button = wx.Button(self.ParamsEditor,
-                              label="...", size=wx.Size(25, 25))
+                        button = wx.Button(self.ParamsEditor, label="...")
                         browse_boxsizer.AddWindow(button)
                         button.Bind(wx.EVT_BUTTON,
                                     self.GetBrowseCallBackFunction(element_infos["name"], textctrl, element_infos["type"],