118 lines
2.5 KiB
Go
118 lines
2.5 KiB
Go
|
// 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
|
||
|
}
|
||
|
}
|