* 9. Changelog:
~~~~~~~~~~~~~~~

* 9.1 v2.00 (30.10.2005):

This is a complete rewrite, so the detailed change history from versions
prior to 2.00 isn't particularly relevant.

________________________________________________________________________


* 9.2 v2.00a (31.10.2005):

- Sort would crash if asked to sort a database of only 1 track.
  (It now displays a message in the main window to the effect that
  it cannot sort a single track.)

- Double-clicking MP3 files did not add them to the database.

- After adding the first track to the database, clicking Play did not
  start that track playing (but clicking next did).

- The !Run file of AMPlay and the accompanying apps and utilities gave
  an error if ABCLib or (in some cases) CallASWI was not already loaded.

- If the database had only one track in it, when that one track was
  selected in the database editor, the move up and move down buttons
  were not greyed out as they should be (although they do nothing
  when clicked).

- Removal of items from the database could create some oddities in
  the history. Specifically, some tracks would be (correctly) present
  in the history, but the flags on those tracks would not have the
  'in history' bit set. This would lead to them possibly being
  picked even if played recently, but would have no serious effects.

- When the entire database is selected in the database editor, it
  correctly greyed out the Play button, but not Queue.

- Several apps had blank lines at the end of !Run which meant they
  kept a file lock on !Run while they were running (Doesn't cause any
  particular problem, but wasteful of file handles).

- AMPlayCfg generated an error if run without AMPlay having been seen
  by the filer. This was because AMPlay contains the default skin
  directory, which AMPlayCfg needs to iterate to build the menu of
  available skins. It now greys out the whole skins section if
  <AMPlay$Dir> is undefined, or points to a 1.X version of AMPlay.

- AMPlayCfg was appending a couple of extra lines to the options file
  each time the options were saved. It also now does not allow the
  same parameter to occur more than once in the file.

- AMPlayCmd hung if you use -expand or -raw parameters other than in
  a taskwindow (e.g. from an obey file or after pressing F12). This was
  because it was waiting for a reply, but not returning control to the
  Wimp to allow AMPlay to be able to reply. AMPlayCmd now returns an
  error if these parameters are used outside a taskwindow. (Making
  them work correctly outside a taskwindow may be addressed in a later
  version.)

________________________________________________________________________


* 9.3 v2.02 (15.05.2008):

- Various internal consistency problems fixed in the database.

  Specifically;

  - Internal constants for the offsets at which particular information
    could be found were inconsistent, in that the offsets for the linear
    and random filters were one way around for tracks, but the other way
    around for albums and artists. This meant that propogation of filter
    settings from tracks up to albums and artists gave incorrect
    results in the cases where album/artist contained only tracks set
    to linear-only, or only tracks set to random-only. (Any other track
    settings would come out to both or none at the album/artist level,
    which was unaffected by the problem.)

    This lead to things appearing in the post-filtered lists when in
    fact they did not pass the filter. In turn this could lead to AMPlay
    just stopping dead when picking the next album/artist, because it
    was possible for it to pick an album/artist where no tracks passed
    the filter.

  - Modifying an inactive filter did not correctly mark the tracks
    database as changed, and therefore did not resave it when saving
    the state. This could result in the album and artist
    states being saved, while the track state was not, leading to
    inconsistencies on next use.

  - Swapping one track with another, where one track passed the filter
    and the other did not, could leave the post-filtered list corrupt.
    It tried to update the post-filtered list to take account of the
    change, but in fact modified the first item in the list, rather
    than the correct one.

  - Filtered duration of albums and artists was wrong following a sort
    (one that made actual changes to the order). This was due to the
    duration being recalculated too early in the post-sort tidyup,
    before the filter settings had been rebuilt. Durations were being
    calculated based on filter settings that had pertained prior to the
    sort.

  - As a result of the above, repeatedly adding tracks and sorting the
    database lead to instability and various crashes.

  - Tracks have an attribute, stored at offset o_tinlist%, which gives
    their position in the post-filtered track list. For tracks which do
    not pass the filter, this should be zero. However, it was possible
    for tracks to end up with a non-zero value even if they didn't pass
    the filter. This is now fixed, and fixes various "picked something
    when it should not have been picked" problems.

    In cases where tracks had been removed or filter settings changed,
    it was possible for an old o_tinlist% value to refer to an item
    beyond the end of the tracklist.

