Page 1 sur 1

ListView sans doublon, mais ListIcon avec

Publié : sam. 06/juil./2019 9:02
par Micoute
Bonjour à tous,

je viens ici pour solliciter votre aide, car j'essaie de faire un annuaire de mes praticiens, pour aller droit au but, je souhaite que les professions qui sont en doublons n'apparaissent qu'une seul fois dans ma listview de praticiens, mais s'affichent dans ma listicon quand une profession est sélectionnée, par exemple je clique sur Infirmière et ça m'en affiche 3.

Je vous remercie tous par anticipation

Code : Tout sélectionner

Enumeration Fichiers
  #FichierJSON
EndEnumeration  

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Liste_praticiens
  #ListIcon_Affichage
  #Str_Affichage
  #Txt_Annuaire
  #Txt_par
  #Txt_Date
  #Btn_Quitter
  #Cvs
EndEnumeration

Enumeration Polices
  #Police_Txt
  #Police_Lst
  #Police_Btn
EndEnumeration  


;Structure d'un praticien
Structure praticien
  Nom.s
  Prenom.s
  Profession.s
  Tel.s
  Adresse.s
  CodePostal.s
  Ville.s
EndStructure

Declare Charger_praticiens()
Declare Programme_principal()
Declare Quitter()

Global Evenement, i
Global Btn_SourisPresse, DecalageX, DecalageY, Quitter

;Création d'une liste vierge pour les praticiens
Global.praticien NewList Provis(), NewList praticiens(), NewList Annuaire()
Global Dim Profession.praticien(0), quantite
Global$ FichierJson = "D:\Programmation\Donnees\praticiens 2.json"

Programme_principal()

