public void OnGUI(string[] initcmd)
        {
            if (!_isMEditPopupOpen && !_isShortcutPopupOpen && !_isSearchBarActive)// Are shortcuts active? Presently just checks for massEdit popup.
            {
                // Keyboard shortcuts
                if (EditorActionManager.CanUndo() && InputTracker.GetControlShortcut(Key.Z))
                {
                    EditorActionManager.UndoAction();
                }
                if (EditorActionManager.CanRedo() && InputTracker.GetControlShortcut(Key.Y))
                {
                    EditorActionManager.RedoAction();
                }
                if (InputTracker.GetControlShortcut(Key.C))
                {
                    _clipboardParam = _selection.getActiveParam();
                    _clipboardRows.Clear();
                    foreach (PARAM.Row r in _selection.getSelectedRows())
                    {
                        _clipboardRows.Add(new PARAM.Row(r));// make a clone
                    }
                }
                if (_selection.paramSelectionExists() && _clipboardParam == _selection.getActiveParam() && InputTracker.GetControlShortcut(Key.V))
                {
                    ImGui.OpenPopup("ctrlVPopup");
                }
                if (InputTracker.GetControlShortcut(Key.D))
                {
                    if (_selection.rowSelectionExists())
                    {
                        var act = new AddParamsAction(ParamBank.Params[_selection.getActiveParam()], _selection.getActiveParam(), new List <PARAM.Row>()
                        {
                            _selection.getActiveRow()
                        }, true);
                        EditorActionManager.ExecuteAction(act);
                    }
                }
                if (InputTracker.GetKeyDown(Key.Delete))
                {
                    if (_selection.rowSelectionExists())
                    {
                        var act = new DeleteParamsAction(ParamBank.Params[_selection.getActiveParam()], new List <PARAM.Row>()
                        {
                            _selection.getActiveRow()
                        });
                        EditorActionManager.ExecuteAction(act);
                        _selection.SetActiveRow(null);
                    }
                }
            }

            ShortcutPopups();

            if (ParamBank.Params == null)
            {
                if (ParamBank.IsLoading)
                {
                    ImGui.Text("Loading...");
                }
                return;
            }

            bool doFocus = false;

            // Parse select commands
            if (initcmd != null && initcmd[0] == "select")
            {
                if (initcmd.Length > 1 && ParamBank.Params.ContainsKey(initcmd[1]))
                {
                    doFocus = true;
                    _selection.setActiveParam(initcmd[1]);
                    if (initcmd.Length > 2)
                    {
                        _selection.SetActiveRow(null);
                        var p = ParamBank.Params[_selection.getActiveParam()];
                        int id;
                        var parsed = int.TryParse(initcmd[2], out id);
                        if (parsed)
                        {
                            var r = p.Rows.FirstOrDefault(r => r.ID == id);
                            if (r != null)
                            {
                                _selection.SetActiveRow(r);
                            }
                        }
                    }
                }
            }

            ImGui.Columns(3);
            ImGui.BeginChild("params");
            foreach (var param in ParamBank.Params)
            {
                if (ImGui.Selectable(param.Key, param.Key == _selection.getActiveParam()))
                {
                    _selection.setActiveParam(param.Key);
                    //_selection.SetActiveRow(null);
                }
                if (doFocus && param.Key == _selection.getActiveParam())
                {
                    ImGui.SetScrollHereY();
                }
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            if (!_selection.paramSelectionExists())
            {
                ImGui.BeginChild("rowsNONE");
                ImGui.Text("Select a param to see rows");
            }
            else
            {
                if (FeatureFlags.EnableEnhancedParamEditor)
                {
                    ImGui.Text("id VALUE | name ROW | prop FIELD VALUE | propref FIELD ROW");
                    ImGui.InputText("Search rows...", ref _selection.getCurrentSearchString(), 256);
                    if (ImGui.IsItemActive())
                    {
                        _isSearchBarActive = true;
                    }
                    else
                    {
                        _isSearchBarActive = false;
                    }
                }
                ImGui.BeginChild("rows" + _selection.getActiveParam());
                IParamDecorator decorator = null;
                if (_decorators.ContainsKey(_selection.getActiveParam()))
                {
                    decorator = _decorators[_selection.getActiveParam()];
                }

                PARAM            para = ParamBank.Params[_selection.getActiveParam()];
                List <PARAM.Row> p;
                if (FeatureFlags.EnableEnhancedParamEditor)
                {
                    Match m = new Regex(MassParamEditRegex.rowfilterRx).Match(_selection.getCurrentSearchString());
                    if (!m.Success)
                    {
                        p = para.Rows;
                    }
                    else
                    {
                        p = MassParamEditRegex.GetMatchingParamRows(para, m, true, true);
                    }
                }
                else
                {
                    p = para.Rows;
                }

                foreach (var r in p)
                {
                    if (ImGui.Selectable($@"{r.ID} {r.Name}", _selection.getSelectedRows().Contains(r)))
                    {
                        if (InputTracker.GetKey(Key.LControl))
                        {
                            _selection.toggleRowInSelection(r);
                        }
                        else
                        {
                            if (InputTracker.GetKey(Key.LShift))
                            {
                                _selection.cleanSelectedRows();
                                int start = p.IndexOf(_selection.getActiveRow());
                                int end   = p.IndexOf(r);
                                if (start != end)
                                {
                                    foreach (var r2 in p.GetRange(start < end ? start : end, Math.Abs(end - start)))
                                    {
                                        _selection.addRowToSelection(r2);
                                    }
                                }
                                _selection.addRowToSelection(r);
                            }
                            else
                            {
                                _selection.SetActiveRow(r);
                            }
                        }
                    }
                    if (decorator != null)
                    {
                        decorator.DecorateContextMenu(r);
                        decorator.DecorateParam(r);
                    }
                    if (doFocus && _selection.getActiveRow() == r)
                    {
                        ImGui.SetScrollHereY();
                    }
                }
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            if (!_selection.rowSelectionExists())
            {
                ImGui.BeginChild("columnsNONE");
                ImGui.Text("Select a row to see properties");
            }
            else
            {
                ImGui.BeginChild("columns" + _selection.getActiveParam());
                _propEditor.PropEditorParamRow(_selection.getActiveRow());
            }
            ImGui.EndChild();
        }
Beispiel #2
0
        public void ParamView(bool doFocus)
        {
            ImGui.Columns(3);
            ImGui.BeginChild("params");
            float scrollTo = 0f;

            foreach (var param in ParamBank.Params)
            {
                if (ImGui.Selectable(param.Key, param.Key == _selection.getActiveParam()))
                {
                    //_selection.setActiveParam(param.Key);
                    EditorCommandQueue.AddCommand($@"param/view/{_viewIndex}/{param.Key}");
                }
                if (doFocus && param.Key == _selection.getActiveParam())
                {
                    scrollTo = ImGui.GetCursorPosY();
                }
            }
            if (doFocus)
            {
                ImGui.SetScrollFromPosY(scrollTo - ImGui.GetScrollY());
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            string activeParam = _selection.getActiveParam();

            if (!_selection.paramSelectionExists())
            {
                ImGui.BeginChild("rowsNONE");
                ImGui.Text("Select a param to see rows");
            }
            else
            {
                PARAM         para       = ParamBank.Params[activeParam];
                HashSet <int> dirtyCache = ParamBank.DirtyParamCache[activeParam];
                ImGui.Text("id VALUE | name ROW | prop FIELD VALUE | propref FIELD ROW");
                UIHints.AddImGuiHintButton("MassEditHint", ref UIHints.SearchBarHint);
                ImGui.InputText("Search rows...", ref _selection.getCurrentRowSearchString(), 256);
                if (ImGui.IsItemActive())
                {
                    _paramEditor._isSearchBarActive = true;
                }
                else
                {
                    _paramEditor._isSearchBarActive = false;
                }
                ImGui.BeginChild("rows" + activeParam);
                IParamDecorator decorator = null;
                if (_paramEditor._decorators.ContainsKey(activeParam))
                {
                    decorator = _paramEditor._decorators[activeParam];
                }
                List <PARAM.Row> p;
                Match            m = ROWFILTERMATCHER.Match(_selection.getCurrentRowSearchString());
                if (!m.Success)
                {
                    p = para.Rows;
                }
                else
                {
                    p = MassParamEditRegex.GetMatchingParamRows(para, m, true, true);
                }

                scrollTo = 0;
                foreach (var r in p)
                {
                    if (dirtyCache != null && dirtyCache.Contains(r.ID))
                    {
                        ImGui.PushStyleColor(ImGuiCol.Text, DIRTYCOLOUR);
                    }
                    else
                    {
                        ImGui.PushStyleColor(ImGuiCol.Text, CLEANCOLOUR);
                    }
                    if (ImGui.Selectable($@"{r.ID} {Utils.ImGuiEscape(r.Name, "")}", _selection.getSelectedRows().Contains(r)))
                    {
                        if (InputTracker.GetKey(Key.LControl))
                        {
                            _selection.toggleRowInSelection(r);
                        }
                        else
                        {
                            if (InputTracker.GetKey(Key.LShift) && _selection.getActiveRow() != null)
                            {
                                _selection.cleanSelectedRows();
                                int start = p.IndexOf(_selection.getActiveRow());
                                int end   = p.IndexOf(r);
                                if (start != end)
                                {
                                    foreach (var r2 in p.GetRange(start < end ? start : end, Math.Abs(end - start)))
                                    {
                                        _selection.addRowToSelection(r2);
                                    }
                                }
                                _selection.addRowToSelection(r);
                            }
                            else
                            {
                                //_selection.SetActiveRow(r);
                                EditorCommandQueue.AddCommand($@"param/view/{_viewIndex}/{activeParam}/{r.ID}");
                            }
                        }
                    }
                    ImGui.PopStyleColor();
                    if (decorator != null)
                    {
                        decorator.DecorateContextMenu(r);
                        decorator.DecorateParam(r);
                    }
                    if (doFocus && _selection.getActiveRow() == r)
                    {
                        scrollTo = ImGui.GetCursorPosY();
                    }
                }
                if (doFocus)
                {
                    ImGui.SetScrollFromPosY(scrollTo - ImGui.GetScrollY());
                }
            }
            PARAM.Row activeRow = _selection.getActiveRow();
            ImGui.EndChild();
            ImGui.NextColumn();
            if (activeRow == null)
            {
                ImGui.BeginChild("columnsNONE");
                ImGui.Text("Select a row to see properties");
            }
            else
            {
                ImGui.BeginChild("columns" + activeParam);
                _propEditor.PropEditorParamRow(activeRow, ParamBank.VanillaParams != null ? ParamBank.VanillaParams[activeParam][activeRow.ID] : null, ref _selection.getCurrentPropSearchString());
            }
            ImGui.EndChild();
        }
        public void OnGUI(string[] initcmd)
        {
            // Keyboard shortcuts
            if (EditorActionManager.CanUndo() && InputTracker.GetControlShortcut(Key.Z))
            {
                EditorActionManager.UndoAction();
            }
            if (EditorActionManager.CanRedo() && InputTracker.GetControlShortcut(Key.Y))
            {
                EditorActionManager.RedoAction();
            }
            if (InputTracker.GetControlShortcut(Key.D))
            {
                if (_activeParam != null && _activeRow != null)
                {
                    var act = new CloneParamsAction(ParamBank.Params[_activeParam], _activeParam, new List <PARAM.Row>()
                    {
                        _activeRow
                    }, true);
                    EditorActionManager.ExecuteAction(act);
                }
            }
            if (InputTracker.GetKeyDown(Key.Delete))
            {
                if (_activeParam != null && _activeRow != null)
                {
                    var act = new DeleteParamsAction(ParamBank.Params[_activeParam], new List <PARAM.Row>()
                    {
                        _activeRow
                    });
                    EditorActionManager.ExecuteAction(act);
                    _activeRow = null;
                }
            }

            if (ParamBank.Params == null)
            {
                return;
            }

            bool doFocus = false;

            // Parse select commands
            if (initcmd != null && initcmd[0] == "select")
            {
                if (initcmd.Length > 1 && ParamBank.Params.ContainsKey(initcmd[1]))
                {
                    doFocus      = true;
                    _activeParam = initcmd[1];
                    if (initcmd.Length > 2)
                    {
                        var p = ParamBank.Params[_activeParam];
                        int id;
                        var parsed = int.TryParse(initcmd[2], out id);
                        if (parsed)
                        {
                            var r = p.Rows.FirstOrDefault(r => r.ID == id);
                            if (r != null)
                            {
                                _activeRow = r;
                            }
                        }
                    }
                }
            }

            ImGui.Columns(3);
            ImGui.BeginChild("params");
            foreach (var param in ParamBank.Params)
            {
                if (ImGui.Selectable(param.Key, param.Key == _activeParam))
                {
                    _activeParam = param.Key;
                    _activeRow   = null;
                }
                if (doFocus && param.Key == _activeParam)
                {
                    ImGui.SetScrollHereY();
                }
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            ImGui.BeginChild("rows");
            if (_activeParam == null)
            {
                ImGui.Text("Select a param to see rows");
            }
            else
            {
                IParamDecorator decorator = null;
                if (_decorators.ContainsKey(_activeParam))
                {
                    decorator = _decorators[_activeParam];
                }
                var p = ParamBank.Params[_activeParam];
                foreach (var r in p.Rows)
                {
                    if (ImGui.Selectable($@"{r.ID} {r.Name}", _activeRow == r))
                    {
                        _activeRow = r;
                    }
                    if (decorator != null)
                    {
                        decorator.DecorateContextMenu(r);
                        decorator.DecorateParam(r);
                    }
                    if (doFocus && _activeRow == r)
                    {
                        ImGui.SetScrollHereY();
                    }
                }
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            ImGui.BeginChild("columns");
            if (_activeRow == null)
            {
                ImGui.Text("Select a row to see properties");
            }
            else
            {
                _propEditor.PropEditorParamRow(_activeRow);
            }
            ImGui.EndChild();
        }
        public void ParamView(bool doFocus)
        {
            ImGui.Columns(3);
            ImGui.BeginChild("params");
            float scrollTo = 0f;

            foreach (var param in ParamBank.Params)
            {
                if (ImGui.Selectable(param.Key, param.Key == _selection.getActiveParam()))
                {
                    _selection.setActiveParam(param.Key);
                    //_selection.SetActiveRow(null);
                }
                if (doFocus && param.Key == _selection.getActiveParam())
                {
                    scrollTo = ImGui.GetCursorPosY();
                }
            }
            if (doFocus)
            {
                ImGui.SetScrollFromPosY(scrollTo - ImGui.GetScrollY());
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            if (!_selection.paramSelectionExists())
            {
                ImGui.BeginChild("rowsNONE");
                ImGui.Text("Select a param to see rows");
            }
            else
            {
                ImGui.Text("id VALUE | name ROW | prop FIELD VALUE | propref FIELD ROW");
                UIHints.AddImGuiHintButton("MassEditHint", ref UIHints.SearchBarHint);
                ImGui.InputText("Search rows...", ref _selection.getCurrentSearchString(), 256);
                if (ImGui.IsItemActive())
                {
                    _paramEditor._isSearchBarActive = true;
                }
                else
                {
                    _paramEditor._isSearchBarActive = false;
                }
                ImGui.BeginChild("rows" + _selection.getActiveParam());
                IParamDecorator decorator = null;
                if (_paramEditor._decorators.ContainsKey(_selection.getActiveParam()))
                {
                    decorator = _paramEditor._decorators[_selection.getActiveParam()];
                }

                PARAM            para = ParamBank.Params[_selection.getActiveParam()];
                List <PARAM.Row> p;
                Match            m = new Regex(MassParamEditRegex.rowfilterRx).Match(_selection.getCurrentSearchString());
                if (!m.Success)
                {
                    p = para.Rows;
                }
                else
                {
                    p = MassParamEditRegex.GetMatchingParamRows(para, m, true, true);
                }

                scrollTo = 0;
                foreach (var r in p)
                {
                    if (ImGui.Selectable($@"{r.ID} {r.Name}", _selection.getSelectedRows().Contains(r)))
                    {
                        if (InputTracker.GetKey(Key.LControl))
                        {
                            _selection.toggleRowInSelection(r);
                        }
                        else
                        {
                            if (InputTracker.GetKey(Key.LShift))
                            {
                                _selection.cleanSelectedRows();
                                int start = p.IndexOf(_selection.getActiveRow());
                                int end   = p.IndexOf(r);
                                if (start != end)
                                {
                                    foreach (var r2 in p.GetRange(start < end ? start : end, Math.Abs(end - start)))
                                    {
                                        _selection.addRowToSelection(r2);
                                    }
                                }
                                _selection.addRowToSelection(r);
                            }
                            else
                            {
                                _selection.SetActiveRow(r);
                            }
                        }
                    }
                    if (decorator != null)
                    {
                        decorator.DecorateContextMenu(r);
                        decorator.DecorateParam(r);
                    }
                    if (doFocus && _selection.getActiveRow() == r)
                    {
                        scrollTo = ImGui.GetCursorPosY();
                    }
                }
                if (doFocus)
                {
                    ImGui.SetScrollFromPosY(scrollTo - ImGui.GetScrollY());
                }
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            if (!_selection.rowSelectionExists())
            {
                ImGui.BeginChild("columnsNONE");
                ImGui.Text("Select a row to see properties");
            }
            else
            {
                ImGui.BeginChild("columns" + _selection.getActiveParam());
                _propEditor.PropEditorParamRow(_selection.getActiveRow());
            }
            ImGui.EndChild();
        }