private void OnComboChanged(object o, EventArgs args)
        {
            if (!(o is PipelineVariableComboBox))
            {
                return;
            }

            PipelineVariableComboBox box      = o as PipelineVariableComboBox;
            PipelineVariable         variable = box.Variable;
            ListStore model         = box.Store;
            TreeIter  selected_iter = TreeIter.Zero;

            if (box.GetActiveIter(out selected_iter))
            {
                variable.CurrentValue = (string)model.GetValue(selected_iter, 1);

                if (variable.PossibleValuesCount > 0 &&
                    variable.PossibleValues.ContainsKey(variable.CurrentValue))
                {
                    PipelineVariable.PossibleValue possible_value = variable.PossibleValues[variable.CurrentValue];
                    if (possible_value.Disables != null)
                    {
                        for (int i = 0; i < possible_value.Disables.Length; i++)
                        {
                            if (variable_widgets.ContainsKey(possible_value.Disables[i]))
                            {
                                variable_widgets[possible_value.Disables[i]].Visible             = false;
                                variable_widgets[".label." + possible_value.Disables[i]].Visible = false;
                            }
                        }
                    }

                    if (possible_value.Enables != null)
                    {
                        for (int i = 0; i < possible_value.Enables.Length; i++)
                        {
                            if (variable_widgets.ContainsKey(possible_value.Enables[i]))
                            {
                                variable_widgets[possible_value.Enables[i]].Visible             = true;
                                variable_widgets[".label." + possible_value.Enables[i]].Visible = true;
                            }
                        }
                    }
                }
            }
        }
        private Widget BuildCombo(PipelineVariable variable)
        {
            ListStore model = new ListStore(typeof(string), typeof(string));
            PipelineVariableComboBox box = new PipelineVariableComboBox(variable, model);
            TreeIter active_iter         = TreeIter.Zero;

            box.Changed += OnComboChanged;

            if (variable.PossibleValuesCount > 0)
            {
                foreach (string key in variable.PossibleValuesKeys)
                {
                    TreeIter iter = ComboAppend(model, variable, variable.PossibleValues[key].Display, key);

                    if (variable.CurrentValue == key || (active_iter.Equals(TreeIter.Zero) &&
                                                         variable.DefaultValue == key))
                    {
                        active_iter = iter;
                    }
                }
            }
            else
            {
                double min     = variable.MinValue;
                double max     = variable.MaxValue;
                double step    = variable.StepValue;
                double current = min;

                for (; current <= max; current += step)
                {
                    ComboAppend(model, variable, current.ToString(), current.ToString());
                }
            }

            if (active_iter.Equals(TreeIter.Zero))
            {
                for (int i = 0, n = model.IterNChildren(); i < n; i++)
                {
                    TreeIter iter;
                    if (model.IterNthChild(out iter, i))
                    {
                        string value = (string)model.GetValue(iter, 1);
                        if (value == variable.CurrentValue)
                        {
                            active_iter = iter;
                            break;
                        }
                    }
                }
            }

            CellRendererText text_renderer = new CellRendererText();

            box.PackStart(text_renderer, true);
            box.AddAttribute(text_renderer, "text", 0);

            box.Model = model;

            if (active_iter.Equals(TreeIter.Zero))
            {
                if (model.IterNthChild(out active_iter, 0))
                {
                    box.SetActiveIter(active_iter);
                }
            }
            else
            {
                box.SetActiveIter(active_iter);
            }

            return(box);
        }
        private Widget BuildCombo(PipelineVariable variable)
        {
            ListStore model = new ListStore(typeof(string), typeof(string));
            PipelineVariableComboBox box = new PipelineVariableComboBox(variable, model);
            TreeIter active_iter = TreeIter.Zero;

            box.Changed += OnComboChanged;

            if(variable.PossibleValuesCount > 0) {
                foreach(string key in variable.PossibleValuesKeys) {
                    TreeIter iter = ComboAppend(model, variable, variable.PossibleValues[key].Display, key);

                    if(variable.CurrentValue == key || (active_iter.Equals(TreeIter.Zero) &&
                        variable.DefaultValue == key)) {
                        active_iter = iter;
                    }
                }
            } else {
                double min = variable.MinValue;
                double max = variable.MaxValue;
                double step = variable.StepValue;
                double current = min;

                for(; current <= max; current += step) {
                    ComboAppend(model, variable, current.ToString(), current.ToString());
                }
            }

            if(active_iter.Equals(TreeIter.Zero)) {
                for(int i = 0, n = model.IterNChildren(); i < n; i++) {
                    TreeIter iter;
                    if(model.IterNthChild(out iter, i)) {
                        string value = (string)model.GetValue(iter, 1);
                        if(value == variable.CurrentValue) {
                            active_iter = iter;
                            break;
                        }
                    }
                }
            }

            CellRendererText text_renderer = new CellRendererText();
            box.PackStart(text_renderer, true);
            box.AddAttribute(text_renderer, "text", 0);

            box.Model = model;

            if(active_iter.Equals(TreeIter.Zero)) {
                if(model.IterNthChild(out active_iter, 0)) {
                    box.SetActiveIter(active_iter);
                }
            } else {
                box.SetActiveIter(active_iter);
            }

            return box;
        }