Fixed a bug that arose during integration testing regarding the order of execution of pending work items in the work item queue.

--- AW.Async/AsyncInstanceHelpers.cs
+++ AW.Async/AsyncInstanceHelpers.cs
@@ -50,12 +50,9 @@

             callbackWorkItemQueue.Enqueue(callbackWorkItem);

-            if (callbackWorkItemQueue.Count <= 1)
+            if (callbackWorkItemQueue.Count <= 1 && !TryExecuteWorkUnit(taskCompletionSource, workUnit))
             {
-                if(!TryExecuteWorkUnit(taskCompletionSource, workUnit))
-                {
-                    callbackWorkItemQueue.Dequeue();
-                }
+                callbackWorkItemQueue.Dequeue();
             }

             return taskCompletionSource.Task;
@@ -145,9 +142,7 @@
                            var callbackWorkItemQueue = CallbackWorkItemQueues[sender][callback];
                            CallbackWorkItem callbackWorkItem = callbackWorkItemQueue.Dequeue();

-                           callbackWorkItem.TaskCompletionSource.SetResult(result);
-
-                           if (callbackWorkItemQueue.Count != 0)
+                           if (callbackWorkItemQueue.Count > 0)
                            {
                                var next = callbackWorkItemQueue.Peek();

@@ -156,6 +151,8 @@
                                    callbackWorkItemQueue.Dequeue();
                                }
                            }
+
+                           callbackWorkItem.TaskCompletionSource.SetResult(result);
                        };
         }


Added a checkbox to remember login

Added a checkbox to remember login

--- SaltyBet-Desktop/LoginForm.Designer.cs
+++ SaltyBet-Desktop/LoginForm.Designer.cs
@@ -31,14 +31,15 @@
             this.btnLogin = new System.Windows.Forms.Button();
             this.tbUsername = new System.Windows.Forms.TextBox();
             this.tbPassword = new System.Windows.Forms.TextBox();
+            this.cbRememberLogin = new System.Windows.Forms.CheckBox();
             this.SuspendLayout();
             //
             // btnLogin
             //
             this.btnLogin.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.btnLogin.Location = new System.Drawing.Point(12, 83);
+            this.btnLogin.Location = new System.Drawing.Point(12, 108);
             this.btnLogin.Name = "btnLogin";
-            this.btnLogin.Size = new System.Drawing.Size(463, 72);
+            this.btnLogin.Size = new System.Drawing.Size(463, 47);
             this.btnLogin.TabIndex = 0;
             this.btnLogin.Text = "Login";
             this.btnLogin.UseVisualStyleBackColor = true;
@@ -65,11 +66,22 @@
             this.tbPassword.TabIndex = 4;
             this.tbPassword.UseSystemPasswordChar = true;
             //
+            // cbRememberLogin
+            //
+            this.cbRememberLogin.AutoSize = true;
+            this.cbRememberLogin.Location = new System.Drawing.Point(12, 85);
+            this.cbRememberLogin.Name = "cbRememberLogin";
+            this.cbRememberLogin.Size = new System.Drawing.Size(102, 17);
+            this.cbRememberLogin.TabIndex = 5;
+            this.cbRememberLogin.Text = "Remember login";
+            this.cbRememberLogin.UseVisualStyleBackColor = true;
+            //
             // LoginForm
             //
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.ClientSize = new System.Drawing.Size(487, 170);
+            this.Controls.Add(this.cbRememberLogin);
             this.Controls.Add(this.tbPassword);
             this.Controls.Add(this.tbUsername);
             this.Controls.Add(this.btnLogin);
@@ -88,5 +100,6 @@
         private System.Windows.Forms.Button btnLogin;
         private System.Windows.Forms.TextBox tbUsername;
         private System.Windows.Forms.TextBox tbPassword;
+        private System.Windows.Forms.CheckBox cbRememberLogin;
     }
 }


minor: make test names consistent

minor: make test names consistent

--- OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs
+++ OpenSim/Region/Framework/Scenes/Tests/SceneObjectSpatialTests.cs
@@ -54,7 +54,7 @@
         }

         [Test]
-        public void TestSceneObjectGroupPosition()
+        public void TestGetSceneObjectGroupPosition()
         {
             TestHelpers.InMethod();


SL compatibility - return only points on segemtn, not ray in llCastRay

--- OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -11574,6 +11574,8 @@
             Vector3 rayEnd = new Vector3((float)end.x, (float)end.y, (float)end.z);
             Vector3 dir = rayEnd - rayStart;

+            float dist = Vector3.Mag(dir);
+
             int count = 1;
             bool detectPhantom = false;
             int dataFlags = 0;
@@ -11630,6 +11632,9 @@
             int values = 0;
             foreach (ContactResult result in results)
             {
+                if (result.Depth > dist)
+                    continue;
+
                 UUID itemID = UUID.Zero;
                 int linkNum = 0;


Removed warning

Removed warning

--- RandomMaterialInitialisation.cs
+++ RandomMaterialInitialisation.cs
@@ -41,7 +41,7 @@
 		}
 		Debug.Log ("uniform " + Uniform + " in " + Shader.name + " = " + PropertyIndex);

-		float Default = UnityEditor.ShaderUtil.GetRangeLimits (Shader, PropertyIndex, 0);
+		//float Default = UnityEditor.ShaderUtil.GetRangeLimits (Shader, PropertyIndex, 0);
 		float Min = UnityEditor.ShaderUtil.GetRangeLimits (Shader, PropertyIndex, 1);
 		float Max = UnityEditor.ShaderUtil.GetRangeLimits (Shader, PropertyIndex, 2);


fix test

fix test

--- Serenity.Test/Testing/DbScriptTests.cs
+++ Serenity.Test/Testing/DbScriptTests.cs
@@ -59,11 +59,11 @@
             {
                 TestId = 1,
                 Description = "Test"
-            }).Where(new Criteria(TestRow.Fields.TestId) ==  1));
+            }));

             Assert.Equal(TestSqlHelper.Normalize(
                 "DECLARE @p1 NVARCHAR(4) = 'Test';" +
-                "DECLARE @p2 INT = 1;" +
+                "DECLARE @p2 BIGINT = 1;" +
                 "UPDATE Tests SET Description = @p1 WHERE TestId = @p2"),
                 TestSqlHelper.Normalize(script.ToString()));
         }


Adding hotkeys from ctrl+1 to ctrl+9

Adding hotkeys from ctrl+1 to ctrl+9

--- SuperPutty/frmSuperPutty.cs
+++ SuperPutty/frmSuperPutty.cs
@@ -446,6 +446,16 @@
             m_hotkeys.RegisterGlobalHotkey(Key.M, GlobalHotkeys.MOD_ALT, GlobalHotkeys.Purpose.NewMinttyTab);
             m_hotkeys.RegisterGlobalHotkey(Key.Left, GlobalHotkeys.MOD_ALT, GlobalHotkeys.Purpose.Previous);
             m_hotkeys.RegisterGlobalHotkey(Key.Right, GlobalHotkeys.MOD_ALT, GlobalHotkeys.Purpose.Next);
+            m_hotkeys.RegisterGlobalHotkey(Key.D1, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab1);
+            m_hotkeys.RegisterGlobalHotkey(Key.D2, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab2);
+            m_hotkeys.RegisterGlobalHotkey(Key.D3, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab3);
+            m_hotkeys.RegisterGlobalHotkey(Key.D4, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab4);
+            m_hotkeys.RegisterGlobalHotkey(Key.D5, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab5);
+            m_hotkeys.RegisterGlobalHotkey(Key.D6, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab6);
+            m_hotkeys.RegisterGlobalHotkey(Key.D7, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab7);
+            m_hotkeys.RegisterGlobalHotkey(Key.D8, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.Tab8);
+            m_hotkeys.RegisterGlobalHotkey(Key.D9, GlobalHotkeys.MOD_CONTROL, GlobalHotkeys.Purpose.LastTab);
+
             m_keyboard.KeyDown += new RawKeyEventHandler(KListener_KeyDown);
             m_keyboard.KeyUp += new RawKeyEventHandler(KListener_KeyUp);
         }


rewrote hanging llParseStringKeepNulls()

--- OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -562,23 +562,23 @@
             double sqx = q1.x*q1.x;
             double sqy = q1.z*q1.z;
             double sqz = q1.y*q1.y;
-	        double unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
-	        double test = q1.x*q1.z + q1.y*q1.s;
-	        if (test > 0.4999*unit) { // singularity at north pole
-		        eul.z = 2 * Math.Atan2(q1.x,q1.s);
-		        eul.y = Math.PI/2;
-		        eul.x = 0;
-		        return eul;
-	        }
-	        if (test < -0.4999*unit) { // singularity at south pole
-		        eul.z = -2 * Math.Atan2(q1.x,q1.s);
-		        eul.y = -Math.PI/2;
-		        eul.x = 0;
-		        return eul;
-	        }
+            double unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
+            double test = q1.x*q1.z + q1.y*q1.s;
+            if (test > 0.4999*unit) { // singularity at north pole
+                eul.z = 2 * Math.Atan2(q1.x,q1.s);
+                eul.y = Math.PI/2;
+                eul.x = 0;
+                return eul;
+            }
+            if (test < -0.4999*unit) { // singularity at south pole
+                eul.z = -2 * Math.Atan2(q1.x,q1.s);
+                eul.y = -Math.PI/2;
+                eul.x = 0;
+                return eul;
+            }
             eul.z = Math.Atan2(2*q1.z*q1.s-2*q1.x*q1.y , sqx - sqy - sqz + sqw);
-	        eul.y = Math.Asin(2*test/unit);
-	        eul.x = Math.Atan2(2*q1.x*q1.s-2*q1.z*q1.y , -sqx + sqy - sqz + sqw);
+            eul.y = Math.Asin(2*test/unit);
+            eul.x = Math.Atan2(2*q1.x*q1.s-2*q1.z*q1.y , -sqx + sqy - sqz + sqw);
             return eul;
         }

@@ -804,53 +804,53 @@

             // This method mimics the 180 errors found in SL
             // See www.euclideanspace.com... angleBetween
