#include "alg.h" #include "alg_cfg.h" #include "demohelp.h" #include "mylib.h" #include "ed_alg1.h" //#include "inplist.h" TAlgDialog1::TAlgDialog1( ) : TDialog( TRect( 0, 0, 80, 23 ),"" ), TWindowInit( TAlgDialog1::initFrame ) { int x1,x2,x_pr; char str[256],*str1; options |= ofCentered; helpCtx=hcAllASave; getcwd(PathDir,sizeof(PathDir)); sprintf(str,Text_msg[30],PathDir); title=newStr(str); TmpColect = new TCompCollect(10,10); AlgColect = new TCompCollect(10,10); FormColect = new TCompCollect(10,10); myApp->LoadAlgAll(AlgConf,AlgColect,FormColect); TView * Monosel = new TView(TRect(2,2,13,14)); Monosel->options |= ofFramed; insert(Monosel); Monosel = new TView(TRect(14,3,78,8)); Monosel->options |= ofFramed; insert(Monosel); Monosel = new TView(TRect(14,9,78,14)); Monosel->options |= ofFramed; insert(Monosel); Monosel = new TView(TRect(2,15,78,21)); Monosel->options |= ofFramed; insert(Monosel); Scr_Alg = new TScrollBar( TRect( 12, 2, 13, 14) ); insert(Scr_Alg); ListB_Alg = new TMyTListBox(TRect( 2, 2, 12, 14), 1, Scr_Alg,NULL); insert(ListB_Alg); ListB_Alg->newList(AlgColect); ListB_Alg->helpCtx=hcAllASearch; L_N_Alg = new TMyLabel(TRect(5, 14, 10, 15),"",NULL,1); insert(L_N_Alg); Ed_Descr = new TEdit( TRect( 14, 1, 78, 2 ),256,SaveEdit); insert(Ed_Descr); Scr_In = new TScrollBar( TRect( 77, 3, 78, 8) ); insert(Scr_In); ListB_In = new TMyTListBox(TRect( 14, 3, 77, 8), 1, Scr_In,SelectInput); insert(ListB_In); ListB_In->newList(TmpColect); Scr_kf = new TScrollBar( TRect( 77, 9, 78, 14) ); insert(Scr_kf); LineColl = new TAlgCollection(10,10); inputBox = new TInputBox(TRect( 14, 9, 77, 14),1,Scr_kf,SelectKoeff); insert(inputBox); inputBox->newList(LineColl); TMyLabel *Label = new TMyLabel(TRect(2, 1, 13, 2), " A~l~gobloks ",ListB_Alg,1); insert(Label); x1=14; x2=78; str1=Text_msg[97]; x_pr=(x2-x1-strlen(str1)+2)/2; Label = new TMyLabel(TRect(x1+x_pr, 2, x2-x_pr, 3), str1,ListB_In,1); insert(Label); L_N_In = new TMyLabel(TRect(x2-8, 2, x2, 3),"",NULL,1); insert(L_N_In); x1=14; x2=78; str1=Text_msg[98]; x_pr=(x2-x1-strlen(str1)+2)/2; Label = new TMyLabel(TRect(x1+x_pr, 8, x2-x_pr, 9), str1,inputBox,1); insert(Label); L_N_Kf = new TMyLabel(TRect(x2-8, 8, x2, 9),"",NULL,1); insert(L_N_Kf); Ed_Form = new TEdit( TRect( 2, 15, 77, 16 ),82,NoEdit); insert(Ed_Form); x1=2; x2=78; str1=Text_msg[99]; x_pr=(x2-x1-strlen(str1)+2)/2; Lab_Form = new TMyLabel(TRect(x1+x_pr, 14, x2-x_pr, 15),str1,Ed_Form,0); insert(Lab_Form); Comb_Form = new TComboBox(TRect( 77, 15, 78, 16 ), Ed_Form,FormColect,SelectFormuls); insert(Comb_Form); Scr_TFrmV = new TScrollBar( TRect( 78, 16, 79, 21) ); insert(Scr_TFrmV); Scr_TFrmV->options |= ofPostProcess; Scr_TFrmH = new TScrollBar( TRect( 2, 21, 78, 22) ); insert(Scr_TFrmH); Scr_TFrmH->options |= ofPostProcess; View_TFrm = new TTextView(TRect( 2, 16, 78, 21 ),Scr_TFrmH,Scr_TFrmV); insert(View_TFrm); display_algobloks(OldIndChek=0); ListB_Alg->select(); Modifs=False; searchOk=False; SearchDialog = new TSearchDialog1(AlgColect,FormColect); } TAlgDialog1::~TAlgDialog1() { myApp->FreeAlgAll(AlgColect,FormColect); } // Alg Dialog void TAlgDialog1::handleEvent ( TEvent& event ) { char str[256], *str1, *str2; ushort control; int pos,k1,i,n_1; alg_str *p_alg2; if( event.what == evCommand && event.message.command == cmClose) if(Modifs) { ushort control = messageBox(Text_msg[26],mfWarning | mfOKCancel); if(control==cmOK) { // SaveChengeAlgobl(MyTListBox->focused); sprintf(str,Text_msg[109],PathDir,AlgConf); myApp->SaveAlgAllHdd(str,AlgColect,FormColect); } } TDialog::handleEvent(event); if( event.what == evBroadcast && event.message.command == cmScrollBarChanged) //List ListBox { if(ListB_Alg->state & sfFocused) // ListBox1 { #ifdef __DOS32__ if(getShiftState() & (kbLeftShift|kbRightShift) && !searchOk) { str2=(char *)ListB_Alg->list()->at(OldIndChek); str1=(char *)ListB_Alg->list()->at(ListB_Alg->focused); ListB_Alg->list()->atRemove(OldIndChek); ListB_Alg->list()->atInsert(OldIndChek,str1); ListB_Alg->list()->atRemove(ListB_Alg->focused); ListB_Alg->list()->atInsert(ListB_Alg->focused,str2); ListB_Alg->drawView(); Modifs=True; } #endif searchOk=False; display_algobloks(ListB_Alg->focused); //ListB_Alg->select(); ListB_Alg->clearEvent(event); OldIndChek=ListB_Alg->focused; sprintf(str,"%d",ListB_Alg->focused+1); L_N_Alg->SetText(str); } if(ListB_In->state & sfFocused) { sprintf(str,"%d(%d)",ListB_In->focused+1,ListB_In->list()->getCount()); L_N_In->SetText(str); } if(inputBox->state & sfFocused) { sprintf(str,"%d(%d)",inputBox->focused+1,inputBox->list()->getCount()); L_N_Kf->SetText(str); } } if( event.what == evCommand ) { switch( event.message.command ) { case cmReLoad: control = messageBox(mfWarning | mfOKCancel,Text_msg[38]); if(control!=cmOK) break; myApp->FreeAlgAll(AlgColect,FormColect); AlgColect = new TCompCollect(10,10); FormColect = new TCompCollect(10,10); sprintf(str,Text_msg[109],PathDir,AlgConf); myApp->LoadAlgAll(str,AlgColect,FormColect); ListB_Alg->newList(AlgColect,0); OldIndChek=0; display_algobloks(OldIndChek); Modifs=False; ListB_Alg->select(); break; case cmSave1: control = messageBox(mfWarning | mfOKCancel,Text_msg[37]); if(control!=cmOK) break; sprintf(str,Text_msg[109],PathDir,AlgConf); myApp->SaveAlgAllHdd(str,AlgColect,FormColect); Modifs=False; break; case cmInsert: case cmAdd: case cmRename: if(!ListB_Alg->list()->getCount() && event.message.command==cmRename) break; if(ListB_Alg->list()->getCount()) str1=((alg_str *)(ListB_Alg->list()->at(ListB_Alg->focused)))->name; else str1=Text_msg[49]; control = myApp->execView( myApp->SelDialog = new TSelDialog(PathDir,6,str1)); if(control==cmOK) { str1 = (char *)myApp->SelDialog->Colect2->at(myApp->SelDialog->ListBox2->focused); for(i=0;ilist()->getCount();i++) if(!strncmp(str1,((alg_str *)(ListB_Alg->list()->at(i)))->name,9)) {i= -1; break;} if(i== -1) {DispFixErr(0,Text_msg[15],str1);break;} if(event.message.command==cmInsert) k1 = ListB_Alg->focused; if(event.message.command==cmAdd) k1 = ListB_Alg->list()->getCount();; if(event.message.command==cmRename) strncpy(((alg_str *)(ListB_Alg->list()->at(ListB_Alg->focused)))->name,str1,9); else { p_alg2 = new alg_str; strncpy(p_alg2->name,str1,9); p_alg2->form=0; str1 = new char[2]; str1[0]=0; p_alg2->disript=str1; n_1=((frm_str *)FormColect->at(p_alg2->form))->inp->getCount(); p_alg2->inp = new TCompCollect(5,5); for(i=0;iinp->insert(str1);} n_1=((frm_str *)FormColect->at(p_alg2->form))->koef->getCount(); p_alg2->koef = new TCompCollect(5,5); for(i=0;ikoef->insert(str1);} ListB_Alg->list()->atInsert(k1,p_alg2); } ListB_Alg->setRange( ListB_Alg->list()->getCount() ); ListB_Alg->drawView(); display_algobloks(ListB_Alg->focused); ListB_Alg->select(); Modifs=True; } destroy(myApp->SelDialog); clearEvent(event); break; case cmDelete: if(ListB_Alg->list()->getCount()) { for(k1=0,i=0;ilist()->getCount();i++) if(ListB_Alg->list()->GetOptItem(i)) k1++; if(k1) control = messageBox(mfWarning | mfOKCancel,Text_msg[46],k1); else { control = messageBox(mfWarning | mfOKCancel,Text_msg[29],((alg_str *)(ListB_Alg->list()->at(ListB_Alg->focused)))->name); if(control==cmOK) ListB_Alg->list()->SetOptItem(ListB_Alg->focused,1); } if(control==cmOK) { for(i=0;ilist()->getCount();i++) if(ListB_Alg->list()->GetOptItem(i)) { free( ((alg_str *)AlgColect->at(i))->disript ); ((alg_str *)AlgColect->at(i))->inp->freeAll(); delete ((alg_str *)AlgColect->at(i))->inp; ((alg_str *)AlgColect->at(i))->koef->freeAll(); delete ((alg_str *)AlgColect->at(i))->koef; AlgColect->atFree(i); i--; } ListB_Alg->setRange( ListB_Alg->list()->getCount() ); ListB_Alg->drawView(); display_algobloks(ListB_Alg->focused); ListB_Alg->select(); Modifs=True; } } break; case cmSearch: control = myApp->execView(SearchDialog); if(control==cmOK) { pos=SearchDialog->SearchAlgb(0); if(pos > -1) ListB_Alg->focusItem(pos); else DispFixErr(2,Text_msg[23]); display_algobloks(ListB_Alg->focused); SearchDialog->OldIndChek=pos; } clearEvent(event); break; case cmSearchNext: searchOk=True; if(SearchDialog->OldIndChek == -1){DispFixErr(2,Text_msg[23]);break;} pos=SearchDialog->SearchAlgb(SearchDialog->OldIndChek+1); if(pos < 0) pos=SearchDialog->SearchAlgb(0); ListB_Alg->focusItem(pos); display_algobloks(ListB_Alg->focused); SearchDialog->OldIndChek=pos; break; default: return; } clearEvent( event ); } } void TAlgDialog1::display_algobloks(int alg) { int tip,i,k1,ii; char *str,str1[20]; ListBoxItem *ListItem; if(!AlgColect->getCount()) { Ed_Descr->setState(sfDisabled,True); ListB_In->setState(sfDisabled,True); inputBox->setState(sfDisabled,True); View_TFrm->setState(sfDisabled,True); Ed_Form->setState(sfDisabled,True); Ed_Descr->setData(Text_msg[49]); TmpColect->freeAll(); LineColl->freeAll(); ListB_In->setRange( ListB_In->list()->getCount() ); ListB_In->drawView(); inputBox->setRange( inputBox->list()->getCount() ); inputBox->drawView(); View_TFrm->setData(Text_msg[49]); Ed_Form->setData(Text_msg[49]); L_N_In->SetText(Text_msg[49]); L_N_Kf->SetText(Text_msg[49]); L_N_Alg->SetText(Text_msg[49]); return; } Ed_Descr->setState(sfDisabled,False); ListB_In->setState(sfDisabled,False); inputBox->setState(sfDisabled,False); View_TFrm->setState(sfDisabled,False); Ed_Form->setState(sfDisabled,False); Ed_Descr->setData(((alg_str *)AlgColect->at(alg))->disript); TmpColect->freeAll(); tip=((alg_str *)AlgColect->at(alg))->form; for(i=0;i<((frm_str *)FormColect->at(tip))->inp->getCount();i++) { str = new char[ListB_In->size.x+1]; strncpy(str,(char *)((frm_str *)FormColect->at(tip))->inp->at(i),ListB_In->size.x); for(k1=0,ii=0;iisize.x;ii++){if(k1)str[ii]=' ';else if(str[ii]==0){ii--; k1=1;}} sprintf(str,"%.*s³%.9s",ListB_In->size.x-11,str,(char *)((alg_str *)AlgColect->at(alg))->inp->at(i)); TmpColect->insert(str); } ListB_In->setRange( ListB_In->list()->getCount() ); ListB_In->drawView(); LineColl->freeAll(); for(i=0;i<((frm_str *)FormColect->at(tip))->koef->getCount();i++) { ListItem = new ListBoxItem; strncpy(ListItem->label,(char *)((frm_str *)FormColect->at(tip))->koef->at(i),inputBox->size.x); for(k1=0,ii=0;iisize.x;ii++){if(k1)ListItem->label[ii]=' ';else if(ListItem->label[ii]==0){ii--; k1=1;}} sprintf(ListItem->label,"%.*s",inputBox->size.x-11,ListItem->label); sprintf(str1,"%f",*(float *)((alg_str *)AlgColect->at(alg))->koef->at(i)); strncpy(ListItem->value,str1,9); LineColl->insert(ListItem); } inputBox->setRange( inputBox->list()->getCount() ); inputBox->drawView(); Comb_Form->posit=tip; Ed_Form->setData(((frm_str *)FormColect->at(tip))->name); View_TFrm->setData(((frm_str *)FormColect->at(tip))->formul); sprintf(str1,"%d(%d)",ListB_In->focused+1,ListB_In->list()->getCount()); L_N_In->SetText(str1); sprintf(str1,"%d(%d)",inputBox->focused+1,inputBox->list()->getCount()); L_N_Kf->SetText(str1); sprintf(str1,"%d",ListB_Alg->focused+1); L_N_Alg->SetText(str1); } int TAlgDialog1::SelectKoeff(void* source,TEvent& event) { char code,str[15]; float numb; TEdit *Edit = (TEdit *)source; TAlgDialog1 *Dialog = (TAlgDialog1 *)Edit->owner; if(event.what == evKeyboard) { switch(event.keyDown.keyCode) { case kbEnter: if(!((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->koef->getCount()) break; numb=atof(Edit->data); sprintf(str,"%f",numb); Edit->setData(str); //Dialog->Modif=True; *(float *)((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->koef->at(Dialog->inputBox->focused)=numb; Dialog->selectNext(False); Dialog->Modifs=True; break; } code=event.keyDown.charScan.charCode; if( !(((byte)code>='0'&&(byte)code<='9') || (byte)code=='-' || (byte)code=='.' || (byte)code<' ')) Edit->clearEvent(event); } return(0); } int TAlgDialog1::SelectInput(void* source,TEvent& event) { TEdit *Edit = (TEdit *)source; TAlgDialog1 *Dialog = (TAlgDialog1 *)Edit->owner; ushort control; int i; if(event.what == evKeyboard) switch(event.keyDown.keyCode) { case kbEnter: if(!((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->inp->getCount()) break; control = myApp->execView( myApp->SelDialog = new TSelDialog(Dialog->PathDir,7,(char *)((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->inp->at(Dialog->ListB_In->focused))); if(control==cmOK) { strncpy((char *)((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->inp->at(Dialog->ListB_In->focused), (char *)myApp->SelDialog->Colect2->at(myApp->SelDialog->ListBox2->focused),9); Dialog->Modifs=True; Dialog->display_algobloks(Dialog->ListB_Alg->focused); } destroy(myApp->SelDialog); break; case kbBack: for(i=0;iListB_Alg->list()->getCount();i++) if(!strncmp(((alg_str *)Dialog->ListB_Alg->list()->at(i))->name, (char *)((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->inp->at(Dialog->ListB_In->focused),9)) break; if(i==Dialog->ListB_Alg->list()->getCount()) break; Dialog->ListB_Alg->focusItem(i); Dialog->display_algobloks(Dialog->ListB_Alg->focused); Dialog->ListB_Alg->select(); // Dialog->display_algobloks(Dialog->MyTListBox->focused); Dialog->MyTListBox->select(); // Dialog->MyTListBox->drawView(); Dialog->OldIndChek=Dialog->ListB_Alg->focused; break; case kbDel: strcpy((char *)((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->inp->at(Dialog->ListB_In->focused)," "); Dialog->display_algobloks(Dialog->ListB_Alg->focused); Dialog->Modifs=True; break; } return(0); } int TAlgDialog1::SaveEdit(void* source,TEvent& event) { TEdit *Edit = (TEdit *)source; TAlgDialog1 *Dialog = (TAlgDialog1 *)Edit->owner; if(event.what == evKeyboard) switch(event.keyDown.keyCode) { case kbEnter: free( ((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->disript); ((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->disript = (char *)calloc(1,strlen(Dialog->Ed_Descr->data)+1); strcpy(((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->disript,Dialog->Ed_Descr->data); Dialog->Modifs=True; break; case kbEsc: Dialog->display_algobloks(Dialog->ListB_Alg->focused); break; } return(0); } int TAlgDialog1::SelectFormuls(void* source,TEvent& event) { TComboBox *ComboBox = (TComboBox *)source; TAlgDialog1 *Dialog = (TAlgDialog1 *)ComboBox->owner; TCompCollect *Colect,*Colect1; char *str; Colect =((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->inp; Colect1=((frm_str *)Dialog->FormColect->at(ComboBox->posit))->inp; for(;;) { if(Colect->getCount()==Colect1->getCount()) break; if(Colect->getCount()>Colect1->getCount()) Colect->atFree(Colect->getCount()-1); else { str = new char[10]; strcpy(str,Text_msg[49]); Colect->insert(str); } } Colect =((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->koef; Colect1=((frm_str *)Dialog->FormColect->at(ComboBox->posit))->koef; for(;;) { if(Colect->getCount()==Colect1->getCount()) break; if(Colect->getCount()>Colect1->getCount()) Colect->atFree(Colect->getCount()-1); else { str = new char[4]; *(float *)str=0.0; Colect->insert(str); } } ((alg_str *)Dialog->AlgColect->at(Dialog->ListB_Alg->focused))->form=ComboBox->posit; Dialog->display_algobloks(Dialog->ListB_Alg->focused); return(0); } //------------------------ TSearchDialog1 ------------------------------------------------ TSearchDialog1::TSearchDialog1(TCompCollect *Alg,TCompCollect *Form) : TDialog( TRect( 0, 0, 60, 11 ),"Search Algobloks" ), TWindowInit( TSearchDialog1::initFrame ) { options |= ofCentered; AlgColect=Alg; FormColect=Form; TView * Monosel = new TView(TRect(2,2,58,6)); Monosel->options |= ofFramed; insert(Monosel); // Monosel = new TView(TRect(2,6,58,10)); // Monosel->options |= ofFramed; insert(Monosel); CheckBoxes1 = new TMyCheckBoxes( TRect( 2, 2, 20, 3), new TSItem( "Name", 0 ),NULL); CheckBoxes1->press(0); insert(CheckBoxes1); Edit1 = new TEdit( TRect(20, 2, 29, 3),10,NULL); insert(Edit1); hist = new THistory( TRect( 29, 2, 32, 3 ), Edit1, 3 ); insert(hist); CheckBoxes3 = new TMyCheckBoxes( TRect( 2, 3, 20, 4), new TSItem( "Variable", 0 ),NULL); insert(CheckBoxes3); Edit3 = new TEdit( TRect(20, 3, 29, 4),10,NULL); insert(Edit3); hist1 = new THistory( TRect( 29, 3, 32, 4 ), Edit3, 3 ); insert(hist1); Edit3->setState(sfVisible,False); hist1->setState(sfVisible,False); CheckBoxes2 = new TMyCheckBoxes( TRect( 2, 4, 20, 5), new TSItem( "Formul", 0 ),NULL); insert(CheckBoxes2); Edit2 = new TEdit( TRect(2, 5, 57, 6),257,NULL); insert(Edit2); ComboBox1 = new TComboBox(TRect( 57, 5, 58, 6 ), Edit2,FormColect,NULL); insert(ComboBox1); Edit2->setState(sfVisible,False); ComboBox1->setState(sfVisible,False); TButton *Button = new TButton( TRect( 12,8, 22, 10),Text_msg[113], cmOK, bfDefault ); insert(Button); Button = new TButton( TRect( 32,8, 42, 10),Text_msg[114], cmCancel, bfNormal ); insert(Button); Edit1->select(); } void TSearchDialog1::handleEvent( TEvent& event ) { TDialog::handleEvent(event); if( event.what == evBroadcast && event.message.command == cmClustChange) { if(CheckBoxes1->state & sfFocused) { if(CheckBoxes1->mark(0)) { Edit1->setState(sfVisible,True); hist->setState(sfVisible,True); } else { Edit1->setState(sfVisible,False); hist->setState(sfVisible,False); } } if(CheckBoxes3->state & sfFocused) { if(CheckBoxes3->mark(0)) { Edit3->setState(sfVisible,True); hist1->setState(sfVisible,True); } else { Edit3->setState(sfVisible,False); hist1->setState(sfVisible,False); } } if(CheckBoxes2->state & sfFocused) { if(CheckBoxes2->mark(0)) { Edit2->setState(sfVisible,True); ComboBox1->setState(sfVisible,True); Edit2->setData((char *)ComboBox1->list()->at(ComboBox1->posit)); } else { Edit2->setState(sfVisible,False); ComboBox1->setState(sfVisible,False); } } ((TCheckBoxes *)(event.message.infoPtr))->select(); clearEvent(event); } } int TSearchDialog1::SearchAlgb(int pos) { char str[10],str1[10],*str_srch; int i,ii,iii,j,k= -1; strncpy(str,Edit1->data,9); str[9]=0; strncpy(str1,Edit3->data,9); str1[9]=0; for(i=pos;igetCount();i++) { if(CheckBoxes1->mark(0)) { for(iii=0;iii<(int)(10-strlen(str));iii++) { k=i; for(ii=0;iiat(i)))->name[ii+iii]) continue; k= -1; break; } if(k == -1) continue; break; } if(k == -1) continue; } if(CheckBoxes2->mark(0)) { k=i; if(((alg_str *)(AlgColect->at(i)))->form!=ComboBox1->posit){k= -1; continue;} } if(CheckBoxes3->mark(0)) { for(j=0;j<((alg_str *)AlgColect->at(i))->inp->getCount();j++) { str_srch=(char *)((alg_str *)AlgColect->at(i))->inp->at(j); for(iii=0;iii<(int)(10-strlen(str1));iii++) { k=i; for(ii=0;ii