Add UserInfo property and modified code to assure a person with Reviewer security can only manage annotations created by themself.

Added SessionInfo property to DisplayTabControl class and managed opening and closing DisplayTabItems.
Added OwnerID and UserRole properties to DisplayTabItem class and obtained owner id and setup security based on user role when opening an item.
Added property to allow forced check in of word document to ignore any changes made by user.
Removed debug code
Added methods to setup ribbon control based on user's security role.
Added SessionInfo property and events and methods to setup proper menu items to appear on the right click of a node based on user's role and checked out status of item.
This commit is contained in:
Rich 2013-11-20 23:12:47 +00:00
parent a7562422b2
commit 50910d00b8
7 changed files with 712 additions and 156 deletions

View File

@ -85,7 +85,12 @@ namespace Volian.Controls.Library
rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text
}
}
private UserInfo _MyUserInfo;
public UserInfo MyUserInfo
{
get { return _MyUserInfo; }
set { _MyUserInfo = value; }
}
#endregion
#region Constructors
@ -204,8 +209,20 @@ namespace Volian.Controls.Library
}
_LoadingAnnotation = false;
AnnotationDirty = false;
if (!_LoadingGrid)
rtxbComment.Focus(); // Set the focus to the comment text
if (!_LoadingGrid)
rtxbComment.Focus(); // Set the focus to the comment text
if (MyUserInfo.IsReviewer(_CurrentItem.MyDocVersion) && CurrentAnnotation != null && CurrentAnnotation.UserID != MyUserInfo.UserID)
{
btnRemoveAnnotation.Enabled = false;
cbGridAnnoType.Enabled = false;
rtxbComment.Enabled = false;
}
else
{
btnRemoveAnnotation.Enabled = true;
cbGridAnnoType.Enabled = true;
rtxbComment.Enabled = true;
}
}
#endregion

View File

