public static TreeView afterSelect_ShowMethodSignatureInSourceCode(this TreeView treeView, O2MappedAstData astData, ascx_SourceCodeViewer codeViewer) { treeView.afterSelect( (treeNode) => { var text = WinForms_ExtensionMethods_TreeView.get_Text(treeNode); var methodDeclaration = astData.methodDeclaration_withSignature(treeNode.get_Text()); if (methodDeclaration != null) { treeNode.color(Color.DarkGreen); var file = astData.file(methodDeclaration); codeViewer.open(file); codeViewer.editor().clearBookmarksAndMarkers(); codeViewer.editor().setSelectionText(methodDeclaration.StartLocation, methodDeclaration.EndLocation); } else { treeNode.color(Color.Red); } }); return(treeView); }
public void invokeSelectedMethod() { var selectedNodeTag = WinForms_ExtensionMethods_TreeView.get_Tag(treeView.selected()); if (selectedNodeTag is MethodInfo) { var methodToInvoke = (MethodInfo)selectedNodeTag; "invoking Method: {0}".info(methodToInvoke); "using root object: {0}".info(RootObject); //PublicDI.reflection.invoke(targetObject,methodToInvoke); var result = RootObject.invoke(methodToInvoke.Name); "invocation result: {0}".debug(result); if (result.notNull()) { result.showInfo(); } } else { "Selected Node was not a Method, it was {0}".error(selectedNodeTag.typeName()); } }
public void buildGui() { try { var topPanel = this.add_Panel(); //serializedString = topPanel.insert_Right(200).add_GroupBox("Serialized Object").add_SourceCodeViewer(); //var serializedStringPanel = serializedString.splitContainer().panel2Collapsed(true); propertyGrid = topPanel.add_GroupBox("").add_PropertyGrid().helpVisible(false); treeView = propertyGrid.parent().insert_Left <Panel>().add_TreeView().sort(); //treeView.splitterDistance(300); var toStringValue = propertyGrid.parent().insert_Below <Panel>(100).add_GroupBox("ToString Value (not editable):").add_TextArea(); var optionsPanel = treeView.insert_Below <Panel>(70); var objectName = toStringValue.parent().insert_Above <Panel>(20).add_TextBox("name", ""); //propertyGrid.onValueChange(updateSerializedString); //setSerializedStringSyncWithPropertyGrid(); //serializedString.insert_Above(20).add_Link("Sync Serialized String With PropertyGrid", 0, 0, () => updateSerializedStringSyncWithPropertyGrid()); LinkLabel invokeLink = null; invokeLink = optionsPanel.add_CheckBox("Show Methods", 0, 0, (value) => { ShowMethods = value; invokeLink.enabled(value); refresh(); }) .append_Link("invoke", invokeSelectedMethod) .leftAdd(-16).topAdd(5).bringToFront() .enabled(false); optionsPanel.add_CheckBox("Show Property and Field info", 22, 0, (value) => { ShowPropertyAndFieldInfo = value; refresh(); }) .autoSize() .append_Link("refresh", () => refresh()) .left(200); optionsPanel.add_CheckBox("Sort Values", 0, 135, (value) => { Sorted = value; try { treeView.sort(Sorted); // throwing "Unable to cast object of type 'System.Boolean' to type 'System.Windows.Forms.TreeView'" } catch //(Exception ex) { //ex.log(); } }).@checked(true); simpleView_CheckBox = optionsPanel.add_CheckBox("Simple View", 0, 220, (value) => { SimpleView = value; //propertyGrid.splitContainer().panel1Collapsed(value); refresh(); }) .bringToFront(); /*showSerializedString_CheckBox = optionsPanel.add_CheckBox("Show serialized string", 44, 0, * (value) => * { * ShowSerializedString = value; * serializedStringPanel.panel2Collapsed(!value); * refresh(); * }) * .autoSize();*/ createObjectWhenNull_CheckBox = optionsPanel.add_CheckBox("Create Object When Null", 44, 150, (value) => { CreateObjectWhenNull = value; }) .bringToFront() .autoSize(); treeView.afterSelect <object>( (selectedObject) => { var treeNode = treeView.selected(); objectName.set_Text(treeNode.get_Text()); var tag = WinForms_ExtensionMethods_TreeView.get_Tag(treeNode); if (tag.notNull()) // && tag.str() != treeNode.get_Text()) { propertyGrid.show(selectedObject); var toString = selectedObject.str(); if (toString == "System.__ComObject") { toString += " : {0}".format(selectedObject.comObject_TypeName()); } toStringValue.set_Text(toString); propertyGrid.parent().set_Text(selectedObject.typeFullName()); if (treeNode.nodes().size() == 0) { addObjectPropertyAndFields(treeNode, selectedObject); } } else if (treeNode.nodes().size() == 0) { propertyGrid.show(null as object); propertyGrid.parent().set_Text("[null value]"); toStringValue.set_Text("[null value]"); objectName.set_Text(""); treeNode.color(Color.Red); } }); treeView.add_ContextMenu().add_MenuItem("Invoke Method", () => invokeSelectedMethod()); } catch (Exception ex) { ex.log("in buildGui", true); } guiReady = true; }
public void addObjectPropertyAndFields_Thread(TreeNode targetNode, object targetObject) { if (targetObject is String) // skip strings { return; } if (targetObject is IDictionary) { var dictionary = (IDictionary)targetObject; var index = 0; foreach (var key in dictionary.Keys) { if (key is String) { targetNode.add_Node(key.str(), dictionary[key]); } else { index++; var value = dictionary[key]; targetNode.add_Node("key_{0}: {1}".format(index, key.str()), key); targetNode.add_Node("value_{0}: {1}".format(index, value.str()), value); } } targetNode.expand(); } else if (targetObject is IEnumerable) { try { foreach (var item in (targetObject as IEnumerable)) { targetNode.add_Node(item); } targetNode.expand(); } catch (Exception ex) { ex.log("in addObjectPropertyAndFields IEnumerable loop"); } } else { if (SimpleView) { foreach (var property in targetObject.type().properties()) { var propertyValue = PublicDI.reflection.getProperty(property, targetObject); var newNode = targetNode.add_Node(property.Name, propertyValue, false); switch (property.PropertyType.FullName) { case "System.String": case "System.String[]": case "System.Boolean": case "System.DateTime": case "System.Int32": case "System.Int32[]": case "System.Byte": case "System.Int64": newNode.color(Color.Gray); break; default: if (propertyValue.isNull()) { if (CreateObjectWhenNull) { propertyValue = property.PropertyType.ctor(); if (propertyValue.notNull()) { "CREATE object for type: {0}".debug(propertyValue.type()); PublicDI.reflection.setProperty(property, targetObject, propertyValue); WinForms_ExtensionMethods_TreeView.set_Tag(newNode, propertyValue); } else { "Could not create instance of type: {0}".error(propertyValue.type()); } } } break; } } } else { //var objectNode = targetNode.add_Node(targetObject.str(), targetObject); targetNode.add_Node("properties", null).add_Nodes(targetObject.type().properties(), (item) => item.Name, (item) => PublicDI.reflection.getProperty(item, targetObject), (item) => false); targetNode.add_Node("fields", null).add_Nodes(targetObject.type().fieldInfos(), (item) => item.Name, (item) => targetObject.field(item.Name), //PublicDI.reflection.getField(item,_object), (item) => false); targetNode.set_Text("{0} ({1} properties {2} fields)" .format(targetNode.get_Text(), targetNode.nodes()[1].nodes().size(), targetNode.nodes()[0].nodes().size())); } } if (ShowPropertyAndFieldInfo) { targetNode.add_Node("_PropertyInfo(s)", null).add_Nodes(targetObject.type().properties(), (item) => item.Name); targetNode.add_Node("_FieldInfo(s)", null).add_Nodes(targetObject.type().fieldInfos(), (item) => item.Name); } if (ShowMethods) { targetNode.add_Node("MethodInfo(s)", null).add_Nodes(targetObject.type().methods(), (item) => item.Name); } }
//note:the results of this are not consistent public static TreeView showInfo_ComObject(this object _rootObject) { var treeView = O2Gui.open <Panel>("showInfo_ComObject", 400, 400).add_TreeView(); var propertyGrid = treeView.insert_Below <Panel>().add_PropertyGrid(); Action <TreeNode, object> add_Object = (treeNode, _object) => { treeNode.clear(); //treeNode.add_Node(_object.str(), _object, true); WinForms_ExtensionMethods_TreeView.add_Node(treeNode, _object.str(), _object, true); }; Action <TreeNode, IEnumerable> add_Objects = (treeNode, items) => { treeNode.clear(); foreach (var item in items) { //treeNode.add_Node(item.str(), item, true); WinForms_ExtensionMethods_TreeView.add_Node(treeNode, item.str(), item, true); } }; treeView.beforeExpand <object>( (treeNode, _object) => { if (_object is String) { treeNode.add_Node(_object); } else { if (_object is IEnumerable) { add_Objects(treeNode, _object as IEnumerable); } else { foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(_object)) { try { var value = property.GetValue(_object); treeNode.add_Node(property.Name.str(), value, true); } catch (Exception ex) { treeNode.add_Node(property.Name.str(), "O2 ERROR:".format(ex.Message), false); } } } } }); treeView.afterSelect <object>( (_object) => propertyGrid.show(_object)); if (_rootObject is IEnumerable) { add_Objects(treeView.rootNode(), _rootObject as IEnumerable); } else { add_Object(treeView.rootNode(), _rootObject); } return(treeView); }