예제 #1
0
        protected void UpdateVerticalControlPositions()
        {
            int controlWidth     = this.ClientRectangle.Width;
            int columnWidth      = (controlWidth) / this.m_NumColumns;
            int firstColumnExtra = (controlWidth) - (this.m_NumColumns * columnWidth);
            int xPos             = 0;
            int yPos             = this.DisplayRectangle.Top;
            int maxRowHeight     = 0;

            for (int i = this.Controls.Count - 1; i >= 0; i--)
            {
                FilmStripSlideViewer viewer = (FilmStripSlideViewer)this.Controls[i];
                int width = columnWidth;

                // Update the position and size of the control
                if (viewer.Floating != FilmStripSlideViewer.FloatingDimension.Height)
                {
                    viewer.Floating = FilmStripSlideViewer.FloatingDimension.Height;
                }
                if (viewer.Width != width)
                {
                    viewer.Width = width;
                }
                if (viewer.Top != yPos)
                {
                    viewer.Top = yPos;
                }
                if (viewer.Left != xPos)
                {
                    viewer.Left = xPos;
                }

                // Get the highest control in this row
                if (viewer.Height > maxRowHeight)
                {
                    maxRowHeight = viewer.Height;
                }

                // Update the cursor position
                xPos += width;
                if (xPos >= (controlWidth - firstColumnExtra))
                {
                    xPos         = 0;
                    yPos        += maxRowHeight;
                    maxRowHeight = 0;
                }
            }
        }
예제 #2
0
        protected void UpdateHorizontalControlPositions()
        {
            int controlHeight    = this.ClientRectangle.Height;
            int columnHeight     = (controlHeight) / this.m_NumColumns;
            int firstColumnExtra = (controlHeight) - (this.m_NumColumns * columnHeight);
            int xPos             = 0;
            int yPos             = 0;
            int maxColWidth      = 0;

            for (int i = this.Controls.Count - 1; i >= 0; i--)
            {
                FilmStripSlideViewer viewer = (FilmStripSlideViewer)this.Controls[i];
                int height = columnHeight;

                // Update the position and size of the control
                if (viewer.Floating != FilmStripSlideViewer.FloatingDimension.Width)
                {
                    viewer.Floating = FilmStripSlideViewer.FloatingDimension.Width;
                }
                if (viewer.Height != height)
                {
                    viewer.Height = height;
                }
                if (viewer.Top != yPos)
                {
                    viewer.Top = yPos;
                }
                if (viewer.Left != xPos)
                {
                    viewer.Left = xPos;
                }

                // Get the highest control in this row
                if (viewer.Width > maxColWidth)
                {
                    maxColWidth = viewer.Width;
                }

                // Update the cursor position
                yPos += height;
                if (yPos >= (controlHeight - firstColumnExtra))
                {
                    yPos        = 0;
                    xPos       += maxColWidth;
                    maxColWidth = 0;
                }
            }
        }
            protected override object SetUpMember(int index, object member)
            {
                TableOfContentsModel.Entry entry = ((TableOfContentsModel.Entry)member);
                FilmStripSlideViewer viewer;

                using (Synchronizer.Lock(entry.SyncRoot)) {
                    // Only deal with entries that are direct children of the TableOfContentsModel.
                    // Deeper entries are dealt with by the FilmStripSlideViewers.
                    if (entry.Parent != null)
                        return null;
                }

                Debug.Assert(this.m_Owner.IsHandleCreated);
                Debug.Assert(!this.m_Owner.InvokeRequired);

                this.m_Owner.SuspendLayout();
                viewer = new FilmStripSlideViewer(
                    this.m_Owner, this.m_Owner.m_Model, this.m_Owner.m_DeckTraversal,
                    this.m_Owner.m_PreviewDeckTraversal, entry);

                viewer.MyMouseDown += new MouseEventHandler(this.m_Owner.HandleMouseDown);
                viewer.MouseUp += new MouseEventHandler(this.m_Owner.HandleMouseUp);
                viewer.MouseEnter += new EventHandler(this.m_Owner.HandleSlideEnter);
                viewer.MouseLeave += new EventHandler(this.m_Owner.HandleSlideLeave);
                viewer.MouseMove += new MouseEventHandler(this.m_Owner.HandleSlideMove);
                try {

                    // Set the entry's Z-order.  The control at index 0 will be docked farthest
                    // away from the edge, so the "last" entry should be at index 0.
                    // Unfortunately we don't have a guarantee that all of the TableOfContentsModel's
                    // entries have yet been added to the FilmStrip (though that should be the case),
                    // so we just go through (starting with z-order 0, the last thing in the filmstrip)
                    // until we find the first entry whose index is less than ours.

                #if DEBUG
                    Debug.Assert(index >= 0);
                    using (Synchronizer.Lock(entry.TableOfContents.SyncRoot)) {
                        Debug.Assert(entry.TableOfContents.Entries.Count > index);
                    }
                #endif

                    int zOrder = 0;
                    using (Synchronizer.Lock(entry.SyncRoot)) {
                        int i;
                        for (i = 0; i < this.m_Owner.Controls.Count; i++) {
                            TableOfContentsModel.Entry en = ((FilmStripSlideViewer)(this.m_Owner.Controls[i])).m_Entry;
                            if (entry.TableOfContents.Entries.IndexOf(en) < entry.TableOfContents.Entries.IndexOf(entry)) {
                                zOrder = Math.Max(0, i);
                                i = this.m_Owner.Controls.Count + 1;
                            }
                        }
                        if (i == this.m_Owner.Controls.Count) {
                            zOrder = i;
                        }
                    }
                    this.m_Owner.Controls.Add(viewer);
                    this.m_Owner.Controls.SetChildIndex(viewer, zOrder);
                }
                catch {
                    viewer.MyMouseDown -= new MouseEventHandler(this.m_Owner.HandleMouseDown);
                    viewer.MouseUp -= new MouseEventHandler(this.m_Owner.HandleMouseUp);
                    viewer.MouseEnter -= new EventHandler(this.m_Owner.HandleSlideEnter);
                    viewer.MouseLeave -= new EventHandler(this.m_Owner.HandleSlideLeave);
                    viewer.MouseMove -= new MouseEventHandler(this.m_Owner.HandleSlideMove);

                    this.m_Owner.Controls.Remove(viewer);
                    viewer.Dispose();
                    throw;
                }

                this.m_Owner.ResumeLayout();

                RoleSynchronizer rs = new RoleSynchronizer(viewer, this.m_Owner.m_Model.Participant);
                return rs;
            }
