More updates from Morgan Hua

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33956 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2005-05-05 00:10:29 +00:00
parent 123dc137d3
commit b792147db7
17 changed files with 745 additions and 422 deletions

View File

@@ -21,6 +21,7 @@ _ = wx.GetTranslation
SELECT_BRUSH = wx.Brush("BLUE", wx.SOLID) SELECT_BRUSH = wx.Brush("BLUE", wx.SOLID)
SHAPE_BRUSH = wx.Brush("WHEAT", wx.SOLID) SHAPE_BRUSH = wx.Brush("WHEAT", wx.SOLID)
LINE_BRUSH = wx.BLACK_BRUSH LINE_BRUSH = wx.BLACK_BRUSH
INACTIVE_SELECT_BRUSH = wx.Brush("LIGHT BLUE", wx.SOLID)
def GetRawModel(model): def GetRawModel(model):
@@ -59,7 +60,7 @@ class CanvasView(wx.lib.docview.View):
frame.Layout() frame.Layout()
self.Activate() self.Activate()
return True return True
def OnActivateView(self, activate, activeView, deactiveView): def OnActivateView(self, activate, activeView, deactiveView):
if activate and self._canvas: if activate and self._canvas:
@@ -70,6 +71,17 @@ class CanvasView(wx.lib.docview.View):
wx.CallAfter(self._canvas.SetFocus) wx.CallAfter(self._canvas.SetFocus)
def OnFocus(self, event):
self._canvas.SetFocus()
self.FocusColorPropertyShape(True)
event.Skip()
def OnKillFocus(self, event):
self.FocusColorPropertyShape(False)
event.Skip()
def OnClose(self, deleteWindow = True): def OnClose(self, deleteWindow = True):
statusC = wx.GetApp().CloseChildDocuments(self.GetDocument()) statusC = wx.GetApp().CloseChildDocuments(self.GetDocument())
statusP = wx.lib.docview.View.OnClose(self, deleteWindow = deleteWindow) statusP = wx.lib.docview.View.OnClose(self, deleteWindow = deleteWindow)
@@ -90,6 +102,17 @@ class CanvasView(wx.lib.docview.View):
wx.EVT_MOTION(self._canvas, self.OnLeftDrag) wx.EVT_MOTION(self._canvas, self.OnLeftDrag)
wx.EVT_LEFT_DCLICK(self._canvas, self.OnLeftDoubleClick) wx.EVT_LEFT_DCLICK(self._canvas, self.OnLeftDoubleClick)
wx.EVT_KEY_DOWN(self._canvas, self.OnKeyPressed) wx.EVT_KEY_DOWN(self._canvas, self.OnKeyPressed)
# need this otherwise mouse clicks don't set focus to this view
wx.EVT_LEFT_DOWN(self._canvas, self.OnFocus)
wx.EVT_LEFT_DCLICK(self._canvas, self.OnFocus)
wx.EVT_RIGHT_DOWN(self._canvas, self.OnFocus)
wx.EVT_RIGHT_DCLICK(self._canvas, self.OnFocus)
wx.EVT_MIDDLE_DOWN(self._canvas, self.OnFocus)
wx.EVT_MIDDLE_DCLICK(self._canvas, self.OnFocus)
wx.EVT_KILL_FOCUS(self._canvas, self.OnKillFocus)
wx.EVT_SET_FOCUS(self._canvas, self.OnFocus)
maxWidth = 2000 maxWidth = 2000
maxHeight = 16000 maxHeight = 16000
@@ -513,6 +536,32 @@ class CanvasView(wx.lib.docview.View):
dc.EndDrawing() dc.EndDrawing()
def FocusColorPropertyShape(self, gotFocus=False):
# no need to change highlight if no PropertyService is running
propertyService = wx.GetApp().GetService(PropertyService.PropertyService)
if not propertyService:
return
if not self._propShape:
return
dc = wx.ClientDC(self._canvas)
self._canvas.PrepareDC(dc)
dc.BeginDrawing()
# draw deactivated selection
if self._propShape and self._propShape in self._diagram.GetShapeList():
if gotFocus:
self._propShape.SetBrush(SELECT_BRUSH)
else:
self._propShape.SetBrush(INACTIVE_SELECT_BRUSH)
if (self._propShape._textColourName in ["BLACK", "WHITE"]): # Would use GetTextColour() but it is broken
self._propShape.SetTextColour("WHITE", 0)
self._propShape.Draw(dc)
dc.EndDrawing()
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# Property Service methods # Property Service methods
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------

View File

