--- a/IDEFrame.py Fri Oct 28 17:21:42 2016 +0300
+++ b/IDEFrame.py Fri Oct 28 18:11:43 2016 +0300
@@ -1260,6 +1260,7 @@
def OnFindMenu(self, event):
if not self.FindDialog.IsShown():
+ self.FindDialog.FindPattern.SetFocus() def CloseFindInPouDialog(self):
selected = self.TabsOpened.GetSelection()
@@ -1284,10 +1285,11 @@
dialog = SearchInProjectDialog(self)
if dialog.ShowModal() == wx.ID_OK:
criteria = dialog.GetCriteria()
- result = self.Controler.SearchInProject(criteria)
- self.ClearSearchResults()
- self.SearchResultPanel.SetSearchResults(criteria, result)
- self.SelectTab(self.SearchResultPanel)
+ result = self.Controler.SearchInProject(criteria) + self.ClearSearchResults() + self.SearchResultPanel.SetSearchResults(criteria, result) + self.SelectTab(self.SearchResultPanel) #-------------------------------------------------------------------------------
--- a/controls/SearchResultPanel.py Fri Oct 28 17:21:42 2016 +0300
+++ b/controls/SearchResultPanel.py Fri Oct 28 18:11:43 2016 +0300
@@ -253,7 +253,7 @@
header_format = _("'%s' - %d matches in project")
- self.HeaderLabel.SetLabel(header_format % (self.Criteria["raw_pattern"], matches_number))
+ self.HeaderLabel.SetLabel(header_format % (self.Criteria["find_pattern"], matches_number)) self.ResetButton.Enable(True)
--- a/dialogs/FindInPouDialog.py Fri Oct 28 17:21:42 2016 +0300
+++ b/dialogs/FindInPouDialog.py Fri Oct 28 18:11:43 2016 +0300
@@ -23,6 +23,7 @@
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+from plcopen.plcopen import * class FindInPouDialog(wx.Frame):
@@ -33,13 +34,14 @@
def __init__(self, parent):
wx.Frame.__init__(self, parent, title=_("Find"),
- size=wx.Size(400, 250), style=wx.CAPTION|
+ size=wx.Size(410, 250), style=wx.CAPTION| + self.CreateStatusBar(style=wx.SB_FLAT) panel = wx.Panel(self, style=wx.TAB_TRAVERSAL)
main_sizer = wx.FlexGridSizer(cols=1, hgap=5, rows=2, vgap=5)
@@ -116,7 +118,8 @@
self.ParentWindow = parent
self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
self.FindPattern.SetFocus()
self.RefreshButtonsState()
@@ -141,8 +144,21 @@
"find_pattern": self.FindPattern.GetValue(),
"wrap": self.WrapSearch.GetValue(),
"case_sensitive": self.CaseSensitive.GetValue(),
- "regular_expression": self.RegularExpressions.GetValue()}
- wx.CallAfter(self.ParentWindow.FindInPou,
- {True: 1, False:-1}[self.Forward.GetValue()],
+ "regular_expression": self.RegularExpressions.GetValue(), + if self.infosPrev != infos: + CompilePattern(self.criteria) + message = _("Syntax error in regular expression of pattern to search!") + self.SetStatusText(message) + if len(self.criteria) > 0: + wx.CallAfter(self.ParentWindow.FindInPou, + {True: 1, False:-1}[self.Forward.GetValue()], --- a/dialogs/SearchInProjectDialog.py Fri Oct 28 17:21:42 2016 +0300
+++ b/dialogs/SearchInProjectDialog.py Fri Oct 28 18:11:43 2016 +0300
@@ -23,17 +23,9 @@
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+from plcopen.plcopen import * -RE_ESCAPED_CHARACTERS = ".*+()[]?:|{}^$<>=-,"
- text = text.replace('\\', '\\\\')
- for c in RE_ESCAPED_CHARACTERS:
- text = text.replace(c, '\\' + c)
#-------------------------------------------------------------------------------
# Search In Project Dialog
#-------------------------------------------------------------------------------
@@ -68,6 +60,7 @@
pattern_sizer.AddWindow(self.CaseSensitive, flag=wx.GROW)
self.Pattern = wx.TextCtrl(self)
+ self.Bind(wx.EVT_TEXT, self.FindPatternChanged, self.Pattern) pattern_sizer.AddWindow(self.Pattern, flag=wx.GROW)
self.RegularExpression = wx.CheckBox(self, label=_('Regular expression'))
@@ -99,58 +92,68 @@
self.ElementsList.Enable(False)
scope_sizer.AddWindow(self.ElementsList, 1, border=5,
flag=wx.GROW|wx.TOP|wx.RIGHT|wx.BOTTOM)
- self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
- ok_button = self.ButtonSizer.GetAffirmativeButton()
- ok_button.SetLabel(_('Search'))
- self.Bind(wx.EVT_BUTTON, self.OnOK, ok_button)
- main_sizer.AddSizer(self.ButtonSizer, border=20,
- flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
+ buttons_sizer = wx.BoxSizer(wx.HORIZONTAL) + main_sizer.AddSizer(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) + self.CloseButton = wx.Button(self, label=_("Close")) + self.Bind(wx.EVT_BUTTON, self.OnCloseButton, self.CloseButton) + buttons_sizer.AddWindow(self.CloseButton) self.SetSizer(main_sizer)
for name, label in GetElementsChoices():
self.ElementsList.Append(_(label))
+ self.RefreshButtonsState() + def RefreshButtonsState(self): + find_pattern = self.Pattern.GetValue() + self.FindButton.Enable(find_pattern != "") - raw_pattern = pattern = self.Pattern.GetValue()
- if not self.CaseSensitive.GetValue():
- pattern = pattern.upper()
- if not self.RegularExpression.GetValue():
- pattern = EscapeText(pattern)
- "raw_pattern": raw_pattern,
- "pattern": re.compile(pattern),
+ def FindPatternChanged(self, event): + self.RefreshButtonsState() + def OnScopeChanged(self, event): + self.ElementsList.Enable(self.OnlyElements.GetValue()) + def OnCloseButton(self, event): + self.EndModal(wx.ID_CANCEL) + def OnFindButton(self, event): + "find_pattern": self.Pattern.GetValue(), "case_sensitive": self.CaseSensitive.GetValue(),
"regular_expression": self.RegularExpression.GetValue(),
if self.WholeProject.GetValue():
- criteria["filter"] = "all"
+ infos["filter"] = "all" elif self.OnlyElements.GetValue():
- criteria["filter"] = []
for index, (name, label) in enumerate(GetElementsChoices()):
if self.ElementsList.IsChecked(index):
- criteria["filter"].append(name)
- def OnScopeChanged(self, event):
- self.ElementsList.Enable(self.OnlyElements.GetValue())
- if self.Pattern.GetValue() == "":
- message = _("Form isn't complete. Pattern to search must be filled!")
- if self.RegularExpression.GetValue():
- re.compile(self.Pattern.GetValue())
+ infos["filter"].append(name) + if self.infosPrev != infos: + CompilePattern(self.criteria) message = _("Syntax error in regular expression of pattern to search!")
--- a/editors/CodeFileEditor.py Fri Oct 28 17:21:42 2016 +0300
+++ b/editors/CodeFileEditor.py Fri Oct 28 18:11:43 2016 +0300
@@ -506,17 +506,11 @@
self.ClearHighlights(SEARCH_RESULT_HIGHLIGHT)
self.SearchParams = search_params
- "raw_pattern": search_params["find_pattern"],
- "pattern": re.compile(search_params["find_pattern"]),
- "case_sensitive": search_params["case_sensitive"],
- "regular_expression": search_params["regular_expression"],
(start, end, SEARCH_RESULT_HIGHLIGHT)
- TestTextElement(self.GetText(), criteria)]
+ TestTextElement(self.GetText(), search_params)] self.CurrentFindHighlight = None
if len(self.SearchResults) > 0:
--- a/editors/TextViewer.py Fri Oct 28 17:21:42 2016 +0300
+++ b/editors/TextViewer.py Fri Oct 28 18:11:43 2016 +0300
@@ -810,17 +810,10 @@
self.ClearHighlights(SEARCH_RESULT_HIGHLIGHT)
self.SearchParams = search_params
- "raw_pattern": search_params["find_pattern"],
- "pattern": re.compile(search_params["find_pattern"]),
- "case_sensitive": search_params["case_sensitive"],
- "regular_expression": search_params["regular_expression"],
(infos[1:], start, end, SEARCH_RESULT_HIGHLIGHT)
for infos, start, end, text in
+ self.Search(search_params)] self.CurrentFindHighlight = None
if len(self.SearchResults) > 0:
--- a/editors/Viewer.py Fri Oct 28 17:21:42 2016 +0300
+++ b/editors/Viewer.py Fri Oct 28 18:11:43 2016 +0300
@@ -3408,16 +3408,9 @@
self.ClearHighlights(SEARCH_RESULT_HIGHLIGHT)
self.SearchParams = search_params
- "raw_pattern": search_params["find_pattern"],
- "pattern": re.compile(search_params["find_pattern"]),
- "case_sensitive": search_params["case_sensitive"],
- "regular_expression": search_params["regular_expression"],
- for infos, start, end, text in self.Controler.SearchInPou(self.TagName, criteria, self.Debug):
+ for infos, start, end, text in self.Controler.SearchInPou(self.TagName, search_params, self.Debug): if infos[1] in ["var_local", "var_input", "var_output", "var_inout"]:
self.SearchResults.append((infos[1:], start, end, SEARCH_RESULT_HIGHLIGHT))
--- a/plcopen/plcopen.py Fri Oct 28 17:21:42 2016 +0300
+++ b/plcopen/plcopen.py Fri Oct 28 18:11:43 2016 +0300
@@ -111,10 +111,15 @@
return len(lines) - 1, len(lines[-1])
+def CompilePattern(criteria): + flag = 0 if criteria["case_sensitive"] else re.IGNORECASE + find_pattern = criteria["find_pattern"] + if not criteria["regular_expression"]: + find_pattern = re.escape(find_pattern) + criteria["pattern"] = re.compile(find_pattern, flag) def TestTextElement(text, criteria):
lines = text.splitlines()
- if not criteria["case_sensitive"]:
result = criteria["pattern"].search(text)
while result is not None: