Logs with time stamp.
authorStephaneLenclud
Tue, 19 Jul 2016 15:43:04 +0200
changeset 20633be8cb90c57
parent 205 127382a596e7
child 207 ca469451f8e6
Logs with time stamp.
CEC logs level configurable from UI.
Server/CecClient.cs
Server/ConsumerElectronicControl.cs
Server/MainForm.Designer.cs
Server/MainForm.cs
Server/MainForm.resx
Server/RichTextBoxTextWriter.cs
     1.1 --- a/Server/CecClient.cs	Mon Jul 18 15:56:25 2016 +0200
     1.2 +++ b/Server/CecClient.cs	Tue Jul 19 15:43:04 2016 +0200
     1.3 @@ -40,11 +40,46 @@
     1.4      class Client : CecCallbackMethods
     1.5      {
     1.6          /// <summary>
     1.7 +        /// Provide direct access to CEC library
     1.8 +        /// </summary>
     1.9 +        public LibCecSharp Lib
    1.10 +        {
    1.11 +            get
    1.12 +            {
    1.13 +                return iLib;
    1.14 +            }
    1.15 +        }
    1.16 +
    1.17 +        /// <summary>
    1.18 +        /// 
    1.19 +        /// </summary>
    1.20 +        public int LogLevel = (int)CecLogLevel.Notice;
    1.21 +
    1.22 +        /// <summary>
    1.23 +        /// 
    1.24 +        /// </summary>
    1.25 +        public bool FilterOutPollLogs = true;
    1.26 +
    1.27 +        /// <summary>
    1.28 +        /// 
    1.29 +        /// </summary>
    1.30 +        private LibCecSharp iLib;
    1.31 +        /// <summary>
    1.32 +        /// 
    1.33 +        /// </summary>
    1.34 +        private LibCECConfiguration Config;
    1.35 +
    1.36 +        /// <summary>
    1.37 +        /// 
    1.38 +        /// </summary>
    1.39 +        private bool iConnected;
    1.40 +
    1.41 +        /// <summary>
    1.42          /// 
    1.43          /// </summary>
    1.44          /// <param name="aDeviceName"></param>
    1.45          /// <param name="aHdmiPort"></param>
    1.46 -        public Client(string aDeviceName, byte aHdmiPort, CecDeviceType aDeviceType = CecDeviceType.PlaybackDevice, CecLogLevel aLogLevel = CecLogLevel.Warning)
    1.47 +        public Client(string aDeviceName, byte aHdmiPort, CecDeviceType aDeviceType = CecDeviceType.PlaybackDevice)
    1.48          {
    1.49              Config = new LibCECConfiguration();
    1.50              Config.DeviceTypes.Types[0] = aDeviceType;
    1.51 @@ -52,7 +87,6 @@
    1.52              Config.HDMIPort = aHdmiPort;
    1.53              //Config.ClientVersion = LibCECConfiguration.CurrentVersion;
    1.54              Config.SetCallbacks(this);
    1.55 -            LogLevel = (int)aLogLevel;
    1.56  
    1.57              iLib = new LibCecSharp(Config);
    1.58              iLib.InitVideoStandalone();
    1.59 @@ -148,6 +182,11 @@
    1.60                          break;
    1.61                      case CecLogLevel.Debug:
    1.62                          strLevel = "DEBUG: ";
    1.63 +                        if (message.Message.IndexOf("POLL") != -1 && FilterOutPollLogs)
    1.64 +                        {
    1.65 +                            //We have an option to prevent spamming with poll debug logs
    1.66 +                            return 1;
    1.67 +                        }
    1.68                          break;
    1.69                      default:
    1.70                          break;
    1.71 @@ -510,33 +549,6 @@
    1.72              }
    1.73          }
    1.74         
    1.75 -        /// <summary>
    1.76 -        /// Provide direct access to CEC library
    1.77 -        /// </summary>
    1.78 -        public LibCecSharp Lib
    1.79 -        {
    1.80 -            get
    1.81 -            {
    1.82 -                return iLib;
    1.83 -            }
    1.84 -        }
    1.85  
    1.86 -        /// <summary>
    1.87 -        /// 
    1.88 -        /// </summary>
    1.89 -        private int LogLevel;
    1.90 -        /// <summary>
    1.91 -        /// 
    1.92 -        /// </summary>
    1.93 -        private LibCecSharp iLib;
    1.94 -        /// <summary>
    1.95 -        /// 
    1.96 -        /// </summary>
    1.97 -        private LibCECConfiguration Config;
    1.98 -
    1.99 -        /// <summary>
   1.100 -        /// 
   1.101 -        /// </summary>
   1.102 -        private bool iConnected;
   1.103      }
   1.104  }
     2.1 --- a/Server/ConsumerElectronicControl.cs	Mon Jul 18 15:56:25 2016 +0200
     2.2 +++ b/Server/ConsumerElectronicControl.cs	Tue Jul 19 15:43:04 2016 +0200
     2.3 @@ -14,7 +14,7 @@
     2.4          ///
     2.5          private PowerManager.SettingNotifier iPowerSettingNotifier;
     2.6          ///
     2.7 -        private Cec.Client iCecClient;
     2.8 +        public Cec.Client Client;
     2.9          ///This flag will only work properly if both on and off events are monitored.
    2.10          ///TODO: have a more solid implementation
    2.11          public bool MonitorPowerOn;
    2.12 @@ -23,7 +23,7 @@
    2.13  
    2.14          public void TestSendKeys()
    2.15          {
    2.16 -            iCecClient.TestSendKey();
    2.17 +            Client.TestSendKey();
    2.18          }
    2.19  
    2.20          /// <summary>
    2.21 @@ -55,7 +55,7 @@
    2.22              }
    2.23  
    2.24              //CEC
    2.25 -            iCecClient = new Cec.Client(aDeviceName,aHdmiPort, CecDeviceType.PlaybackDevice, CecLogLevel.All&~CecLogLevel.Traffic&~CecLogLevel.Debug);
    2.26 +            Client = new Cec.Client(aDeviceName,aHdmiPort, CecDeviceType.PlaybackDevice);
    2.27              ConnectCecClient();
    2.28          }
    2.29  
    2.30 @@ -70,11 +70,11 @@
    2.31                  iPowerSettingNotifier = null;
    2.32              }
    2.33              //
    2.34 -            if (iCecClient != null)
    2.35 +            if (Client != null)
    2.36              {
    2.37 -                iCecClient.Close();
    2.38 -                iCecClient.Dispose();
    2.39 -                iCecClient = null;
    2.40 +                Client.Close();
    2.41 +                Client.Dispose();
    2.42 +                Client = null;
    2.43              }
    2.44          }
    2.45  
    2.46 @@ -84,7 +84,7 @@
    2.47          private void ConnectCecClient()
    2.48          {
    2.49              //Our client takes care of closing before trying to connect
    2.50 -            if (!iCecClient.Connect(1000))
    2.51 +            if (!Client.Connect(1000))
    2.52              {
    2.53                  Debug.WriteLine("WARNING: No CEC connection!");
    2.54              }
    2.55 @@ -92,7 +92,7 @@
    2.56  
    2.57          private void OnMonitorPowerOn()
    2.58          {
    2.59 -            Console.WriteLine("ON");
    2.60 +            Console.WriteLine("OnMonitorPowerOn");
    2.61  
    2.62              if (iReconnectToPowerTv)
    2.63              {
    2.64 @@ -103,13 +103,13 @@
    2.65              //iCecClient.Lib.PowerOnDevices(CecLogicalAddress.Tv);
    2.66              //iCecClient.Lib.SendKeypress(CecLogicalAddress.Tv,CecUserControlCode.PowerOnFunction,true);
    2.67              //Set ourselves as the active source
    2.68 -            iCecClient.Lib.SetActiveSource(CecDeviceType.PlaybackDevice);
    2.69 +            Client.Lib.SetActiveSource(CecDeviceType.PlaybackDevice);
    2.70              MonitorPowerOn = true;
    2.71          }
    2.72  
    2.73          private void OnMonitorPowerOff()
    2.74          {
    2.75 -            Console.WriteLine("OFF");
    2.76 +            Console.WriteLine("OnMonitorPowerOff");
    2.77  
    2.78              if (iReconnectToPowerTv)
    2.79              {
    2.80 @@ -117,7 +117,7 @@
    2.81              }
    2.82  
    2.83              //Try turning off the TV
    2.84 -            iCecClient.Lib.StandbyDevices(CecLogicalAddress.Tv);
    2.85 +            Client.Lib.StandbyDevices(CecLogicalAddress.Tv);
    2.86              //iCecClient.Lib.SendKeypress(CecLogicalAddress.Tv, CecUserControlCode.PowerOffFunction, true);
    2.87              //Tell everyone that we are no longer active
    2.88              //iCecClient.Lib.SetInactiveView();
     3.1 --- a/Server/MainForm.Designer.cs	Mon Jul 18 15:56:25 2016 +0200
     3.2 +++ b/Server/MainForm.Designer.cs	Tue Jul 19 15:43:04 2016 +0200
     3.3 @@ -99,6 +99,13 @@
     3.4              this.labelStartFileName = new System.Windows.Forms.Label();
     3.5              this.buttonSelectFile = new System.Windows.Forms.Button();
     3.6              this.tabPageCec = new System.Windows.Forms.TabPage();
     3.7 +            this.groupBoxCecLogOptions = new System.Windows.Forms.GroupBox();
     3.8 +            this.checkBoxCecLogNoPoll = new System.Windows.Forms.CheckBox();
     3.9 +            this.checkBoxCecLogTraffic = new System.Windows.Forms.CheckBox();
    3.10 +            this.checkBoxCecLogDebug = new System.Windows.Forms.CheckBox();
    3.11 +            this.checkBoxCecLogNotice = new System.Windows.Forms.CheckBox();
    3.12 +            this.checkBoxCecLogError = new System.Windows.Forms.CheckBox();
    3.13 +            this.checkBoxCecLogWarning = new System.Windows.Forms.CheckBox();
    3.14              this.checkBoxCecReconnectToPowerTv = new System.Windows.Forms.CheckBox();
    3.15              this.checkBoxCecMonitorOn = new System.Windows.Forms.CheckBox();
    3.16              this.checkBoxCecMonitorOff = new System.Windows.Forms.CheckBox();
    3.17 @@ -111,6 +118,7 @@
    3.18              this.checkBoxAutoStart = new System.Windows.Forms.CheckBox();
    3.19              this.buttonUpdate = new System.Windows.Forms.Button();
    3.20              this.tabPageLogs = new System.Windows.Forms.TabPage();
    3.21 +            this.buttonClearLogs = new System.Windows.Forms.Button();
    3.22              this.richTextBoxLogs = new System.Windows.Forms.RichTextBox();
    3.23              this.labelFontWidth = new System.Windows.Forms.Label();
    3.24              this.labelFontHeight = new System.Windows.Forms.Label();
    3.25 @@ -129,6 +137,7 @@
    3.26              this.tabPageInput.SuspendLayout();
    3.27              ((System.ComponentModel.ISupportInitialize)(this.pictureBoxGreenStart)).BeginInit();
    3.28              this.tabPageCec.SuspendLayout();
    3.29 +            this.groupBoxCecLogOptions.SuspendLayout();
    3.30              this.tabPageApp.SuspendLayout();
    3.31              this.tabPageLogs.SuspendLayout();
    3.32              this.SuspendLayout();
    3.33 @@ -217,10 +226,10 @@
    3.34              this.toolStripStatusLabelSpring,
    3.35              this.toolStripStatusLabelPower,
    3.36              this.toolStripStatusLabelFps});
    3.37 -            this.statusStrip.Location = new System.Drawing.Point(0, 420);
    3.38 +            this.statusStrip.Location = new System.Drawing.Point(0, 539);
    3.39              this.statusStrip.Name = "statusStrip";
    3.40              this.statusStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
    3.41 -            this.statusStrip.Size = new System.Drawing.Size(624, 22);
    3.42 +            this.statusStrip.Size = new System.Drawing.Size(784, 22);
    3.43              this.statusStrip.TabIndex = 1;
    3.44              this.statusStrip.Text = "statusStrip";
    3.45              // 
    3.46 @@ -233,7 +242,7 @@
    3.47              // toolStripStatusLabelSpring
    3.48              // 
    3.49              this.toolStripStatusLabelSpring.Name = "toolStripStatusLabelSpring";
    3.50 -            this.toolStripStatusLabelSpring.Size = new System.Drawing.Size(473, 17);
    3.51 +            this.toolStripStatusLabelSpring.Size = new System.Drawing.Size(633, 17);
    3.52              this.toolStripStatusLabelSpring.Spring = true;
    3.53              // 
    3.54              // toolStripStatusLabelPower
    3.55 @@ -258,15 +267,16 @@
    3.56              this.tabPageClients.Location = new System.Drawing.Point(4, 22);
    3.57              this.tabPageClients.Name = "tabPageClients";
    3.58              this.tabPageClients.Padding = new System.Windows.Forms.Padding(3);
    3.59 -            this.tabPageClients.Size = new System.Drawing.Size(592, 242);
    3.60 +            this.tabPageClients.Size = new System.Drawing.Size(752, 385);
    3.61              this.tabPageClients.TabIndex = 2;
    3.62              this.tabPageClients.Text = "Clients";
    3.63              this.tabPageClients.UseVisualStyleBackColor = true;
    3.64              // 
    3.65              // iCheckBoxStartIdleClient
    3.66              // 
    3.67 +            this.iCheckBoxStartIdleClient.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
    3.68              this.iCheckBoxStartIdleClient.AutoSize = true;
    3.69 -            this.iCheckBoxStartIdleClient.Location = new System.Drawing.Point(108, 217);
    3.70 +            this.iCheckBoxStartIdleClient.Location = new System.Drawing.Point(108, 340);
    3.71              this.iCheckBoxStartIdleClient.Name = "iCheckBoxStartIdleClient";
    3.72              this.iCheckBoxStartIdleClient.Size = new System.Drawing.Size(145, 17);
    3.73              this.iCheckBoxStartIdleClient.TabIndex = 22;
    3.74 @@ -286,7 +296,8 @@
    3.75              // 
    3.76              // buttonCloseClients
    3.77              // 
    3.78 -            this.buttonCloseClients.Location = new System.Drawing.Point(6, 213);
    3.79 +            this.buttonCloseClients.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
    3.80 +            this.buttonCloseClients.Location = new System.Drawing.Point(6, 336);
    3.81              this.buttonCloseClients.Name = "buttonCloseClients";
    3.82              this.buttonCloseClients.Size = new System.Drawing.Size(96, 23);
    3.83              this.buttonCloseClients.TabIndex = 20;
    3.84 @@ -311,7 +322,7 @@
    3.85              | System.Windows.Forms.AnchorStyles.Right)));
    3.86              this.iTreeViewClients.Location = new System.Drawing.Point(108, 6);
    3.87              this.iTreeViewClients.Name = "iTreeViewClients";
    3.88 -            this.iTreeViewClients.Size = new System.Drawing.Size(478, 205);
    3.89 +            this.iTreeViewClients.Size = new System.Drawing.Size(638, 328);
    3.90              this.iTreeViewClients.TabIndex = 0;
    3.91              this.iTreeViewClients.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewClients_AfterSelect);
    3.92              // 
    3.93 @@ -335,14 +346,14 @@
    3.94              this.tabPageDisplay.Location = new System.Drawing.Point(4, 22);
    3.95              this.tabPageDisplay.Name = "tabPageDisplay";
    3.96              this.tabPageDisplay.Padding = new System.Windows.Forms.Padding(3);
    3.97 -            this.tabPageDisplay.Size = new System.Drawing.Size(592, 242);
    3.98 +            this.tabPageDisplay.Size = new System.Drawing.Size(752, 385);
    3.99              this.tabPageDisplay.TabIndex = 0;
   3.100              this.tabPageDisplay.Text = "Display";
   3.101              this.tabPageDisplay.UseVisualStyleBackColor = true;
   3.102              // 
   3.103              // buttonShowClock
   3.104              // 
   3.105 -            this.buttonShowClock.Location = new System.Drawing.Point(293, 124);
   3.106 +            this.buttonShowClock.Location = new System.Drawing.Point(6, 122);
   3.107              this.buttonShowClock.Name = "buttonShowClock";
   3.108              this.buttonShowClock.Size = new System.Drawing.Size(75, 23);
   3.109              this.buttonShowClock.TabIndex = 23;
   3.110 @@ -352,7 +363,7 @@
   3.111              // 
   3.112              // buttonHideClock
   3.113              // 
   3.114 -            this.buttonHideClock.Location = new System.Drawing.Point(293, 153);
   3.115 +            this.buttonHideClock.Location = new System.Drawing.Point(6, 151);
   3.116              this.buttonHideClock.Name = "buttonHideClock";
   3.117              this.buttonHideClock.Size = new System.Drawing.Size(75, 23);
   3.118              this.buttonHideClock.TabIndex = 22;
   3.119 @@ -362,7 +373,7 @@
   3.120              // 
   3.121              // buttonPowerOff
   3.122              // 
   3.123 -            this.buttonPowerOff.Location = new System.Drawing.Point(293, 211);
   3.124 +            this.buttonPowerOff.Location = new System.Drawing.Point(6, 209);
   3.125              this.buttonPowerOff.Name = "buttonPowerOff";
   3.126              this.buttonPowerOff.Size = new System.Drawing.Size(75, 23);
   3.127              this.buttonPowerOff.TabIndex = 21;
   3.128 @@ -372,7 +383,7 @@
   3.129              // 
   3.130              // buttonPowerOn
   3.131              // 
   3.132 -            this.buttonPowerOn.Location = new System.Drawing.Point(293, 182);
   3.133 +            this.buttonPowerOn.Location = new System.Drawing.Point(6, 180);
   3.134              this.buttonPowerOn.Name = "buttonPowerOn";
   3.135              this.buttonPowerOn.Size = new System.Drawing.Size(75, 23);
   3.136              this.buttonPowerOn.TabIndex = 20;
   3.137 @@ -412,7 +423,7 @@
   3.138              // buttonSuspend
   3.139              // 
   3.140              this.buttonSuspend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.141 -            this.buttonSuspend.Location = new System.Drawing.Point(6, 184);
   3.142 +            this.buttonSuspend.Location = new System.Drawing.Point(6, 317);
   3.143              this.buttonSuspend.Name = "buttonSuspend";
   3.144              this.buttonSuspend.Size = new System.Drawing.Size(75, 23);
   3.145              this.buttonSuspend.TabIndex = 16;
   3.146 @@ -424,7 +435,7 @@
   3.147              // 
   3.148              this.checkBoxConnectOnStartup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.149              this.checkBoxConnectOnStartup.AutoSize = true;
   3.150 -            this.checkBoxConnectOnStartup.Location = new System.Drawing.Point(113, 217);
   3.151 +            this.checkBoxConnectOnStartup.Location = new System.Drawing.Point(113, 350);
   3.152              this.checkBoxConnectOnStartup.Name = "checkBoxConnectOnStartup";
   3.153              this.checkBoxConnectOnStartup.Size = new System.Drawing.Size(119, 17);
   3.154              this.checkBoxConnectOnStartup.TabIndex = 13;
   3.155 @@ -437,10 +448,10 @@
   3.156              this.trackBarBrightness.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
   3.157              | System.Windows.Forms.AnchorStyles.Right)));
   3.158              this.trackBarBrightness.BackColor = System.Drawing.SystemColors.Window;
   3.159 -            this.trackBarBrightness.Location = new System.Drawing.Point(544, 9);
   3.160 +            this.trackBarBrightness.Location = new System.Drawing.Point(704, 9);
   3.161              this.trackBarBrightness.Name = "trackBarBrightness";
   3.162              this.trackBarBrightness.Orientation = System.Windows.Forms.Orientation.Vertical;
   3.163 -            this.trackBarBrightness.Size = new System.Drawing.Size(45, 225);
   3.164 +            this.trackBarBrightness.Size = new System.Drawing.Size(45, 358);
   3.165              this.trackBarBrightness.TabIndex = 10;
   3.166              this.trackBarBrightness.TickStyle = System.Windows.Forms.TickStyle.Both;
   3.167              this.toolTip.SetToolTip(this.trackBarBrightness, "Brightness adjustment");
   3.168 @@ -489,7 +500,7 @@
   3.169              // buttonCapture
   3.170              // 
   3.171              this.buttonCapture.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.172 -            this.buttonCapture.Location = new System.Drawing.Point(6, 213);
   3.173 +            this.buttonCapture.Location = new System.Drawing.Point(6, 346);
   3.174              this.buttonCapture.Name = "buttonCapture";
   3.175              this.buttonCapture.Size = new System.Drawing.Size(75, 23);
   3.176              this.buttonCapture.TabIndex = 5;
   3.177 @@ -514,7 +525,7 @@
   3.178              // 
   3.179              this.checkBoxFixedPitchFontOnly.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.180              this.checkBoxFixedPitchFontOnly.AutoSize = true;
   3.181 -            this.checkBoxFixedPitchFontOnly.Location = new System.Drawing.Point(87, 217);
   3.182 +            this.checkBoxFixedPitchFontOnly.Location = new System.Drawing.Point(87, 362);
   3.183              this.checkBoxFixedPitchFontOnly.Name = "checkBoxFixedPitchFontOnly";
   3.184              this.checkBoxFixedPitchFontOnly.Size = new System.Drawing.Size(120, 17);
   3.185              this.checkBoxFixedPitchFontOnly.TabIndex = 17;
   3.186 @@ -525,7 +536,7 @@
   3.187              // 
   3.188              this.checkBoxShowBorders.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
   3.189              this.checkBoxShowBorders.AutoSize = true;
   3.190 -            this.checkBoxShowBorders.Location = new System.Drawing.Point(485, 29);
   3.191 +            this.checkBoxShowBorders.Location = new System.Drawing.Point(645, 29);
   3.192              this.checkBoxShowBorders.Name = "checkBoxShowBorders";
   3.193              this.checkBoxShowBorders.Size = new System.Drawing.Size(91, 17);
   3.194              this.checkBoxShowBorders.TabIndex = 11;
   3.195 @@ -536,7 +547,7 @@
   3.196              // buttonFont
   3.197              // 
   3.198              this.buttonFont.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.199 -            this.buttonFont.Location = new System.Drawing.Point(6, 213);
   3.200 +            this.buttonFont.Location = new System.Drawing.Point(6, 356);
   3.201              this.buttonFont.Name = "buttonFont";
   3.202              this.buttonFont.Size = new System.Drawing.Size(75, 23);
   3.203              this.buttonFont.TabIndex = 0;
   3.204 @@ -557,10 +568,10 @@
   3.205              this.tabControl.Controls.Add(this.tabPageCec);
   3.206              this.tabControl.Controls.Add(this.tabPageApp);
   3.207              this.tabControl.Controls.Add(this.tabPageLogs);
   3.208 -            this.tabControl.Location = new System.Drawing.Point(12, 139);
   3.209 +            this.tabControl.Location = new System.Drawing.Point(12, 125);
   3.210              this.tabControl.Name = "tabControl";
   3.211              this.tabControl.SelectedIndex = 0;
   3.212 -            this.tabControl.Size = new System.Drawing.Size(600, 268);
   3.213 +            this.tabControl.Size = new System.Drawing.Size(760, 411);
   3.214              this.tabControl.TabIndex = 0;
   3.215              // 
   3.216              // tabPageDesign
   3.217 @@ -580,15 +591,16 @@
   3.218              this.tabPageDesign.Location = new System.Drawing.Point(4, 22);
   3.219              this.tabPageDesign.Name = "tabPageDesign";
   3.220              this.tabPageDesign.Padding = new System.Windows.Forms.Padding(3);
   3.221 -            this.tabPageDesign.Size = new System.Drawing.Size(592, 242);
   3.222 +            this.tabPageDesign.Size = new System.Drawing.Size(752, 385);
   3.223              this.tabPageDesign.TabIndex = 3;
   3.224              this.tabPageDesign.Text = "Design";
   3.225              this.tabPageDesign.UseVisualStyleBackColor = true;
   3.226              // 
   3.227              // labelScrollingSpeed
   3.228              // 
   3.229 +            this.labelScrollingSpeed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.230              this.labelScrollingSpeed.AutoSize = true;
   3.231 -            this.labelScrollingSpeed.Location = new System.Drawing.Point(84, 119);
   3.232 +            this.labelScrollingSpeed.Location = new System.Drawing.Point(92, 248);
   3.233              this.labelScrollingSpeed.Name = "labelScrollingSpeed";
   3.234              this.labelScrollingSpeed.Size = new System.Drawing.Size(115, 13);
   3.235              this.labelScrollingSpeed.TabIndex = 28;
   3.236 @@ -596,7 +608,8 @@
   3.237              // 
   3.238              // maskedTextBoxScrollingSpeed
   3.239              // 
   3.240 -            this.maskedTextBoxScrollingSpeed.Location = new System.Drawing.Point(205, 116);
   3.241 +            this.maskedTextBoxScrollingSpeed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.242 +            this.maskedTextBoxScrollingSpeed.Location = new System.Drawing.Point(213, 245);
   3.243              this.maskedTextBoxScrollingSpeed.Mask = "000";
   3.244              this.maskedTextBoxScrollingSpeed.Name = "maskedTextBoxScrollingSpeed";
   3.245              this.maskedTextBoxScrollingSpeed.PromptChar = ' ';
   3.246 @@ -606,8 +619,9 @@
   3.247              // 
   3.248              // labelScrollLoopSeparator
   3.249              // 
   3.250 +            this.labelScrollLoopSeparator.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.251              this.labelScrollLoopSeparator.AutoSize = true;
   3.252 -            this.labelScrollLoopSeparator.Location = new System.Drawing.Point(90, 145);
   3.253 +            this.labelScrollLoopSeparator.Location = new System.Drawing.Point(98, 274);
   3.254              this.labelScrollLoopSeparator.Name = "labelScrollLoopSeparator";
   3.255              this.labelScrollLoopSeparator.Size = new System.Drawing.Size(109, 13);
   3.256              this.labelScrollLoopSeparator.TabIndex = 26;
   3.257 @@ -615,7 +629,8 @@
   3.258              // 
   3.259              // textBoxScrollLoopSeparator
   3.260              // 
   3.261 -            this.textBoxScrollLoopSeparator.Location = new System.Drawing.Point(205, 142);
   3.262 +            this.textBoxScrollLoopSeparator.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.263 +            this.textBoxScrollLoopSeparator.Location = new System.Drawing.Point(213, 271);
   3.264              this.textBoxScrollLoopSeparator.Name = "textBoxScrollLoopSeparator";
   3.265              this.textBoxScrollLoopSeparator.Size = new System.Drawing.Size(74, 20);
   3.266              this.textBoxScrollLoopSeparator.TabIndex = 25;
   3.267 @@ -623,8 +638,9 @@
   3.268              // 
   3.269              // labelMinFontSize
   3.270              // 
   3.271 +            this.labelMinFontSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.272              this.labelMinFontSize.AutoSize = true;
   3.273 -            this.labelMinFontSize.Location = new System.Drawing.Point(80, 194);
   3.274 +            this.labelMinFontSize.Location = new System.Drawing.Point(88, 323);
   3.275              this.labelMinFontSize.Name = "labelMinFontSize";
   3.276              this.labelMinFontSize.Size = new System.Drawing.Size(119, 13);
   3.277              this.labelMinFontSize.TabIndex = 24;
   3.278 @@ -632,7 +648,8 @@
   3.279              // 
   3.280              // maskedTextBoxMinFontSize
   3.281              // 
   3.282 -            this.maskedTextBoxMinFontSize.Location = new System.Drawing.Point(205, 191);
   3.283 +            this.maskedTextBoxMinFontSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.284 +            this.maskedTextBoxMinFontSize.Location = new System.Drawing.Point(213, 320);
   3.285              this.maskedTextBoxMinFontSize.Mask = "000";
   3.286              this.maskedTextBoxMinFontSize.Name = "maskedTextBoxMinFontSize";
   3.287              this.maskedTextBoxMinFontSize.PromptChar = ' ';
   3.288 @@ -644,7 +661,7 @@
   3.289              // 
   3.290              this.checkBoxScaleToFit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.291              this.checkBoxScaleToFit.AutoSize = true;
   3.292 -            this.checkBoxScaleToFit.Location = new System.Drawing.Point(87, 168);
   3.293 +            this.checkBoxScaleToFit.Location = new System.Drawing.Point(86, 297);
   3.294              this.checkBoxScaleToFit.Name = "checkBoxScaleToFit";
   3.295              this.checkBoxScaleToFit.Size = new System.Drawing.Size(201, 17);
   3.296              this.checkBoxScaleToFit.TabIndex = 22;
   3.297 @@ -656,7 +673,7 @@
   3.298              // 
   3.299              this.checkBoxInverseColors.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
   3.300              this.checkBoxInverseColors.AutoSize = true;
   3.301 -            this.checkBoxInverseColors.Location = new System.Drawing.Point(485, 52);
   3.302 +            this.checkBoxInverseColors.Location = new System.Drawing.Point(645, 52);
   3.303              this.checkBoxInverseColors.Name = "checkBoxInverseColors";
   3.304              this.checkBoxInverseColors.Size = new System.Drawing.Size(92, 17);
   3.305              this.checkBoxInverseColors.TabIndex = 21;
   3.306 @@ -668,7 +685,7 @@
   3.307              // 
   3.308              this.checkBoxReverseScreen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
   3.309              this.checkBoxReverseScreen.AutoSize = true;
   3.310 -            this.checkBoxReverseScreen.Location = new System.Drawing.Point(485, 6);
   3.311 +            this.checkBoxReverseScreen.Location = new System.Drawing.Point(645, 6);
   3.312              this.checkBoxReverseScreen.Name = "checkBoxReverseScreen";
   3.313              this.checkBoxReverseScreen.Size = new System.Drawing.Size(101, 17);
   3.314              this.checkBoxReverseScreen.TabIndex = 14;
   3.315 @@ -685,7 +702,7 @@
   3.316              this.tabPageAudio.Location = new System.Drawing.Point(4, 22);
   3.317              this.tabPageAudio.Name = "tabPageAudio";
   3.318              this.tabPageAudio.Padding = new System.Windows.Forms.Padding(3);
   3.319 -            this.tabPageAudio.Size = new System.Drawing.Size(592, 242);
   3.320 +            this.tabPageAudio.Size = new System.Drawing.Size(752, 385);
   3.321              this.tabPageAudio.TabIndex = 5;
   3.322              this.tabPageAudio.Text = "Audio";
   3.323              this.tabPageAudio.UseVisualStyleBackColor = true;
   3.324 @@ -704,7 +721,7 @@
   3.325              // 
   3.326              this.checkBoxShowVolumeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.327              this.checkBoxShowVolumeLabel.AutoSize = true;
   3.328 -            this.checkBoxShowVolumeLabel.Location = new System.Drawing.Point(3, 196);
   3.329 +            this.checkBoxShowVolumeLabel.Location = new System.Drawing.Point(3, 329);
   3.330              this.checkBoxShowVolumeLabel.Name = "checkBoxShowVolumeLabel";
   3.331              this.checkBoxShowVolumeLabel.Size = new System.Drawing.Size(115, 17);
   3.332              this.checkBoxShowVolumeLabel.TabIndex = 18;
   3.333 @@ -716,7 +733,7 @@
   3.334              // 
   3.335              this.checkBoxMute.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.336              this.checkBoxMute.AutoSize = true;
   3.337 -            this.checkBoxMute.Location = new System.Drawing.Point(3, 219);
   3.338 +            this.checkBoxMute.Location = new System.Drawing.Point(3, 352);
   3.339              this.checkBoxMute.Name = "checkBoxMute";
   3.340              this.checkBoxMute.Size = new System.Drawing.Size(50, 17);
   3.341              this.checkBoxMute.TabIndex = 17;
   3.342 @@ -726,12 +743,14 @@
   3.343              // 
   3.344              // trackBarMasterVolume
   3.345              // 
   3.346 +            this.trackBarMasterVolume.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
   3.347 +            | System.Windows.Forms.AnchorStyles.Right)));
   3.348              this.trackBarMasterVolume.BackColor = System.Drawing.SystemColors.Window;
   3.349 -            this.trackBarMasterVolume.Location = new System.Drawing.Point(541, 6);
   3.350 +            this.trackBarMasterVolume.Location = new System.Drawing.Point(701, 6);
   3.351              this.trackBarMasterVolume.Maximum = 100;
   3.352              this.trackBarMasterVolume.Name = "trackBarMasterVolume";
   3.353              this.trackBarMasterVolume.Orientation = System.Windows.Forms.Orientation.Vertical;
   3.354 -            this.trackBarMasterVolume.Size = new System.Drawing.Size(45, 230);
   3.355 +            this.trackBarMasterVolume.Size = new System.Drawing.Size(45, 373);
   3.356              this.trackBarMasterVolume.TabIndex = 0;
   3.357              this.trackBarMasterVolume.TickFrequency = 10;
   3.358              this.trackBarMasterVolume.TickStyle = System.Windows.Forms.TickStyle.Both;
   3.359 @@ -748,7 +767,7 @@
   3.360              this.tabPageInput.Location = new System.Drawing.Point(4, 22);
   3.361              this.tabPageInput.Name = "tabPageInput";
   3.362              this.tabPageInput.Padding = new System.Windows.Forms.Padding(3);
   3.363 -            this.tabPageInput.Size = new System.Drawing.Size(592, 242);
   3.364 +            this.tabPageInput.Size = new System.Drawing.Size(752, 385);
   3.365              this.tabPageInput.TabIndex = 6;
   3.366              this.tabPageInput.Text = "Input";
   3.367              this.tabPageInput.UseVisualStyleBackColor = true;
   3.368 @@ -803,6 +822,7 @@
   3.369              // 
   3.370              // tabPageCec
   3.371              // 
   3.372 +            this.tabPageCec.Controls.Add(this.groupBoxCecLogOptions);
   3.373              this.tabPageCec.Controls.Add(this.checkBoxCecReconnectToPowerTv);
   3.374              this.tabPageCec.Controls.Add(this.checkBoxCecMonitorOn);
   3.375              this.tabPageCec.Controls.Add(this.checkBoxCecMonitorOff);
   3.376 @@ -812,14 +832,103 @@
   3.377              this.tabPageCec.Location = new System.Drawing.Point(4, 22);
   3.378              this.tabPageCec.Name = "tabPageCec";
   3.379              this.tabPageCec.Padding = new System.Windows.Forms.Padding(3);
   3.380 -            this.tabPageCec.Size = new System.Drawing.Size(592, 242);
   3.381 +            this.tabPageCec.Size = new System.Drawing.Size(752, 385);
   3.382              this.tabPageCec.TabIndex = 7;
   3.383              this.tabPageCec.Text = "CEC";
   3.384              this.tabPageCec.UseVisualStyleBackColor = true;
   3.385              // 
   3.386 +            // groupBoxCecLogOptions
   3.387 +            // 
   3.388 +            this.groupBoxCecLogOptions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.389 +            this.groupBoxCecLogOptions.Controls.Add(this.checkBoxCecLogNoPoll);
   3.390 +            this.groupBoxCecLogOptions.Controls.Add(this.checkBoxCecLogTraffic);
   3.391 +            this.groupBoxCecLogOptions.Controls.Add(this.checkBoxCecLogDebug);
   3.392 +            this.groupBoxCecLogOptions.Controls.Add(this.checkBoxCecLogNotice);
   3.393 +            this.groupBoxCecLogOptions.Controls.Add(this.checkBoxCecLogError);
   3.394 +            this.groupBoxCecLogOptions.Controls.Add(this.checkBoxCecLogWarning);
   3.395 +            this.groupBoxCecLogOptions.Location = new System.Drawing.Point(6, 239);
   3.396 +            this.groupBoxCecLogOptions.Name = "groupBoxCecLogOptions";
   3.397 +            this.groupBoxCecLogOptions.Size = new System.Drawing.Size(165, 140);
   3.398 +            this.groupBoxCecLogOptions.TabIndex = 25;
   3.399 +            this.groupBoxCecLogOptions.TabStop = false;
   3.400 +            this.groupBoxCecLogOptions.Text = "Log options";
   3.401 +            // 
   3.402 +            // checkBoxCecLogNoPoll
   3.403 +            // 
   3.404 +            this.checkBoxCecLogNoPoll.AutoSize = true;
   3.405 +            this.checkBoxCecLogNoPoll.Checked = true;
   3.406 +            this.checkBoxCecLogNoPoll.CheckState = System.Windows.Forms.CheckState.Checked;
   3.407 +            this.checkBoxCecLogNoPoll.Location = new System.Drawing.Point(76, 24);
   3.408 +            this.checkBoxCecLogNoPoll.Name = "checkBoxCecLogNoPoll";
   3.409 +            this.checkBoxCecLogNoPoll.Size = new System.Drawing.Size(59, 17);
   3.410 +            this.checkBoxCecLogNoPoll.TabIndex = 30;
   3.411 +            this.checkBoxCecLogNoPoll.Text = "No poll";
   3.412 +            this.checkBoxCecLogNoPoll.UseVisualStyleBackColor = true;
   3.413 +            this.checkBoxCecLogNoPoll.CheckedChanged += new System.EventHandler(this.checkBoxCecLogs_CheckedChanged);
   3.414 +            // 
   3.415 +            // checkBoxCecLogTraffic
   3.416 +            // 
   3.417 +            this.checkBoxCecLogTraffic.AutoSize = true;
   3.418 +            this.checkBoxCecLogTraffic.Location = new System.Drawing.Point(6, 93);
   3.419 +            this.checkBoxCecLogTraffic.Name = "checkBoxCecLogTraffic";
   3.420 +            this.checkBoxCecLogTraffic.Size = new System.Drawing.Size(56, 17);
   3.421 +            this.checkBoxCecLogTraffic.TabIndex = 29;
   3.422 +            this.checkBoxCecLogTraffic.Text = "Traffic";
   3.423 +            this.checkBoxCecLogTraffic.UseVisualStyleBackColor = true;
   3.424 +            this.checkBoxCecLogTraffic.CheckedChanged += new System.EventHandler(this.checkBoxCecLogs_CheckedChanged);
   3.425 +            // 
   3.426 +            // checkBoxCecLogDebug
   3.427 +            // 
   3.428 +            this.checkBoxCecLogDebug.AutoSize = true;
   3.429 +            this.checkBoxCecLogDebug.Location = new System.Drawing.Point(6, 116);
   3.430 +            this.checkBoxCecLogDebug.Name = "checkBoxCecLogDebug";
   3.431 +            this.checkBoxCecLogDebug.Size = new System.Drawing.Size(58, 17);
   3.432 +            this.checkBoxCecLogDebug.TabIndex = 28;
   3.433 +            this.checkBoxCecLogDebug.Text = "Debug";
   3.434 +            this.checkBoxCecLogDebug.UseVisualStyleBackColor = true;
   3.435 +            this.checkBoxCecLogDebug.CheckedChanged += new System.EventHandler(this.checkBoxCecLogs_CheckedChanged);
   3.436 +            // 
   3.437 +            // checkBoxCecLogNotice
   3.438 +            // 
   3.439 +            this.checkBoxCecLogNotice.AutoSize = true;
   3.440 +            this.checkBoxCecLogNotice.Checked = true;
   3.441 +            this.checkBoxCecLogNotice.CheckState = System.Windows.Forms.CheckState.Checked;
   3.442 +            this.checkBoxCecLogNotice.Location = new System.Drawing.Point(6, 70);
   3.443 +            this.checkBoxCecLogNotice.Name = "checkBoxCecLogNotice";
   3.444 +            this.checkBoxCecLogNotice.Size = new System.Drawing.Size(57, 17);
   3.445 +            this.checkBoxCecLogNotice.TabIndex = 27;
   3.446 +            this.checkBoxCecLogNotice.Text = "Notice";
   3.447 +            this.checkBoxCecLogNotice.UseVisualStyleBackColor = true;
   3.448 +            this.checkBoxCecLogNotice.CheckedChanged += new System.EventHandler(this.checkBoxCecLogs_CheckedChanged);
   3.449 +            // 
   3.450 +            // checkBoxCecLogError
   3.451 +            // 
   3.452 +            this.checkBoxCecLogError.AutoSize = true;
   3.453 +            this.checkBoxCecLogError.Checked = true;
   3.454 +            this.checkBoxCecLogError.CheckState = System.Windows.Forms.CheckState.Checked;
   3.455 +            this.checkBoxCecLogError.Location = new System.Drawing.Point(6, 24);
   3.456 +            this.checkBoxCecLogError.Name = "checkBoxCecLogError";
   3.457 +            this.checkBoxCecLogError.Size = new System.Drawing.Size(48, 17);
   3.458 +            this.checkBoxCecLogError.TabIndex = 26;
   3.459 +            this.checkBoxCecLogError.Text = "Error";
   3.460 +            this.checkBoxCecLogError.UseVisualStyleBackColor = true;
   3.461 +            this.checkBoxCecLogError.CheckedChanged += new System.EventHandler(this.checkBoxCecLogs_CheckedChanged);
   3.462 +            // 
   3.463 +            // checkBoxCecLogWarning
   3.464 +            // 
   3.465 +            this.checkBoxCecLogWarning.AutoSize = true;
   3.466 +            this.checkBoxCecLogWarning.Checked = true;
   3.467 +            this.checkBoxCecLogWarning.CheckState = System.Windows.Forms.CheckState.Checked;
   3.468 +            this.checkBoxCecLogWarning.Location = new System.Drawing.Point(6, 47);
   3.469 +            this.checkBoxCecLogWarning.Name = "checkBoxCecLogWarning";
   3.470 +            this.checkBoxCecLogWarning.Size = new System.Drawing.Size(66, 17);
   3.471 +            this.checkBoxCecLogWarning.TabIndex = 25;
   3.472 +            this.checkBoxCecLogWarning.Text = "Warning";
   3.473 +            this.checkBoxCecLogWarning.UseVisualStyleBackColor = true;
   3.474 +            this.checkBoxCecLogWarning.CheckedChanged += new System.EventHandler(this.checkBoxCecLogs_CheckedChanged);
   3.475 +            // 
   3.476              // checkBoxCecReconnectToPowerTv
   3.477              // 
   3.478 -            this.checkBoxCecReconnectToPowerTv.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.479              this.checkBoxCecReconnectToPowerTv.AutoSize = true;
   3.480              this.checkBoxCecReconnectToPowerTv.Location = new System.Drawing.Point(6, 115);
   3.481              this.checkBoxCecReconnectToPowerTv.Name = "checkBoxCecReconnectToPowerTv";
   3.482 @@ -831,7 +940,6 @@
   3.483              // 
   3.484              // checkBoxCecMonitorOn
   3.485              // 
   3.486 -            this.checkBoxCecMonitorOn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.487              this.checkBoxCecMonitorOn.AutoSize = true;
   3.488              this.checkBoxCecMonitorOn.Location = new System.Drawing.Point(6, 92);
   3.489              this.checkBoxCecMonitorOn.Name = "checkBoxCecMonitorOn";
   3.490 @@ -843,7 +951,6 @@
   3.491              // 
   3.492              // checkBoxCecMonitorOff
   3.493              // 
   3.494 -            this.checkBoxCecMonitorOff.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.495              this.checkBoxCecMonitorOff.AutoSize = true;
   3.496              this.checkBoxCecMonitorOff.Location = new System.Drawing.Point(6, 69);
   3.497              this.checkBoxCecMonitorOff.Name = "checkBoxCecMonitorOff";
   3.498 @@ -855,7 +962,6 @@
   3.499              // 
   3.500              // checkBoxCecEnabled
   3.501              // 
   3.502 -            this.checkBoxCecEnabled.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.503              this.checkBoxCecEnabled.AutoSize = true;
   3.504              this.checkBoxCecEnabled.Location = new System.Drawing.Point(6, 6);
   3.505              this.checkBoxCecEnabled.Name = "checkBoxCecEnabled";
   3.506 @@ -903,7 +1009,7 @@
   3.507              this.tabPageApp.Location = new System.Drawing.Point(4, 22);
   3.508              this.tabPageApp.Name = "tabPageApp";
   3.509              this.tabPageApp.Padding = new System.Windows.Forms.Padding(3);
   3.510 -            this.tabPageApp.Size = new System.Drawing.Size(592, 242);
   3.511 +            this.tabPageApp.Size = new System.Drawing.Size(752, 385);
   3.512              this.tabPageApp.TabIndex = 4;
   3.513              this.tabPageApp.Text = "Application";
   3.514              this.tabPageApp.UseVisualStyleBackColor = true;
   3.515 @@ -912,7 +1018,7 @@
   3.516              // 
   3.517              this.checkBoxStartMinimized.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.518              this.checkBoxStartMinimized.AutoSize = true;
   3.519 -            this.checkBoxStartMinimized.Location = new System.Drawing.Point(8, 144);
   3.520 +            this.checkBoxStartMinimized.Location = new System.Drawing.Point(6, 285);
   3.521              this.checkBoxStartMinimized.Name = "checkBoxStartMinimized";
   3.522              this.checkBoxStartMinimized.Size = new System.Drawing.Size(96, 17);
   3.523              this.checkBoxStartMinimized.TabIndex = 16;
   3.524 @@ -924,7 +1030,7 @@
   3.525              // 
   3.526              this.checkBoxMinimizeToTray.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.527              this.checkBoxMinimizeToTray.AutoSize = true;
   3.528 -            this.checkBoxMinimizeToTray.Location = new System.Drawing.Point(8, 167);
   3.529 +            this.checkBoxMinimizeToTray.Location = new System.Drawing.Point(6, 308);
   3.530              this.checkBoxMinimizeToTray.Name = "checkBoxMinimizeToTray";
   3.531              this.checkBoxMinimizeToTray.Size = new System.Drawing.Size(133, 17);
   3.532              this.checkBoxMinimizeToTray.TabIndex = 15;
   3.533 @@ -936,7 +1042,7 @@
   3.534              // 
   3.535              this.checkBoxAutoStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.536              this.checkBoxAutoStart.AutoSize = true;
   3.537 -            this.checkBoxAutoStart.Location = new System.Drawing.Point(8, 190);
   3.538 +            this.checkBoxAutoStart.Location = new System.Drawing.Point(6, 331);
   3.539              this.checkBoxAutoStart.Name = "checkBoxAutoStart";
   3.540              this.checkBoxAutoStart.Size = new System.Drawing.Size(143, 17);
   3.541              this.checkBoxAutoStart.TabIndex = 14;
   3.542 @@ -946,7 +1052,8 @@
   3.543              // 
   3.544              // buttonUpdate
   3.545              // 
   3.546 -            this.buttonUpdate.Location = new System.Drawing.Point(6, 213);
   3.547 +            this.buttonUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   3.548 +            this.buttonUpdate.Location = new System.Drawing.Point(6, 354);
   3.549              this.buttonUpdate.Name = "buttonUpdate";
   3.550              this.buttonUpdate.Size = new System.Drawing.Size(75, 23);
   3.551              this.buttonUpdate.TabIndex = 0;
   3.552 @@ -956,15 +1063,26 @@
   3.553              // 
   3.554              // tabPageLogs
   3.555              // 
   3.556 +            this.tabPageLogs.Controls.Add(this.buttonClearLogs);
   3.557              this.tabPageLogs.Controls.Add(this.richTextBoxLogs);
   3.558              this.tabPageLogs.Location = new System.Drawing.Point(4, 22);
   3.559              this.tabPageLogs.Name = "tabPageLogs";
   3.560              this.tabPageLogs.Padding = new System.Windows.Forms.Padding(3);
   3.561 -            this.tabPageLogs.Size = new System.Drawing.Size(592, 242);
   3.562 +            this.tabPageLogs.Size = new System.Drawing.Size(752, 385);
   3.563              this.tabPageLogs.TabIndex = 8;
   3.564              this.tabPageLogs.Text = "Logs";
   3.565              this.tabPageLogs.UseVisualStyleBackColor = true;
   3.566              // 
   3.567 +            // buttonClearLogs
   3.568 +            // 
   3.569 +            this.buttonClearLogs.Location = new System.Drawing.Point(671, 6);
   3.570 +            this.buttonClearLogs.Name = "buttonClearLogs";
   3.571 +            this.buttonClearLogs.Size = new System.Drawing.Size(75, 23);
   3.572 +            this.buttonClearLogs.TabIndex = 2;
   3.573 +            this.buttonClearLogs.Text = "Clear";
   3.574 +            this.buttonClearLogs.UseVisualStyleBackColor = true;
   3.575 +            this.buttonClearLogs.Click += new System.EventHandler(this.buttonClearLogs_Click);
   3.576 +            // 
   3.577              // richTextBoxLogs
   3.578              // 
   3.579              this.richTextBoxLogs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
   3.580 @@ -976,7 +1094,7 @@
   3.581              this.richTextBoxLogs.Location = new System.Drawing.Point(6, 6);
   3.582              this.richTextBoxLogs.Name = "richTextBoxLogs";
   3.583              this.richTextBoxLogs.ReadOnly = true;
   3.584 -            this.richTextBoxLogs.Size = new System.Drawing.Size(580, 230);
   3.585 +            this.richTextBoxLogs.Size = new System.Drawing.Size(740, 373);
   3.586              this.richTextBoxLogs.TabIndex = 1;
   3.587              this.richTextBoxLogs.Text = "";
   3.588              this.richTextBoxLogs.WordWrap = false;
   3.589 @@ -1007,7 +1125,7 @@
   3.590              // 
   3.591              this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
   3.592              this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
   3.593 -            this.ClientSize = new System.Drawing.Size(624, 442);
   3.594 +            this.ClientSize = new System.Drawing.Size(784, 561);
   3.595              this.Controls.Add(this.labelFontHeight);
   3.596              this.Controls.Add(this.labelFontWidth);
   3.597              this.Controls.Add(this.labelWarning);
   3.598 @@ -1015,7 +1133,7 @@
   3.599              this.Controls.Add(this.tabControl);
   3.600              this.Controls.Add(this.panelDisplay);
   3.601              this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
   3.602 -            this.MinimumSize = new System.Drawing.Size(640, 480);
   3.603 +            this.MinimumSize = new System.Drawing.Size(800, 600);
   3.604              this.Name = "MainForm";
   3.605              this.Text = "Sharp Display Manager";
   3.606              this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
   3.607 @@ -1043,6 +1161,8 @@
   3.608              ((System.ComponentModel.ISupportInitialize)(this.pictureBoxGreenStart)).EndInit();
   3.609              this.tabPageCec.ResumeLayout(false);
   3.610              this.tabPageCec.PerformLayout();
   3.611 +            this.groupBoxCecLogOptions.ResumeLayout(false);
   3.612 +            this.groupBoxCecLogOptions.PerformLayout();
   3.613              this.tabPageApp.ResumeLayout(false);
   3.614              this.tabPageApp.PerformLayout();
   3.615              this.tabPageLogs.ResumeLayout(false);
   3.616 @@ -1130,6 +1250,14 @@
   3.617          private System.Windows.Forms.TabPage tabPageLogs;
   3.618          private System.Windows.Forms.RichTextBox richTextBoxLogs;
   3.619          private System.Windows.Forms.CheckBox checkBoxCecReconnectToPowerTv;
   3.620 +        private System.Windows.Forms.Button buttonClearLogs;
   3.621 +        private System.Windows.Forms.GroupBox groupBoxCecLogOptions;
   3.622 +        private System.Windows.Forms.CheckBox checkBoxCecLogWarning;
   3.623 +        private System.Windows.Forms.CheckBox checkBoxCecLogError;
   3.624 +        private System.Windows.Forms.CheckBox checkBoxCecLogDebug;
   3.625 +        private System.Windows.Forms.CheckBox checkBoxCecLogNotice;
   3.626 +        private System.Windows.Forms.CheckBox checkBoxCecLogTraffic;
   3.627 +        private System.Windows.Forms.CheckBox checkBoxCecLogNoPoll;
   3.628      }
   3.629  }
   3.630  
     4.1 --- a/Server/MainForm.cs	Mon Jul 18 15:56:25 2016 +0200
     4.2 +++ b/Server/MainForm.cs	Tue Jul 19 15:43:04 2016 +0200
     4.3 @@ -38,6 +38,7 @@
     4.4  using NAudio.CoreAudioApi;
     4.5  using NAudio.CoreAudioApi.Interfaces;
     4.6  using System.Runtime.InteropServices;
     4.7 +using CecSharp;
     4.8  //Network
     4.9  using NETWORKLIST;
    4.10  //
    4.11 @@ -913,6 +914,9 @@
    4.12          //This is our timer tick responsible to perform our render
    4.13          private void timer_Tick(object sender, EventArgs e)
    4.14          {
    4.15 +            //Not ideal cause this has nothing to do with display render
    4.16 +            LogsUpdate();
    4.17 +
    4.18              //Update our animations
    4.19              DateTime NewTickTime = DateTime.Now;
    4.20  
    4.21 @@ -2480,16 +2484,26 @@
    4.22              Properties.Settings.Default.Save();
    4.23          }
    4.24  
    4.25 +
    4.26 +        /// <summary>
    4.27 +        /// 
    4.28 +        /// </summary>
    4.29 +        private void LogsUpdate()
    4.30 +        {
    4.31 +            if (iWriter != null)
    4.32 +            {
    4.33 +                iWriter.Flush();
    4.34 +            }
    4.35 +
    4.36 +        }
    4.37 +
    4.38          /// <summary>
    4.39          /// Broadcast messages to subscribers.
    4.40          /// </summary>
    4.41          /// <param name="message"></param>
    4.42          protected override void WndProc(ref Message aMessage)
    4.43          {
    4.44 -            if (iWriter != null)
    4.45 -            {
    4.46 -                iWriter.FlushAccumulator();
    4.47 -            }
    4.48 +            LogsUpdate();
    4.49  
    4.50              if (OnWndProc!=null)
    4.51              {
    4.52 @@ -2562,6 +2576,27 @@
    4.53                  Properties.Settings.Default.CecMonitorOn,
    4.54                  Properties.Settings.Default.CecMonitorOff,
    4.55                  Properties.Settings.Default.CecReconnectToPowerTv);
    4.56 +
    4.57 +                //Setup log level
    4.58 +                iCecManager.Client.LogLevel = 0;
    4.59 +
    4.60 +                if (checkBoxCecLogError.Checked)
    4.61 +                    iCecManager.Client.LogLevel &= (int)CecLogLevel.Error;
    4.62 +
    4.63 +                if (checkBoxCecLogWarning.Checked)
    4.64 +                    iCecManager.Client.LogLevel &= (int)CecLogLevel.Warning;
    4.65 +
    4.66 +                if (checkBoxCecLogNotice.Checked)
    4.67 +                    iCecManager.Client.LogLevel &= (int)CecLogLevel.Notice;
    4.68 +
    4.69 +                if (checkBoxCecLogTraffic.Checked)
    4.70 +                    iCecManager.Client.LogLevel &= (int)CecLogLevel.Traffic;
    4.71 +
    4.72 +                if (checkBoxCecLogDebug.Checked)
    4.73 +                    iCecManager.Client.LogLevel &= (int)CecLogLevel.Debug;
    4.74 +
    4.75 +                iCecManager.Client.FilterOutPollLogs = checkBoxCecLogNoPoll.Checked;
    4.76 +
    4.77              }
    4.78          }
    4.79  
    4.80 @@ -2570,6 +2605,14 @@
    4.81              StartIdleClient();
    4.82          }
    4.83  
    4.84 +        private void buttonClearLogs_Click(object sender, EventArgs e)
    4.85 +        {
    4.86 +            richTextBoxLogs.Clear();
    4.87 +        }
    4.88  
    4.89 +        private void checkBoxCecLogs_CheckedChanged(object sender, EventArgs e)
    4.90 +        {
    4.91 +            ResetCec();
    4.92 +        }
    4.93      }
    4.94  }
     5.1 --- a/Server/MainForm.resx	Mon Jul 18 15:56:25 2016 +0200
     5.2 +++ b/Server/MainForm.resx	Tue Jul 19 15:43:04 2016 +0200
     5.3 @@ -185,6 +185,9 @@
     5.4          WSC3/b/CbwiR/gNzbuWksIMBOAAAAABJRU5ErkJggg==
     5.5  </value>
     5.6    </data>
     5.7 +  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     5.8 +    <value>315, 17</value>
     5.9 +  </metadata>
    5.10    <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    5.11      <value>405, 17</value>
    5.12    </metadata>
     6.1 --- a/Server/RichTextBoxTextWriter.cs	Mon Jul 18 15:56:25 2016 +0200
     6.2 +++ b/Server/RichTextBoxTextWriter.cs	Tue Jul 19 15:43:04 2016 +0200
     6.3 @@ -11,14 +11,31 @@
     6.4  
     6.5          RichTextBox iRichTextBox = null;
     6.6          string iAccumulator = "";
     6.7 +        private char iLastChar='\n';
     6.8  
     6.9          public RichTextBoxTextWriter(RichTextBox aRichTextBox)
    6.10          {
    6.11 -            iRichTextBox = aRichTextBox;
    6.12 +            iRichTextBox = aRichTextBox;            
    6.13          }
    6.14  
    6.15          public override void Write(char aChar)
    6.16          {
    6.17 +            if (aChar == '\r')
    6.18 +            {
    6.19 +                //Skip
    6.20 +                return;
    6.21 +            }
    6.22 +
    6.23 +            //Put our time stamp if starting a new line
    6.24 +            char previousChar = iLastChar;
    6.25 +            iLastChar = aChar;
    6.26 +            if (previousChar == '\n')
    6.27 +            {
    6.28 +                //Write(DateTime.Now.ToString("yyyy/MM/dd - hh:mm:ss.fff: "));
    6.29 +                Write(DateTime.Now.ToString("MM/dd hh:mm:ss.fff: "));
    6.30 +            }
    6.31 +
    6.32 +            
    6.33              base.Write(aChar);
    6.34              if (iRichTextBox.InvokeRequired)
    6.35              {
    6.36 @@ -27,6 +44,7 @@
    6.37                      iAccumulator += aChar;
    6.38                  }
    6.39                  
    6.40 +                //Invoke was not working from here
    6.41                  //WriteDelegate d = new WriteDelegate(Write);
    6.42                  //iRichTextBox.Invoke(d, new object[] { aChar });
    6.43              }
    6.44 @@ -34,7 +52,7 @@
    6.45              {
    6.46                  Flush();
    6.47                  iRichTextBox.AppendText(aChar.ToString()); // When character data is written, append it to the text box.
    6.48 -            }            
    6.49 +            }
    6.50          }
    6.51  
    6.52          public override Encoding Encoding
    6.53 @@ -42,8 +60,13 @@
    6.54              get { return System.Text.Encoding.UTF8; }
    6.55          }
    6.56  
    6.57 -        public void FlushAccumulator()
    6.58 +        /// <summary>
    6.59 +        /// 
    6.60 +        /// </summary>
    6.61 +        public override void Flush()
    6.62          {
    6.63 +            base.Flush();
    6.64 +
    6.65              lock (iAccumulator)
    6.66              {
    6.67                  if (!string.IsNullOrEmpty(iAccumulator))
    6.68 @@ -51,7 +74,6 @@
    6.69                      iRichTextBox.AppendText(iAccumulator); // When character data is written, append it to the text box.
    6.70                      iAccumulator = "";
    6.71                  }
    6.72 -
    6.73              }
    6.74  
    6.75          }