@@ -117,7 +117,6 @@ class CodeView(STCTextEditor.TextView):
def ProcessUpdateUIEvent(self, event): def ProcessUpdateUIEvent(self, event):
if not self.GetCtrl(): if not self.GetCtrl():
return False return False
hasText = self.GetCtrl().GetTextLength() > 0
id = event.GetId() id = event.GetId()
if id == EXPAND_TEXT_ID: if id == EXPAND_TEXT_ID:
event.Enable(self.GetCtrl().CanLineExpand(self.GetCtrl().GetCurrentLine())) event.Enable(self.GetCtrl().CanLineExpand(self.GetCtrl().GetCurrentLine()))
@@ -125,49 +124,29 @@ class CodeView(STCTextEditor.TextView):
elif id == COLLAPSE_TEXT_ID: elif id == COLLAPSE_TEXT_ID:
event.Enable(self.GetCtrl().CanLineCollapse(self.GetCtrl().GetCurrentLine())) event.Enable(self.GetCtrl().CanLineCollapse(self.GetCtrl().GetCurrentLine()))
return True return True
elif id == EXPAND_TOP_ID: elif (id == EXPAND_TOP_ID
event.Enable(hasText) or id == COLLAPSE_TOP_ID
return True or id == EXPAND_ALL_ID
elif id == COLLAPSE_TOP_ID: or id == COLLAPSE_ALL_ID
event.Enable(hasText) or id == AUTO_COMPLETE_ID
return True or id == CLEAN_WHITESPACE
elif id == EXPAND_ALL_ID: or id == INDENT_LINES_ID
event.Enable(hasText) or id == DEDENT_LINES_ID
return True or id == COMMENT_LINES_ID
elif id == COLLAPSE_ALL_ID: or id == UNCOMMENT_LINES_ID):
event.Enable(hasText) event.Enable(self.GetCtrl().GetTextLength() > 0)
return True return True
elif id == CHECK_CODE_ID: elif id == CHECK_CODE_ID:
event.Enable(False) event.Enable(False)
return True return True
elif id == AUTO_COMPLETE_ID: elif (id == SET_INDENT_WIDTH_ID
event.Enable(hasText) or id == FOLDING_ID):
return True
elif id == CLEAN_WHITESPACE:
event.Enable(hasText)
return True
elif id == SET_INDENT_WIDTH_ID:
event.Enable(True) event.Enable(True)
return True return True
elif id == USE_TABS_ID: elif id == USE_TABS_ID:
event.Enable(True) event.Enable(True)
event.Check(self.GetCtrl().GetUseTabs()) event.Check(self.GetCtrl().GetUseTabs())
return True return True
elif id == INDENT_LINES_ID:
event.Enable(hasText)
return True
elif id == DEDENT_LINES_ID:
event.Enable(hasText)
return True
elif id == COMMENT_LINES_ID:
event.Enable(hasText)
return True
elif id == UNCOMMENT_LINES_ID:
event.Enable(hasText)
return True
elif id == FOLDING_ID:
event.Enable(True)
return True
else: else:
return STCTextEditor.TextView.ProcessUpdateUIEvent(self, event) return STCTextEditor.TextView.ProcessUpdateUIEvent(self, event)
@@ -625,52 +604,22 @@ class CodeService(STCTextEditor.TextService):
def ProcessUpdateUIEvent(self, event): def ProcessUpdateUIEvent(self, event):
id = event.GetId() id = event.GetId()
if id == EXPAND_TEXT_ID: if (id == EXPAND_TEXT_ID
event.Enable(False) or id == COLLAPSE_TEXT_ID
return True or id == EXPAND_TOP_ID
elif id == COLLAPSE_TEXT_ID: or id == COLLAPSE_TOP_ID
event.Enable(False) or id == EXPAND_ALL_ID
return True or id == COLLAPSE_ALL_ID
elif id == EXPAND_TOP_ID: or id == CHECK_CODE_ID
event.Enable(False) or id == AUTO_COMPLETE_ID
return True or id == CLEAN_WHITESPACE
elif id == COLLAPSE_TOP_ID: or id == SET_INDENT_WIDTH_ID
event.Enable(False) or id == USE_TABS_ID
return True or id == INDENT_LINES_ID
elif id == EXPAND_ALL_ID: or id == DEDENT_LINES_ID
event.Enable(False) or id == COMMENT_LINES_ID
return True or id == UNCOMMENT_LINES_ID
elif id == COLLAPSE_ALL_ID: or id == FOLDING_ID):
event.Enable(False)
return True
elif id == CHECK_CODE_ID:
event.Enable(False)
return True
elif id == AUTO_COMPLETE_ID:
event.Enable(False)
return True
elif id == CLEAN_WHITESPACE:
event.Enable(False)
return True
elif id == SET_INDENT_WIDTH_ID:
event.Enable(False)
return True
elif id == USE_TABS_ID:
event.Enable(False)
return True
elif id == INDENT_LINES_ID:
event.Enable(False)
return True
elif id == DEDENT_LINES_ID:
event.Enable(False)
return True
elif id == COMMENT_LINES_ID:
event.Enable(False)
return True
elif id == UNCOMMENT_LINES_ID:
event.Enable(False)
return True
elif id == FOLDING_ID:
event.Enable(False) event.Enable(False)
return True return True
else: else:

View File

