Author: Patrick Lambert

# EasyGTK

### Manual v1.2

# Introduction

## Copyright

This manual and the EasyGTK library are (C) 1999 Patrick Lambert and are available under the LGPL license.

## History

I made EasyGTK because I realized that my GTK programming was mostly cut and paste of older functions I had made.

EasyGTK has 2 goals. First to make learning quicker and easier, to provide GTK programming to more people, and second to enable programmers to write code in fewer lines. A typical EasyGTK function will do what 5 or even 10 lines of GTK code would do.

# Installation

## Downloading

EasyGTK is a Unix C library and is provided as source code. To compile it, you need a Linux or Unix box with the GNU C compiler, GNU make and GTK 1.2 installed.

You can download EasyGTK from one of these locations:

- http://www.linsupport.com
- http://metalab.unc.edu
- http://mirrors.darkelf.net

## Compiling

Before compiling, you need to run the configure script. This will try to find if your system has the required libraries. If you have IMLIB, then the right compilation options will be added to the Makefile. If you don't need image support, I suggest you compile without the graphical libraries: configure -Magick -Imlib.

Note that this version now comes with support for GNOME, which will be included in the compile if it is detected. This also means you have to add the GNOME libraries in your own program if you use EasyGTK with support for the GNOME system. To compile without that support, add -gnome to the configure line.

Once the configure step is done, type make to compile EasyGTK. If this fails, you may need to edit the Makefile yourself.

## Compiling programs using EasyGTK

To compile a program with EasyGTK you simply need to compile it like you would with normal GTK libraries, plus the EasyGTK static library. Here is an example, if EasyGTK was compiled without any extra library:

gcc `gtk-config --cflags` -o myprogram myprogram.c `gtk-config --libs` libeasygtk.a

Note that you also need to include the IMLIB or ImageMagick libraries if you compiled EasyGTK with the default settings:

gcc `gtk-config --cflags` -I/usr/X11R6/include/X11/magick -I/usr/local/include/magick -o myprogram myprogram.c `gtk-config --libs` -lgdk_imlib `imlib-config --libs` -I/usr/include/glib libeasygtk.a -L/usr/local/lib -lMagick -ltiff -ljpeg

# Functions

## Some basic concepts

A widget is any graphical element. You need to first create a window, on which you attach a vertical or horizontal box. Then you attach other widgets to the box. The variables 'parent' are always supposed to be boxes. Boxes can be attached to other boxes to create complex placement.

## GtkWidget *e_window_create(gchar *title, gint size_x, gint size_y, gint position_x, gint position_y, GtkSignalFunc window_destroy);

This function allows you to create a new window. The window_destroy argument must be a function name that you create in your application and that will be called when the user closes that window.

## void e_set_size(GtkWidget *widget, gint size_x, gint size_y);

This function will set the size of a widget.

## GtkWidget *e_box_create(GtkWidget *parent, gint placement, gint border);

This will create a box. Boxes are used to put widgets in. The parent must be an other box or a window. The placement must be E_VERTICAL for a vertical box or E_HORIZONTAL for an horizontal box. The border argument specifies how many pixels should be betwen the window borders and the widgets in the box.

## void e_box_add(GtkWidget *parent, GtkWidget *widget, gint placement, gint fill);

This function will pack any widget into a box. The placement must be E_LEFT for normal placement or E_RIGHT to justify the widget on the right. The fill argument must be TRUE if you want the widget to expand to the window, or FALSE if you want a small, fixed widget.

## GtkWidget *e_box_fixed(GtkWidget *parent, gint placement, gint border);

This will create a fixed box. Boxes are used to put widgets in. The parent must be an other box or a window. The placement must be E_VERTICAL for a vertical box or E_HORIZONTAL for an horizontal box. The border argument specifies how many pixels should be betwen the window borders and the widgets in the box.

## GtkWidget *e_text_create(GtkWidget *parent, gint editable, gchar *initial_text, GtkSignalFunc text_changed);

