Accounting Software
Small Business Software Estimating Software
Unit Cost SoftwareConstruction Estimating SoftwareProject Estimating SoftwareCost Estimation SoftwareCost Estimating SoftwareConstruction Management SoftwareBusiness Management Software

Calculators (Header)

Link to: source code | unit cost directory

Copyright Turtle Creek Software 1996-2006. All Rights Reserved.

This class manages calculators in the Goldenseal accounting software,
estimating software, project management software and construction estimating software.

class CCalculatorList : public DB_DescribedPersistent,
public CTCS_Broadcaster,
public CTCS_Listener
{
public:
enum
{
msg_CalcChanged = 'CLC1',
cSampleListOnly = true
};
CCalculatorList();
virtual ~CCalculatorList() {}

static CLASS_DESC *sDescriptor;
static DB_PersistentObject *MakeNew() { return TCS_NEW CCalculatorList; }

virtual DBid GetDBClassID(void) const { return id_CalculatorList; }

virtual void CopyFrom(DB_PersistentObject *source, const UInt8 copyFlags = 0);

virtual NeoSize GetFileLength(const CNeoFormat *aFormat) const;

virtual Boolean GetMemberValue(const NeoTag aTag, const NeoTag aType,
void *aValue) const;
virtual Boolean SetMemberValue(const NeoTag aTag, const NeoTag aType,
const void *aValue);
virtual void ReadObject(CNeoStream *aStream, const TagType aTag);
virtual void WriteObject(CNeoStream *aStream, const TagType aTag);

static Boolean HasCircularReference(const DBClass calcClass, const DBid calcID,
const DBClass thisClass, const DBid thisID);
static TagType GetCalculatorTag(const DBid classValue, const DBid fieldValue);
static CTextString GetCalculatorTagString(const DBid classValue, const DBid fieldValue);
static CTextString GetCalculatorTagPrefix(const DBid classValue);
static CTextString GetCalculatorName(const TagType tag);
static TagType GetCalculatorTagStart(const DBid classValue);
static DBid GetCalculatorItemID(const TagType tag);
static DBid GetCalculatorClassID(const TagType tag);
static Boolean IsValidCalculatorTag(const TagType tag);
static Boolean ShowsObjectValue(const TagType dataType);

//static DB_PersistentObject *FetchCalculator(const TagType tag); // deleted TCS 3/16/00
static Boolean HasCalculator(const TagType tag);

static Boolean Func_AppendFieldText(DB_PersistentObject *obj, TagType *fieldTag,
CTextString *text, UInt8 *roundingMethod,
SInt32 *fieldType);
static Boolean Func_AddFieldValue(DB_PersistentObject *obj, TagType *fieldTag,
CMoney *value);
static Boolean Func_AddFieldCount(DB_PersistentObject *obj, TagType *fieldTag,
SInt32 *value);
static Boolean CalcIsSimpleNumber(const UInt8 calcType);

static Boolean GetCalculation(CTextString *outString, const TagType field,
const UInt8 objectClass, const UInt8 calculationType,
const UInt8 recordRange, const UInt8 roundingMethod,
const TagType matchTag, const DBid matchValue,
const FormatType format, const UInt8 dateChoice = date_entered,
const Boolean limitRange = false);

virtual SInt32 GetTagField() { return mField; }
virtual void SetTagField (const SInt32 inType) { mField = inType; }

virtual SInt32 GetMatchField() { return mFieldMatch; }
virtual void SetMatchField (const SInt32 inType) { mFieldMatch = inType; }

virtual Boolean IsNumber() const;
virtual Boolean IsSimpleNumber() const;
virtual Boolean IsMathable() const;

virtual Boolean IsDisplayDirty() const { return mDisplayDirty; }
virtual Boolean SetDisplayDirty(const UInt8 source);

virtual void SetCalcDirty (Boolean inValue = true)
{
mCalcDirty = inValue;
// we don't need to MakeDirty, since calc dirty status is used
// only while calculator is in a report
}
virtual Boolean IsCalcDirty() const { return mCalcDirty; }

virtual DBid GetObjectClass() const { return mObjectClass; }

virtual Boolean UsesField(const TagType tag);

virtual CTextString GetDisplayCString(const FormatType format = 0, const Boolean alwaysUpdate = false); // don't make const- object changes
virtual CTextString GetSampleCString() const;
virtual CTextString GetStarterCString(const FormatType format) const;

virtual CMoney GetCalculatorMoney();
virtual SInt32 GetCalculatorInteger();
virtual void UpdateCalculatorValue(SInt32 &runLimit, const FormatType format,
const Boolean alwaysUpdate = false);

virtual UInt8 GetFieldType() const;

virtual Boolean ExportMember(const TagType tag, CTextString *outString);
virtual SInt32 ImportMember(const TagType tag, const CTextString &inString);

virtual Boolean GetAdjustedCalculation(CTextString *outString, const UInt8 recordRange,
const UInt8 calcMethod, const CMoney &multiplier,
const Boolean limitRange);

virtual UInt8 GetStatusForMenuArray() const { return mCalculationType; } // TCS 12/13/00

virtual void FillDataReport(CTCS_Table *table, CNeoStream *stream) const;

virtual void SetEndSafetyTag() { mEndSafetyTag = tag_endsafetytag; }

protected:
// outside member
CTextString mCurrentValue;

// copied members
UInt8 mCalculationType,
mRoundingType,
mTimeRange,
mDateChoice,
mObjectClass; // rearranged TCS 3/27/02

// *** NEVER insert members before this bitfield!!!
UInt8 mCalcDirty:1,
mDisplayDirty:1,
filler:6;

TagType mField,
mFieldMatch;

DBid mFieldValue;

// calculated members
TagType mEndSafetyTag; // TCS 9/8/02

enum
{
cCopyFileLength = 6*sizeof(UInt8) +
2*sizeof(TagType) +
sizeof(DBid),

cFileLength = cCopyFileLength +
sizeof(TagType)
};
};