Classe: wxFontDialog().
Cette boîte de dialogue présente un sélecteur de polices de caractère à l'utilisateur, et retourne les informations de la police et de la couleur sélectionnée.
Le sélecteur de police de MS Windows
Sous Windows, le sélecteur de police natif est utilisé. Il se présente sous la forme d'une boite de dialogue avec des contrôles pour le nom de la police, la taille, le style, le poids, le soulignement, le "barré" et la couleur d'écriture du texte. Un exemple de la police sélectionnée est affiché dans une zone blanche de la boite de dialogue. Notez que lors de la traduction d'une police MS Windows vers une police wxWidgets, l'attribut barré' est ignoré et une famille de police (telle que Swiss ou Modern) est déduite de l'actuel nom de police (tel que Arial ou Courier).
Le sélecteur de police générique
Sous les plateformes non-MS Windows, le sélecteur de police est plus simple. Il contient des contrôles pour le nom de la famille de police, la taille, le style, le poids, le soulignement et la couleur du texte, et un exemple est affiché en dessous sur un fond blanc. Le sélecteur de police générique est également disponible sous MS Windows, il a pour nom wxGenericFontDialog.
fontDialog = wx.wxFontDialog( wxWindow *parent = frame, wxFontData *data = wx.wxFontData() )
parent est la fenêtre qui détient la boite de dialogue.
data Initialise fontColour à black, showHelp à false, allowSymbols à true, enableEffects à true, minSize à 0 et maxSize à 0.
Vous trouverez ci-dessous, la liste des méthodes implémentées par wxLua 2.8.10.
GetFontData() | Retourne les data (données) associées à la font sélectionnée. |
ShowModal() | Permet de sélectionner les boutons wx.wxID_OK, et wx.wxID_CANCEL. |
GetColour() | Obtient la couleur courante associée aux data (données) mentionnées ci-dessus. |
GetChosenFont() | Obtient la police choisie par l'utilisateur lorsqu'il a appuyé sur OK. |
Le schéma est sensiblement identique à celui de wxColourDialog à la différence que pour une " font " l'on peut choisir le nom de la police, la taille, le style, le poids, le soulignement, le "barré" et la couleur d'écriture du texte.
require("wx") -- inutile si on utilise wxluafreeze.exe -- Création d'une frame et de son panel. local frame = wx.wxFrame(wx.NULL, -1, "wxCouleurDialog") local panel = wx.wxPanel(frame, -1) -- On centre l'objet frame au centre de l'écran. frame:Centre() -- Création d'un staticText dans sa boîte. local staticBox = wx.wxStaticBox(panel, -1, "") local staticBoxSizer = wx.wxStaticBoxSizer(staticBox, wx.wxVERTICAL) local staticText = wx.wxStaticText(panel, -1,"Cliquez sur le bouton 'font', pour sélectionner une nouvelle police de caractère...") -- Addition de staticTexte dans son staticBoxSizer. staticBoxSizer:Add(staticText, 1, wx.wxGROW + wx.wxALL, 5) -- Création d'un wxTextCtrl. local textCtrl = wx.wxTextCtrl( panel, -1, "", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxTE_RICH + wx.wxTE_MULTILINE) -- On créer un bouton pour appeler la wxFontDialog. local bouton = wx.wxButton(panel, -1, "font") -- Construction du Sizer principal. local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) -- On range tout dans le Sizer principal. mainSizer:Add(staticBoxSizer, 0 , wx.wxALL, 10) mainSizer:Add(textCtrl, 3 , wx.wxGROW + wx.wxALL, 10) mainSizer:Add(bouton, 0, wx.wxALIGN_CENTER + wx.wxBOTTOM, 10) -- On affecte le Sizer principal au Panel panel:SetSizer(mainSizer) -- On fixe une taille minimale de la frame au démarrage. mainSizer:SetSizeHints(frame) mainSizer:Fit(frame) -------------------------------------------------------------------- -- Si on "clic sur le bouton "font", on affiche -- la boîte de dialogue. bouton:Connect(wx.wxEVT_LEFT_DOWN, function() local fontData = wx.wxFontData() local fontDialog = wx.wxFontDialog(frame, fontData) -- Si on "clic" sur le bouton "OK" de la boîte de dialogue. if (fontDialog:ShowModal() == wx.wxID_OK) then local data = fontDialog:GetFontData() local nlleFont = data:GetChosenFont() local nlleCouleurFont = data:GetColour() textCtrl:SetFont(nlleFont) textCtrl:SetForegroundColour(nlleCouleurFont) end end) -------------------------------------------------------------------- -- Démarrage de l'application. frame:Show(true) wx.wxGetApp():MainLoop()
Ce qui donne comme résultat.
Vous allez trouver dans le code suivant, un appel à: io.open().
Il s'agit de fonctions de base Lua.
Voir à ce sujet, le chapitre consacré à ce langage.
La procédure pour sauvegarder la nouvelle couleur d'une Font, est exactement la même que celle utilisée pour sauvegarder la nouvelle couleur d'une wxColourDialog...
Après avoir choisi une nouvelle couleur par: nlleFontCouleur = data:GetColour(), il suffit de faire ressortir les 3 couleurs fondamentales RVB, puis de les sauvegarder dans un fichier texte.
Pour la Font, le procédé est différent, car il existe deux méthodes spécialisées pour sauvegarder et restituer une Font.
La sauvegarde se fait par: nlleFont:GetNativeFontInfoDesc()
Et sa restitution par:
fontOrigine:SetNativeFontInfo(nom_de_la_Font_sauvegardée)
require("wx") -- inutile si on utilise wxluafreeze.exe --Création des variables locales, pour les trois couleurs RVB. local rouge = 0 local vert = 0 local bleu = 0 local nlleCouleur -- Création de la frame et de son panel. local frame = wx.wxFrame(wx.NULL, -1, "Nom de la frame") local panel = wx.wxPanel(frame, -1) frame:Centre(wx.wxBOTH) -- Affichage au centre de l'écran.
1/ On sauvegarde les nouvelles informations.
-- Si on clic sur le bouton "police", on affiche la boîte -- de dialogue. bouton:Connect(wx.wxEVT_LEFT_DOWN, function() local fontData=wx.wxFontData() local fontDialog = wx.wxFontDialog(textCtrl, fontData) --fontDialog:ShowModal() if (fontDialog:ShowModal() == wx.wxID_OK) then local data = fontDialog:GetFontData() font = data:GetChosenFont() fontCouleur = data:GetColour() end textCtrl:SetFont(font) textCtrl:SetForegroundColour(fontCouleur) textCtrl:AppendText("que je viens de modifier.") -- Sauvegarde de la nlleFont et de sa couleur. nlleFont = font:GetNativeFontInfoDesc() rouge = fontCouleur:Red() vert = fontCouleur:Green() bleu = fontCouleur:Blue() nlleFontCouleur = string.format("%3d,%3d,%3d", rouge, vert, bleu) -- On sauvegarde la nouvelle font et sa couleur dans -- un fichier. file = io.open("sauvegarde_font.txt", "w") file:write((nlleFont.."\n")) file:write((nlleFontCouleur)) file:close() end)
2/ On les restitue à la ré-ouverture du programme.
-- On ouvre le fichier de sauvegarde. file = io.open("sauvegarde_font.txt", "r") nlleFont = file:read() nlleFontCouleur = file:read() file:close() -- Sélection de la font. font = wx.wxFont(10, wx.wxFONTFAMILY_MODERN, wx.wxFONTSTYLE_NORMAL, wx.wxFONTWEIGHT_NORMAL, false, "Comic sans MS") if (nlleFont == nil) then textCtrl:SetFont(font) textCtrl:AppendText("Ceci est le texte écrit avec la Font d'origine... ") else -- Utilisation de la font sauvegardée. font:SetNativeFontInfo(nlleFont) textCtrl:SetFont(font) if (nlleFontCouleur ~= nil) then rouge = tonumber(string.sub(nlleFontCouleur,1,3)) vert = tonumber(string.sub(nlleFontCouleur,5,7)) bleu = tonumber(string.sub(nlleFontCouleur,9,11)) textCtrl:SetForegroundColour(wx.wxColour(rouge, vert, bleu)) end textCtrl:AppendText("Ceci est le texte écrit avec la nouvelle Font.") end