Accounting Software
Small Business Software Estimating Software
Time Tracking SoftwareTime Management SoftwareTime Billing SoftwareContact Management SoftwareCustomer Management SoftwareProject Management SoftwareBusiness Management Software

Breakdown Tables (Header)

Link to: source code | source 2 | source 3 | source 4 | tables directory

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

This class manages general breakdown tables for the Goldenseal estimating software,
small business management software, construction project management software and
construction estimating software.

class CBreakdownTable : public CSpreadsheetTable,
public CClassDescriptorOwner
{
public:

enum
{
class_ID = 'BDTB'
};

static CBreakdownTable *CreateBreakdownTable(DB_ClassDescriptor *desc,
const SPaneInfo &paneInfo,
const SViewInfo &viewInfo,
SInt16 rowHeight);

CBreakdownTable(const SPaneInfo &inPaneInfo, const SViewInfo &inViewInfo,
DB_ClassDescriptor *desc);
virtual ~CBreakdownTable() {}

virtual void ListenToMessage(MessageT inMessage, void *ioParam);

virtual void UpdateFromLayoutStream(CInputStream &stream);

virtual void InsertRows(const TableIndexT howMany, const Boolean redraw = true);
virtual void InsertSpacerRow(const UInt8 rowsToAdd = 1);
virtual void RemoveRows(const TableIndexT howMany, const Boolean redraw = true);

virtual void AppendColumnMember(const SMemberInfo &memberInfo)
{ mColumnMemberArray.Append(memberInfo); }
SInt32 GetColTag(const TableIndexT col) const
{
SMemberInfo memberInfo;
if (!mColumnMemberArray.FetchItemAt(col, memberInfo))
return 0;
else
return memberInfo.tag;
}
Boolean GetColMemberInfo(const TableIndexT col, SMemberInfo *memberInfo) const
{ return mColumnMemberArray.FetchItemAt(col, *memberInfo); }

virtual TableIndexT GetMemberCol(const TagType tag) const;
virtual SInt32 GetMemberColValue(const TableIndexT row, const TagType tag) const;
virtual Boolean SetMemberColValue(const TableIndexT row, const TagType tag,
const SInt32 inText);

virtual CTextString GetMemberColString(const TableIndexT row, const TagType tag) const;
virtual Boolean SetMemberColString(const TableIndexT row, const TagType tag,
const CTextString &inText);

virtual CMoney GetMemberColMoney(const TableIndexT row, const TagType tag) const;
virtual Boolean SetMemberColMoney(const TableIndexT row, const TagType tag,
const CMoney &inValue);
virtual Boolean SetMemberColNumber(const TableIndexT row, const TagType tag,
const CMoney &inValue);
virtual Boolean SetMemberColPercent(const TableIndexT row, const TagType tag,
const CMoney &inValue);

virtual CDate GetMemberColDate(const TableIndexT row, const TagType tag) const;
virtual Boolean SetMemberColDate(const TableIndexT row, const TagType tag,
const CDate &inDate);
virtual CDate GetMemberColTime(const TableIndexT row, const TagType tag) const;
virtual Boolean SetMemberColTime(const TableIndexT row, const TagType tag,
const CDate &inTime);

virtual Boolean SetMemberCV(const TableIndexT row, const TagType tag,
DBid inValue, const DBid classID = 0);
virtual void SetCellColType(const TableIndexT row, const TableIndexT col,
const SInt32 inType);

virtual SInt32 GetMaxTextLength(const TableIndexT &col) const;

virtual CTextString GetColTitle(const TableIndexT col) const;
virtual CTextString GetStockColTitle(const TableIndexT col) const;
virtual SInt32 GetColType(const TableIndexT col) const;
virtual SInt32 GetColType(const TableIndexT /*row*/, const TableIndexT col) const
{ return GetColType(col); }
virtual SInt32 GetColType(const TableCellT &cell) const
{ return GetColType(ROW(cell), COL(cell)); }
virtual SInt32 GetColType(const SMemberInfo &memberInfo) const;
virtual SInt16 GetColData(const TableIndexT col) const;
virtual SInt32 GetColData(const SMemberInfo &memberInfo) const;
virtual void SetFindMode(const Boolean findMode);

virtual void GetFindSelectors(CTCS_Array *selectorArray) const;
virtual DB_MemberSelector *GetSimpleSelector(const SMemberInfo &memberInfo,
const TableIndexT col, const CTextString &cellText) const;
virtual DB_MemberSelector *GetRangeSelector(const SMemberInfo &memberInfo,
const CTextString &lowString, const CTextString &highString) const;

/*virtual void UpdateObjects(TObjectIDArray &objectArray,
const DBid breakdownClassID,
DB_PersistentObject *owner,
const Boolean countSubclasses =true,
const Boolean allowZeros = false);*/

//virtual void UpdateFromIterator(DB_Iterator *iterator);
//virtual void UpdateFromArray(const DBid classID, TObjectIDArray &array);

virtual void UpdateRowFromDBObject(const TableIndexT row,
DB_PersistentObject *object);
virtual void FinishRowFill(const TableIndexT /*row*/) {}
virtual void UpdateCellFromDBObject(const TableIndexT row, const TableIndexT col,
SMemberInfo &memberInfo, DB_PersistentObject *object);

virtual void UpdateDBObjectFromRow(const TableIndexT row,
DB_PersistentObject *object);
virtual void UpdateDBObjectField(const TableIndexT row, const TableIndexT col,
DB_PersistentObject *object);

virtual void FinishTableFill(CProgressBar */*progressBar*/ = nil) {}

virtual void PrepareSubcatCV(const DBid catSystemID, const UInt8 jobClass = 0,
const DBid jobID = 0);
virtual void PrepareCostItemCV();
virtual void PrepareLocationCV();
//virtual void PrepareCostAreaCV();

virtual Boolean AllowNegatives(TableIndexT col) const;
virtual Boolean CanDoFillDown() { return true; }

virtual TagType GetAmountTestTag() const { return 0; }
virtual TagType GetNameTestTag() const { return 0; }
virtual TagType GetCheckmarkTestTag() const { return 0; }
virtual TagType GetFirstDataTag() const { return 0; } // TCS 12/12/01

virtual TableIndexT GetAmountCol() { return GetMemberCol(tag_amount); }

virtual Boolean CanAlwaysChange(const TableCellT &cell) const;

virtual void HandleCheckmarkChanged(const TableIndexT row, const TableIndexT col,
const Boolean isChecked);
virtual void HandleCellCVChanged(const TableIndexT row, const TableIndexT col,
CTCS_CVField *cv);
virtual void HandleCellTextChanged(const TableIndexT row, const TableIndexT col,
const Boolean sendMessage = true);

virtual DBid GetTableCatSystem() const { return mCatSystem; }
virtual void SetTableCatSystem(const DBid inSystem) { mCatSystem = inSystem; }

virtual DBid GetTableJobType() const { return mJobType; }
virtual void SetTableJobType(const DBid inType) { mJobType = inType; }

virtual DBid GetTableJobID() const { return mJobID; }
virtual void SetTableJobID(const DBid inType) { mJobID = inType; }

virtual DBid GetTableJobClass() const { return mJobClass; }
virtual void SetTableJobClass(const DBid inType) { mJobClass = inType; }

virtual DBid GetTableCustomerDiscount() const { return 0; }
virtual void SetTableCustomerDiscount(const DBid /*inValue*/) {}

virtual DBid GetTableLocationPackage() const { return mLocationPackage; }
virtual void SetTableLocationPackage(const DBid inType) { mLocationPackage = inType; }

virtual DBid GetTableMainAccount() const { return mMainAccount; }
virtual void SetTableMainAccount(const DBid inID) { mMainAccount = inID; }

virtual DBClass GetTableMainAccountClass() const { return mMainAccountClass; }
virtual void SetTableMainAccountClass(const DBClass inClass) { mMainAccountClass = inClass; }

virtual CMoney GetColTagMoneyTotal(const TagType tag);
virtual CMoney GetTotalAmount() { return GetColTagMoneyTotal(tag_amount); }
virtual CMoney GetValueCompleted() { return GetColTagMoneyTotal(tag_valuecompleted); }
virtual CMoney GetContractAmount() { return GetColTagMoneyTotal(tag_contractamount); }

// subclasses showing objects in rows can override these methods TCS 11/17/99
// with the tag for columns showing object class & id-
// then double-click will open an editor window showing that object.
virtual TagType GetDetailIDTag() const { return 0; }
virtual TagType GetDetailClassTag() const { return 0; }

// subclasses showing objects in rows can override these methods TCS 11/18/99
// if there is some other way of fetching the id's-
// then double-click will open an editor window showing that object.
virtual DBid GetDetailTransactionID(const TableIndexT row) const;
virtual UInt8 GetDetailTransactionClass(const TableIndexT row) const;

virtual void FillDetailArray(TObjectIDArray &selectArray,
const DBClass detailClass = 0) const;
virtual void FillDetailArray(TObjectInfoArray &selectArray) const;

virtual void HandleNonEditCellDblClicked(const TableCellT &inCell);
virtual Boolean HandleEnterKey();

virtual void PrepareToAddRow();

virtual Boolean ShowsSingleClass() const { return mShowsSingleClass; }
virtual void SetShowsSingleClass(const Boolean inValue) { mShowsSingleClass = inValue; }

virtual UInt8 GetTableClass() { return table_breakdown; } // TCS 4/28/00

virtual Boolean MemoryIsShort() const { return mMemoryIsShort; } // TCS 8/21/01
virtual void SetMemoryIsShort(const Boolean inValue = true) { mMemoryIsShort = inValue; }

virtual Boolean IsCompletelyFilled() const { return mCompletelyFilled; } // TCS 8/21/01
virtual void SetIsCompletelyFilled(const Boolean inValue = true) { mCompletelyFilled = inValue; }

virtual Boolean HasColumn(const TagType tag) const;
virtual Boolean HasUncheckedRows() const;

virtual TMemberArray GetColumnMemberArray() { return mColumnMemberArray; }

virtual void SetSpecialOrderOnly(const Boolean inValue = true) { mSpecialOrderOnly = inValue; }
virtual void SetNoSpecialOrder(const Boolean inValue = true) { mNoSpecialOrder = inValue; }

protected:

TMemberArray mColumnMemberArray; // array of member info for each col
TObjectInfoArray mBreakdownItemArray; // array of breakdown object infos TCS 2/7/00

DBid mCatSystem,
mJobType,
mJobID,
mLocationPackage, // TCS 7/22/99
mMainAccount; // TCS 2/22/00

UInt8 mJobClass,
mMainAccountClass; // TCS 12/13/99
UInt8 mShowsSingleClass:1, // TCS 1/4/01
mMemoryIsShort:1, // TCS 8/21/01
mCompletelyFilled:1,
mSpecialOrderOnly:1, // TCS 2/25/02
mNoSpecialOrder:1,
breakdownTableFiller:3;
UInt8 mTableFiller; // TCS 4/24/03

virtual DBid GetCellCVClassID(const TableCellT &inCell) const;
virtual DBid GetMemberCVClassID(const SMemberInfo &memberInfo) const;

virtual DBid GetMenuCVClassID(const TableCellT &inCell) const;
virtual DBid GetMemberMenuCVClassID(const SMemberInfo &memberInfo) const;

virtual UInt8 GetFieldType(const TableIndexT col) const;
virtual UInt8 GetFieldType(const TableIndexT row, const TableIndexT col) const;

virtual CTCS_CVField *CreateNewCellCVField(const TableCellT &inCell,
const SPaneInfo &inPaneInfo);
virtual CMenuCV *CreateNewCellMenuCVField(const TableCellT &inCell,
const SPaneInfo &inPaneInfo);

virtual void PrepCellCVField(const TableIndexT row,
const TableIndexT col, CTCS_CVField *cellField);

virtual void DrawRow(const TableIndexT row, const TableIndexT leftCol,
const TableIndexT rightCol);
/*typedef void (*BreakdownTableColFunc)(TableIndexT col,
const SMemberInfo &memberInfo,
CBreakdownTable *table,...);

void DoForEachMemberCol(BreakdownTableColFunc func,
void *param1 = nil,
void *param2 = nil,
void *param3 = nil,
void *param4 = nil);*/

virtual void DoFillDown();

virtual void ResetSubcategory(const TableIndexT row);
virtual void ResetCostItem(const TableIndexT row, const SInt32 oldValue, const SInt32 newValue);
virtual void UpdateItemDetails(const TableIndexT /*row*/) {}

virtual void UpdateRow(const TableIndexT /*row*/) {}

virtual Boolean NeedsRowRecalc(const TagType /*tag*/) { return true; } // TCS 8/14/01
virtual CMoney RecalcBreakdownRow(const TableIndexT /*row*/, const TagType /*changedCol*/)
{ return TCS_Real(0); }

virtual CMoney RecalcTotal();

virtual Boolean CanChangeMultipleCheckmarks() const { return true; } // TCS 8/17/01
};