# HG changeset patch
# User sl
# Date 1413228113 -7200
# Node ID 1d0cd5e6e0a99279109e2811332899585690a2b0
# Parent  6e50baf5a8110e9ee2ab0b33c8d6e4dbf0a8f032
Bitmap field now mostly working.

diff -r 6e50baf5a811 -r 1d0cd5e6e0a9 Client/MainForm.Designer.cs
--- a/Client/MainForm.Designer.cs	Mon Oct 13 20:05:48 2014 +0200
+++ b/Client/MainForm.Designer.cs	Mon Oct 13 21:21:53 2014 +0200
@@ -36,7 +36,7 @@
             this.buttonAlignLeft = new System.Windows.Forms.Button();
             this.buttonSetTopText = new System.Windows.Forms.Button();
             this.buttonLayoutUpdate = new System.Windows.Forms.Button();
-            this.button1 = new System.Windows.Forms.Button();
+            this.buttonSetBitmap = new System.Windows.Forms.Button();
             this.SuspendLayout();
             // 
             // buttonSetText
@@ -113,22 +113,22 @@
             this.buttonLayoutUpdate.UseVisualStyleBackColor = true;
             this.buttonLayoutUpdate.Click += new System.EventHandler(this.buttonLayoutUpdate_Click);
             // 
-            // button1
+            // buttonSetBitmap
             // 
-            this.button1.Location = new System.Drawing.Point(12, 190);
-            this.button1.Name = "button1";
-            this.button1.Size = new System.Drawing.Size(75, 23);
-            this.button1.TabIndex = 26;
-            this.button1.Text = "Set Bitmap";
-            this.button1.UseVisualStyleBackColor = true;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
+            this.buttonSetBitmap.Location = new System.Drawing.Point(12, 190);
+            this.buttonSetBitmap.Name = "buttonSetBitmap";
+            this.buttonSetBitmap.Size = new System.Drawing.Size(75, 23);
+            this.buttonSetBitmap.TabIndex = 26;
+            this.buttonSetBitmap.Text = "Set Bitmap";
+            this.buttonSetBitmap.UseVisualStyleBackColor = true;
+            this.buttonSetBitmap.Click += new System.EventHandler(this.buttonSetBitmap_Click);
             // 
             // MainForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.ClientSize = new System.Drawing.Size(443, 252);
-            this.Controls.Add(this.button1);
+            this.Controls.Add(this.buttonSetBitmap);
             this.Controls.Add(this.buttonLayoutUpdate);
             this.Controls.Add(this.buttonSetTopText);
             this.Controls.Add(this.buttonAlignRight);
@@ -156,7 +156,7 @@
         private System.Windows.Forms.Button buttonAlignLeft;
         private System.Windows.Forms.Button buttonSetTopText;
         private System.Windows.Forms.Button buttonLayoutUpdate;
-        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button buttonSetBitmap;
     }
 }
 
diff -r 6e50baf5a811 -r 1d0cd5e6e0a9 Client/MainForm.cs
--- a/Client/MainForm.cs	Mon Oct 13 20:05:48 2014 +0200
+++ b/Client/MainForm.cs	Mon Oct 13 21:21:53 2014 +0200
@@ -160,19 +160,21 @@
             iClient.SetLayout(layout);
         }
 
-        private void button1_Click(object sender, EventArgs e)
+        private void buttonSetBitmap_Click(object sender, EventArgs e)
         {
-            Bitmap bitmap = new Bitmap(60,60);
+            int x1 = 0;
+            int y1 = 0;
+            int x2 = 256;
+            int y2 = 32;
+
+            Bitmap bitmap = new Bitmap(x2,y2);
             Pen blackPen = new Pen(Color.Black, 3);
 
-            int x1 = 0;
-            int y1 = 0;
-            int x2 = 60;
-            int y2 = 60;
             // Draw line to screen.
             using (var graphics = Graphics.FromImage(bitmap))
             {
                 graphics.DrawLine(blackPen, x1, y1, x2, y2);
+                graphics.DrawLine(blackPen, x1, y2, x2, y1);
             }
 
             iClient.SetBitmap(new BitmapField(0, bitmap));
diff -r 6e50baf5a811 -r 1d0cd5e6e0a9 Server/MainForm.cs
--- a/Server/MainForm.cs	Mon Oct 13 20:05:48 2014 +0200
+++ b/Server/MainForm.cs	Mon Oct 13 21:21:53 2014 +0200
@@ -160,9 +160,19 @@
                 labelFontWidth.Text = "Font width: " + charWidth;
             }
 
