private void OnEditorMadeDirty(object o, EventArgs e)
        {
            MemberEditor editor = (MemberEditor)o;

            if (!this.mDirtyEditors.Contains(editor))
            {
                this.mDirtyEditors.Add(editor);

                this.RevertButton.Sensitive = true;
                this.ApplyButton.Sensitive  = true;
            }
        }
        private void OnEditorMadeClean(object o, EventArgs e)
        {
            if (this.mSuspendCleanProcessing)
            {
                return;
            }

            MemberEditor editor = (MemberEditor)o;

            if (this.mDirtyEditors.Remove(editor) &&
                this.mDirtyEditors.Count == 0)
            {
                this.RevertButton.Sensitive = false;
                this.ApplyButton.Sensitive  = false;
            }
        }
        private void BuildInterface()
        {
            string category = null;

            uint count = 0;

            foreach (EffectMember i in this.mMembers)
            {
                if (i.Category != category)
                {
                    category = i.Category;
                    count++;
                }

                count++;
            }

            category = null;

            Table table = new Table(count, 2, false);

            uint row = 0;

            foreach (EffectMember i in this.mMembers)
            {
                Label l;

                if (i.Category != category)
                {
                    category = i.Category;

                    l        = new Label();
                    l.Markup = "<b>" + category + "</b>";
                    l.Show();

                    table.Attach(l, 0, 2, row, ++row,
                                 AttachOptions.Expand | AttachOptions.Fill,
                                 AttachOptions.Shrink, 5, 5);
                }

                l = new Label(i.DisplayName);
                l.Show();
                table.Attach(l, 0, 1, row, row + 1, AttachOptions.Fill,
                             AttachOptions.Shrink, 5, 5);

                MemberEditor editor = MemberEditor.Create(this.mEffect, i.Item);
                editor.Show();

                editor.MadeClean += this.OnEditorMadeClean;
                editor.MadeDirty += this.OnEditorMadeDirty;
                editor.Applied   += this.OnEditorApplied;
                this.mEditors.Add(editor);

                if (!string.IsNullOrEmpty(i.Description))
                {
                    editor.TooltipText = i.Description;
                }

                table.Attach(editor, 1, 2, row, ++row,
                             editor.XAttachment, editor.YAttachment, 5, 5);
            }

            this.SheetPane.AddWithViewport(table);
            table.Show();
        }