1 Welcome to the ComboBox widget for Motif 1.1 or 1.2 (maybe even 2.0...)!
 
   2 This is now version 1.32.
 
   3 THERE ARE A LOT OF NEW RESOURCES AVAILABLE SO PLEASE READ THE
 
   4 DOCUMENTATION (in ComboBox_eng.dvi)!!!
 
   6 If you're in doubt, the primary source of this widget is
 
   7     ftp.informatik.rwth-aachen.de (137.226.112.172)
 
   8     The source is in: /pub/packages/ComboBox/ComboBox.tar.gz
 
   9 This is our campus server in Aachen, Germany. From outside Europe
 
  11     ftp.x.org (198.112.44.100)
 
  12     There you'll find the source in:
 
  13     /contrib/widgets/motif/ComboBox/ComboBox.tar.gz
 
  14 There are many local ftp servers that mirror the /contrib directory. Thus
 
  15 with a delay of one or two days you'll also find the source on many other
 
  18 PLEASE READ THIS INFORMATION CAREFULLY. IT ALWAYS CONTAINS THE MOST
 
  21 Whats new? (changes since the last version are marked with an asterisk)
 
  22   * Some minor changes concerning the drop down list layout have been made in
 
  23     order to correct some minor quirks.
 
  24   * Updated files for VMS users (hellooooo -- where are you?!!)
 
  25   - A real man page for use with troff/groff. It's in ComboBox.groff.
 
  26   - Some applications like GUI development tools or TclMotif were unable to
 
  27     get notice of these special resources because they were implemented
 
  28     through the core's setValues method. Thus they don't appeared in the 
 
  29     resource list because there aren't any instance variables connected to 
 
  30     them. These mirror resources instead belong to child widgets. With 1.23 
 
  31     the resource list (which can be queried by XtGetResourceList()) contains 
 
  32     entries for all mirror resources although the initial value setting is 
 
  33     always zero. But this should'nt matter. You can switch off these entries
 
  34     by setting -DDONT_LOOK_IN_THE_MIRROR when compiling ComboBox.c.
 
  35   - The selection policies XmSINGLE_SELECT and XmBROWSE_SELECT are now
 
  37   - A new resource called XmNstaticList has been added, which switches the combo
 
  38     box into a new mode with the drop down list statically displayed.
 
  39   - Support of XmNautomaticSelection (like the resource known from XmList).
 
  40   - New callbacks XmNunselectionCallback, XmNdefaultActionCallback,
 
  41     XmNmodifyVerifyCallback, XmNmotionVerifyCallback and XmNvalueChangedCallback
 
  42     added (don't know whether I forgot to mention one...).
 
  43   - New convenience function XmComboBoxClearItemSelection() for deselecting
 
  44     any selection in the combo box (if XmNselectionPolicy is XmSINGLE_SELECT).
 
  45   - New demo app called FontSel. It shows how to realize a full blown
 
  46     font selection dialog (even for scalable fonts) using combo boxes.
 
  47   - Some additional casting has been added to the source, so it seems
 
  48     now really to be ANSI compliant.
 
  49   - can be compiled with Motif 1.2. (Tested on Sun & HP yet)
 
  50   - many new resources & a callback that is called whenever the drop down
 
  51     list gets dropped down or hidden.
 
  52   - corrected a few minor typos in the header files (mis-spelled function
 
  53     prototypes) and some minor quirks in the source.
 
  54   - A FULL-BLOWN ENGLISH DOCUMENTATION (dvi file)
 
  55     If you can't process dvi files you can download a post script variant
 
  56     from ftp.informatik.rwth-aachen.de (137.226.112.172) as
 
  57     /pub/packages/ComboBox/ComboBox_eng.ps.gz 
 
  58   - The XmNitems and XmNitemCount resources can now be set at any time (not
 
  59     only when creating the ComboBox widget).
 
  60   - Corrected some minor memory leaks in the source as well as some typos and
 
  61     errors in the documentation.
 
  62   - Drag'n'Drop is now supported with Motif 1.2.
 
  63   - fvwm's handling of FocusOut events supported.
 
  66 Well - if you never heard of ComboBoxes you'll have to figure out
 
  67 yourself what these strange widgets really are. The following text
 
  68 will only explain how to include it into your own code. (Just as a little
 
  69 hint: combo boxes are well known from M$ Windoze. A combo box consists
 
  70 of a text input field with an arrow button besides it. When you click
 
  71 on the arrow button the combo box pops up a list just below its input
 
  72 area. You can now browse in it or pop it down by pressing the arrow button
 
  75 The source code is now in (wide public) use for nearly a year.
 
  76 (before this time it was tested for half a year in the Institut fuer
 
  77 Geometrie und Praktische Mathematik, where I'm working). So you get a well
 
  78 tested piece of widget magic. Please feel free to report any trouble you
 
  79 have using the ComboBox widget. But be patient - I'm just a student. In the
 
  80 meantime I've received a couple of reports and hopefully the widget now can
 
  81 be used on many well known systems as well as with Motif 1.1 and 1.2. I've
 
  82 heard of people using the ComboBox widget with Motif 2.0, because they need
 
  83 the many features... But there seems to be problems with the subclassing
 
  84 mechanism, so the sanity check CheckComboBox() fails. This check is now
 
  85 disabled if the source detects a Motif 2.0 release.
 
  87 BTW - I'm collecting picture postcards...if you have one with a nice picture of 
 
  88 the place you're living in, don't hesitate... 8-)
 
  90 1. To compile you will need at least Motif :-)
 
  91    (or :-( depending on your point of view...)
 
  92    and an *ANSI* c compiler (the code is completely ANSI -
 
  93    no more mess with the old K&R style)!
 
  94    To compile, try something like
 
  95    $ cc -DFUNCPROTO -c ComboBox.c
 
  96    this should do it's work. -DFUNCPROTO is needed because the function
 
  97    prototypes would be K&R style without it. In addition you often need
 
  98    to specify to the compiler that the source is ANSI. (-ansi with gcc)
 
 101    #include "ComboBox.h"
 
 102    at the top of your source file and create the widget just like any
 
 103    other ordinary widget. The class is xmComboBoxWidgetClass. There is
 
 104    no convenience function since it's hardly ever needed with this
 
 107    To compile the short demo:
 
 108    $ cc -DFUNCPROTO ComboBoxDemo.c -o ComboBoxDemo ComboBox.o \
 
 110    On some machines you'll need to link additional libs (like network
 
 112    Or use the makefile (first edit it accordingly to your needs):
 
 117    I don't provide a makefile for every system/compiler combination
 
 118    because this widget is intended to be placed seamless into the
 
 119    existing Motif widget set. Thus, compile it and if all is ok, then
 
 120    copy the includes to the Xm directory and the object file to a
 
 121    suitable place in your file system -- but don't even think of
 
 122    /dev/null as a good destination ;-)
 
 124    To compile the FontSel demo:
 
 125    Edit the makefile (if you haven't already done so), then do a:
 
 127    And run the Font Selector demo:
 
 130    If you also have the ButtonFace Library you may want to do a
 
 132    instead. This will use my pictural push buttons for okay, cancel and help.
 
 134 3. The ComboBox consists primarily of a XmManager descendant - the
 
 135    widget you'll get from XtCreateWidget(). This widget contains several
 
 136    more widgets as its childs: a XmTextField and some other widgets.
 
 137    You *must* not modify any resources of the TextField directly - this
 
 138    leads sooner or later to trouble. Instead all the necessary instance
 
 139    variables of the TextField are accessible through the main widget
 
 140    (the one XtCreateWidget() returned).
 
 141    There are many (convenience) functions like the ones for XmTextFields
 
 142    and XmLists to set the TextField's text, add items to the drop down
 
 143    list and and and... please see ComboBox.h for details (you know:
 
 144    the documentation is under work...)
 
 146 4. There is one special resource called "persistentDropDown". It
 
 147    defaults to "False". Its purpose it not easy to explain since that
 
 148    has to do with the way your window manager is set up. If you're
 
 149    using the explicit focus methode (that is: you move the keyboard
 
 150    focus from application to application by clicking on the top level
 
 151    window) you're lucky - don't ever think of this resource. For all
 
 152    those other people (like me): if the window manager is set up to
 
 153    give the keyboard focus to the top level window the mouse cursor
 
 154    is over you'll notice one annoying "feature". (It's really *not*
 
 155    a bug ;-) ) If you drop down the ComboBox's list (by clicking on
 
 156    the arrow right beside the text field) and move the mouse cursor
 
 157    out of the window the ComboBox resides in the list immediatly
 
 158    disappears. That happens because the ComboBox looses the keyboard
 
 159    focus. You can try to bypass that behavior by setting 
 
 160    "persistentDropDown" to "True" if you like. In the application's
 
 161    resource file a line like
 
 162    *YourApp*ComboBox.persistentDropDown: True
 
 163    should do the job. But remember: whether this will work depends
 
 164    on the window manager you're using. I have testet this with
 
 165    Silicon Graphics' 4dwm (a mwm clone).
 
 167 5. On some window managers the drop down list gets hidden as soon as
 
 168    the user moves the mouse cursor into the list. If this happens try
 
 169    to set the resource "twmHandlingOn" to "True". You can do this
 
 171    ComboBoxDemo -xrm "*.twmHandlingOn: True"
 
 172    This should do it's job with twm as well as fvwm. With olwm you shouldn't
 
 173    need to set one of the special resources.
 
 175 6. The combo box has been reported to run sucessfully on:
 
 176    Silicon Graphics, Sun, HP, IBM RS6000, PC, even VMS!
 
 178    Attention VMS folks! You'll find two files called "motif11.opt" or 
 
 179    "motif12.opt" and "vmsmake.com" in this packages. They are provided by
 
 180    Vincent Li. You'll hopefully know what to do with these two
 
 181    files. They are provided "as is" with no warranty. Please read the file
 
 184 42. Known bugs: you will need a german dictionary to understand all the
 
 185     jokes in the source and in the german documentation.
 
 187 That's it! Enjoy using this ComboBox widget.
 
 188 (More than 160 downloads yet within the first 3 weeks -- seems that I've 
 
 189 filled in a real gap in Motif. Thanks to all who encouraged me to do
 
 190 further work on the ComboBox widget -- especially Chris Marotz!)
 
 192 You may also want to visit my "Motif Programming Cornor" at
 
 193    file://ftp.igpm.rwth-aachen.de/arc/pub/unix/html/motifcorner.html
 
 194 with tips & tricks about Motif.
 
 196 I really don't understand why the folks at OSF didn't implemented
 
 197 something like the M$ Windoze ComboBox in Motif. Maybe they have
 
 198 had their moti"f"es... (Rumor has spread it that the mysterious
 
 199 Motif 2.0 will have one - whow! after many years, the OSF folk got it!)
 
 201 P.S.: This software is Free Software. Please refer to the file
 
 202       COPYING, which you should have received together this
 
 203       file and the source code of the combo box widget.
 
 204       However if you find this widget to be usefull, you are encouraged
 
 205       to donate a reasonable amount to a charitable institution --
 
 206       there are enough people out there who need help! Sometimes I got
 
 207       the strong impression that programmers tend to get lost in their
 
 208       own "virtual reality" - sitting in front of their screen, hacking
 
 209       new algorithms and forget about everything around them. So please
 
 210       don't forget about people who need help.
 
 212 (c) 1993, 1994 Harald Albrecht
 
 213 Institut fuer Geometrie und Praktische Mathematik
 
 214 Rheinisch-Westfaelische Technische Universitaet Aachen,
 
 215 D-52056 Aachen, Germany
 
 216 albrecht@igpm.rwth-aachen.de
 
 218 Bad Aachen -- Die Stadt der Printe. Warum Aachen ein Kurbad ist?
 
 219 -- Wieso Kurbad? "Bad" heisst doch nur, dass es hier staendig regnet (wenn
 
 220 es eben 'mal nicht schneit...)