New Features: In Tab-View mode, Ctrl-number will take the user to
    the numbered tab view.  Modified files now show an '*' astrisk in
    the view title.  Debugger framework can now support PHP debugging.
    Not important for python development, but at least that means the
    debugger framework is more generalized.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38852 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
	
		
			
				
	
	
		
			172 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #----------------------------------------------------------------------------
 | |
| # Name:         MessageService.py
 | |
| # Purpose:      Message View Service for pydocview
 | |
| #
 | |
| # Author:       Morgan Hua
 | |
| #
 | |
| # Created:      9/2/04
 | |
| # CVS-ID:       $Id$
 | |
| # Copyright:    (c) 2004-2005 ActiveGrid, Inc.
 | |
| # License:      wxWindows License
 | |
| #----------------------------------------------------------------------------
 | |
| 
 | |
| import wx
 | |
| import Service
 | |
| import STCTextEditor
 | |
| 
 | |
| #----------------------------------------------------------------------------
 | |
| # Utility
 | |
| #----------------------------------------------------------------------------
 | |
| 
 | |
| def ClearMessages():
 | |
|     messageService = wx.GetApp().GetService(MessageService)
 | |
|     view = messageService.GetView()
 | |
|     if view:
 | |
|         view.ClearLines()
 | |
| 
 | |
| 
 | |
| def ShowMessages(messages, clear=False):
 | |
|     if ((messages != None) and (len(messages) > 0)):
 | |
|         messageService = wx.GetApp().GetService(MessageService)
 | |
|         messageService.ShowWindow(True)
 | |
|         view = messageService.GetView()
 | |
|         if view:
 | |
|             if (clear):
 | |
|                 view.ClearLines()
 | |
|             for message in messages:
 | |
|                 view.AddLines(message)
 | |
|                 view.AddLines("\n")
 | |
| 
 | |
| 
 | |
| #----------------------------------------------------------------------------
 | |
| # Classes
 | |
| #----------------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| class MessageView(Service.ServiceView):
 | |
|     """ Reusable Message View for any document.
 | |
|         When an item is selected, the document view is called back (with DoSelectCallback) to highlight and display the corresponding item in the document view.
 | |
|     """
 | |
| 
 | |
|     #----------------------------------------------------------------------------
 | |
|     # Overridden methods
 | |
|     #----------------------------------------------------------------------------
 | |
| 
 | |
|     def _CreateControl(self, parent, id):
 | |
|         txtCtrl = STCTextEditor.TextCtrl(parent, id)
 | |
|         txtCtrl.SetMarginWidth(1, 0)  # hide line numbers
 | |
|         txtCtrl.SetReadOnly(True)
 | |
| 
 | |
|         if wx.Platform == '__WXMSW__':
 | |
|             font = "Courier New"
 | |
|         else:
 | |
|             font = "Courier"
 | |
|         txtCtrl.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, faceName = font))
 | |
|         txtCtrl.SetFontColor(wx.BLACK)
 | |
|         txtCtrl.StyleClearAll()
 | |
|         txtCtrl.UpdateStyles()
 | |
|         wx.EVT_SET_FOCUS(txtCtrl, self.OnFocus)
 | |
| 
 | |
|         return txtCtrl
 | |
| 
 | |
|     def GetDocument(self):
 | |
|         return None
 | |
| 
 | |
|     def OnFocus(self, event):
 | |
|         wx.GetApp().GetDocumentManager().ActivateView(self)
 | |
|         event.Skip()
 | |
| 
 | |
|     def ProcessEvent(self, event):
 | |
|         stcControl = self.GetControl()
 | |
|         if not isinstance(stcControl, wx.stc.StyledTextCtrl):
 | |
|             return wx.lib.docview.View.ProcessEvent(self, event)
 | |
|         id = event.GetId()
 | |
|         if id == wx.ID_COPY:
 | |
