Example #1
0
        private void CopyPages(string sectionId, OneNote one)
        {
            using (var progress = new ProgressDialog())
            {
                progress.SetMaximum(pageIds.Count);
                progress.Show(owner);

                foreach (var pageId in pageIds)
                {
                    if (one.GetParent(pageId) == sectionId)
                    {
                        continue;
                    }

                    // get the page to copy
                    var page = one.GetPage(pageId);
                    progress.SetMessage(page.Title);

                    // create a new page to get a new ID
                    one.CreatePage(sectionId, out var newPageId);

                    // set the page ID to the new page's ID
                    page.Root.Attribute("ID").Value = newPageId;
                    // remove all objectID values and let OneNote generate new IDs
                    page.Root.Descendants().Attributes("objectID").Remove();
                    one.Update(page);

                    progress.Increment();
                }
            }
        }
Example #2
0
 public PasteRtfCommand()
 {
     using (var one = new OneNote())
     {
         _ = one.GetPage().GetPageColor(out _, out black);
     }
 }
Example #3
0
        private void WordImporter(string filepath, bool append)
        {
            using (var word = new Word())
            {
                var html = word.ConvertFileToHtml(filepath);


                if (append)
                {
                    using (var one = new OneNote(out var page, out _))
                    {
                        page.AddHtmlContent(html);
                        one.Update(page);
                    }
                }
                else
                {
                    using (var one = new OneNote())
                    {
                        one.CreatePage(one.CurrentSectionId, out var pageId);
                        var page = one.GetPage(pageId);

                        page.Title = Path.GetFileName(filepath);
                        page.AddHtmlContent(html);
                        one.Update(page);
                        one.NavigateTo(page.PageId);
                    }
                }
            }
        }
Example #4
0
        private void ExportMany(OneNote one, List <string> pageIDs)
        {
            OneNote.ExportFormat format;
            string path;

            using (var dialog = new ExportDialog(pageIDs.Count))
            {
                if (dialog.ShowDialog(owner) != DialogResult.OK)
                {
                    return;
                }

                path   = dialog.FolderPath;
                format = dialog.Format;
            }

            string ext = null;

            switch (format)
            {
            case OneNote.ExportFormat.HTML: ext = ".htm"; break;

            case OneNote.ExportFormat.PDF: ext = ".pdf"; break;

            case OneNote.ExportFormat.Word: ext = ".docx"; break;

            case OneNote.ExportFormat.XML: ext = ".xml"; break;
            }

            string formatName = format.ToString();

            using (var progress = new ProgressDialog())
            {
                progress.SetMaximum(pageIDs.Count);
                progress.Show(owner);

                foreach (var pageID in pageIDs)
                {
                    var page     = one.GetPage(pageID);
                    var filename = Path.Combine(path, page.Title.Replace(' ', '_') + ext);

                    progress.SetMessage(filename);
                    progress.Increment();

                    if (format == OneNote.ExportFormat.XML)
                    {
                        SaveAsXML(page.Root, filename);
                    }
                    else
                    {
                        SaveAs(one, page.PageId, filename, format, formatName);
                    }
                }
            }

            UIHelper.ShowMessage(string.Format(Resx.SaveAsMany_Success, pageIDs.Count, path));
        }
Example #5
0
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

        #region InsertPagesTables
        private void InsertPagesTable(OneNote one)
        {
            var section   = one.GetSection();
            var sectionId = section.Attribute("ID").Value;

            one.CreatePage(sectionId, out var pageId);

            var page = one.GetPage(pageId);
            var ns   = page.Namespace;

            page.Title = string.Format(Resx.InsertTocCommand_TOCSections, section.Attribute("name").Value);

            var container = new XElement(ns + "OEChildren");

            var elements = section.Elements(ns + "Page");

            foreach (var element in elements)
            {
                var text  = new StringBuilder();
                var level = int.Parse(element.Attribute("pageLevel").Value);
                while (level > 0)
                {
                    text.Append(". . ");
                    level--;
                }

                var link = one.GetHyperlink(element.Attribute("ID").Value, string.Empty);

                var name = element.Attribute("name").Value;
                text.Append($"<a href=\"{link}\">{name}</a>");

                container.Add(new XElement(ns + "OE",
                                           new XElement(ns + "T", new XCData(text.ToString())
                                                        )));
            }

            var title = page.Root.Elements(ns + "Title").FirstOrDefault();

            title.AddAfterSelf(new XElement(ns + "Outline", container));
            one.Update(page);

            // move TOC page to top of section...

            // get current section again after new page is created
            section = one.GetSection();

            var entry = section.Elements(ns + "Page")
                        .FirstOrDefault(e => e.Attribute("ID").Value == pageId);

            entry.Remove();
            section.AddFirst(entry);
            one.UpdateHierarchy(section);

            one.NavigateTo(pageId);
        }
