Argentum Tela Design Surface [20] – Getting up to speed

by Administrator 25. September 2009 02:00

The AGT (Argentum Tela) series of articles is an effort to do two things. Usually an idea is presented only in its finished form. The first goal is to do some Reality Blogging, to show an idea evolve over time without pulling any punches. The second goal, and the example vehicle for the evolution aspect, is an extensible Design Surface for Silverlight similar to what we have in Visual Studio 2008. This type of application has all sorts of interesting uses. My example is a Home Theater layout tool. Read the entire saga: http://www.damonpayne.com/2008/09/14/RunTimeIsDesignTimeForAGT0.aspx

Atrophy

As of AGT[19] I was getting ready to extend Commanding and introduce some other concepts in order to get Undo/Redo support.  Of course, that was many months ago and I’ve let this sit for a while haven’t I?  Since that time a lot has happened.  Silverlight 3 has shipped, there are many more class libraries available, and Silverlight in general is being taken more seriously.  It’s time to continue working on the design surface project.

Ok, fine, I also need AGT for some other projects.  I need to take some time to bring the project up to the state of the art and change direction slightly to move the road map around to be more in line with my own short term needs.  Let’s get started.

If you’re new to this project, you can also check out the Codeplex site.

Silverlight 3 Upgrade

Since I’ve been through a machine repave or two since my last work I had to get Team System set back up for Codeplex.  I didn’t realize this until after I’d opened the solution and done the conversion wizard so I was concerned.  Sure enough, the project upgrade hozed the source control bindings but I was able to get it fixed using the Change Source Control command.  With this done I built and ran with no problems, however trying to change anything revealed that source control was most likely irrevocably ruined so I got latest and went back to work.

Once I got through all this, the Silverlight 3 upgrade went off without a hitch.  I found exactly zero breaking changes in the application so far; this is much nicer than some of the previous Silverlight 2 cycles I had gone through.

While no changes were strictly necessary, I had to think about taking advantage of new Silverlight 3 features.  I quickly cycled through my mental list of new Silverlight 3 features.  I may use things like Behaviors in the future.  One thing I wasn’t thrilled with from Silverlight 2 was the copy/scale/glass approach I had to take for creating my drag & drop “thumbnails” of controls.  I sat down to see how much work it would take to create an IDragTypeCreator implementation using WritableBitmap.  WriteableBitmap still has some bizarre behavior in some situations so unfortunately I had to stick with the old implementation.

Refactoring

Pretty much any time I look at old code, I’m eager to apply whatever I’ve since learned to it.  AGT is no exception.  In order to get my head back into this codebase I needed to come up with a refactoring goal that would cause me to review everything…

Moving to Unity

Now that Unity for Silverlight is in good shape, there’s no reason for me not to use it.  I have now taken a dependency on Unity 1.2.  It was hard to say goodbye to my own IoC container but it needed to be done.  Were there any issues in this upgrade?  Oh, you might say so…

  1. I removed my IService interface and replaced with Unity [Dependency] attributes.  This of course involved touching nearly every file in the project.  Find an IService interface, find the implementing classes and the importing classes; lather, rinse repeat.  This was super-painful.

  2. I decided to keep my own EventAggregator for now.

  3. I am also keeping my lame Region Manager for now

  4. The old Creative Commons declarations were removed since AGT is really MS-PL now.

While this resulted in a massive change set, it felt good.  This was a very eye-opening experience:

Changing your IoC container might mean touching most of the files in your solution!

Design Surface

Once I got the solution back up and running with Unity and Silverlight 3, I started looking at areas where I could clean up the design.  The DesignSurface implementation is only 300 lines right now, but is also likely to grow in the future.  I decided to use a concept from another article to encapsulate drawing on the design surface.

namespace DamonPayne.AGT.Design.Behaviors.Drawing
{
    public abstract class DrawingBehavior
    {
        public DrawingBehavior(Canvas surface)
        {
            Surface = surface;
        }

        /// <summary>
        /// The surface we're drawing on
        /// </summary>
        public Canvas Surface { get; private set; }

        /// <summary>
        /// Mouse click point relative to Surface    
        /// </summary>    
        public Point StartPoint { get; set; }

        public abstract void StartDrawing(Point s);

        /// <summary>    
        /// Give derrived classes a chance to determine if they can or should return a valid     
        /// Shape in their current state    
        /// </summary>    
        /// <param name="g"></param>    
        /// <returns></returns>    
        public virtual bool ShouldStopDrawing(DrawingGestures g)
        {
            return (g == DrawingGestures.MouseLeftButtonUp);
        }

        /// <summary>    
        /// Stop drawing and return the final Shape    
        /// </summary>    
        /// <returns></returns> 
        public abstract Shape StopDrawing();


        /// <summary>    
        /// Pass Mouse events through to the DrawingBehavior    
        /// </summary>    
        /// <param name="e"></param>    
        public abstract void MouseMove(MouseEventArgs e);
    }

}

If you are a long-time follower of this series or you’ve read the road map on Codeplex, you’ll know that I intend to have an extensible behavior mechanism for making things happen on the design surface.  DrawingBehvior is the first step in that direction, and also allows me to take a lot of code out of the design surface and move it to a dedicated construct.

namespace DamonPayne.AGT.Design.Behaviors.Drawing
{
    public class RectangleDrawingBehavior : DrawingBehavior
    {
        public static readonly double SELECT_RECT_STROKE_WIDTH = 3.0;
        public static readonly double SELECT_RECT_RADIUS_X = 0.0;
        public static readonly double SELECT_RECT_RADIUS_Y = 0.0;

        public RectangleDrawingBehavior(Canvas surface) : base(surface) { }

        public Rectangle DrawingRect { get; set; }

        public override Shape StartDrawing(Point s)
        {
            StartPoint = s; 
            DrawingRect = new Rectangle { Width = 5.0, Height = 5.0, };
            ApplyShapeStyle(DrawingRect);
            DrawingRect.SetValue(Canvas.LeftProperty, s.X);
            DrawingRect.SetValue(Canvas.TopProperty, s.Y);
            Surface.Children.Add(DrawingRect);
            return DrawingRect;
        }

        public override Shape StopDrawing()
        {
            var rVal = DrawingRect;
            DrawingRect = null;
            return rVal;
        }

        public override void MouseMove(MouseEventArgs e)
        {
            Point localMousePos = e.GetPosition(Surface);
            if (StartPoint.X < localMousePos.X)
            {
                double width = localMousePos.X - StartPoint.X;
                double height = localMousePos.Y - StartPoint.Y;
                if (width > 0 && height > 0)
                {
                    DrawingRect.Width = width;
                    DrawingRect.Height = height;
                }
            }        
            else // northwest drag        
            {            
                double width = StartPoint.X - localMousePos.X;
                double height = StartPoint.Y - localMousePos.Y;
                if (width > 0 && height > 0)//need this safety here in case a resize rectangle "crosses" itself.           
                {
                    DrawingRect.Width = width;
                    DrawingRect.Height = height;
                    DrawingRect.SetValue(Canvas.LeftProperty, localMousePos.X);
                    DrawingRect.SetValue(Canvas.TopProperty, localMousePos.Y);   
                }       
            }         
        }

        public virtual void ApplyShapeStyle(Shape s)
        {
            DrawingRect.StrokeThickness = SELECT_RECT_STROKE_WIDTH;
            DrawingRect.RadiusX = SELECT_RECT_RADIUS_X;
            DrawingRect.RadiusY = SELECT_RECT_RADIUS_Y;
            DrawingRect.Stroke = new SolidColorBrush(Color.FromArgb(0xFF, 0x15, 0x05, 0xFF));
            DrawingRect.Fill = new SolidColorBrush(Color.FromArgb(0xFF, 0x49, 0x59, 0xFF));
            DrawingRect.Opacity = .50;
            DrawingRect.SetValue(Canvas.ZIndexProperty, 1000);
        }

    }
}

Now the design surface code is a bit smaller.  The design surface is still assuming the selecting shape is a rectangle but I can fix that in the future.  I will probably also make the selection strategy pluggable at some point. 

Conclusion

Since there are no functional changes I have not updated the live demo.  You can get the most recent code from codeplex.  The final change set as of the end of this article is 28467.  The next AGT few articles will bring more interesting features, and yes I will get back to the Undo framework eventually.

Tags:

Comments (5) -

Dan R.
Dan R.
9/26/2009 1:47:23 PM #

Interesting article.  Are there plans to use Prism so the designsurface can be used in WPF as well?

Reply

