Tk 8.0 for Macintosh

by Ray Johnson
Sun Microsystems Laboratories
rjohnson@eng.sun.com

SCCS: @(#) README 1.30 97/11/20 22:06:57

1. Introduction
---------------

This is the README file for the Macintosh version of the Tk
extension for the Tcl scripting language.  The file consists of
information specific to the Macintosh version of Tcl and Tk.  For more
general information please read the README file in the main Tk
directory.

2. What's new?
-------------

Native Look & Feel!!!  We now try really hard to support the 
Macintosh Look & Feel with Tcl/Tk 8.0.  We aren't finished but
it look pretty good.  Let me know what are the most "un-mac like"
problems and I'll fix them as quickly as I can.

The button, checkbutton, radiobutton, and scrollbar widgets actually
use the Mac toolbox controls.  This means that they will track the
look&feel if you use extension that change the appearance of
applications (like Aaron.)  We also use "system" colors so the default
backgrounds etc. will also change colors.  We plan to support this
feature - so let me know if something doesn't work quite right.
Unfortunantly, we are not able to change the colors of buttons under
MacOS 8.  We are working on a solution to this.  
In the meantime, if you really must have colored buttons, turn off the 
"System-wide platinum appearance" option in the Appearance Control Panel,
and you will get the System 7, colorable, buttons back.

We also now support native menus!  By using the new -menu option
on toplevels you can have a menubar that is cross platform.  You
can also place Tk menus in the Apple and Help menus!  Check out
the documentation for more details.  Syd Polk <icepick@eng.sun.com> is
the author of the new menu code.  Feel free to contact him if you
have questions or comments about the menu mechanism.

The "tk_messageBox" command on the Macintosh is now much more
mac-like.  I'll probably still need to adjust this more - but it
looks a hell of alot better than it did before.

I've also added a command that allows you to get more native window
styles.  However, we have yet to decide on a cross platform solution
to the problem of varying window styles.  None the less, I thought
it would be use full to add the capability in an unsupported means
to tide you over until a better solution is available.  The command
is called "unsupported1".  It can be used in the following way:

	toplevel .foo; unsupported1 style .foo zoomDocProc

The above command will create a document window with a zoom box.
Type "unsupported1 style . ???" to get a list of the supported
styles.  The command works like "wm overrideredirect" - you must
make the call before the window is mapped.

As always - report the bugs you find - including asthetic ones
in the look & feel of widgets.

3. Mac specific features
------------------------

There are several features or enhancements in Tk that are unique to 
the Macintosh version of Tk.  Here is a list of those features and
pointers to where you can find more information about the feature.

* The menu command has special rules for accessing the Macintosh
  Apple and Help menus.  See the menu.m man page for details.

* If you have the special Tcl function "tkAboutDialog" defined, it
  will be called instead of displaying the default About Box in the
  console or other parts of the Wish application.  See below for
  details.

* In addition to the standard X cursors, the Mac version of Tk will
  let you use any Mac cursor that is named and installed in your
  application.  See the GetCursor.3 man page for details.

* The wish application has a couple of hooks to know about the exit,
  "open document" and "Do Script"  Mac High Level events.  
  See below for details.

* The command unsupported1 will allow you to set the style of new
  toplevel windows on the Macintosh.  It is not really supported.
  See below for details.

* In addition to the standard built-in bitmaps that Tk supports, the
  Mac version of Tk allows you to use several Mac specific icons.  See
  the GetBitmap.3 man page for a complete list.

* The send command does not yet work on the Macintosh.  We hope to
  have it available in Tk 8.1.

* The -use and -container options almost work. The focus bugs that
  were in Tk8.0 final have been fixed.  But there are still some
  known bugs that cause some major problems.  Be careful, if you
  decide to use these features.  (See bugs.doc for details.)

4. The Distribution
-------------------

Macintosh Tk is distributed in three different forms.  This 
should make it easier to only download what you need.  The 
packages are as follows:

mactk8.0.sea.hqx

    This distribution is a "binary" only release.  It contains an
    installer program that will install a 68k, PowerPC, or Fat
    version of the "Wish" application.  In addition, in installs
    the Tcl & Tk libraries in the Extensions folder inside your
    System Folder.  (No "INIT"'s or Control Pannels are installed.)

mactcltk-full-8.0.sea.hqx

    This release contains the full release of Tcl and Tk for the
    Macintosh plus the More Files package on which Macintosh Tcl and
    Tk rely.

mactk-source-8.0.sea.hqx

    This release contains the complete source to Tk for the Macintosh
    In addition, Metrowerks CodeWarrior libraries and project files
    are included.  However, you must already have the More Files
    package to compile this code.

5. Documentation
----------------

Two books are currently available for Tcl.  Both provide a good
introduction to the language.  It is a good way to get started
if you haven't used the language before:

    Title:			Tcl and the Tk Toolkit
    Author:			John K. Ousterhout
    Publisher:			Addison-Wesley
    ISBN:			0-201-63337-X

    Title:			Practical Programming in Tcl and Tk
    Author:			Brent Welch
    Publisher:			Prentice Hall
    ISBN:			0-13-182007-9

The "doc" subdirectory contains reference in documentation
in the "man" format found on most UNIX machines.  Unfortunately,
there is not a suitable way to view these pages on the Macintosh.  
A version suitable for viewing on the Macintosh has yet to be
developed.  We are working are having better documentation for
the Macintosh platform in the future.  However, if you have WWW 
access you may access the Man pages at the following URL:

	http://sunscript.sun.com/man/tcl8.0/contents.html

Other documentation and sample Tcl scripts can be found at
the Tcl ftp site: 

	ftp://ftp.neosoft.com/tcl/

The internet news group comp.lang.tcl is also a valuable
source of information about Tcl.  A mailing list is also
available (see below).

6. Compiling Tk
---------------

In order to compile Macintosh Tk you must have the 
following items:

	CodeWarrior Pro 1 or higher (CodeWarrior release 9 or higher can work
		and we have project files, but we are depricating support)
	Mac Tcl 8.0 (source)
	  (which requires More Files 1.4.2 or 1.4.3)
	Mac Tk 8.0 (source)

The project  files included with the Mac Tcl source should work 
fine.  The only thing you may need to update are the access paths.
As with Tcl, there is something in the initial release of the CW Pro 2
linker that rendersthe CFM68K version of Wish very unstable.  I am
working with Metrowerks to resolve the issue.

Special notes:

* Check out the file bugs.doc for information about known bugs.

* We are starting to support the new Appearance Manager that shipped
  with MacOS 8.  At this point, the only feature that we are using is 
  the API to Iconify windows (so that wm iconify will work).   However,
  as of the release of Tk8.0p1, the SDK from Apple is still in Beta, so 
  we cannot ship it.  So support for the Appearance Manager is turned off
  in the source version of Tk8.0p1.
  If you want to build Tk, and want to get the Appearance Manager features, 
  then need to do the following:
      1) get the SDK from Apple
      2) Uncomment the #define HAVE_APPEARANCE line in tk8.0:mac:MW_TkHeader.pch
      3) Add the Appearance.lib to tk8.0:mac:TkShells.¼, and put the include 
         directory of the SDK on your path in this project, and TkLibraries.¼.

