public void LoadExample(ExampleAndDesc exAndDesc, DemoBase exBase) { _exampleBase = exBase; this.Text = exAndDesc.ToString(); //------------------------------------------- //description: if (!string.IsNullOrEmpty(exAndDesc.Description)) { TextBox tt = new TextBox(); tt.Width = this.flowLayoutPanel1.Width - 5; tt.Text = exAndDesc.Description; tt.Multiline = true; tt.ScrollBars = ScrollBars.Vertical; tt.Height = 250; tt.BackColor = Color.Gainsboro; tt.Font = new Font("tahoma", 10); this.flowLayoutPanel1.Controls.Add(tt); } //------------------------------------------- _allConfigs.Clear(); _mainConfigs = new ExampleConfigs(); _mainConfigs._configList = exAndDesc.GetConfigList(); _mainConfigs._exampleActionList = exAndDesc.GetActionList(); _allConfigs.Add(_mainConfigs); CreateConfigPresentation(_exampleBase, _mainConfigs, this.flowLayoutPanel1); ////-------------------- var _groupConfigs = exAndDesc.GetGroupConfigList(); if (_groupConfigs != null) { int j = _groupConfigs.Count; for (int i = 0; i < j; ++i) { ExampleGroupConfigDesc groupConfig = _groupConfigs[i]; object groupOwner = groupConfig.OwnerProperty.GetGetMethod().Invoke(_exampleBase, null); var subConfig = new ExampleConfigs(); subConfig._configList = groupConfig._configList; subConfig._exampleActionList = groupConfig._configActionList; _allConfigs.Add(subConfig); // Panel subPanel = new Panel(); subPanel.Width = flowLayoutPanel1.Width; subPanel.Height = 300;//example flowLayoutPanel1.Controls.Add(subPanel); CreateConfigPresentation(groupOwner, subConfig, subPanel); } } }
bool CreateExampleConfigGroup(DemoConfigAttribute configAttr, System.Reflection.PropertyInfo prop) { Type configGroup = prop.PropertyType; var configGroupAttrs = configGroup.GetCustomAttributes(typeof(DemoConfigGroupAttribute), false); if (configGroupAttrs.Length > 0) { //reflection this type ExampleGroupConfigDesc groupConfigDesc = new ExampleGroupConfigDesc((DemoConfigGroupAttribute)configGroupAttrs[0], configGroup); groupConfigDesc.OwnerProperty = prop; List <ExampleConfigDesc> configList = groupConfigDesc._configList; List <ExampleAction> exActionList = groupConfigDesc._configActionList; // foreach (var property in configGroup.GetProperties()) { //1. var foundAttrs = property.GetCustomAttributes(s_demoConfigAttrType, true); if (foundAttrs.Length > 0) { //in this version: no further subgroup configList.Add(new ExampleConfigDesc((DemoConfigAttribute)foundAttrs[0], property)); } } foreach (var met in configGroup.GetMethods()) { //only public and instance method if (met.IsStatic) { continue; } if (met.DeclaringType == configGroup) { if (met.GetParameters().Length == 0) { var foundAttrs = met.GetCustomAttributes(s_demoAction, false); if (foundAttrs.Length > 0) { //this is configurable attrs exActionList.Add(new ExampleAction((DemoActionAttribute)foundAttrs[0], met)); } } } } //------------ _groupConfigs.Add(groupConfigDesc); return(true); } return(false); }