[go: up one dir, main page]

0% found this document useful (0 votes)
71 views67 pages

Programming GTK+ Implementation of A Text Editor: Mohamed A. Aslan February 17, 2005

The document discusses the implementation of a text editor using GTK+, a free and open source library for building graphical user interfaces. It provides an introduction to GTK+ and outlines the book, which covers various GTK+ widgets like windows, labels, entries, text views, buttons, status bars, tool bars, menus and more. Code examples are provided to demonstrate how to implement each of these widgets and construct a basic text editor.

Uploaded by

Jackto Dev
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views67 pages

Programming GTK+ Implementation of A Text Editor: Mohamed A. Aslan February 17, 2005

The document discusses the implementation of a text editor using GTK+, a free and open source library for building graphical user interfaces. It provides an introduction to GTK+ and outlines the book, which covers various GTK+ widgets like windows, labels, entries, text views, buttons, status bars, tool bars, menus and more. Code examples are provided to demonstrate how to implement each of these widgets and construct a basic text editor.

Uploaded by

Jackto Dev
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 67

Programming GTK+

Implementation of a Text Editor

Mohamed A. Aslan

February 17, 2005


2
Contents

1 Introduction 9
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Requirements for this book . . . . . . . . . . . . . . . . . . . . 9
1.3 Compiling The Examples . . . . . . . . . . . . . . . . . . . . . 10
1.4 Outline of the book . . . . . . . . . . . . . . . . . . . . . . . . 10

2 Windows 11
2.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3 Labels 17
3.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Entries 19
4.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5 Text View 21
5.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6 Buttons 25
6.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 26

7 Status Bars 31
7.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3
4 CONTENTS

8 Tool Bars 33
8.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
8.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 34

9 Menus 37
9.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
9.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 38

10 Scrolled Windows 39
10.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
10.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 39

11 Boxes 41
11.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
11.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 42

12 Tables 45
12.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
12.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 46

13 Signals 49
13.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
13.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 50

14 File Selection 51
14.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
14.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 51

15 Font Selection 55
15.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
15.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 55

16 Text Editor 59
16.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
16.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 59
List of Figures

2.1 Window 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Window 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Window 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.1 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.1 Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5.1 Text View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

6.1 Button 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.2 Button 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

7.1 Status Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

8.1 Tool Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

9.1 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

10.1 Scrolled Window . . . . . . . . . . . . . . . . . . . . . . . . . 40

11.1 Box 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
11.2 Box 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

12.1 Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

13.1 Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

14.1 File Selection Before Selection . . . . . . . . . . . . . . . . . . 52


14.2 File Selection Dialog . . . . . . . . . . . . . . . . . . . . . . . 53
14.3 File Selection After Selection . . . . . . . . . . . . . . . . . . . 53

15.1 Font Selection Before Selection . . . . . . . . . . . . . . . . . 57


15.2 Font Selection Dialog . . . . . . . . . . . . . . . . . . . . . . . 58
15.3 Font Selection After Selection . . . . . . . . . . . . . . . . . . 58

5
6 LIST OF FIGURES

16.1 Text Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67


Listings

2.1 Window 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 Window 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Window 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1 Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.1 Text View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.1 Button 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.2 Button 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
7.1 Status Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8.1 Tool Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.1 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
10.1 Scrolled Window . . . . . . . . . . . . . . . . . . . . . . . . . 39
11.1 Box 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
11.2 Box 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
12.1 Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
13.1 Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
14.1 File Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
15.1 Font Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
16.1 textedit.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
16.2 textedit.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

7
8 LISTINGS
Chapter 1

Introduction

1.1 Introduction
Gtk+ The Gimp Toolkit is a library for creating GUI applications, It uses
the xlib which is the main library for GUI. Gtk+ works on many UNIX-like
platforms as Linux, BSD, and it also runs on Windows and MacOSX.
Gtk+ is released unders the terms of the GNU library General Public License
(LGPL), which means that is free and open source library, and you can
modify it as you like under the terms of LGPL license. Gtk+ ues a C-based
object-oriented architecture, it also can be used by other languages rather
than C, including C++, Objective-C, Guile/Scheme, Perl, Pythin, TOM,
Ada95, Pascal and Eiffel.
For more information and advanced topics you should consult the Gtk+
manual reference found at : http://www.gtk.org

1.2 Requirements for this book


1. A UNIX-like box as Linux or BSD

2. Xlib: Xfree86 or Xorg

3. Glib, Pango, ATK, GdkPixbuf, Gdk, Gtk+

4. GCC

Mostly every Linux distribution includes those requirements.

9
10 CHAPTER 1. INTRODUCTION

1.3 Compiling The Examples


For compiling the examples in this book you can change to the directory con-
taining the example and just type make, or you can compile them manually
by typing the following:

cc pkgconfig cflags libs gtk + 2.0 example . c o example

Note: to run this program just type:

. / example

And not

example

Like Dos/Windows platform, which indicates that the executable is in the


current directory, because the current directory isnt included in the path.
Note: you should consult the Gtk+ manual reference located at:
http://developer.gnome.org/doc/API/2.0/gtk/index.html

1.4 Outline of the book


Each chapter talks about a certain Gtk+ Widget (Object), where it starts
by the description of the used functions and then the implementation of the
example. In the last chapter we will write a small text editor, which you can
modify its code freely and expand it according to your needs.
Chapter 2

Windows

2.1 Description
Every object in Gtk+ is called Widget and every widget has its type.
We use gtk set locale() function for the Initialization of the international-
ization support for Gtk+. gtk init() will initialize everything needed to op-
erate Gtk+ and parses some standard command line options: argc, argv.
gtk widget show all() which shows the widget with all of its components.
And gtk main() which runs the Gtk main loop till gtk main quit() is called.
These functions are very important functions and will be used in all of the
examples included in this book.

GtkWidget gtk_ window_n ew ( GtkWindowType type ) ;

This function creates a Gtk+ toplevel window and returns its handle.

v o i d g t k _ w i n d o w _ s e t _ t i t l e ( GtkWindow window , c o n s t gchar title ) ;

This function sets the title of the GtkWindow.

v o i d g t k _ w i n d o w _ s e t _ p o s i t i o n ( GtkWindow window , G t k W i n d o w P o s i t i o n position-


);

this function is used to set the position of the Gtk+ window.

v o i d g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GtkWindow window , gint width , gint -


height ) ;

this function is used to set the default size of the Gtk+ window.

11
12 CHAPTER 2. WINDOWS

GTK_WINDOW ( )

A macro which casts the GtkWidget window as GtkWindow.

Gtk+ window positions

GTK WIN POS CENTER

GTK WIN POS MOUSE

GTK WIN POS CENTER ALWAYS

The first one sets the window position to the center of the screen, the second
one sets the window position under the mouse cursor, while the third keep
the window centred even its size changed.

2.2 Implementation

Example 1

Listing 2.1: Window 1


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
9 gtk_main ( ) ;
10 return 0;
11 }
2.2. IMPLEMENTATION 13

Figure 2.1: Window 1

Example 2

Listing 2.2: Window 2

1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example 2 ) ;
9 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
10 gtk_main ( ) ;
11 return 0;
12 }
14 CHAPTER 2. WINDOWS

Figure 2.2: Window 2

Example 3

Listing 2.3: Window 3


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example 3 ) ;
9 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 5 0 0 , 5 0 0 ) ;
10 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
11 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
12 gtk_main ( ) ;
13 return 0;
14 }
2.2. IMPLEMENTATION 15

Figure 2.3: Window 3


16 CHAPTER 2. WINDOWS
Chapter 3

Labels

3.1 Description
Labels is a GtkWidget used to display text.

GtkWidget gtk_label_new ( c o n s t c h a r str ) ;

This function creates a new label with the label text as its argument.

Void g t k _ l a b e l _ s e t _ t e x t ( GtkLabel label , c o n s t c h a r str ) ;

This function changes the text of the label.

Another important function

Void g t k _ c o n t a i n e r _ a d d ( GtkContainer container , GtkWidget widget ) ;

This function attaches a child widget to its parent as: a label to a window.

3.2 Implementation
Example

Listing 3.1: Label


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , label ;
3 i n t main ( i n t argc , c h a r argv )
4 {

17
18 CHAPTER 3. LABELS

5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example4 ) ;
9 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 2 0 0 , 2 0 0 ) ;
10 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
11 label=gtk_label_new ( HelloWorld ) ;
12 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , label ) ;
13 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
14 gtk_main ( ) ;
15 return 0;
16 }

Figure 3.1: Label


Chapter 4

Entries

4.1 Description
Entries are widgets used to enter text and numbers, Entries have only one
line for entering the text.

GtkWidget gtk_entry_new ( v o i d ) ;

This function creates a new Gtk+ entry.

