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(); }
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(); }