@@ -31,7 +31,6 @@ import SimpleXMLRPCServer
import xmlrpclib import xmlrpclib
import os import os
import threading import threading
import process
import Queue import Queue
import SocketServer import SocketServer
import ProjectEditor import ProjectEditor
@@ -43,10 +42,18 @@ import DebuggerHarness
import traceback import traceback
import StringIO import StringIO
if wx.Platform == '__WXMSW__': if wx.Platform == '__WXMSW__':
import win32api try:
import win32api
_PYWIN32_INSTALLED = True
except ImportError:
_PYWIN32_INSTALLED = False
_WINDOWS = True _WINDOWS = True
else: else:
_WINDOWS = False _WINDOWS = False
if not _WINDOWS or _PYWIN32_INSTALLED:
import process
_ = wx.GetTranslation _ = wx.GetTranslation
_VERBOSE = False _VERBOSE = False
@@ -1560,10 +1567,8 @@ class DebuggerService(Service.Service):
elif an_id == DebuggerService.CLEAR_ALL_BREAKPOINTS: elif an_id == DebuggerService.CLEAR_ALL_BREAKPOINTS:
event.Enable(self.HasBreakpointsSet()) event.Enable(self.HasBreakpointsSet())
return True return True
elif an_id == DebuggerService.RUN_ID: elif (an_id == DebuggerService.RUN_ID
event.Enable(self.HasAnyFiles()) or an_id == DebuggerService.DEBUG_ID):
return True
elif an_id == DebuggerService.DEBUG_ID:
event.Enable(self.HasAnyFiles()) event.Enable(self.HasAnyFiles())
return True return True
else: else:
@@ -1574,6 +1579,9 @@ class DebuggerService(Service.Service):
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
def OnDebugProject(self, event): def OnDebugProject(self, event):
if _WINDOWS and not _PYWIN32_INSTALLED:
wx.MessageBox(_("Python for Windows extensions (pywin32) is required to debug on Windows machines. Please go to http://sourceforge.net/projects/pywin32/, download and install pywin32."))
return
if not Executor.GetPythonExecutablePath(): if not Executor.GetPythonExecutablePath():
return return
if DebugCommandUI.DebuggerRunning(): if DebugCommandUI.DebuggerRunning():
@@ -1636,13 +1644,13 @@ class DebuggerService(Service.Service):
yesNoMsg = wx.MessageDialog(frame, yesNoMsg = wx.MessageDialog(frame,
_("Files have been modified.\nWould you like to save all files before running?"), _("Files have been modified.\nWould you like to save all files before running?"),
_("Run"), _("Run"),
wx.YES_NO wx.YES_NO|wx.ICON_QUESTION
) )
else: else:
yesNoMsg = wx.MessageDialog(frame, yesNoMsg = wx.MessageDialog(frame,
_("Files have been modified.\nWould you like to save all files before debugging?"), _("Files have been modified.\nWould you like to save all files before debugging?"),
_("Debug"), _("Debug"),
wx.YES_NO wx.YES_NO|wx.ICON_QUESTION
) )
if yesNoMsg.ShowModal() == wx.ID_YES: if yesNoMsg.ShowModal() == wx.ID_YES:
docs = wx.GetApp().GetDocumentManager().GetDocuments() docs = wx.GetApp().GetDocumentManager().GetDocuments()
@@ -1653,6 +1661,9 @@ class DebuggerService(Service.Service):
DebugCommandUI.ShutdownAllDebuggers() DebugCommandUI.ShutdownAllDebuggers()
def OnRunProject(self, event): def OnRunProject(self, event):
if _WINDOWS and not _PYWIN32_INSTALLED:
wx.MessageBox(_("Python for Windows extensions (pywin32) is required to run on Windows machines. Please go to http://sourceforge.net/projects/pywin32/, download and install pywin32."))
return
if not Executor.GetPythonExecutablePath(): if not Executor.GetPythonExecutablePath():
return return
projectService = wx.GetApp().GetService(ProjectEditor.ProjectService) projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
@@ -1892,9 +1903,6 @@ class CommandPropertiesDialog(wx.Dialog):
self._lastArguments = config.Read("LastRunArguments") self._lastArguments = config.Read("LastRunArguments")
self._argsEntry = wx.TextCtrl(self, -1, str(self._lastArguments)) self._argsEntry = wx.TextCtrl(self, -1, str(self._lastArguments))
self._argsEntry.SetToolTipString(str(self._lastArguments)) self._argsEntry.SetToolTipString(str(self._lastArguments))
def TextChanged(event):
self._argsEntry.SetToolTipString(event.GetString())
self.Bind(wx.EVT_TEXT, TextChanged, self._argsEntry)
flexGridSizer.Add(argsStaticText, 0, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT) flexGridSizer.Add(argsStaticText, 0, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
flexGridSizer.Add(self._argsEntry, 1, flag=wx.EXPAND) flexGridSizer.Add(self._argsEntry, 1, flag=wx.EXPAND)
@@ -1911,7 +1919,7 @@ class CommandPropertiesDialog(wx.Dialog):
self.Bind(wx.EVT_TEXT, TextChanged2, self._startEntry) self.Bind(wx.EVT_TEXT, TextChanged2, self._startEntry)
flexGridSizer.Add(self._startEntry, 1, wx.EXPAND) flexGridSizer.Add(self._startEntry, 1, wx.EXPAND)
self._findDir = wx.Button(self, -1, _("Browse..."), size=(60,-1)) self._findDir = wx.Button(self, -1, _("Browse..."))
self.Bind(wx.EVT_BUTTON, self.OnFindDirClick, self._findDir) self.Bind(wx.EVT_BUTTON, self.OnFindDirClick, self._findDir)
flexGridSizer.Add(self._findDir, 0, wx.RIGHT, 10) flexGridSizer.Add(self._findDir, 0, wx.RIGHT, 10)
@@ -1935,12 +1943,12 @@ class CommandPropertiesDialog(wx.Dialog):
cpPanelBorderSizer.Add(flexGridSizer, 0, wx.ALL, 10) cpPanelBorderSizer.Add(flexGridSizer, 0, wx.ALL, 10)
box = wx.BoxSizer(wx.HORIZONTAL) box = wx.BoxSizer(wx.HORIZONTAL)
self._okButton = wx.Button(self, wx.ID_OK, okButtonName, size=(75,-1)) self._okButton = wx.Button(self, wx.ID_OK, okButtonName)
self._okButton.SetDefault() self._okButton.SetDefault()
self._okButton.SetHelpText(_("The ") + okButtonName + _(" button completes the dialog")) self._okButton.SetHelpText(_("The ") + okButtonName + _(" button completes the dialog"))
box.Add(self._okButton, 0, wx.ALIGN_RIGHT|wx.ALL, 5) box.Add(self._okButton, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
self.Bind(wx.EVT_BUTTON, self.OnOKClick, self._okButton) self.Bind(wx.EVT_BUTTON, self.OnOKClick, self._okButton)
btn = wx.Button(self, wx.ID_CANCEL, _("Cancel"), size=(75,-1)) btn = wx.Button(self, wx.ID_CANCEL, _("Cancel"))
btn.SetHelpText(_("The Cancel button cancels the dialog.")) btn.SetHelpText(_("The Cancel button cancels the dialog."))
box.Add(btn, 0, wx.ALIGN_RIGHT|wx.ALL, 5) box.Add(btn, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
cpPanelBorderSizer.Add(box, 0, wx.ALIGN_RIGHT|wx.BOTTOM, 5) cpPanelBorderSizer.Add(box, 0, wx.ALIGN_RIGHT|wx.BOTTOM, 5)
@@ -2115,15 +2123,15 @@ import cStringIO
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def getBreakData(): def getBreakData():
return \ return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x11\x08\x06\ '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x02\
\x00\x00\x00\xd4\xaf,\xc4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ \x00\x00\x00\x90\x91h6\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\x00\
\x00\x00\x97IDAT8\x8d\xbdSA\x0e\xc3 \x0c\x8b\x13\xfe=\x1e^\xe2\x1dF\xbb\x8c\ \x00\x85IDAT(\x91\xbd\x92A\x16\x03!\x08CI\xdf\xdc\x0b\x8e\xe6\xd1\xe0d\xe9\
\xd2\x0c\xa9\xda,q\x88\x05\x8e\x1d\x00P\x93;\xd0[\xa7W\x04\xe8\x8d\x0f\xdfxU\ \x82\xd6\xc7(\x9di7\xfd\xab<\x14\x13Q\xb8\xbb\xfc\xc2\xe3\xd3\x82\x99\xb9\
c%\x02\xbd\xbd\x05HQ+Xv\xb0\xa3VN\xf9\xd4\x01\xbd\x11j\x18\x1d\x00\x10\xa8AD\ \xe9\xaeq\xe1`f)HF\xc4\x8dC2\x06\xbf\x8a4\xcf\x1e\x03K\xe5h\x1bH\x02\x98\xc7\
\xa4\xa4\xd6_\x9b\x19\xbb\x03\xd8c|\x8f\x00\xe0\x93\xa8g>\x15 C\xee:\xe7\x8f\ \x03\x98\xa9z\x07\x00%\xd6\xa9\xd27\x90\xac\xbbk\xe5\x15I\xcdD$\xdc\xa7\xceT\
\x08\xdesj\xcf\xe6\xde(\xddn\xec\x18f0w\xe0m;\x8d\x9b\xe4\xb1\xd4\n\xa6\x0e2\ 5a\xce\xf3\xe4\xa0\xaa\x8bO\x12\x11\xabC\xcb\x9c}\xd57\xef\xb0\xf3\xb7\x86p\
\xc4{\x1f\xeb\xdf?\xe5\xff\t\xa8\x1a$\x0cg\xac\xaf\xb0\xf4\x992<\x01\xec\xa0\ \x97\xf7\xb5\xaa\xde\xb9\xfa|-O\xbdjN\x9b\xf8\x06A\xcb\x00\x00\x00\x00IEND\
U9V\xf9\x18\xc8\x00\x00\x00\x00IEND\xaeB`\x82' \xaeB`\x82'
def getBreakBitmap(): def getBreakBitmap():
return BitmapFromImage(getBreakImage()) return BitmapFromImage(getBreakImage())
@@ -2163,14 +2171,18 @@ def getClearOutputIcon():
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def getCloseData(): def getCloseData():
return \ return \
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\x08\x06\ '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x02\
\x00\x00\x00V\xce\x8eW\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ \x00\x00\x00\x90\x91h6\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\x00\
\x00\x86IDAT8\x8d\xed\x90\xb1\r\x80 \x10E_"c\xd80\x02-\x138\x87;8\x8f\x8d\ \x00\xedIDAT(\x91\xa5\x90!\xae\x840\x10\x86g_\xd6"*kz\x82j\xb0h\x1c\t\' x\
\x8b\xb0\x02\xa5\xad\rS\x88\xcd\x11) \x82\xb6\xbe\xea\xf2\xc9\xbd\xfc\x03~\ \x92Z\xc2\x05\x10\x95\x18\x0e\x00\x02M\x82 \xe1\nMF#jz\x80\xea&+\x9a\x10\x96\
\xdeb\x81\xb9\x90\xabJ^%\x00N\x849\x0e\xf0\x85\xbc\x8a\x12YZR2\xc7\x1eIB\xcb\ \xdd}\xfb\xc8\x1b\xd7?\xdf\x97\xfe3\xb7u]\xe1\xca\xfc\\\xa2\xff- \xe24M\xc7\
\xb2\xcb\x9at\x9d\x95c\xa5Y|\x92\x0c\x0f\xa2\r8e\x1e\x81\x1d8z\xdb8\xee?Ig\ \xc49wJ\xee\xc7G]\xd7\x8c1\xc6\x18\xe7\xdc\'B\x08k\xed1y\xfaa\x1cG\xad\xb5\
\xfa\xb7\x92)\xcb\xacd\x01XZ$QD\xba\xf0\xa6\x80\xd5\x18cZ\x1b\x95$?\x1f\xb9\ \x94\x12\x11\x9dsy\x9e+\xa5\x84\x10;\r\x00\xb7\xd3\x95\x8c1UU\x05A\x00\x00\
\x00\x1d\x94\x1e*e_\x8a~\x00\x00\x00\x00IEND\xaeB`\x82' \xd6\xda,\xcb\x92$\xf9\xb8\x03\x00PJ\x85\x10Zk\xa5\xd4+\xfdF\x00\x80\xae\xeb\
\x08!\x84\x90y\x9e\x11\xf1\x8bP\x96\xa5\xef\xdd\xb6\xad\xb5VJ\xf9\x9b\xe0\
\xe9\xa6i8\xe7\xbe\xdb\xb6mi\x9a\x0e\xc3\xf0F\x88\xe3\x18\x00\xfa\xbe\x0f\
\xc3\xd0\'\x9c\xf3eY\xa2(*\x8ab\xc7\x9e\xaed\x8c\xa1\x94\xben\xf5\xb1\xd2W\
\xfa,\xfce.\x0b\x0f\xb8\x96e\x90gS\xe0v\x00\x00\x00\x00IEND\xaeB`\x82'
def getCloseBitmap(): def getCloseBitmap():
return BitmapFromImage(getCloseImage()) return BitmapFromImage(getCloseImage())

View File

@@ -120,7 +120,7 @@ class FindInDirService(FindService.FindService):
dlg.Destroy() dlg.Destroy()
wx.EVT_BUTTON(findDirButton, -1, OnBrowseButton) wx.EVT_BUTTON(findDirButton, -1, OnBrowseButton)
subfolderCtrl = wx.CheckBox(frame, -1, _("Search in subfolders")) subfolderCtrl = wx.CheckBox(frame, -1, _("Search in subdirectories"))
subfolderCtrl.SetValue(config.ReadInt(FIND_MATCHDIRSUBFOLDERS, True)) subfolderCtrl.SetValue(config.ReadInt(FIND_MATCHDIRSUBFOLDERS, True))
contentSizer.Add(subfolderCtrl, 0, wx.BOTTOM, SPACE) contentSizer.Add(subfolderCtrl, 0, wx.BOTTOM, SPACE)
@@ -152,7 +152,7 @@ class FindInDirService(FindService.FindService):
findBtn = wx.Button(frame, wx.ID_OK, _("Find")) findBtn = wx.Button(frame, wx.ID_OK, _("Find"))
findBtn.SetDefault() findBtn.SetDefault()
buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE) buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
buttonSizer.Add(wx.Button(frame, wx.ID_CANCEL, _("Cancel")), 0) buttonSizer.Add(wx.Button(frame, wx.ID_CANCEL), 0)
borderSizer.Add(buttonSizer, 0, wx.ALL, SPACE) borderSizer.Add(buttonSizer, 0, wx.ALL, SPACE)
frame.SetSizer(borderSizer) frame.SetSizer(borderSizer)
@@ -311,7 +311,7 @@ class FindInDirService(FindService.FindService):
findBtn = wx.Button(frame, wx.ID_OK, _("Find")) findBtn = wx.Button(frame, wx.ID_OK, _("Find"))
findBtn.SetDefault() findBtn.SetDefault()
buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE) buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
buttonSizer.Add(wx.Button(frame, wx.ID_CANCEL, _("Cancel")), 0) buttonSizer.Add(wx.Button(frame, wx.ID_CANCEL), 0)
borderSizer.Add(buttonSizer, 0, wx.ALL, SPACE) borderSizer.Add(buttonSizer, 0, wx.ALL, SPACE)
frame.SetSizer(borderSizer) frame.SetSizer(borderSizer)

View File

@@ -97,19 +97,11 @@ class FindService(wx.lib.pydocview.DocService):
def ProcessUpdateUIEvent(self, event): def ProcessUpdateUIEvent(self, event):
id = event.GetId() id = event.GetId()
if id == FindService.FIND_ID: if (id == FindService.FIND_ID
event.Enable(False) or id == FindService.FIND_PREVIOUS_ID
return True or id == FindService.FIND_NEXT_ID
elif id == FindService.FIND_PREVIOUS_ID: or id == FindService.REPLACE_ID
event.Enable(False) or id == FindService.GOTO_LINE_ID):
return True
elif id == FindService.FIND_NEXT_ID:
event.Enable(False)
return True
elif id == FindService.REPLACE_ID:
event.Enable(False)
return True
elif id == FindService.GOTO_LINE_ID:
event.Enable(False) event.Enable(False)
return True return True
else: else:
@@ -362,7 +354,7 @@ class FindDialog(wx.Dialog):
findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next")) findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next"))
findBtn.SetDefault() findBtn.SetDefault()
wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent) wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent)
cancelBtn = wx.Button(self, wx.ID_CANCEL, _("Cancel")) cancelBtn = wx.Button(self, wx.ID_CANCEL)
wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose)
buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE) buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
buttonSizer.Add(cancelBtn, 0) buttonSizer.Add(cancelBtn, 0)
@@ -457,7 +449,7 @@ class FindReplaceDialog(FindDialog):
findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next")) findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next"))
findBtn.SetDefault() findBtn.SetDefault()
wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent) wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent)
cancelBtn = wx.Button(self, wx.ID_CANCEL, _("Cancel")) cancelBtn = wx.Button(self, wx.ID_CANCEL)
wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose)
replaceBtn = wx.Button(self, FindService.REPLACEONE_ID, _("Replace")) replaceBtn = wx.Button(self, FindService.REPLACEONE_ID, _("Replace"))
wx.EVT_BUTTON(self, FindService.REPLACEONE_ID, self.OnActionEvent) wx.EVT_BUTTON(self, FindService.REPLACEONE_ID, self.OnActionEvent)

View File

@@ -348,7 +348,12 @@ class IDEApplication(wx.lib.pydocview.DocApp):
if not welcomeService.RunWelcomeIfFirstTime(): if not welcomeService.RunWelcomeIfFirstTime():
if os.path.exists("activegrid/tool/data/tips.txt"): if os.path.exists("activegrid/tool/data/tips.txt"):
wx.CallAfter(self.ShowTip, docManager.FindSuitableParent(), wx.CreateFileTipProvider("activegrid/tool/data/tips.txt", 0)) wx.CallAfter(self.ShowTip, docManager.FindSuitableParent(), wx.CreateFileTipProvider("activegrid/tool/data/tips.txt", 0))
else:
if os.path.exists("activegrid/tool/data/tips.txt"):
wx.CallAfter(self.ShowTip, docManager.FindSuitableParent(), wx.CreateFileTipProvider("activegrid/tool/data/tips.txt", 0))
wx.UpdateUIEvent.SetUpdateInterval(200) # Overhead of updating menus was too much. Change to update every 200 milliseconds.
return True return True

View File

@@ -41,12 +41,23 @@ class ImageView(wx.lib.docview.View):
panel = wx.Panel(frame, -1) panel = wx.Panel(frame, -1)
bitmap = wx.Image(doc.GetFilename()).ConvertToBitmap() bitmap = wx.Image(doc.GetFilename()).ConvertToBitmap()
self._ctrl = wx.StaticBitmap(panel, -1, bitmap, (0,0), (bitmap.GetWidth(), bitmap.GetHeight())) self._ctrl = wx.StaticBitmap(panel, -1, bitmap, (0,0), (bitmap.GetWidth(), bitmap.GetHeight()))
wx.EVT_LEFT_DOWN(self._ctrl, self.OnFocus)
wx.EVT_LEFT_DCLICK(self._ctrl, self.OnFocus)
wx.EVT_RIGHT_DOWN(self._ctrl, self.OnFocus)
wx.EVT_RIGHT_DCLICK(self._ctrl, self.OnFocus)
wx.EVT_MIDDLE_DOWN(self._ctrl, self.OnFocus)
wx.EVT_MIDDLE_DCLICK(self._ctrl, self.OnFocus)
panel.SetClientSize(bitmap.GetSize()) panel.SetClientSize(bitmap.GetSize())
frame.SetClientSize(panel.GetSize()) frame.SetClientSize(panel.GetSize())
self.Activate() self.Activate()
return True return True
def OnFocus(self, event):
self._ctrl.SetFocus()
event.Skip()
def OnClose(self, deleteWindow = True): def OnClose(self, deleteWindow = True):
statusC = wx.GetApp().CloseChildDocuments(self.GetDocument()) statusC = wx.GetApp().CloseChildDocuments(self.GetDocument())
statusP = wx.lib.docview.View.OnClose(self, deleteWindow = deleteWindow) statusP = wx.lib.docview.View.OnClose(self, deleteWindow = deleteWindow)

