Curtis,
I took your code suggestion for bolding the RadioButton and made it more general so it works with any layout I define. After each layout for a section of the form is completed, I include a callback to BoldRadioButtons and use the sender argument to test for the presence of a RadioButton. Below is a working example for many of the RadioButtons in my form: Trim Mesh To Curve.
import Eto.Drawing as drawing
from Eto.Drawing import Font, FontStyle, Colors as EtoColors, Size
import Eto.Forms as forms
from Eto.Forms import TextAlignment
from Rhino import UI,RhinoDoc
class TrimMeshDialog(forms.Dialog[bool]):
# Initializer which creates form.
def __init__(self):
# Initialize dialog box.
self.Padding = drawing.Padding(5)
self.Title = 'Trim Mesh to Curve'
# Create main layout.
layout = forms.DynamicLayout(Padding = drawing.Padding(4,0,4,4), Spacing = drawing.Size(5,5))
layout.AddSeparateRow(self.CreateRadioButtonsForOperations())
layout.AddSeparateRow(self.CreateRadioButtonsForBoundaryCurve())
# Set the dialog content.
self.Content = layout
# Make RadioButton text bold.
def BoldRadioButtons(self, sender, e):
for l in sender.Children:
if type(l) is forms.RadioButton:
l.Font = drawing.SystemFonts.Bold()
# Controls for selecting operation.
def CreateRadioButtonsForOperations(self):
# Create label for radio buttons.
self.OperationLabel = forms.Label(
Text = 'Operation',
Font = Font('Segoe UI', 10, FontStyle.Bold),
TextColor = EtoColors.Blue)
# Create radio buttons.
self.TrimHolePit = forms.RadioButtonList(
DataStore = ['Trim', 'Hole ', 'Pit', 'Split'],
SelectedIndex = 0,
Padding = drawing.Padding(0,0,0,0),
Spacing = Size(1,0))
# Create Dynamic layout.
self.OperationsPanel = forms.DynamicLayout(Spacing = drawing.Size(0,0))
self.OperationsPanel.AddRow(self.OperationLabel)
self.OperationsPanel.AddRow(self.TrimHolePit)
self.OperationsPanel.LoadComplete += self.BoldRadioButtons
return self.OperationsPanel
# Controls that define the source for the boundary curve and enable calcuating the mesh volume for Trim operations.
def CreateRadioButtonsForBoundaryCurve(self):
# Create label for radio buttons.
self.BdryLabel = forms.Label(
Text = 'Boundary Curve',
Font = Font('Segoe UI', 10, FontStyle.Bold),
TextColor = EtoColors.Blue)
self.EnterSelect = forms.RadioButtonList(
DataStore = ['Enter', 'Select', 'Reuse'],
SelectedIndex = 0,
Padding = drawing.Padding(0,0,0,0),
Spacing = Size(9,0))
self.LineLabel = forms.Label(
Text = 'Type of line between points',
TextAlignment = TextAlignment.Center,
Font = Font('Segoe UI', 10., FontStyle.Bold),
TextColor = EtoColors.Green,
Visible = True)#self.Args.EnterSelect != 2)
self.StraightCurved = forms.RadioButtonList(
DataStore = ['Straight ', 'Curved'],
SelectedIndex = 0,
Visible = True,
Padding = drawing.Padding(20,0,0,0),
Spacing = Size(10,0))
# Create Dynamic layout.
self.BoundaryCurvePanel = forms.DynamicLayout(Padding = drawing.Padding(0,0), DefaultSpacing = drawing.Size(5,0))
self.BoundaryCurvePanel.AddRow(self.BdryLabel)
self.BoundaryCurvePanel.AddRow(self.EnterSelect)
self.BoundaryCurvePanel.AddRow(self.StraightCurved)
self.BoundaryCurvePanel.LoadComplete += self.BoldRadioButtons
return self.BoundaryCurvePanel
dlg = TrimMeshDialog()
result = UI.EtoExtensions.ShowSemiModal(dlg, RhinoDoc.ActiveDoc, UI.RhinoEtoApp.MainWindow)
Thanks for your great help with this.
Regards,
Terry.