This will create a text area where text can be inserted. If editable is TRUE then the user will be able to insert text in the area. The text_changed function will be called when the user inserts something. Note that for any signal functions you can put E_NO_FUNC if you don't wish to handle that event.

## void e_text_insert(GtkWidget *textarea, gchar *text);

This will insert text into a textarea.

## void e_text_insert_file(GtkWidget *textarea, gchar *filename);

Inserts filename's content into textarea.

## gint e_text_find(GtkWidget *textarea, gchar *string);

This function will find the position of string in the textarea, focus on it, and return the position number.

## gchar *e_text_get(GtkWidget *textarea);

This will return whatever text is in the textarea.

## void e_text_delete(GtkWidget *textarea);

This will delete all of the text in the textarea.

## GtkWidget *e_label_create(GtkWidget *parent, gchar *text);

This will create a label with the specified text in it.

## GtkWidget *e_entry_create(GtkWidget *parent, gchar *initial_text);

This will create an entry box where user can put a line of text in.

## gchar *e_entry_get(GtkWidget *entry);

This will return the text which was entered by the user.

## GtkWidget *e_button_create(GtkWidget *parent, gchar *text, GtkSignalFunc button_click);

This will create a button. When the user clicks on it, the function in the argument button_click will be called.

## GtkWidget *e_button_fixed(GtkWidget *parent, gchar *text, GtkSignalFunc button_click);

This will create a non resizable button. When the window grows, the button will stay the same size.

## GtkWidget *e_combo_create(GtkWidget *parent, gchar *initial_text, gchar *combo_list[], gint num, GtkSignalFunc item_selected);

This will create a combo box, which is a drop down list of items, with the items in combo_list. combo_list must contain num items. The function in item_selected will be called when the user selects an item.

## gchar *e_combo_get(GtkWidget *combo);

This returns the item selected.

## GtkWidget *e_list_create(GtkWidget *parent, gint cols, GtkSignalFunc item_selected);

This iwll create a list with a number of columns specified in cols.

## void e_list_setup(GtkWidget *list, gint col, gchar *title, gint width);

This will setup the column specified in col, setting the title and the width for that column.

## gchar *e_list_get();

This will return the selected line.

## void e_list_remove(GtkWidget *list);

This will remove the selected row

## void e_list_insert(GtkWidget *list, gchar *text[]);

This will insert text into the list. Note that the array must have the same size as the number of columns in the list.

## GtkWidget *e_buttonbox_create(GtkWidget *parent, gint orientation, gchar *button1_text, gchar *button2_text, GtkSignalFunc button1_click, GtkSignalFunc button2_click);

This will create a box with 2 buttons in it. The orientation should be E_END, E_SPREAD or E_DEFAULT.

## GtkWidget *e_buttonbox_unlim(GtkWidget *parent, gint orientation, guint num_buttons, ...);

This will create a box with num_buttons in it. ... parameters are as follows:

button1_text, button1_click, button2_text, button2_click, buttonN_text, buttonN_click, ...

For example: e_buttonbox_unlim(parent, E_SPREAD, 3, "Yes", E_NO_FUNC, "No", E_NO_FUNC, "Cancel", E_NO_FUNC);

## GSList *e_radiobuttons_create(GtkWidget *parent, gchar *items[], gint num);

This function will create a set of radiobuttons. The items argument should be an array of what must go in the radiobuttons, and num the number of radiobuttons. Note that due to how this is currently implemented, you should only use one set of radiobuttons at a time.

## gint e_radiobuttons_get();

This will return the last radiobutton selected.

## void e_radiobuttons_setdefault(gint choice);

This will set the default radiobutton.

## GtkWidget *e_checkbutton_create(GtkWidget *parent, gchar *text, gint default_state, GtkSignalFunc button_checked);

