LogWindow: replace textbox with a virtuallistview. while it may leave some things to be desired, it's not slow as balls. a superior implementation would be creating a VirtualTextBox of some sort
This commit is contained in:
parent
7fa80cdcaf
commit
2e4ca0fae6
|
@ -31,14 +31,17 @@
|
|||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.btnClear = new System.Windows.Forms.Button();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
||||
this.buttonCopy = new System.Windows.Forms.Button();
|
||||
this.virtualListView1 = new BizHawk.VirtualListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.buttonCopyAll = new System.Windows.Forms.Button();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnClose.Location = new System.Drawing.Point(453, 3);
|
||||
this.btnClose.Location = new System.Drawing.Point(597, 3);
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnClose.TabIndex = 2;
|
||||
|
@ -60,40 +63,70 @@
|
|||
//
|
||||
this.tableLayoutPanel1.AutoSize = true;
|
||||
this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.tableLayoutPanel1.ColumnCount = 3;
|
||||
this.tableLayoutPanel1.ColumnCount = 5;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.Controls.Add(this.btnClear, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.btnClose, 2, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.btnClose, 4, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.buttonCopy, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.buttonCopyAll, 2, 0);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 273);
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 368);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 1;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(531, 29);
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(675, 29);
|
||||
this.tableLayoutPanel1.TabIndex = 5;
|
||||
//
|
||||
// textBox1
|
||||
// buttonCopy
|
||||
//
|
||||
this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.textBox1.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.textBox1.Location = new System.Drawing.Point(0, 0);
|
||||
this.textBox1.Multiline = true;
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.ReadOnly = true;
|
||||
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.textBox1.Size = new System.Drawing.Size(531, 273);
|
||||
this.textBox1.TabIndex = 6;
|
||||
this.textBox1.TabStop = false;
|
||||
this.buttonCopy.Location = new System.Drawing.Point(84, 3);
|
||||
this.buttonCopy.Name = "buttonCopy";
|
||||
this.buttonCopy.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonCopy.TabIndex = 3;
|
||||
this.buttonCopy.Text = "Copy Sel.";
|
||||
this.buttonCopy.UseVisualStyleBackColor = true;
|
||||
this.buttonCopy.Click += new System.EventHandler(this.buttonCopy_Click);
|
||||
//
|
||||
// virtualListView1
|
||||
//
|
||||
this.virtualListView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1});
|
||||
this.virtualListView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.virtualListView1.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.virtualListView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
|
||||
this.virtualListView1.ItemCount = 0;
|
||||
this.virtualListView1.Location = new System.Drawing.Point(0, 0);
|
||||
this.virtualListView1.Name = "virtualListView1";
|
||||
this.virtualListView1.selectedItem = -1;
|
||||
this.virtualListView1.Size = new System.Drawing.Size(675, 368);
|
||||
this.virtualListView1.TabIndex = 8;
|
||||
this.virtualListView1.UseCompatibleStateImageBehavior = false;
|
||||
this.virtualListView1.View = System.Windows.Forms.View.Details;
|
||||
this.virtualListView1.VirtualMode = true;
|
||||
this.virtualListView1.QueryItemText += new BizHawk.QueryItemTextHandler(this.virtualListView1_QueryItemText);
|
||||
this.virtualListView1.ClientSizeChanged += new System.EventHandler(this.virtualListView1_ClientSizeChanged);
|
||||
//
|
||||
// buttonCopyAll
|
||||
//
|
||||
this.buttonCopyAll.Location = new System.Drawing.Point(165, 3);
|
||||
this.buttonCopyAll.Name = "buttonCopyAll";
|
||||
this.buttonCopyAll.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonCopyAll.TabIndex = 4;
|
||||
this.buttonCopyAll.Text = "Copy All";
|
||||
this.buttonCopyAll.UseVisualStyleBackColor = true;
|
||||
this.buttonCopyAll.Click += new System.EventHandler(this.buttonCopyAll_Click);
|
||||
//
|
||||
// LogWindow
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.ClientSize = new System.Drawing.Size(531, 302);
|
||||
this.Controls.Add(this.textBox1);
|
||||
this.ClientSize = new System.Drawing.Size(675, 397);
|
||||
this.Controls.Add(this.virtualListView1);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.MinimumSize = new System.Drawing.Size(171, 97);
|
||||
this.Name = "LogWindow";
|
||||
|
@ -111,6 +144,9 @@
|
|||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnClear;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.TextBox textBox1;
|
||||
private VirtualListView virtualListView1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.Button buttonCopy;
|
||||
private System.Windows.Forms.Button buttonCopyAll;
|
||||
}
|
||||
}
|
|
@ -16,6 +16,8 @@ namespace BizHawk.MultiClient
|
|||
int defaultWidth;
|
||||
int defaultHeight;
|
||||
|
||||
List<string> Lines = new List<string>();
|
||||
|
||||
public LogWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
@ -26,36 +28,35 @@ namespace BizHawk.MultiClient
|
|||
LogConsole.notifyLogWindowClosing();
|
||||
SaveConfigSettings();
|
||||
};
|
||||
virtualListView1_ClientSizeChanged(null, null);
|
||||
}
|
||||
|
||||
public void ShowReport(string title, string report)
|
||||
public static void ShowReport(string title, string report, IWin32Window parent)
|
||||
{
|
||||
Text = title;
|
||||
textBox1.Text = report;
|
||||
btnClear.Visible = false;
|
||||
ShowDialog();
|
||||
}
|
||||
|
||||
public void SetLogText(string str)
|
||||
{
|
||||
textBox1.Text = str;
|
||||
textBox1.SelectionStart = str.Length;
|
||||
textBox1.ScrollToCaret();
|
||||
Refresh();
|
||||
using (var dlg = new LogWindow())
|
||||
{
|
||||
var ss = report.Split('\n');
|
||||
foreach (var s in ss)
|
||||
dlg.Lines.Add(s);
|
||||
dlg.virtualListView1.ItemCount = ss.Length;
|
||||
dlg.Text = title;
|
||||
dlg.btnClear.Visible = false;
|
||||
dlg.ShowDialog(parent);
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder sbLog = new StringBuilder();
|
||||
public void Append(string str)
|
||||
{
|
||||
sbLog.Append(str);
|
||||
SetLogText(sbLog.ToString());
|
||||
Lines.Add(str);
|
||||
virtualListView1.ItemCount++;
|
||||
}
|
||||
|
||||
private void btnClear_Click(object sender, EventArgs e)
|
||||
{
|
||||
sbLog.Length = 0;
|
||||
SetLogText("");
|
||||
Refresh();
|
||||
Lines.Clear();
|
||||
virtualListView1.ItemCount = 0;
|
||||
virtualListView1.SelectedIndices.Clear();
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
|
@ -90,5 +91,33 @@ namespace BizHawk.MultiClient
|
|||
Global.Config.LogWindowHeight = this.Bottom - this.Top;
|
||||
}
|
||||
}
|
||||
|
||||
private void virtualListView1_QueryItemText(int item, int subItem, out string text)
|
||||
{
|
||||
text = Lines[item];
|
||||
}
|
||||
|
||||
private void virtualListView1_ClientSizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
virtualListView1.Columns[0].Width = virtualListView1.ClientSize.Width;
|
||||
}
|
||||
|
||||
private void buttonCopy_Click(object sender, EventArgs e)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
foreach (int i in virtualListView1.SelectedIndices)
|
||||
sb.AppendLine(Lines[i]);
|
||||
if (sb.Length > 0)
|
||||
Clipboard.SetText(sb.ToString(), TextDataFormat.Text);
|
||||
}
|
||||
|
||||
private void buttonCopyAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
foreach (var s in Lines)
|
||||
sb.Append(s);
|
||||
if (sb.Length > 0)
|
||||
Clipboard.SetText(sb.ToString(), TextDataFormat.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,10 +24,9 @@ namespace BizHawk.MultiClient
|
|||
private void DumpStatus_Click(object sender, EventArgs e)
|
||||
{
|
||||
string details = Global.Emulator.CoreOutputComm.RomStatusDetails;
|
||||
if(string.IsNullOrEmpty(details)) return;
|
||||
var lw = new LogWindow();
|
||||
if (string.IsNullOrEmpty(details)) return;
|
||||
Global.Sound.StopSound();
|
||||
lw.ShowReport("Dump Status Report",details);
|
||||
LogWindow.ShowReport("Dump Status Report", details, this);
|
||||
Global.Sound.StartSound();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue