# *************************************************************
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#  
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#  
# *************************************************************

** MetricField:
    + in vcl: 
class VCL_DLLPUBLIC CurrencyField : public SpinField, public CurrencyFormatter
class VCL_DLLPUBLIC CurrencyFormatter : public NumericFormatter
class VCL_DLLPUBLIC MetricFormatter : public NumericFormatter
class VCL_DLLPUBLIC NumericFormatter : public FormatterBase

MetricFormatter - very simple sal_Int64 wrapping ...
    + no doubles ...
    + *Could* replicate this with the same interface:
	+ prolly easier / better to add an XMetricField interface.

vcl's MetricField - itself does a load of (double) casting ...
    + to get the value it wants :-)
    + Urgh ! ...

** Can we just twist VCLXCurrencyField to this purpose ?
    + what differences would we want ?
    + LongCurrencyFormatter -> 'MetricFormatter' ...

** Interesting !
    + VCLXCurrencyField is based on 'LongCurrencyField' not CurrencyField ...
	+ this is really based on 'BigInt' [ curious ] - so even more precision loss.

    + So ... cut/paste VCLXCurencyField -> VCLXMetricField 

	    + Look at 'VCLXNumericField' interface ...
		+ Use 'XNumericField' instead (?)
		    + why does this just not "just work" ?

    + The 'MetricField' (is also a MetricFormatter)
	+ MetricFormatter [ unusually ] has 'Unit' support
	    + API grep shows:
		+ a) requires 'fieldunit'
		+ b) has "UserValue"
		+ c) => new IDL interface required ...
		+ sub-set / expand NumericField ?

	    + add 'CustomConvert' ?
	    + add '[SG]etFirst'/Last
	    + Properties:
	        + 'Unit' 
		+ 'CustomUnitText'
	    + 'spin-size' -> 'value-step'
	    + 'BaseValue' ...
	    + sal_Int64 ... [!?] ...
	    + CorrectedValue
	    + Want properties for the UI designer (?)
		+ move that stuff out into there ?
    + FIXME:
	+ rationalise the 'Modify' event crud ...
	    + share the code in a base-class ...

    + Wrapper:
        + need to have static methods 'ConvertDoubleValue' etc.
	+ also 'ConvertValue' etc.
	+ GetCorrectedValue - never used ...
