/[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 355 by william, Tue Dec 19 20:15:02 2017 UTC revision 377 by william, Thu May 2 03:09:26 2019 UTC
# Line 1  Line 1 
1  #define HAVE_X11_BORDERSTYLE_ERROR // indicates that there is an error with Control.set_InternalBorderStyle resulting in an X11 Error BadWindow (invalid Window parameter)  #define HAVE_X11_BORDERSTYLE_ERROR // indicates that there is an error with Control.set_InternalBorderStyle resulting in an X11 Error BadWindow (invalid Window parameter)
2    
3  //#define DISABLE_CURSOR_HIDE // when this is present, the cursor will not be hidden  //#define DISABLE_CURSOR_HIDE // when this is present, the cursor will not be hidden
4  //#define DISABLE_PROGRESS_PERCENTAGE_MESSASGE // when this is present, no progress percent message will be shown on any progressbar  //#define DISABLE_PROGRESS_PERCENTAGE_MESSASGE // when this is present, no progress percent message will be shown on any progressbar
5    
6  #define DISABLE_RELEASE_MODE_KLOGLEVEL_DEBUG // when defined will turn off kLogLevel_Debug messages, in release mode  #define DISABLE_RELEASE_MODE_KLOGLEVEL_DEBUG // when defined will turn off kLogLevel_Debug messages, in release mode
7  //#define DISABLE_DEBUG_MODE_KLOGLEVEL_VERBOSE_DEBUG // when defined will turn off kLogLevel_VerboseDebug message, in debug mode  //#define DISABLE_DEBUG_MODE_KLOGLEVEL_VERBOSE_DEBUG // when defined will turn off kLogLevel_VerboseDebug message, in debug mode
8    
9  using System;  using System;
10  using System.Collections.Generic;  using System.Collections.Generic;
11  using System.ComponentModel;  using System.ComponentModel;
# Line 23  using Enterprise.Logging; Line 23  using Enterprise.Logging;
23  using System.IO;  using System.IO;
24  using Enterprise.CrossPlatform;  using Enterprise.CrossPlatform;
25    
26  namespace EmuXPortal  namespace EmuXPortal {
27  {                public partial class Form1 : Form {
     public partial class Form1 : Form  
     {  
28                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR = System.Drawing.Color.Lime;                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR = System.Drawing.Color.Lime;
29                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR_ERROR = System.Drawing.Color.Yellow;                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR_ERROR = System.Drawing.Color.Yellow;
30                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR_LAUNCH = System.Drawing.Color.Blue;                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR_LAUNCH = System.Drawing.Color.Blue;
31                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR_MISSING = System.Drawing.Color.Red;                  static readonly System.Drawing.Color DEFAULT_TEXTFORECOLOR_MISSING = System.Drawing.Color.Red;
32    
33    
34                  static bool bUserAbort =false;                  static bool bUserAbort = false;
35          static readonly Color SELECTED_CONTROL_BACKCOLOR = Color.SteelBlue;                  static readonly Color SELECTED_CONTROL_BACKCOLOR = Color.SteelBlue;
36          const float PROGRESS_BAR_FONT_SIZE = 24;                  const float PROGRESS_BAR_FONT_SIZE = 24;
37          private delegate Font Delegate_GetFormFont();                  private delegate Font Delegate_GetFormFont ();
38          private delegate Font Delegate_ResizeFont(Font font, float size);                  private delegate Font Delegate_ResizeFont (Font font, float size);
39          IEmuConfig CurrentSelectedRom = null;                  IEmuConfig CurrentSelectedRom = null;
40          PlatformControl CurrentPlatformControl = null;                  PlatformControl CurrentPlatformControl = null;
41                  int SavedPlatformIndex= -1;                  int SavedPlatformIndex = -1;
42          GameControl CurrentGameControl = null;                  GameControl CurrentGameControl = null;
43                  private CustomProgressBar progress_bar;                  private CustomProgressBar progress_bar;
44                  private IPlatformCache cache = null;                  private IPlatformCache cache = null;
45    
46                  static bool OnAbort()                  static bool OnAbort ()
47          {                  {
48              return bUserAbort;                          return bUserAbort;
49          }                  }
50          #region unhandled exception support                  #region unhandled exception support
51          static void Application_Unhandled_ThreadException(object sender, ThreadExceptionEventArgs e)                  static void Application_Unhandled_ThreadException (object sender, ThreadExceptionEventArgs e)
52          {                  {
53              UnhandledExceptionEventArgs uea = new UnhandledExceptionEventArgs(e.Exception, false);                          UnhandledExceptionEventArgs uea = new UnhandledExceptionEventArgs (e.Exception, false);
54              UnhandledExceptionEventHandler(sender, uea);                          UnhandledExceptionEventHandler (sender, uea);
55          }                  }
56          static void UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs args)                  static void UnhandledExceptionEventHandler (object sender, UnhandledExceptionEventArgs args)
57          {                              {
58              Exception ex = (args.ExceptionObject as Exception);                          Exception ex = (args.ExceptionObject as Exception);
59              if (sender == null)                          if (sender == null) {
60              {                                  gLog.Error.WriteLine ("Caught an unhandled exception from an unkown source");
61                  gLog.Error.WriteLine("Caught an unhandled exception from an unkown source");                          } else {
62              }                                  gLog.Error.WriteLine ("Caught an unhandled exception from type: {0}", sender.GetType ().Name);
63              else                          }
64              {  
65                  gLog.Error.WriteLine("Caught an unhandled exception from type: {0}", sender.GetType().Name);                          if (ex == null) {
66              }                                  gLog.Error.WriteLine ("The exception object was null -- it probably is not derived from System.Exception");
67                            } else {
68              if (ex == null)                                  ex = ex.GetBaseException ();
69              {                                  gLog.Error.WriteLine ("{0}:", ex.GetType ().Name);
70                  gLog.Error.WriteLine("The exception object was null -- it probably is not derived from System.Exception");                                  gLog.Verbose.Error.WriteLine (ex.ToString ());
71              }                          }
72              else  
73              {                  }
74                  ex = ex.GetBaseException();                  #endregion
75                  gLog.Error.WriteLine("{0}:", ex.GetType().Name);                  public Form1 ()
76                  gLog.Verbose.Error.WriteLine(ex.ToString());                  {
77              }                                      InitializeComponent ();
78                                        this.progress_bar = new CustomProgressBar ();
79          }                          this.KeyPreview = true;
80          #endregion  
81          public Form1()                          #region logging support
82          {                          string log_path = Application.StartupPath;
83              InitializeComponent();                          string log_filename = string.Format ("{0}.log", typeof (Form1).Assembly.GetName ().Name);
84                          this.progress_bar = new CustomProgressBar();                          FileInfo log_file = new FileInfo (OSInfo.FormatPath (string.Format (@"{0}\{1}", log_path, log_filename)));
85                          this.KeyPreview = true;  
86                                    gLog.CreateLog (log_file.Name, true, LogLevel.kLogLevel_All_NoProgress, new EventHandler<LoggerOnFlushEventArgs> (Log_OnFlush));
             #region logging support  
             string log_path = Application.StartupPath;  
             string log_filename = string.Format("{0}.log", typeof(Form1).Assembly.GetName().Name);  
                         FileInfo log_file = new FileInfo(OSInfo.FormatPath(string.Format(@"{0}\{1}", log_path, log_filename)));  
   
             gLog.CreateLog(log_file.Name, true, LogLevel.kLogLevel_All_NoProgress, new EventHandler<LoggerOnFlushEventArgs>(Log_OnFlush));  
87  #if DEBUG  #if DEBUG
88              LogLevel gLevel = gLog.LogLevel;                          LogLevel gLevel = gLog.LogLevel;
89  #if DISABLE_DEBUG_MODE_KLOGLEVEL_VERBOSE_DEBUG  #if DISABLE_DEBUG_MODE_KLOGLEVEL_VERBOSE_DEBUG
90              gLevel &= ~LogLevel.kLogLevel_VerboseDebug;              gLevel &= ~LogLevel.kLogLevel_VerboseDebug;
91  #else  #else
92              gLevel |= LogLevel.kLogLevel_VerboseDebug;                          gLevel |= LogLevel.kLogLevel_VerboseDebug;
93  #endif  #endif
94              gLevel |= LogLevel.kLogLevel_Debug;                          gLevel |= LogLevel.kLogLevel_Debug;
95              gLog.SetLogLevel(gLevel);                          gLog.SetLogLevel (gLevel);
96  #else  #else
97              LogLevel gLevel = LogLevel.kLogLevel_Default; // set the default log level: Info, Warn, Error, Debug              LogLevel gLevel = LogLevel.kLogLevel_Default; // set the default log level: Info, Warn, Error, Debug
98              // it is OK for kLogLevel_Debug to be set in Release mode ... must of the chatty messages are from kLogLevel_VerboseDebug              // it is OK for kLogLevel_Debug to be set in Release mode ... must of the chatty messages are from kLogLevel_VerboseDebug
# Line 112  namespace EmuXPortal Line 104  namespace EmuXPortal
104              gLevel &= ~LogLevel.kLogLevel_VerboseDebug; // ensure this is not set, ever in release mode                      gLevel &= ~LogLevel.kLogLevel_VerboseDebug; // ensure this is not set, ever in release mode        
105              gLog.SetLogLevel(gLevel);              gLog.SetLogLevel(gLevel);
106  #endif  #endif
107              #endregion                          #endregion
108    
109              #region unhandled exception support                          #region unhandled exception support
110  //            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionEventHandler);                          //            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionEventHandler);
111  //            Application.ThreadException += Application_Unhandled_ThreadException;                          //            Application.ThreadException += Application_Unhandled_ThreadException;
112              #endregion                          #endregion
113    
114              platform_flow.Dock = DockStyle.Fill;                          platform_flow.Dock = DockStyle.Fill;
115              rom_flow.Dock = DockStyle.Fill;                          rom_flow.Dock = DockStyle.Fill;
116    
117  //            this.PreviewKeyDown += Form1_PreviewKeyDown;                          //            this.PreviewKeyDown += Form1_PreviewKeyDown;
118  //            this.KeyPreview = true;                          //            this.KeyPreview = true;
119                          //progress_bar.PreviewKeyDown += Progress_bar_PreviewKeyDown;                          //progress_bar.PreviewKeyDown += Progress_bar_PreviewKeyDown;
120                          this.KeyDown += Form1_KeyDown;                          this.KeyDown += Form1_KeyDown;
121                            
122          }                  }
123    
124          void Form1_KeyDown (object sender, KeyEventArgs e)                  void Form1_KeyDown (object sender, KeyEventArgs e)
125                  {                  {
126                          if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Escape) {                                                        if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Escape) {
127                                  bAbortRomCopyToLocalCache = true; // this will cancel any copy operations                                  bAbortRomCopyToLocalCache = true; // this will cancel any copy operations
128                          }                          }
129          }                  }
130    
131          
132    
133          
134  #region logging support                  #region logging support
135          void Log_OnFlush(object sender, LoggerOnFlushEventArgs e) { OnLogFlush(e.Buffer); }                  void Log_OnFlush (object sender, LoggerOnFlushEventArgs e) { OnLogFlush (e.Buffer); }
136          void OnLogFlush(string logmessage)                  void OnLogFlush (string logmessage)
137          {                  {
138              //if (this.IsDisposed) { return; }                          //if (this.IsDisposed) { return; }
139              ////UpdateStatus(logmessage);                          ////UpdateStatus(logmessage);
140              ////UpdateLogOutput(logmessage);                          ////UpdateLogOutput(logmessage);
141              //Application.DoEvents();                          //Application.DoEvents();
142          }                  }
143  #endregion                  #endregion
144    
145                  private bool bCachedLoaded = false;                  private bool bCachedLoaded = false;
146                  private bool OnCacheLoaded() {                  private bool OnCacheLoaded ()
147                    {
148                          return bCachedLoaded;                          return bCachedLoaded;
149                  }                  }
150    
151          private void Form1_Load(object sender, EventArgs e)                  private void Form1_Load (object sender, EventArgs e)
152          {                  {
153    
154                          SplashLoader loader = new SplashLoader(new AbortEvent(OnCacheLoaded));                          SplashLoader loader = new SplashLoader (new AbortEvent (OnCacheLoaded));
155                          loader.Show();                          loader.Show ();
156                          cache = PlatformCache.Create (new AbortEvent (OnAbort));                          cache = PlatformCache.Create (new AbortEvent (OnAbort));
157              Config.LoadConfig(cache);                          Config.LoadConfig (cache);
158              Config.InitializePresentationForm(this);                          Config.InitializePresentationForm (this);
159                          bCachedLoaded = true;                          bCachedLoaded = true;
160    
161          }                  }
162          private void Form1_Shown(object sender, EventArgs e)                  private void Form1_Shown (object sender, EventArgs e)
163          {                  {
164              platform_flow.Visible = true;                          platform_flow.Visible = true;
165  #if !DISABLE_CURSOR_HIDE  #if !DISABLE_CURSOR_HIDE
166              Cursor.Hide();                          Cursor.Hide ();
167  #else  #else
168              Cursor.Show();              Cursor.Show();
169  #endif  #endif
170                            
171          }                  }
172                  private bool bAbortRomCopyToLocalCache = false;                  private bool bAbortRomCopyToLocalCache = false;
173          private bool OnAbortRomCopyToLocalCache ()                  private bool OnAbortRomCopyToLocalCache ()
174                  {                  {
175                          return bAbortRomCopyToLocalCache;                          return bAbortRomCopyToLocalCache;
176                  }                  }
177    
178                  private void DeleteRomFromLocalCache (string rom_file, string rom_image)                  private void DeleteRomFromLocalCache (string rom_file, string rom_image)
179                  {                                        {
180                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);
181                          #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE
182                                  progress_bar.ShowPercentageLabel = false;                                  progress_bar.ShowPercentageLabel = false;
183                          #endif  #endif
184                          progress_bar.ProgressColor = Color.LimeGreen;                          progress_bar.ProgressColor = Color.LimeGreen;
185                          progress_bar.Dock = DockStyle.Top;                          progress_bar.Dock = DockStyle.Top;
186                          if (this.InvokeRequired) {                          if (this.InvokeRequired) {
187                                  this.Invoke ((MethodInvoker)delegate() {                                  this.Invoke ((MethodInvoker)delegate () {
188                                          this.Controls.Add (progress_bar);                                          this.Controls.Add (progress_bar);
189                                  });                                  });
190                          } else {                          } else {
# Line 204  namespace EmuXPortal Line 197  namespace EmuXPortal
197                          Application.DoEvents ();                          Application.DoEvents ();
198                          if (!string.IsNullOrEmpty (rom_image)) {                          if (!string.IsNullOrEmpty (rom_image)) {
199                                  if (rom_image.ToLower ().Contains (Config.RomPath.ToLower ())) {                                  if (rom_image.ToLower ().Contains (Config.RomPath.ToLower ())) {
200                                          gLog.Warn.WriteLine("Not deleteing rom image in path: {0}", rom_image);                                          gLog.Warn.WriteLine ("Not deleteing rom image in path: {0}", rom_image);
201                                          return;                                          return;
202                                  }                                  }
203                                  progress_bar.Message = string.Format("Deleting local rom image: {0}", EmuXPortal.Api.Win32.CompactPath(rom_image));                                  progress_bar.Message = string.Format ("Deleting local rom image: {0}", EmuXPortal.Api.Win32.CompactPath (rom_image));
204                                  File.Delete(rom_image);                                  File.Delete (rom_image);
205                                  progress_bar.Value = 50;                                  progress_bar.Value = 50;
206    
207                          }                          }
208                          if (!string.IsNullOrEmpty (rom_file)) {                          if (!string.IsNullOrEmpty (rom_file)) {
209                                  if (rom_image.ToLower ().Contains (Config.RomPath.ToLower ())) {                                  if (rom_image.ToLower ().Contains (Config.RomPath.ToLower ())) {
210                                          gLog.Warn.WriteLine("Not deleteing rom file in path: {0}", rom_file);                                          gLog.Warn.WriteLine ("Not deleteing rom file in path: {0}", rom_file);
211                                          return;                                          return;
212                                  }                                  }
213                                  progress_bar.Message = string.Format("Deleting local rom file: {0}", EmuXPortal.Api.Win32.CompactPath(rom_file));                                  progress_bar.Message = string.Format ("Deleting local rom file: {0}", EmuXPortal.Api.Win32.CompactPath (rom_file));
214                                  File.Delete(rom_file);                                  File.Delete (rom_file);
215                                  progress_bar.Value = 100;                                  progress_bar.Value = 100;
216                          }                          }
217                          if (this.InvokeRequired) {                          if (this.InvokeRequired) {
218                                  this.Invoke ((MethodInvoker)delegate() {                                  this.Invoke ((MethodInvoker)delegate () {
219                                          this.Controls.Remove (progress_bar);                                          this.Controls.Remove (progress_bar);
220                                  });                                  });
221                          } else {                          } else {
222                                  this.Controls.Remove (progress_bar);                                  this.Controls.Remove (progress_bar);
223                          }                          }
224                          Application.DoEvents ();                          Application.DoEvents ();
225                  }                  }
226          private void CopyRomToLocalCache (string src_rom_file, string dst_rom_file, string src_rom_image, string dst_rom_image)                  private void CopyRomToLocalCache (string src_rom_file, string dst_rom_file, string src_rom_image, string dst_rom_image)
227                  {                  {
228                          bAbortRomCopyToLocalCache = false; // reset the copy abort flag                          bAbortRomCopyToLocalCache = false; // reset the copy abort flag
229                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);
230                          #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE
231                                  progress_bar.ShowPercentageLabel = false;                                  progress_bar.ShowPercentageLabel = false;
232                          #endif  #endif
233                          progress_bar.ProgressColor = Color.LimeGreen;                          progress_bar.ProgressColor = Color.LimeGreen;
234                          progress_bar.Dock = DockStyle.Top;                          progress_bar.Dock = DockStyle.Top;
235                          if (this.InvokeRequired) {                          if (this.InvokeRequired) {
236                                  this.Invoke ((MethodInvoker)delegate() {                                  this.Invoke ((MethodInvoker)delegate () {
237                                          this.Controls.Add (progress_bar);                                          this.Controls.Add (progress_bar);
238                                  });                                  });
239                          } else {                          } else {
# Line 257  namespace EmuXPortal Line 250  namespace EmuXPortal
250                                  cp = new FileProgressCopier (src_rom_image, dst_rom_image, new CopyProgressEvent (OnFileCopyProgress), new AbortEvent (OnAbortRomCopyToLocalCache));                                  cp = new FileProgressCopier (src_rom_image, dst_rom_image, new CopyProgressEvent (OnFileCopyProgress), new AbortEvent (OnAbortRomCopyToLocalCache));
251                                  cp.Start ();                                  cp.Start ();
252                                  while (!cp.CopyFinished) {                                  while (!cp.CopyFinished) {
253                                          Application.DoEvents();                                          Application.DoEvents ();
254                                  }                                  }
255                          }                          }
256                          if (!string.IsNullOrEmpty (src_rom_file) && !string.IsNullOrEmpty (dst_rom_file)) {                          if (!string.IsNullOrEmpty (src_rom_file) && !string.IsNullOrEmpty (dst_rom_file)) {
# Line 265  namespace EmuXPortal Line 258  namespace EmuXPortal
258                                  cp = new FileProgressCopier (src_rom_file, dst_rom_file, new CopyProgressEvent (OnFileCopyProgress), new AbortEvent (OnAbortRomCopyToLocalCache));                                  cp = new FileProgressCopier (src_rom_file, dst_rom_file, new CopyProgressEvent (OnFileCopyProgress), new AbortEvent (OnAbortRomCopyToLocalCache));
259                                  cp.Start ();                                  cp.Start ();
260                                  while (!cp.CopyFinished) {                                  while (!cp.CopyFinished) {
261                                          Application.DoEvents();                                          Application.DoEvents ();
262                                  }                                  }
263                          }                          }
264                          if (this.InvokeRequired) {                          if (this.InvokeRequired) {
265                                  this.Invoke ((MethodInvoker)delegate() {                                  this.Invoke ((MethodInvoker)delegate () {
266                                          this.Controls.Remove (progress_bar);                                          this.Controls.Remove (progress_bar);
267                                  });                                  });
268                          } else {                          } else {
269                                  this.Controls.Remove (progress_bar);                                  this.Controls.Remove (progress_bar);
270                          }                          }
271                          Application.DoEvents ();                          Application.DoEvents ();
         }  
                 public void OnFileCopyProgress (object sender, int progress, string message)  
                 {  
                         //gLog.Debug.WriteLine("{0} [{1}%]", message, progress);  
   
                         if (progress_bar.InvokeRequired) {  
                                         progress_bar.Invoke (new MethodInvoker (delegate {  
                                                 progress_bar.Message = message;  
                                                 progress_bar.Value = progress;  
                                                 progress_bar.Update ();  
                                                 Application.DoEvents();  
                                         }));  
                                 } else {  
                                         progress_bar.Message = message;  
                                         progress_bar.Value = progress;  
                                         progress_bar.Update ();  
                                         Application.DoEvents();  
                                 }  
272                  }                  }
273          void ReleasePlatformControlStreams ()                  public void OnFileCopyProgress (object sender, int progress, string message)
274                    {
275                            //gLog.Debug.WriteLine("{0} [{1}%]", message, progress);
276    
277                            if (progress_bar.InvokeRequired) {
278                                    progress_bar.Invoke (new MethodInvoker (delegate {
279                                            progress_bar.Message = message;
280                                            progress_bar.Value = progress;
281                                            progress_bar.Update ();
282                                            Application.DoEvents ();
283                                    }));
284                            } else {
285                                    progress_bar.Message = message;
286                                    progress_bar.Value = progress;
287                                    progress_bar.Update ();
288                                    Application.DoEvents ();
289                            }
290                    }
291                    void ReleasePlatformControlStreams ()
292                  {                  {
293                          foreach (var c in platform_flow.Controls) {                          foreach (var c in platform_flow.Controls) {
294                                  if (c.GetType () == typeof(PlatformControl)) {                                  if (c.GetType () == typeof (PlatformControl)) {
295                                          PlatformControl pc = (c as PlatformControl);                                          PlatformControl pc = (c as PlatformControl);
296                                          if (pc != null) {                                          if (pc != null) {
297                                                  pc.ReleasePlatformStream();                                                  pc.ReleasePlatformStream ();
298                                          }                                          }
299                                  }                                  }
300                          }                          }
301          }                  }
302                  void ReleaseGameControlStreams() {                  void ReleaseGameControlStreams ()
303                    {
304                          foreach (var c in rom_flow.Controls) {                          foreach (var c in rom_flow.Controls) {
305                                  if (c.GetType () == typeof(GameControl)) {                                  if (c.GetType () == typeof (GameControl)) {
306                                          GameControl gc = (c as GameControl);                                          GameControl gc = (c as GameControl);
307                                          if (gc != null) {                                          if (gc != null) {
308                                                  gc.ReleaseGameStream();                                                  gc.ReleaseGameStream ();
309                                          }                                          }
310                                  }                                  }
311                          }                          }
312          }                  }
313          void platform_ctrl_LostFocus(object sender, EventArgs e)                  void platform_ctrl_LostFocus (object sender, EventArgs e)
314          {                  {
315              PlatformControl c = sender as PlatformControl;                          PlatformControl c = sender as PlatformControl;
316                          if (c != null) {                          if (c != null) {
317                                  #if !HAVE_X11_BORDERSTYLE_ERROR  #if !HAVE_X11_BORDERSTYLE_ERROR
318                                  c.BorderStyle = BorderStyle.None;                                  c.BorderStyle = BorderStyle.None;
319                                  #endif  #endif
320                                  c.BackColor = this.BackColor;                                  c.BackColor = this.BackColor;
321                          }                          }
322          }                  }
323    
324          void platform_ctrl_GotFocus(object sender, EventArgs e)                  void platform_ctrl_GotFocus (object sender, EventArgs e)
325          {                                        {
326              PlatformControl c = sender as PlatformControl;                          PlatformControl c = sender as PlatformControl;
327                          if (c != null) {                          if (c != null) {
328                                  #if !HAVE_X11_BORDERSTYLE_ERROR  #if !HAVE_X11_BORDERSTYLE_ERROR
329                                  c.BorderStyle = BorderStyle.FixedSingle;                                  c.BorderStyle = BorderStyle.FixedSingle;
330                                  #endif  #endif
331                                  c.BackColor = SELECTED_CONTROL_BACKCOLOR;                                  c.BackColor = SELECTED_CONTROL_BACKCOLOR;
332                                  CurrentPlatformControl = c;                                  CurrentPlatformControl = c;
333                          }                          }
334          }                  }
335    
336          void game_ctrl_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)                  void game_ctrl_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)
337                  {                  {
338                          //gLog.Verbose.Debug.WriteLine ("game_ctrl_PreviewKeyDown() fired -- keycode [{0}]", e.KeyCode);                          //gLog.Verbose.Debug.WriteLine ("game_ctrl_PreviewKeyDown() fired -- keycode [{0}]", e.KeyCode);
339                          GameControl c = sender as GameControl;                          GameControl c = sender as GameControl;
340    
341                          int changeAmount = 0;                          int changeAmount = 0;
342                          int currentPosition = 0;                          int currentPosition = 0;
343                          IRomConfig config = null;                          IRomConfig config = null;
344                          if (e.KeyCode == Keys.C && (e.Modifiers & Keys.Control) == Keys.Control) {                                                        if (e.KeyCode == Keys.C && (e.Modifiers & Keys.Control) == Keys.Control) {
345                                  config = (c.Tag as IRomConfig);                                  config = (c.Tag as IRomConfig);
346                                  if (config != null) {                                  if (config != null) {
347                                          string platform_short = config.EmuConfig.PlatformNameShort;                                          string platform_short = config.EmuConfig.PlatformNameShort;
# Line 358  namespace EmuXPortal Line 352  namespace EmuXPortal
352                                          string rom_imagefilename = "";                                          string rom_imagefilename = "";
353                                          FileInfo fi = null;                                          FileInfo fi = null;
354                                          try {                                          try {
355                                                  fi = new FileInfo (rom_file);                                                  if (!string.IsNullOrEmpty (rom_file)) {
356                                                  rom_filename = fi.Name;                                                          fi = new FileInfo (rom_file);
357                                                            rom_filename = fi.Name;
358                                                    }
359                                          } finally {                                          } finally {
360                                                  fi = null;                                                  fi = null;
361                                          }                                          }
362                                          try {                                          try {
363                                                  fi = new FileInfo (rom_image);                                                  if (!string.IsNullOrEmpty (rom_image)) {
364                                                  rom_imagefilename = fi.Name;                                                          fi = new FileInfo (rom_image);
365                                                            rom_imagefilename = fi.Name;
366                                                    }
367                                          } finally {                                          } finally {
368                                                  fi = null;                                                  fi = null;
369                                          }                                          }
370    
371                                          string local_path = Config.LocalRomPath.TrimEnd (new char[]{ '/' });                                          string local_path = Config.LocalRomPath.TrimEnd (new char [] { '/' });
372                                          string local_rom_path = string.Format ("{0}/{1}", local_path, platform_short);                                          string local_rom_path = string.Format ("{0}/{1}", local_path, platform_short);
373                                          string local_romfile = OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_filename));                                          string local_romfile = string.IsNullOrEmpty(rom_filename) ? "" : OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_filename));
374                                          string local_romimage = OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_imagefilename));                                          string local_romimage = string.IsNullOrEmpty(rom_imagefilename) ? "" : OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_imagefilename));
375    
376                                          // create the local rom path for this platform                                          if (string.IsNullOrEmpty (local_romfile)) {
377                                                    gLog.Error.WriteLine ("Local rom file could not be found. [src rom={0}]", rom_file);
378                                                    return;
379                                            }
380    
381                                            // create the local rom path for this platform
382                                          DirectoryInfo di = new DirectoryInfo (local_rom_path);                                          DirectoryInfo di = new DirectoryInfo (local_rom_path);
383                                          if (!di.Exists) {                                          if (!di.Exists) {
384                                                  di.Create ();                                                  di.Create ();
# Line 385  namespace EmuXPortal Line 388  namespace EmuXPortal
388                                          this.Enabled = true;                                          this.Enabled = true;
389                                  }                                  }
390                          }                          }
391                          if (e.KeyCode == Keys.D && (e.Modifiers & Keys.Control) == Keys.Control) {                                                                                        if (e.KeyCode == Keys.D && (e.Modifiers & Keys.Control) == Keys.Control) {
392                                  config = (c.Tag as IRomConfig);                                  config = (c.Tag as IRomConfig);
393                                  if (config != null) {                                  if (config != null) {
394                                          string platform_short = config.EmuConfig.PlatformNameShort;                                          string platform_short = config.EmuConfig.PlatformNameShort;
# Line 407  namespace EmuXPortal Line 410  namespace EmuXPortal
410                                          } finally {                                          } finally {
411                                                  fi = null;                                                  fi = null;
412                                          }                                          }
413                                          string local_path = Config.LocalRomPath.TrimEnd (new char[]{ '/' });                                          string local_path = Config.LocalRomPath.TrimEnd (new char [] { '/' });
414                                          string local_rom_path = string.Format ("{0}/{1}", local_path, platform_short);                                          string local_rom_path = string.Format ("{0}/{1}", local_path, platform_short);
415                                          string local_romfile = OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_filename));                                          string local_romfile = OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_filename));
416                                          string local_romimage = OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_imagefilename));                                          string local_romimage = OSInfo.FormatPath (string.Format ("{0}/{1}", local_rom_path, rom_imagefilename));
# Line 422  namespace EmuXPortal Line 425  namespace EmuXPortal
425                                          gLog.Error.WriteLine ("Unable to add/remove from/to favorites (config) is null");                                          gLog.Error.WriteLine ("Unable to add/remove from/to favorites (config) is null");
426                                  } else {                                  } else {
427                                          var isFavorite = RomFavorite.IsFavorite (config);                                          var isFavorite = RomFavorite.IsFavorite (config);
428                                          if (isFavorite) {                                          if (isFavorite) {
429                                                  // add to favorites                                                  // add to favorites
430                                                  //gLog.Debug.WriteLine("Removing from favorites: {0} [{1}]", config.RomTitle, config.RomFile);                                                  //gLog.Debug.WriteLine("Removing from favorites: {0} [{1}]", config.RomTitle, config.RomFile);
431                                                  if (!RomFavorite.RemoveFavorite (config)) {                                                  if (!RomFavorite.RemoveFavorite (config)) {
432                                                          gLog.Error.WriteLine ("Failed to remove from favorites: {0} [{1}]", config.RomTitle, config.RomFile);                                                          gLog.Error.WriteLine ("Failed to remove from favorites: {0} [{1}]", config.RomTitle, config.RomFile);
433                                                  } else {                                                  } else {
# Line 440  namespace EmuXPortal Line 443  namespace EmuXPortal
443                                                                                  }                                                                                  }
444                                                                          }                                                                          }
445                                                                  }                                                                  }
446                                                          }                                                                                }
447                                                  }                                                  }
448                                          } else {                                          } else {
449                                                  // add to favorites                                                  // add to favorites
450                                                  //gLog.Debug.WriteLine("Adding to favorites: {0} [{1}]", config.RomTitle, config.RomFile);                                                  //gLog.Debug.WriteLine("Adding to favorites: {0} [{1}]", config.RomTitle, config.RomFile);
451                                                  if (!RomFavorite.AddFavorite (config)) {                                                  if (!RomFavorite.AddFavorite (config)) {
452                                                          gLog.Error.WriteLine ("Failed to add to favorites: {0} [{1}]", config.RomTitle, config.RomFile);                                                          gLog.Error.WriteLine ("Failed to add to favorites: {0} [{1}]", config.RomTitle, config.RomFile);
453                                                  } else {                                                  } else {
454                                                          gLog.Info.WriteLine ("Added to favorites: {0} [{1}]", config.RomTitle, config.RomFile);                                                          gLog.Info.WriteLine ("Added to favorites: {0} [{1}]", config.RomTitle, config.RomFile);
455                                                  }                                                  }
456                                          }                                          }
457                                          //gLog.Debug.WriteLine("Updateing favorites");                                          //gLog.Debug.WriteLine("Updateing favorites");
458                                          if (!RomFavorite.UpdateFavorites (cache)) {                                          if (!RomFavorite.UpdateFavorites (cache)) {
459                                                  gLog.Error.WriteLine ("Failed to update favorites");                                                  gLog.Error.WriteLine ("Failed to update favorites");
460                                          } else {                                          } else {
461                                                  gLog.Info.WriteLine ("Updated favorites");                                                  gLog.Info.WriteLine ("Updated favorites");
462                                          }                                          }
463                                  }                                  }
464                                  return; // stop processing other keys                                  return; // stop processing other keys
465    
466                          }                          }
467                          if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Left) {                          if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Left) {
468                                  if (OSInfo.OSIsUnix) {                                  if (OSInfo.OSIsUnix) {
# Line 476  namespace EmuXPortal Line 479  namespace EmuXPortal
479                                          rom_flow.ScrollControlIntoView (ctl);                                          rom_flow.ScrollControlIntoView (ctl);
480                                          rom_flow.ResumeLayout (false);                                          rom_flow.ResumeLayout (false);
481                                  }                                  }
482                          }                                        }
483                          if (e.KeyCode == Keys.Home) {                          if (e.KeyCode == Keys.Home) {
484                                  rom_flow.SuspendLayout ();                                  rom_flow.SuspendLayout ();
485                                  rom_flow.Controls [0].Select ();                                  rom_flow.Controls [0].Select ();
# Line 533  namespace EmuXPortal Line 536  namespace EmuXPortal
536                                  rom_flow.ResumeLayout (false);                                  rom_flow.ResumeLayout (false);
537                          }                          }
538    
539                          if (e.KeyCode == Keys.Enter) {                                                    if (e.KeyCode == Keys.Enter) {
540                                  config = c.Tag as IRomConfig;                                  config = c.Tag as IRomConfig;
541                                  if (config.RomExists) {                                  if (config.RomExists) {
542                                          c.TextForeColor = DEFAULT_TEXTFORECOLOR_LAUNCH;                                          c.TextForeColor = DEFAULT_TEXTFORECOLOR_LAUNCH;
# Line 557  namespace EmuXPortal Line 560  namespace EmuXPortal
560                                                  } else {                                                  } else {
561                                                          p.StartInfo.FileName = binary;                                                          p.StartInfo.FileName = binary;
562                                                          p.StartInfo.Arguments = arguments == null ? "" : arguments;                                                          p.StartInfo.Arguments = arguments == null ? "" : arguments;
563                                                          p.Start ();                                                          p.Start ();
564                                                          // wait for exit of game                                                          // wait for exit of game
565                                                          p.WaitForExit ();                                                          p.WaitForExit ();
566                                                          c.TextForeColor = DEFAULT_TEXTFORECOLOR;                                                          c.TextForeColor = DEFAULT_TEXTFORECOLOR;
567                                                          c.GameName = gamename;                                                          c.GameName = gamename;
# Line 570  namespace EmuXPortal Line 573  namespace EmuXPortal
573                                          }                                          }
574                                  } else {                                  } else {
575                                          c.TextForeColor = Color.Red;                                          c.TextForeColor = Color.Red;
576                                  }                                  }
577              }                          }
578                          if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Escape)                          if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Escape) {
579              {            
580                                                            bAbortRomCopyToLocalCache = true; // this will cancel any copy operations
581                  bAbortRomCopyToLocalCache = true; // this will cancel any copy operations                                  ReleaseGameControlStreams ();
582                                  ReleaseGameControlStreams();                                  SavedPlatformIndex = platform_flow.Controls.IndexOf (CurrentPlatformControl);
583                                  SavedPlatformIndex = platform_flow.Controls.IndexOf (CurrentPlatformControl);                                  rom_flow.Visible = false;
584                  rom_flow.Visible = false;                                  platform_flow.Visible = true;
585                  platform_flow.Visible = true;                          }
586              }  
587                            if ((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z) ||
588              if ((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z) ||                              (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)) {
589                  (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9))                                  rom_flow.SuspendLayout ();
590              {                                  char t = (char)e.KeyCode;
591                  rom_flow.SuspendLayout();                                  GameControl ctrl = (rom_flow.GetNextControl (CurrentGameControl, true) as GameControl);
592                  char t = (char)e.KeyCode;                                  if (ctrl == null) { ctrl = (rom_flow.GetNextControl (rom_flow.Controls [0], true) as GameControl); }
593                  GameControl ctrl = (rom_flow.GetNextControl(CurrentGameControl, true) as GameControl);                                  bool found = false;
594                  if (ctrl == null) { ctrl = (rom_flow.GetNextControl(rom_flow.Controls[0], true) as GameControl); }                                  GameControl pc = CurrentGameControl;
595                  bool found = false;                                  bool wrapped = false;
596                  GameControl pc = CurrentGameControl;                                  bool not_found = true;
597                  bool wrapped = false;                                  while (!found) {
598                  bool not_found = true;                                          if (wrapped) {
599                  while (!found)                                                  foreach (Control ctl in rom_flow.Controls) {
600                  {                                                          GameControl p_ctl = ctl as GameControl; if (p_ctl.GameName.ToLower ().StartsWith (t.ToString ().ToLower ())) { not_found = false; }
601                      if (wrapped)                                                  }
602                      {                                                  if (not_found) { found = true; }
603                          foreach (Control ctl in rom_flow.Controls)                                          }
604                          {                                          ctrl = (rom_flow.GetNextControl (pc, true) as GameControl);
605                              GameControl p_ctl = ctl as GameControl; if (p_ctl.GameName.ToLower().StartsWith(t.ToString().ToLower())) { not_found = false; }                                          if (ctrl == null) {
606                          }                                                  ctrl = rom_flow.Controls [0] as GameControl;
607                          if (not_found) { found = true; }                                                  wrapped = true;
608                      }                                          }
609                      ctrl = (rom_flow.GetNextControl(pc, true) as GameControl);                                          if (ctrl.GameName.ToLower ().StartsWith (t.ToString ().ToLower ())) {
610                      if (ctrl == null)                                                  rom_flow.ScrollControlIntoView (ctrl);
611                      {                                                  ctrl.Select ();
612                          ctrl = rom_flow.Controls[0] as GameControl;                                                  found = true;
613                          wrapped = true;                                          }
614                      }                                          pc = ctrl;
615                      if (ctrl.GameName.ToLower().StartsWith(t.ToString().ToLower()))                                  }
616                      {                                  rom_flow.ResumeLayout (false);
617                          rom_flow.ScrollControlIntoView(ctrl);                          }
618                          ctrl.Select();                  }
619                          found = true;                  void platform_ctrl_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)
620                      }                  {
621                      pc = ctrl;                          //gLog.Verbose.Debug.WriteLine ("platform_ctrl_PreviewKeyDown() fired -- keycode [{0}]", e.KeyCode);
622                  }                          PlatformControl c = sender as PlatformControl;
623                  rom_flow.ResumeLayout(false);                          int changeAmount = 0;
624              }                          int currentPosition = 0;
         }  
         void platform_ctrl_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)  
         {  
                         //gLog.Verbose.Debug.WriteLine ("platform_ctrl_PreviewKeyDown() fired -- keycode [{0}]", e.KeyCode);  
             PlatformControl c = sender as PlatformControl;  
             int changeAmount = 0;  
             int currentPosition = 0;  
625                          if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Left) {                          if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Left) {
626                                  if (OSInfo.OSIsUnix) {                                  if (OSInfo.OSIsUnix) {
627                                          platform_flow.SuspendLayout ();                                          platform_flow.SuspendLayout ();
# Line 641  namespace EmuXPortal Line 637  namespace EmuXPortal
637                                          platform_flow.ScrollControlIntoView (ctl);                                          platform_flow.ScrollControlIntoView (ctl);
638                                          platform_flow.ResumeLayout (false);                                          platform_flow.ResumeLayout (false);
639                                  }                                  }
640                          }                          }
641              if (e.KeyCode == Keys.Home)                          if (e.KeyCode == Keys.Home) {
642              {                                  platform_flow.SuspendLayout ();
643                  platform_flow.SuspendLayout();                                  platform_flow.Controls [0].Select ();
644                  platform_flow.Controls[0].Select();                                  platform_flow.ScrollControlIntoView (platform_flow.Controls [0]);
645                  platform_flow.ScrollControlIntoView(platform_flow.Controls[0]);                                  platform_flow.ResumeLayout (false);
646                  platform_flow.ResumeLayout(false);                          }
647              }                          if (e.KeyCode == Keys.End) {
648              if (e.KeyCode == Keys.End)                                  platform_flow.SuspendLayout ();
649              {                                  platform_flow.Controls [platform_flow.Controls.Count - 1].Select ();
650                  platform_flow.SuspendLayout();                                  platform_flow.ScrollControlIntoView (platform_flow.Controls [platform_flow.Controls.Count - 1]);
651                  platform_flow.Controls[platform_flow.Controls.Count -1].Select();                                  platform_flow.ResumeLayout (false);
652                  platform_flow.ScrollControlIntoView(platform_flow.Controls[platform_flow.Controls.Count - 1]);                          }
653                  platform_flow.ResumeLayout(false);                          if (e.KeyCode == Keys.PageUp) {
654              }                                  platform_flow.SuspendLayout ();
655              if (e.KeyCode == Keys.PageUp)                                  changeAmount = platform_flow.VerticalScroll.LargeChange;
656              {                                  currentPosition = platform_flow.VerticalScroll.Value;
657                  platform_flow.SuspendLayout();                                  if ((currentPosition - changeAmount) > platform_flow.VerticalScroll.Minimum) {
658                  changeAmount = platform_flow.VerticalScroll.LargeChange;                                          platform_flow.VerticalScroll.Value -= changeAmount;
659                  currentPosition = platform_flow.VerticalScroll.Value;                                  } else {
660                  if ((currentPosition - changeAmount) > platform_flow.VerticalScroll.Minimum)                                          platform_flow.VerticalScroll.Value = platform_flow.VerticalScroll.Minimum;
661                  {                                  }
662                      platform_flow.VerticalScroll.Value -= changeAmount;                                  PlatformControl s = platform_ctrl_get_last_visible ();
663                  }                                  s.Select ();
664                  else                                  platform_flow.ScrollControlIntoView (s);
665                  {                                  platform_flow.ResumeLayout (false);
666                      platform_flow.VerticalScroll.Value = platform_flow.VerticalScroll.Minimum;                          }
667                  }                          if (e.KeyCode == Keys.PageDown) {
668                  PlatformControl s = platform_ctrl_get_last_visible();                                  platform_flow.SuspendLayout ();
669                  s.Select();                                  changeAmount = platform_flow.VerticalScroll.LargeChange;
670                  platform_flow.ScrollControlIntoView(s);                                  currentPosition = platform_flow.VerticalScroll.Value;
671                  platform_flow.ResumeLayout(false);                                  if ((currentPosition - changeAmount) < platform_flow.VerticalScroll.Maximum) {
672              }                                          try {
673              if (e.KeyCode == Keys.PageDown)                                                  platform_flow.VerticalScroll.Value += changeAmount;
674              {                                          } catch {
675                  platform_flow.SuspendLayout();                                                  platform_flow.Controls [0].Select ();
676                  changeAmount = platform_flow.VerticalScroll.LargeChange;                                                  platform_flow.ScrollControlIntoView (platform_flow.Controls [0]);
677                  currentPosition = platform_flow.VerticalScroll.Value;                                                  rom_flow.PerformLayout ();
678                  if ((currentPosition - changeAmount) < platform_flow.VerticalScroll.Maximum)                                                  return;
679                  {                                          }
680                      try                                  } else {
681                      {                                          platform_flow.Controls [0].Select ();
682                          platform_flow.VerticalScroll.Value += changeAmount;                                          platform_flow.ScrollControlIntoView (platform_flow.Controls [0]);
683                      }                                  }
684                      catch                                  PlatformControl s = platform_ctrl_get_last_visible ();
685                      {                                  s.Select ();
686                          platform_flow.Controls[0].Select();                                  platform_flow.ScrollControlIntoView (s);
687                          platform_flow.ScrollControlIntoView(platform_flow.Controls[0]);                                  platform_flow.ResumeLayout (false);
688                          rom_flow.PerformLayout();                          }
689                          return;                          if (e.KeyCode == Keys.Enter) {
690                      }                                  ReleasePlatformControlStreams ();
691                  }                                  // load this platform                          
692                  else                                  platform_flow.Visible = false;
693                  {                                  CurrentSelectedRom = c.Tag as IEmuConfig;
694                      platform_flow.Controls[0].Select();                                  rom_flow.Visible = true;
695                      platform_flow.ScrollControlIntoView(platform_flow.Controls[0]);                                  rom_flow.BringToFront ();
696                  }                          }
697                  PlatformControl s = platform_ctrl_get_last_visible();                          if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Escape) {
698                  s.Select();                                  bAbortRomCopyToLocalCache = true;
699                  platform_flow.ScrollControlIntoView(s);                                  ReleasePlatformControlStreams ();
700                  platform_flow.ResumeLayout(false);                                  this.Close ();
701              }                          }
702              if (e.KeyCode == Keys.Enter)                          if ((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z) ||
703              {                              (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)) {
704                                  ReleasePlatformControlStreams();                                  platform_flow.SuspendLayout ();
705                  // load this platform                                                            char t = (char)e.KeyCode;
706                  platform_flow.Visible = false;                                  PlatformControl ctrl = (platform_flow.GetNextControl (CurrentPlatformControl, true) as PlatformControl);
707                  CurrentSelectedRom = c.Tag as IEmuConfig;                                                                if (ctrl == null) { ctrl = (platform_flow.GetNextControl (platform_flow.Controls [0], true) as PlatformControl); }
708                  rom_flow.Visible = true;                                  bool found = false;
709                  rom_flow.BringToFront();                                  PlatformControl pc = CurrentPlatformControl;
710              }                                  bool wrapped = false;
711                          if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Escape)                                  bool not_found = true;
712              {                                  while (!found) {
713                  bAbortRomCopyToLocalCache = true;                                          if (wrapped) {
714                                  ReleasePlatformControlStreams();                                                  foreach (Control ctl in platform_flow.Controls) {
715                  this.Close();                                                          PlatformControl p_ctl = ctl as PlatformControl; if (p_ctl.PlatformName.ToLower ().StartsWith (t.ToString ().ToLower ())) { not_found = false; }
716              }                                                  }
717              if ((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z) ||                                                  if (not_found) { found = true; }
718                  (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9))                                          }
719              {                                          ctrl = (platform_flow.GetNextControl (pc, true) as PlatformControl);
720                  platform_flow.SuspendLayout();                                          if (ctrl == null) {
721                  char t = (char)e.KeyCode;                                                  ctrl = platform_flow.Controls [0] as PlatformControl;
722                  PlatformControl ctrl = (platform_flow.GetNextControl(CurrentPlatformControl, true) as PlatformControl);                                                  wrapped = true;
723                  if (ctrl == null) { ctrl = (platform_flow.GetNextControl(platform_flow.Controls[0], true) as PlatformControl); }                                          }
724                  bool found = false;                                          if (ctrl.PlatformName.ToLower ().StartsWith (t.ToString ().ToLower ())) {
725                  PlatformControl pc = CurrentPlatformControl;                                                  platform_flow.ScrollControlIntoView (ctrl);
726                  bool wrapped = false;                                                  ctrl.Select ();
727                  bool not_found = true;                                                  found = true;
728                  while (!found)                                          }
729                  {                                          pc = ctrl;
730                      if (wrapped)                                  }
731                      {                                  platform_flow.ResumeLayout (false);
732                          foreach (Control ctl in platform_flow.Controls)                          }
733                          {                  }
734                              PlatformControl p_ctl = ctl as PlatformControl; if (p_ctl.PlatformName.ToLower().StartsWith(t.ToString().ToLower())) { not_found = false; }  
735                          }                  private void platform_flow_VisibleChanged (object sender, EventArgs e)
736                          if (not_found) { found = true; }                  {
737                      }                          if (!platform_flow.Visible) return;
738                      ctrl = (platform_flow.GetNextControl(pc, true) as PlatformControl);                          platform_flow.Controls.Clear ();
739                      if (ctrl == null)                          platform_flow.BringToFront ();
740                      {                          Stopwatch t = new Stopwatch ();
741                          ctrl = platform_flow.Controls[0] as PlatformControl;                          t.Start ();
742                          wrapped = true;                          platformWorker.RunWorkerAsync (t);
743                      }                  }
744                      if (ctrl.PlatformName.ToLower().StartsWith(t.ToString().ToLower()))  
745                      {                  private void rom_flow_VisibleChanged (object sender, EventArgs e)
746                          platform_flow.ScrollControlIntoView(ctrl);                  {
747                          ctrl.Select();                          if (!rom_flow.Visible) return;
748                          found = true;                          rom_flow.Controls.Clear ();
749                      }                          rom_flow.BringToFront ();
750                      pc = ctrl;                          Stopwatch t = new Stopwatch ();
751                  }                          t.Start ();
752                  platform_flow.ResumeLayout(false);                          gameWorker.RunWorkerAsync (t);
753              }                  }
754          }  
755                    void game_ctrl_LostFocus (object sender, EventArgs e)
756          private void platform_flow_VisibleChanged(object sender, EventArgs e)                  {
757          {                          GameControl c = sender as GameControl;
758              if (!platform_flow.Visible) return;  #if !HAVE_X11_BORDERSTYLE_ERROR
             platform_flow.Controls.Clear();  
             platform_flow.BringToFront();  
             Stopwatch t = new Stopwatch();  
             t.Start();  
             platformWorker.RunWorkerAsync(t);  
         }  
   
         private void rom_flow_VisibleChanged(object sender, EventArgs e)  
         {  
             if (!rom_flow.Visible) return;  
             rom_flow.Controls.Clear();  
             rom_flow.BringToFront();  
             Stopwatch t = new Stopwatch();  
             t.Start();  
             gameWorker.RunWorkerAsync(t);  
         }  
   
         void game_ctrl_LostFocus(object sender, EventArgs e)  
         {  
             GameControl c = sender as GameControl;  
                         #if !HAVE_X11_BORDERSTYLE_ERROR  
759              c.BorderStyle = BorderStyle.None;              c.BorderStyle = BorderStyle.None;
760                          #endif  #endif
761              c.BackColor = this.BackColor;                          c.BackColor = this.BackColor;
762          }                  }
763    
764          void game_ctrl_GotFocus(object sender, EventArgs e)                  void game_ctrl_GotFocus (object sender, EventArgs e)
765          {                  {
766              GameControl c = sender as GameControl;                          GameControl c = sender as GameControl;
767                          #if !HAVE_X11_BORDERSTYLE_ERROR  #if !HAVE_X11_BORDERSTYLE_ERROR
768              c.BorderStyle = BorderStyle.FixedSingle;              c.BorderStyle = BorderStyle.FixedSingle;
769                          #endif  #endif
770              c.BackColor = SELECTED_CONTROL_BACKCOLOR;                          c.BackColor = SELECTED_CONTROL_BACKCOLOR;
771              CurrentGameControl = c;                          CurrentGameControl = c;
772          }                  }
773    
774          private GameControl game_ctrl_get_last_visible()                  private GameControl game_ctrl_get_last_visible ()
775          {                  {
776              GameControl s = new GameControl();                          GameControl s = new GameControl ();
777              foreach (GameControl c in rom_flow.Controls)                          foreach (GameControl c in rom_flow.Controls) {
778              {                                  if (c.Bounds.IntersectsWith (rom_flow.Bounds))
779                  if (c.Bounds.IntersectsWith(rom_flow.Bounds))                                          s = c;
780                      s = c;                          }
781              }                          return s;
782              return s;                  }
783          }                  private PlatformControl platform_ctrl_get_last_visible ()
784          private PlatformControl platform_ctrl_get_last_visible()                  {
785          {                          PlatformControl s = new PlatformControl ();
786              PlatformControl s = new PlatformControl();                          foreach (PlatformControl c in platform_flow.Controls) {
787              foreach (PlatformControl c in platform_flow.Controls)                                  if (c.Bounds.IntersectsWith (platform_flow.Bounds))
788              {                                          s = c;
789                  if (c.Bounds.IntersectsWith(platform_flow.Bounds))                          }
790                      s = c;                          return s;
791              }                  }
792              return s;                  private PlatformControl platform_ctrl_get_next_control (bool update_control)
         }  
                 private PlatformControl platform_ctrl_get_next_control(bool update_control)  
