Beginning Mac OS X Tiger Dashboard Widget Development (2006)
.pdfBeginning
Mac OS® X Tiger™
Dashboard Widget
Development
Fred Terry
Beginning
Mac OS® X Tiger™
Dashboard Widget
Development
Fred Terry
Beginning Mac OS®X Tiger™ Dashboard Widget Development
Published by
Wiley Publishing, Inc.
10475 Crosspoint Boulevard Indianapolis, IN 46256
www.wiley.com
Copyright © 2006 by Wiley Publishing, Inc., Indianapolis, Indiana
Published simultaneously in Canada
ISBN-13: 978-0-471-77825-7
ISBN-10: 0-471-77825-7
Manufactured in the United States of America
10 9 8 7 6 5 4 3 2 1
1B/SX/QW/QW/IN
Library of Congress Cataloging-in-Publication Data:
Terry, Fred.
Beginning Mac OS X Tiger dashboard widget development / Fred Terry. p. cm.
Includes index.
ISBN-13: 978-0-471-77825-7 (paper/website : alk. paper) ISBN-10: 0-471-77825-7 (paper/website : alk. paper)
1. Mac OS. 2. Operating systems (Computers) 3. Macintosh (Computer)—Programming. 4. HTML (Document markup language) I. Title.
QA76.76.O63T437 2006
005.4'4682—dc22
2006015521
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Legal Department, Wiley Publishing, Inc., 10475 Crosspoint Blvd., Indianapolis, IN 46256, (317) 572-3447, fax (317) 572-4355, or online at http://www.wiley.com/go/permissions.
LIMIT OF LIABILITY/DISCLAIMER OF WARRANTY: THE PUBLISHER AND THE AUTHOR MAKE NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE ACCURACY OR COMPLETENESS OF THE CONTENTS OF THIS WORK AND SPECIFICALLY DISCLAIM ALL WARRANTIES, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE. NO WARRANTY MAY BE CREATED OR EXTENDED BY SALES OR PROMOTIONAL MATERIALS. THE ADVICE AND STRATEGIES CONTAINED HEREIN MAY NOT BE SUITABLE FOR EVERY SITUATION. THIS WORK IS SOLD WITH THE UNDERSTANDING THAT THE PUBLISHER IS NOT ENGAGED IN RENDERING LEGAL, ACCOUNTING, OR OTHER PROFESSIONAL SERVICES. IF PROFESSIONAL ASSISTANCE IS REQUIRED, THE SERVICES OF A COMPETENT PROFESSIONAL PERSON SHOULD BE SOUGHT. NEITHER THE PUBLISHER NOR THE AUTHOR SHALL BE LIABLE FOR DAMAGES ARISING HEREFROM. THE FACT THAT AN ORGANIZATION OR WEBSITE IS REFERRED TO IN THIS WORK AS A CITATION AND/OR A POTENTIAL SOURCE OF FURTHER INFORMATION DOES NOT MEAN THAT THE AUTHOR OR THE PUBLISHER ENDORSES THE INFORMATION THE ORGANIZATION OR WEBSITE MAY PROVIDE OR RECOMMENDATIONS IT MAY MAKE. FURTHER, READERS SHOULD BE AWARE THAT INTERNET WEBSITES LISTED IN THIS WORK MAY HAVE CHANGED OR DISAPPEARED BETWEEN WHEN THIS WORK WAS WRITTEN AND WHEN IT IS READ.
For general information on our other products and services please contact our Customer Care Department within the United States at (800) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.
Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, Programmer to Programmer, and related trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries, and may not be used without written permission. Mac OS and Tiger are trademarks or registered trademarks of Apple Computer, Inc. in the US and other countries. All other trademarks are the property of their respective owners. Wiley Publishing, Inc., is not associated with any product or vendor mentioned in this book.
Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be available in electronic books.
About the Author
Fred Terry has been involved in the computer industry since making a left-hand turn into it from Ph.D. work in medieval languages and literature. He has written a number of software manuals and articles and has worked as a systems and network administrator, web developer, programmer, and quality assurance engineer. In addition to his ongoing love affairs with AppleScript and Perl, his current programming infatuations are Ruby and Ajax. Currently, Fred is a project manager for the Information Management Group at Burns & McDonnell. He has a B.A. in English from Southwestern Oklahoma State University and an M.A. in English from Oklahoma State University. He lives in Lawrence, Kansas, with his family and dog. Fred can be contacted at pfterry@deadtrees.net.
For Leesa, who has stood by me through career changes and side projects without losing her patience or humor
Acknowledgments
No book is produced in a vacuum. I want to thank the developers who let me include their widgets for the example chapters in the latter half of the book: Andrew Welch, Nick Rogers, Jesus de Meyer, Jason Yee, and Simon Whitaker. I can’t thank Nick Rogers enough for being a racquetball partner, letting me bounce code off of him, and performing the technical edit. Cleve Devault needs my thanks for giving me some space to work on this book. I also want to thank my agent, Laura Lewin; my acquisitions editor, Katie Mohr; and, most important of all, my development editor, Rosanne Koneval. This book wouldn’t have made it over all the hurdles without their capable guidance.
My thanks to Nick Sayre and Andy Rhoades for allowing me to reprint the “Nick vs. Andy” strip (Figure 7-9). Additional “Nick vs. Andy” strips can be found at http://nicksayre.com/.
As any writer would say, I have to extend my greatest thanks to my family. My wife, Leesa; my daughter, Sommer; and my son, Keegan, put up with the constant distraction of this book. They are happier than I that it’s finally done.
|
Credits |
Acquisitions Editor |
Graphics and Production Specialists |
Katie Mohr |
Claudia Bell |
Development Editor |
Carrie A. Foster |
Joyce Haughey |
|
Rosanne Koneval |
Barbara Moore |
Technical Editor |
Barry Offringa |
Heather Ryan |
|
Nick Rogers |
Alicia B. South |
Copy Editor |
Quality Control Technician |
Maarten Reilingh |
Leeann Harney |
Editorial Manager |
Project Coordinator |
Mary Beth Wakefield |
Jennifer Theriot |
Production Manager |
Proofreading and Indexing |
Tim Tate |
Techbooks |
Vice President and Executive Group Publisher
Richard Swadley
Vice President and Executive Publisher
Joseph B. Wikert
Contents
Introduction |
xiii |
Part I: An Introduction to Widgets |
1 |
Chapter 1: Tiger, Dashboard, and Widgets |
3 |
OS X Tiger |
3 |
Dashboard and Widgets |
4 |
Managing Dashboard’s Widgets |
8 |
Installing Widgets |
9 |
Installing Local Widgets |
9 |
Downloading and Installing |
11 |
Reloading Widgets |
13 |
What Widgets Are Not |
13 |
Summary |
14 |
Exercises |
14 |
Chapter 2: The Basics of Widgetry |
15 |
What a Widget Is Composed Of |
15 |
HTML, CSS, and JavaScript |
17 |
HTML |
18 |
CSS |
19 |
JavaScript |
21 |
Property Lists |
23 |
Widget Properties |
24 |
Creating Property Lists |
26 |
Icons and Images |
30 |
How to Bundle Your Widget |
31 |
Summary |
33 |
Exercises |
33 |
Contents
Chapter 3: Widget Development Environment |
35 |
An Editor and a Browser |
35 |
TextEdit and Safari |
36 |
BBEdit |
38 |
Using an Integrated Development Environment |
39 |
Widgetarium |
40 |
Xcode |
41 |
Starting Xcode |
41 |
Building a Plugin |
42 |
Enabling Dashboard Developer Mode |
47 |
Debugging Tools |
49 |
Using Safari as Your Debugger |
49 |
Third-Party Debugging Tools |
50 |
Summary |
53 |
Exercises |
53 |
Chapter 4: Creating a Widget |
55 |
HTML Beginnings |
55 |
Beginning the Project |
55 |
Begin with HTML |
57 |
Adding a Background |
59 |
Creating Widget Structure with CSS |
61 |
<div> Regions |
63 |
Doing the Work with JavaScript |
69 |
Building the Widget |
72 |
Making Sure It Works |
75 |
Summary |
75 |
Exercises |
76 |
Chapter 5: Debugging and Testing |
77 |
First Steps |
77 |
Debugging Tips |
77 |
Syntax and Logic Errors |
78 |
Widget Errors |
79 |
Debugging Tricks |
79 |
Use a Helpful Editor |
79 |
Simplify |
79 |
Log Files |
80 |
Printing Debug Information with Alert Statements |
81 |
vi
|
Contents |
Using a Debugger |
83 |
Debugging Tools |
83 |
Stepping Through a Widget |
83 |
Testing Your Widget |
86 |
Testing Tips |
86 |
Don’t Test Your Own Stuff |
86 |
Break Your Widget |
86 |
Keep a Log |
86 |
What Now? |
87 |
Fixing Bugs |
87 |
Summary |
88 |
Exercises |
88 |
Part II: Providing User Interaction |
89 |
Chapter 6: Giving a Widget Preferences |
91 |
Adding Preferences to Your Widget |
91 |
How to Show Preferences |
93 |
Creating a Back Side Panel |
94 |
Widget Resources |
95 |
Flipping a Widget |
95 |
The Widget’s HTML File |
95 |
The Widget’s CSS File |
97 |
The Widget’s JavaScript File |
99 |
Testing Your Changes |
101 |
Adding Preferences |
102 |
Adding Preference Selection |
102 |
Saving and Reading Preferences |
108 |
Summary |
111 |
Exercises |
111 |
Chapter 7: Widget Events |
113 |
The Dashboard Activation Event |
113 |
Activation Properties |
114 |
System Resources |
117 |
Removing Widget Preferences |
119 |
Setting Widget Focus |
123 |
Dragging a Widget |
124 |
Control Regions |
125 |
Summary |
127 |
Exercises |
127 |
vii
Contents
Chapter 8: Adding to the Widget Interface |
129 |
Resizing |
129 |
When to Resize the Widget |
132 |
How to Resize a Widget |
132 |
The HTML File |
135 |
The CSS File |
136 |
The JavaScript File |
140 |
Moving the Close Box |
145 |
Scrolling |
146 |
When to Add Scrolling |
146 |
The HTML File |
146 |
The CSS File |
147 |
The JavaScript File |
148 |
Summary |
151 |
Exercises |
151 |
Chapter 9: Adding Cut, Copy, and Paste to Your Widget |
153 |
Pasteboard |
153 |
Pasteboard Events |
153 |
Pasteboard Handlers |
154 |
Adding Pasteboard Handlers |
156 |
Summary |
157 |
Exercises |
157 |
Chapter 10: Adding Drag and Drop to the Widget |
159 |
Drag-and-Drop Events |
160 |
Dragging and Dropping from the Finder |
160 |
Using Drag and Drop |
161 |
HTML |
162 |
CSS |
163 |
JavaScript |
164 |
Dragging Between Widgets |
166 |
Summary |
167 |
Exercises |
167 |
Chapter 11: Access Keys |
169 |
Using Access Keys |
169 |
File System Access |
170 |
viii