View File

@@ -156,11 +156,8 @@ class OutlineView(Service.ServiceView):
treeCtrl.Expand(child) treeCtrl.Expand(child)
(child, cookie) = treeCtrl.GetNextChild(parentItem, cookie) (child, cookie) = treeCtrl.GetNextChild(parentItem, cookie)
# wxBug: This causes a crash, tried using ScrollTo which crashed as well. Then tried calling it with wx.CallAfter and that crashed as well, with both EnsureVisible and ScrollTo if parentItem:
# self.GetControl().EnsureVisible(self.GetControl().GetRootItem()) treeCtrl.EnsureVisible(parentItem)
# So doing the following massive hack which forces the treectrl to scroll up to the top item
treeCtrl.Collapse(parentItem)
treeCtrl.Expand(parentItem)
class OutlineTreeCtrl(wx.TreeCtrl): class OutlineTreeCtrl(wx.TreeCtrl):

File diff suppressed because it is too large Load Diff

View File

@@ -293,10 +293,6 @@ class TextView(wx.lib.docview.View):
if not self.GetCtrl(): if not self.GetCtrl():
return False return False
hasSelection = self.GetCtrl().GetSelectionStart() != self.GetCtrl().GetSelectionEnd()
hasText = self.GetCtrl().GetTextLength() > 0
notOnLastChar = self.GetCtrl().GetSelectionStart() != self.GetCtrl().GetTextLength()
id = event.GetId() id = event.GetId()
if id == wx.ID_UNDO: if id == wx.ID_UNDO:
event.Enable(self.GetCtrl().CanUndo()) event.Enable(self.GetCtrl().CanUndo())
@@ -306,41 +302,44 @@ class TextView(wx.lib.docview.View):
event.Enable(self.GetCtrl().CanRedo()) event.Enable(self.GetCtrl().CanRedo())
event.SetText(_("Redo") + '\t' + _('Ctrl+Y')) event.SetText(_("Redo") + '\t' + _('Ctrl+Y'))
return True return True
elif id == wx.ID_CUT: elif (id == wx.ID_CUT
event.Enable(hasSelection) or id == wx.ID_COPY
return True or id == wx.ID_CLEAR):
elif id == wx.ID_COPY: hasSelection = self.GetCtrl().GetSelectionStart() != self.GetCtrl().GetSelectionEnd()
event.Enable(hasSelection) event.Enable(hasSelection)
return True return True
elif id == wx.ID_PASTE: elif id == wx.ID_PASTE:
event.Enable(self.GetCtrl().CanPaste()) event.Enable(self.GetCtrl().CanPaste())
return True return True
elif id == wx.ID_CLEAR:
event.Enable(hasSelection)
return True
elif id == wx.ID_SELECTALL: elif id == wx.ID_SELECTALL:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
return True return True
elif id == TEXT_ID: elif id == TEXT_ID:
event.Enable(True) event.Enable(True)
return True return True
elif id == VIEW_WHITESPACE_ID: elif id == VIEW_WHITESPACE_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
event.Check(self.GetCtrl().GetViewWhiteSpace()) event.Check(self.GetCtrl().GetViewWhiteSpace())
return True return True
elif id == VIEW_EOL_ID: elif id == VIEW_EOL_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
event.Check(self.GetCtrl().GetViewEOL()) event.Check(self.GetCtrl().GetViewEOL())
return True return True
elif id == VIEW_INDENTATION_GUIDES_ID: elif id == VIEW_INDENTATION_GUIDES_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
event.Check(self.GetCtrl().GetIndentationGuides()) event.Check(self.GetCtrl().GetIndentationGuides())
return True return True
elif id == VIEW_RIGHT_EDGE_ID: elif id == VIEW_RIGHT_EDGE_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
event.Check(self.GetCtrl().GetViewRightEdge()) event.Check(self.GetCtrl().GetViewRightEdge())
return True return True
elif id == VIEW_LINE_NUMBERS_ID: elif id == VIEW_LINE_NUMBERS_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
event.Check(self.GetCtrl().GetViewLineNumbers()) event.Check(self.GetCtrl().GetViewLineNumbers())
return True return True
@@ -364,19 +363,23 @@ class TextView(wx.lib.docview.View):
event.Check(self.GetCtrl().CanWordWrap() and self.GetCtrl().GetWordWrap()) event.Check(self.GetCtrl().CanWordWrap() and self.GetCtrl().GetWordWrap())
return True return True
elif id == FindService.FindService.FIND_ID: elif id == FindService.FindService.FIND_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
return True return True
elif id == FindService.FindService.FIND_PREVIOUS_ID: elif id == FindService.FindService.FIND_PREVIOUS_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText and event.Enable(hasText and
self._FindServiceHasString() and self._FindServiceHasString() and
self.GetCtrl().GetSelection()[0] > 0) self.GetCtrl().GetSelection()[0] > 0)
return True return True
elif id == FindService.FindService.FIND_NEXT_ID: elif id == FindService.FindService.FIND_NEXT_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText and event.Enable(hasText and
self._FindServiceHasString() and self._FindServiceHasString() and
self.GetCtrl().GetSelection()[0] < self.GetCtrl().GetLength()) self.GetCtrl().GetSelection()[0] < self.GetCtrl().GetLength())
return True return True
elif id == FindService.FindService.REPLACE_ID: elif id == FindService.FindService.REPLACE_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText) event.Enable(hasText)
return True return True
elif id == FindService.FindService.GOTO_LINE_ID: elif id == FindService.FindService.GOTO_LINE_ID:
@@ -745,40 +748,18 @@ class TextService(wx.lib.pydocview.DocService):
def ProcessUpdateUIEvent(self, event): def ProcessUpdateUIEvent(self, event):
id = event.GetId() id = event.GetId()
if id == TEXT_ID: if (id == TEXT_ID
event.Enable(False) or id == VIEW_WHITESPACE_ID
return True or id == VIEW_EOL_ID
elif id == VIEW_WHITESPACE_ID: or id == VIEW_INDENTATION_GUIDES_ID
event.Enable(False) or id == VIEW_RIGHT_EDGE_ID
return True or id == VIEW_LINE_NUMBERS_ID
elif id == VIEW_EOL_ID: or id == ZOOM_ID
event.Enable(False) or id == ZOOM_NORMAL_ID
return True or id == ZOOM_IN_ID
elif id == VIEW_INDENTATION_GUIDES_ID: or id == ZOOM_OUT_ID
event.Enable(False) or id == CHOOSE_FONT_ID
return True or id == WORD_WRAP_ID):
elif id == VIEW_RIGHT_EDGE_ID:
event.Enable(False)
return True
elif id == VIEW_LINE_NUMBERS_ID:
event.Enable(False)
return True
elif id == ZOOM_ID:
event.Enable(False)
return True
elif id == ZOOM_NORMAL_ID:
event.Enable(False)
return True
elif id == ZOOM_IN_ID:
event.Enable(False)
return True
elif id == ZOOM_OUT_ID:
event.Enable(False)
return True
elif id == CHOOSE_FONT_ID:
event.Enable(False)
return True
elif id == WORD_WRAP_ID:
event.Enable(False) event.Enable(False)
return True return True
else: else:

View File

@@ -88,6 +88,7 @@ def AddFilesToCurrentProject(paths, save=False):
paths.remove(path) paths.remove(path)
if paths: if paths:
projectDocument.GetCommandProcessor().Submit(ProjectEditor.ProjectAddFilesCommand(projectDocument, paths)) projectDocument.GetCommandProcessor().Submit(ProjectEditor.ProjectAddFilesCommand(projectDocument, paths))
projectDocument.GetFirstView().DoSelectFiles([paths[0]])
if save: if save:
projectDocument.OnSaveDocument(projectDocument.GetFilename()) projectDocument.OnSaveDocument(projectDocument.GetFilename())

View File

@@ -721,7 +721,15 @@ def processFiles(files, cfg = None, pre_process_cb = None) :
if callable(pre_process_cb) : if callable(pre_process_cb) :
pre_process_cb(moduleName) pre_process_cb(moduleName)
module = Module(moduleName, fullpath = filename) module = Module(moduleName, fullpath = filename)
# reload the given module, otherwise won't get new syntax errors.
sysModule = sys.modules.get(moduleName)
if sysModule:
try:
reload(sysModule)
except:
pass
module.load(warnings) module.load(warnings)
utils.popConfig() utils.popConfig()
return warnings return warnings
@@ -749,7 +757,7 @@ def checkSyntax(filename, messageView):
_cfg, files, suppressions = Config.setupFromArgs([filename]) _cfg, files, suppressions = Config.setupFromArgs([filename])
if not files : if not files :
return 0 return 0
global _output, _statusDlg, _count global _output, _statusDlg, _count
_output = messageView _output = messageView
# wxBug: Need to show progress dialog box, or message window never gets updated until the method returns # wxBug: Need to show progress dialog box, or message window never gets updated until the method returns
@@ -757,7 +765,8 @@ def checkSyntax(filename, messageView):
_count = 0 _count = 0
# insert this here, so we find files in the local dir before std library # insert this here, so we find files in the local dir before std library
sys.path.insert(0, '') if sys.path[0] != '' :
sys.path.insert(0, '')
importWarnings = processFiles(files, _cfg, _print_processing) importWarnings = processFiles(files, _cfg, _print_processing)
fixupBuiltinModules() fixupBuiltinModules()

