This commit is contained in:
parent
6e00716c47
commit
be6a6eb47e
34
PROMS/Volian.Controls.Library/AlphabeticalNumbering.cs
Normal file
34
PROMS/Volian.Controls.Library/AlphabeticalNumbering.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
class AlphabeticalNumbering
|
||||
{
|
||||
//private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private static string Letter(int number)
|
||||
{
|
||||
char c = (char)(number + 64);
|
||||
return c.ToString();
|
||||
}
|
||||
public static string Convert(int number)
|
||||
{
|
||||
string retval=string.Empty;
|
||||
if (number > 26) retval += Letter((number-1) / 26);
|
||||
retval += Letter(1 + ((number-1) % 26));
|
||||
return retval;
|
||||
}
|
||||
//private static int[] _TestLetters = new int[] {
|
||||
// 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,
|
||||
// 52,53,78,79,104,105
|
||||
// };
|
||||
//public static void ShowLetters()
|
||||
//{
|
||||
// for (int i = 0; i < _TestLetters.Length; i++)
|
||||
// {
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", _TestLetters[i], Convert(_TestLetters[i]));
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
1132
PROMS/Volian.Controls.Library/DisplayItem.cs
Normal file
1132
PROMS/Volian.Controls.Library/DisplayItem.cs
Normal file
File diff suppressed because it is too large
Load Diff
115
PROMS/Volian.Controls.Library/DisplayItem.designer.cs
generated
Normal file
115
PROMS/Volian.Controls.Library/DisplayItem.designer.cs
generated
Normal file
@ -0,0 +1,115 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class DisplayItem
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.lblTab = new System.Windows.Forms.Label();
|
||||
this._DisplayRTB = new Volian.Controls.Library.DisplayRTB(this.components);
|
||||
this.vlnExp = new Volian.Controls.Library.vlnExpander();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// lblTab
|
||||
//
|
||||
this.lblTab.BackColor = System.Drawing.Color.Transparent;
|
||||
this.lblTab.Location = new System.Drawing.Point(20, 0);
|
||||
this.lblTab.Name = "lblTab";
|
||||
this.lblTab.Size = new System.Drawing.Size(61, 23);
|
||||
this.lblTab.TabIndex = 3;
|
||||
this.lblTab.Visible = false;
|
||||
this.lblTab.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lblTab_MouseDown);
|
||||
//
|
||||
// _DisplayRTB
|
||||
//
|
||||
this._DisplayRTB.AdjustSize = new System.Drawing.Size(0, 0);
|
||||
this._DisplayRTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this._DisplayRTB.BackColor = System.Drawing.Color.Linen;
|
||||
this._DisplayRTB.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this._DisplayRTB.ContentsRectangle = new System.Drawing.Rectangle(0, 0, 0, 0);
|
||||
this._DisplayRTB.EpMode = VEPROMS.CSLA.Library.E_EditPrintMode.EDIT;
|
||||
this._DisplayRTB.Font = new System.Drawing.Font("Prestige Elite Tall", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2)));
|
||||
this._DisplayRTB.Location = new System.Drawing.Point(80, 0);
|
||||
this._DisplayRTB.MyClassName = "RichEdit20W";
|
||||
this._DisplayRTB.MyItem = null;
|
||||
this._DisplayRTB.Name = "_DisplayRTB";
|
||||
this._DisplayRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
|
||||
this._DisplayRTB.Size = new System.Drawing.Size(234, 20);
|
||||
this._DisplayRTB.TabIndex = 2;
|
||||
this._DisplayRTB.Text = "";
|
||||
this._DisplayRTB.VwMode = VEPROMS.CSLA.Library.E_ViewMode.EDIT;
|
||||
this._DisplayRTB.Resize += new System.EventHandler(this.veRichTextBoxText_Resize);
|
||||
this._DisplayRTB.Enter += new System.EventHandler(this.veRichTextBoxText_Enter);
|
||||
this._DisplayRTB.LinkGoTo += new Volian.Controls.Library.DisplayRTBLinkEvent(this._DisplayRTB_LinkGoTo);
|
||||
this._DisplayRTB.Leave += new System.EventHandler(this.veRichTextBoxText_Leave);
|
||||
this._DisplayRTB.HeightChanged += new Volian.Controls.Library.DisplayRTBEvent(this.veRichTextBoxText_HeightChanged);
|
||||
//
|
||||
// vlnExp
|
||||
//
|
||||
this.vlnExp.BackColor = System.Drawing.Color.Transparent;
|
||||
this.vlnExp.BorderColor = System.Drawing.Color.Silver;
|
||||
this.vlnExp.Color1 = System.Drawing.Color.Aquamarine;
|
||||
this.vlnExp.Color2 = System.Drawing.Color.Violet;
|
||||
this.vlnExp.Expanded = false;
|
||||
this.vlnExp.ForeColor = System.Drawing.SystemColors.ButtonHighlight;
|
||||
this.vlnExp.GradientAngle = 45;
|
||||
this.vlnExp.Location = new System.Drawing.Point(3, 3);
|
||||
this.vlnExp.Name = "vlnExp";
|
||||
this.vlnExp.PenWidth = 0;
|
||||
this.vlnExp.Size = new System.Drawing.Size(14, 14);
|
||||
this.vlnExp.Style = Volian.Controls.Library.ExpanderStyle.Round;
|
||||
this.vlnExp.TabIndex = 0;
|
||||
this.vlnExp.Trans1 = 128;
|
||||
this.vlnExp.Trans2 = 128;
|
||||
this.vlnExp.WidthFactor = 7;
|
||||
this.vlnExp.BeforeExpand += new Volian.Controls.Library.vlnExpanderEvent(this.vlnExp_BeforeExpand);
|
||||
this.vlnExp.BeforeColapse += new Volian.Controls.Library.vlnExpanderEvent(this.vlnExp_BeforeColapse);
|
||||
this.vlnExp.AttachmentClick += new vlnExpanderEvent(vlnExp_AttachmentClick);
|
||||
//
|
||||
// DisplayItem
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.SystemColors.ButtonFace;
|
||||
this.Controls.Add(this.lblTab);
|
||||
this.Controls.Add(this._DisplayRTB);
|
||||
this.Controls.Add(this.vlnExp);
|
||||
this.Name = "DisplayItem";
|
||||
this.Size = new System.Drawing.Size(314, 20);
|
||||
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lblTab_MouseDown);
|
||||
this.Move += new System.EventHandler(this.vlnCSLARTB_Move);
|
||||
this.Resize += new System.EventHandler(this.vlnCSLARTB_Resize);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private vlnExpander vlnExp;
|
||||
private DisplayRTB _DisplayRTB;
|
||||
private System.Windows.Forms.Label lblTab;
|
||||
}
|
||||
}
|
120
PROMS/Volian.Controls.Library/DisplayItem.resx
Normal file
120
PROMS/Volian.Controls.Library/DisplayItem.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
590
PROMS/Volian.Controls.Library/DisplayPanel.cs
Normal file
590
PROMS/Volian.Controls.Library/DisplayPanel.cs
Normal file
@ -0,0 +1,590 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using VEPROMS.CSLA.Library;
|
||||
using System.Drawing;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public partial class DisplayPanel : Panel
|
||||
{
|
||||
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
#region Events
|
||||
public event DisplayPanelEvent ItemClick;
|
||||
internal void OnItemClick(object sender, DisplayPanelEventArgs args)
|
||||
{
|
||||
if (ItemClick != null) ItemClick(sender, args);
|
||||
}
|
||||
public event DisplayPanelLinkEvent LinkClicked;
|
||||
internal void OnLinkClicked(object sender, DisplayLinkEventArgs args)
|
||||
{
|
||||
if (LinkClicked != null) LinkClicked(sender, args);
|
||||
else MessageBox.Show(args.LinkInfo.LinkText, "Unhandled Link Click", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
public event DisplayPanelAttachmentEvent AttachmentClicked;
|
||||
internal void OnAttachmentClicked(object sender, DisplayPanelAttachmentEventArgs args)
|
||||
{
|
||||
if (AttachmentClicked != null) AttachmentClicked(sender, args);
|
||||
else MessageBox.Show(args.MyDisplayItem.MyItem.MyContent.MyEntry.MyDocument.DocumentTitle, "Unhandled Attachment Click", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
#endregion
|
||||
#region Constructors
|
||||
public DisplayPanel()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Paint += new PaintEventHandler(DisplayPanel_Paint);
|
||||
this.DoubleClick += new EventHandler(DisplayPanel_DoubleClick);
|
||||
this.AutoScroll = true;
|
||||
}
|
||||
|
||||
void DisplayPanel_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
ShowLines = !ShowLines;
|
||||
Refresh();
|
||||
}
|
||||
private void VerticalLine(Graphics g, int x)
|
||||
{
|
||||
Pen bluePen = new Pen(Color.CornflowerBlue,1);
|
||||
g.DrawLine(bluePen, x, 0, x, this.Height);
|
||||
}
|
||||
void DisplayPanel_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
if (ShowLines)
|
||||
{
|
||||
//int fifth = Height / 5;
|
||||
//Rectangle r1 = new Rectangle(0, 0, Width, Height - fifth);
|
||||
////Brush b = new System.Drawing.Drawing2D.LinearGradientBrush(r1, Color.FromArgb(128, 0, 32), Color.FromArgb(96, 0, 16), 90);
|
||||
//Brush b = new System.Drawing.Drawing2D.LinearGradientBrush(r1, Color.FromArgb(255,128, 0, 32), Color.FromArgb(255,96, 0, 16),System.Drawing.Drawing2D.LinearGradientMode.Vertical);
|
||||
//e.Graphics.FillRectangle(b, r1);
|
||||
//r1 = new Rectangle(0, Height - fifth, Width, fifth);
|
||||
//b = new System.Drawing.Drawing2D.LinearGradientBrush(r1, Color.FromArgb(255,96, 0, 16), Color.FromArgb(255,128, 0, 32), 90);
|
||||
//e.Graphics.FillRectangle(b, r1);
|
||||
//VerticalLine(e.Graphics, 60);
|
||||
//VerticalLine(e.Graphics, 102);
|
||||
//VerticalLine(e.Graphics, 415);
|
||||
}
|
||||
}
|
||||
public DisplayPanel(IContainer container)
|
||||
{
|
||||
container.Add(this);
|
||||
InitializeComponent();
|
||||
this.Paint += new PaintEventHandler(DisplayPanel_Paint);
|
||||
this.BackColorChanged += new EventHandler(DisplayPanel_BackColorChanged);
|
||||
this.DoubleClick += new EventHandler(DisplayPanel_DoubleClick);
|
||||
this.AutoScroll = true;
|
||||
}
|
||||
void DisplayPanel_BackColorChanged(object sender, EventArgs e)
|
||||
{
|
||||
// Walk through controls & set colors
|
||||
InactiveColor = PanelColor = BackColor;
|
||||
foreach (Control ctrl in Controls)
|
||||
{
|
||||
if (ctrl.GetType().Name == "vlnCSLARTB")
|
||||
{
|
||||
DisplayItem rtb = (DisplayItem)ctrl;
|
||||
rtb.BackColor = BackColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Business
|
||||
private StepSectionLayoutData _Layout; // Volian Property Snippet
|
||||
private ItemInfo _MyItem;
|
||||
public ItemInfo MyItem
|
||||
{
|
||||
get { return _MyItem; }
|
||||
set
|
||||
{
|
||||
//// TIMING: vlnCSLARTB.TimeIt("pMyItem Start");
|
||||
_MyItem = value;
|
||||
if(value != null)
|
||||
_Layout = _MyItem.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData;
|
||||
//// TIMING: vlnCSLARTB.TimeIt("pMyItem Layout");
|
||||
//this.Layout += new LayoutEventHandler(DisplayPanel_Layout);
|
||||
//this.Scroll += new ScrollEventHandler(DisplayPanel_Scroll);
|
||||
//// TIMING: vlnCSLARTB.TimeIt("pMyItem Scroll");
|
||||
Controls.Clear();
|
||||
ItemLookup = new Dictionary<int, DisplayItem>();
|
||||
//// TIMING: vlnCSLARTB.TimeIt("pMyItem Clear");
|
||||
//SuspendLayout();
|
||||
DisplayItem vlnRTF = new DisplayItem(_MyItem, this, null, ChildRelation.None, false);
|
||||
//ResumeLayout();
|
||||
//// TIMING: vlnCSLARTB.TimeIt("pMyItem End");
|
||||
}
|
||||
}
|
||||
private Dictionary<int, DisplayItem> _ItemLookup;
|
||||
public Dictionary<int, DisplayItem> ItemLookup
|
||||
{
|
||||
get { return _ItemLookup; }
|
||||
set { _ItemLookup = value; }
|
||||
}
|
||||
public void ExpandAsNeeded(ItemInfo item)
|
||||
{
|
||||
int id = item.ItemID;
|
||||
if (ItemLookup.ContainsKey(id))
|
||||
{
|
||||
ItemLookup[id].AutoExpand();
|
||||
}
|
||||
else
|
||||
{
|
||||
ExpandAsNeeded((ItemInfo)item.ActiveParent);
|
||||
if (!ItemLookup.ContainsKey(id)) // Expand Parent if not expanded
|
||||
{
|
||||
int parentId = ((ItemInfo)item.ActiveParent).ItemID;
|
||||
ItemLookup[parentId].AutoExpand();
|
||||
}
|
||||
}
|
||||
}
|
||||
public void ItemSelect(ItemInfo item)
|
||||
{
|
||||
int id = item.ItemID;
|
||||
ExpandAsNeeded(item);
|
||||
ItemLookup[id].ItemSelect();
|
||||
}
|
||||
private int _Scrolling = 0; // Volian Property Snippet
|
||||
public int Scrolling
|
||||
{
|
||||
get { return _Scrolling; }
|
||||
set { _Scrolling = value; }
|
||||
}
|
||||
private DisplayPanelSettings _Settings; // Volian Property Snippet
|
||||
public DisplayPanelSettings Settings
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_Settings == null) _Settings = new DisplayPanelSettings(this);
|
||||
return _Settings;
|
||||
}
|
||||
set { _Settings = value;}
|
||||
}
|
||||
//void DisplayPanel_Layout(object sender, LayoutEventArgs e)
|
||||
// {
|
||||
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("layout {0} {1} {2} {3}", e.AffectedComponent.GetType().Name,e.AffectedControl.Name,e.AffectedProperty, sender.GetType().Name);
|
||||
// }
|
||||
//void DisplayPanel_Scroll(object sender, ScrollEventArgs e)
|
||||
//{
|
||||
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("scroll {0} {1} {2} {3}", e.OldValue, e.NewValue, e.ScrollOrientation,sender.GetType().Name);
|
||||
// Scrolling = false;
|
||||
//}
|
||||
//public void AdjustOutOfRangeControls(int yAdjust)
|
||||
//{
|
||||
// bool scrolling = Scrolling;
|
||||
// Scrolling = true;
|
||||
// foreach (Control control in Controls)
|
||||
// if (control.GetType().Name == "vlnCSLARTB" && control.Top > Height)
|
||||
// control.Top += yAdjust;
|
||||
// Scrolling = scrolling;
|
||||
//}
|
||||
private int _MaxRNO = -1; // TODO: Need to calculate MaxRNO on a section basis rather than for a panel
|
||||
public int MaxRNO
|
||||
{
|
||||
get
|
||||
{
|
||||
if(_MaxRNO == -1)
|
||||
{
|
||||
int pmode = Convert.ToInt32(_Layout.PMode) - 1;
|
||||
_MaxRNO = Convert.ToInt32( _Layout.MaxRNOTable.Split(",".ToCharArray())[pmode]);
|
||||
}
|
||||
return _MaxRNO;
|
||||
}
|
||||
}
|
||||
private Font _MyFont =null; // Volian Property Snippet
|
||||
public Font MyFont
|
||||
{
|
||||
get { return _MyFont; }
|
||||
set { _ProcFont = _SectFont = _StepFont = _MyFont = value; }
|
||||
}
|
||||
private Font _ProcFont =new Font("Arial",12,FontStyle.Bold); // Volian Property Snippet
|
||||
public Font ProcFont
|
||||
{
|
||||
get { return _ProcFont; }
|
||||
set { _ProcFont = value; }
|
||||
}
|
||||
private Font _SectFont = new Font("Arial", 10, FontStyle.Bold); // Volian Property Snippet
|
||||
public Font SectFont
|
||||
{
|
||||
get { return _SectFont; }
|
||||
set { _SectFont = value; }
|
||||
}
|
||||
private Font _StepFont = new Font("Arial", 10); // Volian Property Snippet
|
||||
public Font StepFont
|
||||
{
|
||||
get { return _StepFont; }
|
||||
set { _StepFont = value; }
|
||||
}
|
||||
private Color _ActiveColor =Color.SkyBlue; // Volian Property Snippet
|
||||
public Color ActiveColor
|
||||
{
|
||||
get { return _ActiveColor; }
|
||||
set { _ActiveColor = value; }
|
||||
}
|
||||
private Color _InactiveColor =Color.Linen; // Volian Property Snippet
|
||||
public Color InactiveColor
|
||||
{
|
||||
get { return _InactiveColor; }
|
||||
set { _InactiveColor = value; }
|
||||
}
|
||||
private Color _TabColor =Color.Beige; // Volian Property Snippet
|
||||
public Color TabColor
|
||||
{
|
||||
get { return _TabColor; }
|
||||
set { _TabColor = value; }
|
||||
}
|
||||
private Color _PanelColor =Color.LightGray; // Volian Property Snippet
|
||||
public Color PanelColor
|
||||
{
|
||||
get { return _PanelColor; }
|
||||
set { _PanelColor = value; }
|
||||
}
|
||||
private bool _ShowLines =true; // Volian Property Snippet
|
||||
public bool ShowLines
|
||||
{
|
||||
get { return _ShowLines; }
|
||||
set { _ShowLines = value; }
|
||||
}
|
||||
#endregion
|
||||
#region DisplayConversions
|
||||
private Graphics _MyGraphics = null;
|
||||
public Graphics MyGraphics
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_MyGraphics == null)
|
||||
_MyGraphics = CreateGraphics();
|
||||
return _MyGraphics;
|
||||
}
|
||||
}
|
||||
private int _DPI =0; // Volian Property Snippet
|
||||
public int DPI
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_DPI == 0)
|
||||
_DPI = Convert.ToInt32(MyGraphics.DpiX);
|
||||
return _DPI;
|
||||
}
|
||||
}
|
||||
public int ToDisplay(int value)
|
||||
{
|
||||
//return (DPI * value) / 864;
|
||||
return (DPI * value) / 72;
|
||||
}
|
||||
public int ToDisplay(int? value)
|
||||
{
|
||||
return ToDisplay((int)value);
|
||||
}
|
||||
public int ToDisplay(string value)
|
||||
{
|
||||
return ToDisplay(Convert.ToInt32(value));
|
||||
}
|
||||
public int ToDisplay(string value,int i)
|
||||
{
|
||||
string s = value.Split(",".ToCharArray())[i];
|
||||
return ToDisplay(s);
|
||||
}
|
||||
#endregion
|
||||
#region Debug Methods
|
||||
public void ListControls()
|
||||
{
|
||||
// Walk through the controls and find the next control for each
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("'Item','Next'");
|
||||
foreach (Control control in Controls)
|
||||
if (control.GetType().Name == "vlnCSLARTB")
|
||||
{
|
||||
DisplayItem rtb = (DisplayItem)control;
|
||||
DisplayItem nxt = rtb.NextItem;
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", rtb.MyID, nxt == null ? 0 : nxt.MyID);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
}
|
||||
[TypeConverter(typeof(ExpandableObjectConverter))]
|
||||
public partial class DisplayPanelSettings
|
||||
{
|
||||
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
public DisplayPanelSettings(DisplayPanel panel)
|
||||
{
|
||||
_Panel = panel;
|
||||
}
|
||||
public DisplayPanelSettings()
|
||||
{
|
||||
}
|
||||
private DisplayPanel _Panel;
|
||||
[Browsable(false)]
|
||||
public DisplayPanel Panel
|
||||
{
|
||||
get { return _Panel; }
|
||||
set { _Panel = value; }
|
||||
}
|
||||
private float _CircleXOffset = -4;
|
||||
[Category("Circle")]
|
||||
[DisplayName("Circle Horizontal Offset")]
|
||||
public float CircleXOffset
|
||||
{
|
||||
get { return _CircleXOffset; }
|
||||
set { _CircleXOffset = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private float _CircleYOffset = -13;
|
||||
[Category("Circle")]
|
||||
[DisplayName("Circle Vertical Offset")]
|
||||
public float CircleYOffset
|
||||
{
|
||||
get { return _CircleYOffset; }
|
||||
set { _CircleYOffset = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private Font _CircleFont = new Font("Arial Unicode MS", 23); // Volian Property Snippet
|
||||
[Category("Circle")]
|
||||
[DisplayName("Circle Font")]
|
||||
public Font CircleFont
|
||||
{
|
||||
get { return _CircleFont; }
|
||||
set { _CircleFont = value; if(_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private Color _CircleColor = Color.Black;
|
||||
[Category("Circle")]
|
||||
[DisplayName("Circle Color")]
|
||||
public Color CircleColor
|
||||
{
|
||||
get { return _CircleColor; }
|
||||
set { _CircleColor = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private int _CircleDiameter = 25;
|
||||
[Category("Circle")]
|
||||
[DisplayName("Circle Diameter")]
|
||||
public int CircleDiameter
|
||||
{
|
||||
get { return _CircleDiameter; }
|
||||
set { _CircleDiameter = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private int _CircleWeight = 2;
|
||||
[Category("Circle")]
|
||||
[DisplayName("Circle Pen Weight")]
|
||||
public int CircleWeight
|
||||
{
|
||||
get { return _CircleWeight; }
|
||||
set { _CircleWeight = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private float _NumberLocationX = 20F;
|
||||
[Category("Number")]
|
||||
[DisplayName("Number Location X")]
|
||||
public float NumberLocationX
|
||||
{
|
||||
get { return _NumberLocationX; }
|
||||
set { _NumberLocationX = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private float _NumberLocationY = 4;
|
||||
[Category("Number")]
|
||||
[DisplayName("Number Location Y")]
|
||||
public float NumberLocationY
|
||||
{
|
||||
get { return _NumberLocationY; }
|
||||
set { _NumberLocationY = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private SizeF _NumberSize = new SizeF(200F, 23F);
|
||||
[Category("Number")]
|
||||
[DisplayName("Number Size")]
|
||||
public SizeF NumberSize
|
||||
{
|
||||
get { return _NumberSize; }
|
||||
set { _NumberSize = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private int _TableWidthAdjust = 4;
|
||||
[Category("Table")]
|
||||
[DisplayName("Table Width Adjust")]
|
||||
public int TableWidthAdjust
|
||||
{
|
||||
get { return _TableWidthAdjust; }
|
||||
set { _TableWidthAdjust = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private int _CheckOffWeight = 1;
|
||||
[Category("CheckOff")]
|
||||
[DisplayName("CheckOff Pen Weight")]
|
||||
public int CheckOffWeight
|
||||
{
|
||||
get { return _CheckOffWeight; }
|
||||
set { _CheckOffWeight = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private Color _CheckOffColor = Color.Black;
|
||||
[Category("CheckOff")]
|
||||
[DisplayName("CheckOff Color")]
|
||||
public Color CheckOffColor
|
||||
{
|
||||
get { return _CheckOffColor; }
|
||||
set { _CheckOffColor = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private int _CheckOffSize =12;
|
||||
[Category("CheckOff")]
|
||||
[DisplayName("CheckOff Size")]
|
||||
public int CheckOffSize
|
||||
{
|
||||
get { return _CheckOffSize; }
|
||||
set { _CheckOffSize = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private int _CheckOffX =0;
|
||||
[Category("CheckOff")]
|
||||
[DisplayName("CheckOff X")]
|
||||
public int CheckOffX
|
||||
{
|
||||
get { return _CheckOffX; }
|
||||
set { _CheckOffX = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private int _CheckOffY =5; // Volian Property Snippet
|
||||
[Category("CheckOff")]
|
||||
[DisplayName("CheckOff Y")]
|
||||
public int CheckOffY
|
||||
{
|
||||
get { return _CheckOffY; }
|
||||
set { _CheckOffY = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
|
||||
private int _ChangeBarWeight = 1;
|
||||
[Category("ChangeBar")]
|
||||
[DisplayName("ChangeBar Pen Weight")]
|
||||
public int ChangeBarWeight
|
||||
{
|
||||
get { return _ChangeBarWeight; }
|
||||
set { _ChangeBarWeight = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
private Color _ChangeBarColor = Color.Black;
|
||||
[Category("ChangeBar")]
|
||||
[DisplayName("ChangeBar Color")]
|
||||
public Color ChangeBarColor
|
||||
{
|
||||
get { return _ChangeBarColor; }
|
||||
set { _ChangeBarColor = value; if (_Panel != null) _Panel.Refresh(); }
|
||||
}
|
||||
}
|
||||
public partial class DisplayPanelEventArgs
|
||||
{
|
||||
private DisplayItem _MyVlnCSLARTB; // Volian Property Snippet
|
||||
public DisplayItem MyVlnCSLARTB
|
||||
{
|
||||
get { return _MyVlnCSLARTB; }
|
||||
set { _MyVlnCSLARTB = value; }
|
||||
}
|
||||
private MouseEventArgs _MyMouseEventArgs; // Volian Property Snippet
|
||||
public MouseEventArgs MyMouseEventArgs
|
||||
{
|
||||
get { return _MyMouseEventArgs; }
|
||||
set { _MyMouseEventArgs = value; }
|
||||
}
|
||||
|
||||
public DisplayPanelEventArgs(DisplayItem myVlnCSLARTB, MouseEventArgs myMouseEventArgs)
|
||||
{
|
||||
_MyVlnCSLARTB = myVlnCSLARTB;
|
||||
_MyMouseEventArgs = myMouseEventArgs;
|
||||
}
|
||||
}
|
||||
public partial class DisplayPanelAttachmentEventArgs
|
||||
{
|
||||
private DisplayItem _MyDisplayItem; // Volian Property Snippet
|
||||
public DisplayItem MyDisplayItem
|
||||
{
|
||||
get { return _MyDisplayItem; }
|
||||
set { _MyDisplayItem = value; }
|
||||
}
|
||||
public DisplayPanelAttachmentEventArgs(DisplayItem myDisplayItem)
|
||||
{
|
||||
_MyDisplayItem = myDisplayItem;
|
||||
}
|
||||
}
|
||||
public partial class DisplayLinkEventArgs : EventArgs
|
||||
{
|
||||
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private DisplayItem _LinkedRTB; // Volian Property Snippet
|
||||
public DisplayItem LinkedRTB
|
||||
{
|
||||
get { return _LinkedRTB; }
|
||||
set { _LinkedRTB = value; }
|
||||
}
|
||||
private LinkClickedEventArgs _LinkInfo; // Volian Property Snippet
|
||||
public LinkClickedEventArgs LinkInfo
|
||||
{
|
||||
get { return _LinkInfo; }
|
||||
set { _LinkInfo = value; }
|
||||
}
|
||||
public DisplayLinkEventArgs(DisplayItem linkedRTB, LinkClickedEventArgs linkInfo)
|
||||
{
|
||||
LinkedRTB = linkedRTB;
|
||||
LinkInfo = linkInfo;
|
||||
//if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("\r\n LinkInfo '{0}'\r\n", linkInfo.LinkText);
|
||||
}
|
||||
private void ParseLink()
|
||||
{
|
||||
if (_Type == ParsedLinkType.NotParsed)
|
||||
{
|
||||
// First parse the string
|
||||
Match m = Regex.Match(_LinkInfo.LinkText, ".*[#]Link:([A-Za-z]*):(.*)");
|
||||
switch (m.Groups[1].Value)
|
||||
{
|
||||
case "ReferencedObject":
|
||||
_Type = ParsedLinkType.ReferencedObject;
|
||||
_RoUsageid = m.Groups[2].Value;
|
||||
_Roid = m.Groups[3].Value;
|
||||
break;
|
||||
case "Transition":
|
||||
case "TransitionRange":
|
||||
_Type = (ParsedLinkType)Enum.Parse(_Type.GetType(), m.Groups[1].Value);
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Link String - '{0}'", m.Groups[2].Value);
|
||||
int transitionID = Convert.ToInt32(m.Groups[2].Value.Split(" ".ToCharArray())[1]);
|
||||
foreach (TransitionInfo ti in _LinkedRTB.MyItem.MyContent.ContentTransitions)
|
||||
{
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Transition ID = '{0}'", ti.TransitionID);
|
||||
if (ti.TransitionID == transitionID)
|
||||
_MyTransition = ti;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
private TransitionInfo _MyTransition = null; // Volian Property Snippet
|
||||
public TransitionInfo MyTransition
|
||||
{
|
||||
get { ParseLink(); return _MyTransition; }
|
||||
}
|
||||
public ItemInfo ItemTo
|
||||
{
|
||||
get { ParseLink(); return _MyTransition.MyItemToID; }
|
||||
}
|
||||
public ItemInfo ItemRange
|
||||
{
|
||||
get { ParseLink(); return _MyTransition.MyItemRangeID; }
|
||||
}
|
||||
private string _Roid = null; // TODO: need to return Referenced Object rather than just roid
|
||||
public string Roid
|
||||
{
|
||||
get { ParseLink(); return _Roid; }
|
||||
}
|
||||
private string _RoUsageid = null; // TODO: need to return Referenced Object rather than just roid
|
||||
public string RoUsageid
|
||||
{
|
||||
get { ParseLink(); return _RoUsageid; }
|
||||
}
|
||||
private ParsedLinkType _Type = ParsedLinkType.NotParsed; // Volian Property Snippet
|
||||
public ParsedLinkType Type
|
||||
{
|
||||
get { ParseLink(); return _Type; }
|
||||
}
|
||||
|
||||
}
|
||||
#region enums
|
||||
public enum ParsedLinkType : int
|
||||
{
|
||||
NotParsed = 0,
|
||||
Transition = 1,
|
||||
TransitionRange = 2,
|
||||
ReferencedObject = 3
|
||||
}
|
||||
#endregion
|
||||
public delegate void DisplayPanelEvent(object sender, DisplayPanelEventArgs args);
|
||||
public delegate void DisplayPanelLinkEvent(object sender, DisplayLinkEventArgs args);
|
||||
public delegate void DisplayPanelAttachmentEvent(object sender, DisplayPanelAttachmentEventArgs args);
|
||||
public delegate void DisplayRTBLinkEvent(object sender, LinkClickedEventArgs e);
|
||||
}
|
36
PROMS/Volian.Controls.Library/DisplayPanel.designer.cs
generated
Normal file
36
PROMS/Volian.Controls.Library/DisplayPanel.designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class DisplayPanel
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
665
PROMS/Volian.Controls.Library/DisplayRTB.cs
Normal file
665
PROMS/Volian.Controls.Library/DisplayRTB.cs
Normal file
@ -0,0 +1,665 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using VEPROMS.CSLA.Library;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public delegate void DisplayRTBEvent(object sender, EventArgs args);
|
||||
public partial class DisplayRTB : RichTextBox
|
||||
{
|
||||
#region Properties and Variables
|
||||
// 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 IContainer _Container = null;
|
||||
private string _MyClassName=string.Empty;
|
||||
public string MyClassName
|
||||
{
|
||||
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 { _epMode = value; }
|
||||
}
|
||||
private E_ViewMode _vwMode = E_ViewMode.EDIT;
|
||||
public E_ViewMode VwMode
|
||||
{
|
||||
get { return _vwMode; }
|
||||
set { _vwMode = value; }
|
||||
}
|
||||
private ItemInfo _MyItem;
|
||||
public ItemInfo MyItem
|
||||
{
|
||||
get { return _MyItem; }
|
||||
set
|
||||
{
|
||||
_MyItem = value;
|
||||
if (value != null)
|
||||
{
|
||||
DisplayText vlntxt = new DisplayText(_MyItem, EpMode, VwMode);
|
||||
_origVlnText = vlntxt;
|
||||
// TODO: RHM20071115 this.Font = _origVlnText.TextFont.WindowsFont;
|
||||
AddRtfText(vlntxt);
|
||||
ReadOnly = !(EpMode == E_EditPrintMode.EDIT && VwMode == E_ViewMode.EDIT);
|
||||
RTBAPI.SetLineSpacing(this, RTBAPI.ParaSpacing.PFS_EXACT);
|
||||
}
|
||||
}
|
||||
}
|
||||
//public EnterKeyHandler EnterKeyPressed;
|
||||
//protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||
//{
|
||||
// const int WM_KEYDOWN = 0x100;
|
||||
// const int WM_SYSKEYDOWN = 0x104;
|
||||
// if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
|
||||
// {
|
||||
// switch (keyData)
|
||||
// {
|
||||
// case Keys.Control | Keys.V:
|
||||
// // check for valid data to be inserted:
|
||||
// return base.ProcessCmdKey(ref msg, keyData);
|
||||
// default:
|
||||
// return base.ProcessCmdKey(ref msg, keyData);
|
||||
// }
|
||||
// }
|
||||
// return base.ProcessCmdKey(ref msg, keyData);
|
||||
//}
|
||||
private Point ScrollPos
|
||||
{
|
||||
get { return RTBAPI.GetScrollLocation(this); }
|
||||
set { RTBAPI.SetScrollLocation(this, value); }
|
||||
}
|
||||
private Rectangle _ContentsRectangle;
|
||||
public Rectangle ContentsRectangle
|
||||
{
|
||||
get { return _ContentsRectangle; }
|
||||
set
|
||||
{
|
||||
_ContentsRectangle = value;
|
||||
AdjustSizeForContents();
|
||||
}
|
||||
}
|
||||
public Size ContentsSize
|
||||
{
|
||||
get { return _ContentsRectangle.Size; }
|
||||
}
|
||||
private Size _AdjustSize; // if 0,0 puts text right next to bottom of box.
|
||||
public Size AdjustSize
|
||||
{
|
||||
get { return _AdjustSize; }
|
||||
set
|
||||
{
|
||||
_AdjustSize = value;
|
||||
AdjustSizeForContents();
|
||||
}
|
||||
}
|
||||
public System.Windows.Forms.AutoScaleMode AutoScaleMode;
|
||||
private DisplayText _origVlnText;
|
||||
private RichTextBox _rtbTemp = new RichTextBox();
|
||||
private string _eLinkText;
|
||||
#endregion
|
||||
#region HeightSupport
|
||||
public event DisplayRTBEvent HeightChanged;
|
||||
private void OnHeightChanged(object sender, EventArgs args)
|
||||
{
|
||||
if (HeightChanged != null) HeightChanged(sender, args);
|
||||
}
|
||||
private void AdjustSizeForContents()
|
||||
{
|
||||
//Console.WriteLine("Size {0} Client {1} New {2}", Size, ClientRectangle, ContentsRectangle);
|
||||
// I want the client size to match the new rectangle.
|
||||
// First I need to determine the offset
|
||||
Size offset = Size - ClientSize;
|
||||
this.Size = ContentsSize + offset + AdjustSize;
|
||||
OnHeightChanged(this, new EventArgs());
|
||||
}
|
||||
#endregion
|
||||
#region Constructors
|
||||
/// <summary>
|
||||
/// vlnRichTextBox constructor:
|
||||
/// Creates a RichTextBox with extra support for veproms editing/printing.
|
||||
/// Arguments are:
|
||||
/// string txtbxname - name to give box (is this needed)
|
||||
/// ItemInfo itm - Item for which box is created
|
||||
/// int x,y - starting position for box
|
||||
/// int iwid - width of box
|
||||
/// int tbindx - tab index
|
||||
/// E_EditPrintMode ep_mode - edit or print.
|
||||
/// E_ViewMode vw_mode - view or edit.
|
||||
/// </summary>
|
||||
public DisplayRTB(string txtbxname, ItemInfo itemInfo, int x, int y, int iwid, int tbindx, E_EditPrintMode epMode, E_ViewMode vwMode)
|
||||
{
|
||||
try
|
||||
{
|
||||
EpMode = epMode;
|
||||
VwMode = vwMode;
|
||||
DisplayText vlntxt = new DisplayText(itemInfo, epMode, vwMode);
|
||||
_origVlnText = vlntxt;
|
||||
InitializeComponent();
|
||||
Location = new System.Drawing.Point(x, y);
|
||||
Name = txtbxname;
|
||||
DetectUrls = false;
|
||||
// TODO: RHM20071115 Font = _origVlnText.TextFont.WindowsFont;
|
||||
ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
|
||||
Width = iwid;
|
||||
ContentsResized += new ContentsResizedEventHandler(vlnRichTextBox_ContentsResized);
|
||||
AddRtfText(vlntxt);
|
||||
//ContextMenuStrip = contextMenuStrip;
|
||||
ReadOnly = !(epMode == E_EditPrintMode.EDIT && vwMode == E_ViewMode.EDIT);
|
||||
RTBAPI.SetLineSpacing(this, RTBAPI.ParaSpacing.PFS_EXACT);
|
||||
this.LinkClicked += new LinkClickedEventHandler(onLinkClicked);
|
||||
this.KeyPress += new KeyPressEventHandler(onKeyPress);
|
||||
this.KeyDown += new KeyEventHandler(onKeyDown);
|
||||
this.Leave += new EventHandler(DisplayRTB_Leave);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Error in creating vlnRichTextBox: " + ex.Message);
|
||||
}
|
||||
}
|
||||
public DisplayRTB()
|
||||
{
|
||||
InitializeComponent();
|
||||
SetUp();
|
||||
}
|
||||
public DisplayRTB(IContainer container)
|
||||
{
|
||||
container.Add(this);
|
||||
InitializeComponent();
|
||||
_Container = container;
|
||||
SetUp();
|
||||
}
|
||||
private void SetUp()
|
||||
{
|
||||
BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.DetectUrls = true;
|
||||
ContextMenuStrip = contextMenuStrip;
|
||||
ContentsResized += new ContentsResizedEventHandler(vlnRichTextBox_ContentsResized);
|
||||
this.LinkClicked += new LinkClickedEventHandler(onLinkClicked);
|
||||
this.KeyPress += new KeyPressEventHandler(onKeyPress);
|
||||
this.KeyDown += new KeyEventHandler(onKeyDown);
|
||||
this.Leave += new EventHandler(DisplayRTB_Leave);
|
||||
}
|
||||
#endregion
|
||||
#region ApplicationSupport
|
||||
public void ToggleViewEdit()
|
||||
{
|
||||
ItemInfo tmp = MyItem;
|
||||
MyItem = null;
|
||||
ReadOnly = !ReadOnly;
|
||||
EpMode = ReadOnly?E_EditPrintMode.PRINT:E_EditPrintMode.EDIT;
|
||||
VwMode = ReadOnly?E_ViewMode.VIEW:E_ViewMode.EDIT;
|
||||
Clear();
|
||||
MyItem = tmp;
|
||||
}
|
||||
public void InsertRO(string value, string link)
|
||||
{
|
||||
AddRtfLink(value, link);
|
||||
}
|
||||
public void InsertTran(string value, string link)
|
||||
{
|
||||
AddRtfLink(value, link);
|
||||
}
|
||||
public void InsertSymbol(string symbol)
|
||||
{
|
||||
AddSymbol(symbol);
|
||||
}
|
||||
#endregion
|
||||
#region SaveData
|
||||
public void Save()
|
||||
{
|
||||
// TODO: RHM20071115 bool success = _origVlnText.Save((RichTextBox) this);
|
||||
}
|
||||
#endregion
|
||||
#region AddRtfText
|
||||
private void AddRtfText(DisplayText vlntext)
|
||||
{
|
||||
foreach (displayTextElement vte in vlntext.DisplayTextElementList)
|
||||
{
|
||||
if (vte.Type == E_TextElementType.TEXT)
|
||||
AddRtf(vte);
|
||||
else if (vte.Type == E_TextElementType.SYMBOL)
|
||||
AddSymbol(vte);
|
||||
else
|
||||
AddRtfLink((displayLinkElement)vte);
|
||||
}
|
||||
}
|
||||
private void AddRtf(displayTextElement vte)
|
||||
{
|
||||
SelectedRtf = @"{\rtf1{\fonttbl{\f0\fcharset2 "+this.Font.FontFamily.Name+@";}}\f0\fs" + this.Font.SizeInPoints*2 + " " + vte.Text + @"}}";
|
||||
}
|
||||
private void AddRtf(string str)
|
||||
{
|
||||
SelectedRtf = @"{\rtf1{\fonttbl{\f0\fcharset2 " + this.Font.FontFamily.Name + @";}}\f0\fs" + this.Font.SizeInPoints * 2 + " " + str + @"}}";
|
||||
}
|
||||
private void AddSymbol(displayTextElement vte)
|
||||
{
|
||||
SelectedRtf = @"{\rtf1{\fonttbl{\f0\fcharset0 Arial Unicode MS;}}\f0\fs" + this.Font.SizeInPoints * 2 + " " + vte.Text + @"}";
|
||||
}
|
||||
private void AddSymbol(string str)
|
||||
{
|
||||
SelectedRtf = @"{\rtf1{\fonttbl{\f0\fcharset0 Arial Unicode MS;}}\f0\fs" + this.Font.SizeInPoints * 2 + " " + /* ConvertUnicodeChar(str) */ str + @"}";
|
||||
}
|
||||
private void AddRtfLink(displayLinkElement vte)
|
||||
{
|
||||
if (CreateParams.ClassName == "RICHEDIT50W")
|
||||
|
||||
AddLink50(vte.Text, vte.Link);
|
||||
else
|
||||
|
||||
AddLink20(vte.Text, vte.Link);
|
||||
}
|
||||
public void AddRtfLink(string linkUrl, string linkValue)
|
||||
{
|
||||
if (CreateParams.ClassName == "RICHEDIT50W")
|
||||
|
||||
AddLink50(linkUrl, linkValue);
|
||||
else
|
||||
|
||||
AddLink20(linkUrl, linkValue);
|
||||
}
|
||||
private void AddLink20(string linkValue, string linkUrl)
|
||||
{
|
||||
this.DetectUrls = false;
|
||||
RTBAPI.CharFormatTwo charFormat = RTBAPI.GetCharFormat(this, RTBAPI.RTBSelection.SCF_SELECTION);
|
||||
int position = SelectionStart = this.TextLength;
|
||||
SelectionLength = 0;
|
||||
SelectedRtf = @"{\rtf1\ansi " + linkValue + @"\v " + linkUrl + @"\v0}";
|
||||
Select(position, linkValue.Length + linkUrl.Length + 1);
|
||||
// Protect the link text to avoid manual changes
|
||||
charFormat.dwMask = RTBAPI.CharFormatMasks.CFM_LINK | RTBAPI.CharFormatMasks.CFM_PROTECTED;
|
||||
charFormat.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK | RTBAPI.CharFormatEffects.CFE_PROTECTED;
|
||||
RTBAPI.SetCharFormat((RichTextBox)this, RTBAPI.RTBSelection.SCF_SELECTION, charFormat);
|
||||
this.SelectionStart = this.TextLength;
|
||||
this.SelectionLength = 0;
|
||||
}
|
||||
private void AddLink50(string linkValue, string linkUrl)
|
||||
{
|
||||
this.DetectUrls = false;
|
||||
int position = SelectionStart = this.TextLength;
|
||||
SelectionLength = 0;
|
||||
SelectedRtf = string.Format(@"{{\rtf\field{{\*\fldinst{{HYPERLINK ""www.volian.com #{0}"" }}}}{{\fldrslt{{\cf2\ul {1}}}}}}}", linkUrl, linkValue);
|
||||
this.SelectionStart = this.TextLength;
|
||||
this.SelectionLength = 0;
|
||||
}
|
||||
#endregion
|
||||
#region CalculateHeight
|
||||
public int CalculateHeight()
|
||||
{
|
||||
if (this.CreateParams.ClassName == "RICHEDIT50W")
|
||||
return CalculateHeight50();
|
||||
else
|
||||
return CalculateHeight20();
|
||||
}
|
||||
private int CalculateHeight20()
|
||||
{
|
||||
Application.DoEvents();
|
||||
int yBottom = GetPositionFromCharIndex(TextLength).Y;
|
||||
int yTop = GetPositionFromCharIndex(0).Y;
|
||||
int heightFont = SelectionFont.Height;
|
||||
int borderSize = this.Height - this.ClientSize.Height;
|
||||
int heightNext = (yBottom - yTop) + heightFont + borderSize + 2;// 2 pixels - 1 at the top and 1 at the bottom
|
||||
if (heightNext != Height)
|
||||
{
|
||||
Height = heightNext;
|
||||
|
||||
OnHeightChanged(this, new EventArgs());
|
||||
ScrollPos = new Point(0, 0); // Scroll to make sure that the first line is displayed as the first line
|
||||
}
|
||||
return heightNext;
|
||||
}
|
||||
private int CalculateHeight50()
|
||||
{
|
||||
Application.DoEvents();
|
||||
int heightFont = SelectionFont.Height;
|
||||
int borderSize = this.Height - this.ClientSize.Height;
|
||||
//for (int i = 235; i < TextLength; i++)
|
||||
//{
|
||||
// Console.WriteLine("{0}\t{1}\t{2}", i, GetLineFromCharIndex(i), GetPositionFromCharIndex(i));
|
||||
//}
|
||||
int heightNext = (1 + GetLineFromCharIndex(TextLength)) * heightFont + borderSize + 2;// 2 pixels - 1 at the top and 1 at the bottom
|
||||
return heightNext;
|
||||
}
|
||||
#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
|
||||
private LinkClickedEventArgs _LinkClickedEventArgs;
|
||||
public event DisplayRTBLinkEvent LinkGoTo;
|
||||
private void OnLinkGoTo(object sender, LinkClickedEventArgs args)
|
||||
{
|
||||
_LinkClickedEventArgs = args;
|
||||
Console.WriteLine("DisplayRTB " + _LinkClickedEventArgs.LinkText);
|
||||
if (LinkGoTo != null) LinkGoTo(sender, args);
|
||||
}
|
||||
void DisplayRTB_Leave(object sender, EventArgs e)
|
||||
{
|
||||
// Save returns true if text was not changed or if change was saved successfully.
|
||||
if (ReadOnly) return;
|
||||
// TODO: RHM20071115 bool success = _origVlnText.Save((RichTextBox)this);
|
||||
// TODO: RHM20071115 if (!success) Console.WriteLine("Failed to save text: {0}", this.Text);
|
||||
}
|
||||
private Point _savcurpos;
|
||||
private void onLinkClicked(object sender, System.Windows.Forms.LinkClickedEventArgs e)
|
||||
{
|
||||
if (ReadOnly) return;
|
||||
_LinkClickedEventArgs = e;
|
||||
_eLinkText = e.LinkText;
|
||||
_savcurpos = Cursor.Position;
|
||||
if (e.LinkText.IndexOf("ReferencedObject") > -1)
|
||||
this.contextMenuStripROs.Show(System.Windows.Forms.Cursor.Position);
|
||||
else
|
||||
this.contextMenuStripTrans.Show(System.Windows.Forms.Cursor.Position);
|
||||
}
|
||||
private void SelectLink(string LinkText)
|
||||
{
|
||||
Point cp = PointToClient(_savcurpos);
|
||||
int index = GetCharIndexFromPosition(cp);
|
||||
int iMax = index;
|
||||
int iMin = index;
|
||||
Select(index, 0);
|
||||
|
||||
while (SelectionProtected)
|
||||
Select(--iMin, 0);
|
||||
|
||||
Select(iMin - 1, 1 + LinkText.Length);
|
||||
SelectionProtected = false;
|
||||
Select(iMin, LinkText.Length);
|
||||
}
|
||||
void vlnRichTextBox_ContentsResized(object sender, ContentsResizedEventArgs e)
|
||||
{
|
||||
ContentsRectangle = e.NewRectangle;
|
||||
}
|
||||
#region KeyboardHandling
|
||||
private bool IsControlChar = false;
|
||||
private void onKeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
|
||||
{
|
||||
if (e.Modifiers == Keys.Control)
|
||||
{
|
||||
IsControlChar = true;
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
case Keys.V:
|
||||
string buff = Clipboard.GetText(TextDataFormat.UnicodeText);
|
||||
|
||||
// check if insertable?
|
||||
Console.WriteLine(String.Format("in switch, keydata = {0}, keyvalue = {1}, buff = {2}", e.KeyData, e.KeyValue, buff));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void onKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
|
||||
{
|
||||
if (!ReadOnly)
|
||||
{
|
||||
// add the character with its font depending on the char....
|
||||
if (!IsControlChar)
|
||||
{
|
||||
if (e.KeyChar == '\b') return; // return on backspace.
|
||||
// check for symbol - how??
|
||||
AddRtf(e.KeyChar.ToString());
|
||||
}
|
||||
IsControlChar = false;
|
||||
}
|
||||
e.Handled = true; // flag that it's been handled, otherwise, will get 2 chars.
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
#region Font with Styles
|
||||
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 Context Menu Strip
|
||||
private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
Font cfont = GetFontDetails();
|
||||
menu_Bold.Checked = cfont.Bold;
|
||||
menu_Underline.Checked = cfont.Underline;
|
||||
menu_Italics.Checked = cfont.Italic;
|
||||
menu_Superscript.Checked = RTBAPI.IsSuperScript(this);
|
||||
menu_Subscript.Checked = RTBAPI.IsSubScript(this);
|
||||
menu_Bold.Enabled = !ReadOnly;
|
||||
menu_Underline.Enabled = !ReadOnly;
|
||||
menu_Italics.Enabled = !ReadOnly;
|
||||
menu_Superscript.Enabled = !ReadOnly;
|
||||
menu_Subscript.Enabled = !ReadOnly;
|
||||
menu_Undo.Enabled = !ReadOnly;
|
||||
menu_Redo.Enabled = !ReadOnly;
|
||||
menu_lowercase.Enabled = !ReadOnly;
|
||||
menu_UPPERCASE.Enabled = !ReadOnly;
|
||||
menu_TitleCase.Enabled = !ReadOnly;
|
||||
menu_InsRO.Enabled = !ReadOnly;
|
||||
menu_InsTran.Enabled = !ReadOnly;
|
||||
menu_InsSym.Enabled = !ReadOnly;
|
||||
menu_ToggleView.Enabled = true;
|
||||
}
|
||||
private void contextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
Font cfont = GetFontDetails();
|
||||
|
||||
//if (e.ClickedItem.ToString() == "Paste") DoPaste();
|
||||
if (e.ClickedItem.ToString() == "Underline") ToggleFontStyle(FontStyle.Underline, cfont.Underline);
|
||||
else if (e.ClickedItem.ToString() == "Bold") ToggleFontStyle(FontStyle.Bold, cfont.Bold);
|
||||
else if (e.ClickedItem.ToString() == "Italics") ToggleFontStyle(FontStyle.Italic, cfont.Italic);
|
||||
else if (e.ClickedItem.ToString() == "Subscript")
|
||||
RTBAPI.ToggleSubscript(!RTBAPI.IsSubScript(this), this, this.SelectionLength == 0 ? RTBAPI.RTBSelection.SCF_DEFAULT : RTBAPI.RTBSelection.SCF_SELECTION);
|
||||
else if (e.ClickedItem.ToString() == "Superscript")
|
||||
RTBAPI.ToggleSuperscript(!RTBAPI.IsSuperScript(this), this, this.SelectionLength == 0 ? RTBAPI.RTBSelection.SCF_DEFAULT : RTBAPI.RTBSelection.SCF_SELECTION);
|
||||
else if (e.ClickedItem.ToString() == "Undo")
|
||||
this.Undo();
|
||||
else if (e.ClickedItem.ToString() == "Redo")
|
||||
this.Redo();
|
||||
else if (e.ClickedItem.ToString() == "lowercase")
|
||||
SetSelectedCase('l');
|
||||
else if (e.ClickedItem.ToString() == "UPPERCASE")
|
||||
SetSelectedCase('U');
|
||||
else if (e.ClickedItem.ToString() == "TitleCase")
|
||||
SetSelectedCase('T');
|
||||
else if (e.ClickedItem.ToString() == "Insert RO")
|
||||
InsertRO("kbr ro", "0000000000000");
|
||||
else if (e.ClickedItem.ToString() == "Insert Transition")
|
||||
InsertTran("kbr Tran", "5 3 5");
|
||||
else if (e.ClickedItem.ToString() == "Insert Symbol")
|
||||
InsertSymbol(@"\u916?"); // hardcode for now, but should get value from dialog
|
||||
else if (e.ClickedItem.ToString() == "Toggle View/Edit")
|
||||
ToggleViewEdit();
|
||||
//else if (e.ClickedItem.ToString() == "Find text") findit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message);
|
||||
}
|
||||
}
|
||||
private void SetSelectedCase(char type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case 'l':
|
||||
SelectedText = SelectedText.ToLower();
|
||||
break;
|
||||
case 'U':
|
||||
SelectedText = SelectedText.ToUpper();
|
||||
break;
|
||||
case 'T':
|
||||
SelectedText = SelectedText.Substring(0,1).ToUpper() + SelectedText.Substring(1, SelectedText.Length - 1).ToLower();
|
||||
break;
|
||||
}
|
||||
}
|
||||
private void DeleteTransition()
|
||||
{
|
||||
SelectLink(_eLinkText);
|
||||
SelectedText = "";
|
||||
}
|
||||
private void ModifyTransition()
|
||||
{
|
||||
Console.WriteLine("Modify Transition");
|
||||
}
|
||||
private void contextMenuStripTrans_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||||
{
|
||||
if (e.ClickedItem.ToString() == "Delete Transition") DeleteTransition();
|
||||
else if (e.ClickedItem.ToString() == "Modify Transition") ModifyTransition();
|
||||
else if (e.ClickedItem.ToString() == "Go To")
|
||||
{
|
||||
Console.WriteLine("DisplayRTB:contextMenu:Go TO");
|
||||
OnLinkGoTo(sender, _LinkClickedEventArgs);
|
||||
}
|
||||
|
||||
}
|
||||
private void contextMenuStripTrans_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
menu_GoToTrans.Enabled = true;
|
||||
menu_DeleteTrans.Enabled = !ReadOnly;
|
||||
menu_ModifyTrans.Enabled = !ReadOnly;
|
||||
}
|
||||
private void contextMenuStripROs_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
menu_DeleteRO.Enabled = !ReadOnly;
|
||||
menu_ModifyRO.Enabled = !ReadOnly;
|
||||
}
|
||||
private void DeleteRefObj()
|
||||
{
|
||||
SelectLink(_eLinkText);
|
||||
SelectedText = "";
|
||||
}
|
||||
private void ModifyRefObj()
|
||||
{
|
||||
Console.WriteLine("ModifyRefObj");
|
||||
}
|
||||
private void contextMenuStripROs_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||||
{
|
||||
if (e.ClickedItem.ToString() == "Delete RO") DeleteRefObj();
|
||||
else if (e.ClickedItem.ToString() == "Modify RO") ModifyRefObj();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
322
PROMS/Volian.Controls.Library/DisplayRTB.designer.cs
generated
Normal file
322
PROMS/Volian.Controls.Library/DisplayRTB.designer.cs
generated
Normal file
@ -0,0 +1,322 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class DisplayRTB
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menu_Bold = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_Underline = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_Italics = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_Superscript = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_Subscript = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_Undo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_Redo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_lowercase = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_UPPERCASE = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_TitleCase = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_InsRO = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_InsTran = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_InsSym = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_ToggleView = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.contextMenuStripROs = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menu_DeleteRO = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_ModifyRO = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.contextMenuStripTrans = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menu_DeleteTrans = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_ModifyTrans = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menu_GoToTrans = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.toolStripFontAttributes = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripBold = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripUnderline = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripCase = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.contextMenuStrip.SuspendLayout();
|
||||
this.contextMenuStripROs.SuspendLayout();
|
||||
this.contextMenuStripTrans.SuspendLayout();
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// contextMenuStrip
|
||||
//
|
||||
this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menu_Bold,
|
||||
this.menu_Underline,
|
||||
this.menu_Italics,
|
||||
this.menu_Superscript,
|
||||
this.menu_Subscript,
|
||||
this.menu_Undo,
|
||||
this.menu_Redo,
|
||||
this.menu_lowercase,
|
||||
this.menu_UPPERCASE,
|
||||
this.menu_TitleCase,
|
||||
this.menu_InsRO,
|
||||
this.menu_InsTran,
|
||||
this.menu_InsSym,
|
||||
this.menu_ToggleView});
|
||||
this.contextMenuStrip.Name = "contextMenuStrip";
|
||||
this.contextMenuStrip.Size = new System.Drawing.Size(165, 312);
|
||||
this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
|
||||
this.contextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.contextMenuStrip_ItemClicked);
|
||||
//
|
||||
// menu_Bold
|
||||
//
|
||||
this.menu_Bold.Name = "menu_Bold";
|
||||
this.menu_Bold.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_Bold.Text = "Bold";
|
||||
//
|
||||
// menu_Underline
|
||||
//
|
||||
this.menu_Underline.Name = "menu_Underline";
|
||||
this.menu_Underline.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_Underline.Text = "Underline";
|
||||
//
|
||||
// menu_Italics
|
||||
//
|
||||
this.menu_Italics.Name = "menu_Italics";
|
||||
this.menu_Italics.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_Italics.Text = "Italics";
|
||||
//
|
||||
// menu_Superscript
|
||||
//
|
||||
this.menu_Superscript.Name = "menu_Superscript";
|
||||
this.menu_Superscript.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_Superscript.Text = "Superscript";
|
||||
//
|
||||
// menu_Subscript
|
||||
//
|
||||
this.menu_Subscript.Name = "menu_Subscript";
|
||||
this.menu_Subscript.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_Subscript.Text = "Subscript";
|
||||
//
|
||||
// menu_Undo
|
||||
//
|
||||
this.menu_Undo.Name = "menu_Undo";
|
||||
this.menu_Undo.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_Undo.Text = "Undo";
|
||||
//
|
||||
// menu_Redo
|
||||
//
|
||||
this.menu_Redo.Name = "menu_Redo";
|
||||
this.menu_Redo.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_Redo.Text = "Redo";
|
||||
//
|
||||
// menu_lowercase
|
||||
//
|
||||
this.menu_lowercase.Name = "menu_lowercase";
|
||||
this.menu_lowercase.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_lowercase.Text = "lowercase";
|
||||
//
|
||||
// menu_UPPERCASE
|
||||
//
|
||||
this.menu_UPPERCASE.Name = "menu_UPPERCASE";
|
||||
this.menu_UPPERCASE.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_UPPERCASE.Text = "UPPERCASE";
|
||||
//
|
||||
// menu_TitleCase
|
||||
//
|
||||
this.menu_TitleCase.Name = "menu_TitleCase";
|
||||
this.menu_TitleCase.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_TitleCase.Text = "TitleCase";
|
||||
//
|
||||
// menu_InsRO
|
||||
//
|
||||
this.menu_InsRO.Name = "menu_InsRO";
|
||||
this.menu_InsRO.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_InsRO.Text = "Insert RO";
|
||||
//
|
||||
// menu_InsTran
|
||||
//
|
||||
this.menu_InsTran.Name = "menu_InsTran";
|
||||
this.menu_InsTran.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_InsTran.Text = "Insert Transition";
|
||||
//
|
||||
// menu_InsSym
|
||||
//
|
||||
this.menu_InsSym.Name = "menu_InsSym";
|
||||
this.menu_InsSym.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_InsSym.Text = "Insert Symbol";
|
||||
//
|
||||
// menu_ToggleView
|
||||
//
|
||||
this.menu_ToggleView.Name = "menu_ToggleView";
|
||||
this.menu_ToggleView.Size = new System.Drawing.Size(164, 22);
|
||||
this.menu_ToggleView.Text = "Toggle View/Edit";
|
||||
//
|
||||
// contextMenuStripROs
|
||||
//
|
||||
this.contextMenuStripROs.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menu_DeleteRO,
|
||||
this.menu_ModifyRO});
|
||||
this.contextMenuStripROs.Name = "contextMenuStripROs";
|
||||
this.contextMenuStripROs.Size = new System.Drawing.Size(136, 48);
|
||||
this.contextMenuStripROs.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripROs_Opening);
|
||||
this.contextMenuStripROs.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.contextMenuStripROs_ItemClicked);
|
||||
//
|
||||
// menu_DeleteRO
|
||||
//
|
||||
this.menu_DeleteRO.Name = "menu_DeleteRO";
|
||||
this.menu_DeleteRO.Size = new System.Drawing.Size(135, 22);
|
||||
this.menu_DeleteRO.Text = "Delete RO";
|
||||
//
|
||||
// menu_ModifyRO
|
||||
//
|
||||
this.menu_ModifyRO.Name = "menu_ModifyRO";
|
||||
this.menu_ModifyRO.Size = new System.Drawing.Size(135, 22);
|
||||
this.menu_ModifyRO.Text = "Modify RO";
|
||||
//
|
||||
// contextMenuStripTrans
|
||||
//
|
||||
this.contextMenuStripTrans.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menu_DeleteTrans,
|
||||
this.menu_ModifyTrans,
|
||||
this.menu_GoToTrans});
|
||||
this.contextMenuStripTrans.Name = "contextMenuStripTrans";
|
||||
this.contextMenuStripTrans.Size = new System.Drawing.Size(168, 70);
|
||||
this.contextMenuStripTrans.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripTrans_Opening);
|
||||
this.contextMenuStripTrans.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.contextMenuStripTrans_ItemClicked);
|
||||
//
|
||||
// menu_DeleteTrans
|
||||
//
|
||||
this.menu_DeleteTrans.Name = "menu_DeleteTrans";
|
||||
this.menu_DeleteTrans.Size = new System.Drawing.Size(167, 22);
|
||||
this.menu_DeleteTrans.Text = "Delete Transition";
|
||||
//
|
||||
// menu_ModifyTrans
|
||||
//
|
||||
this.menu_ModifyTrans.Name = "menu_ModifyTrans";
|
||||
this.menu_ModifyTrans.Size = new System.Drawing.Size(167, 22);
|
||||
this.menu_ModifyTrans.Text = "Modify Transition";
|
||||
//
|
||||
// menu_GoToTrans
|
||||
//
|
||||
this.menu_GoToTrans.Name = "menu_GoToTrans";
|
||||
this.menu_GoToTrans.Size = new System.Drawing.Size(167, 22);
|
||||
this.menu_GoToTrans.Text = "Go To";
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripFontAttributes,
|
||||
this.toolStripCase});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(159, 48);
|
||||
//
|
||||
// toolStripFontAttributes
|
||||
//
|
||||
this.toolStripFontAttributes.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripBold,
|
||||
this.toolStripUnderline});
|
||||
this.toolStripFontAttributes.Name = "toolStripFontAttributes";
|
||||
this.toolStripFontAttributes.Size = new System.Drawing.Size(158, 22);
|
||||
this.toolStripFontAttributes.Text = "Font Attributes";
|
||||
//
|
||||
// toolStripBold
|
||||
//
|
||||
this.toolStripBold.Name = "toolStripBold";
|
||||
this.toolStripBold.Size = new System.Drawing.Size(130, 22);
|
||||
this.toolStripBold.Text = "Bold";
|
||||
//
|
||||
// toolStripUnderline
|
||||
//
|
||||
this.toolStripUnderline.Name = "toolStripUnderline";
|
||||
this.toolStripUnderline.Size = new System.Drawing.Size(130, 22);
|
||||
this.toolStripUnderline.Text = "Underline";
|
||||
//
|
||||
// toolStripCase
|
||||
//
|
||||
this.toolStripCase.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripMenuItem1,
|
||||
this.toolStripMenuItem2,
|
||||
this.toolStripMenuItem3});
|
||||
this.toolStripCase.Name = "toolStripCase";
|
||||
this.toolStripCase.Size = new System.Drawing.Size(158, 22);
|
||||
this.toolStripCase.Text = "Case";
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(143, 22);
|
||||
this.toolStripMenuItem1.Text = "UPPERCASE";
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(143, 22);
|
||||
this.toolStripMenuItem2.Text = "lowercase";
|
||||
//
|
||||
// toolStripMenuItem3
|
||||
//
|
||||
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
|
||||
this.toolStripMenuItem3.Size = new System.Drawing.Size(143, 22);
|
||||
this.toolStripMenuItem3.Text = "Title Case";
|
||||
this.contextMenuStrip.ResumeLayout(false);
|
||||
this.contextMenuStripROs.ResumeLayout(false);
|
||||
this.contextMenuStripTrans.ResumeLayout(false);
|
||||
this.contextMenuStrip1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_Bold;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_Underline;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_Italics;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_Superscript;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_Subscript;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_Undo;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_Redo;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_lowercase;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_UPPERCASE;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_TitleCase;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_InsRO;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_InsTran;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_InsSym;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_ToggleView;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStripROs;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_DeleteRO;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_ModifyRO;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStripTrans;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_DeleteTrans;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_ModifyTrans;
|
||||
private System.Windows.Forms.ToolStripMenuItem menu_GoToTrans;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripFontAttributes;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripBold;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripUnderline;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripCase;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3;
|
||||
}
|
||||
}
|
135
PROMS/Volian.Controls.Library/DisplayRTB.resx
Normal file
135
PROMS/Volian.Controls.Library/DisplayRTB.resx
Normal file
@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>27, 22</value>
|
||||
</metadata>
|
||||
<metadata name="contextMenuStripROs.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 91</value>
|
||||
</metadata>
|
||||
<metadata name="contextMenuStripTrans.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 54</value>
|
||||
</metadata>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>175, 91</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
</root>
|
278
PROMS/Volian.Controls.Library/DisplayRTBSimple.cs
Normal file
278
PROMS/Volian.Controls.Library/DisplayRTBSimple.cs
Normal file
@ -0,0 +1,278 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Drawing;
|
||||
using VEPROMS.CSLA.Library;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public enum LinkType : int
|
||||
{
|
||||
ReferencedObject = 21,
|
||||
Transition = 9516,
|
||||
TransitionRange = 9574
|
||||
}
|
||||
public partial class DisplayRTBSimple : RichTextBox, IDisplayRTB
|
||||
{
|
||||
#region Fields
|
||||
private IContainer _Container = null;
|
||||
private ItemInfo _MyItem;
|
||||
private Size _AdjustSize;
|
||||
private Rectangle _ContentsRectangle;
|
||||
private E_EditPrintMode _EpMode;
|
||||
private string _MyClassName;
|
||||
private E_ViewMode _VwMode;
|
||||
#endregion
|
||||
#region RTB 4.1 Not being used
|
||||
//[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;
|
||||
// }
|
||||
//}
|
||||
|
||||
//[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
|
||||
//static extern IntPtr LoadLibrary(string lpFileName);
|
||||
|
||||
//protected override CreateParams CreateParams
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// CreateParams prams = base.CreateParams;
|
||||
// if (LoadLibrary("riched20.dll") != IntPtr.Zero)
|
||||
// {
|
||||
// //prams.ExStyle |= 0x020; // transparent
|
||||
// prams.ClassName = "RICHEDIT20W";
|
||||
// }
|
||||
// return prams;
|
||||
// }
|
||||
//}
|
||||
#endregion
|
||||
#region Events
|
||||
public event DisplayRTBLinkEvent LinkGoTo;
|
||||
private void OnLinkGoTo(object sender,LinkClickedEventArgs args)
|
||||
{
|
||||
if (LinkGoTo != null) LinkGoTo(sender, args);
|
||||
}
|
||||
/// <summary>
|
||||
/// Occurs when a content or format change causes the box to get taller or shorter
|
||||
/// </summary>
|
||||
public event DisplayRTBEvent HeightChanged;
|
||||
/// <summary>
|
||||
/// Checks to see if the HeightChanged event is handled and launches it
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="args"></param>
|
||||
private void OnHeightChanged(object sender, EventArgs args)
|
||||
{
|
||||
if (HeightChanged != null) HeightChanged(sender, args);
|
||||
}
|
||||
#endregion
|
||||
#region Properties
|
||||
/// <summary>
|
||||
/// ItemInfo object associated with the control
|
||||
/// </summary>
|
||||
/// <param name="match"></param>
|
||||
/// <returns></returns>
|
||||
public ItemInfo MyItem
|
||||
{
|
||||
get { return _MyItem; }
|
||||
set
|
||||
{
|
||||
_MyItem = value;
|
||||
if (value != null)
|
||||
{
|
||||
//// TIMING: vlnCSLARTB.TimeIt("rtbMyItem Start");
|
||||
//if (value.ItemID == 90)
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat(value.MyContent.Text);
|
||||
string txt = _MyItem.MyContent.Text;
|
||||
txt = txt.Replace("\n", "\r\n\\par ");
|
||||
//txt = Regex.Replace(txt, "(.){([0-9]*){([0-9 ]*)}}",FixTransition);
|
||||
//txt = Regex.Replace(txt, @"(.)\\v TRAN", FixTransition);
|
||||
MatchCollection mc = Regex.Matches(txt, @"(.)\\v (TRAN|RO)\\v0 ([^\\]*)\\v ([^\\]*)\\v0");
|
||||
//string[] parts = Regex.Split(txt, "(.){{(.*)}{(.*)}}");
|
||||
if (mc.Count > 0)
|
||||
{
|
||||
int lastIndex = 0;
|
||||
foreach (Match m in mc)
|
||||
{
|
||||
if(m.Index > lastIndex) AddRtf(txt.Substring(lastIndex,m.Index - lastIndex));
|
||||
string linkUrl = "Link:" + ((LinkType)Convert.ToInt32(m.Groups[1].Value[0])).ToString() + ":" + m.Groups[4].Value;
|
||||
string linkValue = (m.Groups[2].Value == "TRAN" ? FixTransition(m) : m.Groups[3].Value);
|
||||
if (CreateParams.ClassName == "RICHEDIT50W")
|
||||
AddLink50(linkUrl, linkValue);
|
||||
else
|
||||
AddLink20(linkUrl, linkValue);
|
||||
//AddRtf(string.Format("{0} \\v RO - {1} \\v0",ROValue,ROID));
|
||||
lastIndex = m.Index + m.Length;
|
||||
}
|
||||
AddRtf(txt.Substring(lastIndex, txt.Length - lastIndex));
|
||||
}
|
||||
else
|
||||
{
|
||||
AddRtf(txt);
|
||||
}
|
||||
//// TIMING: vlnCSLARTB.TimeIt("rtbMyItem End");
|
||||
}
|
||||
}
|
||||
}
|
||||
public Size AdjustSize
|
||||
{
|
||||
get { return _AdjustSize; }
|
||||
set { _AdjustSize = value; }
|
||||
}
|
||||
public Rectangle ContentsRectangle
|
||||
{
|
||||
get { return _ContentsRectangle; }
|
||||
set { _ContentsRectangle = value; }
|
||||
}
|
||||
public E_EditPrintMode EpMode
|
||||
{
|
||||
get { return _EpMode; }
|
||||
set { _EpMode = value; }
|
||||
}
|
||||
public string MyClassName
|
||||
{
|
||||
get { return _MyClassName; }
|
||||
set { _MyClassName = value; }
|
||||
}
|
||||
public E_ViewMode VwMode
|
||||
{
|
||||
get { return _VwMode; }
|
||||
set { _VwMode = value; }
|
||||
}
|
||||
#endregion
|
||||
#region Private Methods
|
||||
private string FixTransition(Match match)
|
||||
{
|
||||
//int transitionID = Convert.ToInt32(match.Groups[2].Value);
|
||||
int transitionID = Convert.ToInt32(match.Groups[4].Value.Split(" ".ToCharArray())[1]);
|
||||
// Find the transition
|
||||
foreach (TransitionInfo ti in _MyItem.MyContent.ContentTransitions)
|
||||
{
|
||||
if (ti.TransitionID == transitionID)
|
||||
{
|
||||
string path = ti.PathTo.Replace(" Section PROCEDURE STEPS ", ", ");
|
||||
path = path.Replace(" Section PROCEDURE STEPS", "");
|
||||
return path;
|
||||
}
|
||||
}
|
||||
return match.Value;
|
||||
}
|
||||
/// <summary>
|
||||
/// Adds the text and hypertext link and sets the style to link
|
||||
/// </summary>
|
||||
/// <param name="linkUrl">URL - Uniform Resource Locator (Address)</param>
|
||||
/// <param name="linkValue">Text descibing location</param>
|
||||
private void AddLink20(string linkUrl, string linkValue)
|
||||
{
|
||||
this.DetectUrls = false;
|
||||
RTBAPI.CharFormatTwo charFormat = RTBAPI.GetCharFormat(this, RTBAPI.RTBSelection.SCF_SELECTION);
|
||||
int position = SelectionStart = this.TextLength;
|
||||
SelectionLength = 0;
|
||||
SelectedRtf = @"{\rtf1\ansi " + linkValue + @"\v #" + linkUrl + @"\v0}";
|
||||
Select(position, linkValue.Length + linkUrl.Length + 1);
|
||||
// Protect the link text to avoid manual changes
|
||||
charFormat.dwMask = RTBAPI.CharFormatMasks.CFM_LINK | RTBAPI.CharFormatMasks.CFM_PROTECTED;
|
||||
charFormat.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK | RTBAPI.CharFormatEffects.CFE_PROTECTED;
|
||||
RTBAPI.SetCharFormat((RichTextBox)this, RTBAPI.RTBSelection.SCF_SELECTION, charFormat);
|
||||
this.SelectionStart = this.TextLength;
|
||||
this.SelectionLength = 0;
|
||||
}
|
||||
/// <summary>
|
||||
/// Adds a hypertext link to the Rich Text
|
||||
/// </summary>
|
||||
/// <param name="linkUrl">URL - Uniform Resource Locator (Address)</param>
|
||||
/// <param name="linkValue">Text descibing location</param>
|
||||
private void AddLink50(string linkUrl, string linkValue)
|
||||
{
|
||||
this.DetectUrls = false;
|
||||
int position = SelectionStart = this.TextLength;
|
||||
SelectionLength = 0;
|
||||
SelectedRtf = string.Format(@"{{\rtf\field{{\*\fldinst{{HYPERLINK ""www.volian.com #{0}"" }}}}{{\fldrslt{{\cf2\ul {1}}}}}}}", linkUrl, linkValue);
|
||||
this.SelectionStart = this.TextLength;
|
||||
this.SelectionLength = 0;
|
||||
}
|
||||
/// <summary>
|
||||
/// Adds Rich Text
|
||||
/// </summary>
|
||||
/// <param name="rtf">this is any text and can include RTF commands or not</param>
|
||||
private void AddRtf(string rtf)
|
||||
{
|
||||
this.SelectedRtf = @"{\rtf1 " + rtf + "}";
|
||||
}
|
||||
/// <summary>
|
||||
/// Used by the constructors to do any standard configuration
|
||||
/// </summary>
|
||||
private void SetUp()
|
||||
{
|
||||
BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.DetectUrls = true;
|
||||
//ContextMenuStrip = this.contextMenuStrip1;
|
||||
//ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
|
||||
//this.TextChanged += new EventHandler(VERichTextBox_TextChanged);
|
||||
this.ContentsResized += new ContentsResizedEventHandler(VERichTextBox_ContentsResized);
|
||||
//if (Text != "") ResizeForText();
|
||||
this.LinkClicked += new LinkClickedEventHandler(DisplayRTBSimple_LinkClicked);
|
||||
}
|
||||
|
||||
void DisplayRTBSimple_LinkClicked(object sender, LinkClickedEventArgs e)
|
||||
{
|
||||
OnLinkGoTo(sender, e);
|
||||
}
|
||||
#endregion
|
||||
#region Constructors
|
||||
public DisplayRTBSimple()
|
||||
{
|
||||
InitializeComponent();
|
||||
SetUp();
|
||||
}
|
||||
public DisplayRTBSimple(IContainer container)
|
||||
{
|
||||
container.Add(this);
|
||||
InitializeComponent();
|
||||
_Container = container;
|
||||
SetUp();
|
||||
}
|
||||
#endregion
|
||||
#region Event Handlers
|
||||
void VERichTextBox_ContentsResized(object sender, ContentsResizedEventArgs e)
|
||||
{
|
||||
this.Height = e.NewRectangle.Height;
|
||||
OnHeightChanged(sender, new EventArgs());
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
[TypeConverter(typeof(ExpandableObjectConverter))]
|
||||
public interface IDisplayRTB
|
||||
{
|
||||
event DisplayRTBEvent HeightChanged;
|
||||
ItemInfo MyItem { get; }
|
||||
Size AdjustSize { get; set; }
|
||||
Rectangle ContentsRectangle { get; set; }
|
||||
E_EditPrintMode EpMode { get; set; }
|
||||
string MyClassName { get; set; }
|
||||
E_ViewMode VwMode { get; set; }
|
||||
// In addition to the HeightChanged event and the MyItem property
|
||||
// the constructors below should be created
|
||||
// public DisplayRTBSimple()
|
||||
// public DisplayRTBSimple(IContainer container)
|
||||
}
|
||||
|
||||
}
|
36
PROMS/Volian.Controls.Library/DisplayRTBSimple.designer.cs
generated
Normal file
36
PROMS/Volian.Controls.Library/DisplayRTBSimple.designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class DisplayRTBSimple
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
280
PROMS/Volian.Controls.Library/FlagEnumEditor.cs
Normal file
280
PROMS/Volian.Controls.Library/FlagEnumEditor.cs
Normal file
@ -0,0 +1,280 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing.Design;
|
||||
using System.Windows.Forms.Design;
|
||||
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
|
||||
public class FlagCheckedListBox : CheckedListBox
|
||||
{
|
||||
private System.ComponentModel.Container components = null;
|
||||
|
||||
public FlagCheckedListBox()
|
||||
{
|
||||
// This call is required by the Windows.Forms Form Designer.
|
||||
InitializeComponent();
|
||||
|
||||
// TODO: Add any initialization after the InitForm call
|
||||
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
if (components != null)
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
private void InitializeComponent()
|
||||
{
|
||||
//
|
||||
// FlaggedCheckedListBox
|
||||
//
|
||||
this.CheckOnClick = true;
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Adds an integer value and its associated description
|
||||
public FlagCheckedListBoxItem Add(uint v, string c)
|
||||
{
|
||||
FlagCheckedListBoxItem item = new FlagCheckedListBoxItem(v, c);
|
||||
Items.Add(item);
|
||||
return item;
|
||||
}
|
||||
|
||||
public FlagCheckedListBoxItem Add(FlagCheckedListBoxItem item)
|
||||
{
|
||||
Items.Add(item);
|
||||
return item;
|
||||
}
|
||||
|
||||
protected override void OnItemCheck(ItemCheckEventArgs e)
|
||||
{
|
||||
base.OnItemCheck(e);
|
||||
|
||||
if (isUpdatingCheckStates)
|
||||
return;
|
||||
|
||||
// Get the checked/unchecked item
|
||||
FlagCheckedListBoxItem item = Items[e.Index] as FlagCheckedListBoxItem;
|
||||
// Update other items
|
||||
UpdateCheckedItems(item, e.NewValue);
|
||||
}
|
||||
|
||||
// Checks/Unchecks items depending on the give bitvalue
|
||||
protected void UpdateCheckedItems(uint value)
|
||||
{
|
||||
|
||||
isUpdatingCheckStates = true;
|
||||
|
||||
// Iterate over all items
|
||||
for (int i = 0; i < Items.Count; i++)
|
||||
{
|
||||
FlagCheckedListBoxItem item = Items[i] as FlagCheckedListBoxItem;
|
||||
|
||||
if (item.value == 0)
|
||||
{
|
||||
SetItemChecked(i, value == 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// If the bit for the current item is on in the bitvalue, check it
|
||||
if ((item.value & value) == item.value && item.value != 0)
|
||||
SetItemChecked(i, true);
|
||||
// Otherwise uncheck it
|
||||
else
|
||||
SetItemChecked(i, false);
|
||||
}
|
||||
}
|
||||
|
||||
isUpdatingCheckStates = false;
|
||||
|
||||
}
|
||||
|
||||
// Updates items in the checklistbox
|
||||
// composite = The item that was checked/unchecked
|
||||
// cs = The check state of that item
|
||||
protected void UpdateCheckedItems(FlagCheckedListBoxItem composite, CheckState cs)
|
||||
{
|
||||
|
||||
// If the value of the item is 0, call directly.
|
||||
if (composite.value == 0)
|
||||
UpdateCheckedItems(0);
|
||||
|
||||
|
||||
// Get the total value of all checked items
|
||||
uint sum = 0;
|
||||
for (int i = 0; i < Items.Count; i++)
|
||||
{
|
||||
FlagCheckedListBoxItem item = Items[i] as FlagCheckedListBoxItem;
|
||||
|
||||
// If item is checked, add its value to the sum.
|
||||
if (GetItemChecked(i))
|
||||
sum |= item.value;
|
||||
}
|
||||
|
||||
// If the item has been unchecked, remove its bits from the sum
|
||||
if (cs == CheckState.Unchecked)
|
||||
sum = sum & (~composite.value);
|
||||
// If the item has been checked, combine its bits with the sum
|
||||
else
|
||||
sum |= composite.value;
|
||||
|
||||
// Update all items in the checklistbox based on the final bit value
|
||||
UpdateCheckedItems(sum);
|
||||
|
||||
}
|
||||
|
||||
private bool isUpdatingCheckStates = false;
|
||||
|
||||
// Gets the current bit value corresponding to all checked items
|
||||
public uint GetCurrentValue()
|
||||
{
|
||||
uint sum = 0;
|
||||
|
||||
for (int i = 0; i < Items.Count; i++)
|
||||
{
|
||||
FlagCheckedListBoxItem item = Items[i] as FlagCheckedListBoxItem;
|
||||
|
||||
if (GetItemChecked(i))
|
||||
sum |= item.value;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
Type enumType;
|
||||
Enum enumValue;
|
||||
|
||||
// Adds items to the checklistbox based on the members of the enum
|
||||
private void FillEnumMembers()
|
||||
{
|
||||
foreach (string name in Enum.GetNames(enumType))
|
||||
{
|
||||
object val = Enum.Parse(enumType, name);
|
||||
uint intVal = (uint)Convert.ChangeType(val, typeof(uint));
|
||||
|
||||
Add(intVal, name);
|
||||
}
|
||||
}
|
||||
|
||||
// Checks/unchecks items based on the current value of the enum variable
|
||||
private void ApplyEnumValue()
|
||||
{
|
||||
uint intVal = (uint)Convert.ChangeType(enumValue, typeof(uint));
|
||||
UpdateCheckedItems(intVal);
|
||||
|
||||
}
|
||||
|
||||
[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
|
||||
public Enum EnumValue
|
||||
{
|
||||
get
|
||||
{
|
||||
object e = Enum.ToObject(enumType, GetCurrentValue());
|
||||
return (Enum)e;
|
||||
}
|
||||
set
|
||||
{
|
||||
|
||||
Items.Clear();
|
||||
enumValue = value; // Store the current enum value
|
||||
enumType = value.GetType(); // Store enum type
|
||||
FillEnumMembers(); // Add items for enum members
|
||||
ApplyEnumValue(); // Check/uncheck items depending on enum value
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Represents an item in the checklistbox
|
||||
public class FlagCheckedListBoxItem
|
||||
{
|
||||
public FlagCheckedListBoxItem(uint v, string c)
|
||||
{
|
||||
value = v;
|
||||
caption = c;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return caption;
|
||||
}
|
||||
|
||||
// Returns true if the value corresponds to a single bit being set
|
||||
public bool IsFlag
|
||||
{
|
||||
get
|
||||
{
|
||||
return ((value & (value - 1)) == 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Returns true if this value is a member of the composite bit value
|
||||
public bool IsMemberFlag(FlagCheckedListBoxItem composite)
|
||||
{
|
||||
return (IsFlag && ((value & composite.value) == value));
|
||||
}
|
||||
|
||||
public uint value;
|
||||
public string caption;
|
||||
}
|
||||
|
||||
|
||||
// UITypeEditor for flag enums
|
||||
public class FlagEnumUIEditor : UITypeEditor
|
||||
{
|
||||
// The checklistbox
|
||||
private FlagCheckedListBox flagEnumCB;
|
||||
|
||||
public FlagEnumUIEditor()
|
||||
{
|
||||
flagEnumCB = new FlagCheckedListBox();
|
||||
flagEnumCB.BorderStyle = BorderStyle.None;
|
||||
}
|
||||
|
||||
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
|
||||
{
|
||||
if (context != null
|
||||
&& context.Instance != null
|
||||
&& provider != null)
|
||||
{
|
||||
|
||||
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
|
||||
|
||||
if (edSvc != null)
|
||||
{
|
||||
|
||||
Enum e = (Enum)Convert.ChangeType(value, context.PropertyDescriptor.PropertyType);
|
||||
flagEnumCB.EnumValue = e;
|
||||
edSvc.DropDownControl(flagEnumCB);
|
||||
return flagEnumCB.EnumValue;
|
||||
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
|
||||
{
|
||||
return UITypeEditorEditStyle.DropDown;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
35
PROMS/Volian.Controls.Library/Properties/AssemblyInfo.cs
Normal file
35
PROMS/Volian.Controls.Library/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Volian.Controls.Library")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Volian Enterprises, Inc.")]
|
||||
[assembly: AssemblyProduct("Volian.Controls.Library")]
|
||||
[assembly: AssemblyCopyright("Copyright © Volian Enterprises, Inc. 2007")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("92d604d4-a2f9-49e6-af01-c77673f24954")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
922
PROMS/Volian.Controls.Library/RTBAPI.cs
Normal file
922
PROMS/Volian.Controls.Library/RTBAPI.cs
Normal file
@ -0,0 +1,922 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public static class RTBAPI
|
||||
{
|
||||
#region SendMessage
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
private static extern int SendMessage(HandleRef hWndlock, Messages wMsg, Int32 wParam, ref Point pt);
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
private static extern int SendMessage(HandleRef hWndlock, Messages wMsg, Int32 wParam, int lParam);
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
public static extern int SendMessage(HandleRef hWndlock, Messages wMsg, RTBSelection wParam, ref CharFormat2 cf2);
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
public static extern int SendMessage(HandleRef hWndlock, Messages wMsg, int wParam, ref ParaFormat2 pf2);
|
||||
#region RTB Messages
|
||||
// EM_AUTOURLDETECT - An EM_AUTOURLDETECT message enables or disables automatic detection of URLs by a rich edit control.
|
||||
// EM_CANPASTE - The EM_CANPASTE message determines whether a rich edit control can paste a specified clipboard format.
|
||||
// EM_CANREDO - The EM_CANREDO message determines whether there are any actions in the control redo queue.
|
||||
// EM_DISPLAYBAND - The EM_DISPLAYBAND message displays a portion of the contents of a rich edit control, as previously formatted for a device using the EM_FORMATRANGE message.
|
||||
// EM_EXGETSEL - The EM_EXGETSEL message retrieves the starting and ending character positions of the selection in a rich edit control.
|
||||
// EM_EXLIMITTEXT - The EM_EXLIMITTEXT message sets an upper limit to the amount of text the user can type or paste into a rich edit control.
|
||||
// EM_EXLINEFROMCHAR - The EM_EXLINEFROMCHAR message determines which line contains the specified character in a rich edit control.
|
||||
// EM_EXSETSEL - The EM_EXSETSEL message selects a range of characters or COM objects in a Rich Edit control.
|
||||
// EM_FINDTEXT - The EM_FINDTEXT message finds text within a rich edit control.
|
||||
// EM_FINDTEXTEX - The EM_FINDTEXTEX message finds text within a rich edit control.
|
||||
// EM_FINDTEXTEXW - The EM_FINDTEXTEXW message finds Unicode text within a rich edit control.
|
||||
// EM_FINDTEXTW - The EM_FINDTEXTW message finds Unicode text within a rich edit control.
|
||||
// EM_FINDWORDBREAK - The EM_FINDWORDBREAK message finds the next word break before or after the specified character position or retrieves information about the character at that position.
|
||||
// EM_FORMATRANGE - The EM_FORMATRANGE message formats a range of text in a rich edit control for a specific device.
|
||||
// EM_GETAUTOURLDETECT - The EM_GETAUTOURLDETECT message indicates whether the auto URL detection is turned on in the rich edit control.
|
||||
// EM_GETBIDIOPTIONS - The EM_GETBIDIOPTIONS message indicates the current state of the bidirectional options in the rich edit control.
|
||||
// EM_GETCHARFORMAT - The EM_GETCHARFORMAT message determines the character formatting in a rich edit control.
|
||||
// EM_GETCTFMODEBIAS - An application sends a EM_GETCTFMODEBIAS message to get the Text Services Framework mode bias values for a Rich Edit control.
|
||||
// EM_GETCTFOPENSTATUS - An application sends an EM_GETCTFOPENSTATUS message to determine if the Text Services Framework (TSF) keyboard is open or closed.
|
||||
// EM_GETEDITSTYLE - The EM_GETEDITSTYLE message retrieves the current edit style flags.
|
||||
// EM_GETEVENTMASK - The EM_GETEVENTMASK message retrieves the event mask for a rich edit control. The event mask specifies which notification messages the control sends to its parent window.
|
||||
// EM_GETHYPHENATEINFO - An application sends an EM_GETHYPHENATEINFO message to get information about hyphenation for a Rich Edit control.
|
||||
// EM_GETIMECOLOR - The EM_GETIMECOLOR message retrieves the Input Method Editor (IME) composition color. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_GETIMECOMPMODE - An application sends an EM_GETIMECOMPMODE message to get the current IME mode for a rich edit control.
|
||||
// EM_GETIMECOMPTEXT - An application sends an EM_GETIMECOMPTEXT message to get the IME composition text.
|
||||
// EM_GETIMEMODEBIAS - An application sends an EM_GETIMEMODEBIAS message to get the IME mode bias for a Rich Edit control.
|
||||
// EM_GETIMEOPTIONS - The EM_GETIMEOPTIONS message retrieves the current IME options. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_GETIMEPROPERTY - An application sends a EM_GETIMEPROPERTY message to get the property and capabilities of the IME associated with the current input locale.
|
||||
// EM_GETLANGOPTIONS - An application sends an EM_GETLANGOPTIONS message to get a rich edit control's option settings for IME and Asian language support.
|
||||
// EM_GETOLEINTERFACE - The EM_GETOLEINTERFACE message retrieves an IRichEditOle object that a client can use to access a rich edit control's COM functionality.
|
||||
// EM_GETOPTIONS - The EM_GETOPTIONS message retrieves rich edit control options.
|
||||
// EM_GETPAGEROTATE - Deprecated. An application sends an EM_GETPAGEROTATE message to get the text layout for a Rich Edit control.
|
||||
// EM_GETPARAFORMAT - The EM_GETPARAFORMAT message retrieves the paragraph formatting of the current selection in a rich edit control.
|
||||
// EM_GETPUNCTUATION - The EM_GETPUNCTUATION message gets the current punctuation characters for the rich edit control. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_GETREDONAME - An application sends an EM_GETREDONAME message to a rich edit control to retrieve the type of the next action, if any, in the control's redo queue.
|
||||
// EM_GETSCROLLPOS - An application sends an EM_GETSCROLLPOS message to obtain the current scroll position of the edit control.
|
||||
// EM_GETSELTEXT - The EM_GETSELTEXT message retrieves the currently selected text in a rich edit control.
|
||||
// EM_GETTEXTEX - The EM_GETTEXTEX message allows you to get all of the text from the rich edit control in any particular code base you want.
|
||||
// EM_GETTEXTLENGTHEX - The EM_GETTEXTLENGTHEX message calculates text length in various ways. It is usually called before creating a buffer to receive the text from the control.
|
||||
// EM_GETTEXTMODE - An application sends an EM_GETTEXTMODE message to get the current text mode and undo level of a rich edit control.
|
||||
// EM_GETTEXTRANGE - The EM_GETTEXTRANGE message retrieves a specified range of characters from a rich edit control.
|
||||
// EM_GETTYPOGRAPHYOPTIONS - The EM_GETTYPOGRAPHYOPTIONS message returns the current state of the typography options of a rich edit control.
|
||||
// EM_GETUNDONAME - Rich Edit 2.0 and later: An application sends an EM_GETUNDONAME message to a rich edit control to retrieve the type of the next undo action, if any.
|
||||
// EM_GETWORDBREAKPROCEX - The EM_GETWORDBREAKPROCEX message retrieves the address of the currently registered extended word-break procedure.
|
||||
// EM_GETWORDWRAPMODE - The EM_GETWORDWRAPMODE message gets the current word wrap and word-break options for the rich edit control. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_GETZOOM - The EM_GETZOOM message gets the current zoom ratio, which is always between 1/64 and 64.
|
||||
// EM_HIDESELECTION - The EM_HIDESELECTION message hides or shows the selection in a rich edit control.
|
||||
// EM_ISIME - An application sends a EM_ISIME message to determine if current input locale is an East Asian locale.
|
||||
// EM_PASTESPECIAL - The EM_PASTESPECIAL message pastes a specific clipboard format in a rich edit control.
|
||||
// EM_RECONVERSION - The EM_RECONVERSION message invokes the IME reconversion dialog box.
|
||||
// EM_REDO - Send an EM_REDO message to a rich edit control to redo the next action in the control's redo queue.
|
||||
// EM_REQUESTRESIZE - The EM_REQUESTRESIZE message forces a rich edit control to send an EN_REQUESTRESIZE notification message to its parent window.
|
||||
// EM_SELECTIONTYPE - The EM_SELECTIONTYPE message determines the selection type for a rich edit control.
|
||||
// EM_SETBIDIOPTIONS - The EM_SETBIDIOPTIONS message sets the current state of the bidirectional options in the rich edit control.
|
||||
// EM_SETBKGNDCOLOR - The EM_SETBKGNDCOLOR message sets the background color for a rich edit control.
|
||||
// EM_SETCHARFORMAT - The EM_SETCHARFORMAT message sets character formatting in a rich edit control.
|
||||
// EM_SETCTFMODEBIAS - An application sends an EM_SETCTFMODEBIAS message to set the Text Services Framework (TSF) mode bias for a Rich Edit control.
|
||||
// EM_SETCTFOPENSTATUS - An application sends an EM_SETCTFOPENSTATUS message to open or close the Text Services Framework (TSF) keyboard.
|
||||
// EM_SETEDITSTYLE - The EM_SETEDITSTYLE message sets the current edit style flags.
|
||||
// EM_SETEVENTMASK - The EM_SETEVENTMASK message sets the event mask for a rich edit control. The event mask specifies which notification messages the control sends to its parent window.
|
||||
// EM_SETFONTSIZE - The EM_SETFONTSIZE message sets the font size for the selected text.
|
||||
// EM_SETHYPHENATEINFO - An application sends an EM_SETHYPHENATEINFO message to set the way a Rich Edit control does hyphenation.
|
||||
// EM_SETIMECOLOR - The EM_SETIMECOLOR message sets the IME composition color. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_SETIMEMODEBIAS - An application sends an EM_SETIMEMODEBIAS message to set the IME mode bias for a Rich Edit control.
|
||||
// EM_SETIMEOPTIONS - The EM_SETIMEOPTIONS message sets the IME options. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_SETLANGOPTIONS - An application sends an EM_SETLANGOPTIONS message to set options for IME and Asian language support in a rich edit control.
|
||||
// EM_SETOLECALLBACK - The EM_SETOLECALLBACK message gives a rich edit control an IRichEditOleCallback object that the control uses to get OLE-related resources and information from the client.
|
||||
// EM_SETOPTIONS - The EM_SETOPTIONS message sets the options for a rich edit control.
|
||||
// EM_SETPAGEROTATE - Deprecated. An application sends an EM_SETPAGEROTATE message to set the text layout for a Rich Edit control.
|
||||
// EM_SETPALETTE - An application sends an EM_SETPALETTE message to change the palette that rich edit uses for its display window.
|
||||
// EM_SETPARAFORMAT - The EM_SETPARAFORMAT message sets the paragraph formatting for the current selection in a rich edit control.
|
||||
// EM_SETPUNCTUATION - The EM_SETPUNCTUATION message sets the punctuation characters for a rich edit control. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_SETSCROLLPOS - An application sends an EM_SETSCROLLPOS message to tell the rich edit control to scroll to a particular point.
|
||||
// EM_SETTARGETDEVICE - The EM_SETTARGETDEVICE message sets the target device and line width used for "what you see is what you get" (WYSIWYG) formatting in a rich edit control.
|
||||
// EM_SETTEXTEX - The EM_SETTEXTEX message combines the functionality of WM_SETTEXT and EM_REPLACESEL and adds the ability to set text using a code page and to use either rich text or plain text.
|
||||
// EM_SETTEXTMODE - An application sends an EM_SETTEXTMODE message to set the text mode or undo level of a rich edit control. The message fails if the control contains any text.
|
||||
// EM_SETTYPOGRAPHYOPTIONS - The EM_SETTYPOGRAPHYOPTIONS message sets the current state of the typography options of a rich edit control.
|
||||
// EM_SETUNDOLIMIT - An application sends an EM_SETUNDOLIMIT message to a rich edit control to set the maximum number of actions that can stored in the undo queue.
|
||||
// EM_SETWORDBREAKPROCEX - The EM_SETWORDBREAKPROCEX message sets the extended word-break procedure.
|
||||
// EM_SETWORDWRAPMODE - The EM_SETWORDWRAPMODE message sets the word-wrapping and word-breaking options for the rich edit control. This message is available only in Asian-language versions of the operating system.
|
||||
// EM_SETZOOM - The EM_SETZOOM message sets the zoom ratio anywhere between 1/64 and 64.
|
||||
// EM_SHOWSCROLLBAR - The EM_SHOWSCROLLBAR message shows or hides one of the scroll bars in the Text Host window.
|
||||
// EM_STOPGROUPTYPING - An application sends an EM_STOPGROUPTYPING message to a rich edit control to stop the control from collecting additional typing actions into the current undo action. The control stores the next typing action, if any, into a new action in the undo queue.
|
||||
// EM_STREAMIN - The EM_STREAMIN message replaces the contents of a rich edit control with a stream of data provided by an application defined
|
||||
// EM_STREAMOUT - The EM_STREAMOUT message causes a rich edit control to pass its contents to an application
|
||||
#endregion
|
||||
#endregion
|
||||
#region Constants
|
||||
//const int ECOOP_XOR = 0x0004;
|
||||
|
||||
//const int ECO_AUTOWORDSELECTION = 0x00000001;
|
||||
|
||||
|
||||
const int WM_USER = 0x0400;
|
||||
#endregion
|
||||
#region Enums
|
||||
public enum Messages : int
|
||||
{
|
||||
EM_AUTOURLDETECT = WM_USER + 91,
|
||||
EM_CANPASTE = WM_USER + 50,
|
||||
EM_CANREDO = WM_USER + 85,
|
||||
EM_DISPLAYBAND = WM_USER + 51,
|
||||
EM_EXGETSEL = WM_USER + 52,
|
||||
EM_EXLIMITTEXT = WM_USER + 53,
|
||||
EM_EXLINEFROMCHAR = WM_USER + 54,
|
||||
EM_EXSETSEL = WM_USER + 55,
|
||||
EM_FINDTEXT = WM_USER + 56,
|
||||
EM_FINDTEXTEX = WM_USER + 79,
|
||||
EM_FINDTEXTEXW = WM_USER + 124,
|
||||
EM_FINDTEXTW = WM_USER + 123,
|
||||
EM_FINDWORDBREAK = WM_USER + 76,
|
||||
EM_FORMATRANGE = WM_USER + 57,
|
||||
EM_GETAUTOURLDETECT = WM_USER + 92,
|
||||
EM_GETBIDIOPTIONS = WM_USER + 201,
|
||||
EM_GETCHARFORMAT = WM_USER + 58,
|
||||
EM_GETCTFMODEBIAS = WM_USER + 237,
|
||||
EM_GETCTFOPENSTATUS = WM_USER + 240,
|
||||
EM_GETEDITSTYLE = WM_USER + 205,
|
||||
EM_GETEVENTMASK = WM_USER + 59,
|
||||
EM_GETHYPHENATEINFO = WM_USER + 230,
|
||||
EM_GETIMECOLOR = WM_USER + 105,
|
||||
EM_GETIMECOMPMODE = WM_USER + 122,
|
||||
EM_GETIMECOMPTEXT = WM_USER + 242,
|
||||
EM_GETIMEMODEBIAS = WM_USER + 127,
|
||||
EM_GETIMEOPTIONS = WM_USER + 107,
|
||||
EM_GETIMEPROPERTY = WM_USER + 244,
|
||||
EM_GETLANGOPTIONS = WM_USER + 121,
|
||||
EM_GETOLEINTERFACE = WM_USER + 60,
|
||||
EM_GETOPTIONS = WM_USER + 78,
|
||||
EM_GETPAGEROTATE = WM_USER + 235,
|
||||
EM_GETPARAFORMAT = WM_USER + 61,
|
||||
EM_GETPUNCTUATION = WM_USER + 101,
|
||||
EM_GETREDONAME = WM_USER + 87,
|
||||
EM_GETSCROLLPOS = WM_USER + 221,
|
||||
EM_GETSELTEXT = WM_USER + 62,
|
||||
EM_GETTEXTEX = WM_USER + 94,
|
||||
EM_GETTEXTLENGTHEX = WM_USER + 95,
|
||||
EM_GETTEXTMODE = WM_USER + 90,
|
||||
EM_GETTEXTRANGE = WM_USER + 75,
|
||||
EM_GETTYPOGRAPHYOPTIONS = WM_USER + 203,
|
||||
EM_GETUNDONAME = WM_USER + 86,
|
||||
EM_GETWORDBREAKPROCEX = WM_USER + 80,
|
||||
EM_GETWORDWRAPMODE = WM_USER + 103,
|
||||
EM_GETZOOM = WM_USER + 224,
|
||||
EM_HIDESELECTION = WM_USER + 63,
|
||||
EM_ISIME = WM_USER + 243,
|
||||
EM_PASTESPECIAL = WM_USER + 64,
|
||||
EM_RECONVERSION = WM_USER + 125,
|
||||
EM_REDO = WM_USER + 84,
|
||||
EM_REQUESTRESIZE = WM_USER + 65,
|
||||
EM_SELECTIONTYPE = WM_USER + 66,
|
||||
EM_SETBIDIOPTIONS = WM_USER + 200,
|
||||
EM_SETBKGNDCOLOR = WM_USER + 67,
|
||||
EM_SETCHARFORMAT = WM_USER + 68,
|
||||
EM_SETCTFMODEBIAS = WM_USER + 238,
|
||||
EM_SETCTFOPENSTATUS = WM_USER + 241,
|
||||
EM_SETEDITSTYLE = WM_USER + 204,
|
||||
EM_SETEVENTMASK = WM_USER + 69,
|
||||
EM_SETFONTSIZE = WM_USER + 223,
|
||||
EM_SETHYPHENATEINFO = WM_USER + 231,
|
||||
EM_SETIMECOLOR = WM_USER + 104,
|
||||
EM_SETIMEMODEBIAS = WM_USER + 126,
|
||||
EM_SETIMEOPTIONS = WM_USER + 106,
|
||||
EM_SETLANGOPTIONS = WM_USER + 120,
|
||||
EM_SETOLECALLBACK = WM_USER + 70,
|
||||
EM_SETOPTIONS = WM_USER + 77,
|
||||
EM_SETPAGEROTATE = WM_USER + 236,
|
||||
EM_SETPALETTE = WM_USER + 93,
|
||||
EM_SETPARAFORMAT = WM_USER + 71,
|
||||
EM_SETPUNCTUATION = WM_USER + 100,
|
||||
EM_SETSCROLLPOS = WM_USER + 222,
|
||||
EM_SETTARGETDEVICE = WM_USER + 72,
|
||||
EM_SETTEXTEX = WM_USER + 97,
|
||||
EM_SETTEXTMODE = WM_USER + 89,
|
||||
EM_SETTYPOGRAPHYOPTIONS = WM_USER + 202,
|
||||
EM_SETUNDOLIMIT = WM_USER + 82,
|
||||
EM_SETWORDBREAKPROCEX = WM_USER + 81,
|
||||
EM_SETWORDWRAPMODE = WM_USER + 102,
|
||||
EM_SETZOOM = WM_USER + 225,
|
||||
EM_SHOWSCROLLBAR = WM_USER + 96,
|
||||
EM_STOPGROUPTYPING = WM_USER + 88,
|
||||
EM_STREAMIN = WM_USER + 73,
|
||||
EM_STREAMOUT = WM_USER + 74
|
||||
};
|
||||
[Flags]
|
||||
public enum LanguageOptions : int // Options for EM_SETLANGOPTIONS and EM_GETLANGOPTIONS
|
||||
{
|
||||
IMF_AUTOKEYBOARD = 0x0001,
|
||||
IMF_AUTOFONT = 0x0002,
|
||||
IMF_IMECANCELCOMPLETE = 0x0004, // high completes the comp string when aborting, low cancels.
|
||||
IMF_IMEALWAYSSENDNOTIFY = 0x0008
|
||||
}
|
||||
public enum TimeCompMode : int // Values for EM_GETIMECOMPMODE
|
||||
{
|
||||
ICM_NOTOPEN = 0x0000,
|
||||
ICM_LEVEL3 = 0x0001,
|
||||
ICM_LEVEL2 = 0x0002,
|
||||
ICM_LEVEL2_5 = 0x0003,
|
||||
ICM_LEVEL2_SUI = 0x0004
|
||||
}
|
||||
[Flags]
|
||||
public enum EditControlOptions : int // Edit control options
|
||||
{
|
||||
ECO_AUTOWORDSELECTION = 0x00000001,
|
||||
ECO_AUTOVSCROLL = 0x00000040,
|
||||
ECO_AUTOHSCROLL = 0x00000080,
|
||||
ECO_NOHIDESEL = 0x00000100,
|
||||
ECO_READONLY = 0x00000800,
|
||||
ECO_WANTRETURN = 0x00001000,
|
||||
ECO_SAVESEL = 0x00008000,
|
||||
ECO_SELECTIONBAR = 0x01000000,
|
||||
ECO_VERTICAL = 0x00400000, // FE specific
|
||||
}
|
||||
public enum EcoOperations : int // ECO operations
|
||||
{
|
||||
ECOOP_SET = 0x0001,
|
||||
ECOOP_OR = 0x0002,
|
||||
ECOOP_AND = 0x0003,
|
||||
ECOOP_XOR = 0x0004
|
||||
}
|
||||
public enum WordBreakFunctionActions : int // new word break function actions
|
||||
{
|
||||
WB_CLASSIFY = 3,
|
||||
WB_MOVEWORDLEFT = 4,
|
||||
WB_MOVEWORDRIGHT = 5,
|
||||
WB_LEFTBREAK = 6,
|
||||
WB_RIGHTBREAK = 7
|
||||
}
|
||||
//#define PC_FOLLOWING 1
|
||||
//#define PC_LEADING 2
|
||||
//#define PC_OVERFLOW 3
|
||||
//#define PC_DELIMITER 4
|
||||
//#define WBF_WORDWRAP 0x010
|
||||
//#define WBF_WORDBREAK 0x020
|
||||
//#define WBF_OVERFLOW 0x040
|
||||
//#define WBF_LEVEL1 0x080
|
||||
//#define WBF_LEVEL2 0x100
|
||||
//#define WBF_CUSTOM 0x200
|
||||
/* Word break flags (used with WB_CLASSIFY) */
|
||||
//#define WBF_CLASS ((BYTE) 0x0F)
|
||||
//#define WBF_ISWHITE ((BYTE) 0x10)
|
||||
//#define WBF_BREAKLINE ((BYTE) 0x20)
|
||||
//#define WBF_BREAKAFTER ((BYTE) 0x40)
|
||||
///* Far East specific flags */
|
||||
//#define IMF_FORCENONE 0x0001
|
||||
//#define IMF_FORCEENABLE 0x0002
|
||||
//#define IMF_FORCEDISABLE 0x0004
|
||||
//#define IMF_CLOSESTATUSWINDOW 0x0008
|
||||
//#define IMF_VERTICAL 0x0020
|
||||
//#define IMF_FORCEACTIVE 0x0040
|
||||
//#define IMF_FORCEINACTIVE 0x0080
|
||||
//#define IMF_FORCEREMEMBER 0x0100
|
||||
//#define IMF_MULTIPLEEDIT 0x0400
|
||||
public enum RTBSelection : int
|
||||
{
|
||||
SCF_DEFAULT = 0x0000,
|
||||
SCF_SELECTION = 0x0001,
|
||||
SCF_WORD = 0x0002,
|
||||
SCF_ALL = 0x0004,
|
||||
SCF_USEUIRULES = 0x0008
|
||||
}
|
||||
[Flags]
|
||||
public enum CharFormatMasks : uint
|
||||
{
|
||||
CFM_NONE = 0,
|
||||
CFM_BOLD = 0x00000001,
|
||||
CFM_ITALIC = 0x00000002,
|
||||
CFM_UNDERLINE = 0x00000004,
|
||||
CFM_STRIKEOUT = 0x00000008,
|
||||
CFM_PROTECTED = 0x00000010,
|
||||
CFM_LINK = 0x00000020, // Exchange hyperlink extension
|
||||
CFM_SIZE = 0x80000000,
|
||||
CFM_COLOR = 0x40000000,
|
||||
CFM_FACE = 0x20000000,
|
||||
CFM_OFFSET = 0x10000000,
|
||||
CFM_CHARSET = 0x08000000,
|
||||
CFM_SMALLCAPS = 0x0040,
|
||||
CFM_ALLCAPS = 0x0080,
|
||||
CFM_HIDDEN = 0x0100,
|
||||
CFM_OUTLINE = 0x0200,
|
||||
CFM_SHADOW = 0x0400,
|
||||
CFM_EMBOSS = 0x0800,
|
||||
CFM_IMPRINT = 0x1000,
|
||||
CFM_DISABLED = 0x2000,
|
||||
CFM_REVISED = 0x4000,
|
||||
CFM_BACKCOLOR = 0x04000000,
|
||||
CFM_LCID = 0x02000000,
|
||||
CFM_UNDERLINETYPE = 0x00800000,
|
||||
CFM_WEIGHT = 0x00400000,
|
||||
CFM_SPACING = 0x00200000,
|
||||
CFM_KERNING = 0x00100000,
|
||||
CFM_STYLE = 0x00080000,
|
||||
CFM_ANIMATION = 0x00040000,
|
||||
CFM_REVAUTHOR = 0x00008000,
|
||||
CFM_SUBSCRIPT = 0x00010000,
|
||||
CFM_SUPERSCRIPT = 0x00020000
|
||||
// CFM_SUBorSUPERSCRIPT = 0x00030000
|
||||
}
|
||||
[Flags]
|
||||
public enum CharFormatEffects : uint
|
||||
{
|
||||
CFE_NONE = 0,
|
||||
CFE_BOLD = 0x0001,
|
||||
CFE_ITALIC = 0x0002,
|
||||
CFE_UNDERLINE = 0x0004,
|
||||
CFE_STRIKEOUT = 0x0008,
|
||||
CFE_PROTECTED = 0x0010,
|
||||
CFE_LINK = 0x0020,
|
||||
CFE_AUTOBACKCOLOR = 0x04000000, // NOTE: this corresponds to CFM_BACKCOLOR, which controls it
|
||||
CFE_AUTOCOLOR = 0x40000000, // NOTE: this corresponds to CFM_COLOR, which controls it
|
||||
CFE_SUBSCRIPT = 0x00010000, // Superscript and subscript are
|
||||
CFE_SUPERSCRIPT = 0x00020000, // mutually exclusive
|
||||
CFE_SMALLCAPS = 0x0040,
|
||||
CFE_ALLCAPS = 0x0080,
|
||||
CFE_HIDDEN = 0x0100,
|
||||
CFE_OUTLINE = 0x0200,
|
||||
CFE_SHADOW = 0x0400,
|
||||
CFE_EMBOSS = 0x0800,
|
||||
CFE_IMPRINT = 0x1000,
|
||||
CFE_DISABLED = 0x2000,
|
||||
CFE_REVISED = 0x4000
|
||||
}
|
||||
public enum CharUnderline : byte
|
||||
{
|
||||
CFU_UNDERLINENONE = 0,
|
||||
CFU_UNDERLINE = 1,
|
||||
CFU_UNDERLINEWORD = 2, // displayed as ordinary underline
|
||||
CFU_UNDERLINEDOUBLE = 3, // displayed as ordinary underline
|
||||
CFU_UNDERLINEDOTTED = 4,
|
||||
CFU_UNDERLINEDASH = 5,
|
||||
CFU_UNDERLINEDASHDOT = 6,
|
||||
CFU_UNDERLINEDASHDOTDOT = 7,
|
||||
CFU_UNDERLINEWAVE = 8,
|
||||
CFU_UNDERLINETHICK = 9,
|
||||
CFU_INVERT = 0xFE // For IME composition fake a selection.
|
||||
}
|
||||
[Flags]
|
||||
public enum ParaFormatMasks : uint
|
||||
{
|
||||
PFM_NONE = 0,
|
||||
PFM_STARTINDENT = 0x00000001,
|
||||
PFM_RIGHTINDENT = 0x00000002,
|
||||
PFM_OFFSET = 0x00000004,
|
||||
PFM_ALIGNMENT = 0x00000008,
|
||||
PFM_TABSTOPS = 0x00000010,
|
||||
PFM_NUMBERING = 0x00000020,
|
||||
PFM_SPACEBEFORE = 0x00000040,
|
||||
PFM_SPACEAFTER = 0x00000080,
|
||||
PFM_LINESPACING = 0x00000100,
|
||||
PFM_RESERVED = 0x00000200,
|
||||
PFM_STYLE = 0x00000400,
|
||||
PFM_BORDER = 0x00000800,
|
||||
PFM_SHADING = 0x00001000,
|
||||
PFM_NUMBERINGSTYLE = 0x00002000,
|
||||
PFM_NUMBERINGTAB = 0x00004000,
|
||||
PFM_NUMBERINGSTART = 0x00008000,
|
||||
// PFM_DIR = 0x00010000,
|
||||
PFM_RTLPARA = 0x00010000,
|
||||
PFM_KEEP = 0x00020000,
|
||||
PFM_KEEPNEXT = 0x00040000,
|
||||
PFM_PAGEBREAKBEFORE = 0x00080000,
|
||||
PFM_NOLINENUMBER = 0x00100000,
|
||||
PFM_NOWIDOWCONTROL = 0x00200000,
|
||||
PFM_DONOTHYPHEN = 0x00400000,
|
||||
PFM_SIDEBYSIDE = 0x00800000,
|
||||
PFM_TABLEROWDELIMITER = 0x10000000,
|
||||
PFM_TEXTWRAPPINGBREAK = 0x20000000,
|
||||
PFM_TABLE = 0x40000000,
|
||||
PFM_OFFSETINDENT = 0x80000000
|
||||
}
|
||||
public enum ParaFormatEffects : ushort
|
||||
{
|
||||
PFE_RTLPARA = 0x0001,
|
||||
PFE_KEEP = 0x0002,
|
||||
PFE_KEEPNEXT = 0x0004,
|
||||
PFE_PAGEBREAKBEFORE = 0x0008,
|
||||
PFE_NOLINENUMBER = 0x0010,
|
||||
PFE_NOWIDOWCONTROL = 0x0020,
|
||||
PFE_DONOTHYPHEN = 0x0040,
|
||||
PFE_SIDEBYSIDE = 0x0080,
|
||||
PFE_TABLEROW = 0xc000, /* These 3 options are mutually */
|
||||
PFE_TABLECELLEND = 0x8000, /* exclusive and each imply */
|
||||
PFE_TABLECELL = 0x4000, /* that para is part of a table*/
|
||||
}
|
||||
public enum ParaAlignment : ushort
|
||||
{
|
||||
PFA_LEFT = 1,
|
||||
PFA_RIGHT = 2,
|
||||
PFA_CENTER = 3,
|
||||
PFA_JUSTIFY = 4,
|
||||
PFA_FULL_INTERWORD = 5
|
||||
}
|
||||
public enum ParaNumbering : ushort
|
||||
{
|
||||
PFN_NONE = 0,
|
||||
PFN_BULLET = 1,
|
||||
PFN_ARABIC = 2,
|
||||
PFN_LOWER = 3,
|
||||
PFN_UPPER = 4,
|
||||
PFN_LOWERROMAN = 5,
|
||||
PFN_UPPERROMAN = 6,
|
||||
PFN_UNI = 7
|
||||
}
|
||||
public enum ParaSpacing : byte
|
||||
{
|
||||
PFS_SINGLE = 0,
|
||||
PFS_ONEANDONEHALF = 1,
|
||||
PFS_DOUBLE = 2,
|
||||
PFS_EXACTSINGLEMIN = 3,
|
||||
PFS_EXACT = 4,
|
||||
PFS_EXACT20 = 5
|
||||
}
|
||||
#endregion
|
||||
#region Structures
|
||||
//struct CharRange
|
||||
//{
|
||||
// public int cpMin;
|
||||
// public int cpMax;
|
||||
//}
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)]
|
||||
public struct CharFormat2
|
||||
{
|
||||
public int cbSize;
|
||||
public uint dwMask;
|
||||
public uint dwEffects;
|
||||
public int yHeight;
|
||||
public int yOffset;
|
||||
public int crTextColor;
|
||||
public byte bCharSet;
|
||||
public byte bPitchAndFamily;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string szFaceName;
|
||||
public short wWeight;
|
||||
public short sSpacing;
|
||||
public int crBackColor;
|
||||
public int lcid;
|
||||
public int dwReserved;
|
||||
public short sStyle;
|
||||
public short wKerning;
|
||||
public byte bUnderlineType;
|
||||
public byte bAnimation;
|
||||
public byte bRevAuthor;
|
||||
public byte bReserved1;
|
||||
}
|
||||
public class CharFormatTwo
|
||||
{
|
||||
public CharFormatTwo(CharFormat2 cf)
|
||||
{
|
||||
_CharFormat2 = cf;
|
||||
}
|
||||
private CharFormat2 _CharFormat2;
|
||||
[Browsable(false)]
|
||||
public CharFormat2 CharFormat2
|
||||
{
|
||||
get { return _CharFormat2; }
|
||||
}
|
||||
[Browsable(false)]
|
||||
public int cbSize
|
||||
{
|
||||
get { return _CharFormat2.cbSize; }
|
||||
set { _CharFormat2.cbSize = value; }
|
||||
}
|
||||
[Editor(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))]
|
||||
public CharFormatMasks dwMask
|
||||
{
|
||||
get { return (CharFormatMasks)_CharFormat2.dwMask; }
|
||||
set { _CharFormat2.dwMask = (uint)value; }
|
||||
}
|
||||
[Editor(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))]
|
||||
public CharFormatEffects dwEffects
|
||||
{
|
||||
get { return (CharFormatEffects)_CharFormat2.dwEffects; }
|
||||
set { _CharFormat2.dwEffects = (uint)value; }
|
||||
}
|
||||
public int yHeight
|
||||
{
|
||||
get { return _CharFormat2.yHeight; }
|
||||
set { _CharFormat2.yHeight = value; }
|
||||
}
|
||||
public int yOffset
|
||||
{
|
||||
get { return _CharFormat2.yOffset; }
|
||||
set { _CharFormat2.yOffset = value; }
|
||||
}
|
||||
private Color Int2Color(int color)
|
||||
{
|
||||
return Color.FromArgb(color % 256, (color / 256) % 256, color / (256 * 256));
|
||||
}
|
||||
private int Color2Int(Color color)
|
||||
{
|
||||
return color.R + (color.G * 256) + (color.B * 256 * 256);
|
||||
}
|
||||
public Color crTextColor
|
||||
{
|
||||
get { return Int2Color(_CharFormat2.crTextColor); }
|
||||
set { _CharFormat2.crTextColor = Color2Int(value); }
|
||||
}
|
||||
public byte bCharSet
|
||||
{
|
||||
get { return _CharFormat2.bCharSet; }
|
||||
set { _CharFormat2.bCharSet = value; }
|
||||
}
|
||||
public byte bPitchAndFamily
|
||||
{
|
||||
get { return _CharFormat2.bPitchAndFamily; }
|
||||
set { _CharFormat2.bPitchAndFamily = value; }
|
||||
}
|
||||
public string szFaceName
|
||||
{
|
||||
get { return _CharFormat2.szFaceName; }
|
||||
set { _CharFormat2.szFaceName = value; }
|
||||
}
|
||||
public short wWeight
|
||||
{
|
||||
get { return _CharFormat2.wWeight; }
|
||||
set { _CharFormat2.wWeight = value; }
|
||||
}
|
||||
public short sSpacing
|
||||
{
|
||||
get { return _CharFormat2.sSpacing; }
|
||||
set { _CharFormat2.sSpacing = value; }
|
||||
}
|
||||
public Color crBackColor
|
||||
{
|
||||
get { return Int2Color(_CharFormat2.crBackColor); }
|
||||
set { _CharFormat2.crBackColor = Color2Int(value); }
|
||||
}
|
||||
public int lcid
|
||||
{
|
||||
get { return _CharFormat2.lcid; }
|
||||
set { _CharFormat2.lcid = value; }
|
||||
}
|
||||
public int dwReserved
|
||||
{
|
||||
get { return _CharFormat2.dwReserved; }
|
||||
set { _CharFormat2.dwReserved = value; }
|
||||
}
|
||||
public short sStyle
|
||||
{
|
||||
get { return _CharFormat2.sStyle; }
|
||||
set { _CharFormat2.sStyle = value; }
|
||||
}
|
||||
public short wKerning
|
||||
{
|
||||
get { return _CharFormat2.wKerning; }
|
||||
set { _CharFormat2.wKerning = value; }
|
||||
}
|
||||
public CharUnderline bUnderlineType
|
||||
{
|
||||
get { return (CharUnderline)_CharFormat2.bUnderlineType; }
|
||||
set { _CharFormat2.bUnderlineType = (byte)value; }
|
||||
}
|
||||
public byte bAnimation
|
||||
{
|
||||
get { return _CharFormat2.bAnimation; }
|
||||
set { _CharFormat2.bAnimation = value; }
|
||||
}
|
||||
public byte bRevAuthor
|
||||
{
|
||||
get { return _CharFormat2.bRevAuthor; }
|
||||
set { _CharFormat2.bRevAuthor = value; }
|
||||
}
|
||||
public byte bReserved1
|
||||
{
|
||||
get { return _CharFormat2.bReserved1; }
|
||||
set { _CharFormat2.bReserved1 = value; }
|
||||
}
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 4)]
|
||||
public struct ParaFormat2
|
||||
{
|
||||
public int cbSize;
|
||||
public int dwMask;
|
||||
public ushort wNumbering;
|
||||
public short wEffects;
|
||||
public int dxStartIndent;
|
||||
public int dxRightIndent;
|
||||
public int dxOffset;
|
||||
public short wAlignment;
|
||||
public short cTabCount;
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
||||
public int[] rgxTabs;
|
||||
public int dySpaceBefore;
|
||||
public int dySpaceAfter;
|
||||
public int dyLineSpacing;
|
||||
public short sStyle;
|
||||
public byte bLineSpacingRule;
|
||||
public byte bOutlineLevel;
|
||||
public short wShadingWeight;
|
||||
public short wShadingStyle;
|
||||
public short wNumberingStart;
|
||||
public short wNumberingStyle;
|
||||
public short wNumberingTab;
|
||||
public short wBorderSpace;
|
||||
public short wBorderWidth;
|
||||
public short wBorders;
|
||||
}
|
||||
public class ParaFormatTwo
|
||||
{
|
||||
private ParaFormat2 _ParaFormat2;
|
||||
public ParaFormatTwo(ParaFormat2 pf)
|
||||
{
|
||||
_ParaFormat2 = pf;
|
||||
}
|
||||
public ParaFormat2 ParaFormat2
|
||||
{
|
||||
get { return _ParaFormat2; }
|
||||
}
|
||||
public int cbSize
|
||||
{
|
||||
get { return _ParaFormat2.cbSize; }
|
||||
set { _ParaFormat2.cbSize = value; }
|
||||
}
|
||||
[Editor(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))]
|
||||
public ParaFormatMasks dwMask
|
||||
{
|
||||
get { return (ParaFormatMasks)_ParaFormat2.dwMask; }
|
||||
set { _ParaFormat2.dwMask = (int)value; }
|
||||
}
|
||||
public ParaNumbering wNumbering
|
||||
{
|
||||
get { return (ParaNumbering)_ParaFormat2.wNumbering; }
|
||||
set { _ParaFormat2.wNumbering = (ushort)value; }
|
||||
}
|
||||
public ParaFormatEffects wEffects
|
||||
{
|
||||
get { return (ParaFormatEffects)_ParaFormat2.wEffects; }
|
||||
set { _ParaFormat2.wEffects = (short)value; }
|
||||
}
|
||||
public int dxStartIndent
|
||||
{
|
||||
get { return _ParaFormat2.dxStartIndent; }
|
||||
set { _ParaFormat2.dxStartIndent = value; }
|
||||
}
|
||||
public int dxRightIndent
|
||||
{
|
||||
get { return _ParaFormat2.dxRightIndent; }
|
||||
set { _ParaFormat2.dxRightIndent = value; }
|
||||
}
|
||||
public int dxOffset
|
||||
{
|
||||
get { return _ParaFormat2.dxOffset; }
|
||||
set { _ParaFormat2.dxOffset = value; }
|
||||
}
|
||||
public ParaAlignment wAlignment
|
||||
{
|
||||
get { return (ParaAlignment)_ParaFormat2.wAlignment; }
|
||||
set { _ParaFormat2.wAlignment = (short)value; }
|
||||
}
|
||||
public short cTabCount
|
||||
{
|
||||
get { return _ParaFormat2.cTabCount; }
|
||||
set { _ParaFormat2.cTabCount = value; }
|
||||
}
|
||||
public int[] rgxTabs
|
||||
{
|
||||
get { return _ParaFormat2.rgxTabs; }
|
||||
set { _ParaFormat2.rgxTabs = value; }
|
||||
}
|
||||
public int dySpaceBefore
|
||||
{
|
||||
get { return _ParaFormat2.dySpaceBefore; }
|
||||
set { _ParaFormat2.dySpaceBefore = value; }
|
||||
}
|
||||
public int dySpaceAfter
|
||||
{
|
||||
get { return _ParaFormat2.dySpaceAfter; }
|
||||
set { _ParaFormat2.dySpaceAfter = value; }
|
||||
}
|
||||
public int dyLineSpacing
|
||||
{
|
||||
get { return _ParaFormat2.dyLineSpacing; }
|
||||
set { _ParaFormat2.dyLineSpacing = value; }
|
||||
}
|
||||
public short sStyle
|
||||
{
|
||||
get { return _ParaFormat2.sStyle; }
|
||||
set { _ParaFormat2.sStyle = value; }
|
||||
}
|
||||
public ParaSpacing bLineSpacingRule
|
||||
{
|
||||
get { return (ParaSpacing)_ParaFormat2.bLineSpacingRule; }
|
||||
set { _ParaFormat2.bLineSpacingRule = (byte)value; }
|
||||
}
|
||||
public byte bOutlineLevel
|
||||
{
|
||||
get { return _ParaFormat2.bOutlineLevel; }
|
||||
set { _ParaFormat2.bOutlineLevel = value; }
|
||||
}
|
||||
public short wShadingWeight
|
||||
{
|
||||
get { return _ParaFormat2.wShadingWeight; }
|
||||
set { _ParaFormat2.wShadingWeight = value; }
|
||||
}
|
||||
public short wShadingStyle
|
||||
{
|
||||
get { return _ParaFormat2.wShadingStyle; }
|
||||
set { _ParaFormat2.wShadingStyle = value; }
|
||||
}
|
||||
public short wNumberingStart
|
||||
{
|
||||
get { return _ParaFormat2.wNumberingStart; }
|
||||
set { _ParaFormat2.wNumberingStart = value; }
|
||||
}
|
||||
public short wNumberingStyle
|
||||
{
|
||||
get { return _ParaFormat2.wNumberingStyle; }
|
||||
set { _ParaFormat2.wNumberingStyle = value; }
|
||||
}
|
||||
public short wNumberingTab
|
||||
{
|
||||
get { return _ParaFormat2.wNumberingTab; }
|
||||
set { _ParaFormat2.wNumberingTab = value; }
|
||||
}
|
||||
public short wBorderSpace
|
||||
{
|
||||
get { return _ParaFormat2.wBorderSpace; }
|
||||
set { _ParaFormat2.wBorderSpace = value; }
|
||||
}
|
||||
public short wBorderWidth
|
||||
{
|
||||
get { return _ParaFormat2.wBorderWidth; }
|
||||
set { _ParaFormat2.wBorderWidth = value; }
|
||||
}
|
||||
public short wBorders
|
||||
{
|
||||
get { return _ParaFormat2.wBorders; }
|
||||
set { _ParaFormat2.wBorders = value; }
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Static Methods
|
||||
public static void SetScrollLocation(RichTextBox richTextBox, Point point)
|
||||
{
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_SETSCROLLPOS, 0, ref point) == 0)
|
||||
throw new Win32Exception();
|
||||
}
|
||||
public static Point GetScrollLocation(RichTextBox richTextBox)
|
||||
{
|
||||
Point pt = new Point();
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_GETSCROLLPOS, 0, ref pt) == 0)
|
||||
throw new Win32Exception();
|
||||
return pt;
|
||||
}
|
||||
public static void SetBackgroundColor(RichTextBox richTextBox, Color color)
|
||||
{
|
||||
int clr = color.R + (color.G * 256) + (color.B * 256 * 256);
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_SETBKGNDCOLOR, 0, clr) == 0)
|
||||
throw new Win32Exception();
|
||||
}
|
||||
public static void SetAuto(RichTextBox richTextBox)
|
||||
{
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_SETOPTIONS, (int)EcoOperations.ECOOP_XOR, (int)EditControlOptions.ECO_AUTOWORDSELECTION) == 0)
|
||||
throw new Win32Exception();
|
||||
}
|
||||
public static ParaFormatTwo GetParaFormat(RichTextBox richTextBox)
|
||||
{
|
||||
ParaFormat2 pf = new ParaFormat2();
|
||||
pf.cbSize = Marshal.SizeOf(pf);
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_GETPARAFORMAT, 0, ref pf) == 0)
|
||||
throw new Win32Exception();
|
||||
return new ParaFormatTwo(pf);
|
||||
}
|
||||
public static void SetParaFormat(RichTextBox richTextBox, ParaFormatTwo pft)
|
||||
{
|
||||
ParaFormat2 pf2 = pft.ParaFormat2;
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_SETPARAFORMAT, 0, ref pf2) == 0)
|
||||
{
|
||||
//if(Marshal.GetLastWin32Error()!=0)
|
||||
throw new Win32Exception();
|
||||
}
|
||||
}
|
||||
public static CharFormatTwo GetCharFormat(RichTextBox richTextBox, RTBSelection selection)
|
||||
{
|
||||
CharFormat2 cf = new CharFormat2();
|
||||
cf.cbSize = Marshal.SizeOf(cf);
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_GETCHARFORMAT, selection, ref cf) == 0)
|
||||
throw new Win32Exception();
|
||||
return new CharFormatTwo(cf);
|
||||
}
|
||||
public static void SetCharFormat(RichTextBox richTextBox, RTBSelection selection, CharFormatTwo cft)
|
||||
{
|
||||
CharFormat2 cf2 = cft.CharFormat2;
|
||||
if (SendMessage(new HandleRef(richTextBox, richTextBox.Handle), Messages.EM_SETCHARFORMAT, selection, ref cf2) == 0)
|
||||
throw new Win32Exception();
|
||||
}
|
||||
public static void SetHighlightColor(RichTextBox richTextBox, RTBSelection selection, Color color)
|
||||
{
|
||||
CharFormatTwo cft = GetCharFormat(richTextBox, selection);
|
||||
cft.crBackColor = color;
|
||||
cft.dwEffects = 0;
|
||||
cft.dwMask = 0;
|
||||
cft.dwMask |= CharFormatMasks.CFM_BACKCOLOR;
|
||||
SetCharFormat(richTextBox, selection, cft);
|
||||
}
|
||||
public static void SetLineSpacing(RichTextBox richTextBox, ParaSpacing type)
|
||||
{
|
||||
ParaFormatTwo pft = GetParaFormat(richTextBox);
|
||||
pft.bLineSpacingRule = type; // For now: RTBAPI.ParaSpacing.PFS_EXACT;
|
||||
pft.dwMask = 0;
|
||||
pft.dwMask |= ParaFormatMasks.PFM_LINESPACING;
|
||||
pft.dwMask |= ParaFormatMasks.PFM_SPACEAFTER;
|
||||
|
||||
// get the monitor's resolution in DPI and use it to set the linespacing value for
|
||||
// the richtextbox. Note that without this, the Arial Unicode font made the appearance of
|
||||
// almost double linespacing. Using PFS_Exact makes it appear as regular single spacing.
|
||||
Graphics g = richTextBox.CreateGraphics();
|
||||
int dpi = Convert.ToInt32((g.DpiX + g.DpiY) / 2);
|
||||
g.Dispose();
|
||||
// dyLineSpacing is Spacing between lines. the PFS_EXACT sets line spacing as the spacing from one
|
||||
//line to the next, in twips - thus the 1440.
|
||||
|
||||
pft.dyLineSpacing = Convert.ToInt32(.5 + richTextBox.SelectionFont.GetHeight(dpi)) * 1440 / dpi;
|
||||
SetParaFormat(richTextBox, pft);
|
||||
}
|
||||
public static bool IsSuperScript(RichTextBox richTextBox)
|
||||
{
|
||||
CharFormatTwo cft = GetCharFormat(richTextBox, RTBSelection.SCF_SELECTION);
|
||||
return ((cft.dwEffects & CharFormatEffects.CFE_SUPERSCRIPT) == CharFormatEffects.CFE_SUPERSCRIPT);
|
||||
}
|
||||
|
||||
public static bool IsSubScript(RichTextBox richTextBox)
|
||||
{
|
||||
CharFormatTwo cft = GetCharFormat(richTextBox, RTBSelection.SCF_SELECTION);
|
||||
return ((cft.dwEffects & CharFormatEffects.CFE_SUBSCRIPT) == CharFormatEffects.CFE_SUBSCRIPT);
|
||||
}
|
||||
public static void ToggleSubscript(bool bSet, RichTextBox richTextBox, RTBSelection selection)
|
||||
{
|
||||
CharFormatTwo cft = GetCharFormat(richTextBox, selection); // RTBSelection.SCF_SELECTION);
|
||||
if (bSet)
|
||||
{
|
||||
cft.dwEffects |= CharFormatEffects.CFE_SUBSCRIPT;
|
||||
cft.dwMask |= CharFormatMasks.CFM_SUBSCRIPT;
|
||||
}
|
||||
else
|
||||
{
|
||||
cft.dwEffects &= ~RTBAPI.CharFormatEffects.CFE_SUBSCRIPT;
|
||||
}
|
||||
SetCharFormat(richTextBox, selection, cft);
|
||||
}
|
||||
public static void ToggleSuperscript(bool bSet, RichTextBox richTextBox, RTBSelection selection)
|
||||
{
|
||||
CharFormatTwo cft = RTBAPI.GetCharFormat(richTextBox, selection); // RTBAPI.RTBSelection.SCF_SELECTION);
|
||||
if (bSet)
|
||||
{
|
||||
cft.dwEffects |= RTBAPI.CharFormatEffects.CFE_SUPERSCRIPT;
|
||||
cft.dwMask |= RTBAPI.CharFormatMasks.CFM_SUPERSCRIPT;
|
||||
}
|
||||
else
|
||||
{
|
||||
cft.dwEffects &= ~RTBAPI.CharFormatEffects.CFE_SUPERSCRIPT;
|
||||
}
|
||||
SetCharFormat(richTextBox, selection, cft);
|
||||
}
|
||||
public static bool IsLink(RichTextBox richTextBox)
|
||||
{
|
||||
CharFormatTwo cft = GetCharFormat(richTextBox, RTBSelection.SCF_SELECTION);
|
||||
return ((cft.dwEffects & CharFormatEffects.CFE_PROTECTED) == CharFormatEffects.CFE_PROTECTED);
|
||||
}
|
||||
public static void UnProtect(RichTextBox richTextBox) //, string type, string text, string link)
|
||||
{
|
||||
//richTextBox.DetectUrls = false;
|
||||
CharFormatTwo cft = GetCharFormat(richTextBox, RTBAPI.RTBSelection.SCF_SELECTION); ;
|
||||
//int position = richTextBox.SelectionStart = richTextBox.TextLength;
|
||||
//richTextBox.SelectionLength = 0;
|
||||
//richTextBox.SelectedRtf = @"{\rtf1\ansi " + text + @"\v #" + link + @"\v0}";
|
||||
//richTextBox.SelectedRtf = "{" + string.Format(@"\rtf1\ansi\protect\v {0}\v0 {1}\v #{2}", type, text, link) + "}";
|
||||
//richTextBox.Select(position, type.Length + text.Length + link.Length + 1);
|
||||
cft.dwMask = RTBAPI.CharFormatMasks.CFM_PROTECTED;
|
||||
cft.dwEffects = 0;
|
||||
// The lines below can be used to allow link text to be edited
|
||||
//charFormat.dwMask = RTBAPI.CharFormatMasks.CFM_LINK;
|
||||
//charFormat.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK;
|
||||
SetCharFormat(richTextBox, RTBSelection.SCF_SELECTION, cft);
|
||||
//rtbRTF.SetSelectionLink(true);
|
||||
//richTextBox.SelectionStart = richTextBox.TextLength;
|
||||
//richTextBox.SelectionLength = 0;
|
||||
}
|
||||
public static void SetLink(RichTextBox richTextBox, string type, string text, string link)
|
||||
{
|
||||
richTextBox.DetectUrls = false;
|
||||
CharFormatTwo cft = GetCharFormat(richTextBox, RTBAPI.RTBSelection.SCF_SELECTION); ;
|
||||
int position = richTextBox.SelectionStart = richTextBox.TextLength;
|
||||
richTextBox.SelectionLength = 0;
|
||||
//richTextBox.SelectedRtf = @"{\rtf1\ansi " + text + @"\v #" + link + @"\v0}";
|
||||
richTextBox.SelectedRtf = "{" + string.Format(@"\rtf1\ansi\protect\v {0}\v0 {1}\v #{2}", type, text, link) + "}";
|
||||
richTextBox.Select(position, type.Length + text.Length + link.Length + 1);
|
||||
cft.dwMask = RTBAPI.CharFormatMasks.CFM_LINK | RTBAPI.CharFormatMasks.CFM_PROTECTED;
|
||||
cft.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK | RTBAPI.CharFormatEffects.CFE_PROTECTED;
|
||||
// The lines below can be used to allow link text to be edited
|
||||
//charFormat.dwMask = RTBAPI.CharFormatMasks.CFM_LINK;
|
||||
//charFormat.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK;
|
||||
SetCharFormat(richTextBox, RTBSelection.SCF_SELECTION, cft);
|
||||
//rtbRTF.SetSelectionLink(true);
|
||||
richTextBox.SelectionStart = richTextBox.TextLength;
|
||||
richTextBox.SelectionLength = 0;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
36
PROMS/Volian.Controls.Library/RichTextBox41.Designer.cs
generated
Normal file
36
PROMS/Volian.Controls.Library/RichTextBox41.Designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class RichTextBox41
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
45
PROMS/Volian.Controls.Library/RichTextBox41.cs
Normal file
45
PROMS/Volian.Controls.Library/RichTextBox41.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Drawing;
|
||||
using VEPROMS.CSLA.Library;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public partial class RichTextBox41 : RichTextBox
|
||||
{
|
||||
[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;
|
||||
}
|
||||
}
|
||||
|
||||
public RichTextBox41()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public RichTextBox41(IContainer container)
|
||||
{
|
||||
container.Add(this);
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
54
PROMS/Volian.Controls.Library/RomanNumeral.cs
Normal file
54
PROMS/Volian.Controls.Library/RomanNumeral.cs
Normal file
@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public static class RomanNumeral
|
||||
{
|
||||
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private enum RomanOffset : int
|
||||
{
|
||||
Hundreds = 2,
|
||||
Tens = 4,
|
||||
Units = 6
|
||||
}
|
||||
private static string _Romans = "MDCLXVI";
|
||||
private static string RomanPart(RomanOffset offset, int value)
|
||||
{
|
||||
int iFive = value / 5;
|
||||
int iUnits = value % 5;
|
||||
int iFour = iUnits / 4;
|
||||
return _Romans.Substring(((int)offset), iFour) +
|
||||
_Romans.Substring(((int)offset) - iFive - iFour, iFive | iFour) +
|
||||
"".PadRight(iUnits % 4, _Romans[((int)offset)]);
|
||||
}
|
||||
public static string Convert(int number)
|
||||
{
|
||||
int thousands = number / 1000;
|
||||
int hundreds = (number % 1000) / 100;
|
||||
int tens = (number % 100) / 10;
|
||||
int units = number % 10;
|
||||
return "".PadRight(thousands, _Romans[0]) +
|
||||
RomanPart(RomanOffset.Hundreds, hundreds) +
|
||||
RomanPart(RomanOffset.Tens, tens) +
|
||||
RomanPart(RomanOffset.Units, units);
|
||||
}
|
||||
// private static int[] _TestRomans = new int[] {
|
||||
// 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,30,40,50,60,69,70,80,90,99,
|
||||
// 100,200,400,500,600,666,700,800,900,1000,1444,1666,1945,1997,1999,2000,2007,3000
|
||||
// };
|
||||
// public static void ShowRomans()
|
||||
// {
|
||||
// for (int i = 0; i < _TestRomans.Length; i++)
|
||||
// {
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", _TestRomans[i], Convert(_TestRomans[i]));
|
||||
// }
|
||||
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 4, Convert(4));
|
||||
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 5, Convert(5));
|
||||
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 6, Convert(6));
|
||||
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 8, Convert(8));
|
||||
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 9, Convert(9));
|
||||
// }
|
||||
}
|
||||
}
|
125
PROMS/Volian.Controls.Library/TemporaryFormat.cs
Normal file
125
PROMS/Volian.Controls.Library/TemporaryFormat.cs
Normal file
@ -0,0 +1,125 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using VEPROMS.CSLA.Library;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
class TemporaryFormat
|
||||
{
|
||||
private static string[] _TabFormats = new string[] {
|
||||
"<seq>",// 0 //STANDARD
|
||||
" <number> ",// 1 //HIGH
|
||||
"[<number>] ",// 2 //IMMEDIATE
|
||||
"o ",// 3 //AND
|
||||
"o ",// 4 //OR
|
||||
"CAUTION ",// 5 //CAUTION
|
||||
"NOTE ",// 6 //NOTE
|
||||
"",// 7 //TABLE
|
||||
" <number>* ",// 8 //CONTINUOUS
|
||||
"",// 9 //AERTABLE
|
||||
"o ",// 10 //EQUIPMENTLIST
|
||||
"",// 11 //TITLE
|
||||
"",// 12 //PAGENUMBER
|
||||
"o ",// 13 //EQUIPMENTWBLANK
|
||||
"",// 14 //PROCNUMBER
|
||||
"",// 15 //REVNUMBER
|
||||
"",// 16 //ACCPAGES
|
||||
"",// 17 //LOSSOFAC
|
||||
"o ",// 18 //EXPLICITAND
|
||||
"CAUTION ",// 19 //CAUTION1
|
||||
"CAUTION ",// 20 //CAUTION2
|
||||
"NOTE ",// 21 //NOTE1
|
||||
"NOTE ",// 22 //NOTE2
|
||||
"",// 23 //PARAGRAPH
|
||||
"",// 24 //DEFAULT
|
||||
"NOTE ",// 25 //NOTE3
|
||||
"CAUTION ",// 26 //CAUTION3
|
||||
"NOTE ",// 27 //NOTE4
|
||||
"CAUTION ",// 28 //CAUTION4
|
||||
"o ",// 29 //EQUIPMENTOPT
|
||||
"o ",// 30 //EQUIPMENTOPTWBLANK
|
||||
"NOTE ",// 31 //NOTE5
|
||||
"",// 32 //BORDERLESSAERTABLE
|
||||
"",// 33 //BORDERLESSTABLE
|
||||
"o ",// 34 //IMPLICITOR
|
||||
"",// 35 //FIGURE
|
||||
"",// 36 //AERFIGURE
|
||||
"",// 37 //BORDERLESSFIGURE
|
||||
"",// 38 //BORDERLESSAERFIGURE
|
||||
"",// 39 //RNOTYPE
|
||||
" <number>! ",// 40 //HIGH5
|
||||
"",// 41 //TITLEWITHTEXTRIGHT
|
||||
"",// 42 //TITLEWITHTEXTBELOW
|
||||
"",// 43 //CONTACSEQUENTIAL
|
||||
"o ",// 44 //CONTACAND
|
||||
"o ",// 45 //CONTACOR
|
||||
"" // 46 //CONTACPARAGRAPH
|
||||
};
|
||||
private static string[] SeqTabFormat = new string[] {
|
||||
"<number>. ",
|
||||
"<alpha>. ",
|
||||
"<number>) ",
|
||||
"<alpha>) "
|
||||
};
|
||||
public static string TabFormat(DisplayItem myVlnCSLARTB)
|
||||
{
|
||||
string format = string.Empty;
|
||||
if (myVlnCSLARTB.MyItem != null)
|
||||
{
|
||||
int typ = (int)myVlnCSLARTB.MyItem.MyContent.Type;
|
||||
if (typ >= 20000)
|
||||
{
|
||||
if (myVlnCSLARTB.RNOLevel > 0 && IsRNO(myVlnCSLARTB.MyItem)) return "";
|
||||
// Step 1: Get TabFormat from Format
|
||||
format = _TabFormats[typ % 10000];
|
||||
if (format == "<seq>")
|
||||
{
|
||||
format = SeqTabFormat[myVlnCSLARTB.SeqLevel % SeqTabFormat.Length];
|
||||
}
|
||||
}
|
||||
}
|
||||
return format;
|
||||
}
|
||||
public static string TabFormat(ItemInfo item, int seqLevel)
|
||||
{
|
||||
string format = string.Empty;
|
||||
if (item != null)
|
||||
{
|
||||
if (IsRNO(item)) return "";
|
||||
if ((item.MyContent.Type / 10000) == 2)
|
||||
{
|
||||
// Step 1: Get TabFormat from Format
|
||||
format = _TabFormats[((int)item.MyContent.Type) % 10000];
|
||||
if (format == "<seq>")
|
||||
{
|
||||
format = SeqTabFormat[seqLevel];
|
||||
}
|
||||
}
|
||||
}
|
||||
return format;
|
||||
}
|
||||
// TODO: Move these to ItemExt.cs as properties
|
||||
public static bool IsHigh(ItemInfo item)
|
||||
{
|
||||
// check to see if ActiveParent is a section
|
||||
if(item.MyContent.Type / 10000 != 2)return false;
|
||||
ItemInfo parent = (ItemInfo)item.ActiveParent;
|
||||
if ((parent.MyContent.Type / 10000) == 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
public static bool IsSequential(ItemInfo item)
|
||||
{
|
||||
//if (IsHigh(item)) return true;
|
||||
if (((item.MyContent.Type / 10000) == 2) && ((((int)item.MyContent.Type) % 10000) == 0)) return true;
|
||||
return false;
|
||||
}
|
||||
public static bool IsRNO(ItemInfo item)
|
||||
{
|
||||
if(item != null)
|
||||
return ((item.ItemPartCount > 0) && (item.ItemParts[0].PartType == E_FromType.RNO));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
134
PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj
Normal file
134
PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj
Normal file
@ -0,0 +1,134 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.50727</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{8556527C-6615-487F-8AF7-22EBC3EF0268}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Volian.Controls.Library</RootNamespace>
|
||||
<AssemblyName>Volian.Controls.Library</AssemblyName>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Csla, Version=2.1.4.0, Culture=neutral, PublicKeyToken=93be5fdc093e4c30, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>F:\CSLA\csla20cs-2.1.4-070223\csla20cs\csla20cs\Csla\bin\Debug\Csla.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="DevComponents.DotNetBar2, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7eb7c3a35b91de04, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>C:\Program Files\DotNetBar\DevComponents.DotNetBar2.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>F:\Log4Net\log4net-1.2.10\bin\net\2.0\debug\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="VEPROMS.CSLA.Library, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\VEPROMS.CSLA.Library\bin\Debug\VEPROMS.CSLA.Library.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AlphabeticalNumbering.cs" />
|
||||
<Compile Include="DisplayItem.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DisplayItem.designer.cs">
|
||||
<DependentUpon>DisplayItem.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="DisplayPanel.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DisplayPanel.designer.cs">
|
||||
<DependentUpon>DisplayPanel.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="DisplayRTBSimple.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DisplayRTBSimple.designer.cs">
|
||||
<DependentUpon>DisplayRTBSimple.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FlagEnumEditor.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="RichTextBox41.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="RichTextBox41.Designer.cs">
|
||||
<DependentUpon>RichTextBox41.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="RomanNumeral.cs" />
|
||||
<Compile Include="RTBAPI.cs" />
|
||||
<Compile Include="TemporaryFormat.cs" />
|
||||
<Compile Include="vlnExpander.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="vlnExpander.designer.cs">
|
||||
<DependentUpon>vlnExpander.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="DisplayRTB.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DisplayRTB.designer.cs">
|
||||
<DependentUpon>DisplayRTB.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="vlnTreeView.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="vlnTreeView.Designer.cs">
|
||||
<DependentUpon>vlnTreeView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="DisplayItem.resx">
|
||||
<DependentUpon>DisplayItem.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="vlnExpander.resx">
|
||||
<DependentUpon>vlnExpander.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="DisplayRTB.resx">
|
||||
<DependentUpon>DisplayRTB.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
@ -0,0 +1,10 @@
|
||||
""
|
||||
{
|
||||
"FILE_VERSION" = "9237"
|
||||
"ENLISTMENT_CHOICE" = "NEVER"
|
||||
"PROJECT_FILE_RELATIVE_PATH" = ""
|
||||
"NUMBER_OF_EXCLUDED_FILES" = "0"
|
||||
"ORIGINAL_PROJECT_FILE_PATH" = ""
|
||||
"NUMBER_OF_NESTED_PROJECTS" = "0"
|
||||
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
|
||||
}
|
221
PROMS/Volian.Controls.Library/vlnExpander.cs
Normal file
221
PROMS/Volian.Controls.Library/vlnExpander.cs
Normal file
@ -0,0 +1,221 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public enum ExpanderStyle : int
|
||||
{
|
||||
Square, Round
|
||||
}
|
||||
public delegate void vlnExpanderEvent(object sender, vlnExpanderEventArgs args);
|
||||
public partial class vlnExpander : UserControl
|
||||
{
|
||||
#region Events
|
||||
public event vlnExpanderEvent BeforeExpand;
|
||||
private void OnBeforeExpand(object sender, vlnExpanderEventArgs args)
|
||||
{
|
||||
if (BeforeExpand != null) BeforeExpand(sender, args);
|
||||
}
|
||||
public event vlnExpanderEvent BeforeColapse;
|
||||
private void OnBeforeColapse(object sender, vlnExpanderEventArgs args)
|
||||
{
|
||||
if (BeforeColapse != null) BeforeColapse(sender, args);
|
||||
}
|
||||
public event vlnExpanderEvent AttachmentClick;
|
||||
private void OnAttachmentClick(object sender, vlnExpanderEventArgs args)
|
||||
{
|
||||
if (AttachmentClick != null) AttachmentClick(sender, args);
|
||||
}
|
||||
#endregion
|
||||
public vlnExpander()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
private bool _Expanded;
|
||||
public bool Expanded
|
||||
{
|
||||
get { return _Expanded; }
|
||||
set
|
||||
{
|
||||
if (value) OnBeforeExpand(this, new vlnExpanderEventArgs());
|
||||
else OnBeforeColapse(this, new vlnExpanderEventArgs());
|
||||
_Expanded = value;
|
||||
this.Refresh();
|
||||
}
|
||||
}
|
||||
public void ShowExpanded()
|
||||
{
|
||||
_Expanded = true;
|
||||
this.Refresh();
|
||||
}
|
||||
private int _Trans1 = 128;
|
||||
public int Trans1
|
||||
{
|
||||
get { return _Trans1; }
|
||||
set
|
||||
{
|
||||
_Trans1 = value;
|
||||
this.Refresh();
|
||||
}
|
||||
}
|
||||
private int _Trans2 = 128;
|
||||
public int Trans2
|
||||
{
|
||||
get { return _Trans2; }
|
||||
set
|
||||
{
|
||||
_Trans2 = value; this.Refresh();
|
||||
}
|
||||
}
|
||||
private Color _Color1 = Color.Aquamarine;
|
||||
public Color Color1
|
||||
{
|
||||
get { return _Color1; }
|
||||
set
|
||||
{
|
||||
_Color1 = value; this.Refresh();
|
||||
}
|
||||
}
|
||||
private Color _Color2 = Color.Violet;
|
||||
public Color Color2
|
||||
{
|
||||
get { return _Color2; }
|
||||
set
|
||||
{
|
||||
_Color2 = value; this.Refresh();
|
||||
}
|
||||
}
|
||||
private int _PenWidth = 0;
|
||||
public int PenWidth
|
||||
{
|
||||
get { return _PenWidth; }
|
||||
set { _PenWidth = value; this.Refresh(); }
|
||||
}
|
||||
private int _WidthFactor=7;
|
||||
public int WidthFactor
|
||||
{
|
||||
get { return _WidthFactor; }
|
||||
set { _WidthFactor = value; this.Refresh(); }
|
||||
}
|
||||
private Color _BorderColor=Color.Silver;
|
||||
public Color BorderColor
|
||||
{
|
||||
get { return _BorderColor; }
|
||||
set { _BorderColor = value; this.Refresh(); }
|
||||
}
|
||||
private int _GradientAngle=45;
|
||||
public int GradientAngle
|
||||
{
|
||||
get { return _GradientAngle; }
|
||||
set { _GradientAngle = value; this.Refresh(); }
|
||||
}
|
||||
private bool _Attachment = false;
|
||||
public bool Attachment
|
||||
{
|
||||
get { return _Attachment; }
|
||||
set { _Attachment = value; this.Refresh(); }
|
||||
}
|
||||
private ExpanderStyle _Style = ExpanderStyle.Square;
|
||||
public ExpanderStyle Style
|
||||
{
|
||||
get { return _Style; }
|
||||
set { _Style = value; this.Refresh(); }
|
||||
}
|
||||
private void vlnExpander_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
Color c1 = Color.FromArgb(_Trans1, _Color1);
|
||||
Color c2 = Color.FromArgb(_Trans2, _Color2);
|
||||
Brush b = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, c1, c2, _GradientAngle);
|
||||
//Brush b2 = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, c2, c2, _GradientAngle);
|
||||
Pen p = new Pen(ForeColor);
|
||||
Brush b2 = p.Brush;
|
||||
float smallest = this.Width;
|
||||
if (this.Height < this.Width) smallest = this.Height;
|
||||
float weight = (smallest - 1) / 12;
|
||||
float radius = (smallest - 1) / 2;
|
||||
float diameter = 2 * radius;
|
||||
if (this.Height <= diameter) diameter = this.Height - 1;
|
||||
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
||||
p = new Pen(_BorderColor, _PenWidth);
|
||||
int penWidth = ClientRectangle.Width / _WidthFactor;
|
||||
switch (_Style)
|
||||
{
|
||||
case ExpanderStyle.Round:
|
||||
//e.Graphics.FillEllipse(Brushes.Gray, 0F, 0F, diameter, diameter);
|
||||
//e.Graphics.DrawRectangle(p, new Rectangle(0, 0, leg * 2 + penWidth * 3, leg * 2 + penWidth * 3));
|
||||
// Draw a white cross-hair
|
||||
//e.Graphics.FillRectangle(Brushes.White, 2 * weight , radius - weight, diameter - 4 * weight, weight * 2);
|
||||
//e.Graphics.FillRectangle(Brushes.White, radius - weight, 2 * weight, weight * 2, diameter - 4 * weight);
|
||||
if(!Attachment) e.Graphics.FillEllipse(b, 0F, 0F, diameter, diameter);
|
||||
DrawInterior(e, b, b2, weight, radius, diameter);
|
||||
e.Graphics.DrawEllipse(p, 0, 0, diameter, diameter);
|
||||
p.Dispose();
|
||||
b.Dispose();
|
||||
b2.Dispose();
|
||||
break;
|
||||
case ExpanderStyle.Square:
|
||||
//c1 = Color.FromArgb(_Trans1, _Color1);
|
||||
//c2 = Color.FromArgb(_Trans2, _Color2);
|
||||
//b = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, c1, c2, _GradientAngle);
|
||||
int leg = ((ClientRectangle.Width - 3 * penWidth) / 2) - 1;
|
||||
if (!Attachment) e.Graphics.FillRectangle(b, new Rectangle(0, 0, leg * 2 + penWidth * 3, leg * 2 + penWidth * 3));
|
||||
int center = leg + penWidth;
|
||||
int limit = 2 * (penWidth + leg);
|
||||
p = new Pen(_BorderColor, _PenWidth);
|
||||
e.Graphics.DrawRectangle(p, new Rectangle(0, 0, leg * 2 + penWidth * 3, leg * 2 + penWidth * 3));
|
||||
//b = new SolidBrush(this.ForeColor);
|
||||
DrawInterior(e, b, b2, weight, radius, diameter);
|
||||
//e.Graphics.FillRectangle(b, new Rectangle(penWidth, center, leg * 2 + penWidth, penWidth));
|
||||
//if (!_Expanded) e.Graphics.FillRectangle(b, new Rectangle(center, penWidth, penWidth, leg * 2 + penWidth));
|
||||
////pe.Graphics.DrawLine(p, new Point(penWidth, center), new Point(limit, center));
|
||||
////if (!Expanded) pe.Graphics.DrawLine(p, new Point(center, penWidth), new Point(center, limit));
|
||||
p.Dispose();
|
||||
b.Dispose();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawInterior(PaintEventArgs e, Brush bBackground, Brush bForeground, float weight, float radius, float diameter)
|
||||
{
|
||||
if (Attachment)
|
||||
{
|
||||
PointF[] myArrow = new PointF[7];
|
||||
myArrow[0] = new PointF(7 * weight, 3 * weight);
|
||||
myArrow[1] = new PointF(11 * weight, 6 * weight);
|
||||
myArrow[2] = new PointF(7 * weight, 9 * weight);
|
||||
myArrow[3] = new PointF(7 * weight, 7 * weight);
|
||||
myArrow[4] = new PointF(2 * weight, 7 * weight);
|
||||
myArrow[5] = new PointF(2 * weight, 5 * weight);
|
||||
myArrow[6] = new PointF(7 * weight, 5 * weight);
|
||||
e.Graphics.FillPolygon(bBackground, myArrow);
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Graphics.FillRectangle(bForeground, 2 * weight, radius - weight, diameter - 4 * weight, weight * 2);
|
||||
if (!_Expanded) e.Graphics.FillRectangle(bForeground, radius - weight, 2 * weight, weight * 2, diameter - 4 * weight);
|
||||
}
|
||||
}
|
||||
private void vlnExpander_Resize(object sender, EventArgs e)
|
||||
{
|
||||
this.Width = this.Height;
|
||||
this.Refresh();
|
||||
}
|
||||
private void vlnExpander_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (Attachment)
|
||||
OnAttachmentClick(sender, new vlnExpanderEventArgs());
|
||||
else
|
||||
Expanded = !Expanded;
|
||||
}
|
||||
}
|
||||
public partial class vlnExpanderEventArgs : EventArgs
|
||||
{
|
||||
public vlnExpanderEventArgs()
|
||||
{ ;}
|
||||
}
|
||||
}
|
78
PROMS/Volian.Controls.Library/vlnExpander.designer.cs
generated
Normal file
78
PROMS/Volian.Controls.Library/vlnExpander.designer.cs
generated
Normal file
@ -0,0 +1,78 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class vlnExpander
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.expandToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.expandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.expandToolStripMenuItem,
|
||||
this.expandAllToolStripMenuItem});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(136, 48);
|
||||
//
|
||||
// expandToolStripMenuItem
|
||||
//
|
||||
this.expandToolStripMenuItem.Name = "expandToolStripMenuItem";
|
||||
this.expandToolStripMenuItem.Size = new System.Drawing.Size(135, 22);
|
||||
this.expandToolStripMenuItem.Text = "Expand";
|
||||
//
|
||||
// expandAllToolStripMenuItem
|
||||
//
|
||||
this.expandAllToolStripMenuItem.Name = "expandAllToolStripMenuItem";
|
||||
this.expandAllToolStripMenuItem.Size = new System.Drawing.Size(135, 22);
|
||||
this.expandAllToolStripMenuItem.Text = "Expand All";
|
||||
//
|
||||
// vlnExpander
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Name = "vlnExpander";
|
||||
this.Size = new System.Drawing.Size(85, 77);
|
||||
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.vlnExpander_MouseDown);
|
||||
this.Resize += new System.EventHandler(this.vlnExpander_Resize);
|
||||
this.Paint += new System.Windows.Forms.PaintEventHandler(this.vlnExpander_Paint);
|
||||
this.contextMenuStrip1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem expandToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem expandAllToolStripMenuItem;
|
||||
}
|
||||
}
|
123
PROMS/Volian.Controls.Library/vlnExpander.resx
Normal file
123
PROMS/Volian.Controls.Library/vlnExpander.resx
Normal file
@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
36
PROMS/Volian.Controls.Library/vlnTreeView.Designer.cs
generated
Normal file
36
PROMS/Volian.Controls.Library/vlnTreeView.Designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
partial class vlnTreeView
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
633
PROMS/Volian.Controls.Library/vlnTreeView.cs
Normal file
633
PROMS/Volian.Controls.Library/vlnTreeView.cs
Normal file
@ -0,0 +1,633 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices; // For DragHelper
|
||||
using System.Reflection;
|
||||
using VEPROMS.CSLA.Library;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public delegate void vlnTreeViewEvent(object sender, vlnTreeEventArgs args);
|
||||
public delegate bool vlnTreeViewBoolEvent(object sender, vlnTreeEventArgs args);
|
||||
public delegate TreeNode vlnTreeViewTreeNodeEvent(object sender, vlnTreeEventArgs args);
|
||||
//public delegate void vlnTreeViewDDEvent(object sender, System.Windows.Forms.DragEventArgs args);
|
||||
public partial class vlnTreeEventArgs
|
||||
{
|
||||
#region Business Methods
|
||||
private TreeNode _Node;
|
||||
public TreeNode Node
|
||||
{
|
||||
get { return _Node; }
|
||||
set { _Node = value; }
|
||||
}
|
||||
private TreeNode _Destination=null;
|
||||
public TreeNode Destination
|
||||
{
|
||||
get { return _Destination; }
|
||||
set { _Destination = value; }
|
||||
}
|
||||
private int _Index;
|
||||
public int Index
|
||||
{
|
||||
get { return _Index; }
|
||||
set { _Index = value; }
|
||||
}
|
||||
#endregion
|
||||
#region Factory Methods
|
||||
private vlnTreeEventArgs() { ;}
|
||||
public vlnTreeEventArgs(TreeNode node)
|
||||
{
|
||||
_Node = node;
|
||||
}
|
||||
public vlnTreeEventArgs(TreeNode node, TreeNode destination, int index)
|
||||
{
|
||||
_Node = node;
|
||||
_Destination = destination;
|
||||
_Index = index;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
public partial class vlnTreeView : TreeView
|
||||
{
|
||||
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
#region Events
|
||||
public event vlnTreeViewEvent NodeDragDrop;
|
||||
private void OnNodeDragDrop(object sender, vlnTreeEventArgs args)
|
||||
{
|
||||
if (NodeDragDrop != null) NodeDragDrop(sender, args);
|
||||
}
|
||||
public event vlnTreeViewEvent NodeMove;
|
||||
private void OnNodeMove(object sender, vlnTreeEventArgs args)
|
||||
{
|
||||
if (NodeMove != null) NodeMove(sender, args);
|
||||
}
|
||||
public event vlnTreeViewEvent NodeCopy;
|
||||
private void OnNodeCopy(object sender, vlnTreeEventArgs args)
|
||||
{
|
||||
if (NodeCopy != null) NodeCopy(sender, args);
|
||||
}
|
||||
public event vlnTreeViewBoolEvent NodeDelete;
|
||||
private bool OnNodeDelete(object sender, vlnTreeEventArgs args)
|
||||
{
|
||||
bool result = true;
|
||||
if (NodeDelete != null) result = NodeDelete(sender, args);
|
||||
return result;
|
||||
}
|
||||
public event vlnTreeViewTreeNodeEvent NodeNew;
|
||||
private TreeNode OnNodeNew(object sender, vlnTreeEventArgs args)
|
||||
{
|
||||
if (NodeNew != null) return NodeNew(sender, args);
|
||||
else return new TreeNode("New Item");
|
||||
}
|
||||
public event vlnTreeViewEvent NodeProperties;
|
||||
private void OnNodeProperties(object sender, vlnTreeEventArgs args)
|
||||
{
|
||||
if (NodeProperties != null) NodeProperties(sender, args);
|
||||
}
|
||||
public event vlnTreeViewEvent NodeSelectionChange;
|
||||
private void OnNodeSelectionChange(object sender, vlnTreeEventArgs args)
|
||||
{
|
||||
if (NodeSelectionChange != null) NodeSelectionChange(sender, args);
|
||||
}
|
||||
#endregion
|
||||
#region Business Methods
|
||||
ImageList _dragImageList = new ImageList();
|
||||
#endregion
|
||||
#region Constructors
|
||||
public vlnTreeView()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.AllowDrop = true;
|
||||
DragHelper.InitCommonControls();
|
||||
this.ItemDrag += new ItemDragEventHandler(tv_ItemDrag);
|
||||
this.DragDrop += new DragEventHandler(tv_DragDrop);
|
||||
this.DragEnter += new DragEventHandler(tv_DragEnter);
|
||||
this.DragLeave += new EventHandler(tv_DragLeave);
|
||||
this.DragOver += new DragEventHandler(tv_DragOver);
|
||||
this.MouseDown += new MouseEventHandler(tv_MouseDown);
|
||||
base.AfterSelect += new TreeViewEventHandler(tv_AfterSelect);
|
||||
}
|
||||
private void tv_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
OnNodeSelectionChange(sender, new vlnTreeEventArgs(e.Node));
|
||||
}
|
||||
void tv_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
TreeNode tn = this.GetNodeAt(new Point(e.X, e.Y));
|
||||
if (tn != null)
|
||||
{
|
||||
this.SelectedNode = tn;
|
||||
Application.DoEvents();
|
||||
// Display Menu
|
||||
ToolStripMenuItem mi = new ToolStripMenuItem();
|
||||
ContextMenu cm = new ContextMenu();
|
||||
cm.MenuItems.Add("New...",new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Cut", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Copy", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Paste", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Delete", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Properties...", new EventHandler(mi_Click));
|
||||
cm.Show(this, new Point(e.X, e.Y));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mi_Click(object sender, EventArgs e)
|
||||
{
|
||||
MenuItem mi = (MenuItem)sender;
|
||||
switch (mi.Text)
|
||||
{
|
||||
case "New..."://Add a new child node at the current location
|
||||
// Should Give the option to the controling code to Add a New Node
|
||||
SelectedNode.Expand();
|
||||
TreeNode tn = OnNodeNew(this, new vlnTreeEventArgs(SelectedNode));
|
||||
if (tn != null)
|
||||
{
|
||||
SelectedNode.Nodes.Add(tn);
|
||||
if (LabelEdit)
|
||||
tn.BeginEdit();
|
||||
else
|
||||
SelectedNode = tn;
|
||||
}
|
||||
break;
|
||||
case "Cut"://Cut the selected node
|
||||
// Cut to Clipboard
|
||||
break;
|
||||
case "Copy"://Copy the selected node
|
||||
// Add to Clipboard
|
||||
break;
|
||||
case "Paste"://Paste the clipboard node
|
||||
// this is either a copy or a move depending upon where it came from
|
||||
// if it is from a cut then when the paste is done it should be set to a copy
|
||||
break;
|
||||
case "Delete"://Delete the selected node
|
||||
if(OnNodeDelete(this, new vlnTreeEventArgs(SelectedNode)))
|
||||
SelectedNode.Remove();
|
||||
break;
|
||||
case "Properties..."://Show the properties for the selected node
|
||||
OnNodeProperties(this,new vlnTreeEventArgs(SelectedNode));
|
||||
break;
|
||||
default:
|
||||
MessageBox.Show(string.Format("Unrecognized Menu Item '{0}'", mi.Text));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Cursor
|
||||
private bool SetupDragCursor(ImageList il, TreeNode tn)
|
||||
{
|
||||
// Reset image list used for drag image
|
||||
il.Images.Clear();
|
||||
int howBig = tn.Bounds.Size.Width + this.Indent;
|
||||
if (howBig > 256) howBig = 256;
|
||||
il.ImageSize = new Size(howBig, tn.Bounds.Height);
|
||||
|
||||
// Create new bitmap
|
||||
// This bitmap will contain the tree node image to be dragged
|
||||
Bitmap bmp = new Bitmap(tn.Bounds.Width + this.Indent, tn.Bounds.Height);
|
||||
|
||||
// Get graphics from bitmap
|
||||
Graphics gfx = Graphics.FromImage(bmp);
|
||||
|
||||
// Draw node icon into the bitmap
|
||||
if (this.ImageList != null) gfx.DrawImage(this.ImageList.Images[0], 0, 0);
|
||||
|
||||
// Draw node label into bitmap
|
||||
gfx.DrawString(tn.Text, this.Font, new SolidBrush(this.ForeColor),
|
||||
// new SolidBrush(Color.Blue),
|
||||
(float)this.Indent, 1.0f);
|
||||
|
||||
// Add bitmap to imagelist
|
||||
_dragImageList.Images.Add(bmp);
|
||||
|
||||
// Get mouse position in client coordinates
|
||||
Point p = this.PointToClient(Control.MousePosition);
|
||||
|
||||
// Compute delta between mouse position and node bounds
|
||||
int dx = p.X + this.Indent - tn.Bounds.Left;
|
||||
int dy = p.Y - tn.Bounds.Top;
|
||||
|
||||
// Begin dragging image
|
||||
return DragHelper.ImageList_BeginDrag(_dragImageList.Handle, 0, dx, dy);
|
||||
}
|
||||
private void tv_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
|
||||
{
|
||||
// Get drag node and select it
|
||||
try
|
||||
{
|
||||
TreeNode dragNode = (TreeNode)e.Item;
|
||||
Type t = dragNode.GetType();
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Item Drag {0} - {1}", t.FullName, t.BaseType.FullName);
|
||||
Type t2 = Type.GetType(t.FullName);
|
||||
if(t2 != null)
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Item Drag {0} - {1}", t2.FullName, t2.BaseType.FullName);
|
||||
this.SelectedNode = dragNode;
|
||||
if (SetupDragCursor(_dragImageList, dragNode))
|
||||
{
|
||||
this.DoDragDrop(dragNode, DragDropEffects.Move | DragDropEffects.Copy);// Begin dragging
|
||||
DragHelper.ImageList_EndDrag();// End dragging image
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if(_MyLog.IsErrorEnabled)_MyLog.Error("tv_ItemDrag", ex);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
public enum DropPosition : int
|
||||
{
|
||||
Child = 0, Before = 1, After = 2
|
||||
}
|
||||
private class DropLocation
|
||||
{
|
||||
#region Business Methods
|
||||
private TreeNode _dropNode;
|
||||
public TreeNode DropNode
|
||||
{
|
||||
get { return _dropNode; }
|
||||
set { _dropNode = value; }
|
||||
}
|
||||
private int _index;
|
||||
public int Index
|
||||
{
|
||||
get { return _index; }
|
||||
set { _index = value; }
|
||||
}
|
||||
private DropPosition _position;
|
||||
public DropPosition Position
|
||||
{
|
||||
get { return _position; }
|
||||
set { _position = value; }
|
||||
}
|
||||
DateTime _lastScroll;
|
||||
public DateTime LastScroll
|
||||
{
|
||||
get { return _lastScroll; }
|
||||
}
|
||||
private string _location = string.Empty;
|
||||
#endregion
|
||||
#region Constructors
|
||||
public DropLocation(TreeView tv, System.Windows.Forms.DragEventArgs e, DateTime lastScroll)
|
||||
{
|
||||
_lastScroll = lastScroll;
|
||||
_dropNode = tv.GetNodeAt(tv.PointToClient(new Point(e.X, e.Y)));
|
||||
if (_dropNode == null) return;
|
||||
int OffsetY = tv.PointToClient(Cursor.Position).Y - _dropNode.Bounds.Top;
|
||||
if (OffsetY < _dropNode.Bounds.Height / 3) // First Third - Before
|
||||
{
|
||||
_index = _dropNode.Index;
|
||||
_dropNode = _dropNode.Parent;
|
||||
_position = DropPosition.Before;
|
||||
_location = string.Format("Before1 {0}[{1}] y={2}", _dropNode.Text, _index, OffsetY);
|
||||
}
|
||||
else if ((OffsetY / 2) < _dropNode.Bounds.Height / 3) // Second Third - Child
|
||||
{
|
||||
_location = string.Format("Child {0} y={1}", _dropNode.Text, OffsetY);
|
||||
_position = DropPosition.Child;
|
||||
_index = 0;
|
||||
if (_dropNode.Parent == null)
|
||||
{
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.Info("Root Node");
|
||||
}
|
||||
}
|
||||
else // Last Third - After Now I need to check the X value
|
||||
{
|
||||
if (_dropNode.NextVisibleNode !=null && _dropNode.Nodes.Count > 0)// Has Children - Insert first child
|
||||
{
|
||||
// _dropNode = _dropNode.Nodes[0];
|
||||
_index = 0;
|
||||
_position = DropPosition.Before;
|
||||
_location = string.Format("Before2 {0}[{1}] y={2}", _dropNode.Text, _index, OffsetY);
|
||||
}
|
||||
else // No Children - Insert Next at various levels
|
||||
{
|
||||
Point pt = tv.PointToClient(new Point(e.X, e.Y));
|
||||
TreeNode nextParent = _dropNode.NextNode;
|
||||
if (nextParent != null) nextParent = nextParent.Parent;
|
||||
do
|
||||
{
|
||||
_index = _dropNode.Index;
|
||||
_dropNode = _dropNode.Parent;
|
||||
} while (pt.X < _dropNode.Bounds.X && _dropNode != nextParent);
|
||||
_location = string.Format("After {0}[{1}] y={2}", _dropNode.Text, _index, OffsetY);
|
||||
_position = DropPosition.After;
|
||||
}
|
||||
}
|
||||
LimitMoves(e);
|
||||
}
|
||||
public void LimitMoves(DragEventArgs e)
|
||||
{
|
||||
if ((e.KeyState & 8) == 0)
|
||||
{
|
||||
//TreeNode dragNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
|
||||
//TreeNode dragNode = (TreeNode)e.Data.GetData("TreeTest.FolderTreeNode");
|
||||
TreeNode dragNode = vlnTreeView.GetTreeNodeFromData(e.Data);
|
||||
switch (_position)
|
||||
{
|
||||
case DropPosition.Before:
|
||||
if (dragNode == _dropNode.Nodes[_index] || dragNode == _dropNode.Nodes[_index].PrevNode)
|
||||
{
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Before {0} {1} {2} {3} {4}", dragNode.Text ,_position.ToString() , _dropNode.Nodes[_index].Text
|
||||
// ,_dropNode.Nodes[_index].PrevNode,_dropNode.Nodes[_index].NextNode);
|
||||
_dropNode = null;
|
||||
}
|
||||
break;
|
||||
case DropPosition.Child:
|
||||
if (dragNode.Parent == _dropNode)
|
||||
{
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Child {0} {1} {2} {3} {4} {5}", dragNode.Text ,_position.ToString() , _dropNode.Nodes[_index].Text
|
||||
// ,_dropNode.Nodes[_index].PrevNode,_dropNode.Nodes[_index].NextNode,DateTime.Now);
|
||||
_dropNode = null;
|
||||
}
|
||||
break;
|
||||
case DropPosition.After:
|
||||
if (dragNode == _dropNode.Nodes[_index] || dragNode == _dropNode.Nodes[_index].NextNode)
|
||||
{
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("After {0} {1} {2} {3} {4}", dragNode.Text ,_position.ToString() , _dropNode.Nodes[_index].Text
|
||||
// ,_dropNode.Nodes[_index].PrevNode,_dropNode.Nodes[_index].NextNode);
|
||||
_dropNode = null;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0}[{1}].{2}", _dropNode.Text, _index, _position.ToString());
|
||||
}
|
||||
#region Drawing
|
||||
private void TreeNodeTriangle(Graphics g)
|
||||
{
|
||||
Rectangle r = _dropNode.Bounds;
|
||||
int RightPos = r.Right + 6;
|
||||
Point[] RightTriangle = new Point[]{
|
||||
new Point(RightPos, r.Y ),
|
||||
new Point(RightPos - (r.Height / 2), r.Y + (r.Height / 2)),
|
||||
new Point(RightPos, r.Y + r.Height),
|
||||
new Point(RightPos - (r.Height / 3), r.Y + (r.Height / 2))
|
||||
};
|
||||
g.FillPolygon(System.Drawing.Brushes.Black, RightTriangle);
|
||||
}
|
||||
private void InsertPointer(TreeNode tn, Graphics g)
|
||||
{
|
||||
TreeView tv = _dropNode.TreeView;
|
||||
Rectangle r2 = _dropNode.Nodes[_index].Bounds;
|
||||
Rectangle r3 = tn.Bounds;
|
||||
int y = (_position == DropPosition.Before ? r2.Y : r3.Bottom);
|
||||
int x = r2.Left;
|
||||
|
||||
if (y == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("Line at {0} Node {1}[{2}] {3}", _location, _dropNode.Text, _index, _position.ToString());
|
||||
Color lc = (_position == DropPosition.After ? Color.Red : Color.Blue);
|
||||
Brush lb = (_position == DropPosition.After ? Brushes.Red : Brushes.Blue);
|
||||
Point[] RightTriangle;
|
||||
if (_position == DropPosition.After)
|
||||
{
|
||||
RightTriangle = new Point[]{
|
||||
new Point(x, y ),
|
||||
new Point(x+4, y+4),
|
||||
new Point(x+8, y)};
|
||||
}
|
||||
else
|
||||
{
|
||||
RightTriangle = new Point[]{
|
||||
new Point(x, y),
|
||||
new Point(x+4, y-4),
|
||||
new Point(x+8, y)};
|
||||
}
|
||||
g.DrawLine(new System.Drawing.Pen(lc, 2), new Point(r2.Left, y), new Point(tv.Width - 8, y));
|
||||
g.FillPolygon(lb, RightTriangle);
|
||||
}
|
||||
public void ShowLocation(System.Windows.Forms.DragEventArgs e, bool ScrollOnly)
|
||||
{
|
||||
//if (e.Effect == DragDropEffects.None) return;
|
||||
if (_dropNode != null)
|
||||
{
|
||||
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("ShowLocation1 {0} {1}", e.Effect.ToString(), DateTime.Now.Millisecond);
|
||||
DragHelper.ImageList_DragShowNolock(false);
|
||||
TreeView tv = _dropNode.TreeView;
|
||||
TreeNode tmp = tv.GetNodeAt(tv.PointToClient(new Point(e.X, e.Y)));
|
||||
// if (!ScrollOnly)
|
||||
// {
|
||||
if (ScrollTreeView(tmp) || !ScrollOnly)
|
||||
{
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("ShowLocation2 {0} {1}", e.Effect.ToString(), DateTime.Now.Millisecond);
|
||||
tv.Refresh();
|
||||
if (e.Effect != DragDropEffects.None)
|
||||
{
|
||||
//tv.SelectedNode = dropNode;
|
||||
Graphics g = tv.CreateGraphics();
|
||||
TreeNodeTriangle(g);
|
||||
if (_position != DropPosition.Child)InsertPointer(tmp, g);
|
||||
}
|
||||
}
|
||||
// }
|
||||
// else ScrollTreeView(tmp);
|
||||
DragHelper.ImageList_DragShowNolock(true);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
public void ShowLocation()
|
||||
{
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0}[{1}] {2}", _dropNode.Text, _index, _position.ToString());
|
||||
}
|
||||
#region AutoScroll
|
||||
private bool ScrollTreeView(TreeNode tn)
|
||||
{
|
||||
bool retval = false;
|
||||
TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - _lastScroll.Ticks);
|
||||
if (ts.Milliseconds > 100)// This controls the scroll speed
|
||||
{
|
||||
int top = tn.Bounds.Top;
|
||||
_lastScroll = DateTime.Now;
|
||||
if (tn.TreeView.ClientSize.Height < tn.Bounds.Bottom) tn.EnsureVisible();// Make sure that the current node is visible
|
||||
if (tn.NextVisibleNode != null && tn.TreeView.ClientSize.Height < tn.NextVisibleNode.Bounds.Bottom)
|
||||
tn.NextVisibleNode.EnsureVisible();// Make sure that the next node is visible
|
||||
else
|
||||
if (tn.PrevVisibleNode != null && tn.PrevVisibleNode.PrevVisibleNode != null && tn.PrevVisibleNode.PrevVisibleNode.IsVisible == false)
|
||||
tn.PrevVisibleNode.PrevVisibleNode.EnsureVisible();// Make sure that the previous node is visible }
|
||||
else
|
||||
if (tn.PrevVisibleNode != null && tn.PrevVisibleNode.IsVisible == false)
|
||||
tn.PrevVisibleNode.EnsureVisible();// Make sure that the previous node is visible
|
||||
retval = (top != tn.Bounds.Top);
|
||||
// if (retval) if(_MyLog.IsInfoEnabled)_MyLog.Info("Scroll");
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
#endregion
|
||||
public bool Equals(DropLocation dl)
|
||||
{
|
||||
return (dl != null && _lastScroll.Equals(dl.LastScroll) && _dropNode.Equals(dl.DropNode) &&
|
||||
_position.Equals(dl.Position));
|
||||
}
|
||||
}
|
||||
private DropLocation _LastDropLocation = null;
|
||||
private void tv_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
TreeNode dragNode = GetTreeNodeFromData(e.Data);
|
||||
// Compute drag position and move image
|
||||
Point formP = this.FindForm().PointToClient(new Point(e.X, e.Y));
|
||||
DragHelper.ImageList_DragMove(formP.X - this.Left, formP.Y - this.Top);
|
||||
DropLocation dl = new DropLocation(this, e, _LastDropLocation == null ? DateTime.Now : _LastDropLocation.LastScroll);
|
||||
string s = string.Empty;
|
||||
if (dl.DropNode == null)
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
else
|
||||
{
|
||||
DragDropEffects ee = e.Effect;
|
||||
if ((e.KeyState & 8) == 8)
|
||||
ee = DragDropEffects.Copy; // Copy it
|
||||
else
|
||||
ee = DragDropEffects.Move; // Move it
|
||||
if (IsChild(dragNode, dl.DropNode))
|
||||
ee = DragDropEffects.None; // Don't copy or move to a child node
|
||||
if (e.Effect != ee) e.Effect = ee;
|
||||
dl.ShowLocation(e, dl.Equals(_LastDropLocation));
|
||||
_LastDropLocation = dl;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if(_MyLog.IsErrorEnabled)_MyLog.Error("tv_DragOver", ex);
|
||||
}
|
||||
}
|
||||
private static TreeNode GetTreeNodeFromData(IDataObject datobj)
|
||||
{
|
||||
foreach (string s in datobj.GetFormats())
|
||||
{
|
||||
try
|
||||
{
|
||||
return (TreeNode)datobj.GetData(s);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if(_MyLog.IsErrorEnabled)_MyLog.Error("GetTreeNodeFromData", ex);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private void tv_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
TreeNode dragNode = GetTreeNodeFromData(e.Data);
|
||||
DragHelper.ImageList_DragLeave(this.Handle);
|
||||
int index = _LastDropLocation.Index + (_LastDropLocation.Position == DropPosition.After ? 1 : 0);
|
||||
if (dragNode.Parent == _LastDropLocation.DropNode && dragNode.Index <= _LastDropLocation.Index) index--;
|
||||
if (e.Effect == DragDropEffects.Move)// If Move Remove drag node from parent
|
||||
dragNode.Remove();
|
||||
else
|
||||
dragNode = Clone(dragNode);
|
||||
_LastDropLocation.DropNode.Nodes.Insert(index, dragNode);
|
||||
this.SelectedNode = dragNode;
|
||||
OnNodeDragDrop(sender, new vlnTreeEventArgs(dragNode, _LastDropLocation.DropNode,index));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if(_MyLog.IsErrorEnabled)_MyLog.Error("tv_DragDrop", ex);
|
||||
}
|
||||
}
|
||||
private void DumpMembers(object o)
|
||||
{
|
||||
Type t = o.GetType();
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("\r\n\r\nMembers for type {0}", t.ToString());
|
||||
MemberInfo[] mis = t.GetMembers();
|
||||
int i = 0;
|
||||
foreach (MemberInfo mi in mis)
|
||||
{
|
||||
i++;
|
||||
try
|
||||
{
|
||||
if(mi.MemberType != MemberTypes.Method)
|
||||
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0} {1} {2}", i, mi.Name, mi.MemberType);
|
||||
// if (fi.Name == "TreeView")
|
||||
// fi.SetValue(o, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if(_MyLog.IsErrorEnabled)_MyLog.Error("DumpMembers", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
private TreeNode Clone(TreeNode tn)
|
||||
{
|
||||
|
||||
TreeNode tmp = (TreeNode)tn.Clone();
|
||||
ExpandMatch(tmp,tn);
|
||||
return tmp;
|
||||
}
|
||||
private void tv_DragDropOld(object sender, System.Windows.Forms.DragEventArgs e)
|
||||
{
|
||||
TreeNode dragNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");// Get the drag node
|
||||
DragHelper.ImageList_DragLeave(this.Handle);
|
||||
TreeNode cloneNode = (TreeNode)dragNode.Clone();// copy the source node
|
||||
ExpandMatch(cloneNode, dragNode);
|
||||
_LastDropLocation.DropNode.Nodes.Insert(_LastDropLocation.Index + (_LastDropLocation.Position == DropPosition.After ? 1 : 0), cloneNode);
|
||||
if (e.Effect == DragDropEffects.Move)// If Move Remove drag node from parent
|
||||
dragNode.Remove();
|
||||
this.SelectedNode = cloneNode;
|
||||
}
|
||||
private void tv_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
|
||||
{
|
||||
DragHelper.ImageList_DragEnter(this.Handle, e.X - this.Left, e.Y - this.Top);
|
||||
}
|
||||
private void tv_DragLeave(object sender, System.EventArgs e)
|
||||
{
|
||||
DragHelper.ImageList_DragLeave(this.Handle);
|
||||
this.Refresh();
|
||||
}
|
||||
private void ExpandMatch(TreeNode tn1, TreeNode tn2)
|
||||
{
|
||||
if (tn2.IsExpanded) tn1.Expand();
|
||||
foreach (TreeNode tc in tn2.Nodes) ExpandMatch(tn1.Nodes[tc.Index], tc);
|
||||
}
|
||||
private bool IsChild(TreeNode parent, TreeNode child)
|
||||
{
|
||||
if (parent.Equals(child)) return true;// Check against self
|
||||
foreach (TreeNode tc in parent.Nodes) if (IsChild(tc, child)) return true;//Check all children
|
||||
return false;// Must not be a child at this level
|
||||
}
|
||||
}
|
||||
public class DragHelper
|
||||
{
|
||||
[DllImport("comctl32.dll")]
|
||||
public static extern bool InitCommonControls();
|
||||
|
||||
[DllImport("comctl32.dll", CharSet = CharSet.Auto)]
|
||||
public static extern bool ImageList_BeginDrag(IntPtr himlTrack, int
|
||||
iTrack, int dxHotspot, int dyHotspot);
|
||||
|
||||
[DllImport("comctl32.dll", CharSet = CharSet.Auto)]
|
||||
public static extern bool ImageList_DragMove(int x, int y);
|
||||
|
||||
[DllImport("comctl32.dll", CharSet = CharSet.Auto)]
|
||||
public static extern void ImageList_EndDrag();
|
||||
|
||||
[DllImport("comctl32.dll", CharSet = CharSet.Auto)]
|
||||
public static extern bool ImageList_DragEnter(IntPtr hwndLock, int x, int y);
|
||||
|
||||
[DllImport("comctl32.dll", CharSet = CharSet.Auto)]
|
||||
public static extern bool ImageList_DragLeave(IntPtr hwndLock);
|
||||
|
||||
[DllImport("comctl32.dll", CharSet = CharSet.Auto)]
|
||||
public static extern bool ImageList_DragShowNolock(bool fShow);
|
||||
static DragHelper()
|
||||
{
|
||||
InitCommonControls();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user