v o i d g t k _ e n t r y _ s e t _ t e x t ( GtkEntry entry , c o n s t gchar text ) ;

This function is used to set the text that appears in the GtkEntry.

v o i d g t k _ e n t r y _ a p p e n d ( GtkEntry entry , c o n s t gchar text ) ;

This function is used to append text to the end of the text of the GtkEntry.

Void g t k _ e n t r y _ p r e p e n d ( GtkEntry entry , c o n s t gchar text ) ;

This function is used to prepend text to the beginning of the text of the
GtkEntry.

G_CO NST_RETU RN gchar g t k _ e n t r y _ g e t _ t e x t ( GtkEntry entry ) ;

This function returns the text of the GtkEntry.

19
20 CHAPTER 4. ENTRIES

4.2 Implementation
Example

Listing 4.1: Entry


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , entry ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example 5 ) ;
9 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 2 0 0 , 2 0 0 ) ;
10 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
11 entry=gtk_entry_new ( ) ;
12 g t k _ e n t r y _ s e t _ t e x t ( GTK_ENTRY ( entry ) , HelloWorld ) ;
13 g t k _ e n t r y _ a p p e n d _ t e x t ( GTK_ENTRY ( entry ) , ) ;
14 g t k _ e n t r y _ p r e p e n d _ t e x t ( GTK_ENTRY ( entry ) , . ) ;
15 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , entry ) ;
16 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
17 gtk_main ( ) ;
18 return 0;
19 }

Figure 4.1: Entry


Chapter 5

Text View

5.1 Description
Text Views are widgets used to enter multi line text unlike text entries with
just one line.

GtkWidget g t k _ t e x t _ v i e w _ n e w ( v o i d ) ;

This function creates a new text view.

v o i d g t k _ t e x t _ v i e w _ s e t _ b u f f e r ( GtkTextView text_view , GtkTextBuffer -


buffer ) ;

Buffer is a place for storing the text of the text view in it.
This function sets the buffer of the text view.

GtkTextBuffer g t k _ t e x t _ b u f f e r _ n e w ( G tk Te xt T ag Ta bl e table ) ;

This function creates a new text buffer which can be used with a text view.

v o i d g t k _ t e x t _ b u f f e r _ s e t _ t e x t ( GtkTextBuffer buffer , c o n s t gchar text , -


gint len ) ;

This function is used to set the text stored in the text buffer.

gchar g t k _ t e x t _ b u f f e r _ g e t _ t e x t ( GtkTextbuffer buffer , c o n s t GtkTextIter -


start , GtkText Iter end , gboolean i n c l u d e _ h i d d e n _ c h a r s ) ;

This function is used to get the text stored in a text buffer, where GtkTex-
tIter is widget used to store a position in a text buffer, so start points to the

21
22 CHAPTER 5. TEXT VIEW

start of buffer and end points to the end of the buffer which we get text from
it.

Another two important functions

v o i d g t k _ t e x t _ b u f f e r _ g e t _ s t a r t _ i t e r ( GtkTextBuffer buffer , GtkTextIter -


iter ) ;

This function gets the start iter of a GtkTextBuffer.

v o i d g t k _ t e x t _ b u f f e r _ g e t _ e n d _ i t e r ( GtkTextBuffer buffer , GtkTextIter iter-


);

This function gets the end iter of a GtkTextbuffer.

5.2 Implementation
Example

Listing 5.1: Text View


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , textview ;
3 GtkTextBuffer buffer ;
4 i n t main ( i n t argc , c h a r argv )
5 {
6 gtk_s et_loca le ( ) ;
7 gtk_init (&argc , &argv ) ;
8 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
9 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example6 ) ;
10 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 4 0 0 , 4 0 0 ) ;
11 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
12 buffer=g t k _ t e x t _ b u f f e r _ n e w ( NULL ) ;
13 g t k _ t e x t _ b u f f e r _ s e t _ t e x t ( buffer , HelloWorld , 1 0 ) ;
14 textview=g t k _ t e x t _ v i e w _ n e w ( ) ;
15 g t k _ t e x t _ v i e w _ s e t _ b u f f e r ( GTK_TEXT_VIEW ( textview ) , buffer ) ;
16 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , textview ) ;
17 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
18 gtk_main ( ) ;
19 return 0;
20 }
5.2. IMPLEMENTATION 23

Figure 5.1: Text View


24 CHAPTER 5. TEXT VIEW
Chapter 6

Buttons

6.1 Description
Buttons are widgets that you click on them to proceed something.

GtkWidget gtk_ button_n ew ( v o i d ) ;

This function creates a new button.

GtkWidget g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( c o n s t gchar label ) ;

This function creates a new button with label.


Note: label can be changed later.

GtkWidget g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( c o n s t gchar stock_id ) ;

This function creates a new button, by coping it from the Gtk stock, this
button usually contains a predefined image.

GtkWidget gtk \ _ b u t t o n _ n e w _ w i t h _ m n e m o n i c ( c o n s t gchar label ) ;

This function creates a new button with label but if the label is preceded by
underscore the following later will be underlined, this underlined character
represents a keyboard accelerator called a mnemonic. Pressing Alt and that
key activates the button.

25
26 CHAPTER 6. BUTTONS

6.2 Implementation
Example 1

Listing 6.1: Button 1


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , button ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example 7 ) ;
9 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 2 0 0 , 2 0 0 ) ;
10 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
11 button=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( HelloWorld ) ;
12 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , button ) ;
13 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
14 gtk_main ( ) ;
15 return 0;
16 }

Figure 6.1: Button 1

Example 2

Listing 6.2: Button 2


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , button ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example 8 ) ;
6.2. IMPLEMENTATION 27

9 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 2 0 0 , 2 0 0 ) ;
10 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
11 button=g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( GTK_STOCK_OK ) ;
12 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , button ) ;
13 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
14 gtk_main ( ) ;
15 return 0;
16 }

Figure 6.2: Button 2

The Gtk+ Stock List


1. GTK STOCK ADD

2. GTK STOCK APPLY

3. GTK STOCK BOLD

4. GTK STOCK CANCEL

5. GTK STOCK CDROM

6. GTK STOCK CLEAR

7. GTK STOCK CLOSE

8. GTK STOCK COLOR PICKER

9. GTK STOCK CONVERT

10. GTK STOCK COPY

11. GTK STOCK CUT

12. GTK STOCK DELETE


28 CHAPTER 6. BUTTONS

13. GTK STOCK DIALOG ERROR

14. GTK STOCK DIALOG INFO

15. GTK STOCK DIALOG QUESTION

16. GTK STOCK DIALOG WARNING

17. GTK STOCK DND

18. GTK STOCK DND MULTIPLE

19. GTK STOCK EXECUTE

20. GTK STOCK FIND

21. GTK STOCK FIND AND REPLACE

22. GTK STOCK FLOPPY

23. GTK STOCK GOTO BOTTOM

24. GTK STOCK GOTO FIRST

25. GTK STOCK GOTO LAST

26. GTK STOCK GOTO TOP

27. GTK STOCK GO BACK

28. GTK STOCK GO DOWN

29. GTK STOCK GO FORWARD

30. GTK STOCK GO UP

31. GTK STOCK HELP

32. GTK STOCK HOME

33. GTK STOCK INDEX

34. GTK STOCK ITALIC

35. GTK STOCK JUMP TO

36. GTK STOCK JUSTIFY CENTER

37. GTK STOCK JUSTIFY FILL


6.2. IMPLEMENTATION 29

38. GTK STOCK JUSTIFY LEFT

39. GTK STOCK JUSTIFY RIGHT

40. GTK STOCK MISSING IMAGE

41. GTK STOCK NEW

42. GTK STOCK NO

43. GTK STOCK OK

44. GTK STOCK OPEN

45. GTK STOCK PASTE

46. GTK STOCK PREFERENCES

47. GTK STOCK PRINT

48. GTK STOCK PRINT PREVIEW

49. GTK STOCK PROPERTIES

50. GTK STOCK QUIT

51. GTK STOCK REDO

52. GTK STOCK REFRESH

53. GTK STOCK REMOVE

54. GTK STOCK REVERT TO SAVED

55. GTK STOCK SAVE

56. GTK STOCK SAVE AS

57. GTK STOCK SELECT COLOR

58. GTK STOCK SELECT FONT

59. GTK STOCK SORT ASCENDING

60. GTK STOCK SORT DESCENDING

61. GTK STOCK SPELL CHECK

62. GTK STOCK STOP


30 CHAPTER 6. BUTTONS

63. GTK STOCK STRINGTHROUGH

64. GTK STOCK UNDELETE

65. GTK STOCK UNDERLINE

66. GTK STOCK UNDO

67. GTK STOCK YES

68. GTK STOCK ZOOM 100

69. GTK STOCK ZOOM FIT

