Пример #1
0
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);
}
Пример #2
0
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));

		}
	}
}
Пример #3
0
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;
}
Пример #4
0
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);
}
Пример #5
0
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
			);
		} 
	}
}
Пример #6
0
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));
	
	}


}
Пример #7
0
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);

}