// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0

/*
	DO NOT EDIT THIS FILE

	this file is the same for every GUI toolkit plugin
	when you are making a new GUI toolkit plugin for
	a specific toolkit, you just need to define these
	functions.

	for example, in the "gocui" toolkit, the functions
	below are what triggers the "gocui" GO package
	to draw labels, buttons, windows, etc

	If you are starting out trying to make a new GUI toolkit,
	all you have to do is copy this file over. Then
	work on making these functions. addWidget(), setText(), etc.

	That's it!
*/

package main

/*
	This is reference code for toolkit developers

	This is how information is passed in GO back to the application
	via the GO 'plugin' concept

	TODO: switch this to protocol buffers
*/

import (
	"go.wit.com/toolkits/tree"
	"go.wit.com/widget"
)

// Other goroutines must use this to access the GUI
//
// You can not acess / process the GUI thread directly from
// other goroutines. This is due to the nature of how
// Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
//
// this sets the channel to send user events back from the plugin
func Callback(guiCallback chan widget.Action) {
	me.myTree.Callback(guiCallback)
}

func PluginChannel() chan widget.Action {
	initOnce.Do(initPlugin)
	return me.myTree.PluginChannel()
}

func initTree() *tree.TreeInfo {
	t := tree.New()
	t.PluginName = PLUGIN
	t.Add = newAdd
	t.SetTitle = setTitle
	t.SetLabel = setLabel
	t.SetText = setText
	t.AddText = addText
	t.SetChecked = setChecked
	t.ToolkitClose = toolkitClose
	t.ShowTable = showTable

	return t
}