⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 punjenjespiskabrojiladlg.cpp

📁 load data from pc to hand held terminal and vice versa
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PunjenjeSpiskaBrojilaDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RucniTerminal.h"
#include "PunjenjeSpiskaBrojilaDlg.h"

#include <direct.h>
#include <stdlib.h>

#include "IzaberiDatotekuDlg.h"
#include "Komunikator.h"
#include "Konfig.h"
#include "HardverRT.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPunjenjeSpiskaBrojilaDlg dialog


CPunjenjeSpiskaBrojilaDlg::CPunjenjeSpiskaBrojilaDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPunjenjeSpiskaBrojilaDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPunjenjeSpiskaBrojilaDlg)
	m_NazivDatoteke = _T("");
	//}}AFX_DATA_INIT
}


void CPunjenjeSpiskaBrojilaDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPunjenjeSpiskaBrojilaDlg)
	DDX_Control(pDX, IDC_PROGRES_INDIKATOR, m_ProgresIndikator);
	DDX_Text(pDX, IDC_NAZIV_DATOTEKE, m_NazivDatoteke);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPunjenjeSpiskaBrojilaDlg, CDialog)
	//{{AFX_MSG_MAP(CPunjenjeSpiskaBrojilaDlg)
	ON_BN_CLICKED(IDC_IZABERI_DATOTEKU, OnIzaberiDatoteku)
	ON_BN_CLICKED(IDC_PREKINI_PUNJENJE, OnPrekiniPunjenje)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPunjenjeSpiskaBrojilaDlg message handlers

void CPunjenjeSpiskaBrojilaDlg::OnIzaberiDatoteku() 
{
	CIzaberiDatotekuDlg dijalogZaIzborDatoteke( TRUE );

    if ( dijalogZaIzborDatoteke.DoModal() == IDOK ) {
        // Postavi izabrani naziv datoteke
        m_NazivDatoteke = dijalogZaIzborDatoteke.GetPathName();
        CPunjenjeSpiskaBrojilaDlg::UpdateData( FALSE );
    }
}

