TweetFollow Us on Twitter

TCL and VA 2
Volume Number:11
Issue Number:11
Column Tag:Getting Started

TCL and Visual Architect, Part 2

By Dave Mark, MacTech Magazine Regular Contributing Author

Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.

In last month’s column, we took a look at Symantec’s latest development environment, including the Symantec Project Manager and Visual Architect. Following the example presented in Chapter 14 of the Symantec C++ User’s Guide, we used Visual Architect to generate source code to implement the single, default view named Main. We then returned to the Symantec Project Manager and compiled the code into a standalone application (See Figure 1).

Figure 1. The window that appeared when we ran last month’s program.

This month, we’re going to add a second view to our program. This second view will be a dialog that allows you to type a number into an editable text field. When you press the Beep button, the dialog will beep the specified number of times.

Adding a Second View

Go into the Button ƒ folder you created last month and double-click on the file Button.Π to launch the Symantec Project Manager. When the project window appears, double click on the file name Visual Architect.rsrc to bring up Visual Architect. This is where we’ll add the second view.

• Select New View from the View menu.

• When asked to name the new view, type BeeperDialog and make sure Modal Dialog is selected from the View Kind: popup menu (Figure 2), then press the OK button.

Figure 2. Naming the new view.

The name BeeperDialog will be used as the basis for a new class, called CBeeperDialog. The next time you select Generate from Visual Architect’s Symantec Project Manager menu, Visual Architect will generate the files CBeeperDialog.cp, CBeeperDialog.h, x_CBeeperDialog.cp, and x_CBeeperDialog.h. First, we’ll add a few items to this dialog and then add a button to our Main view that brings up the dialog.

Once you press the OK button, a view window will appear with the name BeeperDialog.

• Select View Info from the View menu.

A view info window titled Dialog Info will appear (Figure 3). The view info window, which looks a lot like a ResEdit or Resorcerer WIND templat, lets you customize the look of your new dialog window.

Figure 3. The view info window for the BeeperDialog view.

• Click on the movable modal dialog icon (the second from the right) or type “5” in the procID: field.

• Click on the OK button to dismiss the dialog.

Your next step is to add some items to the dialog.

• Click on the Tools menu and drag down until the tool palette outline appears.

When you release the mouse button, the Tools palette window will appear (Figure 4). Take a few minutes to play with the items in this palette. In the top row, you have the selection tool, the text tool, and the editable text tool. The second row features the pushbutton tool, the radio button tool, and the check box tool. The third row features the popup menu, icon, and PICT tools. We’ll get into the rest of the tools in a future column. For now, try creating items based on the tools in the first three rows. Click on a tool, then click and drag in the BeeperDialog view window. Once you get a feel for these tools, select the selection tool (the arrow), then click on each of the items you added and press the delete key. Keep on deleting until the BeeperDialog window is empty again.

Figure 4. The Tools palette.

Now let’s add the items that make up the Beeper dialog. We’ll add four items: an OK button, a Cancel button, a static text label, and an editable text field for entering the number of beeps. We’ll start with the OK and Cancel buttons.

• Click on the button tool in the palette window.

• Click on the BeeperDialog window and drag out an OK button.

As you drag, keep your eye on the lower left corner of the window. Notice that the two coordinates listed reflect the upper left and lower right corners of the button. I made my button 80 pixels wide and 20 pixels tall with an upper left corner of (200,42).

• Click on the BeeperDialog window and drag out a Cancel button.

My Cancel button was also 80 pixels wide and 20 pixels tall. This time, the upper left corner was (107,42). Notice that VA automatically filled in the text OK for the first button and Cancel for the second button. Nice feature! Let’s change the OK to say Beep.

• Double-click on the OK button (or click on it and select Pane Info... from the Pane menu) to bring up the Pane Info window.

• Click on the triangle to the left of the class name CControl, revealing the CControl data members.

• Change contrlTitle from OK to Beep and close the Pane Info window.

Notice that the button’s name changed from OK to Beep. Now let’s add the static text label.

