mirror of
https://github.com/Ryujinx/Opentk.git
synced 2024-12-26 04:35:38 +00:00
7851bbff84
Reduced example categories to OpenGL, OpenAL, OpenTK. Updated all samples to reflect this change. Moved startup and loading code into separate files.
204 lines
5.9 KiB
C#
204 lines
5.9 KiB
C#
#region --- License ---
|
|
/* Licensed under the MIT/X11 license.
|
|
* Copyright (c) 2006-2008 the OpenTK Team.
|
|
* This notice may not be removed from any source distribution.
|
|
* See license.txt for licensing details.
|
|
*/
|
|
#endregion
|
|
|
|
#region --- Using Directives ---
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Reflection;
|
|
using System.Threading;
|
|
using System.Diagnostics;
|
|
using System.Security;
|
|
using System.Security.Permissions;
|
|
using System.Security.Policy;
|
|
using System.IO;
|
|
|
|
using OpenTK;
|
|
|
|
#endregion
|
|
|
|
namespace Examples
|
|
{
|
|
[Obsolete]
|
|
public partial class ExampleLauncher : Form
|
|
{
|
|
bool show_hidden;
|
|
List<ExampleInfo> hidden_items = new List<ExampleInfo>();
|
|
|
|
#region --- Constructor ---
|
|
|
|
public ExampleLauncher()
|
|
{
|
|
this.Font = SystemFonts.MessageBoxFont;
|
|
InitializeComponent();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region public void ExampleLauncher_Load(object sender, EventArgs e)
|
|
|
|
public void ExampleLauncher_Load(object sender, EventArgs e)
|
|
{
|
|
// Get all examples
|
|
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (Type type in types)
|
|
{
|
|
object[] attributes = type.GetCustomAttributes(false);
|
|
ExampleAttribute example = null;
|
|
foreach (object attr in attributes)
|
|
if (attr is ExampleAttribute)
|
|
example = (ExampleAttribute)attr;
|
|
|
|
if (example != null)
|
|
{
|
|
//sb.Append(example.Category);
|
|
//sb.Append(" ");
|
|
//if (example.Difficulty < 10)
|
|
// sb.Append("0"); // To keep items nicely sorted.
|
|
//sb.Append(example.Difficulty);
|
|
//sb.Append(": ");
|
|
////sb.Append(type.Name);
|
|
//sb.Append(example.Title);
|
|
|
|
if (example.Visible)
|
|
{
|
|
listBox1.Items.Add(new ExampleInfo(type, example));
|
|
}
|
|
else
|
|
{
|
|
#if DEBUG
|
|
example.Title += " (hidden)";
|
|
listBox1.Items.Add(new ExampleInfo(type, example));
|
|
#else
|
|
hidden_items.Add(new ExampleInfo(type, example));
|
|
#endif
|
|
}
|
|
// Clean the StringBuilder for the next pass.
|
|
sb.Remove(0, sb.Length);
|
|
}
|
|
}
|
|
// Select first item
|
|
if (listBox1.Items.Count > 0)
|
|
this.listBox1.SelectedIndex = 0;
|
|
|
|
RaiseWindow();
|
|
}
|
|
|
|
#endregion
|
|
|
|
void RaiseWindow()
|
|
{
|
|
// Force the ExampleLauncher to appear.
|
|
this.TopMost = false;
|
|
this.TopMost = true;
|
|
this.TopMost = false;
|
|
}
|
|
|
|
#region private void RunExample()
|
|
|
|
private void RunExample()
|
|
{
|
|
if (listBox1.SelectedItem != null)
|
|
{
|
|
try
|
|
{
|
|
ExampleInfo info = (ExampleInfo)listBox1.SelectedItem;
|
|
Type example = info.Example;
|
|
|
|
Debug.Print("Launching example: {0}", example.ToString());
|
|
this.Visible = false;
|
|
Application.DoEvents();
|
|
|
|
example.GetMethod("Main").Invoke(null, null);
|
|
|
|
GC.Collect();
|
|
GC.WaitForPendingFinalizers();
|
|
GC.Collect();
|
|
|
|
}
|
|
catch (TargetInvocationException expt)
|
|
{
|
|
string ex_info;
|
|
if (expt.InnerException != null)
|
|
ex_info = expt.InnerException.ToString();
|
|
else
|
|
ex_info = expt.ToString();
|
|
MessageBox.Show(ex_info, "An OpenTK example encountered an error.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
|
|
Debug.Print(expt.ToString());
|
|
#if DEBUG
|
|
//throw;
|
|
#endif
|
|
}
|
|
catch (NullReferenceException expt)
|
|
{
|
|
MessageBox.Show(expt.ToString(), "The Example launcher failed to load the example.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
finally
|
|
{
|
|
this.Visible = true;
|
|
RaiseWindow();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Launcher events
|
|
|
|
private void listBox1_DoubleClick(object sender, EventArgs e)
|
|
{
|
|
RunExample();
|
|
}
|
|
|
|
private void listBox1_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
switch (e.KeyCode)
|
|
{
|
|
case Keys.Enter:
|
|
RunExample();
|
|
break;
|
|
|
|
// On Ctrl+F1 enable hidden items (for debugging/testing OpenTK)
|
|
case Keys.F1:
|
|
if (e.Control)
|
|
show_hidden = !show_hidden;
|
|
|
|
if (show_hidden)
|
|
listBox1.Items.AddRange(hidden_items.ToArray());
|
|
else
|
|
foreach (ExampleInfo item in hidden_items)
|
|
listBox1.Items.Remove(item);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void runButton_Click(object sender, EventArgs e)
|
|
{
|
|
RunExample();
|
|
}
|
|
|
|
private void ExampleLauncher_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
Debug.Flush();
|
|
Debug.Close();
|
|
Trace.Flush();
|
|
Trace.Close();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|