Added multi-line text

fixed more tests
This commit is contained in:
Lars Brubaker 2022-01-07 16:30:46 -08:00
parent 569e316f38
commit aebb0ff868
6 changed files with 595 additions and 41 deletions

View file

@ -31,6 +31,7 @@ using System;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using MatterHackers.Agg;
using MatterHackers.Agg.Font;
using MatterHackers.Agg.Transform;
using MatterHackers.Agg.UI;
@ -91,8 +92,6 @@ namespace MatterHackers.MatterControl.DesignTools
foreach (var child in this.Children)
{
var clone = child.Clone();
var newName = index < nameToWrite.Length ? nameToWrite[index++].ToString() : "Letter".Localize();
clone.Name = MapIfSymbol(newName);
newContainer.Children.Add(clone);
}
@ -100,19 +99,6 @@ namespace MatterHackers.MatterControl.DesignTools
newContainer.Name = this.Name + " - " + "Flattened".Localize();
}
private string MapIfSymbol(string newName)
{
switch (newName)
{
case " ":
return "space";
default:
break;
}
return newName;
}
public override async void OnInvalidate(InvalidateArgs invalidateArgs)
{
if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children)
@ -150,7 +136,7 @@ namespace MatterHackers.MatterControl.DesignTools
{
bool valuesChanged = false;
var height = Height.ClampIfNotCalculated(this, .01, 1000000, ref valuesChanged);
var nameToWrite = NameToWrite.Value(this);
var nameToWrite = NameToWrite.Value(this).Replace("\\n", "\n").Replace("\r", "\n").Replace("\n\n", "\n");
if (string.IsNullOrWhiteSpace(nameToWrite))
{
Mesh = PlatonicSolids.CreateCube(20, 10, height);
@ -162,26 +148,62 @@ namespace MatterHackers.MatterControl.DesignTools
{
list.Clear();
var offest = 0.0;
var offset = Vector2.Zero;
double pointsToMm = 0.352778;
var pointSize = PointSize.Value(this);
var lineNumber = 1;
var leterNumber = 1;
var lineObject = new Object3D()
{
Name = "Line {0}".Localize().FormatWith(lineNumber)
};
list.Add(lineObject);
foreach (var letter in nameToWrite.ToCharArray())
{
var style = new StyledTypeFace(ApplicationController.GetTypeFace(this.Font), PointSize.Value(this));
var style = new StyledTypeFace(ApplicationController.GetTypeFace(this.Font), pointSize);
var letterPrinter = new TypeFacePrinter(letter.ToString(), style)
{
ResolutionScale = 10
};
var scaledLetterPrinter = new VertexSourceApplyTransform(letterPrinter, Affine.NewScaling(pointsToMm));
list.Add(new Object3D()
if (letter == '\n')
{
Mesh = VertexSourceToMesh.Extrude(scaledLetterPrinter, this.Height.Value(this)),
Matrix = Matrix4X4.CreateTranslation(offest, 0, 0),
Name = letter.ToString()
});
leterNumber = 0;
lineNumber++;
offset.X = 0;
offset.Y -= style.EmSizeInPoints * pointsToMm * 1.4;
lineObject = new Object3D()
{
Matrix = Matrix4X4.CreateTranslation(0, offset.Y, 0),
Name = "Line {0}".Localize().FormatWith(lineNumber)
};
list.Add(lineObject);
}
else
{
var letterObject = new Object3D()
{
Mesh = VertexSourceToMesh.Extrude(scaledLetterPrinter, this.Height.Value(this)),
Matrix = Matrix4X4.CreateTranslation(offset.X, 0, 0),
Name = leterNumber.ToString("000") + " - '" + letter.ToString() + "'"
};
if (letterObject.Mesh.Faces.Count > 0)
{
lineObject.Children.Add(letterObject);
leterNumber++;
}
offset.X += letterPrinter.GetSize(letter.ToString()).X * pointsToMm;
}
}
offest += letterPrinter.GetSize(letter.ToString()).X * pointsToMm;
for (int i=list.Count - 1; i >= 0; i--)
{
if (list[i].Children.Count == 0)
{
list.RemoveAt(i);
}
}
});
}

View file

