TweetFollow Us on Twitter

June 94 - Newton Q & A: Ask the Llama

Newton Q & A: Ask the Llama

Newton Developer Techical Support

Q Here's something that's been puzzling me a bit: I want to pop up something like a copyright message for ten seconds when my application starts up. So I drew up a layout called Presents with a protoFloater containing all the necessary text. In my main layout is a link to Presents called presentsLink. The following is the viewShowScript for the topmost view in my application:

	AddDelayedAction(presentsLink:close(), nil, 10000)

This says to me: open the linked view, wait ten seconds, and close it. And that's exactly what it does, except that after the view is closed, there's an exception. What am I doing wrong and how do I fix it? 

The short answer is that the second argument to the AddDelayedAction function is of the wrong type. This argument is supposed to be an array of parameters to be passed to the delayed function, and nil is not an array. The proper syntax for no arguments is [] instead of nil.

But there's more: Although the closure you supplied in the first argument works in this case, you should get out of the habit of using that type of function call for delayed or deferred actions. You're better off providing a full closure and sending in the view you want closed, as in this:

	// Define a closure to use in the delayed action.
	local myClose := func(whichView)

	AddDelayedAction(myClose, [presentsLink], 10000);

Unfortunately, things do not end there. You also need to make sure that the myClose function is in internal RAM. The best way to do this is to use DefConst to define the function:

// In your ProjectData file:
DefConst('kDelayedClose, func(whichView) whichView:Close());

// This changes the function above:
		[presentsLink], 10000);

However, there is an easier solution. Instead of doing a delayed action you can use the view idle mechanism to do what you want. All you need to do is add a viewIdleScript and viewIdleFrequency to the presentsLink top-level view. The viewIdleScript simply sends a Close message. The viewIdleFrequency is set to the desired delay (10000 in this case).

The really short answer is that you can just use protoGlance. This proto has the show-and- disappear behavior built in. You can set the viewIdleFrequency to 10000 to get the behavior you want.

Q I have an alphabetically sorted list of items in a protoTable and I want to use protoa2z to quickly move through the table (like the cardfile overview). How do I do it? 

The first thing you need to do is find the index in the protoTable of the correct item (that is, find the right item in the def.tabValues array of the protoTable). How you do this will depend on what type of data you're representing. Then you can figure out how high each item in the protoTable is, set the VOrg slot of the table to the correct line, and force the protoTable to redraw. You probably want to make sure that you don't scroll off the bottom of the table. Below is a method you can add to your protoTable that will do what you want. You can then send the message from your a2zChanged method (make sure you send the message to the protoTable).

	// Figure out the height of an item in the table.
	local childHeight := if def.tabProtos.viewFont exists then
	// Make sure that the table will not scroll off the end
	// by calculating the index of the bottommost item that
	// will be displayed.
	local largestIndex := def.tabDown - ((:LocalBox().bottom -
		:LocalBox().top) DIV childHeight) - 1;
	// Use the bottommost item (largestIndex) to make sure
	// the table has no empty space on the bottom.
	vOrg := MIN(index, largestIndex);
	// Now force the table to redraw.

Q I would like to use the protoa2z sample code in my application, but I can't figure out how to set the highlighted letter when the user scrolls through my data. 

It's easy once you realize that protoa2z is based on a protoPictIndexer. All you have to do is a SetValue of the currIndex slot to the correct index. This will change the highlighting of the protoa2z.

Note that using SetValue will not call the IndexClickScript, but this is probably what you want. If you do want it to be called, you'll have to manually unhighlight the current selection, set the currIndex slot, and then highlight the new item. The appropriate code would be

a2z.currIndex := newIndex;

Q What is your quest? 

To answer the questions of those who develop for Newton.

Q I tried to use a protoPictRadioButton in my application but the highlight rectangle isn't the right size. I know that I need to write some code to draw the correct-sized highlight, but where do I hook it in? 

Minimally you need to override the viewDrawScript of the protoPictRadioButton. You may also want to change the viewFormat since it defaults to a thick rounded-rectangle border. Assuming that you wanted some sort of rectangle highlight around the selected button, you could use the following viewDrawScript:

	// If the button is selected, highlight it.
	if viewValue then
	// Get the bounds of the protoPictRadioButton.
	local b := :LocalBox();
	// Inset the bounds. := + 2;
	b.left := b.left + 2;
	b.bottom := b.bottom - 2;
	b.right := b.right - 2;
	// Now draw a rectangle.
	:DrawShape(MakeRect(b.left,, b.right, b.bottom), nil);

Q What is the AutoClose checkbox in the Newton Toolkit for? Why should I use it? 

The AutoClose flag causes all other AutoClose applications to be closed when your application is clicked. The effect is that only one "auto-close" application can be open at one time. You should always  make your application auto-close, to help conserve memory and other resources, unless it's providing special functionality to other applications (like the built-in Calculator or Styles application).

Q How do I create my own class of binary object? 

To get a binary object of your own class, you first need to create a binary object, then change its class to your own. The easiest way to do this is to create a string that's the same length as your intended binary object and then change (coerce) the class of this new object to your own class. You can use the string class as your basic binary object.

Suppose you wanted to have a binary class called CharID for an ID consisting of four ASCII characters. You could write a NewID function in your ProjectData file that would create the object and optionally initialize it, like this:

// Define a constant for a default CharID object. This constant
// can be cloned at run time. kDefaultCharIDObj will be a CharID
// object with 4 bytes that are set to 0x00.
DefConst('kDefaultCharIDOBj, SetClass(SetLength("", 4),

// CharString is a string of 4 characters or nil.
NewCharID := func(CharString)
	// Create a binary object of the correct length.
	local newObj := Clone(kDefaultCharIDObj);
	// Optionally initialize it.
	if CharString then
	for i := 0 to 3 do
		StuffChar(newObj, i, CharString[i]);
	// Return the new object.

To see this code in action, you can type it into the Inspector window in the Newton Toolkit and evaluate it. Note that you cannot use DefConst in the Inspector since it's a compile-time function. Just substitute the second argument in the DefConst function for kDefaultCharIDObj in the function to evaluate it. Then you can try things like this:
x := :NewCharID(nil);
#440DD01 <CharID, length 4>
ExtractChar(x, 2);
#6 $\00
x := NewCharID("abcd");
#4410FC9 <CharID, length 4>
ExtractChar(x, 2);
#636 $c
ExtractByte(x, 2);
#18C 99

Q What is your favorite color? 

Llama fur beige.

Q In my application I have a clPictureView that can display a variable number of pictures. Right now I create a bunch of picture slots in my application and then make another slot at run time that is an array of those items. There must be an easier way. 

You're right; there is an easier way. You can use the GetPictAsBits function in your ProjectData file to read in the bitmaps. Note that you'll first have to open the resource file that contains the pictures.

// Open the resource file that contains the pictures.
// Assumes the file "Pictures" exists in the project folder.
r := OpenResFileX("Pictures");

// Get an array of pictures.
myPictures := [
	GetPictAsBits("TARDIS", nil),
	GetPictAsBits("Planet", nil)

// Now close the resource file.

Once you have the myPictures array, you can create a slot of type Evaluate and just type "myPictures" in the editor for the slot. Then you can use SetValue to set the icon slot of the clPicture view to one of the elements of the array.

Q How do I put my own default person in the fax information slip? 

You can set up a default person in your SetupRoutingSlip method, which is called before the fax slip is shown. The argument to that method is used to set up the particular routing slip. In the case of a fax slip, there's a slot called "alternatives" which is an array of cardfile entries for the possible people to fax to. If there's just one entry, that's the person. The fax number will be set from the cardfile entry. So your SetupRoutingSlip method would look like this:

	// Check for a fax.
	if fields.category = 'faxSlip then
	fields.alternatives := SmartCFQuery("Llama");
	// Do other stuff here, like put a title for the out box.

Note that the fields.category is set to the same value you set in the routeSlip slot of a frame in your application's entry in the global routing frame. The SmartCFQuery function returns an array of cardfile entries that have strings starting with the string passed in.

Q I noticed that every soup entry has a _uniqueID slot. Just how unique is it? 

The _uniqueID slot is only unique within that soup on that particular store. The ID will never be reused in that soup on that store. However, it's not necessarily unique across stores (say, RAM and a PCMCIA card).

Q What is the ground velocity of an unladen llama climbing a 5% grade? 

What do you mean -- Mexican or Venezuelan?

The llama is Thanks Have more questions?


Community Search:
MacTech Search:

Software Updates via MacUpdate

Google Chrome 54.0.2840.71 - Modern and...
Google Chrome is a Web browser by Google, created to be a modern platform for Web pages and applications. It utilizes very fast loading of Web pages and has a V8 engine, which is a custom built... Read more
HoudahSpot 4.2.6 - Advanced file-search...
HoudahSpot is a powerful file search tool. Use HoudahSpot to locate hard-to-find files and keep frequently used files within reach. HoudahSpot will immediately feel familiar. It works just the way... Read more
Yummy FTP Pro 1.11.11 - $29.99
Yummy FTP Pro is an advanced Mac file transfer app which provides a full-featured professional toolkit combined with blazing speeds and impeccable reliability, so whether you want to transfer a few... Read more
Shimo - VPN client – for everyon...
Shimo is the most versatile VPN client for OS X and it enables really everybody to master secure network. It supports more protocols than any other VPN application out there! CiscoVPN, AnyConnect,... Read more
Dash 3.4.0 - Instant search and offline...
Dash is an API documentation browser and code snippet manager. Dash helps you store snippets of code, as well as instantly search and browse documentation for almost any API you might use (for a full... Read more
AirRadar 3.1.9 - $9.95
With AirRadar, scanning for wireless networks is now easier and more personalized! It allows you to scan for open networks and tag them as favourites or filter them out. View detailed network... Read more
Printopia 2.1.22 - Share Mac printers wi...
Run Printopia on your Mac to share its printers to any capable iPhone, iPad or iPod Touch. Printopia will also add virtual printers, allowing you to save print-outs to your Mac and send to apps.... Read more
SteerMouse 5.0 - Powerful third-party mo...
SteerMouse is an advanced driver for USB and Bluetooth mice. It also supports Apple Mighty Mouse very well. SteerMouse can assign various functions to buttons that Apple's software does not allow,... Read more
Alarm Clock Pro 10.2.5 - $19.95
Alarm Clock Pro isn't just an ordinary alarm clock. Use it to wake you up in the morning, send and compose e-mails, remind you of appointments, randomize the iTunes selection, control an internet... Read more
Cocktail 10.1 - General maintenance and...
Cocktail is a general purpose utility for macOS that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more

Latest Forum Discussions

See All

Game of Dice is now available on Faceboo...
After celebrating its anniversary in style with a brand new update, there’s even more excitement in store for Game of Dice has after just being launched on Facebook Gameroom. A relatively new platform, Facebook Gameroom has been designed for PC... | Read more »
4 addictive clicker games like Best Fien...
Clickers are passive games that take advantage of basic human psychology to suck you in, and they're totally unashamed of that. As long as you're aware that this game has been created to take hold of your brain and leave you perfectly content to... | Read more »
Smile Inc. Guide: How not to die on the...
As if Mondays weren't bad enough, at Smile Inc. you have to deal with giant killer donuts, massive hungry staplers, and blasting zones. It's not exactly a happy, thriving work environment. In fact, you'll be lucky to survive the nine to five.... | Read more »
Oh...Sir! The Insult Simulator (Games)
Oh...Sir! The Insult Simulator 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: | Read more »
WitchSpring2 (Games)
WitchSpring2 1.27 Device: iOS Universal Category: Games Price: $3.99, Version: 1.27 (iTunes) Description: This is the story of Luna, the Moonlight Witch as she sets out into the world. This is a sequel to Witch Spring. Witch Spring 2... | Read more »
4 popular apps getting a Halloween makeo...
'Tis the season for all things spooky. So much, so, in fact, that even apps are getting into the spirt of things, dressing up in costume and spreading jack o' lanterns all about the place. These updates bring frightening new character skins, scary... | Read more »
Pokémon GO celebrates Halloween with can...
The folks behind Pokémon GO have some exciting things planned for their Halloween celebration, the first in-game event since it launched back in July. Starting October 26 and ending on November 1, trainers will be running into large numbers of... | Read more »
Best Fiends Forever Guide: How to collec...
The fiendship in Seriously's hit Best Fiends has been upgraded this time around in Best Fiends Forever. It’s a fast-paced clicker with lots of color and style--kind of reminiscent of a ‘90s animal mascot game like Crash Bandicoot. The game... | Read more »
5 apps for the budding mixologist
Creating your own cocktails is something of an art form, requiring a knack for unique tastes and devising interesting combinations. It's easy to get started right in your own kitchen, though, even if you're a complete beginner. Try using one of... | Read more »
5 mobile strategy games to try when you...
Strategy enthusiasts everywhere are celebrating the release of Civilization VI this week, and so far everyone seems pretty satisfied with the first full release in the series since 2010. The series has always been about ultra-addictive gameplay... | Read more »

Price Scanner via

Macs’ Superior Enterprise Deployment Cost Eco...
IBM’s debunking of conventional wisdom and popular mythology about the relative cost of using Apple Mac computers as opposed to PCs running Microsoft Windows at the sixth annual Jamf Nation User... Read more
12-inch WiFi Apple iPad Pros on sale for $50-...
B&H Photo has 12″ WiFi Apple iPad Pros on sale for $50-$70 off MSRP, each including free shipping. B&H charges sales tax in NY only: - 12″ Space Gray 32GB WiFi iPad Pro: $749 $50 off MSRP -... Read more
Apple refurbished 12-inch 128GB iPad Pros ava...
Apple has Certified Refurbished 12″ Apple iPad Pros available for up to $160 off the cost of new iPads. An Apple one-year warranty is included with each model, and shipping is free: - 32GB 12″ iPad... Read more
Apple refurbished iPad minis and iPad Air 2s...
Apple recently dropped prices on several Certified Refurbished iPad mini 4s and 2s as well as iPad Air 2s. An Apple one-year warranty is included with each model, and shipping is free: - 16GB iPad... Read more
MacHTTP-js Preview Full-featured Web Server f...
MacHTTP.Org has released MacHTTP-js Preview for macOS, a full-featured Web server for 21st Century desktops and servers. MacHTTP-js is a modern take on the classic stand-alone, desktop computer Web... Read more
Samsung Galaxy Tab A 10.1 with S Pen Makes US...
Samsung Electronics America, Inc. has announced the release of the Galaxy Tab A 10.1 with S Pen in a highly mobile, lightweight tablet. “With an embedded S Pen, consumers can discover more ways to... Read more
13-inch 2.5GHz MacBook Pro (Apple refurbished...
Apple has Certified Refurbished 13″ 2.5GHz MacBook Pros available for $829, or $270 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.5GHz MacBook Pros... Read more
27-inch iMacs on sale for up to $220 off MSRP
B&H Photo has 27″ Apple iMacs on sale for up to $200 off MSRP including free shipping plus NY sales tax only: - 27″ 3.3GHz iMac 5K: $2099 $200 off MSRP - 27″ 3.2GHz/1TB Fusion iMac 5K: $1899.99 $... Read more
13-inch 2.5GHz MacBook Pro available for $927...
Overstock has the 13″ 2.5GHz MacBook Pro available for $926.99 including free shipping. Their price is $172 off MSRP. Read more
Apple refurbished 2015 13-inch MacBook Airs a...
Apple has Certified Refurbished 2015 13″ MacBook Airs available starting at $759. An Apple one-year warranty is included with each MacBook, and shipping is free: - 2015 13″ 1.6GHz/4GB/128GB MacBook... Read more

Jobs Board

Security Data Analyst - *Apple* Information...
…data sources need to be collected to allow Information Security to better protect Apple employees and customers from a wide range of threats.Act as the subject Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 52812872 Houston, Texas, United States Posted: Oct. 18, 2016 Weekly Hours: 40.00 **Job Summary** As an Apple Solutions Read more
Lead *Apple* Solutions Consultant - Apple (...
# Lead Apple Solutions Consultant Job Number: 52812906 Houston, Texas, United States Posted: Oct. 18, 2016 Weekly Hours: 40.00 **Job Summary** The Lead ASC is an Read more
*Apple* Retail - Multiple Positions- Towson,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.