70. GTK STOCK ZOOM IN

71. GTK STOCK ZOOM OUT


Chapter 7

Status Bars

7.1 Description
Status Bars are Gtk+ widgets used to pop messages.

GtkWidget g t k _ s t a t u s b a r _ n e w ( v o i d ) ;

This function creates a new Gtk+ status bar.

Guint g t k _ s t a t u s b a r _ p u s h ( GtkStatusbar statusbar , guint context_id , c o n s t -


gchar text ) ;

This function pushes text to the status bar, where context id is the message
id.

7.2 Implementation
Example

Listing 7.1: Status Bar


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , statusbar ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Gtk+ Example 9 ) ;
9 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 1 0 0 , 5 0 ) ;
10 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;

31
32 CHAPTER 7. STATUS BARS

11 statusbar=g t k _ s t a t u s b a r _ n e w ( ) ;
12 g t k _ s t a t u s b a r _ p u s h ( GTK_STATUSBAR ( statusbar ) , 1 , HelloWorld ) ;
13 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , statusbar ) ;
14 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
15 gtk_main ( ) ;
16 return 0;
17 }

Figure 7.1: Status Bar


Chapter 8

Tool Bars

8.1 Description
Tool Bars is Gtk+ widget, which contains child widgets as buttons.

GtkWidget g tk _t oo l ba r_ ne w ( v o i d ) ;

This function creates a new tool bar and returns its handle.

GtkWidget g t k _ t o o l b a r _ a p p e n d _ i t e m ( GtkToolbar toolbar , c o n s t c h a r text , -


c o n s t c h a r tooltip_text , c o n s t c h a r tooltip_privte_text , GtkWidget -
icon , GtkSignalFunc callback , gpointer user_data ) ;

This function appends a new item into a GtkToolBar.


Note: we will pass null in GtkSignalFunc callback and gponter user data,
because we will use g signals rather GtkSignals, which will describe it later
in this book.

GtkWidget g t k _ t o o l b a r _ p r e p e n d _ i t e m ( GtkToolbar toolbar , c o n s t c h a r text , -


c o n s t c h a r tooltip_text , c o n s t c h a r tooltip_privte_text , GtkWidget -
icon , GtkSignalFunc callback , gpointer user_data ) ;

This function is the same as the previous one, but it prepends the item.

GktWidget g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GtkToolBar toolbar , c o n s t gchar -


stock_id , c o n s t c h a r tooltip_text , c o n s t c h a r tooltip_private_text , -
GtkSignalFunc callback , gpointer user_data , gint position ) ;

This function insert Gtk+ stock item in the toolbar, if the position is -1 the
item will be attached at the end of the toolbar.

33
34 CHAPTER 8. TOOL BARS

v o i d g t k _ t o o l b a r _ s e t _ s t y l e ( GtkToolbar toolbar , G tk To ol b ar St yl e style ) ;

This function sets the style of a toolbar whether it contains only icons or
only text or both icons and text.

Gtk+ Toolbar Styles


GTK TOOLBAR ICONS

GTK TOOLBAR TEXT

GTK TOOLBAR BOTH

8.2 Implementation
Example

Listing 8.1: Tool Bar


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , toolbar , button1 , button2 ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 1 5 0 , 5 0 ) ;
9 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
10 toolbar=g tk _t oo l ba r_ ne w ( ) ;
11 g t k _ t o o l b a r _ s e t _ s t y l e ( GTK_TOOLBAR ( toolbar ) , G T K _ T O O L B A R _ B OT H ) ;
12 button1=g t k _ t o o l b a r _ a p p e n d _ i t e m ( GTK_TOOLBAR ( toolbar ) , HelloWorld , -
This i s h e l l o w o r l d , NULL , NULL , NULL , NULL ) ;
13 g t k _ t o o l b a r _ a p p e n d _ s p a c e ( GTK_TOOLBAR ( toolbar ) ) ;
14 button2=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( toolbar ) , GTK_STOCK_OK , -
This i s ok , NULL , NULL , NULL , 1) ;
15 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , toolbar ) ;
16 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
17 gtk_main ( ) ;
18 return 0;
19 }
8.2. IMPLEMENTATION 35

Figure 8.1: Tool Bar


36 CHAPTER 8. TOOL BARS
Chapter 9

Menus

9.1 Description
Menu bars are Gtk+ widgets that contains items called menus, that contain
menu items, which we can attach a submenu to it.

GtkWidget g t k _ m e n u _ b a r _ ne w ( v o i d ) ;

This function creates a new menu bar.

GtkWidget g t k _ m e n u _ i t e m _ n e w _ w i t h _ l a b e l ( c o n s t gchar label ) ;

This function creates a new menu item.

GtkWidget g t k _ m e n u _ i t e m _ n e w _ w i t h _ m e n m o n i c ( c o n s t gchar label ) ;

This function creates a new menu item with menmomic label.

GtkWidget gtk_menu_new ( v o i d ) ;

This function creates a new menu.

GtkWidget g t k _ m e n u _ i t e m _ s e t _ s u b m e n u ( GtkMenuItem menu_item , GtkWidget -


submenu ) ;

This function set the submenu of a menu item.

GtkWidget g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( c o n s t gchar stock_id , -


GtkAccelGroup accel_group ) ;

37
38 CHAPTER 9. MENUS

This function creates a menu item with image from the Gtk+ stock, where
accel group contains the keyboard accelerator group, which is the button
combination used to activate the menu items.

9.2 Implementation
Example

Listing 9.1: Menu


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , menubar , menuitem_file , menu_file , menuitem_quit ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 3 0 0 , 1 0 0 ) ;
9 menubar=g t k _ m e n u _ b a r _ ne w ( ) ;
10 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , menubar ) ;
11 menuitem_file=g t k _ m e n u _ i t e m _ n e w _ w i t h _ m n e m o n i c ( F i l e ) ;
12 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menubar ) , menuitem_file ) ;
13 menu_file=gtk_menu_new ( ) ;
14 g t k _ m e n u _ i t e m _ s e t _ s u b m e n u ( GTK_MENU_ITEM ( menuitem_file ) , menu_file ) ;
15 menuitem_quit=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( GTK_STOCK_QUIT , NULL ) -
;
16 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_file ) , menuitem_quit ) ;
17 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
18 gtk_main ( ) ;
19 return 0;
20 }

Figure 9.1: Menu


Chapter 10

Scrolled Windows

10.1 Description
Scrolled window is just a parent container for other widget, scrolled window
is mostly used to contain text view, where it adds scroll bars to it.

GtkWidget g t k _ s c r o l l e d _ w i n d o w _ n e w ( GtkAdjustment hadjustment , -


GtkAdjustment vadjustment ) ;

This function creates a new scrolled window with the first argument is the
horizontal adjustment while the second is the vertical adjustment.
Note: we pass to both arguments null to cause the scrolled window to create
them for us.

10.2 Implementation
Example

Listing 10.1: Scrolled Window


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , scrolled_window , text_view ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 4 0 0 , 3 0 0 ) ;
9 scr ol le d _w in do w=g t k _ s c r o l l e d _ w i n d o w _ n e w ( NULL , NULL ) ;
10 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , s cr ol le d _w in do w ) ;
11 text_view=g t k _ t e x t _ v i e w _ n e w ( ) ;
12 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( s cr ol le d _w in do w ) , text_view ) ;

39
40 CHAPTER 10. SCROLLED WINDOWS

13 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
14 gtk_main ( ) ;
15 return 0;
16 }

Figure 10.1: Scrolled Window


Chapter 11

Boxes

11.1 Description
What about adding more than widget to the same window ?
Boxes are widgets which enables you to add more than widget to a window.

GtkWidget gtk_hbox_new ( gboolean homogenous , gint spacing ) ;

This function creates a horizontal box where widgets are added horizontally,
setting homogeneous into true makes all children are to be given equal space
allotments, the spacing is the number of pixels to place by default between
children widgets.

GtkWidget gtk_vbox_new ( gboolean homogeneous , gint spacing ) ;

This function creates a vertical box where widgets are added vertically.

v o i d g t k _ b o x _ p a c k _ s t a r t ( GtkBox box , GtkWidget child , gboolean exapand , -


gboolean fill , guint padding ) ;

This function adds a child widget to the box, if expand is set to true the child
will be given extra space allocated to box, this space will be divided evenly
between all children of box, if fill is set to true the space given to child by
the expand option is actually allocated to child, rather than just padding it.
This parameter has no effect if expand is set to FALSE, padding is the extra
space in pixels to put between this child and its neighbours.

41
42 CHAPTER 11. BOXES

11.2 Implementation

Example 1: HBox

Listing 11.1: Box 1