|             stcControl.Copy()
 | |
|             return True
 | |
|         elif id == wx.ID_CLEAR:
 | |
|             stcControl.Clear()
 | |
|             return True
 | |
|         elif id == wx.ID_SELECTALL:
 | |
|             stcControl.SetSelection(0, -1)
 | |
|             return True
 | |
| 
 | |
| 
 | |
|     def ProcessUpdateUIEvent(self, event):
 | |
|         stcControl = self.GetControl()
 | |
|         if not isinstance(stcControl, wx.stc.StyledTextCtrl):
 | |
|             return wx.lib.docview.View.ProcessUpdateUIEvent(self, event)
 | |
|         id = event.GetId()
 | |
|         if id == wx.ID_CUT or id == wx.ID_PASTE:
 | |
|             # I don't think cut or paste makes sense from a message/log window.
 | |
|             event.Enable(False)
 | |
|             return True
 | |
|         elif id == wx.ID_COPY:
 | |
|             hasSelection = (stcControl.GetSelectionStart() != stcControl.GetSelectionEnd()) 
 | |
|             event.Enable(hasSelection)
 | |
|             return True
 | |
|         elif id == wx.ID_CLEAR:
 | |
|             event.Enable(True)  # wxBug: should be stcControl.CanCut()) but disabling clear item means del key doesn't work in control as expected
 | |
|             return True
 | |
|         elif id == wx.ID_SELECTALL:
 | |
|             event.Enable(stcControl.GetTextLength() > 0)
 | |
|             return True
 | |
| 
 | |
|         
 | |
|     #----------------------------------------------------------------------------
 | |
|     # Service specific methods
 | |
|     #----------------------------------------------------------------------------
 | |
| 
 | |
|     def ClearLines(self):
 | |
|         self.GetControl().SetReadOnly(False)
 | |
|         self.GetControl().ClearAll()
 | |
|         self.GetControl().SetReadOnly(True)
 | |
| 
 | |
| 
 | |
|     def AddLines(self, text):
 | |
|         self.GetControl().SetCurrentPos(self.GetControl().GetTextLength())
 | |
|         self.GetControl().SetReadOnly(False)
 | |
|         self.GetControl().AddText(text)
 | |
|         self.GetControl().SetReadOnly(True)
 | |
| 
 | |
| 
 | |
|     def GetText(self):
 | |
|         return self.GetControl().GetText()
 | |
| 
 | |
| 
 | |
|     def GetCurrentPos(self):
 | |
|         return self.GetControl().GetCurrentPos()
 | |
| 
 | |
| 
 | |
|     def GetCurrLine(self):
 | |
|         return self.GetControl().GetCurLine()
 | |
| 
 | |
| 
 | |
|     #----------------------------------------------------------------------------
 | |
|     # Callback Methods
 | |
|     #----------------------------------------------------------------------------
 | |
| 
 | |
|     def SetCallback(self, callback):
 | |
|         """ Sets in the event table for a doubleclick to invoke the given callback.
 | |
|             Additional calls to this method overwrites the previous entry and only the last set callback will be invoked.
 | |
|         """
 | |
|         wx.stc.EVT_STC_DOUBLECLICK(self.GetControl(), self.GetControl().GetId(), callback)
 | |
| 
 | |
| 
 | |
| 
 | |
| class MessageService(Service.Service):
 | |
| 
 | |
| 
 | |
|     #----------------------------------------------------------------------------
 | |
|     # Constants
 | |
|     #----------------------------------------------------------------------------
 | |
|     SHOW_WINDOW = wx.NewId()  # keep this line for each subclass, need unique ID for each Service
 | |
| 
 | |
| 
 | |
|     #----------------------------------------------------------------------------
 | |
|     # Overridden methods
 | |
|     #----------------------------------------------------------------------------
 | |
| 
 | |
|     def _CreateView(self):
 | |
|         return MessageView(self)
 |