GUILayout formatting help

Using a series of nested BeginVertical and BeginHorizontal GUILayouts, Ive created a nice flexible content section in my app that changes size depending on what is drawn inside each section.

My GUILayout consists of two vertical layouts side by side but the left vertical is divided into two verticals.

Ive attached a picture to show what I mean,
[10759-flexible+spaces.png|10759]

What Id like to do as shown in the picture is make it so that when the right vertical section is small enough, the bottom vertical layout should expand all the way over.

Are there any ideas on configurations that could achieve this?

Thanks,

Here is my code for the layout

public delegate void Content();
	
	public static void ThreeDownOneSide(Content[] panel1, Content[] panel2, Content[] panel3)
	{
		GUILayout.BeginHorizontal();		
		GUILayout.BeginVertical();
		
		GUILayout.BeginVertical();
		{
			foreach(Content content in panel1)
			{
				if(!content.isNull())
				{
					content();
				}
			}
		}
		GUILayout.EndVertical();
		
		GUILayout.BeginVertical();
		{
			foreach(Content content in panel2)
			{
				if(!content.isNull())
				{
					content();
				}
			}
		}
		GUILayout.EndVertical();
		
		GUILayout.EndVertical();			
		GUILayout.BeginVertical();
		{
			foreach(Content content in panel3)
			{
				if(!content.isNull())
				{
					content();
				}
			}
		}
		GUILayout.EndVertical();	
		GUILayout.EndHorizontal();
	}

There really isn’t a way to just ‘expand all the way over’; you have to chose one or the other, but of course you know that.

So what you need is a conditional statement to choose which layout to use. I usually like to breakup my layouts into functions that I can use interchangeably. You can run the below script and switch between the two (very simple) examples by un/checking the layout flag in the inspector.

using UnityEngine;
using System.Collections;

public class InterchangableGUI : MonoBehaviour
{
	public bool layout;
	
	private delegate void DrawLayout();
	private DrawLayout layoutOne;
	private DrawLayout layoutTwo;
	
	void Awake()
	{
		layoutOne = new DrawLayout(LayoutOne);
		layoutTwo = new DrawLayout(LayoutTwo);
	}
	
	void OnGUI()
	{
		DrawLayout draw = layout ? layoutOne : layoutTwo;
		draw();
	}
	
	void LayoutOne()
	{
		GUILayout.Label("LayoutOne");
	}
	
	void LayoutTwo()
	{
		GUILayout.Label("LayoutTwo");
	}
}