1package sheet23import (4 "maps"5 "slices"67 "src.rest/cat/012/internal/formula"8)910// Undo steps that add, delete, rename or reorder sheets snapshot the11// workbook's list of sheets.1213// sheetList is the order and names of the sheets, and which are hidden.14type sheetList struct {15 order []*Sheet16 names map[*Sheet]string17 hidden map[*Sheet]bool18}1920func (w *Workbook) sheetList() *sheetList {21 l := &sheetList{order: slices.Clone(w.sheets), names: map[*Sheet]string{}, hidden: map[*Sheet]bool{}}22 for _, s := range w.sheets {23 l.names[s] = s.name24 if s.tabHidden {25 l.hidden[s] = true26 }27 }28 return l29}3031// setSheets restores a sheet list: sheets not in it are detached, the32// rest renamed and attached in its order.33func (w *Workbook) setSheets(l *sheetList) {34 for _, s := range w.sheets {35 if !slices.Contains(l.order, s) {36 w.detach(s)37 }38 }39 w.byKey = map[string]*Sheet{}40 w.sheets = slices.Clone(l.order)41 for _, s := range w.sheets {42 s.name = l.names[s]43 s.tabHidden = l.hidden[s]44 if s.live {45 w.byKey[formula.SheetKey(s.name)] = s46 } else {47 w.attach(s)48 }49 }50 w.structural = true51}5253func (l *sheetList) equal(m *sheetList) bool {54 return slices.Equal(l.order, m.order) && maps.Equal(l.names, m.names) && maps.Equal(l.hidden, m.hidden)55}