private void TextBlock_info_flow_MouseUp(object sender, MouseButtonEventArgs e)
        {
            TextBlock tb = sender as TextBlock;

            if (tb == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(tb.Text))
            {
                return;
            }

            InfoFlow infoF   = ComponentUtils.StringToInfoFlow(tb.Text);
            int      nrTypes = Enum.GetNames(typeof(InfoFlow)).Length;
            int      tmp     = (int)(infoF + 1) % nrTypes;

            infoF      = (InfoFlow)((int)(infoF + 1) % nrTypes);
            tb.Text    = ComponentUtils.InfoFlowToString(infoF);
            tb.ToolTip = ComponentUtils.InfoFlowStringToDescription(tb.Text);
        }
        // only call when parsing
        internal Parameter ReconstructParameter(long _id, string _name, string _unit, Category _category, InfoFlow _propagation,
                                                double _value_min, double _value_max, double _value_current, bool _is_within_bounds,
                                                MultiValue _value_field, long _value_field_ref, MultiValPointer _value_field_pointer,
                                                DateTime _time_stamp, string _text_value)
        {
            Parameter created = new Parameter(_id, _name, _unit, _category, _propagation,
                                              _value_min, _value_max, _value_current, _is_within_bounds,
                                              _text_value, _value_field_ref, _value_field_pointer);

            // value field
            created.ValueField = _value_field; // resets ValueFieldRef und MValPointer (e.g. if the field is NULL)
            if (_value_field != null)
            {
                created.MValPointer = _value_field_pointer; // DO NOT FORGET to corrct the MValPointer
            }
            // time stamp
            if (_time_stamp != null)
            {
                created.TimeStamp = _time_stamp;
            }
            else
            {
                created.TimeStamp = DateTime.Now;
            }

            // check if a valid value table was created
            if (created == null)
            {
                return(null);
            }

            // create
            this.parameter_record.Add(created);
            // adjust type counter
            Parameter.NR_PARAMS = Math.Max(Parameter.NR_PARAMS, created.ID);
            // done
            return(created);
        }