Example #1
0
		public void ReadProperties(DVBuffer buffer)
		{
			ProprietesWpf property;
			uint idObj;	// variable de stockage temporaire des identifiants d'objets

			buffer.Get(out property);
			while (property != ProprietesWpf.PAGE_FIN)
			{
				switch (property)
				{
					case ProprietesWpf.PRESENTATION_GRILLE_MERE:	// Ident unique de la grille (unint) + Numéro de la cellule (début à 0)
						uint gridId;
						ushort cellIndex;
						buffer.Get(out gridId);
						buffer.Get(out cellIndex);
						Presentation.GridId = gridId;
						Presentation.CellIndex = cellIndex;
						break;

					case ProprietesWpf.PAGE_POSITION:				// position en x (ushort) et position en y (ushort)
						PositionLue = true;
						buffer.Get(out left);
						buffer.Get(out top);
						break;

					case ProprietesWpf.PAGE_TAILLE:					// largeur (ushort) et hauteur (ushort)
						TailleLue = true;
						buffer.Get(out OriginalWidth);
						buffer.Get(out OriginalHeight);
						break;

					case ProprietesWpf.PAGE_EFFACEMENT:				// type d'effacement (byte)
						byte overlapping;
						buffer.Get(out overlapping);
						this.Effacement = overlapping;
						SetOverlapping(overlapping);
						break;

					case ProprietesWpf.PAGE_ATTACHEMENT_DROITE:	// (uniquement si attachement à droite)
						attachementDroite = true;
						break;

					case ProprietesWpf.PAGE_ATTACHEMENT_BAS:		// (uniquement si attachement en bas)
						attachementBas = true;
						break;

					case ProprietesWpf.PAGE_LARGEUR_EXTENSIBLE:	// (uniquement si largeur variable)
						largeurVariable = true;
						break;

					case ProprietesWpf.PAGE_HAUTEUR_EXTENSIBLE:	// (uniquement si hauteur variable)
						hauteurVariable = true;
						break;

					case ProprietesWpf.PAGE_ARRET_SAISIE:			// numéro de point d'arrêt "Demande de saisie" (ushort)
						buffer.Get(out StopPoint);
						break;

					case ProprietesWpf.PAGE_COULEUR_FOND:			// identifiant de couleur (ushort)
						ushort idColor;
						buffer.Get(out idColor);
						CouleurDeFond = idColor;
//!!!!!!!!!!!						Brush background = Application.Current.Resources["Brush-" + idColor] as Brush;
//!!!!!!!!!!!!!						if (background != null) Background = background;
						break;


					case ProprietesWpf.BOUTON_DEBUT:						// Bouton (Xwin :  objet bouton)
						buffer.Get(out idObj);
						//!!!!!!!!!!!!!!!!!!!!!!!!!
						XHtmlButton button = (XHtmlButton)GetObject(idObj);
						if (button == null)
						{
							button = new XHtmlButton(this) { Id = idObj };
							Children.Add(button);
							ListOfObjects.Add(button);
						}
						button.ReadProperties(buffer);

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

						break;


					case ProprietesWpf.TEXTE_DEBUT:						// Label (Xwin : objet texte)
						{
							buffer.Get(out idObj);
							XHtmlLabel label = (XHtmlLabel)GetObject(idObj);
							if (label == null)
							{
								label = new XHtmlLabel(this) { Id = idObj };
								Children.Add(label);
								ListOfObjects.Add(label);
							}
							label.ReadProperties(buffer);
							label.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());
						}
						break;

					case ProprietesWpf.GROUPBOX_DEBUT:
						{
							buffer.Get(out idObj);
							XHtmlGroupBox groupe = (XHtmlGroupBox)GetObject(idObj);
							if (groupe == null)
							{
								groupe = new XHtmlGroupBox(this) { Id = idObj };
								Children.Add(groupe);
								ListOfObjects.Add(groupe);
							}
							groupe.ReadProperties(buffer);
							groupe.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());
						}
						break;

					#region Champ
					case ProprietesWpf.CHAMP_DEBUT:						// TextBox (Xwin : objet champ)
						buffer.Get(out idObj);
						XHtmlTextBox textBox = (XHtmlTextBox)GetObject(idObj);
						if (textBox == null)
						{
							textBox = new XHtmlTextBox(this) { Id = idObj };
							Children.Add(textBox);
							ListOfObjects.Add(textBox);
						}
						textBox.ReadProperties(buffer);
						textBox.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());
						break;
					#endregion Champ

					#region Multichoix
					case ProprietesWpf.MULTICHOIX_DEBUT:				// ComboBox (Xwin : objet multichoix)
						buffer.Get(out idObj);
						XHtmlComboBox comboBox = (XHtmlComboBox)GetObject(idObj);
						if (comboBox == null)
						{
							comboBox = new XHtmlComboBox(this) { Id = idObj };
							Children.Add(comboBox);
							ListOfObjects.Add(comboBox);
						}
						comboBox.ReadProperties(buffer);
						comboBox.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());
						break;
					#endregion Multichoix

					#region Case à cocher
					case ProprietesWpf.CASE_A_COCHER_DEBUT:			// CheckBox (Xwin : objet case à cocher)
						buffer.Get(out idObj);
						XHtmlCheckBox checkBox = (XHtmlCheckBox)GetObject(idObj);
						if (checkBox == null)
						{
							checkBox = new XHtmlCheckBox(this) { Id = idObj };
							Children.Add(checkBox);
							ListOfObjects.Add(checkBox);
						}
						checkBox.ReadProperties(buffer);
						checkBox.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());
						break;
					#endregion Case à cocher

					#region Groupe d'onglets
					case ProprietesWpf.GROUPE_ONGLET_DEBUT:					
						uint idTc;
						buffer.Get(out idTc);
						XHtmlTabControl tabControl; //  = Window.ListOfTabControls.FirstOrDefault(tc => (tc.Page.NumMasque == NumMasque && tc.Id == idTc));