1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , hbox , button1 , button2 ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 1 0 0 , 1 0 0 ) ;
9 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
10 button1=g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( GTK_STOCK_OK ) ;
11 button2=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( HellWorld ) ;
12 hbox=gtk_hbox_new ( FALSE , 0 ) ;
13 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( hbox ) , button1 , FALSE , FALSE , 0 ) ;
14 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( hbox ) , button2 , FALSE , FALSE , 0 ) ;
15 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , hbox ) ;
16 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
17 gtk_main ( ) ;
18 return 0;
19 }

Figure 11.1: Box 1


11.2. IMPLEMENTATION 43

Example 2: VBox

Listing 11.2: Box 2


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , vbox , button1 , button2 ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 1 0 0 , 5 0 ) ;
9 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
10 button1=g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( GTK_STOCK_OK ) ;
11 button2=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( HelloWorld ) ;
12 vbox=gtk_vbox_new ( FALSE , 0 ) ;
13 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , button1 , FALSE , FALSE , 0 ) ;
14 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , button2 , FALSE , FALSE , 0 ) ;
15 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , vbox ) ;
16 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
17 gtk_main ( ) ;
18 return 0;
19 }

Figure 11.2: Box 2


44 CHAPTER 11. BOXES
Chapter 12

Tables

12.1 Description
Tables are widgets used to attack child widgets to parent ones, tables differ
from boxes where tables can add widgets beside each other and upwards each
others , which means table is able to add widgets horizontally and vertically
at the same time.

GtkWidget gtk_table_new ( guint rows , guint columns , gboolean homogeneous ) ;

This function creates a new table where rows is the number of rows and
columns is the number of columns of this table, while if homogeneous is set
into true which makes all children are to be given equal space allotments, the
spacing is the number of pixels to place by default between children widgets.

v o i d g t k _ t a b l e _ a t t a c h _ d e f a u l t s ( GtkTable table , GtkWidget widget , guint -


left_attach , guint right_attach , guint top_attach , guint bottom_attach-
);

This function attaches child widgets to a table.


left attach: The column number to attach the left side of the child
widget to.
right attach: The column number to attach the right side of the child
widget to.
top attach: The row number to attach the top of the child widget to.
bottom attach: The row number to attach the bottom of the child
widget to.

45
46 CHAPTER 12. TABLES

12.2 Implementation
Example

Listing 12.1: Table


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , table , button1 , button2 , button3 , button4 ;
3 i n t main ( i n t argc , c h a r argv )
4 {
5 gtk_s et_loca le ( ) ;
6 gtk_init (&argc , &argv ) ;
7 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
8 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 3 0 0 , 3 0 0 ) ;
9 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
10 button1=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( Foo ) ;
11 button2=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( Bar ) ;
12 button3=g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( GTK_STOCK_OK ) ;
13 button4=g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( GTK_S TOCK_QU IT ) ;
14 table=gtk_table_new ( 2 , 2 , TRUE ) ;
15 g t k _ t a b l e _ a t t a c h _ d e f a u l t s ( GTK_TABLE ( table ) , button1 , 0 , 1 , 0 , 1 ) ;
16 g t k _ t a b l e _ a t t a c h _ d e f a u l t s ( GTK_TABLE ( table ) , button2 , 1 , 2 , 0 , 1 ) ;
17 g t k _ t a b l e _ a t t a c h _ d e f a u l t s ( GTK_TABLE ( table ) , button3 , 0 , 1 , 1 , 2 ) ;
18 g t k _ t a b l e _ a t t a c h _ d e f a u l t s ( GTK_TABLE ( table ) , button4 , 1 , 2 , 1 , 2 ) ;
19 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , table ) ;
20 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
21 gtk_main ( ) ;
22 return 0;
23 }
12.2. IMPLEMENTATION 47

Figure 12.1: Table


48 CHAPTER 12. TABLES
Chapter 13

Signals

13.1 Description
What happens if you click on button, it emits a signal which call what is
called callback function.

#d e f i n e g s i g n a l c o n n e c t ( i n s t a n c e , d e t a i l e d s i g n a l , c h a n d l e r , data ) ;

instance: The instance to connect to


detailed signal: A string of the signal name
c handler: The GCallback to connect
data: The handler id, which is usually null
The Callback Function

v o i d user_function ( GtkWidget widget , gpointer user_data ) ;

The call back function is the function called by Gtk+ when a certain event
happens, this function should be connected to the widget and the signal name
first.
Some Signals
activate : As clicked but for menu items
clicked
pressed
released

49
50 CHAPTER 13. SIGNALS

13.2 Implementation
Example

Listing 13.1: Signals


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , button ;
3 v o i d do_exit ( GtkWidget , gpointer ) ;
4 i n t main ( i n t argc , c h a r argv )
5 {
6 gtk_s et_loca le ( ) ;
7 gtk_init (&argc , &argv ) ;
8 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
9 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 1 0 0 , 1 0 0 ) ;
10 button=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( E x i t ) ;
11 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , button ) ;
12 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button ) , c l i c k e d , G_CALLBACK ( do_exit ) , -
NULL ) ;
13 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
14 gtk_main ( ) ;
15 return 0;
16 }
17 v o i d do_exit ( GtkWidget widget , gpointer data )
18 {
19 exit ( 0 ) ;
20 }

Figure 13.1: Signals


Chapter 14

File Selection

14.1 Description
File selection is a dialog used to select files either for opening or saving.

GtkWidget g t k _ f i l e _ s e l e c t i o n _ n e w ( c o n s t gchar title ) ;

This function creates a new file selection with title, but the file selection need
its on gtk widget show all()

G_CO NST_RETU RN gchar g t k _ f i l e _ s e l e c t i o n _ g e t _ f i l e n a m e ( G t k F i l e S e l e c t i o n -


filesel ) ;

This function gets the complete path and name of the selected file.

14.2 Implementation
Example

Listing 14.1: File Selection


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , vbox , label , button , file_select , file_select_ok , -
file_select_cancel ;
3 v o i d get_filename ( GtkWidget , gpointer ) ;
4 v o i d o p e n _ f i l e _ s e l e c t ( GtkWidget , gpointer ) ;
5 void f i l e _ s e l e c t _ e x i t ( GtkWidget , gpointer ) ;
6 i n t main ( i n t argc , c h a r argv )
7 {
8 gtk_s et_loca le ( ) ;
9 gtk_init (&argc , &argv ) ;

51
52 CHAPTER 14. FILE SELECTION

10 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
11 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 2 0 0 , 1 0 0 ) ;
12 vbox=gtk_vbox_new ( FALSE , 0 ) ;
13 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , vbox ) ;
14 label=gtk_label_new ( NULL ) ;
15 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , label , FALSE , FALSE , 0 ) ;
16 button=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( S e l e c t F i l e ) ;
17 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , button , FALSE , FALSE , 0 ) ;
18 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button ) , c l i c k e d , G_CALLBACK ( -
o p e n _ f i l e _ s e l e c t ) , NULL ) ;
19 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
20 gtk_main ( ) ;
21 return 0;
22 }
23 v o i d o p e n _ f i l e _ s e l e c t ( GtkWidget widget , gpointer data )
24 {
25 file_select=g t k _ f i l e _ s e l e c t i o n _ n e w ( S e l e c t A F i l e ) ;
26 file_ select_ ok=G T K _ F I L E _ S E L E C T I O N ( file_select )>ok_button ;
27 f i l e _ s e l e c t _ c a n c e l=G T K _ F I L E _ S E L E C T I O N ( file_select )>cancel_button ;
28 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( file _select_ ok ) , c l i c k e d , G_CALLBACK ( -
get_filename ) , NULL ) ;
29 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( f i l e _ s e l e c t _ c a n c e l ) , c l i c k e d , G_CALLBACK ( -
f i l e _ s e l e c t _ e x i t ) , NULL ) ;
30 g t k _ w i d g e t _ s h o w _ a l l ( file_select ) ;
31 }
32 v o i d get_filename ( GtkWidget widget , gpointer data )
33 {
34 c o n s t gchar filename ;
35 filename=g t k _ f i l e _ s e l e c t i o n _ g e t _ f i l e n a m e ( G T K _ F I L E _ S E L E C T I O N ( -
file_select ) ) ;
36 g t k _ l a b e l _ s e t _ t e x t ( GTK_LABEL ( label ) , filename ) ;
37 g t k _ w i d g e t _ d e s t r o y ( file_select ) ;
38 }
39 v o i d f i l e _ s e l e c t _ e x i t ( GtkWidget widget , gpointer data )
40 {
41 g t k _ w i d g e t _ d e s t r o y ( file_select ) ;
42 }

Figure 14.1: File Selection Before Selection


14.2. IMPLEMENTATION 53

Figure 14.2: File Selection Dialog

Figure 14.3: File Selection After Selection


54 CHAPTER 14. FILE SELECTION
Chapter 15

