Wiki Diff eugtk, revision #79 to tip

{{https://i.imgur.com/jTkbGPtl.png}}

= Overview =
EuGTK is a //complete// and //up-to-date// Euphoria 4.1 wrapper for the [[https://www.gtk.org/|GTK3]] GUI (graphic user interface) for **Linux**,** Windows**, and **OS-X**. Euphoria 4.1b2 is required, earlier versions 3.x and 4.0 do not work.

*All GTK3 widgets are wrapped, and up-to-date with the latest version of GTK3 - currently 3.24.5 on Windows, 3.22.30 on Mint (Aug 1, 2019). GTK is also one of the few GUI packages that is under continuous development and updating.

*Euphoria/GTK code is //much// simpler and easier to understand than similar libraries for other programming languages. There's no need to manually size and position interface objects, and objects can be referred to by 'handle' or by name, whichever makes your code clearer. Dot notation for properties can be used: {{{ set("MainWindow.title","Hello") for example.}}}

*EuGTK uses a pseudo object oriented approach. Objects have properties which you can 'set' or 'get', by property name. Many difficult or complex GTK3 functions (such as creating and using a {{{GtkListView}}}) have easier-to-use alternatives implemented in Euphoria.

= History =
Built on an original concept by **Dave Cuny**, with help from
Pete Eberlein, Greg Haberek, Kenneth Rhodes, Ron Tarrant, C.K. Lester, Don Cahela, Mike Sabal, Jerry Story, Derek Parnell, Jeremy Cowgar, and others. It is currently maintained by **Irv Mullins**.

= Download =
The latest EuGTK version can be downloaded from [[http://sites.google.com/site/euphoriagtk/Home]]\\
Or previous version (fallback in case the latest has bugs!) at [[https://github.com/irvm/EuGTK]]

As of August 2023, and possibly back in May 2023, the above links stopped working.

However, you can still grab the fallback from [[https://github.com/davidbruce/EuGTK]] or [[https://github.com/davidbruce/EuGTK/tree/ce5fbbf47d27d8156c1265a5636d83dbbfa3ad9b]] if you prefer **Irv Mullins** unmodified code.

For a simple download, you can grab it from [[https://github.com/davidbruce/EuGTK/blob/ce5fbbf47d27d8156c1265a5636d83dbbfa3ad9b/EuGTK4.15.0.tar.gz]]

There is also a copy at http://phix.x10.mx/pmwiki/pmwiki.php?n=Main.Eugtk40Library

= Platforms =
EuGTK runs on **Linux**, **Windows**, and **OSX**.
In most cases, the same source code can run on all three platforms without change.

On the **Linux** platform, EuGTK uses the GTK3 libraries which are installed by default with current Linux distros such as Mint or Ubuntu, etc...

EuGTK on **Windows** requires the appropriate GTK libraries for Windows. Apparently, only 64-bit versions are now being maintained. A link to an easy GTK for Windows installer is included in the pdf which comes with the EuGTK package.

For **OSX**, you must install the **gtk3** package with [[MacPorts|https://www.macports.org/]]

For **Raspberry Pi**
https://openeuphoria.org/wiki/view/RaspberryPi.wc

= Installation =

Simply open the .gz file, drag the 'demos' folder and drop it into your home folder (e.g. /home/irv/*demos goes here*).

Putting the EuGTK files in other locations will require some extra work, and isn't recommended. Demo programs and documentation will not be able to find the needed support files if you do this.

When you write your own programs, you can put things wherever you choose.

= Documentation =

Extensive html docs are provided with the download, as well as more than 250 test programs which you can use to
explore the capabilities of GTK3, and to copy/paste to make your own programming easier.

----
== Simple, easy syntax:
----

**Keywords**

* **create** - declares a new, unique instance of a GTK object (a.k.a. 'widget')
* **add** - puts 'widgets' into container, sharing available space equally
* **pack** - puts 'widgets' into container, using only as much space as required
* **show_all** - instantiates created widget instances
* **set** - set one or more properties of a widget
* **get** - retrieve the value of a widget property
* **main**
** enters the GTK main loop,
** waits for user activity (called 'events')
** and calls your Euphoria function(s) which you have connected to those events

----
== Capable of creating complex programs:
----
//BEAR// (for __B__rowse, __E__dit, __a__nd __R__un), shown above, edits and runs EuGTK programs, and is an excellent and productive web page html/css editor/viewer as well.
The built-in program editor has syntax-color coding for more than 100 programming languages, selectable fonts, and pop-up help for both Euphoria and GTK keywords..

//(Linux only at this time)//

----
== Drag & Drop Design
----

You can create your programs using any plain-text editor ([[https://github.com/peberlein/WEE/|WEE]] is recommended), or you can use [[https://glade.gnome.org|Glade]] to design your user interface visually, then load the interface with just one line of Euphoria code!

----
== Notes
----
Although for most purposes, interpreting or binding EuGTK programs works fine,\\
if you wish to compile your program, on newest Linux distros (e.g. Mint 19) euc fails: \\
You'll need to run a short script, shown below.\\
\\
Replace $1 with the name of program you are compiling:\\
Replace the -j8 with -j[n] where [n] is the number of processors you have. Makes things faster.\\

\\

$ euc -build-dir build -extra-lflags="-no-pie" -makefile $1.ex \\
$ make -j8 -f $1.mak -C build \\

{{https://sites.google.com/site/euphoriagtk/test2.png}}

= Overview =
EuGTK is a Euphoria 4.1 wrapper for the [[https://www.gtk.org/|GTK3]] GUI (graphic user interface). Euphoria 4.1 is required, earlier versions 3.x and 4.0 do not work.

Euphoria/GTK code is //much// simpler and easier to understand than similar libraries for other programming languages.

All GTK 3 widgets are implemented and tests for each are provided.
EuGTK uses an "object oriented" approach, and many difficult or complex GTK3 functions (such as creating and using a ListView) have easier-to-use alternatives written in Euphoria.

= History =
Built on an original concept by **Dave Cuny**, with help from
**Mike Sabal**, **Ron Tarrant**, and others. It is currently maintained by **Irv Mullins**.

= Platforms =
EuGTK runs on **Linux**, **Windows**, and **OSX**. The latest version (4.12.4) Nov 2017, makes it //very// easy to build complex GUI interfaces for your programs. Interface can be hand-coded or designed using Glade.
In many cases, the same source code can run on all three platforms without change.

The latest EuGTK version can be downloaded from [[http://sites.google.com/site/euphoriagtk/Home]]

On the **Linux** platform, EuGTK uses the GTK3 libraries which are installed by default with current Linux distros such as Mint or Ubuntu, etc...

EuGTK on **Windows** requires the appropriate GTK libraries for Windows. Apparently, only 64-bit versions are now being maintained. A link to the current 3.22 version is included in the pdf which comes with the EuGTK package.

For **OSX**, you must install the **gtk3** package with [[MacPorts|https://www.macports.org/]]

[[https://www.raspberrypi.org/|**Raspberry Pi 3**]] installation instructions are found at the bottom of this page.

----

== Hello World in EuGTK:

<eucode>
----------------------------------------------------------------------------
--# Yet Another Hello World! program
----------------------------------------------------------------------------

include GtkEngine.e

constant -- step [1] create the widgets. parameters can be passed as key=val pairs;

win = create(GtkWindow,"border=10,icon=face-laugh,$destroy=Quit"), -- $ indicates a "signal"
pan = create(GtkBox,"orientation=1"),
lbl = create(GtkLabel,"color=blue"),
box = create(GtkButtonBox),
btn = create(GtkButton,"gtk-quit", "Quit")

-- step [2] style label text. labels can use html-style markup;

set(lbl,"markup",
"<b><u><span color='red'>Hello World!</span></u></b>\n\n" &
"This demos a simple window with\na label and a quit button.\n")

-- step [3] add the widgets to containers.
/*
GTK sizes and packs them automatically,
and adjusts during run-time if window size changes,
so no messy manual positioning is required;
*/

add(win,pan) -- 'add' takes as much space as available, expanding to fill,
add(pan,lbl) -- sharing with other widgets packed into same container;

pack_end(pan,box) -- 'pack' takes only as much space as needed, leaving rest free;
add(box,btn)

-- step [4] display the widgets and enter main event processing loop;

show_all(win)
main()
</eucode>

== Unix:
{{https://sites.google.com/site/euphoriagtk/test.png}}

== Windows:
Windows 7 showing the native windows file chooser widget:
{{https://sites.google.com/site/euphoriagtk/_/rsrc/1510408411661/Home/NativeFileChooser.png?height=412&width=558}}
\\
Windows 7 showing icons:\\
{{https://sites.google.com/site/euphoriagtk/_/rsrc/1510408451865/Home/icons.png?height=502&width=592}}

== Raspberry Pi 3:
{{https://sites.google.com/site/euphoriagtk/tach.png}}

----

== Installing on RPi with Raspbian (should also work if you're running Ubuntu):
\\
Follow the links on the Downloads page to download:
# Arm binary for manual installation
# Wee
# EuGTK

\\
**Download** the latest EuGTK, and click on the tar.gz file,
read the important note, then
drag the demos folder into your home folder.
\\
\\
**Download** euphoria-4.1.0-ARMv6-hardfloat-5.tar.gz
Click on it, and extract to, let's say, your home folder.

Go to your home folder, and open a terminal to copy some files:
{{{
cd ~/euphoria-4.1.0-ARMv6-hardfloat/bin
sudo cp * /usr/bin
cd ..
sudo mkdir /usr/share/euphoria
sudo chmod 777 /usr/share/euphoria
sudo rm /usr/bin/eu.cfg
cp -r * /usr/share/euphoria
}}}
**Confirm that eui is installed:**
\\

{{{
pi@raspberrypi:~ $ eui
Euphoria Interpreter v4.1.0 development
32-bit Linux, Using System Memory
Revision Date: 2015-02-02 14:18:53, Id: 5861:57179171dbed

ERROR: Must specify the file to be interpreted on the command line
}}}
(So far, so good!)

**Replace /usr/bin/eu.cfg** with the following: (will probably have to use sudo nano here)

{{{
[all]
-eudir /usr/share/euphoria
-i /usr/share/euphoria/include

[translate]
-arch ARM
-gcc
-con
-com /usr/share/euphoria
-lib-pic /usr/share/euphoria/bin/euso.a
-lib /usr/share/euphoria/bin/eu.a

[bind]
-eub /usr/share/euphoria/bin/eub
}}}

**Check that it works**

{{{cd ~/demos}}}
\\
eui test0

Should take a few seconds, and then show the window.

**Install WEE**

Download WEE-master.zip
Use archiver to extract to /home/pi (or /home/your_user_name)

**Associate .ex files**
{{{
Use file manager to navigate to ~/demos
right-click on test0.ex
select Properties from the popup window
Select Open With -> Customize
Click on Custom Command Line
enter eui as Command line to execute:
Enter Euphoria as the Application name
click OK
}}}

Double click on an .ex program to see if it works.

== Trouble Shooting ==

If you get a long warning re: accessibility, add the setenv line to GtkEngine.e
as shown below:
<eucode>
export constant
version = "4.12.2",
release = "Feb 1, 2017",
copyright = " © 2017 by Irv Mullins"

setenv("NO_AT_BRIDGE","1") -- add this line here
</eucode>

== Notes ==
The Raspberry Pi 3 is a bit slow, so binding your Euphoria programs is helpful. Especially WEE and other programs you will use frequently.

Translating and compiling large EuGTK programs on the Pi is also rather slow, so you may prefer to cross-compile on a full-size PC, and then copy the executable to the Pi.

# Check this forum message: [[http://openeuphoria.org/forum/m/130902.wc|Cross Compile]]
# Or this wiki page: [[http://openeuphoria.org/wiki/view/CrossCompilingRaspberryPiWithoutScratchbox.wc|Cross Compile]]

\\
Over on Linux/Mint and probably other Debian distributions, we see libgtk-3.0 is no longer installed to /usr/lib. This causes problems with the library. Until this is worked around you can modify the code so it finds the library, or you can put a symbolic link:

{{{
ln -s /usr/lib/*/libgtk-3.so.0 /usr/lib
}}}

On Linux/32-bit, the latest eubins fail to work with this library. This is an interpreter problem and not a problem with the library itself. See ticket #933.

If the demos fail with cannot find test1.ex or something, it is because when the documentation says install to the home directory it really means you must install it there.

Search



Quick Links

User menu

Not signed in.

Misc Menu