fxruby 1.6.1 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/doc/apes02.html +6 -6
  2. data/doc/apes03.html +11 -11
  3. data/doc/book.html +1 -1
  4. data/doc/build.html +63 -63
  5. data/doc/ch03s02.html +7 -7
  6. data/doc/ch03s03.html +18 -18
  7. data/doc/ch03s04.html +11 -11
  8. data/doc/ch03s05.html +14 -14
  9. data/doc/ch04s02.html +14 -14
  10. data/doc/ch04s03.html +15 -15
  11. data/doc/ch04s04.html +28 -28
  12. data/doc/ch05s02.html +49 -49
  13. data/doc/ch05s03.html +8 -8
  14. data/doc/changes.html +263 -193
  15. data/doc/clipboardtut.html +57 -45
  16. data/doc/cvs.html +10 -10
  17. data/doc/differences.html +4 -4
  18. data/doc/dragdroptut.html +50 -50
  19. data/doc/events.html +11 -11
  20. data/doc/examples.html +48 -48
  21. data/doc/gems.html +37 -37
  22. data/doc/goals.html +4 -4
  23. data/doc/implementation.html +4 -4
  24. data/doc/infosources.html +6 -6
  25. data/doc/library.html +19 -19
  26. data/doc/opengl.html +31 -31
  27. data/doc/pt01.html +1 -1
  28. data/doc/pt02.html +1 -1
  29. data/doc/scintilla.html +15 -15
  30. data/doc/style.css +3 -0
  31. data/doc/todo.html +5 -5
  32. data/doc/tutorial1.html +34 -34
  33. data/doc/unicode.html +56 -0
  34. data/ext/fox16/dialogs_wrap.cpp +38 -14
  35. data/ext/fox16/frames_wrap.cpp +856 -22
  36. data/ext/fox16/fx3d_wrap.cpp +169 -144
  37. data/ext/fox16/icons_wrap.cpp +24 -6
  38. data/ext/fox16/image_wrap.cpp +24 -6
  39. data/ext/fox16/label_wrap.cpp +23 -8
  40. data/ext/fox16/markfuncs.cpp +8 -1
  41. data/ext/fox16/mdi_wrap.cpp +53 -23
  42. data/ext/fox16/menu_wrap.cpp +43 -19
  43. data/ext/fox16/scintilla_wrap.cpp +31 -7
  44. data/ext/fox16/table_wrap.cpp +31 -7
  45. data/ext/fox16/text_wrap.cpp +31 -7
  46. data/ext/fox16/treelist_wrap.cpp +300 -276
  47. data/ext/fox16/ui_wrap.cpp +385 -26
  48. data/lib/fox16/aliases.rb +3 -0
  49. data/lib/fox16/version.rb +1 -1
  50. data/rdoc-sources/FXFoldingList.rb +2 -2
  51. data/tests/TC_FXDirList.rb +1 -1
  52. data/tests/TC_FXGLViewer.rb +2 -0
  53. data/tests/TC_FXHeader.rb +1 -1
  54. data/tests/TC_FXIconList.rb +1 -1
  55. data/tests/TC_FXId.rb +1 -1
  56. data/tests/TC_FXList.rb +1 -1
  57. data/tests/TC_FXListBox.rb +1 -1
  58. data/tests/TC_FXMenuCommand.rb +0 -14
  59. data/tests/TC_FXTable.rb +0 -32
  60. data/tests/TC_FXTableItem.rb +1 -1
  61. data/tests/TC_FXTreeList.rb +1 -1
  62. data/tests/TC_FXTreeListBox.rb +1 -1
  63. metadata +5 -4
data/doc/events.html CHANGED
@@ -1,36 +1,36 @@
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><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" 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="previous" 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></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></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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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 XSL Stylesheets V1.68.1"><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
4
4
 
5
5
  include Responder
6
6
 
7
7
  ID_BUTTON = FXMainWindow::ID_LAST
8
8
 
9
9
  ... other stuff ...
