octobre
2007
Après quelques semaines de développement, il est maintenant temps de faire un point et de regarder le chemin parcouru ainsi que celui restant à parcourir.
Architecture de la bibliothèque
Il fallait trouver un moyen pour avoir des widgets héritant de component ayant un comportement similaire à des control, aussi bien en mode design qu’en utilisation normale.
La solution adoptée reprend le principe utilisé par les toolstrips : un control (héritant de parentcontrol) servant de conteneur hôte aux différents widgets utilisés.
La bibliothèque contiendra peut-être plusieurs types variante d’un tel control. On s’attachera pour l’instant à la seule existante : HostSurface, une surface d’accueil de widgets.
Afin de fournir une bibliothèque conviviale il nécessaire d’avoir un mode design riche et pratique à utiliser. Pour ne pas mélanger l’aspect design et celui runtime, chaque widget pourra avoir une classe designer associée (héritant de componentdesigner)
Les widgets de base
Ils sont au nombre de 2. Le premier est le plus simple et la base de tous. Son Nom ? WidgetBase. Il fourni toutes les propriétés et fonctions communes à ses futurs héritiers.
Entre autres :
- Gestion du paint (gestion de l’arrière plan ainsi que le premier plan)
- Gestion du clavier
- Gestion de la souris
- Diverses propriétés d’apparence et de comportement.
Premier héritier et second widget de base : ContainerWidgetBase. Sa seule différence avec WidgetBase est de pouvoir contenir une collection de widgets.
Ces 2 widgets de base ont chacun leur designer associé : WidgetBaseDesigner et ContainerWidgetBaseDesigner.
Premier Widget : le panel
Un précoce ce panel, à peine né et déjà parent (de widgets) ! En effet le premier widget est un conteneur. La raison principale est qu’il me fallait un widget racine pour la surrface hôte.
Concrètement le panel n’est pas encore terminé et fourni pour le moment uniquement
Des fonctionnalités basiques (pas de moteur de layout évolué par exemple)
Le mode design
Les bases (comprendre le strict minimum) du mode design ont été implémentées. A savoir :
- Sélection des widgets
- Gestion du hit testing (et gestion des conteneurs)
- Sélection primaire et secondaire
- Service d’ajout de widget à un widget conteneur existant (via le petit « + »)
Exemple de sélection multiple avec 1 panel à bord arrondi et un autre transparent.
Menu d’ajout de widget
Où nous en sommes :
On peut maintenant créer des panels imbriqués, les sélectionner à la souris en mode design ainsi que changer leurs propriétés à l’aide de la property grid. Rien de bien utilisable dans une application concrète (où alors vous êtes très imaginatifs )
J’essaierais dans les étapes suivantes de rendre la bibliothèque plus utile en développant en parallèle 2 aspects :
- L’ajout de widgets (label, checkbox, …)
- L’amélioration du mode design (permettre de redimensionner un widget à l’aide de ses poignées de sélection, fournir une meilleure intégration à Visual Studio…)
A bientôt pour le prochain épisode !
1 Commentaire + Ajouter un commentaire
Commentaires récents
- Winforms Lightweight widgets – Avancée du projet – résumé 1 dans
- Winform: LightWeight controls / controles légers: partie 2/2 dans
- Winform: LightWeight controls / controles légers: partie 2/2 dans
- Winform: LightWeight controls / controles légers: partie 2/2 dans
- Winform: LightWeight controls / controles légers: partie 2/2 dans
Bravo pour ce projet, je m’étais fait les mêmes réflexions en ce qui concerne la ‘lourdeur’ des usercontrols pour arriver à la même conclusion :
Pourquoi ne pas partir d’un seul control et avoir son propre système moins complet mais bien optimisé.
Mais devant la masse de boulot j’ai laissé tombé. J’avais également la crainte de finir par être aussi lent sur des controls complexes car le gdi+ c’est pas ultra rapide.
Pour info il existe un projet dans le style qui est trés interessant :
http://www.codeproject.com/useritems/lightweight_views.asp