Ejemplo n.º 1
0
        public GridRow(PropertyGrid parentGrid, PropertyDescriptor descriptor)
        {
            this.parent             = parentGrid;
            this.propertyDescriptor = descriptor;

            // TODO: Need a better way to check if the property has no get accessor.
            // Write-only? Don't add this to the list.
            try { object propertyValue = descriptor.GetValue(parent.CurrentObject); }
            catch (Exception) {
                isValidProperty = false;
                return;
            }

            #region Name label

            string name = descriptor.DisplayName;
            ParenthesizePropertyNameAttribute paren = descriptor.Attributes[typeof(ParenthesizePropertyNameAttribute)] as ParenthesizePropertyNameAttribute;
            if (paren != null && paren.NeedParenthesis)
            {
                name = "(" + name + ")";
            }

            propertyNameLabel               = new Label(name);
            propertyNameLabel.Xalign        = 0;
            propertyNameLabel.Xpad          = 3;
            propertyNameLabel.HeightRequest = 20;

            propertyNameEventBox = new EventBox();
            propertyNameEventBox.ModifyBg(StateType.Normal, parent.Style.White);
            propertyNameEventBox.Add(propertyNameLabel);
            propertyNameEventBox.ButtonReleaseEvent += on_label_ButtonRelease;

            if (propertyNameLabel.SizeRequest().Width > 100)
            {
                propertyNameLabel.WidthRequest = 100;
                //TODO: Display tooltip of full name when truncated
                //parent.tooltips.SetTip (propertyNameLabel, descriptor.DisplayName, descriptor.DisplayName);
            }

            #endregion

            editor = parent.EditorManager.GetEditor(propertyDescriptor, this);

            propertyValueHBox = new HBox();

            //check if it needs a button. Note arrays are read-only but have buttons
            if (editor.DialogueEdit && (!propertyDescriptor.IsReadOnly || editor.EditsReadOnlyObject))
            {
                Label buttonLabel = new Label();
                buttonLabel.UseMarkup = true;
                buttonLabel.Xpad      = 0; buttonLabel.Ypad = 0;
                buttonLabel.Markup    = "<span size=\"small\">...</span>";
                Button dialogueButton = new Button(buttonLabel);
                dialogueButton.Clicked += new EventHandler(dialogueButton_Clicked);
                propertyValueHBox.PackEnd(dialogueButton, false, false, 0);
            }

            propertyValueEventBox = new EventBox();
            propertyValueEventBox.ModifyBg(StateType.Normal, parent.Style.White);
            propertyValueEventBox.CanFocus            = true;
            propertyValueEventBox.ButtonReleaseEvent += on_value_ButtonRelease;
            propertyValueEventBox.Focused            += on_value_ButtonRelease;
            propertyValueHBox.PackStart(propertyValueEventBox, true, true, 0);

            valueBeforeEdit = propertyDescriptor.GetValue(parentGrid.CurrentObject);
            DisplayRenderWidget();
        }
Ejemplo n.º 2
0
        public GridRow(PropertyGrid parentGrid, PropertyDescriptor descriptor)
        {
            this.parent = parentGrid;
            this.propertyDescriptor = descriptor;

            // TODO: Need a better way to check if the property has no get accessor.
            // Write-only? Don't add this to the list.
            try {object propertyValue = descriptor.GetValue (parent.CurrentObject);}
            catch (Exception) {
                isValidProperty = false;
                return;
            }

            #region Name label

            string name = descriptor.DisplayName;
            ParenthesizePropertyNameAttribute paren = descriptor.Attributes[typeof (ParenthesizePropertyNameAttribute)] as ParenthesizePropertyNameAttribute;
            if (paren != null && paren.NeedParenthesis)
                name = "(" + name + ")";

            propertyNameLabel = new Label (name);
            propertyNameLabel.Xalign = 0;
            propertyNameLabel.Xpad = 3;
            propertyNameLabel.HeightRequest = 20;

            propertyNameEventBox = new EventBox ();
            propertyNameEventBox.ModifyBg (StateType.Normal, parent.Style.White);
            propertyNameEventBox.Add (propertyNameLabel);
            propertyNameEventBox.ButtonReleaseEvent += on_label_ButtonRelease;

            if (propertyNameLabel.SizeRequest ().Width > 100) {
                propertyNameLabel.WidthRequest = 100;
                //TODO: Display tooltip of full name when truncated
                //parent.tooltips.SetTip (propertyNameLabel, descriptor.DisplayName, descriptor.DisplayName);
            }

            #endregion

            editor = parent.EditorManager.GetEditor(propertyDescriptor, this);

            propertyValueHBox = new HBox();

            //check if it needs a button. Note arrays are read-only but have buttons
            if (editor.DialogueEdit && (!propertyDescriptor.IsReadOnly || editor.EditsReadOnlyObject)) {
                Label buttonLabel = new Label ();
                buttonLabel.UseMarkup = true;
                buttonLabel.Xpad = 0; buttonLabel.Ypad = 0;
                buttonLabel.Markup = "<span size=\"small\">...</span>";
                Button dialogueButton = new Button (buttonLabel);
                dialogueButton.Clicked += new EventHandler (dialogueButton_Clicked);
                propertyValueHBox.PackEnd (dialogueButton, false, false, 0);
            }

            propertyValueEventBox = new EventBox ();
            propertyValueEventBox.ModifyBg (StateType.Normal, parent.Style.White);
            propertyValueEventBox.CanFocus = true;
            propertyValueEventBox.ButtonReleaseEvent += on_value_ButtonRelease;
            propertyValueEventBox.Focused += on_value_ButtonRelease;
            propertyValueHBox.PackStart (propertyValueEventBox, true, true, 0);

            valueBeforeEdit = propertyDescriptor.GetValue (parentGrid.CurrentObject);
            DisplayRenderWidget ();
        }