Compare commits

...

10 Commits

Author SHA1 Message Date
mschill 7f75af7119 B2026-052 - Issue when parens inside a Hardspaced Multi-RO Return Values.
PROMS crashes when doing an update ROFst.
2026-06-25 15:46:25 -04:00
mschill 38e42723af Merge pull request 'B2026-060, B2026-061, Fixed issue where change bars were printing when they should not have been.' (#778) from B2026-60_B2026-61 into Development
Looks Good. Ready for QA!
2026-06-18 14:18:24 -04:00
jjenko f4ec60c9e0 B2026-060, B2026-061, Fixed issue where change bars were printing when they should not have been. 2026-06-18 14:06:30 -04:00
jjenko 01394b1978 Merge pull request 'B2026 058' (#777) from B2026-058 into Development
good for testing
2026-06-12 15:15:39 -04:00
mschill 9b7db08fcf update unicode 2026-06-12 15:02:01 -04:00
mschill 6d7cdef223 B2026-058 – If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit. 2026-06-12 14:57:42 -04:00
jjenko d9c35fe02a Merge pull request 'C2026 021 b2026 048' (#775) from C2026-021_B2026-048 into Development
good for testing
2026-05-29 09:47:07 -04:00
mschill 250b3fa406 Remove commented out code 2026-05-29 06:33:37 -04:00
mschill a5a3f16177 C2026-021_B2026-048 Expand Functionality of Viewing Mode 2026-05-29 06:06:58 -04:00
jjenko ffa7e21c18 Merge pull request 'B2026-050 Problem when Approval with Duplicate Rev Numbers' (#773) from B2026-050 into Development
good for testing phase
2026-05-26 08:38:20 -04:00
9 changed files with 1775 additions and 2014 deletions
@@ -67,6 +67,7 @@ namespace VEPROMS
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave;
_MyApproval.SavedSlave = ApplicabilityIndex;
this.ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
this.ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
_MyDocVersion = myDocVersion;
@@ -292,6 +293,7 @@ namespace VEPROMS
expAddProcConChk.Expanded = true;
_initializing = true;
ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave;
_MyApproval.SavedSlave = ApplicabilityIndex;
InitializePanelApprove();
InitializePanelSelect();
_initializing = false;
@@ -306,6 +308,7 @@ namespace VEPROMS
_MyDocVersion = myProcedure.MyDocVersion;
_MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list
ApplicabilityIndex = _MyDocVersion.DocVersionConfig.SelectedSlave; // B2022-033 set the child being approved or workflow so other procedure list can populate
_MyApproval.SavedSlave = ApplicabilityIndex;
InitializeComponent();
FlexGridAddEvents();
SetupComboBoxes();
@@ -914,6 +917,11 @@ namespace VEPROMS
get { return _MyProcedures; }
//set { _MyProcedures = value; }
}
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
// this will save the SectedSlave in case a refresh causes it to get lost
public int SavedSlave { get; set; } = 0;
public ApprovalInfo(frmVEPROMS myFrmVEPROMS)
{
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
@@ -1173,6 +1181,11 @@ namespace VEPROMS
string pdfPath = string.Format(@"{0}\{1}", VlnSettings.TemporaryFolder, pdfTmp);
if (!TryToDelete(summaryPDF, "Change Summary")) break;
if (!TryToDelete(pdfPath,revisionStage)) break;
if (SavedSlave > 0 && ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave < 1)
{
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave = SavedSlave;
}
procsApproved.Add(ap.ProcInfo.DisplayNumber + " " + ap.ProcInfo.DisplayText);
RevisionInfo ric = pi.MyDocVersion.DocVersionConfig.SelectedSlave > 0 ? RevisionInfo.GetCurrentByItemIDandUnitID(pi.ItemID, pi.MyDocVersion.DocVersionConfig.SelectedSlave) : RevisionInfo.GetCurrentByItemID(pi.ItemID);
// RevisionInfo rip = RevisionInfo.GetPreviousByItemID(pi.ItemID);
+37 -5
View File
@@ -246,6 +246,10 @@ namespace VEPROMS
tc.MyCopyStep = myParent.tc.MyCopyStep; // copy the copystep info to the child window
//B2026 - 048 View Only Mode freezes PROMS if last tab closed
tc.EnableDisableStepProperties -= EnableDisableStepProperties;
tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties);
(tv.Nodes[0] as VETreeNode).InChildWindow = true; // tells us this folder's tree nodes are in the child window
}
@@ -352,6 +356,7 @@ namespace VEPROMS
displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer
bottomProgBar.ValueChanged += new EventHandler(bottomProgBar_ValueChanged);
tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties);
// When creating an XY Plot, a System.Drawing.Graphics is needed and it requires a form. Use the main form.
if (VlnSettings.DebugMode)
@@ -964,7 +969,18 @@ namespace VEPROMS
{
pnl.ApplDisplayMode = displayApplicability.ViewMode;
displayHistory.ApplDisplayMode = pnl.ApplDisplayMode;
//C2026-021 Expand Functionality of Viewing Mode
if (pnl.ApplDisplayMode > 0 && pnl.VwMode != E_ViewMode.View)
{
pnl.VwMode = E_ViewMode.View;
EnableDisableStepProperties(sender, new StepTabRibbonEventArgs(tc.SelectedDisplayTabItem.MyItemInfo, 0, pnl.VwMode));
MessageBox.Show("Changing to View Only Mode. Applicability Viewing Mode must be Master to return to Edit Mode. View Mode can be toggled off via the Ribbon->View tab.", "Changing to View Mode", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
pnl.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure();
}
}
void tv_ViewPDF(object sender, vlnTreeViewPdfArgs args)
@@ -4867,15 +4883,31 @@ namespace VEPROMS
//In View Only Mode - Step Properties should be disabled
public void EnableDisableStepProperties(object sender, StepTabRibbonEventArgs args)
{
if (args.ViewMode == E_ViewMode.View && (infoTabs.Enabled || infoTabs.SelectedTab != infotabTags))
//C2026 - 021 Expand Functionality of Viewing Mode
//B2026 - 048 View Only Mode freezes PROMS if last tab closed
if (args.ViewMode == E_ViewMode.View && (infotabControlPanelTags.Enabled || (infoTabs.SelectedTab != infotabTags && infoTabs.SelectedTab != infotabApplicability)))
{
if (infoTabs.SelectedTab != infotabApplicability)
{
infoTabs.Enabled = true;
infoTabs.SelectedTab = infotabTags;
infoTabs.Enabled = false;
}
else if (args.ViewMode != E_ViewMode.View && !infoTabs.Enabled)
infotabControlPanelTags.Enabled = false;
infotabControlPanelRO.Enabled = false;
infotabControlPanelTransitions.Enabled = false;
tabControlPanel1.Enabled = false;
displayApplicability.SetEnableDisableItemSelection(false);
tcpFoldoutMaint.Enabled = false;
}
else if (args.ViewMode != E_ViewMode.View && !infotabControlPanelTags.Enabled)
{
infoTabs.Enabled = true;
infotabControlPanelTags.Enabled = true;
infotabControlPanelRO.Enabled = true;
infotabControlPanelTransitions.Enabled = true;
tabControlPanel1.Enabled = true;
displayApplicability.SetEnableDisableItemSelection(true);
tcpFoldoutMaint.Enabled = true;
}
}
+122 -93
View File
@@ -8,7 +8,6 @@ using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using static System.Net.Mime.MediaTypeNames;
namespace VEPROMS.CSLA.Library
@@ -61,6 +60,7 @@ namespace VEPROMS.CSLA.Library
#region Structs / Internal Classes
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct roHdr
{
public int hSize;
@@ -78,6 +78,7 @@ namespace VEPROMS.CSLA.Library
};
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rodbi
{
public int dbiID;
@@ -91,6 +92,7 @@ namespace VEPROMS.CSLA.Library
};
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rogrp
{
public string value;
@@ -102,6 +104,7 @@ namespace VEPROMS.CSLA.Library
};
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rochild
{
public int ID;
@@ -133,7 +136,7 @@ namespace VEPROMS.CSLA.Library
private List<string> _baseAccPageKeys;
// RofstLookup/Conversion Variables
private int _rofstID;
private readonly int _rofstID;
private DocVersionInfo _myDocVersionInfo;
private int _selectedSlave;
private string _otherChild = string.Empty;
@@ -149,7 +152,7 @@ namespace VEPROMS.CSLA.Library
// B2022-107: Display Progress Bar Messages/Statuses when a new ROFST binary file is loaded into the database
private frmRofstLoadStatus _frmRofstLoadStatus = null;
private Dictionary<int, int> _dicRoCounts = null;
private bool _showLoadingStatus = true;
private readonly bool _showLoadingStatus = true;
private int _curRoCnt = 0;
private int _dbRoCnt = 0;
@@ -414,7 +417,6 @@ namespace VEPROMS.CSLA.Library
ROFSTLookup.rochild rc = RofstDataGetChildByAccPageID(_rofstID, accPageBase);
//if (rc.ID >=0 && rc.roid.Length < 16 && Regex.IsMatch(accPageKey, @".*\.[A-Z]") && rc.children != null && rc.children.Count() > 0)
if (rc.ID >= 0 && rc.roid.Length < 16 && !string.IsNullOrEmpty(accPageExt) && rc.children != null && rc.children.Count() > 0)
{
// Check if AccPageID/Key has a return value specific extension. Try to find the RoChild record with the specific return value type,
@@ -507,8 +509,6 @@ namespace VEPROMS.CSLA.Library
// B2023-037: Handle <=, >=, +-, -> and <- symbols. Convert to unicode for output, i.e. print and edit/view (when editing
// step, will show as 2 characters, not unicode, unless ro inserted when code replaced link text with unicode.
//(_MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue ||
// _MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue))
bool arrows1 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue;
bool arrows2 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue;
@@ -681,11 +681,10 @@ namespace VEPROMS.CSLA.Library
if (minutes > 0) duration = string.Format("{0} min(s) ", minutes.ToString("n0"));
if (secs < 0) secs = 0.00;
duration = duration + string.Format("{0,10:#####0.00} sec(s)", secs).Trim();
duration += string.Format("{0,10:#####0.00} sec(s)", secs).Trim();
return duration;
//return string.Format("{0,10:#####0.00}", TimeSpan.FromTicks(DateTime.Now.Ticks - dtStart.Ticks).TotalSeconds);
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
@@ -1475,19 +1474,20 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.roHdr ConvertFst2Objects(byte[] ab)
{
ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr();
roh.hSize = BitConverter.ToInt32(ab, 0);
roh.hYear = BitConverter.ToInt16(ab, 4);
roh.hMonth = ab[6];
roh.hDay = ab[7];
roh.hcYear = BitConverter.ToInt16(ab, 8);
roh.hcMonth = ab[10];
roh.hcDay = ab[11];
roh.hcHour = ab[12];
roh.hcMin = ab[13];
roh.hcSec = ab[14];
roh.hcHund = ab[15];
ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr
{
hSize = BitConverter.ToInt32(ab, 0),
hYear = BitConverter.ToInt16(ab, 4),
hMonth = ab[6],
hDay = ab[7],
hcYear = BitConverter.ToInt16(ab, 8),
hcMonth = ab[10],
hcDay = ab[11],
hcHour = ab[12],
hcMin = ab[13],
hcSec = ab[14],
hcHund = ab[15]
};
int hdrOffset = BitConverter.ToInt32(ab, 16);
int dbs = BitConverter.ToInt16(ab, hdrOffset + 4);
@@ -1525,10 +1525,11 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rogrp LoadGroup(byte[] ab, int offset, int tableID)
{
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp();
myGrp.ID = BitConverter.ToInt32(ab, offset);
myGrp.ParentID = BitConverter.ToInt32(ab, offset + 4);
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp
{
ID = BitConverter.ToInt32(ab, offset),
ParentID = BitConverter.ToInt32(ab, offset + 4)
};
int numChildren = BitConverter.ToInt16(ab, offset + 8);
@@ -1660,7 +1661,7 @@ namespace VEPROMS.CSLA.Library
}
// Update Progress Bar Accordingly
if (_totalRoCnt > 0) _pctComplete = _pctComplete + ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0);
if (_totalRoCnt > 0) _pctComplete += ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0);
OnProgressChanged(displayText, Convert.ToInt32(_pctComplete), 100);
}
@@ -1720,15 +1721,13 @@ namespace VEPROMS.CSLA.Library
protected virtual void OnProgressChanged(string title, string displayText, int curVal = 0, int maxVal = 100)
{
// If frmRofstLoadStatus is not null then call Update Progress Method
if (_frmRofstLoadStatus != null)
_frmRofstLoadStatus.UpdateProgress(title, displayText, curVal, maxVal);
_frmRofstLoadStatus?.UpdateProgress(title, displayText, curVal, maxVal);
}
protected virtual void OnProgressChanged(string displayText, int curVal = 0, int maxVal = 100)
{
// If frmRofstLoadStatus is not null then call Update Progress Method
if (_frmRofstLoadStatus != null)
_frmRofstLoadStatus.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
_frmRofstLoadStatus?.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
}
#endregion
@@ -1739,19 +1738,20 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.roHdr ConvertToRoHdrObject(SafeDataReader dr, bool loadChildren)
{
ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr();
rh.hSize = (int)dr.GetValue("hSize");
rh.hYear = (int)dr.GetValue("hYear");
rh.hMonth = (byte)dr.GetValue("hMonth");
rh.hDay = (byte)dr.GetValue("hDay");
rh.hcYear = (int)dr.GetValue("hcYear");
rh.hcMonth = (byte)dr.GetValue("hcMonth");
rh.hcDay = (byte)dr.GetValue("hcDay");
rh.hcHour = (byte)dr.GetValue("hcHour");
rh.hcMin = (byte)dr.GetValue("hcMin");
rh.hcSec = (byte)dr.GetValue("hcSec");
rh.hcHund = (byte)dr.GetValue("hcHund");
ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr
{
hSize = (int)dr.GetValue("hSize"),
hYear = (int)dr.GetValue("hYear"),
hMonth = (byte)dr.GetValue("hMonth"),
hDay = (byte)dr.GetValue("hDay"),
hcYear = (int)dr.GetValue("hcYear"),
hcMonth = (byte)dr.GetValue("hcMonth"),
hcDay = (byte)dr.GetValue("hcDay"),
hcHour = (byte)dr.GetValue("hcHour"),
hcMin = (byte)dr.GetValue("hcMin"),
hcSec = (byte)dr.GetValue("hcSec"),
hcHund = (byte)dr.GetValue("hcHund")
};
if (loadChildren)
{
@@ -1763,15 +1763,16 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rodbi ConvertToRodbiObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{
ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi();
rd.dbiID = (int)dr.GetValue("dbiID");
rd.dbiType = (int)dr.GetValue("dbiType");
rd.dbiAW = (int)dr.GetValue("dbiAW");
rd.dbiAP = (string)dr.GetValue("dbiAP");
rd.dbiTitle = (string)dr.GetValue("dbiTitle");
rd.ID = (int)dr.GetValue("ID");
rd.ParentID = (int)dr.GetValue("ParentID");
ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi
{
dbiID = (int)dr.GetValue("dbiID"),
dbiType = (int)dr.GetValue("dbiType"),
dbiAW = (int)dr.GetValue("dbiAW"),
dbiAP = (string)dr.GetValue("dbiAP"),
dbiTitle = (string)dr.GetValue("dbiTitle"),
ID = (int)dr.GetValue("ID"),
ParentID = (int)dr.GetValue("ParentID")
};
if (loadChildren || loadAllChildren)
{
@@ -1783,13 +1784,14 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rochild ConvertToRochildObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{
ROFSTLookup.rochild rc = new ROFSTLookup.rochild();
rc.ID = (int)dr.GetValue("ID");
rc.ParentID = (int)dr.GetValue("ParentID");
rc.type = (int)dr.GetValue("type");
rc.title = (string)dr.GetValue("title");
rc.roid = (string)dr.GetValue("roid");
ROFSTLookup.rochild rc = new ROFSTLookup.rochild
{
ID = (int)dr.GetValue("ID"),
ParentID = (int)dr.GetValue("ParentID"),
type = (int)dr.GetValue("type"),
title = (string)dr.GetValue("title"),
roid = (string)dr.GetValue("roid")
};
if (!string.IsNullOrEmpty((string)dr.GetValue("appid")))
{
@@ -1811,11 +1813,12 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.RoExtension ConvertToRoExtensionObject(SafeDataReader dr)
{
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension();
re.Offset = (int)dr.GetValue("Offset");
re.RoidExt = (string)dr.GetValue("RoidExt");
re.AccPageExt = (string)dr.GetValue("AccPageExt");
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension
{
Offset = (int)dr.GetValue("Offset"),
RoidExt = (string)dr.GetValue("RoidExt"),
AccPageExt = (string)dr.GetValue("AccPageExt")
};
return re;
}
@@ -1875,7 +1878,6 @@ namespace VEPROMS.CSLA.Library
// Instead of returning the RoChildBase object with a single RoReturnVal object attached, just return the single Ro ReturnValue object.
var roRetVal = child.children.First();
//child.title = roRetVal.title;
child.appid = roRetVal.appid;
child.roid = roRetVal.roid;
child.value = roRetVal.value;
@@ -2129,41 +2131,68 @@ namespace VEPROMS.CSLA.Library
return ProcessRO(match, multiRtnVal);
}
private string ProcessMacros(string str)
{
// Takes the RO text value and sees if a macro has been used.
// If so it will perform the macro operation on the substring in the text value
// Note** Right now the only macro is @HSP(), where every space between the "(" and ")" will be replaced with a hard space
private static string ProcessMacros(string str)
{
if (string.IsNullOrEmpty(str))
if (string.IsNullOrEmpty(str) || str.ToUpper().IndexOf("@HSP(") < 0)
return str;
string rtnstr = str;
int indx;
while ((indx = rtnstr.ToUpper().IndexOf("@HSP(")) > -1)
{
string resstr = rtnstr.Substring(0, indx);
int endHsp = rtnstr.IndexOf(")", indx);
string processingstr = str; //holds current string being processed
int indx; //current position of @HSP( in string
int endpos = 0; //end of last parens
//B2026 - 002 handle if parens inside a HSP
int startpos = indx + 5;
while (rtnstr.Substring(startpos, endHsp - startpos).Contains("("))
StringBuilder sb = new StringBuilder();
Stack<char> endparens = new Stack<char>();
while ((indx = processingstr.ToUpper().IndexOf("@HSP(")) > -1)
{
startpos = rtnstr.IndexOf("(", startpos + 1, endHsp - startpos) + 1;
endHsp = rtnstr.IndexOf(")", endHsp + 1);
sb.Append(processingstr.Substring(0, indx)); // initial string before @HSP(
for (int i = indx + 5; i < processingstr.Length; i++)
{
char ch = processingstr[i];
if (ch == '(')
{
//if opening paren inside HSP add it to the stack to look for a closing parens
endparens.Push(ch);
}
else if (ch == ')' && endparens.Count > 0)
{
//if cloing parens and it matches an opening parens inside of HSP, remove a level
_ = endparens.Pop();
}
else if (ch == ')' && endparens.Count == 0)
{
//if closing parens and at same level as HSP, break out since found correct closing parens
endpos = i;
break;
}
else if (i == processingstr.Length - 1)
{
//if hit the end of the string and no matching closing parens found, take to the end of the string
endpos = processingstr.Length;
}
}
string tmpstr = rtnstr.Substring(indx + 5, endHsp - indx - 5);
//Add the text inside the @HSP(...)
string tmpstr = processingstr.Substring(indx + 5, endpos - indx - 5);
// B2017-012 Don't convert space to hard spaces for XY Plots.
if (!tmpstr.Contains("<<G")) tmpstr = tmpstr.Replace(" ", @"\u160?");
sb.Append(tmpstr);
resstr = resstr + tmpstr;
rtnstr = resstr + rtnstr.Substring(endHsp + 1);
//Set the processing string to after the ending parens found in case multiple @HSP
processingstr = endpos + 1 >= processingstr.Length ? "" : processingstr.Substring(endpos + 1);
}
return rtnstr;
//add text after last end parens
sb.Append(processingstr);
return sb.ToString();
}
private int StringLength(byte[] ab, int offset)
@@ -2275,7 +2304,7 @@ namespace VEPROMS.CSLA.Library
{
rc.roid = FormatRoidKey(roid).Substring(0, 12);
DocVersionConfig dvc = (_myDocVersionInfo != null) ? _myDocVersionInfo.DocVersionConfig : null;
DocVersionConfig dvc = _myDocVersionInfo?.DocVersionConfig;
if (dvc != null) dvc.SelectedSlave = this.SelectedSlave;
switch (rc.roid)
@@ -2283,49 +2312,49 @@ namespace VEPROMS.CSLA.Library
case "FFFF00000001":
rc.title = "Number";
rc.appid = "U-NUMBER";
rc.value = (dvc != null) ? dvc.Unit_Number : null;
rc.value = dvc?.Unit_Number;
break;
case "FFFF00000002":
rc.title = "Other Number";
rc.appid = "U-OTHERNUMBER";
rc.value = (dvc != null) ? dvc.Other_Unit_Number : null;
rc.value = dvc?.Other_Unit_Number;
break;
case "FFFF00000003":
rc.title = "Text";
rc.appid = "U-TEXT";
rc.value = (dvc != null) ? dvc.Unit_Text : null;
rc.value = dvc?.Unit_Text;
break;
case "FFFF00000004":
rc.title = "Other Text";
rc.appid = "U-OTHERTEXT";
rc.value = (dvc != null) ? dvc.Other_Unit_Text : null;
rc.value = dvc?.Other_Unit_Text;
break;
case "FFFF00000005":
rc.title = "ID";
rc.appid = "U-ID";
rc.value = (dvc != null) ? dvc.Unit_ID : null;
rc.value = dvc?.Unit_ID;
break;
case "FFFF00000006":
rc.title = "Other ID";
rc.appid = "U-OTHERID";
rc.value = (dvc != null) ? dvc.Other_Unit_ID : null;
rc.value = dvc?.Other_Unit_ID;
break;
case "FFFF00000007":
rc.title = "Name";
rc.appid = "U-NAME";
rc.value = (dvc != null) ? dvc.Unit_Name : null;
rc.value = dvc?.Unit_Name;
break;
case "FFFF00000008":
rc.title = "Other Name";
rc.appid = "U-OTHERNAME";
rc.value = (dvc != null) ? dvc.Other_Unit_Name : null;
rc.value = dvc?.Other_Unit_Name;
break;
}
@@ -4113,7 +4113,10 @@ namespace VEPROMS.CSLA.Library
// date). Print_ViewableAfterChangeBarDate was created to get only that user specified date, if it exists. If it does exist, we compare
// that with the Content datetime, otherwise we proceed as before.
DateTime? viewableStartingDateTime = (MyProcedure.MyConfig as ProcedureConfig).Print_ViewableStartingChangeBarDate;
if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate && (MyProcedure.MyConfig as ProcedureConfig).SelectedSlave == 0)
// B2026-060 & B2026-061 removed the check of SelectedSlave (aka the selected child) from the IF statement,
// This was causing some step to print with change bars when there should not have been - because of the use of
// the Show Change Bars After date. The logic we need is built into the get of ChangeBarDate and Print_ViewableStartingChangeBarDate.
if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate)
return (MyContent.DTS > viewableStartingDateTime);
return (MyContent.DTS > MyProcedure.ChangeBarDate);
}
@@ -8123,6 +8126,10 @@ namespace VEPROMS.CSLA.Library
}
set { _ChangeBarDate = value; }
}
//C2026-021 Expand Functionality of Viewing Mode
public void ResetChangeBar() => _ChangeBarDate = null;
public Dictionary<int, ItemInfo> MyLookup = null;
public override void SetupTags()
{
@@ -46,7 +46,6 @@ namespace Volian.Controls.Library
names.Add(dcfg.Unit_Name);
}
dcfg.SelectedSlave = 0;
// string[] names = dcfg.Unit_Name.Split(',');
int apple = -1;
if(_MyDisplayTabItem.MyStepTabPanel != null)
apple = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.ApplDisplayMode;
@@ -55,7 +54,7 @@ namespace Volian.Controls.Library
foreach (string name in names)
{
i++;
AddViewMode(name.Trim(), i.ToString(), apple == i);
AddViewMode($"{name.Trim()} (View Only)", i.ToString(), apple == i);
}
AddItemMode("All", "-1", ref gpSubItem);
@@ -96,9 +95,6 @@ namespace Volian.Controls.Library
DevComponents.DotNetBar.Controls.GroupPanel gpSubItem;
gpSubItem = new DevComponents.DotNetBar.Controls.GroupPanel
{
//
// gpSubItem
//
AutoSize = true,
AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink,
CanvasColor = System.Drawing.SystemColors.Control,
@@ -130,41 +126,10 @@ namespace Volian.Controls.Library
set { _MyApplicability = value; }
}
//private ProcedureInfo _MyProcedureInfo;
//public ProcedureInfo MyProcedureInfo
//{
//get { return _MyProcedureInfo; }
//set
//{
// _MyProcedureInfo = value;
// if (_MyProcedureInfo != null && _MyProcedureInfo.IsProcedure)
// {
// DocVersionConfig cfg = new DocVersionConfig(_MyProcedureInfo.MyDocVersion);
// if (cfg.Unit_Name == string.Empty)
// this.Visible = false;
// else
// {
// string[] names = cfg.Unit_Name.Split(',');
// gpMode.Controls.Clear();
// gpItem.Controls.Clear();
// MyCheckBoxes.Clear();
// AddViewMode("Master", "-1", true);
// int i = 0;
// foreach (string name in names)
// {
// AddViewMode(name.Trim(), (++i).ToString());
// }
// AddItemMode("All", "-1");
// i = 0;
// foreach (string name in names)
// AddItemMode(name.Trim(), (++i).ToString());
// AddItemMode("None", "0");
// //if(!this.Visible)
// // this.Visible = true;
// }
// }
//}
//}
//C2026-021 Expand Functionality of Viewing Mode
public bool ShowItemSelection = true;
public void SetEnableDisableItemSelection(bool value) => gpItem.Enabled = ShowItemSelection = value;
private void AddItemMode(string name, string value, ref DevComponents.DotNetBar.Controls.GroupPanel gpSubItem)
{
CheckBox cb = new CheckBox();
@@ -251,18 +216,6 @@ namespace Volian.Controls.Library
}
}
}
//IItemConfig cfg = MyItemInfo.MyConfig as IItemConfig;
//cfg.MasterSlave_Applicability.SetFlags(MyApplicability);
//Content c = Content.Get(MyItemInfo.MyContent.ContentID);
//c.Save();
//foreach (TransitionInfo ti in MyItemInfo.ItemTransitions_ToID)
//{
// if (!ti.MyItemToID.IsApplicable(MyApplicability))
// {
// MessageBox.Show("you can't do this");
// return;
// }
//}
List<InvalidTransition> invalidTrans = WillTransitionsBeValidCommand.Execute(MyItemInfo.ItemID, MyApplicability);
// B2021-149: for Procedure level PC/PC, continue processing if all 'invalid' transitions are internal (query used
// return internal and external for the procedure level)
@@ -307,20 +260,6 @@ namespace Volian.Controls.Library
// C2021 - 027: Procedure level PC/PC - checkbox for applicability changed, fix ribbon's menus
if (MyItemInfo.IsProcedure) _MyDisplayTabItem.MyStepTabPanel.MyStepTabRibbon.SetParentChildCreatePDFButton(MyItemInfo.MyDocVersion.UnitNames, MyItemInfo);
//using (Content cnt = Content.Get(MyItemInfo.MyContent.ContentID))
//{
// cnt.DTS = DateTime.Now;
// cnt.UserID = Volian.Base.Library.VlnSettings.UserID;
// //cnt.Save();
//}
//using (Step s = Step.Get(MyItemInfo.ItemID))
//{
// IItemConfig cfg = new StepConfig(s);
// cfg.MasterSlave_Applicability = new Volian.Base.Library.BigNum(MyApplicability);
// s.MyContent.Config = cfg.ToString();
// s.Save();
//}
}
private void BtnApplicabilitychg_Click(object sender, System.EventArgs e)
{
@@ -550,7 +489,7 @@ namespace Volian.Controls.Library
void DisplayApplicability_VisibleChanged(object sender, EventArgs e)
{
MyItemInfo = MyItemInfo;
gpItem.Enabled = UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability
gpItem.Enabled = ShowItemSelection && UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability
}
}
}
@@ -145,12 +145,6 @@ namespace Volian.Controls.Library
return (verIdList.Count > 1);
}
}
//public event ItemSelectedChangedEvent OpenEnhancedDocument;
//public void OnOpenEnhancedDocument(ItemSelectedChangedEventArgs args)
//{
// if (OpenEnhancedDocument != null)
// OpenEnhancedDocument(this, args);
//}
public event ItemSelectedChangedEvent OpenInSeparateWindow;
public void OnOpenInSeparateWindow(ItemSelectedChangedEventArgs args)
{
@@ -549,6 +543,14 @@ namespace Volian.Controls.Library
if (((Bar)sender).Items == null) return;
if (((Bar)sender).Items.Count == 1)// Remove bar if last item is closed...
{
//B2026 - 048 View Only Mode freezes PROMS if last tab closed
//if last item is closing, need to re-enable Step Properties
//so if closing in view only mode will not freeze when re-opening
if (MyEditItem != null && MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
{
OnEnableDisableStepProperties(new StepTabRibbonEventArgs(MyEditItem.MyItemInfo, 0, E_ViewMode.Edit));
}
Bar bar = sender as Bar;
if (bar != null)
{
@@ -568,6 +570,13 @@ namespace Volian.Controls.Library
ActivateRemainingTab((Bar)sender);
}
}
public event StepTabRibbonEvent EnableDisableStepProperties;
private void OnEnableDisableStepProperties(StepTabRibbonEventArgs args)
{
if (EnableDisableStepProperties != null)
EnableDisableStepProperties(this, args);
}
#endregion
#region Public Methods
public void RefreshItem(ItemInfo myItemInfo)
+21
View File
@@ -245,6 +245,20 @@ namespace Volian.Controls.Library
}
protected void MyContent_Changed(object sender)
{
//C2026-021 Expand Functionality of Viewing Mode
if (MyStepPanel.ApplDisplayMode > 0)
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
}
else
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = 0;
}
MyItemInfo.MyProcedure.ResetChangeBar();
// Update the text to reflect the content change
MyItemInfo.RefreshItemAnnotations();
ChangeBar = MyItemInfo.HasChangeBar;
@@ -4115,6 +4129,13 @@ namespace Volian.Controls.Library
}
}
//// TIMING: DisplayItem.TimeIt("CSLARTB Parent");
//C2026-021 Expand Functionality of Viewing Mode
if (MyStepPanel.ApplDisplayMode > 0)
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
else
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
SetText();
if (itemInfo.IsSupInfoPart)
{
+68 -364
View File
@@ -25,7 +25,6 @@ namespace Volian.Controls.Library
public delegate void StepRTBLocationEvent(object sender, StepRTBLocationEventArgs args);
public delegate void StepRTBMouseEvent(object sender, MouseEventArgs args);
public delegate void StepRTBRoEvent(object sender, StepRTBRoEventArgs args);
//public delegate void StepRTBMouseWheelEvent(object sender, MouseEventArgs args);
public partial class StepRTB : RichTextBox // , IStepRTB
{
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -177,18 +176,6 @@ namespace Volian.Controls.Library
{
if (CursorMovement != null) CursorMovement(sender, args);
}
//public event StepRTBModeChangeEvent ModeChange;
//private void OnModeChange(object sender, StepRTBModeChangeEventArgs args)
//{
// //_MyModeChangeEventArgs = args;
// if (ModeChange != null) ModeChange(sender, args);
// else MessageBox.Show("StepRTB - no mode change defined");
//}
//public event StepRTBMouseWheelEvent MouseWheel;
//private void OnMouseWheel(object sender, MouseEventArgs args)
//{
// if (MouseWheel != null) MouseWheel(sender, args);
//}
/// <summary>
/// This event is not raised during all the in-between changes for link deletions
@@ -292,23 +279,6 @@ namespace Volian.Controls.Library
}
}
}
// use newer rich text box....
//[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
//static extern IntPtr LoadLibrary(string lpFileName);
//protected override CreateParams CreateParams
//{
// get
// {
// CreateParams prams = base.CreateParams;
// if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
// {
// //prams.ExStyle |= 0x020; // transparent
// prams.ClassName = "RICHEDIT50W";
// }
// return prams;
// }
//}
private E_FieldToEdit _FieldToEdit = E_FieldToEdit.StepText;
public E_FieldToEdit FieldToEdit
{
@@ -321,14 +291,12 @@ namespace Volian.Controls.Library
get
{
//B2020-100 RHM Use SelectionFont rather than the font from the format file.
//if (_RtfPrefix == null)
//{
StringBuilder selectedRtfSB = new StringBuilder();
//AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont));
// B2021-100: if SelectionFont is null, use the FormatFont
AddFontTable(selectedRtfSB, SelectionFont==null?FormatFont:SelectionFont, FontIsFixed(FormatFont));
_RtfPrefix = selectedRtfSB.ToString();
//}
return _RtfPrefix + @"\f1\fs" + FormatFont.SizeInPoints * 2 + " ";
}
}
@@ -375,14 +343,6 @@ namespace Volian.Controls.Library
get { if (_MyClassName == string.Empty)_MyClassName = CreateParams.ClassName; return _MyClassName; }
set { _MyClassName = value; }
}
//private E_EditPrintMode _epMode = E_EditPrintMode.Edit;
//public E_EditPrintMode EpMode
//{
// get { return _epMode; }
// set {
// if (value == E_EditPrintMode.Print) Console.WriteLine("");
// _epMode = value; }
//}
private E_ViewMode _vwMode = E_ViewMode.Edit;
public E_ViewMode VwMode
{
@@ -490,16 +450,25 @@ namespace Volian.Controls.Library
ActiveMode = activeMode;
OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(true));
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 2");
_InitializingRTB = true;
//C2026-021 Expand Functionality of Viewing Mode
StepPanel pnl = (Parent as RTBItem)?.MyStepPanel;
if (pnl?.ApplDisplayMode > 0)
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = pnl.ApplDisplayMode;
}
else
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
}
DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, VwMode, !ActiveMode, FieldToEdit, true,null, null,false);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 3");
//if (_origDisplayText != null && vlntxt.StartText == _origDisplayText.StartText)
//{
// ReadOnly = !(EpMode == E_EditPrintMode.Edit && VwMode == E_ViewMode.Edit);
// if (!ReadOnly && !edit) ReadOnly = true;
// return;
//}
if (pnl?.ApplDisplayMode > 0 && MyItemInfo.MyContent.ContentRoUsageCount > 0)
{
vlntxt.StartText = RefreshROsWithUnitStartText(vlntxt.StartText, pnl.ApplDisplayMode);
}
OrigDisplayText = vlntxt;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4");
@@ -507,49 +476,37 @@ namespace Volian.Controls.Library
//Text = ""; // Initialize text before add text
// IMPORTANT: SetLineSpacing must be set before Links, otherwise it
// was confusing the 'handle' of the rtf box.
//Console.WriteLine("'font',{0}", Font);
//if(Text == "")SelectionFont = Font; // Initialize SelectionFont
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "1");
if (FieldToEdit == E_FieldToEdit.StepText)
{
if (MyItemInfo != null)
{
//if (MyItemInfo.IsStep) Font = MyFontFamily == null ? MyItemInfo.FormatStepData.Font.WindowsFont : new Font(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style);
//else Font = Font = MyFontFamily == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont : new Font(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style);
if (MyItemInfo.IsStep)
{
if (MyFontFamily == null)
{
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before WindowsFont1");
System.Drawing.Font fnt = MyItemInfo.FormatStepData.Font.WindowsFont;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont1a");
Application.DoEvents();
if (FontKey(Font) != FontKey(fnt))
Font = fnt;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont1b");
}
else
Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4");
}
else
{
if (MyFontFamily == null)
{
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before WindowsFont2");
Font = MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont2");
}
else
Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 5");
}
LastRtf = Rtf;
}
}
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "StepRTB.RefreshDisplay Before SetLineSpacing");
RTBAPI.SetLineSpacing(this, RTBAPI.ParaSpacing.PFS_EXACT);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "StepRTB.RefreshDisplay After SetLineSpacing");
bool readOnlyStep = MyItemInfo == null || MyItemInfo.FormatStepData == null ? false : MyItemInfo.FormatStepData.ReadOnly;
if (!readOnlyStep)
{
@@ -557,10 +514,9 @@ namespace Volian.Controls.Library
if (IsDerived(sc) && !MyItemInfo.EnhAllowMod()) readOnlyStep = true;
}
ReadOnly = readOnlyStep || VwMode == E_ViewMode.View || ActiveMode == false;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before AddRTFText");
AddRtfText(vlntxt.StartText);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After AddRTFText");
//AddRtfStyles();
// set readonly based on initial modes, however, these may change if
// user selected view mode.
ClearUndo();
@@ -587,10 +543,7 @@ namespace Volian.Controls.Library
{
RemoveEventHandlers();
OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(false));// View Mode
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before SelectAll");
SelectAll();
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After SelectAll");
//if (SelectionHangingIndent !=0) SelectionHangingIndent = 0;
int indchar = 0;
string indentToken = MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IndentToken;
if (indentToken == null || indentToken == "0") indentToken = "\x5";
@@ -598,7 +551,6 @@ namespace Volian.Controls.Library
// this line of code was moved before the find for the indent so that
// the window gets resized if the indent changes the height, i.e. more line(s) in window.
AddEventHandlers();
//if (MyItemInfo.InList(186722)) Console.WriteLine("here");
if ((indchar = Find(indentToken, indchar, RichTextBoxFinds.None)) >= 0)
{
int nindents = 0;
@@ -652,10 +604,50 @@ namespace Volian.Controls.Library
_InitializingRTB = false;
AdjustSizeForContents(!ActiveMode);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After RefreshDisplay");
Application.DoEvents();
}
//C2026-021 Expand Functionality of Viewing Mode
//regex for finding Referenced object links
private static Regex regRefObj = new Regex(@"\#Link\:ReferencedObject:([0-9]*) ([0-9a-zA-Z]*) ([0-9]*)", RegexOptions.Singleline);
//Replace the Default RO text with Unit Specific RO text
private string RefreshROsWithUnitStartText(string startText, int unitID)
{
ROFSTLookup lookup = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyItemInfo.MyDocVersion);
MatchCollection mc = regRefObj.Matches(startText);
if (mc.Count == 0)
return startText;
StringBuilder sb = new StringBuilder();
int lastindex = 0;
foreach (Match match in mc)
{
//get where ther default text for the RO starts
int indx = startText.LastIndexOf(@"\v <START]\v0", match.Index) + 13;
//get the RO, value will be the unit related value
ROFSTLookup.rochild roc = lookup.GetRoChild(ROFSTLookup.FormatRoidKey(match.Groups[2].Value, true));
// append before tags up through the <START]\v0
//note if multiple tags this will also append the end up the previous tags
sb.Append(startText.Substring(lastindex, indx - lastindex));
//append the unit specific RO value (replacing where the default RO value was)
sb.Append($@"\cf1 {roc.value}\cf0\v");
lastindex = match.Index;
}
//append referenced object tag & text after tag
sb.Append(startText.Substring(lastindex));
return sb.ToString();
}
private bool IsDerived(StepConfig sc)
{
foreach (EnhancedDocument ed in sc.MyEnhancedDocuments)
@@ -752,8 +744,6 @@ namespace Volian.Controls.Library
protected override void OnMouseWheel(MouseEventArgs e)
{
OnDoMouseWheel(this, e);
//MyRTBItem.MyStepPanel.MouseWheel(e);
//base.OnMouseWheel(e);
}
// When a border style is changed, the richtextbox's handle is 'destroyed', so that the handleDestroyed
// event is done. This was causing the event handlers to be removed (RemoveEventHandler) so that the
@@ -896,10 +886,6 @@ namespace Volian.Controls.Library
{
_MouseDown = false;
}
//void MyConfig_PropertyChanged(object sender, PropertyChangedEventArgs e)
//{
// SaveConfig();
//}
private void StepRTB_Click(object sender, EventArgs e)
{
if (ReadOnly) return;
@@ -957,44 +943,6 @@ namespace Volian.Controls.Library
}
#endregion
#region ApplicationSupport
// Used in StepTabRibbon:
//public void ToggleEditView(E_ViewMode vwMode)
//{
// OnDoSaveContents(this, new EventArgs()); // SaveText();
// //ItemInfo tmp = MyItemInfo;
// //MyItemInfo = null;
// //ReadOnly = !ReadOnly;
// //EpMode = ReadOnly ? E_EditPrintMode.Print : E_EditPrintMode.Edit;
// VwMode = vwMode;
// ReadOnly = VwMode == E_ViewMode.View;
// ViewRTB = ReadOnly;
// Clear();
// RefreshDisplay(!ViewRTB);
// //MyItemInfo = tmp;
// SelectionStart = 0;
// SelectionLength = 0;
// //OnModeChange(this, new StepRTBModeChangeEventArgs(ViewRTB?E_ViewMode.View:E_ViewMode.Edit));
//}
//public string InsertSymbolInRO(string val)
//{
// string retval = val;
// C2019-043 convert a "->" to the Right Arrow symbol and a "<-" to the Left Arrow Symbol
// note that at the dash character gets convert to a non-breaking hyphen "\u8209?"
//if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue)
//{
// retval = retval.Replace("\\u8209?>", GetAddSymbolTextForROs(@"\u8594?")); // Right Arrow
// retval = retval.Replace("<\\u8209?", GetAddSymbolTextForROs(@"\u8592?")); // Left Arrow
//}
//// C2022-021 convert a "<=" to a less than or equal symbol, a ">=" to a greather than or equal symbol and +- to a
//// plus/minus symbol in ROs
//if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue)
//{
// retval = retval.Replace("<=", GetAddSymbolTextForROs(@"\u8804?")); // Less than or Equal
// retval = retval.Replace(">=", GetAddSymbolTextForROs(@"\u8805?")); // Greater than or Equal
// retval = retval.Replace("+\\u8209?", @"\'b1"); // plus/minus - note - is stored as \u8209 and plus/minus is < 256, i.e. handled differently
//}
// return retval;
//}
public void InsertRO(string value, string link)
{
// B2023-037: Remove code that saves the unicode characters for <=, >=, +-, <- and -> into the link text. The characters
@@ -1172,8 +1120,6 @@ namespace Volian.Controls.Library
return;
}
//Console.WriteLine("ItemID:{0}", MyItemInfo.ItemID);
//if(MyItemInfo.ItemID==10256)
// Volian.Base.Library.vlnStackTrace.ShowStackLocal("ItemID:{0}", MyItemInfo.ItemID.ToString());
StringBuilder selectedRtfSB = new StringBuilder();
AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont));
_RtfPrefix = selectedRtfSB.ToString();
@@ -1197,27 +1143,12 @@ namespace Volian.Controls.Library
}
// B2017-048, B2017-052, B2017-055 ROs sometimes have two start tokens which make them uneditable.
newRtf = newRtf.Replace("<START]<START]", "<START]");
//Point linkIssues = FindLinkIssues(newRtf);
//if (linkIssues.X != linkIssues.Y)
// newRtf = FixBadLinks(newRtf,linkIssues);
SelectedRtf = _LastRtf = newRtf;
_lastReadOnly = ReadOnly;
}
FindAllLinks();
if (txt == "") SelectionFont = FormatFont;
}
//private string FixBadLinks(string newRtf, Point linkIssues)
//{
// Console.WriteLine("Bad Link rtf = Starts={0}, Ends={1}, \"{2}\"", linkIssues.X,linkIssues.Y, newRtf);
// //Volian.Base.Library.vlnStackTrace.ShowStack();
// return newRtf;
//}
//private static Point FindLinkIssues(string rtf)
//{
// MatchCollection mcStart = Regex.Matches(rtf, @"\<START\]");
// MatchCollection mcEnd = Regex.Matches(rtf, @"\[END\>");
// return new Point(mcStart.Count, mcEnd.Count);
//}
public void SetTableGridCellRTFPrefix(Font myfont)
{
if (_FormatFont == null)
@@ -1282,7 +1213,7 @@ namespace Volian.Controls.Library
sbbeg.Append(@"\i");
sbend.Insert(0, @"\i0");
}
selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}"); //}\f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}}";
selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}");
if (!isFixed)
selectedRtfSB.Append(@"{\f1\fnil\fcharset0 " + Volian.Base.Library.vlnFont.ProportionalSymbolFont + @";}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // C2017-036 get best available proportional font for symbols - B2025-039 add Blue for Colored Replace Words
else
@@ -1291,7 +1222,7 @@ namespace Volian.Controls.Library
// use styles to construct rtf commands to insert into next line (where \b, etc is)
// B2015-134 Hanging Indent with Hard Returns was not being saved- removed \sl-240\slmult0
selectedRtfSB.Append(@"\viewkind4\uc1\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
//selectedRtfSB.Append(@"\viewkind4\uc1\pard\sl-240\slmult0" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
}
private bool FontIsFixed(Font myFont)
@@ -1396,7 +1327,6 @@ namespace Volian.Controls.Library
{
string fonttab = FontTable;
string fontsize = FontSize;
//if (this.DetectUrls) this.DetectUrls = false;
if (SelectionLength > 0)HandleDeleteKeyWithSelectedText(new KeyEventArgs(Keys.None), null);
int position = SelectionStart;
SelectionLength = 0;
@@ -1426,7 +1356,6 @@ namespace Volian.Controls.Library
}
private void AddLink50(string linkValue, string linkUrl)
{
//this.DetectUrls = false;
int position = SelectionStart;
SelectionLength = 0;
SelectedRtf = string.Format(@"{{\rtf\field{{\*\fldinst{{HYPERLINK ""www.volian.com #{0}"" }}}}{{\fldrslt{{\cf2\ul {1}}}}}}}", linkUrl, linkValue);
@@ -1479,9 +1408,6 @@ namespace Volian.Controls.Library
{
Size offset = Size - ClientSize;
int widthNew = (this is TableCellEditor) ? Width : (ContentsSize.Width + offset.Width + AdjustSize.Width);
//int widthNew = Width;
//if (!(this is TableCellEditor))
// widthNew = ContentsSize.Width + offset.Width + AdjustSize.Width;
int heightNew = ContentsSize.Height + offset.Height + AdjustSize.Height;
// Don't make the window narrower unless it has text - RHM - 20100107
Size szNew = new Size(((Text != "" && adjustWidth) ? widthNew : (widthNew > Width ? widthNew : Width)), heightNew);
@@ -1619,22 +1545,6 @@ namespace Volian.Controls.Library
}
#endregion
#region ColorSupport - Not currently used.
//private void SetBackGroundColor(ItemInfo itemInfo)
//{
// string backcolor = null;
// int type = (int)itemInfo.MyContent.Type;
// FormatInfo formatinfo = itemInfo.ActiveFormat;
// if (type == (int)E_FromType.Procedure)
// backcolor = formatinfo.PlantFormat.FormatData.ProcData.BackColor;
// else if (type == (int)E_FromType.Section)
// backcolor = formatinfo.PlantFormat.FormatData.SectData.BackColor;
// else
// {
// int typindx = (int)itemInfo.MyContent.Type - 20000; // what to do for other types rather than steps
// backcolor = formatinfo.PlantFormat.FormatData.StepDataList[typindx].StepLayoutData.BackColor;
// }
// BackColor = Color.FromName(backcolor);
//}
#endregion
#region EventSupport
#region LinkEvents
@@ -1667,8 +1577,6 @@ namespace Volian.Controls.Library
#region TextAndContentsEvents
void StepRTB_TextChanged(object sender, EventArgs e)
{
//if (Rtf.Contains("<START]<START]"))
// Volian.Base.Library.vlnStackTrace.ShowStackLocal(2, 10, "Start Start ItemID={0}", MyItemInfo.ItemID);
if (_InitializingRTB || _IsExperimenting) return;
// Was setting _IsDirty to true here, but this was getting called from
// 'dotnetbar' when text was NOT Changed. So _IsDirty was made into
@@ -1704,7 +1612,6 @@ namespace Volian.Controls.Library
private void HandleLocalSelectionChange()
{
if (this.MyItemInfo != null && this.MyItemInfo.IsRtfRaw) return; // B2017-023 null reference check for empty workdraft set information dialog
//if (MyRTBItem != null && MyRTBItem.MyStepPanel.SelectedStepRTB != this)
if (OnIsNotCurrentSelection(this, new EventArgs()))
return;
@@ -1720,8 +1627,6 @@ namespace Volian.Controls.Library
SelectAll();
_HandlingCtrlA = false;
}
//HandleOverWrite();
//vlnStackTrace.ShowStackLocal("HandleSelectionChangeStack", 1, 10);
bool startingValue = _AdjustingSelection;
if (_IdentifyingLinks || _ProcessingDelete) return;
// If the cursor is beyond the end of the line then move the cursor back one character
@@ -1831,14 +1736,6 @@ namespace Volian.Controls.Library
return false;
}
//private void HandleOverWrite()
//{
// if (!_OverWrite) return;
// if (SelectionLength > 0) return;
// if (SelectionStart == TextLength) return;
// Console.WriteLine("Handle Overwrite, SelectionStart = {0}, SelectionLength = {1}", SelectionStart, SelectionLength);
// SelectionLength = 1;
//}
private bool _CheckSelection = false;
#endregion
#region Delete Handlers
@@ -1857,7 +1754,7 @@ namespace Volian.Controls.Library
DeleteCurrentSelection(keychars);
e.SuppressKeyPress = true;
break;
case RangeStatus.Before_Between: //myRTB1.SelectedText.EndsWith(@"[END><START]")
case RangeStatus.Before_Between:
DeleteEndBetweenLinks(keychars);
e.SuppressKeyPress = true;
break;
@@ -1927,19 +1824,15 @@ namespace Volian.Controls.Library
/// <param name="setSelect"></param>
private void InsertCharBetweenLinks(LinkLocation ll, char charToAdd, bool setSelect)
{
//_InsertingSpaceBetweenLinks = true;
DebugPrint("ICBLvvvvvvvvvvvvvvv>>>");
Rtf = Rtf.Substring(0, ll.StartRtf) + @"\v0 " + charToAdd.ToString() + @"\v " + Rtf.Substring(ll.StartRtf);
//_InsertingSpaceBetweenLinks = false;
if (setSelect)
SelectionStart = ll.Start - 6; // account for <START] - 1 for the character typed
DebugPrint("ICBL^^^^^^^^^^^^^^^>>>");
}
private void ExpandSelectionToIncludeStart()
{
//_AdjustingSelection = true;
SetSelection(SelectionStart - 7, SelectionLength + 7); // Expand selection to include start
//_AdjustingSelection = false;
}
public string GetSelectionForClipBoard()
{
@@ -1986,7 +1879,6 @@ namespace Volian.Controls.Library
{
_SendBackSpace = true;
RtbSendKeys("{BS}"); // remove X
//this.ClearUndo(); // undo was redisplay 'X' and then deleted text
Application.DoEvents();
DebugSelection("After BS");
}
@@ -2005,9 +1897,7 @@ namespace Volian.Controls.Library
int slen = SelectionLength + 1 - 7;
// This puts a space at the link that starts at the end of the selection
InsertCharBetweenLinks(_RangeEndLink.NextLink);
//_AdjustingSelection = true;
DeleteSelection(sstart, slen, keychars);
//_AdjustingSelection = false;
_ProcessingKeys--;
}
private void DeleteStartBetweenLinks(string keychars)
@@ -2016,7 +1906,6 @@ namespace Volian.Controls.Library
DebugSelection("DeleteStartBetweenLinks");
int slen = SelectionLength + 8;
int sstart = SelectionStart - 7;
//LinkLocation ll = FindBetweenLinks(SelectionStart);
InsertCharBetweenLinks(_RangeStartLink);
DeleteSelection(sstart, slen, keychars);
_ProcessingKeys--;
@@ -2027,7 +1916,6 @@ namespace Volian.Controls.Library
DebugSelection("DeleteFromStartOfBox");
int slen = SelectionLength;
SetSelection(0, 0);
//RtbSendKeys(" "); // open for space between links which separates END/START tokens
SelectedText = " ";
DeleteSelection(0, slen + 8, keychars);
_ProcessingKeys--;
@@ -2038,12 +1926,8 @@ namespace Volian.Controls.Library
DebugSelection("DeleteFromStartOfBoxEndBetweenLinks");
// This puts a space at the link that starts at the end of the selection
int sLen = SelectionStart + SelectionLength - 7 + 2;// -7 for <START] + 2 for the spaces that are added
//LinkLocation ll = FindBetweenLinks(SelectionStart + SelectionLength);
InsertCharBetweenLinks(_RangeEndLink.NextLink);
//RtbSendKeys("{RIGHT} "); // open for space between links which separates END/START tokens
//int sLen = myRTB1.SelectionStart;
SetSelection(0, 0);
//RtbSendKeys(" "); // open for space between links which separates END/START tokens
SelectedText = " "; // open for space between links which separates END/START tokens
DeleteSelection(0, sLen, keychars);
_ProcessingKeys--;
@@ -2150,7 +2034,7 @@ namespace Volian.Controls.Library
srtb.Rtf = this.SelectedRtf.Replace(@"\u8209?", "-");
srtb.Rtf = srtb.Rtf.Replace(@"\u9586?", @"\\");
string rtnstr = "";
string ctxt = srtb.Text;//this.SelectedText;
string ctxt = srtb.Text;
if (ctxt.EndsWith("<START]"))
ctxt = ctxt.Substring(0, ctxt.Length - 7);
int idx = 0;
@@ -2279,7 +2163,6 @@ namespace Volian.Controls.Library
if (MyItemInfo != null && MyItemInfo.IsRtfRaw && MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION") && !hasEquation)
{
FlexibleMessageBox.Show("Cannot paste non-equation data into an equation step type.", "Invalid data", MessageBoxButtons.OK);
//richTextBox1.Dispose();
e.Handled = true;
return;
}
@@ -2287,7 +2170,6 @@ namespace Volian.Controls.Library
else if (hasEquation && (MyItemInfo == null || (MyItemInfo != null && !MyItemInfo.IsRtfRaw && !MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION"))))
{
FlexibleMessageBox.Show("Cannot paste equation data into an non-equation step type.", "Invalid data", MessageBoxButtons.OK);
//richTextBox1.Dispose();
e.Handled = true;
return;
}
@@ -2546,16 +2428,6 @@ namespace Volian.Controls.Library
if (SelectionLength > 0) HandleDeleteKeyWithSelectedText(e, null);
break;
case Keys.Insert:
//_OverWrite = !_OverWrite;
//if (_OverWrite)
//{
// HandleSelectionChange();
//}
//else
//{
// SelectionLength = 0;
// HandleSelectionChange();
//}
// For now, don't allow for toggling between insert/overwrite mode - see
// comment on _OverWrite
e.Handled = true;
@@ -2572,18 +2444,8 @@ namespace Volian.Controls.Library
ItemInfo myCopyStep = (this.Parent.Parent.Parent as StepTabPanel).MyDisplayTabControl.MyCopyStep;
if (myCopyStep != null)
{
// commented out as part of bug fix B2016-148 to fix the <Shift><F5> not popping up the paste options
//if (this.MyItemInfo.IsSection && myCopyStep.IsSection)
// OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
//if (this.MyItemInfo.IsStep && myCopyStep.IsStep)
//{
// if ((this.MyItemInfo.IsHigh && myCopyStep.IsHigh) || (!this.MyItemInfo.IsHigh && !myCopyStep.IsHigh))
// OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
//}
OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
}
//if (!OnCheckClipboard(this, new EventArgs())) return; // check if 'clipboard' contains a step.
//OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
}
else if (!e.Control && !e.Alt)
{
@@ -2788,7 +2650,6 @@ namespace Volian.Controls.Library
}
if (Text == "" && Parent != null && Parent is VlnFlexGrid)
{
//ShowMyParentsFonts();
SelectionFont = Parent.Font;
}
// add the character with its font depending on the char....
@@ -3042,7 +2903,6 @@ namespace Volian.Controls.Library
_AdjustingSelection = true;
PushSelection();
FindLinks();
//IdentifyLinks();
PopSelection();
LinkLocation llx = FindLinkLocation();
if (_CheckSelection)
@@ -3257,98 +3117,6 @@ namespace Volian.Controls.Library
Select(locStart, locLength);
}
#endregion
//#region FontAndStylesSupport
//private void ToggleFontStyle(FontStyle style, bool att_on)
//{
// int start = SelectionStart;
// int len = SelectionLength;
// System.Drawing.Font currentFont;
// FontStyle fs;
// for (int i = 0; i < len; ++i)
// {
// Select(start + i, 1);
// currentFont = SelectionFont;
// fs = currentFont.Style;
// //add or remove style
// if (!att_on)fs = fs | style;
// else fs = fs & ~style;
// SelectionFont = new Font(
// currentFont.FontFamily,
// currentFont.Size,
// fs
// );
// }
//}
/// <summary>
/// Returns a Font with:
/// 1) The font applying to the entire selection, if none is the default font.
/// 2) The font size applying to the entire selection, if none is the size of the default font.
/// 3) A style containing the attributes that are common to the entire selection, default regular.
/// </summary>
///
//public Font GetFontDetails()
//{
// //This method should handle cases that occur when multiple fonts/styles are selected
// int start = SelectionStart;
// int len = SelectionLength;
// int TempStart = 0;
// if (len <= 1)
// {
// // Return the selection or default font
// if (SelectionFont != null)
// return SelectionFont;
// else
// return Font; // should be default from format.
// }
// // Step through the selected text one char at a time
// // after setting defaults from first char
// _rtbTemp.Rtf = SelectedRtf;
// //Turn everything on so we can turn it off one by one
// FontStyle replystyle =
// FontStyle.Bold | FontStyle.Italic | FontStyle.Underline;
// // Set reply font, size and style to that of first char in selection.
// _rtbTemp.Select(TempStart, 1);
// string replyfont = _rtbTemp.SelectionFont.Name;
// float replyfontsize = _rtbTemp.SelectionFont.Size;
// replystyle = replystyle & _rtbTemp.SelectionFont.Style;
// // Search the rest of the selection
// for (int i = 1; i < len; ++i)
// {
// _rtbTemp.Select(TempStart + i, 1);
// // Check reply for different style
// replystyle = replystyle & _rtbTemp.SelectionFont.Style;
// // Check font
// if (replyfont != _rtbTemp.SelectionFont.FontFamily.Name)
// replyfont = "";
// // Check font size
// if (replyfontsize != _rtbTemp.SelectionFont.Size)
// replyfontsize = (float)0.0;
// }
// // Now set font and size if more than one font or font size was selected
// if (replyfont == "")
// replyfont = _rtbTemp.Font.FontFamily.Name;
// if (replyfontsize == 0.0)
// replyfontsize = _rtbTemp.Font.Size;
// // generate reply font
// Font reply
// = new Font(replyfont, replyfontsize, replystyle);
// return reply;
//}
//#endregion
#region EnumsSelectionRange
private enum StartStatus : int
{
@@ -3425,12 +3193,6 @@ namespace Volian.Controls.Library
DebugPrint("SelectionStart {0}, SelectionEnd {1}, TextLength {2}",
SelectionStart, SelectionStart + SelectionLength,
TextLength);
//if (_RangeStartLink != null)
// _RangeStartLink.Show("startLink");
//if (_RangeEndLink != null)
// _RangeEndLink.Show("endLink");
//if (foundLink != null)
// foundLink.Show("foundLink");
if (foundLink == null)
return RTBRangeStatus = RangeStatus.NoContainedLinks;
@@ -3749,7 +3511,6 @@ namespace Volian.Controls.Library
static void tsi_Click(object sender, EventArgs e)
{
ToolStripMenuItem tsmi = sender as ToolStripMenuItem;
//_ContextMenuStepRTB.MyRTBItem.MyStepPanel.MyStepTabPanel.MyStepTabRibbon.OpenContextMenu(tsmi.Owner.Location);
_ContextMenuStepRTB.OnOpenContextMenu(sender, new StepRTBLocationEventArgs(tsmi.Owner.Location));
}
// This is our customized Spell Check dialog
@@ -4144,63 +3905,6 @@ namespace Volian.Controls.Library
if (NextLink != null)
Console.WriteLine("LinkLocation: {0}.NextLink {1}", str, NextLink);
}
// #region ClipboardHandler
// private const int WM_CUT = 0x0300;
// private const int WM_COPY = 0x0301;
// private const int WM_PASTE = 0x0302;
// public delegate void ClipboardEventHandler(object sender, ClipboardEventArgs e);
// [Category("Clipboard")]
// public event ClipboardEventHandler CutText;
// [Category("Clipboard")]
// public event ClipboardEventHandler CopiedText;
// [Category("Clipboard")]
// public event ClipboardEventHandler PastedText;
// protected override void WndProc(ref Message m)
// {
// if (m.Msg == WM_CUT)
// {
// if (CutText != null)
// CutText(this, new ClipboardEventArgs(this.SelectedText));
// }
// else if (m.Msg == WM_COPY)
// {
// if (CopiedText != null)
// CopiedText(this, new ClipboardEventArgs(this.SelectedText));
// }
// else if (m.Msg == WM_PASTE)
// {
// if (PastedText != null)
// PastedText(this, new ClipboardEventArgs(Clipboard.GetText()));
// }
// base.WndProc(ref m);
// }
//}
//public class ClipboardEventArgs : EventArgs
//{
// private string clipboardText;
// public string ClipboardText
// {
// get
// {
// return clipboardText;
// }
// set
// {
// clipboardText = value;
// }
// }
// public ClipboardEventArgs(string clipboardText)
// {
// this.clipboardText = clipboardText;
// }
// #endregion
}
#endregion
@@ -3367,6 +3367,13 @@ namespace Volian.Controls.Library
MessageBox.Show(this, message, "Procedure Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
//C2026-021 Expand Functionality of Viewing Mode
if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View && MyEditItem.MyStepPanel.ApplDisplayMode > 0)
{
//Procedure Viewing Mode is set to a specific Unit - so cannot exit vie only mode
MessageBox.Show(this, "Procedures with multiple units are only editable when the Viewing Mode is set to Master. To change out of View Only Mode, first open the Step Propeties panel->Applicability tab and change the Viewing Mode to be Master. Then you can disable View Only Mode.", "Procedure Viewing Mode Incompatiple with Edits", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
{
//swapping into edit mode, so check out procedure and Setup Security