private void ShowSynounyms(object sender, EventArgs e) { WordMeuItem MI = (WordMeuItem)sender; MI.Word = MI.Word.ToLower(); string TL = DownloadTranslation(MI.Word).ToLower(); bool CanGiveSynounyms = !string.IsNullOrEmpty(TL); if (CanGiveSynounyms) { string cnt = Engine.LoadTranslation(Engine.TLID.LoadingSuggetionsPlzWait); //Asyc Download Suggestions BallonToolTip Ballon = new BallonToolTip(); bool IsFromInputLang = TL != MI.Word; string Word = MI.Word; if (IsFromInputLang && InputLang != "EN") { Word = DownloadTranslation(Word, InputLang, "EN"); } if (!IsFromInputLang && TargetLang != "EN") { Word = DownloadTranslation(Word, TargetLang, "EN"); } if (Word.Contains(" ")) { foreach (string w in Word.Split(' ')) { string TTL = string.Empty; if (IsFromInputLang && InputLang != "EN") { TTL = DownloadTranslation(w, "EN", InputLang); } if (!IsFromInputLang && TargetLang != "EN") { TTL = DownloadTranslation(w, "EN", TargetLang); } if (MI.Word.ToLower().StartsWith(Word.ToLower())) { Word = TTL; } } } string[] Suggestions = new string[0]; System.Threading.Thread Thread = new System.Threading.Thread(() => { try { Suggestions = WordAPI.DownloadSynonyms(Word); } catch { } if (Suggestions == null) { Suggestions = new string[0]; } if (!IsFromInputLang) { for (int i = 0; i < Suggestions.Length; i++) { Suggestions[i] = DownloadTranslation(Suggestions[i], "EN", TargetLang); } } }); Timer ti = new Timer(); ti.Interval = 500; ti.Tick += (sdr, ev) => { if (Thread.ThreadState == System.Threading.ThreadState.Stopped) { ti.Enabled = false; string WordList = string.Empty; if (Suggestions == null) { Ballon = new BallonToolTip(); Ballon.Title = Engine.LoadTranslation(Engine.TLID.NoSynonymsFound); Ballon.Message = Engine.LoadTranslation(Engine.TLID.TryManuallySearch); Engine.UpdateToolTip(Ballon, true); return; } foreach (string Suggestion in Suggestions) { if (!string.IsNullOrWhiteSpace(Suggestion)) { WordList += Suggestion + ", "; } } if (string.IsNullOrWhiteSpace(WordList)) { WordList = @" "; } WordList = WordList.Substring(0, WordList.Length - 2); Ballon = new BallonToolTip(); Ballon.Title = string.IsNullOrWhiteSpace(WordList) ? Engine.LoadTranslation(Engine.TLID.NoSynonymsFound) : string.Format(Engine.LoadTranslation(Engine.TLID.SynonymsFor), MI.Word); Ballon.Message = string.IsNullOrWhiteSpace(WordList) ? Engine.LoadTranslation(Engine.TLID.TryManuallySearch) : WordList; Engine.UpdateToolTip(Ballon, true); } }; Engine.ShowToolTip(MI.Location, cnt, string.Format(Engine.LoadTranslation(Engine.TLID.SynonymsFor), MI.Word), Ballon, true, this); Thread.Start(); ti.Enabled = true; } else { if (MessageBox.Show(Engine.LoadTranslation(Engine.TLID.FailedToDetectWordLang), "VNXTLP", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information) == DialogResult.Retry) { ShowSynounyms(sender, e); } return; } }