mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
feat: focus search editor after "add unit"
This commit is contained in:
parent
8d7d896375
commit
639b2266e3
@ -141,7 +141,7 @@ func (m *Model) SplitInstrument() Action {
|
|||||||
|
|
||||||
func (m *Model) AddUnit(before bool) Action {
|
func (m *Model) AddUnit(before bool) Action {
|
||||||
return Allow(func() {
|
return Allow(func() {
|
||||||
defer (*Model)(m).change("AddUnitAction", PatchChange, MajorChange)()
|
defer m.change("AddUnitAction", PatchChange, MajorChange)()
|
||||||
if len(m.d.Song.Patch) == 0 { // no instruments, add one
|
if len(m.d.Song.Patch) == 0 { // no instruments, add one
|
||||||
instr := sointu.Instrument{NumVoices: 1}
|
instr := sointu.Instrument{NumVoices: 1}
|
||||||
instr.Units = make([]sointu.Unit, 0, 1)
|
instr.Units = make([]sointu.Unit, 0, 1)
|
||||||
@ -159,12 +159,19 @@ func (m *Model) AddUnit(before bool) Action {
|
|||||||
m.d.UnitIndex2 = m.d.UnitIndex
|
m.d.UnitIndex2 = m.d.UnitIndex
|
||||||
copy(newUnits, instr.Units[:m.d.UnitIndex])
|
copy(newUnits, instr.Units[:m.d.UnitIndex])
|
||||||
copy(newUnits[m.d.UnitIndex+1:], instr.Units[m.d.UnitIndex:])
|
copy(newUnits[m.d.UnitIndex+1:], instr.Units[m.d.UnitIndex:])
|
||||||
(*Model)(m).assignUnitIDs(newUnits[m.d.UnitIndex : m.d.UnitIndex+1])
|
m.assignUnitIDs(newUnits[m.d.UnitIndex : m.d.UnitIndex+1])
|
||||||
m.d.Song.Patch[m.d.InstrIndex].Units = newUnits
|
m.d.Song.Patch[m.d.InstrIndex].Units = newUnits
|
||||||
m.d.ParamIndex = 0
|
m.d.ParamIndex = 0
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Model) AddUnitAndThen(callback func()) Action {
|
||||||
|
return Allow(func() {
|
||||||
|
m.AddUnit(false).Do()
|
||||||
|
callback()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Model) DeleteUnit() Action {
|
func (m *Model) DeleteUnit() Action {
|
||||||
return Action{
|
return Action{
|
||||||
allowed: func() bool {
|
allowed: func() bool {
|
||||||
|
@ -13,8 +13,9 @@ type (
|
|||||||
// application while editing (particularly: to prevent triggering notes
|
// application while editing (particularly: to prevent triggering notes
|
||||||
// while editing).
|
// while editing).
|
||||||
Editor struct {
|
Editor struct {
|
||||||
Editor widget.Editor
|
Editor widget.Editor
|
||||||
filters []event.Filter
|
filters []event.Filter
|
||||||
|
requestFocus bool
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorStyle material.EditorStyle
|
EditorStyle material.EditorStyle
|
||||||
@ -76,6 +77,10 @@ func (e *Editor) Cancelled(gtx C) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Editor) Focus() {
|
||||||
|
e.requestFocus = true
|
||||||
|
}
|
||||||
|
|
||||||
func (e *EditorStyle) Layout(gtx C) D {
|
func (e *EditorStyle) Layout(gtx C) D {
|
||||||
return material.EditorStyle(*e).Layout(gtx)
|
return material.EditorStyle(*e).Layout(gtx)
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,6 @@ func NewInstrumentEditor(model *tracker.Model) *InstrumentEditor {
|
|||||||
copyInstrumentBtn: new(TipClickable),
|
copyInstrumentBtn: new(TipClickable),
|
||||||
saveInstrumentBtn: new(TipClickable),
|
saveInstrumentBtn: new(TipClickable),
|
||||||
loadInstrumentBtn: new(TipClickable),
|
loadInstrumentBtn: new(TipClickable),
|
||||||
addUnitBtn: NewActionClickable(model.AddUnit(false)),
|
|
||||||
commentExpandBtn: NewBoolClickable(model.CommentExpanded().Bool()),
|
commentExpandBtn: NewBoolClickable(model.CommentExpanded().Bool()),
|
||||||
presetMenuBtn: new(TipClickable),
|
presetMenuBtn: new(TipClickable),
|
||||||
soloBtn: NewBoolClickable(model.Solo().Bool()),
|
soloBtn: NewBoolClickable(model.Solo().Bool()),
|
||||||
@ -91,6 +90,7 @@ func NewInstrumentEditor(model *tracker.Model) *InstrumentEditor {
|
|||||||
ret.presetMenuItems = append(ret.presetMenuItems, MenuItem{Text: name, IconBytes: icons.ImageAudiotrack, Doer: model.LoadPreset(index)})
|
ret.presetMenuItems = append(ret.presetMenuItems, MenuItem{Text: name, IconBytes: icons.ImageAudiotrack, Doer: model.LoadPreset(index)})
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
ret.addUnitBtn = NewActionClickable(model.AddUnitAndThen(func() { ret.searchEditor.Focus() }))
|
||||||
ret.enlargeHint = makeHint("Enlarge", " (%s)", "InstrEnlargedToggle")
|
ret.enlargeHint = makeHint("Enlarge", " (%s)", "InstrEnlargedToggle")
|
||||||
ret.shrinkHint = makeHint("Shrink", " (%s)", "InstrEnlargedToggle")
|
ret.shrinkHint = makeHint("Shrink", " (%s)", "InstrEnlargedToggle")
|
||||||
ret.addInstrumentHint = makeHint("Add\ninstrument", "\n(%s)", "AddInstrument")
|
ret.addInstrumentHint = makeHint("Add\ninstrument", "\n(%s)", "AddInstrument")
|
||||||
@ -383,6 +383,12 @@ func (ie *InstrumentEditor) layoutUnitList(gtx C, t *Tracker) D {
|
|||||||
}
|
}
|
||||||
count := min(ie.unitDragList.TrackerList.Count(), 256)
|
count := min(ie.unitDragList.TrackerList.Count(), 256)
|
||||||
|
|
||||||
|
if ie.searchEditor.requestFocus {
|
||||||
|
// for now, only the searchEditor has its requestFocus flag
|
||||||
|
ie.searchEditor.requestFocus = false
|
||||||
|
gtx.Execute(key.FocusCmd{Tag: &ie.searchEditor.Editor})
|
||||||
|
}
|
||||||
|
|
||||||
element := func(gtx C, i int) D {
|
element := func(gtx C, i int) D {
|
||||||
gtx.Constraints.Max.Y = gtx.Dp(20)
|
gtx.Constraints.Max.Y = gtx.Dp(20)
|
||||||
gtx.Constraints.Min.Y = gtx.Constraints.Max.Y
|
gtx.Constraints.Min.Y = gtx.Constraints.Max.Y
|
||||||
|
Loading…
Reference in New Issue
Block a user