#includeconst char *my_window_title;
GtkWidget *input_words_label;
GtkWidget *dialog;
GtkWidget *input_dir_label;
GtkWidget *answer_label;
GtkWidget *input_words_entry;
GtkWidget *input_dir_entry;
GtkWidget *answer_entry;
GtkWidget *btn_cal_words;
GtkWidget *btn_cal_dir;
GtkWidget *table;
GtkWidget *window;
void layout_ctrls();
void dis_answer(GtkWidget *widget, gpointer data);
void out_answer(GtkWidget *widget, gpointer data);
#endif
void dis_answer(GtkWidget *widget, gpointer data) {
const char *words, *answer;
int sum = 0, i, len;
words = gtk_entry_get_text(GTK_ENTRY(input_words_entry));
len = strlen(words);
for(i = 0; i < len; ++i) {
if(words[i] >= A && words[i] <= Z)
sum += words[i] - A + 1;
}
answer = (char*)g_strdup_printf("%d%%", sum);
gtk_entry_set_text(GTK_ENTRY(answer_entry), answer);
}
void out_answer(GtkWidget *widget, gpointer data) {
FILE *fp_write, *fp_read;
const char *file_name = "./result.txt", *dir, *answer;
int sum = 0;
char ch;
dir = gtk_entry_get_text(GTK_ENTRY(input_dir_entry));
if((fp_write = fopen(file_name, "at")) == NULL) {
fp_write = fopen(file_name, "w");
fclose(fp_write);
fp_write = fopen(file_name, "at");
}
if((fp_read = fopen(dir, "rt")) == NULL) {
dialog = gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "This directory is not exist.");
gtk_window_set_title(GTK_WINDOW(dialog), "Warning");
} else {
while(~fscanf(fp_read, "%c", &ch)) {
if(ch <= Z && ch >= A)
sum += ch - A + 1;
}
fclose(fp_read);
answer = (char*)g_strdup_printf("%d%%\n", sum);
fprintf(fp_write, "File :%s \tsum values :%s", dir, answer);
dialog = gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Done into \"Result.txt\" successfully!");
gtk_window_set_title(GTK_WINDOW(dialog), "Congratulations");
}
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
fclose(fp_write);
}
void layout_ctrls() {
//initialize window
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
my_window_title = "Calculate the value sum of all words.";
gtk_window_set_title(GTK_WINDOW(window),my_window_title);
gtk_window_set_default_size(GTK_WINDOW(window), 400, 250);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
//initialize table
table = gtk_table_new(6, 4, TRUE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 2);
gtk_container_add(GTK_CONTAINER(window), table);
//initialize input_words_label
input_words_label = gtk_label_new("Please input words:");
gtk_table_attach_defaults(GTK_TABLE(table), input_words_label, 0, 1, 0, 1);
//initialize input_words_entry
input_words_entry = gtk_entry_new();
gtk_table_attach_defaults(GTK_TABLE(table), input_words_entry, 0, 3, 1, 2);
//initialize btn_cal_words
btn_cal_words = gtk_button_new_with_label("Calculate");
gtk_table_attach_defaults(GTK_TABLE(table), btn_cal_words, 3, 4, 1, 2);
g_signal_connect(G_OBJECT(btn_cal_words), "clicked", G_CALLBACK(dis_answer), NULL);
//initialize answer_label
answer_label = gtk_label_new("sum values:");
gtk_table_attach_defaults(GTK_TABLE(table), answer_label, 0, 1, 2, 3);
//initialize answer_entry
answer_entry = gtk_entry_new();
gtk_editable_set_editable(GTK_EDITABLE(answer_entry), FALSE);
gtk_table_attach_defaults(GTK_TABLE(table), answer_entry, 1, 3, 2, 3);
//initialize input_dir_label
input_dir_label = gtk_label_new("Input a directory:");
gtk_table_attach_defaults(GTK_TABLE(table), input_dir_label, 0, 1, 4, 5);
//initialize input_dir_entry
input_dir_entry = gtk_entry_new();
gtk_table_attach_defaults(GTK_TABLE(table), input_dir_entry, 0, 3, 5, 6);
//initialize btn_cal_dir
btn_cal_dir = gtk_button_new_with_label("Cal to File");
gtk_table_attach_defaults(GTK_TABLE(table), btn_cal_dir, 3, 4, 5, 6);
g_signal_connect(G_OBJECT(btn_cal_dir), "clicked", G_CALLBACK(out_answer), NULL);
gtk_widget_show_all(window);
}
//main
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
layout_ctrls();
gtk_main();
return 0;
}