private PowerPointShapeGalleryPresentation PrepareImportGallery(string importFilePath, bool fromCategory)
        {
            var importFileCopyPath = Path.Combine(ShapeRootFolderPath, ImportFileCopyName);

            // copy the file to the current shape root if the file is not under root 
            if (!File.Exists(importFileCopyPath))
            {
                File.Copy(importFilePath, importFileCopyPath);
            }

            // init the file as an imported file
            var importShapeGallery = new PowerPointShapeGalleryPresentation(ShapeRootFolderPath,
                                                                            ImportFileNameNoExtension)
                                         {
                                             IsImportedFile = true,
                                             ImportToCategory = fromCategory ? string.Empty : CurrentCategory
                                         };

            return importShapeGallery;
        }
        private void ImportShapesFromLibrary(PowerPointShapeGalleryPresentation importShapeGallery)
        {
            foreach (var importCategory in importShapeGallery.Categories)
            {
                importShapeGallery.CopyCategory(importCategory);

                Globals.ThisAddIn.ShapePresentation.AddCategory(importCategory, false, true);

                _categoryBinding.Add(importCategory);
            }
        }
        private void ImportShapesFromSingleShape(PowerPointShapeGalleryPresentation importShapeGallery)
        {
            var shapeRange = importShapeGallery.Slides[0].Shapes.Range();

            if (shapeRange.Count < 1) return;

            var shapeName = shapeRange[1].Name;

            if (shapeRange.Count > 1)
            {
                shapeName = TextCollection.CustomShapeDefaultShapeName;
                importShapeGallery.CopyShape();
            }
            else
            {
                importShapeGallery.CopyShape(shapeName);
            }

            shapeName = Globals.ThisAddIn.ShapePresentation.AddShape(null, shapeName, fromClipBoard: true);
            var exportPath = Path.Combine(CurrentShapeFolderPath, shapeName + ".png");

            Graphics.ExportShape(shapeRange, exportPath);
        }
        public void InitializeShapeGallery()
        {
            // achieves singleton ShapePresentation
            if (ShapePresentation != null) return;

            var shapeRootFolderPath = ShapesLabConfigs.ShapeRootFolder;

            ShapePresentation =
                new PowerPointShapeGalleryPresentation(shapeRootFolderPath, ShapeGalleryPptxName);

            if (!ShapePresentation.Open(withWindow: false, focus: false) &&
                !ShapePresentation.Opened)
            {
                // if the presentation gets some error during opening, and the error could not
                // be resolved by consistency check, prompt the user about the error
                MessageBox.Show(TextCollection.ShapeGalleryInitErrorMsg);
                return;
            }

            if (ShapePresentation.HasCategory(ShapesLabConfigs.DefaultCategory))
            {
                ShapePresentation.DefaultCategory = ShapesLabConfigs.DefaultCategory;

                return;
            }

            // if we do not have the default category, create and add it to ShapeGallery
            ShapePresentation.AddCategory(ShapesLabConfigs.DefaultCategory);
            ShapePresentation.Save();
        }