+            MarqueeLabel label = null;            
+            //Get the first label control we can find
+            foreach (Control ctrl in tableLayoutPanel.Controls)
+            {
+                if (ctrl is MarqueeLabel)
+                {
+                    label = (MarqueeLabel)ctrl;
+                    break;
+                }
+            }
+
             //Now check font height and show a warning if needed.
-            MarqueeLabel label = (MarqueeLabel)tableLayoutPanel.Controls[0];
-            if (label.Font.Height > label.Height)
+            if (label != null && label.Font.Height > label.Height)
             {
                 labelWarning.Text = "WARNING: Selected font is too height by " + (label.Font.Height - label.Height) + " pixels!";
                 labelWarning.Visible = true;
@@ -322,9 +332,12 @@
             DateTime NewTickTime = DateTime.Now;
 
             //Update animation for all our marquees
-            foreach (MarqueeLabel ctrl in tableLayoutPanel.Controls)
+            foreach (Control ctrl in tableLayoutPanel.Controls)
             {
-                ctrl.UpdateAnimation(LastTickTime, NewTickTime);
+                if (ctrl is MarqueeLabel)
+                {
+                    ((MarqueeLabel)ctrl).UpdateAnimation(LastTickTime, NewTickTime);
+                }
             }
 
 
@@ -813,9 +826,17 @@
                     client.Fields[aTextField.Index] = aTextField;
 
                     //We are in the proper thread
-                    MarqueeLabel label = (MarqueeLabel)tableLayoutPanel.Controls[aTextField.Index];
-                    label.Text = aTextField.Text;
-                    label.TextAlign = aTextField.Alignment;
+                    if (tableLayoutPanel.Controls[aTextField.Index] is MarqueeLabel)
+                    {
+                        MarqueeLabel label = (MarqueeLabel)tableLayoutPanel.Controls[aTextField.Index];
+                        label.Text = aTextField.Text;
+                        label.TextAlign = aTextField.Alignment;
+                    }
+                    else
+                    {
+                        //Wrong control type, re-create them all
+                        UpdateTableLayoutPanel(iCurrentClientData);
+                    }
                     //
                     UpdateClientTreeViewNode(client);
                 }
@@ -856,11 +877,22 @@
                         j++;
                     }
                     //Put each our text fields in a label control
-                    for (int i = 0; i < aTextFields.Count; i++)
+                    foreach (TextField field in aTextFields)
                     {
-                        MarqueeLabel label = (MarqueeLabel)tableLayoutPanel.Controls[aTextFields[i].Index];
-                        label.Text = aTextFields[i].Text;
-                        label.TextAlign = aTextFields[i].Alignment;
+                        if (tableLayoutPanel.Controls[field.Index] is MarqueeLabel)
+                        {
+                            //Proper control type just update the text
+                            MarqueeLabel label = (MarqueeLabel)tableLayoutPanel.Controls[field.Index];
+                            label.Text = field.Text;
+                            label.TextAlign = field.Alignment;
+                        }
+                        else
+                        {
+                            //Wrong control for the given field
+                            //Update our layout thus re-creating our controls
+                            UpdateTableLayoutPanel(iCurrentClientData);
+                            break; //No need to keep on looping layout update will take care of everything
+                        }
                     }
 
 
@@ -898,8 +930,16 @@
                     client.Fields[aBitmapField.Index] = aBitmapField;
 
                     //We are in the proper thread
-                    MarqueeLabel label = (MarqueeLabel)tableLayoutPanel.Controls[aBitmapField.Index];
-                    label.Text = "Bitmap";
+                    if (tableLayoutPanel.Controls[aBitmapField.Index] is PictureBox)
+                    {
+                        PictureBox pictureBox = (PictureBox)tableLayoutPanel.Controls[aBitmapField.Index];
+                        pictureBox.Image = aBitmapField.Bitmap;
+                    }
+                    else
+                    {
+                        //Wrong control type re-create them all
+                        UpdateTableLayoutPanel(iCurrentClientData);
+                    }
                     //
                     UpdateClientTreeViewNode(client);
                 }
@@ -1156,21 +1196,26 @@
                         this.tableLayoutPanel.RowStyles.Add(layout.Rows[j]);
                     }
 
