883 self.Keywords = [] |
883 self.Keywords = [] |
884 self.Variables = [] |
884 self.Variables = [] |
885 self.Functions = [] |
885 self.Functions = [] |
886 self.Jumps = [] |
886 self.Jumps = [] |
887 self.TextChanged = False |
887 self.TextChanged = False |
|
888 self.TextSyntax = "ST" |
888 |
889 |
889 self.Controler = controler |
890 self.Controler = controler |
890 |
891 |
891 EVT_KEY_DOWN(self, self.OnKeyDown) |
892 EVT_KEY_DOWN(self, self.OnKeyDown) |
892 EVT_STC_STYLENEEDED(self, wxID_TEXTVIEWER, self.OnStyleNeeded) |
893 EVT_STC_STYLENEEDED(self, wxID_TEXTVIEWER, self.OnStyleNeeded) |
|
894 EVT_KILL_FOCUS(self, self.OnKillFocus) |
|
895 |
|
896 def SetTextSyntax(self, syntax): |
|
897 self.TextSyntax = syntax |
893 |
898 |
894 def SetKeywords(self, keywords): |
899 def SetKeywords(self, keywords): |
895 self.Keywords = [keyword.upper() for keyword in keywords] |
900 self.Keywords = [keyword.upper() for keyword in keywords] |
896 self.Colourise(0, -1) |
901 self.Colourise(0, -1) |
897 |
902 |
1044 def OnKeyDown(self, event): |
1049 def OnKeyDown(self, event): |
1045 if self.CallTipActive(): |
1050 if self.CallTipActive(): |
1046 self.CallTipCancel() |
1051 self.CallTipCancel() |
1047 key = event.KeyCode() |
1052 key = event.KeyCode() |
1048 |
1053 |
|
1054 # Code completion |
1049 if key == WXK_SPACE and event.ControlDown(): |
1055 if key == WXK_SPACE and event.ControlDown(): |
1050 pos = self.GetCurrentPos() |
|
1051 |
|
1052 # Tips |
|
1053 if event.ShiftDown(): |
|
1054 self.CallTipSetBackground("yellow") |
|
1055 self.CallTipShow(pos, 'Here will be some help.') |
|
1056 |
1056 |
1057 # Code completion |
1057 line = self.GetCurrentLine() |
|
1058 if line == 0: |
|
1059 start_pos = 0 |
1058 else: |
1060 else: |
1059 kw = [key for key in self.Keywords] |
1061 start_pos = self.GetLineEndPosition(line - 1) + 1 |
1060 |
1062 end_pos = self.GetCurrentPos() |
1061 kw.sort() # Python sorts are case sensitive |
1063 |
1062 self.AutoCompSetIgnoreCase(False) # so this needs to match |
1064 lineText = self.GetTextRange(start_pos, end_pos).replace("\t", " ") |
1063 |
1065 words = lineText.split(" ") |
1064 self.AutoCompShow(0, " ".join(kw)) |
1066 words = [word for i, word in enumerate(words) if word != '' or i == len(words) - 1] |
|
1067 |
|
1068 kw = [] |
|
1069 |
|
1070 if self.TextSyntax == "IL": |
|
1071 if len(words) == 1: |
|
1072 kw = self.Keywords |
|
1073 elif len(words) == 2: |
|
1074 if words[0].upper() in ["CAL", "CALC", "CALNC"]: |
|
1075 kw = self.Functions |
|
1076 elif words[0].upper() in ["JMP", "JMPC", "JMPNC"]: |
|
1077 kw = self.Jumps |
|
1078 else: |
|
1079 kw = self.Variables |
|
1080 else: |
|
1081 kw = self.Keywords + self.Variables + self.Functions |
|
1082 if len(kw) > 0: |
|
1083 kw.sort() |
|
1084 self.AutoCompSetIgnoreCase(True) |
|
1085 self.AutoCompShow(len(words[-1]), " ".join(kw)) |
1065 else: |
1086 else: |
1066 self.TextChanged = False |
1087 self.TextChanged = False |
1067 wxCallAfter(self.RefreshModel) |
1088 wxCallAfter(self.RefreshModel) |
1068 event.Skip() |
1089 event.Skip() |
|
1090 |
|
1091 def OnKillFocus(self, event): |
|
1092 self.AutoCompCancel() |
|
1093 event.Skip() |
1069 |
1094 |
1070 |
1095 |
1071 #------------------------------------------------------------------------------- |
1096 #------------------------------------------------------------------------------- |
1072 # Resource Editor class |
1097 # Resource Editor class |
1073 #------------------------------------------------------------------------------- |
1098 #------------------------------------------------------------------------------- |