gui: make resources type safe

- add string, int, color and resource loading helpers
- use typed resource classes, and some cleanup in loading code
- remove abstract GetResource() to enforce type safe access
- add height and width query methods to resources and use them
- minor cleanup
- simplify LoadPlacement

Change-Id: I9b81785109a80b3806ad6b50cba4d893b87b0db1
diff --git a/gui/checkbox.cpp b/gui/checkbox.cpp
index fe5f557..f4900ba 100644
--- a/gui/checkbox.cpp
+++ b/gui/checkbox.cpp
@@ -48,12 +48,8 @@
 	child = node->first_node("image");
 	if (child)
 	{
-		attr = child->first_attribute("checked");
-		if (attr)
-			mChecked = PageManager::FindResource(attr->value());
-		attr = child->first_attribute("unchecked");
-		if (attr)
-			mUnchecked = PageManager::FindResource(attr->value());
+		mChecked = LoadAttrImage(child, "checked");
+		mUnchecked = LoadAttrImage(child, "unchecked");
 	}
 
 	// Get the variable data
@@ -68,22 +64,17 @@
 			DataManager::SetValue(mVarName, attr->value());
 	}
 
-	mCheckW = 0;	mCheckH = 0;
-	if (mChecked && mChecked->GetResource())
+	mCheckW = mChecked->GetWidth();
+	mCheckH = mChecked->GetHeight();
+	if (mCheckW == 0)
 	{
-		mCheckW = gr_get_width(mChecked->GetResource());
-		mCheckH = gr_get_height(mChecked->GetResource());
-	}
-	else if (mUnchecked && mUnchecked->GetResource())
-	{
-		mCheckW = gr_get_width(mUnchecked->GetResource());
-		mCheckH = gr_get_height(mUnchecked->GetResource());
+		mCheckW = mUnchecked->GetWidth();
+		mCheckH = mUnchecked->GetHeight();
 	}
 
 	int x, y, w, h;
 	mLabel->GetRenderPos(x, y, w, h);
 	SetRenderPos(x, y, 0, 0);
-	return;
 }
 
 GUICheckbox::~GUICheckbox()