@ -1068,19 +1068,23 @@ namespace MatterHackers.MatterControl.DesignTools
}
else if (propertyValue is StringOrExpression stringOrExpression)
{
// create a string editor
var field = new TextField(theme);
// create a a multi-line string editor
var field = new MultilineStringField(theme);
field.Initialize(0);
field.SetValue(stringOrExpression.Expression, false);
field.ClearUndoHistory();
field.Content.HAnchor = HAnchor.Stretch;
field.Content.Descendants<ScrollableWidget>().FirstOrDefault().MaximumSize = new Vector2(double.MaxValue, 200);
field.Content.Descendants<ScrollingArea>().FirstOrDefault().Parent.VAnchor = VAnchor.Top;
field.Content.MinimumSize = new Vector2(0, 100 * GuiWidget.DeviceScale);
field.Content.Margin = new BorderDouble(0, 0, 0, 5);
RegisterValueChanged(field,
(valueString) => new StringOrExpression(valueString),
(value) =>
{
return ((StringOrExpression)value).Expression;
});
rowContainer = CreateSettingsRow(property, field.Content, theme, rows);
rowContainer = CreateSettingsColumn(property, field, fullWidth: true);
}
else if (propertyValue is char charValue)
{

View file

@ -150,7 +150,8 @@ namespace MatterHackers.MatterControl
{
HAnchor = HAnchor.Fit,
VAnchor = VAnchor.Fit,
Margin = new BorderDouble(15)
Margin = new BorderDouble(15),
Name = "Start New Design"
}, "Start New Design".Localize()));
lastButton.Click += (s, e) => UiThread.RunOnIdle(() =>
{

File diff suppressed because it is too large Load diff

View file

@ -144,19 +144,19 @@ namespace MatterHackers.MatterControl.Tests.Automation
var mainViewWidget = ApplicationController.Instance.MainView;
var tabControl = mainViewWidget.TabControl;
Assert.AreEqual(6, mainViewWidget.TabControl.AllTabs.Count());
Assert.AreEqual(5, mainViewWidget.TabControl.AllTabs.Count());
// open the design for editing
testRunner.ClickByName("Library Tab")
.DoubleClickByName("Library Row Item Collection")
.DoubleClickByName("Local Library Row Item Collection")
.DoubleClickByName("Row Item Cube Design")
.WaitFor(() => mainViewWidget.TabControl.AllTabs.Count() == 7);
.WaitFor(() => mainViewWidget.TabControl.AllTabs.Count() == 6);
// we have opened a new tab
Assert.AreEqual(7, mainViewWidget.TabControl.AllTabs.Count());
Assert.AreEqual(6, mainViewWidget.TabControl.AllTabs.Count());
// we are on the design tab
Assert.AreEqual(6, tabControl.SelectedTabIndex);
Assert.AreEqual(5, tabControl.SelectedTabIndex);
Assert.AreEqual("Cube Design", tabControl.SelectedTabKey);
// double click it again and prove that it goes to the currently open tab
@ -164,9 +164,9 @@ namespace MatterHackers.MatterControl.Tests.Automation
.DoubleClickByName("Row Item Cube Design");
// we have not opened a new tab
Assert.AreEqual(7, mainViewWidget.TabControl.AllTabs.Count());
Assert.AreEqual(6, mainViewWidget.TabControl.AllTabs.Count());
// we are on the design tab
Assert.AreEqual(6, tabControl.SelectedTabIndex);
Assert.AreEqual(5, tabControl.SelectedTabIndex);
// rename in the library tab
// assert tab name has change

View file

@ -244,12 +244,10 @@ namespace MatterHackers.MatterControl.Tests.Automation
testRunner.GetWidgetByName("Hardware Tab", out systemWindow, 10);
testRunner.WaitforDraw(systemWindow);
// Latest product starts at empty part tab
// close the welcome message
if (testRunner.NameExists("Cancel Wizard Button", 10))
if (testRunner.NameExists("Start New Design", 1))
{
testRunner.ClickByName("Cancel Wizard Button");
testRunner.ClickByName("Start New Design");
}
return testRunner;
@ -468,9 +466,10 @@ namespace MatterHackers.MatterControl.Tests.Automation
public static AutomationRunner EnsureWelcomePageClosed(this AutomationRunner testRunner)
{
// Close the WelcomePage window if active
if (testRunner.GetWidgetByName("HeaderRow", out _) is GuiWidget headerRow
&& headerRow.Parents<DialogPage>().FirstOrDefault() is Tour.WelcomePage welcomePage
&& testRunner.NameExists("Cancel Wizard Button", 1))
if (//testRunner.GetWidgetByName("HeaderRow", out _) is GuiWidget headerRow
//&& headerRow.Parents<DialogPage>().FirstOrDefault() is Tour.WelcomePage welcomePage
//&& testRunner.NameExists("Cancel Wizard Button", 1))
testRunner.NameExists("Cancel Wizard Button", 1))
{
testRunner.ClickByName("Cancel Wizard Button");
}