***************************************************************
*                                                             *
* This file contains the update notes on the textfield.gadget *
*                                                             *
***************************************************************

This file is in reverse chronological now.


Version 2.0
-----------

NEW:

- The TextFieldAuto.c and <proto/textfield.h> now contain the
  TextFieldBase like before, and also the TextFieldClass.  This
  keeps the opening and getting of the class hidden for a simpler
  API.  (If you already had a TextFieldClass variable of your own,
  sorry, but you can just remove yours now.)  (SAS/C applicable)

- There are now keyboard commands to delete words at a time: Alt-
  Backspace deletes a word at a time to the left of the cursor,
  starting at the current cursor position (if you started at the
  middle of a word, it deletes to the beginning of the word, like
  you would think), Alt-Delete deletes a word at a time to the right
  of the cursor, starting at the current cursor position (again, if
  you are in the middle of a word, it only deletes the last part).

- There is a real line delete command now: CTRL-x.  It deletes
  everything on the line.  It's not a command to delete all
  characters between to CRs, though.  It's a visual line delete, not
  conceptual line delete.

- Now when you click and drag to scroll the text display, the
  further you are away from the actual gadget bounds, the faster it
  will scroll.

- TEXTFIELD_ReadOnly is a new attribute that gives the user a read
  only mode, but the user can still highlight text to use the
  clipboard.  The old way of GA_Disabled and TEXTFIELD_NoGhost can
  still be used for a read only mode without clipboard support.  It
  is important to know that the client (program using the gadget)
  can still add or delete text with TEXTFIELD_Text and
  TEXTFIEL_InsertText.  See the autodoc for more details.  There are
  issues discussed about which keyboard events get passed on to the
  application.

- TEXTFIELD_Modified is a new attribute that allows you to tell
  if the text in the gadget has been modified in any way.  It
  to FALSE at creation time, but can be set or read at any time.
  See the autodoc for more details

- TEXTFIELD_AcceptChars is a new atrribute that allows you to set
  specifically which characters you will allow in your instance of
  a textfield gadget.  Non-printable characters are still filtered
  for you as usual.  These characters may not be accepted if they
  are also included in the rejection characters.  Also see
  TEXTFIELD_RejectChars.  And check the autodoc for more details.

- TEXTFIELD_RejectChars is a new attribute that allows you to set
  specifically which characters to not allow in your instance of a
  textfield gadget.  Non-printable characters are still automatically
  rejected.  Characters listed here are always rejected.  Also see
  TEXTFIELD_AcceptChars.  Check the autodoc for more details.

- TEXTFIELD_PassCommand is a flag that if TRUE will cause the gadget
  to pass Right Amiga key sequences on to the application if the
  gadget does not use it.  If FALSE, the gadget just eats the events
  like it always has.  When this is TRUE and a Right Amiga key
  command is received that the gadget does not use, the gadget is
  forced to become inactive (not disabled).

- TEXTFIELD_LineLength lets you get a particular line size (the
  number of characters on that line).  You pass the line you want
  and that value gets replaced by that line's length.  See the autodoc
  for some issues when using this.

- TEXTFIELD_SelectSize lets you turn on highlighting and set the
  number of character to be highlighted.  It's always the number of
  characters from the current cursor position.  If you pass 0, then
  highlighting is turned off.  You can also get this attribute: 0
  for no highlighting, otherwise returns the number of characters
  highlighted.

- TEXTFIELD_MaxSizeBeep allows you to turn on beeping (DisplayBeep())
  if text is entered when the buffer is full (buffer size equals the
  size you passed to TEXTFIEL_MaxSize).

- TEXTFIELD_DeleteText allows you to delete text at the current
  cursor position.  Only the size needs to be passed.  This gives
  closure to the text insertion functions.

- GA_IntuiText allows you to give the gadget a list of IntuiTexts
  that are rendered relative to the gadget's upper left corner.

/* MENU COMMANDS */

The following are implemented so that programmers can put them in
a menu to give the user a visual interface to the RAMIGA keys.

- TEXTFIELD_Copy if text is highlighted, this will copy it to the
  clipboard.  This command is just like RAMIGA-c when the gadget is
  active.

- TEXTFIELD_CopyAll this always copies all the text to the clipboard.
  This command does not affect the state of the gadget.

- TEXTFIELD_Cut if text is highlighted, this will erase the text and
  put it on the clipboard.  This command is just like RAMIGA-x when
  the gadget is active.

