コード例 #1
0
ファイル: NavigatorViewModel.cs プロジェクト: lolly4/Version3
        /// <summary>
        /// Occurs after a new custom XMl part is loaded into the document
        /// Useful for updating the Navigator
        /// </summary>
        /// <param name="NewPart"></param>
        private void OnPartAfterLoad(CustomXMLPart NewPart)
        {
            string module = $"{_product}.{_class}.{MethodBase.GetCurrentMethod().Name}()";

            try
            {
                var converter = new CMLConverter();
                //get the chemistry
                var chemModel = converter.Import(NewPart.XML);
                //find out which content control macthes the custom XML part
                try
                {
                    // ReSharper disable once InconsistentNaming
                    var matchingCC = (from ContentControl cc in _doc.ContentControls
                                      orderby cc.Range.Start
                                      where CustomXmlPartHelper.GuidFromTag(cc?.Tag) == CustomXmlPartHelper.GetCmlId(NewPart)
                                      select cc).First();

                    //get the ordinal position of the content control
                    int start = 0;
                    foreach (ContentControl cc in _doc.ContentControls)
                    {
                        if (cc.ID == matchingCC.ID)
                        {
                            break;
                        }
                        start += 1;
                    }

                    //insert the new navigator item at the ordinal position
                    var newNavItem = new NavigatorItem()
                    {
                        CMLId             = matchingCC?.Tag,
                        ChemicalStructure = NewPart.XML,
                        XMLPart           = NewPart,
                        Name = chemModel.ConciseFormula
                    };
                    try
                    {
                        NavigatorItems.Insert(start, newNavItem);
                    }
                    catch (ArgumentOutOfRangeException) //can happen when there are more content controls than navigator items
                    {
                        //so simply insert the new navigator item at the end
                        NavigatorItems.Add(newNavItem);
                    }
                }
                catch (InvalidOperationException)
                {
                    //sequence contains no elements - thrown on close
                    //just ignore
                }
            }
            catch (Exception ex)
            {
                new ReportError(Globals.Chem4WordV3.Telemetry, Globals.Chem4WordV3.WordTopLeft, module, ex).ShowDialog();
            }
        }
コード例 #2
0
ファイル: NavigatorViewModel.cs プロジェクト: lolly4/Version3
        /// <summary>
        /// handles deletion of an XML Part...removes the corresponding navigator item
        /// </summary>
        /// <param name="OldPart">The custom XML part that gets deleted</param>
        private void OnPartBeforeDelete(CustomXMLPart OldPart)
        {
            string module = $"{_product}.{_class}.{MethodBase.GetCurrentMethod().Name}()";

            try
            {
                var oldPart = NavigatorItems.FirstOrDefault(ni => CustomXmlPartHelper.GetCmlId(ni.XMLPart) == CustomXmlPartHelper.GetCmlId(OldPart));
                NavigatorItems.Remove(oldPart);
            }
            catch (Exception ex)
            {
                new ReportError(Globals.Chem4WordV3.Telemetry, Globals.Chem4WordV3.WordTopLeft, module, ex).ShowDialog();
            }
        }
