Initial
This commit is contained in:
87
cashflow/CALCTHRD.CPP
Normal file
87
cashflow/CALCTHRD.CPP
Normal file
@@ -0,0 +1,87 @@
|
||||
#include <common/stdio.hpp>
|
||||
#include <cashflow/calcthrd.hpp>
|
||||
#include <cashflow/calcdlg.hpp>
|
||||
#include <cashflow/cashflow.hpp>
|
||||
#include <cashflow/cashdefs.hpp>
|
||||
#include <cashflow/ppydlg.hpp>
|
||||
#include <cashflow/graphwnd.hpp>
|
||||
#include <fpsheet/fpsheet.hpp>
|
||||
#include <common/stdio.hpp>
|
||||
#include <common/crsctrl.hpp>
|
||||
|
||||
DWORD CalcThread::threadHandler(ThreadMessage &someThreadMessage)
|
||||
{
|
||||
switch(someThreadMessage.message())
|
||||
{
|
||||
case ThreadMessage::TM_CREATE :
|
||||
break;
|
||||
case ThreadMessage::TM_DESTROY :
|
||||
break;
|
||||
case ThreadMessage::TM_USER :
|
||||
if(someThreadMessage.userDataOne()==CalcStart)
|
||||
{
|
||||
mCalcMutex.requestMutex();
|
||||
performCalc(*(CalcDlg*)someThreadMessage.userDataTwo());
|
||||
mCalcMutex.releaseMutex();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void CalcThread::startCalc(CalcDlg &calcDlg)
|
||||
{
|
||||
mIsInReset=TRUE;
|
||||
mCalcMutex.requestMutex();
|
||||
mIsInReset=FALSE;
|
||||
ThreadMessage startMessage(ThreadMessage::TM_USER,CalcThread::CalcStart,(DWORD)&calcDlg);
|
||||
postMessage(startMessage);
|
||||
mCalcMutex.releaseMutex();
|
||||
}
|
||||
|
||||
void CalcThread::performCalc(CalcDlg &calcDlg)
|
||||
{
|
||||
Block<PureCashFlow> cashFlows;
|
||||
PurePassThru passThru;
|
||||
CashFlow cashFlow;
|
||||
String trmString;
|
||||
String prnString;
|
||||
String cpnString;
|
||||
size_t numFlows;
|
||||
|
||||
calcDlg.getText(CALC_TERM,trmString);
|
||||
calcDlg.getText(CALC_PRINCIPAL,prnString);
|
||||
calcDlg.getText(CALC_COUPON,cpnString);
|
||||
if(trmString.isNull()||prnString.isNull()||cpnString.isNull()){::MessageBeep(0);return;}
|
||||
passThru.issBal(::atof((LPSTR)prnString));
|
||||
passThru.wac(::atof((LPSTR)cpnString));
|
||||
passThru.coupon(::atof((LPSTR)cpnString));
|
||||
passThru.wam(::atol((LPSTR)trmString));
|
||||
passThru.origTerm(::atol((LPSTR)trmString));
|
||||
passThru.psa(0.00);
|
||||
if(calcDlg.mPrePay.amount())cashFlow.generateCashFlows(passThru,cashFlows,calcDlg.mPrePay);
|
||||
else cashFlow.generateCashFlows(passThru,cashFlows);
|
||||
calcDlg.mlpGraphWindow->showFlows(cashFlows,::atol((LPSTR)trmString));
|
||||
numFlows=cashFlows.size();
|
||||
calcDlg.mlpCalcSheet->clearData();
|
||||
calcDlg.mlpCalcSheet->setCurrentCell(1,1);
|
||||
for(short itemIndex=0;itemIndex<numFlows;itemIndex++)
|
||||
{
|
||||
Block<String> itemStrings;
|
||||
if(mIsInReset)break;
|
||||
cashFlows[itemIndex].itemStrings(itemStrings);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::IssBal,itemStrings[CalcDlg::IssBal]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::SMM,itemStrings[CalcDlg::SMM]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::MtgPay,itemStrings[CalcDlg::MtgPay]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::NetIntPay,itemStrings[CalcDlg::NetIntPay]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::GrossInt,itemStrings[CalcDlg::GrossInt]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::SchPrn,itemStrings[CalcDlg::SchPrn]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::Prepay,itemStrings[CalcDlg::Prepay]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::TotPrin,itemStrings[CalcDlg::TotPrin]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::Cashflow,itemStrings[CalcDlg::Cashflow]);
|
||||
calcDlg.mlpCalcSheet->setCellData(itemIndex,CalcDlg::Factor,itemStrings[CalcDlg::Factor]);
|
||||
}
|
||||
::SetFocus(calcDlg.mlpCalcSheet->getHandle());
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user