예제 #4
0
            protected override object SetUpMember(int index, object member)
            {
                TableOfContentsModel.Entry entry = ((TableOfContentsModel.Entry)member);
                FilmStripSlideViewer       viewer;

                using (Synchronizer.Lock(entry.SyncRoot)) {
                    // Only deal with entries that are direct children of the TableOfContentsModel.
                    // Deeper entries are dealt with by the FilmStripSlideViewers.
                    if (entry.Parent != null)
                    {
                        return(null);
                    }
                }

                Debug.Assert(this.m_Owner.IsHandleCreated);
                Debug.Assert(!this.m_Owner.InvokeRequired);

                this.m_Owner.SuspendLayout();
                viewer = new FilmStripSlideViewer(
                    this.m_Owner, this.m_Owner.m_Model, this.m_Owner.m_DeckTraversal,
                    this.m_Owner.m_PreviewDeckTraversal, entry);

                viewer.MyMouseDown += new MouseEventHandler(this.m_Owner.HandleMouseDown);
                viewer.MouseUp     += new MouseEventHandler(this.m_Owner.HandleMouseUp);
                viewer.MouseEnter  += new EventHandler(this.m_Owner.HandleSlideEnter);
                viewer.MouseLeave  += new EventHandler(this.m_Owner.HandleSlideLeave);
                viewer.MouseMove   += new MouseEventHandler(this.m_Owner.HandleSlideMove);
                try {
                    // Set the entry's Z-order.  The control at index 0 will be docked farthest
                    // away from the edge, so the "last" entry should be at index 0.
                    // Unfortunately we don't have a guarantee that all of the TableOfContentsModel's
                    // entries have yet been added to the FilmStrip (though that should be the case),
                    // so we just go through (starting with z-order 0, the last thing in the filmstrip)
                    // until we find the first entry whose index is less than ours.

#if DEBUG
                    Debug.Assert(index >= 0);
                    using (Synchronizer.Lock(entry.TableOfContents.SyncRoot)) {
                        Debug.Assert(entry.TableOfContents.Entries.Count > index);
                    }
#endif

                    int zOrder = 0;
                    using (Synchronizer.Lock(entry.SyncRoot)) {
                        int i;
                        for (i = 0; i < this.m_Owner.Controls.Count; i++)
                        {
                            TableOfContentsModel.Entry en = ((FilmStripSlideViewer)(this.m_Owner.Controls[i])).m_Entry;
                            if (entry.TableOfContents.Entries.IndexOf(en) < entry.TableOfContents.Entries.IndexOf(entry))
                            {
                                zOrder = Math.Max(0, i);
                                i      = this.m_Owner.Controls.Count + 1;
                            }
                        }
                        if (i == this.m_Owner.Controls.Count)
                        {
                            zOrder = i;
                        }
                    }
                    this.m_Owner.Controls.Add(viewer);
                    this.m_Owner.Controls.SetChildIndex(viewer, zOrder);
                }
                catch {
                    viewer.MyMouseDown -= new MouseEventHandler(this.m_Owner.HandleMouseDown);
                    viewer.MouseUp     -= new MouseEventHandler(this.m_Owner.HandleMouseUp);
                    viewer.MouseEnter  -= new EventHandler(this.m_Owner.HandleSlideEnter);
                    viewer.MouseLeave  -= new EventHandler(this.m_Owner.HandleSlideLeave);
                    viewer.MouseMove   -= new MouseEventHandler(this.m_Owner.HandleSlideMove);

                    this.m_Owner.Controls.Remove(viewer);
                    viewer.Dispose();
                    throw;
                }

                this.m_Owner.ResumeLayout();

                RoleSynchronizer rs = new RoleSynchronizer(viewer, this.m_Owner.m_Model.Participant);
                return(rs);
            }