fxruby 1.6.7 → 1.6.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/doc/apes02.html +2 -2
  2. data/doc/apes03.html +1 -1
  3. data/doc/book.html +1 -1
  4. data/doc/build.html +24 -24
  5. data/doc/ch03s02.html +1 -1
  6. data/doc/ch03s03.html +1 -1
  7. data/doc/ch03s04.html +1 -1
  8. data/doc/ch03s05.html +1 -1
  9. data/doc/ch04s02.html +6 -7
  10. data/doc/ch04s03.html +1 -1
  11. data/doc/ch04s04.html +1 -1
  12. data/doc/ch05s02.html +44 -46
  13. data/doc/ch05s03.html +21 -22
  14. data/doc/changes.html +31 -24
  15. data/doc/clipboardtut.html +7 -8
  16. data/doc/differences.html +9 -9
  17. data/doc/dragdroptut.html +52 -55
  18. data/doc/events.html +7 -7
  19. data/doc/examples.html +24 -24
  20. data/doc/gems.html +10 -10
  21. data/doc/goals.html +8 -6
  22. data/doc/implementation.html +1 -1
  23. data/doc/infosources.html +5 -5
  24. data/doc/library.html +5 -5
  25. data/doc/opengl.html +5 -5
  26. data/doc/pt01.html +1 -1
  27. data/doc/pt02.html +1 -1
  28. data/doc/scintilla.html +8 -8
  29. data/doc/style.css +246 -2
  30. data/doc/subversion.html +1 -1
  31. data/doc/tutorial1.html +2 -2
  32. data/doc/unicode.html +2 -2
  33. data/examples/babelfish.rb +0 -1
  34. data/examples/bounce.rb +0 -1
  35. data/examples/button.rb +0 -1
  36. data/examples/datatarget.rb +0 -1
  37. data/examples/dialog.rb +0 -1
  38. data/examples/dilbert.rb +0 -1
  39. data/examples/dirlist.rb +0 -1
  40. data/examples/dragdrop.rb +0 -1
  41. data/examples/dragsource.rb +0 -1
  42. data/examples/dropsite.rb +1 -2
  43. data/examples/foursplit.rb +0 -1
  44. data/examples/gltest.rb +0 -1
  45. data/examples/glviewer.rb +0 -1
  46. data/examples/groupbox.rb +0 -1
  47. data/examples/header.rb +0 -1
  48. data/examples/iconlist.rb +0 -1
  49. data/examples/image.rb +0 -1
  50. data/examples/imageviewer.rb +0 -1
  51. data/examples/inputs.rb +0 -1
  52. data/examples/mditest.rb +0 -1
  53. data/examples/pig.rb +0 -1
  54. data/examples/raabrowser.rb +0 -1
  55. data/examples/ratio.rb +0 -1
  56. data/examples/rulerview.rb +0 -1
  57. data/examples/scribble.rb +0 -1
  58. data/examples/shutter.rb +0 -1
  59. data/examples/splitter.rb +0 -1
  60. data/examples/tabbook.rb +0 -1
  61. data/examples/table.rb +0 -1
  62. data/ext/fox16/FXRuby.cpp +3 -4
  63. data/lib/fox16/version.rb +1 -1
  64. metadata +2 -3
  65. data/doc/todo.html +0 -40
@@ -1,6 +1,6 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="examples.html" title="Chapter&nbsp;7.&nbsp;Examples"><link rel="next" href="todo.html" title="Chapter&nbsp;9.&nbsp;To-do list"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="examples.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="todo.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="events"></a>Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2075"></a>Background</h2></div></div></div><p>One of the biggest flaws with earlier releases of FXRuby was its strict reproduction of FOX's process for mapping GUI events (messages) to instance methods (handlers). That process involved four distinct steps:</p><div class="orderedlist"><ol type="1" compact><li><p>Initializing a <span class="emphasis"><em>message identifier</em></span>, an integer that helps to disambiguate the sender of the message and/or its purpose.</p></li><li><p>Mapping a specific message type and identifier to an instance method for the message target object.</p></li><li><p>Implementing the actual handler method in the message target.</p></li><li><p>Registering the message target and message identifier with the widget that's going to send the messages.</p></li></ol></div><p>So, for example, let's say you wanted to create a button widget that, when pressed, prints the string "Ouch!" to the terminal. In the old scheme of things, you'd need to identify some object to act as the target for any messages generated by this button. To keep things simple, let's say that the application's main window (<span class="emphasis"><em>mainWindow</em></span>) is designated as the target for the button. We'll need to generate a unique identifier associated with the button:</p><pre class="programlisting">class MyMainWindow &lt; FXMainWindow
3
+ <title>Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="examples.html" title="Chapter&nbsp;7.&nbsp;Examples"><link rel="next" href="infosources.html" title="Chapter&nbsp;9.&nbsp;Other Sources of Information"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="examples.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="infosources.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="events"></a>Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2095"></a>Background</h2></div></div></div><p>One of the biggest flaws with earlier releases of FXRuby was its strict reproduction of FOX's process for mapping GUI events (messages) to instance methods (handlers). That process involved four distinct steps:</p><div class="orderedlist"><ol type="1" compact><li><p>Initializing a <span class="emphasis"><em>message identifier</em></span>, an integer that helps to disambiguate the sender of the message and/or its purpose.</p></li><li><p>Mapping a specific message type and identifier to an instance method for the message target object.</p></li><li><p>Implementing the actual handler method in the message target.</p></li><li><p>Registering the message target and message identifier with the widget that's going to send the messages.</p></li></ol></div><p>So, for example, let's say you wanted to create a button widget that, when pressed, prints the string "Ouch!" to the terminal. In the old scheme of things, you'd need to identify some object to act as the target for any messages generated by this button. To keep things simple, let's say that the application's main window (<span class="emphasis"><em>mainWindow</em></span>) is designated as the target for the button. We'll need to generate a unique identifier associated with the button:</p><pre class="programlisting">class MyMainWindow &lt; FXMainWindow
4
4
 
5
5
  include Responder
6
6
 
@@ -9,7 +9,7 @@
9
9
  ... other stuff ...
10
10
  end</pre><p>Next, you'd want to specify the mapping for a specific message type to the target's instance method that handles that message:</p><pre class="programlisting">FXMAPFUNC(SEL_COMMAND, MyMainWindow::ID_BUTTON, 'onCmdButton')</pre><p>Finally, you'd need to implement the instance method (<code class="methodname">onCmdButton</code>) named in the call to <code class="methodname">FXMAPFUNC</code>:</p><pre class="programlisting">def onCmdButton(sender, sel, ptr)
11
11
  puts "Ouch!"
12
- end</pre><p>The last step is to tell the button who it's message target is, and which message identifier to use when sending messages to that target:</p><pre class="programlisting">aButton = FXButton.new(parent, "Push Me", nil, mainWindow, ID_BUTTON)</pre><p>This was an extremely tedious process, especially for programmers who are used to Ruby/Tk's or Ruby/GTK's approach for connecting signals (events) to blocks that handle the signal. After some discussions at RubyConf 2001 and subsequent discussions on the Ruby newsgroup, a new model was proposed and hashed out on the RubyGarden Wiki. This new model was introduced with the FXRuby-0.99.179 release.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2123"></a>Event Model</h2></div></div></div><p>FXRuby implements a new, simplified approach to this built on top of the old model. It more or less mimics the syntax used in Ruby/GTK; you can attach a message handler block to a widget using a new <code class="methodname">connect</code> instance method, e.g.</p><pre class="programlisting">aButton = FXButton.new(parent, "Push Me")
12
+ end</pre><p>The last step is to tell the button who it's message target is, and which message identifier to use when sending messages to that target:</p><pre class="programlisting">aButton = FXButton.new(parent, "Push Me", nil, mainWindow, ID_BUTTON)</pre><p>This was an extremely tedious process, especially for programmers who are used to Ruby/Tk's or Ruby/GTK's approach for connecting signals (events) to blocks that handle the signal. After some discussions at RubyConf 2001 and subsequent discussions on the Ruby newsgroup, a new model was proposed and hashed out on the RubyGarden Wiki. This new model was introduced with the FXRuby-0.99.179 release.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2143"></a>Event Model</h2></div></div></div><p>FXRuby implements a new, simplified approach to this built on top of the old model. It more or less mimics the syntax used in Ruby/GTK; you can attach a message handler block to a widget using a new <code class="methodname">connect</code> instance method, e.g.</p><pre class="programlisting">aButton = FXButton.new(parent, "Push Me")
13
13
  aButton.connect(SEL_COMMAND) { |sender, sel, ptr|
14
14
  puts "Ouch!"
15
15
  }</pre><p>Alternate forms of the <code class="methodname">FXObject#connect</code> method can take either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as a second argument (i.e. instead of attaching a block), e.g.</p><pre class="programlisting">def push(sender, sel, ptr)
@@ -18,13 +18,13 @@ end
18
18
 
19
19
  aButton = FXButton.new(parent, "Push Me")
20
20
  aButton.connect(SEL_COMMAND, method(:push))</pre><p>It works by creating a special target object (behind the scenes) that stands-in as the message target for your widget and passes off incoming messages to the appropriate block. The single argument to <code class="methodname">connect</code> is the FOX message type you're handling (e.g. <code class="constant">SEL_COMMAND</code>, <code class="constant">SEL_CHANGED</code>, etc.) The three arguments to the block are the same as those for regular FOX message handler methods, namely, the sender object, the message type and identifier and the message data. And of course, for simple handlers like this one, you can just leave the arguments off altogether:</p><pre class="programlisting">aButton = FXButton.new(parent, "Push Me")
