fxruby 1.6.7 → 1.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/doc/apes02.html +2 -2
- data/doc/apes03.html +1 -1
- data/doc/book.html +1 -1
- data/doc/build.html +24 -24
- data/doc/ch03s02.html +1 -1
- data/doc/ch03s03.html +1 -1
- data/doc/ch03s04.html +1 -1
- data/doc/ch03s05.html +1 -1
- data/doc/ch04s02.html +6 -7
- data/doc/ch04s03.html +1 -1
- data/doc/ch04s04.html +1 -1
- data/doc/ch05s02.html +44 -46
- data/doc/ch05s03.html +21 -22
- data/doc/changes.html +31 -24
- data/doc/clipboardtut.html +7 -8
- data/doc/differences.html +9 -9
- data/doc/dragdroptut.html +52 -55
- data/doc/events.html +7 -7
- data/doc/examples.html +24 -24
- data/doc/gems.html +10 -10
- data/doc/goals.html +8 -6
- data/doc/implementation.html +1 -1
- data/doc/infosources.html +5 -5
- data/doc/library.html +5 -5
- data/doc/opengl.html +5 -5
- data/doc/pt01.html +1 -1
- data/doc/pt02.html +1 -1
- data/doc/scintilla.html +8 -8
- data/doc/style.css +246 -2
- data/doc/subversion.html +1 -1
- data/doc/tutorial1.html +2 -2
- data/doc/unicode.html +2 -2
- data/examples/babelfish.rb +0 -1
- data/examples/bounce.rb +0 -1
- data/examples/button.rb +0 -1
- data/examples/datatarget.rb +0 -1
- data/examples/dialog.rb +0 -1
- data/examples/dilbert.rb +0 -1
- data/examples/dirlist.rb +0 -1
- data/examples/dragdrop.rb +0 -1
- data/examples/dragsource.rb +0 -1
- data/examples/dropsite.rb +1 -2
- data/examples/foursplit.rb +0 -1
- data/examples/gltest.rb +0 -1
- data/examples/glviewer.rb +0 -1
- data/examples/groupbox.rb +0 -1
- data/examples/header.rb +0 -1
- data/examples/iconlist.rb +0 -1
- data/examples/image.rb +0 -1
- data/examples/imageviewer.rb +0 -1
- data/examples/inputs.rb +0 -1
- data/examples/mditest.rb +0 -1
- data/examples/pig.rb +0 -1
- data/examples/raabrowser.rb +0 -1
- data/examples/ratio.rb +0 -1
- data/examples/rulerview.rb +0 -1
- data/examples/scribble.rb +0 -1
- data/examples/shutter.rb +0 -1
- data/examples/splitter.rb +0 -1
- data/examples/tabbook.rb +0 -1
- data/examples/table.rb +0 -1
- data/ext/fox16/FXRuby.cpp +3 -4
- data/lib/fox16/version.rb +1 -1
- metadata +2 -3
- data/doc/todo.html +0 -40
data/doc/apes02.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>Object Life Cycles and Garbage Collection</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="implementation.html" title="Appendix E. Implementation"><link rel="prev" href="implementation.html" title="Appendix E. Implementation"><link rel="next" href="apes03.html" title="Virtual Functions"></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">Object Life Cycles and Garbage Collection</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="implementation.html">Prev</a> </td><th width="60%" align="center">Appendix E. Implementation</th><td width="20%" align="right"> <a accesskey="n" href="apes03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Object Life Cycles and Garbage Collection</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="implementation.html" title="Appendix E. Implementation"><link rel="prev" href="implementation.html" title="Appendix E. Implementation"><link rel="next" href="apes03.html" title="Virtual Functions"></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">Object Life Cycles and Garbage Collection</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="implementation.html">Prev</a> </td><th width="60%" align="center">Appendix E. Implementation</th><td width="20%" align="right"> <a accesskey="n" href="apes03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5267"></a>Object Life Cycles and Garbage Collection</h2></div></div></div><p>One of the more difficult issues to deal with was understanding
|
4
4
|
the "life cycle" of FOX objects (that is, the actual C++ objects) and
|
5
5
|
their relationship to the associated Ruby instances. Understanding this
|
6
6
|
relationship is critical when dealing with Ruby's garbage collector,
|
@@ -18,4 +18,4 @@ myButton = FXButton.new(parentWin, "Hello, World!", myIcon)</pre><p>It's importa
|
|
18
18
|
returned from most class instance methods; they are references to already-
|
19
19
|
existing objects. For example, <code class="methodname">FXStatusBar#statusline
|
20
20
|
</code> returns a reference to the status bar's enclosed status line
|
21
|
-
instance.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="
|
21
|
+
instance.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5286"></a>GL Objects</h3></div></div></div><p>A C++ <code class="classname">FXGLGroup</code> object owns all of the <code class="classname">FXGLObject</code> objects it "contains". In other words, when that <code class="classname">FXGLGroup</code> object is destroyed, it will also destroy all of the <code class="classname">FXGLObject</code> objects for which it holds pointers.</p><p>In order to keep track of <span class="emphasis"><em>which</em></span> GL objects have been added to an <code class="classname">FXGLGroup</code>, all of the FXRuby C++ classes derived from <code class="classname">FXGLObject</code> have a boolean member variable <em class="structfield"><code>owned</code></em> that indicates whether this object is "owned" or not. Until an <code class="classname">FXGLObject</code> object is added to a group, this member variable should stay false.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="implementation.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="implementation.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apes03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix E. Implementation </td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top"> Virtual Functions</td></tr></table></div></body></html>
|
data/doc/apes03.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>Virtual Functions</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="implementation.html" title="Appendix E. Implementation"><link rel="prev" href="apes02.html" title="Object Life Cycles and Garbage Collection"><link rel="next" href="subversion.html" title="Appendix F. Getting the Sources from Subversion"></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">Virtual Functions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apes02.html">Prev</a> </td><th width="60%" align="center">Appendix E. Implementation</th><td width="20%" align="right"> <a accesskey="n" href="subversion.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Virtual Functions</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="implementation.html" title="Appendix E. Implementation"><link rel="prev" href="apes02.html" title="Object Life Cycles and Garbage Collection"><link rel="next" href="subversion.html" title="Appendix F. Getting the Sources from Subversion"></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">Virtual Functions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apes02.html">Prev</a> </td><th width="60%" align="center">Appendix E. Implementation</th><td width="20%" align="right"> <a accesskey="n" href="subversion.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e5320"></a>Virtual Functions</h2></div></div></div><p>
|
4
4
|
One of the design requirements for FXRuby was to ensure that any
|
5
5
|
virtual function call made on a FOX object (from the C++ library
|
6
6
|
layer) is routed to the proper Ruby instance method, even if that
|
data/doc/book.html
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
<html><head>
|
2
2
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
-
<title>Developing Graphical User Interfaces 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="next" href="pt01.html" title="Part I. The Basics"></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">Developing Graphical User Interfaces with FXRuby</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pt01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="book"></a>Developing Graphical User Interfaces with FXRuby</h1></div><div><h2 class="subtitle">Covers FXRuby Version 1.6</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Lyle</span> <span class="surname">Johnson</span></h3></div></div><div><p class="copyright">Copyright © 2006 J. Lyle Johnson</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="part"><a href="pt01.html">I. The Basics</a></span></dt><dd><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#
|
3
|
+
<title>Developing Graphical User Interfaces 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="next" href="pt01.html" title="Part I. The Basics"></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">Developing Graphical User Interfaces with FXRuby</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pt01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="book"></a>Developing Graphical User Interfaces with FXRuby</h1></div><div><h2 class="subtitle">Covers FXRuby Version 1.6</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Lyle</span> <span class="surname">Johnson</span></h3></div></div><div><p class="copyright">Copyright © 2006 J. Lyle Johnson</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="part"><a href="pt01.html">I. The Basics</a></span></dt><dd><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></dd><dt><span class="part"><a href="pt02.html">II. Appendices</a></span></dt><dd><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></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="pt01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Part I. The Basics</td></tr></table></div></body></html>
|
data/doc/build.html
CHANGED
@@ -8,21 +8,21 @@
|
|
8
8
|
consult <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.fox-toolkit.net/cgi-bin/wiki.pl?Mac_OS_X" target="_top">this
|
9
9
|
page</a> from the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.fox-toolkit.net" target="_top">FOX
|
10
10
|
Community Wiki</a>, in addition to the standard build instructions
|
11
|
-
listed below.</p></li></ul></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
11
|
+
listed below.</p></li></ul></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e109"></a>Building From Source on Unix/Linux</h2></div></div></div><p>These instructions assume that you've already downloaded, compiled
|
12
12
|
and installed FOX. Next, you'll need to download the FXRuby source code
|
13
|
-
tarball and unpack it by typing:</p><pre class="screen">$ <span><strong class="command">tar xzf FXRuby-1.6.
|
13
|
+
tarball and unpack it by typing:</p><pre class="screen">$ <span><strong class="command">tar xzf FXRuby-1.6.7.tar.gz</strong></span></pre><p>This will create a new directory called <code class="filename">FXRuby-1.6.7</code>. Change to the top-level
|
14
14
|
directory and configure the build by typing:</p><pre class="screen">$ <span><strong class="command">ruby install.rb config</strong></span></pre><p>By default, the <code class="filename">install.rb</code> script will look for
|
15
15
|
the FOX include files and library in the standard <code class="filename">/usr/local/include/fox-1.6</code> and <code class="filename">/usr/local/lib</code> directories, respectively. You
|
16
16
|
can override these locations by passing a few additional arguments to
|
17
17
|
<code class="filename">install.rb</code> during this step, e.g.</p><pre class="screen">$ <span><strong class="command">ruby install.rb config -- \
|
18
|
-
--with-fox-include=/home/lyle/fox-1.6.
|
19
|
-
--with-fox-lib=/home/lyle/fox-1.6.
|
18
|
+
--with-fox-include=/home/lyle/fox-1.6.25/include \
|
19
|
+
--with-fox-lib=/home/lyle/fox-1.6.25/src/.libs</strong></span></pre><p>Once the build has been configured, you can start the build by
|
20
20
|
typing:</p><pre class="screen">$ <span><strong class="command">ruby install.rb setup</strong></span></pre><p>It will take quite awhile to build FXRuby, even on a fast machine,
|
21
21
|
so this might be a good time to take a coffee break. If you run into
|
22
22
|
problems during the compilation, please check the <a href="build.html#tragedies" title="Things That Can Go Wrong">list of things that can go wrong</a> for
|
23
23
|
workarounds for those problems.</p><p>Once it's finished compiling, install FXRuby by typing:</p><pre class="screen">$ <span><strong class="command">ruby install.rb install</strong></span></pre><p>As a quick sanity check, to make sure that all is well, you should
|
24
24
|
probably fire up <code class="filename">irb</code> and try to import FXRuby:</p><pre class="screen">$ <span><strong class="command">irb</strong></span>
|
25
|
-
irb(main):001:0> <strong class="userinput"><code>require '
|
25
|
+
irb(main):001:0> <strong class="userinput"><code>require 'fox16'</code></strong>
|
26
26
|
true
|
27
27
|
irb(main):002:0></pre><p>If the import failed (usually with a message along the lines of
|
28
28
|
"Cannot load library"), check the <a href="build.html#tragedies" title="Things That Can Go Wrong">list of things
|
@@ -30,19 +30,19 @@ irb(main):002:0></pre><p>If the import failed (usually with a message along t
|
|
30
30
|
your problem, drop me an e-mail or ask around on the Ruby newsgroup or
|
31
31
|
mailing list; it's quite likely that someone else has run into this
|
32
32
|
problem too. Once you do have a working FXRuby installation, you're ready
|
33
|
-
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="
|
33
|
+
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="d0e180"></a>Building From Source on Windows (Using Visual C++)</h2></div></div></div><p>This section describes how to compile FXRuby using Microsoft Visual
|
34
34
|
C++, for use with a Ruby that was also compiled using Visual C++.</p><p>This discussion assumes that you've built Ruby using the
|
35
35
|
instructions and build files distributed with the standard Ruby source
|
36
36
|
code. To review, you should have started by unpacking the source code
|
37
|
-
tarball, changing into the top-level source code directory (e.g. <code class="filename">C:\ruby-1.8.
|
37
|
+
tarball, changing into the top-level source code directory (e.g. <code class="filename">C:\ruby-1.8.6</code>) and then typing:</p><pre class="screen">C:\ruby-1.8.6><span><strong class="command">win32\configure</strong></span>
|
38
38
|
type 'nmake' to make ruby for mswin32.
|
39
|
-
C:\ruby-1.8.
|
40
|
-
typing, e.g.,</p><pre class="screen">C:\ruby-1.8.
|
39
|
+
C:\ruby-1.8.6><span><strong class="command">nmake</strong></span></pre><p>After the compilation finished, you installed Ruby somewhere by
|
40
|
+
typing, e.g.,</p><pre class="screen">C:\ruby-1.8.6><span><strong class="command">nmake DESTDIR=C:\ruby install</strong></span></pre><p>Similarly, I'm assuming that you built the FOX library using the
|
41
41
|
Developer Studio project files distributed with the standard FOX source
|
42
|
-
code distribution.</p><p>Now you can configure the FXRuby build by typing:</p><pre class="screen">C:\FXRuby-1.6.
|
43
|
-
--with-fox-include=C:\fox-1.6.
|
44
|
-
--with-fox-lib=C:\fox-1.6.
|
45
|
-
typing:</p><pre class="screen">C:\FXRuby-1.6.
|
42
|
+
code distribution.</p><p>Now you can configure the FXRuby build by typing:</p><pre class="screen">C:\FXRuby-1.6.7><span><strong class="command">ruby install.rb config --make-prog=nmake -- \
|
43
|
+
--with-fox-include=C:\fox-1.6.25\include \
|
44
|
+
--with-fox-lib=C:\fox-1.6.25\lib</strong></span></pre><p>Once the build has been configured, you can start the build by
|
45
|
+
typing:</p><pre class="screen">C:\FXRuby-1.6.7> <span><strong class="command">ruby install.rb setup</strong></span></pre><p>It will take quite awhile to build FXRuby, even on a fast machine,
|
46
46
|
so this might be a good time to take a coffee break. Because Visual C++ is
|
47
47
|
such a strict compiler (usually a good thing), you will probably run into
|
48
48
|
a few problems with non-ANSI declarations in the Ruby header files. If you
|
@@ -50,8 +50,8 @@ C:\ruby-1.8.4><span><strong class="command">nmake</strong></span></pre><p>Aft
|
|
50
50
|
for a list of things that could go wrong, and workarounds for those
|
51
51
|
problems. None of them are showstoppers and none require you to restart
|
52
52
|
the compile from scratch (just type <span><strong class="command">ruby install.rb
|
53
|
-
setup</strong></span> to pick up where you left off).</p><p>Once it's finished compiling, install FXRuby by typing:</p><pre class="screen">C:\FXRuby-1.6.
|
54
|
-
probably fire up <code class="filename">irb</code> and try to import FXRuby:</p><pre class="screen">C:\FXRuby-1.6.
|
53
|
+
setup</strong></span> to pick up where you left off).</p><p>Once it's finished compiling, install FXRuby by typing:</p><pre class="screen">C:\FXRuby-1.6.7> <span><strong class="command">ruby install.rb install</strong></span></pre><p>As a quick sanity check, to make sure that all is well, you should
|
54
|
+
probably fire up <code class="filename">irb</code> and try to import FXRuby:</p><pre class="screen">C:\FXRuby-1.6.7> <span><strong class="command">irb</strong></span>
|
55
55
|
irb(main):001:0> <strong class="userinput"><code>require 'fox16'</code></strong>
|
56
56
|
true
|
57
57
|
irb(main):002:0></pre><p>If the import failed (usually with a message along the lines of
|
@@ -99,25 +99,25 @@ core_wrap.cpp:108596: virtual memory exhausted</pre><p>This failure was due to t
|
|
99
99
|
(<code class="constant">CFLAGS</code>) in the <code class="filename">Makefile</code> by hand
|
100
100
|
to do so.</p><p><span class="emphasis"><em>"Cannot load library"</em></span></p><p>On Linux and other Unix systems that support shared libraries, FOX
|
101
101
|
is typically installed as a shared library named
|
102
|
-
<code class="filename">libFOX-1.
|
102
|
+
<code class="filename">libFOX-1.6.so</code>. After all of the source files for
|
103
103
|
FXRuby are compiled, the last step is to link all of the FXRuby object
|
104
104
|
files together with the FOX library (and possibly other system libraries)
|
105
|
-
to produce a new shared library, named <code class="filename">
|
105
|
+
to produce a new shared library, named <code class="filename">fox16.so</code>, that
|
106
106
|
Ruby can import as an extension module.</p><p>There are a few things that can go wrong when you try to import this
|
107
107
|
extension into Ruby. A common problem is that the operating system cannot
|
108
|
-
locate the FOX shared library (<code class="filename">libFOX-1.
|
108
|
+
locate the FOX shared library (<code class="filename">libFOX-1.6.so</code>) when it
|
109
109
|
tries to dynamically load the FXRuby extension module; when this happens,
|
110
110
|
the error message will look something like:</p><pre class="screen">$ <span><strong class="command">irb</strong></span>
|
111
|
-
irb(main):001:0> <strong class="userinput"><code>require '
|
112
|
-
LoadError: libFOX-
|
111
|
+
irb(main):001:0> <strong class="userinput"><code>require 'fox16'</code></strong>
|
112
|
+
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
|
113
113
|
from (irb):1:in 'require'
|
114
114
|
from (irb):1
|
115
115
|
</pre><p>One workaround for this problem is to modify the
|
116
116
|
<code class="constant">LD_LIBRARY_PATH</code> environment variable to include the
|
117
|
-
directory where <code class="filename">libFOX.so</code> is installed. For example,
|
118
|
-
if <code class="filename">libFOX-1.
|
117
|
+
directory where <code class="filename">libFOX-1.6.so</code> is installed. For example,
|
118
|
+
if <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>
|
119
119
|
$ <span><strong class="command">irb</strong></span>
|
120
|
-
irb(main):001:0> <strong class="userinput"><code>require '
|
120
|
+
irb(main):001:0> <strong class="userinput"><code>require 'fox16'</code></strong>
|
121
121
|
</pre><p>If this works, you can of course permanently add the
|
122
122
|
<code class="constant">LD_LIBRARY_PATH</code> setting to your login file(s) so that
|
123
123
|
you don't have to remember to type it each time. Another approach that
|
@@ -125,7 +125,7 @@ irb(main):001:0> <strong class="userinput"><code>require 'fox'</code></strong
|
|
125
125
|
<code class="filename">/etc/ld.so.conf</code> file to include the installation
|
126
126
|
directory (e.g. <code class="filename">/usr/local/lib</code>). If you'd like to do
|
127
127
|
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
|
128
|
-
directory where <code class="filename">libFOX.so</code> is installed;
|
128
|
+
directory where <code class="filename">libFOX-1.6.so</code> is installed;
|
129
129
|
and,</p></li><li><p>At the shell prompt, type <span><strong class="command">ldconfig</strong></span> to reload
|
130
130
|
the linker configuration.</p></li></ol></div><p><span class="emphasis"><em>"Undefined symbol..."</em></span></p><p>Another problem that has been reported by users of both Debian
|
131
131
|
GNU/Linux and NetBSD 1.5 is an error message along the lines of:</p><pre class="screen">/usr/lib/libstdc++.so.2: Undefined symbol "__vt_9exception"...</pre><p>The fix for this problem is reported to be to modify the FXRuby
|
data/doc/ch03s02.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>Better living through buttons</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="next" href="ch03s03.html" title="Messages"></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">Better living through buttons</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tutorial1.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="ch03s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Better living through buttons</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="next" href="ch03s03.html" title="Messages"></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">Better living through buttons</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tutorial1.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="ch03s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e741"></a>Better living through buttons</h2></div></div></div><p>Obviously, we need to add a few things to make it more interesting.
|
4
4
|
Let's start by putting a button inside the main window. The
|
5
5
|
<code class="classname">FXButton</code> class provides a standard push-button
|
6
6
|
widget:</p><pre class="programlisting">require 'fox16'
|
data/doc/ch03s03.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>Messages</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="ch03s02.html" title="Better living through buttons"><link rel="next" href="ch03s04.html" title="Adding a tool tip"></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">Messages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="ch03s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Messages</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="ch03s02.html" title="Better living through buttons"><link rel="next" href="ch03s04.html" title="Adding a tool tip"></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">Messages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="ch03s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e772"></a>Messages</h2></div></div></div><p>Now we're cookin' with Crisco, but let's press on and see what other
|
4
4
|
things we can do to improve this. You may have noticed by now that the
|
5
5
|
only way to quit the program is to close the window using the window
|
6
6
|
manager's "close window" option, or to just kill the program outright. We
|
data/doc/ch03s04.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>Adding a tool tip</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="ch03s03.html" title="Messages"><link rel="next" href="ch03s05.html" title="Adding an icon"></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">Adding a tool tip</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="ch03s05.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Adding a tool tip</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="ch03s03.html" title="Messages"><link rel="next" href="ch03s05.html" title="Adding an icon"></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">Adding a tool tip</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="ch03s05.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e863"></a>Adding a tool tip</h2></div></div></div><p>To wrap up this introduction, we'd like to add a few finishing
|
4
4
|
touches to the program. The first addition is to add a tool tip to the
|
5
5
|
button, such that when the mouse cursor hovers over the button for a short
|
6
6
|
while, it will pop up a little message describing what the button
|
data/doc/ch03s05.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>Adding an icon</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="ch03s04.html" title="Adding a tool tip"><link rel="next" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"></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">Adding an icon</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s04.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="clipboardtut.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Adding an icon</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="tutorial1.html" title="Chapter 3. Hello, World!"><link rel="prev" href="ch03s04.html" title="Adding a tool tip"><link rel="next" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"></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">Adding an icon</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s04.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Hello, World!</th><td width="20%" align="right"> <a accesskey="n" href="clipboardtut.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e900"></a>Adding an icon</h2></div></div></div><p>The final change is to add an icon to the button to make things a
|
4
4
|
little more festive. FOX supports all of the popular image file formats
|
5
5
|
(e.g. BMP, GIF, JPEG, PNG and TIFF) and you can use any of them as icons
|
6
6
|
on buttons and labels. For this example, we'll use the one of the "Powered
|
data/doc/ch04s02.html
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
<html><head>
|
2
2
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
-
<title>Acquiring the Clipboard</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="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="next" href="ch04s03.html" title="Sending Data to the Clipboard"></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">Acquiring the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="clipboardtut.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
4
|
-
the bottom of the main window for copying and pasting:</p><pre class="programlisting">require '
|
5
|
-
require_gem 'fxruby'
|
3
|
+
<title>Acquiring the Clipboard</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="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="next" href="ch04s03.html" title="Sending Data to the Clipboard"></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">Acquiring the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="clipboardtut.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1022"></a>Acquiring the Clipboard</h2></div></div></div><p>Let's begin by augmenting the GUI to include a row of buttons along
|
4
|
+
the bottom of the main window for copying and pasting:</p><pre class="programlisting">require 'fox16'
|
6
5
|
require 'customer'
|
7
6
|
|
8
7
|
include Fox
|
@@ -10,7 +9,7 @@ include Fox
|
|
10
9
|
class ClipMainWindow < FXMainWindow
|
11
10
|
def initialize(anApp)
|
12
11
|
# Initialize base class first
|
13
|
-
super(anApp, "Clipboard Example",
|
12
|
+
super(anApp, "Clipboard Example", :opts => DECOR_ALL, :width => 400, :height => 300)
|
14
13
|
<span class="bold"><strong>
|
15
14
|
# Horizontal frame contains buttons
|
16
15
|
buttons = FXHorizontalFrame.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
|
@@ -20,11 +19,11 @@ class ClipMainWindow < FXMainWindow
|
|
20
19
|
pasteButton = FXButton.new(buttons, "Paste")
|
21
20
|
</strong></span>
|
22
21
|
# Place the list in a sunken frame
|
23
|
-
sunkenFrame = FXVerticalFrame.new(self,
|
24
|
-
|
22
|
+
sunkenFrame = FXVerticalFrame.new(self,
|
23
|
+
LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
25
24
|
|
26
25
|
# Customer list
|
27
|
-
customerList = FXList.new(sunkenFrame,
|
26
|
+
customerList = FXList.new(sunkenFrame, :opts => LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
28
27
|
$customers.each do |customer|
|
29
28
|
customerList.appendItem(customer.name, nil, customer)
|
30
29
|
end
|
data/doc/ch04s03.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>Sending Data to the Clipboard</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="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="ch04s02.html" title="Acquiring the Clipboard"><link rel="next" href="ch04s04.html" title="Pasting Data from the Clipboard"></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">Sending Data to the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s02.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="ch04s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Sending Data to the Clipboard</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="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="ch04s02.html" title="Acquiring the Clipboard"><link rel="next" href="ch04s04.html" title="Pasting Data from the Clipboard"></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">Sending Data to the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s02.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="ch04s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1071"></a>Sending Data to the Clipboard</h2></div></div></div><p>Whenever some other window requests the clipboard's contents (e.g.
|
4
4
|
as a result of a "paste" operation) FOX will send a
|
5
5
|
<code class="constant">SEL_CLIPBOARD_REQUEST</code> message to the current
|
6
6
|
clipboard owner. Remember, the clipboard owner is the window that called
|
data/doc/ch04s04.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>Pasting Data from the Clipboard</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="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="ch04s03.html" title="Sending Data to the Clipboard"><link rel="next" href="dragdroptut.html" title="Chapter 5. Drag and Drop"></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">Pasting Data from the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s03.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="dragdroptut.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Pasting Data from the Clipboard</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="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="ch04s03.html" title="Sending Data to the Clipboard"><link rel="next" href="dragdroptut.html" title="Chapter 5. Drag and Drop"></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">Pasting Data from the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s03.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="dragdroptut.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1122"></a>Pasting Data from the Clipboard</h2></div></div></div><p>We've seen one side of the equation, copying string data to the
|
4
4
|
clipboard. But before we can "round-trip" that customer data and paste it
|
5
5
|
back into another copy of our customer list application, we're clearly
|
6
6
|
going to need to transfer the data in some more useful format. That is to
|
data/doc/ch05s02.html
CHANGED
@@ -1,28 +1,27 @@
|
|
1
1
|
<html><head>
|
2
2
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
-
<title>Drag Sources</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="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="prev" href="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="next" href="ch05s03.html" title="Putting It All Together"></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">Drag Sources</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dragdroptut.html">Prev</a> </td><th width="60%" align="center">Chapter 5. Drag and Drop</th><td width="20%" align="right"> <a accesskey="n" href="ch05s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Drag Sources</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="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="prev" href="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="next" href="ch05s03.html" title="Putting It All Together"></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">Drag Sources</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dragdroptut.html">Prev</a> </td><th width="60%" align="center">Chapter 5. Drag and Drop</th><td width="20%" align="right"> <a accesskey="n" href="ch05s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1373"></a>Drag Sources</h2></div></div></div><p>As before, we're going to start by presenting a skeleton application
|
4
4
|
consisting of a main window widget (a <code class="classname">DragSource</code>
|
5
|
-
instance) that parents an <code class="classname">FXCanvas</code> widget:</p><pre class="programlisting">require '
|
6
|
-
require_gem 'fxruby'
|
5
|
+
instance) that parents an <code class="classname">FXCanvas</code> widget:</p><pre class="programlisting">require 'fox16'
|
7
6
|
|
8
7
|
include Fox
|
9
8
|
|
10
9
|
class DragSource < FXMainWindow
|
11
10
|
def initialize(anApp)
|
12
11
|
# Initialize base class
|
13
|
-
super(anApp, "Drag Source",
|
12
|
+
super(anApp, "Drag Source", :opts => DECOR_ALL, :width => 400, :height => 300)
|
14
13
|
|
15
14
|
# Fill main window with canvas
|
16
|
-
@canvas = FXCanvas.new(self,
|
15
|
+
@canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
17
16
|
@canvas.backColor = "red"
|
18
17
|
|
19
18
|
# Handle expose events on the canvas
|
20
|
-
@canvas.connect(SEL_PAINT)
|
21
|
-
FXDCWindow.new(@canvas, event)
|
19
|
+
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
20
|
+
FXDCWindow.new(@canvas, event) do |dc|
|
22
21
|
dc.foreground = @canvas.backColor
|
23
22
|
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
24
|
-
|
25
|
-
|
23
|
+
end
|
24
|
+
end
|
26
25
|
end
|
27
26
|
|
28
27
|
def create
|
@@ -53,14 +52,14 @@ end
|
|
53
52
|
canvas widget that just clears the canvas to its current background
|
54
53
|
color; and,</p></li><li><p>The drag type for colors
|
55
54
|
(<code class="constant">FXWindow.colorType</code>) is registered in the
|
56
|
-
<code class="classname">DragSource</code>'s <code class="methodname">create
|
55
|
+
<code class="classname">DragSource</code>'s <code class="methodname">create</code>
|
57
56
|
method.</p></li></ul></div><p>As before, you may want to run this basic version of the program to
|
58
57
|
be sure that it's working properly so far. You should simply see an empty
|
59
58
|
window with a red background.</p><p>Now for this application, we want a drag operation to begin when the
|
60
59
|
user presses the left mouse button inside the canvas and starts "dragging"
|
61
60
|
away from the canvas. So the first change we need to make is to add a
|
62
61
|
handler for the <code class="constant">SEL_LEFTBUTTONPRESS</code> message from the
|
63
|
-
canvas:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONPRESS)
|
62
|
+
canvas:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONPRESS) do
|
64
63
|
#
|
65
64
|
# Capture (grab) the mouse when the button goes down, so that all future
|
66
65
|
# mouse events will be reported to this widget, even if those events occur
|
@@ -71,33 +70,33 @@ end
|
|
71
70
|
# Advertise which drag types we can offer
|
72
71
|
dragTypes = [FXWindow.colorType]
|
73
72
|
@canvas.beginDrag(dragTypes)
|
74
|
-
|
73
|
+
end
|
75
74
|
</pre><p>Note that there are usually two things you're going to want to do in
|
76
75
|
the <code class="constant">SEL_LEFTBUTTONPRESS</code> handler for a drag source.
|
77
|
-
The first is to call <code class="methodname">grab
|
78
|
-
acts as the drag source. Calling <code class="methodname">grab
|
76
|
+
The first is to call <code class="methodname">grab</code> on the window that
|
77
|
+
acts as the drag source. Calling <code class="methodname">grab</code>
|
79
78
|
"captures" the mouse in the sense that subsequent mouse motion events will
|
80
79
|
be reported as if they occurred inside the grab window. This is important,
|
81
80
|
since in our case we're going to be dragging from this window to some
|
82
81
|
other window, possibly a window in a different application
|
83
82
|
altogether.</p><p>The second thing you'll want to do in the
|
84
83
|
<code class="constant">SEL_LEFTBUTTONPRESS</code> handler for a drag source is to
|
85
|
-
call <code class="methodname">beginDrag
|
84
|
+
call <code class="methodname">beginDrag</code>. This not only kicks the
|
86
85
|
application into drag-and-drop mode, but also provides a way for you to
|
87
86
|
inform the system about the formats of data (i.e. the drag types) that
|
88
87
|
this drag source is able to provide. For this example, the drag source is
|
89
88
|
just going to offer one drag type.</p><p>Since releasing the left mouse button should end the drag operation,
|
90
89
|
it's important to also add a handler for the
|
91
|
-
<code class="constant">SEL_LEFTBUTTONRELEASE</code> message:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONRELEASE)
|
90
|
+
<code class="constant">SEL_LEFTBUTTONRELEASE</code> message:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONRELEASE) do
|
92
91
|
@canvas.ungrab
|
93
92
|
@canvas.endDrag
|
94
|
-
|
93
|
+
end
|
95
94
|
</pre><p>This is pretty much the mirror image of our
|
96
95
|
<code class="constant">SEL_LEFTBUTTONPRESS</code> handler. We call
|
97
|
-
<code class="methodname">ungrab
|
98
|
-
<code class="methodname">endDrag
|
96
|
+
<code class="methodname">ungrab</code> to release the mouse capture, and
|
97
|
+
<code class="methodname">endDrag</code> to clean up the drag-and-drop
|
99
98
|
state.</p><p>The next change is to add a <code class="constant">SEL_MOTION</code> handler,
|
100
|
-
to handle mouse motion events during the drag operation:</p><pre class="programlisting">@canvas.connect(SEL_MOTION)
|
99
|
+
to handle mouse motion events during the drag operation:</p><pre class="programlisting">@canvas.connect(SEL_MOTION) do |sender, sel, event|
|
101
100
|
if @canvas.dragging?
|
102
101
|
@canvas.handleDrag(event.root_x, event.root_y)
|
103
102
|
unless @canvas.didAccept == DRAG_REJECT
|
@@ -106,19 +105,19 @@ end
|
|
106
105
|
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
107
106
|
end
|
108
107
|
end
|
109
|
-
|
108
|
+
end
|
110
109
|
</pre><p>The <code class="methodname">dragging?</code> method returns true if we're
|
111
110
|
in the middle of a drag-and-drop operation for the drag source window,
|
112
|
-
i.e. after the call to <code class="methodname">beginDrag
|
113
|
-
call to <code class="methodname">endDrag
|
111
|
+
i.e. after the call to <code class="methodname">beginDrag</code> but before the
|
112
|
+
call to <code class="methodname">endDrag</code>. If we're not currently
|
114
113
|
processing a drag operation, we're not really interested in mouse motion
|
115
114
|
events for the canvas.</p><p>If we <span class="emphasis"><em>are</em></span> processing a drag operation, however,
|
116
|
-
we need to call <code class="methodname">handleDrag
|
115
|
+
we need to call <code class="methodname">handleDrag</code> on the drag source
|
117
116
|
window. FOX uses this information to send drag-and-drop messages (such as
|
118
117
|
<code class="constant">SEL_DND_ENTER</code>, <code class="constant">SEL_DND_MOTION</code>
|
119
118
|
and <code class="constant">SEL_DND_LEAVE</code>) to the window that the mouse is
|
120
119
|
currently over. Note that the coordinates passed to
|
121
|
-
<code class="methodname">handleDrag
|
120
|
+
<code class="methodname">handleDrag</code> are root window coordinates, and not
|
122
121
|
window-local coordinates.</p><p>Another good thing to consider doing here is to change the shape of
|
123
122
|
the cursor depending on the drop site's response to the drag-and-drop
|
124
123
|
messages from the drag source. For this example, we change the drag cursor
|
@@ -150,14 +149,14 @@ end
|
|
150
149
|
over a drop-enabled window, the cursor should change its shape.</p><p>The last (and most important) step is to actually complete the data
|
151
150
|
transfer. At any time during a drag-and-drop operation, a drop site may
|
152
151
|
request a copy of the drag-and-drop data by calling the
|
153
|
-
<code class="methodname">getDNDData
|
152
|
+
<code class="methodname">getDNDData</code> method (as described in the previous
|
154
153
|
section). When this happens, FOX sends a
|
155
154
|
<code class="constant">SEL_DND_REQUEST</code> message to the current drag source
|
156
|
-
window, and so we now add a handler for that message:</p><pre class="programlisting">@canvas.connect(SEL_DND_REQUEST)
|
155
|
+
window, and so we now add a handler for that message:</p><pre class="programlisting">@canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
|
157
156
|
if event.target == FXWindow.colorType
|
158
157
|
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
159
158
|
end
|
160
|
-
|
159
|
+
end
|
161
160
|
</pre><p>The first important thing to note here is that the
|
162
161
|
<code class="varname">target</code> field of the <code class="classname">FXEvent</code>
|
163
162
|
instance will contain the drag type requested by the drop site. If your
|
@@ -167,8 +166,8 @@ end
|
|
167
166
|
this example) it's still a good idea to check the requested type, since a
|
168
167
|
rogue drop site could ask for the data in some unexpected format.</p><p>Assuming that the drag type is as expected, the last step is send
|
169
168
|
the data to the drop site by calling
|
170
|
-
<code class="methodname">setDNDData
|
171
|
-
<code class="methodname">getDNDData
|
169
|
+
<code class="methodname">setDNDData</code>. As with the call to
|
170
|
+
<code class="methodname">getDNDData</code> for our previous drop site program,
|
172
171
|
you want to be sure to specify the origin of the data
|
173
172
|
(<code class="constant">FROM_DRAGNDROP</code>), the drag type
|
174
173
|
(<code class="constant">FXWindow.colorType</code>) and the data itself as a binary
|
@@ -177,30 +176,29 @@ end
|
|
177
176
|
release the left mouse button to complete the "drop", the drop site should
|
178
177
|
change its color to red.</p><p>The complete program is listed below, and is included in the
|
179
178
|
<code class="filename">examples</code> directory under the file
|
180
|
-
name <code class="filename">dragsource.rb</code>.</p><pre class="programlisting">require '
|
181
|
-
require_gem 'fxruby'
|
179
|
+
name <code class="filename">dragsource.rb</code>.</p><pre class="programlisting">require 'fox16'
|
182
180
|
|
183
181
|
include Fox
|
184
182
|
|
185
183
|
class DragSource < FXMainWindow
|
186
184
|
def initialize(anApp)
|
187
185
|
# Initialize base class
|
188
|
-
super(anApp, "Drag Source",
|
186
|
+
super(anApp, "Drag Source", :opts => DECOR_ALL, :width => 400, :height => 300)
|
189
187
|
|
190
188
|
# Fill main window with canvas
|
191
|
-
@canvas = FXCanvas.new(self,
|
189
|
+
@canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
192
190
|
@canvas.backColor = "red"
|
193
191
|
|
194
192
|
# Handle expose events on the canvas
|
195
|
-
@canvas.connect(SEL_PAINT)
|
196
|
-
FXDCWindow.new(@canvas, event)
|
193
|
+
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
194
|
+
FXDCWindow.new(@canvas, event) do |dc|
|
197
195
|
dc.foreground = @canvas.backColor
|
198
196
|
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
199
|
-
|
200
|
-
|
197
|
+
end
|
198
|
+
end
|
201
199
|
|
202
200
|
# Handle left button press
|
203
|
-
@canvas.connect(SEL_LEFTBUTTONPRESS)
|
201
|
+
@canvas.connect(SEL_LEFTBUTTONPRESS) do
|
204
202
|
#
|
205
203
|
# Capture (grab) the mouse when the button goes down, so that all future
|
206
204
|
# mouse events will be reported to this widget, even if those events occur
|
@@ -211,10 +209,10 @@ class DragSource < FXMainWindow
|
|
211
209
|
# Advertise which drag types we can offer
|
212
210
|
dragTypes = [FXWindow.colorType]
|
213
211
|
@canvas.beginDrag(dragTypes)
|
214
|
-
|
212
|
+
end
|
215
213
|
|
216
214
|
# Handle mouse motion events
|
217
|
-
@canvas.connect(SEL_MOTION)
|
215
|
+
@canvas.connect(SEL_MOTION) do |sender, sel, event|
|
218
216
|
if @canvas.dragging?
|
219
217
|
@canvas.handleDrag(event.root_x, event.root_y)
|
220
218
|
unless @canvas.didAccept == DRAG_REJECT
|
@@ -223,20 +221,20 @@ class DragSource < FXMainWindow
|
|
223
221
|
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
224
222
|
end
|
225
223
|
end
|
226
|
-
|
224
|
+
end
|
227
225
|
|
228
226
|
# Handle left button release
|
229
|
-
@canvas.connect(SEL_LEFTBUTTONRELEASE)
|
227
|
+
@canvas.connect(SEL_LEFTBUTTONRELEASE) do
|
230
228
|
@canvas.ungrab
|
231
229
|
@canvas.endDrag
|
232
|
-
|
230
|
+
end
|
233
231
|
|
234
232
|
# Handle request for DND data
|
235
|
-
@canvas.connect(SEL_DND_REQUEST)
|
233
|
+
@canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
|
236
234
|
if event.target == FXWindow.colorType
|
237
235
|
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
238
236
|
end
|
239
|
-
|
237
|
+
end
|
240
238
|
end
|
241
239
|
|
242
240
|
def create
|
data/doc/ch05s03.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>Putting It All Together</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="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="prev" href="ch05s02.html" title="Drag Sources"><link rel="next" href="unicode.html" title="Chapter 6. Unicode 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">Putting It All Together</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a> </td><th width="60%" align="center">Chapter 5. Drag and Drop</th><td width="20%" align="right"> <a accesskey="n" href="unicode.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="
|
3
|
+
<title>Putting It All Together</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="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="prev" href="ch05s02.html" title="Drag Sources"><link rel="next" href="unicode.html" title="Chapter 6. Unicode 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">Putting It All Together</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a> </td><th width="60%" align="center">Chapter 5. Drag and Drop</th><td width="20%" align="right"> <a accesskey="n" href="unicode.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1567"></a>Putting It All Together</h2></div></div></div><p>We've studied drag-and-drop enabled applications from two points of
|
4
4
|
view, that of a drag source and that of a drop site. But for most
|
5
5
|
applications, you'll want a window to act as both a drag source
|
6
6
|
<span class="emphasis"><em>and</em></span> a drop site. As it turns out, this is just a
|
@@ -8,7 +8,7 @@
|
|
8
8
|
sections.</p><p>If we use our completed drag source example program from the
|
9
9
|
previous section as a starting point, and then compare it to the drop site
|
10
10
|
example from the first section, it is apparent that the only "pieces"
|
11
|
-
missing are:</p><div class="itemizedlist"><ul type="disc"><li><p>A call to <code class="methodname">dropEnable
|
11
|
+
missing are:</p><div class="itemizedlist"><ul type="disc"><li><p>A call to <code class="methodname">dropEnable</code>, to make
|
12
12
|
<code class="classname">DragSource</code>'s canvas drop-enabled;</p></li><li><p>A handler for the <code class="constant">SEL_DND_MOTION</code> message;
|
13
13
|
and,</p></li><li><p>A handler for the <code class="constant">SEL_DND_DROP</code>
|
14
14
|
message.</p></li></ul></div><p>If you merge those three short bits of code from
|
@@ -23,33 +23,32 @@
|
|
23
23
|
forth between all three programs. You could spend days doing this and
|
24
24
|
never leave the house.</p><p>The complete program is listed below, and is included in the
|
25
25
|
<code class="filename">examples</code> directory under the file
|
26
|
-
name <code class="filename">dragdrop.rb</code>.</p><pre class="programlisting">require '
|
27
|
-
require_gem 'fxruby'
|
26
|
+
name <code class="filename">dragdrop.rb</code>.</p><pre class="programlisting">require 'fox16'
|
28
27
|
|
29
28
|
include Fox
|
30
29
|
|
31
30
|
class DragDropWindow < FXMainWindow
|
32
31
|
def initialize(anApp)
|
33
32
|
# Initialize base class
|
34
|
-
super(anApp, "Drag and Drop",
|
33
|
+
super(anApp, "Drag and Drop", :opts => DECOR_ALL, :width => 400, :height => 300)
|
35
34
|
|
36
35
|
# Fill main window with canvas
|
37
|
-
@canvas = FXCanvas.new(self,
|
36
|
+
@canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
38
37
|
@canvas.backColor = "red"
|
39
38
|
|
40
39
|
# Enable canvas for drag-and-drop messages
|
41
40
|
@canvas.dropEnable
|
42
41
|
|
43
42
|
# Handle expose events on the canvas
|
44
|
-
@canvas.connect(SEL_PAINT)
|
45
|
-
FXDCWindow.new(@canvas, event)
|
43
|
+
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
44
|
+
FXDCWindow.new(@canvas, event) do |dc|
|
46
45
|
dc.foreground = @canvas.backColor
|
47
46
|
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
48
|
-
|
49
|
-
|
47
|
+
end
|
48
|
+
end
|
50
49
|
|
51
50
|
# Handle left button press
|
52
|
-
@canvas.connect(SEL_LEFTBUTTONPRESS)
|
51
|
+
@canvas.connect(SEL_LEFTBUTTONPRESS) do
|
53
52
|
#
|
54
53
|
# Capture (grab) the mouse when the button goes down, so that all future
|
55
54
|
# mouse events will be reported to this widget, even if those events occur
|
@@ -60,10 +59,10 @@ class DragDropWindow < FXMainWindow
|
|
60
59
|
# Advertise which drag types we can offer
|
61
60
|
dragTypes = [FXWindow.colorType]
|
62
61
|
@canvas.beginDrag(dragTypes)
|
63
|
-
|
62
|
+
end
|
64
63
|
|
65
64
|
# Handle mouse motion events
|
66
|
-
@canvas.connect(SEL_MOTION)
|
65
|
+
@canvas.connect(SEL_MOTION) do |sender, sel, event|
|
67
66
|
if @canvas.dragging?
|
68
67
|
@canvas.handleDrag(event.root_x, event.root_y)
|
69
68
|
unless @canvas.didAccept == DRAG_REJECT
|
@@ -72,37 +71,37 @@ class DragDropWindow < FXMainWindow
|
|
72
71
|
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
73
72
|
end
|
74
73
|
end
|
75
|
-
|
74
|
+
end
|
76
75
|
|
77
76
|
# Handle SEL_DND_MOTION messages from the canvas
|
78
|
-
@canvas.connect(SEL_DND_MOTION)
|
77
|
+
@canvas.connect(SEL_DND_MOTION) do
|
79
78
|
if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
|
80
79
|
@canvas.acceptDrop
|
81
80
|
end
|
82
|
-
|
81
|
+
end
|
83
82
|
|
84
83
|
# Handle left button release
|
85
|
-
@canvas.connect(SEL_LEFTBUTTONRELEASE)
|
84
|
+
@canvas.connect(SEL_LEFTBUTTONRELEASE) do
|
86
85
|
@canvas.ungrab
|
87
86
|
@canvas.endDrag
|
88
|
-
|
87
|
+
end
|
89
88
|
|
90
89
|
# Handle SEL_DND_DROP message from the canvas
|
91
|
-
@canvas.connect(SEL_DND_DROP)
|
90
|
+
@canvas.connect(SEL_DND_DROP) do
|
92
91
|
# Try to obtain the data as color values first
|
93
92
|
data = @canvas.getDNDData(FROM_DRAGNDROP, FXWindow.colorType)
|
94
93
|
unless data.nil?
|
95
94
|
# Update canvas background color
|
96
95
|
@canvas.backColor = Fox.fxdecodeColorData(data)
|
97
96
|
end
|
98
|
-
|
97
|
+
end
|
99
98
|
|
100
99
|
# Handle request for DND data
|
101
|
-
@canvas.connect(SEL_DND_REQUEST)
|
100
|
+
@canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
|
102
101
|
if event.target == FXWindow.colorType
|
103
102
|
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
104
103
|
end
|
105
|
-
|
104
|
+
end
|
106
105
|
end
|
107
106
|
|
108
107
|
def create
|