예제 #1
0
        private void UpdateControlFields(GnosisContentController controller)
        {
            lblField.Content = controller.ControlImplementation.GnosisName;

            Binding bdCellSpan = new Binding();

            bdCellSpan.Mode   = BindingMode.TwoWay;
            bdCellSpan.Path   = new PropertyPath("TextLength");
            bdCellSpan.Source = controller;
            txtTextLength.SetBinding(TextBox.TextProperty, bdCellSpan);

            Binding bdOrder = new Binding();

            bdOrder.Mode   = BindingMode.TwoWay;
            bdOrder.Path   = new PropertyPath("Order");
            bdOrder.Source = controller;
            txtFieldOrder.SetBinding(TextBox.TextProperty, bdOrder);

            //Binding bdMinRows = new Binding();
            //bdMinRows.Mode = BindingMode.TwoWay;
            //bdMinRows.Path = new PropertyPath("MinRows");
            //bdMinRows.Source = controller;
            //txtMinRows.SetBinding(TextBox.TextProperty, bdMinRows);

            //Binding bdMaxRows = new Binding();
            //bdMaxRows.Mode = BindingMode.TwoWay;
            //bdMaxRows.Path = new PropertyPath("MaxRows");
            //bdMaxRows.Source = controller;
            //txtMaxRows.SetBinding(TextBox.TextProperty, bdMaxRows);

            //Binding bdMinColumns = new Binding();
            //bdMinColumns.Mode = BindingMode.TwoWay;
            //bdMinColumns.Path = new PropertyPath("MinColumns");
            //bdMinColumns.Source = controller;
            //txtMinColumns.SetBinding(TextBox.TextProperty, bdMinColumns);

            //Binding bdMaxColumns = new Binding();
            //bdMaxColumns.Mode = BindingMode.TwoWay;
            //bdMaxColumns.Path = new PropertyPath("MaxColumns");
            //bdMaxColumns.Source = controller;
            //txtMaxColumns.SetBinding(TextBox.TextProperty, bdMaxColumns);

            //Binding bdPlacementPriority = new Binding();
            //bdPlacementPriority.Mode = BindingMode.TwoWay;
            //bdPlacementPriority.Path = new PropertyPath("PlacementPriorityDown");
            //bdPlacementPriority.Source = controller;
            //chkPlacementPriorityDown.SetBinding(CheckBox.IsCheckedProperty, bdPlacementPriority);
        }
예제 #2
0
        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
        }