2023-04-01 00:18:17 +00:00
|
|
|
package d2graph
|
|
|
|
|
|
2023-04-05 18:11:31 +00:00
|
|
|
func (obj *Object) IsGridDiagram() bool {
|
2023-04-14 03:04:55 +00:00
|
|
|
return obj != nil &&
|
|
|
|
|
(obj.GridRows != nil || obj.GridColumns != nil)
|
2023-04-01 00:18:17 +00:00
|
|
|
}
|
2023-04-05 00:44:05 +00:00
|
|
|
|
2023-04-05 18:11:31 +00:00
|
|
|
func (obj *Object) ClosestGridDiagram() *Object {
|
2023-04-06 22:32:09 +00:00
|
|
|
if obj == nil {
|
2023-04-05 00:44:05 +00:00
|
|
|
return nil
|
|
|
|
|
}
|
2023-04-06 22:32:09 +00:00
|
|
|
if obj.IsGridDiagram() {
|
|
|
|
|
return obj
|
2023-04-05 00:44:05 +00:00
|
|
|
}
|
2023-04-05 18:11:31 +00:00
|
|
|
return obj.Parent.ClosestGridDiagram()
|
2023-04-05 00:44:05 +00:00
|
|
|
}
|
2023-09-13 05:55:31 +00:00
|
|
|
|
2023-09-28 18:17:46 +00:00
|
|
|
func (obj *Object) ClosestGridCell() *Object {
|
|
|
|
|
if obj == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
// grid cells can be a nested grid diagram
|
|
|
|
|
if obj.Parent.IsGridDiagram() {
|
|
|
|
|
return obj
|
|
|
|
|
}
|
|
|
|
|
return obj.Parent.ClosestGridCell()
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-13 05:55:31 +00:00
|
|
|
// TopGridDiagram returns the least nested (outermost) grid diagram
|
|
|
|
|
func (obj *Object) TopGridDiagram() *Object {
|
|
|
|
|
if obj == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
var gd *Object
|
|
|
|
|
if obj.IsGridDiagram() {
|
|
|
|
|
gd = obj
|
|
|
|
|
}
|
|
|
|
|
curr := obj.Parent
|
|
|
|
|
for curr != nil {
|
|
|
|
|
if curr.IsGridDiagram() {
|
|
|
|
|
gd = curr
|
|
|
|
|
}
|
|
|
|
|
curr = curr.Parent
|
|
|
|
|
}
|
|
|
|
|
return gd
|
|
|
|
|
}
|