wxDialogLogViewer.py
上传用户:lswyart
上传日期:2008-06-12
资源大小:3441k
文件大小:6k
源码类别:

杀毒

开发平台:

Visual C++

  1. #Boa:Dialog:wxDialogLogView
  2. #-----------------------------------------------------------------------------
  3. # Name:        wxDialogLogViewer.py
  4. # Product:     ClamWin Free Antivirus
  5. #
  6. # Author:      alch [alch at users dot sourceforge dot net]
  7. #
  8. # Created:     2004/22/04
  9. # Copyright:   Copyright alch (c) 2004
  10. # Licence:     
  11. #   This program is free software; you can redistribute it and/or modify
  12. #   it under the terms of the GNU General Public License as published by
  13. #   the Free Software Foundation; either version 2 of the License, or
  14. #   (at your option) any later version.
  15. #   This program is distributed in the hope that it will be useful,
  16. #   but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. #   GNU General Public License for more details.
  19. #   You should have received a copy of the GNU General Public License
  20. #   along with this program; if not, write to the Free Software
  21. #   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22. #-----------------------------------------------------------------------------
  23. from wxPython.wx import *
  24. import os
  25. def create(parent, text, scroll_down = False):
  26.     return wxDialogLogView(parent, text, scroll_down)
  27. [wxID_WXDIALOGLOGVIEW, wxID_WXDIALOGLOGVIEWBUTTONOK, 
  28.  wxID_WXDIALOGLOGVIEWTEXTCTRL, 
  29. ] = map(lambda _init_ctrls: wxNewId(), range(3))
  30. class wxDialogLogView(wxDialog):
  31.     def _init_coll_flexGridSizer_Items(self, parent):
  32.         # generated method, don't edit
  33.         parent.AddWindow(self.textCtrl, 0, border=5,
  34.               flag=wxTOP | wxRIGHT | wxLEFT | wxGROW)
  35.         parent.AddWindow(self.buttonOK, 0, border=10,
  36.               flag=wxBOTTOM | wxTOP | wxALIGN_CENTER)
  37.     def _init_coll_flexGridSizer_Growables(self, parent):
  38.         # generated method, don't edit
  39.         parent.AddGrowableRow(0)
  40.         parent.AddGrowableCol(0)
  41.     def _init_sizers(self):
  42.         # generated method, don't edit
  43.         self.flexGridSizer = wxFlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  44.         self._init_coll_flexGridSizer_Items(self.flexGridSizer)
  45.         self._init_coll_flexGridSizer_Growables(self.flexGridSizer)
  46.         self.SetSizer(self.flexGridSizer)
  47.     def _init_ctrls(self, prnt):
  48.         # generated method, don't edit
  49.         wxDialog.__init__(self, id=wxID_WXDIALOGLOGVIEW, name='wxDialogLogView',
  50.               parent=prnt, pos=wxPoint(450, 251), size=wxSize(566, 428),
  51.               style=wxRESIZE_BORDER | wxDEFAULT_DIALOG_STYLE,
  52.               title='ClamWin Log Viewer')
  53.         self.SetClientSize(wxSize(558, 401))
  54.         self.Center(wxBOTH)
  55.         EVT_CHAR_HOOK(self, self.OnCharHook)
  56.         EVT_INIT_DIALOG(self, self.OnInitDialog)
  57.         self.textCtrl = wxTextCtrl(id=wxID_WXDIALOGLOGVIEWTEXTCTRL,
  58.               name='textCtrl', parent=self, pos=wxPoint(5, 5), size=wxSize(548,
  59.               353), style=wxTE_RICH | wxTE_MULTILINE | wxTE_READONLY, value='')
  60.         self.textCtrl.SetToolTipString('')
  61.         self.textCtrl.Center(wxBOTH)
  62.         self.buttonOK = wxButton(id=wxID_WXDIALOGLOGVIEWBUTTONOK, label='OK',
  63.               name='buttonOK', parent=self, pos=wxPoint(241, 368),
  64.               size=wxSize(75, 23), style=0)
  65.         self.buttonOK.SetToolTipString('')
  66.         self.buttonOK.Center(wxBOTH)
  67.         EVT_BUTTON(self.buttonOK, wxID_WXDIALOGLOGVIEWBUTTONOK, self.OnOK)
  68.         self._init_sizers()
  69.     def __init__(self, parent, text, scroll_down = False):        
  70.         self._init_ctrls(parent)
  71.         
  72.         # set window icons
  73.         icons = wxIconBundle()
  74.         icons.AddIconFromFile('img/FrameIcon.ico', wxBITMAP_TYPE_ICO)
  75.         self.SetIcons(icons)
  76.         
  77.         # we need to set controls heights to 0 and reinit sizers
  78.         # to overcome boa sizers bug
  79.         self.textCtrl.SetSize((-1, 0))
  80.         self._init_sizers()
  81.                 
  82.         self.textCtrl.AppendText(text)          
  83.         self._scroll_down = scroll_down        
  84.                         
  85.     def OnOK(self, event):
  86.         self.EndModal(wxID_OK)
  87.     def OnCharHook(self, event):
  88.         if event.GetKeyCode() == WXK_ESCAPE:
  89.             self.EndModal(wxID_CANCEL)
  90.         else:
  91.             event.Skip()  
  92.     def OnInitDialog(self, event):
  93.         if self._scroll_down:                  
  94.             # to scroll richedit down correctly we need to use EM_SCROLLCARET,
  95.             # wxWidgets SetInsertionPoint and ShowPosition fail on win9x
  96.             if sys.platform.startswith('win'):
  97.                 import win32api, win32con                                                
  98.                 win32api.PostMessage(self.textCtrl.GetHandle(), win32con.EM_SCROLLCARET, 0, 0)
  99.             else:
  100.                 self.textCtrl.SetInsertionPointEnd()                        
  101.                 self.textCtrl.ShowPosition(self.textCtrl.GetLastPosition())                
  102.         else:
  103.             self.textCtrl.SetInsertionPoint(0)                        
  104.             self.textCtrl.ShowPosition(0)
  105.         event.Skip()
  106.     
  107.         
  108.         
  109. if __name__ == '__main__':
  110.     app = wxPySimpleApp()
  111.     msg = """Test Message Line
  112.     Test Message LinenTest Message Line
  113.     Test Message LinenTest Message Line
  114.     Test Message LinenTest Message Line
  115.     Test Message LinenTest Message Line
  116.     Test Message LinenTest Message Line
  117.     Test Message LinenTest Message Line
  118.     Test Message LinenTest Message Line
  119.     Test Message LinenTest Message Line
  120.     Test Message LinenTest Message Line
  121.     Test Message LinenTest Message Line
  122.     Test Message LinenTest Message Line
  123.     Test Message LinenTest Message Line
  124.     Test Message LinenTest Message Line
  125.     Test Message LinenTest Message Line
  126.     Test Message LinenTest Message Line
  127.     """
  128.     
  129.     dlg = create(None, msg, True)
  130.     try:
  131.         dlg.ShowModal()                    
  132.     finally:
  133.         dlg.Destroy()
  134.             
  135.     app.MainLoop()
  136.