protected override void OnGUI()
        {
            mainHeaderText    = GDEConstants.CreateDataHeader;
            headerColorString = GDESettings.Instance.CreateDataColor;

            base.OnGUI();

            DrawExpandCollapseAllFoldout(GDEItemManager.AllItems.Keys.ToArray(), GDEConstants.ItemListHeader);


            float currentGroupHeightTotal = CalculateGroupHeightsTotal();

            scrollViewHeight          = HeightToBottomOfWindow();
            scrollViewY               = TopOfLine();
            verticalScrollbarPosition = GUI.BeginScrollView(new Rect(currentLinePosition, scrollViewY, FullWindowWidth(), scrollViewHeight),
                                                            verticalScrollbarPosition,
                                                            new Rect(currentLinePosition, scrollViewY, ScrollViewWidth(), currentGroupHeightTotal));

            int count = 0;

            foreach (KeyValuePair <string, Dictionary <string, object> > item in GDEItemManager.AllItems)
            {
                // If we are filtered out, continue
                if (ShouldFilter(item.Key, item.Value))
                {
                    continue;
                }

                float currentGroupHeight;
                groupHeights.TryGetValue(item.Key, out currentGroupHeight);

                if (currentGroupHeight == 0f ||
                    (currentGroupHeight.NearlyEqual(GDEConstants.LineHeight) && entryFoldoutState.Contains(item.Key)))
                {
                    string itemSchema = GDEItemManager.GetSchemaForItem(item.Key);
                    if (!groupHeightBySchema.TryGetValue(itemSchema, out currentGroupHeight))
                    {
                        currentGroupHeight = GDEConstants.LineHeight;
                    }
                }

                if (IsVisible(currentGroupHeight) ||
                    (count == GDEItemManager.AllItems.Count - 1 && verticalScrollbarPosition.y.NearlyEqual(currentGroupHeightTotal - GDEConstants.LineHeight)))
                {
                    DrawEntry(item.Key, item.Value);
                }
                else
                {
                    NewLine(currentGroupHeight / GDEConstants.LineHeight);
                }

                count++;
            }
            GUI.EndScrollView();

            //Remove any items that were deleted
            foreach (string deletedkey in deletedItems)
            {
                Remove(deletedkey);
            }
            deletedItems.Clear();

            //Rename any items that were renamed
            string error;

            foreach (KeyValuePair <string, string> pair in renamedItems)
            {
                if (!GDEItemManager.RenameItem(pair.Key, pair.Value, null, out error))
                {
                    EditorUtility.DisplayDialog(GDEConstants.ErrorLbl, string.Format("Couldn't rename {0} to {1}: {2}", pair.Key, pair.Value, error), GDEConstants.OkLbl);
                }
            }

            renamedItems.Clear();
        }