en principe :
Code : Tout sélectionner
For i=0 To ScintillaSendMessage(1, #SCI_GETLINECOUNT)-1 ; pour toute les lignes de l'editeur
If ScintillaSendMessage(1, #SCI_GETFOLDLEVEL, i) = #SC_FOLDLEVELBASE|#SC_FOLDLEVELHEADERFLAG ; verifie si une ligne est pliable
ScintillaSendMessage(1, #SCI_TOGGLEFOLD, i) ; alors on la plie
EndIf
Next
comme j'utilise #SCI_TOGGLEFOLD un coup ça plie , un coup ça deplie ... ideal pour un raccourci clavier de pliage/depliage
de l'ensemble du code
le probleme n'est pas tant de "folder" le code, comme tu le vois c'est assez simple
mais .... de definir quel mote clef sert a folder ou unfolder le code ...
là c'est une autre histoire ....
pour info dans Goscintilla , ça se passe ici :
Code : Tout sélectionner
If *this\state & (#GOSCI_LEXERSTATE_ENABLECODEFOLDING|#GOSCI_LEXERSTATE_ENABLECLICKANYWHERECODEFOLDING)
t1 = 0
If *this\blnLineCodeFoldOption >= 1 ;Open fold.
t1 = #SC_FOLDLEVELHEADERFLAG
EndIf
ScintillaSendMessage(id, #SCI_SETFOLDLEVEL, i, t1|*this\foldLevel)
*this\foldLevel + *this\blnLineCodeFoldOption
If *this\foldLevel < #SC_FOLDLEVELBASE
*this\foldLevel = #SC_FOLDLEVELBASE
EndIf
Else
ScintillaSendMessage(id, #SCI_SETFOLDLEVEL, i, 0)
EndIf
grosso modo , il regarde si un mot dans la liste "This" est foldable (donc il utilise un flag pour savoir si un mot est foldable ou pas ...
si le flag dit que c'est un mot d'ouverture de fold (comme "Procedure(" par ex ) il met T1= a
#SC_FOLDLEVELHEADERFLAG
et donne l'ordre a Scintilla d'afficher le symbole de folding avec
ScintillaSendMessage(id, #SCI_SETFOLDLEVEL, i, t1|*this\foldLevel)
sinon il utilise
ScintillaSendMessage(id, #SCI_SETFOLDLEVEL, i, 0) pour la fin de Folding ....
#SCI_SETFOLDLEVEL permet de faire de la hierarchie des Folders dans des Folders ....
c'est ce qu'il fait dans sa structure en gardant le niveau de profondeur avec "
*this\foldLevel"
donc il te faut tenir un compteur de profondeur pour pouvoir a la fin revenir a 0 et ainsi afficher le symbole de fin de folding ...
comme tu vois c'est simple
sinon en utilisant Go_scintilla c'est quand meme plus simple a mettre en place puisque :
Code : Tout sélectionner
GOSCI_AddKeywords(onglet, com2$, #STYLES_COMMANDS, #GOSCI_OPENFOLDKEYWORD|#GOSCI_ADDTOCODECOMPLETION,-1)
te permet de faire afficher le sympbole de folding open a chaque mot clef contenue dans "Com2$" séparé par des Espaces
com2$="Procedure If For" par exemple
et un
Code : Tout sélectionner
GOSCI_AddKeywords(onglet, com2$, #STYLES_COMMANDS, #GOSCI_CLOSEFOLDKEYWORD|#GOSCI_ADDTOCODECOMPLETION,-1)
avec le meme principe pour avoir le Symbole de Fermeture
avec comme mot clef pour l'exemple "EndProcedure Endif Next"
