📄 punjenjespiskabrojiladlg.cpp
字号:
if ( KKomunikator::Instance()->InitSnimiSpisakBrojila( cKontrolInfo.cString ) ) {
TListaStringova::iterator ls_iter = podaciOBrojilima.begin();
TListaStringova::iterator ls_iterEnd = podaciOBrojilima.end();
bool bOK = true;
while ( bOK && ls_iter != ls_iterEnd ) {
bOK = KKomunikator::Instance()->PosaljiPodatakOBrojiluIzSpiska( ls_iter->cString );
ls_iter++;
}
}
}
EndWaitCursor();
}
else {
if ( bPunjenjeSpiskaUspelo )
PorukaID = IDS_PUNJENJE_SPISKA_OK;
else
PorukaID = IDS_PUNJENJE_SPISKA_JOK;
}
}
//////////////////// SLANJE PODATAKA << END >> ///////////////////
// Sakrij "progres indikator"
m_ProgresIndikator.ShowWindow( SW_HIDE );
this->RedrawWindow();
// Vrati dugmad na default
dugmePrekini->ShowWindow( SW_HIDE );
dugmeOK->ShowWindow( SW_SHOW );
dugmeCancel->ShowWindow( SW_SHOW );
dugmeIzaberiDat->ShowWindow( SW_SHOW );
} // sigurnosno pitanje
else {
bOdustao = true;
}
} // if ( PripremiPodatkeZaSlanje ... )
} // if ( ProcitajSpisakIzDatoteke ... )
} // if ( bNastavi )
} // if ( !pRTApp->TerminalSpreman ...
if ( !bOdustao ) pRTApp->MyMessageBox( PorukaID );
}
BOOL CPunjenjeSpiskaBrojilaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Postavi inicijalnu vrednost naziv datoteke
m_NazivDatoteke = KKonfig::Instance()->DajDatotekuZaSpisak().data();
CPunjenjeSpiskaBrojilaDlg::UpdateData( FALSE );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPunjenjeSpiskaBrojilaDlg::OnPrekiniPunjenje()
{
PrekiniPunjenje = true;
}
// Funkcija priprema sve sto je potrebno za slanje podatka na rucni terminal.
// Ulazni argumetni :
// - spisak brojila ( tabela, pesackiPut )
// - podaci o rucnom terminalu ( admInf )
// Izlazni argumenti :
// - ukupan broj brojila
// - podaci koji se salju ( cKontrolInfo, podaciOBrojilima )
// - ID poruke o gresci ( PorukaID )
bool CPunjenjeSpiskaBrojilaDlg::PripremiPodatkeZaSlanje( const TOpisBrojilaMap& tabela,
const TSpisakSerijskihBrojeva& pesackiPut,
const KAdminInfo& admInf,
const KOpisRT& opisRT,
unsigned int& nBrojBrojila,
KString& cKontrolInfo,
TListaStringova& podaciOBrojilima,
int& PorukaID ) {
bool bIzlaz = false;
// Sracunaj ukupan broj brojila u spisku
nBrojBrojila = tabela.size();
if ( nBrojBrojila == 0 ) {
PorukaID = IDS_SPISAK_PRAZAN;
}
else {
unsigned int nAdresaSpiskaBrojila = admInf.nAdresaSpiskaUEEPROMu;
// Postavi flegove na osnovu kojih se racunaju adrese za smestanje podataka.
KKontrolaEEPROMa::Instance()->PostaviKonfiguraciju( admInf.KonfiguracijaMemorije,
admInf.nVelicinaEEPROMModula,
nAdresaSpiskaBrojila );
// Sracunaj adresu poslednjeg u spisku brojila
unsigned int nAdresaPoslednjegUSpisku = nAdresaSpiskaBrojila
+ ( nBrojBrojila - 1 ) * admInf.DuzinaElementaSpiska();
// Formiraj kontrolni blok informacija
cKontrolInfo =
KKorisno::Instance()->KonvertIntUNiblString( nBrojBrojila, 2 );
cKontrolInfo +=
KKorisno::Instance()->KonvertIntUNiblString( nAdresaPoslednjegUSpisku, 2 );
cKontrolInfo +=
KKorisno::Instance()->KonvertIntUNiblString( KKontrolaEEPROMa::Instance()->DajOsnovniModul(), 1 );
// Formiraj listu stringova sa podacima o brojilima
// ( istovremeno proveri da li ima mesta u EEPROM-u )
podaciOBrojilima.clear();
if ( KInterpret::Instance()->FormirajListuSaPodacima( tabela, pesackiPut,
nAdresaPoslednjegUSpisku,
admInf, opisRT,
podaciOBrojilima ) ) {
bIzlaz = true;
}
else {
PorukaID = IDS_EEPROM_PUN;
}
} // if ( nBrojBrojila == 0 ) ...
return bIzlaz;
}
// Funkcija cita datoteku 'cNaziv' i smesta podatke o brojilima u strukture podataka
// 'tabela' i 'pesackiPut'.
// U slucaju greske, vraca false i ID poruke o gresci ( PorukaID )
bool CPunjenjeSpiskaBrojilaDlg::ProcitajSpisakIzDatoteke( const CString& cNaziv,
TOpisBrojilaMap& tabela,
TSpisakSerijskihBrojeva& pesackiPut,
int& PorukaID )
{
bool bIzlaz = false;
// Najpre odvoji naziv datoteke i naziv direktorijuma( staze )
CString cNazivDatoteke, cStaza;
CRucniTerminalApp::OdvojiDatotekuOdStaze( cNaziv, cNazivDatoteke, cStaza );
if ( cNazivDatoteke != "" ) {
// Predji na dati direktorijum
bool bPreso = true;
if ( cStaza != "" )
if ( _chdir( cStaza ) == -1 ) bPreso = false;
if ( !bPreso )
PorukaID = IDS_NEMA_DIREKTORIJUM;
else {
ifstream ulaz( cNazivDatoteke );
if ( !ulaz.is_open() ) {
PorukaID = IDS_NEMA_FAJL;
}
else {
// Kopiraj podatke iz datoteke u mapu
KInterpret::Instance()->ProcitajSpisakBrojila( ulaz, tabela, pesackiPut );
ulaz.close();
bIzlaz = true;
}
}
}
else {
PorukaID = IDS_NAZIV_DATOTEKE_OBAVEZAN;
}
return bIzlaz;
}
// Funkcija kreira spisak koji se sastoji samo od jednog brojila
void CPunjenjeSpiskaBrojilaDlg::NapraviDefaultSpisak( TOpisBrojilaMap& tabela,
TSpisakSerijskihBrojeva& SpisakSerijskihBrojeva )
{
// Najpre isprazni tabele
tabela.clear();
SpisakSerijskihBrojeva.clear();
// Unesi samo 1 element u spisak ( brojilo 0 )
int nSerijskiBroj = 0;
KOpisBrojila opisBrojila;
opisBrojila.napomena = KString( "DEFAULT" );
opisBrojila.tip = TIP_BROJILA_NEPOZNAT;
tabela.insert( element_tabele( nSerijskiBroj, opisBrojila ) );
SpisakSerijskihBrojeva.push_back( nSerijskiBroj );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -