Search code examples
gowxwidgetswxgo

WxGo Grid Cell renderer


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!


Solution

  • 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)