/* jasenf.cpp ** TJasenForm-luokan toteutus - käytetään yhden jäsenen tietojen kysymiseen ** näyttämiseen ja muuttamiseen ** ** Tekijät: Tommi Lahtonen ** Tehty: Huhtikuu 1997 ** ** Muutettu: 07.9.1997 ** Mitä muutettu: Lisätty mahdollisuus muuttaa jäsenen tietoja ** Muutettu: 18.1.1998/vl ** Mitä muutettu + TarkistaOEM käyttöön jos sattuu olemaan DOS-merkistöjä ** + kirjoituksen aikainen tarkistus laitettu toimimaan ** + paljon muita muutoksia, jotta käyttäjän kirjoittamat ** tiedot eivät huku ** Huonoja ratkaisuja mm: ** - suora isäformin kutsuminen => isäformi ei voi olla kuin tiettyä tyyppiä ** parempi olisi lähettää tapahtuma: OnJasenMuuttunut ** void Edit1Change(TObject *Sender); Tekee tarkistukset edit-kentän muuttuessa void OKbuttonClick(TObject *Sender); hyväksyy muutokset void Edit1Exit(TObject *Sender); tekee tarkistukset edit-kentästä poistuttaessa void CancelButtonClick(TObject *Sender); peruu muutokset void nayta_kentat(bool readonly=false); näyttää tarvittavan määrän kenttiä, haluttaessa ilman muutosoikeutta void tarkista(TEdit *edit, int nro); tarkistaa annetun editkentän sisällön joka muutoksen jälkeen ( ei tehty ) bool tarkista_kokonaan(TEdit *edit, int nro); tarkistaa koko edit-kentän int muuta(cJasen &jas, cKerho *k); mahdollistaa tuodun jasenen tietojen muuttamisen int kysy(cJasen &jas); kysyy uuden jasenen tiedot void nayta(int p, const cJasen &jas); näyttää jasenen tiedot ja mahdollistaa niiden korjailun TJasenForm(TComponent* Owner, cKerho *k); alustaja */ //--------------------------------------------------------------------------- #include #pragma hdrstop #include "jasenf.h" #include "omat.h" #include "kerhowin.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" TJasenForm *JasenForm; //--------------------------------------------------------------------------- void TJasenForm::alusta(cKerho *k) { korjaa = false; muutos = false; kerho = k; jasen = NULL; int i; for(i=0; iHeight = 20; labels[i]->Width = 100; labels[i]->Top = i*22; labels[i]->Left = 0; labels[i]->Tag = i; labels[i]->Parent = this; edits[i] = new TEdit(this); edits[i]->Height = 20; edits[i]->Width = 150; edits[i]->Top = i*22; edits[i]->Left = 102; edits[i]->Tag = i; edits[i]->Parent = this; edits[i]->OnChange = Edit1Change; edits[i]->OnExit = Edit1Exit; } kaytossa = false; } __fastcall TJasenForm::TJasenForm(TComponent* Owner, cKerho *k) : TForm(Owner) { alusta(k); } //--------------------------------------------------------------------------- void TJasenForm::nayta_kentat(bool readonly) { int lkm, eka; muutettu = false; talleta = true; saa_poistua = true; if ( jasen ) { eka = jasen->eka_kysymys(); lkm = jasen->kenttia(); if (lkm>LKM) lkm = LKM; } else lkm = 0; for (int i=0; i+ekaVisible = true; labels[i]->Tag = i+eka; labels[i]->Caption = TarkistaOEM(jasen->kysymys(i+eka)); edits[i]->Visible = true; edits[i]->ReadOnly = readonly; edits[i]->Tag = i+eka; edits[i]->Text = TarkistaOEM(jasen->kentta_jonoksi(i+eka).c_str()); } for (int i=lkm-eka; iVisible = false; edits[i]->Visible = false; } kaytossa = true; ActiveControl = edits[0]; } //------------------------------------------------------------------------------ int TJasenForm::muuta(cJasen &jas, cKerho *k, const char *viesti) { saa_poistua = true; if ( !voiko_sulkea() ) return false; if ( viesti != NULL ) Caption = viesti; else Caption = "Tietojen muuttaminen"; // kerho = k; muutos = true; korjaa = false; jasen = &jas; djasen = false; nayta_kentat(); // CancelButton->Visible = OKbutton->Visible = true; return ShowModal(); } //------------------------------------------------------------------------------ bool TJasenForm::nayta(int p, const cJasen &jas) { saa_poistua = true; if ( !voiko_sulkea() ) return false; paikka = p; Caption = "Jäsenen tiedot"; muutos = true; korjaa = true; jasen = new cJasen(jas); djasen = true; nayta_kentat(); // CancelButton->Visible = OKbutton->Visible = false; Show(); return true; } //------------------------------------------------------------------------------ int TJasenForm::kysy(cJasen &jas) { saa_poistua = true; if ( !voiko_sulkea() ) return false; Caption = "Syötä uuden jäsenen tiedot"; muutos = true; jasen = &jas; djasen = false; korjaa = false; nayta_kentat(true); // pelkka_luku(); // CancelButton->Visible = OKbutton->Visible = true; return ShowModal(); } //--------------------------------------------------------------------------- void __fastcall TJasenForm::Edit1Change(TObject *Sender) { tarkista((TEdit*)Sender, ((TEdit*)Sender)->Tag); } //------------------------------------------------------------------------------ bool TJasenForm::tarkista_kokonaan(TEdit *edit, int nro) { if (!muutos) return true; cJasen apujasen(*jasen), foojasen; cKenttavirhe virhe = apujasen.sijoita(nro, edit->Text.c_str()); int lkm, kuka; switch ( virhe.Taso() ) { case KENTTA_OK: return true; case KENTTA_VAROITUS: KerroVirhe(virhe.Virhe()); return true; case KENTTA_UUDELLEEN: case KENTTA_MUUTETTU_KYSY: KerroVirhe(virhe.Virhe()); edit->Text = apujasen.kentta_jonoksi(nro).c_str(); return false; case KENTTA_OK_ONKO_AINOA: lkm = kerho->laske_montako_muuta(apujasen,nro,kuka); if ( lkm == 0 ) break; KerroVirhe("On jo ennestään! Ei käy!"); /* foojasen = kerho->Jasenet().anna(kuka); */ return false; case KENTTA_OK_VAROITA_MUUT: lkm = kerho->laske_montako_muuta(apujasen,nro,kuka); if ( lkm == 0 ) break; if ( kylla_kysymys("On jo ennestään, lisätäänkö silti?") ) { jasen->sijoita(nro, edit->Text.c_str()); muutettu = true; } /* foojasen = kerho->Jasenet().anna(kuka); uusiform = new TJasenForm(this,kerho); uusiform->Caption = "Varoitus! On jo ennestään!"; if (uusiform->kysy(foojasen)==mrOk) return true; */ return false; default: return false; } return true; } //------------------------------------------------------------------------------ void TJasenForm::tarkista(TEdit *edit, int nro) { char *apu = tee_jono(edit->Text.c_str()); string jono(apu),alkup(apu); muunnos_funktio funk(jasen->kentta_muunnos(nro)); if (funk) jono = funk(apu); free(apu); if ( alkup == jono ) return; int i = edit->SelStart; edit->Text = jono.c_str(); edit->SelStart = i; } //--------------------------------------------------------------------------- bool TJasenForm::Erilainen(TEdit *Edit) { return Edit->Text != ((jasen->kentta_jonoksi(Edit->Tag)).c_str()); } //--------------------------------------------------------------------------- bool TJasenForm::TarkistaEdit(TEdit *Edit) { if ( !Erilainen(Edit) ) return true; if ( tarkista_kokonaan(Edit,Edit->Tag) ) return true; Edit->SetFocus(); return false; } //--------------------------------------------------------------------------- void __fastcall TJasenForm::Edit1Exit(TObject *Sender) { saa_poistua = true; if ( ActiveControl == CancelButton ) return; saa_poistua = TarkistaEdit((TEdit*)Sender); } //--------------------------------------------------------------------------- bool TJasenForm::voiko_sulkea() { if ( !kaytossa ) return true; if ( !Visible ) return true; if ( !talleta ) return true; if ( !saa_poistua ) return false; int lkm, eka; if (jasen) { eka = jasen->eka_kysymys(); lkm = jasen->kenttia(); if (lkm>LKM) lkm = LKM; } else lkm = 0; for ( int i=0; i+ekasijoita(i+eka, edits[i]->Text.c_str()); muutettu = true; } }//virhe = jasen.sijoita(k,jono); const cJasen jas(*jasen); if ( korjaa ) { kerho->korvaa(paikka, jas); if ( jasen && djasen ) { delete jasen; djasen = false; } if ( muutettu ) ((TNaytto*)Owner)->PaivitaListbox(); } kaytossa = false; return true; } //--------------------------------------------------------------------------- void __fastcall TJasenForm::CancelButtonClick(TObject *Sender) { talleta = false; ModalResult = mrCancel; if (korjaa) Close(); } //--------------------------------------------------------------------------- void __fastcall TJasenForm::FormCloseQuery(TObject *Sender, bool &CanClose) { CanClose = voiko_sulkea(); } //--------------------------------------------------------------------------- void __fastcall TJasenForm::OKbuttonClick(TObject *Sender) { ModalResult = mrOk; if (korjaa) Close(); } //--------------------------------------------------------------------------- void __fastcall TJasenForm::FormDeactivate(TObject *Sender) { TEdit *edit = dynamic_cast(Sender); if ( !edit ) return; if ( TarkistaEdit(edit) ) return; SetFocus(); } //---------------------------------------------------------------------------