private void addFabDocxParts()
 {
     PartCreator pc = new PartCreator();
     pc.process(FabDotxAsDocument, true);
     pc.createAnswersPart(FabDotxAsDocument);
 }
Exemplo n.º 2
0
        public void enable(bool newDocument)
        {
            string majorVersionString = Globals.ThisAddIn.Application.Version.Split(new char[] { '.' })[0];
            majorVersion = Convert.ToInt32(majorVersionString);

            /* String xml = System.IO.File.ReadAllText(@"C:\Users\jharrop\workspace\docx4j_1\sample-docs\aaa Document.xml");
            object missing = System.Reflection.Missing.Value;
            Globals.ThisAddIn.Application.Selection.InsertXML(xml, ref missing);
             */
            Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;

            Microsoft.Office.Tools.Word.Document extendedDocument
                = Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);

            extendedDocument.ContentControlBeforeDelete += new Word.DocumentEvents2_ContentControlBeforeDeleteEventHandler(extendedDocument_ContentControlBeforeDelete);
            extendedDocument.ContentControlAfterAdd += new Word.DocumentEvents2_ContentControlAfterAddEventHandler(extendedDocument_ContentControlAfterAdd);

            extendedDocument.ContentControlOnEnter +=new Word.DocumentEvents2_ContentControlOnEnterEventHandler(extendedDocument_ContentControlOnEnter);
            extendedDocument.ContentControlOnExit += new Word.DocumentEvents2_ContentControlOnExitEventHandler(extendedDocument_ContentControlOnExit);
            extendedDocument.ContentControlBeforeStoreUpdate += new Word.DocumentEvents2_ContentControlBeforeStoreUpdateEventHandler(extendedDocument_ContentControlBeforeStoreUpdate);

            extendedDocument.BeforeRightClick += new Microsoft.Office.Tools.Word.ClickEventHandler(extendedDocument_BeforeRightClick);

            extendedDocument.BuildingBlockInsert += new Word.DocumentEvents2_BuildingBlockInsertEventHandler(extendedDocument_BuildingBlockInsert);

            extendedDocument.Shutdown += new EventHandler(Globals.ThisAddIn.extendedDocument_Shutdown);

            FabDocxState fabDocxState = new FabDocxState();
            extendedDocument.Tag = fabDocxState;

            PartCreator pc = null;

            if (newDocument)
            {
                log.Info("OpenDoPE parts not detected; adding now.");
                // Questions - I expect most users will want these,
                // since this particular add-in is targeted at the
                // interactive case,
                // but some won't .. some people doing non-interactive
                // processing won't have their own xml formats.
                // Design decision: always have questions part,
                // as a way of documenting what the answers mean.
                // (Better than to put the description in the answer part)
                // TODO: add meta description to questions.xsd
                pc = new PartCreator();
                pc.process(true);
            }
            else
            {
                // Register content controls
                foreach (Word.ContentControl ccx in Globals.ThisAddIn.Application.ActiveDocument.ContentControls)
                {
                    fabDocxState.registerKnownSdt(ccx);
                }
            }

            fabDocxState.model = Model.ModelFactory(document);
            if (fabDocxState.model.answersPart == null)
            {
                Office.CustomXMLPart answerPart = pc.createAnswersPart(document);

                fabDocxState.model = Model.ModelFactory(document);
                //fabDocxState.model.userParts.Add(answerPart);
                fabDocxState.model.answersPart = answerPart;
                //log.Info(answersXml);
            }
            else
            {
                log.Info("Using existing answers: " + fabDocxState.model.answersPart.XML);
                fabDocxState.model.answersPart.NamespaceManager.AddNamespace("oda", "http://opendope.org/answers");
            }

            // Now we have model, we can:
            try
            {
                fabDocxState.initTaskPane(document);
            }
            catch (Exception e)
            {
                log.Error(e);
                /*
                 * The Stack Trace is:
                      at System.Runtime.InteropServices.Marshal.IsComObject(Object o)
                      at System.Runtime.InteropServices.ComAwareEventInfo.AddEventHandler(Object target, Delegate handler)
                      at Microsoft.Office.Tools.CustomTaskPaneImpl..ctor(_CustomTaskPane customTaskPane, UserControl control)
                      at Microsoft.Office.Tools.CustomTaskPaneCollectionImpl.AddHelper(UserControl control, String title, Object window)
                      at Microsoft.Office.Tools.CustomTaskPaneCollectionImpl.Add(UserControl control, String title, Object window
                 */
                // No matter; we do it later
            }
            //MessageBox.Show("task pane inited");

            // Load FabDocx.dotx
            GlobalTemplateManager.GetGlobalTemplateManager();
        }