public final void push(View view, LayoutType layout, View pusher) {
		if (pusher != null) {
			int origin = this.stack.indexOf(pusher);
			if (origin == -1) {
				// pusher.. didn't.. exist..
				throw new RuntimeException("WAT. This should never happen.");
			}
			if (origin < this.stackPointer) {
				try {
					this.popAllAbovePointer();
					this.pop();
				} catch (CloseCanceledException e) {
					return;
				}
				this.push(view, layout, null);
				return;
			}
		}
		// we're trying to push with views higher than us on the stack.
		if (this.stackPointer < this.stack.size() - 1) {
			try {
				this.popAllAbovePointer();
			} catch (CloseCanceledException e) {
				return; // Close cancelled
			}
		}
		if (layout.equals(LayoutType.VERTICAL)) {
			this.splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
		} else {
			this.splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
		}
		view.setPadding();
		if (this.stack.isEmpty()) {
			this.setLeftComponent(view);
			this.setRightComponent(null);
			this.stack.add(view);
		} else {
			this.stack.add(view);
			this.forward();
		}
	}