<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro GUI: custom button callback</title>
		<link>http://www.allegro.cc/forums/view/591200</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 30 Apr 2007 23:01:06 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve spent the past hour searching through (ancient) forum posts regarding the Allegro GUI routines. Before I state my problem, I would like to ask that people please refrain from telling me to try a new GUI system. I&#39;m quite happy with the Allegro solution!</p><p>Now, as previously stated, I&#39;m trying to write a custom button callback. I have, however, run into some difficulties! Below is the code in question. When the dialog is displayed, the editor_button_proc simply isn&#39;t rendered (or registered). I&#39;ve even tried using the &#39;f&#39; hotkey (which I assigned it), to no avail. </p><p>While browsing the code, if you can see that I&#39;ve made some silly mistake, please don&#39;t hesitate to tell me. I&#39;ve never actually used the Allegro GUI to any great extent before.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> editor_button_proc<span class="k2">(</span><a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> <span class="k3">*</span>d, <span class="k1">int</span> msg, <span class="k1">int</span> c<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td><span class="k1">int</span> editor_store_tile_data<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> tile_options<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>      <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_box_proc" target="_blank"><span class="a">d_box_proc</span></a>,        <span class="n">0</span>,    <span class="n">0</span>,     <span class="n">500</span>,   <span class="n">125</span>,  <span class="n">0</span>,    <span class="n">16777215</span>,   <span class="n">0</span>,      <span class="n">0</span>,   <span class="n">0</span>,   <span class="n">0</span>,    NULL, NULL, NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">7</td><td>      <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_check_proc" target="_blank"><span class="a">d_check_proc</span></a>,      <span class="n">15</span>,   <span class="n">5</span>,     <span class="n">175</span>,   <span class="n">25</span>,   <span class="n">0</span>,    <span class="n">16777215</span>,   <span class="s">'c'</span>,    <span class="n">0</span>,   <span class="n">0</span>,   <span class="n">0</span>,    <span class="s">"Block Player &amp;Camera?"</span>, NULL, NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">8</td><td>      <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_check_proc" target="_blank"><span class="a">d_check_proc</span></a>,      <span class="n">220</span>,  <span class="n">5</span>,     <span class="n">175</span>,   <span class="n">25</span>,   <span class="n">0</span>,    <span class="n">16777215</span>,   <span class="s">'m'</span>,    <span class="n">0</span>,   <span class="n">0</span>,   <span class="n">0</span>,    <span class="s">"Block &amp;Monsters?"</span>, NULL, NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">9</td><td>      <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_check_proc" target="_blank"><span class="a">d_check_proc</span></a>,      <span class="n">15</span>,   <span class="n">35</span>,    <span class="n">175</span>,   <span class="n">25</span>,   <span class="n">0</span>,    <span class="n">16777215</span>,   <span class="s">'p'</span>,    <span class="n">0</span>,   <span class="n">0</span>,   <span class="n">0</span>,    <span class="s">"Mark as Walk &amp;Path?"</span>, NULL, NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">10</td><td>      <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_check_proc" target="_blank"><span class="a">d_check_proc</span></a>,      <span class="n">220</span>,  <span class="n">35</span>,    <span class="n">175</span>,   <span class="n">25</span>,   <span class="n">0</span>,    <span class="n">16777215</span>,   <span class="s">'b'</span>,    <span class="n">0</span>,   <span class="n">0</span>,   <span class="n">0</span>,    <span class="s">"Mark as &amp;Build Spot"</span>, NULL, NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>      <span class="k2">{</span> editor_button_proc, <span class="n">15</span>,  <span class="n">80</span>,    <span class="n">175</span>,   <span class="n">25</span>,   <span class="n">0</span>,    <span class="n">16777215</span>,   <span class="s">'f'</span>,  D_EXIT,   <span class="n">0</span>,   <span class="n">0</span>, <span class="s">"&amp;Finished"</span>, NULL, <span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span>editor_store_tile_data <span class="k2">}</span>,</td></tr><tr><td class="number">13</td><td>      <span class="k2">{</span> NULL,               <span class="n">0</span>,    <span class="n">0</span>,     <span class="n">0</span>,     <span class="n">0</span>,    <span class="n">0</span>,    <span class="n">0</span>,   <span class="n">0</span>,     <span class="n">0</span>,   <span class="n">0</span>, <span class="n">0</span>,           NULL, NULL, NULL <span class="k2">}</span></td></tr><tr><td class="number">14</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="k1">int</span> editor_button_proc<span class="k2">(</span><a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> <span class="k3">*</span>d, <span class="k1">int</span> msg, <span class="k1">int</span> c<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>    <span class="k1">int</span> ret <span class="k3">=</span> <a href="http://www.allegro.cc/manual/d_button_proc" target="_blank"><span class="a">d_button_proc</span></a><span class="k2">(</span>msg, d, c<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    </td></tr><tr><td class="number">20</td><td>    <span class="k1">if</span> <span class="k2">(</span>ret <span class="k3">=</span><span class="k3">=</span> D_CLOSE <span class="k3">&amp;</span><span class="k3">&amp;</span> d-&gt;dp3<span class="k2">)</span></td></tr><tr><td class="number">21</td><td>       <span class="k1">return</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span> <span class="k2">(</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">)</span>d-&gt;dp3<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>       </td></tr><tr><td class="number">23</td><td>    <span class="k1">return</span> ret<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>    </td></tr><tr><td class="number">25</td><td><span class="k2">}</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td><span class="k1">int</span> editor_store_tile_data<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span> <span class="s">"Option: %i"</span>, tile_options<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.d1 <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    <span class="k1">return</span> D_O_K<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    </td></tr><tr><td class="number">32</td><td><span class="k2">}</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td><span class="k1">void</span> show_tile_options<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>     </td></tr><tr><td class="number">36</td><td>    <a href="http://www.allegro.cc/manual/do_dialog" target="_blank"><span class="a">do_dialog</span></a><span class="k2">(</span> tile_options, <span class="k3">-</span><span class="n">1</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>     </td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Sun, 29 Apr 2007 23:06:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why do you have to implement this as a callback? Can&#39;t you just check which button was used to terminate the dialog, and then do the appropriate thing?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Mon, 30 Apr 2007 00:10:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wasn&#39;t aware that do_dialog returned the exit objects index! D&#39;Oh! </p><p>I&#39;ll give cookies, but I&#39;d still like to know how to achieve the callback, for future reference.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Mon, 30 Apr 2007 01:45:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s the code from <a href="http://agup.sf.net/">AGUP</a>:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> d_aalg_push_proc<span class="k2">(</span><span class="k1">int</span> msg, <a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> <span class="k3">*</span>d, <span class="k1">int</span> c<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>   <span class="k1">int</span> ret <span class="k3">=</span> D_O_K<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>   d-&gt;flags <span class="k3">|</span><span class="k3">=</span> D_EXIT<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>   ret <span class="k3">|</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/d_button_proc" target="_blank"><span class="a">d_button_proc</span></a><span class="k2">(</span>msg, d, c<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>   <span class="k1">if</span> <span class="k2">(</span>ret <span class="k3">&amp;</span> D_CLOSE<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>      ret <span class="k3">&amp;</span><span class="k3">=</span> ~D_CLOSE<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>      ret <span class="k3">|</span><span class="k3">=</span> D_REDRAWME<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>      <span class="k1">if</span> <span class="k2">(</span>d-&gt;dp3<span class="k2">)</span></td></tr><tr><td class="number">14</td><td>      ret <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int</span> <span class="k2">(</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span>d-&gt;dp3<span class="k2">)</span><span class="k2">(</span>d<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td>   <span class="k1">return</span> ret<span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Mon, 30 Apr 2007 04:22:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you! I have one last Allegro GUI question... non-blocking menus. I&#39;ve done some forum searching but have run into a few problems. Here&#39;s the necessary code:</p><p>editor_gui.c
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><a href="http://www.allegro.cc/manual/MENU" target="_blank"><span class="a">MENU</span></a> file_menu<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>   </td></tr><tr><td class="number">4</td><td>     <span class="k2">{</span> <span class="s">"&amp;New Map"</span>,        NULL,  NULL,           <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">5</td><td>     <span class="k2">{</span> <span class="s">"&amp;Load Map"</span>,       NULL,  NULL,           <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">6</td><td>     <span class="k2">{</span> <span class="s">"&amp;Save Map"</span>,       NULL,  NULL,           <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">7</td><td>     <span class="k2">{</span> <span class="s">"&amp;Exit"</span>,           NULL,  NULL,           <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">8</td><td>     <span class="k2">{</span> NULL,              NULL,  NULL,           <span class="n">0</span>,  NULL  <span class="k2">}</span></td></tr><tr><td class="number">9</td><td>   </td></tr><tr><td class="number">10</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><a href="http://www.allegro.cc/manual/MENU_PLAYER" target="_blank"><span class="a">MENU_PLAYER</span></a> <span class="k3">*</span>file_control<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">void</span> editor_setup_gui<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>     </td></tr><tr><td class="number">16</td><td>     file_control <span class="k3">=</span> <a href="http://www.allegro.cc/manual/init_menu" target="_blank"><span class="a">init_menu</span></a><span class="k2">(</span> file_menu, <span class="n">0</span>, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>     <a href="http://www.allegro.cc/manual/gui_set_screen" target="_blank"><span class="a">gui_set_screen</span></a><span class="k2">(</span> buffer <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>     </td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">void</span> editor_update_gui<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>     </td></tr><tr><td class="number">23</td><td>     <a href="http://www.allegro.cc/manual/update_menu" target="_blank"><span class="a">update_menu</span></a><span class="k2">(</span> file_control <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>     </td></tr><tr><td class="number">25</td><td><span class="k2">}</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td><span class="k1">void</span> editor_shutdown_gui<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>     </td></tr><tr><td class="number">29</td><td>     <a href="http://www.allegro.cc/manual/shutdown_menu" target="_blank"><span class="a">shutdown_menu</span></a><span class="k2">(</span> file_control <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>     </td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Now, I&#39;ve tried calling update_menu with both my logic and rendering code, but nothing seems to work. Is update_menu actually rendering anything, or just updating the menus logic/state? The manual is slightly unclear on this. I&#39;ve set the render bitmap to my buffer, but how can I specify when it&#39;s rendered?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Mon, 30 Apr 2007 23:01:06 +0000</pubDate>
	</item>
</rss>
