7 /* location of UI XML file relative to path in which program is running */
8 #define BUILDER_XML_FILE "kal.glade"
10 #define MAX_VALUE 9999
13 // struktura s ukazateli na jednotlive widgety v aplikaci
40 //deklarace globalnich promenych pro vysledky kalkulacky
45 int operace
=0; //udaj o tom, co se ma delat
46 int desetina
=0; //pri hodnote 1 se už tvori desetina cisla
48 int omezeni
=8; //omezeni kolik maximalne muze uzivatel zadat cislic na jedno cislo
50 * 0 - nic, nebylo zadano
60 // handler, ktery je v glade prirazen stisknuti tlacitka
61 void on_button0_clicked (GtkObject
*object
, App
*app
)
63 if ((operace
==0)||(operace
==8)){ //zatim je jen jedno cislo
68 else{ //uz bylo vybrano a tak se to pouzije...
69 //zde by mela byt moznost scitani
72 x = atoi(gtk_entry_get_text(app->entry));
78 snprintf(str,10,"%d",x);
79 gtk_entry_set_text(app->entry,str);*/
80 //app->label1->set_label("tlacitko 1");
81 //app->label1 = gtk_label_new("Cold was my");
82 //gtk_label_set_text(app->label1,"pokus");
85 void on_button1_clicked (GtkObject
*object
, App
*app
)
87 if ((operace
==0)||(operace
==8)){ //zatim je jen jedno cislo
92 else{ //uz bylo vybrano a tak se to pouzije...
93 //zde by mela byt moznost scitani
96 void on_button2_clicked (GtkObject
*object
, App
*app
)
98 if ((operace
==0)||(operace
==8)){ //zatim je jen jedno cislo
103 else{ //uz bylo vybrano a tak se to pouzije...
104 //zde by mela byt moznost scitani
107 void on_button3_clicked (GtkObject
*object
, App
*app
)
109 if ((operace
==0)||(operace
==8)){ //zatim je jen jedno cislo
114 else{ //uz bylo vybrano a tak se to pouzije...
115 //zde by mela byt moznost scitani
118 void on_button4_clicked (GtkObject
*object
, App
*app
)
120 if ((operace
==0)||(operace
==8)){ //zatim je jen jedno cislo
125 else{ //uz bylo vybrano a tak se to pouzije...
126 //zde by mela byt moznost scitani
129 void on_button5_clicked (GtkObject
*object
, App
*app
)
131 hodnota1
=logaritmus(hodnota1
.result
);
132 if (hodnota1
.error
!=0){
133 gtk_label_set_text(app
->label1
,"ERROR");
141 char* x
= malloc(sizeof(char)*15);
142 sprintf(x
,"%.5f",hodnota1
.result
);
143 gtk_label_set_text(app
->label1
,x
);
145 operace
=0; //uz nebude mozne zadavat hodnotu 1
151 void on_button6_clicked (GtkObject
*object
, App
*app
)
153 hodnota1
=faktorial(hodnota1
.result
);
154 if (hodnota1
.error
!=0){
155 gtk_label_set_text(app
->label1
,"ERROR");
163 char* x
= malloc(sizeof(char)*15);
164 sprintf(x
,"%.5f",hodnota1
.result
);
165 gtk_label_set_text(app
->label1
,x
);
167 operace
=0; //uz nebude mozne zadavat hodnotu 1
173 void on_button7_clicked (GtkObject
*object
, App
*app
)
182 gtk_label_set_text(app
->label1
,"Kalkulacka BETON");
184 void on_button8_clicked (GtkObject
*object
, App
*app
)
188 char* x
= malloc(sizeof(char)*15);
191 hodnota1
.result
=hodnota1
.result
* 10 + 1;
194 hodnota1
.result
=hodnota1
.result
+ (1.0/pow(10,desetina
));
197 sprintf(x
,"%.5f",hodnota1
.result
);
198 gtk_label_set_text(app
->label1
,x
);
202 hodnota2
.result
=hodnota2
.result
* 10 + 1;
205 hodnota2
.result
=hodnota2
.result
+ (1.0/pow(10,desetina
));
208 sprintf(x
,"%.5f",hodnota2
.result
);
209 gtk_label_set_text(app
->label1
,x
);
214 void on_button9_clicked (GtkObject
*object
, App
*app
)
218 char* x
= malloc(sizeof(char)*15);
221 hodnota1
.result
=hodnota1
.result
* 10 + 2;
224 hodnota1
.result
=hodnota1
.result
+ (2.0/pow(10,desetina
));
227 sprintf(x
,"%.5f",hodnota1
.result
);
228 gtk_label_set_text(app
->label1
,x
);
232 hodnota2
.result
=hodnota2
.result
* 10 + 2;
235 hodnota2
.result
=hodnota2
.result
+ (2.0/pow(10,desetina
));
238 sprintf(x
,"%.5f",hodnota2
.result
);
239 gtk_label_set_text(app
->label1
,x
);
244 void on_button10_clicked (GtkObject
*object
, App
*app
)
248 char* x
= malloc(sizeof(char)*15);
251 hodnota1
.result
=hodnota1
.result
* 10 + 3;
254 hodnota1
.result
=hodnota1
.result
+ (3.0/pow(10,desetina
));
257 sprintf(x
,"%.5f",hodnota1
.result
);
258 gtk_label_set_text(app
->label1
,x
);
262 hodnota2
.result
=hodnota2
.result
* 10 + 3;
265 hodnota2
.result
=hodnota2
.result
+ (3.0/pow(10,desetina
));
268 sprintf(x
,"%.5f",hodnota2
.result
);
269 gtk_label_set_text(app
->label1
,x
);
274 void on_button11_clicked (GtkObject
*object
, App
*app
)
278 char* x
= malloc(sizeof(char)*15);
281 hodnota1
.result
=hodnota1
.result
* 10 + 4;
284 hodnota1
.result
=hodnota1
.result
+ (4.0/pow(10,desetina
));
287 sprintf(x
,"%.5f",hodnota1
.result
);
288 gtk_label_set_text(app
->label1
,x
);
292 hodnota2
.result
=hodnota2
.result
* 10 + 4;
295 hodnota2
.result
=hodnota2
.result
+ (4.0/pow(10,desetina
));
298 sprintf(x
,"%.5f",hodnota2
.result
);
299 gtk_label_set_text(app
->label1
,x
);
304 void on_button12_clicked (GtkObject
*object
, App
*app
)
308 char* x
= malloc(sizeof(char)*15);
311 hodnota1
.result
=hodnota1
.result
* 10 + 5;
314 hodnota1
.result
=hodnota1
.result
+ (5.0/pow(10,desetina
));
317 sprintf(x
,"%.5f",hodnota1
.result
);
318 gtk_label_set_text(app
->label1
,x
);
322 hodnota2
.result
=hodnota2
.result
* 10 + 5;
325 hodnota2
.result
=hodnota2
.result
+ (5.0/pow(10,desetina
));
328 sprintf(x
,"%.5f",hodnota2
.result
);
329 gtk_label_set_text(app
->label1
,x
);
334 void on_button13_clicked (GtkObject
*object
, App
*app
)
338 char* x
= malloc(sizeof(char)*15);
341 hodnota1
.result
=hodnota1
.result
* 10 + 6;
344 hodnota1
.result
=hodnota1
.result
+ (6.0/pow(10,desetina
));
347 sprintf(x
,"%.5f",hodnota1
.result
);
348 gtk_label_set_text(app
->label1
,x
);
352 hodnota2
.result
=hodnota2
.result
* 10 + 6;
355 hodnota2
.result
=hodnota2
.result
+ (6.0/pow(10,desetina
));
358 sprintf(x
,"%.5f",hodnota2
.result
);
359 gtk_label_set_text(app
->label1
,x
);
364 void on_button14_clicked (GtkObject
*object
, App
*app
)
368 char* x
= malloc(sizeof(char)*15);
371 hodnota1
.result
=hodnota1
.result
* 10 + 7;
374 hodnota1
.result
=hodnota1
.result
+ (7.0/pow(10,desetina
));
377 sprintf(x
,"%.5f",hodnota1
.result
);
378 gtk_label_set_text(app
->label1
,x
);
382 hodnota2
.result
=hodnota2
.result
* 10 + 7;
385 hodnota2
.result
=hodnota2
.result
+ (7.0/pow(10,desetina
));
388 sprintf(x
,"%.5f",hodnota2
.result
);
389 gtk_label_set_text(app
->label1
,x
);
394 void on_button15_clicked (GtkObject
*object
, App
*app
)
398 char* x
= malloc(sizeof(char)*15);
401 hodnota1
.result
=hodnota1
.result
* 10 + 8;
404 hodnota1
.result
=hodnota1
.result
+ (8.0/pow(10,desetina
));
407 sprintf(x
,"%.5f",hodnota1
.result
);
408 gtk_label_set_text(app
->label1
,x
);
412 hodnota2
.result
=hodnota2
.result
* 10 + 8;
415 hodnota2
.result
=hodnota2
.result
+ (8.0/pow(10,desetina
));
418 sprintf(x
,"%.5f",hodnota2
.result
);
419 gtk_label_set_text(app
->label1
,x
);
424 void on_button16_clicked (GtkObject
*object
, App
*app
)
428 char* x
= malloc(sizeof(char)*15);
431 hodnota1
.result
=hodnota1
.result
* 10 + 0;
434 hodnota1
.result
=hodnota1
.result
+ (0.0/pow(10,desetina
));
437 sprintf(x
,"%.5f",hodnota1
.result
);
438 gtk_label_set_text(app
->label1
,x
);
442 hodnota2
.result
=hodnota2
.result
* 10 + 0;
445 hodnota2
.result
=hodnota2
.result
+ (0.0/pow(10,desetina
));
448 sprintf(x
,"%.5f",hodnota2
.result
);
449 gtk_label_set_text(app
->label1
,x
);
454 void on_button17_clicked (GtkObject
*object
, App
*app
)
460 else{ //vypsani chyby pokud se vickrat klikne na desetinu
464 void on_button18_clicked (GtkObject
*object
, App
*app
)
468 char* x
= malloc(sizeof(char)*15);
471 hodnota1
.result
=hodnota1
.result
* 10 + 9;
474 hodnota1
.result
=hodnota1
.result
+ (9.0/pow(10,desetina
));
477 sprintf(x
,"%.5f",hodnota1
.result
);
478 gtk_label_set_text(app
->label1
,x
);
482 hodnota2
.result
=hodnota2
.result
* 10 + 9;
485 hodnota2
.result
=hodnota2
.result
+ (9.0/pow(10,desetina
));
488 sprintf(x
,"%.5f",hodnota2
.result
);
489 gtk_label_set_text(app
->label1
,x
);
494 void on_button19_clicked (GtkObject
*object
, App
*app
)
496 /* * 0 - nic, nebylo zadano
504 * 8 - rovnase - hodnota pro zmenu
506 char* x
= malloc(sizeof(char)*15);
509 hodnota1
=scitani(hodnota1
.result
, hodnota2
.result
);
510 sprintf(x
,"%.5f",hodnota1
.result
);
511 gtk_label_set_text(app
->label1
,x
);
516 hodnota1
=odcitani(hodnota1
.result
, hodnota2
.result
);
517 sprintf(x
,"%.5f",hodnota1
.result
);
518 gtk_label_set_text(app
->label1
,x
);
523 hodnota1
=nasobeni(hodnota1
.result
, hodnota2
.result
);
524 sprintf(x
,"%.5f",hodnota1
.result
);
525 gtk_label_set_text(app
->label1
,x
);
530 hodnota1
=deleni(hodnota1
.result
, hodnota2
.result
);
531 if (hodnota1
.error
!=0){
532 gtk_label_set_text(app
->label1
,"ERROR");
540 sprintf(x
,"%.5f",hodnota1
.result
);
541 gtk_label_set_text(app
->label1
,x
);
547 hodnota1
=umocneni(hodnota1
.result
, hodnota2
.result
);
548 sprintf(x
,"%.5f",hodnota1
.result
);
549 gtk_label_set_text(app
->label1
,x
);
559 // ukonci hlavni smycku gtk pri zavreni okna
560 void on_window_destroy (GtkObject
*object
, gpointer user_data
)
566 int main (int argc
, char *argv
[])
575 // alokuje pamet pro app
576 app
= g_slice_new(App
);
578 gtk_init (&argc
, &argv
);
581 builder
= gtk_builder_new ();
582 gtk_builder_add_from_file (builder
, BUILDER_XML_FILE
, NULL
);
584 // priradi do struktury jednotlive widgety
585 app
->window
= GTK_WIDGET (gtk_builder_get_object (builder
, "window1"));
586 app
->button0
= GTK_WIDGET (gtk_builder_get_object (builder
, "button0"));
587 app
->button1
= GTK_WIDGET (gtk_builder_get_object (builder
, "button1"));
588 app
->button2
= GTK_WIDGET (gtk_builder_get_object (builder
, "button2"));
589 app
->button3
= GTK_WIDGET (gtk_builder_get_object (builder
, "button3"));
590 app
->button4
= GTK_WIDGET (gtk_builder_get_object (builder
, "button4"));
591 app
->button5
= GTK_WIDGET (gtk_builder_get_object (builder
, "button5"));
592 app
->button6
= GTK_WIDGET (gtk_builder_get_object (builder
, "button6"));
593 app
->button7
= GTK_WIDGET (gtk_builder_get_object (builder
, "button7"));
594 app
->button8
= GTK_WIDGET (gtk_builder_get_object (builder
, "button8"));
595 app
->button9
= GTK_WIDGET (gtk_builder_get_object (builder
, "button9"));
596 app
->button10
= GTK_WIDGET (gtk_builder_get_object (builder
, "button10"));
597 app
->button11
= GTK_WIDGET (gtk_builder_get_object (builder
, "button11"));
598 app
->button12
= GTK_WIDGET (gtk_builder_get_object (builder
, "button12"));
599 app
->button13
= GTK_WIDGET (gtk_builder_get_object (builder
, "button13"));
600 app
->button14
= GTK_WIDGET (gtk_builder_get_object (builder
, "button14"));
601 app
->button15
= GTK_WIDGET (gtk_builder_get_object (builder
, "button15"));
602 app
->button16
= GTK_WIDGET (gtk_builder_get_object (builder
, "button16"));
603 app
->button17
= GTK_WIDGET (gtk_builder_get_object (builder
, "button17"));
604 app
->button18
= GTK_WIDGET (gtk_builder_get_object (builder
, "button18"));
605 app
->button19
= GTK_WIDGET (gtk_builder_get_object (builder
, "button19"));
606 app
->label1
= GTK_LABEL (gtk_builder_get_object (builder
, "label1"));
608 gtk_builder_connect_signals (builder
, app
);
610 g_object_unref (G_OBJECT (builder
));
612 gtk_widget_show (app
->window
);