Damon
Damon
9/26/2009 5:06:55 PM #

I will eventually get rid of my own Event Aggregator and Region Manager and use Prism, yes.

Reply

Dan R.
Dan R.
9/28/2009 7:07:20 PM #

Great.  I am eagerly awaiting your next installment.

Reply

nini
nini
9/20/2010 1:11:37 PM #

A few years ago, the black evil violations of key domain is passenger /, mining, construction, high profits wholesale market. In recent years, the violence relocates, illegal collection agencies, usury, in economic dispute also gradually become black evil activity spacewww.newcoachshoes.com/chanel-255-bags-c-30.html"><b>chanel 2.55 bags</b>
www.newcoachshoes.com/chanel-255-bags-c-30.html"><b>chanel 2.55 handbags</b>
www.newcoachshoes.com/chanel-coco-bags-c-28.html"><b>chanel coco handbags</b>
www.newcoachshoes.com/chanel-handbags-c-29.html"><b>authentic chanel handbags</b>
www.newcoachshoes.com/chanel-handbags-c-29.html"><b>chanel handbags on sale</b>
education scientific research institute of an expert to shoesmag reporters, temporary change does not conformwww.newcoachshoes.com/...l-shoulder-bags-c-31.html"><b>Womens shoulder bags</b>
www.newcoachshoes.com/...l-shoulder-bags-c-31.html"><b>Chanel Shoulder Bags</b>
www.newcoachshoes.com/...h-luggage-bags-c-2_6.html"><b>Coach Luggage Bags</b>
www.newcoachshoes.com/...shoulder-bags-c-2_10.html"><b>Coach Shoulder Bags</b>
http://www.newcoachshoes.com/coach-boots-c-23.html"><b>coach boots</b>
http://www.newcoachshoes.com/coach-boots-c-23.html"><b>coach rain boots</b>
http://www.newcoachshoes.com/coach-boots-c-23.html"><b>coach boots for sale</b>
true that the parliamentary election changed the situationwww.newcoachshoes.com/coach-handbag-c-1.html"><b>Discount Coach Handbags</b>
www.newcoachshoes.com/coach-handbag-c-1.html"><b>Coach Handbags Outlet</b>
www.newcoachshoes.com/coach-handbag-c-1.html"><b>Coach Handbags On Sale</b>
www.newcoachshoes.com/...mps-and-sandals-c-22.html"><b>coach sandals</b>
http://www.newcoachshoes.com/coach-shoes-c-19.html"><b>cheap coach shoes</b>
www.newcoachshoes.com/...womens-shoes-c-19_24.html"><b>coach women shoes</b>
www.newcoachshoes.com/...es-new-style-c-19_21.html"><b>Coach Shoes New Style</b>
www.newcoachshoes.com/coach-wallets-c-26.html"><b>coach wallets</b>first three questions voters will consider are whether parliament should pass a law cancelling mandatory monthly payments that support Slovakia’s public-service media
www.newcoachshoes.com/coach-sunglasses-c-27.html"><b>coach sunglasses</b>
www.newcoachshoes.com/coach-purses-c-25.html"><b>coach purses</b>
www.newcoachshoes.com/coach-purses-c-25.html"><b>cheap coach purses</b>
www.newcoachshoes.com/coach-purses-c-25.html"><b>coach purses on sale</b>
www.edhardyzoom.com/ed-hardy-shirts-c-44.html"><b>Mens ed hardy shirts</b>
referendum should be known a few hours after the polling stations closewww.edhardyzoom.com/ed-hardy-shirts-c-44.html"><b>Womens ed hardy shirts</b>
www.edhardyzoom.com/...men-tee-shirts-c-44_45.html"><b>ED hardy Men T Shirts</b>
www.edhardyzoom.com/...men-tee-shirts-c-44_45.html"><b>Mens Tee Shirts</b>
www.edhardyzoom.com/...s-short-shirts-c-44_46.html"><b>ED Womens Short Shirts</b>
http://www.edhardyzoom.com/ed-hoodies-c-60.html"><b>ed hardy hoodies</b>
http://www.edhardyzoom.com/ed-hoodies-c-60.html"><b>ed hoodies</b>
www.edhardyzoom.com/...y-mens-hoodies-c-60_61.html"><b>ED hardy Mens Hoodies</b>
www.edhardyzoom.com/...-women-hoodies-c-60_62.html"><b>ED hardy Women Hoodies</b>
www.edhardyzoom.com/ed-hardy-belts-c-34.html"><b>ed hardy belts</b>organisation of the referendum falls under the authority of the Interior Ministry which has been allocated almost
www.edhardyzoom.com/ed-hardy-boots-c-35.html"><b>ed hardy boots</b>
http://www.edhardyzoom.com/ed-hardy-caps-c-40.html"><b>Ed Hardy caps</b>
www.edhardyzoom.com/ed-hardy-handbags-c-33.html"><b>Ed Hardy Handbags</b>
www.edhardyzoom.com/...rdy-mens-jeans-c-64_65.html"><b>ED hardy Mens Jeans</b>
www.edhardyzoom.com/...y-womens-jeans-c-64_66.html"><b>ED hardy Womens Jeans</b>
www.edhardyzoom.com/ed-hardy-jeans-c-64.html"><b>ED hardy Jeans</b>
www.edhardyzoom.com/...ardy-long-tshirts-c-68.html"><b>ED hardy long t shirts</b>
www.edhardyzoom.com/...ns-long-sleeve-c-68_69.html"><b>Mens Long Sleeve T Shirts</b>
www.edhardyzoom.com/ed-hardy-purses-c-43.html"><b>ed hardy purses</b>
www.edhardyzoom.com/ed-hardy-shoes-c-48.html"><b>ed hardy shoes</b>
www.edhardyzoom.com/...ardy-men-shoes-c-48_50.html"><b>ED hardy men shoes</b>
opposition parties intensively campaigned for NATO entry and direct presidential electionswww.edhardyzoom.com/...dy-women-shoes-c-48_51.html"><b>ED hardy women shoes</b>
www.edhardyzoom.com/ed-hardy-tanks-c-55.html"><b>ED hardy Tanks</b>
www.edhardyzoom.com/ca-women-tee-shirts-c-28.html"><b>Christian Audigier women t shirts</b>
www.edhardyzoom.com/...n-audigier-sleeve-c-29.html"><b>Christian Audigier Sleeve</b>
www.edhardyzoom.com/...-audigier-hoodies-c-13.html"><b>Christian Audigier Hoodies</b>
www.edhardyzoom.com/...a-mens-hoodies-c-13_14.html"><b>Christian Audigier mens Hoodies</b>
www.edhardyzoom.com/...-women-hoodies-c-13_15.html"><b>Christian Audigier Womens Hoodies</b>
www.edhardyzoom.com/...an-audigier-jeans-c-16.html"><b>Christian Audigier Jeans</b>of the political science department of Comenius University told The Slovak Spectator
www.edhardyzoom.com/...gier-lounge-pants-c-24.html"><b>Christian Audigier Lounge Pants</b>
www.discountdownjackets.com/...ens-jacket-c-2.html"><b>mens north face jackets</b>
www.discountdownjackets.com/...men-jacket-c-7.html"><b>north face womens jackets</b>
www.discountdownjackets.com/...wn-jackets-c-8.html"><b>mens north face down jackets</b>
www.discountdownjackets.com/...-mens-vest-c-3.html"><b>mens north face vest</b>
www.discountdownjackets.com/...ace-gloves-c-5.html"><b>the north face gloves</b>
one’s financial resources received during privatisation and attracted only 19.96 percent of the voterswww.discountdownjackets.com/...ali-hoodie-c-4.html"><b>mens north face denali hoodie</b>
www.discountdownjackets.com/...ali-hoodie-c-6.html"><b>womens north face denali hoodie</b>
www.discountdownjackets.com/...n-jackets-c-10.html"><b>moncler down jackets</b>
www.discountdownjackets.com/...vers-pack-c-13.html"><b>moncler lovers pack</b>
www.discountdownjackets.com/moncler-vest-c-11.html"><b>moncler vest</b>
www.discountdownjackets.com/...down-coat-c-12.html"><b>moncler down coat</b>
www.discountdownjackets.com/...en-jacket-c-24.html"><b>peak jackets</b>
www.discountdownjackets.com/...-men-vest-c-25.html"><b>peak vest</b>political science department of Comenius University told
www.discountdownjackets.com/...en-jacket-c-26.html"><b>womens peak jackets</b>
www.discountdownjackets.com/...er-gloves-c-23.html"><b>Spyder Gloves</b>
www.discountdownjackets.com/...s-jackets-c-16.html"><b>Mens Columbia Jackets</b>
www.discountdownjackets.com/...s-jackets-c-17.html"><b>Womens Columbia Jackets</b>
www.discountdownjackets.com/...own-jacket-c-9.html"><b>Fjallraven down jacket</b>
government will pass a concrete concept of how to proceed, including the financial resources for realising prevention with the consequences of floods is much more expensive than prevention.”
www.cheapwinterjackets.com/...ns-jackets-c-41.html">Columbia Mens Jackets
www.cheapwinterjackets.com/...ns-jackets-c-42.html">Columbia Womens Jackets
www.cheapwinterjackets.com/...own-jacket-c-28.html">Fjallraven down jacket
www.cheapwinterjackets.com/...ali-hoodie-c-33.html">North Face Denali hoodie
www.cheapwinterjackets.com/...overs-pack-c-40.html">Moncler lovers pack
www.cheapwinterjackets.com/...wn-jackets-c-37.html">Moncler Men Down Jacketsyou identify running through different design styles? The surfaces may look different
www.cheapwinterjackets.com/...-down-coat-c-39.html">Moncler Women Down Coat
www.cheapwinterjackets.com/...ids-denali-c-29.html">Kids North Face
www.cheapwinterjackets.com/...wn-jackets-c-31.html">North Face Men Down Jackets
www.cheapwinterjackets.com/...ns-jackets-c-30.html">North Face Mens Jackets
is another value-added search aggregator with a twist: by default, as you searchwww.cheapwinterjackets.com/...-mens-vest-c-32.html">Mens North Face Vest
www.cheapwinterjackets.com/...en-jackets-c-36.html">North Face Women Jackets
www.cheapwinterjackets.com/...ns-jackets-c-49.html">Peak Mens Jackets
www.cheapwinterjackets.com/...ns-jackets-c-51.html">Peak Womens Jackets
www.cheapwinterjackets.com/spyder-gloves-c-48.html">Spyder Gloves
www.cheapwinterjackets.com/...ace-gloves-c-34.html">The North Face Gloves
like that which Bob King is leading at the UAW.  For families, companies, and governments at all three levels, the pie has been shrinking, and the golden goose that laid plenty of good-paying  jobs seems to be ailing. Hard negotiations lie ahead for so many of us – certainly for all of us as US citizens

