Rules || “Rulers” in WPF – Power of Recursion

Recursion always been a power full tool of solving the most complicated problems in a very elegant manner, but at the price of space (as it is based on stack). The problems we solve with recursion are usually involve divide and conquer, trees traversal / graphs traversal etc. Today we’ll discuss about binary divide and conquer and you’ll see how trivial it is to draw a “Ruler” in WPF with the help of recursion technique.

Now the question is, what exactly is the “Recursion”? Here is one definition for it :–

        If you still don't get it, see – "Recursion:"  
(It seems non terminating, actually it does terminate, when the reader “gets it”

In Recursion, we look for patterns, and if we find one, we subdivide it to find similar sub-patterns and so on and that is very much analogous to “Divide and Conquer”. In our case, we will be using “Binary Divide and Conquer (BCD)”, where we divide the problem domain in two halves, each half further is divided into two halves and so on. This technique is used in many problem domains like, binary trees algorithms, like binary search or binary tree traversals, etc, etc.

As an example We’ll be building a Ruler application, xpRuler, in WPF and here are some simple requirements for it.

  1. Window should be border-less, style-less
  2. We can drag the window with the help of the mouse.
  3. Draw the ruler in either direction, i.e. Left, Top, Right and Bottom.
  4. With double click you can change its direction from Horizontal to Vertical positioning.

Here is how it looks like pictorially :-

ruler( Figure – 1 )

This shows both horizontal and vertical positions when you double click them, the positions changes to horizontal or vice versa.

First two requirements can be achieved very easily using XAML and some code behind:-


If you look at the above highlighted area, we need to setup three properties, AllowsTransparency should be True, WindowStyle should be none and Background should be transparent.

One more thing and that we’ll do under the MouseLeftButtonDown event handler:

        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            // Allows a window to be dragged by a mouse with its left button down over an
            // exposed area of the window's client area. Needed for auto dragging of the window.

That’s all for making the window’s look and feel, border-less and you can drag the window by clicking in any where in the client-area and move it around. All said, now lets move on to the Recursion algorithm for the drawing of the rulers and here is the code for it.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Windows;
   6:  using System.Windows.Controls;
   7:  using System.Windows.Data;
   8:  using System.Windows.Documents;
   9:  using System.Windows.Input;
  10:  using System.Windows.Media;
  11:  using System.Windows.Media.Imaging;
  12:  using System.Windows.Navigation;
  13:  using System.Windows.Shapes;
  14:  using System.Threading;
  16:  namespace Shams.Wpf.Ruler
  17:  {
  18:      /// <summary>
  19:      /// Interaction logic for MainWindow.xaml
  20:      /// </summary>
  21:      public partial class MainWindow : Window
  22:      {
  23:          public MainWindow()
  24:          {
  25:              InitializeComponent();
  26:          }
  28:          bool IsHorizontal = true; // initially shall be drawn in horizontal position
  29:          private void TicksCanvas_Loaded(object sender, RoutedEventArgs e)
  30:          {
  31:              // draw the ruler level 8 => (2^level - 1) = 255 <= are the total elements of the balanced tree.
  32:              // (both sides of the ruler multiply by 2 =>(2)*(2^level - 1) == 2 * 255 = 510 elements.
  33:              DrawRuler(sender as Canvas, 8);
  35:              // negate the current horizontal state
  36:              IsHorizontal = !IsHorizontal;
  37:          }
  39:          private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  40:          {
  41:              //
  42:              // Allows a window to be dragged by a mouse with its left button down over an
  43:              // exposed area of the window's client area. Needed for auto dragging of the window.
  44:              //
  45:              this.DragMove();
  47:              // If double clicked.
  48:              if (e.ClickCount > 1)
  49:              {
  50:                  // get the actual width and height
  51:                  double width = this.Width;
  52:                  double height = this.Height;
  54:                  // reverse them
  55:                  this.Height = width;
  56:                  this.Width = height;
  58:                  // Refresh the canvas
  59:                  this.TicksCanvas.Children.Clear();
  61:                  // draw the ruler
  62:                  DrawRuler(this.TicksCanvas, 8);
  64:                  // negate the current horizontal state
  65:                  IsHorizontal = !IsHorizontal;
  66:              }
  67:          }
  69:          void DrawRuler(Canvas canvas, int level)
  70:          {
  71:              if (IsHorizontal)
  72:              {
  73:                  // draw the top one.
  74:                  DrawRuler(this.TicksCanvas,
  75:                      0,
  76:                      0,
  77:                      this.TicksCanvas.ActualWidth,
  78:                      level,
  79:                      true,
  80:                      true,
  81:                      0);
  83:                   // draw the bottom one.
  84:                  DrawRuler(this.TicksCanvas,
  85:                      this.TicksCanvas.ActualHeight,
  86:                      0,
  87:                      this.TicksCanvas.ActualWidth,
  88:                      level,
  89:                      true,
  90:                      false,
  91:                      0);
  92:              }
  93:              else // Vertical
  94:              {
  95:                  // draw the left one.
  96:                  DrawRuler(this.TicksCanvas, 
  97:                      0, 
  98:                      0, 
  99:                      this.TicksCanvas.ActualHeight, 
 100:                      level, 
 101:                      false, 
 102:                      false,
 103:                      0);
 105:                  // draw the right one.
 106:                  DrawRuler(this.TicksCanvas, 
 107:                      this.TicksCanvas.ActualWidth, 
 108:                      0, 
 109:                      this.TicksCanvas.ActualHeight, 
 110:                      level, 
 111:                      false, 
 112:                      true,
 113:                      0);
 114:              }
 115:          }
 117:          /// <summary>
 118:          /// The main recursive algorithm, divide-n-conquer
 119:          /// </summary>
 120:          /// <param name="canvas"></param>
 121:          /// <param name="start"></param>
 122:          /// <param name="left"></param>
 123:          /// <param name="right"></param>
 124:          /// <param name="level"></param>
 125:          /// <param name="isHorizontal"></param>
 126:          /// <param name="isInvert"></param>
 127:          /// <param name="label"></param>
 128:          void DrawRuler(Canvas canvas,
 129:              double start,
 130:              double left,
 131:              double right,
 132:              int level,
 133:              bool isHorizontal,
 134:              bool isInvert,
 135:              double label)
 136:          {
 137:              // when level reaches 0, stack unwinding starts...
 138:              if (level > 0)
 139:              {
 140:                  double mid = ((left + right) / 2);
 142:                  // recursive - devide and conquer algorithm                
 143:                  // draw left to the ruler
 144:                  DrawRuler(canvas,
 145:                      start,
 146:                      left,
 147:                      mid,
 148:                      level - 1,
 149:                      isHorizontal,
 150:                      isInvert,
 151:                      label+1);
 153:                  // draw right to the ruler
 154:                  DrawRuler(canvas,
 155:                      start,
 156:                      mid,
 157:                      right,
 158:                      level - 1,
 159:                      isHorizontal,
 160:                      isInvert,
 161:                      label+1);
 163:                  #region Drawing functionality
 165:                  Line gridline = new Line();
 166:                  gridline.Stroke = Brushes.Black;
 167:                  gridline.StrokeThickness = 1.0;
 169:                  int ifactor = isInvert ? -1 : +1;
 170:                  if (isHorizontal)
 171:                  {
 172:                      gridline.X1 = mid;
 173:                      gridline.Y1 = start;
 174:                      gridline.X2 = mid;
 176:                      gridline.Y2 = (start - ifactor * (level * 5));
 177:                  }
 178:                  else // vertical
 179:                  {
 180:                      gridline.X1 = start;
 181:                      gridline.Y1 = mid;
 182:                      gridline.X2 = (start + ifactor * (level * 5));
 183:                      gridline.Y2 = mid;
 184:                  }
 185:                  //System.Diagnostics.Debug.Write(level + " ");
 187:                  // finally add to the canvas
 188:                  canvas.Children.Add(gridline);
 190:                  #endregion
 192:              }
 193:          }
 195:          private double GetLabel(double level)
 196:          {
 197:              return Math.Pow(2,level) - 1;
 198:          }
 200:          private void MenuItemExit_Click(object sender, RoutedEventArgs e)
 201:          {
 202:              this.Close();
 203:          }
 205:          private void MenuItemAbout_Click(object sender, RoutedEventArgs e)
 206:          {
 207:              MessageWindow messageWindow = new MessageWindow();
 208:              messageWindow.Title = "About xpRuler Ver.1.1a";
 209:              messageWindow.Message = "Developed by shams mukhtar (";
 210:              messageWindow.ShowDialog();
 211:          }
 212:      }
 213:  }

All the magic is done in the method @ lines 128-193

void DrawRuler(Canvas canvas,
            double start,
            double left,
            double right,
            int level,
            bool isHorizontal,
            bool isInvert,
            double label);

The algorithm is analogous to Postorder binary tree traversal, where we visit the left and right sub-trees first and then visit the node itself. In the Method above, left and right indicates the width of the ruler, that's what we divide in each recursive call while the start param. is the start for vertical or start of horizontal location and level indicates the depth for each half. IsHorizontal is an indicator for horizontal/vertical positions and isInvert is used to mirror the start location of the ticks and label is not used (TBD).

Exercise: To the scale (inches / centimeters) plotting of the ruler, along with the proper labeling.
(Hint: Use label argument in the DrawRuler method and (2^level - 1) formula)

So, that's all for now folks. I’ll be looking forward to your feedbacks/comments, enjoy :)

Download File - Ruler Project

If you enjoyed reading this blog, leave your valuable feedback and consider subscribing to the RSS feed. You can also subscribe to it by email. Also, you can follow me on Twitter. Thank you!

Comments (6) -

rencontre conjugaison
10/11/2017 5:28:53 AM #

bar rencontre laval  rencontre entre les mondes -  rencontre figeac  lovoo site de rencontre gratuit -   rencontre conjugaison -  inattendue poeme  application rencontre plan cul -  mariage halal rencontre  rencontre adisq -  site de rencontre gratuit 07  rencontre 31 decembre -  rencontre travestie gratuit  application telephone pour rencontre -  rencontre bar le duc  rencontre femme st etienne -  site de rencontre spiritualite  elite rencontres pub -  site de rencontre payant pour les filles  rencontre doubs -  phrase intro site de rencontre  rencontre porno gratuit -  rencontre paris 17  site de rencontre fiable ou pas -  wannonce rencontre adulte nice  site de rencontre liege -  elite rencontre resiliation  site de rencontre fiable 2017 -  appli de rencontre gratuit  rencontre aveyron -  rencontre gay sex  amitie et rencontre savoie -  rencontre harmonie verdun  pourquoi je ne rencontre pas la bonne personne -  rencontre femme pour femme  rencontre avec des femmes -  logo rencontres d'arles  site de rencontre homme seropositif -  3918 rencontre  rencontre amis lyon -  rencontre virtuelle ado  application telephone pour rencontre -  camping a la rencontre du soleil 38  site de rencontre sans photo gratuit -  le premier rencontre avec un homme  site de rencontre breton a paris -  se rencontrer autrement  rencontre simple sans inscription -  rencontre ado sur bayonne  jour-ou-je-l'ai-rencontree -  rencontre lesb  site de rencontre pour deficient intellectuel -

rencontre gratuite
10/11/2017 6:37:50 AM #

paru vendu rencontres  rencontre sportive avis -  rencontre etudiante paris  site de rencontre elite avis -  rencontre recrutement dax  blog de rencontre pour ado -  elites rencontres  amities rencontres vaud -  rencontre ol psg  rencontre emotionnelle -  rencontre tranny  rencontre femme loire atlantique -  sites de rencontre gratuit pour homme  rencontres ephemere -  rencontre entre personne handicape gratuite  si de rencontre gratuit -  nouveau site de rencontre gratuit  rencontre la louviere -  paris  rencontre gratuite -   rencontre gay train -  rencontre gay aix en provence  site rencontre amitie femme -  site de rencontre moins de 25 ans  rencontre coquine couple -  rencontre femme agee  rencontre amienoise -  site de rencontre pour amitie  rencontre coquine couple -  google rencontre femme  dialogue pour premiere rencontre -  rencontre ado hot  rencontre rock metal -  site de rencontre canada gratuit non payant  rencontre 31210 -  rencontre amicale moulins  rencontre celibataire toulouse -  votre avis sur elite rencontre  romeo et juliette site rencontre -  vieille femme rencontre  rencontre vertou -  so family rencontre  revue rencontres intimes -  rencontre avec le diable samuel l jackson  rencontre coquine couple -  rencontre montreal 100 gratuit  rencontre mer et ocean -  rencontre a 15 horaire  rencontres amicales jura -  site de rencontres pour amitie  vous rencontrez -

rencontrer une fille  site de rencontres pour ado sans inscription -  site de rencontre aquitaine ado  rencontre lesbiene -  plan cul rencontre  site de rencontre parents solo gratuit -  leboncoin site de rencontre en picardie  rencontre train de nuit -  rencontre amicale ales  rencontrer une fille a dakar -  rencontre des medias libres  rencontre coquine 66 -  maison de la rencontre orcival  site de rencontre pour ado ronde -  comment rencontrer a 40 ans  site de rencontre entierement gratuit pour les hommes -  rencontre ado 28  site de rencontre gratuit sans inscription avec photo -  rencontre cougar lesbienne  rencontre lesbienne -  rencontrer un mec sur tinder  rencontre seniors 70 ans -  site rencontre 100 gratuite  belle rencontre amicale -  rencontre sex annecy  rencontre sexe wannonce -  bing site de rencontres  top site rencontre ado -  rencontre nord 59  site des rencontre 100 gratuit -  rencontres 1962  rencontre 38 -  rencontre sexe drome  rencontre femmes cougars -  rencontre femme celibataire 77  rencontre adulte ephemere -  exemple annonce  site de rencontre entre hommes et femmes -  de rencontre originale  rencontre et baise -  site de rencontre gratuit 72 pour ado  appli android rencontre cougar -  les sites de rencontre gratuit 2017  rendez vous avec x musique -  rencontre love  rencontre sexe wannonce -  rencontre femme sete  question pour rencontrer quelqu'un -  rencontre gay montreal  rencontres sexe gratuite -  comment faire pour rencontrer des gens quand on est timide  prier pour rencontrer l'amour -

rencontre par sms
10/11/2017 11:50:53 AM #

rencontre par sms -  motard herault  rencontres savoie -  agence rencontre polonaise  rencontres amicales avignon -  site de rencontre ado sans inscription  que pensez vous du site de rencontre oulfa -  comment rencontrer du monde sur lyon  apps rencontre gratuite -  rencontre sex femme  site de rencontre gratuit 54 pour ado -  site de rencontre aveyron  site de rencontre femme handicapee -  site de rencontre populaire 100 gratuit  rencontre entre hommes montreal -  rencontre geolocalisation iphone  numero de rencontre en ligne -  rencontre sex idf  site de rencontre gratuit parents celibataires -  site de rencontre pour femme  gossy site de rencontre -  site de rencontre sans inscription en ligne gratuit  rencontre foret fontainebleau -  site rencontre handicape valide  site de rencontre gratuit non payant sans inscription -  exemple d'annonce de rencontre rigolote  site de rencontres amicales non payants -  rencontre avec le dragon  rencontrer du monde a annecy -  siri raconte-moi une blague  sites de rencontre gratuit et sans inscription -  quand adam rencontre eve d8  rencontre transexuelle gratuit -  rencontre gay saint etienne  comment rencontrer des hommes celibataires -  application rencontre japonaise  facebook est un site de rencontre -  rencontre par cam ado  voir au passe simple et imparfait -  rencontre celibataire en corse  rencontre 973 -  priere pour trouver l'amour perdu  a la rencontre de 2 pans de mur -  sit de rencontre coco  agence rencontre senior -  site rencontre travesti  rencontre gagny -  rencontre trans nancy  rencontre amicale a lille -  annonce rencontre  rencontre femme bordeaux -

rencontre avenue test
10/12/2017 12:21:37 PM #

agence de rencontres nantes  sites de rencontres pour seniors -  rencontre 5a7  rencontres travesti -  rencontre femme st etienne  rencontre croix -  rencontre ado  belles rencontres du jazz -  rencontre extra congugale  application de rencontre ado -  app rencontre ado  rencontre 03100 -  rencontre d'amis dans le 56  site de rencontre gratuit 33 -  un site de rencontre fiable  rencontres photo -  site de  rencontre avenue test -  non payant pour seniors  reseau rencontre -  site de rencontre 45 gratuit  site rencontre totalement gratuit pour les hommes -  site de rencontre sans inscrition  rencontre femme sourde -  rencontre militaire  rencontre amicale sur agen -  site de rencontre rhone alpes  site rencontre thailande -  blog rencontre sexe  rencontre esperance secte -  site de rencontre sud ouest  cite de rencontre porno -  rencontre trans grenoble  rencontrer femmes celibataires -  site de rencontre gratuit 41  site de rencontre gratuit 35600 -  site rencontre d un soir  les sites de rencontre avis -  rencontre vietnamienne  appli rencontre train -  faire des rencontres amicales lyon  rencontre amicale dans le nord -  oulfa site de rencontre avis  rencontre video -  chaude rencontre  rencontre 28 bonneval -  rencontre celibataire ouest  rencontre a nancy -  forum de rencontre pour ado sans inscription  site de rencontre homme gratuit 03 -  site de rencontre carbonne 31  site rencontre adultes -

prix baie vitree galandage pvc  devis en ligne pergola bioclimatique -  devis crepis cloture  travaux peinture devis grenoble -  comment faire baisser un devis travaux  devis auto entrepreneur peintre en batiment -  prix porte coulissante sur mesure castorama  renover escalier carrele -  devis ouverture mur  prix moyen pour abattage d'un arbre -  prix porte entree bois cintre  termites traitement cout -  prix installation poele a bois sans conduit existant  tarif installation panneau solaire -  prix toiture maison 100m2  cout installation poele a bois castorama -  prix moyen carrelage mural  devis fondation -  prix abri piscine telescopique  demoussage de toiture prix au m2 -  chariot elevateur electrique occasion prix  prix poele a bois dovre -  devis en ligne pour porte d'entree  devis crepis facade -  prix porte blindee pour cave  prix porte blindee maison -   prix escalier bois deux quart tournant -  faux plafond acoustique gyptone  systeme domotique somfy prix -  porte pvc couleur prix  prix radiateur electrique basse consommation -  prix pour tailler haie laurier  carrelage sol cuisine professionnelle prix -  prix ragreage sol leroy merlin  prix pose grillage soude -  devis bardage metallique  garde corps terrasse prix -  prix entretien piscine desjoyaux  extension maison ossature bois prix m2 -  osmoseur prix aquarium  prix pin taille nuage -  prix veranda 20m2 kit  prix m2 crepis exterieur maison -  prix crepis maison neuve  devis portail battant -  prix terrasse bois exotique  devis abattage cloison -  devis porte d'entree pvc en ligne  prix renovation appartement 65 m2 -  panneaux osb prix  tarif pose faux plafond suspendu -

site de rencontre j'adopte un homme
10/12/2017 2:43:37 PM #

ecouter radio rencontre 93.3 fm  site de rencontre ronde -  site rencontre oulfa non payante  site rencontre ado nord -  rencontre de cougar  rencontre jura dole -  comparatif site rencontre badoo  tinder rencontre -  rencontre gay 49  site de rencontre adopte un mec -  site de rencontre femme enceinte celibataire  rencontres campagne -  site de rencontre ado gratuit non payant  site de rencontre seniors haut de gamme -  comment rencontrer a 40 ans  site de rencontres catholique -  rencontre voissa  reseau rencontre -  site de rencontre pour les celibataires exigeant  rencontre amicale rambouillet -  rencontre contacte  rencontre isere ado -  rencontres pont audemer  rencontre 02 laon -  rencontre fille ronde  site de rencontre je contacte avis -  site de rencontre ado pau  36eme rencontre lyon -  site de rencontre pour senior gratuit  rencontre trav et trans -  site de rencontre gratuit 26000  hug rencontre -  applications rencontres gratuites  site rencontre pyrenees orientales -  site de rencontre seniors rhone alpes  site de rencontre pour celibataire -  site de rencontre sans enregistrement  badoo rencontre thouars -  rencontre femme paca  rencontre homme landes -  rencontre ado 13-15 ans  site de rencontre ulla -  site de rencontre coconut  rencontre sexe nantes -  site de rencontre gratuits non payants  petite annonces rencontre -   site de rencontre j'adopte un homme -  rencontre ado 06  comment rencontrer une fille quand on est lesbienne -  avis site rencontre femme russe  rencontre badoo annonay -

quel prix pour taille de haie
10/12/2017 3:19:31 PM #

tarif maison ossature bois contemporaine  produit renovation parquet stratifie -  hotte escamotable plan de travail sirius prix  installation electrique d'une maison normes -  devis construction immeuble locatif  camion forage puits prix -   quel prix pour taille de haie -  poele a granule palazzetti aida  renovation faience salle de bain -  tarif moteur volet roulant eveno  tarif porte automatique coulissante -  renovation maison de maitre avant apres  plaque renovation salle de bain -  isolation exterieure ou interieure prix  dalle terrasse sur plot prix -  devis carrelage 30m2  prix volet roulant piscine 12x6 -  prix conduit poele a granule  prix parquet flottant salle de bain -  devis couvreur zingueur  couverture piscine tendue 4 saisons prix -  prix garde corps pvc  devis pour bibliotheque -  tarif portail coulissant 6m  devis travaux paris -  prix poele a granule castorama  prix fosse toutes eaux 3000 litres -  renovation appartement lyon forum  devis curage canalisation -  veranda piscine interieure prix  prix veranda akena dune -  prix peinture carrelage mural salle de bain  prix pose cloture grillage simple torsion -  prix grillage a poule leroy merlin  relooker sa cuisine ikea -  prix volets battants pvc couleur  dalle gravillonnee meilleur prix -  prix pose carrelage terrasse exterieur  tarif baie coulissante pvc -  lit escamotable prix discount  porte placard sur mesure tarif -  prix poele a granule rika domo  prix poele granule mcz toba -  terrasse bois prix discount  prix taille haie electrique metabo -  agrandissement ossature bois en kit prix  charpente metallique industrielle prix -  devis en ligne porte d'entree pvc  prix maison moderne bois -  prix faux plafond suspendu en dalles isolantes  veranda bois prix -

se rencontrer
10/12/2017 5:18:21 PM #

site de rencontre sans photo gratuit  sites de rencontres totalement gratuit -  site de rencontre ado 06  site de rencontre pour ado lesbienne -  sit rencontre sans inscription  rencontre hazebrouck -  rencontre sexe le havre  gayvox rencontre -  rencontrer l amour a 30 ans  je contacte rencontre militaire -  application pour  se rencontrer -  des amies  rencontre sur lille -  comment rencontrer un homme asiatique  site rencontre simple et gratuit -  cougare rencontre  rencontre naturiste -  rencontre 06  beau texte pour rencontre -  site rencontre moins de 30 ans  site de rencontre pour 18 20 ans -  rencontre sur paris  rencontre meaux -  site de rencontre gratuit 2017  rencontre 08190 -  telephone rencontre  site de rencontre en ligne canada -  rencontre sur annecy  rencontre naturiste -  elite dating site de rencontre  site de rencontre gratuit portugais -  site de rencontre sans inscrition  site de rencontre gratuit 38 homme -  rencontrer des gens qui aiment voyager  rencontres campagne -  rencontre harley davidson 2017  rencontre geek lille -  rencontre dole  annonce de rencontre gratuite -  site de rencontre transgenre  rencontre sexe bourgogne -  rediger profil site rencontre  site rencontre routier -  rencontre homme pour homme  site de rencontre japonais gratuit -  islam rencontre gratuit  rencontre gay sur grenoble -  rencontre sainte genevieve des bois  savoir quand je vais rencontrer l'amour -  rencontre albi  site de rencontre payant au canada -

prix mur en pierre maconne
10/12/2017 6:46:21 PM #

prix moyen amenagement salle de bain  toiture vegetalisee extensive prix m2 -  tarif faux plafond dalle au m2  prix installation tapis escalier -  cout renovation salle de bain 4m2  renovation credence cuisine -  tarif fosse septique 4000 l  prix renovation terrasse bois -  renovation appartement haussmannien lyon  abri piscine haut telescopique prix -  devis portail coulissant pvc  renovation grange style loft -  devis abris de jardin  kit renovation escalier leroy merlin -  comparatif prix fosse septique 3000l  renover salle de bain carrelage -  prix remblais terrain  cuisine navarre but prix -  tarif pose faux plafond suspendu  devis pave -   prix mur en pierre maconne -  porte en verre trempe  devis papier peint gratuit -  tarif installation clim reversible  prix mini station d'epuration collective -  prix porte blindee picard diamant 2  kit renovation escalier leroy merlin -  prix porte coulissante en verre depoli  devis diagnostic immobilier obligatoire vente -  assainissement non collectif micro station prix  devis installation panneaux solaires photovoltaiques -  renovation maison avant apres prix  prix maconnerie mur parpaing -  renover un escalier bois  lit rabattable ikea prix -  prix construction maison plain pied 110m2  prix m2 renovation salle de bain -  prix garde corps interieur  devis papier peint -  nettoyage toiture tuile canal  tarif renovation toiture m2 -  devis cuisine equipee en ligne  clim reversible daikin prix -  installation panneaux photovoltaiques au sol  prix poele a pellet mcz flair -  prix plafond suspendu ba13  devis carrelage m2 -  prix installation poele a granule ventouse  prix pose gouttiere havraise -  prix escalier exterieur en pierre  chauffe eau gaz instantane saunier duval prix -

Great delivery. Outstanding arguments. Keep up the amazing spirit.

site de rencontre lyon
10/12/2017 9:16:24 PM #

rencontre ado gratuit  rencontre orne l'aigle -  vrai rencontre par tel  rencontre pas par hasard -  rencontre entre femme et femme  rencontre motards nantes -  rencontre femme latine  rencontre adulte rennes -  rencontre femmes  les rencontres du mont blanc -  rencontre gratuite sans rien payer  sites de rencontres gratuits pour femmes -  site gratuit de rencontre femme russe  premier sms site de rencontre -  rencontre 2a  femme russe rencontre gratuite -  annonce gay rencontre  contact rencontres -  agence de rencontre haut de gamme bruxelles  rencontre sexe haute savoie -  rencontre haute pyrenees  rencontre celibataire toulouse -  metic rencontre  chat gratuit rencontre amour -  prix site de rencontre femme  message pour rencontre femme -  vrai site de rencontre gratuit  rencontres gratuites je contacte -  top 3 site de rencontre gratuit  premiere rencontre apres meetic -  site de rencontre femme divorcee  rencontre colombienne -  forum rencontre amicale  femme gothique rencontre -  app de rencontre usa  rencontre femme vosges -  rencontre gratuits  rencontre anonyme sans inscription -  rencontre ado sexy  cite des rencontre gratuit -   site de rencontre lyon -  de rencontre homme gratuit  arnaque sur les sites de rencontre -  top de site de rencontre gratuit  site de rencontre totalement gratuit et fiable -  rencontre femme sourds  quel activite pour rencontrer des gens -  insha allah site de rencontre  site de rencontre perpignan -  skout rencontre  rencontres gratuites -

renovation maison var
10/13/2017 2:39:28 AM #

prix ravalement facade phenix  renover une cuisine a moindre cout -  prix bac acier isole 100mm  prix ravalement facade maison 120m2 -  devis renovation electricite appartement  prix fondation pour portail -  piece montee pierre herme prix  marbre poisson prix -  devis artisan renovation cuisine  prix poele a bois hase valencia -  prix m2 extension toit plat  abri piscine haut telescopique prix -  tarif pose pave autobloquant  salle de bain renovation 4m2 cout -  renover une cuisine en bois vernis  prix pour repeindre volet bois -  devis renovation appartement 30m2  toit terrasse prix au m2 -  devis climatisation reversible ligne  prix moyen pose salle de bain -  fosse septique toutes eaux 3000l prix  renovation maison en pierre prix -  chauffage au propane prix  prix volet roulant electrique -  blog  renovation maison var -  appartement haussmannien  renovation appartement nice prix -  renovation grange aveyron  prix elagage haie -  prix maison ossature bois cle en main haute savoie  devis baie coulissante pvc -  cloture pvc brico depot prix  radiateur a gaz condor prix -  porte d'entree pvc blanc prix  dressing angle ikea prix -  pose parquet flottant prix leroy merlin  renovation electrique appartement consuel -  bac acier isole prix m2  tarif agrandissement maison phenix -  renovation sol maison ancienne  lame terrasse bois prix discount -  cout carrelage mural salle de bain  toiture bac acier prix au m2 -  toiture vegetale soprema prix  lame terrasse bois prix discount -  prix escalier exterieur inox  prix ravalement facade brique -  porte d'entree design prix  devis volet bois en ligne -  devis remplacement gouttieres  prix veranda rideau icone th -

prix maison plain pied ossature bois
10/13/2017 4:05:04 AM #

prix vmc hygro b atlantic  prix pose grillage soude -  couverture piscine terrasse prix  chauffe-eau a gaz junkers 11l/mn prix -  maison bois roumanie prix kit  devis miroiterie -  tarif grillage simple torsion galvanise  devis cuisine ikea a domicile -  devis traitement humidite  devis pour sauna -  poele pellet edilkamin funny prix  alarme maison prix moyen -  peinture sol v33 prix  devis travaux verriere -  prix porte d'entree bois  installation poele a pellet mcz hydro -  devis gratuit travaux  prix abri piscine haut mural -  cheminee design prix  prix m2 cloison amovible bureau -  terrasse en bois sur pilotis en kit prix  devis pour pose papier peint -  poele a pellet mcz musa prix  devis pose escalier lapeyre -  baie vitree coulissante bois prix  prix moteur volet battant solaire -  raccordement erdf maison individuelle prix  desamiantage prix -  prix marbre blanc concasse  devis fondation mur cloture -  maison ossature bois kit prix  garde corps terrasse prix discount -  cout agrandissement maison phenix  devis amenagement paysager -   prix maison plain pied ossature bois -  escalier bois metal quart tournant  motorisation volet battant voltec prix -  cout extension maison bois 30m2  ouverture mur porteur pierre prix -  renove cuisine  devis en ligne spa -  tarif pose salle de bain leroy merlin  renover parquet ancien pin -  pompe doseuse dosatron tarif  maison ossature bois ecologique prix -  prix poele a bois suspendu design  devis isolation murs exterieurs -  cheminee poele a bois prix  prix porte coupe feu 2h -  renover sa cuisine en formica  prix refection toiture zinc -

garden decorative ant
10/13/2017 6:26:28 AM #

I was looking for a new simple decoration that will fit my budget and at the same time will look good, interior and outdoor, in the garden. I eventually found a Mexican hand made ant, YES an ant ;) Made out of stone, wires and glazed to suit any weather.

