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)
SHAPE_BRUSH = wx.Brush("WHEAT", wx.SOLID)
LINE_BRUSH = wx.BLACK_BRUSH
INACTIVE_SELECT_BRUSH = wx.Brush("LIGHT BLUE", wx.SOLID)
def GetRawModel(model):
@ -59,7 +60,7 @@ class CanvasView(wx.lib.docview.View):
frame.Layout()
self.Activate()
return True
def OnActivateView(self, activate, activeView, deactiveView):
if activate and self._canvas:
@ -70,6 +71,17 @@ class CanvasView(wx.lib.docview.View):
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):
statusC = wx.GetApp().CloseChildDocuments(self.GetDocument())
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_LEFT_DCLICK(self._canvas, self.OnLeftDoubleClick)
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
maxHeight = 16000
@ -513,6 +536,32 @@ class CanvasView(wx.lib.docview.View):
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
#----------------------------------------------------------------------------

View File

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

View File

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

View File

@ -120,7 +120,7 @@ class FindInDirService(FindService.FindService):
dlg.Destroy()
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))
contentSizer.Add(subfolderCtrl, 0, wx.BOTTOM, SPACE)
@ -152,7 +152,7 @@ class FindInDirService(FindService.FindService):
findBtn = wx.Button(frame, wx.ID_OK, _("Find"))
findBtn.SetDefault()
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)
frame.SetSizer(borderSizer)
@ -311,7 +311,7 @@ class FindInDirService(FindService.FindService):
findBtn = wx.Button(frame, wx.ID_OK, _("Find"))
findBtn.SetDefault()
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)
frame.SetSizer(borderSizer)

View File

@ -97,19 +97,11 @@ class FindService(wx.lib.pydocview.DocService):
def ProcessUpdateUIEvent(self, event):
id = event.GetId()
if id == FindService.FIND_ID:
event.Enable(False)
return True
elif id == FindService.FIND_PREVIOUS_ID:
event.Enable(False)
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:
if (id == FindService.FIND_ID
or id == FindService.FIND_PREVIOUS_ID
or id == FindService.FIND_NEXT_ID
or id == FindService.REPLACE_ID
or id == FindService.GOTO_LINE_ID):
event.Enable(False)
return True
else:
@ -362,7 +354,7 @@ class FindDialog(wx.Dialog):
findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next"))
findBtn.SetDefault()
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)
buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
buttonSizer.Add(cancelBtn, 0)
@ -457,7 +449,7 @@ class FindReplaceDialog(FindDialog):
findBtn = wx.Button(self, FindService.FINDONE_ID, _("Find Next"))
findBtn.SetDefault()
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)
replaceBtn = wx.Button(self, FindService.REPLACEONE_ID, _("Replace"))
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 os.path.exists("activegrid/tool/data/tips.txt"):
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

View File

@ -41,12 +41,23 @@ class ImageView(wx.lib.docview.View):
panel = wx.Panel(frame, -1)
bitmap = wx.Image(doc.GetFilename()).ConvertToBitmap()
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())
frame.SetClientSize(panel.GetSize())
self.Activate()
return True
def OnFocus(self, event):
self._ctrl.SetFocus()
event.Skip()
def OnClose(self, deleteWindow = True):
statusC = wx.GetApp().CloseChildDocuments(self.GetDocument())
statusP = wx.lib.docview.View.OnClose(self, deleteWindow = deleteWindow)

View File

