Exemplo n.º 1
0
 public ComFunctionInfoTreeNode(ComFunctionInfo comFunctionInfo)
     : base()
 {
     _comFunctionInfo = comFunctionInfo;
     Text             = _comFunctionInfo.Name;
     FullText         = String.Format("{0}.{1}", _comFunctionInfo.ComTypeInfo.FullName, _comFunctionInfo.Name);
 }
Exemplo n.º 2
0
        private void UpdateRichTextBox(ComTreeNode node)
        {
            try
            {
                typeInfoRichTextBox.Clear();

                if (node == null)
                {
                    return;
                }

                ComTypeInfo     comTypeInfo     = null;
                ComPropertyInfo comPropertyInfo = null;
                ComFunctionInfo comFunctionInfo = null;

                if (node is ComPtrItemTreeNode)
                {
                    comFunctionInfo = ((ComPtrItemTreeNode)node).ComFunctionInfo;
                }
                else if (node is ComMethodTreeNode)
                {
                    comFunctionInfo = ((ComMethodTreeNode)node).ComFunctionInfo;
                }
                else if (node is ComPropertyTreeNode)
                {
                    comPropertyInfo = ((ComPropertyTreeNode)node).ComPropertyInfo;
                }
                else if (node is ComPtrTreeNode)
                {
                    ComPtrTreeNode comObjectPropertyTreeNode = (ComPtrTreeNode)node;

                    if (comObjectPropertyTreeNode.ComPropertyInfo != null)
                    {
                        comPropertyInfo = comObjectPropertyTreeNode.ComPropertyInfo;
                    }
                    else
                    {
                        comTypeInfo = comObjectPropertyTreeNode.ComPtr.TryGetComTypeInfo();
                    }
                }

                if (comTypeInfo != null)
                {
                    typeInfoRichTextBox.DescribeComTypeInfo(comTypeInfo);
                }
                else if (comPropertyInfo != null)
                {
                    typeInfoRichTextBox.DescribeComPropertyInfo(comPropertyInfo);
                }
                else if (comFunctionInfo != null)
                {
                    typeInfoRichTextBox.DescribeComFunctionInfo(comFunctionInfo);
                }
            }
            catch
            {
                GlobalExceptionHandler.HandleException();
            }
        }
Exemplo n.º 3
0
        public ComPtrTreeNode(ComPropertyInfo comPropertyInfo, ComPtr comPtr)
            : this(comPropertyInfo.Name, comPtr)
        {
            _comPropertyInfo = comPropertyInfo;

            if ((_comPropertyInfo != null) && (_comPropertyInfo.GetFunction != null))
            {
                _comFunctionInfo          = _comPropertyInfo.GetFunction;
                _getFunctionHasParameters = _comPropertyInfo.GetFunctionHasParameters;
            }
        }
Exemplo n.º 4
0
        public void DescribeComFunctionInfo(ComFunctionInfo comFunctionInfo)
        {
            try
            {
                Clear();

                if (comFunctionInfo == null)
                {
                    return;
                }

                WriteReturnParameter(comFunctionInfo.ReturnParameter);

                AppendText(String.Format(" {0}", comFunctionInfo.Name), ForeColor, FontStyle.Bold);

                if (comFunctionInfo.Parameters.Length > 0)
                {
                    AppendText("(");

                    for (int i = 0; i < comFunctionInfo.Parameters.Length; i++)
                    {
                        ComParameterInfo parameter = comFunctionInfo.Parameters[i];

                        WriteParameter(parameter);

                        if (i < comFunctionInfo.Parameters.Length - 1)
                        {
                            AppendText(", ");
                        }
                    }

                    AppendText(")");
                }
                else
                {
                    AppendText("()");
                }

                AppendText(Environment.NewLine);
                AppendText("   Member of ");
                InsertLink(comFunctionInfo.ComTypeInfo.FullName);
                AppendText(Environment.NewLine);

                WriteSummary(comFunctionInfo.Description);
                WriteDispatchid(comFunctionInfo.DispId);
            }
            catch
            {
            }
        }
Exemplo n.º 5
0
 public ComMethodTreeNode(ComFunctionInfo comFunctionInfo)
     : base(comFunctionInfo.Name)
 {
     _comFunctionInfo = comFunctionInfo;
 }
Exemplo n.º 6
0
        private ComTreeNode GetChild(ComPtr comPtr, ComPropertyInfo comPropertyInfo)
        {
            if (comPtr == null)
            {
                return(null);
            }
            if (comPropertyInfo == null)
            {
                return(null);
            }
            if (comPtr.IsInvalid)
            {
                return(null);
            }

            ComFunctionInfo getFunctionInfo = comPropertyInfo.GetFunction;

            if (getFunctionInfo == null)
            {
                return(null);
            }
            if (getFunctionInfo.IsRestricted)
            {
                return(null);
            }

            ComTreeNode comTreeNode   = null;
            object      propertyValue = null;

            if (getFunctionInfo.Parameters.Length == 0)
            {
                try
                {
                    comPtr.TryInvokePropertyGet(getFunctionInfo.DispId, out propertyValue);
                }
                catch
                {
                    GlobalExceptionHandler.HandleException();
                }

                if (propertyValue == null)
                {
                    switch (getFunctionInfo.ReturnParameter.VariantType)
                    {
                    case VarEnum.VT_DISPATCH:
                    case VarEnum.VT_PTR:
                    case VarEnum.VT_ARRAY:
                    case VarEnum.VT_UNKNOWN:
                        propertyValue = new ComPtr(IntPtr.Zero);
                        break;
                    }
                }

                if (propertyValue is ComPtr)
                {
                    comTreeNode = new ComPtrTreeNode(comPropertyInfo, (ComPtr)propertyValue);

                    if (((ComPtr)propertyValue).IsInvalid == false)
                    {
                        comTreeNode.Nodes.Add(String.Empty);
                    }
                }
                else
                {
                    comTreeNode = new ComPropertyTreeNode(comPropertyInfo, propertyValue);
                }
            }
            else
            {
                switch (getFunctionInfo.ReturnParameter.VariantType)
                {
                case VarEnum.VT_DISPATCH:
                case VarEnum.VT_PTR:
                case VarEnum.VT_ARRAY:
                case VarEnum.VT_UNKNOWN:
                    comTreeNode = new ComPtrTreeNode(comPropertyInfo, new ComPtr());
                    break;

                default:
                    comTreeNode = new ComPropertyTreeNode(comPropertyInfo, null);
                    break;
                }
            }

            return(comTreeNode);
        }