long distance movers long beach
10/13/2017 12:40:13 PM #

I read this piece of writing fully on the topic of the resemblance of most recent and previous technologies, it's amazing article.

Grafica em osasco
10/14/2017 8:45:35 PM #

Seu panfleto irá aparecer no Microsoft Word.

10/16/2017 2:33:40 PM #

Hi my loved one! I want to say that this post is amazing, nice written and include almost all vital infos. I'd like to see extra posts like this .

slim couture diet
10/16/2017 3:00:40 PM #

std testing erie pa
10/16/2017 3:09:18 PM #

Testing for HIV and syphilis wants a blood sample.

In reality, common testing is very beneficial.

curling hair
10/17/2017 2:27:44 AM #

Great items from you, man. I've be aware your stuff prior to and you are just too wonderful. I actually like what you've got here, really like what you're stating and the way in which you assert it. You make it entertaining and you still care for to keep it sensible. I can not wait to read far more from you. That is actually a terrific site.

Try one that tastes like pumpkin pie.

10/18/2017 4:54:29 PM #

Nice post. I learn something new and challenging on blogs I stumbleupon every day. It's always interesting to read through content from other authors and practice a little something from their websites.
10/19/2017 1:51:47 AM #

Hey! I just wanted to ask if you ever have any problems with hackers? My last blog (wordpress) was hacked and I ended up losing months of hard work due to no data backup. Do you have any solutions to prevent hackers?  my web-site :: -

learn to meditate
10/21/2017 2:35:07 AM #

1) Mindfulness of the physique (beginning with breath).

Add comment