---
title: "Basic Usage"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Basic Usage}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

```{r setup}
library(ggplot2)
library(r2pptx)
```

Let's go through how to make a basic presentation using `r2pptx`!

`r2pptx` leverages the power of the `officer` package and the ease of use of PowerPoint
templates to form a simple and easy to use API to create PowerPoint slide decks
straight from R. Therefore, the first thing we need to do is to choose a PowerPoint
template. This is a normal `.pptx` file that has the template we want in `Slide Master`. By default, `r2pptx` uses the default template in `officer`, which seems 
like a slight variation on the default Microsoft PowerPoint template.

Let's start by creating a `presentation`.

```{r}
presentation <- new_presentation()
print(presentation)
print(template_path(presentation))
```

We can see this is an empty presentation with the template path set to the default
`officer` template. What's in this template? We can check easily using some utility functions.

```{r}
get_layouts(presentation)
```

This template has seven different layouts. That's good to know, but it doesn't help us
entirely figure out which layout to use for which purpose. Let's keep going!

```{r}
layouts <- get_layouts(presentation)$layout
for (layout in layouts) {
  plot_layout(presentation, layout)
  title(main = layout)
}
```

Now we can see for each slide layout what options we have to use as placeholders! Knowing this, we can move forward and start constructing our presentation!

In `r2pptx` syntax, `presentations` are made up of `slides` which are made up of `elements`. `elements` represent anything we want to add to the deck -- text, plots, images, tables, etc. Anything compatible with the `officer` package works here!

We start out making a title slide with a title and subtitle. We give `elements` for
the title and subtitle as arguments to the `new_slide()` function. And we give "Title Slide" 
as the layout name, per the information from above.

```{r}
title_slide <- new_slide(
  layout = "Title Slide",
  elements = list(
    new_element(key = "Title 1", value = "The title"),
    new_element(key = "Subtitle 2", value = "The subtitle")  
  )
)
print(title_slide)
```

`elements` have two arguments. The `key` tells R where to place the element. Currently, 
this only supports a placeholder label. Placeholder lables are the name of placeholders, 
which are the objects in a PowerPoint slide layout (as seen above). Future development may allow other location specifications, such as giving x and y positions. 

Now we add the title slide to our presentation.

```{r}
presentation <- presentation + title_slide
print(presentation)
```

Easy!

Let's add another slide with a ggplot. This time, we'll add the `elements` to the `slide`
rather than initializing the `slide` with `elements`.

```{r}
# create the slide object
plot_slide <- new_slide(layout = "Title and Content")
print(plot_slide)

# create an element for the title element
title_element <- new_element(key = "Title 1", value = "A plot")

# create a ggplot
cars_plot <- ggplot(mtcars, aes(x = mpg, y = cyl)) + 
  geom_point()
# create an element for the plot
plot_element <- new_element(key = "Content Placeholder 2", value = cars_plot)

plot_slide <- plot_slide +
  title_element +
  plot_element
print(plot_slide)

presentation <- presentation +
  plot_slide
print(presentation)
```

And then we can write the `presentation` to PowerPoint.

```{r}
ppt_path <- tempfile(fileext = ".pptx")
write_pptx(presentation, ppt_path)
if (interactive()) system(paste("open", ppt_path))
```

And you have a slide deck! Congrats!

