Esempio n. 1
0
        }                                        // display rectangle of the control, used for invalidation

        public BasicCoordinator(PlacementDrivenLogicalControl logicalControl, LogicalControlsContainer logicalControlsContainer)
        {
            _lg = logicalControl;
            _logicalControlsContainer = logicalControlsContainer;
            _containerControl         = logicalControlsContainer.mainControl;
            _logicalControlsContainer.Add(logicalControl);
            _lg.VisibleChanged += lg_VisibleChanged;
        }
Esempio n. 2
0
        /// <summary>
        /// copied from  GUI::gui_upd_win_scroll_bars_hebrew in online QCR #978524
        /// when controls receive negative location (possible during hebrew placement)
        /// we must move all the control so they will have positive locations,
        /// like it is done in online
        /// </summary>
        /// <param name="containerControl"></param>
        void gui_upd_win_scroll_bars_hebrew(Control containerControl)
        {
            ArrayList controlsList = GetControlsList(containerControl);
            int       leftDX       = 0;

            foreach (var item in controlsList)
            {
                if (!ShouldApplyPlacement(item))
                {
                    continue;
                }
                //check visible!!!
                Rectangle rect = Bounds(item);
                leftDX = Math.Min(rect.X, leftDX);
            }
            if (leftDX < 0)
            {
                LogicalControlsContainer logicalControlsContainer = GetLogicalControlsContainer(containerControl);
                logicalControlsContainer.NegativeOffset = leftDX;
                foreach (var item in controlsList)
                {
                    if (!ShouldApplyPlacement(item))
                    {
                        continue;
                    }
                    Control control = item as Control;
                    if (control != null)
                    {
#if PocketPC
                        // skip dummy control
                        if (containerControl is Panel && item == ((Panel)containerControl).dummy)
                        {
                            continue;
                        }
#endif
                        Rectangle rect      = Bounds(control);
                        Rectangle?savedRect = GetSavedBounds(control);
                        if (savedRect != null)
                        {
                            rect.Width  = ((Rectangle)savedRect).Width;
                            rect.Height = ((Rectangle)savedRect).Height;
                        }
                        rect.X -= leftDX;
                        SetBounds(control, rect);
                    }
                    else //logical control
                    {
                        ReCalculateAndRefresh(item);
                    }
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// return list of chlid controls including static controls
        /// </summary>
        /// <param name="container"></param>
        /// <returns></returns>
        private ArrayList GetControlsList(Control containerControl)
        {
            ArrayList array = new ArrayList(); // Can't use List<T> - may hold controls and logical controls

            array.AddRange(containerControl.Controls);
            LogicalControlsContainer logicalControlsContainer = GetLogicalControlsContainer(containerControl);

            if (logicalControlsContainer != null && logicalControlsContainer.LogicalControls != null)
            {
                array.AddRange(logicalControlsContainer.LogicalControls);
            }
            return(array);
        }
Esempio n. 4
0
        protected virtual void ReCalculateAndRefresh()
        {
            LogicalControlsContainer logicalControlsContainer = GetLogicalControlsContainer(_mainComposite);

            if (logicalControlsContainer != null && !logicalControlsContainer.SizeChange.IsEmpty)
            {
                logicalControlsContainer.SizeChange = new Point();
                foreach (var item in logicalControlsContainer.LogicalControls)
                {
                    ReCalculateAndRefresh(item);
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Compute logical size
        /// </summary>
        /// <param name="container"></param>
        /// <returns></returns>
        public Point computeSize(Control container)
        {
            int width = 0, height = 0;

            //all this is not relevant for table control , to improve performance return size
            if (container is TableControl)
            {
                return(new Point(container.Size.Width, container.Size.Height));
            }

            GetMaxOfActualControlDimensions(container, ref width, ref height);

            Size size = new Size();
            LogicalControlsContainer logicalControlsContainer = GetLogicalControlsContainer(container);

            if (logicalControlsContainer != null)
            {
                size = logicalControlsContainer.computeSize();
            }

            return(new Point(Math.Max(width, size.Width), Math.Max(height, size.Height)));
        }
Esempio n. 6
0
        /// <summary> implement placement</summary>
        public void layout(Control containerControl, LayoutEventArgs ea)
        {
            if (!CanPerformLayout(containerControl))
            {
                return;
            }

            containerControl.SuspendLayout();

            Rectangle rectangleToSave, newRect = rectangleToSave = GetBounds(_mainComposite);

            FixRuntimeDesignerPlacement(ref newRect);

            Point     actualPlacement = new Point(0, 0);
            int       deltaX = 0, deltaY = 0;
            ArrayList controlsList;

            bool compositeMoved = newRect.Width - _prevRect.Width != 0 || newRect.Height - _prevRect.Height != 0;

            if (compositeMoved)
            {
                deltaX = newRect.Width - _prevRect.Width;
                deltaY = newRect.Height - _prevRect.Height;

                // we have horizontal scrollbar and it will remain after placement
                if ((_prevRect.Width < _prevLogicalSize.X && newRect.Width < _prevLogicalSize.X) || _prevLogicalSize.X < 0)
                {
                    if (containerControl is ScrollableControl && ((ScrollableControl)containerControl).AutoScroll)
                    {
                        deltaX = 0;
                    }
                }

                if ((_prevRect.Height < _prevLogicalSize.Y && newRect.Height < _prevLogicalSize.Y) || _prevLogicalSize.Y < 0)
                {
                    // we have vertical scrollbar and it will remain after placement
                    deltaY = 0;
                }

                if (deltaX != 0 || deltaY != 0)
                {
                    actualPlacement = limitPlacement(containerControl, deltaX, deltaY, newRect);
                }
                Debug.Assert(!(IsTabControl(containerControl)));

                if (!(containerControl is TableControl))
                {
                    controlsList = GetControlsList(containerControl);

                    // execute placement
                    LogicalControlsContainer logicalControlsContainer = GetLogicalControlsContainer(containerControl);
                    if (logicalControlsContainer != null)
                    {
                        logicalControlsContainer.addChange(actualPlacement);
                    }
                    foreach (Object obj in controlsList)
                    {
#if PocketPC
                        // No placement for dummy control
                        if (containerControl is Panel && obj == ((Panel)containerControl).dummy)
                        {
                            continue;
                        }
#endif
                        ControlPlacement(obj, actualPlacement);
                    }

                    if (logicalControlsContainer.LogicalControls != null)
                    {
                        containerControl.Invalidate();
                    }
                }
            }

            _prevRect = rectangleToSave;
            if (isRTL(containerControl))
            {
                gui_upd_win_scroll_bars_hebrew(containerControl);
            }
            computeAndUpdateLogicalSize(containerControl);
            containerControl.ResumeLayout();
        }