Created a devices service and moved the CDashDisplay service to the sahdow realm
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"esdi/devices/cdashdisplay"
|
||||
helper "esdi/helpers"
|
||||
|
||||
"github.com/gdamore/tcell/v2"
|
||||
)
|
||||
|
||||
type ManipMode int
|
||||
|
||||
const (
|
||||
moveMode ManipMode = iota
|
||||
resizeMode
|
||||
)
|
||||
|
||||
type modeHandler func(*tcell.EventKey) *tcell.EventKey
|
||||
|
||||
type windowManipState struct {
|
||||
Mode ManipMode
|
||||
}
|
||||
|
||||
func keyToVector(r rune) (helper.Vector, bool) {
|
||||
var mult uint16 = 1
|
||||
|
||||
// Is uppercase? For fast movement
|
||||
if r >= 'A' && r <= 'Z' {
|
||||
mult = 10
|
||||
r += 'a' - 'A'
|
||||
}
|
||||
|
||||
switch r {
|
||||
case 'h':
|
||||
return helper.Vector{DX: -mult, DY: 0}, true
|
||||
case 'j':
|
||||
return helper.Vector{DX: 0, DY: mult}, true
|
||||
case 'k':
|
||||
return helper.Vector{DX: 0, DY: -mult}, true
|
||||
case 'l':
|
||||
return helper.Vector{DX: mult, DY: 0}, true
|
||||
}
|
||||
|
||||
return helper.Vector{}, false
|
||||
}
|
||||
|
||||
func (lc *LayoutController) handleMovementCapture(idx int16,
|
||||
ev *tcell.EventKey,
|
||||
) *tcell.EventKey {
|
||||
vec, ok := keyToVector(ev.Rune())
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Acquire the cdashdisplay
|
||||
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
|
||||
if err != nil {
|
||||
lc.Messages <- "failed to get " + cdashdisplay.Name
|
||||
return nil
|
||||
}
|
||||
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
|
||||
if !ok {
|
||||
lc.Messages <- "failed to acquire " + cdashdisplay.Name
|
||||
return nil
|
||||
}
|
||||
// ---
|
||||
|
||||
err = display.MoveWindow(idx, &vec)
|
||||
if err != nil {
|
||||
lc.Messages <- "failed to move window: " + err.Error() + "\n"
|
||||
return nil
|
||||
}
|
||||
|
||||
// Success - update the form
|
||||
window := display.State.Layout.Windows[idx]
|
||||
lc.LayoutToolView.UpdateFormView(idx, window)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (lc *LayoutController) handleResizeCapture(idx int16,
|
||||
ev *tcell.EventKey,
|
||||
) *tcell.EventKey {
|
||||
vec, ok := keyToVector(ev.Rune())
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Acquire the cdashdisplay
|
||||
displayIF, err := lc.DevService.GetDevice(cdashdisplay.Name)
|
||||
if err != nil {
|
||||
lc.Messages <- "failed to get " + cdashdisplay.Name
|
||||
return nil
|
||||
}
|
||||
display, ok := displayIF.(*cdashdisplay.CDashDisplay)
|
||||
if !ok {
|
||||
lc.Messages <- "failed to acquire " + cdashdisplay.Name
|
||||
return nil
|
||||
}
|
||||
// ---
|
||||
|
||||
err = display.ResizeWindow(idx, &vec)
|
||||
if err != nil {
|
||||
lc.Messages <- "failed to resize window: " + err.Error() + "\n"
|
||||
return nil
|
||||
}
|
||||
|
||||
// Success - update the form
|
||||
window := display.State.Layout.Windows[idx]
|
||||
lc.LayoutToolView.UpdateFormView(idx, window)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *windowManipState) CurrentHandler(lc *LayoutController, idx int16) modeHandler {
|
||||
switch s.Mode {
|
||||
case moveMode:
|
||||
return func(ev *tcell.EventKey) *tcell.EventKey {
|
||||
return lc.handleMovementCapture(idx, ev)
|
||||
}
|
||||
case resizeMode:
|
||||
return func(ev *tcell.EventKey) *tcell.EventKey {
|
||||
return lc.handleResizeCapture(idx, ev)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user