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