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; } } }
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; }
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); }