Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Pro PHP-GTK
PREMIUM
Số trang
392
Kích thước
5.6 MB
Định dạng
PDF
Lượt xem
1897

Pro PHP-GTK

Nội dung xem thử

Mô tả chi tiết

Pro PHP-GTK

Scott Mattocks

6137ch00FM.qxd 3/14/06 1:52 PM Page i

Pro PHP-GTK

Copyright © 2006 by Scott Mattocks

All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,

electronic or mechanical, including photocopying, recording, or by any information storage or retrieval

system, without the prior written permission of the copyright owner and the publisher.

ISBN-13: 978-1-59059-613-5

ISBN-10: 1-59059-613-7

Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1

Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence

of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark

owner, with no intention of infringement of the trademark.

Lead Editor: Jason Gilmore

Technical Reviewers: Christian Weiske, Steph Fox

Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Jason Gilmore,

Jonathan Hassell, James Huddleston, Chris Mills, Matthew Moodie, Dominic Shakeshaft, Jim Sumser,

Matt Wade

Project Manager: Kylie Johnston

Copy Edit Manager: Nicole LeClerc

Copy Editors: Marilyn Smith, Jennifer Whipple

Assistant Production Director: Kari Brooks-Copony

Production Editor: Ellie Fountain

Compositor: Kinetic Publishing Services, LLC

Proofreader: Dan Shaw

Indexer: Valerie Perry

Cover Designer: Kurt Krames

Manufacturing Director: Tom Debolski

Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,

New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or

visit http://www.springeronline.com.

For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA

94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com.

The information in this book is distributed on an “as is” basis, without warranty. Although every precaution

has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to

any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly

by the information contained in this work.

The source code for this book is available to readers at http://www.apress.com in the Source Code section.

6137ch00FM.qxd 3/14/06 1:52 PM Page ii

To my wife Cristina:

Thanks for giving me the courage to start this book

and for having the patience to let me finish.

6137ch00FM.qxd 3/14/06 1:52 PM Page iii

6137ch00FM.qxd 3/14/06 1:52 PM Page iv

Contents at a Glance

About the Author. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii

Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

■CHAPTER 1 Introducing PHP-GTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

■CHAPTER 2 Installing PHP-GTK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

■CHAPTER 3 Understanding PHP-GTK Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

■CHAPTER 4 Handling Events and Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

■CHAPTER 5 Getting an Application Up and Running . . . . . . . . . . . . . . . . . . . . . . . . . 65

■CHAPTER 6 Laying Out Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

■CHAPTER 7 Displaying and Collecting Simple Data . . . . . . . . . . . . . . . . . . . . . . . . 119

■CHAPTER 8 Using Multiline Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

■CHAPTER 9 Working with Trees and Lists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

■CHAPTER 10 Scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

■CHAPTER 11 Adding Menus and Toolbars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

■CHAPTER 12 Adding Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

■CHAPTER 13 Drag-and-Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

■CHAPTER 14 Using Selectors & Dialogs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

■CHAPTER 15 Doing Background Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

■CHAPTER 16 Changing the Look and Feel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

■CHAPTER 17 Distributing PHP-GTK Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

v

6137ch00FM.qxd 3/14/06 1:52 PM Page v

6137ch00FM.qxd 3/14/06 1:52 PM Page vi

Contents

About the Author. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii

Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

■CHAPTER 1 Introducing PHP-GTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

A Real-World Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

GUI Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

What Is PHP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Object-Oriented PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

PHP’s DOM and SOAP Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

What Is GTK? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

What Is PHP-GTK?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

Why Use PHP-GTK?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Further Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

■CHAPTER 2 Installing PHP-GTK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Installing PHP-GTK 2 on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Installing PHP-GTK 2 on Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Using PEAR and PECL Packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Installing PEAR Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Installing PECL Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Running PHP-GTK Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

vii

6137ch00FM.qxd 3/14/06 1:52 PM Page vii

■CHAPTER 3 Understanding PHP-GTK Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Widgets and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

The GtkObject Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Parents and Children. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Containers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Top-Level and Parent Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Adding and Removing Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

■CHAPTER 4 Handling Events and Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Events and Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Interacting with Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Creating Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Blocking and Destroying Signal Handlers . . . . . . . . . . . . . . . . . . . . . . 49

Listening for New Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

Using the GtkEventBox Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Adding Events to a Widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

■CHAPTER 5 Getting an Application Up and Running . . . . . . . . . . . . . . . . . . . 65

Windows and Other Top-Level Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Types of Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Window Decorations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Window Positioning and Sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Getting and Setting the Window’s Height and Width . . . . . . . . . . . . . 73

Centering a Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Maximizing Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Setting the z-Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Modal Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Window Titles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

The GTK Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

Starting the Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

Stopping the Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Stepping Through the Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

viii ■CONTENTS

6137ch00FM.qxd 3/14/06 1:52 PM Page viii