Procedure Quitter()
  Select EventType()
    Case #PB_EventType_LeftClick
      CloseWindow(#Fenetre_principale)
      End
  EndSelect 
EndProcedure


Macro TrierListeStruc(_NomListe_, _Options_, _Champ_Structure_)
  ; Cette macro simplifie l'utilisation de la fonction intégrée SortStructuredList().
  SortStructuredList(_NomListe_, _Options_, OffsetOf(_Champ_Structure_), TypeOf(_Champ_Structure_))
EndMacro


;Chargement des praticiens existants
Procedure Charger_praticiens()
  
  If ReadFile(#FichierJSON, FichierJson)
    CloseFile(#FichierJSON)
    
    ;Lecture du fichier JSON
    LoadJSON(#FichierJSON, FichierJson, #PB_JSON_NoCase)
    
    ;Extraction de la chaine JSON vers la liste chainée praticiens
    ExtractJSONList(JSONValue(#FichierJSON), praticiens())
    
    TrierListeStruc(praticiens(), #PB_Sort_Ascending, praticien\Profession)
    
    ;Affichage de la liste des praticiens
    ForEach praticiens()
     With praticiens() 
        AddGadgetItem(#Liste_praticiens, -1, \Profession)
        SetGadgetItemData(#Liste_praticiens, CountGadgetItems(#Liste_praticiens) - 1, ListIndex(praticiens()))
      EndWith
    Next
    
  EndIf
EndProcedure

Procedure Programme_principal()
  If OpenWindow(#Fenetre_principale, 0, 0, 1200, 640, "", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
    CanvasGadget(#Cvs, 0, 0, 1200, 640, #PB_Canvas_Container)
    StartDrawing(CanvasOutput(#Cvs))
    Box(0, 0, 1200, 640, $FF0000)
    StopDrawing()
    ListViewGadget(#Liste_praticiens, 10, 10, 380, 620)
    ListIconGadget(#ListIcon_Affichage, 400, 10, 790, 220, "Téléphone", 150, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_Affichage, 1, "Nom", 320)
    AddGadgetColumn(#ListIcon_Affichage, 2, "Ville", 320)
    StringGadget(#Str_Affichage, 400, 240, 790, 60, "", #PB_String_ReadOnly)
    TextGadget(#Txt_Annuaire, 400, 310, 790, 80, "Annuaire des praticiens",#SS_CENTERIMAGE|#SS_CENTER)
    TextGadget(#Txt_par,     400,  390, 790, 80, "par Micoute",#SS_CENTERIMAGE|#SS_CENTER)
    TextGadget(#Txt_Date,    400,  470, 790, 80, "5 juillet 2019",#SS_CENTERIMAGE|#SS_CENTER)
    ButtonGadget(#Btn_Quitter, 1040, 570, 150, 60, "Quitter")
    CloseGadgetList()
    
    LoadFont(#Police_Txt, "Times New Roman", 50, #PB_Font_Italic)
    LoadFont(#Police_Lst, "Arial Nova", 15, #PB_Font_Bold)
    LoadFont(#Police_Btn, "Arial Nova", 20, #PB_Font_Bold)
    
    For i = #Txt_Annuaire To #Txt_Date
      SetGadgetColor(i, #PB_Gadget_BackColor, $FF0000)
      SetGadgetColor(i, #PB_Gadget_FrontColor, $00FFFF)
      SetGadgetFont(i, FontID(#Police_Txt))
    Next i
    
    SetGadgetFont(#Btn_Quitter, FontID(#Police_Btn))
    SetGadgetFont(#ListIcon_Affichage, FontID(#Police_Lst))
    SetGadgetFont(#Liste_praticiens, FontID(#Police_Lst))
    SetGadgetFont(#Str_Affichage, FontID(#Police_Lst))
    
    Charger_praticiens()
    
  EndIf
EndProcedure

Procedure Remplir_Page_Annuaire()
  Protected Item = GetGadgetState(#Liste_praticiens)
  
  ClearGadgetItems(#ListIcon_Affichage)
  
  If Item <> -1
    SelectElement(praticiens(), GetGadgetItemData(#Liste_praticiens, Item))
    With Praticiens()
      AddGadgetItem(#ListIcon_Affichage, -1, \Tel+ #LF$ + \Nom + #LF$ + \Ville)
    EndWith  
  EndIf
EndProcedure

;- Boucle
Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      
    Case #PB_Event_Gadget
      Select EventGadget()        
        Case #Cvs  
          Select EventType()
            Case #PB_EventType_LeftButtonDown
              Btn_SourisPresse = 1
              DecalageX = DesktopMouseX() - WindowX(#Fenetre_principale)
              DecalageY = DesktopMouseY() - WindowY(#Fenetre_principale)
              
            Case #PB_EventType_MouseMove
              If Btn_SourisPresse
                ResizeWindow(#Fenetre_principale,
                             DesktopMouseX() - DecalageX,
                             DesktopMouseY() - DecalageY,
                             #PB_Ignore, #PB_Ignore)
              EndIf
              
            Case #PB_EventType_LeftButtonUp
              Btn_SourisPresse = 0
          EndSelect
          
        Case #Liste_praticiens
          Remplir_Page_Annuaire()
        Case #ListIcon_Affichage
        Case #Str_Affichage
        Case #Btn_Quitter
          Quitter()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver


Re: ListView sans doublon, mais ListIcon avec

Publié : sam. 06/juil./2019 11:08
par microdevweb
Bonjour Micoute,

Je ne suis pas certain d'avoir bien compris ta demande mais voici un bout de code

Code : Tout sélectionner

Structure job
  name.s
  ; etc
EndStructure
Structure praticien
  name.s
  job.job
  ; etc
EndStructure

Global NewList myPraticiens.praticien()
Global NewMap job.s()
#FORM = 0
#LST = 0
With myPraticiens()
  AddElement(myPraticiens())
  \name = "pra 1"
  \job\name = "infirmière"
  AddElement(myPraticiens())
  \name = "pra 2"
  \job\name = "infirmière"
  AddElement(myPraticiens())
  \name = "pra 3"
  \job\name = "médecin"
  AddElement(myPraticiens())
  \name = "pra 3"
  \job\name = "kiné"
EndWith

Procedure evList()
  Protected *address = GetGadgetItemData(#LST,GetGadgetState(#LST))
  If *address
    ChangeCurrentElement(myPraticiens(),*address)
    With myPraticiens()
      Protected j.s = \job\name
      ForEach myPraticiens()
        If \job\name = j
          Debug \name+"   "+\job\name
        EndIf
      Next
    EndWith
  EndIf
EndProcedure

OpenWindow(#FORM,0,0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(#LST,0,0,800,600,"Nom",400)
AddGadgetColumn(#LST,1,"Job",400)
ForEach myPraticiens()
  With  myPraticiens()
    ; je regarde ici le job à déjà été ajouté
    If Not FindMapElement(job(),\job\name)
      AddMapElement(job(),\job\name)
      AddGadgetItem(#LST,-1,\name+Chr(10)+\job\name)
      ; je mémorise l'adresse de l'élément de la liste
      SetGadgetItemData(#LST,i,@myPraticiens())
      i + 1
    EndIf
  EndWith
Next

BindGadgetEvent(#LST,@evList())

Repeat
  WaitWindowEvent()
Until Event() = #PB_Event_CloseWindow

Re: ListView sans doublon, mais ListIcon avec

Publié : sam. 06/juil./2019 12:30
par Micoute
Merci beaucoup microdevweb, c'est une très belle ébauche qui me donne des idées.

Re: ListView sans doublon, mais ListIcon avec

Publié : sam. 06/juil./2019 14:52
par venom
Bonjour,

Après tu as tout ce qui est préférence et json







@++

Re: ListView sans doublon, mais ListIcon avec

Publié : sam. 06/juil./2019 14:54
par Micoute
Tout à fait, et c'est j'ai choisi json.