gba gpu view: copy to clipboard implemented. also some stuff for some other stuff which i really shouldn't be doing because it's pointless when the core doesn't work for some things.
This commit is contained in:
parent
20e7710a5c
commit
dca6dfdaeb
|
@ -232,6 +232,12 @@
|
|||
<Compile Include="GBAtools\MobileBmpView.Designer.cs">
|
||||
<DependentUpon>MobileBmpView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GBAtools\MobileDetailView.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GBAtools\MobileDetailView.Designer.cs">
|
||||
<DependentUpon>MobileDetailView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GBtools\BmpView.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
|
@ -509,6 +515,9 @@
|
|||
<EmbeddedResource Include="GBAtools\MobileBmpView.resx">
|
||||
<DependentUpon>MobileBmpView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GBAtools\MobileDetailView.resx">
|
||||
<DependentUpon>MobileDetailView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GBtools\CGBColorChooserForm.resx">
|
||||
<DependentUpon>CGBColorChooserForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
|
|
@ -28,16 +28,19 @@
|
|||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.listBoxWidgets = new System.Windows.Forms.ListBox();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.buttonShowWidget = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.radioButtonFrame = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonScanline = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonManual = new System.Windows.Forms.RadioButton();
|
||||
this.hScrollBar1 = new System.Windows.Forms.HScrollBar();
|
||||
this.buttonRefresh = new System.Windows.Forms.Button();
|
||||
this.hScrollBar1 = new System.Windows.Forms.HScrollBar();
|
||||
this.radioButtonManual = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonScanline = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonFrame = new System.Windows.Forms.RadioButton();
|
||||
this.labelClipboard = new System.Windows.Forms.Label();
|
||||
this.timerMessage = new System.Windows.Forms.Timer(this.components);
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
|
@ -45,7 +48,7 @@
|
|||
//
|
||||
this.listBoxWidgets.Location = new System.Drawing.Point(12, 25);
|
||||
this.listBoxWidgets.Name = "listBoxWidgets";
|
||||
this.listBoxWidgets.Size = new System.Drawing.Size(120, 160);
|
||||
this.listBoxWidgets.Size = new System.Drawing.Size(137, 160);
|
||||
this.listBoxWidgets.TabIndex = 0;
|
||||
this.listBoxWidgets.DoubleClick += new System.EventHandler(this.listBoxWidgets_DoubleClick);
|
||||
//
|
||||
|
@ -54,10 +57,11 @@
|
|||
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.panel1.AutoScroll = true;
|
||||
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.panel1.Location = new System.Drawing.Point(138, 12);
|
||||
this.panel1.Location = new System.Drawing.Point(155, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(486, 381);
|
||||
this.panel1.Size = new System.Drawing.Size(481, 405);
|
||||
this.panel1.TabIndex = 1;
|
||||
//
|
||||
// label1
|
||||
|
@ -88,32 +92,30 @@
|
|||
this.groupBox1.Controls.Add(this.radioButtonFrame);
|
||||
this.groupBox1.Location = new System.Drawing.Point(15, 220);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(117, 173);
|
||||
this.groupBox1.Size = new System.Drawing.Size(134, 133);
|
||||
this.groupBox1.TabIndex = 4;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Refresh";
|
||||
//
|
||||
// radioButtonFrame
|
||||
// buttonRefresh
|
||||
//
|
||||
this.radioButtonFrame.AutoSize = true;
|
||||
this.radioButtonFrame.Location = new System.Drawing.Point(6, 19);
|
||||
this.radioButtonFrame.Name = "radioButtonFrame";
|
||||
this.radioButtonFrame.Size = new System.Drawing.Size(54, 17);
|
||||
this.radioButtonFrame.TabIndex = 0;
|
||||
this.radioButtonFrame.Text = "Frame";
|
||||
this.radioButtonFrame.UseVisualStyleBackColor = true;
|
||||
this.radioButtonFrame.CheckedChanged += new System.EventHandler(this.radioButtonFrame_CheckedChanged);
|
||||
this.buttonRefresh.Location = new System.Drawing.Point(6, 104);
|
||||
this.buttonRefresh.Name = "buttonRefresh";
|
||||
this.buttonRefresh.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonRefresh.TabIndex = 4;
|
||||
this.buttonRefresh.Text = "Refresh";
|
||||
this.buttonRefresh.UseVisualStyleBackColor = true;
|
||||
this.buttonRefresh.Click += new System.EventHandler(this.buttonRefresh_Click);
|
||||
//
|
||||
// radioButtonScanline
|
||||
// hScrollBar1
|
||||
//
|
||||
this.radioButtonScanline.AutoSize = true;
|
||||
this.radioButtonScanline.Location = new System.Drawing.Point(6, 42);
|
||||
this.radioButtonScanline.Name = "radioButtonScanline";
|
||||
this.radioButtonScanline.Size = new System.Drawing.Size(66, 17);
|
||||
this.radioButtonScanline.TabIndex = 1;
|
||||
this.radioButtonScanline.Text = "Scanline";
|
||||
this.radioButtonScanline.UseVisualStyleBackColor = true;
|
||||
this.radioButtonScanline.CheckedChanged += new System.EventHandler(this.radioButtonScanline_CheckedChanged);
|
||||
this.hScrollBar1.LargeChange = 20;
|
||||
this.hScrollBar1.Location = new System.Drawing.Point(3, 62);
|
||||
this.hScrollBar1.Maximum = 246;
|
||||
this.hScrollBar1.Name = "hScrollBar1";
|
||||
this.hScrollBar1.Size = new System.Drawing.Size(128, 16);
|
||||
this.hScrollBar1.TabIndex = 3;
|
||||
this.hScrollBar1.ValueChanged += new System.EventHandler(this.hScrollBar1_ValueChanged);
|
||||
//
|
||||
// radioButtonManual
|
||||
//
|
||||
|
@ -127,41 +129,61 @@
|
|||
this.radioButtonManual.UseVisualStyleBackColor = true;
|
||||
this.radioButtonManual.CheckedChanged += new System.EventHandler(this.radioButtonManual_CheckedChanged);
|
||||
//
|
||||
// hScrollBar1
|
||||
// radioButtonScanline
|
||||
//
|
||||
this.hScrollBar1.LargeChange = 20;
|
||||
this.hScrollBar1.Location = new System.Drawing.Point(3, 62);
|
||||
this.hScrollBar1.Maximum = 246;
|
||||
this.hScrollBar1.Name = "hScrollBar1";
|
||||
this.hScrollBar1.Size = new System.Drawing.Size(111, 16);
|
||||
this.hScrollBar1.TabIndex = 3;
|
||||
this.hScrollBar1.ValueChanged += new System.EventHandler(this.hScrollBar1_ValueChanged);
|
||||
this.radioButtonScanline.AutoSize = true;
|
||||
this.radioButtonScanline.Location = new System.Drawing.Point(6, 42);
|
||||
this.radioButtonScanline.Name = "radioButtonScanline";
|
||||
this.radioButtonScanline.Size = new System.Drawing.Size(66, 17);
|
||||
this.radioButtonScanline.TabIndex = 1;
|
||||
this.radioButtonScanline.Text = "Scanline";
|
||||
this.radioButtonScanline.UseVisualStyleBackColor = true;
|
||||
this.radioButtonScanline.CheckedChanged += new System.EventHandler(this.radioButtonScanline_CheckedChanged);
|
||||
//
|
||||
// buttonRefresh
|
||||
// radioButtonFrame
|
||||
//
|
||||
this.buttonRefresh.Location = new System.Drawing.Point(6, 104);
|
||||
this.buttonRefresh.Name = "buttonRefresh";
|
||||
this.buttonRefresh.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonRefresh.TabIndex = 4;
|
||||
this.buttonRefresh.Text = "Refresh";
|
||||
this.buttonRefresh.UseVisualStyleBackColor = true;
|
||||
this.buttonRefresh.Click += new System.EventHandler(this.buttonRefresh_Click);
|
||||
this.radioButtonFrame.AutoSize = true;
|
||||
this.radioButtonFrame.Location = new System.Drawing.Point(6, 19);
|
||||
this.radioButtonFrame.Name = "radioButtonFrame";
|
||||
this.radioButtonFrame.Size = new System.Drawing.Size(54, 17);
|
||||
this.radioButtonFrame.TabIndex = 0;
|
||||
this.radioButtonFrame.Text = "Frame";
|
||||
this.radioButtonFrame.UseVisualStyleBackColor = true;
|
||||
this.radioButtonFrame.CheckedChanged += new System.EventHandler(this.radioButtonFrame_CheckedChanged);
|
||||
//
|
||||
// labelClipboard
|
||||
//
|
||||
this.labelClipboard.AutoSize = true;
|
||||
this.labelClipboard.Location = new System.Drawing.Point(9, 356);
|
||||
this.labelClipboard.MaximumSize = new System.Drawing.Size(145, 0);
|
||||
this.labelClipboard.Name = "labelClipboard";
|
||||
this.labelClipboard.Size = new System.Drawing.Size(117, 26);
|
||||
this.labelClipboard.TabIndex = 5;
|
||||
this.labelClipboard.Text = "CTRL + C: Copy under mouse to clipboard.";
|
||||
//
|
||||
// timerMessage
|
||||
//
|
||||
this.timerMessage.Interval = 5000;
|
||||
this.timerMessage.Tick += new System.EventHandler(this.timerMessage_Tick);
|
||||
//
|
||||
// GBAGPUView
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(636, 405);
|
||||
this.Controls.Add(this.labelClipboard);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.buttonShowWidget);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.listBoxWidgets);
|
||||
this.KeyPreview = true;
|
||||
this.Name = "GBAGPUView";
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
|
||||
this.Text = "GBA GPU Viewer";
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.GBAGPUView_FormClosed);
|
||||
this.Load += new System.EventHandler(this.GBAGPUView_Load);
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.GBAGPUView_KeyDown);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
@ -181,6 +203,8 @@
|
|||
private System.Windows.Forms.RadioButton radioButtonManual;
|
||||
private System.Windows.Forms.RadioButton radioButtonScanline;
|
||||
private System.Windows.Forms.RadioButton radioButtonFrame;
|
||||
private System.Windows.Forms.Label labelClipboard;
|
||||
private System.Windows.Forms.Timer timerMessage;
|
||||
|
||||
}
|
||||
}
|
|
@ -24,6 +24,8 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
|
||||
MobileBmpView bg0, bg1, bg2, bg3, bgpal, sppal, sprites, bgtiles16, bgtiles256, sptiles16, sptiles256;
|
||||
|
||||
MobileDetailView details, memory;
|
||||
|
||||
public GBAGPUView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
@ -76,8 +78,8 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsafe void DrawTile16(int* dest, int pitch, byte* tile, ushort *palette, bool hflip, bool vflip)
|
||||
|
||||
unsafe void DrawTile16(int* dest, int pitch, byte* tile, ushort* palette, bool hflip, bool vflip)
|
||||
{
|
||||
if (vflip)
|
||||
{
|
||||
|
@ -172,7 +174,7 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
|
||||
byte* tiles = (byte*)vram + ((bgcnt & 0xc) << 12);
|
||||
|
||||
ushort *nametable = (ushort*)vram + ((bgcnt & 0x1f00) << 2);
|
||||
ushort* nametable = (ushort*)vram + ((bgcnt & 0x1f00) << 2);
|
||||
|
||||
bool eightbit = bgcnt.Bit(7);
|
||||
|
||||
|
@ -256,8 +258,8 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
|
||||
int* pixels = (int*)lockdata.Scan0;
|
||||
int pitch = lockdata.Stride / sizeof(int);
|
||||
|
||||
ushort *frame = (ushort*)vram;
|
||||
|
||||
ushort* frame = (ushort*)vram;
|
||||
|
||||
for (int y = 0; y < 160; y++)
|
||||
{
|
||||
|
@ -266,7 +268,7 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
pixels -= 240;
|
||||
pixels += pitch;
|
||||
}
|
||||
|
||||
|
||||
bmp.UnlockBits(lockdata);
|
||||
mbv.bmpView.Refresh();
|
||||
}
|
||||
|
@ -607,43 +609,74 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
if (sprites.ShouldDraw) DrawSprites(sprites);
|
||||
}
|
||||
|
||||
MobileBmpView MakeWidget(string text, int w, int h)
|
||||
MobileBmpView MakeMBVWidget(string text, int w, int h)
|
||||
{
|
||||
var mbv = new MobileBmpView();
|
||||
mbv.Text = text;
|
||||
mbv.bmpView.Text = text;
|
||||
mbv.TopLevel = false;
|
||||
mbv.ChangeViewSize(w, h);
|
||||
mbv.bmpView.Clear();
|
||||
mbv.FormClosing += delegate(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
e.Cancel = true;
|
||||
listBoxWidgets.Items.Add(sender);
|
||||
(sender as Form).Hide();
|
||||
};
|
||||
// hackish, and why doesn't winforms handle this directly?
|
||||
mbv.bmpView.Click += (o, e) => (o as Control).Parent.BringToFront();
|
||||
panel1.Controls.Add(mbv);
|
||||
listBoxWidgets.Items.Add(mbv);
|
||||
return mbv;
|
||||
}
|
||||
|
||||
MobileDetailView MakeMDVWidget(string text, int w, int h)
|
||||
{
|
||||
var mdv = new MobileDetailView();
|
||||
mdv.Text = text;
|
||||
mdv.bmpView.Text = text;
|
||||
mdv.TopLevel = false;
|
||||
mdv.ClientSize = new Size(w, h);
|
||||
mdv.bmpView.Clear();
|
||||
panel1.Controls.Add(mdv);
|
||||
listBoxWidgets.Items.Add(mdv);
|
||||
return mdv;
|
||||
}
|
||||
|
||||
void GenerateWidgets()
|
||||
{
|
||||
listBoxWidgets.BeginUpdate();
|
||||
bg0 = MakeWidget("Background 0", 256, 256);
|
||||
bg1 = MakeWidget("Background 1", 256, 256);
|
||||
bg2 = MakeWidget("Background 2", 256, 256);
|
||||
bg3 = MakeWidget("Background 3", 256, 256);
|
||||
bgpal = MakeWidget("Background Palettes", 256, 256);
|
||||
sppal = MakeWidget("Sprite Palettes", 256, 256);
|
||||
sprites = MakeWidget("Sprites", 1024, 512);
|
||||
sptiles16 = MakeWidget("Sprite Tiles (4bpp)", 256, 256);
|
||||
sptiles256 = MakeWidget("Sprite Tiles (8bpp)", 128, 256);
|
||||
bgtiles16 = MakeWidget("Background Tiles (4bpp)", 512, 256);
|
||||
bgtiles256 = MakeWidget("Background Tiles (8bpp)", 256, 256);
|
||||
bg0 = MakeMBVWidget("Background 0", 256, 256);
|
||||
bg1 = MakeMBVWidget("Background 1", 256, 256);
|
||||
bg2 = MakeMBVWidget("Background 2", 256, 256);
|
||||
bg3 = MakeMBVWidget("Background 3", 256, 256);
|
||||
bgpal = MakeMBVWidget("Background Palettes", 256, 256);
|
||||
sppal = MakeMBVWidget("Sprite Palettes", 256, 256);
|
||||
sprites = MakeMBVWidget("Sprites", 1024, 512);
|
||||
sptiles16 = MakeMBVWidget("Sprite Tiles (4bpp)", 256, 256);
|
||||
sptiles256 = MakeMBVWidget("Sprite Tiles (8bpp)", 128, 256);
|
||||
bgtiles16 = MakeMBVWidget("Background Tiles (4bpp)", 512, 256);
|
||||
bgtiles256 = MakeMBVWidget("Background Tiles (8bpp)", 256, 256);
|
||||
details = MakeMDVWidget("Details", 128, 192);
|
||||
memory = MakeMDVWidget("Details - Memory", 128, 192);
|
||||
listBoxWidgets.EndUpdate();
|
||||
|
||||
foreach (var f in listBoxWidgets.Items)
|
||||
{
|
||||
Form form = (Form)f;
|
||||
// close becomes hide
|
||||
form.FormClosing += delegate(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
e.Cancel = true;
|
||||
listBoxWidgets.Items.Add(sender);
|
||||
(sender as Form).Hide();
|
||||
};
|
||||
// hackish, and why doesn't winforms handle this directly?
|
||||
BringToFrontHack(form, form);
|
||||
}
|
||||
}
|
||||
|
||||
static void BringToFrontHack(Control c, Control top)
|
||||
{
|
||||
c.Click += (o, e) => top.BringToFront();
|
||||
if (c.HasChildren)
|
||||
foreach (Control cc in c.Controls)
|
||||
BringToFrontHack(cc, top);
|
||||
}
|
||||
|
||||
|
||||
public void Restart()
|
||||
{
|
||||
gba = Global.Emulator as Emulation.Consoles.Nintendo.GBA.GBA;
|
||||
|
@ -693,9 +726,9 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
{
|
||||
if (listBoxWidgets.SelectedItem != null)
|
||||
{
|
||||
var mbv = listBoxWidgets.SelectedItem as MobileBmpView;
|
||||
mbv.Show();
|
||||
mbv.BringToFront();
|
||||
var form = listBoxWidgets.SelectedItem as Form;
|
||||
form.Show();
|
||||
form.BringToFront();
|
||||
listBoxWidgets.Items.RemoveAt(listBoxWidgets.SelectedIndex);
|
||||
}
|
||||
}
|
||||
|
@ -710,6 +743,8 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
ShowSelectedWidget();
|
||||
}
|
||||
|
||||
#region refresh control
|
||||
|
||||
int cbscanline;
|
||||
int cbscanline_emu = 500;
|
||||
|
||||
|
@ -761,6 +796,8 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
DrawEverything();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void GBAGPUView_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
if (gba != null)
|
||||
|
@ -769,5 +806,39 @@ namespace BizHawk.MultiClient.GBAtools
|
|||
gba = null;
|
||||
}
|
||||
}
|
||||
|
||||
#region copy to clipboard
|
||||
|
||||
private void timerMessage_Tick(object sender, EventArgs e)
|
||||
{
|
||||
timerMessage.Stop();
|
||||
labelClipboard.Text = "CTRL + C: Copy under mouse to clipboard.";
|
||||
}
|
||||
|
||||
private void GBAGPUView_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (Control.ModifierKeys.HasFlag(Keys.Control) && e.KeyCode == Keys.C)
|
||||
{
|
||||
// find the control under the mouse
|
||||
Point m = System.Windows.Forms.Cursor.Position;
|
||||
Control top = this;
|
||||
Control found = null;
|
||||
do
|
||||
{
|
||||
found = top.GetChildAtPoint(top.PointToClient(m));
|
||||
top = found;
|
||||
} while (found != null && found.HasChildren);
|
||||
|
||||
if (found != null && found is BmpView)
|
||||
{
|
||||
var bv = found as BmpView;
|
||||
Clipboard.SetImage(bv.bmp);
|
||||
labelClipboard.Text = found.Text + " copied to clipboard.";
|
||||
timerMessage.Stop();
|
||||
timerMessage.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,4 +117,10 @@
|
|||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="timerMessage.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>63</value>
|
||||
</metadata>
|
||||
</root>
|
|
@ -0,0 +1,103 @@
|
|||
namespace BizHawk.MultiClient.GBAtools
|
||||
{
|
||||
partial class MobileDetailView
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.bmpView1 = new BizHawk.MultiClient.GBtools.BmpView();
|
||||
this.listView1 = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 1;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.bmpView1, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.listView1, 0, 1);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 2;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 140F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(142, 332);
|
||||
this.tableLayoutPanel1.TabIndex = 0;
|
||||
//
|
||||
// bmpView1
|
||||
//
|
||||
this.bmpView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.bmpView1.Location = new System.Drawing.Point(3, 3);
|
||||
this.bmpView1.Name = "bmpView1";
|
||||
this.bmpView1.Size = new System.Drawing.Size(136, 134);
|
||||
this.bmpView1.TabIndex = 0;
|
||||
this.bmpView1.Text = "bmpView1";
|
||||
//
|
||||
// listView1
|
||||
//
|
||||
this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2});
|
||||
this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listView1.GridLines = true;
|
||||
this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
|
||||
this.listView1.Location = new System.Drawing.Point(3, 143);
|
||||
this.listView1.Name = "listView1";
|
||||
this.listView1.Size = new System.Drawing.Size(136, 186);
|
||||
this.listView1.TabIndex = 1;
|
||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
||||
this.listView1.View = System.Windows.Forms.View.Details;
|
||||
this.listView1.SizeChanged += new System.EventHandler(this.listView1_SizeChanged);
|
||||
//
|
||||
// MobileDetailView
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(142, 332);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
|
||||
this.Name = "MobileDetailView";
|
||||
this.Text = "MobileDetailView";
|
||||
this.SizeChanged += new System.EventHandler(this.MobileDetailView_SizeChanged);
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private GBtools.BmpView bmpView1;
|
||||
private System.Windows.Forms.ListView listView1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BizHawk.MultiClient.GBAtools
|
||||
{
|
||||
public partial class MobileDetailView : Form
|
||||
{
|
||||
public MobileDetailView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public GBtools.BmpView bmpView { get { return bmpView1; } }
|
||||
|
||||
[Browsable(false)]
|
||||
public bool ShouldDraw { get { return this.Visible; } }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Text;
|
||||
}
|
||||
|
||||
public void SetDetails(IList<Tuple<string, string>> details)
|
||||
{
|
||||
listView1.Items.Clear();
|
||||
foreach (var t in details)
|
||||
{
|
||||
listView1.Items.Add(new ListViewItem(new string[] { t.Item1, t.Item2 }));
|
||||
}
|
||||
}
|
||||
|
||||
private void MobileDetailView_SizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
// bmp view is always square
|
||||
tableLayoutPanel1.RowStyles[0].Height = ClientSize.Width;
|
||||
}
|
||||
|
||||
private void listView1_SizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
listView1.Columns[0].Width = listView1.Width / 2;
|
||||
listView1.Columns[1].Width = listView1.Width / 2;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
Loading…
Reference in New Issue