Народ, помогите, такая проблема. Программа "Калькулятор", нужно проверить правильность кода, и если потребуется, доработать (не уверен, правильно ли все сделано). Также в среде разработки glade и gtk+ создать виджеты, демонстрирующие интерфейс и работу калькулятора. И сделать 2-3 скриншота при создании этих виджетов (как они создаются). Наработки:
файл main.c:
Код:
#include <stdio.h>
#include <math.h>
#include "callback.h"
#include <gtk/gtk.h>
#include <glade/glade.h>
int
main(int argc, char *argv[])
{
GladeXML *xml;
GtkWidget *widget;
xml = glade_xml_new("miniCalculatorX.glade", NULL, NULL);/* GUI с изображением*/
//xml = glade_xml_new("miniCalculator.glade", NULL, NULL); /* стандартный GUI */
/* получение виджета (используется, если нужно что-то изменить) */
widget = glade_xml_get_widget(xml, "mainWindow");
/* подключение обработчиков сигналов */
glade_xml_signal_autoconnect(xml);
gtk_widget_show (widget);
gtk_main();
return 0;
}
файл callbacks.c:
Код:
#include <stdio.h>
#include <math.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
GladeXML *xml;
GtkWidget *textValue;
gdouble display;
gdouble primaryTotal=0;
gdouble mainTotal=0;
gchar *d_string;
int clickedButton=0;// нажатие кнопки, по умолчанию равной "0"
/*
Значения ‘clickedButton’
————————
plusButton_clicked –>1
subButton_clicked –>2
mulButton_clicked –>3
divButton_clicked –>4
*/
G_MODULE_EXPORT void on_no1Button_clicked(GtkWidget *widget, gpointer *data)
{
/* Поиск Glade XML, содержащую виджет. */
xml = glade_get_widget_tree(GTK_WIDGET( widget ));
/* Перетягивание виджетов */
textValue= glade_xml_get_widget(xml, “textEntry”);
gtk_entry_append_text(GTK_ENTRY(textValue),”1?);
}
G_MODULE_EXPORT void on_addButton_clicked(GtkWidget *widget, gpointer *data)
{
/* Поиск Glade XML, содержащую виджет. */
xml = glade_get_widget_tree(GTK_WIDGET( widget ));
/* Перетягивание виджетов */
textValue= glade_xml_get_widget(xml, “textEntry”);
/* Получение значений строк из гланого виджета */
d_string=gtk_entry_get_text(GTK_ENTRY(textValue));
/* преобразование в двойной */
display=atof(d_string);
/* Добавление в начальное значение */
primaryTotal=primaryTotal+display;
/* Очистить запись*/
gtk_entry_set_text(GTK_ENTRY(textValue),””);
/* Задается нажатие кнопки ‘plusButton_clicked’ */
clickedButton=1;
}
G_MODULE_EXPORT void on_equalButton_clicked(GtkWidget *widget, gpointer *data)
{
/* Поиск Glade XML, содержащую виджет */
xml = glade_get_widget_tree(GTK_WIDGET( widget ));
/* Перетягивание виджетов */
textValue= glade_xml_get_widget(xml, “textEntry”);
/* Считывание значения на входе и копирование его в char* */
d_string=gtk_entry_get_text(GTK_ENTRY(textValue));
/* преобразование строки*/
display=atof(d_string);
/*Выполнение операции в соответствии с нажатием кнопки*/
switch(clickedButton)
{
case 0 :{
break;
}
case 1 :{
/* Сложение*/
mainTotal=primaryTotal+display;
break;
}
case 2 :{
/* Вычитание*/
mainTotal=primaryTotal-display;
break;
}
case 3 :{
/* Умножение*/
mainTotal=primaryTotal*display;
break;
}
case 4 :{
/* Деление*/
mainTotal=primaryTotal/display;
break;
}
}
/*преобразование строки и вывод значения на входе*/
gtk_entry_set_text(GTK_ENTRY(textValue),g_strdup_printf(“%f”,mainTotal));
/* сброс к "0"*/
primaryTotal=0;
/* Установление значения clickedButton обратно по умолчанию*/
}