10
- end</pre></td></tr></table><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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">FXMAPFUNC(SEL_COMMAND, MyMainWindow::ID_BUTTON, 'onCmdButton')</pre></td></tr></table><p>Finally, you'd need to implement the instance method (<tt class="methodname">onCmdButton</tt>) named in the call to <tt class="methodname">FXMAPFUNC</tt>:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">def onCmdButton(sender, sel, ptr)
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></td></tr></table><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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aButton = FXButton.new(parent, "Push Me", nil, mainWindow, ID_BUTTON)</pre></td></tr></table><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></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 <tt class="methodname">connect</tt> instance method, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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="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")
13
13
  aButton.connect(SEL_COMMAND) { |sender, sel, ptr|
14
14
  puts "Ouch!"
15
- }</pre></td></tr></table><p>Alternate forms of the <tt class="methodname">FXObject#connect</tt> method can take either a <tt class="classname">Method</tt> or <tt class="classname">Proc</tt> instance as a second argument (i.e. instead of attaching a block), e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">def push(sender, sel, ptr)
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)
16
16
  puts "Ouch!"
17
17
  end
18
18
 
19
19
  aButton = FXButton.new(parent, "Push Me")
20
- aButton.connect(SEL_COMMAND, method(:push))</pre></td></tr></table><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 <tt class="methodname">connect</tt> is the FOX message type you're handling (e.g. <tt class="constant">SEL_COMMAND</tt>, <tt class="constant">SEL_CHANGED</tt>, 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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aButton = FXButton.new(parent, "Push Me")
21
- aButton.connect(SEL_COMMAND) { puts "Ouch!" }</pre></td></tr></table></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></div></div><p>Timers are scheduled by calling <tt class="methodname">FXApp#addTimeout</tt>. There are three different forms of <tt class="methodname">addTimeout</tt>, 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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aTimer = getApp().addTimeout(1000, timeoutHandlerObj, ID_TIMER)</pre></td></tr></table><p>The second form takes either a <tt class="classname">Method</tt> or <tt class="classname">Proc</tt> instance as its second argument, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aTimer = getApp().addTimeout(1000, method(:timeoutHandlerMethod))</pre></td></tr></table><p>The last form uses a code block as the handler for the timeout event:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aTimer = getApp().addTimeout(1000) { |sender, sel, ptr|
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|
22
22
  # handle this timeout event
23
- }</pre></td></tr></table></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></div></div><p>Chores are scheduled by calling <tt class="methodname">FXApp#addChore</tt>. There are three different forms of <tt class="methodname">addChore</tt>; 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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aChore = getApp().addChore(choreHandlerObj, ID_CHORE)</pre></td></tr></table><p>The second form takes either a <tt class="classname">Method</tt> or <tt class="classname">Proc</tt> instance as its single argument, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aChore = getApp().addChore(method(:choreHandlerMethod))</pre></td></tr></table><p>The last form uses a code block as the handler for the chore:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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="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|
24
24
  # handle this chore
25
- }</pre></td></tr></table></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></div></div><p>Operating system signal handlers are designated by calling <tt class="methodname">FXApp#addSignal</tt>. There are three different forms of <tt class="methodname">addSignal</tt>, 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 <i class="parameter"><tt>immediate</tt></i> and <i class="parameter"><tt>flags</tt></i>. 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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aSignal = getApp().addSignal("SIGINT", signalHandlerObj, ID_SIGINT)</pre></td></tr></table><p>The second form takes either a <tt class="classname">Method</tt> or <tt class="classname">Proc</tt> instance as its second argument, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aSignal = getApp().addSignal("SIGINT", method(:signalHandlerMethod))</pre></td></tr></table><p>The last form uses a code block as the handler for the signal:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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="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|
26
26
  # handle this signal
27
- }</pre></td></tr></table></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></div></div><p>Input event handlers are designated by calling <tt class="methodname">FXApp#addInput</tt>. There are three different forms of <tt class="methodname">addInput</tt>, but the first two arguments to each are the file object (including sockets) and the mode flag (some combination of <tt class="constant">INPUT_READ</tt>, <tt class="constant">INPUT_WRITE</tt> and <tt class="constant">INPUT_EXCEPT</tt>). 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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">getApp().addInput(aFile, INPUT_READ, inputHandlerObj, ID_INPUT)</pre></td></tr></table><p>The second form takes either a <tt class="classname">Method</tt> or <tt class="classname">Proc</tt> instance as its third argument, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">getApp().addInput(aSocket, INPUT_READ|INPUT_EXCEPT, method(:inputHandlerMethod))</pre></td></tr></table><p>The last form uses a code block as the handler for the input event:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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="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|
28
28
  # handle this input
