mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-10 15:52:11 -04:00
gui: preserve user selection when appending to main log
This commit is contained in:
parent
1bc31821e9
commit
d62a7b4d61
49
GUI/ColoredTextBox.Designer.cs
generated
49
GUI/ColoredTextBox.Designer.cs
generated
@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2012 MCForge
|
|
||||||
Dual-licensed under the Educational Community License, Version 2.0 and
|
|
||||||
the GNU General Public License, Version 3 (the "Licenses"); you may
|
|
||||||
not use this file except in compliance with the Licenses. You may
|
|
||||||
obtain a copy of the Licenses at'
|
|
||||||
|
|
||||||
http://www.opensource.org/licenses/ecl2.php
|
|
||||||
http://www.gnu.org/licenses/gpl-3.0.html
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing,
|
|
||||||
software distributed under the Licenses are distributed on an "AS IS"
|
|
||||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
||||||
or implied. See the Licenses for the specific language governing
|
|
||||||
permissions and limitations under the Licenses.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace MCGalaxy.Gui.Components {
|
|
||||||
partial class ColoredTextBox {
|
|
||||||
/// <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 Component 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() {
|
|
||||||
components = new System.ComponentModel.Container();
|
|
||||||
this.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(ColoredReader_LinkClicked);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
@ -16,17 +16,14 @@ http://www.gnu.org/licenses/gpl-3.0.html
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
//MCGalaxy 6 Preview :D
|
|
||||||
|
|
||||||
namespace MCGalaxy.Gui.Components {
|
namespace MCGalaxy.Gui.Components {
|
||||||
|
|
||||||
/// <summary> A rich text box, that can parse Minecraft/MCGalaxy color codes. </summary>
|
/// <summary> Extended rich text box that auto-colors minecraft classic text. </summary>
|
||||||
public partial class ColoredTextBox : RichTextBox {
|
public partial class ColoredTextBox : RichTextBox {
|
||||||
|
|
||||||
bool _nightMode = false, _colorize = true;
|
bool _nightMode = false, _colorize = true;
|
||||||
@ -65,50 +62,55 @@ namespace MCGalaxy.Gui.Components {
|
|||||||
|
|
||||||
/// <summary> Initializes a new instance of the <see cref="ColoredTextBox"/> class. </summary>
|
/// <summary> Initializes a new instance of the <see cref="ColoredTextBox"/> class. </summary>
|
||||||
public ColoredTextBox() : base() {
|
public ColoredTextBox() : base() {
|
||||||
InitializeComponent();
|
LinkClicked += HandleLinkClicked;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Appends the log. </summary>
|
/// <summary> Appends text to this textbox. </summary>
|
||||||
/// <param name="text">The text to log.</param>
|
|
||||||
public void AppendLog(string text, Color foreColor, bool dateStamp) {
|
public void AppendLog(string text, Color foreColor, bool dateStamp) {
|
||||||
if (InvokeRequired) {
|
if (InvokeRequired) {
|
||||||
Invoke((MethodInvoker)(() => AppendLog(text, foreColor, dateStamp)));
|
Invoke((MethodInvoker)(() => AppendLog(text, foreColor, dateStamp)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (dateStamp) Append(CurrentDate, Color.Gray);
|
if (dateStamp) AppendLog(CurrentDate, Color.Gray);
|
||||||
int line = GetLineFromCharIndex(Math.Max(0, TextLength - 1));
|
int line = GetLineFromCharIndex(Math.Max(0, TextLength - 1));
|
||||||
|
|
||||||
if (!Colorize) {
|
if (!Colorize) {
|
||||||
AppendText(text);
|
AppendText(text);
|
||||||
if (AutoScroll) ScrollToEnd(line);
|
} else {
|
||||||
return;
|
|
||||||
}
|
|
||||||
LineFormatter.Format(text, (c, s) => LineFormatter.FormatGui(c, s, this, foreColor));
|
LineFormatter.Format(text, (c, s) => LineFormatter.FormatGui(c, s, this, foreColor));
|
||||||
|
}
|
||||||
if (AutoScroll) ScrollToEnd(line);
|
if (AutoScroll) ScrollToEnd(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Appends the log. </summary>
|
/// <summary> Appends text to this textbox. </summary>
|
||||||
/// <param name="text">The text to log.</param>
|
public void AppendLog(string text) { AppendLog(text, ForeColor, DateStamp); }
|
||||||
public void AppendLog(string text) {
|
|
||||||
AppendLog(text, ForeColor, DateStamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Appends the log. </summary>
|
/// <summary> Appends text to this textbox. </summary>
|
||||||
/// <param name="text">The text to log.</param>
|
internal void AppendLog(string text, Color color) {
|
||||||
/// <param name="foreColor">Color of the foreground.</param>
|
|
||||||
internal void Append(string text, Color foreColor) {
|
|
||||||
if (InvokeRequired) {
|
if (InvokeRequired) {
|
||||||
Invoke((MethodInvoker)(() => Append(text, foreColor))); return;
|
Invoke((MethodInvoker)(() => AppendLog(text, color))); return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int selLength = SelectionLength, selStart = 0;
|
||||||
|
if (selLength > 0) selStart = SelectionStart;
|
||||||
|
AppendColoredText(text, color);
|
||||||
|
|
||||||
|
// preserve user's selection when appending text
|
||||||
|
if (selLength == 0) return;
|
||||||
|
SelectionStart = selStart;
|
||||||
|
SelectionLength = selLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppendColoredText(string text, Color color) {
|
||||||
SelectionStart = TextLength;
|
SelectionStart = TextLength;
|
||||||
SelectionLength = 0;
|
SelectionLength = 0;
|
||||||
SelectionColor = foreColor;
|
|
||||||
|
SelectionColor = color;
|
||||||
AppendText(text);
|
AppendText(text);
|
||||||
SelectionColor = ForeColor;
|
SelectionColor = ForeColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColoredReader_LinkClicked(object sender, System.Windows.Forms.LinkClickedEventArgs e) {
|
void HandleLinkClicked(object sender, System.Windows.Forms.LinkClickedEventArgs e) {
|
||||||
if ( !e.LinkText.StartsWith("http://www.minecraft.net/classic/play/") ) {
|
if ( !e.LinkText.StartsWith("http://www.minecraft.net/classic/play/") ) {
|
||||||
if ( MessageBox.Show("Never open links from people that you don't trust!", "Warning!!", MessageBoxButtons.OKCancel) == DialogResult.Cancel )
|
if ( MessageBox.Show("Never open links from people that you don't trust!", "Warning!!", MessageBoxButtons.OKCancel) == DialogResult.Cancel )
|
||||||
return;
|
return;
|
||||||
@ -116,7 +118,6 @@ namespace MCGalaxy.Gui.Components {
|
|||||||
|
|
||||||
try { Process.Start(e.LinkText); }
|
try { Process.Start(e.LinkText); }
|
||||||
catch { }
|
catch { }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Scrolls to the end of the log </summary>
|
/// <summary> Scrolls to the end of the log </summary>
|
||||||
@ -134,6 +135,6 @@ namespace MCGalaxy.Gui.Components {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
||||||
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
|
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ namespace MCGalaxy.Gui {
|
|||||||
|
|
||||||
public static void FormatGui(char col, string message,
|
public static void FormatGui(char col, string message,
|
||||||
ColoredTextBox box, Color foreCol) {
|
ColoredTextBox box, Color foreCol) {
|
||||||
box.Append(message, GetGuiCol(col, foreCol));
|
box.AppendLog(message, GetGuiCol(col, foreCol));
|
||||||
}
|
}
|
||||||
|
|
||||||
static Color GetGuiCol(char c, Color foreCol) {
|
static Color GetGuiCol(char c, Color foreCol) {
|
||||||
|
@ -75,9 +75,6 @@
|
|||||||
<Compile Include="ColoredTextBox.cs">
|
<Compile Include="ColoredTextBox.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="ColoredTextBox.Designer.cs">
|
|
||||||
<DependentUpon>ColoredTextBox.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Eco\EcoLevelWindow.cs">
|
<Compile Include="Eco\EcoLevelWindow.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user