21
- aButton.connect(SEL_COMMAND) { puts "Ouch!" }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2159"></a>Timers</h2></div></div></div><p>Timers are scheduled by calling <code class="methodname">FXApp#addTimeout</code>. There are three different forms of <code class="methodname">addTimeout</code>, but the first argument to each is the timeout interval in milliseconds. The most primitive version of this method takes two additional arguments to specify the target object and message identifier for the object that will handle the timeout event:</p><pre class="programlisting">aTimer = getApp().addTimeout(1000, timeoutHandlerObj, ID_TIMER)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its second argument, e.g.</p><pre class="programlisting">aTimer = getApp().addTimeout(1000, method(:timeoutHandlerMethod))</pre><p>The last form uses a code block as the handler for the timeout event:</p><pre class="programlisting">aTimer = getApp().addTimeout(1000) { |sender, sel, ptr|
21
+ aButton.connect(SEL_COMMAND) { puts "Ouch!" }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2179"></a>Timers</h2></div></div></div><p>Timers are scheduled by calling <code class="methodname">FXApp#addTimeout</code>. There are three different forms of <code class="methodname">addTimeout</code>, but the first argument to each is the timeout interval in milliseconds. The most primitive version of this method takes two additional arguments to specify the target object and message identifier for the object that will handle the timeout event:</p><pre class="programlisting">aTimer = getApp().addTimeout(1000, timeoutHandlerObj, ID_TIMER)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its second argument, e.g.</p><pre class="programlisting">aTimer = getApp().addTimeout(1000, method(:timeoutHandlerMethod))</pre><p>The last form uses a code block as the handler for the timeout event:</p><pre class="programlisting">aTimer = getApp().addTimeout(1000) { |sender, sel, ptr|
22
22
  # handle this timeout event
23
- }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2186"></a>Chores</h2></div></div></div><p>Chores are scheduled by calling <code class="methodname">FXApp#addChore</code>. There are three different forms of <code class="methodname">addChore</code>; the most primitive version requires two arguments to specify the target object and message identifier for the object that will handle the chore event:</p><pre class="programlisting">aChore = getApp().addChore(choreHandlerObj, ID_CHORE)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its single argument, e.g.</p><pre class="programlisting">aChore = getApp().addChore(method(:choreHandlerMethod))</pre><p>The last form uses a code block as the handler for the chore:</p><pre class="programlisting">aChore = getApp().addChore { |sender, sel, ptr|
23
+ }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2206"></a>Chores</h2></div></div></div><p>Chores are scheduled by calling <code class="methodname">FXApp#addChore</code>. There are three different forms of <code class="methodname">addChore</code>; the most primitive version requires two arguments to specify the target object and message identifier for the object that will handle the chore event:</p><pre class="programlisting">aChore = getApp().addChore(choreHandlerObj, ID_CHORE)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its single argument, e.g.</p><pre class="programlisting">aChore = getApp().addChore(method(:choreHandlerMethod))</pre><p>The last form uses a code block as the handler for the chore:</p><pre class="programlisting">aChore = getApp().addChore { |sender, sel, ptr|
24
24
  # handle this chore
25
- }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2213"></a>Signals</h2></div></div></div><p>Operating system signal handlers are designated by calling <code class="methodname">FXApp#addSignal</code>. There are three different forms of <code class="methodname">addSignal</code>, but the first argument to each is the signal name (e.g. "SIGINT") or number. Each version also has two optional arguments (which should come at the end of the list) to specify <em class="parameter"><code>immediate</code></em> and <em class="parameter"><code>flags</code></em>. The most primitive version of this method takes two additional arguments to specify the target object and message identifier for the object that will handle this operating system signal:</p><pre class="programlisting">aSignal = getApp().addSignal("SIGINT", signalHandlerObj, ID_SIGINT)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its second argument, e.g.</p><pre class="programlisting">aSignal = getApp().addSignal("SIGINT", method(:signalHandlerMethod))</pre><p>The last form uses a code block as the handler for the signal:</p><pre class="programlisting">aSignal = getApp().addSignal("SIGINT") { |sender, sel, ptr|
25
+ }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2233"></a>Signals</h2></div></div></div><p>Operating system signal handlers are designated by calling <code class="methodname">FXApp#addSignal</code>. There are three different forms of <code class="methodname">addSignal</code>, but the first argument to each is the signal name (e.g. "SIGINT") or number. Each version also has two optional arguments (which should come at the end of the list) to specify <em class="parameter"><code>immediate</code></em> and <em class="parameter"><code>flags</code></em>. The most primitive version of this method takes two additional arguments to specify the target object and message identifier for the object that will handle this operating system signal:</p><pre class="programlisting">aSignal = getApp().addSignal("SIGINT", signalHandlerObj, ID_SIGINT)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its second argument, e.g.</p><pre class="programlisting">aSignal = getApp().addSignal("SIGINT", method(:signalHandlerMethod))</pre><p>The last form uses a code block as the handler for the signal:</p><pre class="programlisting">aSignal = getApp().addSignal("SIGINT") { |sender, sel, ptr|
26
26
  # handle this signal
27
- }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2246"></a>Input Events</h2></div></div></div><p>Input event handlers are designated by calling <code class="methodname">FXApp#addInput</code>. There are three different forms of <code class="methodname">addInput</code>, but the first two arguments to each are the file object (including sockets) and the mode flag (some combination of <code class="constant">INPUT_READ</code>, <code class="constant">INPUT_WRITE</code> and <code class="constant">INPUT_EXCEPT</code>). The most primitive version of this method takes two additional arguments to specify the target object and message identifier for the object that will handle this input event:</p><pre class="programlisting">getApp().addInput(aFile, INPUT_READ, inputHandlerObj, ID_INPUT)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its third argument, e.g.</p><pre class="programlisting">getApp().addInput(aSocket, INPUT_READ|INPUT_EXCEPT, method(:inputHandlerMethod))</pre><p>The last form uses a code block as the handler for the input event:</p><pre class="programlisting">getApp().addInput(aFile, INPUT_WRITE|INPUT_EXCEPT) { |sender, sel, ptr|
27
+ }</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2266"></a>Input Events</h2></div></div></div><p>Input event handlers are designated by calling <code class="methodname">FXApp#addInput</code>. There are three different forms of <code class="methodname">addInput</code>, but the first two arguments to each are the file object (including sockets) and the mode flag (some combination of <code class="constant">INPUT_READ</code>, <code class="constant">INPUT_WRITE</code> and <code class="constant">INPUT_EXCEPT</code>). The most primitive version of this method takes two additional arguments to specify the target object and message identifier for the object that will handle this input event:</p><pre class="programlisting">getApp().addInput(aFile, INPUT_READ, inputHandlerObj, ID_INPUT)</pre><p>The second form takes either a <code class="classname">Method</code> or <code class="classname">Proc</code> instance as its third argument, e.g.</p><pre class="programlisting">getApp().addInput(aSocket, INPUT_READ|INPUT_EXCEPT, method(:inputHandlerMethod))</pre><p>The last form uses a code block as the handler for the input event:</p><pre class="programlisting">getApp().addInput(aFile, INPUT_WRITE|INPUT_EXCEPT) { |sender, sel, ptr|
28
28
  # handle this input
29
29
  }</pre><p>This API is a little different from the other cases. For example, timeout events always send the same message type (<code class="constant">SEL_TIMEOUT</code>) to their message target, so you just have a single handler method (or block) to handle the timeout. In contrast, input sources (e.g. pipes or sockets) can generate three different FOX messages, <code class="constant">SEL_IO_READ</code>, <code class="constant">SEL_IO_WRITE</code> and <code class="constant">SEL_IO_EXCEPTION</code>, depending on what happens, so your handler method (block) needs to check the message type, e.g.</p><pre class="programlisting">getApp().addInput(socket, INPUT_READ|INPUT_WRITE) { |sender, sel, ptr|
30
30
  case SELTYPE(sel)
@@ -33,4 +33,4 @@ aButton.connect(SEL_COMMAND) { puts "Ouch!" }</pre></div><div class="simplesect"
33
33
  when SEL_IO_WRITE
34
34
  # handle write event
35
35
  end
36
- }</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="examples.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="todo.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;7.&nbsp;Examples&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;9.&nbsp;To-do list</td></tr></table></div></body></html>
36
+ }</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="examples.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="infosources.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;7.&nbsp;Examples&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;9.&nbsp;Other Sources of Information</td></tr></table></div></body></html>
@@ -1,12 +1,12 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Chapter&nbsp;7.&nbsp;Examples</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="unicode.html" title="Chapter&nbsp;6.&nbsp;Unicode and FXRuby"><link rel="next" href="events.html" title="Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;7.&nbsp;Examples</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unicode.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="events.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="examples"></a>Chapter&nbsp;7.&nbsp;Examples</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1648"></a>hello</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/hello.rb" target="_top"><code class="filename">hello.rb</code></a>
3
+ <title>Chapter&nbsp;7.&nbsp;Examples</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="unicode.html" title="Chapter&nbsp;6.&nbsp;Unicode and FXRuby"><link rel="next" href="events.html" title="Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;7.&nbsp;Examples</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unicode.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="events.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="examples"></a>Chapter&nbsp;7.&nbsp;Examples</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1668"></a>hello</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/hello.rb" target="_top"><code class="filename">hello.rb</code></a>
4
4
  example program is about as short as it gets for a working FXRuby program.
5
5
  Use this as a starting point for understanding the basic elements of an
6
6
  FXRuby program, especially if you're new to GUI programming in
7
- general.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1661"></a>hello2</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/hello2.rb" target="_top"><code class="filename">hello2.rb</code></a>
7
+ general.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1681"></a>hello2</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/hello2.rb" target="_top"><code class="filename">hello2.rb</code></a>
8
8
  example kicks it up a notch by adding an icon and tooltip to the button
9
- from the <code class="filename">hello.rb</code> example.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello2.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1677"></a>scribble</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/scribble.rb" target="_top"><code class="filename">scribble.rb</code></a>
9
+ from the <code class="filename">hello.rb</code> example.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello2.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1697"></a>scribble</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/scribble.rb" target="_top"><code class="filename">scribble.rb</code></a>
10
10
  example is a good demonstration of how to obtain a device context for a
11
11
  window (in this case, an <code class="classname">FXCanvas</code>) and draw into
12
12
  that window. It also provides a basic demonstration of how FOX's GUI
@@ -14,9 +14,9 @@
14
14
  widgets based on the application's state. Observe the "Clear"
15
15
  button becoming enabled and disabled (greyed-out) depending on whether the
16
16
  canvas is currently "dirty" or "clean", and then see how
17
- this updating is actually handled in the code.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/scribble.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1693"></a>button</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/button.rb" target="_top"><code class="filename">button.rb</code></a>
17
+ this updating is actually handled in the code.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/scribble.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1713"></a>button</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/button.rb" target="_top"><code class="filename">button.rb</code></a>
18
18
  example program shows off the various options (or button styles) for
