Skip to content

Commit

Permalink
Merge pull request #131 from SpaiR/feature/quick-edit-appearance
Browse files Browse the repository at this point in the history
Preferences for Quick Edit menu appearance
  • Loading branch information
SpaiR authored Mar 18, 2022
2 parents fdcc254 + 5d852c0 commit feb43cd
Show file tree
Hide file tree
Showing 8 changed files with 112 additions and 25 deletions.
5 changes: 3 additions & 2 deletions src/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
40 changes: 40 additions & 0 deletions src/app/preferences.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -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"
Expand Down
3 changes: 3 additions & 0 deletions src/app/preferences_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion src/app/prefs/prefs.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ type Interface struct {
}

type Controls struct {
AltScrollBehaviour bool
AltScrollBehaviour bool
QuickEditContextMenu bool
QuickEditMapPane bool
}

type Editor struct {
Expand Down
10 changes: 6 additions & 4 deletions src/app/ui/cpwsarea/wsmap/pmap/pmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -24,6 +25,7 @@ import (

type App interface {
tilemenu.App
pquickedit.App

Prefs() prefs.Prefs

Expand Down Expand Up @@ -80,7 +82,7 @@ type PaneMap struct {

tileMenu *tilemenu.TileMenu

pQuickEdit *panelQuickEdit
pQuickEdit *pquickedit.Panel
pSettings *psettings.Panel

showSettings bool
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -220,8 +222,8 @@ func (p *PaneMap) Process() {
p.showPanelV(
"quickEdit_"+p.dmm.Name,
pPosRightBottom,
p.active && p.app.HasSelectedInstance(),
p.pQuickEdit.process,
p.app.Prefs().Controls.QuickEditMapPane && p.active && p.app.HasSelectedInstance(),
p.pQuickEdit.Process,
)
p.showPanel("canvasStat_"+p.dmm.Name, pPosBottom, p.showStatusPanel)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package pmap
package pquickedit

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"
"sdmm/dmapi/dmicon"
"sdmm/dmapi/dmmap"
"sdmm/dmapi/dmmap/dmmdata/dmmprefab"
Expand All @@ -16,26 +16,47 @@ import (
"strconv"
)

type panelQuickEdit struct {
type App interface {
Prefs() prefs.Prefs
LoadedEnvironment() *dmenv.Dme
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 (p *panelQuickEdit) process() {
selectedInstance, ok := p.app.SelectedInstance()
if !ok {
return
func New(app App, editor editor) *Panel {
return &Panel{
app: app,
editor: editor,
}
}

func (p *Panel) Process() {
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 *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 {
Expand Down Expand Up @@ -99,7 +120,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())
Expand Down Expand Up @@ -130,19 +151,19 @@ 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)
instance.SetPrefab(dmmprefab.New(dmmprefab.IdNone, instance.Prefab().Path(), vars))
}
}

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)
Expand Down
6 changes: 6 additions & 0 deletions src/app/ui/cpwsarea/wsmap/pmap/tilemenu/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down
14 changes: 13 additions & 1 deletion src/app/ui/cpwsarea/wsmap/pmap/tilemenu/tilemenu.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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
}
Expand Down

0 comments on commit feb43cd

Please sign in to comment.