Reply

mbt shoes
mbt shoes
11/3/2010 7:17:06 AM #

I just saw a articl about http://www.walkbay.com">MBT shoes in http://www.walkbay.com">walkbay.com.
  
http://www.walkbay.com">MBT stands for Masai Barefoot Technology.  The company that makes MBT Shoe (also known as the http://www.walkbay.com">anti shoe) is Swiss Masai.  The uniquely-designed, multi-layered, cured sole is designed to simulate walking in sand (similar to the natural walking environment of the Masai in Kenya).  This creates a natural, uneven walking surface and forces the body to use all the major and stabilsing muscle groups, thus training the whole body to move correctly.

does http://www.walkbay.com">MBT shoe really work?




http://www.walkbay.com">MBT shoe  http://www.walkbay.com">MBT shoes  http://www.walkbay.com">anti shoe  http://www.walkbay.com">anti shoes  http://www.walkbay.com">cheap MBT shoes  http://www.walkbay.com">MBT walking shoes  http://www.walkbay.com">walking shoes  http://www.walkbay.com">MBT shoes sale  http://www.walkbay.com">buy MBT shoes  http://www.walkbay.com">MBT shoes buy  http://www.walkbay.com">cheapest MBT shoes  http://www.walkbay.com">discount MBT shoes  http://www.walkbay.com">shape ups http://www.walkbay.com">shape up shoes http://www.walkbay.com">cheap MBT shoe  http://www.walkbay.com">massai shoes http://www.walkbay.com">shoes mbt http://www.walkbay.com">shoes anti http://www.walkbay.com">massai barefoot http://www.walkbay.com">MBT trainers http://www.walkbay.com">MBT trainer http://www.walkbay.com">MBT sneaker http://www.walkbay.com">MBT sneakers  http://www.walkbay.com">womens MBT shoes http://www.walkbay.com">women’s MBT shoes http://www.walkbay.com">women MBT shoes  http://www.walkbay.com">womens MBT  http://www.walkbay.com">women’s MBT http://www.walkbay.com">mbt women   http://www.walkbay.com">MBT women’s shoes http://www.walkbay.com">MBT shoes for women  http://www.walkbay.com">MBT shoes women http://www.walkbay.com">MBT shoes men http://www.walkbay.com">MEN MBT shoes  http://www.walkbay.com">men’s MBT shoes http://www.walkbay.com">mens MBT shoes   http://www.walkbay.com">men MBT  http://www.walkbay.com">MBT mens shoes http://www.walkbay.com">MBT shoes for men http://www.walkbay.com">MBT shoes men’s http://www.walkbay.com">MBT men’s shoes http://www.walkbay.com">MBT men  http://www.walkbay.com">MBT shoes men’s