-			LSL_Vector vec_a = a;
-			LSL_Vector vec_b = b;
-
-			// Eliminate zero length
-			LSL_Float vec_a_mag = LSL_Vector.Mag(vec_a);
-			LSL_Float vec_b_mag = LSL_Vector.Mag(vec_b);
-			if (vec_a_mag < 0.00001 ||
-			    vec_b_mag < 0.00001)
-			{
-   				return new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
-			}
-
-			// Normalize
-			vec_a = llVecNorm(vec_a);
-			vec_b = llVecNorm(vec_b);
-
-			// Calculate axis and rotation angle
-			LSL_Vector axis = vec_a % vec_b;
-			LSL_Float cos_theta  = vec_a * vec_b;
-
-			// Check if parallel
-			if (cos_theta > 0.99999)
-			{
-				return new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
-			}
-
-			// Check if anti-parallel
-			else if (cos_theta < -0.99999)
-			{
-				LSL_Vector orthog_axis = new LSL_Vector(1.0, 0.0, 0.0) - (vec_a.x / (vec_a * vec_a) * vec_a);
-				if (LSL_Vector.Mag(orthog_axis)  < 0.000001)  orthog_axis = new LSL_Vector(0.0, 0.0, 1.0);
- 	            return new LSL_Rotation((float)orthog_axis.x, (float)orthog_axis.y, (float)orthog_axis.z, 0.0);
-			}
-			else // other rotation
-			{
-				LSL_Float theta = (LSL_Float)Math.Acos(cos_theta) * 0.5f;
-				axis = llVecNorm(axis);
-	            double x, y, z, s, t;
-	            s = Math.Cos(theta);
-	            t = Math.Sin(theta);
-	            x = axis.x * t;
-	            y = axis.y * t;
-	            z = axis.z * t;
-	            return new LSL_Rotation(x,y,z,s);
-	        }
-        }
-
+            LSL_Vector vec_a = a;
+            LSL_Vector vec_b = b;
+
+            // Eliminate zero length
+            LSL_Float vec_a_mag = LSL_Vector.Mag(vec_a);
+            LSL_Float vec_b_mag = LSL_Vector.Mag(vec_b);
+            if (vec_a_mag < 0.00001 ||
+                vec_b_mag < 0.00001)
+            {
+                return new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
+            }
+
+            // Normalize
+            vec_a = llVecNorm(vec_a);
+            vec_b = llVecNorm(vec_b);
+
+            // Calculate axis and rotation angle
+            LSL_Vector axis = vec_a % vec_b;
+            LSL_Float cos_theta  = vec_a * vec_b;
+
+            // Check if parallel
+            if (cos_theta > 0.99999)
+            {
+                return new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
+            }
+
+            // Check if anti-parallel
+            else if (cos_theta < -0.99999)
+            {
+                LSL_Vector orthog_axis = new LSL_Vector(1.0, 0.0, 0.0) - (vec_a.x / (vec_a * vec_a) * vec_a);
+                if (LSL_Vector.Mag(orthog_axis)  < 0.000001)  orthog_axis = new LSL_Vector(0.0, 0.0, 1.0);
+                return new LSL_Rotation((float)orthog_axis.x, (float)orthog_axis.y, (float)orthog_axis.z, 0.0);
+            }
+            else // other rotation
+            {
+                LSL_Float theta = (LSL_Float)Math.Acos(cos_theta) * 0.5f;
+                axis = llVecNorm(axis);
+                double x, y, z, s, t;
+                s = Math.Cos(theta);
+                t = Math.Sin(theta);
+                x = axis.x * t;
+                y = axis.y * t;
+                z = axis.z * t;
+                return new LSL_Rotation(x,y,z,s);
+            }
+        }
+
         public void llWhisper(int channelID, string text)
         {
             m_host.AddScriptLPS(1);
@@ -8627,130 +8627,105 @@

         public LSL_List llParseStringKeepNulls(string src, LSL_List separators, LSL_List spacers)
         {
-            int         beginning = 0;
-            int         srclen    = src.Length;
-            int         seplen    = separators.Length;
-            object[]    separray  = separators.Data;
-            int         spclen    = spacers.Length;
-            object[]    spcarray  = spacers.Data;
-            int         mlen      = seplen+spclen;
-
-            int[]       offset    = new int[mlen+1];
-            bool[]      active    = new bool[mlen];
-
-            int         best;
-            int         j;
-
-            //    Initial capacity reduces resize cost
-
-            LSL_List tokens = new LSL_List();
-
-            m_host.AddScriptLPS(1);
-
-            //    All entries are initially valid
-
-            for (int i = 0; i < mlen; i++)
-                active[i] = true;
-
-            offset[mlen] = srclen;
-
-            while (beginning < srclen)
-            {
-
-                best = mlen;    // as bad as it gets
-
-                //    Scan for separators
-
-                for (j = 0; j < seplen; j++)
-                {
-                    if (active[j])
-                    {
-                        // scan all of the markers
-                        if ((offset[j] = src.IndexOf(separray[j].ToString(), beginning)) == -1)
-                        {
-                            // not present at all
-                            active[j] = false;
-                        }
-                        else
-                        {
-                            // present and correct
-                            if (offset[j] < offset[best])
-                            {
-                                // closest so far
-                                best = j;
-                                if (offset[best] == beginning)
-                                    break;
-                            }
-                        }
+            int          srclen    = src.Length;
+            int          seplen    = separators.Length;
+            object[]     separray  = separators.Data;
+            int          spclen    = spacers.Length;
+            object[]     spcarray  = spacers.Data;
+
+            int          outlen    = 0;
+            LSL_String[] outarray  = new LSL_String[srclen*2+1];
+
+            int          i, j, lastUsed;
+
+            m_host.AddScriptLPS(1);
+
+            /*
+             * Point to beginning of current non-delimeter string.
+             */
+            lastUsed = 0;
+
+            /*
+             * Scan through source string from beginning to end.
+             */
+            for (i = 0; i < srclen;) {
+
+                /*
+                 * See if rest of string (starting at i) matches any separator.
+                 */
+                string rest = src.Substring(i);
+                for (j = 0; j < seplen; j ++) {
+                    string sep = separray[j].ToString();
+                    if ((sep.Length > 0) && rest.StartsWith(sep)) {
+
+                        /*
+                         * Separator matched, output string from end of last delimeter to beginning of this one.
+                         */
+                        outarray[outlen++] = new LSL_String(src.Substring(lastUsed,i-lastUsed));
+
+                        /*
+                         * Remove separator from input string.
+                         */
+                        i += sep.Length;
+
+                        /*
+                         * Next non-delimeter starts where this separator left off.
+                         */
+                        lastUsed = i;
+                        goto nextsrc;
                     }
                 }

-                //    Scan for spacers
-
-                if (offset[best] != beginning)
-                {
-                    for (j = seplen; (j < mlen) && (offset[best] > beginning); j++)
-                    {
-                        if (active[j])
-                        {
-                            // scan all of the markers
-                            if ((offset[j] = src.IndexOf(spcarray[j-seplen].ToString(), beginning)) == -1)
-                            {
-                                // not present at all
-                                active[j] = false;
-                            }
-                            else
-                            {
-                                // present and correct
-                                if (offset[j] < offset[best])
-                                {
-                                    // closest so far
-                                    best = j;
-                                }
-                            }
-                        }
+                /*
+                 * See if rest of string (starting at i) matches any spacer.
+                 */
+                for (j = 0; j < spclen; j ++) {
+                    string spc = spcarray[j].ToString();
+                    if ((spc.Length > 0) && rest.StartsWith(spc)) {
+
+                        /*
+                         * Spacer matched, output string from end of last delimeter to beginning of this one.
+                         * Then output the spacer itself.
+                         */
+                        outarray[outlen++] = new LSL_String(src.Substring(lastUsed,i-lastUsed));
+                        outarray[outlen++] = new LSL_String(spc);
+
+                        /*
+                         * Remove spacer from input string.
+                         */
+                        i += spc.Length;
+
+                        /*
+                         * Next non-delimeter starts where this spacer left off.
+                         */
+                        lastUsed = i;
+                        goto nextsrc;
                     }
                 }

-                //    This is the normal exit from the scanning loop
-
-                if (best == mlen)
-                {
-                    // no markers were found on this pass
-                    // so we're pretty much done
-                    tokens.Add(new LSL_String(src.Substring(beginning, srclen - beginning)));
-                    break;
-                }
-
-                //    Otherwise we just add the newly delimited token
-                //    and recalculate where the search should continue.
-
-                tokens.Add(new LSL_String(src.Substring(beginning,offset[best]-beginning)));
-
-                if (best < seplen)
-                {
-                    beginning = offset[best] + (separray[best].ToString()).Length;
-                }
-                else
-                {
-                    beginning = offset[best] + (spcarray[best - seplen].ToString()).Length;
-                    tokens.Add(new LSL_String(spcarray[best - seplen].ToString()));
-                }
-            }
-
-            //    This an awkward an not very intuitive boundary case. If the
-            //    last substring is a tokenizer, then there is an implied trailing
-            //    null list entry. Hopefully the single comparison will not be too
-            //    arduous. Alternatively the 'break' could be replced with a return
-            //    but that's shabby programming.
-
-            if (beginning == srclen)
-            {
-                if (srclen != 0)
-                    tokens.Add(new LSL_String(""));
-            }
-
-            return tokens;
+                /*
+                 * Didn't match any separator or spacer, skip over it and it
+                 * becomes part of the non-delimeter string starting with
+                 * lastUsed.
+                 */
+                i ++;
+            nextsrc:;
+            }
+
+            /*
+             * Output last non-delimeter (including a possible null string if
+             * delimeter ran to end of source string).
+             */
+            outarray[outlen++] = new LSL_String(src.Substring(lastUsed));
+
+            /*
+             * Make up an exact-sized output array suitable for an LSL_List object.
+             */
+            object[] outlist = new object[outlen];
+            for (i = 0; i < outlen; i ++) {
+                outlist[i] = outarray[i];
+            }
+            return new LSL_List(outlist);
         }

         public LSL_Integer llGetObjectPermMask(int mask)


fix HostingEnvironment.MapPath in ASP.NET Core / IIS when app is hosted under a virtual subdirectory

--- Serenity.Web/Mvc/HostingEnvironment.cs
+++ Serenity.Web/Mvc/HostingEnvironment.cs
@@ -36,20 +36,32 @@
             if (path.IsEmptyOrNull())
                 return path;

+            path = path.Replace('\\', '/');
+
             if (path.IndexOf("..") >= 0 ||
                 path.IndexOf("//") >= 0 ||
-                path.IndexOf("\\\\") >= 0 ||
-                path.IndexOfAny(new char[] { '*', '?', '>', '<', ',', ':', ';', '\'', '"', ']' }) >= 0 ||
-                path.IndexOf('?') >= 0 ||
-                path.IndexOf('>') >= 0)
+                path.IndexOf(":/") >= 0 ||
+                path.IndexOfAny(new char[] { '*', '?', '>', '<', ',', ':', ';', '\'', '"', ']', '?' }) >= 0)
                 throw new ArgumentOutOfRangeException("path");
+
+            var webRootPath = Dependency.Resolve<IHostingEnvironment>().WebRootPath;

             if (path.StartsWith("~/"))
                 path = path.Substring(2);
             else if (path.StartsWith("/"))
-                path = path.Substring(1);
+            {
+                var applicationRoot = VirtualPathUtility.ToAbsolute("~/");
+                if (path.StartsWith(applicationRoot, StringComparison.OrdinalIgnoreCase))
+                    path = path.Substring(applicationRoot.Length);
+                else
+                    throw new ArgumentOutOfRangeException("path");
+            }

-            return Path.Combine(Dependency.Resolve<IHostingEnvironment>().WebRootPath, path);
+            path = Path.Combine(webRootPath, path.Replace('/', Path.DirectorySeparatorChar));
+            if (!path.StartsWith(webRootPath, StringComparison.OrdinalIgnoreCase))
+                throw new ArgumentOutOfRangeException("path");
+
+            return path;
         }

         public static string ApplicationVirtualPath


Fix descriptions of colors which have a 0 R, G or B.

--- AgateLib/Geometry/Color.cs
+++ AgateLib/Geometry/Color.cs
@@ -40,7 +40,7 @@
 		/// </summary>
 		public static Color AntiqueWhite { get { return Color.FromArgb(250, 235, 215); } }
 		/// <summary>
-		/// Color Aqua.  0x0ffff
+		/// Color Aqua.  0x00ffff
 		/// </summary>
 		public static Color Aqua { get { return Color.FromArgb(0, 255, 255); } }
 		/// <summary>
@@ -60,7 +60,7 @@
 		/// </summary>
 		public static Color Bisque { get { return Color.FromArgb(255, 228, 196); } }
 		/// <summary>
-		/// Color Black.  0x000
+		/// Color Black.  0x000000
 		/// </summary>
 		public static Color Black { get { return Color.FromArgb(0, 0, 0); } }
 		/// <summary>
@@ -68,7 +68,7 @@
 		/// </summary>
 		public static Color BlanchedAlmond { get { return Color.FromArgb(255, 235, 205); } }
 		/// <summary>
-		/// Color Blue.  0x00ff
+		/// Color Blue.  0x0000ff
 		/// </summary>
 		public static Color Blue { get { return Color.FromArgb(0, 0, 255); } }
 		/// <summary>
@@ -88,7 +88,7 @@
 		/// </summary>
 		public static Color CadetBlue { get { return Color.FromArgb(95, 158, 160); } }
 		/// <summary>
-		/// Color Chartreuse.  0x7fff0
+		/// Color Chartreuse.  0x7fff00
 		/// </summary>
 		public static Color Chartreuse { get { return Color.FromArgb(127, 255, 0); } }
 		/// <summary>
@@ -112,15 +112,15 @@
 		/// </summary>
 		public static Color Crimson { get { return Color.FromArgb(220, 20, 60); } }
 		/// <summary>
-		/// Color Cyan.  0x0ffff
+		/// Color Cyan.  0x00ffff
 		/// </summary>
 		public static Color Cyan { get { return Color.FromArgb(0, 255, 255); } }
 		/// <summary>
-		/// Color DarkBlue.  0x008b
+		/// Color DarkBlue.  0x00008b
 		/// </summary>
 		public static Color DarkBlue { get { return Color.FromArgb(0, 0, 139); } }
 		/// <summary>
-		/// Color DarkCyan.  0x08b8b
+		/// Color DarkCyan.  0x008b8b
 		/// </summary>
 		public static Color DarkCyan { get { return Color.FromArgb(0, 139, 139); } }
 		/// <summary>
@@ -132,7 +132,7 @@
 		/// </summary>
 		public static Color DarkGray { get { return Color.FromArgb(169, 169, 169); } }
 		/// <summary>
-		/// Color DarkGreen.  0x0640
+		/// Color DarkGreen.  0x006400
 		/// </summary>
 		public static Color DarkGreen { get { return Color.FromArgb(0, 100, 0); } }
 		/// <summary>
@@ -140,7 +140,7 @@
 		/// </summary>
 		public static Color DarkKhaki { get { return Color.FromArgb(189, 183, 107); } }
 		/// <summary>
-		/// Color DarkMagenta.  0x8b08b
+		/// Color DarkMagenta.  0x8b008b
 		/// </summary>
 		public static Color DarkMagenta { get { return Color.FromArgb(139, 0, 139); } }
 		/// <summary>
@@ -148,7 +148,7 @@
 		/// </summary>
 		public static Color DarkOliveGreen { get { return Color.FromArgb(85, 107, 47); } }
 		/// <summary>
-		/// Color DarkOrange.  0xff8c0
+		/// Color DarkOrange.  0xff8c00
 		/// </summary>
 		public static Color DarkOrange { get { return Color.FromArgb(255, 140, 0); } }
 		/// <summary>
@@ -156,7 +156,7 @@
 		/// </summary>
 		public static Color DarkOrchid { get { return Color.FromArgb(153, 50, 204); } }
 		/// <summary>
-		/// Color DarkRed.  0x8b00
+		/// Color DarkRed.  0x8b0000
 		/// </summary>
 		public static Color DarkRed { get { return Color.FromArgb(139, 0, 0); } }
 		/// <summary>
@@ -176,11 +176,11 @@
 		/// </summary>
 		public static Color DarkSlateGray { get { return Color.FromArgb(47, 79, 79); } }
 		/// <summary>
-		/// Color DarkTurquoise.  0x0ced1
+		/// Color DarkTurquoise.  0x00ced1
 		/// </summary>
 		public static Color DarkTurquoise { get { return Color.FromArgb(0, 206, 209); } }
 		/// <summary>
-		/// Color DarkViolet.  0x940d3
+		/// Color DarkViolet.  0x9400d3
 		/// </summary>
 		public static Color DarkViolet { get { return Color.FromArgb(148, 0, 211); } }
 		/// <summary>
@@ -188,7 +188,7 @@
 		/// </summary>
 		public static Color DeepPink { get { return Color.FromArgb(255, 20, 147); } }
 		/// <summary>
-		/// Color DeepSkyBlue.  0x0bfff
+		/// Color DeepSkyBlue.  0x00bfff
 		/// </summary>
 		public static Color DeepSkyBlue { get { return Color.FromArgb(0, 191, 255); } }
 		/// <summary>
@@ -212,7 +212,7 @@
 		/// </summary>
 		public static Color ForestGreen { get { return Color.FromArgb(34, 139, 34); } }
 		/// <summary>
-		/// Color Fuchsia.  0xff0ff
+		/// Color Fuchsia.  0xff00ff
 		/// </summary>
 		public static Color Fuchsia { get { return Color.FromArgb(255, 0, 255); } }
 		/// <summary>
@@ -224,7 +224,7 @@
 		/// </summary>
 		public static Color GhostWhite { get { return Color.FromArgb(248, 248, 255); } }
 		/// <summary>
-		/// Color Gold.  0xffd70
+		/// Color Gold.  0xffd700
 		/// </summary>
 		public static Color Gold { get { return Color.FromArgb(255, 215, 0); } }
 		/// <summary>
@@ -236,7 +236,7 @@
 		/// </summary>
 		public static Color Gray { get { return Color.FromArgb(128, 128, 128); } }
 		/// <summary>
-		/// Color Green.  0x0800
+		/// Color Green.  0x008000
 		/// </summary>
 		public static Color Green { get { return Color.FromArgb(0, 128, 0); } }
 		/// <summary>
@@ -256,7 +256,7 @@
 		/// </summary>
 		public static Color IndianRed { get { return Color.FromArgb(205, 92, 92); } }
 		/// <summary>
-		/// Color Indigo.  0x4b082
+		/// Color Indigo.  0x4b0082
 		/// </summary>
 		public static Color Indigo { get { return Color.FromArgb(75, 0, 130); } }
 		/// <summary>
@@ -276,7 +276,7 @@
 		/// </summary>
 		public static Color LavenderBlush { get { return Color.FromArgb(255, 240, 245); } }
 		/// <summary>
-		/// Color LawnGreen.  0x7cfc0
+		/// Color LawnGreen.  0x7cfc00
 		/// </summary>
 		public static Color LawnGreen { get { return Color.FromArgb(124, 252, 0); } }
 		/// <summary>
@@ -336,7 +336,7 @@
 		/// </summary>
 		public static Color LightYellow { get { return Color.FromArgb(255, 255, 224); } }
 		/// <summary>
-		/// Color Lime.  0x0ff0
+		/// Color Lime.  0x00ff00
 		/// </summary>
 		public static Color Lime { get { return Color.FromArgb(0, 255, 0); } }
 		/// <summary>
@@ -348,11 +348,11 @@
 		/// </summary>
 		public static Color Linen { get { return Color.FromArgb(250, 240, 230); } }
 		/// <summary>
-		/// Color Magenta.  0xff0ff
+		/// Color Magenta.  0xff00ff
 		/// </summary>
 		public static Color Magenta { get { return Color.FromArgb(255, 0, 255); } }
 		/// <summary>
-		/// Color Maroon.  0x8000
+		/// Color Maroon.  0x800000
 		/// </summary>
 		public static Color Maroon { get { return Color.FromArgb(128, 0, 0); } }
 		/// <summary>
@@ -360,7 +360,7 @@
 		/// </summary>
 		public static Color MediumAquamarine { get { return Color.FromArgb(102, 205, 170); } }
 		/// <summary>
-		/// Color MediumBlue.  0x00cd
+		/// Color MediumBlue.  0x0000cd
 		/// </summary>
 		public static Color MediumBlue { get { return Color.FromArgb(0, 0, 205); } }
 		/// <summary>
@@ -380,7 +380,7 @@
 		/// </summary>
 		public static Color MediumSlateBlue { get { return Color.FromArgb(123, 104, 238); } }
 		/// <summary>
-		/// Color MediumSpringGreen.  0x0fa9a
+		/// Color MediumSpringGreen.  0x00fa9a
 		/// </summary>
 		public static Color MediumSpringGreen { get { return Color.FromArgb(0, 250, 154); } }
 		/// <summary>
@@ -412,7 +412,7 @@
 		/// </summary>
 		public static Color NavajoWhite { get { return Color.FromArgb(255, 222, 173); } }
 		/// <summary>
-		/// Color Navy.  0x0080
+		/// Color Navy.  0x000080
 		/// </summary>
 		public static Color Navy { get { return Color.FromArgb(0, 0, 128); } }
 		/// <summary>
@@ -420,7 +420,7 @@
 		/// </summary>
 		public static Color OldLace { get { return Color.FromArgb(253, 245, 230); } }
 		/// <summary>
-		/// Color Olive.  0x80800
+		/// Color Olive.  0x808000
 		/// </summary>
 		public static Color Olive { get { return Color.FromArgb(128, 128, 0); } }
 		/// <summary>
@@ -428,11 +428,11 @@
 		/// </summary>
 		public static Color OliveDrab { get { return Color.FromArgb(107, 142, 35); } }
 		/// <summary>
-		/// Color Orange.  0xffa50
+		/// Color Orange.  0xffa500
 		/// </summary>
 		public static Color Orange { get { return Color.FromArgb(255, 165, 0); } }
 		/// <summary>
-		/// Color OrangeRed.  0xff450
+		/// Color OrangeRed.  0xff4500
 		/// </summary>
 		public static Color OrangeRed { get { return Color.FromArgb(255, 69, 0); } }
 		/// <summary>
@@ -480,11 +480,11 @@
 		/// </summary>
 		public static Color PowderBlue { get { return Color.FromArgb(176, 224, 230); } }
 		/// <summary>
-		/// Color Purple.  0x80080
+		/// Color Purple.  0x800080
 		/// </summary>
 		public static Color Purple { get { return Color.FromArgb(128, 0, 128); } }
 		/// <summary>
-		/// Color Red.  0xff00
+		/// Color Red.  0xff0000
 		/// </summary>
 		public static Color Red { get { return Color.FromArgb(255, 0, 0); } }
 		/// <summary>
@@ -540,7 +540,7 @@
 		/// </summary>
 		public static Color Snow { get { return Color.FromArgb(255, 250, 250); } }
 		/// <summary>
-		/// Color SpringGreen.  0x0ff7f
+		/// Color SpringGreen.  0x00ff7f
 		/// </summary>
 		public static Color SpringGreen { get { return Color.FromArgb(0, 255, 127); } }
 		/// <summary>
@@ -552,7 +552,7 @@
 		/// </summary>
 		public static Color Tan { get { return Color.FromArgb(210, 180, 140); } }
 		/// <summary>
-		/// Color Teal.  0x08080
+		/// Color Teal.  0x008080
 		/// </summary>
 		public static Color Teal { get { return Color.FromArgb(0, 128, 128); } }
 		/// <summary>
@@ -588,7 +588,7 @@
 		/// </summary>
 		public static Color WhiteSmoke { get { return Color.FromArgb(245, 245, 245); } }
 		/// <summary>
-		/// Color Yellow.  0xffff0
+		/// Color Yellow.  0xffff00
 		/// </summary>
 		public static Color Yellow { get { return Color.FromArgb(255, 255, 0); } }
 		/// <summary>


removed an misplaced await

removed an misplaced await

--- src/RestClient/RestClient.cs
+++ src/RestClient/RestClient.cs
@@ -60,10 +60,10 @@
             return SendAsync<object>(uri, HttpMethod.Delete, null, null, accept);
         }

-        public async Task<T> GetAsync<T>(string requestUri, string accept, IDictionary<string, string> parameters = null)
+        public Task<T> GetAsync<T>(string requestUri, string accept, IDictionary<string, string> parameters = null)
         {
             var uri = new Uri(requestUri, UriKind.Relative).ApplyParameters(parameters);
-            return await SendAsync<T>(uri, HttpMethod.Get, null, null, accept);
+            return SendAsync<T>(uri, HttpMethod.Get, null, null, accept);
         }

         public Task<T> PatchAsync<T>(string requestUri, object body, string contentType, string accept, IDictionary<string, string> parameters = null)


Add DoAskElevate to QuasarServer.

Add DoAskElevate to QuasarServer.

--- Server/Core/Networking/QuasarServer.cs
+++ Server/Core/Networking/QuasarServer.cs
@@ -77,6 +77,7 @@
                 typeof (Packets.ServerPackets.DoClientDisconnect),
                 typeof (Packets.ServerPackets.DoClientReconnect),
                 typeof (Packets.ServerPackets.DoClientUninstall),
+                typeof (Packets.ServerPackets.DoAskElevate),
                 typeof (Packets.ServerPackets.DoDownloadAndExecute),
                 typeof (Packets.ServerPackets.DoUploadAndExecute),
                 typeof (Packets.ServerPackets.GetDesktop),


Include position

Include position

--- AngleSharp/TextPosition.cs
+++ AngleSharp/TextPosition.cs
@@ -72,7 +72,7 @@
         /// </returns>
         public override String ToString()
         {
-            return String.Format("Ln {0}, Col {1}", _line, _column);
+            return String.Format("Ln {0}, Col {1}, Pos {2}", _line, _column, _position);
         }

         /// <summary>


(ArcOpener): ignore parse errors in case of incorrect filename length.

--- ArcFormats/Will/ArcWILL.cs
+++ ArcFormats/Will/ArcWILL.cs
@@ -29,6 +29,7 @@
 using System.IO;
 using GameRes.Formats.Properties;
 using GameRes.Formats.Strings;
+using GameRes.Utility;

 namespace GameRes.Formats.Will
 {
@@ -69,6 +70,8 @@
             for (int i = 0; i < ext_count; ++i)
             {
                 string ext = file.View.ReadString (dir_offset, 4).ToLowerInvariant();
+                if (0 == ext.Length)
+                    return null;
                 int count = file.View.ReadInt32 (dir_offset+4);
                 uint offset = file.View.ReadUInt32 (dir_offset+8);
                 if (count <= 0 || count > 0xffff || offset <= dir_offset || offset > file.MaxOffset)
@@ -76,7 +79,12 @@
                 ext_list.Add (new ExtRecord { Extension = ext, FileCount = count, DirOffset = offset });
                 dir_offset += 12;
             }
-            var dir = ReadFileList (file, ext_list, 9);
+            List<Entry> dir = null;
+            try
+            {
+                dir = ReadFileList (file, ext_list, 9);
+            }
+            catch { /* ignore parse errors */ }
             if (null == dir)
                 dir = ReadFileList (file, ext_list, 13);
             if (null == dir)
@@ -122,8 +130,7 @@
         {
             for (int i = 0; i < data.Length; ++i)
             {
-                byte v = data[i];
-                data[i] = (byte)(v >> 2 | v << 6);
+                data[i] = Binary.RotByteR (data[i], 2);
             }
         }

@@ -131,8 +138,7 @@
         {
             for (int i = 0; i < data.Length; ++i)
             {
-                byte v = data[i];
-                data[i] = (byte)(v << 2 | v >> 6);
+                data[i] = Binary.RotByteL (data[i], 2);
             }
         }


Add frame precision to chrono

Add frame precision to chrono

--- Assets/Scripts/Room/Box.cs
+++ Assets/Scripts/Room/Box.cs
@@ -229,9 +229,9 @@
 			}

 			if (ShowAITD1Vars && Chrono != 0)
-				info.Append("CHRONO", TimeSpan.FromSeconds((timer - Chrono) / 60));
+				info.Append("CHRONO", "{0}.{1:D2}", TimeSpan.FromSeconds((timer - Chrono) / 60), (timer - Chrono) % 60);
 			if (ShowAITD1Vars && RoomChrono != 0)
-				info.Append("ROOM_CHRONO", TimeSpan.FromSeconds((timer - RoomChrono) / 60));
+				info.Append("ROOM_CHRONO", "{0}.{1:D2}", TimeSpan.FromSeconds((timer - RoomChrono) / 60), (timer - RoomChrono) % 60);
 			if (ShowAdditionalInfo && TrackMode >= 0 && TrackMode <= 3)
 				info.Append("TRACKMODE", trackModeInfo[TrackMode]);
 			if (ShowAITD1Vars && TrackNumber != -1)


destroy vehicle while it arrive an end point

--- Assets/Scripts/WayAgent.cs
+++ Assets/Scripts/WayAgent.cs
@@ -17,6 +17,11 @@
     /// Max distance when raycast test in front
     /// </summary>
     private const float MaxRaycastDistanceInFront = 10.0f;
+
+    /// <summary>
+    /// If a vehicle is still alive on the way
+    /// </summary>
+    public bool IsAlive { get; private set; }

     /// <summary>
     /// The start point of current segment we are in
@@ -50,6 +55,12 @@
             Direction = Vector3.zero;
             Distance = 0;
             return;
+        }
+
+        if (null != StartPoint as EndPoint)
+        {
+            IsAlive = false;
+            Destroy(gameObject);
         }

         if (null == EndPoint)
@@ -137,6 +148,7 @@
     void Awake()
     {
         m_VehicleLayerMask = LayerMask.GetMask("Vehicle");
+        IsAlive = true;
     }

     void OnEnable()


add IntegrityCheckException WithEntities in VirtualMList

--- Signum.Engine/Patterns/VirtualMList.cs
+++ Signum.Engine/Patterns/VirtualMList.cs
@@ -165,7 +165,13 @@
                     GraphExplorer.PropagateModifications(graph.Inverse());
                     var errors = GraphExplorer.FullIntegrityCheck(graph);
                     if (errors != null)
-                        throw new IntegrityCheckException(errors);
+                    {
+#if DEBUG
+                        throw new IntegrityCheckException(errors.WithEntities(graph));
+#else
+                        throw new IntegrityCheckException(errors);
+#endif
+                    }
                 }

                 if (mlist.IsGraphModified)