19
- <code class="classname">FXButton</code> widgets.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/button.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1709"></a>datatarget</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/datatarget.rb" target="_top"><code class="filename">datatarget.rb</code></a>
19
+ <code class="classname">FXButton</code> widgets.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/button.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1729"></a>datatarget</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/datatarget.rb" target="_top"><code class="filename">datatarget.rb</code></a>
20
20
  example program demonstrates most or all of the widgets that can work with
21
21
  FOX data targets (that is, instances of class <code class="classname">FXDataTarget</code>).
22
22
  Data targets are special objects that have a a string, float or integer
@@ -28,63 +28,63 @@
28
28
  target's value is changed, the text field will update its setting.
29
29
  Since a single data targets can be attached to multiple widgets, this can
30
30
  be a useful way to keep multiple controls for the same logical value in
31
- sync with each other.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/datatarget.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1725"></a>dialog</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/dialog.rb" target="_top"><code class="filename">dialog.rb</code></a>
31
+ sync with each other.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/datatarget.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1745"></a>dialog</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/dialog.rb" target="_top"><code class="filename">dialog.rb</code></a>
32
32
  example is a simple program demonstrating how to construct and display
33
- modal and non-modal dialog boxes.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/dialog.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1738"></a>dirlist</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/dirlist.rb" target="_top"><code class="filename">dirlist.rb</code></a>
33
+ modal and non-modal dialog boxes.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/dialog.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1758"></a>dirlist</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/dirlist.rb" target="_top"><code class="filename">dirlist.rb</code></a>
34
34
  example program demonstrates the <code class="classname">FXDirList</code> widget.
35
35
  The directory list is a special kind of tree list, where each tree item
36
- represents a directory (or folder) in the file system.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/dirlist.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1754"></a>iconlist</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/iconlist.rb" target="_top"><code class="filename">iconlist.rb</code></a>
36
+ represents a directory (or folder) in the file system.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/dirlist.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1774"></a>iconlist</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/iconlist.rb" target="_top"><code class="filename">iconlist.rb</code></a>
37
37
  example program demonstrates the <code class="classname">FXIconList</code> widget.
38
38
  An icon list is a special kind of list widget that can display its
39
39
  contents in one of three basic modes (details mode, small icons mode or
40
40
  large icons mode). The first screenshot below shows an icon list in
41
41
  details mode, while the second shows the same icon list in "big
42
- icons" mode.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/iconlist-details.png" align="middle"></div></div><div class="screenshot"><div class="mediaobject" align="center"><img src="images/iconlist-bigicons.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1774"></a>mditest</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/mditest.rb" target="_top"><code class="filename">mditest.rb</code></a>
42
+ icons" mode.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/iconlist-details.png" align="middle"></div></div><div class="screenshot"><div class="mediaobject" align="center"><img src="images/iconlist-bigicons.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1794"></a>mditest</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/mditest.rb" target="_top"><code class="filename">mditest.rb</code></a>
43
43
  example program demonstrates FOX's Multiple Document Interface (MDI)
44
44
  capabilities, specifically the <code class="classname">FXMDIClient</code> and
45
- <code class="classname">FXMDIChild</code> classes.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/mditest.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1793"></a>groupbox</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/groupbox.rb" target="_top"><code class="filename">groupbox.rb</code></a>
45
+ <code class="classname">FXMDIChild</code> classes.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/mditest.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1813"></a>groupbox</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/groupbox.rb" target="_top"><code class="filename">groupbox.rb</code></a>
46
46
  example program is a kind of "periodic table of widgets"
47
47
  demonstration, FOX-style. It shows off a lot of the FOX widgets as well as
48
- providing a good exercise of FOX's layout managers.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/groupbox.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1806"></a>header</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/header.rb" target="_top"><code class="filename">header.rb</code></a>
48
+ providing a good exercise of FOX's layout managers.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/groupbox.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1826"></a>header</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/header.rb" target="_top"><code class="filename">header.rb</code></a>
49
49
  example program mainly demonstrates the <code class="classname">FXHeader</code>
50
- widget and the <code class="classname">FXSplitter</code> layout manager.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/header.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1825"></a>image</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/image.rb" target="_top"><code class="filename">image.rb</code></a>
50
+ widget and the <code class="classname">FXSplitter</code> layout manager.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/header.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1845"></a>image</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/image.rb" target="_top"><code class="filename">image.rb</code></a>
51
51
  example demonstrates how to draw directly into an <code class="classname">FXImage</code>
52
- object and then "draw" that image into a canvas.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/image.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1841"></a>splitter</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/splitter.rb" target="_top"><code class="filename">splitter.rb</code></a>
52
+ object and then "draw" that image into a canvas.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/image.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1861"></a>splitter</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/splitter.rb" target="_top"><code class="filename">splitter.rb</code></a>
53
53
  example demonstrates the <code class="classname">FXSplitter</code> layout manager.
54
54
  It also provides an example of the <code class="classname">FXTreeList</code>
55
55
  widget (on the left side of the split) and the <code class="classname">FXMatrix</code>
56
- layout manager (in the middle pane).</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/splitter.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1863"></a>foursplit</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/foursplit.rb" target="_top"><code class="filename">foursplit.rb</code></a>
56
+ layout manager (in the middle pane).</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/splitter.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1883"></a>foursplit</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/foursplit.rb" target="_top"><code class="filename">foursplit.rb</code></a>
57
57
  example program demonstrates the <code class="classname">FX4Splitter</code> layout
58
58
  manager. This four-way split is especially useful for CAD-type programs
59
59
  where it's necessary to show multiple views of the model
60
- simultaneously.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/foursplit.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1879"></a>shutter</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/shutter.rb" target="_top"><code class="filename">shutter.rb</code></a>
60
+ simultaneously.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/foursplit.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1899"></a>shutter</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/shutter.rb" target="_top"><code class="filename">shutter.rb</code></a>
61
61
  example provides a simple demonstration of the <code class="classname">FXShutter</code>
62
62
  widget, with the skeleton of a PIM-type application. The very nice icons
63
- used for this program are courtesy of <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.forrestwalter.com/icons" target="_top">Gort's Icons</a>.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/shutter.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1898"></a>tabbook</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/tabbook.rb" target="_top"><code class="filename">tabbook.rb</code></a>
63
+ used for this program are courtesy of <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.forrestwalter.com/icons" target="_top">Gort's Icons</a>.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/shutter.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1918"></a>tabbook</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/tabbook.rb" target="_top"><code class="filename">tabbook.rb</code></a>
64
64
  example exists mainly to demonstrate the <code class="classname">FXTabBook</code>
65
- widget, but shows off a few other features in the process.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/tabbook.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1914"></a>table</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/table.rb" target="_top"><code class="filename">table.rb</code></a>
65
+ widget, but shows off a few other features in the process.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/tabbook.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1934"></a>table</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/table.rb" target="_top"><code class="filename">table.rb</code></a>
66
66
  example features the <code class="classname">FXTable</code> widget, sometimes
67
67
  known as a "grid" or "spreadsheet" widget in other
68
- toolkits.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/table.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1930"></a>gltest</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/gltest.rb" target="_top"><code class="filename">gltest.rb</code></a>
68
+ toolkits.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/table.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1950"></a>gltest</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/gltest.rb" target="_top"><code class="filename">gltest.rb</code></a>
69
69
  example program demonstrates how to create a basic OpenGL canvas (i.e. an
70
70
  instance of the <code class="classname">FXGLCanvas</code> widget) and draw into
71
71
  it. It also demonstrates how to use timers and chores. This example
72
72
  requires the Ruby/OpenGL extension, available from the Ruby Application
73
- Archive.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/gltest.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1946"></a>glviewer</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/glviewer.rb" target="_top"><code class="filename">glviewer.rb</code></a>
73
+ Archive.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/gltest.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1966"></a>glviewer</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/glviewer.rb" target="_top"><code class="filename">glviewer.rb</code></a>
74
74
  example program demonstrates how to use the <code class="classname">FXGLViewer</code>
75
75
  widget and draw various kinds of GL objects into it. It can also be used
76
76
  as model for a fairly complicated FXRuby application, since it includes a
77
- lot of typical features (like a menu bar, toolbar, status line, etc.).</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/glviewer.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1962"></a>imageviewer</h2></div></div></div><p>Like the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/glviewer.rb" target="_top"><code class="filename">glviewer.rb</code></a>
77
+ lot of typical features (like a menu bar, toolbar, status line, etc.).</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/glviewer.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1982"></a>imageviewer</h2></div></div></div><p>Like the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/glviewer.rb" target="_top"><code class="filename">glviewer.rb</code></a>
78
78
  example, the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/imageviewer.rb" target="_top"><code class="filename">imageviewer.rb</code></a>
79
79
  can be used as a model for a typical full-featured GUI application, with a
80
80
  menu bar, toolbar, and so forth. It also features the
81
- <code class="classname">FXImageView</code> widget.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/imageviewer.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1982"></a>dilbert</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/dilbert.rb" target="_top"><code class="filename">dilbert.rb</code></a>
81
+ <code class="classname">FXImageView</code> widget.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/imageviewer.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2002"></a>dilbert</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/dilbert.rb" target="_top"><code class="filename">dilbert.rb</code></a>
82
82
  example fetches the "Daily Dilbert" cartoon and displays it in a
83
83
  window. This was just a fun little exercise for me, but it does provide a
84
84
  more bare-bones example of the <code class="classname">FXImageView</code> widget
85
85
  than that provided by the (more complicated) <code class="filename">imageviewer.rb</code>
86
86
  example.</p><p>This example program requires the html-parser extension, available
87
- from the Ruby Application Archive.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/dilbert.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2003"></a>raabrowser</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/raabrowser.rb" target="_top"><code class="filename">raabrowser.rb</code></a>
87
+ from the Ruby Application Archive.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/dilbert.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2023"></a>raabrowser</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/raabrowser.rb" target="_top"><code class="filename">raabrowser.rb</code></a>
88
88
  example program shows a treelist view of the current Ruby Application
