diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs index 2ce97b3d..c3f05879 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs @@ -341,12 +341,20 @@ namespace VEPROMS.CSLA.Library // item, i.e. item inserting after. If it's a section or procedure, use the copied item's type. ItemInfo cpItem = ItemInfo.Get(copyStartID); int? type = MyContent.Type >= 20000 ? MyContent.Type : cpItem.MyContent.Type; - ItemInfo tmp = CopyPasteItemInfoFetch(copyStartID, this.ItemID, type, type, EAddpingPart.Before); - using (Item item = Get()) ItemInfo.Refresh(item); - tmp.UpdateTransitionText(); - tmp.UpdatePastedStepTransitionText(); - OnNewSiblingBefore(new ItemInfoInsertEventArgs(tmp, EAddpingPart.Before)); - return tmp; + try + { + ItemInfo tmp = CopyPasteItemInfoFetch(copyStartID, this.ItemID, type, type, EAddpingPart.Before); + using (Item item = Get()) ItemInfo.Refresh(item); + tmp.UpdateTransitionText(); + tmp.UpdatePastedStepTransitionText(); + OnNewSiblingBefore(new ItemInfoInsertEventArgs(tmp, EAddpingPart.Before)); + return tmp; + } + catch (Exception ex) + { + System.Windows.Forms.MessageBox.Show("Details were written to the Error Log.","Paste Failed", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + return this; + } } public ItemInfo PasteSiblingAfter(int copyStartID) { @@ -354,17 +362,25 @@ namespace VEPROMS.CSLA.Library // item, i.e. item inserting after. If it's a section or procedure, use the copied item's type. ItemInfo cpItem = ItemInfo.Get(copyStartID); int? type = MyContent.Type >= 20000 ? MyContent.Type : cpItem.MyContent.Type; - ItemInfo tmp = CopyPasteItemInfoFetch(copyStartID, this.ItemID, type, type, EAddpingPart.After); - using (Item item = Get()) ItemInfo.Refresh(item); - if (tmp.NextItem != null) using (Item item = tmp.NextItem.Get()) ItemInfo.Refresh(item); - RefreshNextItems(); - // if inserting after a caution or note, refreshes tabs. This will adjust bullets - // of any previous cautions or notes. - if (tmp.IsCaution || tmp.IsNote) ResetOrdinal(); - tmp.UpdateTransitionText(); - tmp.UpdatePastedStepTransitionText(); - OnNewSiblingAfter(new ItemInfoInsertEventArgs(tmp, EAddpingPart.After)); - return tmp; + try + { + ItemInfo tmp = CopyPasteItemInfoFetch(copyStartID, this.ItemID, type, type, EAddpingPart.After); + using (Item item = Get()) ItemInfo.Refresh(item); + if (tmp.NextItem != null) using (Item item = tmp.NextItem.Get()) ItemInfo.Refresh(item); + RefreshNextItems(); + // if inserting after a caution or note, refreshes tabs. This will adjust bullets + // of any previous cautions or notes. + if (tmp.IsCaution || tmp.IsNote) ResetOrdinal(); + tmp.UpdateTransitionText(); + tmp.UpdatePastedStepTransitionText(); + OnNewSiblingAfter(new ItemInfoInsertEventArgs(tmp, EAddpingPart.After)); + return tmp; + } + catch (Exception ex) + { + System.Windows.Forms.MessageBox.Show("Details were written to the Error Log.", "Paste Failed", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + return this; + } } private ItemInfo CopyPasteItemInfoFetch(int copyStartID, int itemID, int? type, int? fromType, EAddpingPart addType) { @@ -1075,37 +1091,47 @@ namespace VEPROMS.CSLA.Library { if (!CanDeleteObject()) throw new System.Security.SecurityException("User not authorized to remove a Item"); - ItemInfo newItemInfo = CopyPasteReplaceItemInfoFetch(copyStartID, itemInfo); //itemInfo.ItemID, itemInfo.MyContent.Type, itemInfo.MyContent.Type); - // Delete business objects, including remove from tree - ItemInfo.DeleteItemInfoAndChildren(itemInfo.ItemID); // Dispose ItemInfo and Children - using (Item item = Get(newItemInfo.ItemID)) ItemInfo.Refresh(item); - if (newItemInfo.NextItem != null) using (Item item = newItemInfo.NextItem.Get()) ItemInfo.Refresh(item); - newItemInfo.RefreshNextItems(); - // if inserting after a caution or note, refreshes tabs. This will adjust bullets - // of any previous cautions or notes. - if (newItemInfo.IsCaution || newItemInfo.IsNote) newItemInfo.ResetOrdinal(); - newItemInfo.UpdateTransitionText(); - newItemInfo.UpdatePastedStepTransitionText(); - // Add to tree - if (newItemInfo.NextItemCount > 0) + try { - using (ItemInfo itm = ItemInfo.Get(newItemInfo.NextItem.ItemID)) + ItemInfo newItemInfo = CopyPasteReplaceItemInfoFetch(copyStartID, itemInfo); //itemInfo.ItemID, itemInfo.MyContent.Type, itemInfo.MyContent.Type); + // Delete business objects, including remove from tree + ItemInfo.DeleteItemInfoAndChildren(itemInfo.ItemID); // Dispose ItemInfo and Children + using (Item item = Get(newItemInfo.ItemID)) ItemInfo.Refresh(item); + if (newItemInfo.NextItem != null) using (Item item = newItemInfo.NextItem.Get()) ItemInfo.Refresh(item); + newItemInfo.RefreshNextItems(); + // if inserting after a caution or note, refreshes tabs. This will adjust bullets + // of any previous cautions or notes. + if (newItemInfo.IsCaution || newItemInfo.IsNote) newItemInfo.ResetOrdinal(); + newItemInfo.UpdateTransitionText(); + newItemInfo.UpdatePastedStepTransitionText(); + // Add to tree + if (newItemInfo.NextItemCount > 0) { - itm.OnNewSiblingBefore(new ItemInfoInsertEventArgs(newItemInfo, ItemInfo.EAddpingPart.Before)); + using (ItemInfo itm = ItemInfo.Get(newItemInfo.NextItem.ItemID)) + { + itm.OnNewSiblingBefore(new ItemInfoInsertEventArgs(newItemInfo, ItemInfo.EAddpingPart.Before)); + } } - } - else if (newItemInfo.PreviousID != null) - { - using (ItemInfo itm2 = ItemInfo.Get((int)newItemInfo.PreviousID)) + else if (newItemInfo.PreviousID != null) { - itm2.OnNewSiblingAfter(new ItemInfoInsertEventArgs(newItemInfo, ItemInfo.EAddpingPart.After)); + using (ItemInfo itm2 = ItemInfo.Get((int)newItemInfo.PreviousID)) + { + itm2.OnNewSiblingAfter(new ItemInfoInsertEventArgs(newItemInfo, ItemInfo.EAddpingPart.After)); + } } + else + { + newItemInfo.MyParent.OnNewChild(new ItemInfoInsertEventArgs(newItemInfo, ItemInfo.EAddpingPart.Child)); + } + return newItemInfo; } - else + catch (Exception ex) { - newItemInfo.MyParent.OnNewChild(new ItemInfoInsertEventArgs(newItemInfo, ItemInfo.EAddpingPart.Child)); + if (ex.Message.Contains("has External Transitions and has no next step") || ex.Message.Contains("has External Transitions to it's children")) + throw ex; + System.Windows.Forms.MessageBox.Show("Details were written to the Error Log.", "Paste Replace Failed", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + return itemInfo; } - return newItemInfo; } private static ItemInfo CopyPasteReplaceItemInfoFetch(int copyStartID, ItemInfo itemInfo) // int itemID, int? type, int? fromType) { diff --git a/PROMS/Volian.Controls.Library/EditItem.cs b/PROMS/Volian.Controls.Library/EditItem.cs index c2251966..ea85001a 100644 --- a/PROMS/Volian.Controls.Library/EditItem.cs +++ b/PROMS/Volian.Controls.Library/EditItem.cs @@ -758,7 +758,8 @@ namespace Volian.Controls.Library return newFocus; } - private void HandleSqlExceptionOnDelete(System.Data.SqlClient.SqlException ex) + //private void HandleSqlExceptionOnDelete(System.Data.SqlClient.SqlException ex) + private void HandleSqlExceptionOnDelete(Exception ex) { if (ex.Message.Contains("has External Transitions and has no next step")) { @@ -1153,6 +1154,7 @@ namespace Volian.Controls.Library public void PasteSiblingBefore(int copyStartID) { ItemInfo newItemInfo = MyItemInfo.PasteSiblingBefore(copyStartID); + if (newItemInfo.ItemID == MyItemInfo.ItemID) return; EditItem newEditItem = null; switch (_MyChildRelation) { @@ -1175,6 +1177,7 @@ namespace Volian.Controls.Library public void PasteSiblingAfter(int copyStartID) { ItemInfo newItemInfo = MyItemInfo.PasteSiblingAfter(copyStartID); + if (newItemInfo.ItemID == MyItemInfo.ItemID) return; EditItem newEditItem = null; switch (_MyChildRelation) { @@ -1215,7 +1218,8 @@ namespace Volian.Controls.Library { newItemInfo = Item.PasteReplace(MyItemInfo, copyStartID); } - catch (System.Data.SqlClient.SqlException ex) + //catch (System.Data.SqlClient.SqlException ex) + catch (Exception ex) { HandleSqlExceptionOnDelete(ex); return this; diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.cs index e9f0fb15..bcb17838 100644 --- a/PROMS/Volian.Controls.Library/StepTabRibbon.cs +++ b/PROMS/Volian.Controls.Library/StepTabRibbon.cs @@ -645,6 +645,7 @@ namespace Volian.Controls.Library btnCMGoTo.Enabled = btnGoTo.Enabled = true; else { + if (_MyStepRTB == null) return; if (_MyStepRTB.IsSelectionLinked(_MyStepRTB.SelectionStart, _MyStepRTB.SelectionLength)) { // if selected text = ?, i.e. a missing/undefined destination, don't allow go to @@ -1810,6 +1811,15 @@ namespace Volian.Controls.Library public void btnDelStep_Click(object sender, EventArgs e) { + bool clearCopyStep = false; + StepTabPanel tmp = Parent as StepTabPanel; + if (tmp.MyDisplayTabControl.MyCopyStep != null && + tmp.MyDisplayTabControl.MyCopyStep.ItemID == MyEditItem.MyItemInfo.ItemID) + { + if (MessageBox.Show("Are you sure?\n\nIf you delete this step you will not able to paste it.\nYou should paste it before you delete it.", "Attempting to delete copied step.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; + clearCopyStep = true; + } + bool surpressMessageBox = (e == null); SectionInfo si = MyEditItem.MyItemInfo as SectionInfo; if (si != null) @@ -1836,7 +1846,7 @@ namespace Volian.Controls.Library StepInfo stpi = MyEditItem.MyItemInfo as StepInfo; if (stpi == null) // not sure that it will every get here! { - MessageBox.Show("Unknown type {0}, cannot delete!",MyEditItem.MyItemInfo.GetType().Name); + MessageBox.Show("Unknown type {0}, cannot delete!", MyEditItem.MyItemInfo.GetType().Name); return; } if (!surpressMessageBox) @@ -1858,10 +1868,24 @@ namespace Volian.Controls.Library } MyEditItem.IdentifyChildren(false); if (results == DialogResult.Yes) + { MyEditItem.RemoveItem(); + if (clearCopyStep) + { + tmp.MyDisplayTabControl.MyCopyStep = null; + SetPasteButtonEnabled(); + } + } } else + { MyEditItem.RemoveItem(); + if (clearCopyStep) + { + tmp.MyDisplayTabControl.MyCopyStep = null; + SetPasteButtonEnabled(); + } + } } private void btnCMIns_PopupClose(object sender, EventArgs e)