Example #6
0
        /// <summary>
        /// Initialize a new instance of the editor with the given manager
        /// </summary>
        /// <param name="one">The OneNote application manager (abstraction)</param>
        public FootnoteEditor(OneNote one)
        {
            this.one = one;

            page = one.GetPage();
            ns   = page.Namespace;

            dark = page.GetPageColor(out _, out _).GetBrightness() < 0.5;

            logger = Logger.Current;
        }
Example #7
0
        public override void Execute(params object[] args)
        {
            logger.StartClock();

            using (var one = new OneNote())
            {
                var section = one.GetSection();
                if (section != null)
                {
                    var ns = one.GetNamespace(section);

                    var pageIds = section.Elements(ns + "Page")
                                  .Select(e => e.Attribute("ID").Value)
                                  .ToList();

                    using (var progress = new ProgressDialog())
                    {
                        progress.SetMaximum(pageIds.Count);
                        progress.Show(owner);

                        foreach (var pageId in pageIds)
                        {
                            var page = one.GetPage(pageId, OneNote.PageDetail.Basic);
                            var name = page.Root.Attribute("name").Value;

                            progress.SetMessage(string.Format(
                                                    Properties.Resources.RemovingPageNumber_Message, name));

                            progress.Increment();

                            if (string.IsNullOrEmpty(name))
                            {
                                continue;
                            }

                            if (RemoveNumbering(name, out string clean))
                            {
                                page.Root
                                .Element(ns + "Title")
                                .Element(ns + "OE")
                                .Element(ns + "T")
                                .GetCData().Value = clean;

                                one.Update(page);
                            }
                        }
                    }
                }
            }

            logger.StopClock();
            logger.WriteTime("removed page numbering");
        }
Example #8
0
        private void Toggle(bool pageOnly, bool showTimestamps)
        {
            using (var one = new OneNote())
            {
                if (pageOnly)
                {
                    var page = one.GetPage();
                    SetTimestampVisibility(one, page, showTimestamps);
                }
                else
                {
                    var section = one.GetSection();
                    if (section != null)
                    {
                        var ns = one.GetNamespace(section);

                        var pageIds = section.Elements(ns + "Page")
                                      .Select(e => e.Attribute("ID").Value)
                                      .ToList();

                        using (var progress = new ProgressDialog())
                        {
                            progress.SetMaximum(pageIds.Count);
                            progress.Show(owner);

                            foreach (var pageId in pageIds)
                            {
                                var page = one.GetPage(pageId, OneNote.PageDetail.Basic);
                                var name = page.Root.Attribute("name").Value;

                                progress.SetMessage(name);
                                progress.Increment();

                                SetTimestampVisibility(one, page, showTimestamps);
                            }
                        }
                    }
                }
            }
        }
