summaryrefslogtreecommitdiffstatshomepage
path: root/tableviewcolumnlist.go
blob: a988bd7194f7ca6075a2155aebea451453f8adc0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Copyright 2013 The Walk Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build windows

package walk

type TableViewColumnList struct {
	tv    *TableView
	items []*TableViewColumn
}

func newTableViewColumnList(tv *TableView) *TableViewColumnList {
	return &TableViewColumnList{tv: tv}
}

// Add adds a TableViewColumn to the end of the list.
func (l *TableViewColumnList) Add(item *TableViewColumn) error {
	return l.Insert(len(l.items), item)
}

// At returns the TableViewColumn as the specified index.
//
// Bounds are not checked.
func (l *TableViewColumnList) At(index int) *TableViewColumn {
	return l.items[index]
}

// Clear removes all TableViewColumns from the list.
func (l *TableViewColumnList) Clear() error {
	for _ = range l.items {
		if err := l.RemoveAt(0); err != nil {
			return err
		}
	}

	return nil
}

// Index returns the index of the specified TableViewColumn or -1 if it is not
// found.
func (l *TableViewColumnList) Index(item *TableViewColumn) int {
	for i, lvi := range l.items {
		if lvi == item {
			return i
		}
	}

	return -1
}

// Contains returns whether the specified TableViewColumn is found in the list.
func (l *TableViewColumnList) Contains(item *TableViewColumn) bool {
	return l.Index(item) > -1
}

// Insert inserts TableViewColumn item at position index.
//
// A TableViewColumn cannot be contained in multiple TableViewColumnLists at the
// same time.
func (l *TableViewColumnList) Insert(index int, item *TableViewColumn) error {
	if item.tv != nil {
		return newError("duplicate insert")
	}

	item.tv = l.tv

	if item.visible {
		if err := item.create(); err != nil {
			item.tv = nil
			return err
		}
	}

	l.items = append(l.items, nil)
	copy(l.items[index+1:], l.items[index:])
	l.items[index] = item

	return nil
}

// Len returns the number of TableViewColumns in  the list.
func (l *TableViewColumnList) Len() int {
	return len(l.items)
}

// Remove removes the specified TableViewColumn from the list.
func (l *TableViewColumnList) Remove(item *TableViewColumn) error {
	index := l.Index(item)
	if index == -1 {
		return nil
	}

	return l.RemoveAt(index)
}

// RemoveAt removes the TableViewColumn at position index.
func (l *TableViewColumnList) RemoveAt(index int) error {
	tvc := l.items[index]

	if err := tvc.destroy(); err != nil {
		return err
	}

	tvc.tv = nil

	l.items = append(l.items[:index], l.items[index+1:]...)

	return nil
}

func (l *TableViewColumnList) unsetColumnsTV() {
	for _, tvc := range l.items {
		tvc.tv = nil
	}
}