Added:
- QString variable AMAction3::failureMessage_
- const QString AMAction3::failureMessage() to return variable
- parameter QString failureMessage to AMAction3::setFailed() which
defaults to empty.
Added:
- QString AMActionLog3::failureMessage() and corresponding variable
- Registration of these as a Q_PROPERTY to get them into the db
- Setting of this variable from the passed AMAction in the constructor
- Setting of this variable from the passed AMActionLog3 in the copy
constructor
Added:
- QString AMActionLogItem3::failureMessage() and corresponding variable.

Altered:
- AMActionLogItem3::loadLogDetailsFromDb() ~ added column for
failureMessage and setting of the variable from the value found there
- AMActionHistoryModel3::data() ~ now appends an error message, if it
finds one, on to the tooltip for an Action that has failed.
Altered:
- Rewrote the classes CLSSynchronizedDwellTimeView and
CLSSynchronizedDwellTimeElementView in order to redesign their layout
more in keeping the the CLSSIS3820ScalerView
Modified:
- CLSSynchronizedDwellTimeView constructor, added a setMinimum and
setMaximum value for dwell time spin box.
Added:
- new methods for creating combo boxes for the various VESPERS scan
configuration views.

Removed:
- VESPERSScanConfigurationView::addFluorescencceDetectorBox() and
VESPERSScanConfigurationView::addCCDDetectorBox()

The connections to the button groups haven't been solidified yet and
using the combo boxes has not been tested yet.
Altered:
- AMEXAFSScanActionControllerAssembler was accidentally using the k-
been remedied.
Added:
- AMReadOnlyControl's, and a AMControlSet (shutterControlSet_) for all
the PVs that indicate whether shutters are open on the bl to
SGMBeamline.

Altered:
- SGMBeamline::createBeamOnActions3() ~ Added check to ensure
shutterControlSet_ is connected.
- SGMBeamline::createBeamOnActions3() ~ Added AMControlWaitActions for
all the shutter controls to make sure they are open (PV value =1 )

PVs for all the controls covered in this changed:
VVR1611-3-I10-01:state
VVR1611-3-I10-02:state
VVR1611-3-I10-03:state
VVR1611-3-I10-04:state
PSH1611-3-I10-01:state
VVR1611-4-I10-01:state
VVR1611-4-I10-02:state
VVR1611-4-I10-03:state
VVR1611-4-I10-04:state
VVR1611-4-I10-05:state
VVR1611-4-I10-06:state
VVR1611-4-I10-07:state
VVR1611-4-I10-08:state
PSH1411-I00-01:state
VVR1411-I00-01:state
VVF1411-I00-01:state
PSH1411-I00-02:state
SSH1411-I00-01:state
VVR1611-3-I00-01:state
VVR1611-3-I00-02:state
Altered:
- Made all of the necessary changes to have important choices moved to
combo boxes instead of group boxes with radio buttons.  Not all of the
features and automatic selection have been reimplemented yet though.
Altered:
- Changed motor selection combo box to properly display and push values
to the underlying configurations.
Added:
- Class AMRecursiveDirectoryCompare ~ Created by David Chevrier,
essentially recursively checks for differences between two directories
and returns states:
FullyMatchingResult = All files in directories match
Side1ModifiedResult = Side1 contains files not in Side2
Side2ModifiedResult = Side2 contains files not in Side1
BothSidesModifiedResult = Both Sides contain files not in the other

-  Class AMDirectorySynchronizer ~ Takes two directory paths (source and
destination), validates that (ensures that exist, attempts to create if
they don't), runs a AMRecursiveDirectoryCompare on them, and if the
result is a full match, then copies the source into the destination
using cp -u -r
Added:
- AMRecursiveDirectoryCompare::uniqueSide1Files(),
uniqueSide1Directories(), uniqueSide2Files() and
uniqueSide2Directories() ~ to obtain the list results of the compare

- Changed the logic of AMDirectorySynchronizer::start() to copy based on
the results of AMRecursiveDirectoryCompare results
Altered:
- Further progress on upgrading all the VESPERS scan configuration
views.  Most of the functionality has been restored.  Most views are
looking close to being done.  EXAFS still looks terrible.
Altered:
- Finished tweaking the scan configuration views for all the scans.
Needs testing on all the scans to make sure that none of the actual
actions still work.
Added:
- AMDirectorySynchronizer::progressMessages and errorMessages ~
QStringLists containing output relating to the sync
- AMDirectorySynchronizer::percentageProgress ~ value representing the
percent progress of the copy process
- AMDirectorySynchronizerDialog ~ Modal dialog which controls and shows
results of the sync (eventually this will become the message dialog
shown to the user)
Altered:
- The AMDirectorySynchronizerDialog is now actually a modal dialog
- AMDirectorySynchronizerDialog now contains a progress bar
- AMDirectorySynchronizerDialog is now designed to show and close
automatically depending on the running of the copy (call
AMDirectorySynchronizerDialog::start() to start the copy)
Altered:
- Rsync args used by AMDirectorySynchronizer
- AMRecursiveDirectoryCompare::compareOneLevel to also build list of
files which are newer on one side over the other
Added:
- Class AMDirectorySynchronizationAction to wrap an
AMDirectorySynchronizer in an AMAction3 so it can be added to a workflow

Altered:
- AMDirectorySynchronizer::start now returns true indicating started
success if, when starting, it find that no copying is necessary. It then
uses a timer to wait for five seconds before emitting copyCompleted

-AMDirectorySynchronizer::errorMessagesChanged and
progressMessagesChanged to now emit a single QString rather than the
whole list
Modified:
- AMUserSettings::remoteDataFolder ~ stores value from ini file (if no
value in found in the ini file for this key, then it will be blank)
- Altered the AMDirectorySynchronizer and
AMDirectorySynchronizationAction to load remote and local directories
from the ini settings
- AMSettings window to show the remoteDataFolder
Merge branch 'master' into Issue611