private void LoadUsage()
{
m_editcon = true;
this.dataGridViewConceptRules.Rows.Clear();
this.dataGridViewConceptRules.Columns.Clear();
if (this.m_conceptroot == null)
return;
LoadInheritance();
List<DocTemplateItem> listItems = null;
DocTemplateDefinition docTemplate = null;
if (this.m_conceptleaf != null)
{
docTemplate = this.m_conceptleaf.Definition;
listItems = this.m_conceptleaf.Items;
}
else
{
docTemplate = this.m_conceptroot.ApplicableTemplate;
listItems = this.m_conceptroot.ApplicableItems;
}
if (docTemplate != null)
{
this.m_columns = docTemplate.GetParameterRules();
foreach (DocModelRule rule in this.m_columns)
{
DataGridViewColumn column = new DataGridViewColumn();
column.Tag = rule;
column.HeaderText = rule.Identification;
column.ValueType = typeof(string);//?
column.CellTemplate = new DataGridViewTextBoxCell();
column.Width = 200;
if(rule.IsCondition())
{
column.HeaderText += "?";
}
// override cell template for special cases
DocConceptRoot docConceptRoot = (DocConceptRoot)this.m_conceptroot;
DocEntity docEntity = this.m_project.GetDefinition(docTemplate.Type) as DocEntity;// docConceptRoot.ApplicableEntity;
foreach (DocModelRuleAttribute docRule in docTemplate.Rules)
{
DocAttribute docAttribute = docEntity.ResolveParameterAttribute(docRule, rule.Identification, m_map);
if(docAttribute == null)
{
// try on type itself, e.g. PredefinedType
docAttribute = docConceptRoot.ApplicableEntity.ResolveParameterAttribute(docRule, rule.Identification, m_map);
}
if (docAttribute != null)
{
DocObject docDef = null;
if (this.m_map.TryGetValue(docAttribute.DefinedType, out docDef) && docDef is DocDefinition)
{
if (docDef is DocEnumeration)
{
DocEnumeration docEnum = (DocEnumeration)docDef;
DataGridViewComboBoxCell cell = new DataGridViewComboBoxCell();
cell.MaxDropDownItems = 32;
cell.DropDownWidth = 200;
// add blank item
cell.Items.Add(String.Empty);
foreach (DocConstant docConst in docEnum.Constants)
{
cell.Items.Add(docConst.Name);
}
column.CellTemplate = cell;
}
else if (docDef is DocEntity || docDef is DocSelect)
{
// button to launch dialog for picking entity
DataGridViewButtonCell cell = new DataGridViewButtonCell();
cell.Tag = docDef;
column.CellTemplate = cell;
}
}
else if (docAttribute.DefinedType != null && (docAttribute.DefinedType.Equals("LOGICAL") || docAttribute.DefinedType.Equals("BOOLEAN")))
{
DataGridViewComboBoxCell cell = new DataGridViewComboBoxCell();
cell.MaxDropDownItems = 4;
cell.DropDownWidth = 200;
// add blank item
cell.Items.Add(String.Empty);
cell.Items.Add(Boolean.FalseString);
cell.Items.Add(Boolean.TrueString);
column.CellTemplate = cell;
}
}
}
this.dataGridViewConceptRules.Columns.Add(column);
}
}
// add description column
DataGridViewColumn coldesc = new DataGridViewColumn();
coldesc.HeaderText = "Description";
coldesc.ValueType = typeof(string);//?
coldesc.CellTemplate = new DataGridViewTextBoxCell();
coldesc.Width = 400;
this.dataGridViewConceptRules.Columns.Add(coldesc);
foreach (DocTemplateItem item in listItems)
{
string[] values = new string[this.dataGridViewConceptRules.Columns.Count];
if (this.m_columns != null)
{
for (int i = 0; i < this.m_columns.Length; i++)
{
string parmname = this.m_columns[i].Identification;
string val = item.GetParameterValue(parmname);
if (val != null)
{
values[i] = val;
}
}
}
values[values.Length - 1] = item.Documentation;
int row = this.dataGridViewConceptRules.Rows.Add(values);
this.dataGridViewConceptRules.Rows[row].Tag = item;
if(item.Optional)
{
this.dataGridViewConceptRules.Rows[row].DefaultCellStyle.ForeColor = Color.Gray;
}
}
if (this.dataGridViewConceptRules.SelectedCells.Count > 0)
{
this.dataGridViewConceptRules.SelectedCells[0].Selected = false;
}
m_editcon = false;
}