コード例 #1
0
 private void AddSubPossibilitiesToOverlay(ICmOverlay over, ICmPossibility poss)
 {
     foreach (ICmPossibility sub in poss.SubPossibilitiesOS)
     {
         over.PossItemsRC.Add(sub);
         AddSubPossibilitiesToOverlay(over, sub);
     }
 }
コード例 #2
0
        /// <summary>
        /// Check whether the anthropology list exists.  If not, initialize it, popping
        /// up a dialog to ask the user how he wants it done.
        /// Returning true indicates an anthro list was actually loaded during first-time initialization.
        /// </summary>
        public bool CheckAnthroList(ILangProject proj, Form parent, int wsDefault, IHelpTopicProvider helpTopicProvider)
        {
            // Don't bother loading the list into a memory-only project.  These are used for
            // testing, and don't want to be slowed down by disk accesses.
            if (proj.Cache.ProjectId.Type == FDOBackendProviderType.kMemoryOnly)
            {
                return(false);
            }

            // 1. Determine whether or not the Anthropology List has been initialized.
            if (proj.AnthroListOA != null && proj.AnthroListOA.Name.StringCount > 0)
            {
                if (proj.AnthroListOA.ItemClsid == 0 || proj.AnthroListOA.Depth == 0)
                {
                    proj.Cache.DomainDataByFlid.BeginNonUndoableTask();
                    proj.AnthroListOA.ItemClsid = CmAnthroItemTags.kClassId;
                    proj.AnthroListOA.Depth     = 127;
                    proj.Cache.DomainDataByFlid.EndNonUndoableTask();
                }
                return(false);
                // The Anthropology List may still be empty, but it's initialized!
            }
            // 2. Figure out what lists are available (in {FW}/Templates/*.xml).

            string        sFilePattern   = Path.Combine(DirectoryFinder.TemplateDirectory, "*.xml");
            bool          fHaveOCM       = false;
            bool          fHaveFRAME     = false;
            List <string> rgsAnthroFiles = new List <string>();

            string[] rgsXmlFiles = Directory.GetFiles(DirectoryFinder.TemplateDirectory, "*.xml", SearchOption.TopDirectoryOnly);
            string   sFile;

            for (int i = 0; i < rgsXmlFiles.Length; ++i)
            {
                sFile = Path.GetFileName(rgsXmlFiles[i]);
                if (Path.GetFileName(sFile) == "OCM.xml")
                {
                    fHaveOCM = true;
                }
                else if (Path.GetFileName(sFile) == "OCM-Frame.xml")
                {
                    fHaveFRAME = true;
                }
                else if (sFile != "NewLangProj.xml" && IsAnthroList(rgsXmlFiles[i]))
                {
                    rgsAnthroFiles.Add(sFile);
                }
            }

            // 3. display a dialog for the user to select a list.

            sFile = null;
            if (fHaveOCM || fHaveFRAME || rgsAnthroFiles.Count > 0)
            {
                using (FwCheckAnthroListDlg dlg = new FwCheckAnthroListDlg())
                {
                    dlg.SetValues(fHaveOCM, fHaveFRAME, rgsAnthroFiles, helpTopicProvider);
                    if (!String.IsNullOrEmpty(m_sDescription))
                    {
                        dlg.SetDescription(m_sDescription);
                    }
                    //EnableRelatedWindows(hwnd, false);
                    DialogResult res = dlg.ShowDialog(parent);
                    //EnableRelatedWindows(hwnd, true);
                    if (res == DialogResult.OK)
                    {
                        int nChoice = dlg.GetChoice();
                        switch (nChoice)
                        {
                        case FwCheckAnthroListDlg.kralUserDef:
                            break;

                        case FwCheckAnthroListDlg.kralOCM:
                            sFile = Path.Combine(DirectoryFinder.TemplateDirectory, "OCM.xml");
                            break;

                        case FwCheckAnthroListDlg.kralFRAME:
                            sFile = Path.Combine(DirectoryFinder.TemplateDirectory, "OCM-Frame.xml");
                            break;

                        default:
                            Debug.Assert(nChoice >= 0 && nChoice < rgsAnthroFiles.Count);
                            sFile = Path.Combine(DirectoryFinder.TemplateDirectory, rgsAnthroFiles[nChoice]);
                            break;
                        }
                    }
                }
            }

            // 4. Load the selected list, or initialize properly for a User-defined (empty) list.

            using (new WaitCursor(parent))
            {
                if (String.IsNullOrEmpty(sFile))
                {
                    proj.Cache.DomainDataByFlid.BeginNonUndoableTask();
                    proj.AnthroListOA.Name.set_String(wsDefault, FwCoreDlgs.ksAnthropologyCategories);
                    proj.AnthroListOA.Abbreviation.set_String(wsDefault, FwCoreDlgs.ksAnth);
                    proj.AnthroListOA.ItemClsid = CmAnthroItemTags.kClassId;
                    proj.AnthroListOA.Depth     = 127;
                    proj.Cache.DomainDataByFlid.EndNonUndoableTask();
                }
                else
                {
                    XmlList xlist = new XmlList();
                    xlist.ImportList(proj, "AnthroList", sFile, null);
                }
            }

            // 5. create the corresponding overlays if the list is not empty.

            ICmOverlay over = null;

            foreach (ICmOverlay x in proj.OverlaysOC)
            {
                if (x.PossListRA == proj.AnthroListOA)
                {
                    over = x;
                    break;
                }
            }
            if (over != null)
            {
                proj.Cache.DomainDataByFlid.BeginNonUndoableTask();
                foreach (ICmPossibility poss in proj.AnthroListOA.PossibilitiesOS)
                {
                    over.PossItemsRC.Add(poss);
                    AddSubPossibilitiesToOverlay(over, poss);
                }
                proj.Cache.DomainDataByFlid.EndNonUndoableTask();
            }
            return(true);
        }