This commit is contained in:
@@ -216,6 +216,14 @@ namespace Volian.Controls.Library
|
|||||||
MyFlexGrid.Select(MyFlexGrid.Selection);
|
MyFlexGrid.Select(MyFlexGrid.Selection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private string MyFlexGrid_AdjustPastedText(object sender, VlnFlexGridPasteEventArgs args)
|
||||||
|
{
|
||||||
|
string tmpForLink = args.Text;
|
||||||
|
tmpForLink = Regex.Replace(tmpForLink, @"#Link:ReferencedObject:[0-9]+ ", @"#Link:ReferencedObject:<NewID> ");
|
||||||
|
tmpForLink = Regex.Replace(tmpForLink, @"#Link:Transition:([0-9]+) [0-9]+ ", @"#Link:Transition:$1 <NewID> ");
|
||||||
|
tmpForLink = Regex.Replace(tmpForLink, @"#Link:TransitionRange:([0-9]+) [0-9]+ ", @"#Link:TransitionRange:$1 <NewID> ");
|
||||||
|
return tmpForLink;
|
||||||
|
}
|
||||||
#endregion // Event Handlers
|
#endregion // Event Handlers
|
||||||
#region Constructors
|
#region Constructors
|
||||||
public GridItem()
|
public GridItem()
|
||||||
@@ -258,7 +266,10 @@ namespace Volian.Controls.Library
|
|||||||
this.MyFlexGrid.SelChange += new EventHandler(MyFlexGrid_SelChange);
|
this.MyFlexGrid.SelChange += new EventHandler(MyFlexGrid_SelChange);
|
||||||
this.MyStepRTB.GotFocus += new EventHandler(MyStepRTB_GotFocus);
|
this.MyStepRTB.GotFocus += new EventHandler(MyStepRTB_GotFocus);
|
||||||
this.MyStepRTB.RoInsert += new StepRTBRoEvent(MyStepRTB_RoInsert);
|
this.MyStepRTB.RoInsert += new StepRTBRoEvent(MyStepRTB_RoInsert);
|
||||||
|
this.MyFlexGrid.AdjustPastedText += new VlnFlexGridPasteEvent(MyFlexGrid_AdjustPastedText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MyStepRTB_RoInsert(object sender, StepRTBRoEventArgs args)
|
void MyStepRTB_RoInsert(object sender, StepRTBRoEventArgs args)
|
||||||
{
|
{
|
||||||
if (MyFlexGrid.IsRoTable)
|
if (MyFlexGrid.IsRoTable)
|
||||||
@@ -504,6 +515,15 @@ namespace Volian.Controls.Library
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
public void BasicSave()
|
||||||
|
{
|
||||||
|
using (Item itm = MyItemInfo.Get())
|
||||||
|
{
|
||||||
|
itm.MyContent.MyGrid.Data = MyFlexGrid.GetXMLData();
|
||||||
|
itm.Save();
|
||||||
|
//MyItemInfo.MyContent.MyGrid.ResetContent(itm.MyContent.MyGrid);
|
||||||
|
}
|
||||||
|
}
|
||||||
public override bool CanExpand { get { return false; } set { ;} }
|
public override bool CanExpand { get { return false; } set { ;} }
|
||||||
public override void HandleResize() { ;} // DONE
|
public override void HandleResize() { ;} // DONE
|
||||||
public override void MatchExpanded() { ;} // DONE
|
public override void MatchExpanded() { ;} // DONE
|
||||||
@@ -836,6 +856,133 @@ namespace Volian.Controls.Library
|
|||||||
SaveContents();
|
SaveContents();
|
||||||
}
|
}
|
||||||
public override void SetExpandAndExpander(ItemInfo itemInfo) { CanExpand = false; } // can't expand a table
|
public override void SetExpandAndExpander(ItemInfo itemInfo) { CanExpand = false; } // can't expand a table
|
||||||
|
public void SavePastedCellRoTran()
|
||||||
|
{
|
||||||
|
if (!MyFlexGrid.GetXMLData().Contains("<NewID>")) return;
|
||||||
|
BasicSave();
|
||||||
|
// need to loop thru all pasted cells: for now do all cells.
|
||||||
|
int w = MyFlexGrid.Cols.Count;
|
||||||
|
int h = MyFlexGrid.Rows.Count;
|
||||||
|
int r = 0;
|
||||||
|
int c = 0;
|
||||||
|
String Rtf = null;
|
||||||
|
while (r < h)
|
||||||
|
{
|
||||||
|
CellRange cr = MyFlexGrid.GetMergedRange(r, c);
|
||||||
|
if (cr.r1 == r && cr.c1 == c)
|
||||||
|
{
|
||||||
|
Rtf = (string)MyFlexGrid[r, c];
|
||||||
|
if (Rtf != null)
|
||||||
|
{
|
||||||
|
int startIndx = 0;
|
||||||
|
while (Rtf.IndexOf("<NewID>") > -1)
|
||||||
|
{
|
||||||
|
// first find the new link and determine whether it's RO or transition.
|
||||||
|
int indx = Rtf.IndexOf(@"#Link:ReferencedObject:<NewID>", startIndx);
|
||||||
|
if (indx > 0)
|
||||||
|
{
|
||||||
|
// only look in the substring limited by the first occurrance of [END>. If there is more
|
||||||
|
// than one, don't get multiple links in the string.
|
||||||
|
int endindx = Rtf.IndexOf(@"END>", indx) + 4;
|
||||||
|
Match mro = Regex.Match(Rtf.Substring(indx, endindx - indx), @"([A-Za-z]*):(.*)\[END>");
|
||||||
|
string linkstr = mro.Groups[2].Value;
|
||||||
|
string[] roparts = linkstr.Split(" ".ToCharArray());
|
||||||
|
ContentRoUsage rousg = null;
|
||||||
|
int oldid = -1;
|
||||||
|
using (Item itm = MyItemInfo.Get())
|
||||||
|
{
|
||||||
|
using (RODb rodb = RODb.GetJustRoDb(Convert.ToInt32(roparts[2])))
|
||||||
|
{
|
||||||
|
rousg = itm.MyContent.ContentRoUsages.Add(roparts[1], rodb);
|
||||||
|
}
|
||||||
|
oldid = rousg.ROUsageID;
|
||||||
|
int newid = Rtf.IndexOf("<NewID>", indx);
|
||||||
|
Rtf = Rtf.Remove(newid, 7);
|
||||||
|
Rtf = Rtf.Insert(newid, string.Format("<CROUSGID={0}>", rousg.ROUsageID));
|
||||||
|
itm.Save();
|
||||||
|
Rtf = Rtf.Replace(string.Format("<CROUSGID={0}>", oldid), rousg.ROUsageID.ToString());
|
||||||
|
itm.Save();
|
||||||
|
MyItemInfo.MyContent.RefreshContentRoUsages();
|
||||||
|
}
|
||||||
|
startIndx = endindx;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Match mt = Regex.Match(Rtf, @"#Link:Transition:([0-9]+) <NewID> ");
|
||||||
|
if (mt.Length <= 0) mt = Regex.Match(Rtf, @"#Link:TransitionRange:([0-9]+) <NewID> ");
|
||||||
|
if (mt.Length > 0)
|
||||||
|
{
|
||||||
|
int endtindx = Rtf.IndexOf("END>", mt.Index) + 4;
|
||||||
|
indx = mt.Index + 6; // get past '#Link:"
|
||||||
|
Match m = Regex.Match(Rtf.Substring(indx, endtindx - indx), @"([A-Za-z]*):(.*)\[END>");
|
||||||
|
bool isSingleTran = true;
|
||||||
|
if (Rtf.Substring(indx, 16).IndexOf("TransitionRange") >= 0) isSingleTran = false;
|
||||||
|
string linkstr = m.Groups[2].Value;
|
||||||
|
string[] tparts = linkstr.Split(" ".ToCharArray());
|
||||||
|
int type = System.Convert.ToInt32(tparts[0]);
|
||||||
|
int tr1 = System.Convert.ToInt32(tparts[2]); // tparts[2] is token for tranid
|
||||||
|
int tr2 = tr1;
|
||||||
|
if (tparts.Length > 3)
|
||||||
|
tr2 = System.Convert.ToInt32(tparts[3]); // tparts[3] is token for rangeid
|
||||||
|
bool dispose1 = false;
|
||||||
|
Item itm1 = null;
|
||||||
|
bool dispose2 = false;
|
||||||
|
Item itm2 = null;
|
||||||
|
using (Item itm = MyItemInfo.Get())
|
||||||
|
{
|
||||||
|
if (itm.ItemID == tr1)
|
||||||
|
itm1 = itm; // a transition that points to itself should not dispose
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dispose1 = true;
|
||||||
|
itm1 = Item.Get(tr1);
|
||||||
|
}
|
||||||
|
if (itm.ItemID == tr2)
|
||||||
|
itm2 = itm; // a transition that points to itself should not dispose
|
||||||
|
else if (tr1 == tr2)
|
||||||
|
itm2 = itm1; // if both destinations are the same only dispose the first one
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dispose2 = true;
|
||||||
|
itm2 = Item.Get(tr2);
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
|
||||||
|
if (isSingleTran)
|
||||||
|
ct.IsRange = 0;
|
||||||
|
else if (tr1 != tr2)
|
||||||
|
ct.IsRange = 1;
|
||||||
|
else
|
||||||
|
ct.IsRange = 2;
|
||||||
|
|
||||||
|
int oldidt = ct.TransitionID;
|
||||||
|
int newidt = Rtf.IndexOf("<NewID>", indx);
|
||||||
|
Rtf = Rtf.Remove(newidt, 7);
|
||||||
|
Rtf = Rtf.Insert(newidt, string.Format("<CTID={0}>", ct.TransitionID));
|
||||||
|
//Rtf = Rtf.Replace("<NewID>", string.Format("<CTID={0}>", ct.TransitionID));
|
||||||
|
itm.Save();
|
||||||
|
Rtf = Rtf.Replace(string.Format("<CTID={0}>", oldidt), ct.TransitionID.ToString());
|
||||||
|
itm.Save();
|
||||||
|
MyItemInfo.MyContent.RefreshContentTransitions();
|
||||||
|
}
|
||||||
|
if (dispose2) itm2.Dispose();
|
||||||
|
if (dispose1) itm1.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MyFlexGrid[r, c] = Rtf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c = c + 1;
|
||||||
|
if (c == w)
|
||||||
|
{
|
||||||
|
c = 0;
|
||||||
|
r = r + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
public override void SaveCurrentAndContents()
|
public override void SaveCurrentAndContents()
|
||||||
{
|
{
|
||||||
if (MyFlexGrid.Row >= 0 && MyFlexGrid.Col >= 0 && MyStepRTB.EditMode) // Only if a Cell is Selected
|
if (MyFlexGrid.Row >= 0 && MyFlexGrid.Col >= 0 && MyStepRTB.EditMode) // Only if a Cell is Selected
|
||||||
|
Reference in New Issue
Block a user