Example #9
0
        public override void Execute(params object[] args)
        {
            var builder = new StringBuilder();

            builder.AppendLine("Diagnostics.Execute()");
            builder.AppendLine(new string('-', 80));

            builder.AppendLine($"ONENOTE...: {Process.GetProcessesByName("ONENOTE")[0].MainModule.FileName}");
            builder.AppendLine($"Addin path: {Assembly.GetExecutingAssembly().Location}");
            builder.AppendLine($"Data path.: {PathFactory.GetAppDataPath()}");
            builder.AppendLine($"Log path..: {logger.LogPath}");
            builder.AppendLine();

            using (var one = new OneNote())
            {
                var(backupFolder, defaultFolder, unfiledFolder) = one.GetFolders();
                builder.AppendLine($"Default path: {defaultFolder}");
                builder.AppendLine($"Backup  path: {backupFolder}");
                builder.AppendLine($"Unfiled path: {unfiledFolder}");
                builder.AppendLine();

                var(Name, Path, Link) = one.GetPageInfo();
                builder.AppendLine($"Page name: {Name}");
                builder.AppendLine($"Page path: {Path}");
                builder.AppendLine($"Page link: {Link}");
                builder.AppendLine();

                one.ReportWindowDiagnostics(builder);

                builder.AppendLine();

                var page           = one.GetPage();
                var pageColor      = page.GetPageColor(out _, out _);
                var pageBrightness = pageColor.GetBrightness();

                builder.AppendLine($"Page background: {pageColor.ToRGBHtml()}");
                builder.AppendLine($"Page brightness: {pageBrightness}");
                builder.AppendLine($"Page is dark...: {pageBrightness < 0.5}");

                (float dpiX, float dpiY) = UIHelper.GetDpiValues();
                builder.AppendLine($"Screen DPI.....: horizontal/X:{dpiX} vertical/Y:{dpiY}");

                (float scalingX, float scalingY) = UIHelper.GetScalingFactors();
                builder.AppendLine($"Scaling factors: horizontal/X:{scalingX} vertical/Y:{scalingY}");

                builder.AppendLine(new string('-', 80));

                logger.WriteLine(builder.ToString());

                UIHelper.ShowInfo($"Diagnostics written to {logger.LogPath}");
            }
        }
Example #10
0
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

        #region InsertSectionsTable
        private void InsertSectionsTable(OneNote one, bool includePages)
        {
            var section   = one.GetSection();
            var sectionId = section.Attribute("ID").Value;

            one.CreatePage(sectionId, out var pageId);

            var page = one.GetPage(pageId);
            var ns   = page.Namespace;

            var scope    = includePages ? OneNote.Scope.Pages : OneNote.Scope.Sections;
            var notebook = one.GetNotebook(scope);

            page.Title = string.Format(Resx.InsertTocCommand_TOCNotebook, notebook.Attribute("name").Value);

            var container = new XElement(ns + "OEChildren");

            BuildSectionTable(one, ns, container, notebook.Elements(), includePages, 1);

            var title = page.Root.Elements(ns + "Title").FirstOrDefault();

            title.AddAfterSelf(new XElement(ns + "Outline", container));
            one.Update(page);

            // move TOC page to top of section...

            // get current section again after new page is created
            section = one.GetSection();

            var entry = section.Elements(ns + "Page")
                        .FirstOrDefault(e => e.Attribute("ID").Value == pageId);

            entry.Remove();
            section.AddFirst(entry);
            one.UpdateHierarchy(section);

            one.NavigateTo(pageId);
        }
Example #11
0
        public override void Execute(params object[] args)
        {
            using (var one = new OneNote())
            {
                var section = one.GetSection();
                var ns      = one.GetNamespace(section);

                var pageIDs = section.Elements(ns + "Page")
                              .Where(e => e.Attribute("selected")?.Value == "all")
                              .Select(e => e.Attribute("ID").Value)
                              .ToList();

                if (pageIDs.Count > 1)
                {
                    ExportMany(one, pageIDs);
                }
                else
                {
                    var page = one.GetPage();
                    ExportOne(one, page);
                }
            }
        }
Example #12
0
        private void ApplyNumbering(
            List <PageBasics> pages, ref int index, int level, bool numeric, string prefix)
        {
            int counter = 1;

            while (index < pages.Count && pages[index].Level == level)
            {
                var page = one.GetPage(pages[index].ID, OneNote.PageDetail.Basic);

                var cdata = page.Root.Element(ns + "Title")
                            .Element(ns + "OE")
                            .Element(ns + "T")
                            .GetCData();

                progress.SetMessage(string.Format(Properties.Resources.NumberingPage_Message, pages[index].Name));
                progress.Increment();

                var text = cdata.Value;
                if (cleaner != null)
                {
                    cleaner.RemoveNumbering(cdata.Value, out text);
                }

                cdata.Value = BuildPrefix(counter, numeric, level, prefix) + " " + text;
                one.Update(page);

                index++;
                counter++;

                if (index < pages.Count && pages[index].Level > level)
                {
                    ApplyNumbering(
                        pages, ref index, pages[index].Level,
                        numeric, $"{prefix}{counter - 1}.");
                }
            }
        }
Example #13
0
        /// <summary>
        /// Add a footnote to the footer section at the bottom of the outline
        /// </summary>
        /// <param name="textId">The objectId of the paragraph containing the cursor</param>
        /// <returns>The footnote label, the footnote ID#</returns>
        private async Task <string> WriteFootnoteText(string textId)
        {
            // find next footnote label
            var label = (divider.NodesAfterSelf()
                         .OfType <XElement>().Elements(ns + "Meta")
                         .Where(e => e.Attribute("name").Value.Equals("omfootnote"))
                         .DefaultIfEmpty()         // avoids null ref exception
                         .Max(e => e == null ? 0 : int.Parse(e.Attribute("content").Value))
                         + 1).ToString();

            // find last footnote (sibling) element after which new note is to be added
            var last = divider.NodesAfterSelf()
                       .OfType <XElement>().Elements(ns + "Meta")
                       .LastOrDefault(e => e.Attribute("name").Value.Equals("omfootnote"));

            // divider is a valid precedesor sibling; otherwise last's Parent
            last = last == null ? divider : last.Parent;

            // insert new note

            /*
             * <one:OE>
             * <one:Meta name="omfootnote" content="1" />
             * <one:T>
             *      <![CDATA[<a href=""><span style='font-family:"Calibri Light";font-size:11.0pt' lang=yo>[1]</span></a>
             *      <span style='font-family:"Calibri Light";font-size:11.0pt' lang=yo> Something said here</span>]]>
             * </one:T>
             * </one:OE>
             */

            var link = one.GetHyperlink(page.PageId, textId);

            var color = dark ? ";color:#5B9BD5" : string.Empty;

            var cdatalink = new XElement("a",
                                         new XAttribute("href", link),
                                         new XElement("span",
                                                      new XAttribute("style", $"font-family:'Calibri Light';font-size:11.0pt{color}"),
                                                      $"[{label}]"
                                                      ));

            XElement cdata;

            if (rightToLeft)
            {
                cdata = new XElement("wrapper",
                                     new XElement("span",
                                                  new XAttribute("style", "font-family:'Calibri Light';font-size:11.0pt"),
                                                  "new footnote "),
                                     cdatalink
                                     );
            }
            else
            {
                cdata = new XElement("wrapper", cdatalink,
                                     new XElement("span",
                                                  new XAttribute("style", "font-family:'Calibri Light';font-size:11.0pt"),
                                                  " new footnote")
                                     );
            }

            color = dark ? "#BFBFBF" : "#151515";

            var note = new Paragraph(
                new XAttribute("style", $"color:{color}"),
                new XElement(ns + "Meta",
                             new XAttribute("name", "omfootnote"),
                             new XAttribute("content", label)
                             ),
                new XElement(ns + "T",
                             new XCData(cdata.GetInnerXml())
                             )
                );

            if (rightToLeft)
            {
                note.SetRTL(rightToLeft);
            }

            last.AddAfterSelf(note);

            // update the page so OneNote will generate a new objectID
            await one.Update(page);

            // reload the page and reset state variables...
            page = one.GetPage();
            ns   = page.Namespace;

            EnsureFootnoteFooter();

            return(label);
        }
