规范 - 如何就地编辑 table 的内容

Spec - How to edit the contents of a table in place

我有一个 SpTablePresenter,我想编辑单元格内容。
在许多框架中,可以直接就地编辑 table 的内容,而无需打开新组件(对话框或主从样式)。我如何使用 Spec 执行此操作?

规范中的表和树表实施了一种机制来就地编辑字符串列

在 Spec 中,字符串列可以通过发送 beEditable 消息声明该列可编辑并通过发送 onAcceptEdition: 添加一个回调来处理编辑,它接收两个参数,正在编辑的对象和编辑的字符串。

以下代码将展示如何做到这一点:

app := SpApplication new.
app useBackend: #Gtk.
 
presenter := SpPresenter new.
presenter application: app.

presenter layout: (SpBoxLayout newTopToBottom
    add: (tablePresenter := presenter newTable);
    yourself).

tablePresenter 
    addColumn: (SpStringTableColumn title: 'R/O' evaluated: #key);
    addColumn: ((SpStringTableColumn 
            title: 'Editable' 
            evaluated: #value)
        beEditable; 
        onAcceptEdition: [ :anAssociation :aString | anAssociation value: aString ];
        yourself).

tablePresenter items: { 1 -> 'One'. 2 -> 'Two'. 3 -> 'Three' }.
    
presenter asWindow 
    title: 'Example editing cells';
    open

这将产生(使用 Gtk3 后端)此输出: