/[EmuXPortal]/branches/mono/EmuXPortal/Form1.cs
ViewVC logotype

Diff of /branches/mono/EmuXPortal/Form1.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 324 by william, Tue Dec 19 00:10:33 2017 UTC revision 327 by william, Tue Dec 19 00:38:33 2017 UTC
# Line 34  namespace EmuXPortal Line 34  namespace EmuXPortal
34          PlatformControl CurrentPlatformControl = null;          PlatformControl CurrentPlatformControl = null;
35                  int SavedPlatformIndex= -1;                  int SavedPlatformIndex= -1;
36          GameControl CurrentGameControl = null;          GameControl CurrentGameControl = null;
37                    private CustomProgressBar progress_bar;
38    
39          #region unhandled exception support          #region unhandled exception support
40          static void Application_Unhandled_ThreadException(object sender, ThreadExceptionEventArgs e)          static void Application_Unhandled_ThreadException(object sender, ThreadExceptionEventArgs e)
# Line 69  namespace EmuXPortal Line 70  namespace EmuXPortal
70          public Form1()          public Form1()
71          {          {
72              InitializeComponent();              InitializeComponent();
73                            this.progress_bar = new CustomProgressBar();
74                          this.KeyPreview = true;                          this.KeyPreview = true;
75                    
76              #region logging support              #region logging support
# Line 717  namespace EmuXPortal Line 718  namespace EmuXPortal
718          #region gameWorker          #region gameWorker
719          private static Image DefaultGameImage = Properties.Resources.DefaultGameImage;          private static Image DefaultGameImage = Properties.Resources.DefaultGameImage;
720          private object gameimage_lock = new object();          private object gameimage_lock = new object();
721          private void gameWorker_DoWork(object sender, DoWorkEventArgs e)                  private void worker_progress_event (object event_source, ProgressEventArgs event_args)
722          {                  {
723              Stopwatch t = e.Argument as Stopwatch;                          //gLog.Debug.WriteLine ("worker_progress_event called!");
             RomParser parser = new RomParser(CurrentSelectedRom);  
724    
725              CustomProgressBar bar = new CustomProgressBar();                          object user_object = event_args.GetUserObject ();
726              bar.Font = ResizeFont(GetFormFont(), PROGRESS_BAR_FONT_SIZE);                          int progress = event_args.GetProgress();
727                            string message = event_args.GetUserMessage() == null ? "" : event_args.GetUserMessage();
728                            if (user_object != null) {                              
729                                    IRomConfig irc = (user_object as IRomConfig);
730                                    if (irc != null) {
731                                            gLog.Verbose.Debug.WriteLine ("Read Rom[{0}] ({1}%): '{2}'", event_args.GetCount (), progress, irc);
732                                    } else {
733                                            IEmuConfig iec = (user_object as IEmuConfig);
734                                            if (iec != null) {
735                                                    gLog.Verbose.Debug.WriteLine ("Read Platform[{0}] ({1}%): '{2}'", event_args.GetCount (), progress, iec);
736                                            }
737                                    }
738                            }
739                            if (progress_bar.InvokeRequired) {
740                                    progress_bar.Invoke (new MethodInvoker (delegate {
741                                            progress_bar.Message = message;
742                                            progress_bar.Value = progress;
743                                            progress_bar.Update();
744                                    }));
745                            } else {
746                                    progress_bar.Message = message;
747                                    progress_bar.Value = progress;
748                                    progress_bar.Update();
749                            }
750                    }
751            private void gameWorker_DoWork (object sender, DoWorkEventArgs e)
752                    {
753                            Stopwatch t = e.Argument as Stopwatch;
754                            progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);
755  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE
756              bar.ShowPercentageLabel = false;              progress_bar.ShowPercentageLabel = false;
757  #endif  #endif
758              bar.ProgressColor = Color.LimeGreen;                          progress_bar.ProgressColor = Color.LimeGreen;
759              bar.Dock = DockStyle.Top;                          progress_bar.Dock = DockStyle.Top;
760    
761              if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate() { this.Controls.Add(bar); }); }                          if (this.InvokeRequired) {
762              else { this.Controls.Add(bar); }                                  this.Invoke ((MethodInvoker)delegate() {
763              bar.Invoke(new MethodInvoker(delegate { bar.Margin = new System.Windows.Forms.Padding(0); bar.Size = new Size(GetFormWidth() - 25, 100); }));                                          this.Controls.Add (progress_bar);
764                                                });
765              double count = 0;                          } else {
766              double total_count = parser.Roms.Count;                                  this.Controls.Add (progress_bar);
767              foreach (IRomConfig config in parser.Roms)                          }
768                            progress_bar.Invoke (new MethodInvoker (delegate {
769                                    progress_bar.Margin = new System.Windows.Forms.Padding (0);
770                                    progress_bar.Size = new Size (GetFormWidth () - 25, 100);
771                            }));
772    
773                            HashSet<IRomConfig> roms = new HashSet<IRomConfig> ();
774                            using (RomParser parser = new RomParser (CurrentSelectedRom, new ProgressEvent (worker_progress_event))) {                              
775                                    foreach (var rom in parser.Roms) {
776                                            roms.Add(rom);
777                                    }
778                            }
779    
780                            double count = 0;
781                            double total_count = roms.Count;
782                            if (total_count > 0) {
783                                    progress_bar.Invoke (new MethodInvoker (delegate {
784                                            progress_bar.Message = string.Format ("Please Wait Adding {0} {1} Roms...", total_count, CurrentSelectedRom.PlatformNameLong);
785                                    }));
786                            }
787    
788    
789                            foreach (IRomConfig config in roms)
790              {              {
791                  bar.Invoke(new MethodInvoker(delegate { bar.Value = (int)(100.0 * (count / total_count)); }));                  progress_bar.Invoke(new MethodInvoker(delegate { progress_bar.Value = (int)(100.0 * (count / total_count)); }));
792                  GameControl game_ctrl = new GameControl();                  GameControl game_ctrl = new GameControl();
793                  game_ctrl.Font = GetFormFont();                  game_ctrl.Font = GetFormFont();
794                  game_ctrl.Dock = DockStyle.Top;                  game_ctrl.Dock = DockStyle.Top;
# Line 748  namespace EmuXPortal Line 798  namespace EmuXPortal
798                  {                  {
799                      lock (gameimage_lock)                      lock (gameimage_lock)
800                      {                      {
801                          game_ctrl.GameImage = config.RomImage == null ? (Image)DefaultGameImage.Clone() : (Image)config.RomImage.Clone();                                                  //gLog.Debug.WriteLine ("handling rom: {0}", config.ToString ());
802                          config.ReleaseRomImageResource();                                                  if(String.IsNullOrEmpty(config.RomImage)) {
803                                                            game_ctrl.GameImage = (Image)DefaultGameImage.Clone ();
804                                                    }
805                                                    else {
806                                                            string path = config.GetFullRomImage();
807                                                            game_ctrl.GameImage = Image.FromFile(path);
808                                                    }
809                      }                      }
810                  }                  }
811                  catch (Exception ex)                  catch (Exception ex)
812                  {                  {
813                                            gLog.Error.WriteLine (ex.Message);
814                                            gLog.Verbose.Error.WriteLine (ex.ToString());
815                      throw ex;                      throw ex;
816                  }                  }
817                  if (CurrentSelectedRom.PlatformNameShort == "Favorites")                  if (CurrentSelectedRom.PlatformNameShort == "Favorites")
# Line 772  namespace EmuXPortal Line 830  namespace EmuXPortal
830                  else { rom_flow.Controls.Add(game_ctrl); }                  else { rom_flow.Controls.Add(game_ctrl); }
831                  count++;                  count++;
832              }              }
833              bar.Invoke(new MethodInvoker(delegate { bar.Value = 1; bar.Update(); }));              progress_bar.Invoke(new MethodInvoker(delegate { progress_bar.Value = 0; progress_bar.Update(); }));
834              if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate() { this.Controls.Remove(bar); }); } else { this.Controls.Remove(bar); }              e.Result = t;          
             e.Result = t;              
             parser.Dispose();  