View File

@@ -1,3 +1,15 @@
#----------------------------------------------------------------------------
# Name: __init__.py
# Purpose: Utilities
#
# Author: Joel Hare
#
# Created: 7/28/04
# CVS-ID: $Id$
# Copyright: (c) 2004-2005 ActiveGrid, Inc.
# License: wxWindows License
#----------------------------------------------------------------------------
import logging import logging
import cStringIO import cStringIO
import traceback import traceback
@@ -33,7 +45,7 @@ def setattrignorecase(object, name, value):
## object.__dict__[attr] = value ## object.__dict__[attr] = value
## return ## return
object.__dict__[name] = value object.__dict__[name] = value
def getattrignorecase(object, name): def getattrignorecase(object, name):
for attr in object.__dict__: for attr in object.__dict__:
if attr.lower() == name.lower(): if attr.lower() == name.lower():
@@ -44,18 +56,18 @@ def getattrignorecase(object, name):
return object.__dict__[name] return object.__dict__[name]
def defaultLoad(fileObject): def defaultLoad(fileObject, knownTypes=None):
xml = fileObject.read() xml = fileObject.read()
loadedObject = xmlmarshaller.unmarshal(xml) loadedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
if hasattr(fileObject, 'name'): if hasattr(fileObject, 'name'):
loadedObject.fileName = os.path.abspath(fileObject.name) loadedObject.fileName = os.path.abspath(fileObject.name)
loadedObject.initialize() loadedObject.initialize()
return loadedObject return loadedObject
def defaultSave(fileObject, objectToSave): def defaultSave(fileObject, objectToSave, knownTypes=None):
xml = xmlmarshaller.marshal(objectToSave, prettyPrint=True) xml = xmlmarshaller.marshal(objectToSave, prettyPrint=True, knownTypes=knownTypes)
fileObject.write(xml) fileObject.write(xml)
fileObject.close()
def clone(objectToClone): def clone(objectToClone):
xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True) xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True)

View File

