Page 1 sur 1

Dim 29/01/2012 - Actualités

Posté : dim. 29 janv. 2012 15:53
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.

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

Posté : dim. 29 janv. 2012 16:15
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;

Dim 29/01/2012 - Actualités

Posté : dim. 29 janv. 2012 18:34
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

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

Posté : sam. 11 févr. 2012 12:01
par Denis
Vive la POO