-                    MarqueeLabel control = new SharpDisplayManager.MarqueeLabel();
-                    control.AutoEllipsis = true;
-                    control.AutoSize = true;
-                    control.BackColor = System.Drawing.Color.Transparent;
-                    control.Dock = System.Windows.Forms.DockStyle.Fill;
-                    control.Location = new System.Drawing.Point(1, 1);
-                    control.Margin = new System.Windows.Forms.Padding(0);
-                    control.Name = "marqueeLabelCol" + layout.Columns.Count + "Row" + layout.Rows.Count;
-                    control.OwnTimer = false;
-                    control.PixelsPerSecond = 64;
-                    control.Separator = "|";
+
+                    MarqueeLabel label = new SharpDisplayManager.MarqueeLabel();
+                    label.AutoEllipsis = true;
+                    label.AutoSize = true;
+                    label.BackColor = System.Drawing.Color.Transparent;
+                    label.Dock = System.Windows.Forms.DockStyle.Fill;
+                    label.Location = new System.Drawing.Point(1, 1);
+                    label.Margin = new System.Windows.Forms.Padding(0);
+                    label.Name = "marqueeLabelCol" + layout.Columns.Count + "Row" + layout.Rows.Count;
+                    label.OwnTimer = false;
+                    label.PixelsPerSecond = 64;
+                    label.Separator = "|";
                     //control.Size = new System.Drawing.Size(254, 30);
                     //control.TabIndex = 2;
-                    control.Font = cds.Font;
-                    control.Text = "";
+                    label.Font = cds.Font;
+                    label.Text = "";
+                    label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+                    label.UseCompatibleTextRendering = true;
+
+                    Control control = label;
                     //If we already have a text for that field
                     if (aClient.Fields.Count > tableLayoutPanel.Controls.Count)
                     {
@@ -1180,10 +1225,24 @@
                             TextField textField = (TextField)field;
                             control.Text = textField.Text;
                         }
+                        else if (field is BitmapField)
+                        {
+                            //Create picture box
+                            PictureBox pictue = new PictureBox();
+                            pictue.AutoSize = true;
+                            pictue.BackColor = System.Drawing.Color.Transparent;
+                            pictue.Dock = System.Windows.Forms.DockStyle.Fill;
+                            pictue.Location = new System.Drawing.Point(1, 1);
+                            pictue.Margin = new System.Windows.Forms.Padding(0);
+                            pictue.Name = "pictureBox" + layout.Columns.Count + "Row" + layout.Rows.Count;
+                            //Set our image
+                            BitmapField bitmapField = (BitmapField)field;
+                            pictue.Image = bitmapField.Bitmap;
+                            //
+                            control = pictue;
+                        }
                     }
-                    
-                    control.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-                    control.UseCompatibleTextRendering = true;
+
                     //
                     tableLayoutPanel.Controls.Add(control, i, j);
                 }
@@ -1192,6 +1251,56 @@
             CheckFontHeight();
         }
 
+        /// <summary>
+        /// Not used yet.
+        /// </summary>
+        /// <param name="aField"></param>
+        private void CreateControlForDataField(DataField aField)
+        {
+            Control control=null;
+            if (aField is TextField)
+            {
+                MarqueeLabel label = new SharpDisplayManager.MarqueeLabel();
+                label.AutoEllipsis = true;
+                label.AutoSize = true;
+                label.BackColor = System.Drawing.Color.Transparent;
+                label.Dock = System.Windows.Forms.DockStyle.Fill;
+                label.Location = new System.Drawing.Point(1, 1);
+                label.Margin = new System.Windows.Forms.Padding(0);
+                label.Name = "marqueeLabel" + aField.Index;
+                label.OwnTimer = false;
+                label.PixelsPerSecond = 64;
+                label.Separator = "|";
+                //control.Size = new System.Drawing.Size(254, 30);
+                //control.TabIndex = 2;
+                label.Font = cds.Font;
+
+                label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+                label.UseCompatibleTextRendering = true;
+                TextField textField = (TextField)aField;
+                label.Text = textField.Text;
+                //
+                control = label;
+            }
+            else if (aField is BitmapField)
+            {
+                //Create picture box
+                PictureBox picture = new PictureBox();
+                picture.AutoSize = true;
+                picture.BackColor = System.Drawing.Color.Transparent;
+                picture.Dock = System.Windows.Forms.DockStyle.Fill;
+                picture.Location = new System.Drawing.Point(1, 1);
+                picture.Margin = new System.Windows.Forms.Padding(0);
+                picture.Name = "pictureBox" + aField;
+                //Set our image
+                BitmapField bitmapField = (BitmapField)aField;
+                picture.Image = bitmapField.Bitmap;
+                //
+                control = picture;
+            }
+
+        }
+
 
         private void buttonAlignLeft_Click(object sender, EventArgs e)
         {