/// <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;
                }
            }
        }
示例#2
0
 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;
     }
 }