using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using VEPROMS.CSLA.Library; namespace Volian.Controls.Library { public partial class StepTabRibbon : UserControl { #region Properties private StepItem _MyStepItem; public StepItem MyStepItem { get { return _MyStepItem; } set { _MyStepItem = value; if (value != null) { MyStepRTB = value.MyStepRTB; } } } private int _MyLastFormatID = -1; private StepRTB _MyStepRTB; public StepRTB MyStepRTB { get { return _MyStepRTB; } set { _MyStepRTB = value; if (value != null) { //Console.WriteLine(string.Format("StepTabRibbon: In set of MyStepRTB, Selected Text = {0}", MyStepRTB.SelectedText)); _ContextMenuBar.SetContextMenuEx(_MyStepRTB, btnCMRtfEdit); //_MyStepRTB.KeyDown += new KeyEventHandler(MyStepRTB_SelectionChanged); _MyStepRTB.KeyUp += new KeyEventHandler(MyStepRTB_SelectionChanged); _MyStepRTB.ModeChange += new StepRTBModeChangeEvent(_MyStepRTB_ModeChange); _MyStepRTB.MouseUp += new MouseEventHandler(MyStepRTB_SelectionChanged); _MyStepRTB.Leave += new EventHandler(MyStepRTB_Leave); _MyStepRTB.LinkChanged += new StepRTBLinkEvent(_MyStepRTB_LinkChanged); // Add symbols into the tab ribbon based on format selection. For now, only add symbols once // because all symbols are same!!! If we start defining different symbols in different formats // this will have to change, i.e. remove the second part of 'if' statement. if (_MyStepRTB.MyStepItem.MyItemInfo.ActiveFormat.FormatID != _MyLastFormatID && _MyLastFormatID == -1) { // Add symbols to the tabribbon & also to the context menu getting info from the format file... // Note that the ButtonItems must be used in order to place the buttons on a gallery (cannot // use buttonx or dotnet/windows/button). However, you cannot change the font on ButtonItems so // the ribbon MUST use the Arial Unicode MS Font for this to work!!!! FormatInfo fmt = _MyStepRTB.MyStepItem.MyItemInfo.ActiveFormat; SymbolList sl = fmt.PlantFormat.FormatData.SymbolList; if (sl == null || sl.Count <= 0) { MessageBox.Show("No symbols are available, check with administrator"); return; } foreach (Symbol sym in sl) { DevComponents.DotNetBar.ButtonItem btn = new DevComponents.DotNetBar.ButtonItem(); btn.Text = string.Format("{0}", (char)sym.Unicode); // to name button use unicode rather than desc, desc may have spaces or odd chars btn.Name = "btn" + sym.Unicode.ToString(); btn.Tooltip = sym.Desc; btn.Tag = string.Format(@"{0}", sym.Unicode); btn.FontBold = true; btn.Click += new System.EventHandler(btnSym_Click); galleryContainerSymbols.SubItems.Add(btn); DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem(); btnCM.Text = string.Format("{0}", (char)sym.Unicode); // to name button use unicode rather than desc, desc may have spaces or odd chars btnCM.Name = "btnCM" + sym.Unicode.ToString(); btnCM.Tooltip = sym.Desc; btnCM.Tag = string.Format(@"{0}", sym.Unicode); btnCM.FontBold = true; btnCM.Click += new System.EventHandler(btnSym_Click); galleryContainerSymbolsCM.SubItems.Add(btnCM); } } SetButtonAndMenuEnabling(); SetStepButtonAndMenuEnabling(); _MyLastFormatID = _MyStepRTB.MyStepItem.MyItemInfo.ActiveFormat.FormatID; } } } void _MyStepRTB_ModeChange(object sender, StepRTBModeChangeEventArgs args) { SetButtonAndMenuEnabling(); } #endregion #region Constructor public StepTabRibbon() { InitializeComponent(); _RibbonControl.SizeChanged += new EventHandler(_RibbonControl_SizeChanged); } void _RibbonControl_SizeChanged(object sender, EventArgs e) { this.Size = _RibbonControl.Size; } public bool Expanded { get { return _RibbonControl.Expanded; } set { _RibbonControl.Expanded = value; } } #endregion #region Events void _MyStepRTB_LinkChanged(object sender, StepPanelLinkEventArgs args) { // do all Transition and ReferencedObject menu items/buttons based on whether a 'link is selected' and the link type. btnCMGoTo.Enabled = btnGoTo.Enabled = _MyStepRTB.IsSelectionLinked(_MyStepRTB.SelectionStart, _MyStepRTB.SelectionLength); if (btnCMGoTo.Enabled == true && _MyStepRTB.MyLinkText != null) // must have some link test, use it to set edit of transition or ro... { btnCMEditTran.Enabled = _MyStepRTB.MyLinkText.IndexOf("Transition") > -1; // selected link must be a transition btnCMEditRO.Enabled = _MyStepRTB.MyLinkText.IndexOf("ReferencedObject") > -1; // selected link must be ro } else { btnCMEditTran.Enabled = false; btnCMEditRO.Enabled = false; } } void MyStepRTB_Leave(object sender, EventArgs e) { _MyStepRTB.MouseUp -= new MouseEventHandler(MyStepRTB_SelectionChanged); _MyStepRTB.Leave -= new EventHandler(MyStepRTB_Leave); _MyStepRTB.LinkChanged -= new StepRTBLinkEvent(_MyStepRTB_LinkChanged); } void MyStepRTB_SelectionChanged(object sender, EventArgs e) { //Console.WriteLine(string.Format("StepTabRibbon: In MyStepRTB_SelectionChanged, Selected Text = {0}",MyStepRTB.SelectedText)); SetButtonAndMenuEnabling(); } void btnInsStep_Click(object sender, EventArgs e) { DevComponents.DotNetBar.ButtonItem b = (DevComponents.DotNetBar.ButtonItem)sender; char [] sep = {' '}; string[] insdata = b.Tag.ToString().Split(sep); if (insdata.Length != 2) return; int fromtype = Convert.ToInt32(insdata[0]); int contenttype = Convert.ToInt32(insdata[1]) + 20000; // if from type == 0, we've inserted a hls, do a after from current HLS // if not at HLS, go up parents until find it. if (fromtype == 0) { StepItem hlsStepItem = _MyStepItem; while (!hlsStepItem.MyItemInfo.IsHigh) hlsStepItem = hlsStepItem.ActiveParent; hlsStepItem.AddSiblingAfter((int ?)contenttype); } else { _MyStepItem.AddChild((E_FromType)fromtype, contenttype); } } private void btnInsBefore_Click(object sender, EventArgs e) { _MyStepItem.AddSiblingBefore(); } private void btnInsAfter_Click(object sender, EventArgs e) { _MyStepItem.AddSiblingAfter(); } /// /// Using style for step type, enable/disable formatting buttons /// private void SetButtonForStyle() { btnBold.Enabled = btnCMBold.Enabled = (!((_MyStepRTB.MyStyleFont.Style & E_Style.Bold) == E_Style.Bold || (_MyStepRTB.MyStyleFont.Style & E_Style.MmBold) == E_Style.MmBold)); btnUnderline.Enabled = btnCMUnderline.Enabled = (!((_MyStepRTB.MyStyleFont.Style & E_Style.Underline) == E_Style.Underline)); btnItalics.Enabled = btnCMItalics.Enabled = (!((_MyStepRTB.MyStyleFont.Style & E_Style.Italics) == E_Style.Italics)); } private void SetButtonMenuEnabledDisabled(bool setting) { btnCMBold.Enabled = btnBold.Enabled = setting; btnCMItalics.Enabled = btnItalics.Enabled = setting; btnCMUnderline.Enabled = btnUnderline.Enabled = setting; btnCMSubscript.Enabled = btnSubscript.Enabled = setting; btnCMSuperscript.Enabled = btnSuperscript.Enabled = setting; btnCMCut.Enabled = btnCMCopy.Enabled = btnCut.Enabled = btnCopy.Enabled = setting; btnCMUndo.Enabled = btnUndo.Enabled = setting; btnCMRedo.Enabled = btnRedo.Enabled = setting; btnCMPaste.Enabled = btnPaste.Enabled = setting; btnInsPgBrk.Enabled = setting; btnChgTyp.Enabled = setting; btnInsHLS.Enabled = btnInsCaut.Enabled = btnInsNote.Enabled = btnInsRNO.Enabled = btnInsFig.Enabled = btnInsTable.Enabled = btnInsSubstep.Enabled = btnInsBefore.Enabled = btnInsAfter.Enabled = setting; btnInsTrans.Enabled = btnCMTransition.Enabled = btnInsRO.Enabled = btnCMRO.Enabled = setting; btnCMChgCase.Enabled = btnChgCase.Enabled = setting; btnCMHardSpace.Enabled = btnInsHrdSpc.Enabled = setting; btnCMSymbol.Enabled = btnSymbols.Enabled = setting; btnIndent.Enabled = setting; } private void SetButtonAndMenuEnabling() { if (_MyStepRTB == null) return; DocVersionInfo dvi = MyStepItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo; if (dvi == null) return; if (dvi.VersionType > 127 || MyStepItem.MyStepPanel.PanelViewEditMode == E_ViewMode.View) { SetButtonMenuEnabledDisabled(false); } else { SetButtonMenuEnabledDisabled(true); if (_MyStepRTB.SelectionFont != null) { btnCMBold.Checked = btnBold.Checked = RTBAPI.IsBold(_MyStepRTB); btnCMItalics.Checked = btnItalics.Checked = RTBAPI.IsItalic(_MyStepRTB); btnCMUnderline.Checked = btnUnderline.Checked = RTBAPI.IsUnderline(_MyStepRTB); btnCMSubscript.Checked = btnSubscript.Checked = RTBAPI.IsSubScript(_MyStepRTB); btnCMSuperscript.Checked = btnSuperscript.Checked = RTBAPI.IsSuperScript(_MyStepRTB); } SetButtonForStyle(); btnCMCut.Enabled = btnCMCopy.Enabled = btnCut.Enabled = btnCopy.Enabled = _MyStepRTB.SelectionLength > 0; btnCMUndo.Enabled = btnUndo.Enabled = _MyStepRTB.CanUndo; btnCMRedo.Enabled = btnRedo.Enabled = _MyStepRTB.CanRedo; // for paste, see if there is clipboard data, & if so, of a type we can use. IDataObject iData = Clipboard.GetDataObject(); btnCMPaste.Enabled = btnPaste.Enabled = (iData.GetDataPresent(DataFormats.Text) || iData.GetDataPresent(DataFormats.Rtf)); } // do all Transition and ReferencedObject menu items/buttons based on whether a 'link is selected' and the link type. btnCMGoTo.Enabled = btnGoTo.Enabled = _MyStepRTB.IsSelectionLinked(_MyStepRTB.SelectionStart, _MyStepRTB.SelectionLength); //(_MyStepRTB.MyLinkText != null); if (btnCMGoTo.Enabled == true && _MyStepRTB.MyLinkText != null) // must have some link test, use it to set edit of transition or ro... { btnCMEditTran.Enabled = _MyStepRTB.MyLinkText.IndexOf("Transition")>-1; // selected link must be a transition btnCMEditRO.Enabled = _MyStepRTB.MyLinkText.IndexOf("ReferencedObject") > -1; // selected link must be ro } else { btnCMEditTran.Enabled = false; btnCMEditRO.Enabled = false; } } private void SetStepButtonAndMenuEnabling() { // see if manual page break - only available on HLS if (_MyStepItem.MyItemInfo.IsHigh) { StepConfig cfg = _MyStepItem.MyItemInfo.MyConfig as StepConfig; btnInsPgBrk.Checked = cfg == null ? false : cfg.Step_ManualPagebreak; } btnInsPgBrk.Enabled = _MyStepItem.MyItemInfo.IsHigh; // if on procedure or section 'change type' & 'insert' buttons should be disabled. if (_MyStepItem.MyItemInfo.IsProcedure || _MyStepItem.MyItemInfo.IsSection) { btnChgTyp.Enabled = false; btnInsHLS.Enabled = btnInsCaut.Enabled = btnInsNote.Enabled = btnInsRNO.Enabled = btnInsFig.Enabled = btnInsTable.Enabled = btnInsSubstep.Enabled = btnInsBefore.Enabled = btnInsAfter.Enabled = false; // if on a procedure or section title, don't allow for insert of ROs or Transitions: // disable buttons. Info panels for ROs and Transitions are made invisible in frmVEPROMS.cs btnInsTrans.Enabled = btnCMTransition.Enabled = btnInsRO.Enabled = btnCMRO.Enabled = false; return; } btnChgTyp.Enabled = true; // set up insert buttons based on format E_AccStep? actable = 0; StepData sd = _MyStepItem.MyItemInfo.FormatStepData; actable = sd.StepEditData.AcTable; if (actable == null) actable = 0; btnInsHLS.Enabled = true; btnInsCaut.Enabled = (actable & E_AccStep.AddingCaution)>0; btnInsNote.Enabled = (actable & E_AccStep.AddingNote) > 0; btnInsRNO.Enabled = (actable & E_AccStep.AddingRNO) > 0; btnInsFig.Enabled = (actable & E_AccStep.AddingTable) > 0; btnInsTable.Enabled = (actable & E_AccStep.AddingTable) > 0; btnInsSubstep.Enabled = (actable & E_AccStep.AddingSub) > 0; btnInsBefore.Enabled = (actable & E_AccStep.AddingPrev) > 0; btnInsAfter.Enabled = (actable & E_AccStep.AddingNext) > 0; btnInsHLS.SubItems.Clear(); btnInsCaut.SubItems.Clear(); btnInsNote.SubItems.Clear(); btnInsRNO.SubItems.Clear(); btnInsFig.SubItems.Clear(); btnInsTable.SubItems.Clear(); btnInsSubstep.SubItems.Clear(); // if (rno is enabled, set the tag: if (btnInsRNO.Enabled) btnInsRNO.Tag = string.Format("{0} {1}", (int)E_FromTypes.RNOs, MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.GetIndexFromType("RNOType")); // add subitems depending on whether parent type is enabled: if (btnInsHLS.Enabled) GalleryForSubTypes(_MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList.HLS, sd, btnInsHLS, 0); if (btnInsCaut.Enabled) GalleryForSubTypes(_MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList.Caution, sd, btnInsCaut, (int)E_FromType.Caution); if (btnInsNote.Enabled) GalleryForSubTypes(_MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList.Note, sd, btnInsNote, (int)E_FromType.Note); if (btnInsFig.Enabled) GalleryForSubTypes(_MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList.Fig, sd, btnInsFig, (int)E_FromType.Table); if (btnInsTable.Enabled) GalleryForSubTypes(_MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList.Table, sd, btnInsTable, (int)E_FromType.Table); if (btnInsSubstep.Enabled) GalleryForSubTypes(_MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList.Substep, sd, btnInsSubstep, (int)E_FromType.Step); btnInsTrans.Enabled = btnCMTransition.Enabled = btnInsRO.Enabled = btnCMRO.Enabled = true; } /// /// set up a gallery of step types whose parent are defined by input StepData. Can be below /// more than one level, for example. Substep, EquipmentList, EquipmentWBlank - both equipment /// lists would be put in gallery /// /// StepData: find subtypes related to this /// StepData: this should be selected button /// DevComponents.DotNetBar.ButtonItem: if items in the gallery, add gallery to this button private void GalleryForSubTypes(StepData sdc, StepData selType, DevComponents.DotNetBar.ButtonItem btn, int fromtype) { int cursel = -1; // The first argument (boolean) in StepGetLevelTypes provides the option to get a complete list of step types // regardless of whether in the AER or RNO column (set to true). For all types, get both except for figures // and tables. bool getall = !(btn.Name == "btnInsFig" || (btn.Name == "btnInsTable")); List sdl = _MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepGetLevelTypes(getall, sdc, ref cursel, selType.Type, _MyStepItem.MyItemInfo); if (sdl != null && sdl.Count > 0) { foreach (StepDataRetval sdr in sdl) { bool addit = true; StepData sd = _MyStepItem.MyItemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[sdr.Index]; int hlsSubType = -1; // if on hls, use this to set default on substep menu to first child if (_MyStepItem.MyItemInfo.IsHigh && _MyStepItem.MyItemInfo.Steps != null) { hlsSubType = (int)_MyStepItem.MyItemInfo.Steps[0].MyContent.Type - 20000; } // unfortunately, there are some special cases to be handled. // if high level step, don't put the rno button on // if caution don't add note button (the StepGetLevelTypes method returns cautions/notes together if (btn.Name == "btnInsHLS" && sd.Type == "RNOType") addit = false; if (btn.Name == "btnInsCaut" && sd.Type.Length>=4 && sd.Type.Substring(0, 4) == "Note") addit = false; if (btn.Name == "btnInsNote" && sd.Type.Length>=7 && sd.Type.Substring(0, 7) == "Caution") addit = false; if (addit) { DevComponents.DotNetBar.ButtonItem bi = new DevComponents.DotNetBar.ButtonItem("btn" + sd.Type, sd.Type); bi.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; bi.Text = sdr.Name; bi.Tag = string.Format("{0} {1}", fromtype, sdr.Index); // index of type to insert it when button is clicked bi.Checked = (sd.Type == selType.Type); if (_MyStepItem.MyItemInfo.IsHigh && hlsSubType != -1 && sdr.Index == hlsSubType) bi.Checked = true; bi.Click += new System.EventHandler(btnInsStep_Click); btn.SubItems.Add(bi); } } // if only 1, be sure event exists on button to insert item & if more than 1 remove event because // we want the drop down to appear. btn.Click -= new System.EventHandler(btnInsStep_Click); if (btn.SubItems.Count == 1) { btn.SubItems.Clear(); btn.Tag = string.Format("{0} {1}", fromtype, sdc.Index); btn.Click += new System.EventHandler(btnInsStep_Click); } //else // btn.Click -= new System.EventHandler(btnInsStep_Click); } } #endregion #region Insert Tab private void btnSym_Click(object sender, EventArgs e) { DevComponents.DotNetBar.ButtonItem b = (DevComponents.DotNetBar.ButtonItem)sender; _MyStepRTB.InsertSymbol(Convert.ToInt32(b.Tag)); } private void btnInsPgBrk_Click(object sender, EventArgs e) { if (_MyStepItem.MyItemInfo.IsProcedure || _MyStepItem.MyItemInfo.IsSection) return; // toggle manual page break StepConfig cfg = _MyStepItem.MyItemInfo.MyConfig as StepConfig; cfg.Step_ManualPagebreak = !cfg.Step_ManualPagebreak; btnInsPgBrk.Checked = cfg.Step_ManualPagebreak; } private void btnIndent_Click(object sender, EventArgs e) { _MyStepRTB.InsertIndent(); } private void btnCMIndent_Click(object sender, EventArgs e) { _MyStepRTB.InsertIndent(); } #endregion #region Home Tab private void btnPaste_Click(object sender, EventArgs e) { IDataObject myDO = Clipboard.GetDataObject(); if (myDO.GetDataPresent(DataFormats.Rtf)) _MyStepRTB.SelectedRtf = myDO.GetData(DataFormats.Rtf).ToString(); else if (myDO.GetDataPresent(DataFormats.Text)) _MyStepRTB.SelectedText = myDO.GetData(DataFormats.Text).ToString(); if (_MyStepRTB.SelectionLength == 0) _MyStepRTB.SelectionFont = _MyStepRTB.MyStyleFont.WindowsFont; } private void btnCut_Click(object sender, EventArgs e) { Clipboard.Clear(); DataObject myDO = new DataObject("Rich Text Format", _MyStepRTB.SelectedRtf); Clipboard.SetDataObject(myDO); _MyStepRTB.SelectedText = ""; } private void btnCopy_Click(object sender, EventArgs e) { Clipboard.Clear(); DataObject myDO = new DataObject("Rich Text Format", _MyStepRTB.SelectedRtf); Clipboard.SetDataObject(myDO); } private void btnBold_Click(object sender, EventArgs e) { RTBAPI.ToggleBold(!RTBAPI.IsBold(_MyStepRTB), _MyStepRTB, _MyStepRTB.SelectionLength == 0 ? RTBAPI.RTBSelection.SCF_DEFAULT : RTBAPI.RTBSelection.SCF_SELECTION); btnCMBold.Checked = btnBold.Checked = RTBAPI.IsBold(_MyStepRTB); } private void btnItalics_Click(object sender, EventArgs e) { RTBAPI.ToggleItalic(!RTBAPI.IsItalic(_MyStepRTB), _MyStepRTB, _MyStepRTB.SelectionLength == 0 ? RTBAPI.RTBSelection.SCF_DEFAULT : RTBAPI.RTBSelection.SCF_SELECTION); btnCMItalics.Checked = btnItalics.Checked = RTBAPI.IsItalic(_MyStepRTB); } private void btnUnderline_Click(object sender, EventArgs e) { RTBAPI.ToggleUnderline(!RTBAPI.IsUnderline(_MyStepRTB), _MyStepRTB, _MyStepRTB.SelectionLength == 0 ? RTBAPI.RTBSelection.SCF_DEFAULT : RTBAPI.RTBSelection.SCF_SELECTION); btnCMUnderline.Checked = btnUnderline.Checked = RTBAPI.IsUnderline(_MyStepRTB); } private void btnSuperscript_Click(object sender, EventArgs e) { RTBAPI.ToggleSuperscript(!RTBAPI.IsSuperScript(_MyStepRTB), _MyStepRTB, _MyStepRTB.SelectionLength == 0 ? RTBAPI.RTBSelection.SCF_DEFAULT : RTBAPI.RTBSelection.SCF_SELECTION); btnCMSuperscript.Checked = btnSuperscript.Checked = RTBAPI.IsSuperScript(_MyStepRTB); } private void btnSubscript_Click(object sender, EventArgs e) { RTBAPI.ToggleSubscript(!RTBAPI.IsSubScript(_MyStepRTB), _MyStepRTB, _MyStepRTB.SelectionLength == 0 ? RTBAPI.RTBSelection.SCF_DEFAULT : RTBAPI.RTBSelection.SCF_SELECTION); btnCMSubscript.Checked = btnSubscript.Checked = RTBAPI.IsSubScript(_MyStepRTB); } private void btnUppercase_Click(object sender, EventArgs e) { _MyStepRTB.SetSelectedCase('U'); } private void btnLowercase_Click(object sender, EventArgs e) { _MyStepRTB.SetSelectedCase('l'); } private void btnTitleCase_Click(object sender, EventArgs e) { _MyStepRTB.SetSelectedCase('T'); } private void btnInsTrans_Click(object sender, EventArgs e) { // see if user is positioned 'on' a transition within the rtb, if so do a modify, otherwise, // insert transition. StepTabPanel tmp = Parent as StepTabPanel; tmp.MyDisplayTabControl.OnLinkModifyTran(this, new StepPanelLinkEventArgs(_MyStepItem, MyStepRTB.MyLinkText)); } private void btnInsHrdSpc_Click(object sender, EventArgs e) { _MyStepRTB.InsertSymbol(@"\u160?"); } private void btnInsRO_Click(object sender, EventArgs e) { // see if user is positioned 'on' an ReferencedObject within the rtb, if so do a modify, otherwise, // insert transition. StepTabPanel tmp = Parent as StepTabPanel; tmp.MyDisplayTabControl.OnLinkModifyRO(this, new StepPanelLinkEventArgs(_MyStepItem, MyStepRTB.MyLinkText)); } private void btnRedo_Click(object sender, EventArgs e) { _MyStepRTB.Redo(); btnCMUndo.Enabled = btnUndo.Enabled = _MyStepRTB.CanUndo; btnCMRedo.Enabled = btnRedo.Enabled = _MyStepRTB.CanRedo; } private void btnUndo_Click(object sender, EventArgs e) { _MyStepRTB.Undo(); if (_MyStepRTB.WasXDelete && (_MyStepRTB.Text[_MyStepRTB.SelectionStart - 1] == 'X')) { _MyStepRTB.Undo(); _MyStepRTB.WasXDelete = false; // only allow one of these - not best case, but at least can get // one undo _MyStepRTB.ClearUndo(); } btnCMRedo.Enabled = btnRedo.Enabled = _MyStepRTB.CanRedo; btnCMUndo.Enabled = btnUndo.Enabled = _MyStepRTB.CanUndo; } private void btnGoTo_Click(object sender, EventArgs e) { // if on a transition, go to the selected transition 'to'. If on // a referenced object, bring up ReferencedObject Editor (for now, just put up a message box. if (_MyStepRTB.MyLinkText.IndexOf("Transition") > -1) { _MyStepItem.MyStepPanel.OnLinkClicked(sender, new StepPanelLinkEventArgs(_MyStepItem, _MyStepRTB.MyLinkText)); } else { _MyStepItem.MyStepPanel.OnLinkClicked(sender, new StepPanelLinkEventArgs(_MyStepItem, _MyStepRTB.MyLinkText)); // for now bring up ro window. Later bring up ro editor! } } private void btnChgTyp_Click(object sender, EventArgs e) { } #endregion #region RHM debug #if DEBUG // The following code generates an XML output for the selected item for print testing. private void btnPageBreak_Click(object sender, EventArgs e) { // This is here temporarily to get a node and all of it's children for print testing. OutputAllChildren(MyStepItem); } private void OutputAllChildren(StepItem myStepItem) { OutputAllChildren(myStepItem.MyBeforeStepItems); OutputStepInfo(myStepItem); OutputAllChildren(myStepItem.MyAfterStepItems); OutputAllChildren(myStepItem.MyRNOStepItems); } private void OutputStepInfo(StepItem myStepItem) { Label lbl = myStepItem.MyLabel; if (lbl.Text.Trim() != "") Console.WriteLine("{4}", ToInches(myStepItem.Left + lbl.Left), ToInches(myStepItem.Top + lbl.Top), lbl.Font.FontFamily.Name,lbl.Font.SizeInPoints,lbl.Text); StepRTB rtb = myStepItem.MyStepRTB; Console.WriteLine("{3}", ToInches(myStepItem.Left + rtb.Left), ToInches(myStepItem.Top + rtb.Top), ToInches(rtb.Width), myStepItem.MyItemInfo.MyContent.Text); // ToInches(myStepItem.Left + rtb.Left), ToInches(myStepItem.Top + rtb.Top), ToInches(rtb.Width), rtb.Rtf); } private float ToInches(int val) { return Convert.ToSingle(val)/96F; } private void OutputAllChildren(List list) { if(list != null) foreach (StepItem itm in list) OutputAllChildren(itm); } private void btnToggleEditView_Click(object sender, EventArgs e) { MyStepRTB.ToggleEditView(); } #endif #endregion } }