Font Selection

15.1 Description
Font selection dialog is a widget like file selection, but it is used to select
fonts not files.

GtkWidget g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ n e w ( c o n s t gchar title ) ;

This function creates font selection dialog with title.

gchar g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ g e t _ f o n t _ n a m e ( G t k F o n t S e l e c t i o n D i a l o g fsd-
);

This function gets the name of the selected font.

P a n g o F o n t D e s c r i p t i o n p a n g o _ f o n t _ d e s c r i p t i o n _ f r o m _ s t r i n g ( c o n s t c h a r str ) ;

This function returns a pango font description from the string containing the
font name, pango is one of Gtk+ required libraries responsible for font stuff.

v o i d g t k _ w i d g e t _ m o d i f y _ f o n t ( GtkWidget widget , P a n g o F o n t D e s c r i p t i o n -
font_desc ) ;

This function changes the font of a widget using pango font description.

15.2 Implementation
Example

55
56 CHAPTER 15. FONT SELECTION

Listing 15.1: Font Selection


1 #i n c l u d e <g t k / g t k . h>
2 GtkWidget window , vbox , text_view , button , f on t_ se l ec t_ dl g ;
3 GtkWidget font_select_dlg_ok , font_select_dlg_apply , -
font_select_dlg_cancel ;
4 v o i d get_fontname ( GtkWidget , gpointer ) ;
5 v o i d apply _fontna me ( GtkWidget , gpointer ) ;
6 v o i d o p e n _ f o n t _ s e l e c t _ d l g ( GtkWidget , gpointer ) ;
7 v o i d f o n t _ s e l e c t _ d l g _ e x i t ( GtkWidget , gpointer ) ;
8 i n t main ( i n t argc , c h a r argv )
9 {
10 gtk_s et_loca le ( ) ;
11 gtk_init (&argc , &argv ) ;
12 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
13 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 3 0 0 , 2 0 0 ) ;
14 vbox=gtk_vbox_new ( FALSE , 0 ) ;
15 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , vbox ) ;
16 text_view=g t k _ t e x t _ v i e w _ n e w ( ) ;
17 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , text_view , TRUE , TRUE , 0 ) ;
18 button=g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( S e l e c t Font ) ;
19 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , button , FALSE , FALSE , 0 ) ;
20 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button ) , c l i c k e d , G_CALLBACK ( -
o p e n _ f o n t _ s e l e c t _ d l g ) , NULL ) ;
21 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
22 gtk_main ( ) ;
23 return 0;
24 }
25 v o i d o p e n _ f o n t _ s e l e c t _ d l g ( GtkWidget widget , gpointer data )
26 {
27 fon t_ se l ec t_ dl g=g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ n e w ( S e l e c t Font ) ;
28 f o n t _ s e l e c t _ d l g _ o k=G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( f on t_ se l ec t_ dl g )>-
ok_button ;
29 f o n t _ s e l e c t _ d l g _ a p p l y=G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( f on t_ se l ec t_ dl g )>-
apply_button ;
30 f o n t _ s e l e c t _ d l g _ c a n c e l=G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( f on t_ se l ec t_ dl g )>-
cancel_button ;
31 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( f o n t _ s e l e c t _ d l g _ o k ) , c l i c k e d , G_CALLBACK ( -
get_fontname ) , NULL ) ;
32 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( f o n t _ s e l e c t _ d l g _ a p p l y ) , c l i c k e d , -
G_CALLBACK ( apply _fontna me ) , NULL ) ;
33 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( f o n t _ s e l e c t _ d l g _ c a n c e l ) , c l i c k e d , -
G_CALLBACK ( f o n t _ s e l e c t _ d l g _ e x i t ) , NULL ) ;
34 g t k _ w i d g e t _ s h o w _ a l l ( f on t_ se l ec t_ dl g ) ;
35 }
36 v o i d get_fontname ( GtkWidget widget , gpointer data )
37 {
38 gchar fontname ;
39 P a n g o F o n t D e s c r i p t i o n font_desc ;
40 fontname=g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ g e t _ f o n t _ n a m e ( -
G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( f on t_ se l ec t_ dl g ) ) ;
41 font_desc=p a n g o _ f o n t _ d e s c r i p t i o n _ f r o m _ s t r i n g ( fontname ) ;
42 g t k _ w i d g e t _ m o d i f y _ f o n t ( text_view , font_desc ) ;
43 g t k _ w i d g e t _ d e s t r o y ( f on t_ se l ec t_ dl g ) ;
44 }
45 v o i d apply _fontna me ( GtkWidget widget , gpointer data )
46 {
47 gchar fontname ;
48 P a n g o F o n t D e s c r i p t i o n font_desc ;
49 fontname=g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ g e t _ f o n t _ n a m e ( -
G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( f on t_ se l ec t_ dl g ) ) ;
50 font_desc=p a n g o _ f o n t _ d e s c r i p t i o n _ f r o m _ s t r i n g ( fontname ) ;
15.2. IMPLEMENTATION 57

51 g t k _ w i d g e t _ m o d i f y _ f o n t ( text_view , font_desc ) ;
52 }
53 v o i d f o n t _ s e l e c t _ d l g _ e x i t ( GtkWidget widget , gpointer data )
54 {
55 g t k _ w i d g e t _ d e s t r o y ( f on t_ se l ec t_ dl g ) ;
56 }

Figure 15.1: Font Selection Before Selection


58 CHAPTER 15. FONT SELECTION

Figure 15.2: Font Selection Dialog

Figure 15.3: Font Selection After Selection


Chapter 16

Text Editor

16.1 Description
In this chapter we will implement a small and simple text editor to illustrate
what we learned about Gtk+.

16.2 Implementation
Text Editor

Listing 16.1: textedit.h


1 #i n c l u d e <g t k / g t k . h>
2 #i n c l u d e <s t d i o . h>
3
4 #i f n d e f MAX FILE SIZE
5 #d e f i n e MAX FILE SIZE 2048000 / 4 MB /
6 #e n d i f
7
8 / Text E d i t F u n c t i o n s /
9 void textedit_interface ( ) ;
10 void textedit_signals ( ) ;
11
12 / Text E d i t Widgets /
13 GtkWidget window ;
14 GtkWidget vbox ;
15 GtkWidget menu_bar ;
16 GtkWidget menu _item_fi le ;
17 GtkWidget menu_file ;
18 GtkWidget menu_item_new ;
19 GtkWidget menu _item_op en ;
20 GtkWidget menu _item_sa ve ;
21 GtkWidget m e n u _ i t e m _ s a v ea s ;
22 GtkWidget m en u_ it e m_ cl os e ;
23 GtkWidget menu _item_qu it ;

59
60 CHAPTER 16. TEXT EDITOR

24 GtkWidget menu _item_ed it ;


