MCPcopy Index your code
hub / github.com/lxn/walk / SetModel

Method SetModel

tableview.go:831–902  ·  view source on GitHub ↗

SetModel sets the model of the TableView. It is required that mdl either implements walk.TableModel, walk.ReflectTableModel or be a slice of pointers to struct or a []map[string]interface{}. A walk.TableModel implementation must also implement walk.Sorter to support sorting, all other options get s

(mdl interface{})

Source from the content-addressed store, hash-verified

829// population for a walk.ReflectTableModel or slice requires mdl to implement
830// walk.Populator.
831func (tv *TableView) SetModel(mdl interface{}) error {
832 model, ok := mdl.(TableModel)
833 if !ok && mdl != nil {
834 var err error
835 if model, err = newReflectTableModel(mdl); err != nil {
836 if model, err = newMapTableModel(mdl); err != nil {
837 return err
838 }
839 }
840 }
841
842 tv.SetSuspended(true)
843 defer tv.SetSuspended(false)
844
845 if tv.model != nil {
846 tv.detachModel()
847
848 tv.disposeImageListAndCaches()
849 }
850
851 oldProvidedModelStyler, _ := tv.providedModel.(CellStyler)
852 if styler, ok := mdl.(CellStyler); ok || tv.styler == oldProvidedModelStyler {
853 tv.styler = styler
854 }
855
856 tv.providedModel = mdl
857 tv.model = model
858
859 tv.itemChecker, _ = model.(ItemChecker)
860 tv.imageProvider, _ = model.(ImageProvider)
861
862 if model != nil {
863 tv.attachModel()
864
865 if dms, ok := model.(dataMembersSetter); ok {
866 // FIXME: This depends on columns to be initialized before
867 // calling this method.
868 dataMembers := make([]string, len(tv.columns.items))
869
870 for i, col := range tv.columns.items {
871 dataMembers[i] = col.DataMemberEffective()
872 }
873
874 dms.setDataMembers(dataMembers)
875 }
876
877 if lfs, ok := model.(lessFuncsSetter); ok {
878 lessFuncs := make([]func(i, j int) bool, tv.columns.Len())
879 for i, c := range tv.columns.items {
880 lessFuncs[i] = c.lessFunc
881 }
882 lfs.setLessFuncs(lessFuncs)
883 }
884
885 if sorter, ok := tv.model.(Sorter); ok {
886 if tv.sortedColumnIndex >= tv.visibleColumnCount() {
887 tv.sortedColumnIndex = maxi(-1, mini(0, tv.visibleColumnCount()-1))
888 tv.sortOrder = SortAscending

Callers 1

CreateMethod · 0.95

Calls 15

detachModelMethod · 0.95
attachModelMethod · 0.95
visibleColumnCountMethod · 0.95
SetCurrentIndexMethod · 0.95
setItemCountMethod · 0.95
newReflectTableModelFunction · 0.85
newMapTableModelFunction · 0.85
maxiFunction · 0.85
miniFunction · 0.85
DataMemberEffectiveMethod · 0.80
SetSuspendedMethod · 0.65

Tested by

no test coverage detected