835          }          }
836          private void gameWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { }          private void gameWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { }
837          private void gameWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)          private void gameWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
838          {          {
839              Stopwatch t = e.Result as Stopwatch;                          Stopwatch t = e.Result as Stopwatch;
840                            if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate() {
841                                    progress_bar.Message = "";
842                                    this.Controls.Remove(progress_bar); });
843                                    this.Refresh();
844                            } else {
845                                    progress_bar.Message = "";
846                                    this.Controls.Remove(progress_bar);
847                                    this.Refresh();
848    
849                            }
850              if (rom_flow.Controls.Count == 0)              if (rom_flow.Controls.Count == 0)
851              {              {
852                  GameControl game_ctrl = new GameControl();                  GameControl game_ctrl = new GameControl();
# Line 800  namespace EmuXPortal Line 866  namespace EmuXPortal
866              }              }
867              rom_flow.Controls[0].Select();              rom_flow.Controls[0].Select();
868              t.Stop();              t.Stop();
869              //gLog.Profiler.WriteLine("RomParser took: {0}s to parse roms", (int)t.Elapsed.TotalSeconds);              gLog.Profiler.WriteLine("RomParser took: {0}s to parse roms", (int)t.Elapsed.TotalSeconds);
870          }          }
871          #endregion          #endregion
872          #region platformWorker          #region platformWorker
873          private static Image DefaultPlatformImage = Properties.Resources.DefaultPlatformImage;          private static Image DefaultPlatformImage = Properties.Resources.DefaultPlatformImage;
874          private object platformimage_lock = new object();          private object platformimage_lock = new object();
875          private void platformWorker_DoWork(object sender, DoWorkEventArgs e)          private void platformWorker_DoWork (object sender, DoWorkEventArgs e)
876          {                  {
877              Stopwatch t = e.Argument as Stopwatch;                          Stopwatch t = e.Argument as Stopwatch;
878              PlatformParser parser = new PlatformParser(Config.RomPath);                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);
             double count = 0;  
             double total_count = parser.Platforms.Count;  
             CustomProgressBar bar = new CustomProgressBar();  
             bar.Font = ResizeFont(GetFormFont(), PROGRESS_BAR_FONT_SIZE);  
879  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE
880              bar.ShowPercentageLabel = false;              progress_bar.ShowPercentageLabel = false;
881  #endif  #endif
882              bar.ProgressColor = Color.LimeGreen;                          progress_bar.ProgressColor = Color.LimeGreen;
883              bar.Dock = DockStyle.Top;                          progress_bar.Dock = DockStyle.Top;
884                            
885              if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate() { this.Controls.Add(bar); }); }                          if (this.InvokeRequired) {
886              else { this.Controls.Add(bar); }                                  this.Invoke ((MethodInvoker)delegate() {
887              bar.Invoke(new MethodInvoker(delegate { bar.Margin = new System.Windows.Forms.Padding(0); bar.Size = new Size(GetFormWidth() - 25, 100); }));                                          this.Controls.Add (progress_bar);
888              foreach (IEmuConfig config in parser.Platforms)                                  });
889              {                          } else {
890                  bar.Invoke(new MethodInvoker(delegate { bar.Value = (int)(100.0 * (count / total_count)); }));                                  this.Controls.Add (progress_bar);
891                            }
892                            progress_bar.Invoke (new MethodInvoker (delegate {
893                                    progress_bar.Margin = new System.Windows.Forms.Padding (0);
894                                    progress_bar.Size = new Size (GetFormWidth () - 25, 100);
895                            }));
896    
897                            HashSet<IEmuConfig> platforms = new HashSet<IEmuConfig>();
898                            using (PlatformParser parser = new PlatformParser (Config.RomPath, new ProgressEvent (worker_progress_event))) {
899                                    foreach (var platform in parser.Platforms) {
900                                            platforms.Add(platform);
901                                    }
902                            }
903    
904    
905                            double count = 0;
906                            double total_count = platforms.Count;
907                            if (total_count > 0) {
908                                    progress_bar.Invoke (new MethodInvoker (delegate {
909                                            progress_bar.Message = string.Format ("Please Wait Loading {0} Rom Platforms...", total_count);
910                                    }));
911                            }
912                            foreach (IEmuConfig config in platforms) {
913                                    progress_bar.Invoke (new MethodInvoker (delegate {
914                                            progress_bar.Value = (int)(100.0 * (count / total_count));
915                                    }));
916                                    
917                  PlatformControl platform_ctrl = new PlatformControl();                                  PlatformControl platform_ctrl = new PlatformControl ();
918                  platform_ctrl.Font = GetFormFont();                                  platform_ctrl.Font = GetFormFont ();
919                  platform_ctrl.Dock = DockStyle.Top;                                  platform_ctrl.Dock = DockStyle.Top;
920                  platform_ctrl.Width = this.Width - 10;                                  platform_ctrl.Width = this.Width - 10;
921                  platform_ctrl.Tag = config;                                  platform_ctrl.Tag = config;
922                  try                                  try {
923                  {                                          lock (platformimage_lock) {
924                      lock (platformimage_lock)                                                  //gLog.Debug.WriteLine ("handling platform: {0}", config.ToString ());
925                      {                                                  if(String.IsNullOrEmpty(config.PlatformImage)) {
926                          platform_ctrl.PlatformImage = config.PlatformImage == null ? (Image)DefaultPlatformImage.Clone() : (Image)config.PlatformImage.Clone();                                                          platform_ctrl.PlatformImage = (Image)DefaultPlatformImage.Clone ();
927                          config.ReleasePlatformImageResource();                                                  }
928                      }                                                  else {
929                  }                                                          string path = config.GetFullPlatformImage();
930                  catch (Exception ex)                                                          platform_ctrl.PlatformImage = Image.FromFile(path);
931                  {                                                  }
932                                            }
933                                    } catch (Exception ex) {
934                                            gLog.Error.WriteLine (ex.Message);
935                                            gLog.Verbose.Error.WriteLine (ex.ToString());
936                      throw ex;                      throw ex;
937                  }                  }
938                  platform_ctrl.PlatformName = config.ToString();                  platform_ctrl.PlatformName = config.ToString();
# Line 852  namespace EmuXPortal Line 943  namespace EmuXPortal
943                  else { platform_flow.Controls.Add(platform_ctrl); }                                    else { platform_flow.Controls.Add(platform_ctrl); }                  
944                  count++;                  count++;
945              }              }
946              bar.Invoke(new MethodInvoker(delegate { bar.Value = 1; bar.Update(); }));              progress_bar.Invoke(new MethodInvoker(delegate {
947              if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate() { this.Controls.Remove(bar); }); } else { this.Controls.Remove(bar); }                  progress_bar.Value = 0; progress_bar.Update();
948              e.Result = t;                          }));        
949              parser.Dispose();              e.Result = t;
950          }          }
951          private void platformWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { }          private void platformWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { }
952          private void platformWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)          private void platformWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
953          {          {
954                            gLog.Debug.WriteLine("platformWorker_RunWorkerCompleted called");
955                            if (this.InvokeRequired) {
956                 this.Invoke((MethodInvoker)delegate() {
957                                            progress_bar.Message = "";
958                                            this.Controls.Remove(progress_bar);
959                    });
960                }
961                else {
962                                    progress_bar.Message = "";
963                                    this.Controls.Remove(progress_bar);
964                    }
965              Stopwatch t = e.Result as Stopwatch;              Stopwatch t = e.Result as Stopwatch;
966              if (platform_flow.Controls.Count == 0)              if (platform_flow.Controls.Count == 0)
967              {              {
# Line 884  namespace EmuXPortal Line 986  namespace EmuXPortal
986                          } else {                          } else {
987                                  platform_flow.Controls[0].Select();                                  platform_flow.Controls[0].Select();
988                          }                          }
989             //gLog.Profiler.WriteLine("PlatformParser took: {0}s to parse platforms", (int)t.Elapsed.TotalSeconds);                          t.Stop();
990               gLog.Profiler.WriteLine("PlatformParser took: {0}s to parse platforms", (int)t.Elapsed.TotalSeconds);
991          }          }
992          #endregion          #endregion
993    

Legend:
Removed from v.324  
changed lines
  Added in v.327

  ViewVC Help
Powered by ViewVC 1.1.22