89
89
  Archive (RAA) contents, and product-specific information for the currently
90
90
  selected product in the panel on the right. This is a good demonstration
@@ -95,10 +95,10 @@
95
95
  the tree) try resizing the split.</p></li><li style="list-style-type: disc"><p>the <code class="classname">FXTreeList</code> widget, used to display
96
96
  the RAA contents.</p></li><li style="list-style-type: disc"><p>data targets (i.e. instances of class <code class="classname">FXDataTarget</code>),
97
97
  which are used for the contents of the fields in the information
98
- panel.</p></li></ul></div><p>This example program requires the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.jin.gr.jp/~nahi/Ruby/SOAP4R" target="_top">SOAP4R</a> extension.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/raabrowser.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2040"></a>babelfish</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/babelfish.rb" target="_top"><code class="filename">babelfish.rb</code></a>
98
+ panel.</p></li></ul></div><p>This example program requires the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.jin.gr.jp/~nahi/Ruby/SOAP4R" target="_top">SOAP4R</a> extension.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/raabrowser.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2060"></a>babelfish</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/babelfish.rb" target="_top"><code class="filename">babelfish.rb</code></a>
99
99
  example program, like the <code class="filename">raabrowser.rb</code> example,
100
100
  depends on the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.jin.gr.jp/~nahi/Ruby/SOAP4R" target="_top">SOAP4R</a>
101
- extension. Other than that it doesn't bring anything new to the table.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/babelfish.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2059"></a>browser</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/browser.rb" target="_top"><code class="filename">browser.rb</code></a>
101
+ extension. Other than that it doesn't bring anything new to the table.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/babelfish.png" align="middle"></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2079"></a>browser</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="../examples/browser.rb" target="_top"><code class="filename">browser.rb</code></a>
102
102
  example program is mainly a "me too" for the class browser
103
103
  distributed with Ruby/GTK. It's hard for me to get excited about it,
104
104
  but here it is.</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/browser.png" align="middle"></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unicode.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="events.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;6.&nbsp;Unicode and FXRuby&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System</td></tr></table></div></body></html>
@@ -1,18 +1,18 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Chapter&nbsp;2.&nbsp;Installing from Gems</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="build.html" title="Chapter&nbsp;1.&nbsp;Building from Source Code"><link rel="next" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;2.&nbsp;Installing from Gems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="build.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tutorial1.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="gems"></a>Chapter&nbsp;2.&nbsp;Installing from Gems</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e413"></a>Introduction</h2></div></div></div><p>Starting with FXRuby version 1.2, FXRuby uses <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://rubygems.rubyforge.org" target="_top">RubyGems</a> as its packaging and
3
+ <title>Chapter&nbsp;2.&nbsp;Installing from Gems</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="build.html" title="Chapter&nbsp;1.&nbsp;Building from Source Code"><link rel="next" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;2.&nbsp;Installing from Gems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="build.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tutorial1.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="gems"></a>Chapter&nbsp;2.&nbsp;Installing from Gems</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e430"></a>Introduction</h2></div></div></div><p>Starting with FXRuby version 1.2, FXRuby uses <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://rubygems.rubyforge.org" target="_top">RubyGems</a> as its preferred packaging and
4
4
  distribution method. The code is available both as</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>a "source" gem, which contains source code that must be compiled
5
5
  on your computer before it's installed; and,</p></li><li style="list-style-type: disc"><p>a "binary" gem, which contains a precompiled version of the code
6
- for a specific operating system (such as Windows).</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e428"></a>Installing from a Source Gem</h2></div></div></div><p>If you've already downloaded the source gem, you can install it by
7
- typing:</p><pre class="screen">$ <span><strong class="command">sudo gem install fxruby-1.6.0.gem</strong></span></pre><p>Note the use of the <span><strong class="command">sudo</strong></span> command to invoke
6
+ for a specific operating system (such as Windows).</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e445"></a>Installing from a Source Gem</h2></div></div></div><p>If you've already downloaded the source gem, you can install it by
7
+ typing:</p><pre class="screen">$ <span><strong class="command">sudo gem install fxruby-1.6.7.gem</strong></span></pre><p>Note the use of the <span><strong class="command">sudo</strong></span> command to invoke
8
8
  superuser privileges, since you'll typically need superuser privileges to
9
9
  install the library files. By default, the source gem will look for your
10
10
  FOX (and optionally, FXScintilla) installation in a few standard places,
11
11
  such as the <code class="filename">/usr</code>, <code class="filename">/usr/local</code> and
12
12
  <code class="filename">/sw</code> directories. If you've installed those libraries
13
13
  under some other directory (for example, in your home directory) you might
14
- need to pass some additional arguments on the command line, e.g.</p><pre class="screen">$ <span><strong class="command">sudo gem install fxruby-1.6.0.gem --force -- --with-fox-include=/home/lyle/include/fox-1.6 --with-fox-lib=/home/lyle/lib</strong></span></pre><p>If you're installing a source gem on a Windows box, you'd instead
15
- type something like:</p><pre class="screen">C:\&gt; <span><strong class="command">gem install fxruby-1.6.0.gem --force -- --with-fox-include=C:\include\fox-1.6 --with-fox-lib=C:\lib</strong></span></pre><p>If you're installing a source gem, it can take quite awhile to build
14
+ need to pass some additional arguments on the command line, e.g.</p><pre class="screen">$ <span><strong class="command">sudo gem install fxruby-1.6.7.gem --force -- --with-fox-include=/home/lyle/include/fox-1.6 --with-fox-lib=/home/lyle/lib</strong></span></pre><p>If you're installing a source gem on a Windows box, you'd instead
15
+ type something like:</p><pre class="screen">C:\&gt; <span><strong class="command">gem install fxruby-1.6.7.gem --force -- --with-fox-include=C:\include\fox-1.6 --with-fox-lib=C:\lib</strong></span></pre><p>If you're installing a source gem, it can take quite awhile to build
16
16
  FXRuby, so this might be a good time to take a coffee break. You won't see
17
17
  any compiler output appear on the screen while the gem is compiling, but
18
18
  rest assured that the output is being saved into the
