private bool SaveQatControlData( VM.QatItemCollection remainingItems, VM.ControlData controlData) { bool matched = false; for (int qatIndex = 0; qatIndex < remainingItems.Count; qatIndex++) { VM.QatItem qatItem = remainingItems[qatIndex]; if (qatItem.Instance == controlData) { if (qatItem.IsSplitHeader) { // This is the case of the Header of a SplitButton // or a SplitMenuItem added to the QAT. Note -1 is // the sentinel being used to indicate this case. qatItem.ControlIndices.Add(-1); } remainingItems.Remove(qatItem); qatIndex--; matched = true; } } VM.MenuButtonData menuButtonData = controlData as VM.MenuButtonData; if (menuButtonData != null) { for (int controlIndex = 0; controlIndex < menuButtonData.ControlDataCollection.Count && remainingItems.Count > 0; controlIndex++) { controlData = menuButtonData.ControlDataCollection[controlIndex]; for (int qatIndex = 0; qatIndex < remainingItems.Count; qatIndex++) { VM.QatItem qatItem = remainingItems[qatIndex]; qatItem.ControlIndices.Add(controlIndex); } matched = SaveQatControlData(remainingItems, controlData); if (!matched) { for (int qatIndex = 0; qatIndex < remainingItems.Count; qatIndex++) { VM.QatItem qatItem = remainingItems[qatIndex]; qatItem.ControlIndices.RemoveAt(qatItem.ControlIndices.Count - 1); } } } } return matched; }
private static Control MapQatDataToControl(VM.QatItem qatItem) { string typeName = qatItem.Instance.GetType().Name; Control control = null; switch (typeName) { case "ButtonData": { control = new RibbonButton(); control.DataContext = qatItem.Instance; break; } case "ToggleButtonData": { control = new RibbonToggleButton(); control.DataContext = qatItem.Instance; break; } case "RadioButtonData": { control = new RibbonRadioButton(); control.DataContext = qatItem.Instance; break; } case "CheckBoxData": { control = new RibbonCheckBox(); control.DataContext = qatItem.Instance; break; } case "TextBoxData": { control = new RibbonTextBox(); control.DataContext = qatItem.Instance; break; } case "MenuButtonData": { control = new RibbonMenuButton(); control.DataContext = qatItem.Instance; break; } case "SplitButtonData": { if (!qatItem.IsSplitHeader) { control = new RibbonSplitButton(); } else { VM.SplitButtonData splitButtonData = (VM.SplitButtonData)qatItem.Instance; if (splitButtonData.IsCheckable) { control = new RibbonToggleButton(); } else { control = new RibbonButton(); } } control.DataContext = qatItem.Instance; break; } case "ComboBoxData": { control = new RibbonComboBox(); control.DataContext = qatItem.Instance; break; } case "MenuItemData": { VM.MenuItemData menuItemData = (VM.MenuItemData)qatItem.Instance; if (menuItemData.ControlDataCollection.Count > 0) { control = new RibbonMenuButton(); } else { control = new RibbonButton(); } control.DataContext = qatItem.Instance; break; } case "SplitMenuItemData": { VM.SplitMenuItemData splitMenuItemData = (VM.SplitMenuItemData)qatItem.Instance; if (!qatItem.IsSplitHeader) { if (splitMenuItemData.ControlDataCollection.Count > 0) { control = new RibbonSplitButton(); } else if (splitMenuItemData.IsCheckable) { control = new RibbonToggleButton(); } else { control = new RibbonButton(); } } else { control = new RibbonToggleButton(); } control.DataContext = qatItem.Instance; break; } case "GalleryData": { RibbonGallery gallery = new RibbonGallery(); RibbonMenuButton menuButton = new RibbonMenuButton(); menuButton.ItemsSource = new object[] { gallery }; control = menuButton; control.DataContext = qatItem.Instance; break; } case "GroupData": { control = new RibbonGroup(); control.DataContext = qatItem.Instance; break; } } return control; }
private void LoadQatControlData( VM.QatItemCollection previouslyMatchedItems, int matchLevel, int controlIndex, VM.ControlData controlData, ref int remainingItemsCount) { VM.QatItemCollection matchedItems = new VM.QatItemCollection(); for (int qatIndex = 0; qatIndex < previouslyMatchedItems.Count; qatIndex++) { VM.QatItem qatItem = previouslyMatchedItems[qatIndex]; if (qatItem.ControlIndices[matchLevel] == controlIndex) { if (qatItem.ControlIndices.Count == matchLevel + 1) { qatItem.Instance = controlData; remainingItemsCount--; } else if (qatItem.ControlIndices.Count == matchLevel + 2 && qatItem.ControlIndices[matchLevel + 1] == -1) { qatItem.IsSplitHeader = true; qatItem.Instance = controlData; remainingItemsCount--; } else { matchedItems.Add(qatItem); } } } VM.MenuButtonData menuButtonData = controlData as VM.MenuButtonData; if (menuButtonData != null) { for (controlIndex = 0; controlIndex < menuButtonData.ControlDataCollection.Count && matchedItems.Count > 0 && remainingItemsCount > 0; controlIndex++) { controlData = menuButtonData.ControlDataCollection[controlIndex]; LoadQatControlData(matchedItems, matchLevel + 1, controlIndex, controlData, ref remainingItemsCount); } } }