William Parsons
2012-Aug-01 22:25 UTC
[fxruby-users] problems with FXMessageBox apparenlty generating SEL_SELECTED in a FXTable
Hi,
I have an aplication that uses an FXTable and does some processing on a selected
row in response to a SEL_CHANGED message. The processing can throw an
exception, so I want to catch it and put up a FXMessageBox if this happens.
The problem I am seeing is that if the FXMessageBox is shown, additional
selections are generated causing the message box to get re-instanciated after it
has been dismissed when the cursor is moved. I am including a stripped down
test version of the real application below that illustrates the problem.
-------------------------------------------------------------------------------
#!/usr/bin/env ruby
require ''rubygems''
require ''fox16''
include Fox
class App < FXApp
def initialize
super(''Test'', ''Test'')
TopLevelWindow.new(self)
end
end
class TestTable < FXTable
def initialize(p)
super(p, :opts => LAYOUT_FILL|TABLE_COL_SIZABLE)
setTableSize(20, 1)
self.rowHeaderMode = 0
setColumnWidth(0, 200)
connect(SEL_SELECTED) do |sender, selector, data|
puts "SEL_SELECTED #{selStartRow}-#{selEndRow}
[#{data.row},#{data.col}]"
end
connect(SEL_CHANGED) do |sender, selector, data|
selected_row = selStartRow
puts "SEL_CHANGED begin #{selStartRow}"
if selected_row > -1
killSelection
begin
if selected_row%2 == 1
raise "exception processing row #{selected_row}"
end
puts "row #{selected_row} successfully processed"
rescue
FXMessageBox.error(self, MBOX_OK, ''Error'', $!.to_s)
end
puts "SEL_CHANGED end #{selStartRow}"
end
end
end
end
class TopLevelWindow < FXMainWindow
def initialize(app)
super(app, ''Test'', :width => 200, :height => 500)
frame = FXPacker.new(self, :opts => FRAME_SUNKEN|LAYOUT_FILL)
TestTable.new(frame)
end
def create
super
show(PLACEMENT_SCREEN)
end
end
app = App.new
app.create
app.run
-------------------------------------------------------------------------------
--
Will