private void AddFieldsToLayoutManager(UIFormTab formTab, IPanelInfo panelInfo) { int numberOfColumns = formTab.Count; int[] currentFieldPositionInColumns = new int[numberOfColumns]; int[] rowSpanTrackerForColumn = new int[numberOfColumns]; int maxRowsInColumns = formTab.GetMaxRowsInColumns(); int[] columnSpanTrackerForRow = new int[maxRowsInColumns]; for (int currentRowNo = 0; currentRowNo < maxRowsInColumns; currentRowNo++) { for (int currentColumnNo = 0; currentColumnNo < numberOfColumns; currentColumnNo++) { IUIFormColumn currentFormColumn = formTab[currentColumnNo]; if (--rowSpanTrackerForColumn[currentColumnNo] > 0) { continue; } // keep skipping this grid position until a previous row span in this column has been decremented if (--columnSpanTrackerForRow[currentRowNo] > 0) { continue; } // keep skipping this grid position until a previous column span in this row has been decremented int currentFieldNoInColumn = currentFieldPositionInColumns[currentColumnNo]; int totalFieldsInColumn = currentFormColumn.Count; if (currentFieldNoInColumn < totalFieldsInColumn) // there exists a field in this row in this column { UIFormField formField = (UIFormField)currentFormColumn[currentFieldNoInColumn]; rowSpanTrackerForColumn[currentColumnNo] = formField.RowSpan; for (int i = currentRowNo; i < currentRowNo + formField.RowSpan; i++) { // update colspan of all rows that this field spans into. columnSpanTrackerForRow[i] = formField.ColSpan; } PanelInfo.FieldInfo fieldInfo = AddControlsForField(formField, panelInfo); fieldInfo.InputControl.TabIndex = currentColumnNo * maxRowsInColumns + currentRowNo; } else { AddNullControlsForEmptyField(panelInfo); } currentFieldPositionInColumns[currentColumnNo]++; } } }
private PanelInfo.FieldInfo AddControlsForField(UIFormField formField, IPanelInfo panelInfo) { IControlHabanero labelControl; IControlMapper controlMapper; if (formField.Layout == LayoutStyle.Label) { labelControl = CreateAndAddLabel(panelInfo, formField); controlMapper = CreateAndAddInputControl(panelInfo, formField); } else { labelControl = CreateAndAddGroupBox(panelInfo, formField); controlMapper = CreateAndAddInputControlToContainerControl(formField, labelControl); } CreateAndAddErrorProviderPanel(panelInfo, formField); PanelInfo.FieldInfo fieldInfo = new PanelInfo.FieldInfo(formField.PropertyName, labelControl, controlMapper); panelInfo.FieldInfos.Add(fieldInfo); return(fieldInfo); }