25 GtkWidget menu_edit ;
26 GtkWidget menu_item_preferences ;
27 GtkWidget tool_bar ;
28 GtkWidget button_new ;
29 GtkWidget button_open ;
30 GtkWidget button_save ;
31 GtkWidget button_saveas ;
32 GtkWidget button_close ;
33 GtkWidget button_quit ;
34 GtkWidget button_preferences ;
35 GtkWidget s cr ol le d _w in do w ;
36 GtkWidget text_view ;
37 GtkWidget open_file_dlg ;
38 GtkWidget o p e n _ f i l e _ d l g _o k ;
39 GtkWidget open_file_dlg_cancel ;
40 GtkWidget s av ea s_ f il e_ dl g ;
41 GtkWidget saveas_file_dlg_ok ;
42 GtkWidget saveas_file_dlg_cancel ;
43 GtkWidget font_dlg ;
44 GtkWidget font_dlg_ok ;
45 GtkWidget font _dlg_app ly ;
46 GtkWidget f on t_ dl g _c an ce l ;
47
48 / C a l l Backs F u n c t i o n s /
49 / Menu Bar C a l l Backs /
50 v o i d m e n u _ i t e m _ n e w _ a c t i v a t e d ( GtkWidget , gpointer ) ;
51 v o i d m e n u _ i t e m _ o p e n _ a c t i v a t e d ( GtkWidget , gpointer ) ;
52 v o i d m e n u _ i t e m _ s a v e _ a c t i v a t e d ( GtkWidget , gpointer ) ;
53 v o i d m e n u _ i t e m _ s a v e a s _ a c t i v a t e d ( GtkWidget , gpointer ) ;
54 v o i d m e n u _ i t e m _ c l o s e _ a c t i v a t e d ( GtkWidget , gpointer ) ;
55 v o i d m e n u _ i t e m _ q u i t _ a c t i v a t e d ( GtkWidget , gpointer ) ;
56 v o i d m e n u _ i t e m _ p r e f e r e n c e s _ a c t i v a t e d ( GtkWidget , gpointer ) ;
57 / Tool Bar C a l l Backs /
58 v o i d b u t t o n _ n e w _ c l i c k e d ( GtkWidget , gpointer ) ;
59 v o i d b u t t o n _ o p e n _ c l i c k e d ( GtkWidget , gpointer ) ;
60 v o i d b u t t o n _ s a v e _ c l i c k e d ( GtkWidget , gpointer ) ;
61 v o i d b u t t o n _ s a v e a s _ c l i c k e d ( GtkWidget , gpointer ) ;
62 v o i d b u t t o n _ c l o s e _ c l i c k e d ( GtkWidget , gpointer ) ;
63 v o i d b u t t o n _ q u i t _ c l i c k e d ( GtkWidget , gpointer ) ;
64 v o i d b u t t o n _ p r e f e r e n c e s _ c l i c k e d ( GtkWidget , gpointer ) ;
65 / Open F i l e D i a l o g C a l l Backs /
66 v o i d o p e n _ f i l e _ d l g _ o k _ c l i c k e d ( GtkWidget , gpointer ) ;
67 v o i d o p e n _ f i l e _ d l g _ c a n c e l _ c l i c k e d ( GtkWidget , gpointer ) ;
68 / Save As F i l e D i a l o g C a l l Backs /
69 v o i d s a v e a s _ f i l e _ d l g _ o k _ c l i c k e d ( GtkWidget , gpointer ) ;
70 v o i d s a v e a s _ f i l e _ d l g _ c a n c e l _ c l i c k e d ( GtkWidget , gpointer ) ;
71 / Font D i a l o g C a l l Backs /
72 v o i d f o n t _ d l g _ o k _ c l i c k e d ( GtkWidget , gpointer ) ;
73 v o i d f o n t _ d l g _ c a n c e l _ c l i c k e d ( GtkWidget , gpointer ) ;
74 v o i d f o n t _ d l g _ a p p l y _ c l i c k e d ( GtkWidget , gpointer ) ;
75
76
77 / Text E d i t F u n c t i o n s /
78 v o i d text_edit_new ( v o i d ) ;
79 v o i d text_ edit_op en ( v o i d ) ;
80 v o i d text_ edit_sa ve ( v o i d ) ;
81 void text_edit_saveas ( void ) ;
82 v o i d t ex t_ ed i t_ cl os e ( v o i d ) ;
83 v o i d text_ edit_qu it ( v o i d ) ;
84 void text_edit_preferences ( void ) ;
85
16.2. IMPLEMENTATION 61

86 / V a r i a b l e s D e c l a r a t i o n s /
87 c o n s t gchar filename ;

Listing 16.2: textedit.c


1 #i n c l u d e <g t k / g t k . h>
2 #i n c l u d e <s t d i o . h>
3 #i n c l u d e < s t d l i b . h>
4 #i n c l u d e t e x t e d i t . h
5
6 i n t main ( i n t argc , c h a r argv )
7 {
8 gtk_s et_loca le ( ) ;
9 gtk_init (&argc , &argv ) ;
10 textedit_interface ( ) ;
11 te x t e d i t _ s i g n a l s ( ) ;
12 g t k _ w i d g e t _ s h o w _ a l l ( window ) ;
13 gtk_main ( ) ;
14 return 0;
15 }
16
17 / THE GUI DESIGN /
18 void textedit_interface ( )
19 {
20 / C r e a t e The Main Window /
21 window=gtk_ window_n ew ( G T K _ W I N D O W _ T O P L E V E L ) ;
22 g t k _ w i n d o w _ s e t _ t i t l e ( GTK_WINDOW ( window ) , Text E d i t ) ;
23 g t k _ w i n d o w _ s e t _ d e f a u l t _ s i z e ( GTK_WINDOW ( window ) , 7 0 0 , 5 0 0 ) ;
24 g t k _ w i n d o w _ s e t _ p o s i t i o n ( GTK_WINDOW ( window ) , G T K _ W I N _ P O S _ C E N T E R ) ;
25
26 / C r e a t e The VBox & Attach I t To The Main Window /
27 vbox=gtk_vbox_new ( FALSE , 0 ) ;
28 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( window ) , vbox ) ;
29
30 / C r e a t e The Menu Bar & Attach I t To The VBox /
31 menu_bar=g t k _ m e n u _ b a r _ ne w ( ) ;
32 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , menu_bar , FALSE , FALSE , 0 ) ;
33 menu_ item_fi le=g t k _ m e n u _ i t e m _ n e w _ w i t h _ m n e m o n i c ( F i l e ) ;
34 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_bar ) , menu _item_fi le ) ;
35 menu_file=gtk_menu_new ( ) ;
36 g t k _ m e n u _ i t e m _ s e t _ s u b m e n u ( GTK_MENU_ITEM ( menu _item_fi le ) , menu_file ) ;
37 menu_item_new=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( GTK_STOCK_NEW , NULL ) ;
38 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_file ) , menu_item_new ) ;
39 menu_ item_op en=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( GTK_STOCK_OPEN , NULL-
);
40 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_file ) , menu _item_op en ) ;
41 menu_ item_sa ve=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( GTK_STOCK_SAVE , NULL-
);
42 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_file ) , menu _item_sa ve ) ;
43 me n u _ i t e m _ s a v e a s=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( GTK_STOCK_SAVE_AS , -
NULL ) ;
44 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_file ) , m e n u _ i t e m _ s a v ea s ) ;
45 men u_ it e m_ cl os e=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( GTK_STOCK_CLOSE , -
NULL ) ;
46 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_file ) , m en u_ it e m_ cl os e ) ;
47 menu_ item_qu it=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( GTK_STOCK_QUIT , NULL-
);
48 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_file ) , menu _item_qu it ) ;
49 menu_ item_ed it=g t k _ m e n u _ i t e m _ n e w _ w i t h _ m n e m o n i c ( E d i t ) ;
62 CHAPTER 16. TEXT EDITOR

50 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_bar ) , menu _item_ed it ) ;


51 menu_edit=gtk_menu_new ( ) ;
52 g t k _ m e n u _ i t e m _ s e t _ s u b m e n u ( GTK_MENU_ITEM ( menu _item_ed it ) , menu_edit ) ;
53 m e n u _ i t e m _ p r e f e r e n c e s=g t k _ i m a g e _ m e n u _ i t e m _ n e w _ f r o m _ s t o c k ( -
GTK_STOCK_PREFERENCES , NULL ) ;
54 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( menu_edit ) , m e n u _ i t e m _ p r e f e r e n c e s ) ;
55
56 / C r e a t e The Tool Bar & Attach I t To The VBox /
57 tool_bar=g tk _t oo l ba r_ ne w ( ) ;
58 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , tool_bar , FALSE , FALSE , 0 ) ;
59 g t k _ t o o l b a r _ s e t _ s t y l e ( GTK_TOOLBAR ( tool_bar ) , G T K _ T O O L B A R _ B O TH ) ;
60 button_new=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( tool_bar ) , -
GTK_STOCK_NEW , New F i l e , NULL , NULL , NULL , 1) ;
61 button_open=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( tool_bar ) , -
GTK_STOCK_OPEN , Open F i l e , NULL , NULL , NULL , 1) ;
62 button_save=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( tool_bar ) , -
GTK_STOCK_SAVE , Save F i l e , NULL , NULL , NULL , 1) ;
63 button_saveas=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( tool_bar ) , -
GTK_STOCK_SAVE_AS , Save As F i l e , NULL , NULL , NULL , 1) ;
64 button_close=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( tool_bar ) , -
GTK_STOCK_CLOSE , C l o s e F i l e , NULL , NULL , NULL , 1) ;
65 button_quit=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( tool_bar ) , -
GTK_STOCK_QUIT , Quit , NULL , NULL , NULL , 1) ;
66 g t k _ t o o l b a r _ a p p e n d _ s p a c e ( GTK_TOOLBAR ( tool_bar ) ) ;
67 b u t t o n _ p r e f e r e n c e s=g t k _ t o o l b a r _ i n s e r t _ s t o c k ( GTK_TOOLBAR ( tool_bar ) , -
GTK_STOCK_PREFERENCES , P r e f e r e n c e s , NULL , NULL , NULL , 1) ;
68
69 / C r e a t e The S c r o l l e d Window & Attach I t To The VBox /
70 scr ol le d _w in do w=g t k _ s c r o l l e d _ w i n d o w _ n e w ( NULL , NULL ) ;
71 g t k _ b o x _ p a c k _ s t a r t ( GTK_BOX ( vbox ) , scrolled_window , TRUE , TRUE , 0 ) ;
72
73 / C r e a t e The Text View & Attach I t To The S c r o l l e d Window /
74 GtkTextBuffer buffer ;
75 text_view=g t k _ t e x t _ v i e w _ n e w ( ) ;
76 gt k _ c o n t a i n e r _ a d d ( GTK_CONTAINER ( s cr ol le d _w in do w ) , text_view ) ;
77 buffer=g t k _ t e x t _ b u f f e r _ n e w ( NULL ) ;
78 g t k _ t e x t _ v i e w _ s e t _ b u f f e r ( GTK_TEXT_VIEW ( text_view ) , buffer ) ;
79 }
80
81 void textedit_signals ( )
82 {
83 / Menu Bar I t e m s A c t i v a t e S i g n a l s /
84 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( menu_item_new ) , a c t i v a t e , G_CALLBACK ( -
m e n u _ i t e m _ n e w _ a c t i v a t e d ) , NULL ) ;
85 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( menu _item_op en ) , a c t i v a t e , G_CALLBACK ( -
m e n u _ i t e m _ o p e n _ a c t i v a t e d ) , NULL ) ;
86 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( menu _item_sa ve ) , a c t i v a t e , G_CALLBACK ( -
m e n u _ i t e m _ s a v e _ a c t i v a t e d ) , NULL ) ;
87 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( m e n u _ i t e m _ s a v ea s ) , a c t i v a t e , G_CALLBACK ( -
m e n u _ i t e m _ s a v e a s _ a c t i v a t e d ) , NULL ) ;
88 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( m en u_ it e m_ cl os e ) , a c t i v a t e , G_CALLBACK ( -
m e n u _ i t e m _ c l o s e _ a c t i v a t e d ) , NULL ) ;
89 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( menu _item_qu it ) , a c t i v a t e , G_CALLBACK ( -
m e n u _ i t e m _ q u i t _ a c t i v a t e d ) , NULL ) ;
90 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( m e n u _ i t e m _ p r e f e r e n c e s ) , a c t i v a t e , -
G_CALLBACK ( m e n u _ i t e m _ p r e f e r e n c e s _ a c t i v a t e d ) , NULL ) ;
91 / Tool Bar Buttons C l i c k e d S i g n a l s /
92 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button_new ) , c l i c k e d , G_CALLBACK ( -
b u t t o n _ n e w _ c l i c k e d ) , NULL ) ;
93 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button_open ) , c l i c k e d , G_CALLBACK ( -
b u t t o n _ o p e n _ c l i c k e d ) , NULL ) ;
16.2. IMPLEMENTATION 63

