static void xmi_msim_gui_layer_dialog_set_composition(XmiMsimGuiLayerDialog *dialog, int n_elements, int *Z, double *weight) { GtkTreeIter iter; GtkListStore *store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->compositionTreeView))); gtk_list_store_clear(store); int i; for (i = 0 ; i < n_elements ; i++) { gtk_list_store_append(store, &iter); char *symbol = AtomicNumberToSymbol(Z[i]); gtk_list_store_set(store, &iter, SYMBOL_COLUMN, symbol, WEIGHT_COLUMN, weight[i] * 100.0, ELEMENT_COLUMN, Z[i], -1); xrlFree(symbol); } gchar *buffer = g_strdup_printf("<span weight=\"bold\">%lg</span>", xmi_sum_double(weight, n_elements) * 100.0); gtk_label_set_markup(GTK_LABEL(dialog->sumLabel), buffer); if (n_elements == 0) { gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT, FALSE); gtk_widget_set_sensitive(dialog->addToCatalogButton, FALSE); } else { const char *textPtr = gtk_entry_get_text(GTK_ENTRY(dialog->densityEntry)); const char *textPtr2 = gtk_entry_get_text(GTK_ENTRY(dialog->thicknessEntry)); double density = g_ascii_strtod(textPtr, NULL); double thickness = g_ascii_strtod(textPtr2, NULL); if (density > 0.0 && thickness > 0.0) { gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT, TRUE); gtk_widget_set_sensitive(dialog->addToCatalogButton, TRUE); } } g_free(buffer); }
void remove_button_clicked_cb(GtkWidget *widget, gpointer data) { struct add_data *ad = (struct add_data *) data; GtkTreeIter iter,temp_iter; GtkTreeModel *model; gboolean valid; int index,nindices; int i; char buffer[512]; if (gtk_tree_selection_get_selected(ad->select, &model, &iter)) { valid = gtk_tree_model_get_iter_first(model, &temp_iter); index = 0; nindices = 0; while(valid) { if (gtk_tree_selection_iter_is_selected(ad->select, &temp_iter)) { #if DEBUG == 1 fprintf(stdout,"Index: %i\n",nindices); #endif index = nindices; } nindices++; valid = gtk_tree_model_iter_next(model, &temp_iter); } for (i = index ; i < nindices ; i++) { (*(ad->cw->lw->my_layer))->weight[i] =(*(ad->cw->lw->my_layer))->weight[i+1]; (*(ad->cw->lw->my_layer))->Z[i] =(*(ad->cw->lw->my_layer))->Z[i+1]; } (*(ad->cw->lw->my_layer))->weight = (double *) realloc((*(ad->cw->lw->my_layer))->weight, sizeof(double)*((*(ad->cw->lw->my_layer))->n_elements-1)); (*(ad->cw->lw->my_layer))->Z = (int *) realloc((*(ad->cw->lw->my_layer))->Z, sizeof(int)*((*(ad->cw->lw->my_layer))->n_elements-1)); (*(ad->cw->lw->my_layer))->n_elements--; gtk_list_store_remove(ad->store, &iter); sprintf(buffer,"%g", xmi_sum_double((*(ad->cw->lw->my_layer))->weight,(*(ad->cw->lw->my_layer))->n_elements )*100.0); gtk_entry_set_text(GTK_ENTRY(ad->cw->lw->sumEntry), buffer); if ((*(ad->cw->lw->my_layer))->n_elements == 0) gtk_widget_set_sensitive(ad->cw->lw->okButton, FALSE); else{ //select next line if available if (index == nindices -1) gtk_tree_selection_select_path(ad->select,gtk_tree_path_new_from_indices(nindices-2,-1)); else gtk_tree_selection_select_path(ad->select,gtk_tree_path_new_from_indices(index,-1)); } } }
static void update_sum(XmiMsimGuiLayerDialog *dialog) { int n_elements, *Z; double *weight; xmi_msim_gui_layer_dialog_get_composition(dialog, &n_elements, &Z, &weight); gchar *buffer = g_strdup_printf("<span weight=\"bold\">%lg</span>", xmi_sum_double(weight, n_elements) * 100.0); gtk_label_set_markup(GTK_LABEL(dialog->sumLabel), buffer); if (n_elements == 0) { gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT, FALSE); gtk_widget_set_sensitive(dialog->addToCatalogButton, FALSE); } g_free(buffer); if (n_elements > 0) { g_free(Z); g_free(weight); } return; }
static void normalize_button_clicked(GtkButton *button, XmiMsimGuiLayerDialog *dialog) { double sum; int n_elements; int *Z; double *weight; xmi_msim_gui_layer_dialog_get_composition(dialog, &n_elements, &Z, &weight); if (n_elements == 0) return; sum = xmi_sum_double(weight, n_elements); xmi_scale_double(weight, n_elements, 1.0/sum); xmi_msim_gui_layer_dialog_set_composition(dialog, n_elements, Z, weight); g_free(Z); g_free(weight); }
void normalize_button_clicked_cb(GtkWidget *widget, gpointer data) { struct add_data *ad = (struct add_data *) data; double sum; int i; GtkTreeIter iter; if ((*(ad->layer))->n_elements > 0) { sum = xmi_sum_double((*(ad->layer))->weight,(*(ad->layer))->n_elements ); gtk_entry_set_text(GTK_ENTRY(ad->sumEntry),"100"); xmi_scale_double((*(ad->layer))->weight,(*(ad->layer))->n_elements, 1.0/sum); gtk_list_store_clear(ad->store); for (i = 0 ; i < (*(ad->layer))->n_elements ; i++) { gtk_list_store_append(ad->store, &iter); gtk_list_store_set(ad->store, &iter, SYMBOL_COLUMN, AtomicNumberToSymbol((*(ad->layer))->Z[i]), WEIGHT_COLUMN, (*(ad->layer))->weight[i]*100.0, -1 ); } } }
void dialog_buttons_clicked_cb (GtkDialog *dialog, gint response_id, gpointer data) { struct compoundWidget *cw = (struct compoundWidget *) data; struct compoundData *cd, *cd2, *cdsum; char *textPtr; double weight; double density, thickness; int i; GtkTreeIter iter; char buffer[512]; #if DEBUG == 1 fprintf(stdout,"Entering dialog_buttons_clicked_cb\n"); #endif if (response_id == GTK_RESPONSE_REJECT) { gtk_widget_hide_all(GTK_WIDGET(dialog)); } else if (response_id == GTK_RESPONSE_ACCEPT) { //update if (cw->kind == CW_ADD) { #if DEBUG == 1 fprintf(stdout,"Before mallocing cd2\n"); #endif //adding something cd2 = (struct compoundData *) malloc(sizeof(struct compoundData)); if (CompoundParser(gtk_entry_get_text(GTK_ENTRY(cw->compoundEntry)),cd2 ) != 1) { fprintf(stdout,"compoundParser error in dialog_buttons_clicked_cb\n"); exit(1); } #if DEBUG == 1 fprintf(stdout,"After calling CompoundParser: compound is %s\n",gtk_entry_get_text(GTK_ENTRY(cw->compoundEntry))); #endif weight = strtod(gtk_entry_get_text(GTK_ENTRY(cw->weightEntry)),NULL); #if DEBUG == 1 fprintf(stdout,"After calling CompoundParser: weight is %lf\n",weight); #endif if (*(cw->lw->my_layer) != NULL && (*(cw->lw->my_layer))->n_elements > 0) { //copy xmi_layer to compoundData and add current contents cd = xmi_layer2compoundData(*(cw->lw->my_layer) ); //calculate sum cdsum = add_compound_data(*cd, 1.0, *cd2, weight/100.0); density =(*(cw->lw->my_layer))->density; thickness=(*(cw->lw->my_layer))->thickness; xmi_free_layer(*(cw->lw->my_layer)); free( *(cw->lw->my_layer)); *(cw->lw->my_layer) = compoundData2xmi_layer (cdsum); (*(cw->lw->my_layer))->thickness = thickness; (*(cw->lw->my_layer))->density = density; } else if (*(cw->lw->my_layer) == NULL) { *(cw->lw->my_layer) = compoundData2xmi_layer (cd2); (*(cw->lw->my_layer))->thickness = 0.0; (*(cw->lw->my_layer))->density = 0.0; xmi_scale_double((*(cw->lw->my_layer))->weight,(*(cw->lw->my_layer))->n_elements, weight/100.0); } else if ((*(cw->lw->my_layer))->n_elements == 0) { free( *(cw->lw->my_layer)); *(cw->lw->my_layer) = compoundData2xmi_layer (cd2); xmi_scale_double((*(cw->lw->my_layer))->weight,(*(cw->lw->my_layer))->n_elements, weight/100.0); } else { fprintf(stdout,"error in dialog_buttons_clicked_cb\n"); exit(1); } } else if (cw->kind == CW_EDIT) { weight = strtod(gtk_entry_get_text(GTK_ENTRY(cw->weightEntry)),NULL); (*(cw->lw->my_layer))->weight[cw->index] = weight/100.0; } //update store gtk_list_store_clear(cw->lw->store); for (i = 0 ; i < (*(cw->lw->my_layer))->n_elements ; i++) { gtk_list_store_append(cw->lw->store, &iter); gtk_list_store_set(cw->lw->store, &iter, SYMBOL_COLUMN, AtomicNumberToSymbol((*(cw->lw->my_layer))->Z[i]), WEIGHT_COLUMN, (*(cw->lw->my_layer))->weight[i]*100.0, -1 ); } sprintf(buffer,"%g", xmi_sum_double((*(cw->lw->my_layer))->weight,(*(cw->lw->my_layer))->n_elements )*100.0); gtk_entry_set_text(GTK_ENTRY(cw->lw->sumEntry), buffer); gtk_widget_hide_all(GTK_WIDGET(dialog)); } }
void window_show_cb(GtkWidget *window, gpointer data) { struct layerWidget *lw = (struct layerWidget *) data; char buffer[512]; int i; GtkTreeIter iter; #if DEBUG == 1 fprintf(stdout,"window is showing\n"); #endif //let's have a look at the value of my_layer #if DEBUG == 1 if (*(lw->my_layer) == NULL) { fprintf(stdout,"ADD button clicked\n"); } else fprintf(stdout,"EDIT button clicked\n"); #endif g_signal_handler_block(G_OBJECT(lw->densityEntry),lw->densityG); g_signal_handler_block(G_OBJECT(lw->thicknessEntry),lw->thicknessG); if (*(lw->my_layer) != NULL) { //editing layer //density sprintf(buffer,"%g", (*(lw->my_layer))->density); gtk_entry_set_text(GTK_ENTRY(lw->densityEntry), buffer); //thickness sprintf(buffer,"%g", (*(lw->my_layer))->thickness); gtk_entry_set_text(GTK_ENTRY(lw->thicknessEntry), buffer); //sum #if DEBUG == 1 fprintf(stdout,"n_elements: %i\n",(*(lw->my_layer))->n_elements); fprintf(stdout,"first element: %lf\n",(*(lw->my_layer))->weight[0]); #endif sprintf(buffer,"%g", xmi_sum_double((*(lw->my_layer))->weight,(*(lw->my_layer))->n_elements )*100.0); gtk_entry_set_text(GTK_ENTRY(lw->sumEntry), buffer); //fill up the different elements gtk_list_store_clear(lw->store); for (i = 0 ; i < (*(lw->my_layer))->n_elements ; i++) { gtk_list_store_append(lw->store, &iter); gtk_list_store_set(lw->store, &iter, SYMBOL_COLUMN, AtomicNumberToSymbol((*(lw->my_layer))->Z[i]), WEIGHT_COLUMN, (*(lw->my_layer))->weight[i]*100.0, -1 ); } } else { //clear it gtk_list_store_clear(lw->store); gtk_entry_set_text(GTK_ENTRY(lw->sumEntry),"0"); gtk_entry_set_text(GTK_ENTRY(lw->densityEntry),""); gtk_entry_set_text(GTK_ENTRY(lw->thicknessEntry),""); gtk_widget_set_sensitive(lw->okButton, FALSE); gtk_widget_modify_base(lw->densityEntry,GTK_STATE_NORMAL,&white); gtk_widget_modify_base(lw->thicknessEntry,GTK_STATE_NORMAL,&white); } g_signal_handler_unblock(G_OBJECT(lw->densityEntry),lw->densityG); g_signal_handler_unblock(G_OBJECT(lw->thicknessEntry),lw->thicknessG); }