// ====================================================================== // Initialization // ---------------------------------------------------------------------- public DSTableView(RectOffset margins, bool displayFrame, GUIContent title, AnchorEnum titleAlignment, bool titleSeperator, bool displayColumnFrame, bool columnTitleSeperator = true) { myMainView = new DSTitleView(margins, displayFrame, title, titleAlignment, titleSeperator, DisplayMainView, GetMainViewLayoutSize); myColumnTitleSeperator = columnTitleSeperator; myDisplayColumnFrame = displayColumnFrame; }
// --------------------------------------------------------------------------------- void BuildViews() { var typeName = new GUIContent(NameUtility.ToDisplayName(iCS_Types.TypeName(myTarget.RuntimeType))); myVariablesController = new iCS_ClassVariablesController(myTarget.RuntimeType, myStorage, typeName, myTarget); // Build class wizard layout view. myLayoutView = new DSVerticalLayoutView(new RectOffset(0, 0, 0, 0), false); myLayoutView.AddSubview(myVariablesController.View, new RectOffset(0, 0, 0, kSpacer), DSView.AnchorEnum.Center); // Build class wizard title view. string instanceTitle = myTarget.DisplayName; GUIContent instanceEditorTitle = new GUIContent(instanceTitle); myMainView = new DSTitleView(new RectOffset(0, 0, 0, 0), false, instanceEditorTitle, DSView.AnchorEnum.Center, true); myMainView.SetSubview(myLayoutView); }
Vector2 GetMainViewLayoutSize(DSTitleView view, Rect displayArea) { float width = Mathf.Max(myColumnTitleSize.x, myColumnDataSize.x); float height = myColumnTitleSize.y + myColumnDataSize.y; if (width > displayArea.width) { height += kScrollbarSize; } if (height > displayArea.height) { width += kScrollbarSize; } Vector2 displaySize = new Vector2(width, height); return(displaySize); }
// ====================================================================== // Main View implementation. // ---------------------------------------------------------------------- void DisplayMainView(DSTitleView view, Rect displayArea) { // Compute piece-part display areas. Rect titleDisplayArea = new Rect(displayArea.x, displayArea.y, Mathf.Min(displayArea.width, myColumnTitleSize.x), Mathf.Min(displayArea.height, myColumnTitleSize.y)); Rect dataDisplayArea = new Rect(displayArea.x, titleDisplayArea.yMax, Mathf.Min(displayArea.width, myColumnDataSize.x), displayArea.height - titleDisplayArea.height); if (dataDisplayArea.height < 0) { dataDisplayArea.height = 0; } // Compute scrollbar information. bool needHorizontalScrollbar = false; bool needVerticalScrollbar = false; float displayWidth = displayArea.width; float displayHeight = displayArea.height; if (myColumnTitleSize.x > displayWidth) { needHorizontalScrollbar = true; dataDisplayArea.height -= kScrollbarSize; if (dataDisplayArea.height < 0) { dataDisplayArea.height = 0; } } float dataHeight = displayHeight - myColumnTitleSize.y - (needHorizontalScrollbar ? kScrollbarSize : 0); if (myColumnDataSize.y > dataHeight) { needVerticalScrollbar = true; if (displayArea.width > dataDisplayArea.width) { if (displayArea.width - kScrollbarSize < dataDisplayArea.width) { dataDisplayArea.width = displayArea.width - kScrollbarSize; } } else { dataDisplayArea.width -= kScrollbarSize; } if (dataDisplayArea.width < 0) { dataDisplayArea.width = 0; } } // Display column titles. GUI.BeginGroup(titleDisplayArea); DisplayColumnTitles(); GUI.EndGroup(); if (myColumnTitleSeperator) { GUI.Box(new Rect(displayArea.x, titleDisplayArea.yMax - 2, displayArea.width, 3), ""); if (myDisplayColumnFrame && displayArea.xMax > titleDisplayArea.xMax) { GUI.Box(new Rect(titleDisplayArea.xMax, titleDisplayArea.y, displayArea.xMax - titleDisplayArea.xMax, titleDisplayArea.height), ""); } } // Display column data. GUI.BeginGroup(dataDisplayArea); DisplayColumnData(); GUI.EndGroup(); // Process mouse events. ProcessMouseEvents(titleDisplayArea, dataDisplayArea); // Display scrollbar if needed. myHScrollbarSize = myVScrollbarSize = 0; if (needHorizontalScrollbar) { myHScrollbarSize = dataDisplayArea.width; Rect scrollbarPos = new Rect(titleDisplayArea.x, displayArea.yMax - kScrollbarSize, titleDisplayArea.width, kScrollbarSize); myScrollbarPosition.x = GUI.HorizontalScrollbar(scrollbarPos, myScrollbarPosition.x, dataDisplayArea.width, 0, myColumnTitleSize.x); } if (needVerticalScrollbar) { myVScrollbarSize = dataDisplayArea.height; Rect scrollbarPos = new Rect(dataDisplayArea.xMax, dataDisplayArea.y, kScrollbarSize, dataDisplayArea.height); myScrollbarPosition.y = GUI.VerticalScrollbar(scrollbarPos, myScrollbarPosition.y, dataDisplayArea.height, 0, myColumnDataSize.y); } }