- Extra sanity-checking on startup, especially if AMPlay detects that
  the database was saved by a different version of AMPlay than is now
  loading it. This resolves any remaining inconsistencies that the
  above problems might have left behind. i.e. The above problems no
  longer occur, and steps are taken to repair any damage.

- AMPlay no longer crashes when launched via an adjust-click. (I've no
  idea how I managed to use AMPlay myself for so long without noticing
  this.)

- Fast forward and Rewind now work as documented. Previously, adjust-
  clicks were being treated the same as select clicks.

- AMPlayer error messages no longer repeat when the track changes.

- If changing the names of the filters, the filter names on the editor
  window are now updated on the fly. Previously, the editor window
  displayed the filter names as they were when that window was opened.

- The Goto menus had various problems, especially if the "Filtered
  items are greyed" option was turned off (i.e. filtered items are
  omitted entirely). This turned out to be a problem in the design, and
  lead to a complete rewrite of how AMPlay generates menus on the fly.
  Almost all users of the dynamic menu system now call a single generic
  function to generate their menu, whereas previously they each had
  their own implementation of it. This is one reason why 2.02 is a bit
  smaller than 2.00a, and in code terms is the main area of work
  between 2.00a and 2.02.

  The rewrite was mostly about ending up with something that worked as
  already documented, so there are few visible differences other than
  the removal of the bugs. There are two visible differences;

  - The db editor menus and the history menus are now consistent in
    that their 'special' items (Clear history, All artists, etc) now
    appear above the link to the previous block, if any.

  - Menu blocks are now slightly more flexible, and if there is only 1
    item before or after the menu, rather than display a "Next 1 item"
    entry (which takes up as much space as it would have done to
    include the entry) it now makes the menu block longer to
    accommodate that extra item. This applies at both ends of the
    block, so a menu that needed to display items 2-31 of items 1-32
    (assuming a block size of 30) will now display all 32 items, with
    no previous/next links.

  - In the case where;
    - a goto menu is to be displayed
    - the current track/album/artist does not pass the filter
    - the option to grey filtered items is off (i.e. such items
      are to be omitted entirely)
    the menu will nonetheless open with the block chosen to be centred
    on the nearest item that DOES pass the filter. e.g. Suppose you ask
    for the all tracks menu, and there are 1,000 tracks, and the
    currently playing track is track 500. Track 500 does not pass the
    filter, and nor do 451-499 but track 450 does. The menu that is
    opened will have the displayed range of tracks centred on 450.
    Without this behaviour, the menu would open at track 1, even though
    there is currently playing information and even though track 1 is
    nowhere near what is currently playing.

- The default settings for the X modifier are changed to reflect the
  fact that the X modifier is applied before any of the text conversion
  options.

- There are now options on the main menu for setting the playback order
  for tracks, albums and artists, for setting the auto next options,
  and for setting the repeat options.

- The main window buttons for playback order, autonext and repeat now
  use pop-up menus rather than cycling through their options.

- Main window buttons that generate a menu on select click now generate
  that menu when menu is clicked, rather than the main menu.

- Where appropriate, if a control is greyed out, any text labels
  associated with it are also greyed out. This is somewhat more style-
  guide compliant, and affects the export and search windows, as well
  as most panes in the database editor.

- A number of minor discrepancies between the documentation and the
  actual behaviour are resolved (generally by making the documentation
  match reality). Specifically;

  - The previous/next buttons are now documented as they behave.

  - The X modifier documentation is now much closer to how it actually
    behaves.

