/// <summary>
		/// initialise une cellule de la grille
		/// </summary>
		/// <param name="gridPresentation"></param>
		/// <param name="cellPresentation"></param>
		/// <param name="orientation"></param>
		/// <param name="grid"></param>
		/// <param name="canResizeCell"></param>
		private void SetGridCell(XHtmlPresentation gridPresentation, XHtmlPresentation cellPresentation, byte orientation, Grid grid, byte canResizeCell, bool lastCell)
		{
			XHtmlCelluleGrille cellule;
			cellule = new XHtmlCelluleGrille();
			cellule.AvecResize = canResizeCell;
			cellule.DerniereCellule = lastCell;
			cellule.Presentation = cellPresentation;
			grid.Cellules.Add(cellule);


			//ScrollViewer sv = new ScrollViewer
			//{
			//	Tag = cellPresentation,
			//	Content = new Grid(),
			//	VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
			//	HorizontalScrollBarVisibility = ScrollBarVisibility.Auto
			//};
			//sv.SizeChanged += (s, e) => { sv.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; sv.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; };

			//grid.Children.Add(sv);

			//if (orientation == 1)	// grille verticale
			//{
			//	var heightRatio = cellPresentation.OriginalHeight * 100 / gridPresentation.OriginalHeight;
			//	grid.RowDefinitions.Add(new RowDefinition { Height = (GridLength)new GridLengthConverter().ConvertFromString(heightRatio + "*"), MinHeight = 20 });
			//	if (canResizeCell == 1 && !lastCell)
			//	{
			//		GridSplitter splitter = new GridSplitter
			//		{
			//			Height = 3,
			//			HorizontalAlignment = HorizontalAlignment.Stretch,
			//			VerticalAlignment = VerticalAlignment.Bottom,
			//			Background = Brushes.Transparent,
			//			Focusable = false
			//		};
			//		splitter.PreviewMouseDown += (s, e) => { if (((App)Application.Current).Appli.AttenteInput) e.Handled = true; };	// on bloque les rebarres en input pour le pas perdre le focus
			//		splitter.DragCompleted += GridSplitter_DragCompleted; // pour la sauvegarde de la taille des cellules de la grille dans le registre sur le mouseUp
			//		SetRow(splitter, grid.RowDefinitions.Count - 1);
			//		SetZIndex(splitter, 5);
			//		grid.Children.Add(splitter);
			//	}
			//	SetRow(sv, grid.RowDefinitions.Count - 1);
			//}
			//else	// grille horizontale
			//{
			//	var widthRatio = cellPresentation.OriginalWidth * 100 / gridPresentation.OriginalWidth;
			//	grid.ColumnDefinitions.Add(new ColumnDefinition { Width = (GridLength)new GridLengthConverter().ConvertFromString(widthRatio + "*"), MinWidth = 20 });
			//	if (canResizeCell == 1 && !lastCell)
			//	{
			//		GridSplitter splitter = new GridSplitter
			//		{
			//			Width = 3,
			//			HorizontalAlignment = HorizontalAlignment.Right,
			//			VerticalAlignment = VerticalAlignment.Stretch,
			//			Background = Brushes.Transparent,
			//			Focusable = false
			//		};
			//		splitter.PreviewMouseDown += (s, e) => { if (((App)Application.Current).Appli.AttenteInput) e.Handled = true; };	// on bloque les rebarres en input pour le pas perdre le focus
			//		splitter.DragCompleted += GridSplitter_DragCompleted; // pour la sauvegarde de la taille des cellules de la grille dans le registre sur le mouseUp
			//		SetColumn(splitter, grid.ColumnDefinitions.Count - 1);
			//		SetZIndex(splitter, 5);
			//		grid.Children.Add(splitter);
			//	}
			//	SetColumn(sv, grid.ColumnDefinitions.Count - 1);
			//}
		}
		/// <summary>
		/// initialise la grille
		/// </summary>
		/// <param name="buffer"></param>
		private void SetGrid(DVBuffer buffer)
		{
			ProprietesWpf property;
			XHtmlPresentation gridPresentation = new XHtmlPresentation();
			bool newGrid = false;
			uint gridId;
			ushort cellsCount;
			byte orientation;

			buffer.Get(out gridId);					// Ident Unique de la grille (uint)
			buffer.Get(out cellsCount);			// Nb de cellules (ushort)
			buffer.Get(out orientation);			// Sens (byte : 1 = Vertical, 2 = Horizontal)

			buffer.Get(out property);				// PRESENTATION_DEBUT
			gridPresentation.ReadProperties(buffer);

			Grid grid=null; 

			//grid = GetGrid(gridId); BHGRILLE
			// BH c'est inutle si je ne garde pas les grilles coté serveur

			if (grid == null)	// les pages et leur contenu peuvent être perdues côté XrtDiva => pour ne pas recréer systématiquement ici, on teste
			{
				grid = new Grid (this)
				{
					Id = gridId,
					Tag = gridPresentation,
					Orientation = orientation
				};

				//// pour résoudre le pb de rebarres qui étaient bloquées par la taille min des cellules (idem pour les pages panel ci-dessous)
				//grid.Loaded += (s, e) =>
				//{
				//	var sv = TreeHelper.FindAncestor<ScrollViewer>(grid);
				//	if (sv.Name != "ScrollViewer") // pour exclure le scrollviewer de la fenêtre (sinon comportement non désiré)
				//	{
				//		grid.SetBinding(MaxHeightProperty, new Binding("ActualHeight") { Source = sv });
				//		grid.SetBinding(MaxWidthProperty, new Binding("ActualWidth") { Source = sv });
				//	}
				//};

				//	Grid parent = GetGrid(gridPresentation.GridId);

				//	if (parent != null)	// on ajoute dans la grille trouvée
				//	{
				//		// placement dans la cellule de la grille parent le cas échéant (en ligne ou colonne)
				//		ScrollViewer sv = null;
				//		// grille verticale
				//		if (parent.RowDefinitions.Count > 0 && gridPresentation.CellIndex < parent.RowDefinitions.Count)
				//			sv = parent.Children.OfType<ScrollViewer>().FirstOrDefault(s => GetRow(s) == gridPresentation.CellIndex);
				//		// grille horizontale
				//		else if (parent.ColumnDefinitions.Count > 0 && gridPresentation.CellIndex < parent.ColumnDefinitions.Count)
				//			sv = parent.Children.OfType<ScrollViewer>().FirstOrDefault(s => GetColumn(s) == gridPresentation.CellIndex);

				//		var children = ((Grid)sv.Content).Children;
				//		if (children.Count > 0 && children[0] is XHtmlPage) children.Clear();	// garde-fou
				//		children.Add(grid);
				//	}
				//	else
				//	{
				//		// on doit recalculer les marges pour le cas des onglets (uniquement lorsque la grille est enfant d'une page)
				//		grid.Margin = new Thickness(
				//			gridPresentation.OriginalLeft,
				//			gridPresentation.OriginalTop,
				//			Presentation.OriginalWidth - gridPresentation.OriginalLeft - gridPresentation.OriginalWidth,
				//			Presentation.OriginalHeight - gridPresentation.OriginalTop - gridPresentation.OriginalHeight
				//		);
				//		Children.Add(grid);	// sinon on ajoute dans la page en cours
				//	}
				//	listOfGrids.Add(grid);
				//	newGrid = true;
				//}

				// je saute tout le passage au dessus. je traite ca de l'autre coté.
				newGrid = true;
				listOfGrids.Add(grid);
				Children.Add(grid);

			}

			// ajout des cellules
			for (int i = 0; i < cellsCount; i++)
			{
				XHtmlPresentation cellPresentation = new XHtmlPresentation();
				byte canResizeCell;

				buffer.Get(out property);				// GRILLE_CELLULE_DEBUT
				buffer.Get(out canResizeCell);		// Redimensionnable (byte : 0 ou 1)
				buffer.Get(out property);				// PRESENTATION_DEBUT
				cellPresentation.ReadProperties(buffer);
				buffer.Get(out property);				// GRILLE_CELLULE_FIN

				if (newGrid)
					SetGridCell(gridPresentation, cellPresentation, orientation, grid, canResizeCell, i == cellsCount - 1);
			}

			grid.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());


			buffer.Get(out property);				// GRILLE_FIN

			#region restauration des paramètres utilisateur stockés dans le registre
			//if (newGrid && !(bool)Application.Current.Properties["IgnoreUserSettings"])
			//{
			//	RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\Divalto\V7\Grilles\" + Window.MaskName + "-" + NumPage + "-" + gridId);
			//	if (key == null) return;

			//	// si l'orienation de la grille ne correspond pas à ce qui est stocké dans le registre : on r.à.z.
			//	var gridOrientation = key.GetValue("GridOrientation") as string;
			//	if (gridOrientation != null && gridOrientation != orientation.ToString(CultureInfo.InvariantCulture))
			//	{
			//		key.DeleteValue("GridOrientation");
			//		return;
			//	}

			//	// si la taille de la grille ne correspond pas à ce qui est stocké dans le registre : on r.à.z.
			//	var gridSize = key.GetValue("GridSize") as string;
			//	if (gridSize != null && gridSize != ((orientation == 1) ? gridPresentation.OriginalHeight : gridPresentation.OriginalWidth).ToString(CultureInfo.InvariantCulture))
			//	{
			//		key.DeleteValue("GridSize");
			//		return;
			//	}

			//	// récupération des données en elles-mêmes si tout est ok
			//	var gridCellSizes = key.GetValue("GridCellSizes") as string;
			//	if (gridCellSizes != null)
			//	{
			//		// si le nombre de cellules ne correspond pas à ce qui est stocké dans le registre : on r.à.z.
			//		string[] storedGridCellSizes = gridCellSizes.Split(';');
			//		if (storedGridCellSizes.Length != cellsCount)
			//		{
			//			key.DeleteValue("GridCellSizes");
			//			return;
			//		}

			//		if (orientation == 1) // grille verticale
			//		{
			//			for (int i = 0; i < storedGridCellSizes.Length; i++)
			//			{
			//				try { grid.RowDefinitions[i].Height = (GridLength)new GridLengthConverter().ConvertFromString(storedGridCellSizes[i]); }
			//				catch (FormatException)
			//				{
			//					key.DeleteValue("GridCellSizes");
			//					return;
			//				}
			//			}
			//		}
			//		else // grille horizontale
			//		{
			//			for (int i = 0; i < storedGridCellSizes.Length; i++)
			//			{
			//				try { grid.ColumnDefinitions[i].Width = (GridLength)new GridLengthConverter().ConvertFromString(storedGridCellSizes[i]); }
			//				catch (FormatException)
			//				{
			//					key.DeleteValue("GridCellSizes");
			//					return;
			//				}
			//			}
			//		}
			//	}

			//}
			#endregion restauration des paramètres utilisateur stockés dans le registre

		}