private void OnGUI() { if (this.styles == null) this.styles = new Styles(); GUI.skin = this.styles.skin; //var scrollWidth = 30f; var width = 160f; var height = 100f; var panelWidth = 180f; var itemBox = new GUIStyle(this.styles.box2); itemBox.fixedWidth = 0f; itemBox.stretchWidth = false; var label = new GUIStyle(GUI.skin.label); label.wordWrap = true; var path = new GUIStyle(EditorStyles.miniLabel); path.wordWrap = true; var style = this.styles.itemButton; var rect = this.position; rect.x = 0f; rect.y = 0f; GUI.Box(rect, string.Empty, this.styles.box1); this.scrollPos = GUILayout.BeginScrollView(this.scrollPos, false, false); { GUILayout.BeginHorizontal(); { GUILayout.BeginVertical(this.styles.box2, GUILayout.Width(panelWidth)); { GUILayout.Label("Libraries:"); foreach (var library in this.libraries) { if (GUILayout.Button(library.name) == true) { this.selectedLibrary = library; } } } GUILayout.EndVertical(); GUILayout.BeginVertical(); { if (this.selectedLibrary != null) { var sizeWidth = this.position.width - panelWidth - width * 0.5f; var xCount = Mathf.FloorToInt(sizeWidth / width); var widthOffset = (sizeWidth - xCount * width) / xCount; if (xCount > 0) { style.fixedWidth = width + widthOffset; style.fixedHeight = height + widthOffset; style.stretchWidth = false; style.stretchHeight = false; this.DrawLibrary(this.selectedLibrary, xCount, width + widthOffset, height + widthOffset, itemBox, style, label, path); } } } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); }
private void DrawLibrary(WindowComponentLibraryLinker lib, int xCount, float width, float height, GUIStyle itemBox, GUIStyle style, GUIStyle label, GUIStyle path) { const float offset = 5f; var drawing = false; var i = 0; foreach (var item in lib.items) { if (i % xCount == 0) { if (i != 0) GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); } GUILayout.BeginVertical(itemBox, GUILayout.Width(width), GUILayout.Height(height)); { if (GUILayout.Button(item.title, style) == true) { if (this.onSelect != null) this.onSelect(item); } var lastRect = GUILayoutUtility.GetLastRect(); lastRect.width = width; lastRect.height = height; lastRect.x += offset; lastRect.y += offset; lastRect.width -= offset * 2f; lastRect.height -= offset * 2f; drawing = new Rect(this.scrollPos.x, this.scrollPos.y, Screen.width, Screen.height).Overlaps(lastRect); if (drawing == true) { item.OnPreviewGUI(Color.white, lastRect, style); } GUILayout.BeginVertical(); { GUILayout.Label(item.title, label); GUILayout.Label(item.localDirectory, path); } GUILayout.EndVertical(); } GUILayout.EndVertical(); ++i; } if (i % xCount != 0 && xCount > 0) { GUILayout.EndHorizontal(); } }