/*! \brief updates the ms2 user_outputs controls which are a bit special purpose \param widget is the pointer to the widget to update */ G_MODULE_EXPORT void update_ms2_user_outputs(GtkWidget *widget) { GtkTreeModel *model = NULL; DataSize size = MTX_U08; GtkTreeIter iter; gint tmpi = 0; gint t_bitval = 0; gboolean valid = FALSE; gfloat * multiplier = NULL; gfloat * adder = NULL; gchar *lower = NULL; gchar *upper = NULL; gchar *range = NULL; gchar *tmpbuf = NULL; gint bitmask = 0; gint bitshift = 0; gfloat tmpf = 0.0; gfloat tmpf2 = 0.0; gfloat value = 0.0; gint i = 0; gint precision = 0; void *eval = NULL; GtkWidget *tmpwidget = NULL; ENTER(); get_essential_bits_f(widget, NULL, NULL, NULL, NULL, &bitmask, &bitshift); value = convert_after_upload_f(widget); tmpi = ((GINT)value & bitmask) >> bitshift; model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model),&iter); i = 0; while (valid) { gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,UO_BITVAL_COL,&t_bitval,-1); if (tmpi == t_bitval) { /* Get the rest of the data from the combo */ gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,UO_SIZE_COL,&size,UO_RAW_LOWER_COL,&lower,UO_RAW_UPPER_COL,&upper,UO_RANGE_COL,&range,UO_PRECISION_COL,&precision,UO_FROMECU_MULT_COL,&multiplier,UO_FROMECU_ADD_COL,&adder,-1); tmpbuf = (gchar *)OBJ_GET(widget,"range_label"); if (tmpbuf) tmpwidget = lookup_widget_f(tmpbuf); if (GTK_IS_LABEL(tmpwidget)) gtk_label_set_text(GTK_LABEL(tmpwidget),range); tmpbuf = (gchar *)OBJ_GET(widget,"thresh_widget"); if (tmpbuf) tmpwidget = lookup_widget_f(tmpbuf); if (GTK_IS_WIDGET(tmpwidget)) { OBJ_SET(tmpwidget,"size",GINT_TO_POINTER(size)); OBJ_SET(tmpwidget,"precision",GINT_TO_POINTER(precision)); OBJ_SET(tmpwidget,"raw_lower",lower); OBJ_SET(tmpwidget,"raw_upper",upper); if (multiplier) OBJ_SET(tmpwidget,"fromecu_mult",multiplier); else OBJ_SET(tmpwidget,"fromecu_mult",NULL); if (adder) OBJ_SET(tmpwidget,"fromecu_add",adder); else OBJ_SET(tmpwidget,"fromecu_add",NULL); update_widget_f(tmpwidget,NULL); } tmpbuf = (gchar *)OBJ_GET(widget,"hyst_widget"); if (tmpbuf) tmpwidget = lookup_widget_f(tmpbuf); if (GTK_IS_WIDGET(tmpwidget)) { OBJ_SET(tmpwidget,"size",GINT_TO_POINTER(size)); OBJ_SET(tmpwidget,"precision",GINT_TO_POINTER(precision)); OBJ_SET(tmpwidget,"raw_lower",lower); OBJ_SET(tmpwidget,"raw_upper",upper); if (multiplier) OBJ_SET(tmpwidget,"fromecu_mult",multiplier); else OBJ_SET(tmpwidget,"fromecu_mult",NULL); if (adder) OBJ_SET(tmpwidget,"fromecu_add",adder); else OBJ_SET(tmpwidget,"fromecu_add",NULL); update_widget_f(tmpwidget,NULL); } g_free(range); g_free(lower); g_free(upper); } valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); i++; } EXIT(); return; }
/*! \brief convert_temps() changes the values of controls based on the currently selected temperature scale. IT works for labels, spinbuttons, etc... \param widget (gpointer) pointer to the widget that contains the necessary paramaters re temp (Alt label, etc) \param units (gpointer) the temp scale selected */ G_MODULE_EXPORT void convert_temps(gpointer widget, gpointer units) { static void (*update_widget_f)(gpointer, gpointer); static gboolean (*check_deps)(gconstpointer *) = NULL; gconstpointer *dep_obj = NULL; gfloat upper = 0.0; gfloat lower = 0.0; gfloat value = 0.0; gchar * text = NULL; GtkAdjustment * adj = NULL; gboolean state = FALSE; gint widget_temp = -1; /*extern GdkColor black;*/ extern gconstpointer *global_data; /* If this widgt depends on anything call check_dependancy which will * return TRUE/FALSE. True if what it depends on is in the matching * state, FALSE otherwise... */ if ((!widget) || (DATA_GET(global_data,"leaving"))) return; if (!check_deps) if (!get_symbol("check_dependancies",(void *)&check_deps)) dbg_func(CRITICAL|CONVERSIONS,g_strdup_printf(__FILE__": convert_temps()\n\tCan NOT locate \"check_dependancies\" function pointer in plugins, BUG!\n")); if (!update_widget_f) if(!get_symbol("update_widget",(void *)&update_widget_f)) dbg_func(CRITICAL|CONVERSIONS,g_strdup_printf(__FILE__": convert_temps()\n\tCan NOT locate \"update_widget\" function pointer in plugins, BUG!\n")); dep_obj = (gconstpointer *)OBJ_GET(widget,"dep_object"); widget_temp = (GINT)OBJ_GET(widget,"widget_temp"); if (dep_obj) { if (check_deps) state = check_deps(dep_obj); else dbg_func(CRITICAL|CONVERSIONS,g_strdup_printf(__FILE__": convert_temps()\n\tWidget %s has dependant object bound but can't locate function ptr for \"check_dependancies\" from plugins, BUG!\n",glade_get_widget_name(widget))); } switch ((TempUnits)units) { case FAHRENHEIT: /*printf("fahr %s\n",glade_get_widget_name(widget));*/ if (GTK_IS_LABEL(widget)) { if ((dep_obj) && (state)) text = (gchar *)OBJ_GET(widget,"alt_f_label"); else text = (gchar *)OBJ_GET(widget,"f_label"); gtk_label_set_text(GTK_LABEL(widget),text); //gtk_widget_modify_text(widget,GTK_STATE_NORMAL,&black); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); } if ((GTK_IS_SPIN_BUTTON(widget)) && (widget_temp != FAHRENHEIT)) { adj = (GtkAdjustment *) gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON(widget)); upper = adj->upper; value = adj->value; lower = adj->lower; if (widget_temp == CELSIUS) { adj->value = c_to_f(value); adj->lower = c_to_f(lower); adj->upper = c_to_f(upper); } else /* Previous is kelvin */ { adj->value = k_to_f(value); adj->lower = k_to_f(lower); adj->upper = k_to_f(upper); } gtk_adjustment_changed(adj); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); update_widget_f(widget,NULL); } if ((GTK_IS_ENTRY(widget)) && (widget_temp != FAHRENHEIT)) { OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); update_widget_f(widget,NULL); } if ((GTK_IS_RANGE(widget)) && (widget_temp != FAHRENHEIT)) { adj = (GtkAdjustment *) gtk_range_get_adjustment( GTK_RANGE(widget)); upper = adj->upper; lower = adj->lower; value = adj->value; if (widget_temp == CELSIUS) { adj->value = c_to_f(value); adj->lower = c_to_f(lower); adj->upper = c_to_f(upper); } else /* Previous is kelvin */ { adj->value = k_to_f(value); adj->lower = k_to_f(lower); adj->upper = k_to_f(upper); } gtk_range_set_adjustment(GTK_RANGE(widget),adj); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); } break; case CELSIUS: /*printf("fahr %s\n",glade_get_widget_name(widget));*/ if (GTK_IS_LABEL(widget)) { if ((dep_obj) && (state)) text = (gchar *)OBJ_GET(widget,"alt_c_label"); else text = (gchar *)OBJ_GET(widget,"c_label"); gtk_label_set_text(GTK_LABEL(widget),text); //gtk_widget_modify_text(widget,GTK_STATE_NORMAL,&black); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); } if ((GTK_IS_SPIN_BUTTON(widget)) && (widget_temp != CELSIUS)) { adj = (GtkAdjustment *) gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON(widget)); upper = adj->upper; value = adj->value; lower = adj->lower; if (widget_temp == FAHRENHEIT) { adj->value = f_to_c(value); adj->lower = f_to_c(lower); adj->upper = f_to_c(upper); } else /* Previous is kelvin */ { adj->value = k_to_c(value); adj->lower = k_to_c(lower); adj->upper = k_to_c(upper); } gtk_adjustment_changed(adj); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); update_widget_f(widget,NULL); } if ((GTK_IS_ENTRY(widget)) && (widget_temp != CELSIUS)) { OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); update_widget_f(widget,NULL); } if ((GTK_IS_RANGE(widget)) && (widget_temp != CELSIUS)) { adj = (GtkAdjustment *) gtk_range_get_adjustment( GTK_RANGE(widget)); upper = adj->upper; lower = adj->lower; value = adj->value; if (widget_temp == FAHRENHEIT) { adj->value = f_to_c(value); adj->lower = f_to_c(lower); adj->upper = f_to_c(upper); } else /* Previous is kelvin */ { adj->value = k_to_c(value); adj->lower = k_to_c(lower); adj->upper = k_to_c(upper); } gtk_range_set_adjustment(GTK_RANGE(widget),adj); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); } break; case KELVIN: /*printf("fahr %s\n",glade_get_widget_name(widget));*/ if (GTK_IS_LABEL(widget)) { if ((dep_obj) && (state)) text = (gchar *)OBJ_GET(widget,"alt_k_label"); else text = (gchar *)OBJ_GET(widget,"k_label"); gtk_label_set_text(GTK_LABEL(widget),text); //gtk_widget_modify_text(widget,GTK_STATE_NORMAL,&black); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); } if ((GTK_IS_SPIN_BUTTON(widget)) && (widget_temp != KELVIN)) { adj = (GtkAdjustment *) gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON(widget)); upper = adj->upper; value = adj->value; lower = adj->lower; if (widget_temp == FAHRENHEIT) { adj->value = f_to_k(value); adj->lower = f_to_k(lower); adj->upper = f_to_k(upper); } else /* Previous is celsius */ { adj->value = c_to_k(value); adj->lower = c_to_k(lower); adj->upper = c_to_k(upper); } gtk_adjustment_changed(adj); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); update_widget_f(widget,NULL); } if ((GTK_IS_ENTRY(widget)) && (widget_temp != KELVIN)) { OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); update_widget_f(widget,NULL); } if ((GTK_IS_RANGE(widget)) && (widget_temp != KELVIN)) { adj = (GtkAdjustment *) gtk_range_get_adjustment( GTK_RANGE(widget)); upper = adj->upper; lower = adj->lower; value = adj->value; if (widget_temp == FAHRENHEIT) { adj->value = f_to_k(value); adj->lower = f_to_k(lower); adj->upper = f_to_k(upper); } else /* Previous is celsius */ { adj->value = c_to_k(value); adj->lower = c_to_k(lower); adj->upper = c_to_k(upper); } gtk_range_set_adjustment(GTK_RANGE(widget),adj); OBJ_SET(widget,"widget_temp",GINT_TO_POINTER(units)); } break; } }
/*! \brief updates the ms2 user_outputs controls which are a bit special purpose \param widget is the pointer to the widget to update */ G_MODULE_EXPORT void update_ms2_user_outputs(GtkWidget *widget) { GtkTreeModel *model = NULL; DataSize size = MTX_U08; GtkTreeIter iter; gint tmpi = 0; gint t_bitval = 0; gboolean valid = FALSE; gfloat * multiplier = NULL; gfloat * adder = NULL; gchar *lower = NULL; gchar *upper = NULL; gchar *range = NULL; gchar *tempc_range = NULL; gchar *tempf_range = NULL; gchar *tempk_range = NULL; gchar *tmpbuf = NULL; gchar *tmpstr = NULL; gint bitmask = 0; gint bitshift = 0; gfloat tmpf = 0.0; gfloat tmpf2 = 0.0; gfloat value = 0.0; gboolean temp_dep = FALSE; gint i = 0; gint precision = 0; void *eval = NULL; GtkWidget *tmpwidget = NULL; ENTER(); /*printf("update_ms2_user_outputs widget %s %p\n",glade_get_widget_name(widget),(void *)widget);*/ get_essential_bits_f(widget, NULL, NULL, NULL, NULL, &bitmask, &bitshift); value = convert_after_upload_f(widget); tmpi = ((GINT)value & bitmask) >> bitshift; model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model),&iter); i = 0; while (valid) { gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,UO_BITVAL_COL,&t_bitval,-1); if (tmpi == t_bitval) { /* Get the rest of the data from the combo */ gtk_tree_model_get(GTK_TREE_MODEL(model),&iter, UO_TEMP_DEP_COL,&temp_dep, UO_SIZE_COL,&size, UO_RAW_LOWER_COL,&lower, UO_RAW_UPPER_COL,&upper, UO_RANGE_COL,&range, UO_RANGE_TEMPC_COL,&tempc_range, UO_RANGE_TEMPF_COL,&tempf_range, UO_RANGE_TEMPK_COL,&tempk_range, UO_PRECISION_COL,&precision, UO_FROMECU_MULT_COL,&multiplier, UO_FROMECU_ADD_COL,&adder,-1); /* if (temp_dep) { printf("THIS WIDGET IS TEMP DEPENDENT\n"); printf("raw_lower %s, raw_upper %s in treemodel\n",lower,upper); if (multiplier) printf("multiplier %f\n",*multiplier); if (adder) printf("adder %f\n",*adder); printf("size %i, precision %i, temp_dep %i\n",(gint)size,precision,(gint)temp_dep); } */ tmpbuf = (gchar *)OBJ_GET(widget,"range_label"); if (tmpbuf) tmpwidget = lookup_widget_f(tmpbuf); if (GTK_IS_LABEL(tmpwidget)) { if (temp_dep) { OBJ_SET(tmpwidget,"widget_temp",DATA_GET(global_data,"mtx_temp_units")); OBJ_SET(tmpwidget,"c_label",tempc_range); OBJ_SET(tmpwidget,"f_label",tempf_range); OBJ_SET(tmpwidget,"k_label",tempk_range); bind_to_lists_f(tmpwidget,"temperature"); gtk_label_set_text(GTK_LABEL(tmpwidget),tempf_range); convert_temps_f(tmpwidget,DATA_GET(global_data,"mtx_temp_units")); } else { remove_from_lists_f("temperature",tmpwidget); OBJ_SET(tmpwidget,"widget_temp",NULL); OBJ_SET(tmpwidget,"temp_dep",NULL); /*OBJ_SET(tmpwidget,"c_label",NULL); OBJ_SET(tmpwidget,"f_label",NULL); OBJ_SET(tmpwidget,"k_label",NULL); */ gtk_label_set_text(GTK_LABEL(tmpwidget),range); } } tmpbuf = (gchar *)OBJ_GET(widget,"thresh_widget"); if (tmpbuf) tmpwidget = lookup_widget_f(tmpbuf); if (GTK_IS_WIDGET(tmpwidget)) { if (temp_dep) { OBJ_SET(tmpwidget,"widget_temp",DATA_GET(global_data,"mtx_temp_units")); OBJ_SET(tmpwidget,"temp_dep",GINT_TO_POINTER(temp_dep)); bind_to_lists_f(tmpwidget,"temperature"); } else { OBJ_SET(tmpwidget,"widget_temp",NULL); OBJ_SET(tmpwidget,"temp_dep",NULL); remove_from_lists_f("temperature",tmpwidget); } OBJ_SET(tmpwidget,"size",GINT_TO_POINTER(size)); OBJ_SET(tmpwidget,"precision",GINT_TO_POINTER(precision)); OBJ_SET(tmpwidget,"raw_lower",lower); OBJ_SET(tmpwidget,"raw_upper",upper); if (multiplier) OBJ_SET(tmpwidget,"fromecu_mult",multiplier); else OBJ_SET(tmpwidget,"fromecu_mult",NULL); if (adder) OBJ_SET(tmpwidget,"fromecu_add",adder); else OBJ_SET(tmpwidget,"fromecu_add",NULL); //convert_temps_f(tmpwidget,DATA_GET(global_data,"mtx_temp_units")); update_widget_f(tmpwidget,NULL); } tmpbuf = (gchar *)OBJ_GET(widget,"hyst_widget"); if (tmpbuf) tmpwidget = lookup_widget_f(tmpbuf); if (GTK_IS_WIDGET(tmpwidget)) { OBJ_SET(tmpwidget,"size",GINT_TO_POINTER(size)); OBJ_SET(tmpwidget,"precision",GINT_TO_POINTER(precision)); OBJ_SET(tmpwidget,"raw_lower",lower); OBJ_SET(tmpwidget,"raw_upper",upper); if (multiplier) OBJ_SET(tmpwidget,"fromecu_mult",multiplier); else OBJ_SET(tmpwidget,"fromecu_mult",NULL); if (adder) OBJ_SET(tmpwidget,"fromecu_add",adder); else OBJ_SET(tmpwidget,"fromecu_add",NULL); update_widget_f(tmpwidget,NULL); } g_free(range); } valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); i++; } EXIT(); return; }