/// <summary> /// Initialize a new instance of the ViewLayoutRibbonGroupLines class. /// </summary> /// <param name="ribbon">Owning ribbon control instance.</param> /// <param name="ribbonLines">Reference to lines definition.</param> /// <param name="needPaint">Delegate for notifying paint requests.</param> public ViewLayoutRibbonGroupLines(KryptonRibbon ribbon, KryptonRibbonGroupLines ribbonLines, NeedPaintHandler needPaint) { Debug.Assert(ribbon != null); Debug.Assert(ribbonLines != null); Debug.Assert(needPaint != null); // Cache references _ribbon = ribbon; _ribbonLines = ribbonLines; _needPaint = needPaint; // Associate the component with this view element for design time selection Component = _ribbonLines; // Use hashtable to store relationships _itemToView = new ItemToView(); _viewToItem = new ViewToItem(); _sizeLargeList = new SizeList(); _sizeMediumList = new SizeList(); _sizeSmallList = new SizeList(); _viewLargeList = new ViewList(); _viewMediumList = new ViewList(); _viewSmallList = new ViewList(); _viewToLargeGap = new ViewToGap(); _viewToMediumGap = new ViewToGap(); _viewToSmallGap = new ViewToGap(); // Get the initial size used for sizing and positioning ApplySize(ribbonLines.ItemSizeCurrent); // Hook into changes in the ribbon triple definition _ribbonLines.PropertyChanged += new PropertyChangedEventHandler(OnLinesPropertyChanged); _ribbonLines.LinesView = this; // At design time we want to track the mouse and show feedback if (_ribbon.InDesignMode) { ViewHightlightController controller = new ViewHightlightController(this, needPaint); controller.ContextClick += new MouseEventHandler(OnContextClick); MouseController = controller; } }
private void SyncChildrenToRibbonGroupItems() { // Remove all child elements Clear(); ItemToView regenItemToView = new ItemToView(); ViewToItem regenViewToItem = new ViewToItem(); // Add a view element for each group item foreach (IRibbonGroupItem item in _ribbonLines.Items) { ViewBase itemView; // Do we already have a view for this item definition if (_itemToView.ContainsKey(item)) { itemView = _itemToView[item]; // Remove from lookup to prevent it being deleted _itemToView.Remove(item); } else { // Ask the item definition to return an appropriate view itemView = item.CreateView(_ribbon, _needPaint); } // Update the visible state of the item itemView.Visible = _ribbon.InDesignHelperMode || item.Visible; // We need to keep this association regenItemToView.Add(item, itemView); regenViewToItem.Add(itemView, item); Add(itemView); } // When in design time help mode if (_ribbon.InDesignHelperMode) { // Create the design time 'Add Tab' first time it is needed if (_viewAddItem == null) { _viewAddItem = new ViewDrawRibbonDesignGroupLines(_ribbon, _ribbonLines, _currentSize, _needPaint); } // Always add at end of the list of items Add(_viewAddItem); } // Dispose of all the items no longer needed foreach (ViewBase view in _itemToView.Values) { view.Dispose(); } // Use the latest hashtable _itemToView = regenItemToView; _viewToItem = regenViewToItem; }