2

I'm obviously missing some basic understanding of either Go or Wx Widgets.

I'm trying to create a very basic table with checkboxes in the first column.

table := wx.NewGrid(w, wx.ID_ANY)
table.CreateGrid(4, 2)
table.SetCellEditor(0, 0, wx.SwigIsGridCellBoolRenderer{})

That code gives me this error:

invalid type for composite literal: wx.SwigIsGridCellBoolRenderer

I know I also have to set the editor. But I'm not even that far. The more detailed the answer, the better. Thank you!

Chemdream
  • 618
  • 2
  • 9
  • 25

1 Answers1

2

The error hints you are using a composite literal, which can be used to create values of struts, slices, arrays, maps or derivatives of these.

This:

wx.SwigIsGridCellBoolRenderer{}

Would be an empty composite literal of the type wx.SwigIsGridCellBoolRenderer, but that type is nether of the types you may use with a composite literal. It is an interface type:

type SwigIsGridCellBoolRenderer interface {
    SwigGetGridCellBoolRenderer() GridCellBoolRenderer
}

wx.NewGrid() returns a type of wx.Grid which is an interface with a method:

SetCellEditor(arg2 int, arg3 int, arg4 SwigIsGridCellEditor)

So you have to pass a value to it that satisfies / implements the wx.SwigIsGridCellEditor interface.

This interface has a single method:

type SwigIsGridCellEditor interface {
    SwigGetGridCellEditor() GridCellEditor
}

So any type that has such SwigGetGridCellEditor() method may be used here. Such types are:

  • wx.SwigClassGridCellTextEditor
  • wx.SwigClassGridCellAutoWrapStringEditor
  • wx.SwigClassGridCellBoolEditor
  • wx.SwigClassGridCellChoiceEditor
  • wx.SwigClassGridCellEnumEditor
  • etc.

So create an instance of one of the above, that you can pass to table.SetCellEditor().

For example:

editor := wx.NewGridCellTextEditor()
table.SetCellEditor(0, 0, editor)
icza
  • 389,944
  • 63
  • 907
  • 827