@ -156,11 +156,8 @@ class OutlineView(Service.ServiceView):
treeCtrl.Expand(child)
(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
# self.GetControl().EnsureVisible(self.GetControl().GetRootItem())
# So doing the following massive hack which forces the treectrl to scroll up to the top item
treeCtrl.Collapse(parentItem)
treeCtrl.Expand(parentItem)
if parentItem:
treeCtrl.EnsureVisible(parentItem)
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():
return False
hasSelection = self.GetCtrl().GetSelectionStart() != self.GetCtrl().GetSelectionEnd()
hasText = self.GetCtrl().GetTextLength() > 0
notOnLastChar = self.GetCtrl().GetSelectionStart() != self.GetCtrl().GetTextLength()
id = event.GetId()
if id == wx.ID_UNDO:
event.Enable(self.GetCtrl().CanUndo())
@ -306,41 +302,44 @@ class TextView(wx.lib.docview.View):
event.Enable(self.GetCtrl().CanRedo())
event.SetText(_("Redo") + '\t' + _('Ctrl+Y'))
return True
elif id == wx.ID_CUT:
event.Enable(hasSelection)
return True
elif id == wx.ID_COPY:
elif (id == wx.ID_CUT
or id == wx.ID_COPY
or id == wx.ID_CLEAR):
hasSelection = self.GetCtrl().GetSelectionStart() != self.GetCtrl().GetSelectionEnd()
event.Enable(hasSelection)
return True
elif id == wx.ID_PASTE:
event.Enable(self.GetCtrl().CanPaste())
return True
elif id == wx.ID_CLEAR:
event.Enable(hasSelection)
return True
elif id == wx.ID_SELECTALL:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
return True
elif id == TEXT_ID:
event.Enable(True)
return True
elif id == VIEW_WHITESPACE_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
event.Check(self.GetCtrl().GetViewWhiteSpace())
return True
elif id == VIEW_EOL_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
event.Check(self.GetCtrl().GetViewEOL())
return True
elif id == VIEW_INDENTATION_GUIDES_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
event.Check(self.GetCtrl().GetIndentationGuides())
return True
elif id == VIEW_RIGHT_EDGE_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
event.Check(self.GetCtrl().GetViewRightEdge())
return True
elif id == VIEW_LINE_NUMBERS_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
event.Check(self.GetCtrl().GetViewLineNumbers())
return True
@ -364,19 +363,23 @@ class TextView(wx.lib.docview.View):
event.Check(self.GetCtrl().CanWordWrap() and self.GetCtrl().GetWordWrap())
return True
elif id == FindService.FindService.FIND_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
return True
elif id == FindService.FindService.FIND_PREVIOUS_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText and
self._FindServiceHasString() and
self.GetCtrl().GetSelection()[0] > 0)
return True
elif id == FindService.FindService.FIND_NEXT_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText and
self._FindServiceHasString() and
self.GetCtrl().GetSelection()[0] < self.GetCtrl().GetLength())
return True
elif id == FindService.FindService.REPLACE_ID:
hasText = self.GetCtrl().GetTextLength() > 0
event.Enable(hasText)
return True
elif id == FindService.FindService.GOTO_LINE_ID:
@ -745,40 +748,18 @@ class TextService(wx.lib.pydocview.DocService):
def ProcessUpdateUIEvent(self, event):
id = event.GetId()
if id == TEXT_ID:
event.Enable(False)
return True
elif id == VIEW_WHITESPACE_ID:
event.Enable(False)
return True
elif id == VIEW_EOL_ID:
event.Enable(False)
return True
elif id == VIEW_INDENTATION_GUIDES_ID:
event.Enable(False)
return True
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:
if (id == TEXT_ID
or id == VIEW_WHITESPACE_ID
or id == VIEW_EOL_ID
or id == VIEW_INDENTATION_GUIDES_ID
or id == VIEW_RIGHT_EDGE_ID
or id == VIEW_LINE_NUMBERS_ID
or id == ZOOM_ID
or id == ZOOM_NORMAL_ID
or id == ZOOM_IN_ID
or id == ZOOM_OUT_ID
or id == CHOOSE_FONT_ID
or id == WORD_WRAP_ID):
event.Enable(False)
return True
else:

View File

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

View File

@ -721,7 +721,15 @@ def processFiles(files, cfg = None, pre_process_cb = None) :
if callable(pre_process_cb) :
pre_process_cb(moduleName)
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)
utils.popConfig()
return warnings
@ -749,7 +757,7 @@ def checkSyntax(filename, messageView):
_cfg, files, suppressions = Config.setupFromArgs([filename])
if not files :
return 0
global _output, _statusDlg, _count
_output = messageView
# 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
# 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)
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 cStringIO
import traceback
@ -33,7 +45,7 @@ def setattrignorecase(object, name, value):
## object.__dict__[attr] = value
## return
object.__dict__[name] = value
def getattrignorecase(object, name):
for attr in object.__dict__:
if attr.lower() == name.lower():
@ -44,18 +56,18 @@ def getattrignorecase(object, name):
return object.__dict__[name]
def defaultLoad(fileObject):
def defaultLoad(fileObject, knownTypes=None):
xml = fileObject.read()
loadedObject = xmlmarshaller.unmarshal(xml)
loadedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
if hasattr(fileObject, 'name'):
loadedObject.fileName = os.path.abspath(fileObject.name)
loadedObject.initialize()
return loadedObject
def defaultSave(fileObject, objectToSave):
xml = xmlmarshaller.marshal(objectToSave, prettyPrint=True)
def defaultSave(fileObject, objectToSave, knownTypes=None):
xml = xmlmarshaller.marshal(objectToSave, prettyPrint=True, knownTypes=knownTypes)
fileObject.write(xml)
fileObject.close()
def clone(objectToClone):
xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True)

View File

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

View File

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

View File

@ -215,16 +215,13 @@ class Document(wx.EvtHandler):
self._documentModified = modify
def SetDocumentModificationDate(self, filename=None):
def SetDocumentModificationDate(self):
"""
Saves the file's last modification date.
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.
"""
if not filename:
filename = self.GetFilename()
self._documentModificationDate = os.path.getmtime(filename)
print "debug print, file: %s set modification date to %s" % (filename, self._documentModificationDate)
self._documentModificationDate = os.path.getmtime(self.GetFilename())
def GetDocumentModificationDate(self):
@ -365,7 +362,6 @@ class Document(wx.EvtHandler):
""" check for file modification outside of application """
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()
if not msgTitle:
msgTitle = _("Application")
@ -468,6 +464,7 @@ class Document(wx.EvtHandler):
if backupFilename:
os.remove(filename)
os.rename(backupFilename, filename)
self.SetDocumentModificationDate()
wx.MessageBox("Could not save '%s'. %s" % (FileNameFromPath(filename), sys.exc_value),
msgTitle,
@ -596,7 +593,6 @@ class Document(wx.EvtHandler):
""" check for file modification outside of application """
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()
if not msgTitle:
msgTitle = _("Warning")

View File

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