示例#1
0
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
     Music.Dispose();
     Properties.Settings.Default["Theme"] = Theme.CurrentTheme.Name;
     foreach (Theme theme in Theme.AvailableThemes)
     {
         Properties.Settings.Default["Opacity" + theme.Name]       = _opacity[theme.Name];
         Properties.Settings.Default["Volume" + theme.Name]        = theme.SFX.Volume;
         Properties.Settings.Default["Accompaniment" + theme.Name] = theme.SFX.hasAccompanied;
     }
     Properties.Settings.Default["NoteResolution"] = Music.NoteResolution;
     Properties.Settings.Default.Save();
     notifyIcon1.Dispose();
     TypingTracker.DestroyIMEContext();
     TypingTracker.Stop();
     IsReady = false;
 }
示例#2
0
        /// <summary>
        /// Form을 초기화하는 함수입니다.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            MarshallingUpdateSplashScreen(2);

            #region Initialize phase

            Form form = (Form)sender;
            form.ShowInTaskbar = false;
            instance           = this;

            MarshallingUpdateSplashScreen(3);
            TypingTracker.NewIMEContext();

            MarshallingUpdateSplashScreen(4);
            Theme.Initialize();

            MarshallingUpdateSplashScreen(5);
            bool themeExist = false;
            foreach (Theme t in Theme.AvailableThemes)
            {
                _opacity[t.Name] = (int)Properties.Settings.Default["Opacity" + t.Name];
                t.SFX.Volume     = (int)Properties.Settings.Default["Volume" + t.Name];

                if (t.Name.Equals((string)Properties.Settings.Default["Theme"]))
                {
                    themeExist = true;
                    SetTheme(t);
                }
            }

            MarshallingUpdateSplashScreen(6);

            /*
             * TODO
             * 테마를 추가했다가 삭제하는 경우를 처리해야 함.
             * Theme.AvailableThemes에 themeName의 테마가 없는데
             * Properties.Settings.Default["Opacity/Volume" + themeName]이 남아있는 경우
             * Properties.Settings.Default.Properties.Remove() 사용하여 제거 바람.
             */
            if (!themeExist && Theme.AvailableThemes.Count > 0)
            {
                SetTheme(Theme.AvailableThemes[0]);
            }

            MarshallingUpdateSplashScreen(7);
            int resolution = (int)Properties.Settings.Default["NoteResolution"];

            MarshallingUpdateSplashScreen(8);
            Music.Initialize(Theme.CurrentTheme.SFX.Name, resolution,
                             new SFX.Timer.TickDelegate[] { MarshallingUpdateFrame });

            MarshallingUpdateSplashScreen(9);
            foreach (Theme t in Theme.AvailableThemes)
            {
                // 이 코드를 위의 foreach문과 합치면 CurrentSFXTheme이 아직 설정되지 않은 상태가 되어 문제가 발생할 수 있음
                t.SFX.hasAccompanied = (bool)Properties.Settings.Default["Accompaniment" + t.Name];
            }

            if (Theme.CurrentTheme.SFX.hasAccompanied)
            {
                자동반주ToolStripMenuItem.CheckState = CheckState.Checked;
            }
            else
            {
                자동반주ToolStripMenuItem.CheckState = CheckState.Unchecked;
            }

            MarshallingUpdateSplashScreen(10);
            if (ENABLE_VFX)
            {
#pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다.
                Music.OnPlayNotes       += (pitch) => AddParticleToBasicParticleSystem((Chord.Root)(pitch % 12));
                Music.OnChordTransition += (pitch) =>
                {
                    if (Theme.CurrentTheme.ParticleSystemForWhitespace != null)
                    {
                        AddParticleSystem(Theme.CurrentTheme.ParticleSystemForWhitespace);
                    }
                    else
                    {
                        AddParticleToBasicParticleSystem((Chord.Root)(pitch % 12));
                    }
                };
#pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다.
            }
            else
            {
#pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다.
                List <TrackBarMenuItem> l = new List <TrackBarMenuItem>();
                foreach (TrackBarMenuItem i in 불투명도ToolStripMenuItem.DropDownItems)
                {
                    l.Add(i);
                }
                foreach (TrackBarMenuItem i in l)
                {
                    i.TrackBar.Dispose();
                    i.Dispose();
                }
                불투명도ToolStripMenuItem.Dispose();
#pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다.
            }

            MarshallingUpdateSplashScreen(11);
            SetNoteResolution(resolution);

            MarshallingUpdateSplashScreen(12);
            if (ENABLE_SENTIMENT_ANALYZER)
            {
#pragma warning disable CS0162                       // 접근할 수 없는 코드가 있습니다.
                ksa = new KoreanSentimentAnalyzer(); // 반드시 Music.Initialize()가 완료된 후에 호출할 것.
#pragma warning restore CS0162                       // 접근할 수 없는 코드가 있습니다.
            }

            MarshallingUpdateSplashScreen(13);
            if (ENABLE_SENTIMENT_ANALYZER)
            {
#pragma warning disable CS0162                        // 접근할 수 없는 코드가 있습니다.
                esa = new EnglishSentimentAnalyzer(); // 반드시 Music.Initialize()가 완료된 후에 호출할 것.
#pragma warning restore CS0162                        // 접근할 수 없는 코드가 있습니다.
            }

            #endregion

            MarshallingUpdateSplashScreen(14);

            #region Start phase

            TypingTracker.Start();
            if (ENABLE_SENTIMENT_ANALYZER)
            {
#pragma warning disable CS0162 // 접근할 수 없는 코드가 있습니다.
                ksa.Start();
                esa.Start();
#pragma warning restore CS0162 // 접근할 수 없는 코드가 있습니다.
            }
            Music.Start();

            notifyIcon1.ShowBalloonTip(8);
            MarshallingUpdateSplashScreen(15);
            splash.DisposeFont();
            splashThread.Abort();

            IsReady = true;

            #endregion
        }