Forum: wxRuby Creating and handling a non_GUI event

Fe061a5e90b738e88623292d7d2084d2?d=identicon&s=25 Eric Rubin (erubin)
on 2013-04-10 19:43
I need to change the value of a Wx::TextCtrl when a message is received
in a separate thread from the GUI.  I think I should be creating a class
derived from Wx::Event (not Wx::CommandEvent) for this.  But I haven't
been able to get it to work.

Here's my event class:

class TextMsgEvent < Wx::Event
  EVT_TEXT_MSG = Wx::EvtHandler.register_class(self, nil,
'evt_text_msg', 1)

  def initialize(text)
    @text = text
    super(0, EVT_TEXT_MSG)
  end
end

My Frame class includes this:

class myFrame < Wx::Frame

  def initialize
    ...
    @text = TextCtrl.new(self, ID_ANY, $status, Point.new(20, 20),
        Size.new(250, 150), SUNKEN_BORDER|TE_READONLY|TE_MULTILINE)
    evt_text_msg(@text.get_id) {|event| on_text(event) }
    ...
  end
  ...
end

When I receive the message (which contains the text) in In my non-GUI
thread I call:

$myFrame.process_event(TextMsgEvent.new(text))

But I don't seem to be even getting into TextMsgEvent.initialize.

(When I was deriving from Wx::CommandEvent instead of Wx::Event, I was
successfully creating a TextMsgEvent, but the process_event returned
false.)

Any suggestions?  Am I even going about this in the right way?

Thanks,
Eric Rubin
3396e4a3df8a840faec520af8555a400?d=identicon&s=25 Mario Steele (Guest)
on 2013-04-10 21:52
(Received via mailing list)
Hey Eric,

Do you have a GitHub repository with the actual code in it, or could you
paste the most minimal code, that reproduces the error, so that we can
properly diagnose the issue?

Thanks,

Mario


On Wed, Apr 10, 2013 at 1:43 PM, Eric Rubin <lists@ruby-forum.com>
wrote:

>
>   def initialize
> thread I call:
>
> Thanks,
> Eric Rubin
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> wxruby-users mailing list
> wxruby-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/wxruby-users
>



--
Mario Steele
Fleet Captain
CO - Geo 99
CO - USS T'hy'la
XO - Diplomatic Corps - Second Life
http://www.iftcommand.com/chapters/thyla/
http://www.trekfederation.com
Fe061a5e90b738e88623292d7d2084d2?d=identicon&s=25 Eric Rubin (erubin)
on 2013-04-11 14:52
Attachment: event_test.rb (1 KB)
Okay, here is a minimal test program (attached).

I want my NonGuiThread to be able to change the value of the TextCtrl.
Is add_pending_event the right way to do this?

(It seems that TextMsgEvent should be an Event, not a CommandEvent,
since it's not a GUI event, but with Event the code doesn't work at
all.)

Thanks,
Eric Rubin
3396e4a3df8a840faec520af8555a400?d=identicon&s=25 Mario Steele (Guest)
on 2013-04-15 22:09
(Received via mailing list)
Hello Eric,

Sorry for the late reply, I was busy with Windows issues, and couldn't
test
with Ruby 2.0, as wxRuby needs to be compiled with Ruby 2.0.

In any case, after testing, and throwing in a require 'thread' and
Thread.abort_on_exception = true, I found that when you sub-class a
Wx::Event, and attempt create a new instance of the sub-class, you will
end
up with an internal error, saying that no allocator has been defined for
Wx::Event, which in all cases, is true, cause in C++ wxWidgets,
Wx::Event,
isn't a True Instantiate class.  In C++, the WxEvent Class is considered
an
Abstract Base Class, or to put it into Ruby Terms, consider WxEvent a
Module.

It defines the base methods and instance variables / structure of the
class
for any sub-class of WxEvent, without actually having an allocator
associated with the base class itself.  So in order to actually get a
Class
that is usable in Ruby, you need to sub-class a pre-existing C++ Class,
such as Wx::CommandEvent (WxCommandEvent class), in order to have it
work
in Ruby.

I hope that this helps with your future programming.

Mario


On Thu, Apr 11, 2013 at 8:52 AM, Eric Rubin <lists@ruby-forum.com>
wrote:

> Eric Rubin
> http://rubyforge.org/mailman/listinfo/wxruby-users
>



--
Mario Steele
Fleet Captain
CO - Geo 99
CO - USS T'hy'la
XO - Diplomatic Corps - Second Life
http://www.iftcommand.com/chapters/thyla/
http://www.trekfederation.com
This topic is locked and can not be replied to.