This will create a checkbutton with text on it. It will be checked by default if default_state is TRUE. button_checked will be called when the user clicks on it.

## gint e_checkbutton_get(GtkWidget *checkbutton);

This will return the state of the checkbutton.

## GtkWidget *e_notebook_create(GtkWidget *parent, gint placement);

This will create an empty notebook with the labels at placement. The placement argument must be E_TOP, E_BOTTOM, E_LEFT or E_RIGHT.

## GtkWidget *e_notebook_new_page(GtkWidget *notebook, gchar *title, gchar *description);

This will make a new page. You can then add other widgets to it.

## GtkWidget *e_show_message(gchar *title, gchar *message, GtkSignalFunc window_destroy);

This function will show a message in a box on the screen.

## GtkWidget *e_show_textbox(gchar *title, gchar *initext, GtkSignalFunc window_close);

This function will show a text in a textbox, with a close button.

## GtkWidget *e_browse_create(gchar *title, GtkSignalFunc ok_clicked, GtkSignalFunc cancel_clicked);

This will show a browse window where the user can select a file. If the user closes the window or clicks on cancel, cancel_clicked will be called.

## gchar *e_browse_get(GtkWidget *browse);

This will get the selected filename from a browse window.

## GtkWidget *e_font_create(GtkWidget *parent, gchar *title, GtkSignalFunc ok_clicked, GtkSignalFunc cancel_clicked);

This will create a font selection window. The user can then select a font.

## gchar *e_font_get(GtkWidget *fs);

This will return the selected font from the font window fs.

## GtkWidget *e_scrolled_create(GtkWidget *parent);

This will create a scrolled window where you can add other widgets.

## GtkWidget *e_toolbar_create(GtkWidget *parent, int orientation);

This will make a new toolbar and add it to parent. The orientation must be E_HORIZONTAL or E_VERTICAL.

## void e_toolbar_insert(GtkWidget *toolbar, gchar *name, gchar *description, GtkWidget *icon, GtkSignalFunc button_clicked);

This will add a new button on the toolbar, with name, description and icon. If you don't want one of those 3 items, use NULL. The icon can be made with e_icon_create or e_pixmap_create. When the button is clicked, button_clicked's function will be called.

## GtkWidget *e_image_create(GtkWidget *parent, gchar *filename);

THIS FUNCTION REQUIRES IMLIB

With this function you can show an image on parent. The image can be anything that imlib supports, including xpm, jpeg, gif and png.

## GtkWidget *e_image_scaled(GtkWidget *parent, gchar *filename, gint size_x, gint size_y);

THIS FUNCTION REQUIRES IMLIB

With this function you can show an image on parent. The image will be scaled down to size_x and size_y, and can be anything that imlib supports, including xpm, jpeg, gif and png.

## GdkWindow *e_image_window(gchar *filename);

THIS FUNCTION REQUIRES IMLIB

This function will create a window with the image in filename in it. The window will be resized to fit the image. The image can be anything that imlib supports, including xpm, jpeg, gif and png.

## GdkImlibImage *e_image_get();

THIS FUNCTION REQUIRES IMLIB

This function returns image data from the last loaded image to use with advanced imlib functions.

## GtkWidget *e_menu_create(GtkWidget *parent);

This will create a new menu bar. It will be attached to parent.

## GtkWidget *e_menu_insert_menu(GtkWidget *menubar, gchar *name, gint justify);

This will make a new menu on the menu bar, with the name in variable name. The justify variable should be E_LEFT for a normal menu, or E_RIGHT for a menu in the far right.

## GtkWidget *e_menu_insert_item(GtkWidget *menu, gchar *name, GtkSignalFunc item_clicked);

This will make a new entry in menu called name.

## GtkWidget *e_menu_insert_line(GtkWidget *menu);

This function inserts a blank line in a menu.

## GtkWidget *e_icon_create(GtkWidget *window, gchar *filename);

This will create an icon out of an xpm file.