• Click on the static text tool (the big letter A) in the palette window.

• Click in the BeeperDialog window and type the text Number of times to beep:

• Click outside the static text to stop entering text, then click on the static text to select it. Drag it to a satisfactory position in the BeeperDialog window.

I dragged my static text so its upper-left corner was at (23,13). You might want to use the arrow keys to move the static text around the window, 4 pixels at a time. Hold down the command (Apple) key to get the arrow keys to move 1 pixel at a time. Experiment with the Shift and option keys which let you resize an item by 1 or 4 pixels in any of 4 directions.

Finally, let’s add an editable text field.

• Click on the editable text tool (to the right of the static text tool) in the palette window.

• Click on the BeeperDialog window and drag out an editable text area.

Mine had and upper left corner of (205,13) and a lower right of (280,29). Once your items are in place, resize the dialog view so it comfortably encloses the dialog items. To do that, click on the handle in the lower-right corner of the grey rectangle embedded in the BeeperDialog window. Drag the handle to its new position. I dragged mine to (293,75). The finished Beeper dialog is shown in Figure 5.

Figure 5. The finished Beeper dialog with the Beep button selected.

If you like, you can try the dialog out by selecting Try Out from the View menu. Click on one of the buttons or select Close from the File menu to close the Try Out window once you are done admiring your handiwork.

Our next task is to tell VA that our edit-text field is designed to hold only integers (as opposed to any old text).

• Click on the editable text field.

• Select Class from the Pane menu, then select CIntegerText from the submenu that appears.

Next, we need to define a new command that will get sent when the Beep button is clicked. Right now the Beep button’s command is set to cmdOK. To see that, double-click on the Beep button to bring up the Pane Info window, then click on the CButton triangle. Take a look at the Command popup menu. If you click on it, you’ll find a whole bunch of commands, all of them built into the TCL. Since there is no Beep command, we’ll need to define it ourselves, then set the Beep button to send it when clicked.

• Close the Beep Pane Info window, if you opened it to look at the Command popup.

• With the BeeperDialog window frontmost, select Commands... from the Edit menu.

• When the Commands window appears, select New Command from the Edit menu.

• Type cmdBeep in the uppermost editable text field.

• Select CBeeperDialog from the In Class: popup menu.

This tells VA which class this command belongs to.

• Select Call from the Do: popup menu.

This tells VA what you want done in response to this command. You could do nothing, you could ask VA to call a function, or you could open another view. In our case, we’ve asked VA to call a CBeeperDialog member function. We’ll get to that function in a bit.

Notice that VA automatically generated the command number 512. This is not particularly important. You’ll use the constant cmdBeep instead of 512, so there’s no reason to memorize your command numbers.

• Click on the OK button to dismiss the Commands dialog.

As you’ve probably guessed, your next step is to associate the cmdBeep command with the Beep button.

• Double-click on the Beep button to bring up the Pane Info window.

• Click on the triangle to the left of the class CButton, revealing the Command popup menu.

• Select cmdBeep from the Command popup (Figure 6).

• Close the Pane Info window.

Figure 6. The Pane Info window associated with the Beep button.
Notice that the Command popup has been set to cmdBeep.

You may have noticed that the Beep button no longer has the bold, rounded rectangle around it, specifying it as the default button, the button pressed when the user hits return. This changed because VA specifies the cmdOK command as the default. Let’s fix that.

• Select Set Default Command from the View menu.

• Select cmdBeep from the Command popup menu, then press OK.

Notice that the bold, rounded rectangle is back around the Beep button (Figure 7).

Figure 7. The BeeperDialog window, once cmdBeep is set as the default command.

We are almost done! Now we have to add a button to the Main view that brings up the Beeper dialog.

• Close the BeeperDialog view window.

• Double-click on Main in the view list window to bring up the Main view window.

• Click on the grow box in the lower left corner of the Main view window and drag down about 50 pixels.

• Click on the handle in the lower right corner of the grey bounding rectangle inside the window and drag it down about 50 pixels.

You’ve just resized the Main view to be about 50 pixels taller, making room for a new pushbutton.

• Click on the pushbutton tool (under the arrow) in the palette window.

• Click in the Main view window and drag out a new button below the PICT.

• Before you click off the button, type the word Beeper...

The button will now bear the name Beeper....

• Double-click on the Beeper... button, bringing up the button’s Pane Info window.

• Click on the triangle next to the class name CButton to reveal the CButton data members.

• Choose Other... from the top of the Command popup menu.

• When the Commands dialog appears, choose New Command from the Edit menu.

• Enter the command name cmdBeeperDialog.

• Choose CMain from the In Class: popup menu to let VA know you want the new command associated with the CMain class.

• Choose Open from the Do: popup menu.

• Choose CBeeperDialog from the View: popup menu.

We’ve just told VA that we want this new command (cmdBeeperDialog) to open the CBeeperDialog view (See Figure 8).

Figure 8. The Commands window for the new cmdBeeperDialog command.

• Click on the OK button.

Now we’ve told VA to associate this command with the Beeper... button we just created.

• Close the button’s Pane Info window to return to the Main view window (Figure 9).

Figure 9. My Main view with my new Beeper... button.

If you like, select Try Out from the View menu and take your new version of Main for a spin. Note that we haven’t put the code in place that gets called when the Beeper... button is pressed, but the scrollbars should work and the button should highlight when clicked.

Our next step is to ask VA to regenerate our source code, reflecting the new panes and commands we’ve defined.

• Select Generate... from the Symantec Project Manager menu (diamond shaped menu to the right of the Windows menu).

• When prompted to save your changes, click OK.

VA will update your existing code base. If you selected Generate All..., VA would have replaced your existing code base. Be sure you understand this difference!

Adding the New Code

Our last step is to add a few lines of code to bring all our new interface elements together.

• Return to the Symantec Project Manager.

• In the project window, click on the triangle to the left of the folder labeled Source. Skip this step if the Source folder was already opened.

• Double click on the file name “CBeeperDialog.cp”.

• Add this code to the end of CBeeperDialog.cp:

void CBeeperDialog::DoCmdBeep()
{
 long n;
 n = fBeeperDialog_Edit15->GetIntValue();
 for ( long i=0; i<n; i++ )
 SysBeep( 20 );
}

This code references the data member fBeeperDialog_Edit15. When VA generates your code, it makes up a constant for each of your dialog items. You can find these definitions in the file BeeperDialogItems.h. Here’s the constants that were generated for my version of Beeper:

enum
{
 BeeperDialog_Begin_,
 kBeeperDialog_Butn12 = 1,
 kBeeperDialog_Butn12ID = 2049L,
 kBeeperDialog_Butn13 = 2,
 kBeeperDialog_Butn13ID = 2050L,
 kBeeperDialog_Stat14 = 3,
 kBeeperDialog_Stat14ID = 2051L,
 kBeeperDialog_Stat17 = 4,
 kBeeperDialog_Stat17ID = 2053L,
 kBeeperDialog_Edit15 = 5,
 kBeeperDialog_Edit15ID = 2052L,
 BeeperDialog_End_
};

The member function GetIntValue() retrieves the value from the field that calls it (in this case, the editable text field), translates the value into an integer, and returns it. The loop uses this value to beep the specified number of times.