29
- }</pre></td></tr></table><p>This API is a little different from the other cases. For example, timeout events always send the same message type (<tt class="constant">SEL_TIMEOUT</tt>) 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, <tt class="constant">SEL_IO_READ</tt>, <tt class="constant">SEL_IO_WRITE</tt> and <tt class="constant">SEL_IO_EXCEPTION</tt>, depending on what happens, so your handler method (block) needs to check the message type, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">getApp().addInput(socket, INPUT_READ|INPUT_WRITE) { |sender, sel, ptr|
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)
31
31
  when SEL_IO_READ
32
32
  # handle read event
33
33
  when SEL_IO_WRITE
34
34
  # handle write event
35
35
  end
36
- }</pre></td></tr></table></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="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>
data/doc/examples.html CHANGED
@@ -1,24 +1,24 @@
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><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" 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="previous" href="clipboardtut.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="clipboardtut.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></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></div></div><p>The <a href="../examples/hello.rb" target="_top"><tt class="filename">hello.rb</tt></a>
3
+ <title>Chapter&nbsp;7.&nbsp;Examples</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.68.1"><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 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></div></div><p>The <a href="../examples/hello2.rb" target="_top"><tt class="filename">hello2.rb</tt></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="d0e1661"></a>hello2</h2></div></div></div><p>The <a 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 <tt class="filename">hello.rb</tt> 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></div></div><p>The <a href="../examples/scribble.rb" target="_top"><tt class="filename">scribble.rb</tt></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="d0e1677"></a>scribble</h2></div></div></div><p>The <a 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
- window (in this case, an <tt class="classname">FXCanvas</tt>) and draw into
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
13
13
  updating mechanism can be used to automatically update the state of
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></div></div><p>The <a href="../examples/button.rb" target="_top"><tt class="filename">button.rb</tt></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="d0e1693"></a>button</h2></div></div></div><p>The <a 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
- <tt class="classname">FXButton</tt> 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></div></div><p>The <a href="../examples/datatarget.rb" target="_top"><tt class="filename">datatarget.rb</tt></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="d0e1709"></a>datatarget</h2></div></div></div><p>The <a 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
- FOX data targets (that is, instances of class <tt class="classname">FXDataTarget</tt>).
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
23
23
  value associated with them, and can interact with widgets to keep the data
24
24
  target's value in sync with the widget's setting. For example, you
