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

📄 punjenjespiskabrojiladlg.cpp

📁 load data from pc to hand held terminal and vice versa
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                                    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 + -