7. About Dialog
---------------

There is now a way to replace the default dialog box for the Wish
application.  If you create the tcl procedure "tkAboutDialog" it will
be called instead of creating the default dialog box.  Your procedure
is then responsible for displaying a window, removing it, etc.  This
interface is experimental and may change in the future - tell me what
you think of it.

8. Apple Events
---------------

Tcl/Tk currently doesn't have much in the way of support for Mac
Apple Events.  There is no way to send an apple event (although you
could write an extension to do this) and no general purpose way to
recieve apple events.  However, there are a couple of hooks for
dealing with some of the standard apple events.

    exit - Generally, Tcl cleans up after it self when you exit.
	However, your application may want to do application specifc
	cleanup like saving a users data.  To do this you can rename
	the exit command to something else.  Define your own exit
	command to do whatever clean up you like and then call the
	origional exit command.  For example,

		rename exit __exit
		proc exit {} {
		  # Do your clean up hear
		  __exit
		}

	Both incoming quit events and hitting the Quit menu item
	will call the exit command.  However, don't expect you can
	abort the exit.  Tk may exit anyway if the exit command it
	calls does not actually quit the application.

    open - The other apple event Tk supports is the open event.  The
	open event is sent to Tk if, for example, you drop a file on
	the Wish icon.  If you define a Tcl procedure with the name
	"tkOpenDocument" it will be invoked on any Open Document
	events that the application receives.  The a list of paths to
	the various documents will be passed to the Tcl function.
	Here is an example,

		proc tkOpenDocument args {
		  foreach file $args {
		    # Deal with passed in file path
		  }
		}

	Note: This isn't every thing you need to do to make your
	application dropable.  You must still define a FREF resource
	that makes sense for your application domain.  (Out of the
	box, you will not be able to drop files on the Wish
	application.  See the Inside Macintosh documentation for
	details about the FREF resource.
	
    do script - This is a way for external applications to drive MacTk, or
        to recieve information from it.  From AppleScript, you can say:
        
                tell application "Wish8.0"
	            do script "console hide
	                pack [button .b1 -text {Hello world} -command exit]"
                end tell
                
        which will get Tk to run the canonical hello world application.
                
8. unsupported1
---------------

The unsupported1 command is a short term hack we made available to
allow you to set the window style of a new toplevel window.  It works 
much like the "wm overrideredirect" and "wm transient" commands in
that it must be run before the window it's being applied to is mapped.

The syntax of the command is as follows:

	unsupported1 style <window> ?style?

The <window> must be a toplevel window.  If the style is not given
then the current style for the window is returned.  If you want to set
the style you must do so before the window gets mapped for the first
time.  The possible window styles include:

	documentProc, dBoxProc, plainDBox, altDBoxProc,
	movableDBoxProc, zoomDocProc, rDocProc, floatProc,
	floatZoomProc, floatSideProc, or floatSideZoomProc

NOTE: this is an unsupported command and it WILL go away in the
future.


If you have comments or Bug reports send them to:
Jim Ingham
jingham@eng.sun.com