@ -85,6 +85,12 @@ namespace Volian.Controls.Library
return !doc.Saved;
}
}
private bool _OverrideClose = false;
public bool OverrideClose
{
get { return _OverrideClose; }
set { _OverrideClose = value; }
}
public E_ViewMode PanelViewEditMode = E_ViewMode.Edit;
#endregion
//private frmPG _frm = null;
@ -187,7 +193,7 @@ namespace Volian.Controls.Library
this._MyDSOFramer.Open(MyDSOFile.MyFile.FullName);
}
LBDocumentClass doc = new LBDocumentClass(_MyDSOFramer.ActiveDocument);
//Console.WriteLine("Version {0}", doc.Application.Version);
Console.WriteLine("Version {0}", doc.Application.Version);
float ver;
if (!float.TryParse(doc.Application.Version, out ver))
ver = 12.0F;
@ -528,6 +534,8 @@ namespace Volian.Controls.Library
/// <returns></returns>
public bool SaveDirty()
{
if (OverrideClose)
return false;
if (IsDirty)
{
// Unfortunately, the only way to handle view mode for DSO Framer is to not save.
@ -537,7 +545,7 @@ namespace Volian.Controls.Library
return false;
}
//if (MessageBox.Show("Save changes to " + _MyDisplayTabItem.MyItemInfo.TabTitle + "\r\n" + _MyDisplayTabItem.MyItemInfo.TabToolTip, "Document has Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
if (MessageBox.Show("Save changes to " + _MyDisplayTabItem.Text + "\r\n" + _MyDisplayTabItem.Tooltip, "Document has Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
if (MessageBox.Show("Save changes to " + _MyDisplayTabItem.Text + "\r\n" + _MyDisplayTabItem.Tooltip, "Document has Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
return SaveDSO();
return false;
}

View File

@ -327,6 +327,7 @@ namespace Volian.Controls.Library
e.RemoveDockTab = true;
_RemovedDisplayTabItems.Add((DisplayTabItem)e.DockContainerItem);
DisplayTabItem dti = e.DockContainerItem as DisplayTabItem;
MySessionInfo.CheckInItem(dti.OwnerID);
if (dti != null && dti.MyStepTabPanel != null)
dti.MyStepTabPanel.MyStepPanel.Dispose();
DisplayTabItem myTabItem = e.DockContainerItem as DisplayTabItem;
@ -363,6 +364,23 @@ namespace Volian.Controls.Library
public DisplayTabItem OpenItem(ItemInfo myItemInfo2)
{
ItemInfo myItemInfo = myItemInfo2;
string message = string.Empty;
if (myItemInfo.MyContent.MyEntry == null) //not a document
{
if (!MySessionInfo.CanCheckOutItem(myItemInfo.MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Procedure Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return null;
}
}
else
{
if (!MySessionInfo.CanCheckOutItem(myItemInfo.MyContent.MyEntry.DocID, CheckOutType.Document, ref message))
{
MessageBox.Show(this, message, "Document Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return null;
}
}
//if (myItemInfo.IsProcedure)
//{
// DateTime start = DateTime.Now;
@ -511,9 +529,12 @@ namespace Volian.Controls.Library
public void CloseTabItem(DisplayTabItem myTabItem)
{
Bar b = myTabItem.ContainerControl as Bar;
b.CloseDockTab(myTabItem);
//b.Items.Remove(myTabItem);
RemoveItem(myTabItem);
if (b != null)
{
b.CloseDockTab(myTabItem);
//b.Items.Remove(myTabItem);
RemoveItem(myTabItem);
}
}
/// <summary>
/// Look for a tab and set it to active.
@ -553,6 +574,12 @@ namespace Volian.Controls.Library
}
#endregion
#region Public Properties
private SessionInfo _MySessionInfo;
public SessionInfo MySessionInfo
{
get { return _MySessionInfo; }
set { _MySessionInfo = value; }
}
public DevComponents.DotNetBar.Bar MyBar
{
get { return _MyBar; }
@ -834,7 +861,7 @@ namespace Volian.Controls.Library
//if ((myItemInfo.MyContent.MyEntry.MyDocument.LibTitle ?? "") != "")
// MessageBox.Show("WARNING: All edits made to this Library Document will be applied to all uses of the Document");
pg = new DisplayTabItem(this.components, this, myItemInfo, key); // Open a new document page
_MyDisplayTabItems.Add(key, pg);
_MyDisplayTabItems.Add(key, pg);
}
SelectDisplayTabItem(pg);
pg.MyDSOTabPanel.EnterPanel();

View File

@ -24,6 +24,12 @@ namespace Volian.Controls.Library
/// <summary>
/// ItemInfo associated with this DisplayTabItem
/// </summary>
private int _OwnerID;
public int OwnerID
{
get { return _OwnerID; }
set { _OwnerID = value; }
}
public ItemInfo MyItemInfo
{
get { return _MyItemInfo; }
@ -54,6 +60,12 @@ namespace Volian.Controls.Library
get { return _MyDSOTabPanel; }
set { _MyDSOTabPanel = value; }
}
private string _MyUserRole;
public string MyUserRole
{
get { return _MyUserRole; }
set { _MyUserRole = value; }
}
/// <summary>
/// Current SelectedItemInfo for this page
/// </summary>
@ -77,9 +89,14 @@ namespace Volian.Controls.Library
#region Constructors
public DisplayTabItem(IContainer container, DisplayTabControl myDisplayTabControl, ItemInfo myItemInfo, string myKey)
{
_MyItemInfo = myItemInfo;
if(MyItemInfo.MyContent.MyEntry == null)
OwnerID = myDisplayTabControl.MySessionInfo.CheckOutItem(myItemInfo.MyProcedure.ItemID, CheckOutType.Procedure);
else
OwnerID = myDisplayTabControl.MySessionInfo.CheckOutItem(myItemInfo.MyContent.MyEntry.DocID, CheckOutType.Document);
Console.WriteLine("DisplayTabItem");
_MyKey = myKey;
_MyDisplayTabControl = myDisplayTabControl;
_MyItemInfo = myItemInfo;
container.Add(this);
InitializeComponent();
this.Click += new EventHandler(DisplayTabItem_Click);
@ -87,8 +104,59 @@ namespace Volian.Controls.Library
SetupStepTabPanel();
else
SetupDSOTabPanel();
SetupSecurity(myItemInfo);
Name = string.Format("DisplayTabItem {0}", myItemInfo.ItemID);
}
private bool MesssageShown = false;
public void SetupSecurity(ItemInfo myItem)
{
UserInfo ui = UserInfo.GetByUserID(OwnerInfo.Get(OwnerID).SessionUserID);
if (ui == null)
{
if (!MesssageShown)
{
System.Windows.Forms.MessageBox.Show("Security has not been defined for PROMS. All functionality has been defaulted to the lowest level for all users until security is defined.", "no security defined", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
MesssageShown = true;
}
_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
}
else if (ui.IsAdministrator())
{
if(_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupAdminMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Administrator";
}
else if (ui.IsSetAdministrator(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupSetAdminMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Set Administrator";
}
else if (ui.IsROEditor(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupROEditorMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - RO Editor";
}
else if (ui.IsWriter(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupWriterMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Writer";
}
else if (ui.IsReviewer(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Reviewer";
}
else
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Reviewer";
}
}
public DisplayTabItem(IContainer container, DisplayTabControl myDisplayTabControl, DocumentInfo myDocumentInfo, string myKey)
{
_MyKey = myKey;

View File

@ -2282,8 +2282,6 @@ namespace Volian.Controls.Library
}
protected void SetupEditItem(ItemInfo itemInfo, StepPanel myStepPanel, EditItem myParentEditItem, ChildRelation myChildRelation, bool expand, EditItem nextEditItem, bool addFirstChld)
{
if (itemInfo.ItemID == 1359)
Console.WriteLine("jcb");
if (myStepPanel.TopMostEditItem == null) myStepPanel.TopMostEditItem = this;
//if (itemInfo.ItemID == 10366) Console.WriteLine("Here");
//if (itemInfo.ItemID == 225) _MyStepRTB.Resize += new EventHandler(_MyStepRTB_Resize);

View File

@ -29,6 +29,7 @@ namespace Volian.Controls.Library
}
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#region Properties
private bool EnableROEdit;
private VlnFlexGrid MyFlexGrid
{
get
@ -47,6 +48,7 @@ namespace Volian.Controls.Library
_MyEditItem = value;
if (value != null)
{
(this.Parent as StepTabPanel).MyDisplayTabItem.SetupSecurity(MyItemInfo);
MyStepRTB = value.MyStepRTB;
if (value is GridItem)
{
@ -427,7 +429,7 @@ namespace Volian.Controls.Library
if (_MyStepRTB == null) return;
// if we are in view mode or the edit window is empty, then don't allow inserting steps/substeps,
// page breaks, copy step, nor creating a pdf
bool allow = (_MyStepRTB.TextLength > 0);
bool allow = (_MyStepRTB.TextLength > 0 && (MyEditItem == null || MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit));
// turn ribbon items on/off base on whether there is text in the edit window
rbnSiblings.Enabled = rbnBreaks.Enabled = rbnStepParts.Enabled = allow;
@ -590,6 +592,7 @@ namespace Volian.Controls.Library
public StepTabRibbon()
{
InitializeComponent();
EnableROEdit = true;
_RibbonControl.AutoSize = true;
_RibbonControl.SizeChanged += new EventHandler(_RibbonControl_SizeChanged);
// When AutoExpand is set to true, [CTRL][F1] and double click will hide/expand the ribbon bar
@ -1631,9 +1634,37 @@ namespace Volian.Controls.Library
//#endif
#endregion
public void SetupReviewerMode()
{
if (MyEditItem != null && MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit)
{
btnToggleEditView_Click(null, new EventArgs());
rtabView.Visible = false;
rtabHome.Visible = false;
rtabInsert.Visible = false;
rtabAdmin.Visible = false;
rtabReview.Select();
}
}
public void SetupROEditorMode()
{
btnToggleEditView_Click(null, new EventArgs());
rtabView.Visible = false;
}
public void SetupWriterMode()
{
EnableROEdit = false;
rtabAdmin.Visible = false;
}
public void SetupSetAdminMode()
{
}
public void SetupAdminMode()
{
}
private void btnToggleEditView_Click(object sender, EventArgs e)
{
if (MyEditItem == null) return;
MyEditItem.MyStepPanel.VwMode = MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit ? E_ViewMode.View : E_ViewMode.Edit;
MyEditItem.ToggleEditView(MyEditItem.MyStepPanel.VwMode);
SetButtonAndMenuEnabling(true);
@ -1777,7 +1808,7 @@ namespace Volian.Controls.Library
btnROEdit.Enabled = false;
return;
}
btnROEdit.Enabled = true;
btnROEdit.Enabled = EnableROEdit;
if (!NewerRoFst()) return;
btnUpdROVal.Enabled = true;
}
@ -2513,7 +2544,8 @@ namespace Volian.Controls.Library
IDataObject iData = Clipboard.GetDataObject();
// set to true if editing cell, otherwise false for grids
//bool enable = (MyFlexGrid != null && MyFlexGrid.Editor != null);
bool enable = (MyFlexGrid != null);
bool enable = (MyFlexGrid != null && MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit);
//btnPasteText.Enabled = btnPasteStepText.Enabled = btnPaste.Enabled = enable;
btnPaste.Enabled = (iData.GetDataPresent(DataFormats.Text) || iData.GetDataPresent(DataFormats.Rtf)) && enable;
btnCMPasteText.Enabled = btnPasteText.Enabled = iData.GetDataPresent(DataFormats.Text) && enable;

View File

@ -317,6 +317,12 @@ namespace Volian.Controls.Library
#endregion
public partial class vlnTreeView : TreeView
{
private SessionInfo _MySessionInfo;
public SessionInfo MySessionInfo
{
get { return _MySessionInfo; }
set { _MySessionInfo = value; }
}
#region Local Vars
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@ -409,6 +415,16 @@ namespace Volian.Controls.Library
{
if (ReportAllProceduresInconsistencies != null) ReportAllProceduresInconsistencies(sender, args);
}
public event vlnTreeViewEvent RefreshCheckedOutProcedures;
private void OnRefreshCheckedOutProcedures(object sender, vlnTreeEventArgs args)
{
if (RefreshCheckedOutProcedures != null) RefreshCheckedOutProcedures(sender, args);
}
public event vlnTreeViewEvent ProcedureCheckedOutTo;
private void OnProcedureCheckedOutTo(object sender, vlnTreeEventArgs args)
{
if (ProcedureCheckedOutTo != null) ProcedureCheckedOutTo(sender, args);
}
public event vlnTreeViewEvent NodeNew;
private void OnNodeNew(object sender, vlnTreeEventArgs args)
{
@ -476,6 +492,8 @@ namespace Volian.Controls.Library
{
if (e.Button == MouseButtons.Right)
{
OwnerInfoList oil = null;
OwnerInfo oi = null;
VETreeNode tn = this.GetNodeAt(new Point(e.X, e.Y)) as VETreeNode;
if (tn != null)
{
@ -484,7 +502,12 @@ namespace Volian.Controls.Library
// Display Menu
ToolStripMenuItem mi = new ToolStripMenuItem();
ContextMenu cm = new ContextMenu();
UserInfo ui = UserInfo.GetByUserID(VlnSettings.UserID);
if (ui == null)
{
MessageBox.Show("Security has not been defined for PROMS. All functionality has been defaulted to the lowest level for all users until security is defined.", "no security defined", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
#region Menu_New
if (tn.VEObject as FolderInfo != null)
{
@ -492,81 +515,161 @@ namespace Volian.Controls.Library
// folders then can only add another folder, and if children are docversions can only
// add docversion.
FolderInfo fi = tn.VEObject as FolderInfo;
if (fi.MyParent != null) // don't allow insert before/after if at top node
if (ui.IsAdministrator())
{
cm.MenuItems.Add("Insert Folder Before", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Folder After", new EventHandler(mi_Click));
if (fi.MyParent != null) // don't allow insert before/after if at top node
{
cm.MenuItems.Add("Insert Folder Before", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Folder After", new EventHandler(mi_Click));
}
if (fi.FolderDocVersionCount == 0) cm.MenuItems.Add("New Folder", new EventHandler(mi_Click));
if (fi.ChildFolderCount == 0 && !fi.HasWorkingDraft) cm.MenuItems.Add("Create Working Draft", new EventHandler(mi_Click));
}
if (fi.FolderDocVersionCount == 0) cm.MenuItems.Add("New Folder", new EventHandler(mi_Click));
if (fi.ChildFolderCount == 0 && !fi.HasWorkingDraft) cm.MenuItems.Add("Create Working Draft", new EventHandler(mi_Click));
}
else if (tn.VEObject as DocVersionInfo != null) // DocVersions can only contain procs
{
cm.MenuItems.Add("New Procedure", new EventHandler(mi_Click));
DocVersionInfo dvi = tn.VEObject as DocVersionInfo;
if (dvi.MultiUnitCount > 1)
if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi) || ui.IsWriter(dvi))
{
MenuItem mip = new MenuItem("Print All Procedures for");
MenuItem mia= new MenuItem("Approve All Procedures for");
MenuItem mis = new MenuItem("Approve Some Procedures for");
int k = 0;
foreach (string s in dvi.UnitNames)
OwnerInfoList.Reset();
oil = OwnerInfoList.Get();
cm.MenuItems.Add("Refresh Checked Out Procedures", new EventHandler(mi_Click));
cm.MenuItems.Add("New Procedure", new EventHandler(mi_Click));
if (dvi.MultiUnitCount > 1)
{
k++;
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Tag = k;
MenuItem ma = mia.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
ma.Tag = k;
MenuItem ms = mis.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
ms.Tag = k;
MenuItem mip = new MenuItem("Print All Procedures for");
MenuItem mia = new MenuItem("Approve All Procedures for");
MenuItem mis = new MenuItem("Approve Some Procedures for");
int k = 0;
foreach (string s in dvi.UnitNames)
{
k++;
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Tag = k;
MenuItem ma = mia.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
ma.Tag = k;
MenuItem ms = mis.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
ms.Tag = k;
}
//MenuItem mmp = mip.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mmp.Tag = 0;
//MenuItem mma = mia.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mma.Tag = 0;
//MenuItem mms = mis.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mms.Tag = 0;
cm.MenuItems.Add(mip);
cm.MenuItems.Add(mia);
cm.MenuItems.Add(mis);
}
//MenuItem mmp = mip.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mmp.Tag = 0;
//MenuItem mma = mia.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mma.Tag = 0;
//MenuItem mms = mis.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mms.Tag = 0;
cm.MenuItems.Add(mip);
cm.MenuItems.Add(mia);
cm.MenuItems.Add(mis);
else
{
cm.MenuItems.Add("Print All Procedures", new EventHandler(mi_Click));
cm.MenuItems.Add("Approve All Procedures", new EventHandler(mi_Click));
cm.MenuItems.Add("Approve Some Procedures", new EventHandler(mi_Click));
}
cm.MenuItems.Add("Report All Procedures Inconsistencies", new EventHandler(mi_Click));
}
else
{
cm.MenuItems.Add("Print All Procedures", new EventHandler(mi_Click));
cm.MenuItems.Add("Approve All Procedures", new EventHandler(mi_Click));
cm.MenuItems.Add("Approve Some Procedures", new EventHandler(mi_Click));
OwnerInfoList.Reset();
oil = OwnerInfoList.Get();
cm.MenuItems.Add("Refresh Checked Out Procedures", new EventHandler(mi_Click));
if (dvi.MultiUnitCount > 1)
{
MenuItem mip = new MenuItem("Print All Procedures for");
int k = 0;
foreach (string s in dvi.UnitNames)
{
k++;
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Tag = k;
}
//MenuItem mmp = mip.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mmp.Tag = 0;
//MenuItem mma = mia.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mma.Tag = 0;
//MenuItem mms = mis.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click));
//mms.Tag = 0;
cm.MenuItems.Add(mip);
}
else
{
cm.MenuItems.Add("Print All Procedures", new EventHandler(mi_Click));
}
}
//if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi))
//{
// cm.MenuItems.Add("Check Out Procedure Set", new EventHandler(mi_Click));
// cm.MenuItems.Add("Check In Procedure Set", new EventHandler(mi_Click));
//}
if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi) || ui.IsROEditor(dvi))
{
cm.MenuItems.Add("Run RO Editor", new EventHandler(mi_Click));
}
if (ui.IsAdministrator() || ui.IsSetAdministrator(dvi))
{
MenuItem urv = cm.MenuItems.Add("Update RO Values", new EventHandler(mi_Click));
urv.Enabled = dvi.NewerRoFst;
}
cm.MenuItems.Add("Report All Procedures Inconsistencies", new EventHandler(mi_Click));
}
else if (tn.VEObject as ProcedureInfo != null) // Procs can only contain sections
{
ProcedureInfo pri = tn.VEObject as ProcedureInfo;
if (pri.ActiveFormat.PlantFormat.FormatData.ProcData.PSI.Caption != null) cm.MenuItems.Add("Procedure Specific Information", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Procedure Before", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Procedure After", new EventHandler(mi_Click));
cm.MenuItems.Add("New Section", new EventHandler(mi_Click));
if (pri.MyDocVersion.MultiUnitCount > 1)
oi = OwnerInfo.GetByItemID(pri.ItemID, CheckOutType.Procedure);
if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion) || ui.IsWriter(pri.MyDocVersion))
{
MenuItem mip = new MenuItem("Print");
MenuItem mia = new MenuItem("Approve");
int k = 0;
foreach (string s in pri.MyDocVersion.UnitNames)
if (oi != null && oi.SessionID != MySessionInfo.SessionID)
cm.MenuItems.Add(string.Format("Procedure Checked Out to {0}", oi.SessionUserID), new EventHandler(mi_Click));
if (pri.ActiveFormat.PlantFormat.FormatData.ProcData.PSI.Caption != null) cm.MenuItems.Add("Procedure Specific Information", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Procedure Before", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Procedure After", new EventHandler(mi_Click));
cm.MenuItems.Add("New Section", new EventHandler(mi_Click));
if (pri.MyDocVersion.MultiUnitCount > 1)
{
k++;
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Tag = k;
MenuItem ma = mia.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
ma.Tag = k;
MenuItem mip = new MenuItem("Print");
MenuItem mia = new MenuItem("Approve");
int k = 0;
foreach (string s in pri.MyDocVersion.UnitNames)
{
k++;
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Tag = k;
MenuItem ma = mia.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
ma.Tag = k;
}
cm.MenuItems.Add(mip);
cm.MenuItems.Add(mia);
AddApprovedRevisionsMultiUnit(cm.MenuItems, pri);
}
else
{
cm.MenuItems.Add("Print", new EventHandler(mi_Click));
cm.MenuItems.Add("Approve", new EventHandler(mi_Click));
AddApprovedRevisions(cm.MenuItems, pri);
}
cm.MenuItems.Add(mip);
cm.MenuItems.Add(mia);
AddApprovedRevisionsMultiUnit(cm.MenuItems, pri);
}
else
{
cm.MenuItems.Add("Print", new EventHandler(mi_Click));
cm.MenuItems.Add("Approve", new EventHandler(mi_Click));
AddApprovedRevisions(cm.MenuItems, pri);
if (oi != null && oi.SessionID != MySessionInfo.SessionID)
cm.MenuItems.Add(string.Format("Procedure Checked Out to {0}", oi.SessionUserID), new EventHandler(mi_Click));
if (pri.MyDocVersion.MultiUnitCount > 1)
{
MenuItem mip = new MenuItem("Print");
int k = 0;
foreach (string s in pri.MyDocVersion.UnitNames)
{
k++;
MenuItem mp = mip.MenuItems.Add(s, new EventHandler(miMultiUnit_Click));
mp.Tag = k;
}
cm.MenuItems.Add(mip);
AddApprovedRevisionsMultiUnit(cm.MenuItems, pri);
}
else
{
cm.MenuItems.Add("Print", new EventHandler(mi_Click));
AddApprovedRevisions(cm.MenuItems, pri);
}
}
}
else if (tn.VEObject as SectionInfo != null)
@ -576,22 +679,31 @@ namespace Volian.Controls.Library
// A word doc section can contain another subsection (either step section or word doc section),
// but cannot contain steps.
SectionInfo si = tn.VEObject as SectionInfo;
si.MyConfig = null;
// Do not need step versus Word doc options, user enters this in property page during
// insert process.
cm.MenuItems.Add("Insert Section Before", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Section After", new EventHandler(mi_Click));
if (!si.IsAutoTOCSection)
if (ui.IsAdministrator() || ui.IsSetAdministrator(si.MyProcedure.MyDocVersion) || ui.IsWriter(si.MyProcedure.MyDocVersion))
{
bool meta = si.ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections;
if (meta) cm.MenuItems.Add("New Subsection", new EventHandler(mi_Click));
// if this section has subsections, then be sure that the 'editable' data config
// is set to allow new step creation.
if (si.IsStepSection)
if (si.HasWordContent)
{
SectionConfig sc = si.MyConfig as SectionConfig;
if (si.Sections==null || si.Sections.Count==0 || (meta && sc != null && si.Sections != null && si.Sections.Count > 0 && sc.SubSection_Edit == "Y"))
cm.MenuItems.Add("New Step", new EventHandler(mi_Click));
oi = OwnerInfo.GetByItemID(si.MyContent.MyEntry.DocID, CheckOutType.Document);
}
si.MyConfig = null;
// Do not need step versus Word doc options, user enters this in property page during
// insert process.
if (oi != null && oi.SessionID != MySessionInfo.SessionID)
cm.MenuItems.Add(string.Format("Document Checked Out to {0}", oi.SessionUserID), new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Section Before", new EventHandler(mi_Click));
cm.MenuItems.Add("Insert Section After", new EventHandler(mi_Click));
if (!si.IsAutoTOCSection)
{
bool meta = si.ActiveFormat.PlantFormat.FormatData.SectData.UseMetaSections;
if (meta) cm.MenuItems.Add("New Subsection", new EventHandler(mi_Click));
// if this section has subsections, then be sure that the 'editable' data config
// is set to allow new step creation.
if (si.IsStepSection)
{
SectionConfig sc = si.MyConfig as SectionConfig;
if (si.Sections == null || si.Sections.Count == 0 || (meta && sc != null && si.Sections != null && si.Sections.Count > 0 && sc.SubSection_Edit == "Y"))
cm.MenuItems.Add("New Step", new EventHandler(mi_Click));
}
}
}
}
@ -599,8 +711,12 @@ namespace Volian.Controls.Library
{
// check the format for allowable inserts, and also,
ItemInfo i = tn.VEObject as ItemInfo;
if (AddToInsertMenu(i, 0)) cm.MenuItems.Add("Insert Step Before", new EventHandler(mi_Click));
if (AddToInsertMenu(i, 1)) cm.MenuItems.Add("Insert Step After", new EventHandler(mi_Click));
if (ui.IsAdministrator() || ui.IsSetAdministrator(i.MyProcedure.MyDocVersion) || ui.IsWriter(i.MyProcedure.MyDocVersion))
{
//oi = OwnerInfo.GetByItemID(i.MyProcedure.ItemID);
if (AddToInsertMenu(i, 0)) cm.MenuItems.Add("Insert Step Before", new EventHandler(mi_Click));
if (AddToInsertMenu(i, 1)) cm.MenuItems.Add("Insert Step After", new EventHandler(mi_Click));
}
}
#endregion
#region Menu_Open
@ -621,32 +737,102 @@ namespace Volian.Controls.Library
// For initial release, copy is not available for folders or docversions
if (tn.VEObject as ItemInfo != null)
{
cm.MenuItems.Add("Copy", new EventHandler(mi_Click));
ItemInfo i = tn.VEObject as ItemInfo;
if (ui.IsAdministrator() || ui.IsSetAdministrator(i.MyProcedure.MyDocVersion) || ui.IsWriter(i.MyProcedure.MyDocVersion))
cm.MenuItems.Add("Copy", new EventHandler(mi_Click));
}
#endregion
Menu_Paste(tn, cm);
bool ok = tn.VEObject as FolderInfo != null ? false : tn.VEObject as DocVersionInfo != null ? (ui.IsAdministrator() || ui.IsSetAdministrator(tn.VEObject as DocVersionInfo) || ui.IsWriter(tn.VEObject as DocVersionInfo)) : (ui.IsAdministrator() || ui.IsSetAdministrator((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion) || ui.IsWriter((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion));
if(ok)
Menu_Paste(tn, cm);
#region Menu_Delete
// Add delete to the menu unless at the very 'top' node, on a grouping (partinfo)
// node (RNOs, Steps, Cautions, Notes) or Folder/DocVersion that contains any items.
PartInfo pi = tn.VEObject as PartInfo;
if (pi == null && tn.Parent != null) // it's not a part and it's not the top....
{
FolderInfo fi = tn.VEObject as FolderInfo;
if (fi == null || tn.Nodes.Count == 0) // it's not a folder or it has no children
if (ok)
{
DocVersionInfo di = tn.VEObject as DocVersionInfo;
if (di == null || tn.Nodes.Count == 0) // it's not a docversion or it has no children
cm.MenuItems.Add("Delete", new EventHandler(mi_Click));
// Add delete to the menu unless at the very 'top' node, on a grouping (partinfo)
// node (RNOs, Steps, Cautions, Notes) or Folder/DocVersion that contains any items.
PartInfo pi = tn.VEObject as PartInfo;
if (pi == null && tn.Parent != null) // it's not a part and it's not the top....
{
FolderInfo fi = tn.VEObject as FolderInfo;
if (fi == null || tn.Nodes.Count == 0) // it's not a folder or it has no children
{
DocVersionInfo di = tn.VEObject as DocVersionInfo;
if (di == null || tn.Nodes.Count == 0) // it's not a docversion or it has no children
cm.MenuItems.Add("Delete", new EventHandler(mi_Click));
}
}
}
}
#endregion
#region Menu_Properties
// Add Properties to the menu unless at the very 'top' node or on a grouping (partinfo)
// node (RNOs, Steps, Cautions, Notes) or at the step level.
ok = tn.VEObject as FolderInfo != null ? ui.IsAdministrator() : tn.VEObject as DocVersionInfo != null ? (ui.IsAdministrator() || ui.IsSetAdministrator(tn.VEObject as DocVersionInfo)) : (ui.IsAdministrator() || ui.IsSetAdministrator((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion) || ui.IsWriter((tn.VEObject as ItemInfo).MyProcedure.MyDocVersion));
PartInfo pia = tn.VEObject as PartInfo;
ItemInfo ii = tn.VEObject as ItemInfo;
if (pia == null && tn.VEObject as StepInfo == null) cm.MenuItems.Add("Properties...", new EventHandler(mi_Click));
if (ok)
if (pia == null && tn.VEObject as StepInfo == null) cm.MenuItems.Add("Properties...", new EventHandler(mi_Click));
#endregion
if (oil != null && oil.Count > 0 && tn.VEObject as DocVersionInfo != null)
{
/*
--docversion level
Approve All Procedures
Report All Procedures Inconsistencies
*/
bool greyOut = false;
foreach (OwnerInfo own in oil)
{
if (own.SessionID != MySessionInfo.SessionID)
{
greyOut = true;
break;
}
}
if (greyOut)
{
foreach (MenuItem itm in cm.MenuItems)
{
if (itm.Text == "Approve All Procedures" || itm.Text == "Report All Procedures Inconsistencies")
itm.Enabled = false;
}
}
}
if (oi != null && oi.SessionID != MySessionInfo.SessionID)
{
/*
--procedure level
Procedure Specific Information
New Section
Approve
Open
Copy
Delete
Properties...
--section level
all of them
--step level
all of them
*/
if (tn.VEObject as ProcedureInfo != null)
{
foreach (MenuItem itm in cm.MenuItems)
{
if(itm.Text == "Procedure Specific Information" || itm.Text == "New Section" || itm.Text == "Approve" || itm.Text == "Open" ||
itm.Text == "Copy" || itm.Text == "Delete" || itm.Text == "Properties..." || itm.Text == "Replace Existing Procedure")
itm.Enabled = false;
}
}
if (tn.VEObject as SectionInfo != null || tn.VEObject as StepInfo != null)
{
foreach (MenuItem itm in cm.MenuItems)
{
if(!itm.Text.StartsWith("Document Checked Out"))
itm.Enabled = false;
}
}
}
cm.Show(this, new Point(e.X, e.Y));
}
}
@ -907,6 +1093,11 @@ namespace Volian.Controls.Library
MenuItem mi = sender as MenuItem;
if (mi == null)
return;
if (mi.Text.StartsWith("Procedure Checked Out to") || mi.Text.StartsWith("Document Checked Out to"))
{
OnProcedureCheckedOutTo(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0));
return;
}
switch (mi.Text)
{
case "Open":
@ -1017,11 +1208,169 @@ namespace Volian.Controls.Library
case "Report All Procedures Inconsistencies":
OnReportAllProceduresInconsistencies(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0));
break;
case "Refresh Checked Out Procedures":
OnRefreshCheckedOutProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0));
break;
case "Run RO Editor":
RunROEditor(SelectedNode as VETreeNode);
break;
case "Update RO Values":
UpdateROValues(SelectedNode as VETreeNode);
break;
//case "Check Out Procedure Set":
// CheckOutDocVersion(SelectedNode as VETreeNode);
// break;
//case "Check In Procedure Set":
// CheckInDocVersion(SelectedNode as VETreeNode);
// break;
default:
MessageBox.Show(string.Format("Unrecognized Menu Item '{0}'", mi.Text));
break;
}
}
private Dictionary<int, int> MyCheckedOutDocVersions;
private void CheckOutDocVersion(VETreeNode tn)
{
if (MyCheckedOutDocVersions == null)
MyCheckedOutDocVersions = new Dictionary<int, int>();
DocVersionInfo MyDVI = tn.VEObject as DocVersionInfo;
string message = string.Empty;
if (MySessionInfo.CanCheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion, ref message))
MyCheckedOutDocVersions.Add(MyDVI.VersionID,MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion));
else
MessageBox.Show(this, message, "Working Draft Has Items Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
private void CheckInDocVersion(VETreeNode tn)
{
DocVersionInfo MyDVI = tn.VEObject as DocVersionInfo;
MySessionInfo.CheckInItem(MyCheckedOutDocVersions[MyDVI.VersionID]);
MyCheckedOutDocVersions.Remove(MyDVI.VersionID);
}
private void UpdateROValues(VETreeNode tn)
{
DocVersionInfo MyDVI = tn.VEObject as DocVersionInfo;
// use rodb directory path of the first rofst for the this document version. Later, will need
// to modify code to get which one (when there is more than one)
if (MyDVI.DocVersionAssociations.Count < 1)
{
MessageBox.Show("Error Updating ro.fst. No associated ro.fst");
return;
}
ROFstInfo roFstInfo = MyDVI.DocVersionAssociations[0].MyROFst;
string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst";
if (!File.Exists(rofstPath))
{
MessageBox.Show("No existing ro.fst in path " + roFstInfo.MyRODb.FolderPath + ". Check for invalid path");
return;
}
FileInfo fiRofst = new FileInfo(rofstPath);
if (roFstInfo.DTS == fiRofst.LastWriteTimeUtc)
{
MessageBox.Show("ro.fst files are same for path " + roFstInfo.MyRODb.FolderPath + ", import of that ro.fst will not be done");
return;
}
if (roFstInfo.DTS > fiRofst.LastWriteTimeUtc)
{
MessageBox.Show("Cannot copy older ro.fst from " + roFstInfo.MyRODb.FolderPath + ", import of that ro.fst will not be done");
return;
}
Cursor = Cursors.WaitCursor;
string message = string.Empty;
if (!MySessionInfo.CanCheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion, ref message))
{
MessageBox.Show(this, message, "Working Draft Has Items Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion);
using (DocVersion dv = DocVersion.Get(MyDVI.VersionID))
{
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ROFst newrofst = ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv.DocVersionAssociations[0], dv, roFstInfo);
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST");
}
MySessionInfo.CheckInItem(ownerid);
Cursor = Cursors.Default;
}
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
{
string xml = null;
string srchtxt = null;
using (VlnFlexGrid myGrid = new VlnFlexGrid())
{
using (StringReader sr = new StringReader(args.OldGridXml))
{
myGrid.ReadXml(sr);
myGrid.KeyActionTab = C1.Win.C1FlexGrid.KeyActionEnum.MoveAcross;
sr.Close();
}
string roid = myGrid.ROID;
int rodbid = myGrid.RODbId;
Font GridFont = myGrid.Font;
myGrid.Clear();
myGrid.ParseTableFromText(args.ROText, GridLinePattern.Single);
myGrid.AutoSizeCols();
myGrid.AutoSizeRows();
myGrid.MakeRTFcells();
myGrid.RODbId = rodbid;
myGrid.ROID = roid;
myGrid.IsRoTable = true;
using (StringWriter sw = new StringWriter())
{
myGrid.WriteXml(sw);
xml = sw.GetStringBuilder().ToString();
sw.Close();
}
srchtxt = myGrid.GetSearchableText();
}
List<string> retlist = new List<string>();
retlist.Add(srchtxt);
retlist.Add(xml);
return retlist;
}
private void RunROEditor(VETreeNode tn)
{
DocVersionInfo MyDVI = tn.VEObject as DocVersionInfo;
if (VlnSettings.ReleaseMode.Equals("DEMO"))
{
MessageBox.Show("Referenced Object Editor not available in the Demo version.", "PROMS Demo Version");
return;
}
//string roapp = Environment.GetEnvironmentVariable("roapp");
string roapp = Volian.Base.Library.ExeInfo.GetROEditorPath(); // get the path to the RO Editor Executable
if (roapp == null || roapp == string.Empty)
{
MessageBox.Show("The 'roapp' environment variable needs to be set to the path of the RO Editor\n\n Ex: C:\\VE-PROMS.NET\\Bin\\roeditor.exe", "Environment Variable Error");
return;
}
if (!File.Exists(roapp))
{
string errtxt = string.Format("Could not find path to Referenced Objects Editor:\n\n roapp = {0}\n\n Verify the path assigned to the 'roapp' environment variable", roapp);
MessageBox.Show(errtxt, "Environment Variable Error");
//MessageBox.Show("Could not find path to Ro Editor, check 'roapp' environment variable","Environment Variable Error");
return;
}
//if (roapp == null)
//{
// MessageBox.Show("Could not find path to Ro Editor, check 'roapp' environment variable");
// return;
//}
if (MyDVI == null || MyDVI.DocVersionAssociationCount < 1)
{
MessageBox.Show("Could not find associated path for ro data.", "No RO Data", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
string roloc = "\"" + MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath + "\"";
if (!Directory.Exists(MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath))
{
MessageBox.Show(string.Format("RO Database directory does not exist: {0}", MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath));
return;
}
System.Diagnostics.Process.Start(roapp, roloc);
}
[Serializable]
public struct PromsClipboard
@ -1040,6 +1389,23 @@ namespace Volian.Controls.Library
PromsClipboard iClip = (PromsClipboard) oClip;
ItemInfo iiClipboard = ItemInfo.Get(iClip.itemId);
string message = string.Empty;
if (iiClipboard.MyContent.MyEntry == null)
{
if (!MySessionInfo.CanCheckOutItem(iiClipboard.MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Copied Procedure Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
else
{
if (!MySessionInfo.CanCheckOutItem(iiClipboard.MyContent.MyEntry.DocID, CheckOutType.Document, ref message))
{
MessageBox.Show(this, message, "Copied Document Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
VETreeNode tn = SelectedNode as VETreeNode;
DocVersionInfo dvi = tn.VEObject as DocVersionInfo;
if (dvi != null)
@ -1318,6 +1684,12 @@ namespace Volian.Controls.Library
#region InsertSection
else if (newtype == MenuSelections.Section) // Insert subsection at end of parents section list
{
string message = string.Empty;
if (!MySessionInfo.CanCheckOutItem(_LastProcedureInfo.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
int s1 = -1;
if (!(_LastProcedureInfo == null) || !(_LastSectionInfo == null))
{
@ -1405,6 +1777,12 @@ namespace Volian.Controls.Library
}
else if (newtype == MenuSelections.SectionAfter || newtype == MenuSelections.SectionBefore)
{
string message = string.Empty;
if (!MySessionInfo.CanCheckOutItem(_LastSectionInfo.MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
int tvindex = SelectedNode.Index;
// if inserting before, the parent is set in case previous is null, i.e. beginning of the list.
int s2 = -1;
@ -1428,10 +1806,22 @@ namespace Volian.Controls.Library
#region InsertStep
else if (newtype == MenuSelections.Step) // insert step from section - no substeps from tree.
{
string message = string.Empty;
if (!MySessionInfo.CanCheckOutItem(_LastSectionInfo.MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
tn = InsertChildStep((VETreeNode)SelectedNode);
}
else if (newtype == MenuSelections.StepAfter || newtype == MenuSelections.StepBefore && _LastStepInfo != null)
{
string message = string.Empty;
if (!MySessionInfo.CanCheckOutItem(_LastStepInfo.MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
tn = InsertBeforeOrAfter(newtype, (VETreeNode)SelectedNode);
}
#endregion
@ -1508,6 +1898,58 @@ namespace Volian.Controls.Library
private bool tv_NodeDelete()
{
SetLastValues((VETreeNode)SelectedNode);
string message = string.Empty;
if(_LastStepInfo != null)
if (!MySessionInfo.CanCheckOutItem(_LastStepInfo.MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
if (_LastSectionInfo != null)
if (!MySessionInfo.CanCheckOutItem(_LastSectionInfo.MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
if (_LastProcedureInfo != null)
if (!MySessionInfo.CanCheckOutItem(_LastProcedureInfo.ItemID, CheckOutType.Procedure, ref message))
{
MessageBox.Show(this, message, "Item Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
if (_LastDocVersionInfo != null)
{
StringBuilder sb = new StringBuilder();
foreach (ProcedureInfo pi in _LastDocVersionInfo.Procedures)
{
if (!MySessionInfo.CanCheckOutItem(pi.ItemID, CheckOutType.Procedure, ref message))
sb.AppendLine(message);
message = string.Empty;
}
if (sb.Length > 0)
{
MessageBox.Show(this, sb.ToString(), "Items Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
}
if (_LastFolderInfo != null)
{
StringBuilder sb = new StringBuilder();
foreach (DocVersionInfo dvi in _LastFolderInfo.FolderDocVersions)
{
foreach (ProcedureInfo pi in dvi.Procedures)
{
if (!MySessionInfo.CanCheckOutItem(pi.ItemID, CheckOutType.Procedure, ref message))
sb.AppendLine(message);
message = string.Empty;
}
}
if (sb.Length > 0)
{
MessageBox.Show(this, sb.ToString(), "Items Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
}
DialogResult result = MessageBox.Show("Are you sure you want to delete " + SelectedNode.Text, "Verify Delete",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
@ -1682,11 +2124,6 @@ namespace Volian.Controls.Library
MessageBox.Show("Cannot drag/drop a grouping node.");
return;
}
if (iidrag != null && !iidrag.IsProcedure && !iidrag.IsSection)
{
MessageBox.Show("Cannot drag/drop steps (for now).","Under Construction", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
// don't put up message, message kept coming up on any selection of node (to copy, properties, etc)
//if (iidrag != null && iidrag.IsStep) return;
if (SetupDragCursor(_dragImageList, dragNode))
@ -2023,12 +2460,6 @@ namespace Volian.Controls.Library
{
return (veTreeNode.VEObject.GetType() == typeof(FolderInfo));
}
private Exception RootException(Exception ex)
{
while (ex.InnerException != null)
ex = ex.InnerException;
return ex;
}
private void tv_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
try
@ -2038,7 +2469,13 @@ namespace Volian.Controls.Library
int index = _LastDropLocation.Index + (_LastDropLocation.Position == DropPosition.After ? 1 : 0);
int myIndex = index;
if (dragNode.Parent == _LastDropLocation.DropNode && dragNode.Index <= _LastDropLocation.Index) index--;
FolderInfo fdragi = ((VETreeNode)dragNode).VEObject as FolderInfo;
if (e.Effect == DragDropEffects.Move)// If Move Remove drag node from parent
dragNode.Remove();
else
dragNode = Clone(dragNode);
_LastDropLocation.DropNode.Nodes.Insert(index, dragNode);
this.SelectedNode = dragNode;
FolderInfo fdragi = ((VETreeNode)dragNode).VEObject as FolderInfo;
FolderInfo fdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as FolderInfo;
if (fdragi != null && fdropi != null && fdropi.FolderDocVersionCount==0)
{
@ -2046,22 +2483,9 @@ namespace Volian.Controls.Library
{
using (Folder fdrop = fdropi.Get())
{
try
{
fdrag.ManualOrder = fdropi.NewManualOrder(myIndex);
fdrag.MyParent = fdrop;
fdrag.Save();
MoveNode(e, dragNode, index);
}
catch (Exception ex)
{
ex = RootException(ex);
if (ex.Message.Contains("Cannot insert duplicate key row in object 'dbo.Folders' with unique index 'IX_UniqueChildFolders'"))
MessageBox.Show("You cannot have two folders with the same name here!",
"Duplicate Folder Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
else
_MyLog.WarnFormat("{0} - {1}", ex.GetType().Name, ex.Message);
}
fdrag.ManualOrder = fdropi.NewManualOrder(myIndex);
fdrag.MyParent = fdrop;
fdrag.Save();
}
}
return;
@ -2078,7 +2502,6 @@ namespace Volian.Controls.Library
if (pdropi != null && pdragi.ActiveParent == pdropi.ActiveParent)
{
pdragi.MoveProcedure(pdragi.ActiveParent, myIndex);
MoveNode(e, dragNode, index);
return;
}
DocVersionInfo dvdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as DocVersionInfo;
@ -2086,7 +2509,6 @@ namespace Volian.Controls.Library
if (dvdropi != null && dvdragpar.VersionID == dvdropi.VersionID)
{
pdragi.MoveProcedure(dvdropi, myIndex);
MoveNode(e, dragNode, index);
return;
}
}
@ -2100,7 +2522,6 @@ namespace Volian.Controls.Library
if (sdropi != null && sdragi.ActiveParent == sdropi.ActiveParent)
{
sdragi.MoveSection(sdragi, myIndex);
MoveNode(e, dragNode, index);
return;
}
pdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as ProcedureInfo;
@ -2108,7 +2529,6 @@ namespace Volian.Controls.Library
{
sdragi.MoveSection(pdropi, myIndex);
sdragi.Moving = true;
MoveNode(e, dragNode, index);
OnNodeSelect(dragNode, new vlnTreeEventArgs(dragNode));
return;
}
@ -2123,21 +2543,18 @@ namespace Volian.Controls.Library
if (stdropi != null && stdragi.ActiveParent == stdropi.ActiveParent)
{
stdragi.MoveStep(stdragi.ActiveParent, myIndex);
MoveNode(e, dragNode, index);
return;
}
sdropi = ((VETreeNode)_LastDropLocation.DropNode).VEObject as SectionInfo;
if (sdropi != null && stdragi.MyParent.ItemID == sdropi.ItemID)
{
stdragi.MoveStep(stdragi.ActiveParent, myIndex);
MoveNode(e, dragNode, index);
return;
}
// the following handles items under the app nodes of 'steps', 'notes', 'cautions', etc.
if (sdropi == null && dragNode.Parent == _LastDropLocation.DropNode)
{
stdragi.MoveStep(stdragi.ActiveParent, myIndex);
MoveNode(e, dragNode, index);
return;
}
}
@ -2147,17 +2564,6 @@ namespace Volian.Controls.Library
if(_MyLog.IsErrorEnabled)_MyLog.Error("tv_DragDrop", ex);
}
}
private void MoveNode(System.Windows.Forms.DragEventArgs e, TreeNode dragNode, int index)
{
if (e.Effect == DragDropEffects.Move)// If Move Remove drag node from parent
dragNode.Remove();
// Copy method has been removed
//else
// dragNode = Clone(dragNode);
_LastDropLocation.DropNode.Nodes.Insert(index, dragNode);
this.SelectedNode = dragNode;
}
// private void DumpMembers(object o)
// {
// Type t = o.GetType();
@ -2187,17 +2593,17 @@ namespace Volian.Controls.Library
ExpandMatch(tmp,tn);
return tmp;
}
//private void tv_DragDropOld(object sender, System.Windows.Forms.DragEventArgs e)
//{
// TreeNode dragNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");// Get the drag node
// DragHelper.ImageList_DragLeave(this.Handle);
// TreeNode cloneNode = (TreeNode)dragNode.Clone();// copy the source node
// ExpandMatch(cloneNode, dragNode);
// _LastDropLocation.DropNode.Nodes.Insert(_LastDropLocation.Index + (_LastDropLocation.Position == DropPosition.After ? 1 : 0), cloneNode);
// if (e.Effect == DragDropEffects.Move)// If Move Remove drag node from parent
// dragNode.Remove();
// this.SelectedNode = cloneNode;
//}
private void tv_DragDropOld(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeNode dragNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");// Get the drag node
DragHelper.ImageList_DragLeave(this.Handle);
TreeNode cloneNode = (TreeNode)dragNode.Clone();// copy the source node
ExpandMatch(cloneNode, dragNode);
_LastDropLocation.DropNode.Nodes.Insert(_LastDropLocation.Index + (_LastDropLocation.Position == DropPosition.After ? 1 : 0), cloneNode);
if (e.Effect == DragDropEffects.Move)// If Move Remove drag node from parent
dragNode.Remove();
this.SelectedNode = cloneNode;
}
private void tv_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
DragHelper.ImageList_DragEnter(this.Handle, e.X - this.Left, e.Y - this.Top);