void CPunjenjeSpiskaBrojilaDlg::OnOK() 
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();

    int PorukaID;
    bool bOdustao = false;
    bool bNastavi( true );

    // Najpre proveri da li je terminal spreman za narednu komandu
    KAdminInfo admInf;
    if( pRTApp->TerminalSpreman( PorukaID, admInf ) ) {

        // Procitaj dodatni opis rucnog terminala( podrzan od verzije 1.3 )
        KOpisRT opisRT;
        bNastavi = true;
        if ( admInf.bDodatniOpisRT ) {
            if ( !pRTApp->OcitajUbrzanoDodatniOpisRT( opisRT ) ) {
                // Ako citanje opisa ne uspe, ne nastavljam dalje jer
                // nesaglasnost opisa sa 'admin info', dovodi kasnije do gresaka !
                PorukaID = IDS_PUNJENJE_SPISKA_JOK;
                bNastavi = false;
            }
        }

        if ( bNastavi ) {
            // Pokupi podatke iz forme u odgovarajuce promenljive
            CPunjenjeSpiskaBrojilaDlg::UpdateData();
    
            TOpisBrojilaMap tabela;
            TSpisakSerijskihBrojeva pesackiPut;
    
            // Procitaj spisak iz datoteke i formiraj tabelu( podaci ) i pesacki put( redosled podataka )
            if ( ProcitajSpisakIzDatoteke( m_NazivDatoteke, tabela, pesackiPut, PorukaID ) ) {
    
                unsigned int nBrojBrojila;
                KString cKontrolInfo;
                TListaStringova podaciOBrojilima;
    
                // Prevedi podateke u oblik pogodan za slanje
                if ( PripremiPodatkeZaSlanje( tabela, pesackiPut, admInf, opisRT,
                                              nBrojBrojila, cKontrolInfo, podaciOBrojilima,
                                              PorukaID ) ){
    
                    // Trazi potvrdu od korisnika
                    if ( pRTApp->PrikaziSigurnosnoPitanje( IDS_SIGUR_PITANJE ) == IDOK ) {
    
                        // Ukljuci dugme za prekid, iskljuci ostalu dugmad
                        CButton* dugmePrekini   = (CButton*)this->GetDlgItem( IDC_PREKINI_PUNJENJE );
                        CButton* dugmeOK        = (CButton*)this->GetDlgItem( IDOK );
                        CButton* dugmeCancel    = (CButton*)this->GetDlgItem( IDCANCEL );
                        CButton* dugmeIzaberiDat= (CButton*)this->GetDlgItem( IDC_IZABERI_DATOTEKU );
                        if (    dugmePrekini    != NULL 
                             && dugmeOK         != NULL
                             && dugmeCancel     != NULL
                             && dugmeIzaberiDat != NULL )
                        {
                            dugmePrekini->ShowWindow( SW_SHOW );
                            dugmeOK->ShowWindow( SW_HIDE );
                            dugmeCancel->ShowWindow( SW_HIDE );
                            dugmeIzaberiDat->ShowWindow( SW_HIDE );
                        }
                        PrekiniPunjenje = false;
    
                        // Prikazi "progres indikator"
                        m_ProgresIndikator.ShowWindow( SW_SHOWNA );
                        m_ProgresIndikator.SetPos( 0 );
                        this->RedrawWindow();
    
                        // Za potrebe 'progres indikatora' izracunaj ukupan broj bajtova koji treba preneti 
                        unsigned int nBrojBajtovaZaPodatak;
                        if ( admInf.bDodatniOpisRT ) {
                            // nova verzija ( >= 1.3 )
                            nBrojBajtovaZaPodatak = admInf.BrojBajtovaZaOpisPodatka() + opisRT.DuzinaSvihPodatakaBezOpisa();
                        }
                        else {
                            // stara verzija
                            nBrojBajtovaZaPodatak = KOpisPodataka::Instance()->BrojBajtovaZaSvePodatke( admInf );
                        }
                        unsigned int nUkupanBrojBajtova = ( nBrojBrojila + 1 ) * nBrojBajtovaZaPodatak;
                        unsigned int nProgres = 0;
                        m_ProgresIndikator.SetRange32( 0, nUkupanBrojBajtova );
    
                        //////////////////// SLANJE PODATAKA << BEGIN >> ///////////////////
                        // Najpre posalji podatke za inicijalizaciju prenosa :
                        // broj brojila koji treba preneti i adresu poslednjeg brojila u spisku.
                        if ( KKomunikator::Instance()->InitSnimiSpisakBrojila( cKontrolInfo.cString ) ) {
                            m_ProgresIndikator.SetPos( nProgres += nBrojBajtovaZaPodatak );
    
                            // Za svako brojilo u spisku posalji po jednu poruku terminalu
                            TListaStringova::iterator ls_iter    = podaciOBrojilima.begin();
                            TListaStringova::iterator ls_iterEnd = podaciOBrojilima.end();
                            bool bPunjenjeSpiskaUspelo = true;
                            while (    !PrekiniPunjenje 
                                    && bPunjenjeSpiskaUspelo 
                                    && ls_iter != ls_iterEnd ) 
                            {
                                bPunjenjeSpiskaUspelo = 
                                    KKomunikator::Instance()->PosaljiPodatakOBrojiluIzSpiska( ls_iter->cString );
                                m_ProgresIndikator.SetPos( nProgres += nBrojBajtovaZaPodatak );
                                ls_iter++;
    
                                // Proveri poruke koje su u medjuvremenu stigle
                                // ( da bi omogucio prekid operacije )
                                MSG msg;
                                while (::PeekMessage(&msg, NULL, 0, 0, PM_NOYIELD | PM_REMOVE)) {
                                    ::TranslateMessage(&msg);
                                    ::DispatchMessage(&msg);
                                }
    
                            }
    
                            // Proveri da li je doslo do prekida ( ili je zavrsio do kraja )
                            if ( PrekiniPunjenje ) {
                                PorukaID = IDS_PUNJENJE_PREKINUTO;
                                bPunjenjeSpiskaUspelo = false;
    
                                // Napuni 'default' spisak na rucni terminal
                                // ( da bi na rucnom terminalu imao 'regularne' podatke )
                                BeginWaitCursor();
                                NapraviDefaultSpisak( tabela, pesackiPut );
                                int pomPorukaID;
                                if ( PripremiPodatkeZaSlanje( tabela, pesackiPut, admInf, opisRT,
                                                              nBrojBrojila, cKontrolInfo, podaciOBrojilima,
                                                              pomPorukaID ) ){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -