git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33440 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.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
 | 
						|
 | 
						|
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()
 | 
						|
 | 
						|
        return txtCtrl
 | 
						|
 | 
						|
 | 
						|
##    def ProcessEvent(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:
 | 
						|
##            stcControl.Cut()
 | 
						|
##            return True
 | 
						|
##        elif id == wx.ID_COPY:
 | 
						|
##            stcControl.Copy()
 | 
						|
##            return True
 | 
						|
##        elif id == wx.ID_PASTE:
 | 
						|
##            stcControl.Paste()
 | 
						|
##            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:
 | 
						|
##            event.Enable(stcControl.CanCut())
 | 
						|
##            return True
 | 
						|
##        elif id == wx.ID_COPY:
 | 
						|
##            event.Enable(stcControl.CanCopy())
 | 
						|
##            return True
 | 
						|
##        elif id == wx.ID_PASTE:
 | 
						|
##            event.Enable(stcControl.CanPaste())
 | 
						|
##            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().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)
 | 
						|
        
 | 
						|
        
 |