Dim 29/01/2012 - Actualités

Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Dim 29/01/2012 - Actualités

Message non lu par Xavier »

Dim 29/01/2012 - Actualités


14:50

L'utilisation des ActionLists pour gérer de façon centralisée les boutons, les menus et les raccourcis-clavier, le tout de façon contextuelle aux deux composants et aux trois types de donnée (et en deux langues) nécessite finalement trop de code. La fonction est très intéressante en soi, mais la surcharge de code dédié à la gestion des exceptions est devenue trop importante.

Le problème vient à l'origine de l'impossibilité d'affecter des raccourcis-clavier personnalisés pour les ActionLists, et il fallait donc les gérer directement :
  • Action -> Dispatch par composant émetteur puis par type de donnée
  • Menu -> Action
  • Bouton -> Action
  • Raccourci-clavier -> Dispatch...
Mais se greffrent maintenant de nouvelles commandes contextuelles, accessibles via :
  • Bouton -> Menu -> Dispatch...
On arrive donc à un point où les élements des menus doivent appeler soit les Actions soit le Dispatch et cela devient très compliqué.

L'ancien modèle va donc être remis en place, ou tous les composants appellent directement le Dispatch :
  • Menu -> Dispatch...
  • Bouton -> Dispatch...
  • Raccourci-clavier -> Dispatch...
  • Bouton -> Menu -> Dispatch...

Tout ce rework n'accélère évidemment pas la mise à disposition de la version Alpha 01 des Contacts qui était prévue pour fin janvier, mais ce premier outil est en quelques sortes un sandbox pour la suite, donc c'est pour la bonne cause.
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Re: Dim 29/01/2012 - Actualités

Message non lu par Xavier »

Il m'aura fallu plus de temps pour y réfléchir et l'annoncer que pour le faire ! lol

Les raccourcis-clavier appellent le Dispatch en se faisant passer pour des boutons :

Code : Tout sélectionner

		// [F2]
		if	((Shift = []) and (Key = VK_F2))
		then	if	Contacts_Rename_Button.Enabled
				then	Contacts_Manage(Contacts_Rename_Button);
Le Dispatch principal (tous les contrôles l'appellent) fait un split, c'est juste pour avoir deux méthodes de 2 pages plutôt qu'une de 4 pages :

Code : Tout sélectionner

		// Arbre des dossiers
		if	Self.ActiveControl = Contacts_Tree
		then	Contacts_Tree_Manage(Sender);

		// Liste des contacts
		if	Self.ActiveControl = Contacts_List
		then	Contacts_List_Manage(Sender);
Et finalement les Dispatch splittés gèrent les appels des boutons et des éléments de menus :

Code : Tout sélectionner

		// Renommer
		if	((Sender = Contacts_Rename_Button) or (Sender = Contacts_Rename_Item))
		then	Selected_Node.EditText;

...

	// Renommer
	if	((Sender = Contacts_Rename_Button) or (Sender = Contacts_Rename_Item))
	then	begin
			Contacts_List.Tag := Prop_Index;
			Selected_Item.EditCaption;
			end;
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Dim 29/01/2012 - Actualités

Message non lu par Xavier »

17:30


Il n'y a désormais plus qu'un bouton pour créer et un pour modifier.
Pour l'arbre des dossiers, l'action associée est évidente.
Mais pour la liste des contacts et des données, il y a maintenant un mini-menu contextuel qui s'affiche sous le bouton lorsqu'il y a possibilité de choisir entre :
  • Créer un contact ou une donnée.
  • Modifier le nom (Renommer) ou la valeur (Editer) d'une donnée.
Ces actions sont différenciées dans le menu contextuel global et via les raccourcis-clavier, mais il fallait également les distinguer après un clic sur un bouton.

Les mini-menus contextuels affichés en dessous des deux boutons concernés sont en fait des extraits du menu contextuel global, cela rajoute un peu de code de les recontextualiser mais simplifie le multilinguisme.
MiniMenus.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Denis
Messages : 180
Enregistré le : jeu. 23 juin 2011 09:21

Re: Dim 29/01/2012 - Actualités

Message non lu par Denis »

Vive la POO
Répondre