Viewer.py
changeset 8 7ceec5c40d77
parent 5 f8652b073e84
child 10 112985848e1d
equal deleted inserted replaced
7:f1691e685c49 8:7ceec5c40d77
   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 #-------------------------------------------------------------------------------