www.walkbay.com/mbt-shoe-mbt-kimondo-men-s-c-78_88">MBT kimondo
http://www.walkbay.com">MBT sandal  
http://www.walkbay.com">MBT sandals
http://www.walkbay.com">women’s MBT sandals
http://www.walkbay.com/mbt-shoe-mbt-baridi-c-78_90">mbt baridi
http://www.walkbay.com/mbt-shoe-mbt-baridi-c-78_90">mbt baridi shoes
http://www.walkbay.com/mbt-shoe-mbt-baridi-c-78_90">women’s mbt baridi
http://www.walkbay.com/mbt-shoe-mbt-baridi-c-78_90">womens mbt shoes
http://www.walkbay.com/mbt-shoe-mbt-baridi-c-78_90">womens mbt
http://www.walkbay.com/mbt-shoe-mbt-changa-c-78_91">mbt changa
http://www.walkbay.com/mbt-shoe-mbt-changa-c-78_91">changa mbt
http://www.walkbay.com/mbt-shoe-mbt-changa-c-78_91">mbt changa shoes
http://www.walkbay.com/mbt-shoe-mbt-changa-c-78_91">women’s mbt changa
http://www.walkbay.com/mbt-shoe-mbt-changa-c-78_91">womens changa
http://www.walkbay.com/mbt-shoe-mbt-changa-c-78_91">women’s changa
http://www.walkbay.com/mbt-shoe-mbt-changa-c-78_91">women’s mbt shoes
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">mbt chapa
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">mbt chapa gtx
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">chapa mbt
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">mbt chapa shoes
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">women’s mbt chapa
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">womens mbt chapa
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">men’s mbt chapa
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">mens mbt chapa
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">womens mbt shoes
www.walkbay.com/mbt-shoe-mbt-chapa-gtx-c-78_92">mens mbt shoes
http://www.walkbay.com/mbt-shoe-mbt-ema-c-78_93">mbt ema
http://www.walkbay.com/mbt-shoe-mbt-ema-c-78_93">womens mbt ema
http://www.walkbay.com/mbt-shoe-mbt-ema-c-78_93">womens mbt
http://www.walkbay.com/mbt-shoe-mbt-ema-c-78_93">mbt ema shoes
http://www.walkbay.com/mbt-shoe-mbt-ema-c-78_93">comfortable shoes
www.walkbay.com/.../women-s-mbt-ema-comfort-shoes-black-p-3417">comfort shoes
www.walkbay.com/mbt-shoe-mbt-fanaka-gtx-c-78_94">mbt fanaka
www.walkbay.com/mbt-shoe-mbt-fanaka-gtx-c-78_94">mbt fanaka gtx
www.walkbay.com/mbt-shoe-mbt-fanaka-gtx-c-78_94">mbt fanaka shoes
www.walkbay.com/mbt-shoe-mbt-fanaka-gtx-c-78_94">men’s mbt fanaka
www.walkbay.com/mbt-shoe-mbt-fanaka-gtx-c-78_94">mens mbt
www.walkbay.com/.../mbt-fanaka-gtx-mens-lace-up-shoes-chipper-brown-p-3421">lace up shoes
http://www.walkbay.com/mbt-shoe-mbt-fora-c-78_95">mbt fora
http://www.walkbay.com/mbt-shoe-mbt-fora-c-78_95">for a mbt
http://www.walkbay.com/mbt-shoe-mbt-fora-c-78_95">women’s mbt fora
http://www.walkbay.com/mbt-shoe-mbt-fora-c-78_95">mbt for a shoes
www.walkbay.com/.../mbt-fora-women-s-fitness-shoes-red-p-3423">fitness shoes
www.walkbay.com/.../women-mbt-fora-discount-shoe-white-p-3425">women mbt
http://www.walkbay.com/mbt-shoe-mbt-fumba-c-78_96">mbt fumba
http://www.walkbay.com/mbt-shoe-mbt-fumba-c-78_96">mbt fumba shoes
http://www.walkbay.com/mbt-shoe-mbt-fumba-c-78_96">men’s mbt fumba
http://www.walkbay.com/mbt-shoe-mbt-fumba-c-78_96"> mbt shoes men’s
www.walkbay.com/.../mbt-fumba-mens-shoes-sandals-cinnabar-p-3429">mens shoes sandals
http://www.walkbay.com/mbt-shoe-mbt-habari-c-78_97">mbt habari
http://www.walkbay.com/mbt-shoe-mbt-habari-c-78_97">mbt habari shoes
http://www.walkbay.com/mbt-shoe-mbt-habari-c-78_97">womens mbt habari
www.walkbay.com/.../mbt-women-mbt-habari-clogs-for-women-birch-p-3431">clog for women
http://www.walkbay.com/mbt-shoe-mbt-imara-c-78_99">mbt imara
http://www.walkbay.com/mbt-shoe-mbt-imara-c-78_99">mbt imara shoes
www.walkbay.com/mbt-shoe-mbt-karani-c-78_100">mbt karani
www.walkbay.com/mbt-shoe-mbt-karani-c-78_100">men mbt shoes
http://www.walkbay.com/mbt-shoe-mbt-kaya-c-78_101">mbt kaya
http://www.walkbay.com/mbt-shoe-mbt-kaya-c-78_101">mbt kaya shoes
http://www.walkbay.com/mbt-shoe-mbt-kaya-c-78_101">womens mbt kaya
http://www.walkbay.com/mbt-shoe-mbt-kaya-c-78_101">mbt womens shoes
www.walkbay.com/.../mbt-kaya-womens-mary-jane-navy-blue-mbt-womens-shoes-p-3439"> womens mary jane
www.walkbay.com/.../mbt-kaya-womens-mary-jane-navy-blue-mbt-womens-shoes-p-3439"> women’s mary jane
www.walkbay.com/mbt-shoe-mbt-kisumu-c-78_102">mbt kisumu
www.walkbay.com/mbt-shoe-mbt-kisumu-c-78_102">mens mbt kisumu
www.walkbay.com/mbt-shoe-mbt-kisumu-c-78_102">men’s mbt kisumu
www.walkbay.com/mbt-shoe-mbt-kisumu-c-78_102">womens mbt kisumu
www.walkbay.com/mbt-shoe-mbt-kisumu-c-78_102">women’s mbt kisumu
www.walkbay.com/.../mbt-kisumu-mens-clogs-brown-shoes-mbt-p-3447">shoes mbt
www.walkbay.com/.../mbt-kisumu-womens-casual-sandal-white-p-3455">womens casual sandal
http://www.walkbay.com/mbt-shoe-mbt-lami-c-78_103">mbt lami
http://www.walkbay.com/mbt-shoe-mbt-lami-c-78_103">lami mbt
www.walkbay.com/.../women-s-mbt-lami-mary-janes-purple-lami-mbt-p-3457">mary janes
http://www.walkbay.com/mbt-shoe-mbtwalk-c-78_104">mbt m.walk
http://www.walkbay.com/mbt-shoe-mbtwalk-c-78_104">mbt m.walk shoes
http://www.walkbay.com/mbt-shoe-mbtwalk-c-78_104">women’s mbt m.walk\
http://www.walkbay.com/mbt-shoe-mbtwalk-c-78_104">mens mbt m.walk
http://www.walkbay.com/mbt-shoe-mbtwalk-c-78_104">mbt mwalk
www.walkbay.com/.../mbtwalk-mens-black-sneakers-p-3462">mbt m. walk
www.walkbay.com/.../m-walk-mbt-women-trainer-pink-grey-p-3469">m.walk mbt
www.walkbay.com/.../mbt-walk-womens-shoes-trainers-grey-silver-p-3471">mbt walk
http://www.walkbay.com/mbt-shoe-mbt-panda-c-78_105">mbt panda
http://www.walkbay.com/mbt-shoe-mbt-panda-c-78_105">women’s mbt
www.walkbay.com/.../mbt-panda-mbt-womens-clogs-black-p-3479">womens clog
www.walkbay.com/mbt-shoe-mbt-salama-c-78_106">mbt salama
www.walkbay.com/mbt-shoe-mbt-salama-c-78_106">mbt women’s shoes
www.walkbay.com/mbt-shoe-mbt-salama-c-78_106">women’s mbt
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">mbt sapatu
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">womens mbt sapatu
www.walkbay.com/.../mbt-sandal-women-s-mbt-sapatu-white-p-3485">mbt sandal
www.walkbay.com/.../mbt-sandals-men-s-mbt-sapatu-white-p-3487">mbt sandals
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">mbt sawa
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">mbt mary jane
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">mbt women’s
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">mbt shuguli
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">mbt shuguli gtx
www.walkbay.com/mbt-shoe-mbt-sapatu-c-78_107">mbt men
www.walkbay.com/.../mbt-shoes-womens-sirima-mary-janes-shoes-black-p-3491">mbt sirima
www.walkbay.com/.../mbt-shoes-womens-sirima-mary-janes-shoes-black-p-3491">mbt shoes
www.walkbay.com/.../mbt-shoes-womens-sirima-mary-janes-shoes-black-p-3491">mary janes shoes
www.walkbay.com/mbt-shoe-mbt-sport-2-c-78_1111">mbt sport 2
www.walkbay.com/mbt-shoe-mbt-sport-2-c-78_1111">mbt sport
www.walkbay.com/mbt-shoe-mbt-sport-2-c-78_1111">mbt sport shoes
www.walkbay.com/mbt-shoe-mbt-sport-2-c-78_1111"> sport mbt
http://www.walkbay.com/mbt-shoe-mbt-sport-c-78_112">mbt sport
http://www.walkbay.com/mbt-shoe-mbt-sport-c-78_112">sport mbt
http://www.walkbay.com/mbt-shoe-mbt-sport-c-78_112">women’s mbt sport
http://www.walkbay.com/mbt-shoe-mbt-sport-c-78_112">men’s mbt sport
www.walkbay.com/.../mbt-sport-women-s-walking-shoe-white-p-3501">women’s walking shoe
http://www.walkbay.com/mbt-shoe-mbt-staka-c-78_113">mbt staka
www.walkbay.com/.../mbt-men-s-shoes-tariki-mens-oxfords-black-p-3504">mbt tariki
www.walkbay.com/.../mbt-men-s-shoes-tariki-mens-oxfords-black-p-3504">tariki mbt
www.walkbay.com/.../mbt-men-s-shoes-tariki-mens-oxfords-black-p-3504">mbt men’s shoes
www.walkbay.com/.../mbt-men-s-shoes-tariki-mens-oxfords-black-p-3504">mens oxfords
www.walkbay.com/.../womens-mbt-shoe-tembea-black-p-3505">mbt tembea
www.walkbay.com/.../womens-mbt-shoe-tembea-black-p-3505">mbt shoe
www.walkbay.com/.../womens-mbt-shoe-tembea-black-p-3505">womens mbt shoe
www.walkbay.com/mbt-shoe-mbt-tunisha-c-78_117">mbt tunisha
www.walkbay.com/mbt-shoe-mbt-tunisha-c-78_117">tunisha mbt
www.walkbay.com/mbt-shoe-mbt-tunisha-c-78_117">mbt tunisha shoes
www.walkbay.com/mbt-shoe-mbt-tunisha-c-78_117">mbt womens shoes
www.walkbay.com/.../mbt-womens-shoes-mbt-tunisha-maryjane-shoes-black-p-3508">maryjane shoes
http://www.walkbay.com/mbt-shoe-mbt-unono-c-78_118">mbt unono
http://www.walkbay.com/mbt-shoe-mbt-voi-c-78_119">mbt voi
www.walkbay.com/.../mbt-voi-womens-trainer-black-p-3511">womens trainer
www.walkbay.com/.../mbt-voi-womens-trainers-white-p-3512">womens trainers

Reply

Pingbacks and trackbacks (1)+

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


About the author

Damon Payne is a Microsoft MVP specializing in Smart Client solution architecture. 

INETA Community Speakers Program

Month List

Page List

flickr photostream