/* * <control controlID="3" controlTypeID="com.balsamiq.mockups::CheckBox" x="143" y="194" w="121" h="22" measuredW="78" measuredH="22" zOrder="4" locked="false" isInGroup="-1"/> * <control controlID="5" controlTypeID="com.balsamiq.mockups::Image" x="738" y="216" w="230" h="406" measuredW="77" measuredH="79" zOrder="1" locked="false" isInGroup="-1"> * <controlProperties> * <text>asdasd</text> * </controlProperties> * </control> * <control controlID="6" controlTypeID="com.balsamiq.mockups::RadioButton" x="140" y="267" w="139" h="22" measuredW="101" measuredH="22" zOrder="5" locked="false" isInGroup="-1"> * <controlProperties> * <text>Radio%20Button%201</text> * </controlProperties> * </control> * <control controlID="7" controlTypeID="com.balsamiq.mockups::RadioButton" x="140" y="289" w="139" h="22" measuredW="104" measuredH="22" zOrder="6" locked="false" isInGroup="-1"> * <controlProperties> * <text>Radio%20Button%202</text> * </controlProperties> * </control> * <control controlID="10" controlTypeID="__group__" x="143" y="355" w="139" h="42" measuredW="139" measuredH="42" zOrder="7" locked="false" isInGroup="-1"> * <controlProperties> * <controlName>OtherSelection</controlName> * </controlProperties> * <groupChildrenDescriptors> * <control controlID="0" controlTypeID="com.balsamiq.mockups::RadioButton" x="0" y="0" w="139" h="22" measuredW="104" measuredH="22" zOrder="0" locked="false" isInGroup="10"> * <controlProperties> * <text>Radio%20Button%203</text> * </controlProperties> * </control> * <control controlID="1" controlTypeID="com.balsamiq.mockups::RadioButton" x="0" y="20" w="139" h="22" measuredW="105" measuredH="22" zOrder="1" locked="false" isInGroup="10"> * <controlProperties> * <text>Radio%20Button%204</text> * </controlProperties> * </control> * </groupChildrenDescriptors> * </control> * </controls> * </mockup> * */ protected string dumpElements(MagicUIManager.AspectRatio ratio) { StringBuilder result = new StringBuilder(); int count = 0; if (_controls.ContainsKey(ratio)) { count = _controls[ratio].Count; } result.Append("Container " + ratio.ToString() + ": {"); result.Append(string.Format("\"{0}\" = \"{1}\"", "ClientCenter", _containers[ratio].ClientCenter)); result.Append(string.Format(", \"{0}\" = \"{1}\"", "ClientSize", _containers[ratio].ClientSize)); result.Append(string.Format(", \"{0}\" = \"{1}\"", "Order", _containers[ratio].Order)); result.Append(string.Format(", \"{0}\" = \"{1}\"", "Disproportional", _containers[ratio].Disproportional)); result.AppendLine("} with " + count.ToString() + " controls:"); if (count > 0) { foreach (Control control in _controls[ratio]) { result.Append(string.Format("\"{0}\" = \"{1}\"", "RelativeCenter", control.RelativeCenter)); result.Append(string.Format(", \"{0}\" = \"{1}\"", "RelativeSize", control.RelativeSize)); foreach (string key in control.Attributes.Keys) { result.Append(string.Format(", \"{0}\" = \"{1}\"", key, control.Attributes[key])); } result.AppendLine(""); } } return(result.ToString()); }
protected void distributeControl(Control control) { control.RelativeCenter = control.UpperLeft + (control.RelativeSize * 0.5f); MagicUIManager.AspectRatio closest = assignToContainer(control.RelativeCenter, control.Order); if (closest != MagicUIManager.AspectRatio.Unknown) { List <Control> dest = null; if (_controls.ContainsKey(closest)) { dest = _controls[closest]; } else { dest = new List <Control>(); _controls.Add(closest, dest); } dest.Add(control); } control.RelativeCenter -= _containers[closest].ClientCenter; control.RelativeCenter.x /= _containers[closest].ClientSize.x; control.RelativeCenter.y /= _containers[closest].ClientSize.y; control.RelativeSize.x /= _containers[closest].ClientSize.x; control.RelativeSize.y /= _containers[closest].ClientSize.y; control.RelativeCenter.y = -control.RelativeCenter.y; }
public Control[] GetControls(MagicUIManager.AspectRatio aspect) { // TODO fallback if aspect ratio isn't present? if (!_controls.ContainsKey(aspect)) { return(new Control[0]); } return(_controls[aspect].ToArray()); }
protected MagicUIManager.AspectRatio assignToContainer(Vector2 pos, int order) { float mindist = float.MaxValue; MagicUIManager.AspectRatio closest = MagicUIManager.AspectRatio.Unknown; foreach (Container container in _containers.Values) { if (container.Order > order) { continue; } float dist = (pos - container.ClientCenter).magnitude; if (dist < mindist) { mindist = dist; closest = container.Aspect; } } return(closest); }