@@ -28,77 +28,77 @@
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></div></div><p>The <a href="../examples/dialog.rb" target="_top"><tt class="filename">dialog.rb</tt></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="d0e1725"></a>dialog</h2></div></div></div><p>The <a 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></div></div><p>The <a href="../examples/dirlist.rb" target="_top"><tt class="filename">dirlist.rb</tt></a>
34
- example program demonstrates the <tt class="classname">FXDirList</tt> widget.
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 href="../examples/dirlist.rb" target="_top"><code class="filename">dirlist.rb</code></a>
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></div></div><p>The <a href="../examples/iconlist.rb" target="_top"><tt class="filename">iconlist.rb</tt></a>
37
- example program demonstrates the <tt class="classname">FXIconList</tt> widget.
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 href="../examples/iconlist.rb" target="_top"><code class="filename">iconlist.rb</code></a>
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></div></div><p>The <a href="../examples/mditest.rb" target="_top"><tt class="filename">mditest.rb</tt></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="d0e1774"></a>mditest</h2></div></div></div><p>The <a 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
- capabilities, specifically the <tt class="classname">FXMDIClient</tt> and
45
- <tt class="classname">FXMDIChild</tt> 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></div></div><p>The <a href="../examples/groupbox.rb" target="_top"><tt class="filename">groupbox.rb</tt></a>
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 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></div></div><p>The <a href="../examples/header.rb" target="_top"><tt class="filename">header.rb</tt></a>
49
- example program mainly demonstrates the <tt class="classname">FXHeader</tt>
50
- widget and the <tt class="classname">FXSplitter</tt> 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></div></div><p>The <a href="../examples/image.rb" target="_top"><tt class="filename">image.rb</tt></a>
51
- example demonstrates how to draw directly into an <tt class="classname">FXImage</tt>
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></div></div><p>The <a href="../examples/splitter.rb" target="_top"><tt class="filename">splitter.rb</tt></a>
53
- example demonstrates the <tt class="classname">FXSplitter</tt> layout manager.
54
- It also provides an example of the <tt class="classname">FXTreeList</tt>
55
- widget (on the left side of the split) and the <tt class="classname">FXMatrix</tt>
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></div></div><p>The <a href="../examples/foursplit.rb" target="_top"><tt class="filename">foursplit.rb</tt></a>
57
- example program demonstrates the <tt class="classname">FX4Splitter</tt> layout
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 href="../examples/header.rb" target="_top"><code class="filename">header.rb</code></a>
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 href="../examples/image.rb" target="_top"><code class="filename">image.rb</code></a>
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 href="../examples/splitter.rb" target="_top"><code class="filename">splitter.rb</code></a>
53
+ example demonstrates the <code class="classname">FXSplitter</code> layout manager.
54
+ It also provides an example of the <code class="classname">FXTreeList</code>
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 href="../examples/foursplit.rb" target="_top"><code class="filename">foursplit.rb</code></a>
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></div></div><p>The <a href="../examples/shutter.rb" target="_top"><tt class="filename">shutter.rb</tt></a>
61
- example provides a simple demonstration of the <tt class="classname">FXShutter</tt>
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 href="../examples/shutter.rb" target="_top"><code class="filename">shutter.rb</code></a>
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 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></div></div><p>The <a href="../examples/tabbook.rb" target="_top"><tt class="filename">tabbook.rb</tt></a>
64
- example exists mainly to demonstrate the <tt class="classname">FXTabBook</tt>
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></div></div><p>The <a href="../examples/table.rb" target="_top"><tt class="filename">table.rb</tt></a>
66
- example features the <tt class="classname">FXTable</tt> widget, sometimes
63
+ used for this program are courtesy of <a 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 href="../examples/tabbook.rb" target="_top"><code class="filename">tabbook.rb</code></a>
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 href="../examples/table.rb" target="_top"><code class="filename">table.rb</code></a>
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></div></div><p>The <a href="../examples/gltest.rb" target="_top"><tt class="filename">gltest.rb</tt></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="d0e1930"></a>gltest</h2></div></div></div><p>The <a 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
- instance of the <tt class="classname">FXGLCanvas</tt> widget) and draw into
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></div></div><p>The <a href="../examples/glviewer.rb" target="_top"><tt class="filename">glviewer.rb</tt></a>
74
- example program demonstrates how to use the <tt class="classname">FXGLViewer</tt>
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 href="../examples/glviewer.rb" target="_top"><code class="filename">glviewer.rb</code></a>
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></div></div><p>Like the <a href="../examples/glviewer.rb" target="_top"><tt class="filename">glviewer.rb</tt></a>
78
- example, the <a href="../examples/imageviewer.rb" target="_top"><tt class="filename">imageviewer.rb</tt></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 href="../examples/glviewer.rb" target="_top"><code class="filename">glviewer.rb</code></a>
78
+ example, the <a 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
- <tt class="classname">FXImageView</tt> 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></div></div><p>The <a href="../examples/dilbert.rb" target="_top"><tt class="filename">dilbert.rb</tt></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="d0e1982"></a>dilbert</h2></div></div></div><p>The <a 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
- more bare-bones example of the <tt class="classname">FXImageView</tt> widget
85
- than that provided by the (more complicated) <tt class="filename">imageviewer.rb</tt>
84
+ more bare-bones example of the <code class="classname">FXImageView</code> widget
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></div></div><p>The <a href="../examples/raabrowser.rb" target="_top"><tt class="filename">raabrowser.rb</tt></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="d0e2003"></a>raabrowser</h2></div></div></div><p>The <a 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
91
- of the following features:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>the <tt class="classname">FXSplitter</tt> layout manager, used to
91
+ of the following features:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>the <code class="classname">FXSplitter</code> layout manager, used to
92
92
  split the left side (containing the tree list) from the right side
93
93
  (containing the information panel). If the panel on the left is too
94
94
  narrow to see all of its contents (especially when you've expanded
95
- the tree) try resizing the split.</p></li><li style="list-style-type: disc"><p>the <tt class="classname">FXTreeList</tt> widget, used to display
96
- the RAA contents.</p></li><li style="list-style-type: disc"><p>data targets (i.e. instances of class <tt class="classname">FXDataTarget</tt>),
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
+ 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 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></div></div><p>The <a href="../examples/babelfish.rb" target="_top"><tt class="filename">babelfish.rb</tt></a>
99
- example program, like the <tt class="filename">raabrowser.rb</tt> example,
98
+ panel.</p></li></ul></div><p>This example program requires the <a 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 href="../examples/babelfish.rb" target="_top"><code class="filename">babelfish.rb</code></a>
99
+ example program, like the <code class="filename">raabrowser.rb</code> example,
100
100
  depends on the <a 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></div></div><p>The <a href="../examples/browser.rb" target="_top"><tt class="filename">browser.rb</tt></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 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
- 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="clipboardtut.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>
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>
data/doc/gems.html CHANGED
@@ -1,73 +1,73 @@
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><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" 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="previous" 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></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></div></div><p>Starting with FXRuby version 1.2, FXRuby uses <a 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 XSL Stylesheets V1.68.1"><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 href="http://rubygems.rubyforge.org" target="_top">RubyGems</a> as its 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></div></div><p>If you've already downloaded the source gem, you can install it by
7
- typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">sudo gem install fxruby-1.6.0.gem</b></pre></td></tr></table><p>Note the use of the <b class="command">sudo</b> 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="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
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
- such as the <tt class="filename">/usr</tt>, <tt class="filename">/usr/local</tt> and
12
- <tt class="filename">/sw</tt> directories. If you've installed those libraries
11
+ such as the <code class="filename">/usr</code>, <code class="filename">/usr/local</code> and
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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b 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</b></pre></td></tr></table><p>If you're installing a source gem on a Windows box, you'd instead
15
- type something like:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">gem install fxruby-1.6.0.gem --force -- --with-fox-include=C:\include\fox-1.6 --with-fox-lib=C:\lib</b></pre></td></tr></table><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.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
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
19
- <tt class="filename">gem_make.out</tt> file.</p><p>As a quick sanity check, to make sure that all is well, you should
20
- probably fire up <tt class="filename">irb</tt> and try to require the FXRuby
21
- gem once the installation is complete:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">irb</b>
22
- irb(main):001:0&gt; <b class="userinput"><tt><b class="command">require 'rubygems'</b></tt></b>
19
+ <code class="filename">gem_make.out</code> file.</p><p>As a quick sanity check, to make sure that all is well, you should
20
+ probably fire up <code class="filename">irb</code> and try to require the FXRuby
21
+ gem once the installation is complete:</p><pre class="screen">$ <span><strong class="command">irb</strong></span>
22
+ irb(main):001:0&gt; <strong class="userinput"><code><span><strong class="command">require 'rubygems'</strong></span></code></strong>
23
23
  true
24
- irb(main):002:0&gt; <b class="command">require 'fox16'</b>
25
- true</pre></td></tr></table><p>If the import failed (usually with a message along the lines of
24
+ irb(main):002:0&gt; <span><strong class="command">require 'fox16'</strong></span>
25
+ true</pre><p>If the import failed (usually with a message along the lines of
26
26
  "Cannot load library"), first check the "Things That Can Go Wrong" section
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></div></div><p>To install a binary gem for Windows, just type:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">gem install fxruby-1.6.0-mswin32.gem</b></pre></td></tr></table><p>As a quick sanity check, to make sure that all is well, you should
31
- probably fire up <tt class="filename">irb</tt> and try to require the FXRuby
32
- gem once the installation is complete:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">irb</b>
33
- irb(main):001:0&gt; <b class="userinput"><tt><b class="command">require 'rubygems'</b></tt></b>
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
31
+ probably fire up <code class="filename">irb</code> and try to require the FXRuby
32
+ gem once the installation is complete:</p><pre class="screen">C:\&gt; <span><strong class="command">irb</strong></span>
33
+ irb(main):001:0&gt; <strong class="userinput"><code><span><strong class="command">require 'rubygems'</strong></span></code></strong>
34
34
  true
35
- irb(main):002:0&gt; <b class="command">require 'fox16'</b>
36
- true</pre></td></tr></table><p>If the import failed (usually with a message along the lines of
35
+ irb(main):002:0&gt; <span><strong class="command">require 'fox16'</strong></span>
36
+ true</pre><p>If the import failed (usually with a message along the lines of
37
37
  "Cannot load library"), first check the "Things That Can Go Wrong" section
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></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="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
42
42
  is typically installed as a shared library named
43
- <tt class="filename">libFOX-1.6.so</tt>. After all of the source files for
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
45
45
  files together with the FOX library (and possibly other system libraries)
46
46
  to produce a new shared object that Ruby can import as an extension
47
47
  module.</p><p>There are a few things that can go wrong when you try to import this
48
48
  extension into Ruby. A common problem is that the operating system cannot
49
- locate the FOX shared library (<tt class="filename">libFOX-1.6.so</tt>) when it
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
- the error message will look something like:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">irb</b>
52
- irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
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
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
54
54
  from (irb):1:in 'require'
55
55
  from (irb):1
56
- </pre></td></tr></table><p>Note that the wording of this error message may be slightly
56
+ </pre><p>Note that the wording of this error message may be slightly
57
57
  different, depending on your operating environment. One workaround for
58
- this problem is to modify the <tt class="constant">LD_LIBRARY_PATH</tt>
58
+ this problem is to modify the <code class="constant">LD_LIBRARY_PATH</code>
59
59
  environment variable to include the directory where
60
- <tt class="filename">libFOX-1.6.so</tt> is installed. For example, if
61
- <tt class="filename">libFOX-1.6.so</tt> is installed in <tt class="filename">/usr/local/lib</tt>, try setting:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">export LD_LIBRARY_PATH=/usr/local/lib</b>
62
- $ <b class="command">irb</b>
63
- irb(main):001:0&gt; <b class="userinput"><tt>require 'fox16'</tt></b>
64
- </pre></td></tr></table><p>If this works, you can of course permanently add the
65
- <tt class="constant">LD_LIBRARY_PATH</tt> setting to your login file(s) so that
60
+ <code class="filename">libFOX-1.6.so</code> is installed. For example, if
61
+ <code class="filename">libFOX-1.6.so</code> is installed in <code class="filename">/usr/local/lib</code>, try setting:</p><pre class="screen">$ <span><strong class="command">export LD_LIBRARY_PATH=/usr/local/lib</strong></span>
62
+ $ <span><strong class="command">irb</strong></span>
63
+ irb(main):001:0&gt; <strong class="userinput"><code>require 'fox16'</code></strong>
64
+ </pre><p>If this works, you can of course permanently add the
65
+ <code class="constant">LD_LIBRARY_PATH</code> setting to your login file(s) so that
66
66
  you don't have to remember to type it each time. Another approach that
67
67
  should work for Linux is to modify your
68
- <tt class="filename">/etc/ld.so.conf</tt> file to include the installation
69
- directory (e.g. <tt class="filename">/usr/local/lib</tt>). If you'd like to do
70
- this instead, you'll need to (as root):</p><div class="orderedlist"><ol type="1" compact><li><p>Edit your <tt class="filename">/etc/ld.so.conf</tt> file and add the
71
- directory where <tt class="filename">libFOX.so</tt> is installed;
72
- and,</p></li><li><p>At the shell prompt, type <b class="command">ldconfig</b> to reload
68
+ <code class="filename">/etc/ld.so.conf</code> file to include the installation
69
+ directory (e.g. <code class="filename">/usr/local/lib</code>). If you'd like to do
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;
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>
data/doc/goals.html CHANGED
@@ -1,6 +1,6 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>History and Goals</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" 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="previous" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="next" href="build.html" title="Chapter&nbsp;1.&nbsp;Building from Source Code"></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">History and Goals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt01.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="build.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="goals"></a>History and Goals</h2></div></div><div></div></div><p>The primary goal of this project was (and is) to provide a complete
3
+ <title>History and Goals</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.68.1"><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="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="next" href="build.html" title="Chapter&nbsp;1.&nbsp;Building from Source Code"></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">History and Goals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt01.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="build.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="goals"></a>History and Goals</h2></div></div></div><p>The primary goal of this project was (and is) to provide a complete
4
4
  interface to <a href="http://www.fox-toolkit.com" target="_top">FOX</a> from
5
5
  <a href="http://www.ruby-lang.org" target="_top">Ruby</a>. Ruby programs should
6
6
  be able to access FOX classes transparently; this includes deriving new
@@ -29,9 +29,9 @@
29
29
  <a href="http://www.rubyconf.org/2001/talks/lyle/lylefox.htm" target="_top">
30
30
  "Developing GUIs with FOX and Ruby"</a> at the first annual Ruby
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
- some time, several Ruby books (such as the <i class="citetitle">
33
- Ruby Developer's Guide</i> and <i class="citetitle">The Ruby
34
- Way</i>) 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
32
+ some time, several Ruby books (such as the <em class="citetitle">
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
35
35
  still evolving FOX library while looking for new ways to make Ruby GUI
36
36
  development fun. For example, FXRuby is under consideration for use as a
37
37
  GUI front-end to the fledgling <a href="http://freeride.rubyforge.org/wiki/wiki.pl" target="_top">