Client/MainForm.cs
author StephaneLenclud
Fri, 30 Oct 2015 16:45:33 +0100
changeset 171 151e11cac3b2
parent 158 e22bf44c4300
child 172 5be2191d4be3
permissions -rw-r--r--
Migration to SharpLibDisplay.
     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         DataField iTextFieldTop;
    46 
    47 		
    48 		/// <summary>
    49 		/// Constructor
    50 		/// </summary>
    51         public MainForm()
    52         {
    53             InitializeComponent();
    54             Alignment = ContentAlignment.MiddleLeft;
    55             iTextFieldTop = new DataField(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 DataField(0, textBoxTop.Text, Alignment),
   216                 new DataField(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             //Set texts
   231             iClient.CreateFields(new DataField[]
   232             {                
   233                 new DataField(0, textBoxTop.Text, Alignment),
   234                 new DataField(1, textBoxBottom.Text, Alignment),
   235                 new DataField(2, "Third text field", Alignment),
   236                 new DataField(3, "Forth text field", Alignment)
   237             });
   238 
   239         }
   240 
   241         private void buttonSetBitmap_Click(object sender, EventArgs e)
   242         {
   243             int x1 = 0;
   244             int y1 = 0;
   245             int x2 = 256;
   246             int y2 = 32;
   247 
   248             Bitmap bitmap = new Bitmap(x2,y2);
   249             Pen blackPen = new Pen(Color.Black, 3);
   250 
   251             // Draw line to screen.
   252             using (var graphics = Graphics.FromImage(bitmap))
   253             {
   254                 graphics.DrawLine(blackPen, x1, y1, x2, y2);
   255                 graphics.DrawLine(blackPen, x1, y2, x2, y1);
   256             }
   257 
   258             DataField field = new DataField(0, bitmap);
   259             //field.ColumnSpan = 2;
   260             iClient.SetField(field);
   261         }
   262 
   263         private void buttonBitmapLayout_Click(object sender, EventArgs e)
   264         {
   265             SetLayoutWithBitmap();
   266         }
   267 
   268         /// <summary>
   269         /// Define a layout with a bitmap field on the left and two lines of text on the right.
   270         /// </summary>
   271         private void SetLayoutWithBitmap()
   272         {
   273             //Define a 2 by 2 layout
   274             TableLayout layout = new TableLayout(2, 2);
   275             //First column only takes 25%
   276             layout.Columns[0].Width = 25F;
   277             //Second column takes up 75%
   278             layout.Columns[1].Width = 75F;
   279             //Send layout to server
   280             iClient.SetLayout(layout);
   281 
   282             //Set a bitmap for our first field
   283             int x1 = 0;
   284             int y1 = 0;
   285             int x2 = 64;
   286             int y2 = 64;
   287 
   288             Bitmap bitmap = new Bitmap(x2, y2);
   289             Pen blackPen = new Pen(Color.Black, 3);
   290 
   291             // Draw line to screen.
   292             using (var graphics = Graphics.FromImage(bitmap))
   293             {
   294                 graphics.DrawLine(blackPen, x1, y1, x2, y2);
   295                 graphics.DrawLine(blackPen, x1, y2, x2, y1);
   296             }
   297 
   298             //Create a bitmap field from the bitmap we just created
   299             DataField field = new DataField(0, bitmap);
   300             //We want our bitmap field to span across two rows
   301             field.RowSpan = 2;
   302 
   303             //Set texts
   304             iClient.CreateFields(new DataField[]
   305             {
   306                 field,
   307                 new DataField(1, textBoxTop.Text, Alignment),
   308                 new DataField(2, textBoxBottom.Text, Alignment)
   309             });
   310 
   311         }
   312 
   313         private void buttonIndicatorsLayout_Click(object sender, EventArgs e)
   314         {
   315             //Define a 2 by 4 layout
   316             TableLayout layout = new TableLayout(2, 4);
   317             //First column
   318             layout.Columns[0].Width = 87.5F;
   319             //Second column
   320             layout.Columns[1].Width = 12.5F;
   321             //Send layout to server
   322             iClient.SetLayout(layout);
   323 
   324             //Create a bitmap for our indicators field
   325             int x1 = 0;
   326             int y1 = 0;
   327             int x2 = 32;
   328             int y2 = 16;
   329 
   330             Bitmap bitmap = new Bitmap(x2, y2);
   331             Pen blackPen = new Pen(Color.Black, 3);
   332 
   333             // Draw line to screen.
   334             using (var graphics = Graphics.FromImage(bitmap))
   335             {
   336                 graphics.DrawLine(blackPen, x1, y1, x2, y2);
   337                 graphics.DrawLine(blackPen, x1, y2, x2, y1);
   338             }
   339 
   340             //Create a bitmap field from the bitmap we just created
   341             DataField indicator1 = new DataField(2, bitmap);
   342             //Create a bitmap field from the bitmap we just created
   343             DataField indicator2 = new DataField(3, bitmap);
   344             //Create a bitmap field from the bitmap we just created
   345             DataField indicator3 = new DataField(4, bitmap);
   346             //Create a bitmap field from the bitmap we just created
   347             DataField indicator4 = new DataField(5, bitmap);
   348 
   349             //
   350             DataField textFieldTop = new DataField(0, textBoxTop.Text, Alignment);
   351             textFieldTop.RowSpan = 2;
   352 
   353             DataField textFieldBottom = new DataField(1, textBoxBottom.Text, Alignment);
   354             textFieldBottom.RowSpan = 2;
   355 
   356 
   357             //Set texts
   358             iClient.CreateFields(new DataField[]
   359             {
   360                 textFieldTop,
   361                 indicator1,
   362                 indicator2,
   363                 textFieldBottom,
   364                 indicator3,
   365                 indicator4
   366             });
   367 
   368         }
   369 
   370         private void buttonUpdateTexts_Click(object sender, EventArgs e)
   371         {
   372 
   373             bool res = iClient.SetFields(new DataField[]
   374             {
   375                 new DataField(0, textBoxTop.Text, Alignment),
   376                 new DataField(1, textBoxBottom.Text, Alignment)
   377             });
   378 
   379             if (!res)
   380             {
   381                 MessageBox.Show("Create you fields first", "Field update error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   382             }
   383 
   384         }
   385 
   386 		private void buttonLayoutOneTextField_Click(object sender, EventArgs e)
   387 		{
   388 			//Set one column two lines layout
   389 			TableLayout layout = new TableLayout(1, 1);
   390 			iClient.SetLayout(layout);
   391 
   392 			//Set our fields
   393 			iClient.CreateFields(new DataField[]
   394             {
   395                 new DataField(0, textBoxTop.Text, Alignment)
   396             });
   397 		}
   398     }
   399 }