Ejemplo n.º 1
0
        /// <summary>
        /// Handles the CardStateChanged event of the learnlogic control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="MLifter.BusinessLayer.CardStateChangedEventArgs"/> instance containing the event data.</param>
        /// <remarks>Documented by Dev07, 2009-04-14</remarks>
        void learnlogic_CardStateChanged(object sender, CardStateChangedEventArgs e)
        {
            if (e is CardStateChangedCountdownTimerEventArgs)
            {
            }
            else
            {

                DisableButtons();
                //-- Hide / show selfAssesment buttons
                if (e.dictionary.Settings.SelfAssessment.Value)
                    ButtonSelfAssesmentVisible(true);
                else
                    ButtonSelfAssesmentVisible(false);

                //-- Enable Buttons depending on card status
                if (e is CardStateChangedNewCardEventArgs)
                {
                    if (learnlogic.SlideShow)
                    {
                        ButtonSlideShow(true);
                    }
                    else
                    {
                        ButtonQuestion(true);
                    }
                }

                if (e is CardStateChangedShowResultEventArgs)
                {
                    //this should correspond properly to SetButtonFocus(CardStateChangedEventArgs e)

                    CardStateChangedShowResultEventArgs args = (CardStateChangedShowResultEventArgs)e;

                    if (args.slideshow)
                        ButtonSlideShow(true);
                    else
                    {
                        if (e.dictionary.Settings.SelfAssessment.Value)
                            ButtonSelfAssesment(true);
                        else
                            ButtonNext(true);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Handles the CardStateChanged event of the learnlogic control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="MLifter.BusinessLayer.CardStateChangedEventArgs"/> instance containing the event data.</param>
        /// <remarks>Documented by Dev02, 2008-04-30</remarks>
        private void learnlogic_CardStateChanged(object sender, CardStateChangedEventArgs e)
        {
            if (e is CardStateChangedNewCardEventArgs ||
                (e is CardStateChangedShowResultEventArgs && ((CardStateChangedShowResultEventArgs)e).slideshow))
            {
                Card card = e.dictionary.Cards.GetCardByID(e.cardid);
                Box box = new Box(e.dictionary.Boxes[card.BaseCard.Box].Size, e.dictionary.Boxes[card.BaseCard.Box].MaximalSize);

                this.BoxNo = card.BaseCard.Box;
                this.BoxCards = box.Size;
                this.BoxSize = box.MaximalSize;

                this.Score = e.dictionary.Score;

                this.labelUser.Text = LearnLogic.UserConnectionInfo.GetDisplayName(learnlogic.User);
                tTip.RemoveAll();
                tTip.SetToolTip(this.labelUser, LearnLogic.UserConnectionInfo.GetServerName(learnlogic.CurrentLearningModule.ConnectionName));

                // [ML-2111] Not possible to display ampersand in chapter label
                this.labelChapter.Text = e.dictionary.Chapters.GetChapterByID(card.BaseCard.Chapter).Title.Replace("&", "&&");

                this.TimerVisible = e.dictionary.Settings.EnableTimer.Value;
                this.pictureBoxTimer.Visible = this.TimerVisible;
            }
            else if (e is CardStateChangedCountdownTimerEventArgs)
            {
                CardStateChangedCountdownTimerEventArgs args = (CardStateChangedCountdownTimerEventArgs)e;
                this.Timer = args.Remaining;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sets the button focus.
        /// </summary>
        /// <param name="e">The <see cref="MLifter.BusinessLayer.CardStateChangedEventArgs"/> instance containing the event data.</param>
        /// <remarks>Documented by Dev02, 2009-05-07</remarks>
        public void SetButtonFocus(CardStateChangedEventArgs e)
        {
            if (e is CardStateChangedShowResultEventArgs)
            {
                CardStateChangedShowResultEventArgs args = (CardStateChangedShowResultEventArgs)e;

                if (args.slideshow)
                {
                    FocusSlideshowButton();
                }
                else
                {
                    if (e.dictionary.Settings.SelfAssessment.Value)
                    {
                        if (args.result == AnswerResult.Correct)
                            SelfAssesmentFocusDoKnow();
                        else
                            SelfAssesmentFocusDontKnow();
                    }
                    else
                    {
                        FocusSlideshowButton();
                    }
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Handles the CardStateChanged event of the learnlogic control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="MLifter.BusinessLayer.CardStateChangedEventArgs"/> instance containing the event data.</param>
        /// <remarks>Documented by Dev02, 2008-04-24</remarks>
        void learnlogic_CardStateChanged(object sender, CardStateChangedEventArgs e)
        {
            if (e.dictionary.Settings.AutoplayAudio.Value)
            {
                bool example = (e as CardStateChangedEventArgs).dictionary.LearnMode == MLifter.BusinessLayer.LearnModes.Sentence;

                if (e is CardStateChangedNewCardEventArgs ||
                    (e is CardStateChangedShowResultEventArgs && ((CardStateChangedShowResultEventArgs)e).slideshow))
                {
                    if (e is CardStateChangedShowResultEventArgs && ((CardStateChangedShowResultEventArgs)e).preview)
                        return;

                    // [ML-1747]
                    if (e.dictionary.LearnMode == MLifter.BusinessLayer.LearnModes.ImageRecognition)
                        return;

                    //play question side sound
                    PlayMediaFile(e.dictionary.Cards.GetAudioFile(e.cardid, Side.Question, example), true);
                }

                if (e is CardStateChangedShowResultEventArgs)
                {
                    CardStateChangedShowResultEventArgs args = (CardStateChangedShowResultEventArgs)e;
                    if (args.preview)
                        return;

                    //play answer side sound and commentary sounds
                    AnswerResult result = args.promoted ? AnswerResult.Correct : (args.result == AnswerResult.Almost ? AnswerResult.Almost : AnswerResult.Wrong);

                    if (FileValid(args.dictionary.Cards.GetAudioFile(args.cardid, Side.Answer, example)))
                    {
                        if (result != AnswerResult.Correct) PlayCommentarySound(args.dictionary, result, false); //not correct commentary sound is to be played before the cardaudio
                        PlayMediaFile(args.dictionary.Cards.GetAudioFile(args.cardid, Side.Answer, example), false);
                        if (result == AnswerResult.Correct) PlayCommentarySound(args.dictionary, result, false); //correct commentary sound is to be played after the cardaudio
                    }
                    else //play the standalone commentary sounds only if the card sound is not available
                    {
                        PlayCommentarySound(args.dictionary, result, true);
                    }
                }
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Handles the CardStateChanged event of the learnlogic control.
 /// </summary>
 /// <param name="sender">The source of the event.</param>
 /// <param name="e">The <see cref="MLifter.BusinessLayer.CardStateChangedEventArgs"/> instance containing the event data.</param>
 /// <remarks>Documented by Dev02, 2008-04-24</remarks>
 void learnlogic_CardStateChanged(object sender, CardStateChangedEventArgs e)
 {
     if (e is CardStateChangedNewCardEventArgs ||
         (e is CardStateChangedShowResultEventArgs && ((CardStateChangedShowResultEventArgs)e).slideshow))
     {
         Text = String.Format(Resources.STATUSBAR_CURRENTCHAPTER, e.dictionary.Cards.GetChapterName(e.cardid));
     }
     else if (e is CardStateChangedShowResultEventArgs)
     {
         if (e.dictionary.Settings.SelfAssessment.Value)
             Text = Resources.STATUSBAR_SELFASSESSMENT;
         else
         {
             CardStateChangedShowResultEventArgs args = (CardStateChangedShowResultEventArgs)e;
             AnswerResult result = args.promoted ? AnswerResult.Correct : (args.result == AnswerResult.Almost ? AnswerResult.Almost : AnswerResult.Wrong);
             switch (result)
             {
                 case AnswerResult.Correct:
                     Text = Resources.STATUSBAR_RESPONSE_CORRECT;
                     break;
                 case AnswerResult.Wrong:
                     Text = Resources.STATUSBAR_RESPONSE_INCORRECT;
                     break;
                 case AnswerResult.Almost:
                     Text = Resources.STATUSBAR_RESPONSE_ALMOST;
                     break;
             }
         }
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Handles the CardStateChanged event of the learnlogic control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="MLifter.BusinessLayer.CardStateChangedEventArgs"/> instance containing the event data.</param>
        /// <remarks>Documented by Dev02, 2008-04-23</remarks>
        void learnlogic_CardStateChanged(object sender, CardStateChangedEventArgs e)
        {
            if (e is CardStateChangedNewCardEventArgs ||
                (e is CardStateChangedShowResultEventArgs && ((CardStateChangedShowResultEventArgs)e).slideshow))
            {
                //abort old thread in case it is still running
                if (generateQuestionThread != null && generateQuestionThread.IsAlive)
                    generateQuestionThread.Abort();

                generateQuestionThread = new Thread(delegate()
                {
                    // WORKAROUND for Windows Media Player 6.4 [ML-2122]
                    if (MLifter.Generics.Methods.IsWMP7OrGreater())
                    {
                        Uri question = MLifter.DAL.DB.DbMediaServer.DbMediaServer.PrepareQuestion(e.dictionary.DictionaryDAL.Parent, e.cardid, e.dictionary.GenerateQuestion(e.cardid));
                        string title = e.dictionary.Cards.GetCardByID(e.cardid).CurrentQuestionCaption;
                        if (this.IsHandleCreated && !this.IsDisposed)
                            this.Invoke(new MethodInvoker(delegate()
                            {
                                this.QuestionBrowserUrl = question;
                                this.Title = title;
                            }));
                    }
                    else
                    {
                        string content = e.dictionary.GenerateQuestion(e.cardid);
                        string title = e.dictionary.Cards.GetCardByID(e.cardid).CurrentQuestionCaption;
                        if (this.IsHandleCreated && !this.IsDisposed)
                            this.Invoke(new MethodInvoker(delegate()
                            {
                                this.QuestionBrowserContent = content;
                                this.Title = title;
                            }));
                    }

                });
                generateQuestionThread.IsBackground = true;
                generateQuestionThread.Name = "Generate Question Thread";
                generateQuestionThread.CurrentCulture = Thread.CurrentThread.CurrentCulture;
                generateQuestionThread.CurrentUICulture = Thread.CurrentThread.CurrentUICulture;
                generateQuestionThread.Start();

            }
        }
Ejemplo n.º 7
0
 void answerPanel_SetButtonFocus(object sender, CardStateChangedEventArgs e)
 {
     buttonsPanelMainControl.SetButtonFocus(e);
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Raises the <see cref="E:CardStateChanged"/> event.
 /// </summary>
 /// <param name="e">The <see cref="MLifter.BusinessLayer.CardEventArgs"/> instance containing the event data.</param>
 /// <remarks>Documented by Dev02, 2008-04-23</remarks>
 private void OnCardStateChanged(CardStateChangedEventArgs e)
 {
     if (CardStateChanged != null)
         CardStateChanged(this, e);
     else
         Trace.WriteLine("Warning: No subscribers for CardStateChanged event!");
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Handles the CardStateChanged event of the learnlogic control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="MLifter.BusinessLayer.CardStateChangedEventArgs"/> instance containing the event data.</param>
        /// <remarks>Documented by Dev02, 2008-04-23</remarks>
        void learnlogic_CardStateChanged(object sender, CardStateChangedEventArgs e)
        {
            Card card = e.dictionary.Cards.GetCardByID(e.cardid);

            //prepare title labels for either a new card, or the result in slideshow mode
            if (e is CardStateChangedNewCardEventArgs ||
                (e is CardStateChangedShowResultEventArgs && ((CardStateChangedShowResultEventArgs)e).slideshow))
            {
                string title = card != null ? card.CurrentAnswerCaption : string.Empty;
                if ((this.learnlogic == null) || (this.learnlogic.SlideShow == false))
                {
                    switch (e.dictionary.LearnMode)
                    {
                        case BusinessLayer.LearnModes.MultipleChoice:
                            title = String.Format(Resources.MAINFORM_LBLANSWER_MULTI_TEXT, title);
                            break;
                        case BusinessLayer.LearnModes.Sentence:
                            title = String.Format(Resources.MAINFORM_LBLANSWER_SENTENCES_TEXT, title);
                            break;
                        default:
                            if (card.CurrentAnswer.Words.Count > 1) //in case of synonyms
                                title = String.Format(Resources.MAINFORM_LBLANSWER_DEFAULT_TEXT2, title, card.CurrentAnswer.Words.Count);
                            else
                                title = String.Format(Resources.MAINFORM_LBLANSWER_DEFAULT_TEXT1, title);
                            break;
                    }
                }
                this.Title = title;
            }

            if (e is CardStateChangedNewCardEventArgs)
            {
                ComponentsHelper.IsResizing = true;

                //reset controls
                mLifterTextBox.Text = string.Empty;
                webBrowserAnswer.Stop();
                MLifter.Components.InfoBar.CleanUpInfobars(InfoBarControl);

                if (generateAnswerThread != null && generateAnswerThread.IsAlive)
                    generateAnswerThread.Abort();

                //fix for [ML-1335] Problems with bidirectional Text (RTL languages)
                RightToLeft controlTextDirection = (e.dictionary.CurrentQueryDirection == EQueryDirection.Answer2Question ?
                    card.BaseCard.Question.Culture : card.BaseCard.Answer.Culture).TextInfo.IsRightToLeft ? RightToLeft.Yes : RightToLeft.No;
                mLifterTextBox.RightToLeft = multipleChoice.RightToLeft = controlTextDirection;

                //switch main multipane according to current learn mode
                if (e.dictionary.LearnMode == BusinessLayer.LearnModes.MultipleChoice)
                {
                    multiPaneControlMain.SelectedPage = multiPanePageMainMultipleChoice;
                    BusinessLayer.MultipleChoice multipleChoiceQuery = e.dictionary.GetChoices(card.BaseCard);
                    if (multipleChoiceQuery.Count > 0)
                    {
                        multipleChoice.Options = e.dictionary.CurrentMultipleChoiceOptions;
                        multipleChoice.Show(multipleChoiceQuery);
                        multipleChoice.Focus();
                    }
                }
                else
                {
                    multiPaneControlMain.SelectedPage = multiPanePageMainTextbox;
                    mLifterTextBox.IgnoreChars = e.dictionary.Settings.StripChars;
                    mLifterTextBox.CaseSensitive = e.dictionary.Settings.CaseSensitive.Value;
                    mLifterTextBox.IgnoreAccentChars = e.dictionary.Settings.IgnoreAccentChars.Value;
                    mLifterTextBox.CorrectOnTheFly = e.dictionary.Settings.CorrectOnTheFly.Value;

                    mLifterTextBox.Synonyms = (e.dictionary.LearnMode == BusinessLayer.LearnModes.Sentence ? card.CurrentAnswerExample : card.CurrentAnswer).ToStringList();

                    //show synonym notification infobar
                    if (mLifterTextBox.Synonyms.Count > 1 && learnlogic.SynonymInfoMessage)
                    {
                        string notificationText;
                        if (e.dictionary.Settings.CorrectOnTheFly.Value)
                            notificationText = Resources.SYNONYM_PROMPT_FLY_TEXT;
                        else
                            notificationText = Resources.SYNONYM_PROMPT_TEXT;
                        MLifter.Components.InfoBar infobar = new MLifter.Components.InfoBar(notificationText, this.InfoBarControl, DockStyle.Top, true, true, gradientPanelAnswer);
                        infobar.DontShowAgainChanged += new EventHandler(infobar_DontShowAgainChanged);
                    }
                    PositionTextBox();

                    mLifterTextBox.Focus();
                }

                ComponentsHelper.IsResizing = false;
                Invalidate();
            }
            else if (e is CardStateChangedShowResultEventArgs)
            {

                CardStateChangedShowResultEventArgs args = (CardStateChangedShowResultEventArgs)e;

                if (generateAnswerThread != null && generateAnswerThread.IsAlive)
                    generateAnswerThread.Abort();

                generateAnswerThread = new Thread(delegate()
                {
                    this.Invoke(new MethodInvoker(delegate()
                  {
                      this.AnswerBrowserUrl = new Uri("about:blank"); //[ML-1621]  Flicker in the answer result
                  }));

                    // WORKAROUND for Windows Media Player 6.4 [ML-2122]
                    if (MLifter.Generics.Methods.IsWMP7OrGreater())
                    {
                        Uri answer = MLifter.DAL.DB.DbMediaServer.DbMediaServer.PrepareAnswer(args.dictionary.DictionaryDAL.Parent, args.cardid,
                            args.dictionary.GenerateAnswer(args.cardid, args.answer, args.promoted));
                        this.Invoke(new MethodInvoker(delegate()
                        {
                            this.AnswerBrowserUrl = answer;
                            multiPaneControlMain.SelectedPage = multiPanePageMainViewer;

                            if (!args.slideshow && e.dictionary.Settings.SelfAssessment.Value)
                                cardEventArgs = args;//this tag is needed for the submit of the answer

                            OnSetButtonFocus(e);
                        }));
                    }
                    else
                    {
                        string content = args.dictionary.GenerateAnswer(args.cardid, args.answer, args.promoted);
                        this.Invoke(new MethodInvoker(delegate()
                        {
                            this.AnswerBrowserContent = content;
                            multiPaneControlMain.SelectedPage = multiPanePageMainViewer;

                            if (!args.slideshow && e.dictionary.Settings.SelfAssessment.Value)
                                cardEventArgs = args;//this tag is needed for the submit of the answer

                            OnSetButtonFocus(e);
                        }));
                    }
                });

                generateAnswerThread.IsBackground = true;
                generateAnswerThread.Name = "Generate Answer Thread";
                generateAnswerThread.CurrentCulture = Thread.CurrentThread.CurrentCulture;
                generateAnswerThread.CurrentUICulture = Thread.CurrentThread.CurrentUICulture;
                generateAnswerThread.Start();

            }
            else if (e is CardStateChangedCountdownTimerEventArgs)
            {
                //submit answers in case the timer is finished
                CardStateChangedCountdownTimerEventArgs args = (CardStateChangedCountdownTimerEventArgs)e;
                if (args.TimerFinished)
                {
                    if (multiPaneControlMain.SelectedPage == multiPanePageMainTextbox)
                    {
                        mLifterTextBox.AllowAnswerSubmit = false;
                        mLifterTextBox.ManualOnKeyPress(new KeyPressEventArgs((char)Keys.Enter));
                        mLifterTextBox.AllowAnswerSubmit = true;

                        SubmitUserInput();
                    }
                    else if (multiPaneControlMain.SelectedPage == multiPanePageMainMultipleChoice)
                        SubmitMultipleChoice();
                    else if (learnlogic.SlideShow)
                        SubmitSlideShow(false);
                }
            }
        }
Ejemplo n.º 10
0
 protected virtual void OnSetButtonFocus(CardStateChangedEventArgs e)
 {
     if (SetButtonFocus != null)
         SetButtonFocus(this, e);
 }