Correct cursor position after RO Insert
Correct dispose logic for transition destination ITEMs Correct cursor position after Transition Insert Correct logic to parse Transition Link Token Correct Save Config to dispose of ITEM Removed debug vlnStackTrace
This commit is contained in:
parent
fb3ed8d053
commit
dc7eb108cb
@ -17,6 +17,7 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
public partial class DisplayRO : UserControl
|
||||
{
|
||||
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
#region Properties
|
||||
private DisplayTabControl _TabControl;
|
||||
|
||||
@ -494,15 +495,16 @@ namespace Volian.Controls.Library
|
||||
string linktxt = string.Format(@"#Link:ReferencedObject:<NewID> {0} {1}", padroid, _MyROFST.MyRODb.RODbID);
|
||||
// Resolve symbols and scientific notation in the RO return value
|
||||
string valtxt = ConvertSymbolsAndStuff(selectedChld.value);
|
||||
_MyRTB.InsertRO(valtxt, linktxt);
|
||||
//_MyRTB.Select(_MyRTB.SelectionStart + valtxt.Length + linktxt.Length, 0);
|
||||
int ss = _MyRTB.SelectionStart;
|
||||
_MyRTB.SaveText();
|
||||
//_MyRTB.Select(_MyRTB.SelectionStart + valtxt.Length + linktxt.Length, 0);
|
||||
//_MyRTB.Select(_MyRTB.SelectionStart + valtxt.Length, 0);
|
||||
//_MyRTB.Select(_MyRTB.SelectionStart + 1, 0);
|
||||
_MyRTB.Select(ss + valtxt.Length + linktxt.Length+1, 0);
|
||||
//_MyRTB.Select(ss, 0);
|
||||
int ss = _MyRTB.SelectionStart; // Remember where the link is being added
|
||||
_MyRTB.InsertRO(valtxt, linktxt); // Insert the LINK
|
||||
_MyRTB.SaveText(); // Save the text with the LINK - This also moves the cursor to the end of the text
|
||||
// By selecting a starting position within a link, StepRTB (HandleSelectionChange) will select the link
|
||||
_MyRTB.Select(ss + 7 + valtxt.Length , 0);// Select the link, Try 7 for "<Start]" plus the length of the value
|
||||
//Console.WriteLine("'{0}'",_MyRTB.Text.Substring(_MyRTB.SelectionStart,_MyRTB.SelectionLength));
|
||||
string linkText = _MyRTB.Text.Substring(_MyRTB.SelectionStart, _MyRTB.SelectionLength);
|
||||
if (_MyLog.IsInfoEnabled && (linkText.Contains("NewID") || linkText.Contains("CROUSGID")))
|
||||
_MyLog.InfoFormat("ItemID {0}, LinkText '{1}'", _MyRTB.MyItemInfo.ItemID, linkText);
|
||||
_MyRTB.Select(_MyRTB.SelectionStart + _MyRTB.SelectionLength, 0);// Move cursor to end of LINK
|
||||
_MyRTB.Focus();
|
||||
}
|
||||
_MyRTB.inRoAdd = false;
|
||||
|
@ -294,8 +294,7 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
// If the previous character is a comma or a space then don't add a Hard Space
|
||||
if (ind > 1 && (str[ind - 2] == ',' || str[ind - 2] == ' ')) return str;
|
||||
if (ind == -1)
|
||||
return str;
|
||||
if (ind <= 0) return str;
|
||||
return str.Substring(0,ind - 1) + @"\u160?" + str.Substring(ind);
|
||||
}
|
||||
private bool StepTransition(int TransId)
|
||||
@ -561,18 +560,31 @@ namespace Volian.Controls.Library
|
||||
string[] tparts = linkstr.Split(" ".ToCharArray());
|
||||
int type = System.Convert.ToInt32(tparts[0]);
|
||||
int tr1 = System.Convert.ToInt32(tparts[2]); // tparts[1] is token for tranid
|
||||
Item itm1 = Item.Get(tr1);
|
||||
bool dispose1 = false;
|
||||
Item itm1 = null;
|
||||
bool dispose2 = false;
|
||||
Item itm2 = null;
|
||||
if (itm.ItemID != tr1)
|
||||
{
|
||||
dispose1 = true;
|
||||
itm1 = Item.Get(tr1);
|
||||
}
|
||||
else
|
||||
itm1 = itm; // a transition that points to itself should not dispose
|
||||
if (dte.Type == E_TextElementType.TransitionRange)
|
||||
{
|
||||
dispose2 = true;
|
||||
itm2 = Item.Get(System.Convert.ToInt32(tparts[3]));
|
||||
}
|
||||
else
|
||||
itm2 = itm1;
|
||||
ContentTransition ct = itm.MyContent.ContentTransitions.Add(itm1, itm2);
|
||||
//Console.WriteLine("CT {0},{1},{2},{3}", ct.TransitionID, itm.ItemID, itm.MyContent.MyContentUnique, itm.MyContent.ContentTransitions.Count);
|
||||
ct.TranType = type;
|
||||
l_dte.Link = l_dte.Link.Replace("<NewID>", string.Format("<CTID={0}>", ct.TransitionID));
|
||||
l_dte.TextAndLink = l_dte.TextAndLink.Replace("<NewID>", string.Format("<CTID={0}>", ct.TransitionID));
|
||||
if (dispose2) itm2.Dispose();
|
||||
if (dispose1) itm1.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -597,32 +609,33 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
private void RtfToDisplayTextElements(string text)
|
||||
{
|
||||
// get original text into displaytext elements for comparison for links:
|
||||
if (DisplayTextElementList == null)
|
||||
DisplayTextElementList = new List<displayTextElement>();
|
||||
else
|
||||
DisplayTextElementList.Clear();
|
||||
// get original text into displaytext elements for comparison for links:
|
||||
if (DisplayTextElementList == null)
|
||||
DisplayTextElementList = new List<displayTextElement>();
|
||||
else
|
||||
DisplayTextElementList.Clear();
|
||||
|
||||
if (text == null || text == "") return;
|
||||
if (text == null || text == "") return;
|
||||
|
||||
string noExtraRtfStr = text;
|
||||
int startIndex = 0;
|
||||
int index = -1;
|
||||
string noExtraRtfStr = text;
|
||||
|
||||
int startIndex = 0;
|
||||
int index = -1;
|
||||
noExtraRtfStr = noExtraRtfStr.Replace(@"><", @">\v0 \v <");
|
||||
while ((index = FindTokenChar(noExtraRtfStr, startIndex)) > -1)
|
||||
{
|
||||
// Do any 'plain' text that preceeds the token.
|
||||
if (index > startIndex) DoTextElement(noExtraRtfStr, startIndex, index);
|
||||
while ((index = FindTokenChar(noExtraRtfStr, startIndex)) > -1)
|
||||
{
|
||||
// Do any 'plain' text that preceeds the token.
|
||||
if (index > startIndex) DoTextElement(noExtraRtfStr, startIndex, index);
|
||||
|
||||
if (noExtraRtfStr[index + 1] == 'v')
|
||||
index = DoLink(noExtraRtfStr, index);
|
||||
else
|
||||
index = DoSymbol(noExtraRtfStr, startIndex, index);
|
||||
startIndex = index; // +1;
|
||||
if (startIndex >= noExtraRtfStr.Length) break;
|
||||
}
|
||||
// Add any remaining text.
|
||||
if (startIndex < noExtraRtfStr.Length) DoTextElement(noExtraRtfStr, startIndex, index);
|
||||
if (noExtraRtfStr[index + 1] == 'v')
|
||||
index = DoLink(noExtraRtfStr, index);
|
||||
else
|
||||
index = DoSymbol(noExtraRtfStr, startIndex, index);
|
||||
startIndex = index; // +1;
|
||||
if (startIndex >= noExtraRtfStr.Length) break;
|
||||
}
|
||||
// Add any remaining text.
|
||||
if (startIndex < noExtraRtfStr.Length) DoTextElement(noExtraRtfStr, startIndex, index);
|
||||
}
|
||||
private string RtfToDbText(string text)
|
||||
{
|
||||
@ -1076,6 +1089,7 @@ namespace Volian.Controls.Library
|
||||
if (m.Success) return m.Groups[1].ToString()[0];
|
||||
return '\0';
|
||||
}
|
||||
|
||||
private int DoLinkElements(string text, int index, displayLinkElement vte)
|
||||
{
|
||||
// Find the 'end comment' for this <START], can't count characters
|
||||
@ -1092,7 +1106,7 @@ namespace Volian.Controls.Library
|
||||
// Now get the link part. It can be terminated by a '\v0' or an [END>
|
||||
int endLinkIndxV = text.IndexOf(@"\v0 ", linkIndx);
|
||||
if (endLinkIndxV == -1) endLinkIndxV = text.IndexOf(@"\v0", linkIndx); // at end of string
|
||||
int endLinkIndxE = text.IndexOf(@"[END>", linkIndx);
|
||||
int endLinkIndxE = text.IndexOf(@"[END>", linkIndx);
|
||||
int endLinkIndx = (endLinkIndxV < endLinkIndxE) ? endLinkIndxV : endLinkIndxE;
|
||||
vte.Link = text.Substring(linkIndx + 6, endLinkIndx - linkIndx - 6); // 6 for #Link:
|
||||
|
||||
@ -1111,7 +1125,7 @@ namespace Volian.Controls.Library
|
||||
// Now get the entire text & link. Account for various ending possibilities:
|
||||
// ends with '\v0\'; ends with '\v0 '; ends with '\v0' (end of string);
|
||||
// ends with '[END>' if two in a row - will have <START]
|
||||
int endToken = (endLinkIndx == endLinkIndxE) ? endLinkIndx + 3 : text.IndexOf(@"[END>", endLinkIndx + 3); // get past end of link
|
||||
int endToken = (endLinkIndx == endLinkIndxE)?endLinkIndx+3:text.IndexOf(@"[END>", endLinkIndx + 3); // get past end of link
|
||||
int endComment = text.IndexOf(@"\v0", endToken);
|
||||
|
||||
int rettoken = 0;
|
||||
@ -1131,7 +1145,6 @@ namespace Volian.Controls.Library
|
||||
DisplayTextElementList.Add(vte);
|
||||
return rettoken;
|
||||
}
|
||||
|
||||
private int DoSymbol(string text, int startIndex, int index)
|
||||
{
|
||||
displayTextElement vte = new displayTextElement();
|
||||
|
@ -14,6 +14,7 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
public partial class DisplayTransition : UserControl
|
||||
{
|
||||
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
#region Properties
|
||||
private int _TranFmtIndx = -1; // stores selected transition format
|
||||
private ItemInfo _CurItemFrom; // stores what item transition is 'from'
|
||||
@ -30,6 +31,7 @@ namespace Volian.Controls.Library
|
||||
if (_CurTrans == value && _CurItemFrom == MyRTB.MyItemInfo) return;
|
||||
_CurItemFrom = MyRTB.MyItemInfo;
|
||||
_TranFmtIndx = 0;
|
||||
btnTranSave.Enabled = btnTranCancel.Enabled = true;
|
||||
}
|
||||
else // Modify a transition
|
||||
{
|
||||
@ -409,15 +411,15 @@ namespace Volian.Controls.Library
|
||||
ItemInfo selitm = startitm;
|
||||
if (!nostep)
|
||||
{
|
||||
if (_CurTrans == null)
|
||||
if (_CurTrans == null)
|
||||
{
|
||||
if (!startitm.IsHigh)
|
||||
{
|
||||
if (!startitm.IsHigh)
|
||||
{
|
||||
startitm = startitm.MyParent;
|
||||
selitm = startitm;
|
||||
}
|
||||
startitm = startitm.MyParent;
|
||||
selitm = startitm;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
selitm = null;
|
||||
E_TransUI etm = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI;
|
||||
@ -522,7 +524,7 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
cbTranSects.Enabled = false;
|
||||
}
|
||||
|
||||
|
||||
// check for range - if no range, then range button/label & step tree selections should be
|
||||
// 'cleared/invisble'.
|
||||
btnTranRangeClear.Visible = _DoingRange;
|
||||
@ -767,7 +769,7 @@ namespace Volian.Controls.Library
|
||||
if (selii != null) allowSave = true;
|
||||
}
|
||||
if (!_DoingRange)
|
||||
{
|
||||
{
|
||||
SaveCancelEnabling(allowSave, selii);
|
||||
return;
|
||||
}
|
||||
@ -800,7 +802,6 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveCancelEnabling(bool allowSave, ItemInfo selii)
|
||||
{
|
||||
btnTranSave.Enabled = allowSave;
|
||||
@ -934,9 +935,16 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
// Can I build the text right now?
|
||||
trantxt = TransitionText.GetResolvedText(_MyRTB.MyItemInfo, listBoxTranFmt.SelectedIndex,toItem,rangeItem ?? toItem);
|
||||
_MyRTB.InsertTran(trantxt, linktxt);
|
||||
_MyRTB.Select(_MyRTB.SelectionStart + trantxt.Length + linktxt.Length, 0);
|
||||
_MyRTB.SaveText();
|
||||
int ss = _MyRTB.SelectionStart;// Remember where the link is being added
|
||||
_MyRTB.InsertTran(trantxt, linktxt);// Insert the LINK
|
||||
_MyRTB.SaveText();// Save the text with the LINK - This also moves the cursor to the end of the text
|
||||
// By selecting a starting position within a link, StepRTB (HandleSelectionChange) will select the link
|
||||
_MyRTB.Select(ss + 7 + trantxt.Length, 0);// Try 7 for <Start] and the length of the transition text
|
||||
//Console.WriteLine("'{0}'",_MyRTB.Text.Substring(_MyRTB.SelectionStart,_MyRTB.SelectionLength));
|
||||
string linkText = _MyRTB.Text.Substring(_MyRTB.SelectionStart, _MyRTB.SelectionLength);
|
||||
if(_MyLog.IsInfoEnabled && (linkText.Contains("NewID") || linkText.Contains("CTID")))
|
||||
_MyLog.InfoFormat("ItemID {0}, LinkText '{1}'", _MyRTB.MyItemInfo.ItemID, linkText);
|
||||
_MyRTB.Select(_MyRTB.SelectionStart + _MyRTB.SelectionLength, 0);// Move cursor to end of LINK
|
||||
_MyRTB.Focus();
|
||||
}
|
||||
#endregion
|
||||
|
@ -43,9 +43,9 @@ namespace Volian.Controls.Library
|
||||
case "TransitionRange":
|
||||
_MyParsedLinkType = (ParsedLinkType)Enum.Parse(_MyParsedLinkType.GetType(), m.Groups[2].Value);
|
||||
string[] subst = m.Groups[3].Value.Split(" ".ToCharArray());
|
||||
if (subst[0].IndexOf("CTID") > -1)
|
||||
if (subst[1].IndexOf("CTID") > -1)
|
||||
_MyTransitionInfo = null;
|
||||
else if (subst[0].IndexOf("NewID") > -1)
|
||||
else if (subst[1].IndexOf("NewID") > -1)
|
||||
_MyTransitionInfo = null;
|
||||
else
|
||||
{
|
||||
|
@ -678,9 +678,11 @@ namespace Volian.Controls.Library
|
||||
public void SaveConfig()
|
||||
{
|
||||
if (!_MyItemInfo.MyConfig.IsDirty) return;
|
||||
Item itm = _MyItemInfo.Get();
|
||||
itm.MyContent.Config = _MyItemInfo.MyConfig.ToString();
|
||||
itm.Save();
|
||||
using (Item itm = _MyItemInfo.Get())
|
||||
{
|
||||
itm.MyContent.Config = _MyItemInfo.MyConfig.ToString();
|
||||
itm.Save();
|
||||
}
|
||||
_MyItemInfo.MyConfig.IsDirty = false;
|
||||
}
|
||||
#endregion
|
||||
@ -720,9 +722,7 @@ namespace Volian.Controls.Library
|
||||
_SelectedRtfSB.Append(@"{\f1\fnil\fcharset0 VESymbFix;}}{\colortbl ;\red255\green0\blue0;}");
|
||||
_SelectedRtfSB.Append("\r\n");
|
||||
// use styles to construct rtf commands to insert into next line (where \b, etc is)
|
||||
//_SelectedRtfSB.Append(@"\viewkind4\uc1\pard\sl-240\slmult0" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(this.Font.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
|
||||
_SelectedRtfSB.Append(@"\viewkind4\uc1\sb240\slmult0\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(this.Font.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
|
||||
|
||||
_SelectedRtfSB.Append(@"\viewkind4\uc1\pard\sl-240\slmult0" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(this.Font.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
|
||||
}
|
||||
|
||||
private bool FontIsFixed()
|
||||
@ -1466,29 +1466,29 @@ namespace Volian.Controls.Library
|
||||
IsControlChar = true;
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
//case Keys.X: //ctrl-X
|
||||
//case Keys.C: //ctrl-C
|
||||
// // handle the clipboard copy and cut when a Transition or RO is selected
|
||||
// // For now, we are coping/cutting just the displayed text to the clipboard (like 16-bit VE-PROMS)
|
||||
// Clipboard.SetText(GetSelectedDisplayableText());
|
||||
// e.Handled = true;
|
||||
// e.SuppressKeyPress = true;
|
||||
// if (e.KeyCode == Keys.X) // cut to clipboard - delete the selected text
|
||||
// HandleDeleteKeyWithSelectedText(e, null);
|
||||
// break;
|
||||
//case Keys.V:
|
||||
// IDataObject iData = Clipboard.GetDataObject();
|
||||
// if (!iData.GetDataPresent(DataFormats.Text) && !iData.GetDataPresent(DataFormats.Rtf))
|
||||
// {
|
||||
// MessageBox.Show("Cannot paste, text has special characters or symbols that will not paste correctly.");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Paste();
|
||||
// if (SelectionLength == 0) SelectionFont = MyStyleFont.WindowsFont;
|
||||
// }
|
||||
// e.Handled = true;
|
||||
// return;
|
||||
case Keys.X: //ctrl-X
|
||||
case Keys.C: //ctrl-C
|
||||
// handle the clipboard copy and cut when a Transition or RO is selected
|
||||
// For now, we are coping/cutting just the displayed text to the clipboard (like 16-bit VE-PROMS)
|
||||
Clipboard.SetText(GetSelectedDisplayableText());
|
||||
e.Handled = true;
|
||||
e.SuppressKeyPress = true;
|
||||
if (e.KeyCode == Keys.X) // cut to clipboard - delete the selected text
|
||||
HandleDeleteKeyWithSelectedText(e, null);
|
||||
break;
|
||||
case Keys.V:
|
||||
IDataObject iData = Clipboard.GetDataObject();
|
||||
if (!iData.GetDataPresent(DataFormats.Text) && !iData.GetDataPresent(DataFormats.Rtf))
|
||||
{
|
||||
MessageBox.Show("Cannot paste, text has special characters or symbols that will not paste correctly.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Paste();
|
||||
if (SelectionLength == 0) SelectionFont = MyStyleFont.WindowsFont;
|
||||
}
|
||||
e.Handled = true;
|
||||
return;
|
||||
case Keys.Home:
|
||||
StepRTB_HomeEndPressed(e);
|
||||
e.Handled = true;
|
||||
@ -2346,6 +2346,7 @@ namespace Volian.Controls.Library
|
||||
@"\u9508", // HEX@"\u2524",// Right Tee - 16-bit char: '\xB4'
|
||||
@"\u9532", // HEX@"\u253c" // + Plus - 16-bit char: '\xC5'
|
||||
};
|
||||
|
||||
private int MaxCharacterWidth()
|
||||
{
|
||||
// loop through lines and get the width in characters
|
||||
|
@ -511,7 +511,6 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
ItemInfo ichld = MyItemInfo.Steps[0];
|
||||
btn.Click += new System.EventHandler(btnInsStep_Click);
|
||||
//Volian.Base.Library.vlnStackTrace.ShowStackLocal("btn", 2, 10);
|
||||
btn.Tag = string.Format("{0} {1}", fromtype, ichld.MyContent.Type - 20000);
|
||||
return;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user