diff --git a/SourceGen/Exporter.cs b/SourceGen/Exporter.cs index afeb8ed..6850518 100644 --- a/SourceGen/Exporter.cs +++ b/SourceGen/Exporter.cs @@ -761,6 +761,7 @@ namespace SourceGen { /// String builder for the HTML output. private void OutputVisualizationSet(int offset, StringBuilder sb) { const int IMAGE_SIZE = 64; + const int MAX_WIDTH_PER_LINE = 768; if (!mProject.VisualizationSets.TryGetValue(offset, out VisualizationSet visSet)) { @@ -775,11 +776,10 @@ namespace SourceGen { } string imageDirFileName = Path.GetFileName(mImageDirPath); + int outputWidth = 0; for (int index = 0; index < visSet.Count; index++) { - string fileName = "vis" + offset.ToString("x6") + "_" + index.ToString("d2") + - ".gif"; - string pathName = Path.Combine(mImageDirPath, fileName); + string fileName = "vis" + offset.ToString("x6") + "_" + index.ToString("d2"); int dispWidth, dispHeight; @@ -803,6 +803,7 @@ namespace SourceGen { } #if false + // try feeding the animated GIF into our GIF unpacker using (MemoryStream ms = new MemoryStream()) { encoder.Save(ms); Debug.WriteLine("TESTING"); @@ -812,6 +813,8 @@ namespace SourceGen { #endif // Create new or replace existing image file. + fileName += "_ani.gif"; + string pathName = Path.Combine(mImageDirPath, fileName); try { using (FileStream stream = new FileStream(pathName, FileMode.Create)) { encoder.Save(stream, out dispWidth, out dispHeight); @@ -830,6 +833,8 @@ namespace SourceGen { encoder.Frames.Add(BitmapFrame.Create(vis.CachedImage)); // Create new or replace existing image file. + fileName += ".gif"; + string pathName = Path.Combine(mImageDirPath, fileName); try { using (FileStream stream = new FileStream(pathName, FileMode.Create)) { encoder.Save(stream); @@ -866,9 +871,19 @@ namespace SourceGen { //Debug.WriteLine(dispWidth + "x" + dispHeight + " --> " + // thumbWidth + "x" + thumbHeight + " (" + maxDim + ")"); - if (index != 0) { + if (outputWidth > MAX_WIDTH_PER_LINE) { + // Add a line break. In "pre" mode the bitmaps just run off the right + // edge of the screen. The way we're doing it is imprecise and doesn't + // flow with changes to the browser width, but it'll do for now. + sb.AppendLine("
"); + for (int i = 0; i < mColStart[(int)Col.Label]; i++) { + sb.Append(' '); + } + outputWidth = 0; + } else if (index != 0) { sb.Append(" "); } + outputWidth += thumbWidth; sb.Append("\"vis\"= 0 && oldObj.SerialNumber < sNextSerial); SerialNumber = oldObj.SerialNumber; } - Debug.WriteLine("NEW VIS: Serial=" + SerialNumber); + //Debug.WriteLine("NEW VIS: Serial=" + SerialNumber); } /// diff --git a/SourceGen/WpfGui/EditBitmapAnimation.xaml.cs b/SourceGen/WpfGui/EditBitmapAnimation.xaml.cs index f19046e..7ba3ef5 100644 --- a/SourceGen/WpfGui/EditBitmapAnimation.xaml.cs +++ b/SourceGen/WpfGui/EditBitmapAnimation.xaml.cs @@ -357,6 +357,7 @@ namespace SourceGen.WpfGui { VisAnimItems.Remove(item); VisAnimItems.Insert(index - 1, item); visAnimGrid.SelectedIndex = index - 1; + visAnimGrid.ScrollIntoView(item); //RefreshAnim(); } @@ -371,6 +372,7 @@ namespace SourceGen.WpfGui { VisAnimItems.Remove(item); VisAnimItems.Insert(index + 1, item); visAnimGrid.SelectedIndex = index + 1; + visAnimGrid.ScrollIntoView(item); //RefreshAnim(); } diff --git a/SourceGen/WpfGui/EditInstructionOperand.xaml.cs b/SourceGen/WpfGui/EditInstructionOperand.xaml.cs index 6bce253..4be05d1 100644 --- a/SourceGen/WpfGui/EditInstructionOperand.xaml.cs +++ b/SourceGen/WpfGui/EditInstructionOperand.xaml.cs @@ -392,7 +392,9 @@ namespace SourceGen.WpfGui { mFormatter.NonUniqueLabelPrefix, out bool isValid, out bool unused1, out bool unused2, out bool hasNonUniquePrefix, out Symbol.LabelAnnotation unused3); - if (LookupSymbol(trimLabel, hasNonUniquePrefix, out Symbol sym)) { + if (string.IsNullOrEmpty(trimLabel)) { + sb.Append("?"); + } else if (LookupSymbol(trimLabel, hasNonUniquePrefix, out Symbol sym)) { // Block move is a little weird. "MVN label1,label2" is supposed to use // the bank byte, while "MVN #const1,#const2" uses the entire symbol. // The easiest thing to do is require the user to specify the "bank" @@ -434,7 +436,6 @@ namespace SourceGen.WpfGui { } } else { sb.Append(dfd.SymbolRef.Label + " (?)"); - Debug.Assert(!string.IsNullOrEmpty(dfd.SymbolRef.Label)); //symbolValueLabel.Text = Properties.Resources.MSG_SYMBOL_NOT_FOUND; } break; diff --git a/SourceGen/WpfGui/EditVisualizationSet.xaml.cs b/SourceGen/WpfGui/EditVisualizationSet.xaml.cs index 3aaa987..8a2340b 100644 --- a/SourceGen/WpfGui/EditVisualizationSet.xaml.cs +++ b/SourceGen/WpfGui/EditVisualizationSet.xaml.cs @@ -292,6 +292,7 @@ namespace SourceGen.WpfGui { VisualizationList.RemoveAt(index); VisualizationList.Insert(index - 1, item); visualizationGrid.SelectedIndex = index - 1; + visualizationGrid.ScrollIntoView(item); } private void DownButton_Click(object sender, RoutedEventArgs e) { @@ -301,6 +302,7 @@ namespace SourceGen.WpfGui { VisualizationList.RemoveAt(index); VisualizationList.Insert(index + 1, item); visualizationGrid.SelectedIndex = index + 1; + visualizationGrid.ScrollIntoView(item); } ///