Example #1
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Test setup
 /// </summary>
 /// ------------------------------------------------------------------------------------
 public override void TestSetup()
 {
     base.TestSetup();
     SetClipboardAdapter();
     ClipboardUtils.SetDataObject(new DataObject());
     ClipboardUtils.SetText("I want a monkey");
 }
Example #2
0
 /// <summary>
 ///
 /// </summary>
 /// <returns></returns>
 public bool OnCopyLocationAsHyperlink(object unused)
 {
     CheckDisposed();
     if (m_currentContext != null)
     {
         FdoCache cache = (FdoCache)m_mediator.PropertyTable.GetValue("cache");
         var      args  = new FwAppArgs(FwUtils.ksFlexAbbrev, cache.ProjectId.Handle,
                                        cache.ProjectId.ServerName, m_currentContext.ToolName, m_currentContext.TargetGuid);
         ClipboardUtils.SetDataObject(args.ToString(), true);
     }
     return(true);
 }
Example #3
0
 /// <summary>
 ///
 /// </summary>
 /// <returns></returns>
 public bool OnCopyLocationAsHyperlink(object unused)
 {
     CheckDisposed();
     if (m_currentContext != null)
     {
         LcmCache cache = m_propertyTable.GetValue <LcmCache>("cache");
         var      args  = new FwAppArgs(cache.ProjectId.Handle,
                                        m_currentContext.ToolName, m_currentContext.TargetGuid);
         ClipboardUtils.SetDataObject(args.ToString(), true);
     }
     return(true);
 }
Example #4
0
        /// <summary>
        /// Import from a LIFT file.
        /// </summary>
        /// <param name="progressDlg">The progress dialog.</param>
        /// <param name="parameters">The parameters: 1) filename</param>
        /// <returns></returns>
        private object ImportLIFT(IThreadedProgress progressDlg, params object[] parameters)
        {
            m_progressDlg = progressDlg;
            Debug.Assert(parameters.Length == 1);
            string sOrigFile = (string)parameters[0];

            try
            {
                // Create a temporary directory %temp%\TempForLIFTImport. Migrate as necessary and import from this
                // directory. Directory is left after import is done in case it is needed, but will be deleted next time
                // if it exists.
                var sLIFTfolder     = Path.GetDirectoryName(sOrigFile);
                var sLIFTtempFolder = Path.Combine(Path.GetTempPath(), "TempForLIFTImport");
                if (Directory.Exists(sLIFTtempFolder) == true)
                {
                    Directory.Delete(sLIFTtempFolder, true);
                }
                LdmlFileBackup.CopyDirectory(sLIFTfolder, sLIFTtempFolder);
                // Older LIFT files had ldml files in root directory. If found, move them to WritingSystem folder.
                if (Directory.GetFiles(sLIFTtempFolder, "*.ldml").Length > 0)
                {
                    var sWritingSystems = Path.Combine(sLIFTtempFolder, "WritingSystems");
                    if (Directory.Exists(sWritingSystems) == false)
                    {
                        Directory.CreateDirectory(sWritingSystems);
                    }
                    foreach (string filePath in Directory.GetFiles(sLIFTtempFolder, "*.ldml"))
                    {
                        string file = Path.GetFileName(filePath);
                        if (!File.Exists(Path.Combine(sWritingSystems, file)))
                        {
                            File.Move(filePath, Path.Combine(sWritingSystems, file));
                        }
                    }
                }
                var    sTempOrigFile = Path.Combine(sLIFTtempFolder, sOrigFile.Substring(sLIFTfolder.Length + 1));
                string sFilename;
                //Do a LIFT Migration to the current version of LIFT if it is needed.
                bool fMigrationNeeded = Migrator.IsMigrationNeeded(sTempOrigFile);
                if (fMigrationNeeded)
                {
                    string sOldVersion = Validator.GetLiftVersion(sTempOrigFile);
                    m_progressDlg.Message = String.Format(LexTextControls.ksMigratingLiftFile,
                                                          sOldVersion, Validator.LiftVersion);
                    sFilename = Migrator.MigrateToLatestVersion(sTempOrigFile);
                }
                else
                {
                    sFilename = sTempOrigFile;
                }
                //Validate the LIFT file.
                if (!Validate(sFilename, sTempOrigFile))
                {
                    return(null);
                }

                //Import the LIFT file and ranges file.
                m_progressDlg.Message = LexTextControls.ksLoadingVariousLists;
                var flexImporter = new FlexLiftMerger(m_cache, m_msImport, m_chkTrustModTimes.Checked);
                var parser       = new LiftParser <LiftObject, CmLiftEntry, CmLiftSense, CmLiftExample>(flexImporter);
                parser.SetTotalNumberSteps += parser_SetTotalNumberSteps;
                parser.SetStepsCompleted   += parser_SetStepsCompleted;
                parser.SetProgressMessage  += parser_SetProgressMessage;

                flexImporter.LiftFile = sTempOrigFile;

                //Before imporing the LIFT files ensure the LDML (language definition files) have the correct writing system codes.
                flexImporter.LdmlFilesMigration(sLIFTtempFolder, sFilename, sTempOrigFile + "-ranges");
                //Import the Ranges file.
                flexImporter.LoadLiftRanges(sTempOrigFile + "-ranges");                 // temporary (?) fix for FWR-3869.
                //Import the LIFT data file.
                int cEntries = parser.ReadLiftFile(sFilename);

                if (fMigrationNeeded)
                {
                    // Try to move the migrated file to the temp directory, even if a copy of it
                    // already exists there.
                    string sTempMigrated = Path.Combine(Path.GetTempPath(),
                                                        Path.ChangeExtension(Path.GetFileName(sFilename), "." + Validator.LiftVersion + FwFileExtensions.ksLexiconInterchangeFormat));
                    if (File.Exists(sTempMigrated))
                    {
                        File.Delete(sTempMigrated);
                    }
                    File.Move(sFilename, sTempMigrated);
                }
                flexImporter.ProcessPendingRelations(m_progressDlg);
                return(flexImporter.DisplayNewListItems(sOrigFile, cEntries));
            }
            catch (Exception error)
            {
                string sMsg = String.Format(LexTextControls.ksLIFTImportProblem,
                                            sOrigFile, error.Message);
                try
                {
                    StringBuilder bldr = new StringBuilder();
                    // leave in English for programmer's sake...
                    bldr.AppendFormat("Something went wrong while FieldWorks was attempting to import {0}.",
                                      sOrigFile);
                    bldr.AppendLine();
                    bldr.AppendLine(error.Message);
                    bldr.AppendLine();
                    bldr.AppendLine(error.StackTrace);

                    if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA)
                    {
                        ClipboardUtils.SetDataObject(bldr.ToString(), true);
                    }
                    else
                    {
                        progressDlg.SynchronizeInvoke.Invoke(() => ClipboardUtils.SetDataObject(bldr.ToString(), true));
                    }
                    SIL.Utils.Logger.WriteEvent(bldr.ToString());
                }
                catch
                {
                }
                MessageBox.Show(sMsg, LexTextControls.ksProblemImporting,
                                MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(null);
            }
        }