(parent Container)
| 39 | } |
| 40 | |
| 41 | func NewTreeView(parent Container) (*TreeView, error) { |
| 42 | tv := new(TreeView) |
| 43 | |
| 44 | if err := InitWidget( |
| 45 | tv, |
| 46 | parent, |
| 47 | "SysTreeView32", |
| 48 | win.WS_TABSTOP|win.WS_VISIBLE|win.TVS_HASBUTTONS|win.TVS_LINESATROOT|win.TVS_SHOWSELALWAYS|win.TVS_TRACKSELECT, |
| 49 | win.WS_EX_CLIENTEDGE); err != nil { |
| 50 | return nil, err |
| 51 | } |
| 52 | |
| 53 | succeeded := false |
| 54 | defer func() { |
| 55 | if !succeeded { |
| 56 | tv.Dispose() |
| 57 | } |
| 58 | }() |
| 59 | |
| 60 | if hr := win.HRESULT(tv.SendMessage(win.TVM_SETEXTENDEDSTYLE, win.TVS_EX_DOUBLEBUFFER, win.TVS_EX_DOUBLEBUFFER)); win.FAILED(hr) { |
| 61 | return nil, errorFromHRESULT("TVM_SETEXTENDEDSTYLE", hr) |
| 62 | } |
| 63 | |
| 64 | if err := tv.setTheme("Explorer"); err != nil { |
| 65 | return nil, err |
| 66 | } |
| 67 | |
| 68 | tv.GraphicsEffects().Add(InteractionEffect) |
| 69 | tv.GraphicsEffects().Add(FocusEffect) |
| 70 | |
| 71 | tv.MustRegisterProperty("CurrentItem", NewReadOnlyProperty( |
| 72 | func() interface{} { |
| 73 | return tv.CurrentItem() |
| 74 | }, |
| 75 | tv.CurrentItemChanged())) |
| 76 | |
| 77 | tv.MustRegisterProperty("CurrentItemLevel", NewReadOnlyProperty( |
| 78 | func() interface{} { |
| 79 | level := -1 |
| 80 | item := tv.CurrentItem() |
| 81 | |
| 82 | for item != nil { |
| 83 | level++ |
| 84 | item = item.Parent() |
| 85 | } |
| 86 | |
| 87 | return level |
| 88 | }, |
| 89 | tv.CurrentItemChanged())) |
| 90 | |
| 91 | tv.MustRegisterProperty("HasCurrentItem", NewReadOnlyBoolProperty( |
| 92 | func() bool { |
| 93 | return tv.CurrentItem() != nil |
| 94 | }, |
| 95 | tv.CurrentItemChanged())) |
| 96 | |
| 97 | succeeded = true |
| 98 |
nothing calls this directly
no test coverage detected
searching dependent graphs…