@@ -97,19 +97,11 @@ class FindService(wx.lib.pydocview.DocService):
def ProcessUpdateUIEvent(self, event): def ProcessUpdateUIEvent(self, event):
id = event.GetId() id = event.GetId()
if id == FindService.FIND_ID: if (id == FindService.FIND_ID
event.Enable(False) or id == FindService.FIND_PREVIOUS_ID
return True or id == FindService.FIND_NEXT_ID
elif id == FindService.FIND_PREVIOUS_ID: or id == FindService.REPLACE_ID
event.Enable(False) or id == FindService.GOTO_LINE_ID):
return True
elif id == FindService.FIND_NEXT_ID:
event.Enable(False)
return True
elif id == FindService.REPLACE_ID:
event.Enable(False)
return True
elif id == FindService.GOTO_LINE_ID:
event.Enable(False) event.Enable(False)
return True return True
else: else:
@@ -362,7 +354,7 @@ class FindDialog(wx.Dialog):
findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next")) findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next"))
findBtn.SetDefault() findBtn.SetDefault()
wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent) wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent)
cancelBtn = wx.Button(self, wx.ID_CANCEL, _("Cancel")) cancelBtn = wx.Button(self, wx.ID_CANCEL)
wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose)
buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE) buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
buttonSizer.Add(cancelBtn, 0) buttonSizer.Add(cancelBtn, 0)
@@ -457,7 +449,7 @@ class FindReplaceDialog(FindDialog):
findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next")) findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next"))
findBtn.SetDefault() findBtn.SetDefault()
wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent) wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent)
cancelBtn = wx.Button(self, wx.ID_CANCEL, _("Cancel")) cancelBtn = wx.Button(self, wx.ID_CANCEL)
wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose)
replaceBtn = wx.Button(self, FindService.REPLACEONE_ID, _("Replace")) replaceBtn = wx.Button(self, FindService.REPLACEONE_ID, _("Replace"))
wx.EVT_BUTTON(self, FindService.REPLACEONE_ID, self.OnActionEvent) wx.EVT_BUTTON(self, FindService.REPLACEONE_ID, self.OnActionEvent)

View File

@@ -7,7 +7,7 @@
# Created: 8/15/03 # Created: 8/15/03
# CVS-ID: $Id$ # CVS-ID: $Id$
# Copyright: (c) 2003-2005 ActiveGrid, Inc. # Copyright: (c) 2003-2005 ActiveGrid, Inc.
# License: ASL 2.0 http://apache.org/licenses/LICENSE-2.0 # License: wxWindows License
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
import wx import wx
import wx.lib.docview import wx.lib.docview

View File

@@ -215,16 +215,13 @@ class Document(wx.EvtHandler):
self._documentModified = modify self._documentModified = modify
def SetDocumentModificationDate(self, filename=None): def SetDocumentModificationDate(self):
""" """
Saves the file's last modification date. Saves the file's last modification date.
This is used to check if the file has been modified outside of the application. This is used to check if the file has been modified outside of the application.
This method has been added to wxPython and is not in wxWindows. This method has been added to wxPython and is not in wxWindows.
""" """
if not filename: self._documentModificationDate = os.path.getmtime(self.GetFilename())
filename = self.GetFilename()
self._documentModificationDate = os.path.getmtime(filename)
print "debug print, file: %s set modification date to %s" % (filename, self._documentModificationDate)
def GetDocumentModificationDate(self): def GetDocumentModificationDate(self):
@@ -365,7 +362,6 @@ class Document(wx.EvtHandler):
""" check for file modification outside of application """ """ check for file modification outside of application """
if os.path.exists(self.GetFilename()) and os.path.getmtime(self.GetFilename()) != self.GetDocumentModificationDate(): if os.path.exists(self.GetFilename()) and os.path.getmtime(self.GetFilename()) != self.GetDocumentModificationDate():
print "debug print, File %s: new mod date %s, original mod date %s" % (self.GetFilename(), os.path.getmtime(self.GetFilename()), self.GetDocumentModificationDate())
msgTitle = wx.GetApp().GetAppName() msgTitle = wx.GetApp().GetAppName()
if not msgTitle: if not msgTitle:
msgTitle = _("Application") msgTitle = _("Application")
@@ -468,6 +464,7 @@ class Document(wx.EvtHandler):
if backupFilename: if backupFilename:
os.remove(filename) os.remove(filename)
os.rename(backupFilename, filename) os.rename(backupFilename, filename)
self.SetDocumentModificationDate()
wx.MessageBox("Could not save '%s'. %s" % (FileNameFromPath(filename), sys.exc_value), wx.MessageBox("Could not save '%s'. %s" % (FileNameFromPath(filename), sys.exc_value),
msgTitle, msgTitle,
@@ -596,7 +593,6 @@ class Document(wx.EvtHandler):
""" check for file modification outside of application """ """ check for file modification outside of application """
if os.path.exists(self.GetFilename()) and os.path.getmtime(self.GetFilename()) != self.GetDocumentModificationDate(): if os.path.exists(self.GetFilename()) and os.path.getmtime(self.GetFilename()) != self.GetDocumentModificationDate():
print "debug print, File %s: new mod date %s, original mod date %s" % (self.GetFilename(), os.path.getmtime(self.GetFilename()), self.GetDocumentModificationDate())
msgTitle = wx.GetApp().GetAppName() msgTitle = wx.GetApp().GetAppName()
if not msgTitle: if not msgTitle:
msgTitle = _("Warning") msgTitle = _("Warning")

View File

@@ -780,18 +780,20 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
for template in templates: for template in templates:
icon = template.GetIcon() icon = template.GetIcon()
if icon: if icon:
if icon.GetHeight() != 16: if icon.GetHeight() != 16 or icon.GetWidth() != 16:
icon.SetHeight(16) # wxBug: img2py.py uses EmptyIcon which is 32x32 icon.SetHeight(16)
if icon.GetWidth() != 16: icon.SetWidth(16)
icon.SetWidth(16) # wxBug: img2py.py uses EmptyIcon which is 32x32 if wx.GetApp().GetDebug():
print "Warning: icon for '%s' isn't 16x16, not crossplatform" % template._docTypeName
iconIndex = iconList.AddIcon(icon) iconIndex = iconList.AddIcon(icon)
self._iconIndexLookup.append((template, iconIndex)) self._iconIndexLookup.append((template, iconIndex))
icon = getBlankIcon() icon = getBlankIcon()
if icon.GetHeight() != 16: if icon.GetHeight() != 16 or icon.GetWidth() != 16:
icon.SetHeight(16) # wxBug: img2py.py uses EmptyIcon which is 32x32 icon.SetHeight(16)
if icon.GetWidth() != 16: icon.SetWidth(16)
icon.SetWidth(16) # wxBug: img2py.py uses EmptyIcon which is 32x32 if wx.GetApp().GetDebug():
print "Warning: getBlankIcon isn't 16x16, not crossplatform"
self._blankIconIndex = iconList.AddIcon(icon) self._blankIconIndex = iconList.AddIcon(icon)
self._notebook.AssignImageList(iconList) self._notebook.AssignImageList(iconList)