# encoding: ascii
# api: powershell
# title: Add-Slide
# description: Snipped of my powerpoint movie creator. This is not general purpose code only a sample for entertainment. Scrubbed to take out some meaningful strings, I’ll try to post something better another time.
# version: 0.6
# type: function
# license: CC0
# function: Add-Slide
# x-poshcode-id: 1899
# x-archived: 2011-01-14T22:59:12
#
#
function Add-Slide($pres, $maxShared, $vmUsages, $vmShared, $maxVM, $vmLoad) {
	$slide = $pres.slides.range(1).duplicate()
	#$totalSlides = ($pres.slides | Measure-Object).Count
	#$pres.slides.range(2).moveto($totalSlides)

	#region 1
	# Add all the boxes. Skip the first position.
	$i = 1
	foreach ($position in $xOffsets[1..5]) {
		$shape = $slide.shapes.addShape(5, $position*72, $vmBoxYOffset*72, $vmBoxSize[0]*72, $vmBoxSize[1]*72)

		# Label the name.
		$shape.textframe2.textrange.text = "XXX"
		$shape.textframe2.textrange.font.size = 24
		$shape.line.visible = 0

		# Color the VMs based on their load. We do this by selecting some
		# fixed HSL endpoints to represent red and green. Luckily yellow is
		# in the middle of these in HSL space. Load is between 0 and 100 so
		# 0 load gives you a green box, 50 a yellow box, 100 a red box.
		$load = $vmLoad[$i-1]
		$H = 81 - (81 * $load / 100)
		$S = 63 + (46 * $load / 100)
		$shape.fill.forecolor.rgb = From-Hsl $H $S 138

		# Switch to gradient fill.
		$shape.fill.OneColorGradient(1, 2, 0.6)
		$i++
	}
	#endregion

	#region 2
	# Add the memory profile. First a shared pool box.
	$shared = ($vmShared | measure-object -sum).Sum
	$perSize = $shared / $maxShared
	$maxHeight = ($memBoxYBottom - $memBoxYTop)
	$height = $maxHeight * $perSize
	$yOffset = $memBoxYTop + ($maxHeight * (1 - $perSize))
	$shape = $slide.shapes.addShape(1, $xOffsets[0]*72, $yOffset*72, $vmBoxSize[0]*72, $height*72)
	$shape.line.visible = 0

	# Only display the text if there is room.
	if ($perSize -gt 0.25) {
		$shape.textframe2.textrange.text = "Xyzzy"
		$shape.textframe2.textrange.font.size = 24
	}

	# This one is always green.
	$shape.fill.forecolor.rgb = 5880731

	# Gradient fill.
	$shape.fill.OneColorGradient(1, 2, 0.6)
	#endregion

	#region 3
	# Obscure memory stuff..
	foreach ($i in 0..4) {
		# Total memory for this VM.
		$profile = @($vmShared[$i], $vmUsages[$i])
		$vmTotal = $profile[0] + $profile[1]
		$vmPercent = $vmTotal / $maxVM

		# Calculate the heights.
		$maxHeight = ($memBoxYBottom - $memBoxYTop)
		$height = $maxHeight * $vmPercent
		$height1 = $height * ($profile[0] / $vmTotal)
		$height2 = $height * ($profile[1] / $vmTotal)
		$yOffset1 = $memBoxYTop + ($maxHeight * (1 - $vmPercent))
		$yOffset2 = $yOffset1 + $height1

		# Make the boxes.
		$shape = $slide.shapes.addShape(1, $xOffsets[$i+1]*72, $yOffset1*72, $vmBoxSize[0]*72, $height1*72)
		$shape.line.visible = 0
		if ($height1 -gt 0.4) {
			$shape.textframe2.textrange.text = "Something"
			$shape.textframe2.textrange.font.size = 24
		}
		# Another green.
		$shape.fill.forecolor.rgb = 5880731
		$shape.fill.OneColorGradient(1, 2, 0.6)

		$shape = $slide.shapes.addShape(1, $xOffsets[$i+1]*72, $yOffset2*72, $vmBoxSize[0]*72, $height2*72)
		$shape.line.visible = 0
		if ($height2 -gt 0.4) {
			$shape.textframe2.textrange.text = "Something Else"
			$shape.textframe2.textrange.font.size = 24
		}
		$shape.fill.forecolor.rgb = 4626167
		$shape.fill.OneColorGradient(1, 2, 0.6)
	}
	#endregion
}
