- Add some rudimentary support for sorting the list of event sources   (threads, CPU load counters, etc.).  Each source is tagged with a group   and an order similar to the SYSINIT SI_SUB_* and SI_ORDER_*.  After   the file is parsed, all the sources are then sorted.  Currently, the only   affects of this are that the CPU loads are now sorted by CPU ID (so   CPU 0 is always first).  However, this makes it easier to add new types   of event sources in the future and have them all clustered together   instead of intertwined with threads. - Python lists perform insertions at the tail much faster than insertions   at the head.  For a trace that had a lot of events for a single event   source, the constant insertions of new events to the head of the   per-source event list caused a noticable slow down.  To compensate,   append new events to the end of the list during parsing and then   reverse the list prior to drawing. - Somewhere in the tkinter internals the coordinates of a canvas are   stored in a signed 32-bit integer.  As a result, if an the box for   an event spans 2^31, it would actually end up having a negative   X offset at one end.  The result was a single box that covered the   entire event source.  Kris worked around this for some traces by   bumping up the initial ticks/pixel ratio from 1 to 10.  However, a   divisor of 10 can still be too small for large tracefiles (e.g.   with 4 million entries).  Instead of hardcoding the initial scaling   ratio, calculate it from the time span of the trace file. - Add support for using the mouse wheel to scroll the graph window   up and down.
- Add some rudimentary support for sorting the list of event sources
  (threads, CPU load counters, etc.).  Each source is tagged with a group
  and an order similar to the SYSINIT SI_SUB_* and SI_ORDER_*.  After
  the file is parsed, all the sources are then sorted.  Currently, the only
  affects of this are that the CPU loads are now sorted by CPU ID (so
  CPU 0 is always first).  However, this makes it easier to add new types
  of event sources in the future and have them all clustered together
  instead of intertwined with threads.
- Python lists perform insertions at the tail much faster than insertions
  at the head.  For a trace that had a lot of events for a single event
  source, the constant insertions of new events to the head of the
  per-source event list caused a noticable slow down.  To compensate,
  append new events to the end of the list during parsing and then
  reverse the list prior to drawing.
- Somewhere in the tkinter internals the coordinates of a canvas are
  stored in a signed 32-bit integer.  As a result, if an the box for
  an event spans 2^31, it would actually end up having a negative
  X offset at one end.  The result was a single box that covered the
  entire event source.  Kris worked around this for some traces by
  bumping up the initial ticks/pixel ratio from 1 to 10.  However, a
  divisor of 10 can still be too small for large tracefiles (e.g.
  with 4 million entries).  Instead of hardcoding the initial scaling
  ratio, calculate it from the time span of the trace file.
- Add support for using the mouse wheel to scroll the graph window
  up and down.

jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase,jrobhoward/SCADAbase