Added:
- AMLightweightScanInfo ~ A class representing the information stored
against a scan in the user database. The class is designed to be a more
lightweight, quick to load way of displaying bulk information about
scans.
Added:

- AMLightweightScanInfoCollection ~ Class to store and load bulk
information regarding scans
Added:

- Class AMLightweightScanInfoModel ~ An method for an
AMLightweightScanInfoCollection to distribute its data in the standard
Qt MV way

Altered:

- Fixed minor bugs with AMLightweightScanInfo and
AMLightweightScanInfoCollection
Added:
- AMSortFilterWidget ~ A standardized widget for controlling any
QSortFilterProxyModel
Added:

- Documentation to AMSortFilterWidget
Added:
- Class AMScanDataView ~ The new version of AMDataView.
- Class AMAbstractScanDataChildView ~ The base class from which all the
views which AMScanDataView will contain are derived.
- Class AMScanDataChildTableView ~ The first of the views which
AMScanDataView will contain. Displays the scans in a table view.
Altered:

- AMScanDataChildTableView::AMScanDataChildTableView ~ Fixed bug where
call to base class constructor contained QIcon(), which is no longer a
parameter of the AMAbstractScanDataChildView constructor.
Started on changes AMScanDataView which will allow a popup
AMSortFilterWidget to control the proxy model for all child views.
Added:

- Support for lazy loading of thumbnails for scans from the database.
thumbnailFirstId and thumbnailCount are stored in AMLightweightScanInfo
(loaded by AMLightweightScanInfoCollection), and then when the
AMLightweightScanInfoModel requests them, the AMLightweightScanInfo
loads them from the database.

Altered:

- AMScanDataChildTableView now statically sets column sizes instead of
doing resizeColumnsToContents (which queries the whole model and thus
removes the benefits of lazy loading)
Altered:
- Structure of AMScanDataView. Now contains a list of generic
QAbstractItemViews, rather than the system before of specifying an
AMAbstractScanDataChildView interface.

- Started making sure AMScanDataView shares the same public face as
AMDataView, so I can hock one in over the other
Added:
- stubs to AMScanDataView in order that it can have the same interface
as AMDataView (and AMDataViewWithActionButtons)

Altered:
- AMDatamanAppController and SGMAppController so that they now show an
AMScanDataView instead of an AMDataViewWithActionButtons or a
SGMDataViewWithActionButtons.
Removed:
- AMScanDataChildTableView ~ No use for this now not using abstract
interface for the child views

Altered:
- AMScanDataView ~ Altered the method used to display the search filter
window, added a title of the style of the AMDataView

Also played around with some search icons, then found there was one
already, and removed them ones I'd created.
Added:
- AMLightweightScanInfoFilterProxyModel ~ Needed to allow filtering of
scans by row as a top level filter (on top of all the others)

Altered:
- Removed filtering by experiments from public AMScanDataView interface,
and calls to it in AMDatamanAppController. There doesn't seem to be any
reference to experiments. If this is used somewhere, maybe in other
beamlines, then I'll add it back
- AMLightweightScanInfoCollection ~ Now a QObject encapsulating a QList,
rather than just a subclass of QList. This allows for it to emit signals
when the data in it changes
- AMLightweightScanInfoCollection ~ A whole bunch of changes to cope
with changes to the data (adding/removal/updating of scans, updating of
runs and samples)
- AMLightweightScanInfoModel ~ Now listens for the signals emitted from
the AMLightweightScanInfoCollection it contains, and emits its own
signals to indicate that data is [about to be/has just been] changed.
Added:
- AMScanTableView ~ Class showing scan data in table form now lives in a
separate class outside of AMScanDataView
- AMScanThumbnailView ~ Class showing scan data in thumbnail form. Just
set up stubs for now to implement interface required by
QAbstractItemView

Altered:
- AMLightweightScanInfoFilterProxyModel and AMLightweightScanInfoModel ~
Now contains methods thumbnailCount and thumbnailAt to retrieve
thumbnails from the scan info collection
Altered
- AMScanThumbnailView ~ Impmeneted some of the initial methods to
populate the data

Added:
- class AMScanThumbnailViewItem ~ Represents a single thumbnail in an
AMScanThumbnailView
Altered:
- AMLightweightScanInfo ~ now derives from QObject
- AMLightweightScanInfoCollection ~ added a indexOf() function to return
the index of a given scan in the collection
- AMLightweightScanInfoFilterProxyModel ~ Removed thumbnailAt and
thumbnailCount, this info is now obtained directly from the model
- AMLightweightScanInfoModel ~ Now is a hierarchical model, with the
root being an invalid QModelIndex, the scans being any QModelIndex with
an internal if of -1, and thumbnails being any QModelIndex with an
internal id >= 0 (this id is in fact the index of the scan to which the
thumbnail belongs) \o/
- Changed AMScanThumbnailView ~ Made to descend from QTreeView in order
to test the new structure of the model. In fact this turned out to be
reasonably useful, hence...

Added:
AMScanTreeView ~ A view to visualize scan and thumbnail data in a tree
structure
Added:
- AMSortFilterWidget::addManualColumn ~ Allows addition of a column not
featured in the top level of the passed proxyModel. Must be handled by a
custom implementation of QSortFilterProxyModel

Altered:

- AMScanDataView ~ Constructor now adds "Data Source" manual column to
its AMSortFilterWidget
- AMLightweightScanInfoFilterProxyModel ~ Now accepts filtering based on
Data Sources (i.e. Thumbnail title and subtitle)
- AMScanTreeView ~ No longer allows sorting of columns, as the standard
Qt implementation of sorting polled the Thumbnail object of scans and
thus broke the lazy loading structure of the model.
Altered:
- AMScanDataView::initializeChildViews ~ Adds a version of the
AMScanThumbnailView

- AMScanThumbnailView ~ Basics of layout painting done
Altered:
AMScanThumbnailView::setSelection ~ Got selecting with both a single
left click and a rubber band working.
ALtered:
- AMScanThumbnailView::mouseMoveEvent and
AMScanThumbnailView::onTimerTimout ~ These now allow for an old DataView
thumbnail style of displaying a thumbnail depending on the position of
the cursor within that thumbnail.