## gchar *e_lrange(gchar *input_string, gint starting_at);

This will return every word from input_string after the word starting_at. A word is separated by spaces.

## gchar *e_lindex(gchar *input_string, gint word_number);

This will return the word from input_string at word_number. Words are separated by spaces.

## gchar *e_lindex_delim(gchar *input_string, gint word_number, gchar *delim);

This will return the word from input_string at word_number. Words are separated by delim.

## gchar *e_config_fetch(gchar *filename, gchar *key);

This will read filename which must be created with e_config_insert functions, look for key, and return the associated data.

## gint e_config_insert(gchar *filename, gchar *key, gchar *data);

This will insert in the filename configuration file key with its associated data.

## gint e_config_update(gchar *filename, gchar *key, gchar *data);

This will edit filename and change key and put the new data in place. If the key doesn't exist, it will try to add it. Note that filename must exist prior to use.

## GtkWidget *e_tree_create(GtkWidget *parent);

This function will create a root tree and put it on parent.

## GtkWidget *e_tree_insert_subtree(GtkWidget *tree, gchar *name);

This will make a subtree with the label name and add it to tree. Note that tree can be also a subtree.

## GtkWidget *e_tree_insert_item(GtkWidget *tree, gchar *name, GtkSignalFunc item_clicked);

This will add a label to a tree or subtree and will call item_clicked when clicked on it.

## gchar *e_tree_get();

This function will return the last selected item on a tree.

## gint e_image_convert(gchar *infile, gchar *outfile);

THIS FUNCTION REQUIRES IMAGEMAGICK

This function will convert an image file into an other format. Files can be GIFs, JPEGs, PNGs or any other format that ImageMagick supports.

## void e_image_display(gchar *filename);

THIS FUNCTION REQUIRES IMAGEMAGICK

This function will display filename in its own window, by ImageMagick. I suggest you use IMlib if at all possible since it gives you more control over your image.

## GtkWidget *e_pixmap_create(char *xpm_data[], GdkWindow *window);

This will create a pixmap from an included .xpm file. Example:

#include <my_file.xpm>
...
my_pix = e_pixmap_create(my_file_xpm, window->window);

## GtkWidget *e_button_create_with_pixmap(GtkWidget *parent, GtkWidget *icon, GtkSignalFunc button_clicked);

This function will create a button with a pixmap on it. It will put no label, only pixmap. When clicked, the button will call button_clicked. Icon can be createdwith e_icon_create or e_pixmap_create().

## GtkWidget *e_event_create(GtkWidget *parent, gint size_x, gint size_y, GtkSignalFunc area_clicked);

This function will create an event box with the specified size, and rulers. When the area is clicked on, area_clicked will be called. Due to the way this is implemented, only one event box should be used at a time.

## gint e_event_get_x();

This returns the X position of the latest click on an event box.

## gint e_event_get_y();

This returns the Y position of the latest click on an event box.

## GtkWidget *e_query_create(gchar *title, gchar *message, GtkSignalFunc ok_clicked, GtkSignalFunc cancel_clicked);

This function will create a query box with the specified message and an entry box, and 2 buttons.

## gchar *e_query_get(GtkWidget *query);

This will return the entry from the specified query box.

## E_Wizard *e_wizard_create(gchar *title, GtkWidget *icon, gchar *text, gint entry_box, GtkSignalFunc prev_button, GtkSignalFunc next_button, GtkSignalFunc cancel_button);

This will create a wizard like window with an icon, a text box and, if entry_box is TRUE, an entry box.

## void e_editor_create(E_Editor *editor);

This will create a simple editor.

# What the future holds

## Version 1.1x

The goals for version 1.1 of EasyGTK will be to improve on the current functions, add new GTK, IMLIB and ImageMagick functions.

## Version 2.0

Version 2.0 is still far ahead, but it may be interesting to convert EasyGTK into EasyGUI which could also create QT or Motif code.