109 lines
4.6 KiB
Go
109 lines
4.6 KiB
Go
package field
|
|
|
|
import (
|
|
"image/color"
|
|
)
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// MARK STRUCTURE //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
type Mark struct {
|
|
Cell *Cell
|
|
Change *Change
|
|
color color.Color
|
|
}
|
|
|
|
func (m *Mark) GetColor() color.Color {
|
|
return m.color
|
|
}
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// CHANGE_ACTION TYPE //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
type ChangeAction int
|
|
|
|
const (
|
|
ActionSetNumber = iota
|
|
ActionSetNote
|
|
ActionRemoveNumber
|
|
ActionRemoveNote
|
|
)
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// CHANGE STRUCTURE //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
type ExternalChange struct {
|
|
Cell *Cell
|
|
Marks []Mark
|
|
Action ChangeAction
|
|
Value int
|
|
From int
|
|
TriggerdBy string //strategy or manuell
|
|
}
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// CHANGE STRUCTURE //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
type Change struct {
|
|
Cell *Cell
|
|
marks []Mark
|
|
action ChangeAction
|
|
value int
|
|
from int
|
|
triggerdBy string //strategy or manuell
|
|
}
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// GETTER //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
func (c *Change) GetMarks() []Mark {
|
|
return c.marks
|
|
}
|
|
|
|
func (c *Change) GetAction() ChangeAction {
|
|
return c.action
|
|
}
|
|
|
|
func (c *Change) GetTo() int {
|
|
return c.value
|
|
}
|
|
|
|
func (c *Change) GetFrom() int {
|
|
return c.from
|
|
}
|
|
|
|
func (c *Change) GetTriggeredBy() string {
|
|
return c.triggerdBy
|
|
}
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// ??? //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
func (c *Change) do() {
|
|
switch c.action {
|
|
|
|
case ActionSetNumber:
|
|
c.Cell.number = c.value
|
|
|
|
case ActionSetNote:
|
|
c.Cell.Notes.numbers = append(c.Cell.Notes.numbers, c.value)
|
|
|
|
case ActionRemoveNumber:
|
|
c.Cell.number = 0
|
|
|
|
case ActionRemoveNote:
|
|
for i, existing := range c.Cell.Notes.numbers {
|
|
if existing == c.from {
|
|
c.Cell.Notes.numbers = append(c.Cell.Notes.numbers[:i], c.Cell.Notes.numbers[i+1:]...)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|