コード例 #3
0
ファイル: NavigatorViewModel.cs プロジェクト: rrsc/Version3-1
        /// <summary>
        /// Loads up the model initially from the document
        /// </summary>
        private void LoadModel()
        {
            string module = $"{_product}.{_class}.{MethodBase.GetCurrentMethod().Name}()";

            try
            {
                var converter = new CMLConverter();
                if (NavigatorItems.Any())
                {
                    NavigatorItems.Clear();
                }
                if (_doc != null)
                {
                    Dictionary <string, int> added = new Dictionary <string, int>();

                    var navItems = from ContentControl ccs in _doc.ContentControls
                                   join CustomXMLPart part in _parts
                                   on CustomXmlPartHelper.GuidFromTag(ccs?.Tag) equals CustomXmlPartHelper.GetCmlId(part)
                                   orderby ccs.Range.Start
                                   let chemModel = converter.Import(part.XML)
                                                   select new NavigatorItem
                    {
                        CMLId = ccs?.Tag, ChemicalStructure = part.XML, XMLPart = part, Name = chemModel.ConciseFormula
                    };

                    foreach (NavigatorItem navigatorItem in navItems)
                    {
                        string guid = CustomXmlPartHelper.GuidFromTag(navigatorItem.CMLId);
                        if (!string.IsNullOrEmpty(guid))
                        {
                            if (!added.ContainsKey(guid))
                            {
                                NavigatorItems.Add(navigatorItem);
                                added.Add(guid, 1);
                            }
                        }
                    }

                    Debug.WriteLine("Number of items loaded = {0}", NavigatorItems.Count);
                }
            }
            catch (Exception ex)
            {
                using (var form = new ReportError(Globals.Chem4WordV3.Telemetry, Globals.Chem4WordV3.WordTopLeft, module, ex))
                {
                    form.ShowDialog();
                }
            }
        }
コード例 #4
0
        private void NextControl()
        {
            string module = $"{_product}.{_class}.{MethodBase.GetCurrentMethod().Name}()";

            NavigatorItem ni = DataContext as NavigatorItem;
            var           currentSelPoint = ActiveDocument.ActiveWindow.Selection;

            try
            {
                var linkedControls = from Word.ContentControl cc in ActiveDocument.ContentControls
                                     orderby cc.Range.Start
                                     where CustomXmlPartHelper.GuidFromTag(cc?.Tag) == CustomXmlPartHelper.GetCmlId(ni.XMLPart)
                                     select cc;

                // Grab current selection point
                int current = currentSelPoint.Range.End;
                foreach (Word.ContentControl cc in linkedControls)
                {
                    if (cc.Range.Start > current)
                    {
                        cc.Range.Select();
                        ActiveDocument.ActiveWindow.ScrollIntoView(cc.Range);
                        return;
                    }
                }

                // Rewind to Start of document
                current = 0;
                foreach (Word.ContentControl cc in linkedControls)
                {
                    if (cc.Range.Start > current)
                    {
                        cc.Range.Select();
                        ActiveDocument.ActiveWindow.ScrollIntoView(cc.Range);
                        return;
                    }
                }
            }
            catch (NullReferenceException ex)
            {
                using (var form = new ReportError(Globals.Chem4WordV3.Telemetry, Globals.Chem4WordV3.WordTopLeft, module, ex))
                {
                    form.ShowDialog();
                }
            }
        }
