public virtual IGnosisCaptionLabelImplementation GetColumnarHeaderClone() { GnosisCaptionLabel captionLabel = new GnosisCaptionLabel(); // GlobalData.Singleton.StyleHelper.CloneCaptionStyle(captionLabel, columnarHeader); GlobalData.Singleton.StyleHelper.ApplyCaptionStyle(captionLabel, instanceController.EntityController.GetCaptionStyle()); captionLabel.Caption = columnModel.Caption; return(captionLabel); }
protected override void Initialize() { base.Initialize(); if (ControlImplementation is IGnosisCaptionLabelPossessor) { string caption = ((IGnosisContentControlImplementation)ControlImplementation).Caption; GnosisCaptionLabel captionLabel = new GnosisCaptionLabel(); // IGnosisCaptionLabelImplementation captionLabelImp = GlobalData.Singleton.ImplementationCreator.GetGnosisCaptionLabelImplementation(); GlobalData.Singleton.StyleHelper.ApplyCaptionStyle(captionLabel, EntityController.GetCaptionStyle()); captionLabel.Caption = caption; ((IGnosisCaptionLabelPossessor)ControlImplementation).CaptionLabel = captionLabel; } }
private void LayoutChildren() { laidOut = false; ((IGnosisPanelImplementation)ControlImplementation).Clear(); ((IGnosisPanelImplementation)ControlImplementation).NumColumns = numCols; double totalWidthAvailable = ((IGnosisPanelImplementation)ControlImplementation).GetAvailableWidth(); if (totalWidthAvailable < 10) { totalWidthAvailable = initialWidth; } if (totalWidthAvailable == 0) { GlobalData.Singleton.ErrorHandler.HandleError("panel width 0", "GnosisPanelController.LayoutChildren"); return; } //initial row if (captionPosition == CaptionPosition.ABOVE || captionPosition == CaptionPosition.BELOW) { ((IGnosisPanelImplementation)ControlImplementation).AddRowAutoHeight(); //caption row ((IGnosisPanelImplementation)ControlImplementation).AddRowAutoHeight(); //field row } else { ((IGnosisPanelImplementation)ControlImplementation).AddRowAutoHeight(); //field and caption row } //layout children //a control is made up of a field and a caption. Some fields such as buttons do not have a separate caption //If the caption is above or below the field, a control row is comprised of 2 layout rows - an autosized caption row and a (fixed) size field row //In this case a field spanning more than one row must span the caption row and field row of subsequent control rows. int currentCol = 0; int currentRow = 0; lastRowUsed = 0; //2 dimensional array representing columns and control rows. A value of 1 means cell is filled. usedCells = new int[numCols, 50]; double colWidth = totalWidthAvailable / numCols; foreach (GnosisContentController child in childControllers.OrderBy(x => x.ControlImplementation.Order)) {//foreach1 int rowSpan = 1; child.ColSpan = 1; // GnosisCaptionLabel captionLabel = null; //if (child is IGnosisCaptionLabelPossessor) //{ // //create label // string caption = ((IGnosisContentControlImplementation)child.ControlImplementation).Caption; // captionLabel = new GnosisCaptionLabel(); // // IGnosisCaptionLabelImplementation captionLabelImp = GlobalData.Singleton.ImplementationCreator.GetGnosisCaptionLabelImplementation(); // GlobalData.Singleton.StyleHelper.ApplyCaptionStyle(captionLabel, EntityController.GetCaptionStyle()); // captionLabel.Caption = caption; // // ((IGnosisPanelImplementation)ControlImplementation).AddGnosisCaptionLabel(captionLabel, currentCol, captionRowNo, child.ColSpan, 1); //} double minFieldWidth = child.MinFieldWidth; double maxFieldWidth = child.MaxFieldWidth; double displayWidth = colWidth - (2 * ((IGnosisMarginPossessor)child.ControlImplementation).HorizontalMargin); if (child.ControlImplementation is IGnosisCaptionLabelPossessor) { if (captionPosition == CaptionPosition.LEFT || captionPosition == CaptionPosition.RIGHT) { GnosisCaptionLabel captionLabel = ((IGnosisCaptionLabelPossessor)child.ControlImplementation).CaptionLabel; double captionWidth = captionLabel.GetWidth() + (2 * captionLabel.HorizontalMargin) + captionLabel.CaptionSpacing; displayWidth = displayWidth - captionWidth; } } if (currentCol != 0 && ((GnosisPanel)ControlImplementation).HorizontalSpacing > 0) { displayWidth -= ((GnosisPanel)ControlImplementation).HorizontalSpacing; } //if (child.MaxDisplayChars == 0) //{ // // ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(displayWidth); // ((IGnosisPanelFieldImplementation)child.ControlImplementation).SetHorizontalAlignment(HorizontalAlignmentType.STRETCH); //} if (displayWidth > maxFieldWidth) {//if2 ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(maxFieldWidth); }//if2 else if (displayWidth > minFieldWidth) {//elseif2 ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(displayWidth); }//elseif2 else //(displayWidth < minFieldWidth) {//else2 while (displayWidth < minFieldWidth) { //while3 if (child.ColSpan < numCols) { //if4 //colspan can increase child.ColSpan++; displayWidth = displayWidth + colWidth - (2 * ((IGnosisMarginPossessor)child.ControlImplementation).HorizontalMargin); }//if4 else {//else4 //colspan can not increase //can increase the height of text fields if (child is GnosisTextFieldController) { int charsPerLine = (int)Math.Floor(displayWidth / child.CharacterWidth); int numChars = charsPerLine * ((GnosisTextFieldController)child).NumLines; if (numChars < child.MinDisplayChars) { int difference = child.MinDisplayChars - numChars; int numLinesNeeded = (int)Math.Ceiling((double)difference / charsPerLine); int totalLines = ((GnosisTextFieldController)child).NumLines + numLinesNeeded; ((GnosisTextFieldController)child).NumLines = totalLines; double newHeight = ((GnosisTextFieldController)child).TextHeight * totalLines + (((GnosisTextField)child.ControlImplementation).VerticalPadding * 2); ((IGnosisTextFieldImplementation)child.ControlImplementation).SetHeight(newHeight); } //double minArea = minFieldWidth * child.FieldHeight; //double oneLineArea = displayWidth * child.FieldHeight; //int numLines = (int)Math.Ceiling(minArea / oneLineArea); //((IGnosisTextFieldImplementation)child.ControlImplementation).SetHeight(child.FieldHeight * numLines); //if (numLines > 1) //{ // ((IGnosisTextFieldImplementation)child.ControlImplementation).SetTextWrapping(true); //} } break; } //else4 } //while3 if (displayWidth > maxFieldWidth) {//if3 ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(maxFieldWidth); }//if3 else {//elseif3 ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(displayWidth); }//elseif3 //((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(displayWidth); }//else2 if (currentCol + child.ColSpan > numCols) { currentRow++; currentCol = 0; int verticalSpacing = ((GnosisPanel)ControlImplementation).VerticalSpacing; if (captionPosition == CaptionPosition.ABOVE || captionPosition == CaptionPosition.BELOW) { if (verticalSpacing > 0) { ((IGnosisPanelImplementation)ControlImplementation).AddRowAutoHeight(); ((IGnosisPanelImplementation)ControlImplementation).AddRowFixedHeight(verticalSpacing); currentRow++; } ((IGnosisPanelImplementation)ControlImplementation).AddRowAutoHeight(); //caption row //((IGnosisPanelImplementation)ControlImplementation).AddRowFixedHeight(fieldRowHeight); //field row ((IGnosisPanelImplementation)ControlImplementation).AddRowAutoHeight(); //field row } else { if (verticalSpacing > 0) { ((IGnosisPanelImplementation)ControlImplementation).AddRowFixedHeight(verticalSpacing); currentRow++; } // ((IGnosisPanelImplementation)ControlImplementation).AddRowFixedHeight(fieldRowHeight); ((IGnosisPanelImplementation)ControlImplementation).AddRowAutoHeight(); //field row } } child.ColNo = currentCol; //determine layout row numbers and spans int fieldRowNo; int fieldRowSpan; int captionRowNo; if (captionPosition == CaptionPosition.ABOVE) { //account for caption row captionRowNo = currentRow * 2; fieldRowNo = captionRowNo + 1; fieldRowSpan = rowSpan * 2 - 1; //1 row for caption } else if (captionPosition == CaptionPosition.BELOW) { fieldRowNo = currentRow * 2; captionRowNo = fieldRowNo + 1; fieldRowSpan = rowSpan * 2 - 1; } else { captionRowNo = currentRow; fieldRowNo = currentRow; fieldRowSpan = rowSpan; } if (captionPosition == CaptionPosition.RIGHT) { if (currentCol != 0 && ((GnosisPanel)ControlImplementation).HorizontalSpacing > 0) { ((IGnosisPanelImplementation)ControlImplementation).AddHorizontalSpacing(currentCol, fieldRowNo, child.ColSpan, fieldRowSpan); } ((IGnosisPanelImplementation)ControlImplementation).AddGnosisContentControlImplementation((IGnosisContentControlImplementation)child.ControlImplementation, currentCol, fieldRowNo, child.ColSpan, fieldRowSpan); if (child.ControlImplementation is IGnosisCaptionLabelPossessor) { ((IGnosisPanelImplementation)ControlImplementation).AddGnosisCaptionLabel((GnosisCaptionLabel)((IGnosisCaptionLabelPossessor)child.ControlImplementation).CaptionLabel, currentCol, captionRowNo, child.ColSpan, 1); } } else if (captionPosition == CaptionPosition.LEFT) { if (currentCol != 0 && ((GnosisPanel)ControlImplementation).HorizontalSpacing > 0) { ((IGnosisPanelImplementation)ControlImplementation).AddHorizontalSpacing(currentCol, fieldRowNo, child.ColSpan, 1); } if (child.ControlImplementation is IGnosisCaptionLabelPossessor) { ((IGnosisPanelImplementation)ControlImplementation).AddGnosisCaptionLabel((GnosisCaptionLabel)((IGnosisCaptionLabelPossessor)child.ControlImplementation).CaptionLabel, currentCol, captionRowNo, child.ColSpan, 1); } ((IGnosisPanelImplementation)ControlImplementation).AddGnosisContentControlImplementation((IGnosisContentControlImplementation)child.ControlImplementation, currentCol, fieldRowNo, child.ColSpan, fieldRowSpan); } else { if (currentCol != 0 && ((GnosisPanel)ControlImplementation).HorizontalSpacing > 0) { ((IGnosisPanelImplementation)ControlImplementation).AddHorizontalSpacing(currentCol, captionRowNo, child.ColSpan, 1); } if (child.ControlImplementation is IGnosisCaptionLabelPossessor) { ((IGnosisPanelImplementation)ControlImplementation).AddGnosisCaptionLabel((GnosisCaptionLabel)((IGnosisCaptionLabelPossessor)child.ControlImplementation).CaptionLabel, currentCol, captionRowNo, child.ColSpan, 1); } if (currentCol != 0 && ((GnosisPanel)ControlImplementation).HorizontalSpacing > 0) { ((IGnosisPanelImplementation)ControlImplementation).AddHorizontalSpacing(currentCol, fieldRowNo, child.ColSpan, fieldRowSpan); } ((IGnosisPanelImplementation)ControlImplementation).AddGnosisContentControlImplementation((IGnosisContentControlImplementation)child.ControlImplementation, currentCol, fieldRowNo, child.ColSpan, fieldRowSpan); } currentCol = currentCol + child.ColSpan; }//foreach laidOut = true; }
private bool ResizeChild(GnosisContentController child, double colWidth, bool widthIncreased) { double minFieldWidth = child.MinFieldWidth; double maxFieldWidth = child.MaxFieldWidth; double displayWidth = (colWidth * child.ColSpan) - (2 * ((IGnosisMarginPossessor)child.ControlImplementation).HorizontalMargin); if (child.ControlImplementation is IGnosisCaptionLabelPossessor) { if (captionPosition == CaptionPosition.LEFT || captionPosition == CaptionPosition.RIGHT) { GnosisCaptionLabel captionLabel = ((IGnosisCaptionLabelPossessor)child.ControlImplementation).CaptionLabel; double captionWidth = captionLabel.GetWidth() + (2 * captionLabel.HorizontalMargin) + captionLabel.CaptionSpacing; displayWidth = displayWidth - captionWidth; } } if (child.ColNo != 0 && ((GnosisPanel)ControlImplementation).HorizontalSpacing > 0) { displayWidth -= ((GnosisPanel)ControlImplementation).HorizontalSpacing; } //if (child.MaxDisplayChars == 0) //{ // //((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(displayWidth); //} if (displayWidth > maxFieldWidth) { if (displayWidth - maxFieldWidth > colWidth) { //need to decrease col span return(true); } ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(maxFieldWidth); if (child is GnosisTextFieldController) { ((IGnosisTextFieldImplementation)child.ControlImplementation).SetTextWrapping(false); } } else if (displayWidth > minFieldWidth) { if (displayWidth - minFieldWidth > colWidth) { //need to decrease col span return(true); } ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(displayWidth); //set text fields to single line if (child is GnosisTextFieldController) { ((IGnosisTextFieldImplementation)child.ControlImplementation).SetTextWrapping(false); ((IGnosisTextFieldImplementation)child.ControlImplementation).SetHeight(child.FieldHeight); ((GnosisTextFieldController)child).NumLines = 1; //int row = ((IGnosisTextFieldImplementation)child.ControlImplementation).GetRowNumber(); //((IGnosisPanelImplementation)ControlImplementation).SetRowFixedHeight(row, fieldRowHeight); } } else if (displayWidth < minFieldWidth) { if (child.ColSpan < numCols) { //colspan must increase, which requires a layout change return(true); } else { ((IGnosisContentControlImplementation)child.ControlImplementation).SetWidth(displayWidth); if (child is GnosisTextFieldController) { int charsPerLine = (int)Math.Floor(displayWidth / child.CharacterWidth); int numChars = charsPerLine * ((GnosisTextFieldController)child).NumLines; if (numChars < child.MinDisplayChars) { int difference = child.MinDisplayChars - numChars; int numLinesNeeded = (int)Math.Ceiling((double)difference / charsPerLine); int totalLines = ((GnosisTextFieldController)child).NumLines + numLinesNeeded; ((GnosisTextFieldController)child).NumLines = totalLines; double newHeight = ((GnosisTextFieldController)child).TextHeight * totalLines + (((GnosisTextField)child.ControlImplementation).VerticalPadding * 2); ((IGnosisTextFieldImplementation)child.ControlImplementation).SetHeight(newHeight); if (totalLines > 1) { ((IGnosisTextFieldImplementation)child.ControlImplementation).SetTextWrapping(true); } else { ((IGnosisTextFieldImplementation)child.ControlImplementation).SetTextWrapping(false); } } // double minArea = minFieldWidth * child.FieldHeight; //double oneLineArea = displayWidth * child.FieldHeight; //int numLines = (int)Math.Ceiling(minArea / oneLineArea); //((IGnosisTextFieldImplementation)child.ControlImplementation).SetHeight(numLines * child.FieldHeight); ////int row = ((IGnosisTextFieldImplementation)child.ControlImplementation).GetRowNumber(); ////((IGnosisPanelImplementation)ControlImplementation).SetRowFixedHeight(row, numLines * child.FieldHeight); //if (numLines > 1) //{ // ((IGnosisTextFieldImplementation)child.ControlImplementation).SetTextWrapping(true); //} //else //{ // ((IGnosisTextFieldImplementation)child.ControlImplementation).SetTextWrapping(false); //} } } } return(false); //layout has not changed }