internal AsyncTranslateState( LanguagePair languagePair, ReadOnlyServiceSettingCollection translatorsSettings, string phrase, AsyncOperation asyncOp, EventHandler<TranslateProgressChangedEventArgs> progressChangedHandler, EventHandler<TranslateCompletedEventArgs> translateCompletedHandler) { if(translatorsSettings == null) throw new ArgumentNullException("translatorsSettings"); this.phrase = phrase; this.asyncOperation = asyncOp; this.translatorsSettings = translatorsSettings; this.languagePair = languagePair; count = translatorsSettings.Count; ProgressChanged += progressChangedHandler; TranslateCompleted += translateCompletedHandler; }
void LoadSubjects() { lbSubjects.BeginUpdate(); loadingSubjects = true; lbSubjects.Items.Clear(); string val; val = "+ " + LangPack.TranslateString("Toggle all"); lbSubjects.Items.Add(new SubjectContainer("Toggle all", val)); foreach(string s in supportedSubjects) { val = LangPack.TranslateString(s); if(s == "Common") val = "+" + val; lbSubjects.Items.Add(new SubjectContainer(s, val), subjects.Contains(s)); } lbSubjects.EndUpdate(); lbSubjects.SetItemChecked(0, lbSubjects.CheckedItems.Count == supportedSubjects.Count); loadingSubjects = false; serviceItemsSettings = null; //reset LoadServices(false); }
void LoadServices(bool phraseChanged) { if(selection == null || ignoreServicesLoading) return; if(serviceItemsSettings == null || !phraseChanged) { lock(serviceItemsContainers) { serviceItemsSettings = profile.GetServiceSettings(phrase, selection); lvServicesEnabled.Items.Clear(); lvServicesDisabled.Items.Clear(); lvServicesDisabledByUser.Items.Clear(); serviceItemsContainers.Clear(); enabledLVItems.Clear(); disabledLVItems.Clear(); disabledByUserLVItems.Clear(); bool showLanguage = selection.From == Language.Any || selection.To == Language.Any; foreach(ServiceItemSetting ss in serviceItemsSettings) { ServiceSettingsContainer sc = new ServiceSettingsContainer(ss, showLanguage); sc.DisabledByUser = !profile.IsServiceEnabled(ss.ServiceItem.FullName, ss.LanguagePair, ss.Subject); serviceItemsContainers.Add(sc); } } } try { tpServices.SuspendLayout(); lvServicesEnabled.SuspendLayout(); lvServicesEnabled.BeginUpdate(); lvServicesDisabled.SuspendLayout(); lvServicesDisabled.BeginUpdate(); lvServicesDisabledByUser.SuspendLayout(); lvServicesDisabledByUser.BeginUpdate(); lvServicesEnabled.FocusedItem = null; lvServicesDisabled.FocusedItem = null; lvServicesDisabledByUser.FocusedItem = null; lock(serviceItemsContainers) { PrepareAddingServicesBatch(); foreach(ServiceSettingsContainer sc in serviceItemsContainers) { AddListViewItem(sc, true); } ApplyAddingServicesBatch(); } CalcServicesSizes(); try { //try to avoid unrepeatable bug if(lvServicesEnabled.Items.Count > 0) { lvServicesEnabled.Items[0].Focused = true; lvServicesEnabled.Items[0].Selected = true; } else if(lvServicesDisabled.Items.Count > 0) { lvServicesDisabled.Items[0].Focused = true; lvServicesDisabled.Items[0].Selected = true; } else if(lvServicesDisabledByUser.Items.Count > 0) { lvServicesDisabledByUser.Items[0].Focused = true; lvServicesDisabledByUser.Items[0].Selected = true; } } catch { try { if(lvServicesEnabled.Items.Count > 0) { lvServicesEnabled.Items[0].Focused = true; lvServicesEnabled.Items[0].Selected = true; } else if(lvServicesDisabled.Items.Count > 0) { lvServicesDisabled.Items[0].Focused = true; lvServicesDisabled.Items[0].Selected = true; } else if(lvServicesDisabledByUser.Items.Count > 0) { lvServicesDisabledByUser.Items[0].Focused = true; lvServicesDisabledByUser.Items[0].Selected = true; } } catch { } } } finally { lvServicesEnabled.EndUpdate(); lvServicesEnabled.ResumeLayout(); lvServicesDisabled.EndUpdate(); lvServicesDisabled.ResumeLayout(); lvServicesDisabledByUser.EndUpdate(); lvServicesDisabledByUser.ResumeLayout(); tpServices.ResumeLayout(); Refresh(); } }
void LbSubjectsItemCheck(object sender, ItemCheckEventArgs e) { if(loadingSubjects) return; if(e.Index == 0) { try { ignoreServicesLoading = true; loadingSubjects = true; LockUpdate(true); if(e.NewValue == CheckState.Checked) { //all subjects.Clear(); subjects.AddRange(supportedSubjects); for(int i = 1; i < lbSubjects.Items.Count; i++) lbSubjects.SetItemCheckState(i, e.NewValue); } else if(e.NewValue == CheckState.Unchecked) { subjects.Clear(); subjects.Add((lbSubjects.Items[1] as SubjectContainer).Subject); lbSubjects.SetItemCheckState(1, CheckState.Checked); for(int i = 2; i < lbSubjects.Items.Count; i++) lbSubjects.SetItemCheckState(i, e.NewValue); } SetLanguages(profile.GetLanguagePairs()); LanguagePairCollection to_delete = new LanguagePairCollection(); int index; foreach(LanguagePair lp in history) { index = Languages.BinarySearch(lp); if(index < 0) { to_delete.Add(lp); } } foreach(LanguagePair lp in to_delete) { history.Remove(lp); } LoadHistory(); } finally { LockUpdate(false); ignoreServicesLoading = false; loadingSubjects = false; serviceItemsSettings = null; //reset LoadServices(false); } if(SubjectsChanged != null) SubjectsChanged(this, new EventArgs()); return; } SubjectContainer sc = (SubjectContainer)lbSubjects.Items[e.Index]; if(e.NewValue == CheckState.Checked) subjects.Add(sc.Subject); else if(e.NewValue == CheckState.Unchecked) { if(subjects.Count == 1) { int new_idx = e.Index; new_idx ++; if(new_idx >= lbSubjects.Items.Count) { new_idx = 1; } lbSubjects.SetItemChecked(new_idx, true); } subjects.Remove(sc.Subject); } try { ignoreServicesLoading = true; SetLanguages(profile.GetLanguagePairs()); LanguagePairCollection to_delete = new LanguagePairCollection(); int index; foreach(LanguagePair lp in history) { index = Languages.BinarySearch(lp); if(index < 0) { to_delete.Add(lp); } } foreach(LanguagePair lp in to_delete) { history.Remove(lp); } LoadHistory(); } finally { ignoreServicesLoading = false; serviceItemsSettings = null; //reset LoadServices(false); } if(SubjectsChanged != null) SubjectsChanged(this, new EventArgs()); }
public static AsyncTranslateState TranslateAsync(LanguagePair languagePair, string phrase, ReadOnlyServiceSettingCollection translatorsSettings, EventHandler<TranslateProgressChangedEventArgs> progressChangedHandler, EventHandler<TranslateCompletedEventArgs> translateCompletedHandler) { AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(DateTime.Now.Ticks); AsyncTranslateState state = new AsyncTranslateState(languagePair, translatorsSettings, phrase, asyncOp, progressChangedHandler, translateCompletedHandler); state.Run(); return state; }
string BuildQuery(string phrase, ReadOnlyServiceSettingCollection settings, ReadOnlyResultCollection results) { if(phrase == null || settings == null) return ""; else { string result; if(wBrowser.Width > 740) result = "w=728&h=90"; else if(wBrowser.Width > 480) result = "w=468&h=60"; else if(wBrowser.Width > 246) result = "w=234&h=60"; else if(wBrowser.Width > 137) result = "w=125&h=125"; else return null; //selecting words from query and result List<string> phrasewords = StringParser.SplitToParts(phrase.Replace("́","")); int count = ExtractAdWords(phrasewords, 25); string resultstr = ""; foreach(Result r in results) { resultstr += GetResultString(r); } List<string> resultwords = StringParser.SplitToParts(resultstr.Replace("́","")); count = ExtractAdWords(resultwords, 60 - count); if(phrasewords.Count + resultwords.Count == 0 ) return null; string phraseStr = ""; foreach(string s in resultwords) phraseStr += s + " "; foreach(string s in phrasewords) { if(!resultwords.Contains(s)) phraseStr += s + " "; } phraseStr = phraseStr.Substring(0, phraseStr.Length - 1); result += "&s=" + HttpUtility.UrlEncode(phraseStr); List<string> subjects = new List<string>(); foreach(ServiceItemSetting ss in settings) { if(ss.Subject != SubjectConstants.Common && !subjects.Contains(ss.Subject)) subjects.Add(ss.Subject); } int idx = 0; foreach(string sub in subjects) { result += "&sub" + idx.ToString(CultureInfo.InvariantCulture) + "=" + HttpUtility.UrlEncode(sub); idx++; } return result; } }