<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] User Event are giving me a hard time. </title>
		<link>http://www.allegro.cc/forums/view/612755</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 09 Jun 2013 05:34:28 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So I&#39;ve been messing around with A5 some more and the next thing I&#39;ve decided to learn is how to properly use/define User Defined Events in Allegro. So I made a simple project just to learn the basics. And I have been experiencing nothing but problems for a few days now. So, I would be very grateful if someone could tell me why the following does not work as intended. Thanks in advanced. </p><p>Note: this is a smaller snippet of my code and hopefully I have included all the relevant code here.</p><p>Main.cpp
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
<span class="c">//all basic allegro stuff has been initialized at this point</span>
  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> NULL<span class="k2">;</span>

  SubMenu_UserEvent::Instance<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//this is here to call the "SubMenu_UserEvent" ctor</span>

  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>SubMenu_UserEvent::Instance<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Get_Source<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
  SubMenu_UserEvent::Instance<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>TestEvent<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//fails.</span>
<span class="c">//.</span>
<span class="c">//.</span>
<span class="c">//.</span>
</pre></div></div><p>

Example.h
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">//Singleton Class to manage this event.</span>
<span class="number">  2</span><span class="k1">class</span> SubMenu_UserEvent
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>private:
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_SOURCE"><span class="a">ALLEGRO_EVENT_SOURCE</span></a>  subMenu_event_source<span class="k2">;</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a>      subMenu_event<span class="k2">;</span>
<span class="number">  7</span>  
<span class="number">  8</span>public:
<span class="number">  9</span>  <span class="k1">static</span> SubMenu_UserEvent<span class="k3">*</span> Instance<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_SOURCE"><span class="a">ALLEGRO_EVENT_SOURCE</span></a> Get_Source<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> subMenu_event_source<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>  <span class="k1">void</span> SetDataAndEmit<span class="k2">(</span><span class="k1">int</span> Data<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>    subMenu_event.user.data1 <span class="k3">=</span> Data<span class="k2">;</span> 
<span class="number"> 15</span>    TestEvent<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  <span class="k2">}</span>
<span class="number"> 17</span>  
<span class="number"> 18</span>  <span class="k1">void</span> TestEvent<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>private:
<span class="number"> 21</span>  SubMenu_UserEvent<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>  <span class="c">//~SubMenu_UserEvent();</span>
<span class="number"> 23</span>  SubMenu_UserEvent<span class="k2">(</span><span class="k1">const</span> SubMenu_UserEvent<span class="k3">&amp;</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>  SubMenu_UserEvent<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> SubMenu_UserEvent<span class="k3">&amp;</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

Example.cpp
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>SubMenu_UserEvent::SubMenu_UserEvent<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <a href="http://www.allegro.cc/manual/al_init_user_event_source"><span class="a">al_init_user_event_source</span></a><span class="k2">(</span><span class="k3">&amp;</span>subMenu_event_source<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>  subMenu_event.user.type <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ALLEGRO_GET_EVENT_TYPE"><span class="a">ALLEGRO_GET_EVENT_TYPE</span></a><span class="k2">(</span><span class="s">'M'</span>, <span class="s">'S'</span>, <span class="s">'M'</span>, <span class="s">'E'</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span><span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">void</span> SubMenu_UserEvent::TestEvent<span class="k2">(</span><span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_emit_user_event"><span class="a">al_emit_user_event</span></a><span class="k2">(</span><span class="k3">&amp;</span>subMenu_event_source, <span class="k3">&amp;</span>subMenu_event, NULL<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 10</span>  <span class="k2">{</span>
<span class="number"> 11</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"fail"</span><span class="k2">;</span>
<span class="number"> 12</span>  <span class="k2">}</span>  
<span class="number"> 13</span><span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>SubMenu_UserEvent<span class="k3">*</span> SubMenu_UserEvent::Instance<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 16</span><span class="k2">{</span>
<span class="number"> 17</span>  <span class="k1">static</span> SubMenu_UserEvent temp_instance<span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  <span class="k1">return</span> <span class="k3">&amp;</span>temp_instance<span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>

Thanks,
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ryancoboy)</author>
		<pubDate>Sun, 09 Jun 2013 05:02:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s because you&#39;re using the address of a temporary copy of your ALLEGRO_EVENT_SOURCE.</p><p>Try this :<br /><span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_SOURCE"><span class="a">ALLEGRO_EVENT_SOURCE</span></a><span class="k3">&amp;</span> Get_Source<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> subMenu_event_source<span class="k2">;</span><span class="k2">}</span></span></p><p>Otherwise you&#39;re just registering a copy. Which won&#39;t work.</p><p>Specifically, this expression fails to give you the address of your event source :<br /><span class="source-code"><span class="k3">&amp;</span>SubMenu_UserEvent::Instance<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Get_Source<span class="k2">(</span><span class="k2">)</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 09 Jun 2013 05:22:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hahahaha...I can&#39;t believe I missed that. Three days of staring at this thing and I didn&#39;t catch that. I guess I just needed a fresh pair of eyes to look at it. Thanks a lot Edgar.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ryancoboy)</author>
		<pubDate>Sun, 09 Jun 2013 05:34:28 +0000</pubDate>
	</item>
</rss>