- TEXTFIELD_Paste pastes text from the clipboard to the current
  cursor position.  If there was any highlighted text, it is deleted
  first.  If you need to make sure that text is not highlighted first
  then do set of TEXTFIELD_SelectSize, 0.  This command is just like
  RAMIGA-v when the gadget is active.

- TEXTFIELD_Erase will remove all text from the gadget and place it
  in the undo buffer.  This command is just like issuing RAMIGA-e
  when the gadget is active.

- TEXTFIELD_Undo will paste from the undo buffer into the gadget,
  just as if the user had hit RAMIGA-u when the gadget is active.


FIXED:

- In V1.2, if you used the ActivateGadget() function on this gadget
  it would get put into highlight mode, and therefore the first
  typed key would be lost.

- In previous versions, if you had TEXTFIELD_Partial on, the partial
  line would flicker when editing in the gadget.

- In previous versions, the TEXTFIELD_Text attribute did not cause
  the cursor to move to the beginning.  It now does.

- TEXTFIELD_ClipStream2 now has a synonym: TEXTFIELD_UndoStream.  The
  new name is easier to remember, but the old name can still be used.

- GA_Image used to be offset from the upper left corner of the
  gadget's text box, not the upper left corner of the gadget itself.
  It's now fixed.  (Only applies if border was set to something.)

- Apparently there is a bug in RectFill() in pre-3.0 OSes.  I've
  taken measures not to be bit by the bug, which could have shown up
  in previous versions of the gadget.

- There was a major effort on my part to update the autodoc to better
  represent the features of the gadget.  It seems that I had really
  only made a sparse effort before, and I apologize.  Each part of the
  main documentation has a section title now.  The document has grown
  by 16K.  I also apologize if you hate reading docs.  And I also
  apologize if you hate apologies.

- A bug existed in previous versions that would allow you to have an
  active textfield gadget even if it was disabled.  Specifically, if
  you called ActivateGadget() on a disabled gadget, the gadget would
  go active anyway.  (I thought the OS did that.) It's fixed.

- The command to move backword by words (Alt-Cursor left) would skip
  a word if the was at the first of a line sometimes.


Version 1.2
-----------

- The name is no longer editor.gadget.  That name was too general,
  as Christoph Feck pointed out.  The name textfield.gadget has
  been chosen as the new name since it more accurately describes
  the gadget's purpose.  So that you will know how to convert, here
  is a list of files that have changed names that would affect
  development:

  doc/editor_gc.doc                 ->  textfield_gc.doc
  doc/editor_gc.guide               ->  textfield_gc.guide
  fd/editor.fd                      ->  textfield.fd
  gadgets/editor.gadget             ->  textfield.gadget
  include/gadgets/editor.h          ->  textfield.h
  include/pragmas/editor_pragmas.h  ->  textfield_pragmas.h
  include/proto/editor.h            ->  textfield.h

  Also, in your source code I think I've made it easy to change, but
  if you have problems, I'm very sorry.  Here's how: use your text
  editor to replace all occurances of EDIT_ with TEXTFIELD_.

- The text pen now defaults to TEXTPEN instead of SHADOWPEN.

- The undo buffer is now cleared after you undo so that you don't
  accidentally undo the same thing multiple times.  I should note
  that the undo function just drops the text at the current
  cursor position.

- As per request of a few people, the TEXTFIELD_Down event now
  will not let the last line scroll to the top of the gadget, but
  rather it stops at the bottom, like when you cursor down.

- There is no highlight or block mode anymore in the old sense
  of turning it on and off.  You only need to click and drag
  to highlight text.  Hitting any key replaces the highlighted
  text like normal, and hitting backspace or delete removes the
  highlighted text like normal.  The cut, copy, and paste keys
  also work normally.  The new features are that the right and
  down cursor keys unhighlight the text and take you to the
  end of the highlighted text.  And the left and up cursor keys
  unhighlight the text and take you to the front of the
  highlighted text.  (This new method can make scrolling with with
  the mouse pointer unfriendly, and you can accidentally delete
  text after scrolling by hitting a single key, but if an undo IFF
  stream is provided then the user can get the text back.  I have
  asked many people whether they prefer single or double-click
  block modes and it has been about 50-50.  This method conforms
  to modern thinking, from what I understand.)

- A memory leak that occurred if the library was expunged has
  been fixed.  It was usually about 4k.

- TEXTFIELD_CursorPos now will scroll the text to the position the
  cursor is set to if needed.


Version 1.1
-----------

- The EDIT_Text now works in all cases.  It used to only work
  on creation and get methods.
