Skip to content

Commit

Permalink
Accepting table editor with args
Browse files Browse the repository at this point in the history
  • Loading branch information
AndyObtiva committed Jul 17, 2020
1 parent 8ca580f commit 972a43e
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 7 deletions.
16 changes: 9 additions & 7 deletions lib/glimmer/swt/table_proxy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ def additional_sort_properties=(args)
@additional_sort_properties = args unless args.empty?
end

def editor=(widget, *args)
@editor = [widget, args]
def editor=(args)
@editor = args
end

def sort
Expand Down Expand Up @@ -218,8 +218,8 @@ def edit_table_item(table_item, column_index, before_write: nil, after_write: ni
end
end
editors = {
text: -> {
@table_editor_widget_proxy = @table_editor_text_proxy = text {
text: lambda do |args|
@table_editor_widget_proxy = @table_editor_text_proxy = text(*args) {
text table_item.getText(column_index)
focus true
on_focus_lost(&@finish_edit)
Expand All @@ -232,10 +232,12 @@ def edit_table_item(table_item, column_index, before_write: nil, after_write: ni
}
}
@table_editor_widget_proxy.swt_widget.selectAll
}
end
}
content {
editors[:text].call
editor_widget = editor.to_a[0] || :text
editor_widget_args = editor.to_a[1] || []
content {
editors[editor_widget].call(editor_widget_args)
}
@table_editor.setEditor(@table_editor_widget_proxy.swt_widget, table_item, column_index)
end
Expand Down
88 changes: 88 additions & 0 deletions spec/lib/glimmer/dsl/swt/glimmer__table__spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -558,6 +558,94 @@ class ::RedTable
expect(selection.first.getData).to eq(person2)
end

it "triggers configured table-wide table widget with args editor on specified table item which is done via ENTER key" do
@target = shell {
@table = table {
table_column {
text "Name"
width 120
}
table_column {
text "Age"
width 120
}
table_column {
text "Adult"
width 120
}
editor :text, :search
items bind(group, :people), column_properties(:name, :age, :adult)
selection bind(group, :selected_person)
}
}

expect(@table.table_editor_widget_proxy).to be_nil
@write_done = false
@table.edit_table_item(
@table.swt_widget.getItems.first,
0,
before_write: lambda {
expect(@table.edit_in_progress?).to eq(true)
},
after_write: lambda { |edited_table_item|
expect(edited_table_item.getText(0)).to eq('Julie Fan')
@write_done = true
}
)
expect(@table.table_editor_widget_proxy).to_not be_nil
expect(@table.table_editor_widget_proxy.swt_widget).to have_style(:search)
@table.table_editor_widget_proxy.swt_widget.setText('Julie Fan')
# simulate hitting enter to trigger write action
event = Event.new
event.keyCode = Glimmer::SWT::SWTProxy[:cr]
event.doit = true
event.character = "\n"
event.display = @table.table_editor_widget_proxy.swt_widget.getDisplay
event.item = @table.table_editor_widget_proxy.swt_widget
event.widget = @table.table_editor_widget_proxy.swt_widget
event.type = Glimmer::SWT::SWTProxy[:keydown]
@table.table_editor_widget_proxy.swt_widget.notifyListeners(Glimmer::SWT::SWTProxy[:keydown], event)
expect(@write_done).to eq(true)
expect(@table.edit_in_progress?).to eq(false)
expect(@cancel_done).to be_nil
expect(person1.name).to eq('Julie Fan')

expect(@table.table_editor_widget_proxy).to be_nil
@write_done = false
@table.edit_table_item(
@table.swt_widget.getItems.first,
1,
before_write: lambda {
expect(@table.edit_in_progress?).to eq(true)
},
after_write: lambda { |edited_table_item|
expect(edited_table_item.getText(1)).to eq('32')
@write_done = true
}
)
expect(@table.table_editor_widget_proxy).to_not be_nil
@table.table_editor_widget_proxy.swt_widget.setText('32')
# simulate hitting enter to trigger write action
event = Event.new
event.keyCode = Glimmer::SWT::SWTProxy[:cr]
event.doit = true
event.character = "\n"
event.display = @table.table_editor_widget_proxy.swt_widget.getDisplay
event.item = @table.table_editor_widget_proxy.swt_widget
event.widget = @table.table_editor_widget_proxy.swt_widget
event.type = Glimmer::SWT::SWTProxy[:keydown]
@table.table_editor_widget_proxy.swt_widget.notifyListeners(Glimmer::SWT::SWTProxy[:keydown], event)
expect(@write_done).to eq(true)
expect(@table.edit_in_progress?).to eq(false)
expect(@cancel_done).to be_nil
expect(person1.age).to eq('32')

# test that it maintains selection
selection = @table.swt_widget.getSelection
expect(selection.size).to eq(1)
expect(selection.first.getData).to eq(person2)
end

it "triggers table widget editing on specified table item which is done via ENTER key" do
@target = shell {
@table = table {
Expand Down

0 comments on commit 972a43e

Please sign in to comment.