private Widget BuildCheck(PipelineVariable variable)
        {
            CheckButton check = new CheckButton(variable.Name);

            check.Toggled += delegate {
                variable.CurrentValue = Convert.ToString(check.Active ? 1 : 0);

                for (int i = 0; i < variable.Enables.Length; i++)
                {
                    if (variable_widgets.ContainsKey(variable.Enables[i]))
                    {
                        variable_widgets[variable.Enables[i]].Visible             = check.Active;
                        variable_widgets[".label." + variable.Enables[i]].Visible = check.Active;
                    }
                }

                for (int i = 0; i < variable.Disables.Length; i++)
                {
                    if (variable_widgets.ContainsKey(variable.Disables[i]))
                    {
                        variable_widgets[variable.Disables[i]].Visible             = !check.Active;
                        variable_widgets[".label." + variable.Disables[i]].Visible = !check.Active;
                    }
                }
            };

            check.Active = ((int)variable.CurrentValueNumeric.Value) != 0;
            check.Show();
            return(check);
        }
 private TreeIter ComboAppend(ListStore model, PipelineVariable variable, string display, string value)
 {
     if (variable.Unit != null)
     {
         return(model.AppendValues(String.Format("{0} {1}", display, variable.Unit), value));
     }
     else
     {
         return(model.AppendValues(display, value));
     }
 }
        private Widget BuildSlider(PipelineVariable variable)
        {
            if (variable.StepValue <= 0.0)
            {
                return(null);
            }

            HBox box = new HBox();

            HScale slider = new HScale(variable.MinValue, variable.MaxValue, variable.StepValue);

            slider.DrawValue = true;
            slider.Digits    = variable.StepPrecision;

            if (variable.DefaultValueNumeric != null)
            {
                slider.Value = (double)variable.DefaultValueNumeric;
            }

            if (variable.CurrentValueNumeric != null)
            {
                slider.Value = (double)variable.CurrentValueNumeric;
            }

            slider.ChangeValue += delegate {
                variable.CurrentValue = slider.Value.ToString();
            };

            if (variable.MinLabel != null)
            {
                Label min_label = new Label();
                min_label.Yalign = 0.9f;
                min_label.Markup = String.Format("<small>{0}</small>", GLib.Markup.EscapeText(variable.MinLabel));
                box.PackStart(min_label, false, false, 0);
                box.Spacing = 5;
            }

            box.PackStart(slider, true, true, 0);

            if (variable.MaxLabel != null)
            {
                Label max_label = new Label();
                max_label.Yalign = 0.9f;
                max_label.Markup = String.Format("<small>{0}</small>", GLib.Markup.EscapeText(variable.MaxLabel));
                box.PackStart(max_label, false, false, 0);
                box.Spacing = 5;
            }

            box.ShowAll();

            return(box);
        }
        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 BuildControl(PipelineVariable variable)
        {
            switch (variable.ControlType)
            {
            default:
            case PipelineVariableControlType.Text:
                return(new Entry());

            case PipelineVariableControlType.Slider:
                return(BuildSlider(variable));

            case PipelineVariableControlType.Combo:
                return(BuildCombo(variable));

            case PipelineVariableControlType.Check:
                return(BuildCheck(variable));
            }
        }
 public PipelineVariableComboBox(PipelineVariable variable, ListStore model) : base()
 {
     this.variable = variable;
     this.model    = model;
 }
        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);
        }