Client/MainForm.cs
author StephaneLenclud
Wed, 23 Dec 2015 18:54:38 +0100
changeset 174 f5a6cec31e81
parent 172 5be2191d4be3
child 175 391bce3c8368
permissions -rw-r--r--
Basics for testing our layout setup with non table fields.
     1 //
     2 // Copyright (C) 2014-2015 Stéphane Lenclud.
     3 //
     4 // This file is part of SharpDisplayManager.
     5 //
     6 // SharpDisplayManager is free software: you can redistribute it and/or modify
     7 // it under the terms of the GNU General Public License as published by
     8 // the Free Software Foundation, either version 3 of the License, or
     9 // (at your option) any later version.
    10 //
    11 // SharpDisplayManager is distributed in the hope that it will be useful,
    12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14 // GNU General Public License for more details.
    15 //
    16 // You should have received a copy of the GNU General Public License
    17 // along with SharpDisplayManager.  If not, see <http://www.gnu.org/licenses/>.
    18 //
    19 
    20 using System;
    21 using System.Collections.Generic;
    22 using System.ComponentModel;
    23 using System.Data;
    24 using System.Drawing;
    25 using System.Linq;
    26 using System.Text;
    27 using System.Threading.Tasks;
    28 using System.Windows.Forms;
    29 using System.ServiceModel;
    30 using System.ServiceModel.Channels;
    31 using System.Diagnostics;
    32 using SharpLib.Display;
    33 
    34 
    35 namespace SharpDisplayClient
    36 {
    37     public partial class MainForm : Form
    38     {
    39 		public StartParams Params { get; set; }
    40 
    41 		//
    42         Client iClient;
    43 		//
    44         ContentAlignment Alignment;
    45         TextField iTextFieldTop;
    46 
    47 		
    48 		/// <summary>
    49 		/// Constructor
    50 		/// </summary>
    51         public MainForm()
    52         {
    53             InitializeComponent();
    54             Alignment = ContentAlignment.MiddleLeft;
    55             iTextFieldTop = new TextField(0);
    56         }
    57 
    58         public void OnCloseOrder()
    59         {
    60             CloseThreadSafe();
    61         }
    62 
    63         /// <summary>
    64         /// 
    65         /// </summary>
    66         /// <param name="sender"></param>
    67         /// <param name="e"></param>
    68         private void MainForm_Load(object sender, EventArgs e)
    69         {
    70             iClient = new Client();
    71             iClient.CloseOrderEvent += OnCloseOrder;
    72             iClient.Open();
    73 
    74             //Connect using unique name
    75             //string name = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff tt");
    76             string name = "Client-" + (iClient.ClientCount() - 1);
    77             iClient.SetName(name);
    78             //Text = Text + ": " + name;
    79             Text = "[[" + name + "]]  " + iClient.SessionId;
    80 
    81             //
    82             textBoxTop.Text = iClient.Name;
    83             textBoxBottom.Text = iClient.SessionId;
    84 
    85 			if (Params != null)
    86 			{
    87 				//Parameters where specified use them
    88 				if (Params.TopText != "")
    89 				{
    90 					textBoxTop.Text = Params.TopText;
    91 				}
    92 
    93 				if (Params.BottomText != "")
    94 				{
    95 					textBoxBottom.Text = Params.BottomText;
    96 				}
    97 
    98 				Location = Params.Location;
    99 				//
   100 				SetBasicLayoutAndText();
   101 			}
   102 
   103         }
   104 
   105 
   106 
   107         public delegate void CloseConnectionDelegate();
   108         public delegate void CloseDelegate();
   109 
   110         /// <summary>
   111         ///
   112         /// </summary>
   113         public void CloseConnectionThreadSafe()
   114         {
   115             if (this.InvokeRequired)
   116             {
   117                 //Not in the proper thread, invoke ourselves
   118                 CloseConnectionDelegate d = new CloseConnectionDelegate(CloseConnectionThreadSafe);
   119                 this.Invoke(d, new object[] { });
   120             }
   121             else
   122             {
   123                 //We are in the proper thread
   124                 if (IsClientReady())
   125                 {
   126                     string sessionId = iClient.SessionId;
   127                     Trace.TraceInformation("Closing client: " + sessionId);
   128                     iClient.Close();
   129                     Trace.TraceInformation("Closed client: " + sessionId);
   130                 }
   131 
   132                 iClient = null;
   133             }
   134         }
   135 
   136         /// <summary>
   137         ///
   138         /// </summary>
   139         public void CloseThreadSafe()
   140         {
   141             if (this.InvokeRequired)
   142             {
   143                 //Not in the proper thread, invoke ourselves
   144                 CloseDelegate d = new CloseDelegate(CloseThreadSafe);
   145                 this.Invoke(d, new object[] { });
   146             }
   147             else
   148             {
   149                 //We are in the proper thread
   150                 Close();
   151             }
   152         }
   153 
   154 
   155         private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
   156         {
   157             CloseConnectionThreadSafe();
   158         }
   159 
   160         public bool IsClientReady()
   161         {
   162             return (iClient != null && iClient.IsReady());
   163         }
   164 
   165         private void buttonAlignLeft_Click(object sender, EventArgs e)
   166         {
   167             Alignment = ContentAlignment.MiddleLeft;
   168             textBoxTop.TextAlign = HorizontalAlignment.Left;
   169             textBoxBottom.TextAlign = HorizontalAlignment.Left;
   170         }
   171 
   172         private void buttonAlignCenter_Click(object sender, EventArgs e)
   173         {
   174             Alignment = ContentAlignment.MiddleCenter;
   175             textBoxTop.TextAlign = HorizontalAlignment.Center;
   176             textBoxBottom.TextAlign = HorizontalAlignment.Center;
   177         }
   178 
   179         private void buttonAlignRight_Click(object sender, EventArgs e)
   180         {
   181             Alignment = ContentAlignment.MiddleRight;
   182             textBoxTop.TextAlign = HorizontalAlignment.Right;
   183             textBoxBottom.TextAlign = HorizontalAlignment.Right;
   184         }
   185 
   186         private void buttonSetTopText_Click(object sender, EventArgs e)
   187         {
   188             //TextField top = new TextField(0, textBoxTop.Text, ContentAlignment.MiddleLeft);
   189             iTextFieldTop.Text = textBoxTop.Text;
   190             iTextFieldTop.Alignment = Alignment;
   191             bool res = iClient.SetField(iTextFieldTop);
   192 
   193             if (!res)
   194             {
   195                 MessageBox.Show("Create you fields first", "Field update error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   196             }
   197 
   198 
   199         }
   200 
   201         private void buttonSetText_Click(object sender, EventArgs e)
   202         {
   203 			SetBasicLayoutAndText();
   204         }
   205 
   206 		void SetBasicLayoutAndText()
   207 		{
   208 			//Set one column two lines layout
   209 			TableLayout layout = new TableLayout(1, 2);
   210 			iClient.SetLayout(layout);
   211 
   212 			//Set our fields
   213 			iClient.CreateFields(new DataField[]
   214             {
   215                 new TextField(0, textBoxTop.Text, Alignment),
   216                 new TextField(1, textBoxBottom.Text, Alignment)
   217             });
   218 
   219 		}
   220 
   221         private void buttonLayoutUpdate_Click(object sender, EventArgs e)
   222         {
   223             //Define a 2 by 2 layout
   224             TableLayout layout = new TableLayout(2,2);
   225             //Second column only takes up 25%
   226             layout.Columns[1].Width = 25F;
   227             //Send layout to server
   228             iClient.SetLayout(layout);
   229 
   230             //
   231             RecordingField recording = new RecordingField();
   232             recording.IsActive = true;
   233 
   234             //Set texts
   235             iClient.CreateFields(new DataField[]
   236             {                
   237                 new TextField(0, textBoxTop.Text, Alignment),
   238                 new TextField(1, textBoxBottom.Text, Alignment),
   239                 new TextField(2, "Third text field", Alignment),
   240                 new TextField(3, "Forth text field", Alignment),
   241                 //recording
   242             });
   243 
   244         }
   245 
   246         private void buttonSetBitmap_Click(object sender, EventArgs e)
   247         {
   248             int x1 = 0;
   249             int y1 = 0;
   250             int x2 = 256;
   251             int y2 = 32;
   252 
   253             Bitmap bitmap = new Bitmap(x2,y2);
   254             Pen blackPen = new Pen(Color.Black, 3);
   255 
   256             // Draw line to screen.
   257             using (var graphics = Graphics.FromImage(bitmap))
   258             {
   259                 graphics.DrawLine(blackPen, x1, y1, x2, y2);
   260                 graphics.DrawLine(blackPen, x1, y2, x2, y1);
   261             }
   262 
   263             DataField field = new BitmapField(0, bitmap);
   264             //field.ColumnSpan = 2;
   265             iClient.SetField(field);
   266         }
   267 
   268         private void buttonBitmapLayout_Click(object sender, EventArgs e)
   269         {
   270             SetLayoutWithBitmap();
   271         }
   272 
   273         /// <summary>
   274         /// Define a layout with a bitmap field on the left and two lines of text on the right.
   275         /// </summary>
   276         private void SetLayoutWithBitmap()
   277         {
   278             //Define a 2 by 2 layout
   279             TableLayout layout = new TableLayout(2, 2);
   280             //First column only takes 25%
   281             layout.Columns[0].Width = 25F;
   282             //Second column takes up 75%
   283             layout.Columns[1].Width = 75F;
   284             //Send layout to server
   285             iClient.SetLayout(layout);
   286 
   287             //Set a bitmap for our first field
   288             int x1 = 0;
   289             int y1 = 0;
   290             int x2 = 64;
   291             int y2 = 64;
   292 
   293             Bitmap bitmap = new Bitmap(x2, y2);
   294             Pen blackPen = new Pen(Color.Black, 3);
   295 
   296             // Draw line to screen.
   297             using (var graphics = Graphics.FromImage(bitmap))
   298             {
   299                 graphics.DrawLine(blackPen, x1, y1, x2, y2);
   300                 graphics.DrawLine(blackPen, x1, y2, x2, y1);
   301             }
   302 
   303             //Create a bitmap field from the bitmap we just created
   304             BitmapField field = new BitmapField(0, bitmap);
   305             //We want our bitmap field to span across two rows
   306             field.RowSpan = 2;
   307 
   308             //Set texts
   309             iClient.CreateFields(new DataField[]
   310             {
   311                 field,
   312                 new TextField(1, textBoxTop.Text, Alignment),
   313                 new TextField(2, textBoxBottom.Text, Alignment)
   314             });
   315 
   316         }
   317 
   318         private void buttonIndicatorsLayout_Click(object sender, EventArgs e)
   319         {
   320             //Define a 2 by 4 layout
   321             TableLayout layout = new TableLayout(2, 4);
   322             //First column
   323             layout.Columns[0].Width = 87.5F;
   324             //Second column
   325             layout.Columns[1].Width = 12.5F;
   326             //Send layout to server
   327             iClient.SetLayout(layout);
   328 
   329             //Create a bitmap for our indicators field
   330             int x1 = 0;
   331             int y1 = 0;
   332             int x2 = 32;
   333             int y2 = 16;
   334 
   335             Bitmap bitmap = new Bitmap(x2, y2);
   336             Pen blackPen = new Pen(Color.Black, 3);
   337 
   338             // Draw line to screen.
   339             using (var graphics = Graphics.FromImage(bitmap))
   340             {
   341                 graphics.DrawLine(blackPen, x1, y1, x2, y2);
   342                 graphics.DrawLine(blackPen, x1, y2, x2, y1);
   343             }
   344 
   345             //Create a bitmap field from the bitmap we just created
   346             DataField indicator1 = new BitmapField(2, bitmap);
   347             //Create a bitmap field from the bitmap we just created
   348             DataField indicator2 = new BitmapField(3, bitmap);
   349             //Create a bitmap field from the bitmap we just created
   350             DataField indicator3 = new BitmapField(4, bitmap);
   351             //Create a bitmap field from the bitmap we just created
   352             DataField indicator4 = new BitmapField(5, bitmap);
   353 
   354             //
   355             TextField textFieldTop = new TextField(0, textBoxTop.Text, Alignment);
   356             textFieldTop.RowSpan = 2;
   357 
   358             TextField textFieldBottom = new TextField(1, textBoxBottom.Text, Alignment);
   359             textFieldBottom.RowSpan = 2;
   360 
   361 
   362             //Set texts
   363             iClient.CreateFields(new DataField[]
   364             {
   365                 textFieldTop,
   366                 indicator1,
   367                 indicator2,
   368                 textFieldBottom,
   369                 indicator3,
   370                 indicator4
   371             });
   372 
   373         }
   374 
   375         private void buttonUpdateTexts_Click(object sender, EventArgs e)
   376         {
   377 
   378             bool res = iClient.SetFields(new DataField[]
   379             {
   380                 new TextField(0, textBoxTop.Text, Alignment),
   381                 new TextField(1, textBoxBottom.Text, Alignment)
   382             });
   383 
   384             if (!res)
   385             {
   386                 MessageBox.Show("Create you fields first", "Field update error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   387             }
   388 
   389         }
   390 
   391 		private void buttonLayoutOneTextField_Click(object sender, EventArgs e)
   392 		{
   393 			//Set one column one line layout
   394 			TableLayout layout = new TableLayout(1, 1);
   395 			iClient.SetLayout(layout);
   396 
   397 			//Set our fields
   398 			iClient.CreateFields(new DataField[]
   399             {
   400                 new TextField(0, textBoxTop.Text, Alignment)
   401             });
   402 		}
   403     }
   404 }