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{})
| 829 | // population for a walk.ReflectTableModel or slice requires mdl to implement |
| 830 | // walk.Populator. |
| 831 | func (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 |
no test coverage detected