From a43250145ddf3f85e0cbb038a91e07d77a93e952 Mon Sep 17 00:00:00 2001 From: SpaiR Date: Fri, 18 Mar 2022 22:13:24 +0100 Subject: [PATCH 1/2] Refactor quick edit panel to a separate package --- src/app/ui/cpwsarea/wsmap/pmap/pmap.go | 8 +++-- .../pquickedit.go} | 30 ++++++++++++++----- 2 files changed, 27 insertions(+), 11 deletions(-) rename src/app/ui/cpwsarea/wsmap/pmap/{panel_quick_edit.go => pquickedit/pquickedit.go} (84%) diff --git a/src/app/ui/cpwsarea/wsmap/pmap/pmap.go b/src/app/ui/cpwsarea/wsmap/pmap/pmap.go index 9965c3d3..79678b1e 100644 --- a/src/app/ui/cpwsarea/wsmap/pmap/pmap.go +++ b/src/app/ui/cpwsarea/wsmap/pmap/pmap.go @@ -8,6 +8,7 @@ import ( "sdmm/app/render" "sdmm/app/ui/cpwsarea/wsmap/pmap/canvas" "sdmm/app/ui/cpwsarea/wsmap/pmap/editor" + "sdmm/app/ui/cpwsarea/wsmap/pmap/pquickedit" "sdmm/app/ui/cpwsarea/wsmap/pmap/psettings" "sdmm/app/ui/cpwsarea/wsmap/pmap/tilemenu" "sdmm/app/ui/cpwsarea/wsmap/tools" @@ -24,6 +25,7 @@ import ( type App interface { tilemenu.App + pquickedit.App Prefs() prefs.Prefs @@ -80,7 +82,7 @@ type PaneMap struct { tileMenu *tilemenu.TileMenu - pQuickEdit *panelQuickEdit + pQuickEdit *pquickedit.Panel pSettings *psettings.Panel showSettings bool @@ -170,7 +172,7 @@ func New(app App, dmm *dmmap.Dmm) *PaneMap { p.tileMenu = tilemenu.New(app, p.editor) - p.pQuickEdit = &panelQuickEdit{app: app, editor: p.editor} + p.pQuickEdit = pquickedit.New(app, p.editor) p.pSettings = psettings.New(p.editor) p.canvas = canvas.New() @@ -221,7 +223,7 @@ func (p *PaneMap) Process() { "quickEdit_"+p.dmm.Name, pPosRightBottom, p.active && p.app.HasSelectedInstance(), - p.pQuickEdit.process, + p.pQuickEdit.Process, ) p.showPanel("canvasStat_"+p.dmm.Name, pPosBottom, p.showStatusPanel) } diff --git a/src/app/ui/cpwsarea/wsmap/pmap/panel_quick_edit.go b/src/app/ui/cpwsarea/wsmap/pmap/pquickedit/pquickedit.go similarity index 84% rename from src/app/ui/cpwsarea/wsmap/pmap/panel_quick_edit.go rename to src/app/ui/cpwsarea/wsmap/pmap/pquickedit/pquickedit.go index ba4bdcad..d17af27b 100644 --- a/src/app/ui/cpwsarea/wsmap/pmap/panel_quick_edit.go +++ b/src/app/ui/cpwsarea/wsmap/pmap/pquickedit/pquickedit.go @@ -1,4 +1,4 @@ -package pmap +package pquickedit import ( "fmt" @@ -7,6 +7,7 @@ import ( "sdmm/app/ui/cpwsarea/wsmap/pmap/editor" "sdmm/app/window" "sdmm/dmapi/dm" + "sdmm/dmapi/dmenv" "sdmm/dmapi/dmicon" "sdmm/dmapi/dmmap" "sdmm/dmapi/dmmap/dmmdata/dmmprefab" @@ -16,12 +17,25 @@ import ( "strconv" ) -type panelQuickEdit struct { +type App interface { + Prefs() prefs.Prefs + LoadedEnvironment() *dmenv.Dme + SelectedInstance() (*dmminstance.Instance, bool) +} + +type Panel struct { app App editor *editor.Editor } -func (p *panelQuickEdit) process() { +func New(app App, editor *editor.Editor) *Panel { + return &Panel{ + app: app, + editor: editor, + } +} + +func (p *Panel) Process() { selectedInstance, ok := p.app.SelectedInstance() if !ok { return @@ -35,7 +49,7 @@ func (p *panelQuickEdit) process() { p.showDirOption(selectedInstance) } -func (p *panelQuickEdit) showNudgeOption(label string, xAxis bool, instance *dmminstance.Instance) { +func (p *Panel) showNudgeOption(label string, xAxis bool, instance *dmminstance.Instance) { var nudgeVarName string if p.app.Prefs().Editor.NudgeMode == prefs.SaveNudgeModePixel { if xAxis { @@ -99,7 +113,7 @@ var ( } ) -func (p *panelQuickEdit) showDirOption(instance *dmminstance.Instance) { +func (p *Panel) showDirOption(instance *dmminstance.Instance) { dir := instance.Prefab().Vars().IntV("dir", 0) value := _dirToRelativeIndex[dir] maxDirs := p.getIconMaxDirs(instance.Prefab().Vars()) @@ -130,7 +144,7 @@ func (p *panelQuickEdit) showDirOption(instance *dmminstance.Instance) { imgui.EndDisabled() } -func (p *panelQuickEdit) sanitizeInstanceVar(instance *dmminstance.Instance, varName, defaultValue string) { +func (p *Panel) sanitizeInstanceVar(instance *dmminstance.Instance, varName, defaultValue string) { vars := instance.Prefab().Vars() if p.initialVarValue(instance.Prefab().Path(), varName) == vars.ValueV(varName, defaultValue) { vars = dmvars.Delete(vars, varName) @@ -138,11 +152,11 @@ func (p *panelQuickEdit) sanitizeInstanceVar(instance *dmminstance.Instance, var } } -func (p *panelQuickEdit) initialVarValue(path, varName string) string { +func (p *Panel) initialVarValue(path, varName string) string { return p.app.LoadedEnvironment().Objects[path].Vars.ValueV(varName, dmvars.NullValue) } -func (p *panelQuickEdit) getIconMaxDirs(vars *dmvars.Variables) int32 { +func (p *Panel) getIconMaxDirs(vars *dmvars.Variables) int32 { icon := vars.TextV("icon", "") iconState := vars.TextV("icon_state", "") state, err := dmicon.Cache.GetState(icon, iconState) From 5d852c069e2284b2bc5438b34fc985a53532b2df Mon Sep 17 00:00:00 2001 From: SpaiR Date: Fri, 18 Mar 2022 22:40:41 +0100 Subject: [PATCH 2/2] Add preferences to control Quick Edit menu appearance --- src/CHANGELOG.md | 5 ++- src/app/preferences.go | 40 +++++++++++++++++++ src/app/preferences_config.go | 3 ++ src/app/prefs/prefs.go | 4 +- src/app/ui/cpwsarea/wsmap/pmap/pmap.go | 2 +- .../wsmap/pmap/pquickedit/pquickedit.go | 27 ++++++++----- .../cpwsarea/wsmap/pmap/tilemenu/process.go | 6 +++ .../cpwsarea/wsmap/pmap/tilemenu/tilemenu.go | 14 ++++++- 8 files changed, 86 insertions(+), 15 deletions(-) diff --git a/src/CHANGELOG.md b/src/CHANGELOG.md index 61cc8e43..89be125c 100644 --- a/src/CHANGELOG.md +++ b/src/CHANGELOG.md @@ -4,8 +4,9 @@ * Added an option to change map size. To do that open a new "Settings" menu, available under the cog button in the top-right corner of the opened map pane; * It's now possible to interact with the map window without first having to manually tab in. Specifically for: select instance -> change a var -> select another instance; * Added a preference to adjust the application framerate; - * Minor GUI improvements; - * Fixed attempting to pick/delete item pixel shifted off map does not work. + * Added preferences to control Quick Edit menu appearance: it can be shown in the tile context menu or on the map pane; + * Fixed attempting to pick/delete item pixel shifted off map does not work; + * Minor GUI improvements. # v2.1.0.alpha diff --git a/src/app/preferences.go b/src/app/preferences.go index 6798513b..5b2d0a2e 100644 --- a/src/app/preferences.go +++ b/src/app/preferences.go @@ -13,6 +13,8 @@ func (a *app) makePreferences() wsprefs.Prefs { p.Add(wsprefs.GPInterface, a.makePreferenceInterfaceScale()) p.Add(wsprefs.GPInterface, a.makePreferenceInterfaceFps()) p.Add(wsprefs.GPControls, a.makePreferenceControlsAltScrollBehaviour()) + p.Add(wsprefs.GPControls, a.makePreferenceControlsQuickEditContextMenu()) + p.Add(wsprefs.GPControls, a.makePreferenceControlsQuickEditMapPane()) p.Add(wsprefs.GPEditor, a.makePreferenceEditorFormat()) p.Add(wsprefs.GPEditor, a.makePreferenceEditorSanitizeVariables()) p.Add(wsprefs.GPEditor, a.makePreferenceEditorNudgeMode()) @@ -82,6 +84,44 @@ func (a *app) makePreferenceControlsAltScrollBehaviour() wsprefs.BoolPref { return p } +func (a *app) makePreferenceControlsQuickEditContextMenu() wsprefs.BoolPref { + p := wsprefs.MakeBoolPref() + p.Name = "Quick Edit: Tile Context Menu" + p.Desc = "Controls whether Quick Edit should be shown in the tile context menu." + p.Label = "##quick_edit:tile_context_menu" + + p.FGet = func() bool { + return a.preferencesConfig().Prefs.Controls.QuickEditContextMenu + } + p.FSet = func(value bool) { + log.Println("[app] preferences changing, [controls#quick_edit:tile_context_menu] to:", value) + cfg := a.preferencesConfig() + cfg.Prefs.Controls.QuickEditContextMenu = value + a.ConfigSaveV(cfg) + } + + return p +} + +func (a *app) makePreferenceControlsQuickEditMapPane() wsprefs.BoolPref { + p := wsprefs.MakeBoolPref() + p.Name = "Quick Edit: Map Pane" + p.Desc = "Controls whether Quick Edit should be shown on the map pane." + p.Label = "##quick_edit:map_pane" + + p.FGet = func() bool { + return a.preferencesConfig().Prefs.Controls.QuickEditMapPane + } + p.FSet = func(value bool) { + log.Println("[app] preferences changing, [controls#quick_edit:map_pane] to:", value) + cfg := a.preferencesConfig() + cfg.Prefs.Controls.QuickEditMapPane = value + a.ConfigSaveV(cfg) + } + + return p +} + func (a *app) makePreferenceEditorFormat() wsprefs.OptionPref { p := wsprefs.MakeOptionPref() p.Name = "Save Format" diff --git a/src/app/preferences_config.go b/src/app/preferences_config.go index 265eb7d9..8dc15e44 100644 --- a/src/app/preferences_config.go +++ b/src/app/preferences_config.go @@ -49,6 +49,9 @@ func (a *app) loadPreferencesConfig() { Scale: 100, Fps: 60, }, + Controls: prefs.Controls{ + QuickEditMapPane: true, + }, Editor: prefs.Editor{ SaveFormat: prefs.SaveFormatInitial, NudgeMode: prefs.SaveNudgeModePixel, diff --git a/src/app/prefs/prefs.go b/src/app/prefs/prefs.go index bfb6eb0c..d2dd40a5 100644 --- a/src/app/prefs/prefs.go +++ b/src/app/prefs/prefs.go @@ -12,7 +12,9 @@ type Interface struct { } type Controls struct { - AltScrollBehaviour bool + AltScrollBehaviour bool + QuickEditContextMenu bool + QuickEditMapPane bool } type Editor struct { diff --git a/src/app/ui/cpwsarea/wsmap/pmap/pmap.go b/src/app/ui/cpwsarea/wsmap/pmap/pmap.go index 79678b1e..299ef0a2 100644 --- a/src/app/ui/cpwsarea/wsmap/pmap/pmap.go +++ b/src/app/ui/cpwsarea/wsmap/pmap/pmap.go @@ -222,7 +222,7 @@ func (p *PaneMap) Process() { p.showPanelV( "quickEdit_"+p.dmm.Name, pPosRightBottom, - p.active && p.app.HasSelectedInstance(), + p.app.Prefs().Controls.QuickEditMapPane && p.active && p.app.HasSelectedInstance(), p.pQuickEdit.Process, ) p.showPanel("canvasStat_"+p.dmm.Name, pPosBottom, p.showStatusPanel) diff --git a/src/app/ui/cpwsarea/wsmap/pmap/pquickedit/pquickedit.go b/src/app/ui/cpwsarea/wsmap/pmap/pquickedit/pquickedit.go index d17af27b..7a48a91d 100644 --- a/src/app/ui/cpwsarea/wsmap/pmap/pquickedit/pquickedit.go +++ b/src/app/ui/cpwsarea/wsmap/pmap/pquickedit/pquickedit.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/SpaiR/imgui-go" "sdmm/app/prefs" - "sdmm/app/ui/cpwsarea/wsmap/pmap/editor" "sdmm/app/window" "sdmm/dmapi/dm" "sdmm/dmapi/dmenv" @@ -23,12 +22,19 @@ type App interface { SelectedInstance() (*dmminstance.Instance, bool) } +type editor interface { + Dmm() *dmmap.Dmm + CommitChanges(string) + InstanceSelect(i *dmminstance.Instance) + UpdateCanvasByCoords([]util.Point) +} + type Panel struct { app App - editor *editor.Editor + editor editor } -func New(app App, editor *editor.Editor) *Panel { +func New(app App, editor editor) *Panel { return &Panel{ app: app, editor: editor, @@ -36,17 +42,18 @@ func New(app App, editor *editor.Editor) *Panel { } func (p *Panel) Process() { - selectedInstance, ok := p.app.SelectedInstance() - if !ok { - return + if selectedInstance, ok := p.app.SelectedInstance(); ok { + p.ProcessV(selectedInstance) } +} - imgui.BeginDisabledV(!dm.IsMovable(selectedInstance.Prefab().Path())) - p.showNudgeOption("Nudge X", true, selectedInstance) - p.showNudgeOption("Nudge Y", false, selectedInstance) +func (p *Panel) ProcessV(instance *dmminstance.Instance) { + imgui.BeginDisabledV(!dm.IsMovable(instance.Prefab().Path())) + p.showNudgeOption("Nudge X", true, instance) + p.showNudgeOption("Nudge Y", false, instance) imgui.EndDisabled() - p.showDirOption(selectedInstance) + p.showDirOption(instance) } func (p *Panel) showNudgeOption(label string, xAxis bool, instance *dmminstance.Instance) { diff --git a/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/process.go b/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/process.go index 526b2ee1..5abf1528 100644 --- a/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/process.go +++ b/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/process.go @@ -95,6 +95,12 @@ func (t *TileMenu) showInstanceControls(i *dmminstance.Instance, idx int) w.Layo p := i.Prefab() return w.Layout{ + w.Custom(func() { + if t.app.Prefs().Controls.QuickEditContextMenu { + t.pQuickEdit.ProcessV(i) + imgui.Separator() + } + }), w.Custom(func() { if dm.IsPath(p.Path(), "/obj") || dm.IsPath(p.Path(), "/mob") { w.Layout{ diff --git a/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/tilemenu.go b/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/tilemenu.go index cf43e1b9..b1348f81 100644 --- a/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/tilemenu.go +++ b/src/app/ui/cpwsarea/wsmap/pmap/tilemenu/tilemenu.go @@ -3,7 +3,10 @@ package tilemenu import ( "github.com/SpaiR/imgui-go" "sdmm/app/command" + "sdmm/app/prefs" + "sdmm/app/ui/cpwsarea/wsmap/pmap/pquickedit" "sdmm/app/ui/shortcut" + "sdmm/dmapi/dmenv" "sdmm/dmapi/dmmap" "sdmm/dmapi/dmmap/dmmdata/dmmprefab" "sdmm/dmapi/dmmap/dmminstance" @@ -25,6 +28,11 @@ type App interface { HasSelectedPrefab() bool SelectedPrefab() (*dmmprefab.Prefab, bool) + + SelectedInstance() (*dmminstance.Instance, bool) + + Prefs() prefs.Prefs + LoadedEnvironment() *dmenv.Dme } type editor interface { @@ -38,6 +46,8 @@ type editor interface { InstanceDelete(i *dmminstance.Instance) InstanceReplace(i *dmminstance.Instance, prefab *dmmprefab.Prefab) InstanceReset(i *dmminstance.Instance) + + UpdateCanvasByCoords([]util.Point) } type TileMenu struct { @@ -49,10 +59,12 @@ type TileMenu struct { opened bool tile *dmmap.Tile + + pQuickEdit *pquickedit.Panel } func New(app App, editor editor) *TileMenu { - t := &TileMenu{app: app, editor: editor} + t := &TileMenu{app: app, editor: editor, pQuickEdit: pquickedit.New(app, editor)} t.addShortcuts() return t }