94 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button_save ) , c l i c k e d , G_CALLBACK ( -


b u t t o n _ s a v e _ c l i c k e d ) , NULL ) ;
95 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button_saveas ) , c l i c k e d , G_CALLBACK ( -
b u t t o n _ s a v e a s _ c l i c k e d ) , NULL ) ;
96 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button_close ) , c l i c k e d , G_CALLBACK ( -
b u t t o n _ c l o s e _ c l i c k e d ) , NULL ) ;
97 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( button_quit ) , c l i c k e d , G_CALLBACK ( -
b u t t o n _ q u i t _ c l i c k e d ) , NULL ) ;
98 g_ s i g n a l _ c o n n e c t ( G_OBJECT ( b u t t o n _ p r e f e r e n c e s ) , c l i c k e d , G_CALLBACK ( -
b u t t o n _ p r e f e r e n c e s _ c l i c k e d ) , NULL ) ;
99 }
100
101 / The C a l l Back F u n c t i o n s /
102
103 v o i d m e n u _ i t e m _ n e w _ a c t i v a t e d ( GtkWidget widget , gpointer data )
104 {
105 text_edit_new ( ) ;
106 }
107 v o i d m e n u _ i t e m _ o p e n _ a c t i v a t e d ( GtkWidget widget , gpointer data )
108 {
109 text_ edit_op en ( ) ;
110 }
111 v o i d m e n u _ i t e m _ s a v e _ a c t i v a t e d ( GtkWidget widget , gpointer data )
112 {
113 text_ edit_sa ve ( ) ;
114 }
115 v o i d m e n u _ i t e m _ s a v e a s _ a c t i v a t e d ( GtkWidget widget , gpointer data )
116 {
117 text_edit_saveas ( ) ;
118 }
119 v o i d m e n u _ i t e m _ c l o s e _ a c t i v a t e d ( GtkWidget widget , gpointer data )
120 {
121 tex t_ ed i t_ cl os e ( ) ;
122 }
123 v o i d m e n u _ i t e m _ q u i t _ a c t i v a t e d ( GtkWidget widget , gpointer data )
124 {
125 text_ edit_qu it ( ) ;
126 }
127 v o i d m e n u _ i t e m _ p r e f e r e n c e s _ a c t i v a t e d ( GtkWidget widget , gpointer data )
128 {
129 text_edit_preferences ( ) ;
130 }
131 v o i d b u t t o n _ n e w _ c l i c k e d ( GtkWidget widget , gpointer data )
132 {
133 text_edit_new ( ) ;
134 }
135 v o i d b u t t o n _ o p e n _ c l i c k e d ( GtkWidget widget , gpointer data )
136 {
137 text_ edit_op en ( ) ;
138 }
139 v o i d b u t t o n _ s a v e _ c l i c k e d ( GtkWidget widget , gpointer data )
140 {
141 text_ edit_sa ve ( ) ;
142 }
143 v o i d b u t t o n _ s a v e a s _ c l i c k e d ( GtkWidget widget , gpointer data )
144 {
145 text_edit_saveas ( ) ;
146 }
147 v o i d b u t t o n _ c l o s e _ c l i c k e d ( GtkWidget widget , gpointer data )
148 {
149 tex t_ ed i t_ cl os e ( ) ;
150 }
64 CHAPTER 16. TEXT EDITOR

151 v o i d b u t t o n _ q u i t _ c l i c k e d ( GtkWidget widget , gpointer data )


