public void RemovePageFromBuilder()
        {
            Debug.Assert(inForm == true, "Page has not been added to builder");

            page.SetPageSite(null);
            form   = null;
            inForm = false;
            loaded = false;
            dirty  = false;

            uiIndex = -1;
        }
        ///////////////////////////////////////////////////////////////////////////
        // Methods

        public void AddPageToBuilder(StyleBuilderForm form)
        {
            Debug.Assert(inForm == false, "Page already added to builder");

            if (page == null)
            {
                CreatePage();
            }

            this.form = form;
            inForm    = true;
            page.SetPageSite(this);
        }
        protected int uiIndex;        // the page's index within the form UI

        ///////////////////////////////////////////////////////////////////////////
        // Constructor

        public StyleBuilderPageSite(Type pageClass)
        {
            Debug.Assert(pageClass != null, "invalid page class passed to StyleBuilderPageSite");

            this.pageClass = pageClass;
            page           = null;
            form           = null;

            inForm = false;
            loaded = false;
            dirty  = false;

            uiIndex = -1;
        }
        ///////////////////////////////////////////////////////////////////////
        // Constructor

        public StyleBuilderFormContainer(StyleBuilderForm form)
        {
            this.form      = form;
            site           = new StyleBuilderFormSite(this);
            componentCount = 0;
        }
        ///////////////////////////////////////////////////////////////////////////
        // IStyleBuilder Implementation

        /// <include file='doc\StyleBuilder.uex' path='docs/doc[@for="StyleBuilder.InvokeBuilder"]/*' />
        /// <devdoc>
        ///    <para>[To be supplied.]</para>
        /// </devdoc>
        public virtual bool InvokeBuilder(IntPtr hwndParent, int dwFlags, int dwPages,
                                          string strCaption, string strDocUrl,
                                          Object[] pvarStyle)
        {
            Debug.WriteLineIf(StyleBuilderSwitch.TraceVerbose, "StyleBuilder::IStyleBuilder::InvokeBuilder called");

            Debug.Assert((pvarStyle != null) && (pvarStyle.Length == 1) && !Convert.IsDBNull(pvarStyle[0]),
                         "invalid Style passed to StyleBuilder");
            if ((pvarStyle == null) || (pvarStyle.Length == 0) || Convert.IsDBNull(pvarStyle[0]))
            {
                throw new COMException("Invalid style argument", NativeMethods.E_INVALIDARG);
            }

            WaitCursor waitCursor  = WaitCursor.CreateWaitCursor();
            Type       styleClass  = null;
            object     styleObject = null;
            int        styleType   = 0;

            StyleBuilderForm builderForm = null;
            bool             result      = false;

            waitCursor.BeginWaitCursor();

            // retrieve the style object and its type
            styleClass = pvarStyle[0].GetType();
            if (styleClass.Equals(typeof(string)))
            {
                styleType   = StyleBuilderForm.STYLE_TYPE_STRING;
                styleObject = Convert.ToString(pvarStyle[0]);
            }
            else if (styleClass.Equals(typeof(object)))
            {
                styleObject = pvarStyle[0];
                if (styleObject is IHTMLStyle)
                {
                    styleType = StyleBuilderForm.STYLE_TYPE_INLINESTYLE;
                }
                else if (styleObject is IHTMLRuleStyle)
                {
                    styleType = StyleBuilderForm.STYLE_TYPE_RULESTYLE;
                }
                else
                {
                    styleObject = null;
                }
            }

            Debug.Assert(styleObject != null, "pvarStyle does not supported style type");
            if (styleObject == null)
            {
                throw new COMException("Invalid style type", NativeMethods.E_INVALIDARG);
            }

            Debug.WriteLineIf(StyleBuilderSwitch.TraceVerbose, "InvokeBuilder: Initializing page list");

            // initialize the page list
            try {
                if (dwPages == 0)
                {
                    dwPages = StyleBuilderStdPage.sbpAllStdPages;
                }
                InitPages(dwPages);
            } catch (Exception e) {
                Debug.WriteLineIf(StyleBuilderSwitch.TraceVerbose, "Exception caught in InitPages:\n\t" + e.ToString());
                throw e;
            }

            Debug.Assert(GetPageCount() > 0, "Invalid page list passed to StyleBuilder");
            if (GetPageCount() <= 0)
            {
                throw new COMException("Invalid page selection", NativeMethods.E_INVALIDARG);
            }


            // instantiate the form
            builderForm = CreateStyleBuilderForm();
            builderForm.Initialize(site, GetPages(), styleObject, styleType,
                                   strCaption,
                                   dwFlags & (StyleBuilderFlags.sbfDefaultCaption |
                                              StyleBuilderFlags.sbfContextCaption |
                                              StyleBuilderFlags.sbfCustomCaption),
                                   strDocUrl);
            Debug.WriteLineIf(StyleBuilderSwitch.TraceVerbose, "InvokeBuilder: Form initialized");

            // now show the form
            dialogParent.SetParentHandle(hwndParent);

            try {
                result = false;
                Debug.WriteLineIf(StyleBuilderSwitch.TraceVerbose, "About to show dialog...");
                if (builderForm.ShowDialog(dialogParent) == DialogResult.OK)
                {
                    if (styleType == StyleBuilderForm.STYLE_TYPE_STRING)
                    {
                        // style was a string, put the resulting string back into the object

                        styleObject = builderForm.GetStyleObject();
                        Debug.Assert(styleObject != null, "Invalid result style object returned");

                        pvarStyle[0] = Convert.ToString(styleObject);
                    }
                    result = true;
                }
                Debug.WriteLineIf(StyleBuilderSwitch.TraceVerbose, "StyleBuilder dialog closed");
            } catch (Exception e) {
                Debug.WriteLineIf(StyleBuilderSwitch.TraceVerbose, e.ToString());
                Debug.Fail(e.ToString());
            }

            UpdatePageCache();

            builderForm.Dispose();
            builderForm = null;

            waitCursor.EndWaitCursor();

            return(result);
        }