/// <summary> /// figure out if the feature represented by the node is already in the database /// </summary> /// <param name="cache">database cache</param> public override void DetermineInDatabase(FdoCache cache) { CheckDisposed(); XmlNode item = m_node.SelectSingleNode("."); string sId = XmlUtils.GetOptionalAttributeValue(item, "id"); if (m_eKind == GlossListTreeView.ImageKind.closedFolder || m_eKind == GlossListTreeView.ImageKind.openFolder) { m_fInDatabase = false; } if (KindCanBeInDatabase()) { switch (m_eKind) { case GlossListTreeView.ImageKind.radio: // fall through case GlossListTreeView.ImageKind.radioSelected: // fall through case GlossListTreeView.ImageKind.checkBox: // fall through case GlossListTreeView.ImageKind.checkedBox: // these are all feature values m_fInDatabase = FsFeatureSystem.HasSymbolicValue(cache, sId); break; case GlossListTreeView.ImageKind.complex: m_fInDatabase = FsFeatureSystem.HasComplexFeature(cache, sId); break; case GlossListTreeView.ImageKind.userChoice: // closed feature string sStatus = XmlUtils.GetAttributeValue(m_node, "status"); if (sStatus == "proxy") { XmlNode xnType = this.m_node.SelectSingleNode("ancestor::item[@type='fsType']/@id"); if (xnType != null) { m_fInDatabase = FsFeatureSystem.FsFeatStrucTypeHasFeature(cache, xnType.InnerText, sId) && FsFeatureSystem.HasClosedFeature(cache, sId); } else { m_fInDatabase = FsFeatureSystem.HasClosedFeature(cache, sId); } } else { m_fInDatabase = FsFeatureSystem.HasClosedFeature(cache, sId); } break; } } }
protected virtual void HandleCheckBoxNodes(TreeView tv, TreeNode tn) { UndoLastSelectedNode(); if (m_fTerminalsUseCheckBoxes) { if (IsTerminalNode(tn)) { MasterInflectionFeature mif = tn.Tag as MasterInflectionFeature; if (tn.Checked) { if (mif == null || !mif.InDatabase) { tn.Checked = false; tn.ImageIndex = tn.SelectedImageIndex = (int)ImageKind.checkBox; } } else { tn.Checked = true; tn.ImageIndex = tn.SelectedImageIndex = (int)ImageKind.checkedBox; if (mif != null) { string sId = XmlUtils.GetOptionalAttributeValue(mif.Node, "id"); if (FsFeatureSystem.HasSymbolicValue(m_cache, sId)) { // we want to set all other sisters that are in the database TreeNode sibling = tn.Parent.FirstNode; while (sibling != null) { if (IsTerminalNode(sibling) && sibling != tn) { mif = sibling.Tag as MasterInflectionFeature; if (mif != null) { sId = XmlUtils.GetOptionalAttributeValue(mif.Node, "id"); if (FsFeatureSystem.HasSymbolicValue(m_cache, sId)) { sibling.Checked = true; sibling.ImageIndex = sibling.SelectedImageIndex = (int)ImageKind.checkedBox; } } } sibling = sibling.NextNode; } } } } tv.Invalidate(); } } else { if (IsTerminalNode(tn)) { tn.Checked = true; tn.ImageIndex = tn.SelectedImageIndex = (int)ImageKind.radioSelected; if (tn.Parent != null) { TreeNode sibling = tn.Parent.FirstNode; while (sibling != null) { if (IsTerminalNode(sibling) && sibling != tn) { sibling.Checked = false; sibling.ImageIndex = sibling.SelectedImageIndex = (int)ImageKind.radio; } sibling = sibling.NextNode; } } tv.Invalidate(); } m_lastSelectedTreeNode = tn; } }