793                  {                  {
794                          PlatformControl s = new PlatformControl();                          PlatformControl s = new PlatformControl ();
795                          int index = platform_flow.Controls.IndexOf (CurrentPlatformControl);                          int index = platform_flow.Controls.IndexOf (CurrentPlatformControl);
796                          index = index + 1;                          index = index + 1;
797                          if (index < 0) {                          if (index < 0) {
798                                  index = platform_flow.Controls.Count-1;                                  index = platform_flow.Controls.Count - 1;
799                          }                          }
800                          if (index > platform_flow.Controls.Count-1) {                          if (index > platform_flow.Controls.Count - 1) {
801                                  index = 0;                                  index = 0;
802                          }                          }
803                          s = platform_flow.Controls [index] as PlatformControl;                          s = platform_flow.Controls [index] as PlatformControl;
# Line 834  namespace EmuXPortal Line 807  namespace EmuXPortal
807                          }                          }
808                          return s;                          return s;
809                  }                  }
810                  private PlatformControl platform_ctrl_get_previous_control(bool update_control)                  private PlatformControl platform_ctrl_get_previous_control (bool update_control)
811                  {                  {
812                          PlatformControl s = null;                          PlatformControl s = null;
813                          int index = platform_flow.Controls.IndexOf (CurrentPlatformControl);                          int index = platform_flow.Controls.IndexOf (CurrentPlatformControl);
814                          index = index - 1;                          index = index - 1;
815                          if (index < 0) {                          if (index < 0) {
816                                  index = platform_flow.Controls.Count-1;                                  index = platform_flow.Controls.Count - 1;
817                          }                          }
818                          if (index > platform_flow.Controls.Count-1) {                          if (index > platform_flow.Controls.Count - 1) {
819                                  index = 0;                                  index = 0;
820                          }                          }
821                          s = platform_flow.Controls [index] as PlatformControl;                          s = platform_flow.Controls [index] as PlatformControl;
# Line 852  namespace EmuXPortal Line 825  namespace EmuXPortal
825                          }                          }
826                          return s;                          return s;
827                  }                  }
828                  private GameControl game_ctrl_get_next_control(bool update_control)                  private GameControl game_ctrl_get_next_control (bool update_control)
829                  {                  {
830                          GameControl s = new GameControl();                          GameControl s = new GameControl ();
831                          int index = rom_flow.Controls.IndexOf (CurrentGameControl);                          int index = rom_flow.Controls.IndexOf (CurrentGameControl);
832                          index = index + 1;                          index = index + 1;
833                          if (index < 0) {                          if (index < 0) {
834                                  index = rom_flow.Controls.Count-1;                                  index = rom_flow.Controls.Count - 1;
835                          }                          }
836                          if (index > rom_flow.Controls.Count-1) {                          if (index > rom_flow.Controls.Count - 1) {
837                                  index = 0;                                  index = 0;
838                          }                          }
839                          s = rom_flow.Controls [index] as GameControl;                          s = rom_flow.Controls [index] as GameControl;
# Line 870  namespace EmuXPortal Line 843  namespace EmuXPortal
843                          }                          }
844                          return s;                          return s;
845                  }                  }
846                  private GameControl game_ctrl_get_previous_control(bool update_control)                  private GameControl game_ctrl_get_previous_control (bool update_control)
847                  {                  {
848                          GameControl s = new GameControl();                          GameControl s = new GameControl ();
849                          int index = rom_flow.Controls.IndexOf (CurrentGameControl);                          int index = rom_flow.Controls.IndexOf (CurrentGameControl);
850                          index = index - 1;                          index = index - 1;
851                          if (index < 0) {                          if (index < 0) {
852                                  index = rom_flow.Controls.Count-1;                                  index = rom_flow.Controls.Count - 1;
853                          }                          }
854                          if (index > rom_flow.Controls.Count-1) {                          if (index > rom_flow.Controls.Count - 1) {
855                                  index = 0;                                  index = 0;
856                          }                          }
857                          s = rom_flow.Controls [index] as GameControl;                          s = rom_flow.Controls [index] as GameControl;
# Line 887  namespace EmuXPortal Line 860  namespace EmuXPortal
860                                  s.Select ();                                  s.Select ();
861                          }                          }
862                          return s;                          return s;
863                  }                  }
864          
865    
866          #region Background Workers                  #region Background Workers
867    
868          private int GetFormWidth()                  private int GetFormWidth ()
869          {                  {
870              if (this.InvokeRequired)                          if (this.InvokeRequired) {
871              {                                  return Convert.ToInt32 (this.Invoke ((MethodInvoker)delegate () { GetFormWidth (); }));
872                  return Convert.ToInt32(this.Invoke((MethodInvoker)delegate() { GetFormWidth(); }));                          } else {
873              }                                  return this.Width;
874              else                          }
875              {                  }
876                  return this.Width;                  private Font GetFormFont ()
877              }                  {
878          }                          if (this.InvokeRequired) {
879          private Font GetFormFont()                                  return (this.Invoke (new Delegate_GetFormFont (GetFormFont)) as Font);
880          {                          } else {
881              if (this.InvokeRequired)                                  return this.Font;
882              {                          }
883                  return (this.Invoke(new Delegate_GetFormFont(GetFormFont)) as Font);                  }
884              }  
885              else                  private Font ResizeFont (Font font, float size)
886              {                  {
887                  return this.Font;                          if (this.InvokeRequired) {
888              }                                  return (this.Invoke (new Delegate_ResizeFont (ResizeFont), new object [] { font, size }) as Font);
889          }                          } else {
890                                    return new Font (font.FontFamily, size);
891          private Font ResizeFont(Font font, float size)                          }
892          {                  }
893              if (this.InvokeRequired)  
894              {                  //private void AddPlatformControl(Control c)
895                   return (this.Invoke(new Delegate_ResizeFont(ResizeFont), new object[] { font, size })as Font);                  //{          
896              }                  //    if (platform_flow.InvokeRequired) { platform_flow.Invoke((MethodInvoker)delegate() { AddPlatformControl(c); }); }
897              else                  //    else
898              {                  //    {
899                  return new Font(font.FontFamily, size);                  //        platform_flow.Controls.Add(c);            
900              }                  //    }            
901          }                  //}
902                    //private void UpdatePlatformControls()
903          //private void AddPlatformControl(Control c)                  //{
904          //{                            //    //if (platform_flow.InvokeRequired) { platform_flow.Invoke((MethodInvoker)delegate() { UpdatePlatformControls(); }); }
905          //    if (platform_flow.InvokeRequired) { platform_flow.Invoke((MethodInvoker)delegate() { AddPlatformControl(c); }); }                  //    //else { this.Update(); }
906          //    else                  //}
907          //    {                  //private void AddGameControl(Control c)
908          //        platform_flow.Controls.Add(c);                              //{
909          //    }                              //    if (rom_flow.InvokeRequired) { rom_flow.Invoke((MethodInvoker)delegate() { AddGameControl(c); }); }
910          //}                  //    else
911          //private void UpdatePlatformControls()                  //    {              
912          //{                  //        rom_flow.Controls.Add(c);
913          //    //if (platform_flow.InvokeRequired) { platform_flow.Invoke((MethodInvoker)delegate() { UpdatePlatformControls(); }); }                  //    }
914          //    //else { this.Update(); }                  //}
915          //}                  //private void UpdateGameControls()
916          //private void AddGameControl(Control c)                  //{
917          //{                  //    //if (rom_flow.InvokeRequired) { rom_flow.Invoke((MethodInvoker)delegate() { UpdateGameControls(); }); }
918          //    if (rom_flow.InvokeRequired) { rom_flow.Invoke((MethodInvoker)delegate() { AddGameControl(c); }); }                  //    //else { this.Update(); }
919          //    else                  //}
920          //    {                                #region gameWorker
921          //        rom_flow.Controls.Add(c);                  private static Image DefaultGameImage = Properties.Resources.DefaultGameImage;
922          //    }                  private object gameimage_lock = new object ();
         //}  
         //private void UpdateGameControls()  
         //{  
         //    //if (rom_flow.InvokeRequired) { rom_flow.Invoke((MethodInvoker)delegate() { UpdateGameControls(); }); }  
         //    //else { this.Update(); }  
         //}  
         #region gameWorker  
         private static Image DefaultGameImage = Properties.Resources.DefaultGameImage;  
         private object gameimage_lock = new object();  
