1.  One of the rows was being modified during the DeleteRows test when it should have remained unchanged.  This was due to the ButtonTester Click method only calling the click code, whereas it really needs to focus the button first and then call the code.  Rather than add a .Focus line before every click I have created a ButtonWithFocusTester sub-class where the Click method does that job.
2.  The DeleteRows test was succeeding but the TearDown method was failing due to concurrency because itt was working with a data set that had become out of date.  TearDown now re-loads the data set.
3.  While debugging the issues in (1) above I added a number of new Assert's.  I have left these in place, but they are not part of the fix per se.
Changed the code that saves changes to the Journal/Gift tables.  We no longer make any changes to these tables when the screen is modal because we need to leave that to the modal caller.  But we do modify these tables if we run the screen modelessly.  This is a fudge really - but then the whole table is a fudge because the links between them are implicit rather than explicit.
Merge from trunk
Moved a small block of code from one place to another.  This block was causing the nant build to fail when the folder MReporting/web did not exist - but we do not actually need to write to this folder.  Now the nant build succeeds ok.
The change to the Daily Exchange Rate screen when run modally where we no longer make a change to the Journal/Gift tables meant that the DeleteRows test failed.  The test has now been changed to check the return values from the modal dialog but not to check the other tables.
The FormWriter code did not always generate the correct namespace for the call in the client to get the reference count - eg it would call MPartner when it needed to be MCommon.  This was because the server side does not use the data store layout but uses the client side yaml file layout.  This change ensures that the client code uses the client yaml layout too.  (Note that the data store layout is not important because the all the calls are static to TableName.GetReferenceCount... so it does not really matter which namespace is used.)
The new delete button code did not work out of the box because there are two tables associated with this screen.  1. The standard code is always going to find references because that is the whole point of the screen.  Each grid row will point to at least one row in the PDataLabelUse table which is behind the checked list box.  So  2. It is necessary to delete the PDataLabelUse entries before deleting the main row.  We do this in the record set as part of a new DeleteRowManual method.  Then when it comes to saving we have to be sure to save the changes to PDataLabelUse before saving the main table changes.
1.  Removed 'clean' as an option (because we should always use 'quick clean'.  Existing settings files will automatically be adjusted for the loss of this task item when they are loaded.
2.  Added nant test and nant test-without-display as options
3.  Added run server admin console and refresh cached tables as options
4.  Added a new tab (External) which has a number of useful web links to OpenPetra sites.  This page is backed by an ini file that contains the link info and can be modified by the user.  If there is no file a standard one is created with a number of pre-defined links.
uncrustify
Uncrustify
Added ability to edit/refresh the new external links feature.  Clicking Edit displays the ini file in your preferred editor.
The new delete button on the LocalDataFieldSetup screen needed a significant amount of new manual code because the screen is backed by two tables, one of which references the other.  Needed to perform our own reference check and then manually handle the delete action.  Also necessary to add code to the saving of the changes because deleted rows need to be saved first.
The changes to the template had made this screen behave differently.  Actually the manual code can now be much simpler.  (This screen is unusual in that it has no details panel so it requires manual code to do some common tasks.)
Merge from trunk
Another uncrustify
merge from lp:~alan-paterson/openpetraorg/dev_0001929_concurrency_issues
merge from lp:openpetraorg