Exemplo n.º 7
0
        private ComTreeNode[] GetChildren(ComPtr comPtr)
        {
            if (comPtr == null)
            {
                return new ComTreeNode[] { }
            }
            ;

            ComTypeInfo comTypeInfo = comPtr.TryGetComTypeInfo();

            if (comTypeInfo == null)
            {
                return new ComTreeNode[] { }
            }
            ;

            List <ComTreeNode> childNodes = new List <ComTreeNode>();

            try
            {
                foreach (ComPropertyInfo comPropertyInfo in comTypeInfo.Properties)
                {
                    // Special case. MailSession is a PITA property that causes modal dialog.
                    if (comPropertyInfo.Name.Equals("MailSession"))
                    {
                        continue;
                    }

                    ComTreeNode comTreeNode = GetChild(comPtr, comPropertyInfo);

                    if (comTreeNode != null)
                    {
                        if ((comTreeNode is ComPropertyTreeNode) && (_showProperties == false))
                        {
                            continue;
                        }

                        childNodes.Add(comTreeNode);
                    }
                }

                if (comPtr.TryIsCollection())
                {
                    List <ComTreeNode> collectionChildNodes = new List <ComTreeNode>();
                    int count      = comPtr.TryGetItemCount();
                    int foundCount = 0;

                    try
                    {
                        ComFunctionInfo comFunctionInfo = comTypeInfo.Methods.Where(x => x.Name.Equals("Item", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

                        if (comFunctionInfo != null)
                        {
                            object returnValue = null;

                            // Solid Edge is supposed to be 1 based index.
                            for (int i = 1; i <= count; i++)
                            {
                                returnValue = null;
                                if (MarshalEx.Succeeded(comPtr.TryInvokeMethod("Item", new object[] { i }, out returnValue)))
                                {
                                    ComPtr pItem = returnValue as ComPtr;
                                    if ((pItem != null) && (pItem.IsInvalid == false))
                                    {
                                        ComPtrItemTreeNode comPtrItemTreeNode = new ComPtrItemTreeNode((ComPtr)returnValue, comFunctionInfo);
                                        comPtrItemTreeNode.Caption = String.Format("{0}({1})", comFunctionInfo.Name, i);
                                        comPtrItemTreeNode.Nodes.Add("...");
                                        collectionChildNodes.Add(comPtrItemTreeNode);
                                        foundCount++;
                                    }
                                }
                            }

                            try
                            {
                                // Some collections are 0 based.
                                // Application->Customization->RibbonBarThemes seems to be 0 based.
                                if (foundCount == (count - 1))
                                {
                                    returnValue = null;
                                    if (MarshalEx.Succeeded(comPtr.TryInvokeMethod("Item", new object[] { 0 }, out returnValue)))
                                    {
                                        ComPtr pItem = returnValue as ComPtr;
                                        if ((pItem != null) && (pItem.IsInvalid == false))
                                        {
                                            ComPtrItemTreeNode comPtrItemTreeNode = new ComPtrItemTreeNode((ComPtr)returnValue, comFunctionInfo);
                                            comPtrItemTreeNode.Caption = String.Format("{0}({1})", comFunctionInfo.Name, 0);
                                            comPtrItemTreeNode.Nodes.Add("...");
                                            collectionChildNodes.Insert(0, comPtrItemTreeNode);
                                        }
                                    }
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                    catch
                    {
                        GlobalExceptionHandler.HandleException();
                    }

                    childNodes.AddRange(collectionChildNodes.ToArray());
                }

                if (_showMethods)
                {
                    foreach (ComFunctionInfo comFunctionInfo in comTypeInfo.GetMethods(true))
                    {
                        if (comFunctionInfo.IsRestricted)
                        {
                            continue;
                        }

                        ComMethodTreeNode comMethodTreeNode = new ComMethodTreeNode(comFunctionInfo);
                        childNodes.Add(comMethodTreeNode);
                    }
                }
            }
            catch
            {
                GlobalExceptionHandler.HandleException();
            }

            return(childNodes.ToArray());
        }
Exemplo n.º 8
0
 public ComPtrItemTreeNode(ComPtr comPtr, ComFunctionInfo comFunctionInfo)
     : base(comFunctionInfo.Name, comPtr)
 {
     _comFunctionInfo = comFunctionInfo;
 }