#ifndef EDIT_COMPONENT_VALUE_H_INCLUDED #define EDIT_COMPONENT_VALUE_H_INCLUDED #include using namespace std; #define KEY_LEFT 75 #define KEY_RIGHT 77 //Andrei CEREBU pana jos void creare_nume_componenta(int indx, char nume_componenta[], char unitate_masura[]) { switch(indx) { case 1: strcpy(nume_componenta,"Rezistor"); strcpy(unitate_masura,"Ohm"); break; case 2: strcpy(nume_componenta,"Fuse"); strcpy(unitate_masura,"Ohm"); break; case 3: strcpy(nume_componenta,"Battery"); strcpy(unitate_masura,"Volts"); break; case 4: strcpy(nume_componenta,"Dioda"); strcpy(unitate_masura,"Ohm"); break; case 5: strcpy(nume_componenta,"Ampermeter"); strcpy(unitate_masura,"Ohm"); break; case 6: strcpy(nume_componenta,"Voltmeter"); strcpy(unitate_masura,"Ohm"); break; case 7: strcpy(nume_componenta,"Capacitor"); strcpy(unitate_masura,"Farad"); break; case 8: strcpy(nume_componenta,"Transistor"); strcpy(unitate_masura,"Ohm"); break; case 9: strcpy(nume_componenta,"Light bulb"); strcpy(unitate_masura,"Ohm"); break; } } int menu_selection_edit_value_window(int W, int H, int x, int y) { //enter button if((x>W/2-W/10&&xH/2+3*H/12-H/12&&yW-3*W/32-3*W/40&&xH/10-2*H/30&&y14) nr_elem-=14; else nr_elem=0; strcpy(aux,aux+nr_elem); settextstyle(COMPLEX_FONT,0,1); outtextxy(W/2-W/5-W/60,H/3+H/9+H/30,aux); } int det_numar_elemente(char number_initial[]) { int nr_elem=0, i=0; while(number_initial[i]!=0) { ++nr_elem; ++i; } return nr_elem; } void convert_value_to_string(char number[], int nr) { int lenght=0; do { number[lenght]=nr%10+'0'; nr/=10; lenght+=1; } while(nr); for(int i=0; i'9') return -1; nr=nr*10+(number[i]-'0'); } return nr; } int edit_value_window(int W, int H, float R, int indx, int value) { char number[10000]; convert_value_to_string(number, value); int project_window1=initwindow(W/4,H/4,"Edit component",W/3,H/3,0,0); POINT cursorPos; char aux[10000], c, ex, number_initial[100000], unitate_masura[10], nume_componenta[20]; int nr_elem=0, poz=0, cursor=0, xMouse, yMouse, nr_elem_number_initial=det_numar_elemente(number_initial); bool modif=false, afisare_numar_initial=false; strcpy(number_initial,number);//se copiaza numarul initial creare_nume_componenta(indx,nume_componenta,unitate_masura); draw_edit_value_window(W/4,H/4,R,poz,nume_componenta,unitate_masura); while(true) { GetCursorPos(&cursorPos); ScreenToClient(GetForegroundWindow(), &cursorPos); if(kbhit()) { c=getch(); if(c&&c!=224) { if(c==8&&nr_elem&&poz) { strcpy(number+poz-1,number+poz); nr_elem--; --poz; } else if(c==13) { closegraph(project_window1); return 0; } else if(nr_elem<10000&&c>=' '&&c<='~') { for(int i=nr_elem; i>poz; i--) number[i]=number[i-1]; number[poz]=c; ++poz; ++nr_elem; number[nr_elem]=0; } } else { switch(ex=getch()) { case KEY_LEFT: if(poz>0) --poz; break; case KEY_RIGHT: if(poz14) cursor=14; else cursor=poz; //create new frame cleardevice(); draw_edit_value_window(W/4,H/4,cursor,poz,nume_componenta,unitate_masura); strcpy(aux,number); print_number_on_edit_value_screen(W/4,H/4,aux,nr_elem); if(nr_elem==0) afisare_numar_initial=false; } if(afisare_numar_initial==false) { afisare_numar_initial=true; cleardevice(); draw_edit_value_window(W/4,H/4,cursor,poz,nume_componenta,unitate_masura); strcpy(aux,number_initial); print_number_on_edit_value_screen(W/4,H/4,aux,nr_elem_number_initial); } if(ismouseclick(WM_LBUTTONDOWN)) { getmouseclick(WM_LBUTTONDOWN,xMouse,yMouse); switch(menu_selection_edit_value_window(W/4,H/4,xMouse,yMouse)) { case 1://Enter was pressed { int val = convert_string_to_value(number); if(val==-1) { //mesaj eroare } else { closegraph(project_window1); memset(number, 0, 10000); memset(number_initial, 0, 10000); memset(aux, 0, 10000); return val; } break; } case 2://back was pressed strcpy(number,number_initial); closegraph(project_window1); memset(number, 0, 10000); memset(number_initial, 0, 10000); memset(aux, 0, 10000); return value; break; case 0: clearmouseclick(WM_LBUTTONDOWN); break; } } } } #endif // EDIT_COMPONENT_VALUE_H_INCLUDED