sl@56: // sl@56: // Define a public API for both SharpDisplay client and server to use. sl@56: // sl@56: sl@56: using System; sl@24: using System.Collections.Generic; sl@24: using System.Linq; sl@24: using System.Text; sl@24: using System.Threading.Tasks; sl@24: using System.ServiceModel; sl@24: using System.Collections; sl@43: using System.Drawing; sl@43: using System.Runtime.Serialization; sl@63: using System.Windows.Forms; sl@24: sl@24: sl@55: namespace SharpDisplay sl@24: { sl@56: /// StephaneLenclud@64: /// For client to specify a specific layout. sl@56: /// sl@43: [DataContract] sl@62: public class TableLayout sl@62: { sl@62: public TableLayout() sl@62: { sl@63: Columns = new List(); sl@63: Rows = new List(); sl@63: Cells = new List(); sl@62: } sl@62: sl@62: public TableLayout(int aColumnCount, int aRowCount) sl@62: { sl@63: Columns = new List(); sl@63: Rows = new List(); sl@63: sl@63: for (int i = 0; i < aColumnCount; i++) sl@63: { sl@63: Columns.Add(new ColumnStyle(SizeType.Percent, 100 / aColumnCount)); sl@63: } sl@63: sl@63: for (int i = 0; i < aRowCount; i++) sl@63: { sl@63: Rows.Add(new RowStyle(SizeType.Percent, 100 / aRowCount)); sl@63: } sl@62: } sl@62: sl@62: [DataMember] sl@63: public List Cells { get; set; } sl@62: sl@62: [DataMember] sl@63: public List Columns { get; set; } sl@62: sl@62: [DataMember] sl@63: public List Rows { get; set; } sl@62: } sl@62: sl@62: /// sl@62: /// sl@62: /// sl@62: [DataContract] sl@62: public class DataField sl@62: { sl@66: public DataField() sl@66: { sl@66: Index = 0; sl@66: ColumnSpan = 1; sl@66: RowSpan = 1; sl@72: //Text sl@72: Text = ""; sl@72: Alignment = ContentAlignment.MiddleLeft; sl@72: //Bitmap sl@72: Bitmap = null; sl@66: } sl@66: sl@72: //Text constructor sl@72: public DataField(int aIndex, string aText = "", ContentAlignment aAlignment = ContentAlignment.MiddleLeft) sl@72: { sl@72: ColumnSpan = 1; sl@72: RowSpan = 1; sl@72: Index = aIndex; sl@72: Text = aText; sl@72: Alignment = aAlignment; sl@72: // sl@72: Bitmap = null; sl@72: } sl@72: sl@72: //Bitmap constructor sl@72: public DataField(int aIndex, Bitmap aBitmap) sl@72: { sl@72: ColumnSpan = 1; sl@72: RowSpan = 1; sl@72: Index = aIndex; sl@72: Bitmap = aBitmap; sl@72: //Text sl@72: Text = ""; sl@72: Alignment = ContentAlignment.MiddleLeft; sl@72: } sl@72: sl@72: sl@72: //Generic layout properties sl@66: [DataMember] sl@66: public int Index { get; set; } sl@66: sl@62: [DataMember] sl@62: public int Column { get; set; } sl@62: sl@62: [DataMember] sl@62: public int Row { get; set; } sl@62: sl@62: [DataMember] sl@62: public int ColumnSpan { get; set; } sl@62: sl@62: [DataMember] sl@62: public int RowSpan { get; set; } sl@72: sl@72: //Text properties sl@43: [DataMember] sl@43: public string Text { get; set; } sl@43: sl@43: [DataMember] sl@43: public ContentAlignment Alignment { get; set; } sl@43: sl@72: //Bitmap properties sl@66: [DataMember] sl@66: public Bitmap Bitmap { get; set; } sl@72: sl@72: // sl@72: public bool HasBitmap { get{ return Bitmap!=null;} } sl@72: sl@66: } sl@66: sl@66: /// sl@56: /// Define our SharpDisplay service. sl@56: /// Clients and servers must implement it to communicate with one another. sl@56: /// Through this service clients can send requests to a server. sl@56: /// Through this service a server session can receive requests from a client. sl@56: /// sl@55: [ServiceContract( CallbackContract = typeof(ICallback), SessionMode = SessionMode.Required)] sl@55: public interface IService sl@24: { sl@32: /// sl@32: /// Set the name of this client. sl@32: /// Name is a convenient way to recognize your client. sl@32: /// Naming you client is not mandatory. sl@32: /// In the absence of a name the session ID is often used instead. sl@32: /// sl@32: /// sl@24: [OperationContract(IsOneWay = true)] sl@32: void SetName(string aClientName); sl@24: sl@62: /// sl@62: /// sl@62: /// sl@62: [OperationContract(IsOneWay = true)] sl@62: void SetLayout(TableLayout aLayout); sl@62: sl@32: /// sl@32: /// Put the given text in the given field on your display. sl@32: /// Fields are often just lines of text. sl@32: /// sl@43: /// sl@24: [OperationContract(IsOneWay = true)] sl@72: void SetText(DataField aField); sl@26: sl@32: /// sl@32: /// Allows a client to set multiple text fields at once. sl@32: /// sl@32: /// sl@24: [OperationContract(IsOneWay = true)] sl@72: void SetTexts(System.Collections.Generic.IList aFields); sl@32: sl@32: /// sl@67: /// Put the given bitmap in the given field on your display. sl@67: /// Fields are often just lines of text. sl@67: /// sl@67: /// sl@67: [OperationContract(IsOneWay = true)] sl@72: void SetBitmap(DataField aBitmapField); sl@67: sl@67: /// sl@32: /// Provides the number of clients currently connected sl@32: /// sl@32: /// sl@32: [OperationContract()] sl@32: int ClientCount(); sl@32: sl@24: } sl@24: sl@56: /// sl@56: /// SharDisplay callback provides a means for a server to notify its clients. sl@56: /// sl@55: public interface ICallback sl@24: { sl@24: [OperationContract(IsOneWay = true)] sl@24: void OnConnected(); sl@24: sl@32: /// sl@32: /// Tell our client to close its connection. sl@32: /// Notably sent when the server is shutting down. sl@32: /// sl@24: [OperationContract(IsOneWay = true)] sl@32: void OnCloseOrder(); sl@24: } sl@24: sl@24: sl@24: sl@24: }