152 {
153 text_ edit_qu it ( ) ;
154 }
155 v o i d b u t t o n _ p r e f e r e n c e s _ c l i c k e d ( GtkWidget widget , gpointer data )
156 {
157 text_edit_preferences ( ) ;
158 }
159 v o i d o p e n _ f i l e _ d l g _ o k _ c l i c k e d ( GtkWidget widget , gpointer data )
160 {
161 i n t bytes_read ;
162 FILE fp ;
163 gchar text [ _MAX _FILE_SI ZE ] ;
164 GtkTextBuffer buffer ;
165 GtkTextIter start , end ;
166 filename=g t k _ f i l e _ s e l e c t i o n _ g e t _ f i l e n a m e ( G T K _ F I L E _ S E L E C T I O N ( -
open_file_dlg ) ) ;
167 i f ( ( fp=fopen ( filename , r ) )==NULL )
168 {
169 exit ( 1 ) ;
170 }
171 w h i l e ( ! feof ( fp ) )
172 {
173 bytes_read=fread (&text , s i z e o f ( gchar ) , _MAX_FILE_SIZE , fp ) ;
174 }
175 fclose ( fp ) ;
176
177 buffer=g t k _ t e x t _ v i e w _ g e t _ b u f f e r ( GTK_TEXT_VIEW ( text_view ) ) ;
178 g t k _ t e x t _ b u f f e r _ g e t _ s t a r t _ i t e r ( buffer ,& start ) ;
179 g t k _ t e x t _ b u f f e r _ g e t _ e n d _ i t e r ( buffer ,& end ) ;
180 g t k _ t e x t _ b u f f e r _ d e l e t e ( buffer ,& start ,& end ) ;
181 g t k _ t e x t _ b u f f e r _ i n s e r t ( buffer , &end , text , bytes_read ) ;
182 g t k _ w i d g e t _ d e s t r o y ( open_file_dlg ) ;
183 }
184 v o i d o p e n _ f i l e _ d l g _ c a n c e l _ c l i c k e d ( GtkWidget widget , gpointer data )
185 {
186 g t k _ w i d g e t _ d e s t r o y ( open_file_dlg ) ;
187 }
188 v o i d s a v e a s _ f i l e _ d l g _ o k _ c l i c k e d ( GtkWidget widget , gpointer data )
189 {
190 FILE fp ;
191 GtkTextBuffer buffer ;
192 GtkTextIter start , end ;
193 gchar text ;
194 filename=g t k _ f i l e _ s e l e c t i o n _ g e t _ f i l e n a m e ( G T K _ F I L E _ S E L E C T I O N ( -
s av ea s_ f il e_ d lg ) ) ;
195 buffer=g t k _ t e x t _ v i e w _ g e t _ b u f f e r ( GTK_TEXT_VIEW ( text_view ) ) ;
196 g t k _ t e x t _ b u f f e r _ g e t _ s t a r t _ i t e r ( buffer , &start ) ;
197 g t k _ t e x t _ b u f f e r _ g e t _ e n d _ i t e r ( buffer , &end ) ;
198 text=g t k _ t e x t _ b u f f e r _ g e t _ t e x t ( buffer , &start , &end , TRUE ) ;
199 fp=fopen ( filename , w ) ;
200 i f ( ! fp )
201 {
202 return ;
203 }
204 fwrite ( text , strlen ( text ) , 1 , fp ) ;
205 fclose ( fp ) ;
206 g t k _ w i d g e t _ d e s t r o y ( s av ea s_ f il e_ dl g ) ;
207 }
208 v o i d s a v e a s _ f i l e _ d l g _ c a n c e l _ c l i c k e d ( GtkWidget widget , gpointer data )
209 {
210 g t k _ w i d g e t _ d e s t r o y ( s av ea s_ f il e_ dl g ) ;
16.2. IMPLEMENTATION 65

211 }
212 v o i d f o n t _ d l g _ o k _ c l i c k e d ( GtkWidget widget , gpointer data )
213 {
214 gchar fontname ;
215 P a n g o F o n t D e s c r i p t i o n font_desc ;
216 fontname=g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ g e t _ f o n t _ n a m e ( -
G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( font_dlg ) ) ;
217 font_desc=p a n g o _ f o n t _ d e s c r i p t i o n _ f r o m _ s t r i n g ( fontname ) ;
218 g t k _ w i d g e t _ m o d i f y _ f o n t ( text_view , font_desc ) ;
219 g t k _ w i d g e t _ d e s t r o y ( font_dlg ) ;
220 }
221 v o i d f o n t _ d l g _ c a n c e l _ c l i c k e d ( GtkWidget widget , gpointer data )
222 {
223 g t k _ w i d g e t _ d e s t r o y ( font_dlg ) ;
224 }
225 v o i d f o n t _ d l g _ a p p l y _ c l i c k e d ( GtkWidget widget , gpointer data )
226 {
227 gchar fontname ;
228 P a n g o F o n t D e s c r i p t i o n font_desc ;
229 fontname=g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ g e t _ f o n t _ n a m e ( -
G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( font_dlg ) ) ;
230 font_desc=p a n g o _ f o n t _ d e s c r i p t i o n _ f r o m _ s t r i n g ( fontname ) ;
231 g t k _ w i d g e t _ m o d i f y _ f o n t ( text_view , font_desc ) ;
232 }
233
234 / The Text E d i t F u n c t i o n s /
235
236 v o i d text_edit_new ( )
237 {
238 tex t_ ed i t_ cl os e ( ) ;
239 }
240 v o i d text_ edit_op en ( )
241 {
242 / F i r s t C l o s e The Openned F i l e /
243 tex t_ ed i t_ cl os e ( ) ;
244 / C r e a t e The Open F i l e D i a l o g /
245 open_file_dlg=g t k _ f i l e _ s e l e c t i o n _ n e w ( Open F i l e . . . ) ;
246 o p e n _ f i l e _ d l g _ o k=G T K _ F I L E _ S E L E C T I O N ( open_file_dlg )>ok_button ;
247 o p e n _ f i l e _ d l g _ c a n c e l=G T K _ F I L E _ S E L E C T I O N ( open_file_dlg )>cancel_button ;
248 / Open F i l e D i a l o g C l i c k e d S i g n a l s /
249 g _ s i g n a l _ c o n n e c t ( G_OBJECT ( o p e n _ f i l e _ d l g _o k ) , c l i c k e d , G_CALLBACK ( -
o p e n _ f i l e _ d l g _ o k _ c l i c k e d ) , NULL ) ;
250 g _ s i g n a l _ c o n n e c t ( G_OBJECT ( o p e n _ f i l e _ d l g _ c a n c e l ) , c l i c k e d , G_CALLBACK-
( o p e n _ f i l e _ d l g _ c a n c e l _ c l i c k e d ) , NULL ) ;
251 g t k _ w i d g e t _ s h o w _ a l l ( open_file_dlg ) ;
252 }
253 v o i d text_ edit_sa ve ( )
254 {
255 i f ( filename==NULL )
256 {
257 text_edit_saveas ( ) ;
258 }
259 else
260 {
261 FILE fp ;
262 gchar text ;
263 GtkTextBuffer buffer ;
264 GtkTextIter start , end ;
265 buffer=g t k _ t e x t _ v i e w _ g e t _ b u f f e r ( GTK_TEXT_VIEW ( text_view ) ) ;
266 g t k _ t e x t _ b u f f e r _ g e t _ s t a r t _ i t e r ( buffer , &start ) ;
267 g t k _ t e x t _ b u f f e r _ g e t _ e n d _ i t e r ( buffer , &end ) ;
268 text=g t k _ t e x t _ b u f f e r _ g e t _ t e x t ( buffer , &start , &end , TRUE ) ;
66 CHAPTER 16. TEXT EDITOR

269 fp=fopen ( filename , w ) ;


270 i f ( ! fp )
271 {
272 return ;
273 }
274 fwrite ( text , strlen ( text ) , 1 , fp ) ;
275 fclose ( fp ) ;
276 }
277 }
278 void text_edit_saveas ( )
279 {
280 / C r e a t e The Save As F i l e D i a l o g /
281 sav ea s_ f il e_ dl g=g t k _ f i l e _ s e l e c t i o n _ n e w ( Save F i l e As . . . ) ;
282 s a v e a s _ f i l e _ d l g _ o k=G T K _ F I L E _ S E L E C T I O N ( s av ea s_ f il e_ dl g )>ok_button ;
283 s a v e a s _ f i l e _ d l g _ c a n c e l=G T K _ F I L E _ S E L E C T I O N ( s av ea s_ f il e_ dl g )>-
cancel_button ;
284 / Save As F i l e D i a l o g C l i c k e d S i g n a l s /
285 g _ s i g n a l _ c o n n e c t ( G_OBJECT ( s a v e a s _ f i l e _ d l g _ o k ) , c l i c k e d , G_CALLBACK ( -
s a v e a s _ f i l e _ d l g _ o k _ c l i c k e d ) , NULL ) ;
286 g _ s i g n a l _ c o n n e c t ( G_OBJECT ( s a v e a s _ f i l e _ d l g _ c a n c e l ) , c l i c k e d , -
G_CALLBACK ( s a v e a s _ f i l e _ d l g _ c a n c e l _ c l i c k e d ) , NULL ) ;
287 g t k _ w i d g e t _ s h o w _ a l l ( s av ea s_ f il e_ dl g ) ;
288 }
289 v o i d t ex t_ ed i t_ cl os e ( )
290 {
291 filename=NULL ;
292 GtkTextBuffer buffer ;
293 GtkTextIter start , end ;
294 buffer=g t k _ t e x t _ v i e w _ g e t _ b u f f e r ( GTK_TEXT_VIEW ( text_view ) ) ;
295 g t k _ t e x t _ b u f f e r _ g e t _ s t a r t _ i t e r ( buffer ,& start ) ;
296 g t k _ t e x t _ b u f f e r _ g e t _ e n d _ i t e r ( buffer ,& end ) ;
297 g t k _ t e x t _ b u f f e r _ d e l e t e ( buffer ,& start ,& end ) ;
298 }
299 v o i d text_ edit_qu it ( )
300 {
301 exit ( 0 ) ;
302 }
303 void text_edit_preferences ( )
304 {
305 / C r e a t e The Font D i a l o g /
306 font_dlg=g t k _ f o n t _ s e l e c t i o n _ d i a l o g _ n e w ( P r e f e r e n c e s . . . ) ;
307 font_dlg_ok=G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( font_dlg )>ok_button ;
308 fon t_ dl g _c an ce l=G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( font_dlg )>cancel_button ;
309 font_ dlg_app ly=G T K _ F O N T _ S E L E C T I O N _ D I A L O G ( font_dlg )>apply_button ;
310 / Font D i a l o g C l i c k e d S i g n a l s /
311 g _ s i g n a l _ c o n n e c t ( G_OBJECT ( font_dlg_ok ) , c l i c k e d , G_CALLBACK ( -
f o n t _ d l g _ o k _ c l i c k e d ) , NULL ) ;
312 g _ s i g n a l _ c o n n e c t ( G_OBJECT ( f on t_ dl g _c an ce l ) , c l i c k e d , G_CALLBACK ( -
f o n t _ d l g _ c a n c e l _ c l i c k e d ) , NULL ) ;
313 g _ s i g n a l _ c o n n e c t ( G_OBJECT ( font _dlg_app ly ) , c l i c k e d , G_CALLBACK ( -
f o n t _ d l g _ a p p l y _ c l i c k e d ) , NULL ) ;
314 g t k _ w i d g e t _ s h o w _ a l l ( font_dlg ) ;
315 }
16.2. IMPLEMENTATION 67

Figure 16.1: Text Editor

You might also like