コード例 #5
0
        private static void CreateParts(WordprocessingDocument document, GenerationData data)
        {
            //ExtendedFilePropertiesPart extendedFilePropertiesPart1 = document.AddNewPart<ExtendedFilePropertiesPart>("rId3");
            //ExtendedFilePropertiesPartHelper.GenerateExtendedFilePropertiesPart1Content(extendedFilePropertiesPart1);

            var mainDocumentPart1 = document.AddMainDocumentPart();

            MainDocumentPartHelper.GenerateMainDocumentPart1Content(mainDocumentPart1, data);

            var endnotesPart1 = mainDocumentPart1.AddNewPart <EndnotesPart>("rId8");

            EndnotesPartHelper.GenerateEndnotesPart1Content(endnotesPart1);

            var footerPart1 = mainDocumentPart1.AddNewPart <FooterPart>("rId13");

            FooterPartHelper.GenerateFooterPart1Content(footerPart1, data);

            var customXmlPart1 = mainDocumentPart1.AddNewPart <CustomXmlPart>("application/xml", "rId3");

            CustomXmlPartHelper.GenerateCustomXmlPart1Content(customXmlPart1);

            var customXmlPropertiesPart1 = customXmlPart1.AddNewPart <CustomXmlPropertiesPart>("rId1");

            CustomXmlPartHelper.GenerateCustomXmlPropertiesPart1Content(customXmlPropertiesPart1);

            var footnotesPart1 = mainDocumentPart1.AddNewPart <FootnotesPart>("rId7");

            FootnotesPartHelper.GenerateFootnotesPart1Content(footnotesPart1);

            var headerPart1 = mainDocumentPart1.AddNewPart <HeaderPart>("rId12");

            HeaderPartHelper.GenerateHeaderPart1Content(headerPart1, data);

            var customXmlPart2 = mainDocumentPart1.AddNewPart <CustomXmlPart>("application/xml", "rId2");

            CustomXmlPartHelper.GenerateCustomXmlPart2Content(customXmlPart2);

            var customXmlPropertiesPart2 = customXmlPart2.AddNewPart <CustomXmlPropertiesPart>("rId1");

            CustomXmlPartHelper.GenerateCustomXmlPropertiesPart2Content(customXmlPropertiesPart2);

            var numberingDefinitionsPart1 = mainDocumentPart1.AddNewPart <NumberingDefinitionsPart>("rId20");

            NumberingDefinitionsPartHelper.GenerateNumberingDefinitionsPart1Content(numberingDefinitionsPart1);

            var themePart1 = mainDocumentPart1.AddNewPart <ThemePart>("rId16");

            ThemePartHelper.GenerateThemePart1Content(themePart1);

            var customXmlPart3 = mainDocumentPart1.AddNewPart <CustomXmlPart>("application/xml", "rId1");

            CustomXmlPartHelper.GenerateCustomXmlPart3Content(customXmlPart3);

            var customXmlPropertiesPart3 = customXmlPart3.AddNewPart <CustomXmlPropertiesPart>("rId1");

            CustomXmlPartHelper.GenerateCustomXmlPropertiesPart3Content(customXmlPropertiesPart3);

            var webSettingsPart1 = mainDocumentPart1.AddNewPart <WebSettingsPart>("rId6");

            WebSettingsPartHelper.GenerateWebSettingsPart1Content(webSettingsPart1);

            var imagePart1 = mainDocumentPart1.AddNewPart <ImagePart>("image/png", "rId11");

            ImagePartHelper.GenerateImagePart1Content(imagePart1);

            var documentSettingsPart1 = mainDocumentPart1.AddNewPart <DocumentSettingsPart>("rId5");

            DocumentSettingsPartHelper.GenerateDocumentSettingsPart1Content(documentSettingsPart1);

            var fontTablePart1 = mainDocumentPart1.AddNewPart <FontTablePart>("rId15");

            FontTablePartHelper.GenerateFontTablePart1Content(fontTablePart1);

            var imagePart2 = mainDocumentPart1.AddNewPart <ImagePart>("image/png", "rId10");

            ImagePartHelper.GenerateImagePart2Content(imagePart2);

            var styleDefinitionsPart1 = mainDocumentPart1.AddNewPart <StyleDefinitionsPart>("rId4");

            StyleDefinitionsPartHelper.GenerateStyleDefinitionsPart1Content(styleDefinitionsPart1);

            var imagePart3 = mainDocumentPart1.AddNewPart <ImagePart>("image/jpeg", "rId9");

            ImagePartHelper.GenerateImagePart3Content(imagePart3);

            // Profile picture
            if (data.Personal.ProfilePictureContent != null && data.Personal.ProfilePictureType != null)
            {
                var imagePart4 = mainDocumentPart1.AddNewPart <ImagePart>(data.Personal.ProfilePictureType, "rId30");
                ImagePartHelper.GenerateProfileImageContent(imagePart4, data.Personal.ProfilePictureContent);
            }

            var headerPart2 = mainDocumentPart1.AddNewPart <HeaderPart>("rId14");

            HeaderPartHelper.GenerateHeaderPart2Content(headerPart2);

            var customFilePropertiesPart1 = document.AddNewPart <CustomFilePropertiesPart>("rId4");

            CustomFilePropertiesPartHelper.GenerateCustomFilePropertiesPart1Content(customFilePropertiesPart1);

            SetPackageProperties(document, data);
        }