Work on the ActionBar UI

Changed behavior of 'Skip' button.
This commit is contained in:
Kevin Pope 2014-02-10 19:17:25 -08:00
parent f41f136f19
commit 95b2efb48c
5 changed files with 160 additions and 73 deletions

View file

@ -21,7 +21,7 @@ namespace MatterHackers.MatterControl
{ {
public ActionBarPlus() public ActionBarPlus()
: base(FlowDirection.TopToBottom) : base(FlowDirection.TopToBottom)
{ {
this.Create(); this.Create();
} }
@ -42,8 +42,7 @@ namespace MatterHackers.MatterControl
// Add Child Elements // Add Child Elements
this.AddChild(new ActionBar.PrinterActionRow()); this.AddChild(new ActionBar.PrinterActionRow());
this.AddChild(new PrintStatusRow()); this.AddChild(new PrintStatusRow());
this.AddChild(new MessageActionRow());
// Add Handlers // Add Handlers
ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents); ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents);
@ -74,7 +73,7 @@ namespace MatterHackers.MatterControl
protected override void Initialize() protected override void Initialize()
{ {
this.Margin = new BorderDouble(6, 6); this.Margin = new BorderDouble(0,3,0,0);
} }
} }
} }

View file

@ -51,8 +51,8 @@ namespace MatterHackers.MatterControl.ActionBar
} }
protected override void AddChildElements() protected override void AddChildElements()
{ {
addButton = (TooltipButton)textImageButtonFactory.GenerateTooltipButton(new LocalizedString("Add").Translated, "icon_circle_plus.png"); addButton = (TooltipButton)textImageButtonFactory.GenerateTooltipButton(new LocalizedString("Add").Translated, "icon_circle_plus.png");
addButton.tooltipText = new LocalizedString("Add a file to be printed").Translated; addButton.tooltipText = new LocalizedString("Add a file to be printed").Translated;
addButton.Margin = new BorderDouble(0, 6, 6, 3); addButton.Margin = new BorderDouble(0, 6, 6, 3);
@ -250,7 +250,7 @@ namespace MatterHackers.MatterControl.ActionBar
{ {
if (PrintQueueControl.Instance.Count > 1) if (PrintQueueControl.Instance.Count > 1)
{ {
PrintQueueControl.Instance.MoveSelectedToBottom(); PrintQueueControl.Instance.MoveToNext();
} }
} }

View file

@ -77,7 +77,7 @@ namespace MatterHackers.MatterControl.ActionBar
} }
override protected void AddChildElements() override protected void AddChildElements()
{ {
activePrintPreviewImage = new PartThumbnailWidget(null, "part_icon_transparent_100x100.png", "building_thumbnail_100x100.png", new Vector2(115, 115)); activePrintPreviewImage = new PartThumbnailWidget(null, "part_icon_transparent_100x100.png", "building_thumbnail_100x100.png", new Vector2(115, 115));
activePrintPreviewImage.VAnchor = VAnchor.ParentTop; activePrintPreviewImage.VAnchor = VAnchor.ParentTop;
activePrintPreviewImage.Padding = new BorderDouble(0); activePrintPreviewImage.Padding = new BorderDouble(0);
@ -136,8 +136,9 @@ namespace MatterHackers.MatterControl.ActionBar
container.AddChild(topRow); container.AddChild(topRow);
container.AddChild(activePrintName); container.AddChild(activePrintName);
container.AddChild(activePrintStatus); container.AddChild(activePrintStatus);
container.AddChild(activePrintInfo); //container.AddChild(activePrintInfo);
container.AddChild(printActionRow); container.AddChild(printActionRow);
container.AddChild(new MessageActionRow());
return container; return container;
} }
@ -197,62 +198,7 @@ namespace MatterHackers.MatterControl.ActionBar
{ {
if (PrinterCommunication.Instance.ActivePrintItem != null) if (PrinterCommunication.Instance.ActivePrintItem != null)
{ {
int secondsPrinted = PrinterCommunication.Instance.SecondsPrinted;
int hoursPrinted = (int)(secondsPrinted / (60 * 60));
int minutesPrinted = (int)(secondsPrinted / 60 - hoursPrinted * 60);
secondsPrinted = secondsPrinted % 60;
string timePrintedText;
if (hoursPrinted > 0)
{
timePrintedText = string.Format("Print Time: {0}:{1:00}:{2:00}",
hoursPrinted,
minutesPrinted,
secondsPrinted);
}
else
{
timePrintedText = string.Format("Print Time: {0:00}:{1:00}",
minutesPrinted,
secondsPrinted);
}
int secondsRemaining = PrinterCommunication.Instance.SecondsRemaining;
int hoursRemaining = (int)(secondsRemaining / (60 * 60));
int minutesRemaining = (int)(secondsRemaining / 60 - hoursRemaining * 60);
secondsRemaining = secondsRemaining % 60;
string timeRemainingText;
if (secondsRemaining > 0)
{
if (hoursRemaining > 0)
{
timeRemainingText = string.Format("Remaining (est): {0}:{1:00}:{2:00}",
hoursRemaining,
minutesRemaining,
secondsRemaining);
}
else
{
timeRemainingText = string.Format("Remaining (est): {0:00}:{1:00}",
minutesRemaining,
secondsRemaining);
}
}
else if (PrinterCommunication.Instance.PrintIsFinished)
{
timeRemainingText = "";
}
else
{
timeRemainingText = string.Format("Remaining (est): --:--",
secondsPrinted / 60,
secondsPrinted % 60);
}
string printTimeInfoText = timePrintedText;
if (timeRemainingText != "")
{
printTimeInfoText += ", " + timeRemainingText;
}
//GC.WaitForFullGCComplete(); //GC.WaitForFullGCComplete();
string printPercentRemainingText; string printPercentRemainingText;
@ -270,7 +216,6 @@ namespace MatterHackers.MatterControl.ActionBar
{ {
activePrintLabel.Text = PrinterCommunication.Instance.PrintingStateString; activePrintLabel.Text = PrinterCommunication.Instance.PrintingStateString;
ActivePrintStatusText = printPercentRemainingText; ActivePrintStatusText = printPercentRemainingText;
activePrintInfo.Text = printTimeInfoText;
} }
break; break;
@ -278,14 +223,12 @@ namespace MatterHackers.MatterControl.ActionBar
{ {
activePrintLabel.Text = "Printing Paused:"; activePrintLabel.Text = "Printing Paused:";
ActivePrintStatusText = printPercentRemainingText; ActivePrintStatusText = printPercentRemainingText;
activePrintInfo.Text = printTimeInfoText;
} }
break; break;
case PrinterCommunication.CommunicationStates.FinishedPrint: case PrinterCommunication.CommunicationStates.FinishedPrint:
activePrintLabel.Text = "Done Printing:"; activePrintLabel.Text = "Done Printing:";
ActivePrintStatusText = printPercentRemainingText; ActivePrintStatusText = printPercentRemainingText;
activePrintInfo.Text = printTimeInfoText;
break; break;
default: default:

View file

@ -13,22 +13,55 @@ namespace MatterHackers.MatterControl
public class PrintProgressBar : GuiWidget public class PrintProgressBar : GuiWidget
{ {
double currentPercent = 0; double currentPercent = 0;
Stopwatch timeSinceLastUpdate = new Stopwatch();
RGBA_Bytes completeColor = new RGBA_Bytes(255, 255, 255); RGBA_Bytes completeColor = new RGBA_Bytes(255, 255, 255);
TextWidget printTimeRemaining;
TextWidget printTimeElapsed;
public PrintProgressBar() public PrintProgressBar()
{ {
MinimumSize = new Vector2(0, 10); MinimumSize = new Vector2(0, 30);
HAnchor = HAnchor.ParentLeftRight; HAnchor = HAnchor.ParentLeftRight;
BackgroundColor = ActiveTheme.Instance.SecondaryAccentColor; BackgroundColor = ActiveTheme.Instance.SecondaryAccentColor;
Margin = new BorderDouble(0); Margin = new BorderDouble(0);
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.LeftToRight);
container.AnchorAll();
container.Padding = new BorderDouble(7,0);
RGBA_Bytes labelColor = ActiveTheme.Instance.PrimaryAccentColor;
//labelColor.alpha = 220;
printTimeElapsed = new TextWidget("2:30:00");
printTimeElapsed.VAnchor = Agg.UI.VAnchor.ParentCenter;
printTimeElapsed.TextColor = labelColor;
printTimeRemaining = new TextWidget("4:50:30");
printTimeRemaining.VAnchor = Agg.UI.VAnchor.ParentCenter;
printTimeRemaining.TextColor = labelColor;
GuiWidget spacer = new GuiWidget();
spacer.HAnchor = Agg.UI.HAnchor.ParentLeftRight;
container.AddChild(printTimeElapsed);
container.AddChild(spacer);
container.AddChild(printTimeRemaining);
AddChild(container);
AddHandlers(); AddHandlers();
UpdatePrintStatus();
UiThread.RunOnIdle(OnIdle);
} }
event EventHandler unregisterEvents; event EventHandler unregisterEvents;
void AddHandlers() void AddHandlers()
{ {
PrinterCommunication.Instance.WroteLine.RegisterEvent(Instance_WroteLine, ref unregisterEvents); PrinterCommunication.Instance.WroteLine.RegisterEvent(Instance_WroteLine, ref unregisterEvents);
PrinterCommunication.Instance.ActivePrintItemChanged.RegisterEvent(Instance_PrintItemChanged, ref unregisterEvents);
PrinterCommunication.Instance.ConnectionStateChanged.RegisterEvent(Instance_PrintItemChanged, ref unregisterEvents);
ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents); ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents);
} }
@ -44,11 +77,18 @@ namespace MatterHackers.MatterControl
private void onThemeChanged(object sender, EventArgs e) private void onThemeChanged(object sender, EventArgs e)
{ {
//Set background color to new theme //Set background color to new theme
this.printTimeElapsed.TextColor = ActiveTheme.Instance.PrimaryAccentColor;
this.printTimeRemaining.TextColor = ActiveTheme.Instance.PrimaryAccentColor;
this.BackgroundColor = ActiveTheme.Instance.SecondaryAccentColor; this.BackgroundColor = ActiveTheme.Instance.SecondaryAccentColor;
this.Invalidate(); this.Invalidate();
} }
Stopwatch timeSinceLastUpdate = new Stopwatch();
void Instance_PrintItemChanged(object sender, EventArgs e)
{
UpdatePrintStatus();
}
void Instance_WroteLine(object sender, EventArgs e) void Instance_WroteLine(object sender, EventArgs e)
{ {
if (!timeSinceLastUpdate.IsRunning) if (!timeSinceLastUpdate.IsRunning)
@ -56,17 +96,106 @@ namespace MatterHackers.MatterControl
timeSinceLastUpdate.Start(); timeSinceLastUpdate.Start();
} }
if (timeSinceLastUpdate.ElapsedMilliseconds > 5000) if (timeSinceLastUpdate.ElapsedMilliseconds > 999)
{ {
timeSinceLastUpdate.Restart(); timeSinceLastUpdate.Restart();
currentPercent = PrinterCommunication.Instance.PercentComplete; currentPercent = PrinterCommunication.Instance.PercentComplete;
UpdatePrintStatus();
this.Invalidate();
} }
} }
public override void OnDraw(Graphics2D graphics2D) void OnIdle(object state)
{ {
if (!timeSinceLastUpdate.IsRunning)
{
timeSinceLastUpdate.Start();
}
if (timeSinceLastUpdate.ElapsedMilliseconds > 999)
{
timeSinceLastUpdate.Restart();
currentPercent = PrinterCommunication.Instance.PercentComplete;
UpdatePrintStatus();
}
UiThread.RunOnIdle(OnIdle);
}
private void UpdatePrintStatus()
{
if (PrinterCommunication.Instance.ActivePrintItem == null)
{
printTimeElapsed.Text = string.Format("");
printTimeRemaining.Text = string.Format("");
}
else
{
int secondsPrinted = PrinterCommunication.Instance.SecondsPrinted;
int hoursPrinted = (int)(secondsPrinted / (60 * 60));
int minutesPrinted = (int)(secondsPrinted / 60 - hoursPrinted * 60);
secondsPrinted = secondsPrinted % 60;
if (secondsPrinted > 0)
{
if (hoursPrinted > 0)
{
printTimeElapsed.Text = string.Format("{0}:{1:00}:{2:00}",
hoursPrinted,
minutesPrinted,
secondsPrinted);
}
else
{
printTimeElapsed.Text = string.Format("{0}:{1:00}",
minutesPrinted,
secondsPrinted);
}
}
else
{
printTimeElapsed.Text = string.Format("");
}
int secondsRemaining = PrinterCommunication.Instance.SecondsRemaining;
int hoursRemaining = (int)(secondsRemaining / (60 * 60));
int minutesRemaining = (int)(secondsRemaining / 60 - hoursRemaining * 60);
secondsRemaining = secondsRemaining % 60;
if (secondsRemaining > 0)
{
if (hoursRemaining > 0)
{
printTimeRemaining.Text = string.Format("{0}:{1:00}:{2:00}",
hoursRemaining,
minutesRemaining,
secondsRemaining);
}
else
{
printTimeRemaining.Text = string.Format("{0}:{1:00}",
minutesRemaining,
secondsRemaining);
}
}
else if (PrinterCommunication.Instance.PrintIsFinished)
{
printTimeRemaining.Text = "Done!";
}
else
{
printTimeRemaining.Text = string.Format("");
}
}
this.Invalidate();
}
public override void OnDraw(Graphics2D graphics2D)
{
graphics2D.FillRectangle(0, 0, Width * currentPercent / 100, Height, completeColor);
base.OnDraw(graphics2D); base.OnDraw(graphics2D);
graphics2D.FillRectangle(0, 0, Width * currentPercent / 100, Height, completeColor);
} }
} }
} }

View file

@ -108,6 +108,22 @@ namespace MatterHackers.MatterControl.PrintQueue
} }
} }
public void MoveToNext()
{
if (SelectedIndex >= 0 && SelectedIndex < Count)
{
if (this.SelectedIndex == Count - 1)
{
this.SelectedIndex = 0;
}
else
{
this.SelectedIndex++;
}
}
}
public void MoveSelectedToBottom() public void MoveSelectedToBottom()
{ {
if (SelectedIndex >= 0 && SelectedIndex < Count) if (SelectedIndex >= 0 && SelectedIndex < Count)