• Go to the top of the file and remove the comment characters (//) at the beginning of the line:

// #include   “AppCommands.h”

You’ll need to do this last step whenever your view includes at least 1 command.

• Close CBeeperDialog.cp.

That’s it! When you run the program, the Main view should appear, featuring a brand new button (Figure 10).

Figure 10. The Main view, with the Beeper... button pressed.

Press the Beeper... button. The Beeper Dialog will appear.
Type a number in the text field and press the Beep button. Happy?

Figure 11. Pressing the Beep button.

Till Next Month...

Next month, we’ll go back to PowerPlant. I just got my copy of CW7, and I’m anxious to dig into it. Hope you got your upgrades, too. See you next month...

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

BBEdit 11.0.3 - Powerful text and HTML e...
BBEdit is the leading professional HTML and text editor for the Mac. Specifically crafted in response to the needs of Web authors and software developers, this award-winning product provides a... Read more
Microsoft Office Preview 15.8 - Popular...
Welcome to the new and modern Microsoft Office for Mac. You will receive regular updates automatically until the official release in the second half of 2015. With the redesigned Ribbon and your... Read more
Yosemite Cache Cleaner 9.0.5 - Clear cac...
Yosemite Cache Cleaner is an award-winning general purpose tool for OS X. YCC makes system maintenance simple with an easy point-and-click interface to many OS X functions. Novice and expert users... Read more
ExpanDrive 4.3.2 - Access cloud storage...
ExpanDrive builds cloud storage in every application, acts just like a USB drive plugged into your Mac. With ExpanDrive, you can securely access any remote file server directly from the Finder or... Read more
RapidWeaver 6.0.8 - Create template-base...
RapidWeaver is a next-generation Web design application to help you easily create professional-looking Web sites in minutes. No knowledge of complex code is required, RapidWeaver will take care of... Read more
Artlantis Studio 5.1.2.7 - 3D rendering...
Artlantis Studio is a unique and ideal tool for performing very high resolution rendering easily and in real time. The new FastRadiosity engine now lets you compute images in radiosity-even in... Read more
MacUpdate Desktop 6.0.5 - Search and ins...
MacUpdate Desktop 6 brings seamless 1-click installs and version updates to your Mac. With a free MacUpdate account and MacUpdate Desktop 6, Mac users can now install almost any Mac app on macupdate.... Read more
BitTorrent Sync 2.0.82 - Sync files secu...
BitTorrent Sync allows you to sync unlimited files between your own devices, or share a folder with friends and family to automatically sync anything. File transfers are encrypted. Your information... Read more
Google Drive 1.20 - File backup and shar...
Google Drive is a place where you can create, share, collaborate, and keep all of your stuff. Whether you're working with a friend on a joint research project, planning a wedding with your fiancé, or... Read more
Simon 4.0.3 - Monitor changes and crashe...
Simon monitors websites and alerts you of crashes and changes. Select pages to monitor, choose your alert options, and customize your settings. Simon does the rest. Keep a watchful eye on your... Read more

New Publisher Allstar Games Heads West w...
Allstar Games has announced its first mobile title designed for western audiences, Allstar Heroes. The game will be a massive online battle arena (MOBA) that offers dozens of heroes for you to collect and pit against your opponents. As each hero has... | Read more »
RAD Boarding Review
RAD Boarding Review By Jennifer Allen on March 5th, 2015 Our Rating: :: NEARLY RADUniversal App - Designed for iPhone and iPad RAD Boarding isn’t quite one of the greats, but it has potential.   | Read more »
Presenting the International Mobile Gami...
11th Annual International Mobile Gaming Awards ceremony, hosted by actress Allison Haislip, gathered mobile game developers and publishers from around the world. They chose 13 winners out of the 93 nominations. British studio USTWO won the the Grand... | Read more »
AG Drive Review
AG Drive Review By Tre Lawrence on March 5th, 2015 Our Rating: :: FUTURISTIC STREET RACING.Universal App - Designed for iPhone and iPad Futuristic racing… interstellar style.   | Read more »
GDC 2015 – Nightmare Guardians is an Int...
GDC 2015 – Nightmare Guardians is an Interesting Hybrid of MOBA and Lane Defense Posted by Rob Rich on March 5th, 2015 [ permalink ] I have to say that lane defense (i.e. | Read more »
Overkill 3 Review
Overkill 3 Review By Tre Lawrence on March 5th, 2015 Our Rating: :: WHO'S NEXT?Universal App - Designed for iPhone and iPad Cover system gameplay in the third-person.   Developer: Craneballs Price: Free Version Reviewed: 1.1.6... | Read more »
Warner Bros. Interactive Entertainment A...
Warner Bros. has some exciting games coming down the pipe! | Read more »
GDC 2015 – Star Trek Timelines will Prob...
GDC 2015 – Star Trek Timelines will Probably Make Your Inner Trekkie Squeal With Glee Posted by Rob Rich on March 4th, 2015 [ permalink ] Any popular fictional universe has its fair share of fan fiction – where belo | Read more »
Protect Yourself from an Onslaught of Ca...
Surprise Attack Games has announced a Cat-astrophic new physics puzzler called Fort Meow! In the game, a young girl named Nia finds her grandfather’s journal which triggers an all mighty feline attack! Why do the cats want the journal? Who knows,... | Read more »
GDC 2015 – Jelly Reef will be Game Oven’...
GDC 2015 – Jelly Reef will be Game Oven’s Last Hurrah, and it Seems like a Good Note to Go Out on Posted by Rob Rich on March 4th, 2015 [ permalink ] It’s sad knowing that Game Oven ( | Read more »

Price Scanner via MacPrices.net

Roundup of MacBook Air sale prices, models up...
B&H Photo has MacBook Airs on sale for up to $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 11″ 128GB MacBook Air: $799 100 off MSRP - 11″ 256GB MacBook Air: $999 $100... Read more
New Firstrade Mobile App Enables On-The-Go Tr...
Firstrade Securities Inc. has announced its new mobile app, which gives investors immediate access to the company’s trading platform on all mobile devices. The app was developed in-house and was... Read more
Sonnet Introduces USB 3.0 + eSATA Thunderbolt...
Sonnet has announced the launch of its new USB 3.0 + eSATA Thunderbolt Adapter for easy connectivity to USB 3.0 devices and eSATA storage, and USB 3.0 + Gigabit Ethernet Thunderbolt Adapter for easy... Read more
Apple restocks refurbished 27-inch 5K iMacs f...
The Apple Store has restocked Apple Certified Refurbished 27″ 3.5GHz 5K iMacs for $2119 including free shipping. Their price is $380 off the cost of new models, and it’s the lowest price available... Read more
Free Clean Reader Mobile App Hides Swear Word...
The new Clean Reader app, now available in the Apple App Store and Google Play, delivers the opportunity of reading any book without being exposed to profanity. By selecting how clean they want their... Read more
Kinsa Launches “Groups” App to Monitor Illnes...
Kinsa, makers of the first FDA approved app-enabled smartphone thermometer thst won the 2013 Cleveland Clinic Medical Innovation Grand Prize and recently appeared in Apple’s “Parenthood” TV... Read more
iPad: A More Positive Outlook – The ‘Book Mys...
It’s good to hear someone saying positive things about the iPad. I’ve been trying to bend my mind around how Apple’s tablet could have gone from zero to bestselling personal computing device on the... Read more
Mac Pros on sale for up to $279 off MSRP
Amazon has Mac Pros in stock and on sale for up to $279 off MSRP. Shipping is free: - 4-Core Mac Pro: $2725.87, $273 off MSRP (9%) - 6-Core Mac Pro: $3719.99, $279 off MSRP (7%) Read more
Sale! 13-inch Retina MacBook Pros for up to $...
B&H Photo has 13″ Retina MacBook Pros on sale for up to $205 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.6GHz/128GB Retina MacBook Pro: $1219.99 save $80 - 13″ 2.... Read more
Another Tranche Of IBM MobileFirst For iOS Ap...
IBM has announced the next expansion phase for  its IBM MobileFirst for iOS portfolio, with a troika of new apps to address key priorities for the Banking and Financial Services, Airline and Retail... Read more

Jobs Board

*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
Position Opening at *Apple* - Apple (United...
…Summary** As a Specialist, you help create the energy and excitement around Apple products, providing the right solutions and getting products into customers' hands. You Read more
Position Opening at *Apple* - Apple (United...
**Job Summary** The Apple Store is a retail environment like no other - uniquely focused on delivering amazing customer experiences. As an Expert, you introduce people Read more
*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.