923                  private void worker_progress_event (object event_source, ProgressEventArgs event_args)                  private void worker_progress_event (object event_source, ProgressEventArgs event_args)
924                  {                  {
925                          //gLog.Debug.WriteLine ("worker_progress_event called!");                          //gLog.Debug.WriteLine ("worker_progress_event called!");
926                          object user_object = event_args.GetUserObject ();                          object user_object = event_args.GetUserObject ();
927                          int progress = event_args.GetProgress();                          int progress = event_args.GetProgress ();
928                          string message = event_args.GetUserMessage() == null ? "" : event_args.GetUserMessage();                          string message = event_args.GetUserMessage () == null ? "" : event_args.GetUserMessage ();
929                          if (user_object != null) {                                                        if (user_object != null) {
930                                  IRomConfig irc = (user_object as IRomConfig);                                  IRomConfig irc = (user_object as IRomConfig);
931                                  if (irc != null) {                                  if (irc != null) {
932                                          gLog.Verbose.Debug.WriteLine ("Read Rom[{0}] ({1}%): '{2}'", event_args.GetCount (), progress, irc);                                          gLog.Verbose.Debug.WriteLine ("Read Rom[{0}] ({1}%): '{2}'", event_args.GetCount (), progress, irc);
# Line 977  namespace EmuXPortal Line 941  namespace EmuXPortal
941                                  progress_bar.Invoke (new MethodInvoker (delegate {                                  progress_bar.Invoke (new MethodInvoker (delegate {
942                                          progress_bar.Message = message;                                          progress_bar.Message = message;
943                                          progress_bar.Value = progress;                                          progress_bar.Value = progress;
944                                          progress_bar.Update();                                          progress_bar.Update ();
945                                  }));                                  }));
946                          } else {                          } else {
947                                  progress_bar.Message = message;                                  progress_bar.Message = message;
948                                  progress_bar.Value = progress;                                  progress_bar.Value = progress;
949                                  progress_bar.Update();                                  progress_bar.Update ();
950                          }                          }
951                  }                  }
952          private void gameWorker_DoWork (object sender, DoWorkEventArgs e)                  private void gameWorker_DoWork (object sender, DoWorkEventArgs e)
953                  {                  {
954                          Stopwatch t = e.Argument as Stopwatch;                          Stopwatch t = e.Argument as Stopwatch;
955                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);
956  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE
957              progress_bar.ShowPercentageLabel = false;              progress_bar.ShowPercentageLabel = false;
958  #endif  #endif
# Line 996  namespace EmuXPortal Line 960  namespace EmuXPortal
960                          progress_bar.Dock = DockStyle.Top;                          progress_bar.Dock = DockStyle.Top;
961    
962                          if (this.InvokeRequired) {                          if (this.InvokeRequired) {
963                                  this.Invoke ((MethodInvoker)delegate() {                                  this.Invoke ((MethodInvoker)delegate () {
964                                          this.Controls.Add (progress_bar);                                          this.Controls.Add (progress_bar);
965                                  });                                  });
966                          } else {                          } else {
# Line 1008  namespace EmuXPortal Line 972  namespace EmuXPortal
972                          }));                          }));
973    
974                          HashSet<IRomConfig> roms = new HashSet<IRomConfig> ();                          HashSet<IRomConfig> roms = new HashSet<IRomConfig> ();
975                          using (RomParser parser = new RomParser (cache, CurrentSelectedRom, new ProgressEvent (worker_progress_event))) {                                                        using (RomParser parser = new RomParser (cache, CurrentSelectedRom, new ProgressEvent (worker_progress_event))) {
976                                  foreach (var rom in parser.Roms) {                                  foreach (var rom in parser.Roms) {
977                                          roms.Add (rom);                                          roms.Add (rom);
978                                  }                                  }
# Line 1033  namespace EmuXPortal Line 997  namespace EmuXPortal
997                                  game_ctrl.Width = this.Width - 10;                                  game_ctrl.Width = this.Width - 10;
998                                  game_ctrl.Tag = config;                                  game_ctrl.Tag = config;
999                                  try {                                  try {
1000                                          lock (gameimage_lock) {                                          lock (gameimage_lock) {
1001                                                  //gLog.Debug.WriteLine ("handling rom: {0}", config.ToString ());                                                  //gLog.Debug.WriteLine ("handling rom: {0}", config.ToString ());
1002                                                  if (String.IsNullOrEmpty (config.RomImage)) {                                                  if (String.IsNullOrEmpty (config.RomImage)) {
1003                                                          game_ctrl.UpdateGameImage ((Image)DefaultGameImage.Clone ());                                                          game_ctrl.UpdateGameImage ((Image)DefaultGameImage.Clone ());
1004                                                  } else {                                                  } else {
1005                                                          string path = config.isCachedLocally ? config.GetLocalRomImageOverride() : config.GetFullRomImage ();                                                          string path = config.isCachedLocally ? config.GetLocalRomImageOverride() : config.GetFullRomImage ();
1006                                                          if (File.Exists (path)) {                                                          if (File.Exists (path)) {
1007                                                                  game_ctrl.UpdateGameImage (path);                                                                  game_ctrl.UpdateGameImage (path);
1008                                                          } else {                                                          } else {
1009                                                                  game_ctrl.UpdateGameImage ((Image)DefaultGameImage.Clone ());                                                                  game_ctrl.UpdateGameImage ((Image)DefaultGameImage.Clone ());
1010                                                          }                                                          }
1011                                                  }                                                  }
1012                                          }                                          }
1013                                  } catch (Exception ex) {                                  } catch (Exception ex) {
# Line 1051  namespace EmuXPortal Line 1015  namespace EmuXPortal
1015                                          gLog.Verbose.Error.WriteLine (ex.ToString ());                                          gLog.Verbose.Error.WriteLine (ex.ToString ());
1016                                          throw ex;                                          throw ex;
1017                                  }                                  }
1018                                  if (CurrentSelectedRom.PlatformNameShort == "Favorites") {                                  if (CurrentSelectedRom.PlatformNameShort == "Favorites") {
1019                                          //game_ctrl.GameName = config.RomTitle;                                          //game_ctrl.GameName = config.RomTitle;
1020                                          var favorite = RomFavorite.GetFavoriteInfoFromRom (config);                                          var favorite = RomFavorite.GetFavoriteInfoFromRom (config);
1021                                          game_ctrl.GameName = favorite.RomConfig.RomExists ? favorite.RomConfig.RomTitle : string.Format ("{0} - (unavailable)", favorite.RomConfig.RomTitle);                                          game_ctrl.GameName = favorite.RomConfig.RomExists ? favorite.RomConfig.RomTitle : string.Format ("{0} - (unavailable)", favorite.RomConfig.RomTitle);
1022                                          //RomFavorite.GetRomTitleFromConfig(config);                                          //RomFavorite.GetRomTitleFromConfig(config);
1023                                          if (!favorite.RomConfig.RomExists) {                                          if (!favorite.RomConfig.RomExists) {
1024                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR_MISSING;                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR_MISSING;
1025                                          } else {                                          } else {
1026                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR;                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR;
1027                                          }                                          }
1028                  }                                  } else {
1029                  else                                          game_ctrl.GameName = config.RomExists ? config.RomTitle : string.Format ("{0} - (unavailable)", config.RomTitle);
                 {  
                                         game_ctrl.GameName = config.RomExists ? config.RomTitle : string.Format("{0} - (unavailable)", config.RomTitle);  
1030                                          if (!config.RomExists) {                                          if (!config.RomExists) {
1031                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR_MISSING;                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR_MISSING;
1032                                          } else {                                          } else {
1033                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR;                                                  game_ctrl.TextForeColor = DEFAULT_TEXTFORECOLOR;
1034                                          }                                          }
1035                  }                                        }
1036                  game_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler(game_ctrl_PreviewKeyDown);                                  game_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler (game_ctrl_PreviewKeyDown);
1037                  game_ctrl.GotFocus += new EventHandler(game_ctrl_GotFocus);                                  game_ctrl.GotFocus += new EventHandler (game_ctrl_GotFocus);
1038                  game_ctrl.LostFocus += new EventHandler(game_ctrl_LostFocus);                                  game_ctrl.LostFocus += new EventHandler (game_ctrl_LostFocus);
1039                  if (rom_flow.InvokeRequired) { rom_flow.Invoke((MethodInvoker)delegate() { rom_flow.Controls.Add(game_ctrl); }); }                                  if (rom_flow.InvokeRequired) { rom_flow.Invoke ((MethodInvoker)delegate () { rom_flow.Controls.Add (game_ctrl); }); } else { rom_flow.Controls.Add (game_ctrl); }
1040                  else { rom_flow.Controls.Add(game_ctrl); }                                  count++;
1041                  count++;                          }
1042              }                          progress_bar.Invoke (new MethodInvoker (delegate { progress_bar.Value = 0; progress_bar.Update (); }));
1043              progress_bar.Invoke(new MethodInvoker(delegate { progress_bar.Value = 0; progress_bar.Update(); }));                          e.Result = t;
1044              e.Result = t;                            }
1045          }                  private void gameWorker_ProgressChanged (object sender, ProgressChangedEventArgs e) { }
1046          private void gameWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { }                  private void gameWorker_RunWorkerCompleted (object sender, RunWorkerCompletedEventArgs e)
1047          private void gameWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)                  {
         {  
1048                          Stopwatch t = e.Result as Stopwatch;                          Stopwatch t = e.Result as Stopwatch;
1049                          if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate() {                          if (this.InvokeRequired) {
1050                                  progress_bar.Message = "";                                  this.Invoke ((MethodInvoker)delegate () {
1051                                  this.Controls.Remove(progress_bar); });                                          progress_bar.Message = "";
1052                                  this.Refresh();                                          this.Controls.Remove (progress_bar);
1053                          } else {                                  });
1054                                    this.Refresh ();
1055                            } else {
1056                                  progress_bar.Message = "";                                  progress_bar.Message = "";
1057                                  this.Controls.Remove(progress_bar);                                  this.Controls.Remove (progress_bar);
1058                                  this.Refresh();                                  this.Refresh ();
1059    
1060                          }                          }
1061              if (rom_flow.Controls.Count == 0)                          if (rom_flow.Controls.Count == 0) {
1062              {                                  GameControl game_ctrl = new GameControl ();
1063                  GameControl game_ctrl = new GameControl();                                  game_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler (game_ctrl_PreviewKeyDown);
1064                  game_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler(game_ctrl_PreviewKeyDown);                                  game_ctrl.GotFocus += new EventHandler (game_ctrl_GotFocus);
1065                  game_ctrl.GotFocus += new EventHandler(game_ctrl_GotFocus);                                  game_ctrl.LostFocus += new EventHandler (game_ctrl_LostFocus);
1066                  game_ctrl.LostFocus += new EventHandler(game_ctrl_LostFocus);                                  game_ctrl.Font = GetFormFont ();
1067                  game_ctrl.Font = GetFormFont();                                  game_ctrl.Dock = DockStyle.Top;
1068                  game_ctrl.Dock = DockStyle.Top;                                  game_ctrl.Width = this.Width - 10;
                 game_ctrl.Width = this.Width - 10;  
1069                                  IEmuConfig config = CurrentPlatformControl.Tag as IEmuConfig;                                  IEmuConfig config = CurrentPlatformControl.Tag as IEmuConfig;
1070                                  if (config.PlatformNameLong == "Favorites") {                                  if (config.PlatformNameLong == "Favorites") {
1071                                          game_ctrl.GameName = "You haven't favorited any games, select a game and then press CTRL+F to favorite it";                                          game_ctrl.GameName = "You haven't favorited any games, select a game and then press CTRL+F to favorite it";
1072                                  } else {                                  } else {
1073                                          game_ctrl.GameName = string.Format ("No {0} games were found", config.PlatformNameShort);                                          game_ctrl.GameName = string.Format ("No {0} games were found", config.PlatformNameShort);
1074                                  }                                                  }
1075                  rom_flow.Controls.Add(game_ctrl);                                  rom_flow.Controls.Add (game_ctrl);
1076              }                          }
1077              rom_flow.Controls[0].Select();                          rom_flow.Controls [0].Select ();
1078              t.Stop();                          t.Stop ();
1079              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);
1080          }                  }
1081          #endregion                  #endregion
1082          #region platformWorker                  #region platformWorker
1083          private static Image DefaultPlatformImage = Properties.Resources.DefaultPlatformImage;                  private static Image DefaultPlatformImage = Properties.Resources.DefaultPlatformImage;
1084          private object platformimage_lock = new object();                  private object platformimage_lock = new object ();
1085          private void platformWorker_DoWork (object sender, DoWorkEventArgs e)                  private void platformWorker_DoWork (object sender, DoWorkEventArgs e)
1086                  {                  {
1087                          Stopwatch t = e.Argument as Stopwatch;                          Stopwatch t = e.Argument as Stopwatch;
1088                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);                          progress_bar.Font = ResizeFont (GetFormFont (), PROGRESS_BAR_FONT_SIZE);
1089  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE  #if DISABLE_PROGRESS_PERCENTAGE_MESSASGE
1090              progress_bar.ShowPercentageLabel = false;              progress_bar.ShowPercentageLabel = false;
1091  #endif  #endif
1092                          progress_bar.ProgressColor = Color.LimeGreen;                          progress_bar.ProgressColor = Color.LimeGreen;
1093                          progress_bar.Dock = DockStyle.Top;                          progress_bar.Dock = DockStyle.Top;
1094                
1095                          if (this.InvokeRequired) {                          if (this.InvokeRequired) {
1096                                  this.Invoke ((MethodInvoker)delegate() {                                  this.Invoke ((MethodInvoker)delegate () {
1097                                          this.Controls.Add (progress_bar);                                          this.Controls.Add (progress_bar);
1098                                  });                                  });
1099                          } else {                          } else {
1100                                  this.Controls.Add (progress_bar);                                  this.Controls.Add (progress_bar);
1101                          }                          }
# Line 1142  namespace EmuXPortal Line 1104  namespace EmuXPortal
1104                                  progress_bar.Size = new Size (GetFormWidth () - 25, 100);                                  progress_bar.Size = new Size (GetFormWidth () - 25, 100);
1105                          }));                          }));
1106    
1107                          HashSet<IEmuConfig> platforms = new HashSet<IEmuConfig>();                          HashSet<IEmuConfig> platforms = new HashSet<IEmuConfig> ();
1108                          using (PlatformParser parser = new PlatformParser (cache, Config.LocalRomPath, Config.RomPath, new ProgressEvent (worker_progress_event))) {                          using (PlatformParser parser = new PlatformParser (cache, Config.LocalRomPath, Config.RomPath, new ProgressEvent (worker_progress_event))) {
1109                                  foreach (var platform in parser.Platforms) {                                  foreach (var platform in parser.Platforms) {
1110                                          platforms.Add(platform);                                          platforms.Add (platform);
1111                                  }                                  }
1112                          }                          }
1113    
# Line 1160  namespace EmuXPortal Line 1122  namespace EmuXPortal
1122                          foreach (IEmuConfig config in platforms) {                          foreach (IEmuConfig config in platforms) {
1123                                  progress_bar.Invoke (new MethodInvoker (delegate {                                  progress_bar.Invoke (new MethodInvoker (delegate {
1124                                          progress_bar.Value = (int)(100.0 * (count / total_count));                                          progress_bar.Value = (int)(100.0 * (count / total_count));
1125                                  }));                                  }));
1126                    
1127                                  PlatformControl platform_ctrl = new PlatformControl ();                                  PlatformControl platform_ctrl = new PlatformControl ();
1128                                  platform_ctrl.Font = GetFormFont ();                                  platform_ctrl.Font = GetFormFont ();
1129                                  platform_ctrl.Dock = DockStyle.Top;                                  platform_ctrl.Dock = DockStyle.Top;
1130                                  platform_ctrl.Width = this.Width - 10;                                  platform_ctrl.Width = this.Width - 10;
1131                                  platform_ctrl.Tag = config;                                  platform_ctrl.Tag = config;
1132                                  try {                                  try {
1133                                          lock (platformimage_lock) {                                          lock (platformimage_lock) {
1134                                                  //gLog.Debug.WriteLine ("handling platform: {0}", config.ToString ());                                                  //gLog.Debug.WriteLine ("handling platform: {0}", config.ToString ());
1135                                                  if(String.IsNullOrEmpty(config.PlatformImage)) {                                                  if (String.IsNullOrEmpty (config.PlatformImage)) {
1136                                                          platform_ctrl.UpdatePlatformImage((Image)DefaultPlatformImage.Clone ());                                                          platform_ctrl.UpdatePlatformImage ((Image)DefaultPlatformImage.Clone ());
1137                                                  }                                                  } else {
1138                                                  else {                                                          string path = config.GetFullPlatformImage ();
1139                                                          string path = config.GetFullPlatformImage();                                                          if (File.Exists (path)) {
1140                                                          if(File.Exists(path)) {                                                                  platform_ctrl.UpdatePlatformImage (path);
1141                                                                  platform_ctrl.UpdatePlatformImage(path);                                                          } else {
1142                                                          }                                                                  platform_ctrl.UpdatePlatformImage ((Image)DefaultPlatformImage.Clone ());
                                                         else {  
                                                                 platform_ctrl.UpdatePlatformImage((Image)DefaultPlatformImage.Clone ());  
1143                                                          }                                                          }
1144                                                  }                                                  }
1145                                          }                                          }
1146                                  } catch (Exception ex) {                                  } catch (Exception ex) {
1147                                          gLog.Error.WriteLine (ex.Message);                                          gLog.Error.WriteLine (ex.Message);
1148                                          gLog.Verbose.Error.WriteLine (ex.ToString());                                          gLog.Verbose.Error.WriteLine (ex.ToString ());
1149                      throw ex;                                          throw ex;
1150                  }                                  }
1151                  platform_ctrl.PlatformName = config.ToString();                                  platform_ctrl.PlatformName = config.ToString ();
1152                  platform_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler(platform_ctrl_PreviewKeyDown);                                  platform_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler (platform_ctrl_PreviewKeyDown);
1153                  platform_ctrl.GotFocus += new EventHandler(platform_ctrl_GotFocus);                                  platform_ctrl.GotFocus += new EventHandler (platform_ctrl_GotFocus);
1154                  platform_ctrl.LostFocus += new EventHandler(platform_ctrl_LostFocus);                                  platform_ctrl.LostFocus += new EventHandler (platform_ctrl_LostFocus);
1155                  if (platform_flow.InvokeRequired) { platform_flow.Invoke((MethodInvoker)delegate() { platform_flow.Controls.Add(platform_ctrl); }); }                                  if (platform_flow.InvokeRequired) { platform_flow.Invoke ((MethodInvoker)delegate () { platform_flow.Controls.Add (platform_ctrl); }); } else { platform_flow.Controls.Add (platform_ctrl); }
1156                  else { platform_flow.Controls.Add(platform_ctrl); }                                                    count++;
1157                  count++;                          }
1158              }                          progress_bar.Invoke (new MethodInvoker (delegate {
1159              progress_bar.Invoke(new MethodInvoker(delegate {                                  progress_bar.Value = 0; progress_bar.Update ();
1160                  progress_bar.Value = 0; progress_bar.Update();                          }));
1161              }));                                  e.Result = t;
1162              e.Result = t;                  }
1163          }                  private void platformWorker_ProgressChanged (object sender, ProgressChangedEventArgs e) { }
1164          private void platformWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { }                  private void platformWorker_RunWorkerCompleted (object sender, RunWorkerCompletedEventArgs e)
1165          private void platformWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)                  {
1166          {                          gLog.Debug.WriteLine ("platformWorker_RunWorkerCompleted called");
1167                          gLog.Debug.WriteLine("platformWorker_RunWorkerCompleted called");                          if (this.InvokeRequired) {
1168                          if (this.InvokeRequired) {                                  this.Invoke ((MethodInvoker)delegate () {
              this.Invoke((MethodInvoker)delegate() {  
1169                                          progress_bar.Message = "";                                          progress_bar.Message = "";
1170                                          this.Controls.Remove(progress_bar);                                          this.Controls.Remove (progress_bar);
1171                  });                                  });
1172              }                          } else {
             else {  
1173                                  progress_bar.Message = "";                                  progress_bar.Message = "";
1174                                  this.Controls.Remove(progress_bar);                                  this.Controls.Remove (progress_bar);
1175                  }                          }
1176              Stopwatch t = e.Result as Stopwatch;                          Stopwatch t = e.Result as Stopwatch;
1177              if (platform_flow.Controls.Count == 0)                          if (platform_flow.Controls.Count == 0) {
1178              {                                  PlatformControl platform_ctrl = new PlatformControl ();
1179                  PlatformControl platform_ctrl = new PlatformControl();                                  platform_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler (platform_ctrl_PreviewKeyDown);
1180                  platform_ctrl.PreviewKeyDown += new PreviewKeyDownEventHandler(platform_ctrl_PreviewKeyDown);                                  platform_ctrl.GotFocus += new EventHandler (platform_ctrl_GotFocus);
1181                  platform_ctrl.GotFocus += new EventHandler(platform_ctrl_GotFocus);                                  platform_ctrl.LostFocus += new EventHandler (platform_ctrl_LostFocus);
1182                  platform_ctrl.LostFocus += new EventHandler(platform_ctrl_LostFocus);                                  platform_ctrl.Font = GetFormFont ();
1183                  platform_ctrl.Font = GetFormFont();                                  platform_ctrl.Dock = DockStyle.Top;
1184                  platform_ctrl.Dock = DockStyle.Top;                                  platform_ctrl.Width = this.Width - 10;
1185                  platform_ctrl.Width = this.Width - 10;                                  platform_ctrl.PlatformName = string.Format ("You don't have any roms in your rompath: '{0}'", Config.RomPath);
1186                  platform_ctrl.PlatformName = string.Format("You don't have any roms in your rompath: '{0}'",Config.RomPath);                                  platform_flow.Controls.Add (platform_ctrl);
1187                  platform_flow.Controls.Add(platform_ctrl);                          }
             }              
1188                          if (SavedPlatformIndex != -1) {                          if (SavedPlatformIndex != -1) {
1189                                  var platform_control = platform_flow.Controls [SavedPlatformIndex] as PlatformControl;                                  var platform_control = platform_flow.Controls [SavedPlatformIndex] as PlatformControl;
1190                                  platform_flow.SuspendLayout ();                                  platform_flow.SuspendLayout ();
# Line 1237  namespace EmuXPortal Line 1194  namespace EmuXPortal
1194                                  platform_flow.ResumeLayout ();                                  platform_flow.ResumeLayout ();
1195                                  SavedPlatformIndex = -1;                                  SavedPlatformIndex = -1;
1196                          } else {                          } else {
1197                                  platform_flow.Controls[0].Select();                                  platform_flow.Controls [0].Select ();
1198                          }                          }
1199                          t.Stop();                          t.Stop ();
1200             gLog.Profiler.WriteLine("PlatformParser took: {0}s to parse platforms", (int)t.Elapsed.TotalSeconds);                          gLog.Profiler.WriteLine ("PlatformParser took: {0}s to parse platforms", (int)t.Elapsed.TotalSeconds);
1201          }                  }
1202          #endregion                  #endregion
1203    
1204          private void Form1_FormClosed(object sender, FormClosedEventArgs e)                  private void Form1_FormClosed (object sender, FormClosedEventArgs e)
1205          {                  {
1206              Cursor.Show();                          Cursor.Show ();
1207          }                  }
1208          #endregion                  #endregion
1209      }          }
1210  }  }

Legend:
Removed from v.355  
changed lines
  Added in v.377

  ViewVC Help
Powered by ViewVC 1.1.22