//						if (tabControl == null)
						{
							tabControl = new XHtmlTabControl(this) { Id = idTc };
							// Window.ListOfTabControls.Add(tabControl);
						}
						//else
						//{
						//	tabControl.Page.Children.Remove(tabControl);
						//	tabControl.Page = this;
						//}
						Children.Add(tabControl); // on ajoute les groupes d'onglets à la page elle-même et non à InternalGrid pour pouvoir justement décaler InternalGrid par rapport aux onglets
						ListOfObjects.Add(tabControl); // !!!!!!!!!!!!!! bh je l'ai ajouté mais je ne sais pas si c utile
						tabControl.ReadProperties(buffer);
						tabControl.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());
						break;
					#endregion Groupe d'onglets


					case ProprietesWpf.GRILLE_DEBUT:									// Grille(s)
						SetGrid(buffer);
						break;

					#region Page panel
					case ProprietesWpf.PAGE_DEBUT:
						{
							string idPage;
							bool nouvelle = false;

							buffer.GetString(out idPage); // Id Page (string)

							XHtmlPage page = Window.GetPage(idPage);

							if (page == null)
							{
								nouvelle = true;
								page = new XHtmlPage(Window,this.Html) { Id = idPage, ParentPage = this };
								this.Html.Envois.Ajouter("nouveauPanel", this.Html.CalculerIdPage(page.Id));
								this.Html.Envois.Ajouter("pageCourante", Html.CalculerIdPage(page.Id)) ; // , page.StopPoint.ToString(), page.NumPage.ToString());
								page.ReadProperties(buffer);
								Window.ListOfPages.Add(page);
								page.JeSuisAffichee = true;

							}
							else
							{
								nouvelle = false;
								this.Html.Envois.Ajouter("pageCourante", Html.CalculerIdPage(page.Id)); // , page.StopPoint.ToString(), page.NumPage.ToString());
								page.ReadProperties(buffer);
								//!!!!!!!!!!!!!!!!!! que faut il faire ici ?
								// rien je pense : je envoie les objets modifiés
							}

							page.EnvoyerCouleurPositionAttachement(true);
							this.Html.Envois.Ajouter("pageCourante", Html.CalculerIdPage(page.Id), page.StopPoint.ToString(), page.NumPage.ToString());




							//ajout de la page panel à la cellule de grille (elle peut avoir été supprimée : cas des onglets)
							// bh on le fait de l'autre coté
							//if (page.Parent == null) AddToGrid(page);
							string p = "{" +
								        "\"idPanel\":\"" + this.Html.CalculerIdPage(page.Id) + "\"," +
										  "\"idMere\":\"" + Html.CalculerIdPage(this.Id) + "\"," +
										  "\"idGrille\":\"" + HtmlGlobal.CalculerId(page.Presentation.GridId, this.Id, this.Html.App.StackOfWindows.Count()) + "\"," +
										  "\"iCellule\":" + page.Presentation.CellIndex +
										  "}";

							this.Html.Envois.Ajouter("ajouterPanelAGrilleSiPasDedans",p);



						}
						break;
					#endregion Page panel



					#region Tableau
					case ProprietesWpf.TABLEAU_DEBUT:					// DataGrid (Xwin : objet tableau)
						buffer.Get(out idObj);
						XHtmlDataGrid dataGrid = (XHtmlDataGrid)GetObject(idObj);
						if (dataGrid == null)
						{
							dataGrid = new XHtmlDataGrid(this) { Id = idObj };
							Children.Add(dataGrid);
							ListOfObjects.Add(dataGrid);
						}
						dataGrid.ReadProperties(buffer);
						dataGrid.AjouterEnvoisUnObjet(Html.Envois, this, Html.App.StackOfWindows.Count());
						break;
					#endregion Tableau



					case ProprietesWpf.BOUTONS_VALIDES_DEBUT:						// Boutons valides dans la page en cours
						ListOfValidButtons = new Collection<string>();
						buffer.Get(out property);
						while (property != ProprietesWpf.BOUTONS_VALIDES_FIN)
						{
							string buttonName;
							buffer.GetString(out buttonName);
							ListOfValidButtons.Add(buttonName);
							buffer.Get(out property);
						}
						break;

					default:
						throw new XHtmlException(XHtmlErrorCodes.UnknownProperty, XHtmlErrorLocations.Page, property.ToString());
				}

				buffer.Get(out property);
			}

			SetSize(); // Mise à jour de la taille
			SetPosition(); // Mise à jour de la position
		}
        /// <summary>
        /// Reads the buffer to give the input to the proper object
        /// </summary>
        /// <param name="buffer">DVBuffer where the properties are read</param>
        /// <param name="page">Page containing the object getting the input</param>
        internal void ReadInput(DVBuffer buffer, XHtmlPage page)
        {
            IXHtmlEditableObject obj;

            uint id;	// variable de stockage temporaire des identifiants d'objets

            //page.UpdateLayout();

            ProprietesWpf property;
            buffer.Get(out property);
            switch (property)
            {
                #region Bouton
                case ProprietesWpf.BOUTON_DEBUT:						// Bouton (Xwin :  objet bouton)!!!!!!!!!!!!!!!!!!!!!!!!!
                    buffer.Get(out id);
                    var button = (XHtmlButton)page.GetObject(id);

                    if (button == null)
                    {
                        button = new XHtmlButton(page) { Id = id };
                        page.Children.Add(button);
                        page.ListOfObjects.Add(button);
                    }

                    button.ReadProperties(buffer);
                    page.Window.ActiveControl = button;
            //					button.IsEnabled = true;	// impératif pour être sûr que le bouton aura bien le focus (pas évident à cause de la gestion des boutons valides non faite côté serveur)
            //					button.Focusable = true;	// garde-fou. Le Focusable est repassé à false lors du lostFocus() (pour éviter qu'un bouton ne prenne le focus sans qu'on ne l'y autorise)
            //					button.Focus();
                    button.AjouterEnvoisUnObjet(this.Html.Envois, page, StackOfWindows.Count());
                    Html.Envois.Ajouter("xmeInput", page.Id.ToString(), HtmlGlobal.CalculerId(button.Id, page.Id, StackOfWindows.Count()));

                    obj = button;
                    break;
                #endregion Bouton

                #region Case à cocher
                case ProprietesWpf.CASE_A_COCHER_DEBUT:			// CheckBox (Xwin : objet case à cocher)
                    buffer.Get(out id);
                    var checkBox = (XHtmlCheckBox)page.GetObject(id);

                    if (checkBox == null)
                    {
                        checkBox = new XHtmlCheckBox(page) { Id = id };
                        page.Children.Add(checkBox);
                        page.ListOfObjects.Add(checkBox);
                    }

                    checkBox.ReadProperties(buffer);
                    page.Window.ActiveControl = checkBox;
                    checkBox.AjouterEnvoisUnObjet(this.Html.Envois, page, StackOfWindows.Count());
                    Html.Envois.Ajouter("xmeInput", page.Id.ToString(), HtmlGlobal.CalculerId(checkBox.Id, page.Id, StackOfWindows.Count()));
            //					checkBox.Focus();
                    obj = checkBox;
                    break;
                #endregion Case à cocher

                #region Champ
                case ProprietesWpf.CHAMP_DEBUT:						// TextBox (Xwin : objet champ)
                    buffer.Get(out id);
                    var textBox = (XHtmlTextBox)page.GetObject(id);

                    if (textBox == null)
                    {
                        textBox = new XHtmlTextBox(page) { Id = id };
                        page.Children.Add(textBox);
                        page.ListOfObjects.Add(textBox);
                    }
                    textBox.ReadProperties(buffer);
                    page.Window.ActiveControl = textBox;
                    textBox.AjouterEnvoisUnObjet(this.Html.Envois, page, StackOfWindows.Count());
                    Html.Envois.Ajouter("xmeInput", page.Id.ToString(), HtmlGlobal.CalculerId(textBox.Id, page.Id, StackOfWindows.Count()));
            //					textBox.EnFocus();
                    obj = textBox;
                    break;
                #endregion Champ

                #region MultiChoix
                case ProprietesWpf.MULTICHOIX_DEBUT:				// ComboBox (Xwin : objet multichoix)
                    buffer.Get(out id);
                    var comboBox = (XHtmlComboBox)page.GetObject(id);
                    if (comboBox == null)
                    {
                        comboBox = new XHtmlComboBox(page) { Id = id };
                        page.Children.Add(comboBox);
                        page.ListOfObjects.Add(comboBox);
                    }

                    comboBox.ReadProperties(buffer);
                    page.Window.ActiveControl = comboBox;
                    comboBox.AjouterEnvoisUnObjet(this.Html.Envois, page, StackOfWindows.Count());
                    Html.Envois.Ajouter("xmeInput", page.Id.ToString(), HtmlGlobal.CalculerId(comboBox.Id, page.Id, StackOfWindows.Count()));
            //					comboBox.Focus();
                    obj = comboBox;
                    break;
                #endregion MultiChoix

                //#region Champ Caché	!!!!!!!!!!!!!!!!!!!!!!
                //case ProprietesWpf.CHAMP_CACHE_DEBUT:				// PasswordBox (Xwin : objet champ caché)
                //   buffer.Get(out id);
                //   var passwordBox = (XHtmlPasswordBox)page.GetObject(id);
                //   passwordBox.ReadProperties(buffer);
                //   page.Window.ActiveControl = passwordBox.PasswordBox;
                //   passwordBox.Focus();
                //   obj = passwordBox;
                //   break;
                //#endregion Champ Caché

                //#region Champ Date
                //case ProprietesWpf.CHAMP_DATE_DEBUT:						// TextBox (Xwin : objet champ)
                //   buffer.Get(out id);
                //   var datePicker = (XHtmlDatePicker)page.GetObject(id);
                //   datePicker.ReadProperties(buffer);
                //   page.Window.ActiveControl = datePicker;
                //   datePicker.Focus();
                //   obj = datePicker;
                //   break;
                //#endregion Champ Date

                //#region MultiChoix
                //case ProprietesWpf.MULTICHOIX_DEBUT:				// ComboBox (Xwin : objet multichoix)
                //   buffer.Get(out id);
                //   var comboBox = (XHtmlComboBox)page.GetObject(id);
                //   comboBox.ReadProperties(buffer);
                //   page.Window.ActiveControl = comboBox;
                //   comboBox.Focus();
                //   obj = comboBox;
                //   break;
                //#endregion MultiChoix

                //#region Liste
                //case ProprietesWpf.LISTECHOIX_DEBUT:				// ListBox (Xwin : objet multichoix ouvert)
                //   buffer.Get(out id);
                //   var listBox = (XHtmlListBox)page.GetObject(id);
                //   listBox.ReadProperties(buffer);
                //   page.Window.ActiveControl = listBox;
                //   listBox.Focus();
                //   obj = listBox;
                //   break;
                //#endregion Liste

                //#region Groupe Radio
                //case ProprietesWpf.GROUPE_RADIO_DEBUT:				// Radiobutton (Xwin : objet groupe radio)
                //   buffer.Get(out id);
                //   var radioGroup = (XHtmlRadioGroup)page.GetObject(id);
                //   radioGroup.ReadProperties(buffer);
                //   page.Window.ActiveControl = radioGroup;
                //   radioGroup.Focus();
                //   obj = radioGroup;
                //   break;
                //#endregion Groupe Radio

                //#region RichText
                //case ProprietesWpf.RICHTEXT_DEBUT:					// RichTextBox (Xwin : objet texte riche)
                //   buffer.Get(out id);
                //   var richText = (XHtmlRichTextBox)page.GetObject(id);
                //   richText.ReadProperties(buffer);
                //   richText.Input();
                //   page.Window.ActiveControl = richText;
                //   richText.Focus();
                //   obj = richText;
                //   break;
                //#endregion RichText

                default:
                    throw new XHtmlException(XHtmlErrorCodes.UnknownProperty, XHtmlErrorLocations.Application, property.ToString());
            }

            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  a faire !!!!!!!!!!!!!!!!!
            //StackOfWindows.Peek().UpdateLayout();			// force un recalcul des hauteurs/largeur pour être sûr que les valeurs dans le SetActiveGroup sont à jour
            //XHtmlTreeColumn.ResetCircles(StackOfWindows.Peek());
            //XHtmlGroupBox.SetActiveGroup((Control)obj);
            //ManageValidButtons(obj);
            //ManageValidMenuItems(obj);
            //ManageValidToolBarItems(obj);
            //ManageValidDataGrids(page.Id);
        }