Classe: wxGridBagSizer()
Ce sizer est dérivé de wxFlexGridSizer et permet un positionnement explicite des "cases" à l'aide de wxGBPosition et wxGBSpan.
Ce Widget permet d'aligner des objets dans des cellules de dimensions différentes.
Un peu comme dans un "tableau" avec le "html", ou un tableur classique.!
Plusieurs classes peuvent-être utilisées pour gérer les "items" avec wxGridBagsizer().
bagSizer = wx.wxGridBagSizer( interval_V, interval_H) -- paramètres facultatifs pour spécifier l'intervalle entre -- les lignes et les colonnes. bagSizer:Add(param1, param2, param3, param4, param5)
Si le schéma global reste identique aux autres Sizers, en revanche l'addition des objets dans le wxGridBagSizer est lui complètement différent et peut suivre l'un des protocoles suivants:
(1)
wx.wxGROW (ou wx.wxEXPAND), force la fenêtre à grandir avec le sizer.
wx.wxSHAPED indique à la fenêtre de changer de dimension tout en préservant le ratio original.
Quand le flag wx.wxGROW n'est pas utilisé, l'élément peut être aligné dans l'espace disponible en fonction des indication suivantes:
wx.wxALIGN_LEFT, wx.wxALIGN_TOP, wx.wxALIGN_RIGHT, wx.wxALIGN_BOTTOM,
wx.wxALIGN_CENTER_HORIZONTAL et wx.wxALIGN_CENTER_VERTICAL.
wx.wxALIGN_CENTER précise un alignement Vertical et horizontal.
Par défaut, l'alignement est wx.wxALIGN_TOP + wx.wxALIGN_LEFT.(en haut à gauche)
Une fenêtre appartenant à un sizer peut avoir une bordure, dont les cotés affichés peuvent être spécifiés.
Utilisez wx.wxTOP, wx.wxLEFT, wx.wxRIGHT et wx.wxBOTTOM ou wx.wxALL pour les 4 cotés.
Ces bordures sont invisibles, mais indispensable pour pouvoir créer une marge interne ou "padding".
Pour additionner différents "flags" dans le param3, utilisez le signe "+".
Si vous voulez rendre certaines lignes ou certaines colonnes extensibles, vous devez rajouter les méthodes suivantes, autant de fois que nécessaire:
bagSizer:AddGrowableCol(N° de la Colonne)
bagSizer:AddGrowableRow(N° de la ligne)
Attention: Le N° de la première ligne = 0 et le N° de la colonne = 0.
Vous trouverez ci-dessous, la liste des méthodes implémentées par wxLua 2.8.10.
Pour Ajouter un objet au wxGridBagSizer.Add(objetWindow, wx.wxGBPosition(li, co), wx.wxGBSpan(li, co), flag, border) |
Add(objetSizer, wx.wxGBPosition(li, co), wx.wxGBSpan(li, co), flag, border) |
Add(width, height, wx.wxGBPosition(li, co), wx.wxGBSpan(li, co), flag, border) |
Add(objetGBSizerItem) |
CheckForIntersection(objetGBSizerItem, wxGBSizerItem* excludeItem = NULL) |
CheckForIntersection(wx.wxGBPosition(li, co), wx.wxGBSpan(li, co), wxGBSizerItem* excludeItem = NULL) |
FindItem(objetWindow) | Trouve l'élément Sizer de la fenêtre donnée ou subsizer, ou NULL si non trouvé. |
FindItem(objetSizer) | Trouve l'élément Sizer de la fenêtre donnée ou subsizer, ou NULL si non trouvé. |
FindItemAtPoint(wx.wxPoint(x, y) | Retourne l'"item" situé au pt(x, y), ou NULL. |
FindItemAtPosition(wx.wxGBPosition(li,co)) | Retourne l'"item" positionné (li, co) , ou NULL. |
FindItemWithData(wx.wxObject*userData) | Retourne l'"item" sizer qui a une base de données utilisateur correspondante (il ne compare que les valeurs de pointeur) ou NULL si non trouvé. |
GetCellSize (li, co) | Obtient la taille de la cellule spécifiée. |
GetEmptyCellSize() | Obtient la taille des cellules vides. |
GetItemPosition(objetWindow) | Retourne la position de la grille de l'élément spécifié. |
GetItemPosition(objetSizer) | Retourne la position de la grille de l'élément spécifié. |
GetItemPosition(size_t index) | Retourne la position de la grille de l'élément spécifié. |
GetItemSpan(objetWindow) | Retourne la ligne/colonne de l'élément spécifié. |
GetItemSpan(objetSizer) | Retourne la ligne/colonne de l'élément spécifié. |
GetItemSpan(size_t index) | Retourne la ligne/colonne de l'élément spécifié. |
SetEmptyCellSize(wx.wxSize(x, y)) |
SetItemPosition(objetWindow, wx.wxGBPosition(li, co)) |
SetItemPosition(objetSizer, wx.wxGBPosition(li, co)) |
SetItemPosition(size_t index, wx.wxGBPosition(li, co)) |
SetItemSpan(objetWindow, wx.wxGBSpan(li, co)) |
SetItemSpan(objetSizer, wx.wxGBSpan(li, co)) |
SetItemSpan(size_t index, wx.wxGBSpan(li, co)) |
require("wx") -- inutile si on utilise wxluafreeze.exe -- Création d'une frame et de son panel. local frame = wx.wxFrame(wx.NULL, -1, "wxGridBagSizer") local panel = wx.wxPanel(frame, -1) -- Centrage de la frame au milieu de l'écran. frame:Centre() -- Création de plusieurs objets. local objet01 = wx.wxButton(panel, -1, "01") local objet02 = wx.wxButton(panel, -1, "02") local objet03 = wx.wxButton(panel, -1, "03") local objet04 = wx.wxButton(panel, -1, "04") local objet05 = wx.wxButton(panel, -1, "05") local objet06 = wx.wxButton(panel, -1, "06") -- Création des Sizers. local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) local bagSizer = wx.wxGridBagSizer() -- Extension de la colonne 1 (càd de la deuxième!) -- en cas d'extension horizontale bagSizer:AddGrowableCol(1) -- Extension de la ligne 0 (càd de la première!) -- en cas d'extension verticale bagSizer:AddGrowableRow(0) -- addition des objets aux sizers.(ligne, colonne) bagSizer:Add(objet01, wx.wxGBPosition(0, 0), wx.wxGBSpan(1, 2), wx.wxGROW + wx.wxALL + wx.wxALIGN_CENTER, 5) bagSizer:Add(objet02, wx.wxGBPosition(0, 2), wx.wxGBSpan(1, 1), wx.wxGROW + wx.wxALL + wx.wxALIGN_CENTER, 5) bagSizer:Add(objet03, wx.wxGBPosition(1, 0), wx.wxGBSpan(1, 3), wx.wxGROW + wx.wxALL + wx.wxALIGN_CENTER, 5) bagSizer:Add(objet04, wx.wxGBPosition(2, 0), wx.wxGBSpan(1, 1), wx.wxGROW + wx.wxALL + wx.wxALIGN_CENTER, 5) bagSizer:Add(objet05, wx.wxGBPosition(2, 1), wx.wxGBSpan(2, 1), wx.wxGROW + wx.wxALL + wx.wxALIGN_CENTER, 5) bagSizer:Add(objet06, wx.wxGBPosition(3, 2), wx.wxGBSpan(1, 1), wx.wxGROW + wx.wxALL + wx.wxALIGN_CENTER, 5) -- Addition bagSizer dans mainSizer. mainSizer:Add(bagSizer, 1, wx.wxGROW + wx.wxALL, 10) -- On affecte le mainSizer au panel. panel:SetSizer(mainSizer) -- On fixe une taille minimale de la frame au démarrage. mainSizer:SetSizeHints(frame) mainSizer:Fit(frame) -- Démarrage de l'application. frame:Show(true) wx.wxGetApp():MainLoop()
Ce qui donne comme résultat.