BExplorer.Shell.ShellContextMenu.Initialize C# (CSharp) Method

Initialize() private method

private Initialize ( IListItemEx items ) : void
items IListItemEx
return void
    void Initialize(IListItemEx[] items) {
      this._Items = items;
      IntPtr[] pidls = new IntPtr[items.Length];
      IListItemEx parent = null;

      for (int n = 0; n < items.Length; ++n) {
        pidls[n] = Shell32.ILFindLastID(items[n].PIDL);

        if (parent == null) {
          if (items[n].ParsingName.Equals(ShellItem.Desktop.ParsingName)) {
            parent = FileSystemListItem.ToFileSystemItem(IntPtr.Zero, ShellItem.Desktop.Pidl);
          } else {
            parent = items[n].Parent;
          }
        } else if (!items[n].Parent.Equals(parent)) {
          throw new Exception("All shell items must have the same parent");
        }
      }

      if (items.Length == 0) {
        var desktop = KnownFolders.Desktop as ShellItem;
        var ishellViewPtr = desktop.GetIShellFolder().CreateViewObject(IntPtr.Zero, typeof(IShellView).GUID);
        var view = Marshal.GetObjectForIUnknown(ishellViewPtr) as IShellView;
        view.GetItemObject(SVGIO.SVGIO_BACKGROUND, typeof(IContextMenu).GUID, out _Result);
        Marshal.ReleaseComObject(view);
      } else {
        parent.GetIShellFolder().GetUIObjectOf(IntPtr.Zero, (uint)pidls.Length, pidls, typeof(IContextMenu).GUID, 0, out _Result);
      }

      m_ComInterface = (IContextMenu)Marshal.GetTypedObjectForIUnknown(_Result, typeof(IContextMenu));
      m_ComInterface2 = m_ComInterface as IContextMenu2;
      m_ComInterface3 = m_ComInterface as IContextMenu3;
      m_MessageWindow = new MessageWindow(this);
    }