Example #14
0
        public override void Execute(params object[] args)
        {
            using (var one = new OneNote())
            {
                var section = one.GetSection();
                ns = one.GetNamespace(section);

                // find first selected - active page

                var active =
                    section.Elements(ns + "Page")
                    .FirstOrDefault(e => e.Attributes("isCurrentlyViewed").Any(a => a.Value.Equals("true")));

                if (active == null)
                {
                    UIHelper.ShowInfo(one.Window, "At least two pages must be selected to merge");
                    return;
                }

                var selections =
                    section.Elements(ns + "Page")
                    .Where(e =>
                           !e.Attributes("isCurrentlyViewed").Any() &&
                           e.Attributes("selected").Any(a => a.Value.Equals("all")));

                if (active == null)
                {
                    UIHelper.ShowInfo(one.Window, "At least two pages must be selected to merge");
                    return;
                }


                // get first selected (active) page and reference its quick styles, outline, size

                page = one.GetPage(active.Attribute("ID").Value);

                quickmap = page.GetQuickStyleMap();

                var offset = GetPageBottomOffset();

                // track running bottom as we add new outlines
                var maxOffset = offset;

                // find maximum z-offset
                var z = page.Root.Elements(ns + "Outline").Elements(ns + "Position")
                        .Attributes("z").Max(a => int.Parse(a.Value)) + 1;

                // merge each of the subsequently selected pages into the active page

                foreach (var selection in selections.ToList())
                {
                    var childPage = one.GetPage(selection.Attribute("ID").Value);

                    var map = page.MergeQuickStyles(childPage);

                    var childOutlines = childPage.Root.Elements(ns + "Outline");
                    if (childOutlines == null || !childOutlines.Any())
                    {
                        break;
                    }

                    var topOffset = childOutlines.Elements(ns + "Position")
                                    .Min(p => double.Parse(p.Attribute("y").Value, CultureInfo.InvariantCulture));

                    foreach (var childOutline in childOutlines)
                    {
                        // adjust position relative to new parent page outlines
                        var position = childOutline.Elements(ns + "Position").FirstOrDefault();
                        var y        = double.Parse(position.Attribute("y").Value, CultureInfo.InvariantCulture)
                                       - topOffset + offset + OutlineMargin;

                        position.Attribute("y").Value = y.ToString("#0.0", CultureInfo.InvariantCulture);

                        // keep track of lowest bottom
                        var size   = childOutline.Elements(ns + "Size").FirstOrDefault();
                        var bottom = y + double.Parse(size.Attribute("height").Value, CultureInfo.InvariantCulture);
                        if (bottom > maxOffset)
                        {
                            maxOffset = bottom;
                        }

                        position.Attribute("z").Value = z.ToString();
                        z++;

                        // remove its IDs so the page can apply its own
                        childOutline.Attributes("objectID").Remove();
                        childOutline.Descendants().Attributes("objectID").Remove();

                        page.ApplyStyleMapping(map, childOutline);

                        page.Root.Add(childOutline);
                    }

                    if (maxOffset > offset)
                    {
                        offset = maxOffset;
                    }
                }

                // update page and section hierarchy

                one.Update(page);

                foreach (var selection in selections)
                {
                    one.DeleteHierarchy(selection.Attribute("ID").Value);
                }
            }
        }
Example #15
0
        private void PowerPointImporter(string filepath, bool append, bool split)
        {
            string outpath;

            using (var powerpoint = new PowerPoint())
            {
                outpath = powerpoint.ConvertFileToImages(filepath);
            }

            if (outpath == null)
            {
                logger.WriteLine($"failed to create output path");
                return;
            }

            if (split)
            {
                using (var one = new OneNote())
                {
                    var section   = one.CreateSection(Path.GetFileNameWithoutExtension(filepath));
                    var sectionId = section.Attribute("ID").Value;
                    var ns        = one.GetNamespace(section);

                    one.NavigateTo(sectionId);

                    int i = 1;
                    foreach (var file in Directory.GetFiles(outpath, "*.jpg"))
                    {
                        one.CreatePage(sectionId, out var pageId);
                        var page = one.GetPage(pageId);
                        page.Title = $"Slide {i}";
                        var container = page.EnsureContentContainer();

                        LoadImage(container, ns, file);

                        one.Update(page);

                        i++;
                    }

                    logger.WriteLine("created section");
                }
            }
            else
            {
                using (var one = new OneNote())
                {
                    Page page;
                    if (append)
                    {
                        page = one.GetPage();
                    }
                    else
                    {
                        one.CreatePage(one.CurrentSectionId, out var pageId);
                        page       = one.GetPage(pageId);
                        page.Title = Path.GetFileName(filepath);
                    }

                    var container = page.EnsureContentContainer();

                    foreach (var file in Directory.GetFiles(outpath, "*.jpg"))
                    {
                        using (var image = Image.FromFile(file))
                        {
                            LoadImage(container, page.Namespace, file);
                        }
                    }

                    one.Update(page);

                    if (!append)
                    {
                        one.NavigateTo(page.PageId);
                    }
                }
            }

            try
            {
                Directory.Delete(outpath, true);
            }
            catch (Exception exc)
            {
                logger.WriteLine($"Error cleaning up {outpath}", exc);
            }
        }