@@ -27,7 +27,7 @@ true</pre><p>If the import failed (usually with a message along the lines of
27
27
  of this chapter. If that doesn't help, drop me an e-mail or ask around on
28
28
  the Ruby newsgroup or mailing list; it's quite likely that someone else
29
29
  has run into this problem too. Once you do have a working FXRuby
30
- installation, you're ready to check out the example programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e485"></a>Installing from a Binary Gem</h2></div></div></div><p>To install a binary gem for Windows, just type:</p><pre class="screen">C:\&gt; <span><strong class="command">gem install fxruby-1.6.0-mswin32.gem</strong></span></pre><p>As a quick sanity check, to make sure that all is well, you should
30
+ installation, you're ready to check out the example programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e502"></a>Installing from a Binary Gem</h2></div></div></div><p>To install a binary gem for Windows, just type:</p><pre class="screen">C:\&gt; <span><strong class="command">gem install fxruby-1.6.7-mswin32.gem</strong></span></pre><p>As a quick sanity check, to make sure that all is well, you should
31
31
  probably fire up <code class="filename">irb</code> and try to require the FXRuby
32
32
  gem once the installation is complete:</p><pre class="screen">C:\&gt; <span><strong class="command">irb</strong></span>
33
33
  irb(main):001:0&gt; <strong class="userinput"><code><span><strong class="command">require 'rubygems'</strong></span></code></strong>
@@ -38,7 +38,7 @@ true</pre><p>If the import failed (usually with a message along the lines of
38
38
  of this chapter. If that doesn't help, drop me an e-mail or ask around on
39
39
  the Ruby newsgroup or mailing list; it's quite likely that someone else
40
40
  has run into this problem too. Once you do have a working FXRuby
41
- installation, you're ready to check out the example programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e513"></a>Things That Can Go Wrong</h2></div></div></div><p><span class="emphasis"><em>"Cannot load library"</em></span></p><p>On Linux and other Unix systems that support shared libraries, FOX
41
+ installation, you're ready to check out the example programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e530"></a>Things That Can Go Wrong</h2></div></div></div><p><span class="emphasis"><em>"Cannot load library"</em></span></p><p>On Linux and other Unix systems that support shared libraries, FOX
42
42
  is typically installed as a shared library named
43
43
  <code class="filename">libFOX-1.6.so</code>. After all of the source files for
44
44
  FXRuby are compiled, the last step is to link all of the FXRuby object
@@ -49,8 +49,8 @@ true</pre><p>If the import failed (usually with a message along the lines of
49
49
  locate the FOX shared library (<code class="filename">libFOX-1.6.so</code>) when it
50
50
  tries to dynamically load the FXRuby extension module; when this happens,
51
51
  the error message will look something like:</p><pre class="screen">$ <span><strong class="command">irb</strong></span>
52
- irb(main):001:0&gt; <strong class="userinput"><code>require 'fox'</code></strong>
53
- LoadError: libFOX-0.99.so.173: cannot open shared object file: No such file or directory - /usr/local/lib/ruby/1.8/i686-linux/fox.so
52
+ irb(main):001:0&gt; <strong class="userinput"><code>require 'fox16'</code></strong>
53
+ LoadError: libFOX-1.6.so: cannot open shared object file: No such file or directory - /usr/local/lib/ruby/1.8/i686-linux/fox16.so
54
54
  from (irb):1:in 'require'
55
55
  from (irb):1
56
56
  </pre><p>Note that the wording of this error message may be slightly
@@ -68,6 +68,6 @@ irb(main):001:0&gt; <strong class="userinput"><code>require 'fox16'</code></stro
68
68
  <code class="filename">/etc/ld.so.conf</code> file to include the installation
69
69
  directory (e.g. <code class="filename">/usr/local/lib</code>). If you'd like to do
70
70
  this instead, you'll need to (as root):</p><div class="orderedlist"><ol type="1" compact><li><p>Edit your <code class="filename">/etc/ld.so.conf</code> file and add the
71
- directory where <code class="filename">libFOX.so</code> is installed;
71
+ directory where <code class="filename">libFOX-1.6.so</code> is installed;
72
72
  and,</p></li><li><p>At the shell prompt, type <span><strong class="command">ldconfig</strong></span> to reload
73
73
  the linker configuration.</p></li></ol></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="build.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="tutorial1.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;1.&nbsp;Building from Source Code&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;3.&nbsp;Hello, World!</td></tr></table></div></body></html>
@@ -14,7 +14,7 @@
14
14
  of its maturity and availability on a number of platforms (including the
15
15
  Macintosh). But Tk is also showing its age in many ways and it has failed
16
16
  to keep pace with some of the "younger" cross-platform GUI toolkits like
17
- FOX, wxWindows, FLTK, Qt and GTK+. Of the latter five, only Qt and GTK+
17
+ FOX, wxWidgets, FLTK, Qt and GTK+. Of the latter five, only Qt and GTK+
18
18
  appeared (at the time) to have usable Ruby interfaces and there are some
19
19
  problems associated with these as well; for Qt, it's the restrictive
20
20
  license for the Windows platform version, and for GTK+ it's a Windows
@@ -31,9 +31,11 @@
31
31
  Conference in Tampa, Florida.</p></li><li style="list-style-type: disc"><p>Although the lack of documentation has been a sore spot for
32
32
  some time, several Ruby books (such as the <em class="citetitle">
33
33
  Ruby Developer's Guide</em> and <em class="citetitle">The Ruby
34
- Way</em>) feature FXRuby as a Ruby GUI development option.</p></li></ul></div><p>Most recently, work has focused on keeping FXRuby up-to-date with the
34
+ Way</em>) feature FXRuby as a Ruby GUI development option.</p></li><li style="list-style-type: disc"><p>FXRuby is used as the GUI for <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://freeride.rubyforge.org/wiki/wiki.pl" target="_top">
35
+ FreeRIDE</a> and a number of other Ruby-based projects.</p></li></ul></div><p>Most recently, work has focused on keeping FXRuby up-to-date with the
35
36
  still evolving FOX library while looking for new ways to make Ruby GUI
36
- development fun. For example, FXRuby is under consideration for use as a
37
- GUI front-end to the fledgling <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://freeride.rubyforge.org/wiki/wiki.pl" target="_top">
38
- FreeRIDE</a> project. If you have suggestions about where you'd like to
39
- see things go, feel free to drop me an e-mail.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pt01.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="build.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;I.&nbsp;The Basics&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;1.&nbsp;Building from Source Code</td></tr></table></div></body></html>
37
+ development fun. If you have suggestions about where you'd like to
38
+ see things go, feel free to drop me an e-mail.</p><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e71"></a>About this Document</h2></div></div></div><p>The contents of this document were written using <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://docbook.org/whatis" target="_top">DocBook</a> version 5.0.
39
+ The HTML version of this document uses the CSS stylesheet originally developed for the
40
+ HTML version of the book <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://svnbook.red-bean.com/" target="_top">Version Control with Subversion</a>,
41
+ which is licensed under the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://creativecommons.org/licenses/by/2.0/" target="_top">Creative Commons Attribution License</a>.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pt01.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="build.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;I.&nbsp;The Basics&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;1.&nbsp;Building from Source Code</td></tr></table></div></body></html>
@@ -1,6 +1,6 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Appendix&nbsp;E.&nbsp;Implementation</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="prev" href="library.html" title="Appendix&nbsp;D.&nbsp;The FXRuby Standard Library"><link rel="next" href="apes02.html" title="Object Life Cycles and Garbage Collection"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix&nbsp;E.&nbsp;Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="library.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="apes02.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="implementation"></a>Appendix&nbsp;E.&nbsp;Implementation</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="implementation.html#d0e5261">Code Generation</a></span></dt><dt><span class="section"><a href="apes02.html">Object Life Cycles and Garbage Collection</a></span></dt><dd><dl><dt><span class="section"><a href="apes02.html#d0e5299">GL Objects</a></span></dt></dl></dd><dt><span class="section"><a href="apes03.html">Virtual Functions</a></span></dt></dl></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5261"></a>Code Generation</h2></div></div></div><p>The development and maintenance of FXRuby would be almost impossible
3
+ <title>Appendix&nbsp;E.&nbsp;Implementation</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="prev" href="library.html" title="Appendix&nbsp;D.&nbsp;The FXRuby Standard Library"><link rel="next" href="apes02.html" title="Object Life Cycles and Garbage Collection"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix&nbsp;E.&nbsp;Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="library.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="apes02.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="implementation"></a>Appendix&nbsp;E.&nbsp;Implementation</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="implementation.html#d0e5248">Code Generation</a></span></dt><dt><span class="section"><a href="apes02.html">Object Life Cycles and Garbage Collection</a></span></dt><dd><dl><dt><span class="section"><a href="apes02.html#d0e5286">GL Objects</a></span></dt></dl></dd><dt><span class="section"><a href="apes03.html">Virtual Functions</a></span></dt></dl></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5248"></a>Code Generation</h2></div></div></div><p>The development and maintenance of FXRuby would be almost impossible
4
4
  without the help of Dave Beazley's excellent
5
5
  <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.swig.org" target="_top">SWIG</a>. The complete set of SWIG
6
6
  interface files used to generate FXRuby is included in the standard
@@ -1,14 +1,14 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Chapter&nbsp;10.&nbsp;Other Sources of Information</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="todo.html" title="Chapter&nbsp;9.&nbsp;To-do list"><link rel="next" href="changes.html" title="Chapter&nbsp;11.&nbsp;Change History"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;10.&nbsp;Other Sources of Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="todo.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="changes.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="infosources"></a>Chapter&nbsp;10.&nbsp;Other Sources of Information</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2357"></a>Books</h2></div></div></div><p>There are no books entirely dedicated to programming with FXRuby,
3
+ <title>Chapter&nbsp;9.&nbsp;Other Sources of Information</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="prev" href="events.html" title="Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System"><link rel="next" href="changes.html" title="Chapter&nbsp;10.&nbsp;Change History"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;9.&nbsp;Other Sources of Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="events.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="changes.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="infosources"></a>Chapter&nbsp;9.&nbsp;Other Sources of Information</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2322"></a>Books</h2></div></div></div><p>There are no books entirely dedicated to programming with FXRuby,
4
4
  but the following Ruby books contain sections on FXRuby:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p><em class="citetitle">The Ruby Way</em>, by Hal
5
5
  Fulton.</p></li><li style="list-style-type: disc"><p><em class="citetitle">Ruby Developer's Guide</em>,
6
- by Michael Neumann, Robert Feldt and Lyle Johnson.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2373"></a>Reference Documentation</h2></div></div></div><p>The current <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.fxruby.org/doc/api" target="_top">FXRuby API
6
+ by Michael Neumann, Robert Feldt and Lyle Johnson.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2338"></a>Reference Documentation</h2></div></div></div><p>The current <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.fxruby.org/doc/api" target="_top">FXRuby API
7
7
  Reference Documentation</a> is a work in progress, but serves as a
8
8
  pretty good guide to the available methods and attributes for the
9
9
  different classes. The regular <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.fox-toolkit.org" target="_top">FOX</a> API
10
10
  Reference Documentation can be used as a fallback source of
11
- information, although it is intended for users of the C++ library.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2384"></a>Web Sites</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.fox-toolkit.com" target="_top">FOX toolkit home page</a>
11
+ information, although it is intended for users of the C++ library.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2349"></a>Web Sites</h2></div></div></div><p>The <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.fox-toolkit.com" target="_top">FOX toolkit home page</a>
12
12
  is still one of the best places to find information about GUI programming
13
13
  with FOX. This is the site maintained by Jeroen van der Zijp, the creator
14
14
  and primary developer of FOX, and serves as the official download site for
@@ -19,7 +19,7 @@
19
19
  a little more scattered but tends to be more up-to-date than some
20
20
  information on the main FOX site. This site includes a number of tutorial
21
21
  articles, as well as "cookbook" and "how-to" pages on many
22
- topics.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2395"></a>Mailing Lists</h2></div></div></div><p>One or more of the following mailing lists may be of interest:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>The fxruby-announce@rubyforge.org mailing list is a very
22
+ topics.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2360"></a>Mailing Lists</h2></div></div></div><p>One or more of the following mailing lists may be of interest:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>The fxruby-announce@rubyforge.org mailing list is a very
23
23
  low-volume list for FXRuby-related announcements. To subscribe to this
24
24
  list, follow the instructions at <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://rubyforge.org/mailman/listinfo/fxruby-announce" target="_top">http://rubyforge.org/mailman/listinfo/fxruby-announce</a></p></li><li style="list-style-type: disc"><p>The fxruby-users@rubyforge.org mailing list is a
25
25
  higher-volume list for FXRuby-related discussions. To subscribe to
@@ -30,4 +30,4 @@
30
30
  list, follow the instructions at <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.sourceforge.net/lists/listinfo/foxgui-users" target="_top">http://lists.sourceforge.net/lists/listinfo/foxgui-users</a></p></li><li style="list-style-type: disc"><p>The ruby-talk@ruby-lang.org mailing list (or its mirror, the
31
31
  comp.lang.ruby newsgroup) is a high-volume list for Ruby-related
32
32
  discussions. To subscribe to this list, follow the instructions at
33
- <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ruby-lang.org/en/ml.html" target="_top">http://www.ruby-lang.org/en/ml.html</a></p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="todo.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="changes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;9.&nbsp;To-do list&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;11.&nbsp;Change History</td></tr></table></div></body></html>
33
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ruby-lang.org/en/ml.html" target="_top">http://www.ruby-lang.org/en/ml.html</a></p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="events.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="changes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;8.&nbsp;FXRuby's Message-Target System&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;10.&nbsp;Change History</td></tr></table></div></body></html>
@@ -1,18 +1,18 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Appendix&nbsp;D.&nbsp;The FXRuby Standard Library</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="prev" href="differences.html" title="Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby"><link rel="next" href="implementation.html" title="Appendix&nbsp;E.&nbsp;Implementation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix&nbsp;D.&nbsp;The FXRuby Standard Library</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="differences.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="implementation.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="library"></a>Appendix&nbsp;D.&nbsp;The FXRuby Standard Library</h2></div></div></div><p>While the majority of FXRuby is in fact implemented by an extension module, some parts are provided instead by "pure Ruby" code. This section describes the classes and modules available in the FXRuby standard library.</p><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5123"></a>Undoable Commands</h2></div></div></div><p>The <code class="filename">fox16/undolist.rb</code> file provides the <code class="classname">FXCommand</code> and <code class="classname">FXUndoList</code> classes. These serve the same purpose as the <code class="classname">FXCommand</code> and <code class="classname">FXUndoList</code> classes from the standard FOX distribution, but they're implemented entirely in Ruby.</p><p>For a complete description of these classes and how to use them, see the RD documentation in <code class="filename">fox16/undolist.rb</code>.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5148"></a>Aliases</h2></div></div></div><p>The <code class="filename">fox16/aliases.rb</code> implements most of the accessor-style aliases for methods. This file is loaded automatically when you </p><pre class="programlisting">require 'fox16'</pre><p> and so you should never need to load it directly.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5159"></a>Color Names</h2></div></div></div><p>The <code class="filename">fox16/colors.rb</code> file, contributed by Jeff
3
+ <title>Appendix&nbsp;D.&nbsp;The FXRuby Standard Library</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="prev" href="differences.html" title="Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby"><link rel="next" href="implementation.html" title="Appendix&nbsp;E.&nbsp;Implementation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix&nbsp;D.&nbsp;The FXRuby Standard Library</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="differences.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="implementation.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="library"></a>Appendix&nbsp;D.&nbsp;The FXRuby Standard Library</h2></div></div></div><p>While the majority of FXRuby is in fact implemented by an extension module, some parts are provided instead by "pure Ruby" code. This section describes the classes and modules available in the FXRuby standard library.</p><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5110"></a>Undoable Commands</h2></div></div></div><p>The <code class="filename">fox16/undolist.rb</code> file provides the <code class="classname">FXCommand</code> and <code class="classname">FXUndoList</code> classes. These serve the same purpose as the <code class="classname">FXCommand</code> and <code class="classname">FXUndoList</code> classes from the standard FOX distribution, but they're implemented entirely in Ruby.</p><p>For a complete description of these classes and how to use them, see the RD documentation in <code class="filename">fox16/undolist.rb</code>.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5135"></a>Aliases</h2></div></div></div><p>The <code class="filename">fox16/aliases.rb</code> implements most of the accessor-style aliases for methods. This file is loaded automatically when you </p><pre class="programlisting">require 'fox16'</pre><p> and so you should never need to load it directly.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5146"></a>Color Names</h2></div></div></div><p>The <code class="filename">fox16/colors.rb</code> file, contributed by Jeff
4
4
  Heard, provides a bunch of predefined color values (based on the standard
5
5
  X11 color names). You can use these color constants anywhere that FOX
6
6
  expects an RGB color value, e.g.</p><pre class="programlisting">dc = FXDCWindow.new(drawable, ev)
7
7
  dc.foreground = FXColor::MistyRose # instead of FXRGB(255, 228, 225)
8
- dc.background = FXColor::MidnightBlue # instead of FXRGB( 25, 25, 112)</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5169"></a>OpenGL Shapes</h2></div></div></div><p>The <code class="filename">fox16/glshapes.rb</code> library provides Ruby
8
+ dc.background = FXColor::MidnightBlue # instead of FXRGB( 25, 25, 112)</pre></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5156"></a>OpenGL Shapes</h2></div></div></div><p>The <code class="filename">fox16/glshapes.rb</code> library provides Ruby
9
9
  implementations of a number of basic 3-D shapes (all derived from the
10
10
  built-in <code class="classname">FXGLShape</code> class) that can be used with
11
11
  the <code class="classname">FXGLViewer</code>. Several of these shapes are used
12
12
  in the <code class="filename">glviewer.rb</code> example program. These shapes
13
13
  were originally implemented in C++ and wrapped using SWIG, but they are
14
14
  straightforward enough to implement in Ruby so they were moved out to
15
- this library instead.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5186"></a>Iterators</h2></div></div></div><p>The <code class="filename">fox16/iterators.rb</code> library just adds an
15
+ this library instead.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5173"></a>Iterators</h2></div></div></div><p>The <code class="filename">fox16/iterators.rb</code> library just adds an
16
16
  <code class="methodname">each</code> instance method for the <code class="classname">
17
17
  FXComboBox</code>, <code class="classname">FXGLGroup</code>, <code class="classname">
18
18
  FXHeader</code>, <code class="classname">FXIconList</code>, <code class="classname">
@@ -21,10 +21,10 @@ dc.background = FXColor::MidnightBlue # instead of FXRGB( 25, 25, 112)</pre><
21
21
  FXTreeList</code> and <code class="classname">FXTreeListBox</code> classes,
22
22
  so that you can iterate over their members in a Ruby-friendly way. It
23
23
  also mixes the <code class="classname">Enumerable</code> module into each of
24
- these classes.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5230"></a>Key Codes</h2></div></div></div><p>The <code class="filename">fox16/keys.rb</code> library file defines all of the
24
+ these classes.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5217"></a>Key Codes</h2></div></div></div><p>The <code class="filename">fox16/keys.rb</code> library file defines all of the
25
25
  key codes (e.g. <code class="constant">KEY_space</code>) that might show up in the
26
26
  code field of an <code class="classname">FXEvent</code> instance. This file is
27
27
  loaded automatically when you
28
28
  </p><pre class="programlisting">require 'fox16'</pre><p> and
29
29
  so you should never need to load it
30
- directly.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5247"></a>Calendar Widget</h2></div></div></div><p>The <code class="filename">fox16/calendar.rb</code> library file provides the <code class="classname">FXCalendar</code> widget, contributed by David Naseby.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="differences.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="implementation.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;E.&nbsp;Implementation</td></tr></table></div></body></html>
30
+ directly.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5234"></a>Calendar Widget</h2></div></div></div><p>The <code class="filename">fox16/calendar.rb</code> library file provides the <code class="classname">FXCalendar</code> widget, contributed by David Naseby.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="differences.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="implementation.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;E.&nbsp;Implementation</td></tr></table></div></body></html>
@@ -5,10 +5,10 @@
5
5
  widgets, and FXRuby in turn provides interfaces to those classes. By
6
6
  combining FXRuby with the OpenGL interface for Ruby (described below) you
7
7
  can develop very powerful 3-D graphics applications. This chapter gives
8
- you the information you'll need to get started.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4225"></a>What is OpenGL?</h2></div></div></div><p>OpenGL is a platform-independent API for 2D and 3D graphics. The
8
+ you the information you'll need to get started.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4212"></a>What is OpenGL?</h2></div></div></div><p>OpenGL is a platform-independent API for 2D and 3D graphics. The
9
9
  home page is <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.opengl.org" target="_top">http://www.opengl.org</a>. Because it's a
10
10
  fairly open standard, highly optimized OpenGL drivers are available for
11
- most operating systems (including Windows and Linux).</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4233"></a>OpenGL Extensions for Ruby</h2></div></div></div><p>This extension module, developed by Yoshiyuki Kusano, provides
11
+ most operating systems (including Windows and Linux).</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4220"></a>OpenGL Extensions for Ruby</h2></div></div></div><p>This extension module, developed by Yoshiyuki Kusano, provides
12
12
  interfaces to not only the basic OpenGL API, but also the GLU and GLUT
13
13
  APIs. As of this writing, the currently released version is 0.32d and is
14
14
  available for download from <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www2.giganet.net/~yoshi/rbogl-0.32b.tgz" target="_top">http://www2.giganet.net/~yoshi/rbogl-0.32d.tgz</a>.
@@ -25,7 +25,7 @@
25
25
  extensions by typing:</p><pre class="screen">$ <span><strong class="command">make site-install</strong></span></pre><p>Please note that I'm not the maintainer of this particular Ruby
26
26
  extension, so I can't really accept bug fixes for it. But if you're having
27
27
  trouble integrating Ruby/OpenGL with FXRuby, let me know and we'll see
28
- what we can do.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4288"></a>The FXGLVisual Class</h2></div></div></div><p>An <code class="classname">FXGLVisual</code> object describes the
28
+ what we can do.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4275"></a>The FXGLVisual Class</h2></div></div></div><p>An <code class="classname">FXGLVisual</code> object describes the
29
29
  capabilities of an <code class="classname">FXGLCanvas</code> or
30
30
  <code class="classname">FXGLViewer</code> window. Typically, an X server supports
31
31
  many different visuals with varying capabilities, but the ones with
@@ -58,13 +58,13 @@ end</pre><p>Some <code class="classname">FXGLVisual</code> object must be associ
58
58
  separate <code class="classname">FXGLVisual</code> object for each window. For
59
59
  most applications, you can just construct a single
60
60
  <code class="classname">FXGLVisual</code> object that's shared among all the
61
- OpenGL windows.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4347"></a>The FXGLCanvas Class</h2></div></div></div><p>The <code class="classname">FXGLCanvas</code> widget provides a very simple
61
+ OpenGL windows.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4334"></a>The FXGLCanvas Class</h2></div></div></div><p>The <code class="classname">FXGLCanvas</code> widget provides a very simple
62
62
  OpenGL-capable window with minimal functionality. To construct an
63
63
  <code class="classname">FXGLCanvas</code>, call
64
64
  <code class="methodname">FXGLCanvas.new</code>:</p><pre class="programlisting">glCanvas = FXGLCanvas.new(parent, vis)</pre><p>The first argument to <code class="methodname">FXGLCanvas.new</code> is the
65
65
  parent (container) widget and the second argument is the
66
66
  <code class="classname">FXGLVisual</code> that should be used for this
67
- window.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4371"></a>OpenGL objects and the FXGLViewer</h2></div></div></div><p>The <code class="classname">FXGLViewer</code> widget provides a higher-level
67
+ window.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4358"></a>OpenGL objects and the FXGLViewer</h2></div></div></div><p>The <code class="classname">FXGLViewer</code> widget provides a higher-level
68
68
  OpenGL-capable window with a lot of built-in functionality. To construct
69
69
  an <code class="classname">FXGLViewer</code>, call
70
70
  <code class="methodname">FXGLViewer.new</code>:</p><pre class="programlisting">glViewer = FXGLViewer.new(parent, vis)</pre><p>The first argument to <code class="methodname">FXGLViewer.new</code> is the
@@ -1,3 +1,3 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Part&nbsp;I.&nbsp;The Basics</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="prev" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="next" href="goals.html" title="History and Goals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part&nbsp;I.&nbsp;The Basics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="book.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="goals.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d0e17"></a>Part&nbsp;I.&nbsp;The Basics</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="goals.html">History and Goals</a></span></dt><dt><span class="chapter"><a href="build.html">1. Building from Source Code</a></span></dt><dt><span class="chapter"><a href="gems.html">2. Installing from Gems</a></span></dt><dt><span class="chapter"><a href="tutorial1.html">3. Hello, World!</a></span></dt><dd><dl><dt><span class="section"><a href="tutorial1.html#d0e597">First Things First</a></span></dt><dt><span class="section"><a href="ch03s02.html">Better living through buttons</a></span></dt><dt><span class="section"><a href="ch03s03.html">Messages</a></span></dt><dt><span class="section"><a href="ch03s04.html">Adding a tool tip</a></span></dt><dt><span class="section"><a href="ch03s05.html">Adding an icon</a></span></dt></dl></dd><dt><span class="chapter"><a href="clipboardtut.html">4. Working With the Clipboard</a></span></dt><dd><dl><dt><span class="section"><a href="clipboardtut.html#d0e986">Basic Application</a></span></dt><dt><span class="section"><a href="ch04s02.html">Acquiring the Clipboard</a></span></dt><dt><span class="section"><a href="ch04s03.html">Sending Data to the Clipboard</a></span></dt><dt><span class="section"><a href="ch04s04.html">Pasting Data from the Clipboard</a></span></dt></dl></dd><dt><span class="chapter"><a href="dragdroptut.html">5. Drag and Drop</a></span></dt><dd><dl><dt><span class="section"><a href="dragdroptut.html#d0e1201">Drop Sites</a></span></dt><dt><span class="section"><a href="ch05s02.html">Drag Sources</a></span></dt><dt><span class="section"><a href="ch05s03.html">Putting It All Together</a></span></dt></dl></dd><dt><span class="chapter"><a href="unicode.html">6. Unicode and FXRuby</a></span></dt><dd><dl><dt><span class="section"><a href="unicode.html#d0e1608">Basic Application</a></span></dt></dl></dd><dt><span class="chapter"><a href="examples.html">7. Examples</a></span></dt><dt><span class="chapter"><a href="events.html">8. FXRuby's Message-Target System</a></span></dt><dt><span class="chapter"><a href="todo.html">9. To-do list</a></span></dt><dt><span class="chapter"><a href="infosources.html">10. Other Sources of Information</a></span></dt><dt><span class="chapter"><a href="changes.html">11. Change History</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="book.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="goals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developing Graphical User Interfaces with FXRuby&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;History and Goals</td></tr></table></div></body></html>
3
+ <title>Part&nbsp;I.&nbsp;The Basics</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="prev" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="next" href="goals.html" title="History and Goals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part&nbsp;I.&nbsp;The Basics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="book.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="goals.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d0e17"></a>Part&nbsp;I.&nbsp;The Basics</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="goals.html">History and Goals</a></span></dt><dt><span class="chapter"><a href="build.html">1. Building from Source Code</a></span></dt><dt><span class="chapter"><a href="gems.html">2. Installing from Gems</a></span></dt><dt><span class="chapter"><a href="tutorial1.html">3. Hello, World!</a></span></dt><dd><dl><dt><span class="section"><a href="tutorial1.html#d0e614">First Things First</a></span></dt><dt><span class="section"><a href="ch03s02.html">Better living through buttons</a></span></dt><dt><span class="section"><a href="ch03s03.html">Messages</a></span></dt><dt><span class="section"><a href="ch03s04.html">Adding a tool tip</a></span></dt><dt><span class="section"><a href="ch03s05.html">Adding an icon</a></span></dt></dl></dd><dt><span class="chapter"><a href="clipboardtut.html">4. Working With the Clipboard</a></span></dt><dd><dl><dt><span class="section"><a href="clipboardtut.html#d0e1003">Basic Application</a></span></dt><dt><span class="section"><a href="ch04s02.html">Acquiring the Clipboard</a></span></dt><dt><span class="section"><a href="ch04s03.html">Sending Data to the Clipboard</a></span></dt><dt><span class="section"><a href="ch04s04.html">Pasting Data from the Clipboard</a></span></dt></dl></dd><dt><span class="chapter"><a href="dragdroptut.html">5. Drag and Drop</a></span></dt><dd><dl><dt><span class="section"><a href="dragdroptut.html#d0e1218">Drop Sites</a></span></dt><dt><span class="section"><a href="ch05s02.html">Drag Sources</a></span></dt><dt><span class="section"><a href="ch05s03.html">Putting It All Together</a></span></dt></dl></dd><dt><span class="chapter"><a href="unicode.html">6. Unicode and FXRuby</a></span></dt><dd><dl><dt><span class="section"><a href="unicode.html#d0e1628">Basic Application</a></span></dt></dl></dd><dt><span class="chapter"><a href="examples.html">7. Examples</a></span></dt><dt><span class="chapter"><a href="events.html">8. FXRuby's Message-Target System</a></span></dt><dt><span class="chapter"><a href="infosources.html">9. Other Sources of Information</a></span></dt><dt><span class="chapter"><a href="changes.html">10. Change History</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="book.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="goals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developing Graphical User Interfaces with FXRuby&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;History and Goals</td></tr></table></div></body></html>
@@ -1,3 +1,3 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Part&nbsp;II.&nbsp;Appendices</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="prev" href="changes.html" title="Chapter&nbsp;11.&nbsp;Change History"><link rel="next" href="opengl.html" title="Appendix&nbsp;A.&nbsp;Using OpenGL with FXRuby"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part&nbsp;II.&nbsp;Appendices</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="changes.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="opengl.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d0e4210"></a>Part&nbsp;II.&nbsp;Appendices</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="appendix"><a href="opengl.html">A. Using OpenGL with FXRuby</a></span></dt><dt><span class="appendix"><a href="scintilla.html">B. Using Scintilla with FXRuby</a></span></dt><dt><span class="appendix"><a href="differences.html">C. Differences between FOX and FXRuby</a></span></dt><dt><span class="appendix"><a href="library.html">D. The FXRuby Standard Library</a></span></dt><dt><span class="appendix"><a href="implementation.html">E. Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="implementation.html#d0e5261">Code Generation</a></span></dt><dt><span class="section"><a href="apes02.html">Object Life Cycles and Garbage Collection</a></span></dt><dd><dl><dt><span class="section"><a href="apes02.html#d0e5299">GL Objects</a></span></dt></dl></dd><dt><span class="section"><a href="apes03.html">Virtual Functions</a></span></dt></dl></dd><dt><span class="appendix"><a href="subversion.html">F. Getting the Sources from Subversion</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="changes.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="opengl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;11.&nbsp;Change History&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;A.&nbsp;Using OpenGL with FXRuby</td></tr></table></div></body></html>
3
+ <title>Part&nbsp;II.&nbsp;Appendices</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="prev" href="changes.html" title="Chapter&nbsp;10.&nbsp;Change History"><link rel="next" href="opengl.html" title="Appendix&nbsp;A.&nbsp;Using OpenGL with FXRuby"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part&nbsp;II.&nbsp;Appendices</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="changes.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="opengl.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d0e4197"></a>Part&nbsp;II.&nbsp;Appendices</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="appendix"><a href="opengl.html">A. Using OpenGL with FXRuby</a></span></dt><dt><span class="appendix"><a href="scintilla.html">B. Using Scintilla with FXRuby</a></span></dt><dt><span class="appendix"><a href="differences.html">C. Differences between FOX and FXRuby</a></span></dt><dt><span class="appendix"><a href="library.html">D. The FXRuby Standard Library</a></span></dt><dt><span class="appendix"><a href="implementation.html">E. Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="implementation.html#d0e5248">Code Generation</a></span></dt><dt><span class="section"><a href="apes02.html">Object Life Cycles and Garbage Collection</a></span></dt><dd><dl><dt><span class="section"><a href="apes02.html#d0e5286">GL Objects</a></span></dt></dl></dd><dt><span class="section"><a href="apes03.html">Virtual Functions</a></span></dt></dl></dd><dt><span class="appendix"><a href="subversion.html">F. Getting the Sources from Subversion</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="changes.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="opengl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;10.&nbsp;Change History&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;A.&nbsp;Using OpenGL with FXRuby</td></tr></table></div></body></html>
@@ -1,23 +1,23 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="prev" href="opengl.html" title="Appendix&nbsp;A.&nbsp;Using OpenGL with FXRuby"><link rel="next" href="differences.html" title="Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="opengl.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="differences.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="scintilla"></a>Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4398"></a>What is Scintilla?</h2></div></div></div><p><a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.scintilla.org" target="_top">Scintilla</a> is a free
3
+ <title>Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="prev" href="opengl.html" title="Appendix&nbsp;A.&nbsp;Using OpenGL with FXRuby"><link rel="next" href="differences.html" title="Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="opengl.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="differences.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="scintilla"></a>Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby</h2></div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4385"></a>What is Scintilla?</h2></div></div></div><p><a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.scintilla.org" target="_top">Scintilla</a> is a free
4
4
  source code editing component developed by Neil Hodgson for the Win32 and
5
- GTK+ platforms.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4405"></a>What is FXScintilla?</h2></div></div></div><p><a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://savannah.gnu.org/projects/fxscintilla" target="_top">FXScintilla </a> is
5
+ GTK+ platforms.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4392"></a>What is FXScintilla?</h2></div></div></div><p><a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://savannah.gnu.org/projects/fxscintilla" target="_top">FXScintilla </a> is
6
6
  a FOX widget that wraps around the Scintilla component, or, if you wish,
7
- the FOX "port" of Scintilla. It is being developed by Gilles Filippini,
7
+ the FOX "port" of Scintilla. Until recently it was developed by Gilles Filippini,
8
8
  and as of this writing the latest release is available for download from
9
- <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://savannah.nongnu.org/download/fxscintilla/fxscintilla-1.63.tar.gz" target="_top">http://savannah.nongnu.org/download/fxscintilla/fxscintilla-1.63.tar.gz</a>.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4415"></a>Compiling FXScintilla</h2></div></div></div><p>The FXScintilla distribution contains everything you need to build
9
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://download.savannah.gnu.org/releases/fxscintilla/fxscintilla-1.71.tar.gz" target="_top">http://download.savannah.gnu.org/releases/fxscintilla/fxscintilla-1.71.tar.gz</a>.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4402"></a>Compiling FXScintilla</h2></div></div></div><p>The FXScintilla distribution contains everything you need to build
10
10
  the FXScintilla widget and begin using it in your C++-based FOX
11
11
  applications. That is to say, you do not have to separately download the
12
12
  Scintilla source code from the Scintilla home page. When you unpack the
13
13
  FXScintilla tarball, you should get a new <code class="filename">
14
- fxscintilla-1.63</code> directory containing the source code for the
14
+ fxscintilla-1.71</code> directory containing the source code for the
15
15
  FOX port of the Scintilla widget.</p><p>As of the 1.46 release of FXScintilla, the build process has been
16
16
  "autoconfiscated" and should seem very familiar to you if you've built
17
17
  other open-source software (like FOX) from the source code. The
18
18
  <code class="filename">INSTALL</code> file in the top-level directory should
19
19
  provide enough instruction for you to build and install FXScintilla for
20
- either Unix or Microsoft Windows.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4428"></a>Enabling FXScintilla Support in FXRuby</h2></div></div></div><p>The next step is to build a version of FXRuby (from its source code)
20
+ either Unix or Microsoft Windows.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4415"></a>Enabling FXScintilla Support in FXRuby</h2></div></div></div><p>The next step is to build a version of FXRuby (from its source code)
21
21
  with the optional FXScintilla support enabled. If you're working on a Unix
22
22
  or Linux system and have installed FXScintilla in one of the standard
23
23
  installation directories (e.g. under <code class="filename">/usr/include</code> or <code class="filename">/usr/local/include</code>), the regular FXRuby build
@@ -26,9 +26,9 @@
26
26
  you're building the code on Microsoft Windows, you will need to specify a
27
27
  few additional configuration options at the beginning.</p><p>You can configure the build on Unix or Linux systems by
28
28
  typing:</p><pre class="screen">
29
- $ <span><strong class="command">sudo gem install fxruby-1.2.0.gem --force -- --with-fxscintilla-include=/usr/local/include/fxscintilla --with-fxscintilla-lib=/usr/local/lib</strong></span>
29
+ $ <span><strong class="command">sudo gem install fxruby-1.6.7.gem --force -- --with-fxscintilla-include=/usr/local/include/fxscintilla --with-fxscintilla-lib=/usr/local/lib</strong></span>
30
30
  </pre><p>or, when compiling with Microsoft Visual C++, by typing:</p><pre class="screen">
31
- C:\&gt; <span><strong class="command">gem install fxruby-1.2.0.gem --force -- --with-fox-include=C:\fox-1.2.7\include --with-fox-lib=C:\fox-1.2.7\lib --with-fxscintilla-include=C:\fxscintilla-1.63\include --with-fxscintilla-lib=C:\fxscintilla-1.63\lib</strong></span>
31
+ C:\&gt; <span><strong class="command">gem install fxruby-1.6.7.gem --force -- --with-fox-include=C:\fox-1.6.25\include --with-fox-lib=C:\fox-1.6.25\lib --with-fxscintilla-include=C:\fxscintilla-1.71\include --with-fxscintilla-lib=C:\fxscintilla-1.71\lib</strong></span>
32
32
  </pre><p>Past this point, the build and installation process for either
33
33
  platform should be the same as for standard builds. To test your new
34
34
  FXScintilla-enabled build of FXRuby, try running the
@@ -1,3 +1,247 @@
1
- pre.programlisting { background-color: #E0E0E0; }
2
- pre.screen { background-color: #E0E0E0; }
1
+ /************************************************************************/
2
+ /* Custom style-sheet stuffs for the Subversion book in HTML form. */
3
+ /************************************************************************/
3
4
 
5
+ /*
6
+ * Copyright (c) 2003-2007
7
+ * Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato.
8
+ *
9
+ * This work is licensed under the Creative Commons Attribution License.
10
+ * To view a copy of this license, visit
11
+ * http://creativecommons.org/licenses/by/2.0/ or send a letter to
12
+ * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
13
+ * USA.
14
+ */
15
+
16
+ body
17
+ {
18
+ background: white;
19
+ margin: 0.5in;
20
+ font-family: arial,helvetica,sans-serif;
21
+ }
22
+
23
+ p, li, ul, ol, dd, dt
24
+ {
25
+ font-style: normal;
26
+ font-weight: normal;
27
+ color: black;
28
+ }
29
+
30
+ tt, pre
31
+ {
32
+ font-family: courier new,courier,fixed;
33
+ }
34
+
35
+ a
36
+ {
37
+ color: blue;
38
+ text-decoration: underline;
39
+ }
40
+
41
+ a:hover
42
+ {
43
+ background: rgb(75%,75%,100%);
44
+ color: blue;
45
+ text-decoration: underline;
46
+ }
47
+
48
+ a:visited
49
+ {
50
+ color: purple;
51
+ text-decoration: underline;
52
+ }
53
+
54
+ img
55
+ {
56
+ border: none;
57
+ }
58
+
59
+ h1.title
60
+ {
61
+ font-size: 250%;
62
+ font-style: normal;
63
+ font-weight: bold;
64
+ color: black;
65
+ }
66
+
67
+ h2.subtitle
68
+ {
69
+ font-size: 150%;
70
+ font-style: italic;
71
+ color: black;
72
+ }
73
+
74
+ h2.title
75
+ {
76
+ font-size: 150%;
77
+ font-style: normal;
78
+ font-weight: bold;
79
+ color: black;
80
+ }
81
+
82
+ h3.title
83
+ {
84
+ font-size: 125%;
85
+ font-style: normal;
86
+ font-weight: bold;
87
+ color: black;
88
+ }
89
+
90
+ h4.title
91
+ {
92
+ font-size: 100%;
93
+ font-style: normal;
94
+ font-weight: bold;
95
+ color: black;
96
+ }
97
+
98
+ .toc b
99
+ {
100
+ font-size: 125%;
101
+ font-style: normal;
102
+ font-weight: bold;
103
+ color: black;
104
+ }
105
+
106
+ .command, .screen, .programlisting, .structname
107
+ {
108
+ font-family: courier new,courier,fixed;
109
+ font-style: normal;
110
+ font-weight: normal;
111
+ }
112
+
113
+ .filename
114
+ {
115
+ font-family: arial,helvetica,sans-serif;
116
+ font-style: italic;
117
+ }
118
+
119
+ .figure, .example, .table
120
+ {
121
+ margin: 0.125in 0.25in;
122
+ }
123
+
124
+ .table table
125
+ {
126
+ border-width: 1px;
127
+ border-style: solid;
128
+ border-color: black;
129
+ border-spacing: 0;
130
+ background: rgb(240,240,240);
131
+ }
132
+
133
+ .table td
134
+ {
135
+ border: none;
136
+ border-right: 1px black solid;
137
+ border-bottom: 1px black solid;
138
+ padding: 2px;
139
+ }
140
+
141
+ .table th
142
+ {
143
+ background: rgb(180,180,180);
144
+ border: none;
145
+ border-right: 1px black solid;
146
+ border-bottom: 1px black solid;
147
+ padding: 2px;
148
+ }
149
+
150
+ .table p.title, .figure p.title, .example p.title
151
+ {
152
+ text-align: left !important;
153
+ font-size: 100% !important;
154
+ }
155
+
156
+ .author, .pubdate
157
+ {
158
+ margin: 0;
159
+ font-size: 100%;
160
+ font-style: italic;
161
+ font-weight: normal;
162
+ color: black;
163
+ }
164
+
165
+ .preface div.author, .preface .pubdate
166
+ {
167
+ font-size: 80%;
168
+ }
169
+
170
+ .sidebar
171
+ {
172
+ border-top: dotted 1px black;
173
+ border-left: dotted 1px black;
174
+ border-right: solid 2px black;
175
+ border-bottom: solid 2px black;
176
+ background: rgb(240,220,170);
177
+ padding: 0 0.12in;
178
+ margin: 0.25in;
179
+ }
180
+
181
+ .note .programlisting, .note .screen,
182
+ .tip .programlisting, .tip .screen,
183
+ .warning .programlisting, .warning .screen,
184
+ .sidebar .programlisting, .sidebar .screen
185
+ {
186
+ border: none;
187
+ background: none;
188
+ }
189
+
190
+ .sidebar p.title
191
+ {
192
+ text-align: center;
193
+ font-size: 125%;
194
+ }
195
+
196
+ .note
197
+ {
198
+ border: black solid 1px;
199
+ background: url(./images/note.png) no-repeat rgb(252,246,220);
200
+ margin: 0.125in 0;
201
+ padding: 0 55px;
202
+ }
203
+
204
+ .tip
205
+ {
206
+ border: black solid 1px;
207
+ background: url(./images/tip.png) no-repeat rgb(224,244,255);
208
+ margin: 0.125in 0;
209
+ padding: 0 55px;
210
+ }
211
+
212
+ .warning
213
+ {
214
+ border: black solid 1px;
215
+ background: url(./images/warning.png) no-repeat rgb(255,210,210);
216
+ margin: 0.125in 0;
217
+ padding: 0 55px;
218
+ }
219
+
220
+ .note .title, .tip .title, .warning .title
221
+ {
222
+ display: none;
223
+ }
224
+
225
+ .programlisting, .screen
226
+ {
227
+ font-size: 90%;
228
+ color: black;
229
+ margin: 1em 0.25in;
230
+ padding: 0.5em;
231
+ background: rgb(240,240,240);
232
+ border-top: black dotted 1px;
233
+ border-left: black dotted 1px;
234
+ border-right: black solid 2px;
235
+ border-bottom: black solid 2px;
236
+ }
237
+
238
+ .navheader, .navfooter
239
+ {
240
+ border: black solid 1px;
241
+ background: rgb(180,180,200);
242
+ }
243
+
244
+ .navheader hr, .navfooter hr
245
+ {
246
+ display: none;
247
+ }