mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-25 18:00:37 -04:00
fix(tracker): unit searching to work more reliably
This commit is contained in:
parent
db6c9f6052
commit
2b3f6d8200
@ -133,7 +133,6 @@ func (m *Model) AddUnit(before bool) Action {
|
||||
(*Model)(m).assignUnitIDs(newUnits[m.d.UnitIndex : m.d.UnitIndex+1])
|
||||
m.d.Song.Patch[m.d.InstrIndex].Units = newUnits
|
||||
m.d.ParamIndex = 0
|
||||
m.d.UnitSearchString = ""
|
||||
})
|
||||
}
|
||||
|
||||
@ -145,7 +144,6 @@ func (m *Model) DeleteUnit() Action {
|
||||
do: func() {
|
||||
defer (*Model)(m).change("DeleteUnitAction", PatchChange, MajorChange)()
|
||||
m.Units().List().DeleteElements(true)
|
||||
m.d.UnitSearchString = m.Units().SelectedType()
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -156,7 +154,6 @@ func (m *Model) ClearUnit() Action {
|
||||
defer (*Model)(m).change("DeleteUnitAction", PatchChange, MajorChange)()
|
||||
m.d.UnitIndex = intMax(intMin(m.d.UnitIndex, len(m.d.Song.Patch[m.d.InstrIndex].Units)-1), 0)
|
||||
m.d.Song.Patch[m.d.InstrIndex].Units[m.d.UnitIndex] = sointu.Unit{}
|
||||
m.d.UnitSearchString = ""
|
||||
},
|
||||
allowed: func() bool {
|
||||
return m.d.InstrIndex >= 0 &&
|
||||
|
@ -18,6 +18,7 @@ type (
|
||||
Effect Model
|
||||
CommentExpanded Model
|
||||
NoteTracking Model
|
||||
UnitSearching Model
|
||||
)
|
||||
|
||||
func (v Bool) Toggle() {
|
||||
@ -39,6 +40,7 @@ func (m *Model) InstrEnlarged() *InstrEnlarged { return (*InstrEnlarged)(m)
|
||||
func (m *Model) Effect() *Effect { return (*Effect)(m) }
|
||||
func (m *Model) CommentExpanded() *CommentExpanded { return (*CommentExpanded)(m) }
|
||||
func (m *Model) NoteTracking() *NoteTracking { return (*NoteTracking)(m) }
|
||||
func (m *Model) UnitSearching() *UnitSearching { return (*UnitSearching)(m) }
|
||||
|
||||
// Panic methods
|
||||
|
||||
@ -112,3 +114,15 @@ func (m *Effect) setValue(val bool) {
|
||||
m.d.Song.Score.Tracks[m.d.Cursor.Track].Effect = val
|
||||
}
|
||||
func (m *Effect) Enabled() bool { return true }
|
||||
|
||||
// UnitSearching methods
|
||||
|
||||
func (m *UnitSearching) Bool() Bool { return Bool{m} }
|
||||
func (m *UnitSearching) Value() bool { return m.d.UnitSearching }
|
||||
func (m *UnitSearching) setValue(val bool) {
|
||||
m.d.UnitSearching = val
|
||||
if !val {
|
||||
m.d.UnitSearchString = ""
|
||||
}
|
||||
}
|
||||
func (m *UnitSearching) Enabled() bool { return true }
|
||||
|
@ -373,6 +373,7 @@ func (ie *InstrumentEditor) layoutUnitList(gtx C, t *Tracker) D {
|
||||
}
|
||||
}
|
||||
t.Units().SetSelectedType(txt)
|
||||
t.UnitSearching().Bool().Set(false)
|
||||
continue
|
||||
}
|
||||
}
|
||||
@ -384,12 +385,18 @@ func (ie *InstrumentEditor) layoutUnitList(gtx C, t *Tracker) D {
|
||||
|
||||
defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop()
|
||||
key.InputOp{Tag: &ie.searchEditor, Keys: globalKeys}.Add(gtx.Ops)
|
||||
txt := u.Type
|
||||
str := tracker.String{StringData: (*tracker.UnitSearch)(t.Model)}
|
||||
if ie.searchEditor.Text() != str.Value() {
|
||||
ie.searchEditor.SetText(str.Value())
|
||||
if t.UnitSearching().Value() {
|
||||
txt = str.Value()
|
||||
}
|
||||
if ie.searchEditor.Text() != txt {
|
||||
ie.searchEditor.SetText(txt)
|
||||
}
|
||||
ret := editor.Layout(gtx)
|
||||
str.Set(ie.searchEditor.Text())
|
||||
if ie.searchEditor.Text() != txt {
|
||||
str.Set(ie.searchEditor.Text())
|
||||
}
|
||||
return ret
|
||||
} else {
|
||||
unitNameLabel := LabelStyle{Text: u.Type, ShadeColor: black, Color: color, Font: labelDefaultFont, FontSize: unit.Sp(12), Shaper: t.Theme.Shaper}
|
||||
|
@ -59,8 +59,8 @@ func (pe *UnitEditor) Layout(gtx C, t *Tracker) D {
|
||||
key.InputOp{Tag: &pe.tag, Keys: "←|Shift-←|→|Shift-→|⎋"}.Add(gtx.Ops)
|
||||
|
||||
editorFunc := pe.layoutSliders
|
||||
str := tracker.String{StringData: (*tracker.UnitSearch)(t.Model)}
|
||||
if str.Value() != t.Model.Units().SelectedType() || pe.sliderList.TrackerList.Count() == 0 {
|
||||
|
||||
if t.UnitSearching().Value() || pe.sliderList.TrackerList.Count() == 0 {
|
||||
editorFunc = pe.layoutUnitTypeChooser
|
||||
}
|
||||
return Surface{Gray: 24, Focus: t.InstrumentEditor.wasFocused}.Layout(gtx, func(gtx C) D {
|
||||
|
@ -209,6 +209,8 @@ func (v *Instruments) SetSelected(value int) {
|
||||
v.d.InstrIndex = intMax(intMin(value, v.Count()-1), 0)
|
||||
v.d.UnitIndex = 0
|
||||
v.d.UnitIndex2 = 0
|
||||
v.d.UnitSearching = false
|
||||
v.d.UnitSearchString = ""
|
||||
}
|
||||
|
||||
func (v *Instruments) SetSelected2(value int) {
|
||||
@ -310,7 +312,6 @@ func (m *Units) SetSelectedType(t string) {
|
||||
return
|
||||
}
|
||||
defer m.change("SetSelectedType", MajorChange)()
|
||||
m.d.UnitSearchString = unit.Type
|
||||
m.d.Song.Patch[m.d.InstrIndex].Units[m.d.UnitIndex] = unit
|
||||
m.d.Song.Patch[m.d.InstrIndex].Units[m.d.UnitIndex].ID = oldUnit.ID // keep the ID of the replaced unit
|
||||
}
|
||||
@ -341,9 +342,8 @@ func (v *Units) SetSelected(value int) {
|
||||
m := (*Model)(v)
|
||||
m.d.UnitIndex = intMax(intMin(value, v.Count()-1), 0)
|
||||
m.d.ParamIndex = 0
|
||||
if m.d.UnitIndex >= 0 && m.d.UnitIndex < len(m.d.Song.Patch[m.d.InstrIndex].Units) {
|
||||
m.d.UnitSearchString = m.d.Song.Patch[m.d.InstrIndex].Units[m.d.UnitIndex].Type
|
||||
}
|
||||
m.d.UnitSearching = false
|
||||
m.d.UnitSearchString = ""
|
||||
}
|
||||
|
||||
func (v *Units) SetSelected2(value int) {
|
||||
|
@ -29,6 +29,7 @@ type (
|
||||
ParamIndex int
|
||||
UnitSearchIndex int
|
||||
UnitSearchString string
|
||||
UnitSearching bool
|
||||
Octave int
|
||||
Step int
|
||||
FilePath string
|
||||
@ -222,6 +223,8 @@ func (m *Model) change(kind string, t ChangeType, severity ChangeSeverity) func(
|
||||
}
|
||||
m.d.UnitIndex = clamp(m.d.UnitIndex, 0, unitCount-1)
|
||||
m.d.UnitIndex2 = clamp(m.d.UnitIndex2, 0, unitCount-1)
|
||||
m.d.UnitSearching = false // if we change anything in the patch, reset the unit searching
|
||||
m.d.UnitSearchString = ""
|
||||
m.send(m.d.Song.Patch.Copy())
|
||||
}
|
||||
if m.changeType&BPMChange != 0 {
|
||||
|
@ -40,9 +40,12 @@ func (v *FilePath) change(kind string) func() { return func() {} }
|
||||
|
||||
// UnitSearchString
|
||||
|
||||
func (v *UnitSearch) String() String { return String{v} }
|
||||
func (v *UnitSearch) Value() string { return v.d.UnitSearchString }
|
||||
func (v *UnitSearch) setValue(value string) { v.d.UnitSearchString = value }
|
||||
func (v *UnitSearch) String() String { return String{v} }
|
||||
func (v *UnitSearch) Value() string { return v.d.UnitSearchString }
|
||||
func (v *UnitSearch) setValue(value string) {
|
||||
v.d.UnitSearchString = value
|
||||
v.d.UnitSearching = true
|
||||
}
|
||||
func (v *UnitSearch) change(kind string) func() { return func() {} }
|
||||
|
||||
// InstrumentNameString
|
||||
|
Loading…
Reference in New Issue
Block a user