02b800ce7c
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
171 lines
5.7 KiB
Python
171 lines
5.7 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().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)
|