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

Legend:
Removed from v.286  
changed lines
  Added in v.296

  ViewVC Help
Powered by ViewVC 1.1.22