コード例 #1
0
        protected SVirtualScrollInfo DrawVirtualScrollView(SVirtualScrollInfo svi, float elementHeight, int elementCount, Action <Rect, float, int> elementDrawCallback)
        {
            var begin        = EditorGUILayout.GetControlRect(GUILayout.Height(0));
            var elementWidth = begin.width;

            if (Event.current.type == EventType.Repaint)
            {
                svi.svb = begin;
            }
            svi.sv = EditorGUILayout.BeginScrollView(svi.sv, false, false);
            var virtualSpace      = EditorGUILayout.GetControlRect(GUILayout.Height(elementHeight * elementCount), GUILayout.Width(elementWidth - 12f));
            var elementIndexBegin = Mathf.FloorToInt(svi.sv_begin / elementHeight);
            var elementIndexEnd   = Mathf.CeilToInt(svi.sv_end / elementHeight);

            for (var i = elementIndexBegin; i < elementIndexEnd; i++)
            {
                if (i < 0 || i >= elementCount)
                {
                    continue;
                }
                var rect = new Rect(0, i * elementHeight + 1f, elementWidth - 6f, elementHeight - 1f);

                elementDrawCallback(rect, elementHeight, i);
                // EditorGUI.LabelField(rect, $"Virtual Element {i + 1}/{elementCount} ({elementIndexEnd - elementIndexBegin})");
            }
            EditorGUILayout.EndScrollView();
            var end = EditorGUILayout.GetControlRect(GUILayout.Height(0));

            if (Event.current.type == EventType.Repaint)
            {
                svi.sve = end;
            }
            svi.sv_begin = svi.sv.y;
            svi.sv_end   = svi.sv.y + svi.sve.yMin - svi.svb.yMax - 8;
            if (svi.hint >= 0)
            {
                var hint = begin.y + 16f + (svi.hint * elementHeight * (svi.sve.yMin - svi.svb.yMax - 32f)) / virtualSpace.height;
                EditorGUI.DrawRect(new Rect(6f + elementWidth - 12f, hint, 12f, 2f), Color.green);
            }
            return(svi);
        }
コード例 #2
0
        protected SVirtualScrollInfo EnsureVirtualScrollView(SVirtualScrollInfo svi, float elementHeight, int elementCount, int i)
        {
            var begin = i * elementHeight + 1f;
            var end   = begin + elementHeight - 1f;

            if (svi.sv_begin > end || svi.sv_end < begin)
            {
                svi.sv.y = begin;
                Repaint();
            }
            var totalEnd = elementHeight * elementCount;
            var remain   = svi.sv_end - totalEnd;

            if (remain > 0f)
            {
                var span = svi.sv_end - svi.sv_begin;
                svi.sv_end   = totalEnd;
                svi.sv_begin = totalEnd - span;
            }
            return(svi);
        }
コード例 #3
0
        private void OnDrawAssets()
        {
            Block("Search", () =>
            {
                var nSearchKeyword = EditorGUILayout.TextField("Keyword", _searchKeyword);
                if (nSearchKeyword != _searchKeyword)
                {
                    _searchKeyword = nSearchKeyword;
                    EditorPrefs.SetString(KeyForSearchKey, _searchKeyword);
                    UpdateSearchResults();
                }

                var nSearchSliceKeyword = EditorGUILayout.TextField("Bundle Slice Keyword", _searchSliceKeyword);
                if (nSearchSliceKeyword != _searchSliceKeyword)
                {
                    _searchSliceKeyword = nSearchSliceKeyword;
                    EditorPrefs.SetString(KeyForSearchSliceKey, _searchSliceKeyword);
                    UpdateSearchResults();
                }

                var nShowDefinedOnly = EditorGUILayout.Toggle("Show Defined Only", _showDefinedOnly);
                if (nShowDefinedOnly != _showDefinedOnly)
                {
                    _showDefinedOnly = nShowDefinedOnly;
                    EditorPrefs.SetInt(KeyForShowDefinedOnly, _showDefinedOnly ? 1 : 0);
                    UpdateSearchResults();
                }

                var nUseRegexMatch = EditorGUILayout.Toggle("Use Regex Match", _useRegexMatch);
                if (nUseRegexMatch != _useRegexMatch)
                {
                    _useRegexMatch = nUseRegexMatch;
                    EditorPrefs.SetInt(KeyForUseRegexMatch, _useRegexMatch ? 1 : 0);
                    UpdateSearchResults();
                }

                var nShowSelectionOnly = EditorGUILayout.Toggle("Show Selection Only", _showSelectionOnly);
                if (nShowSelectionOnly != _showSelectionOnly)
                {
                    _showSelectionOnly = nShowSelectionOnly;
                    EditorPrefs.SetInt(KeyForShowSelectionOnly, _showSelectionOnly ? 1 : 0);
                    UpdateSearchResults();
                }

                var nShowStreamingAssetsOnly = EditorGUILayout.Toggle("Show StreamingAssets Only", _showStreamingAssetsOnly);
                if (nShowStreamingAssetsOnly != _showStreamingAssetsOnly)
                {
                    _showStreamingAssetsOnly = nShowStreamingAssetsOnly;
                    EditorPrefs.SetInt(KeyForShowStreamingAssetsOnly, _showStreamingAssetsOnly ? 1 : 0);
                    UpdateSearchResults();
                }
            });

            EditorGUILayout.Space();
            Block(string.Format("Results ({0}/{1})", _searchMarks.Count, _searchResults.Count), () =>
            {
                EditorGUILayout.BeginHorizontal();
                var nBatchedSelectMarks = EditorGUILayout.Toggle(_batchedSelectMarks, GUILayout.Width(20f));
                EditorGUILayout.LabelField("Asset Packer", GUILayout.Width(110f));
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.Space();

                if (nBatchedSelectMarks != _batchedSelectMarks)
                {
                    _batchedSelectMarks = nBatchedSelectMarks;
                    _searchMarks.Clear();
                    if (_batchedSelectMarks)
                    {
                        for (var i = 0; i < _searchResults.Count; i++)
                        {
                            _searchMarks.Add(_searchResults[i]);
                        }
                    }
                }

                var elementCount = _searchResults.Count;
                _searchSV.hint   = -1;
                _searchSV        = DrawVirtualScrollView(_searchSV, 22f, elementCount, (Rect elementRect, float elementHeight, int i) =>
                {
                    var result   = _searchResults[i];
                    var marked   = _searchMarks.Contains(result);
                    var headRect = new Rect(elementRect.x, elementRect.y, 20f, elementRect.height);
                    var nMarked  = EditorGUI.Toggle(headRect, marked);
                    if (marked) // 批量修改模式
                    {
                        GUI.color = Color.green;
                    }

                    var lineRect = new Rect(elementRect.x + 20f, elementRect.y, elementRect.width - 20f, elementRect.height);
                    DrawSearchResultAssetAttributes(lineRect, _data, result, this, marked);
                    GUI.color = _GUIColor;

                    if (nMarked != marked)
                    {
                        if (nMarked)
                        {
                            _searchMarks.Add(result);
                        }
                        else
                        {
                            _searchMarks.Remove(result);
                        }
                    }
                });
            });
            EditorGUILayout.Space();
        }