mirror of
https://github.com/vsariola/sointu.git
synced 2025-07-22 23:14:59 -04:00
drafting buttons
This commit is contained in:
parent
64ec5f17f3
commit
9c3274c02e
@ -27,10 +27,6 @@ type (
|
||||
history []widget.Press
|
||||
|
||||
requestClicks int
|
||||
}
|
||||
|
||||
ClickableTip struct {
|
||||
Clickable
|
||||
component.TipArea
|
||||
}
|
||||
|
||||
@ -59,7 +55,7 @@ type (
|
||||
Style ButtonStyle
|
||||
Text string
|
||||
Tip string
|
||||
*ClickableTip
|
||||
*Clickable
|
||||
}
|
||||
|
||||
ActionButton struct {
|
||||
@ -80,7 +76,7 @@ type (
|
||||
Style IconButtonStyle
|
||||
Icon *widget.Icon
|
||||
Tip string
|
||||
*ClickableTip
|
||||
*Clickable
|
||||
}
|
||||
|
||||
ActionIconButton struct {
|
||||
@ -98,17 +94,17 @@ type (
|
||||
}
|
||||
)
|
||||
|
||||
func Btn(th *Theme, st *ButtonStyle, b *ClickableTip, txt string, tip string) Button {
|
||||
func Btn(th *Theme, st *ButtonStyle, b *Clickable, txt string, tip string) Button {
|
||||
return Button{
|
||||
Theme: th,
|
||||
Style: *st,
|
||||
ClickableTip: b,
|
||||
Text: txt,
|
||||
Tip: tip,
|
||||
Theme: th,
|
||||
Style: *st,
|
||||
Clickable: b,
|
||||
Text: txt,
|
||||
Tip: tip,
|
||||
}
|
||||
}
|
||||
|
||||
func ActionBtn(act tracker.Action, th *Theme, b *ClickableTip, txt string, tip string) ActionButton {
|
||||
func ActionBtn(act tracker.Action, th *Theme, b *Clickable, txt string, tip string) ActionButton {
|
||||
return ActionButton{
|
||||
act: act,
|
||||
DisabledStyle: th.Button.Disabled,
|
||||
@ -116,7 +112,7 @@ func ActionBtn(act tracker.Action, th *Theme, b *ClickableTip, txt string, tip s
|
||||
}
|
||||
}
|
||||
|
||||
func ToggleBtn(b tracker.Bool, th *Theme, c *ClickableTip, text string, tip string) ToggleButton {
|
||||
func ToggleBtn(b tracker.Bool, th *Theme, c *Clickable, text string, tip string) ToggleButton {
|
||||
return ToggleButton{
|
||||
b: b,
|
||||
DisabledStyle: th.Button.Disabled,
|
||||
@ -125,17 +121,17 @@ func ToggleBtn(b tracker.Bool, th *Theme, c *ClickableTip, text string, tip stri
|
||||
}
|
||||
}
|
||||
|
||||
func IconBtn(th *Theme, st *IconButtonStyle, b *ClickableTip, icon []byte, tip string) IconButton {
|
||||
func IconBtn(th *Theme, st *IconButtonStyle, b *Clickable, icon []byte, tip string) IconButton {
|
||||
return IconButton{
|
||||
Theme: th,
|
||||
Style: *st,
|
||||
ClickableTip: b,
|
||||
Icon: th.Icon(icon),
|
||||
Tip: tip,
|
||||
Theme: th,
|
||||
Style: *st,
|
||||
Clickable: b,
|
||||
Icon: th.Icon(icon),
|
||||
Tip: tip,
|
||||
}
|
||||
}
|
||||
|
||||
func ActionIconBtn(act tracker.Action, th *Theme, b *ClickableTip, icon []byte, tip string) ActionIconButton {
|
||||
func ActionIconBtn(act tracker.Action, th *Theme, b *Clickable, icon []byte, tip string) ActionIconButton {
|
||||
return ActionIconButton{
|
||||
act: act,
|
||||
DisabledStyle: th.IconButton.Disabled,
|
||||
@ -143,7 +139,7 @@ func ActionIconBtn(act tracker.Action, th *Theme, b *ClickableTip, icon []byte,
|
||||
}
|
||||
}
|
||||
|
||||
func ToggleIconBtn(b tracker.Bool, th *Theme, c *ClickableTip, offIcon, onIcon []byte, offTip, onTip string) ToggleIconButton {
|
||||
func ToggleIconBtn(b tracker.Bool, th *Theme, c *Clickable, offIcon, onIcon []byte, offTip, onTip string) ToggleIconButton {
|
||||
return ToggleIconButton{
|
||||
b: b,
|
||||
DisabledStyle: th.IconButton.Disabled,
|
||||
@ -155,7 +151,7 @@ func ToggleIconBtn(b tracker.Bool, th *Theme, c *ClickableTip, offIcon, onIcon [
|
||||
|
||||
func (b *Button) Layout(gtx C) D {
|
||||
if b.Tip != "" {
|
||||
return b.ClickableTip.TipArea.Layout(gtx, Tooltip(b.Theme, b.Tip), b.actualLayout)
|
||||
return b.Clickable.TipArea.Layout(gtx, Tooltip(b.Theme, b.Tip), b.actualLayout)
|
||||
}
|
||||
return b.actualLayout(gtx)
|
||||
}
|
||||
@ -218,7 +214,7 @@ func (b *ToggleButton) Layout(gtx C) D {
|
||||
|
||||
func (i *IconButton) Layout(gtx C) D {
|
||||
if i.Tip != "" {
|
||||
return i.ClickableTip.TipArea.Layout(gtx, Tooltip(i.Theme, i.Tip), i.actualLayout)
|
||||
return i.Clickable.TipArea.Layout(gtx, Tooltip(i.Theme, i.Tip), i.actualLayout)
|
||||
}
|
||||
return i.actualLayout(gtx)
|
||||
}
|
||||
|
@ -23,19 +23,19 @@ import (
|
||||
|
||||
type (
|
||||
InstrumentEditor struct {
|
||||
newInstrumentBtn *ClickableTip
|
||||
enlargeBtn *ClickableTip
|
||||
deleteInstrumentBtn *ClickableTip
|
||||
linkInstrTrackBtn *ClickableTip
|
||||
splitInstrumentBtn *ClickableTip
|
||||
copyInstrumentBtn *ClickableTip
|
||||
saveInstrumentBtn *ClickableTip
|
||||
loadInstrumentBtn *ClickableTip
|
||||
addUnitBtn *ClickableTip
|
||||
presetMenuBtn *ClickableTip
|
||||
commentExpandBtn *ClickableTip
|
||||
soloBtn *ClickableTip
|
||||
muteBtn *ClickableTip
|
||||
newInstrumentBtn *Clickable
|
||||
enlargeBtn *Clickable
|
||||
deleteInstrumentBtn *Clickable
|
||||
linkInstrTrackBtn *Clickable
|
||||
splitInstrumentBtn *Clickable
|
||||
copyInstrumentBtn *Clickable
|
||||
saveInstrumentBtn *Clickable
|
||||
loadInstrumentBtn *Clickable
|
||||
addUnitBtn *Clickable
|
||||
presetMenuBtn *Clickable
|
||||
commentExpandBtn *Clickable
|
||||
soloBtn *Clickable
|
||||
muteBtn *Clickable
|
||||
commentEditor *Editor
|
||||
commentString tracker.String
|
||||
nameEditor *Editor
|
||||
@ -68,19 +68,19 @@ type (
|
||||
|
||||
func NewInstrumentEditor(model *tracker.Model) *InstrumentEditor {
|
||||
ret := &InstrumentEditor{
|
||||
newInstrumentBtn: new(ClickableTip),
|
||||
enlargeBtn: new(ClickableTip),
|
||||
deleteInstrumentBtn: new(ClickableTip),
|
||||
linkInstrTrackBtn: new(ClickableTip),
|
||||
splitInstrumentBtn: new(ClickableTip),
|
||||
copyInstrumentBtn: new(ClickableTip),
|
||||
saveInstrumentBtn: new(ClickableTip),
|
||||
loadInstrumentBtn: new(ClickableTip),
|
||||
commentExpandBtn: new(ClickableTip),
|
||||
presetMenuBtn: new(ClickableTip),
|
||||
soloBtn: new(ClickableTip),
|
||||
muteBtn: new(ClickableTip),
|
||||
addUnitBtn: new(ClickableTip),
|
||||
newInstrumentBtn: new(Clickable),
|
||||
enlargeBtn: new(Clickable),
|
||||
deleteInstrumentBtn: new(Clickable),
|
||||
linkInstrTrackBtn: new(Clickable),
|
||||
splitInstrumentBtn: new(Clickable),
|
||||
copyInstrumentBtn: new(Clickable),
|
||||
saveInstrumentBtn: new(Clickable),
|
||||
loadInstrumentBtn: new(Clickable),
|
||||
commentExpandBtn: new(Clickable),
|
||||
presetMenuBtn: new(Clickable),
|
||||
soloBtn: new(Clickable),
|
||||
muteBtn: new(Clickable),
|
||||
addUnitBtn: new(Clickable),
|
||||
commentEditor: NewEditor(false, false, text.Start),
|
||||
nameEditor: NewEditor(true, true, text.Middle),
|
||||
searchEditor: NewEditor(true, true, text.Start),
|
||||
@ -133,8 +133,8 @@ func (ie *InstrumentEditor) Focused(gtx C) bool {
|
||||
func (ie *InstrumentEditor) childFocused(gtx C) bool {
|
||||
return ie.unitEditor.sliderList.Focused(gtx) ||
|
||||
ie.instrumentDragList.Focused(gtx) || gtx.Source.Focused(ie.commentEditor) || gtx.Source.Focused(ie.nameEditor) || gtx.Source.Focused(ie.searchEditor) ||
|
||||
gtx.Source.Focused(ie.addUnitBtn.Clickable) || gtx.Source.Focused(ie.commentExpandBtn.Clickable) || gtx.Source.Focused(ie.presetMenuBtn.Clickable) ||
|
||||
gtx.Source.Focused(ie.deleteInstrumentBtn.Clickable) || gtx.Source.Focused(ie.copyInstrumentBtn.Clickable)
|
||||
gtx.Source.Focused(ie.addUnitBtn) || gtx.Source.Focused(ie.commentExpandBtn) || gtx.Source.Focused(ie.presetMenuBtn) ||
|
||||
gtx.Source.Focused(ie.deleteInstrumentBtn) || gtx.Source.Focused(ie.copyInstrumentBtn)
|
||||
}
|
||||
|
||||
func (ie *InstrumentEditor) Layout(gtx C, t *Tracker) D {
|
||||
@ -192,14 +192,14 @@ func (ie *InstrumentEditor) layoutInstrumentHeader(gtx C, t *Tracker) D {
|
||||
header := func(gtx C) D {
|
||||
m := PopupMenu(t.Theme, &t.Theme.Menu.Text, &ie.presetMenu)
|
||||
|
||||
for ie.copyInstrumentBtn.Clickable.Clicked(gtx) {
|
||||
for ie.copyInstrumentBtn.Clicked(gtx) {
|
||||
if contents, ok := t.Instruments().List().CopyElements(); ok {
|
||||
gtx.Execute(clipboard.WriteCmd{Type: "application/text", Data: io.NopCloser(bytes.NewReader(contents))})
|
||||
t.Alerts().Add("Instrument copied to clipboard", tracker.Info)
|
||||
}
|
||||
}
|
||||
|
||||
for ie.saveInstrumentBtn.Clickable.Clicked(gtx) {
|
||||
for ie.saveInstrumentBtn.Clicked(gtx) {
|
||||
writer, err := t.Explorer.CreateFile(t.InstrumentName().Value() + ".yml")
|
||||
if err != nil {
|
||||
continue
|
||||
@ -207,7 +207,7 @@ func (ie *InstrumentEditor) layoutInstrumentHeader(gtx C, t *Tracker) D {
|
||||
t.SaveInstrument(writer)
|
||||
}
|
||||
|
||||
for ie.loadInstrumentBtn.Clickable.Clicked(gtx) {
|
||||
for ie.loadInstrumentBtn.Clicked(gtx) {
|
||||
reader, err := t.Explorer.ChooseFile(".yml", ".json", ".4ki", ".4kp")
|
||||
if err != nil {
|
||||
continue
|
||||
@ -253,7 +253,7 @@ func (ie *InstrumentEditor) layoutInstrumentHeader(gtx C, t *Tracker) D {
|
||||
)
|
||||
}
|
||||
|
||||
for ie.presetMenuBtn.Clickable.Clicked(gtx) {
|
||||
for ie.presetMenuBtn.Clicked(gtx) {
|
||||
ie.presetMenu.Visible = true
|
||||
}
|
||||
|
||||
@ -476,7 +476,7 @@ func (ie *InstrumentEditor) layoutUnitList(gtx C, t *Tracker) D {
|
||||
return dims
|
||||
}),
|
||||
layout.Stacked(func(gtx C) D {
|
||||
for ie.addUnitBtn.Clickable.Clicked(gtx) {
|
||||
for ie.addUnitBtn.Clicked(gtx) {
|
||||
t.AddUnit(false).Do()
|
||||
}
|
||||
margin := layout.Inset{Right: unit.Dp(20), Bottom: unit.Dp(1)}
|
||||
|
@ -161,7 +161,7 @@ func PopupMenu(th *Theme, s *LabelStyle, menu *Menu) MenuStyle {
|
||||
}
|
||||
}
|
||||
|
||||
func (tr *Tracker) layoutMenu(gtx C, title string, ct *ClickableTip, menu *Menu, width unit.Dp, items ...MenuItem) layout.Widget {
|
||||
func (tr *Tracker) layoutMenu(gtx C, title string, ct *Clickable, menu *Menu, width unit.Dp, items ...MenuItem) layout.Widget {
|
||||
for ct.Clicked(gtx) {
|
||||
menu.Visible = true
|
||||
}
|
||||
|
@ -52,18 +52,18 @@ func init() {
|
||||
|
||||
type NoteEditor struct {
|
||||
TrackVoices *NumericUpDown
|
||||
NewTrackBtn *ClickableTip
|
||||
DeleteTrackBtn *ClickableTip
|
||||
SplitTrackBtn *ClickableTip
|
||||
NewTrackBtn *Clickable
|
||||
DeleteTrackBtn *Clickable
|
||||
SplitTrackBtn *Clickable
|
||||
|
||||
AddSemitoneBtn *ClickableTip
|
||||
SubtractSemitoneBtn *ClickableTip
|
||||
AddOctaveBtn *ClickableTip
|
||||
SubtractOctaveBtn *ClickableTip
|
||||
NoteOffBtn *ClickableTip
|
||||
EffectBtn *ClickableTip
|
||||
UniqueBtn *ClickableTip
|
||||
TrackMidiInBtn *ClickableTip
|
||||
AddSemitoneBtn *Clickable
|
||||
SubtractSemitoneBtn *Clickable
|
||||
AddOctaveBtn *Clickable
|
||||
SubtractOctaveBtn *Clickable
|
||||
NoteOffBtn *Clickable
|
||||
EffectBtn *Clickable
|
||||
UniqueBtn *Clickable
|
||||
TrackMidiInBtn *Clickable
|
||||
|
||||
scrollTable *ScrollTable
|
||||
eventFilters []event.Filter
|
||||
@ -77,17 +77,17 @@ type NoteEditor struct {
|
||||
func NewNoteEditor(model *tracker.Model) *NoteEditor {
|
||||
ret := &NoteEditor{
|
||||
TrackVoices: NewNumericUpDown(),
|
||||
NewTrackBtn: new(ClickableTip),
|
||||
DeleteTrackBtn: new(ClickableTip),
|
||||
SplitTrackBtn: new(ClickableTip),
|
||||
AddSemitoneBtn: new(ClickableTip),
|
||||
SubtractSemitoneBtn: new(ClickableTip),
|
||||
AddOctaveBtn: new(ClickableTip),
|
||||
SubtractOctaveBtn: new(ClickableTip),
|
||||
NoteOffBtn: new(ClickableTip),
|
||||
EffectBtn: new(ClickableTip),
|
||||
UniqueBtn: new(ClickableTip),
|
||||
TrackMidiInBtn: new(ClickableTip),
|
||||
NewTrackBtn: new(Clickable),
|
||||
DeleteTrackBtn: new(Clickable),
|
||||
SplitTrackBtn: new(Clickable),
|
||||
AddSemitoneBtn: new(Clickable),
|
||||
SubtractSemitoneBtn: new(Clickable),
|
||||
AddOctaveBtn: new(Clickable),
|
||||
SubtractOctaveBtn: new(Clickable),
|
||||
NoteOffBtn: new(Clickable),
|
||||
EffectBtn: new(Clickable),
|
||||
UniqueBtn: new(Clickable),
|
||||
TrackMidiInBtn: new(Clickable),
|
||||
scrollTable: NewScrollTable(
|
||||
model.Notes().Table(),
|
||||
model.Tracks().List(),
|
||||
|
@ -17,8 +17,8 @@ import (
|
||||
|
||||
type (
|
||||
OscilloscopeState struct {
|
||||
onceBtn *ClickableTip
|
||||
wrapBtn *ClickableTip
|
||||
onceBtn *Clickable
|
||||
wrapBtn *Clickable
|
||||
lengthInBeatsNumber *NumericUpDown
|
||||
triggerChannelNumber *NumericUpDown
|
||||
xScale int
|
||||
@ -38,8 +38,8 @@ type (
|
||||
|
||||
func NewOscilloscope(model *tracker.Model) *OscilloscopeState {
|
||||
return &OscilloscopeState{
|
||||
onceBtn: new(ClickableTip),
|
||||
wrapBtn: new(ClickableTip),
|
||||
onceBtn: new(Clickable),
|
||||
wrapBtn: new(Clickable),
|
||||
lengthInBeatsNumber: NewNumericUpDown(),
|
||||
triggerChannelNumber: NewNumericUpDown(),
|
||||
}
|
||||
|
@ -22,8 +22,8 @@ type SongPanel struct {
|
||||
LoudnessExpander *Expander
|
||||
PeakExpander *Expander
|
||||
|
||||
WeightingTypeBtn *ClickableTip
|
||||
OversamplingBtn *ClickableTip
|
||||
WeightingTypeBtn *Clickable
|
||||
OversamplingBtn *Clickable
|
||||
|
||||
BPM *NumericUpDown
|
||||
RowsPerPattern *NumericUpDown
|
||||
@ -48,8 +48,8 @@ func NewSongPanel(model *tracker.Model) *SongPanel {
|
||||
MenuBar: NewMenuBar(model),
|
||||
PlayBar: NewPlayBar(),
|
||||
|
||||
WeightingTypeBtn: new(ClickableTip),
|
||||
OversamplingBtn: new(ClickableTip),
|
||||
WeightingTypeBtn: new(Clickable),
|
||||
OversamplingBtn: new(Clickable),
|
||||
|
||||
SongSettingsExpander: &Expander{Expanded: true},
|
||||
ScopeExpander: &Expander{},
|
||||
@ -296,7 +296,7 @@ func (e *Expander) layoutHeader(gtx C, th *Theme, title string, smallWidget layo
|
||||
}
|
||||
|
||||
type MenuBar struct {
|
||||
Clickables []ClickableTip
|
||||
Clickables []Clickable
|
||||
Menus []Menu
|
||||
|
||||
fileMenuItems []MenuItem
|
||||
@ -304,14 +304,14 @@ type MenuBar struct {
|
||||
midiMenuItems []MenuItem
|
||||
|
||||
panicHint string
|
||||
PanicBtn *ClickableTip
|
||||
PanicBtn *Clickable
|
||||
}
|
||||
|
||||
func NewMenuBar(model *tracker.Model) *MenuBar {
|
||||
ret := &MenuBar{
|
||||
Clickables: make([]ClickableTip, 3),
|
||||
Clickables: make([]Clickable, 3),
|
||||
Menus: make([]Menu, 3),
|
||||
PanicBtn: new(ClickableTip),
|
||||
PanicBtn: new(Clickable),
|
||||
panicHint: makeHint("Panic", " (%s)", "PanicToggle"),
|
||||
}
|
||||
ret.fileMenuItems = []MenuItem{
|
||||
@ -359,11 +359,11 @@ func (t *MenuBar) Layout(gtx C, tr *Tracker) D {
|
||||
}
|
||||
|
||||
type PlayBar struct {
|
||||
RewindBtn *ClickableTip
|
||||
PlayingBtn *ClickableTip
|
||||
RecordBtn *ClickableTip
|
||||
FollowBtn *ClickableTip
|
||||
LoopBtn *ClickableTip
|
||||
RewindBtn *Clickable
|
||||
PlayingBtn *Clickable
|
||||
RecordBtn *Clickable
|
||||
FollowBtn *Clickable
|
||||
LoopBtn *Clickable
|
||||
// Hints
|
||||
rewindHint string
|
||||
playHint, stopHint string
|
||||
@ -374,11 +374,11 @@ type PlayBar struct {
|
||||
|
||||
func NewPlayBar() *PlayBar {
|
||||
ret := &PlayBar{
|
||||
LoopBtn: new(ClickableTip),
|
||||
RecordBtn: new(ClickableTip),
|
||||
FollowBtn: new(ClickableTip),
|
||||
PlayingBtn: new(ClickableTip),
|
||||
RewindBtn: new(ClickableTip),
|
||||
LoopBtn: new(Clickable),
|
||||
RecordBtn: new(Clickable),
|
||||
FollowBtn: new(Clickable),
|
||||
PlayingBtn: new(Clickable),
|
||||
RewindBtn: new(Clickable),
|
||||
}
|
||||
ret.rewindHint = makeHint("Rewind", "\n(%s)", "PlaySongStartUnfollow")
|
||||
ret.playHint = makeHint("Play", " (%s)", "PlayCurrentPosUnfollow")
|
||||
|
@ -30,10 +30,10 @@ type UnitEditor struct {
|
||||
sliderList *DragList
|
||||
searchList *DragList
|
||||
Parameters []*ParameterWidget
|
||||
DeleteUnitBtn *ClickableTip
|
||||
CopyUnitBtn *ClickableTip
|
||||
ClearUnitBtn *ClickableTip
|
||||
DisableUnitBtn *ClickableTip
|
||||
DeleteUnitBtn *Clickable
|
||||
CopyUnitBtn *Clickable
|
||||
ClearUnitBtn *Clickable
|
||||
DisableUnitBtn *Clickable
|
||||
SelectTypeBtn *Clickable
|
||||
commentEditor *Editor
|
||||
caser cases.Caser
|
||||
@ -45,10 +45,10 @@ type UnitEditor struct {
|
||||
|
||||
func NewUnitEditor(m *tracker.Model) *UnitEditor {
|
||||
ret := &UnitEditor{
|
||||
DeleteUnitBtn: new(ClickableTip),
|
||||
ClearUnitBtn: new(ClickableTip),
|
||||
DisableUnitBtn: new(ClickableTip),
|
||||
CopyUnitBtn: new(ClickableTip),
|
||||
DeleteUnitBtn: new(Clickable),
|
||||
ClearUnitBtn: new(Clickable),
|
||||
DisableUnitBtn: new(Clickable),
|
||||
CopyUnitBtn: new(Clickable),
|
||||
SelectTypeBtn: new(Clickable),
|
||||
commentEditor: NewEditor(true, true, text.Start),
|
||||
sliderList: NewDragList(m.Params().List(), layout.Vertical),
|
||||
@ -127,7 +127,7 @@ func (pe *UnitEditor) layoutSliders(gtx C, t *Tracker) D {
|
||||
}
|
||||
|
||||
func (pe *UnitEditor) layoutFooter(gtx C, t *Tracker) D {
|
||||
for pe.CopyUnitBtn.Clickable.Clicked(gtx) {
|
||||
for pe.CopyUnitBtn.Clicked(gtx) {
|
||||
if contents, ok := t.Units().List().CopyElements(); ok {
|
||||
gtx.Execute(clipboard.WriteCmd{Type: "application/text", Data: io.NopCloser(bytes.NewReader(contents))})
|
||||
t.Alerts().Add("Unit copied to clipboard", tracker.Info)
|
||||
@ -223,9 +223,9 @@ func (pe *UnitEditor) command(e key.Event, t *Tracker) {
|
||||
type ParameterWidget struct {
|
||||
floatWidget widget.Float
|
||||
boolWidget widget.Bool
|
||||
instrBtn ClickableTip
|
||||
instrBtn Clickable
|
||||
instrMenu Menu
|
||||
unitBtn ClickableTip
|
||||
unitBtn Clickable
|
||||
unitMenu Menu
|
||||
Parameter tracker.Parameter
|
||||
tipArea component.TipArea
|
||||
|
Reference in New Issue
Block a user