- Hourglass behaviour when opening the DB statistics window is now more
  sensible.

- Tidied up a couple of places where AMPlay had its own functions that
  duplicated DrWimp. (These dated from before AMPlay was definitely
  going to use DrWimp.)

- Tidied up a couple of unused icons from the skin, and added a
  'noaction' spite which is used for custom buttons with no action
  configured. (Without this, they disappear completely.)

- State save now always saves those state files which are likely to be
  small, and only bothers with only-save-if-changed checks for those
  files which are potentially large (namely; pathdb, trackdb, namedb).
  This is because of the risk of bugs arising from failure of the check
  and saving some but not all of the files, and because in some cases
  actions that take place on startup result in their being marked as
  changed anyway.

- When viewing selected item information, with an album as the selected
  item, the artist number was incorrect (the album number was displayed
  instead).

- Opening the database editor from the menu, without having opened it
  via some other route first, left some placeholder text from the
  template visible.

There are also some minor changes in AMPlayCfg:

- The X modifier characters option now allows more characters to be
  entered.

- Awareness of AMPlay 2.02 skins.
  
________________________________________________________________________


* 9.4 v2.03 (30.05.2008):


- Various fixes/improvements to skin handling;

  - Calculation of when to scroll text in the track, album or artist
    fields is now done correctly. Previously it was roughly right by
    accident for the default skin, but noticeably wrong for others.

  - Clicking on the progress bar to set the position within the track
    now works properly in all cases, rather than only when the window
    is against the left edge of the screen. (Another "How have I managed
    to miss that?" bug)

  - Custom buttons of type 'Other Application' now display the right
    icon.

  - Previously, when saving options that included changed skin
    settings, AMPlay would start using the progress bar details of the
    new skin straight away, even though it wouldn't start using the new
    sprites and templates until it was restarted. This could cause the
    progress bar marker to disappear, or appear in the wrong place.

  - New custom button type of "Remote Control".

  - The "Locating..." message is now "Locating (to x:xx of y:yy)",
    where x:xx is the target time, and y:yy is the total duration of
    the track.

  - Skins can now specify which field should be used for displaying
    AMPlay messages.

- Redesigned main window and sprite set, to provide larger icons, and
  reduced risk of mis-clicking etc. This redesigned skin is now the
  default - the previous skin is still supplied with AMPlay as 'Small
  Blue'.

- Fixed bug with the goto menu for albums by the current artist. In
  some cases, only the first album was being displayed.

- Very large total durations are now displayed correctly on the
  database statistics window. The limit is now 2^31 seconds (roughly 68
  years), rather than 2^31 centiseconds (roughly 250 days). This only
  applies to the total durations - if you manage to get an artist,
  album or track (!) to have a duration of over 2^31 centiseconds, that
  will still be displayed as negative.

- AMPlayCmd now includes generic 'previous' and 'next' commands, as
  well as track, album and artist specific variants, and forcenext.

- API extended - there is now a request that will return the highest
  and lowest skin versions supported. (Nothing makes use of this as yet,
  but the intention is for AMPlayCfg to use this, rather than having
  its own settings for what versions skins need to have.)

- References and menu entries for HTML help removed.

- Opening the documentation from the main menu now opens the
  documentation directory as well as opening the intro document.
  (i.e. it now works as invoking help from the filer always has.)

- Minor tweak to the hourglass handling around the history menus. This
  should avoid the situation with very large databases where there
  could be a lengthy delay with no hourglass.


There are also changes to AMPlayCfg;

- Skin settings now have a pane in the options all to themselves.

- Skin previews and descriptions are now available (the skin has to
  provide these)

- When run manually, or from AMPlay, AMPlayCfg now remembers its window
  position, and which pane was selected.

- When run from Configure, AMPlayCfg opens under the mouse pointer, (as
  recommended by the Style Guide).

________________________________________________________________________
Copyright  2008 Mike Sandells, mike@mikejs.com
Last Modified: 30.05.2008