Fixed copy paste crashes

This commit is contained in:
Ben
2015-07-04 16:47:28 +01:00
parent 3a60a5005b
commit 0c470b3c97
7 changed files with 102 additions and 47 deletions

View File

@@ -71,7 +71,6 @@ namespace Filtration
public void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
_logger.Fatal(e.Exception);
var exception = e.Exception.Message + Environment.NewLine + e.Exception.StackTrace;
var innerException = e.Exception.InnerException != null
? e.Exception.InnerException.Message + Environment.NewLine +

View File

@@ -293,14 +293,17 @@ namespace Filtration.Translators
{
throw new Exception("Parsing error - unknown theme component type");
}
blockItem.ThemeComponent = _themeComponentListBuilder.AddComponent(componentType, componentName, blockItem.Color);
if (_themeComponentListBuilder.IsInitialised)
{
blockItem.ThemeComponent = _themeComponentListBuilder.AddComponent(componentType, componentName,
blockItem.Color);
}
}
return blockItem;
}
public void ReplaceColorBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems , string inputString)
public void ReplaceColorBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString)
{
// Reverse iterate to remove existing IAudioVisualBlockItems
for (var idx = blockItems.Count - 1; idx >= 0; idx--)
@@ -342,26 +345,7 @@ namespace Filtration.Translators
}
}
}
private void ReplaceColorBlockItem<T>(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString) where T : ColorBlockItem
{
var newBlockItem = GetColorBlockItemFromString<T>(inputString);
var existingBlockItem = blockItems.OfType<T>().FirstOrDefault();
blockItems.Remove(existingBlockItem);
blockItems.Add(newBlockItem);
}
private void ReplaceFontSizeBlockItem(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString)
{
var match = Regex.Match(inputString, @"\s+(\d+)");
if (!match.Success) return;
var newBlockItem = new FontSizeBlockItem(Convert.ToInt16(match.Value));
var existingBlockItem = blockItems.OfType<FontSizeBlockItem>().FirstOrDefault();
blockItems.Remove(existingBlockItem);
blockItems.Add(newBlockItem);
}
private void AddBlockGroupToBlock(ItemFilterBlock block, string inputString)
{
var blockGroupStart = inputString.IndexOf("#", StringComparison.Ordinal);

View File

@@ -10,6 +10,8 @@ namespace Filtration.Translators
internal interface IThemeComponentListBuilder
{
void Initialise();
void Initialise(List<ThemeComponent> themeComponents);
bool IsInitialised { get; }
ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, Color componentColor);
List<ThemeComponent> GetComponents();
void Cleanup();
@@ -21,7 +23,14 @@ namespace Filtration.Translators
public ThemeComponentListBuilder()
{
_themeComponents = new List<ThemeComponent>();
}
public bool IsInitialised
{
get
{
return _themeComponents != null;
}
}
public void Initialise()
@@ -29,6 +38,11 @@ namespace Filtration.Translators
_themeComponents = new List<ThemeComponent>();
}
public void Initialise(List<ThemeComponent> themeComponents)
{
_themeComponents = themeComponents;
}
public void Cleanup()
{
_themeComponents = null;

View File

@@ -533,29 +533,38 @@ namespace Filtration.ViewModels
public void PasteBlock(IItemFilterBlockViewModel targetBlockViewModel)
{
var clipboardText = Clipboard.GetText();
if (clipboardText.IsNullOrEmpty()) return;
var translatedBlock = _blockTranslator.TranslateStringToItemFilterBlock(clipboardText);
if (translatedBlock == null) return;
var vm = _itemFilterBlockViewModelFactory.Create();
vm.Initialise(translatedBlock, this);
if (ItemFilterBlockViewModels.Count > 0)
try
{
Script.ItemFilterBlocks.Insert(Script.ItemFilterBlocks.IndexOf(targetBlockViewModel.Block) + 1, translatedBlock);
ItemFilterBlockViewModels.Insert(ItemFilterBlockViewModels.IndexOf(targetBlockViewModel) + 1, vm);
var clipboardText = Clipboard.GetText();
if (clipboardText.IsNullOrEmpty()) return;
var translatedBlock = _blockTranslator.TranslateStringToItemFilterBlock(clipboardText);
if (translatedBlock == null) return;
var vm = _itemFilterBlockViewModelFactory.Create();
vm.Initialise(translatedBlock, this);
if (ItemFilterBlockViewModels.Count > 0)
{
Script.ItemFilterBlocks.Insert(Script.ItemFilterBlocks.IndexOf(targetBlockViewModel.Block) + 1,
translatedBlock);
ItemFilterBlockViewModels.Insert(ItemFilterBlockViewModels.IndexOf(targetBlockViewModel) + 1, vm);
}
else
{
Script.ItemFilterBlocks.Add(translatedBlock);
ItemFilterBlockViewModels.Add(vm);
}
SelectedBlockViewModel = vm;
IsDirty = true;
}
else
catch (Exception e)
{
Script.ItemFilterBlocks.Add(translatedBlock);
ItemFilterBlockViewModels.Add(vm);
_logger.Error(e);
MessageBox.Show(e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine +
e.InnerException.Message + Environment.NewLine + e.InnerException.StackTrace, "Paste Error", MessageBoxButton.OK);
}
SelectedBlockViewModel = vm;
IsDirty = true;
}
private void OnMoveBlockToTopCommand()