Fix compile error on Linux
The unit tests that use IBusEnvironmentForTest are flagged with

Change-Id: Iec53c401f4f3b6d62a7869a21d4d84236e8adbe3
---
 PalasoUIWindowsForms.Tests/Keyboarding/IBusEnvironmentForTest.cs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- PalasoUIWindowsForms.Tests/Keyboarding/IBusEnvironmentForTest.cs
+++ PalasoUIWindowsForms.Tests/Keyboarding/IBusEnvironmentForTest.cs
@@ -4,7 +4,7 @@
 using Palaso.UI.WindowsForms.Keyboarding;

 #if MONO
-
+#if WANT_PORT
 namespace PalasoUIWindowsForms.Tests.Keyboarding
 {
 	public class IBusEnvironmentForTest : IDisposable
@@ -69,5 +69,5 @@
 		}
 	}
 }
-
+#endif
 #endif


change the access to constructors back to public

--- Simpl.Serialization/ClassDescriptor.cs
+++ Simpl.Serialization/ClassDescriptor.cs
@@ -139,7 +139,7 @@
         ///     <c>Type</c> of the class defined by this
         ///     <c>ClassDescriptor</c>
         /// </param>
-        private ClassDescriptor(Type thatClass)
+        public ClassDescriptor(Type thatClass)
             : base(XmlTools.GetXmlTagName(thatClass, SimplTypesScope.STATE), thatClass.Name)
         {
             _describedClass = thatClass;
@@ -188,7 +188,7 @@
         /// <param name="tagName">
         ///     <c>String</c> tagName for the <c>ClassDescriptor</c>
         /// </param>
-        private ClassDescriptor(String tagName, String comment, String describedClassPackageName,
+        public ClassDescriptor(String tagName, String comment, String describedClassPackageName,
                                String describedClassSimpleName, ClassDescriptor superClass, List<String> interfaces)
             : base(tagName, describedClassPackageName + "." + describedClassSimpleName, comment)
         {
@@ -539,7 +539,7 @@
             yield break;
         }

-        private void ResolveUnresolvedScopeAnnotationFDs()
+        public void ResolveUnresolvedScopeAnnotationFDs()
         {
             if (_unresolvedScopeAnnotationFDs != null)
             {


Test absolute expiration dates with bulk Inserts

--- SimpleCache.Tests/SqliteObjectCache.cs
+++ SimpleCache.Tests/SqliteObjectCache.cs
@@ -288,7 +288,7 @@
         }

 	[Test]
-        public async Task InsertAndGetBulk()
+        public async Task BulkInsertAndGet()
 	{

 	    var persons = new Dictionary<string, Person>()
@@ -316,7 +316,7 @@
         }

         [Test]
-        public async Task InvalidateBulk()
+        public async Task BulkInvalidate()
         {
 	    var persons = new Dictionary<string, Person>()
 	    {
@@ -335,7 +335,7 @@
         }

         [Test]
-        public async Task GetCreatedAtBulk()
+        public async Task BulkGetCreatedAt()
         {
 	    var persons = new Dictionary<string, Person>()
 	    {
@@ -364,6 +364,51 @@
 	    }
         }

+
+	[Test]
+        public async Task BulkInsertAbsoluteExpiration()
+        {
+
+            Assert.That(async () => await _cache.Vacuum(), Is.EqualTo(0));
+
+	    var persons = new Dictionary<string, Person>()
+	    {
+	        {"key1", new Person {Name = "john", Age = 19}},
+	        {"key2", new Person {Name = "mike", Age = 30}},
+	    };
+            await _cache.Insert(persons, DateTime.Now);
+
+	    persons = new Dictionary<string, Person>()
+	    {
+	        {"key3", new Person {Name = "john", Age = 19}},
+	        {"key4", new Person {Name = "mike", Age = 30}},
+	    };
+            await _cache.Insert(persons, DateTime.Now.AddMinutes(-1));
+
+	    persons = new Dictionary<string, Person>()
+	    {
+	        {"key5", new Person {Name = "john", Age = 19}},
+	        {"key6", new Person {Name = "mike", Age = 30}},
+	    };
+            await _cache.Insert(persons, DateTime.Now.AddMinutes(1));
+
+            Assert.That(async () => await _cache.Vacuum(), Is.EqualTo(4));
+
+	    var keys = new List<string> {"key1", "key2", "key3", "key4"};
+	    var returnedPersons = await _cache.Get<Person>(keys);
+	    Assert.That(returnedPersons, Is.Empty);
+
+	    keys = new List<string> {"key5", "key6"};
+	    var expectedCount = 2;
+	    returnedPersons = await _cache.Get<Person>(keys);
+	    Assert.That(returnedPersons.Count, Is.EqualTo(2));
+	    for (var i = 0; i < expectedCount; i++)
+	    {
+                Assert.That(returnedPersons[keys[i]].Name, Is.EqualTo(persons[keys[i]].Name));
+                Assert.That(returnedPersons[keys[i]].Age, Is.EqualTo(persons[keys[i]].Age));
+	    }
+
+        }
         private class Person
         {
             public string Name { get; set; }


- Fix to support latest SlimDX

- Fix to support latest SlimDX

git-svn-id: 53f2a8ff3606f182ef4420064c1f4a5cdcbe6bb1@2005 bb9bf1cf-960d-0410-9a3a-baeba60cf407

--- Projects/Axiom/RenderSystems/DirectX9/HLSL/HLSLIncludeHandler.cs
+++ Projects/Axiom/RenderSystems/DirectX9/HLSL/HLSLIncludeHandler.cs
@@ -51,6 +51,7 @@
     public class HLSLIncludeHandler : D3D.Include
     {
         protected Resource program;
+
         public HLSLIncludeHandler( Resource sourceProgram )
         {
             this.program = sourceProgram;
@@ -60,9 +61,17 @@
         {
             fileStream = ResourceGroupManager.Instance.OpenResource( fileName, this.program.Group, true, this.program );
         }
+
+        public void Open( D3D.IncludeType includeType, string fileName, Stream parentStream, out Stream stream )
+        {
+            stream = ResourceGroupManager.Instance.OpenResource( fileName, this.program.Group, true, this.program );
+        }
+
         public void Close( Stream fileStream )
         {
             fileStream.Close();
         }
+
+
     }
 }


Added boundary check for presets, used to be in the preset commands but it's a generic boundary for the device, let's seen how it will look for the mk2 later on

--- src/Sleddog.Blink1/Blink1.cs
+++ src/Sleddog.Blink1/Blink1.cs
@@ -64,24 +64,41 @@
 			return true;
 		}

+		public bool SavePreset(Blink1Preset preset, ushort position)
+		{
+			if (position < NumberOfPresets)
+				return commandBus.SendCommand(new SetPresetCommand(preset, position));
+
+			var message = string.Format("Unable to save a preset outside the upper count ({0}) of preset slots", NumberOfPresets);
+
+			throw new ArgumentOutOfRangeException("position", message);
+		}
+
+		public Blink1Preset ReadPreset(ushort position)
+		{
+			if (position < NumberOfPresets)
+				return commandBus.SendQuery(new ReadPresetQuery(position));
+
+			var message = string.Format("Unable to read a preset from position {0} since there is only {1} preset slots", position,
+				NumberOfPresets);
+
+			throw new ArgumentOutOfRangeException("position", message);
+		}
+
 		public bool PlaybackPresets(ushort startPosition)
 		{
-			return commandBus.SendCommand(new PresetControlCommand(true, startPosition));
+			if (startPosition < NumberOfPresets)
+				return commandBus.SendCommand(new PresetControlCommand(true, startPosition));
+
+			var message = string.Format("Unable to play from position {0} since there is only {1} preset slots", startPosition,
+				NumberOfPresets);
+
+			throw new ArgumentOutOfRangeException("startPosition", message);
 		}

 		public bool PausePresets()
 		{
 			return commandBus.SendCommand(new PresetControlCommand(false));
-		}
-
-		public Blink1Preset ReadPreset(ushort position)
-		{
-			return commandBus.SendQuery(new ReadPresetQuery(position));
-		}
-
-		public bool SavePreset(Blink1Preset preset, ushort position)
-		{
-			return commandBus.SendCommand(new SetPresetCommand(preset, position));
 		}

 		public void Dispose()


Added TryToConnect command support

Added TryToConnect command support

--- TestEDITOR/EditorContext.cs
+++ TestEDITOR/EditorContext.cs
@@ -208,6 +208,12 @@
                     _editor.SnapToGrid = !_editor.SnapToGrid;
                 });

+            _commands.TryToConnectCommand = new DelegateCommand(
+                () =>
+                {
+                    _editor.TryToConnect = !_editor.TryToConnect;
+                });
+
             _commands.AddLayerCommand = new DelegateCommand(
                 () =>
                 {


Add ShutdownQueue to interface

Add ShutdownQueue to interface

--- Akavache/IKeyedOperationQueue.cs
+++ Akavache/IKeyedOperationQueue.cs
@@ -32,5 +32,11 @@
         /// <param name="action">A method to run in the background</param>
         /// <returns>A future representing when the operation completes</returns>
         IObservable<Unit> EnqueueOperation(string key, Action action);
+
+        /// <summary>
+        ///   Flushes the remaining operations and returns a signal when they are all complete.
+        /// </summary>
+        /// <returns></returns>
+        IObservable<Unit> ShutdownQueue();
     }
 }


* Backed out changeset: c43780b8ca82

* Backed out changeset: c43780b8ca82

--- TestProject1/LayoutTests.cs
+++ TestProject1/LayoutTests.cs
@@ -112,7 +112,7 @@
             Assert.AreEqual(new Vector(-15, 0), finalControl.ActualOffset);
             Assert.AreEqual(new Size(100, 100), finalControl.RenderSize);
             Assert.AreEqual(new Size(80, 80), finalControl.DesiredSize);
-            Assert.AreEqual(new Rect(25, 0, 75, 100), finalControl.LayoutClip);
+            Assert.AreEqual(new Rect(25, 0, 50, 80), finalControl.LayoutClip);
             Assert.AreEqual(new Size(80, 80), finalControl.MeasureArgument);
             Assert.AreEqual(new Size(100, 100), finalControl.LastMeasureOverrideArgument); // because Width/Height
             Assert.AreEqual(new Size(0, 0), finalControl.LastMeasureOverrideResult);
@@ -139,7 +139,7 @@
             Assert.AreEqual(new Vector(-15, 0), finalControl.ActualOffset);
             Assert.AreEqual(new Size(100, 20), finalControl.RenderSize);
             Assert.AreEqual(new Size(80, 20), finalControl.DesiredSize);
-            Assert.AreEqual(new Rect(25, 0, 75, 20), finalControl.LayoutClip);
+            Assert.AreEqual(new Rect(25, 0, 50, 20), finalControl.LayoutClip);
             Assert.AreEqual(new Size(80, 80), finalControl.MeasureArgument);
             Assert.AreEqual(new Size(100, 20), finalControl.LastMeasureOverrideArgument); // because Width/Height
             Assert.AreEqual(new Size(0, 0), finalControl.LastMeasureOverrideResult);
@@ -167,7 +167,7 @@
             Assert.AreEqual(new Vector(-50, 21), finalControl.ActualOffset);
             Assert.AreEqual(new Size(100, 20), finalControl.RenderSize);
             Assert.AreEqual(new Size(70, 17), finalControl.DesiredSize);
-            Assert.AreEqual(new Rect(60, -31, 40, 51), finalControl.LayoutClip);
+            Assert.AreEqual(new Rect(60, -31, 40, 83), finalControl.LayoutClip);
             Assert.AreEqual(new Size(70, 80), finalControl.MeasureArgument);
             Assert.AreEqual(new Size(100, 20), finalControl.LastMeasureOverrideArgument); // because Width/Height
             Assert.AreEqual(new Size(0, 0), finalControl.LastMeasureOverrideResult);


Adding in newline after "Command line arguments" in Options Box.

--- AntlrVSIX/Menus/AboutBox.xaml.cs
+++ AntlrVSIX/Menus/AboutBox.xaml.cs
@@ -19,7 +19,7 @@
             _info.AppendText(Environment.NewLine);
             _info.AppendText("AntlrVSIX version: " + AntlrVSIX.Constants.Version);
             _info.AppendText(Environment.NewLine);
-            _info.AppendText("Runtime: " + typeof(string).Assembly.ImageRuntimeVersion);
+            _info.AppendText("NET Runtime: " + typeof(string).Assembly.ImageRuntimeVersion);
             _info.AppendText(Environment.NewLine);
             _info.AppendText("Running " + application?.Name + " " + application.Version);
             _info.AppendText(Environment.NewLine);
@@ -29,7 +29,8 @@
             _info.AppendText("File version: " + fileVersion.FileVersion);
             _info.AppendText(Environment.NewLine);
             var cla = application.CommandLineArguments;
-            _info.AppendText("Command line args: " + cla);
+            _info.AppendText("Command line arguments: " + cla);
+            _info.AppendText(Environment.NewLine);
             var grammar_view = AntlrLanguagePackage.Instance.GetActiveView();
             if (grammar_view != null)
             {
@@ -42,7 +43,7 @@
                 _info.AppendText(Environment.NewLine);
                 if (ViewCreationListener.PreviousContentType.ContainsKey(active))
                 {
-                    _info.AppendText("Old content type: " + ViewCreationListener.PreviousContentType[active].DisplayName);
+                    _info.AppendText("Overridden content type: " + ViewCreationListener.PreviousContentType[active].DisplayName);
                     _info.AppendText(Environment.NewLine);
                 }
             }


テストを更新

テストを更新

--- Tests/AssemblyReaderTest.cs
+++ Tests/AssemblyReaderTest.cs
@@ -18,6 +18,7 @@
 ///
 /* ------------------------------------------------------------------------- */
 using System;
+using System.Drawing;
 using System.Reflection;
 using NUnit.Framework;

@@ -44,21 +45,134 @@
         /// </summary>
         ///
         /* ----------------------------------------------------------------- */
+        #region Properties
+
         [Test]
-        public void Properties()
+        public void Location_ExecutingAssembly()
         {
-            var reader = new AssemblyReader(Assembly.GetExecutingAssembly());
-            Assert.That(reader.Title,         Is.EqualTo("Cube.Core testing project"));
-            Assert.That(reader.Description,   Is.EqualTo("Test Cube.Core using NUnit framework."));
-            Assert.That(reader.Configuration, Is.Empty);
-            Assert.That(reader.Company,       Is.EqualTo("CubeSoft, Inc."));
-            Assert.That(reader.Product,       Is.EqualTo("Cube.Core.Tests"));
-            Assert.That(reader.Copyright,     Is.EqualTo("Copyright © 2010 CubeSoft, Inc."));
-            Assert.That(reader.Trademark,     Is.EqualTo("dummy trademark"));
-            Assert.That(reader.Culture,       Is.Empty);
-            Assert.That(reader.Version,       Is.AtLeast(new Version(1, 2, 0, 0)));
-            Assert.That(reader.FileVersion,   Is.AtLeast(new Version(1, 2, 0, 0)));
-            Assert.That(reader.Icon,          Is.Not.Null);
+            Assert.That(
+                Create().Location,
+                Is.Not.Null.Or.Empty
+            );
         }
+
+        [Test]
+        public void Title_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Title,
+                Is.EqualTo("Cube.Core testing project")
+            );
+        }
+
+        [Test]
+        public void Description_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Description,
+                Is.EqualTo("Test Cube.Core using NUnit framework.")
+            );
+        }
+
+        [Test]
+        public void Configuration_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Configuration,
+                Is.Empty
+            );
+        }
+
+        [Test]
+        public void Company_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Company,
+                Is.EqualTo("CubeSoft, Inc.")
+            );
+        }
+
+        [Test]
+        public void Product_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Product,
+                Is.EqualTo("Cube.Core.Tests")
+            );
+        }
+
+        [Test]
+        public void Copyright_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Copyright,
+                Is.EqualTo("Copyright © 2010 CubeSoft, Inc.")
+            );
+        }
+
+        [Test]
+        public void Trademark_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Trademark,
+                Is.EqualTo("dummy trademark")
+            );
+        }
+
+        [Test]
+        public void Culture_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Culture,
+                Is.Empty
+            );
+        }
+
+        [Test]
+        public void Version_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Version,
+                Is.AtLeast(new Version(1, 2, 0, 0))
+            );
+        }
+
+        [Test]
+        public void FileVersion_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().FileVersion,
+                Is.AtLeast(new Version(1, 2, 0, 0))
+            );
+        }
+
+        [Test]
+        public void Icon_ExecutingAssembly()
+        {
+            Assert.That(
+                Create().Icon.Size,
+                Is.EqualTo(new Size(16, 16))
+            );
+        }
+
+        #endregion
+
+        #region Helper methods
+
+        /* ----------------------------------------------------------------- */
+        ///
+        /// Create
+        ///
+        /// <summary>
+        /// AssemblyReader オブジェクトを生成します。
+        /// </summary>
+        ///
+        /* ----------------------------------------------------------------- */
+        public AssemblyReader Create()
+        {
+            return new AssemblyReader(Assembly.GetExecutingAssembly());
+        }
+
+        #endregion
     }
 }