Docview and IDE patch from Morag Hua with fix for bug #1217890

"Closing view crashes Python" plus some new features:

    New feature added to the IDE is 'Extensions'.  Under
    Tools|Options|Extensions, you can add calls to external programs.
    For example you can add a "Notepad" extension (under windows) that
    will exec Notepad on the currently open file.  A new "Notepad"
    menu item will appear under the Tools menu.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34638 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2005-06-11 23:18:57 +00:00
parent 94211100ea
commit 2eeaec1909
19 changed files with 1285 additions and 533 deletions

View File

@@ -14,98 +14,7 @@ import logging
import traceback
import sys
import os
import xmlmarshaller
AG_TYPE_MAPPING = { "ag:append" : "activegrid.model.processmodel.AppendOperation",
"ag:body" : "activegrid.model.processmodel.Body",
"ag:copy" : "activegrid.model.processmodel.CopyOperation",
"ag:cssRule" : "activegrid.model.processmodel.CssRule",
"ag:datasource" : "activegrid.data.dataservice.DataSource",
"ag:debug" : "activegrid.model.processmodel.DebugOperation",
"ag:deployment" : "activegrid.server.deployment.Deployment",
"ag:glue" : "activegrid.model.processmodel.Glue",
"ag:hr" : "activegrid.model.processmodel.HorizontalRow",
"ag:image" : "activegrid.model.processmodel.Image",
"ag:inputs" : "activegrid.model.processmodel.Inputs",
"ag:label" : "activegrid.model.processmodel.Label",
"ag:processmodel": "activegrid.model.processmodel.ProcessModel",
"ag:processmodelref" : "activegrid.server.deployment.ProcessModelRef",
"ag:query" : "activegrid.model.processmodel.Query",
"ag:schemaOptions" : "activegrid.model.schema.SchemaOptions",
"ag:schemaref" : "activegrid.server.deployment.SchemaRef",
"ag:set" : "activegrid.model.processmodel.SetOperation",
"ag:text" : "activegrid.model.processmodel.Text",
"ag:title" : "activegrid.model.processmodel.Title",
"ag:view" : "activegrid.model.processmodel.View",
"bpws:case" : "activegrid.model.processmodel.BPELCase",
"bpws:catch" : "activegrid.model.processmodel.BPELCatch",
"bpws:faultHandlers" : "activegrid.model.processmodel.BPELFaultHandlers",
"bpws:invoke" : "activegrid.model.processmodel.BPELInvoke",
"bpws:onMessage" : "activegrid.model.processmodel.BPELOnMessage",
"bpws:otherwise" : "activegrid.model.processmodel.BPELOtherwise",
"bpws:pick" : "activegrid.model.processmodel.BPELPick",
"bpws:process" : "activegrid.model.processmodel.BPELProcess",
"bpws:receive" : "activegrid.model.processmodel.BPELReceive",
"bpws:reply" : "activegrid.model.processmodel.BPELReply",
"bpws:scope" : "activegrid.model.processmodel.BPELScope",
"bpws:sequence" : "activegrid.model.processmodel.BPELSequence",
"bpws:switch" : "activegrid.model.processmodel.BPELSwitch",
"bpws:terminate" : "activegrid.model.processmodel.BPELTerminate",
"bpws:variable" : "activegrid.model.processmodel.BPELVariable",
"bpws:variables" : "activegrid.model.processmodel.BPELVariables",
"bpws:while" : "activegrid.model.processmodel.BPELWhile",
"wsdl:message" : "activegrid.model.processmodel.WSDLMessage",
"wsdl:part" : "activegrid.model.processmodel.WSDLPart",
"xforms:group" : "activegrid.model.processmodel.XFormsGroup",
"xforms:input" : "activegrid.model.processmodel.XFormsInput",
"xforms:label" : "activegrid.model.processmodel.XFormsLabel",
"xforms:output" : "activegrid.model.processmodel.XFormsOutput",
"xforms:secret" : "activegrid.model.processmodel.XFormsSecret",
"xforms:submit" : "activegrid.model.processmodel.XFormsSubmit",
"xs:all" : "activegrid.model.schema.XsdSequence",
"xs:complexType" : "activegrid.model.schema.XsdComplexType",
"xs:element" : "activegrid.model.schema.XsdElement",
"xs:field" : "activegrid.model.schema.XsdKeyField",
"xs:key" : "activegrid.model.schema.XsdKey",
"xs:keyref" : "activegrid.model.schema.XsdKeyRef",
"xs:schema" : "activegrid.model.schema.Schema",
"xs:selector" : "activegrid.model.schema.XsdKeySelector",
"xs:sequence" : "activegrid.model.schema.XsdSequence",
"projectmodel" : "activegrid.tool.ProjectEditor.ProjectModel",
}
def defaultLoad(fileObject, knownTypes=None):
xml = fileObject.read()
loadedObject = defaultUnmarshal(xml, knownTypes=knownTypes)
if hasattr(fileObject, 'name'):
loadedObject.fileName = os.path.abspath(fileObject.name)
loadedObject.initialize()
return loadedObject
def defaultUnmarshal(xml, knownTypes=None):
if not knownTypes: knownTypes = AG_TYPE_MAPPING
return xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
def defaultSave(fileObject, objectToSave, prettyPrint=True, knownTypes=None, withEncoding=1, encoding='utf-8'):
xml = defaultMarshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, withEncoding=withEncoding, encoding=encoding)
fileObject.write(xml)
fileObject.flush()
def defaultMarshal(objectToSave, prettyPrint=True, knownTypes=None, withEncoding=1, encoding='utf-8'):
if not knownTypes: knownTypes = AG_TYPE_MAPPING
return xmlmarshaller.marshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, withEncoding=withEncoding, encoding=encoding)
def clone(objectToClone, knownTypes=None, encoding='utf-8'):
if not knownTypes: knownTypes = AG_TYPE_MAPPING
xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True, knownTypes=knownTypes, encoding=encoding)
clonedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
if hasattr(objectToClone, 'fileName'):
clonedObject.fileName = objectToClone.fileName
try:
clonedObject.initialize()
except AttributeError:
pass
return clonedObject
from types import *
def classForName(className):
pathList = className.split('.')
@@ -115,31 +24,6 @@ def classForName(className):
code = code.__dict__[name]
return code
def hasattrignorecase(object, name):
namelow = name.lower()
for attr in dir(object):
if attr.lower() == namelow:
return True
for attr in dir(object):
if attr.lower() == '_' + namelow:
return True
return False
def setattrignorecase(object, name, value):
namelow = name.lower()
for attr in object.__dict__:
if attr.lower() == namelow:
object.__dict__[attr] = value
return
object.__dict__[name] = value
def getattrignorecase(object, name):
namelow = name.lower()
for attr in object.__dict__:
if attr.lower() == namelow:
return object.__dict__[attr]
return object.__dict__[name]
def hasPropertyValue(obj, attr):
hasProp = False
try:
@@ -159,7 +43,7 @@ def hasPropertyValue(obj, attr):
return hasProp
def toDiffableString(value):
s = repr(value)
s = str(value)
ds = ""
i = s.find(" at 0x")
start = 0
@@ -171,19 +55,51 @@ def toDiffableString(value):
start = j
i = s.find(" at 0x", start)
return ds + s[start:]
def toString(value, options=0):
if ((options & PRINT_OBJ_DIFFABLE) > 0):
return toDiffableString(value)
return value
def toTypeString(obj):
if (isinstance(obj, BooleanType)):
return "bool"
elif (isinstance(obj, UnicodeType)):
return "unicode"
elif (isinstance(obj, basestring)):
return "string"
elif (isinstance(obj, IntType)):
return "int"
elif (isinstance(obj, FloatType)):
return "float"
elif (type(obj) == ListType):
return "list"
elif (isinstance(obj, DictType)):
return "dict"
elif (isinstance(obj, TupleType)):
return "tuple"
elif (isinstance(obj, InstanceType)):
return type(obj)
else:
return type(obj)
PRINT_OBJ_GETATTR = 1
PRINT_OBJ_HIDE_INTERNAL = 2
PRINT_OBJ_COMPACT = 4
PRINT_OBJ_NONONE = 8
PRINT_OBJ_DIFFABLE = 16
PRINT_OBJ_INTERNAL = 512
def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent=30):
if ((maxIndent != None) and (indent > maxIndent)):
print >> out, " "*indent, name, str(object)
print >> out, " "*indent, "%s: %s" % (name, toString(str(object), flags)),
if ((flags & PRINT_OBJ_INTERNAL) == 0):
print >> out
return True
finalNewLine = False
printed = True
## if (exclude == None):
## exclude = []
if ((flags & PRINT_OBJ_COMPACT) > 0):
if (exclude and object in exclude):
return
@@ -191,7 +107,7 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
if ((flags & PRINT_OBJ_INTERNAL) == 0):
finalNewLine = True
flags |= PRINT_OBJ_INTERNAL
if (object == None):
if (object is None):
if (flags & PRINT_OBJ_NONONE) == 0:
print >> out, " "*indent, name, " = None",
else:
@@ -201,21 +117,21 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
finalNewLine = False
printed = False
elif (isinstance(object, (list, tuple))):
if (exclude and object in exclude):
print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (already printed)",
elif (exclude and name in exclude):
print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (excluded)",
if ((exclude != None) and object in exclude):
print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (already printed)",
elif ((exclude != None) and name in exclude):
print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
else:
if (exclude != None): exclude.append(object)
print >> out, " "*indent, name, " : ", type(object), " of length = %i" % len(object),
if ((exclude != None) and (len(object) > 0)): exclude.append(object)
print >> out, " "*indent, name, " : ", toTypeString(object), " of length = %d" % len(object),
for i, o in enumerate(object):
print >> out
printObject(out, o, name="[%i]" % i, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
printObject(out, o, name="[%d]" % i, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
elif (isinstance(object, dict)):
if (exclude and object in exclude):
print >> out, " "*indent, name, " : ", type(object), " (already printed)",
if ((exclude != None) and object in exclude):
print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
else:
if (exclude != None): exclude.append(object)
if ((exclude != None) and (len(object) > 0)): exclude.append(object)
if (len(name) > 0):
print >> out, " "*indent, name,
if ((flags & PRINT_OBJ_COMPACT) == 0):
@@ -226,25 +142,29 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
print >> out
keys = object.keys()
keys.sort()
for n in keys:
if ((n != None) and (not n.startswith("_") or ((flags & PRINT_OBJ_HIDE_INTERNAL) == 0))):
if printObject(out, object[n], name=n, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent):
if ((flags & PRINT_OBJ_COMPACT) == 0):
print >> out
else:
print >> out, ",",
for key in keys:
if (key != None):
n = key
if (not (isinstance(n, basestring))):
n = str(n)
if ((not n.startswith("_") or ((flags & PRINT_OBJ_HIDE_INTERNAL) == 0))):
if printObject(out, object[key], name=n, indent=indent+2, flags=(flags | PRINT_OBJ_INTERNAL), exclude=exclude, maxIndent=maxIndent):
if ((flags & PRINT_OBJ_COMPACT) == 0):
print >> out
else:
print >> out, ",",
print >> out, " "*indent, "}",
elif (hasattr(object, "__dict__")):
if (exclude and object in exclude):
print >> out, " "*indent, name, " : ", type(object), " (already printed) = ", toDiffableString(object),
if ((exclude != None) and object in exclude):
print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed) = ", toDiffableString(object),
else:
if (exclude != None): exclude.append(object)
if (name.startswith("_")):
print >> out, " "*indent, name, " : ", type(object),
elif (exclude and object.__dict__ in exclude):
print >> out, " "*indent, name, " : ", type(object), " (already printed)",
if (name.startswith("_")): ## and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
print >> out, " "*indent, name, " : ", toTypeString(object),
elif ((exclude != None) and object.__dict__ in exclude):
print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
else:
print >> out, " "*indent, name, " : ", type(object),
print >> out, " "*indent, name, " : ", toTypeString(object),
if ((flags & PRINT_OBJ_GETATTR) == 0):
if ((flags & PRINT_OBJ_COMPACT) == 0):
print >> out
@@ -259,14 +179,19 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
elif (indent < 0):
print >> out, object,
elif isinstance(object, basestring):
if (exclude and name in exclude):
print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (excluded)",
if ((exclude != None) and name in exclude):
print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
elif (len(object) > 100):
print >> out, " "*indent, name, ":", type(object), "[%i] = %s...%s" % (len(object), object[:50], object[-50:]),
print >> out, " "*indent, name, ":", toTypeString(object), "[%d] = %s...%s" % (len(object), object[:50], object[-50:]),
else:
print >> out, " "*indent, name, ":", type(object), "=", str(object),
print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
## elif (isinstance(object, float)):
## val = str(object)
## if (len(val) > 17):
## val = val[:17]
## print >> out, " "*indent, name, ":", type(object), "=", val,
else:
print >> out, " "*indent, name, ":", type(object), "=", str(object),
print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
if (finalNewLine):
print >> out
return printed