Example #16
0
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

        #region InsertHeadingsTable
        /// <summary>
        /// Inserts a table of contents at the top of the current page,
        /// of all headings on the page
        /// </summary>
        /// <param name="addTopLinks"></param>
        /// <param name="one"></param>
        private void InsertHeadingsTable(OneNote one, bool addTopLinks)
        {
            var page = one.GetPage();
            var ns   = page.Namespace;

            var headings = page.GetHeadings(one);

            var top = page.Root.Element(ns + "Outline")?.Element(ns + "OEChildren");

            if (top == null)
            {
                return;
            }

            var title = page.Root.Elements(ns + "Title").Elements(ns + "OE").FirstOrDefault();

            if (title == null)
            {
                return;
            }

            var titleLink     = one.GetHyperlink(page.PageId, title.Attribute("objectID").Value);
            var titleLinkText = $"<a href=\"{titleLink}\"><span style='font-style:italic'>{Resx.InsertTocCommand_Top}</span></a>";

            var dark      = page.GetPageColor(out _, out _).GetBrightness() < 0.5;
            var textColor = dark ? "#FFFFFF" : "#000000";

            var toc = new List <XElement>
            {
                // "Table of Contents"
                new XElement(ns + "OE",
                             new XAttribute("style", $"font-size:16.0pt;color:{textColor}"),
                             new XElement(ns + "T",
                                          new XCData($"<span style='font-weight:bold'>{Resx.InsertTocCommand_TOC}</span>")
                                          )
                             )
            };

            // use the minimum intent level
            var minlevel = headings.Min(e => e.Style.Index);

            foreach (var heading in headings)
            {
                var text  = new StringBuilder();
                var count = minlevel;
                while (count < heading.Style.Index)
                {
                    text.Append(". . ");
                    count++;
                }

                if (!string.IsNullOrEmpty(heading.Link))
                {
                    var linkColor = dark ? " style='color:#5B9BD5'" : string.Empty;
                    text.Append($"<a href=\"{heading.Link}\"{linkColor}>{heading.Text}</a>");
                }
                else
                {
                    text.Append(heading.Text);
                }

                toc.Add(new XElement(ns + "OE",
                                     new XAttribute("style", $"color:{textColor}"),
                                     new XElement(ns + "T", new XCData(text.ToString()))
                                     ));

                if (addTopLinks)
                {
                    var table = new Table(ns);
                    table.AddColumn(400, true);
                    table.AddColumn(100, true);
                    var row = table.AddRow();
                    row.Cells.ElementAt(0).SetContent(heading.Root);
                    row.Cells.ElementAt(1).SetContent(
                        new XElement(ns + "OE",
                                     new XAttribute("alignment", "right"),
                                     new XElement(ns + "T", new XCData(titleLinkText)))
                        );

                    // heading.Root is the OE
                    heading.Root.ReplaceNodes(table.Root);
                }
            }

            // empty line after the TOC
            toc.Add(new XElement(ns + "OE", new XElement(ns + "T", new XCData(string.Empty))));
            top.AddFirst(toc);

            one.Update(page);
        }