private void m_btnSelectChampDynamique_Click(object sender, EventArgs e) { CInfoStructureDynamique infoStructure = CInfoStructureDynamique.GetStructure(m_typeObjetEdite, 1); CInfoChampDynamique champSel = CFormSelectChampParentPourStructure.SelectPropriete(infoStructure); if (champSel != null) { m_colonneAffichee.InfoChampDynamique = champSel; m_labelChamp.Text = champSel == null ? "" : champSel.NomChamp; } /*Rectangle rect = m_panelComboChamp.RectangleToScreen(new Rectangle(0, m_panelComboChamp.Height, m_panelComboChamp.Width, 230)); * bool bCancel = false; * CDefinitionProprieteDynamique champ = CFormSelectChampPopup.SelectDefinitionChamp( * rect, * m_typeObjetEdite, * new CFournisseurProprietesForFiltreDynamique(), * ref bCancel, * null, * null); * if (!bCancel) * { * m_colonneAffichee.InfoChampDynamique = champ; * m_labelChamp.Text = champ == null ? "[NOT DEFINED]" : champ.Nom; * }*/ }
//----------------------------------------------------------------------- public static CInfoChampDynamique[] SelectProprietes(CInfoStructureDynamique structure, string[] listeSelectionnes, ref CInfoChampDynamique[] lstDecoches) { CFormSelectChampParentPourStructure form = new CFormSelectChampParentPourStructure(); form.m_tableSelectionnes.Clear(); foreach (string strCol in listeSelectionnes) { form.m_tableSelectionnes[strCol] = true; } form.m_structurePrincipale = structure; form.m_lblTable.Text = form.m_structurePrincipale.NomConvivial; form.FillTree(structure, form.m_arbre.Nodes, null); form.m_arbre.CheckBoxes = true; form.m_bMonoSelection = false; if (form.ShowDialog() == DialogResult.OK) { ArrayList lst = new ArrayList(); form.GetSelectedFields(lst, form.m_arbre.Nodes, null); lstDecoches = (CInfoChampDynamique[])form.m_listeDecoches.ToArray(typeof(CInfoChampDynamique)); //Lst contient la liste de ce qui a été coché en plus. Il faut ajouter à ça la //Liste de ce qui n'a pas été décoché return(( CInfoChampDynamique[] )lst.ToArray(typeof(CInfoChampDynamique))); } return(new CInfoChampDynamique[0]); }
//------------------------------------------------------------------- private void FillMenu(Menu menu, CInfoStructureDynamique structure, Hashtable tableColonnes, string strRacine) { Hashtable tableRubriqueToMenu = new Hashtable(); //Niveau 0 foreach (CInfoChampDynamique champ in structure.Champs) { if (champ.StructureValeur == null) { Menu itemParent = menu; if (champ.Rubrique != "") { itemParent = (MenuItem)tableRubriqueToMenu[champ.Rubrique]; if (itemParent == null) { itemParent = new MenuItem(champ.Rubrique); menu.MenuItems.Add((MenuItem)itemParent); tableRubriqueToMenu[champ.Rubrique] = itemParent; } } MenuItem menuItem = new MenuItem(champ.NomChamp, new EventHandler(MenuItemClick)); menuItem.Tag = new CInfoChampMenu(champ.NomChamp, strRacine + champ.NomPropriete, champ.TypeDonnee); if (tableColonnes[strRacine + champ.NomPropriete] != null) { menuItem.Checked = true; } else { menuItem.Checked = false; } itemParent.MenuItems.Add(menuItem); } } /*//Niveaux suivants * foreach ( CInfoChampDynamique champ in structure.Champs ) * { * if ( champ.StructureValeur != null ) * { * Menu itemParent = menu; * if ( champ.Rubrique != "" ) * { * itemParent = (MenuItem)tableRubriqueToMenu[champ.Rubrique]; * if ( itemParent == null ) * { * itemParent = new MenuItem ( champ.Rubrique ); * menu.MenuItems.Add ( (MenuItem)itemParent ); * tableRubriqueToMenu[champ.Rubrique] = itemParent; * } * } * MenuItem sousMenu = new MenuItem(champ.NomChamp +">>"); * sousMenu.Tag = new CInfoSousStruct ( champ.StructureValeur, tableColonnes, strRacine+champ.NomPropriete+"." ); * //FillMenu ( sousMenu, champ.StructureValeur, tableColonnes, strRacine+champ.NomPropriete+"."); * itemParent.MenuItems.Add ( sousMenu ); * sousMenu.Enabled = true; * sousMenu.Click += new EventHandler(sousMenu_Popup); * } * }*/ }
//----------------------------------------------------------------------- private void FillTree(CInfoStructureDynamique structure, TreeNodeCollection nodes, CInfoChampDynamique defParente) { ArrayList lst = new ArrayList( ); lst.AddRange(structure.Champs); lst.Sort(new DefSorter()); //Trouve les catégories Hashtable tableCategories = new Hashtable(); foreach (CInfoChampDynamique info in lst) { if (info.Rubrique != "" && ShouldHadChamp(info)) { if (tableCategories[info.Rubrique] == null) { TreeNode node = new TreeNode(info.Rubrique); node.ImageIndex = 0; node.SelectedImageIndex = 0; nodes.Add(node); tableCategories[info.Rubrique] = node; } } } foreach (CInfoChampDynamique info in lst) { if (ShouldHadChamp(info)) { TreeNode node = new TreeNode(info.NomChamp); node.ImageIndex = info.StructureValeur != null?1:2; node.SelectedImageIndex = node.ImageIndex; TreeNodeCollection nodesParents = nodes; if (info.Rubrique != "") { TreeNode nodeParent = (TreeNode)tableCategories[info.Rubrique]; if (nodeParent != null) { nodesParents = nodeParent.Nodes; } } node.Tag = info; nodesParents.Add(node); if (info.StructureValeur != null && ShouldHasFils(info)) { node.Nodes.Add("*"); } CInfoChampDynamique newInfo = info.Clone(); if (defParente != null) { newInfo.InsereParent(defParente); } if (m_tableSelectionnes[newInfo.NomPropriete] != null) { node.Checked = true; } } } }
//------------------------------------------------------------------------- private void FillListeChamps(CRestrictionUtilisateurSurType restriction) { m_wndListeChamps.BeginUpdate(); m_wndListeChamps.Items.Clear(); CInfoStructureDynamique info = CInfoStructureDynamique.GetStructure(restriction.TypeAssocie, 0); List <ListViewItem> lstItems = new List <ListViewItem>(); foreach (CInfoChampDynamique champ in info.Champs) { string strTmp = ""; CDefinitionProprieteDynamique def = CConvertisseurInfoStructureDynamiqueToDefinitionChamp.GetDefinitionProprieteDynamique(champ.NomPropriete, ref strTmp); //Uniquement les propriétés "classiques" //voir CTimosApp.GetStructure if (def != null && typeof(CDefinitionProprieteDynamiqueDotNet).IsAssignableFrom(def.GetType())) { ListViewItem item = new ListViewItem(); item.Text = champ.NomChamp; item.Tag = def.NomProprieteSansCleTypeChamp; item.ImageIndex = GetIndexImage(restriction.GetRestriction(def.NomProprieteSansCleTypeChamp)); lstItems.Add(item); } } lstItems.Sort((x, y) => x.Text.CompareTo(y.Text)); if (typeof(IElementAChamps).IsAssignableFrom(restriction.TypeAssocie)) { CRoleChampCustom role = CRoleChampCustom.GetRoleForType(restriction.TypeAssocie); if (role != null) { CListeObjetsDonnees listeChampsCustom = CChampCustom.GetListeChampsForRole(CContexteDonneeSysteme.GetInstance(), role.CodeRole); foreach (CChampCustom champ in listeChampsCustom) { ListViewItem item = new ListViewItem(); item.Text = champ.Nom; item.Tag = champ.CleRestriction; item.ImageIndex = GetIndexImage(restriction.GetRestriction(champ.CleRestriction)); lstItems.Add(item); } lstItems.Sort((x, y) => x.Text.CompareTo(y.Text)); CListeObjetsDonnees listeFormulaires = new CListeObjetsDonnees(CContexteDonneeSysteme.GetInstance(), typeof(CFormulaire)); listeFormulaires.Filtre = CFormulaire.GetFiltreFormulairesForRole(role.CodeRole); foreach (CFormulaire formulaire in listeFormulaires) { ListViewItem item = new ListViewItem(); item.Text = "{" + formulaire.Libelle + "}"; item.Tag = formulaire.CleRestriction; item.ImageIndex = GetIndexImage(restriction.GetRestriction(formulaire.CleRestriction)); lstItems.Add(item); } } } m_wndListeChamps.Items.AddRange(lstItems.ToArray()); m_wndListeChamps.EndUpdate(); }
/// <summary> /// Surchages de CInfoStructureDynamique /// </summary> /// <param name="tp"></param> /// <param name="nDepth"></param> /// <returns></returns> //----------------------------------------------------------------- public static CInfoStructureDynamique GetStructure(Type tp, int nDepth) { if (nDepth < 0) { return(null); } CFournisseurPropDynStd fournisseur = new CFournisseurPropDynStd(false); ArrayList lst = new ArrayList(); foreach (CDefinitionProprieteDynamique def in fournisseur.GetDefinitionsChamps(tp, 0, null)) { if (!def.TypeDonnee.IsArrayOfTypeNatif) { CInfoChampDynamique info = null; CInfoStructureDynamique infoFils = GetStructure(def.TypeDonnee.TypeDotNetNatif, nDepth - 1); if (infoFils != null && infoFils.Champs.Count == 0) { infoFils = null; } //Champs simples, interpretés par CInterpreteurTextePropriete if (def.GetType() == typeof(CDefinitionProprieteDynamique)) { info = new CInfoChampDynamique( def.Nom, def.TypeDonnee.TypeDotNetNatif, def.NomPropriete, def.Rubrique, infoFils); } else { CStringSerializer serializer = new CStringSerializer(ModeSerialisation.Ecriture); I2iSerializable obj = (I2iSerializable)def; serializer.TraiteObject(ref obj); info = new CInfoChampDynamique( def.Nom, def.TypeDonnee.TypeDotNetNatif, "~#" + serializer.String + "~@#@", def.Rubrique, infoFils); } lst.Add(info); } } CInfoStructureDynamique infoStructure = new CInfoStructureDynamique(); infoStructure.NomConvivial = DynamicClassAttribute.GetNomConvivial(tp); infoStructure.Champs = lst; return(infoStructure); }
//------------------------------------------------------------------- private void FillColonne(ListViewAutoFilledColumn col) { int nNum = col.Index; foreach (ListViewItem item in Items) { while (item.SubItems.Count <= nNum) { item.SubItems.Add(""); } //string strText = CInterpreteurTextePropriete.GetStringValue(item.Tag, col.Field, "" ).ToString(); string strText = CInfoStructureDynamique.GetDonneeDynamiqueString(item.Tag, col.Field, ""); strText = strText.Replace("\r", " ,"); strText = strText.Replace("\n", " "); item.SubItems[nNum].Text = strText; } }
//----------------------------------------------------------------------- public static CInfoChampDynamique SelectPropriete(CInfoStructureDynamique structure) { CFormSelectChampParentPourStructure form = new CFormSelectChampParentPourStructure(); form.m_tableSelectionnes.Clear(); form.m_structurePrincipale = structure; form.m_lblTable.Text = form.m_structurePrincipale.NomConvivial; form.FillTree(structure, form.m_arbre.Nodes, null); form.m_arbre.CheckBoxes = false; form.m_bMonoSelection = true; CInfoChampDynamique infoSel = null; if (form.ShowDialog() == DialogResult.OK) { infoSel = form.m_champSel; } form.Dispose(); return(infoSel); }
//----------------------------------------------------------------------- private void m_arbre_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e) { if (e.Node.Nodes.Count == 1 && e.Node.Nodes[0].Text == "*") { CInfoChampDynamique def = (CInfoChampDynamique)e.Node.Tag; if (def == null) { return; } e.Node.Nodes.Clear(); CInfoChampDynamique infoParente = null; if (e.Node.Tag is CInfoChampDynamique) { infoParente = (CInfoChampDynamique)e.Node.Tag; } CInfoStructureDynamique newStruct = CInfoStructureDynamique.GetStructure(def.TypeDonnee, 1); FillTree(newStruct, e.Node.Nodes, infoParente); } }
//------------------------------------------------------------------- private void ContexMenuPopUp(object sender, EventArgs e) { if (!m_bEnableCustomisationUser) { return; } if (m_structureObjets == null && Items.Count > 0) { m_structureObjets = CInfoStructureDynamique.GetStructure(Items[0].Tag.GetType(), 1); } if (m_structureObjets == null) { return; } //Crée une Hashtable des colonnes affichées Hashtable tableColonnes = new Hashtable(); foreach (ListViewAutoFilledColumn col in Colonnes) { tableColonnes[col.Field] = col; } bool bNouveauMenu = ContextMenu.MenuItems.Count == 0; if (bNouveauMenu) { FillMenu(ContextMenu, m_structureObjets, tableColonnes, ""); MenuItem item = new MenuItem("Plus de champs", new EventHandler(OnSelectionnerLesChamps)); ContextMenu.MenuItems.Add(item); } UpdateCheckState(ContextMenu, tableColonnes); Point pt = Cursor.Position; if (e is MouseEventArgs) { pt = new Point(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y); } //m_popupMenu.Show ( this, pt ); }
//------------------------------------------------------------------- public void UpdateItemWithObject(ListViewItem item, object obj) { if (item == null || obj == null) { return; } item.Tag = obj; while (item.SubItems.Count < this.Columns.Count) { item.SubItems.Add(""); } ArrayList lstColonneesToDel = new ArrayList(); for (int i = 0; i < this.Columns.Count; i++) { string strField = m_listColonnes[i].Field; if (strField != "") { try { //bool bIsChampValide = true; string strText = CInfoStructureDynamique.GetDonneeDynamiqueString(obj, strField, ""); //string strText = CInterpreteurTextePropriete.GetStringValue ( obj, strField, "", ref bIsChampValide ); strText = strText.Replace("\r", ""); strText = strText.Replace("\n", " ,"); strText = strText.Replace("\t", ""); item.SubItems[i].Text = strText; //if ( !bIsChampValide ) // lstColonneesToDel.Add ( m_listColonnes[i] ); } catch { item.SubItems[i].Text = I.T("Unknown value|10013"); } } } //foreach ( ListViewAutoFilledColumn col in lstColonneesToDel ) // RemoveColonne ( col ); }
/// ///////////////////////////////////////////////////////////// ///Implémente le tri d'une liste d'objets donnée /// <summary> /// Sort a column. public override void SortColumn(int nColumn) { if (Count < 2) // nothing to sort { return; } if (nColumn < 0 || nColumn > Columns.Count) { return; } if (!(ListeSource is CListeObjetsDonnees)) { base.SortColumn(nColumn); return; } GLColumn col = Columns[nColumn]; CListeObjetsDonnees listeDonnees = (CListeObjetsDonnees)ListeSource; string strProp = CInfoStructureDynamique.GetProprieteDotNet(col.Propriete); if (strProp.IndexOf('.') < 0) { //Trouve la propriété PropertyInfo info = listeDonnees.TypeObjets.GetProperty(strProp); if (info != null) { //y-a-t-il un attribut TableField sur la propriété object[] attribs = info.GetCustomAttributes(typeof(TableFieldPropertyAttribute), true); if (attribs.Length > 0) { if (CheckedItems.Count != 0 && CheckBoxes) { if (CFormAlerte.Afficher(I.T("Warning, the sorting will uncheck all checked elements. Continue ?|139"), EFormAlerteType.Question) == DialogResult.No) { return; } } ResetCheck(); TableFieldPropertyAttribute fieldAttr = (TableFieldPropertyAttribute)attribs[0]; string strSort = fieldAttr.NomChamp; if (strSort == m_strLastSort) { m_bSortAsc = !m_bSortAsc; } else { m_bSortAsc = true; } m_strLastSort = strSort; if (!m_bSortAsc) { strSort += " desc"; } listeDonnees.Tri = strSort; listeDonnees.Refresh(); Refresh(); base.SortIndex = nColumn; Columns[nColumn].LastSortState = m_bSortAsc ? ColumnSortState.SortedDown : ColumnSortState.SortedUp; return; } } } CFormAlerte.Afficher(I.T("Sort on this field is impossible|138"), EFormAlerteType.Exclamation); }