Hi,
I made a "listview gadget" nickname with AGK
it allows to have a collection of "fields" (button) clickable
to get as many actions as possible..
possible use :
have its password listed... each button with the name of a site or email
by clicking on it, we display the login and the password..
a button = an image for example.
or make some kind of menu...
the uses of a listview are multiple and varied
here is the code:
Translated with www.DeepL.com/Translator
// Project: Listview gadget By Dobro
// Created: 2018-05-27
// show all errors
SetErrorMode(2)
// set orientation
SetOrientationAllowed(1, 1,0,0 )
// set window properties
SetWindowTitle( "Listview gadget By Dobro " )
SetWindowSize( 768,1024, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
// set display properties
GLobal V_Screen as Integer
GLobal H_Screen as Integer
V_Screen=GetDeviceHeight()
H_Screen=GetDeviceWidth()
SetVirtualResolution( H_Screen,V_Screen ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
// Contstante
#constant KEY_ENTER=13
// init **************************************
iTextIndex as integer =1
iedit_box as Integer =2
i_screen_Login as Integer =3
i_screen_pass as Integer =4
text_login as String ="Login :"
text_Pass as String ="PassWord :"
Bouton_Ajoute As Integer=5
Bouton_edite As Integer=6
Bouton_Supr As Integer=7
Bouton_asc_bas As Integer=8
Bouton_asc_Haut As Integer=9
//
Flag_creation as Integer=0
//
Global Largeur_gadget as Integer
Global Hauteur_gadget as Integer
Largeur_gadget=H_Screen/2
Hauteur_gadget=V_Screen-225
//
Image_fond As integer =1
Sprite_fond as Integer=1
//
Str_Entree as String
//
Global Index_bouton as Integer=9
Global Index_bouton_origine as Integer =10
Global Y_bouton as integer =100
Global Y_bouton_origine as integer =100 //depart Y des boutons dans l'interface
Global YB as Integer=0
Global X_bouton as Integer
Global Max_bouton as Integer
Global X_gadget as Integer
X_gadget=(H_Screen/2)-(Largeur_gadget/2)
X_bouton=X_gadget
Max_bouton=8 // Maximum de boutons affichable dans l'interface
pointeur_premier_bouton as Integer=10
pointeur_dernier_bouton as Integer
pointeur_dernier_bouton=Max_bouton
Compteur_bouton As Integer=0
dernier_bouton_cree as Integer
Compteur_valide as Integer
//
Flag_bas as Integer =0
Flag_haut as Integer =0
//
Global Memoire_bouton_clique as Integer =0
//*******************************************
// ********* Sprite du Fond ******************
DrawBox( 1, 1, Largeur_gadget, Hauteur_gadget, MakeColor(255,0,0), MakeColor(0,255,0),MakeColor(0, 0,255),MakeColor(255, 0,255), 1 )
GetImage(Image_fond ,0,0,Largeur_gadget, Hauteur_gadget)
ClearScreen()
CreateSprite(Sprite_fond,Image_fond)
DrawSprite( Sprite_fond )
SetSpriteSize( Sprite_fond, Largeur_gadget, Hauteur_gadget )
SetSpritePosition( Sprite_fond,X_gadget, 1 )
// **********************************************
// Box edit
CreateEditBox(iedit_box)
SetEditBoxSize(iedit_box,600,30)
SetEditBoxTextSize(iedit_box,30)
SetEditBoxPosition(iedit_box,x_bouton,Hauteur_gadget+120)
SetEditBoxVisible(iedit_box, 0 )
//Login
CreateText ( i_screen_Login, text_login+"Titre du ListView" )
SetTextSize( i_screen_Login, 25 )
DrawText( i_screen_Login )
SetTextPosition( i_screen_Login, x_gadget+100, 50)
//PassWord
//CreateText ( i_screen_pass, text_pass+"ABCDEFGHIJKLMNOPQRSTUVWXYZ" )
//SetTextSize( i_screen_pass, 25 )
//DrawText( i_screen_pass )
//SetTextPosition(i_screen_pass, 1, 100)
//Creation_Ajoute
AddVirtualButton(Bouton_Ajoute, 20,Hauteur_gadget-350 , 50 )
SetVirtualButtonSize( Bouton_Ajoute, 150, 100 )
SetVirtualButtonText( Bouton_Ajoute, "Add" )
SetVirtualButtonColor(Bouton_Ajoute, 0, 255, 30 )
SetVirtualButtonPosition( Bouton_Ajoute, X_bouton+50, Hauteur_gadget+60 )
//Creation_Edite
AddVirtualButton(Bouton_edite, 190,Hauteur_gadget-350 , 50 )
SetVirtualButtonSize( Bouton_edite, 150, 100 )
SetVirtualButtonText( Bouton_edite, "Edit" )
SetVirtualButtonColor(Bouton_edite,255, 255, 30 )
SetVirtualButtonPosition( Bouton_edite,X_bouton+210 , Hauteur_gadget +60)
//Creation_Supr
AddVirtualButton(Bouton_Supr, 360, Hauteur_gadget-350 , 50 )
SetVirtualButtonSize( Bouton_Supr, 150, 100 )
SetVirtualButtonText( Bouton_Supr, "Del" )
SetVirtualButtonColor(Bouton_Supr,255, 10, 10 )
SetVirtualButtonPosition( Bouton_Supr,X_bouton+370, Hauteur_gadget +60)
//Creation_bouton ascenseurs bas
AddVirtualButton(Bouton_asc_bas, 530,1 , 50 )
SetVirtualButtonSize( Bouton_asc_bas, 50, 100 )
SetVirtualButtonText( Bouton_asc_bas, ">" )
SetVirtualButtonColor(Bouton_asc_bas,200, 200, 0 )
SetVirtualButtonPosition( Bouton_asc_bas,x_bouton+Largeur_gadget+25 , Hauteur_gadget-50)
SetVirtualButtonVisible(Bouton_asc_bas, 0)
//Creation_bouton ascenseurs haut
AddVirtualButton(Bouton_asc_haut, Hauteur_gadget/2,50 , 50 )
SetVirtualButtonSize( Bouton_asc_haut, 50, 100 )
SetVirtualButtonText( Bouton_asc_haut, "<" )
SetVirtualButtonColor(Bouton_asc_haut,200, 200, 0 )
SetVirtualButtonPosition( Bouton_asc_haut,x_bouton+Largeur_gadget+25,Y_bouton_origine+100)
SetVirtualButtonVisible(Bouton_asc_haut, 0)
//
do
// **** Event bouton****
// ACTION_Ajout
If GetVirtualButtonPressed(Bouton_Ajoute) // Ajout
SetEditBoxVisible(iedit_box, 1 ) // affiche l'editeur
Flag_creation=1
Endif
//ACTION_Edite
If GetVirtualButtonPressed(Bouton_edite) // edite
SetEditBoxVisible(iedit_box, 1 ) // affiche l'editeur
SetVirtualButtonColor(Memoire_bouton_clique,255, 150, 0) // passe le bouton en orange
Flag_creation=2
Endif
//ACTION_Supr
If GetVirtualButtonPressed(Bouton_Supr) //Supr
If GetVirtualButtonExists(Bouton_Supr)
if Memoire_bouton_clique<>0
DeleteVirtualButton( Memoire_bouton_clique )
Endif
Compteur_bouton=Compteur_bouton-1
Endif
//message("nbr_bouton="+str(Compteur_bouton))
If Compteur_bouton<=Max_bouton
SetVirtualButtonVisible( Bouton_asc_bas, 0)
Flag_bas=1
SetVirtualButtonVisible( Bouton_asc_Haut, 0)
Flag_Haut=1
Endif
// redessine tout les boutons visibles
pointeur_premier_bouton=Index_bouton_origine
pointeur_dernier_bouton=pointeur_premier_bouton+(Max_bouton-1)
YB=Y_bouton_origine+80 // on recale le point de depart dessin en Y des boutons
redessin_bouton (pointeur_premier_bouton ,pointeur_dernier_bouton,YB)
If Compteur_bouton > Max_bouton
SetVirtualButtonVisible( Bouton_asc_bas, 1) //active l'ascenseur en Bas
Flag_bas=0
SetVirtualButtonVisible( Bouton_asc_Haut, 0) // desactive l'ascenseur en haut
Flag_Haut=1
Endif
Endif
// ACTION_Ascenseur Haut
If GetVirtualButtonPressed(Bouton_asc_Haut) and Flag_haut=0//Ascenseur haut
// on scroll vers le bas d'une hauteur de bouton tout les boutons
pointeur_premier_bouton=pointeur_premier_bouton-1
pointeur_dernier_bouton=pointeur_premier_bouton+(Max_bouton-1)
If pointeur_premier_bouton < Index_bouton_origine
pointeur_premier_bouton=pointeur_premier_bouton+1 // annule le scroll
pointeur_dernier_bouton=pointeur_premier_bouton+(Max_bouton-1)
SetVirtualButtonVisible(Bouton_asc_haut, 0) //Disparition du curseur ascenseur haut
Sync()
Flag_haut=1
Endif
YB=Y_bouton_origine+80 // on recale le point de depart dessin en Y des boutons
redessin_bouton (pointeur_premier_bouton ,pointeur_dernier_bouton,YB)
If Compteur_bouton>Max_bouton // si on a plus de 5 boutons, alors on fait apparaitre le bouton curseur bas
SetVirtualButtonVisible(Bouton_asc_bas, 1) //Apparition du curseur ascenseur haut
Flag_bas=0
Endif
//
Endif
//ACTION_Ascenseur Bas
If GetVirtualButtonPressed(Bouton_asc_bas) And Flag_bas=0 //Ascenseur bas
// on scroll vers le haut d'une hauteur de bouton tout les boutons
pointeur_premier_bouton=pointeur_premier_bouton+1
pointeur_dernier_bouton=pointeur_premier_bouton+(Max_bouton-1)
If pointeur_dernier_bouton>Index_bouton
pointeur_premier_bouton=pointeur_premier_bouton-1 // annule le scroll
pointeur_dernier_bouton=pointeur_premier_bouton+(Max_bouton-1)
SetVirtualButtonVisible(Bouton_asc_bas, 0) //Disparition du curseur ascenseur bas
Sync()
Flag_bas=1
Endif
YB=Y_bouton_origine+80 // on recale le point de depart dessin en Y des boutons
redessin_bouton (pointeur_premier_bouton ,pointeur_dernier_bouton,YB)
If Compteur_bouton>Max_bouton // si on a plus de 5 boutons, alors on fait apparaitre le bouton curseur bas
SetVirtualButtonVisible(Bouton_asc_haut, 1) //Apparition du curseur ascenseur haut
Flag_haut=0
Endif
Endif
//ACTION_bouton_Creer
// *********** event appuis sur bouton cree ***************
For i=Index_bouton_origine to Index_bouton
//Print( "Dernier bouton :"+str(pointeur_dernier_bouton))
If GetVirtualButtonExists(i)
If GetVirtualButtonPressed(i)
//Print("le bouton :"+Str(i)+ "a été pressé")
Memoire_bouton_clique=i
Endif
Endif
Next i
//Print("le derniere touchée :"+str(GetRawLastKey( )))
// Print(str(Compteur_bouton)) // nombre de boutons
Print("le bouton :"+Str(Memoire_bouton_clique)+ " a été pressé")
// ****************************************************
// *********************
// ********* Event editBox ********************
//If GetEditBoxChanged( iedit_box )
//Str_Entree=""
//Str_Entree=GetEditBoxText( iedit_box )
// Endif
// ********************************************
// ********** KeyBoard ***********************
If GetTextInputCompleted() =1 Or GetRawKeyPressed (KEY_ENTER )
// Creation bouton
If Flag_creation=1
YB=Y_bouton_origine+80 // on recale le point de depart dessin en Y des boutons (80=hauteur d'un bouton)
If GetEditBoxVisible(iedit_box) =1 // seulement si l'editbox est visible
//GetEditBoxChanged( iedit_box )
Str_Entree=""
Str_Entree=GetEditBoxText( iedit_box )
Compteur_bouton=Compteur_bouton+1
// **************************** Scroll prealable vers le bas (les 5 derniers boutons ) ***************************************
YB=Y_bouton_origine+80 // on recale le point de depart dessin en Y des boutons (80=hauteur d'un bouton)
//SetVirtualButtonVisible( pointeur_premier_bouton-1, 0)
If Compteur_bouton>Max_bouton
pointeur_premier_bouton=pointeur_premier_bouton+1
pointeur_dernier_bouton=pointeur_premier_bouton+(Max_bouton-2)
redessin_bouton (pointeur_premier_bouton,pointeur_dernier_bouton,YB)
Y_bouton=Y_bouton-80
Endif
// ***********************************************************************************************************
Index_bouton =Index_bouton +1
//
If Index_bouton>17
SetVirtualButtonVisible(Bouton_asc_haut, 1) // apparition de ascenseur haut
Endif
Flag_haut=0
SetVirtualButtonVisible(Bouton_asc_Bas, 0) // Disparition de ascenseur bas
Flag_bas=1
//Endif
Y_bouton=Y_bouton+80
// Creer nouveau bouton
AddVirtualButton( Index_bouton,X_gadget, y_Bouton,20)
SetVirtualButtonSize( Index_bouton, Largeur_gadget, 80 )
SetVirtualButtonColor(Index_bouton,0, 150, 0)
SetVirtualButtonPosition( Index_bouton,X_gadget, Y_bouton)
SetVirtualButtonText( Index_bouton, Str_Entree )
//sync()
dernier_bouton_cree=Index_bouton
pointeur_dernier_bouton=Index_bouton
pointeur_premier_bouton=pointeur_dernier_bouton-(Max_bouton-1)
// redessine les boutons
YB=Y_bouton_origine+80 // on recale le point de depart dessin en Y des boutons (80=hauteur d'un bouton)
redessin_bouton (pointeur_premier_bouton,pointeur_dernier_bouton, YB)
SetEditBoxVisible(iedit_box, 0) // Cache l'editeur
Endif
Flag_creation=0
Endif
//edition
If Flag_creation=2
If GetEditBoxVisible(iedit_box) =1 // seulement si l'editbox est visible
//SetEditBoxFocus( iedit_box,1 )
Str_Entree=""
Str_Entree=GetEditBoxText( iedit_box ) // recupe le contenu de l'editeur
SetVirtualButtonText( Memoire_bouton_clique, Str_Entree ) // on le colle dans le bouton
SetVirtualButtonColor(Memoire_bouton_clique,0, 150, 0) // on remet la couleur d'origine du bouton
SetEditBoxVisible(iedit_box,0) // on cache l'editeur
Endif
Flag_creation=0
Endif
Endif
// ******************************************
// Print( ScreenFPS() )
Sync()
loop
// ********* Zone Procedures **************
function redessin_bouton (pointeur_premier_bouton,pointeur_dernier_bouton, YB)
// securité
If pointeur_premier_bouton<Index_bouton_origine
pointeur_premier_bouton=Index_bouton_origine
Endif
If pointeur_dernier_bouton>Index_bouton
pointeur_dernier_bouton=Index_bouton
Endif
//
// rend invisible tout les boutons
Compteur_valide=0
For i=Index_bouton_origine to Index_bouton
If GetVirtualButtonExists(i)=1
SetVirtualButtonVisible( i, 0)
Endif
Next
// n'affiche que les boutons voulus
For i=pointeur_premier_bouton to pointeur_dernier_bouton
recommence:
if Compteur_valide=>Max_bouton
goto fin
Endif
If i>pointeur_dernier_bouton
goto fin
Endif
If GetVirtualButtonExists(i)=1
Compteur_valide=Compteur_valide+1
SetVirtualButtonPosition( i,X_gadget +X_bouton,YB) // <<< pas trop noral d'avoir a ajouter X_gadget et X_bouton ça sent le bug de AGK !!
SetVirtualButtonVisible( i, 1)
YB=YB+80
sync()// pour debug
Else // n'existe pas
pointeur_dernier_bouton= Index_bouton
i=i+1
goto recommence
Endif
Next i
fin:
EndFunction