■CHAPTER 6 Laying Out Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

The Sample Application Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Setting the Label Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Setting the Border Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

Boxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Creating Vertical and Horizontal Boxes . . . . . . . . . . . . . . . . . . . . . . . . 91

Packing Widgets into a Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Nesting Boxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Button Boxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Constructing the Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Attaching Children . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

Tables vs. Boxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Fixed Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Putting Widgets in a Fixed Container . . . . . . . . . . . . . . . . . . . . . . . . . 105

Using Fixed Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Notebooks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Defining the Notebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Adding, Moving, and Removing Notebook Pages . . . . . . . . . . . . . . . 111

Navigating Notebook Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Decorating a Notebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

■CHAPTER 7 Displaying and Collecting Simple Data . . . . . . . . . . . . . . . . . . . 119

Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Simple Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Complex Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Entry Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Input Box Size and Character Limits. . . . . . . . . . . . . . . . . . . . . . . . . . 137

Automatic Completion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Combo Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Flat Text Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

GtkComboBox with a Custom Model . . . . . . . . . . . . . . . . . . . . . . . . . 142

Scales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Scale Adjustment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Scale Precision. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Value Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

■CONTENTS ix

6137ch00FM.qxd 3/14/06 1:52 PM Page ix

Spin Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Standard Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Stock Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

■CHAPTER 8 Using Multiline Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

The Text-Editing Tool Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Text Marks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

Referencing Marks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

Creating Marks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Moving Marks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Iterators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Creating Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Moving Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

Tags and Tag Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Creating Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Adding Tags to the Tag Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

Applying and Removing Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Text Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Creating Text Buffers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Adding Text to a Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Removing Text from a Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Copying and Pasting Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

Text Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

Using Multiple Views with a Single Buffer. . . . . . . . . . . . . . . . . . . . . 169

Scrolling in a View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

Setting the Buffer Appearance and Editability . . . . . . . . . . . . . . . . . 171

Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

A Multiline Text Display Tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

A Text-Editing Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

■CHAPTER 9 Working with Trees and Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

The GtkListStore Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

The GtkTreeStore Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

Model Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Model Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

x ■CONTENTS

6137ch00FM.qxd 3/14/06 1:52 PM Page x

Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Cell Renderers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

View Columns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Tree Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

Row Selection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

The News Article Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

The Product Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

■CHAPTER 10 Scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

Scrolled Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

Setting the Scrollbar Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Controlling Child Placement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Setting a Shadow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

View Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Custom Scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

Creating the Scrollbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

Creating the Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

■CHAPTER 11 Adding Menus and Toolbars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Creating Menu Bars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

Adding Menus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

Creating Menu Items. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Creating Tear-Off Menus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

Creating Context Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Toolbars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

Creating a Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

Adding Tooltips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Adding Tool Buttons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

■CHAPTER 12 Adding Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Creating an Image Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Scaling Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

Setting Transparency. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

■CONTENTS xi

6137ch00FM.qxd 3/14/06 1:52 PM Page xi

Animations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

Widget Shaping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

■CHAPTER 13 Drag-and-Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Drag-and-Drop Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Setting the Drag Destination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Handling the drag-data-received Signal . . . . . . . . . . . . . . . . . . . . . . 272

Drag-and-Drop Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

Setting the Drag Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

Handling the drag-data-get Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Setting Drag Source Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

■CHAPTER 14 Using Selectors & Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

Dialogs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

Displaying a Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

Managing the User’s Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

Adding Items to the Top of a Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . 286

Adding Items to the Bottom of a Dialog . . . . . . . . . . . . . . . . . . . . . . . 287

Selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Color Selection Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Color Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Font Selection Dialogs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Font Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

File Chooser Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

File Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

About Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

■CHAPTER 15 Doing Background Work. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Progress Bars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Creating a Progress Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Using set_orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

Iterating the Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

xii ■CONTENTS

6137ch00FM.qxd 3/14/06 1:52 PM Page xii

Timeouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

Adding a Timeout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

Removing a Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

Idle Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

■CHAPTER 16 Changing the Look and Feel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Resource Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Creating an RC File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

Applying the RC File to the Application . . . . . . . . . . . . . . . . . . . . . . . 322

Styles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

Modifying a Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

Setting a Background Pixmap for a Style . . . . . . . . . . . . . . . . . . . . . 330

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

■CHAPTER 17 Distributing PHP-GTK Applications . . . . . . . . . . . . . . . . . . . . . . . 333

Downloading and Installing an Application . . . . . . . . . . . . . . . . . . . . . . . . . 333

Setting Up the Channel Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

Creating the Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

Updating an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Checking for Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Obtaining the User’s Permission to Upgrade. . . . . . . . . . . . . . . . . . . 340

Performing the Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

Uninstalling an Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

Using PHP Compilers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

■CONTENTS xiii

6137ch00FM.qxd 3/14/06 1:52 PM Page xiii

6137ch00FM.qxd 3/14/06 1:52 PM Page xiv

Tải ngay đi em, còn do dự, trời tối mất!